uawdijnntqw1x1x1
IP : 216.73.216.177
Hostname : server.fattispazio.it
Kernel : Linux server.fattispazio.it 3.10.0-1160.144.1.el7.tuxcare.els4.x86_64 #1 SMP Tue Apr 7 08:40:40 UTC 2026 x86_64
Disable Function : None :)
OS : Linux
PATH:
/
home
/
poliximo
/
public_html
/
4690b
/
..
/
cli
/
..
/
215f5
/
..
/
da45a
/
administrator.zip
/
/
PKb��\V?V��#modules/mod_popular/mod_popular.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_popular * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the mod_popular functions only once. JLoader::register('ModPopularHelper', __DIR__ . '/helper.php'); // Get module data. $list = ModPopularHelper::getList($params); if ($params->get('automatic_title', 0)) { $module->title = ModPopularHelper::getTitle($params); } // Render the module require JModuleHelper::getLayoutPath('mod_popular', $params->get('layout', 'default')); PKb��\C��B B #modules/mod_popular/mod_popular.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_popular</name> <author>Joomla! Project</author> <creationDate>July 2004</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_POPULAR_XML_DESCRIPTION</description> <files> <filename module="mod_popular">mod_popular.php</filename> <folder>tmpl</folder> <filename>helper.php</filename> </files> <languages> <language tag="en-GB">en-GB.mod_popular.ini</language> <language tag="en-GB">en-GB.mod_popular.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_POPULAR" /> <config> <fields name="params"> <fieldset name="basic"> <field name="count" type="number" label="MOD_POPULAR_FIELD_COUNT_LABEL" description="MOD_POPULAR_FIELD_COUNT_DESC" default="5" filter="integer" /> <field name="catid" type="category" label="JCATEGORY" description="MOD_POPULAR_FIELD_CATEGORY_DESC" id="catid" extension="com_content" default="" filter="integer" > <option value="">JOPTION_ANY_CATEGORY</option> </field> <field name="user_id" type="list" label="MOD_POPULAR_FIELD_AUTHORS_LABEL" description="MOD_POPULAR_FIELD_AUTHORS_DESC" default="0" > <option value="0">MOD_POPULAR_FIELD_VALUE_ANYONE</option> <option value="by_me">MOD_POPULAR_FIELD_VALUE_ADDED_OR_MODIFIED_BY_ME</option> <option value="not_me">MOD_POPULAR_FIELD_VALUE_NOT_ADDED_OR_MODIFIED_BY_ME</option> </field> </fieldset> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> <field name="automatic_title" type="radio" label="COM_MODULES_FIELD_AUTOMATIC_TITLE_LABEL" description="COM_MODULES_FIELD_AUTOMATIC_TITLE_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> </fields> </config> </extension> PKb��\TU2ɖ�$modules/mod_popular/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_popular * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); ?> <div class="row-striped"> <?php if (count($list)) : ?> <?php foreach ($list as $i => $item) : ?> <?php // Calculate popular items ?> <?php $hits = (int) $item->hits; ?> <?php $hits_class = ($hits >= 10000 ? 'important' : ($hits >= 1000 ? 'warning' : ($hits >= 100 ? 'info' : ''))); ?> <div class="row-fluid"> <div class="span8 truncate"> <span class="badge badge-<?php echo $hits_class; ?> hasTooltip" title="<?php echo JHtml::_('tooltipText', 'JGLOBAL_HITS'); ?>"><?php echo $item->hits; ?></span> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time); ?> <?php endif; ?> <strong class="row-title" title="<?php echo htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8'); ?>"> <?php if ($item->link) : ?> <a href="<?php echo $item->link; ?>"> <?php echo htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8'); ?></a> <?php else : ?> <?php echo htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8'); ?> <?php endif; ?> </strong> </div> <div class="span4"> <div class="small pull-right hasTooltip" title="<?php echo JHtml::_('tooltipText', 'JGLOBAL_FIELD_CREATED_LABEL'); ?>"> <span class="icon-calendar" aria-hidden="true"></span> <?php echo JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC5')); ?> </div> </div> </div> <?php endforeach; ?> <?php else : ?> <div class="row-fluid"> <div class="span12"> <div class="alert"><?php echo JText::_('MOD_POPULAR_NO_MATCHING_RESULTS'); ?></div> </div> </div> <?php endif; ?> </div> PKb��\��Z�modules/mod_popular/helper.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_popular * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_content/models', 'ContentModel'); /** * Helper for mod_popular * * @since 1.6 */ abstract class ModPopularHelper { /** * Get a list of the most popular articles * * @param JObject &$params The module parameters. * * @return array */ public static function getList(&$params) { $user = JFactory::getuser(); // Get an instance of the generic articles model $model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true)); // Set List SELECT $model->setState('list.select', 'a.id, a.title, a.checked_out, a.checked_out_time, ' . ' a.created, a.hits'); // Set Ordering filter $model->setState('list.ordering', 'a.hits'); $model->setState('list.direction', 'DESC'); // Set Category Filter $categoryId = $params->get('catid', null); if (is_numeric($categoryId)) { $model->setState('filter.category_id', $categoryId); } // Set User Filter. $userId = $user->get('id'); switch ($params->get('user_id', '0')) { case 'by_me': $model->setState('filter.author_id', $userId); break; case 'not_me': $model->setState('filter.author_id', $userId); $model->setState('filter.author_id.include', false); break; } // Set the Start and Limit $model->setState('list.start', 0); $model->setState('list.limit', $params->get('count', 5)); $items = $model->getItems(); if ($error = $model->getError()) { JError::raiseError(500, $error); return false; } // Set the links foreach ($items as &$item) { if ($user->authorise('core.edit', 'com_content.article.' . $item->id)) { $item->link = JRoute::_('index.php?option=com_content&task=article.edit&id=' . $item->id); } else { $item->link = ''; } } return $items; } /** * Get the alternate title for the module * * @param JObject $params The module parameters. * * @return string The alternate title for the module. */ public static function getTitle($params) { $who = $params->get('user_id', '0'); $catid = (int) $params->get('catid', null); if ($catid) { $category = JCategories::getInstance('Content')->get($catid); if ($category) { $title = $category->title; } else { $title = JText::_('MOD_POPULAR_UNEXISTING'); } } else { $title = ''; } return JText::plural( 'MOD_POPULAR_TITLE' . ($catid ? '_CATEGORY' : '') . ($who != '0' ? "_$who" : ''), (int) $params->get('count', 5), $title ); } } PKb��\�Ҷu��modules/mod_menu/mod_menu.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_menu * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; // Include the module helper classes. JLoader::register('MenusHelper', JPATH_ADMINISTRATOR . '/components/com_menus/helpers/menus.php'); JLoader::register('ModMenuHelper', __DIR__ . '/helper.php'); JLoader::register('JAdminCssMenu', __DIR__ . '/menu.php'); /** @var Registry $params */ $lang = JFactory::getLanguage(); $user = JFactory::getUser(); $input = JFactory::getApplication()->input; $enabled = !$input->getBool('hidemainmenu'); $menu = new JAdminCssMenu($user); $menu->load($params, $enabled); // Render the module layout require JModuleHelper::getLayoutPath('mod_menu', $params->get('layout', 'default')); PKb��\d4֊ggmodules/mod_menu/mod_menu.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_menu</name> <author>Joomla! Project</author> <creationDate>March 2006</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_MENU_XML_DESCRIPTION</description> <files> <filename module="mod_menu">mod_menu.php</filename> <folder>preset</folder> <folder>tmpl</folder> <filename>helper.php</filename> <filename>menu.php</filename> </files> <languages> <language tag="en-GB">en-GB.mod_menu.ini</language> <language tag="en-GB">en-GB.mod_menu.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_MENU" /> <config> <fields name="params"> <fieldset name="basic"> <field name="menutype" type="menu" label="MOD_MENU_FIELD_MENUTYPE_LABEL" description="MOD_MENU_FIELD_MENUTYPE_DESC" clientid="1" > <option value="*">MOD_MENU_FIELD_MENUTYPE_OPTION_PREDEFINED</option> </field> <field name="preset" type="menuPreset" label="MOD_MENU_FIELD_PRESET_LABEL" description="MOD_MENU_FIELD_PRESET_DESC" addfieldpath="administrator/components/com_menus/models/fields" showon="menutype:*" /> <field name="check" type="radio" label="MOD_MENU_FIELD_CHECK_LABEL" description="MOD_MENU_FIELD_CHECK_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" showon="menutype!:*" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="shownew" type="radio" label="MOD_MENU_FIELD_SHOWNEW" description="MOD_MENU_FIELD_SHOWNEW_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" showon="menutype:*" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="showhelp" type="radio" label="MOD_MENU_FIELD_SHOWHELP" description="MOD_MENU_FIELD_SHOWHELP_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" showon="menutype:*" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="forum_url" type="url" label="MOD_MENU_FIELD_FORUMURL_LABEL" description="MOD_MENU_FIELD_FORUMURL_DESC" filter="url" size="30" default="" showon="menutype:*" validate="url" /> </fieldset> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> </fieldset> </fields> </config> </extension> PKb��\à��22modules/mod_menu/menu.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_menu * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\CMS\Factory; use Joomla\CMS\Log\Log; use Joomla\CMS\Menu\Node; use Joomla\CMS\Menu\Tree; use Joomla\CMS\Menu\MenuHelper; use Joomla\CMS\User\User; use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; /** * Tree based class to render the admin menu * * @since 1.5 */ class JAdminCssMenu { /** * The Menu tree object * * @var Tree * @since 3.8.0 */ protected $tree; /** * The module options * * @var Registry * @since 3.8.0 */ protected $params; /** * The menu bar state * * @var bool * @since 3.8.0 */ protected $enabled; /** * The current user * * @var User * @since 3.9.1 */ protected $user; /** * JAdminCssMenu constructor. * * @param User|null $user The current user * * @since 3.9.1 */ public function __construct(User $user = null) { if ($user === null) { Log::add( sprintf( 'Not passing a %s instance into the %s constructor is deprecated. As of 4.0, it will be required.', 'Joomla\CMS\User\User', __CLASS__ ), Log::WARNING, 'deprecated' ); $user = Factory::getUser(); } $this->user = $user; } /** * Get the current menu tree * * @return Tree * * @since 3.8.0 */ public function getTree() { if (!$this->tree) { $this->tree = new Tree; } return $this->tree; } /** * Populate the menu items in the menu tree object * * @param Registry $params Menu configuration parameters * @param bool $enabled Whether the menu should be enabled or disabled * * @return void * * @since 3.7.0 */ public function load($params, $enabled) { $this->tree = $this->getTree(); $this->params = $params; $this->enabled = $enabled; $menutype = $this->params->get('menutype', '*'); if ($menutype === '*') { $name = $this->params->get('preset', 'joomla'); $levels = MenuHelper::loadPreset($name); } else { $items = MenusHelper::getMenuItems($menutype, true); if ($this->enabled && $this->params->get('check', 1)) { if ($this->check($items, $this->params)) { $this->params->set('recovery', true); // In recovery mode, load the preset inside a special root node. $this->tree->addChild(new Node\Heading('MOD_MENU_RECOVERY_MENU_ROOT'), true); $levels = MenuHelper::loadPreset('joomla'); $levels = $this->preprocess($levels); $this->populateTree($levels); $this->tree->addChild(new Node\Separator); // Add link to exit recovery mode $uri = clone JUri::getInstance(); $uri->setVar('recover_menu', 0); $this->tree->addChild(new Node\Url('MOD_MENU_RECOVERY_EXIT', $uri->toString())); $this->tree->getParent(); } } $levels = MenuHelper::createLevels($items); } $levels = $this->preprocess($levels); $this->populateTree($levels); } /** * Method to render a given level of a menu using provided layout file * * @param string $layoutFile The layout file to be used to render * * @return void * * @since 3.8.0 */ public function renderSubmenu($layoutFile) { if (is_file($layoutFile)) { $children = $this->tree->getCurrent()->getChildren(); foreach ($children as $child) { $this->tree->setCurrent($child); // This sets the scope to this object for the layout file and also isolates other `include`s require $layoutFile; } } } /** * Check the flat list of menu items for important links * * @param array $items The menu items array * @param Registry $params Module options * * @return boolean Whether to show recovery menu * * @since 3.8.0 */ protected function check($items, Registry $params) { $authMenus = $this->user->authorise('core.manage', 'com_menus'); $authModules = $this->user->authorise('core.manage', 'com_modules'); if (!$authMenus && !$authModules) { return false; } $app = JFactory::getApplication(); $types = ArrayHelper::getColumn($items, 'type'); $elements = ArrayHelper::getColumn($items, 'element'); $rMenu = $authMenus && !in_array('com_menus', $elements); $rModule = $authModules && !in_array('com_modules', $elements); $rContainer = !in_array('container', $types); if ($rMenu || $rModule || $rContainer) { $recovery = $app->getUserStateFromRequest('mod_menu.recovery', 'recover_menu', 0, 'int'); if ($recovery) { return true; } $missing = array(); if ($rMenu) { $missing[] = JText::_('MOD_MENU_IMPORTANT_ITEM_MENU_MANAGER'); } if ($rModule) { $missing[] = JText::_('MOD_MENU_IMPORTANT_ITEM_MODULE_MANAGER'); } if ($rContainer) { $missing[] = JText::_('MOD_MENU_IMPORTANT_ITEM_COMPONENTS_CONTAINER'); } $uri = clone JUri::getInstance(); $uri->setVar('recover_menu', 1); $table = JTable::getInstance('MenuType'); $menutype = $params->get('menutype'); $table->load(array('menutype' => $menutype)); $menutype = $table->get('title', $menutype); $message = JText::sprintf('MOD_MENU_IMPORTANT_ITEMS_INACCESSIBLE_LIST_WARNING', $menutype, implode(', ', $missing), $uri); $app->enqueueMessage($message, 'warning'); } return false; } /** * Filter and perform other preparatory tasks for loaded menu items based on access rights and module configurations for display * * @param \stdClass[] $items The levelled array of menu item objects * * @return array * * @since 3.8.0 */ protected function preprocess($items) { $result = array(); $language = JFactory::getLanguage(); $noSeparator = true; // Call preprocess for the menu items on plugins. // Plugins should normally process the current level only unless their logic needs deep levels too. $dispatcher = JEventDispatcher::getInstance(); $dispatcher->trigger('onPreprocessMenuItems', array('com_menus.administrator.module', &$items, $this->params, $this->enabled)); foreach ($items as $i => &$item) { // Exclude item with menu item option set to exclude from menu modules if ($item->params->get('menu_show', 1) == 0) { continue; } $item->scope = isset($item->scope) ? $item->scope : 'default'; $item->icon = isset($item->icon) ? $item->icon : ''; // Whether this scope can be displayed. Applies only to preset items. Db driven items should use un/published state. if (($item->scope === 'help' && !$this->params->get('showhelp', 1)) || ($item->scope === 'edit' && !$this->params->get('shownew', 1))) { continue; } if (substr($item->link, 0, 8) === 'special:') { $special = substr($item->link, 8); if ($special === 'language-forum') { $item->link = 'index.php?option=com_admin&view=help&layout=langforum'; } elseif ($special === 'custom-forum') { $item->link = $this->params->get('forum_url'); } } // Exclude item if is not enabled if ($item->element && !JComponentHelper::isEnabled($item->element)) { continue; } // Exclude Mass Mail if disabled in global configuration if ($item->scope === 'massmail' && (JFactory::getApplication()->get('massmailoff', 0) == 1)) { continue; } // Exclude item if the component is not authorised $assetName = $item->element; if ($item->element === 'com_categories') { parse_str($item->link, $query); $assetName = isset($query['extension']) ? $query['extension'] : 'com_content'; } elseif ($item->element === 'com_fields') { parse_str($item->link, $query); // Only display Fields menus when enabled in the component $createFields = null; if (isset($query['context'])) { $createFields = JComponentHelper::getParams(strstr($query['context'], '.', true))->get('custom_fields_enable', 1); } if (!$createFields) { continue; } list($assetName) = isset($query['context']) ? explode('.', $query['context'], 2) : array('com_fields'); } // Special case for components which only allow super user access elseif (in_array($item->element, array('com_config', 'com_privacy', 'com_actionlogs'), true) && !$this->user->authorise('core.admin')) { continue; } elseif ($item->element === 'com_joomlaupdate' && !$this->user->authorise('core.admin')) { continue; } elseif ($item->element === 'com_admin') { parse_str($item->link, $query); if (isset($query['view']) && $query['view'] === 'sysinfo' && !$this->user->authorise('core.admin')) { continue; } } if ($assetName && !$this->user->authorise(($item->scope === 'edit') ? 'core.create' : 'core.manage', $assetName)) { continue; } // Exclude if link is invalid if (!in_array($item->type, array('separator', 'heading', 'container')) && trim($item->link) === '') { continue; } // Process any children if exists $item->submenu = $this->preprocess($item->submenu); // Populate automatic children for container items if ($item->type === 'container') { $exclude = (array) $item->params->get('hideitems') ?: array(); $components = MenusHelper::getMenuItems('main', false, $exclude); $item->components = MenuHelper::createLevels($components); $item->components = $this->preprocess($item->components); $item->components = ArrayHelper::sortObjects($item->components, 'text', 1, false, true); } // Exclude if there are no child items under heading or container if (in_array($item->type, array('heading', 'container')) && empty($item->submenu) && empty($item->components)) { continue; } // Remove repeated and edge positioned separators, It is important to put this check at the end of any logical filtering. if ($item->type === 'separator') { if ($noSeparator) { continue; } $noSeparator = true; } else { $noSeparator = false; } // Ok we passed everything, load language at last only if ($item->element) { $language->load($item->element . '.sys', JPATH_ADMINISTRATOR, null, false, true) || $language->load($item->element . '.sys', JPATH_ADMINISTRATOR . '/components/' . $item->element, null, false, true); } if ($item->type === 'separator' && $item->params->get('text_separator') == 0) { $item->title = ''; } $item->text = JText::_($item->title); $result[$i] = $item; } // If last one was a separator remove it too. if ($noSeparator && isset($i)) { unset($result[$i]); } return $result; } /** * Load the menu items from a hierarchical list of items into the menu tree * * @param stdClass[] $levels Menu items as a hierarchical list format * * @return void * * @since 3.8.0 */ protected function populateTree($levels) { foreach ($levels as $item) { $class = $this->enabled ? $item->class : 'disabled'; if ($item->type === 'separator') { $this->tree->addChild(new Node\Separator($item->title)); } elseif ($item->type === 'heading') { // We already excluded heading type menu item with no children. $this->tree->addChild(new Node\Heading($item->title, $class, null, $item->icon), $this->enabled); if ($this->enabled) { $this->populateTree($item->submenu); $this->tree->getParent(); } } elseif ($item->type === 'url') { $cNode = new Node\Url($item->title, $item->link, $item->browserNav, $class, null, $item->icon); $this->tree->addChild($cNode, $this->enabled); if ($this->enabled) { $this->populateTree($item->submenu); $this->tree->getParent(); } } elseif ($item->type === 'component') { $cNode = new Node\Component($item->title, $item->element, $item->link, $item->browserNav, $class, null, $item->icon); $this->tree->addChild($cNode, $this->enabled); if ($this->enabled) { $this->populateTree($item->submenu); $this->tree->getParent(); } } elseif ($item->type === 'container') { // We already excluded container type menu item with no children. $this->tree->addChild(new Node\Container($item->title, $item->class, null, $item->icon), $this->enabled); if ($this->enabled) { $this->populateTree($item->submenu); // Add a separator between dynamic menu items and components menu items if (count($item->submenu) && count($item->components)) { $this->tree->addChild(new Node\Separator); } $this->populateTree($item->components); $this->tree->getParent(); } } } } } PKb��\c�v� *modules/mod_menu/tmpl/default_disabled.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_menu * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $showhelp = $params->get('showhelp', 1); /** * Site SubMenu **/ $menu->addChild(new JMenuNode(JText::_('MOD_MENU_SYSTEM'), null, 'disabled')); /** * Users Submenu **/ if ($user->authorise('core.manage', 'com_users')) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_USERS'), null, 'disabled')); } /** * Menus Submenu **/ if ($user->authorise('core.manage', 'com_menus')) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_MENUS'), null, 'disabled')); } /** * Content Submenu **/ if ($user->authorise('core.manage', 'com_content')) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_CONTENT'), null, 'disabled')); } /** * Components Submenu **/ // Get the authorised components and sub-menus. $components = ModMenuHelper::getComponents(true); // Check if there are any components, otherwise, don't display the components menu item if ($components) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COMPONENTS'), null, 'disabled')); } /** * Extensions Submenu **/ $im = $user->authorise('core.manage', 'com_installer'); $mm = $user->authorise('core.manage', 'com_modules'); $pm = $user->authorise('core.manage', 'com_plugins'); $tm = $user->authorise('core.manage', 'com_templates'); $lm = $user->authorise('core.manage', 'com_languages'); if ($im || $mm || $pm || $tm || $lm) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_EXTENSIONS'), null, 'disabled')); } /** * Help Submenu **/ if ($showhelp == 1) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP'), null, 'disabled')); } PKb��\Ʉ��.�.)modules/mod_menu/tmpl/default_enabled.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_menu * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /* @var $menu JAdminCSSMenu */ $shownew = (boolean) $params->get('shownew', 1); $showhelp = $params->get('showhelp', 1); $user = JFactory::getUser(); $lang = JFactory::getLanguage(); /* * Site Submenu */ $menu->addChild(new JMenuNode(JText::_('MOD_MENU_SYSTEM'), '#'), true); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_CONTROL_PANEL'), 'index.php', 'class:cpanel')); if ($user->authorise('core.admin')) { $menu->addSeparator(); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_CONFIGURATION'), 'index.php?option=com_config', 'class:config')); } if ($user->authorise('core.manage', 'com_checkin')) { $menu->addSeparator(); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_GLOBAL_CHECKIN'), 'index.php?option=com_checkin', 'class:checkin')); } if ($user->authorise('core.manage', 'com_cache')) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_CLEAR_CACHE'), 'index.php?option=com_cache', 'class:clear')); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_PURGE_EXPIRED_CACHE'), 'index.php?option=com_cache&view=purge', 'class:purge')); } if ($user->authorise('core.admin')) { $menu->addSeparator(); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_SYSTEM_INFORMATION'), 'index.php?option=com_admin&view=sysinfo', 'class:info')); } $menu->getParent(); /* * Users Submenu */ if ($user->authorise('core.manage', 'com_users')) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_USERS_USERS'), '#'), true); $createUser = $shownew && $user->authorise('core.create', 'com_users'); $createGrp = $user->authorise('core.admin', 'com_users'); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_USERS_USER_MANAGER'), 'index.php?option=com_users&view=users', 'class:user'), $createUser); if ($createUser) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_USERS_ADD_USER'), 'index.php?option=com_users&task=user.add', 'class:newarticle')); $menu->getParent(); } if ($createGrp) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_USERS_GROUPS'), 'index.php?option=com_users&view=groups', 'class:groups'), $createUser); if ($createUser) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_USERS_ADD_GROUP'), 'index.php?option=com_users&task=group.add', 'class:newarticle')); $menu->getParent(); } $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_USERS_LEVELS'), 'index.php?option=com_users&view=levels', 'class:levels'), $createUser); if ($createUser) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_USERS_ADD_LEVEL'), 'index.php?option=com_users&task=level.add', 'class:newarticle')); $menu->getParent(); } } $menu->addSeparator(); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_USERS_NOTES'), 'index.php?option=com_users&view=notes', 'class:user-note'), $createUser); if ($createUser) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_USERS_ADD_NOTE'), 'index.php?option=com_users&task=note.add', 'class:newarticle')); $menu->getParent(); } $menu->addChild( new JMenuNode( JText::_('MOD_MENU_COM_USERS_NOTE_CATEGORIES'), 'index.php?option=com_categories&view=categories&extension=com_users', 'class:category'), $createUser ); if ($createUser) { $menu->addChild( new JMenuNode( JText::_('MOD_MENU_COM_CONTENT_NEW_CATEGORY'), 'index.php?option=com_categories&task=category.add&extension=com_users', 'class:newarticle' ) ); $menu->getParent(); } if (JFactory::getApplication()->get('massmailoff') != 1) { $menu->addSeparator(); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_MASS_MAIL_USERS'), 'index.php?option=com_users&view=mail', 'class:massmail')); } $menu->getParent(); } /* * Menus Submenu */ if ($user->authorise('core.manage', 'com_menus')) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_MENUS'), '#'), true); $createMenu = $shownew && $user->authorise('core.create', 'com_menus'); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_MENU_MANAGER'), 'index.php?option=com_menus&view=menus', 'class:menumgr'), $createMenu); if ($createMenu) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_MENU_MANAGER_NEW_MENU'), 'index.php?option=com_menus&view=menu&layout=edit', 'class:newarticle')); $menu->getParent(); } $menu->addSeparator(); // Menu Types $menuTypes = ModMenuHelper::getMenus(); $menuTypes = JArrayHelper::sortObjects($menuTypes, 'title', 1, false); foreach ($menuTypes as $menuType) { $alt = '*' . $menuType->sef . '*'; if ($menuType->home == 0) { $titleicon = ''; } elseif ($menuType->home == 1 && $menuType->language == '*') { $titleicon = ' <span class="icon-home"></span>'; } elseif ($menuType->home > 1) { $titleicon = ' <span>' . JHtml::_('image', 'mod_languages/icon-16-language.png', $menuType->home, array('title' => JText::_('MOD_MENU_HOME_MULTIPLE')), true) . '</span>'; } else { $image = JHtml::_('image', 'mod_languages/' . $menuType->image . '.gif', null, null, true, true); if (!$image) { $image = JHtml::_('image', 'mod_languages/icon-16-language.png', $alt, array('title' => $menuType->title_native), true); } else { $image = JHtml::_('image', 'mod_languages/' . $menuType->image . '.gif', $alt, array('title' => $menuType->title_native), true); } $titleicon = ' <span>' . $image . '</span>'; } $menu->addChild( new JMenuNode( $menuType->title, 'index.php?option=com_menus&view=items&menutype=' . $menuType->menutype, 'class:menu', null, null, $titleicon ), $createMenu ); if ($createMenu) { $menu->addChild( new JMenuNode( JText::_('MOD_MENU_MENU_MANAGER_NEW_MENU_ITEM'), 'index.php?option=com_menus&view=item&layout=edit&menutype=' . $menuType->menutype, 'class:newarticle') ); $menu->getParent(); } } $menu->getParent(); } /* * Content Submenu */ if ($user->authorise('core.manage', 'com_content')) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_CONTENT'), '#'), true); $createContent = $shownew && $user->authorise('core.create', 'com_content'); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_CONTENT_ARTICLE_MANAGER'), 'index.php?option=com_content', 'class:article'), $createContent); if ($createContent) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_CONTENT_NEW_ARTICLE'), 'index.php?option=com_content&task=article.add', 'class:newarticle') ); $menu->getParent(); } $menu->addChild( new JMenuNode( JText::_('MOD_MENU_COM_CONTENT_CATEGORY_MANAGER'), 'index.php?option=com_categories&extension=com_content', 'class:category'), $createContent ); if ($createContent) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_CONTENT_NEW_CATEGORY'), 'index.php?option=com_categories&task=category.add&extension=com_content', 'class:newarticle') ); $menu->getParent(); } $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COM_CONTENT_FEATURED'), 'index.php?option=com_content&view=featured', 'class:featured')); if ($user->authorise('core.manage', 'com_media')) { $menu->addSeparator(); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_MEDIA_MANAGER'), 'index.php?option=com_media', 'class:media')); } $menu->getParent(); } /* * Components Submenu */ // Get the authorised components and sub-menus. $components = ModMenuHelper::getComponents(true); // Check if there are any components, otherwise, don't render the menu if ($components) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COMPONENTS'), '#'), true); foreach ($components as &$component) { if (!empty($component->submenu)) { // This component has a db driven submenu. $menu->addChild(new JMenuNode($component->text, $component->link, $component->img), true); foreach ($component->submenu as $sub) { $menu->addChild(new JMenuNode($sub->text, $sub->link, $sub->img)); } $menu->getParent(); } else { $menu->addChild(new JMenuNode($component->text, $component->link, $component->img)); } } $menu->getParent(); } /* * Extensions Submenu */ $im = $user->authorise('core.manage', 'com_installer'); $mm = $user->authorise('core.manage', 'com_modules'); $pm = $user->authorise('core.manage', 'com_plugins'); $tm = $user->authorise('core.manage', 'com_templates'); $lm = $user->authorise('core.manage', 'com_languages'); if ($im || $mm || $pm || $tm || $lm) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_EXTENSIONS'), '#'), true); if ($im) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_EXTENSION_MANAGER'), 'index.php?option=com_installer', 'class:install')); } if ($im && ($mm || $pm || $tm || $lm)) { $menu->addSeparator(); } if ($mm) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_MODULE_MANAGER'), 'index.php?option=com_modules', 'class:module')); } if ($pm) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_PLUGIN_MANAGER'), 'index.php?option=com_plugins', 'class:plugin')); } if ($tm) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_TEMPLATE_MANAGER'), 'index.php?option=com_templates', 'class:themes')); } if ($lm) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_LANGUAGE_MANAGER'), 'index.php?option=com_languages', 'class:language')); } $menu->getParent(); } /* * Help Submenu */ if ($showhelp == 1) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP'), '#'), true); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_JOOMLA'), 'index.php?option=com_admin&view=help', 'class:help')); $menu->addSeparator(); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_SUPPORT_OFFICIAL_FORUM'), 'http://forum.joomla.org', 'class:help-forum', false, '_blank')); if ($forum_url = $params->get('forum_url')) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_SUPPORT_CUSTOM_FORUM'), $forum_url, 'class:help-forum', false, '_blank')); } $debug = $lang->setDebug(false); if ($lang->hasKey('MOD_MENU_HELP_SUPPORT_OFFICIAL_LANGUAGE_FORUM_VALUE') && JText::_('MOD_MENU_HELP_SUPPORT_OFFICIAL_LANGUAGE_FORUM_VALUE') != '') { $forum_url = 'http://forum.joomla.org/viewforum.php?f=' . (int) JText::_('MOD_MENU_HELP_SUPPORT_OFFICIAL_LANGUAGE_FORUM_VALUE'); $lang->setDebug($debug); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_SUPPORT_OFFICIAL_LANGUAGE_FORUM'), $forum_url, 'class:help-forum', false, '_blank')); } $lang->setDebug($debug); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_DOCUMENTATION'), 'https://docs.joomla.org', 'class:help-docs', false, '_blank')); $menu->addSeparator(); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_EXTENSIONS'), 'http://extensions.joomla.org', 'class:help-jed', false, '_blank')); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_TRANSLATIONS'), 'http://community.joomla.org/translations.html', 'class:help-trans', false, '_blank') ); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_RESOURCES'), 'http://resources.joomla.org', 'class:help-jrd', false, '_blank')); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_COMMUNITY'), 'http://community.joomla.org', 'class:help-community', false, '_blank')); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_SECURITY'), 'http://developer.joomla.org/security-centre.html', 'class:help-security', false, '_blank') ); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_DEVELOPER'), 'http://developer.joomla.org', 'class:help-dev', false, '_blank')); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_XCHANGE'), 'http://joomla.stackexchange.com', 'class:help-dev', false, '_blank')); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_SHOP'), 'http://shop.joomla.org', 'class:help-shop', false, '_blank')); $menu->getParent(); } PKb��\sI^U!modules/mod_menu/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_menu * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $doc = JFactory::getDocument(); $direction = $doc->direction == 'rtl' ? 'pull-right' : ''; $class = $enabled ? 'nav ' . $direction : 'nav disabled ' . $direction; // Recurse through children of root node if they exist $menuTree = $menu->getTree(); $root = $menuTree->reset(); if ($root->hasChildren()) { echo '<ul id="menu" class="' . $class . '">' . "\n"; // WARNING: Do not use direct 'include' or 'require' as it is important to isolate the scope for each call $menu->renderSubmenu(JModuleHelper::getLayoutPath('mod_menu', 'default_submenu')); echo "</ul>\n"; echo '<ul id="nav-empty" class="dropdown-menu nav-empty hidden-phone"></ul>'; if ($css = $menuTree->getCss()) { $doc->addStyleDeclaration(implode("\n", $css)); } } PKb��\;Լ�modules/mod_menu/helper.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_menu * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Helper for mod_menu * * @since 1.5 */ abstract class ModMenuHelper { /** * Get a list of the available menus. * * @return array An array of the available menus (from the menu types table). * * @since 1.6 */ public static function getMenus() { $db = JFactory::getDbo(); // Search for home menu and language if exists $subQuery = $db->getQuery(true) ->select('b.menutype, b.home, b.language, l.image, l.sef, l.title_native') ->from('#__menu AS b') ->leftJoin('#__languages AS l ON l.lang_code = b.language') ->where('b.home != 0') ->where('(b.client_id = 0 OR b.client_id IS NULL)'); // Get all menu types with optional home menu and language $query = $db->getQuery(true) ->select('a.id, a.asset_id, a.menutype, a.title, a.description, a.client_id') ->select('c.home, c.language, c.image, c.sef, c.title_native') ->from('#__menu_types AS a') ->leftJoin('(' . (string) $subQuery . ') c ON c.menutype = a.menutype') ->order('a.id'); $db->setQuery($query); try { $result = $db->loadObjectList(); } catch (RuntimeException $e) { $result = array(); JFactory::getApplication()->enqueueMessage(JText::sprintf('JERROR_LOADING_MENUS', $e->getMessage()), 'error'); } return $result; } } PKb��\����UU!modules/mod_logged/mod_logged.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_logged * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include dependencies. JLoader::register('ModLoggedHelper', __DIR__ . '/helper.php'); $users = ModLoggedHelper::getList($params); if ($params->get('automatic_title', 0)) { $module->title = ModLoggedHelper::getTitle($params); } require JModuleHelper::getLayoutPath('mod_logged', $params->get('layout', 'default')); PKb��\ ��uu!modules/mod_logged/mod_logged.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_logged</name> <author>Joomla! Project</author> <creationDate>January 2005</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_LOGGED_XML_DESCRIPTION</description> <files> <filename module="mod_logged">mod_logged.php</filename> <folder>tmpl</folder> </files> <languages> <language tag="en-GB">en-GB.mod_logged.ini</language> <language tag="en-GB">en-GB.mod_logged.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_LOGGED" /> <config> <fields name="params"> <fieldset name="basic"> <field name="count" type="number" label="MOD_LOGGED_FIELD_COUNT_LABEL" description="MOD_LOGGED_FIELD_COUNT_DESC" default="5" filter="integer" /> <field name="name" type="list" label="MOD_LOGGED_NAME" description="MOD_LOGGED_FIELD_NAME_DESC" default="1" filter="integer" > <option value="1">MOD_LOGGED_NAME</option> <option value="0">JGLOBAL_USERNAME</option> </field> </fieldset> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> <field name="automatic_title" type="radio" label="COM_MODULES_FIELD_AUTOMATIC_TITLE_LABEL" description="COM_MODULES_FIELD_AUTOMATIC_TITLE_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> </fields> </config> </extension> PKb��\L��WW#modules/mod_logged/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_logged * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); ?> <div class="row-striped"> <?php foreach ($users as $user) : ?> <div class="row-fluid"> <div class="span8"> <?php if ($user->client_id == 0) : ?> <a title="<?php echo JHtml::_('tooltipText', 'MOD_LOGGED_LOGOUT'); ?>" href="<?php echo $user->logoutLink; ?>" class="btn btn-danger btn-mini hasTooltip"> <span class="icon-remove icon-white" aria-hidden="true"><span class="element-invisible"><?php echo JText::_('JLOGOUT'); ?></span></span> </a> <?php endif; ?> <strong class="row-title"> <?php if (isset($user->editLink)) : ?> <a href="<?php echo $user->editLink; ?>" class="hasTooltip" title="<?php echo JHtml::_('tooltipText', 'JGRID_HEADING_ID'); ?> : <?php echo $user->id; ?>"> <?php echo $user->name; ?></a> <?php else : ?> <?php echo $user->name; ?> <?php endif; ?> </strong> <small class="small hasTooltip" title="<?php echo JHtml::_('tooltipText', 'JCLIENT'); ?>"> <?php if ($user->client_id === null) : ?> <?php // Don't display a client ?> <?php elseif ($user->client_id) : ?> <?php echo JText::_('JADMINISTRATION'); ?> <?php else : ?> <?php echo JText::_('JSITE'); ?> <?php endif; ?> </small> </div> <div class="span4"> <div class="small pull-right hasTooltip" title="<?php echo JHtml::_('tooltipText', 'MOD_LOGGED_LAST_ACTIVITY'); ?>"> <span class="icon-calendar" aria-hidden="true"></span> <?php echo JHtml::_('date', $user->time, JText::_('DATE_FORMAT_LC5')); ?> </div> </div> </div> <?php endforeach; ?> </div> PKb��\ X�MMmodules/mod_logged/helper.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_logged * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Helper for mod_logged * * @since 1.5 */ abstract class ModLoggedHelper { /** * Get a list of logged users. * * @param \Joomla\Registry\Registry &$params The module parameters. * * @return mixed An array of users, or false on error. * * @throws RuntimeException */ public static function getList(&$params) { $db = JFactory::getDbo(); $user = JFactory::getUser(); $query = $db->getQuery(true) ->select('s.time, s.client_id, u.id, u.name, u.username') ->from('#__session AS s') ->join('LEFT', '#__users AS u ON s.userid = u.id') ->where('s.guest = 0'); $db->setQuery($query, 0, $params->get('count', 5)); try { $results = $db->loadObjectList(); } catch (RuntimeException $e) { throw $e; } foreach ($results as $k => $result) { $results[$k]->logoutLink = ''; if ($user->authorise('core.manage', 'com_users')) { $results[$k]->editLink = JRoute::_('index.php?option=com_users&task=user.edit&id=' . $result->id); $results[$k]->logoutLink = JRoute::_('index.php?option=com_login&task=logout&uid=' . $result->id . '&' . JSession::getFormToken() . '=1'); } if ($params->get('name', 1) == 0) { $results[$k]->name = $results[$k]->username; } } return $results; } /** * Get the alternate title for the module * * @param \Joomla\Registry\Registry $params The module parameters. * * @return string The alternate title for the module. */ public static function getTitle($params) { return JText::plural('MOD_LOGGED_TITLE', $params->get('count', 5)); } } PKb��\E_�}}$modules/mod_version/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_version * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <?php if (!empty($version)) : ?> <p class="text-center"><?php echo $version; ?></p> <?php endif; ?> PKb��\��z�modules/mod_version/helper.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_version * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Helper for mod_version * * @since 1.6 */ abstract class ModVersionHelper { /** * Get the member items of the submenu. * * @param \Joomla\Registry\Registry &$params The parameters object. * * @return string String containing the current Joomla version based on the selected format. */ public static function getVersion(&$params) { $version = new JVersion; $versionText = $version->getShortVersion(); $product = $params->get('product', 1); if ($params->get('format', 'short') === 'long') { $versionText = str_replace($version::PRODUCT . ' ', '', $version->getLongVersion()); } if (!empty($product)) { $versionText = $version::PRODUCT . ' ' . $versionText; } return $versionText; } } PKb��\2n��yy8modules/mod_version/language/en-GB/en-GB.mod_version.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_VERSION="Joomla! Version Information" MOD_VERSION_FORMAT_DESC="The long version includes code name and date." MOD_VERSION_FORMAT_LABEL="Version Format" MOD_VERSION_FORMAT_LONG="Long" MOD_VERSION_FORMAT_SHORT="Short" MOD_VERSION_PRODUCT_DESC="Include Joomla! name when using short format." MOD_VERSION_PRODUCT_LABEL="Show Joomla!" MOD_VERSION_XML_DESCRIPTION="This module displays the Joomla! version."PKb��\\��{{<modules/mod_version/language/en-GB/en-GB.mod_version.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_VERSION="Joomla! Version Information" MOD_VERSION_LAYOUT_DEFAULT="Default" MOD_VERSION_XML_DESCRIPTION="This module displays the Joomla! version." PKb��\���3 #modules/mod_version/mod_version.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_version</name> <author>Joomla! Project</author> <creationDate>January 2012</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_VERSION_XML_DESCRIPTION</description> <files> <filename module="mod_version">mod_version.php</filename> <folder>language</folder> <folder>tmpl</folder> <filename>helper.php</filename> </files> <languages> <language tag="en-GB">language/en-GB/en-GB.mod_version.ini</language> <language tag="en-GB">language/en-GB/en-GB.mod_version.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_VERSION" /> <config> <fields name="params"> <fieldset name="basic"> <field name="format" type="list" label="MOD_VERSION_FORMAT_LABEL" description="MOD_VERSION_FORMAT_DESC" default="short" > <option value="short">MOD_VERSION_FORMAT_SHORT</option> <option value="long">MOD_VERSION_FORMAT_LONG</option> </field> <field name="product" type="radio" label="MOD_VERSION_PRODUCT_LABEL" description="MOD_VERSION_PRODUCT_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> </fieldset> </fields> </config> </extension> PKb��\G��M��#modules/mod_version/mod_version.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_version * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('ModVersionHelper', __DIR__ . '/helper.php'); $version = ModVersionHelper::getVersion($params); require JModuleHelper::getLayoutPath('mod_version', $params->get('layout', 'default')); PKb��\����w w #modules/mod_status/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_status * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $hideLinks = $input->getBool('hidemainmenu'); $task = $input->getCmd('task'); $output = array(); // Print the Preview link to Main site. if ($params->get('show_viewsite', 1)) { // Gets the FrontEnd Main page Uri $frontEndUri = JUri::getInstance(JUri::root()); $frontEndUri->setScheme(((int) JFactory::getApplication()->get('force_ssl', 0) === 2) ? 'https' : 'http'); $output[] = '<div class="btn-group viewsite">' . '<a href="' . $frontEndUri->toString() . '" target="_blank">' . '<span class="icon-out-2" aria-hidden="true"></span>' . JText::_('JGLOBAL_VIEW_SITE') . '</a>' . '<span class="btn-group separator"></span>' . '</div>'; } // Print the link to open a new Administrator window. if ($params->get('show_viewadmin', 0)) { $output[] = '<div class="btn-group viewsite">' . '<a href="' . JUri::base() . 'index.php" target="_blank">' . '<span class="icon-out-2" aria-hidden="true"></span>' . JText::_('MOD_STATUS_FIELD_LINK_VIEWADMIN_LABEL') . '</a>' . '<span class="btn-group separator"></span>' . '</div>'; } // Print logged in user count based on the shared session state if (JFactory::getConfig()->get('shared_session', '0')) { // Print the frontend logged in users. if ($params->get('show_loggedin_users', 1)) { $output[] = '<div class="btn-group loggedin-users">' . '<span class="badge">' . $total_users . '</span>' . JText::plural('MOD_STATUS_TOTAL_USERS', $total_users) . '<span class="btn-group separator"></span>' . '</div>'; } } else { // Print the frontend logged in users. if ($params->get('show_loggedin_users', 1)) { $output[] = '<div class="btn-group loggedin-users">' . '<span class="badge">' . $online_num . '</span>' . JText::plural('MOD_STATUS_USERS', $online_num) . '<span class="btn-group separator"></span>' . '</div>'; } // Print the backend logged in users. if ($params->get('show_loggedin_users_admin', 1)) { $output[] = '<div class="btn-group backloggedin-users">' . '<span class="badge">' . $count . '</span>' . JText::plural('MOD_STATUS_BACKEND_USERS', $count) . '<span class="btn-group separator"></span>' . '</div>'; } } // Print the inbox message. if ($params->get('show_messages', 1)) { $active = $unread ? ' badge-warning' : ''; $output[] = '<div class="btn-group ' . $inboxClass . '">' . ($hideLinks ? '' : '<a href="' . $inboxLink . '">') . '<span class="badge' . $active . '">' . $unread . '</span>' . JText::plural('MOD_STATUS_MESSAGES_LABEL', $unread) . ($hideLinks ? '' : '</a>') . '<span class="btn-group separator"></span>' . '</div>'; } // Print the logout link. if ($task == 'edit' || $task == 'editA' || $input->getInt('hidemainmenu')) { $logoutLink = ''; } else { $logoutLink = JRoute::_('index.php?option=com_login&task=logout&' . JSession::getFormToken() . '=1'); } if ($params->get('show_logout', 1)) { $output[] = '<div class="btn-group logout">' . ($hideLinks ? '' : '<a href="' . $logoutLink . '">') . '<span class="icon-minus-2" aria-hidden="true"></span>' . JText::_('JLOGOUT') . ($hideLinks ? '' : '</a>') . '</div>'; } // Output the items. foreach ($output as $item) { echo $item; } PKb��\X�H�!modules/mod_status/mod_status.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_status</name> <author>Joomla! Project</author> <creationDate>February 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_STATUS_XML_DESCRIPTION</description> <files> <filename module="mod_status">mod_status.php</filename> <folder>tmpl</folder> </files> <languages> <language tag="en-GB">en-GB.mod_status.ini</language> <language tag="en-GB">en-GB.mod_status.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_STATUS" /> <config> <fields name="params"> <fieldset name="basic"> <field name="show_viewsite" type="radio" label="MOD_STATUS_FIELD_SHOW_VIEWSITE_LABEL" description="MOD_STATUS_FIELD_SHOW_VIEWSITE_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_viewadmin" type="radio" label="MOD_STATUS_FIELD_SHOW_VIEWADMIN_LABEL" description="MOD_STATUS_FIELD_SHOW_VIEWADMIN_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_loggedin_users" type="radio" label="MOD_STATUS_FIELD_SHOW_LOGGEDIN_USERS_LABEL" description="MOD_STATUS_FIELD_SHOW_LOGGEDIN_USERS_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_loggedin_users_admin" type="radio" label="MOD_STATUS_FIELD_SHOW_LOGGEDIN_USERS_ADMIN_LABEL" description="MOD_STATUS_FIELD_SHOW_LOGGEDIN_USERS_ADMIN_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_messages" type="radio" label="MOD_STATUS_FIELD_SHOW_MESSAGES_LABEL" description="MOD_STATUS_FIELD_SHOW_MESSAGES_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> </fieldset> </fields> </config> </extension> PKb��\<�����!modules/mod_status/mod_status.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_status * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $config = JFactory::getConfig(); $user = JFactory::getUser(); $db = JFactory::getDbo(); $lang = JFactory::getLanguage(); $input = JFactory::getApplication()->input; // Get the number of unread messages in your inbox. $query = $db->getQuery(true) ->select('COUNT(*)') ->from('#__messages') ->where('state = 0 AND user_id_to = ' . (int) $user->get('id')); $db->setQuery($query); $unread = (int) $db->loadResult(); $count = 0; // Get the number of backend logged in users if shared sessions is not enabled. if (!$config->get('shared_session', '0')) { $query->clear() ->select('COUNT(session_id)') ->from('#__session') ->where('guest = 0 AND client_id = 1'); $db->setQuery($query); $count = (int) $db->loadResult(); } // Set the inbox link. if ($input->getBool('hidemainmenu')) { $inboxLink = ''; } else { $inboxLink = JRoute::_('index.php?option=com_messages'); } // Set the inbox class. if ($unread) { $inboxClass = 'unread-messages'; } else { $inboxClass = 'no-unread-messages'; } $online_num = 0; // Get the number of frontend logged in users if shared sessions is not enabled. if (!$config->get('shared_session', '0')) { $query->clear() ->select('COUNT(session_id)') ->from('#__session') ->where('guest = 0 AND client_id = 0'); $db->setQuery($query); $online_num = (int) $db->loadResult(); } $total_users = 0; // Get the number of logged in users if shared sessions is enabled. if ($config->get('shared_session', '0')) { $query->clear() ->select('COUNT(session_id)') ->from('#__session') ->where('guest = 0'); $db->setQuery($query); $total_users = (int) $db->loadResult(); } require JModuleHelper::getLayoutPath('mod_status', $params->get('layout', 'default')); PKb��\pz���+modules/mod_stats_admin/mod_stats_admin.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_stats_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the mod_stats functions only once JLoader::register('ModStatsHelper', __DIR__ . '/helper.php'); $serverinfo = $params->get('serverinfo'); $siteinfo = $params->get('siteinfo'); $list = ModStatsHelper::getStats($params); $moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'), ENT_COMPAT, 'UTF-8'); require JModuleHelper::getLayoutPath('mod_stats_admin', $params->get('layout', 'default')); PKb��\4�3n��(modules/mod_stats_admin/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_stats_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('jquery.framework'); JFactory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function($) { $("a.js-revert").on("click", function(e) { e.preventDefault(); e.stopPropagation(); var activeTab = []; activeTab.push("#" + e.target.href.split("#")[1]); var path = window.location.pathname; localStorage.removeItem(e.target.href.replace(/&return=[a-zA-Z0-9%]+/, "").replace(/&[a-zA-Z-_]+=[0-9]+/, "")); localStorage.setItem(path + e.target.href.split("index.php")[1].split("#")[0], JSON.stringify(activeTab)); return window.location.href = e.target.href.split("#")[0]; }); }); '); ?> <div class="row-striped"> <?php foreach ($list as $item) : ?> <div class="row-fluid"> <div class="span4"> <span class="icon-<?php echo $item->icon; ?>" aria-hidden="true"></span> <?php echo $item->title; ?> </div> <div class="span8"> <?php if (isset($item->link)) : ?> <a class="btn btn-info btn-small js-revert" href="<?php echo $item->link; ?>"><?php echo $item->data; ?></a> <?php else : ?> <?php echo $item->data; ?> <?php endif; ?> </div> </div> <?php endforeach; ?> </div> PKb��\83�"modules/mod_stats_admin/helper.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_stats_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Helper class for admin stats module * * @since 3.0 */ class ModStatsHelper { /** * Method to retrieve information about the site * * @param JObject &$params Params object * * @return array Array containing site information * * @since 3.0 */ public static function getStats(&$params) { $app = JFactory::getApplication(); $db = JFactory::getDbo(); $rows = array(); $query = $db->getQuery(true); $serverinfo = $params->get('serverinfo', 0); $siteinfo = $params->get('siteinfo', 0); $counter = $params->get('counter', 0); $increase = $params->get('increase', 0); $i = 0; if ($serverinfo) { $rows[$i] = new stdClass; $rows[$i]->title = JText::_('MOD_STATS_OS'); $rows[$i]->icon = 'screen'; $rows[$i]->data = substr(php_uname(), 0, 7); $i++; $rows[$i] = new stdClass; $rows[$i]->title = JText::_('MOD_STATS_PHP'); $rows[$i]->icon = 'cogs'; $rows[$i]->data = phpversion(); $i++; $rows[$i] = new stdClass; $rows[$i]->title = JText::_($db->name); $rows[$i]->icon = 'database'; $rows[$i]->data = $db->getVersion(); $i++; $rows[$i] = new stdClass; $rows[$i]->title = JText::_('MOD_STATS_TIME'); $rows[$i]->icon = 'clock'; $rows[$i]->data = JHtml::_('date', 'now', 'H:i'); $i++; $rows[$i] = new stdClass; $rows[$i]->title = JText::_('MOD_STATS_CACHING'); $rows[$i]->icon = 'dashboard'; $rows[$i]->data = $app->get('caching') ? JText::_('JENABLED') : JText::_('JDISABLED'); $i++; $rows[$i] = new stdClass; $rows[$i]->title = JText::_('MOD_STATS_GZIP'); $rows[$i]->icon = 'lightning'; $rows[$i]->data = $app->get('gzip') ? JText::_('JENABLED') : JText::_('JDISABLED'); $i++; } if ($siteinfo) { $query->select('COUNT(id) AS count_users') ->from('#__users'); $db->setQuery($query); try { $users = $db->loadResult(); } catch (RuntimeException $e) { $users = false; } $query->clear() ->select('COUNT(id) AS count_items') ->from('#__content') ->where('state = 1'); $db->setQuery($query); try { $items = $db->loadResult(); } catch (RuntimeException $e) { $items = false; } if ($users) { $rows[$i] = new stdClass; $rows[$i]->title = JText::_('MOD_STATS_USERS'); $rows[$i]->icon = 'users'; $rows[$i]->data = $users; $rows[$i]->link = JRoute::_('index.php?option=com_users'); $i++; } if ($items) { $rows[$i] = new stdClass; $rows[$i]->title = JText::_('MOD_STATS_ARTICLES'); $rows[$i]->icon = 'file'; $rows[$i]->data = $items; $rows[$i]->link = JRoute::_('index.php?option=com_content&view=articles&filter[published]=1'); $i++; } } if ($counter) { $query->clear() ->select('SUM(hits) AS count_hits') ->from('#__content') ->where('state = 1'); $db->setQuery($query); try { $hits = $db->loadResult(); } catch (RuntimeException $e) { $hits = false; } if ($hits) { $rows[$i] = new stdClass; $rows[$i]->title = JText::_('MOD_STATS_ARTICLES_VIEW_HITS'); $rows[$i]->icon = 'eye'; $rows[$i]->data = number_format($hits + $increase, 0, JText::_('DECIMALS_SEPARATOR'), JText::_('THOUSANDS_SEPARATOR')); $i++; } } // Include additional data defined by published system plugins JPluginHelper::importPlugin('system'); $app = JFactory::getApplication(); $arrays = (array) $app->triggerEvent('onGetStats', array('mod_stats_admin')); foreach ($arrays as $response) { foreach ($response as $row) { // We only add a row if the title and data are given if (isset($row['title']) && isset($row['data'])) { $rows[$i] = new stdClass; $rows[$i]->title = $row['title']; $rows[$i]->icon = isset($row['icon']) ? $row['icon'] : 'info'; $rows[$i]->data = $row['data']; $rows[$i]->link = isset($row['link']) ? $row['link'] : null; $i++; } } } return $rows; } } PKb��\ ��`��:modules/mod_stats_admin/language/en-GB.mod_stats_admin.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_STATS_ADMIN="Statistics" MOD_STATS_ARTICLES="Articles" MOD_STATS_ARTICLES_VIEW_HITS="Articles View Hits" MOD_STATS_CACHING="Caching" MOD_STATS_FIELD_COUNTER_DESC="Display hit counter." MOD_STATS_FIELD_COUNTER_LABEL="Hit Counter" MOD_STATS_FIELD_INCREASECOUNTER_DESC="Enter the number of hits to increase the counter by." MOD_STATS_FIELD_INCREASECOUNTER_LABEL="Increase Counter" MOD_STATS_FIELD_SERVERINFO_DESC="Display server information." MOD_STATS_FIELD_SERVERINFO_LABEL="Server Information" MOD_STATS_FIELD_SITEINFO_DESC="Display site information." MOD_STATS_FIELD_SITEINFO_LABEL="Site Information" MOD_STATS_GZIP="Gzip" MOD_STATS_OS="OS" MOD_STATS_PHP="PHP" MOD_STATS_TIME="Time" MOD_STATS_USERS="Users" MOD_STATS_WEBLINKS="Web Links" MOD_STATS_XML_DESCRIPTION="The Statistics Module shows information about your server installation together with statistics on the website users and the number of Articles in your database." PKb��\�<�o��>modules/mod_stats_admin/language/en-GB.mod_stats_admin.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_STATS_ADMIN="Statistics" MOD_STATS_XML_DESCRIPTION="The Statistics Module shows information about your server installation together with statistics on the website users and the number of Articles in your database." MOD_STATS_LAYOUT_DEFAULT="Default" PKb��\�Ƚ��+modules/mod_stats_admin/mod_stats_admin.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_stats_admin</name> <author>Joomla! Project</author> <creationDate>July 2004</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_STATS_XML_DESCRIPTION</description> <files> <filename module="mod_stats_admin">mod_stats_admin.php</filename> <folder>tmpl</folder> <folder>language</folder> <filename>helper.php</filename> </files> <languages> <language tag="en-GB">en-GB.mod_stats.ini</language> <language tag="en-GB">en-GB.mod_stats.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_STATISTICS" /> <config> <fields name="params"> <fieldset name="basic"> <field name="serverinfo" type="radio" label="MOD_STATS_FIELD_SERVERINFO_LABEL" description="MOD_STATS_FIELD_SERVERINFO_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="siteinfo" type="radio" label="MOD_STATS_FIELD_SITEINFO_LABEL" description="MOD_STATS_FIELD_SITEINFO_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="counter" type="radio" label="MOD_STATS_FIELD_COUNTER_LABEL" description="MOD_STATS_FIELD_COUNTER_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="increase" type="number" label="MOD_STATS_FIELD_INCREASECOUNTER_LABEL" description="MOD_STATS_FIELD_INCREASECOUNTER_DESC" default="0" filter="integer" /> </fieldset> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> <field name="cache" type="list" label="COM_MODULES_FIELD_CACHING_LABEL" description="COM_MODULES_FIELD_CACHING_DESC" default="1" filter="integer" > <option value="1">JGLOBAL_USE_GLOBAL</option> <option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option> </field> <field name="cache_time" type="number" label="COM_MODULES_FIELD_CACHE_TIME_LABEL" description="COM_MODULES_FIELD_CACHE_TIME_DESC" default="900" filter="integer" /> <field name="cachemode" type="hidden" default="static" > <option value="static"></option> </field> </fieldset> </fields> </config> </extension> PKb��\j?����modules/mod_login/mod_login.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_login</name> <author>Joomla! Project</author> <creationDate>March 2005</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_LOGIN_XML_DESCRIPTION</description> <files> <filename module="mod_login">mod_login.php</filename> <folder>tmpl</folder> <filename>helper.php</filename> </files> <languages> <language tag="en-GB">en-GB.mod_login.ini</language> <language tag="en-GB">en-GB.mod_login.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_LOGIN" /> <config> <fields name="params"> <fieldset name="basic"> <field name="usesecure" type="radio" label="MOD_LOGIN_FIELD_USESECURE_LABEL" description="MOD_LOGIN_FIELD_USESECURE_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> </fieldset> </fields> </config> </extension> PKb��\�}�J##"modules/mod_login/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_login * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.keepalive'); JHtml::_('bootstrap.tooltip'); // Load chosen if we have language selector, ie, more than one administrator language installed and enabled. if ($langs) { JHtml::_('formbehavior.chosen', '.advancedSelect'); } ?> <form action="<?php echo JRoute::_('index.php', true, $params->get('usesecure', 0)); ?>" method="post" id="form-login" class="form-inline"> <fieldset class="loginform"> <div class="control-group"> <div class="controls"> <div class="input-prepend input-append"> <span class="add-on"> <span class="icon-user hasTooltip" title="<?php echo JText::_('JGLOBAL_USERNAME'); ?>"></span> <label for="mod-login-username" class="element-invisible"> <?php echo JText::_('JGLOBAL_USERNAME'); ?> </label> </span> <input name="username" tabindex="1" id="mod-login-username" type="text" class="input-medium" placeholder="<?php echo JText::_('JGLOBAL_USERNAME'); ?>" size="15" autofocus="true" /> <a href="<?php echo JUri::root(); ?>index.php?option=com_users&view=remind" class="btn width-auto hasTooltip" title="<?php echo JText::_('MOD_LOGIN_REMIND'); ?>"> <span class="icon-help"></span> </a> </div> </div> </div> <div class="control-group"> <div class="controls"> <div class="input-prepend input-append"> <span class="add-on"> <span class="icon-lock hasTooltip" title="<?php echo JText::_('JGLOBAL_PASSWORD'); ?>"></span> <label for="mod-login-password" class="element-invisible"> <?php echo JText::_('JGLOBAL_PASSWORD'); ?> </label> </span> <input name="passwd" tabindex="2" id="mod-login-password" type="password" class="input-medium" placeholder="<?php echo JText::_('JGLOBAL_PASSWORD'); ?>" size="15"/> <a href="<?php echo JUri::root(); ?>index.php?option=com_users&view=reset" class="btn width-auto hasTooltip" title="<?php echo JText::_('MOD_LOGIN_RESET'); ?>"> <span class="icon-help"></span> </a> </div> </div> </div> <?php if (count($twofactormethods) > 1): ?> <div class="control-group"> <div class="controls"> <div class="input-prepend input-append"> <span class="add-on"> <span class="icon-star hasTooltip" title="<?php echo JText::_('JGLOBAL_SECRETKEY'); ?>"></span> <label for="mod-login-secretkey" class="element-invisible"> <?php echo JText::_('JGLOBAL_SECRETKEY'); ?> </label> </span> <input name="secretkey" autocomplete="off" tabindex="3" id="mod-login-secretkey" type="text" class="input-medium" placeholder="<?php echo JText::_('JGLOBAL_SECRETKEY'); ?>" size="15"/> <span class="btn width-auto hasTooltip" title="<?php echo JText::_('JGLOBAL_SECRETKEY_HELP'); ?>"> <span class="icon-help"></span> </span> </div> </div> </div> <?php endif; ?> <?php if (!empty($langs)) : ?> <div class="control-group"> <div class="controls"> <div class="input-prepend"> <span class="add-on"> <span class="icon-comment hasTooltip" title="<?php echo JHtml::_('tooltipText', 'MOD_LOGIN_LANGUAGE'); ?>"></span> <label for="lang" class="element-invisible"> <?php echo JText::_('MOD_LOGIN_LANGUAGE'); ?> </label> </span> <?php echo $langs; ?> </div> </div> </div> <?php endif; ?> <div class="control-group"> <div class="controls"> <div class="btn-group"> <button tabindex="5" class="btn btn-primary btn-block btn-large login-button"> <span class="icon-lock icon-white"></span> <?php echo JText::_('MOD_LOGIN_LOGIN'); ?> </button> </div> </div> </div> <input type="hidden" name="option" value="com_login"/> <input type="hidden" name="task" value="login"/> <input type="hidden" name="return" value="<?php echo $return; ?>"/> <?php echo JHtml::_('form.token'); ?> </fieldset> </form> PKb��\���''modules/mod_login/helper.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_login * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Helper for mod_login * * @since 1.6 */ abstract class ModLoginHelper { /** * Get an HTML select list of the available languages. * * @return string */ public static function getLanguageList() { $languages = JLanguageHelper::createLanguageList(null, JPATH_ADMINISTRATOR, false, true); if (count($languages) <= 1) { return ''; } usort( $languages, function ($a, $b) { return strcmp($a['value'], $b['value']); } ); // Fix wrongly set parentheses in RTL languages if (JFactory::getLanguage()->isRtl()) { foreach ($languages as &$language) { $language['text'] = $language['text'] . '‎'; } } array_unshift($languages, JHtml::_('select.option', '', JText::_('JDEFAULTLANGUAGE'))); return JHtml::_('select.genericlist', $languages, 'lang', 'class="advancedSelect" tabindex="4"', 'value', 'text', null); } /** * Get the redirect URI after login. * * @return string */ public static function getReturnUri() { $uri = JUri::getInstance(); $return = 'index.php' . $uri->toString(array('query')); if ($return != 'index.php?option=com_login') { return base64_encode($return); } else { return base64_encode('index.php'); } } /** * Creates a list of two factor authentication methods used in com_users * on user view * * @return array * * @deprecated 4.0 Use JAuthenticationHelper::getTwoFactorMethods() instead. */ public static function getTwoFactorMethods() { try { JLog::add( sprintf('%s() is deprecated, use JAuthenticationHelper::getTwoFactorMethods() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } return JAuthenticationHelper::getTwoFactorMethods(); } } PKb��\�tY��modules/mod_login/mod_login.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_login * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the login functions only once JLoader::register('ModLoginHelper', __DIR__ . '/helper.php'); $langs = ModLoginHelper::getLanguageList(); $twofactormethods = JAuthenticationHelper::getTwoFactorMethods(); $return = ModLoginHelper::getReturnUri(); require JModuleHelper::getLayoutPath('mod_login', $params->get('layout', 'default')); PKb��\�[h''$modules/mod_submenu/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_submenu * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div id="sidebar"> <div class="sidebar-nav"> <?php if ($displayMenu) : ?> <ul id="submenu" class="nav nav-list"> <?php foreach ($list as $item) : ?> <?php if (isset ($item[2]) && $item[2] == 1) : ?> <li class="active"> <?php else : ?> <li> <?php endif; ?> <?php if ($hide) : ?> <a class="nolink"><?php echo $item[0]; ?></a> <?php else : ?> <?php if (strlen($item[1])) : ?> <a href="<?php echo JFilterOutput::ampReplace($item[1]); ?>"><?php echo $item[0]; ?></a> <?php else : ?> <?php echo $item[0]; ?> <?php endif; ?> <?php endif; ?> </li> <?php endforeach; ?> </ul> <?php endif; ?> <?php if ($displayMenu && $displayFilters) : ?> <hr /> <?php endif; ?> <?php if ($displayFilters) : ?> <div class="filter-select hidden-phone"> <h4 class="page-header"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></h4> <form action="<?php echo JRoute::_($action); ?>" method="post"> <?php foreach ($filters as $filter) : ?> <label for="<?php echo $filter['name']; ?>" class="element-invisible"><?php echo $filter['label']; ?></label> <select name="<?php echo $filter['name']; ?>" id="<?php echo $filter['name']; ?>" class="span12 small" onchange="this.form.submit()"> <?php if (!$filter['noDefault']) : ?> <option value=""><?php echo $filter['label']; ?></option> <?php endif; ?> <?php echo $filter['options']; ?> </select> <hr class="hr-condensed" /> <?php endforeach; ?> </form> </div> <?php endif; ?> </div> </div> PKb��\�i��#modules/mod_submenu/mod_submenu.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_submenu * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $list = JSubMenuHelper::getEntries(); $filters = JSubMenuHelper::getFilters(); $action = JSubMenuHelper::getAction(); $displayMenu = count($list); $displayFilters = count($filters); $hide = JFactory::getApplication()->input->getBool('hidemainmenu'); if ($displayMenu || $displayFilters) { require JModuleHelper::getLayoutPath('mod_submenu', $params->get('layout', 'default')); } PKb��\W*]33#modules/mod_submenu/mod_submenu.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_submenu</name> <author>Joomla! Project</author> <creationDate>February 2006</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_SUBMENU_XML_DESCRIPTION</description> <files> <filename module="mod_submenu">mod_submenu.php</filename> <folder>tmpl</folder> </files> <languages> <language tag="en-GB">en-GB.mod_submenu.ini</language> <language tag="en-GB">en-GB.mod_submenu.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_SUBMENU" /> <config> <fields name="params"> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> </fieldset> </fields> </config> </extension> PKb��\x�%�66modules/mod_feed/mod_feed.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_feed * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the feed functions only once JLoader::register('ModFeedHelper', __DIR__ . '/helper.php'); $rssurl = $params->get('rssurl', ''); $rssrtl = $params->get('rssrtl', 0); // Check if feed URL has been set if (empty ($rssurl)) { echo '<div>'; echo JText::_('MOD_FEED_ERR_NO_URL'); echo '</div>'; return; } $feed = ModFeedHelper::getFeed($params); $moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'), ENT_COMPAT, 'UTF-8'); require JModuleHelper::getLayoutPath('mod_feed', $params->get('layout', 'default')); PKb��\C}�S S !modules/mod_feed/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_feed * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; if (!empty($feed) && is_string($feed)) { echo $feed; } else { $lang = JFactory::getLanguage(); $myrtl = $params->get('rssrtl', 0); $direction = ' '; if ($lang->isRtl() && $myrtl == 0) { $direction = ' redirect-rtl'; } // Feed description elseif ($lang->isRtl() && $myrtl == 1) { $direction = ' redirect-ltr'; } elseif ($lang->isRtl() && $myrtl == 2) { $direction = ' redirect-rtl'; } elseif ($myrtl == 0) { $direction = ' redirect-ltr'; } elseif ($myrtl == 1) { $direction = ' redirect-ltr'; } elseif ($myrtl == 2) { $direction = ' redirect-rtl'; } if ($feed != false) : // Image handling $iUrl = isset($feed->image) ? $feed->image : null; $iTitle = isset($feed->imagetitle) ? $feed->imagetitle : null; ?> <div style="direction: <?php echo $rssrtl ? 'rtl' :'ltr'; ?>; text-align: <?php echo $rssrtl ? 'right' :'left'; ?> !important" class="feed<?php echo $moduleclass_sfx; ?>"> <?php // Feed title if (!is_null($feed->title) && $params->get('rsstitle', 1)) : ?> <h2 class="<?php echo $direction; ?>"> <a href="<?php echo str_replace('&', '&', $rssurl); ?>" target="_blank"> <?php echo $feed->title; ?></a> </h2> <?php endif; // Feed date if ($params->get('rssdate', 1)) : ?> <h3> <?php echo JHtml::_('date', $feed->publishedDate, JText::_('DATE_FORMAT_LC3')); ?> </h3> <?php endif; ?> <!-- Feed description --> <?php if ($params->get('rssdesc', 1)) : ?> <?php echo $feed->description; ?> <?php endif; ?> <!-- Feed image --> <?php if ($params->get('rssimage', 1) && $iUrl) : ?> <img src="<?php echo $iUrl; ?>" alt="<?php echo @$iTitle; ?>"/> <?php endif; ?> <!-- Show items --> <?php if (!empty($feed)) : ?> <ul class="newsfeed<?php echo $params->get('moduleclass_sfx'); ?>"> <?php for ($i = 0; $i < $params->get('rssitems', 3); $i++) : if (!$feed->offsetExists($i)) : break; endif; $uri = $feed[$i]->uri || !$feed[$i]->isPermaLink ? trim($feed[$i]->uri) : trim($feed[$i]->guid); $uri = !$uri || stripos($uri, 'http') !== 0 ? $rssurl : $uri; $text = $feed[$i]->content !== '' ? trim($feed[$i]->content) : ''; ?> <li> <?php if (!empty($uri)) : ?> <h5 class="feed-link"> <a href="<?php echo $uri; ?>" target="_blank"> <?php echo trim($feed[$i]->title); ?></a></h5> <?php else : ?> <h5 class="feed-link"><?php echo $feed[$i]->title; ?></h5> <?php endif; ?> <?php if ($params->get('rssitemdate', 0)) : ?> <div class="feed-item-date"> <?php echo JHtml::_('date', $feed[$i]->publishedDate, JText::_('DATE_FORMAT_LC3')); ?> </div> <?php endif; ?> <?php if ($params->get('rssitemdesc', 1) && $text !== '') : ?> <div class="feed-item-description"> <?php // Strip the images. $text = JFilterOutput::stripImages($text); $text = JHtml::_('string.truncate', $text, $params->get('word_count', 0), true, false); echo str_replace(''', "'", $text); ?> </div> <?php endif; ?> </li> <?php endfor; ?> </ul> <?php endif; ?> </div> <?php endif; } PKb��\�_����modules/mod_feed/helper.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_feed * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Helper for mod_feed * * @since 1.5 */ class ModFeedHelper { /** * Method to load a feed. * * @param JRegisty $params The parameters object. * * @return JFeedReader|string Return a JFeedReader object or a string message if error. * * @since 1.5 */ public static function getFeed($params) { // Module params $rssurl = $params->get('rssurl', ''); // Get RSS parsed object try { jimport('joomla.feed.factory'); $feed = new JFeedFactory; $rssDoc = $feed->getFeed($rssurl); } catch (Exception $e) { return JText::_('MOD_FEED_ERR_FEED_NOT_RETRIEVED'); } if (empty($rssDoc)) { return JText::_('MOD_FEED_ERR_FEED_NOT_RETRIEVED'); } return $rssDoc; } } PKb��\�7wBBmodules/mod_feed/mod_feed.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_feed</name> <author>Joomla! Project</author> <creationDate>July 2005</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_FEED_XML_DESCRIPTION</description> <files> <filename module="mod_feed">mod_feed.php</filename> <filename>helper.php</filename> <folder>tmpl</folder> </files> <languages> <language tag="en-GB">en-GB.mod_feed.ini</language> <language tag="en-GB">en-GB.mod_feed.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_FEED" /> <config> <fields name="params"> <fieldset name="basic"> <field name="rssurl" type="url" label="MOD_FEED_FIELD_RSSURL_LABEL" description="MOD_FEED_FIELD_RSSURL_DESC" filter="url" size="50" required="true" validate="url" /> <field name="rssrtl" type="radio" label="MOD_FEED_FIELD_RTL_LABEL" description="MOD_FEED_FIELD_RTL_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="rsstitle" type="radio" label="MOD_FEED_FIELD_RSSTITLE_LABEL" description="MOD_FEED_FIELD_RSSTITLE_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="rssdate" type="radio" label="MOD_FEED_FIELD_DATE_LABEL" description="MOD_FEED_FIELD_DATE_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="rssdesc" type="radio" label="MOD_FEED_FIELD_DESCRIPTION_LABEL" description="MOD_FEED_FIELD_DESCRIPTION_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="rssimage" type="radio" label="MOD_FEED_FIELD_IMAGE_LABEL" description="MOD_FEED_FIELD_IMAGE_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="rssitems" type="number" label="MOD_FEED_FIELD_ITEMS_LABEL" description="MOD_FEED_FIELD_ITEMS_DESC" default="3" filter="integer" /> <field name="rssitemdesc" type="radio" label="MOD_FEED_FIELD_ITEMDESCRIPTION_LABEL" description="MOD_FEED_FIELD_ITEMDESCRIPTION_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="rssitemdate" type="radio" label="MOD_FEED_FIELD_ITEMDATE_LABEL" description="MOD_FEED_FIELD_ITEMDATE_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="word_count" type="number" label="MOD_FEED_FIELD_WORDCOUNT_LABEL" description="MOD_FEED_FIELD_WORDCOUNT_DESC" size="6" default="0" filter="integer" /> </fieldset> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> <field name="cache" type="list" label="COM_MODULES_FIELD_CACHING_LABEL" description="COM_MODULES_FIELD_CACHING_DESC" default="1" filter="integer" > <option value="1">JGLOBAL_USE_GLOBAL</option> <option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option> </field> <field name="cache_time" type="number" label="COM_MODULES_FIELD_CACHE_TIME_LABEL" description="COM_MODULES_FIELD_CACHE_TIME_DESC" default="900" filter="integer" /> </fieldset> </fields> </config> </extension> PKb��\��h8ww!modules/mod_latest/mod_latest.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_latest</name> <author>Joomla! Project</author> <creationDate>July 2004</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_LATEST_XML_DESCRIPTION</description> <files> <filename module="mod_latest">mod_latest.php</filename> <filename>helper.php</filename> <folder>tmpl</folder> </files> <languages> <language tag="en-GB">en-GB.mod_latest.ini</language> <language tag="en-GB">en-GB.mod_latest.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_LATEST" /> <config> <fields name="params"> <fieldset name="basic"> <field name="count" type="number" label="MOD_LATEST_FIELD_COUNT_LABEL" description="MOD_LATEST_FIELD_COUNT_DESC" default="5" filter="integer" /> <field name="ordering" type="list" label="MOD_LATEST_FIELD_ORDERING_LABEL" description="MOD_LATEST_FIELD_ORDERING_DESC" default="c_dsc" > <option value="c_dsc">MOD_LATEST_FIELD_VALUE_ORDERING_ADDED</option> <option value="m_dsc">MOD_LATEST_FIELD_VALUE_ORDERING_MODIFIED</option> </field> <field name="catid" type="category" label="JCATEGORY" description="MOD_LATEST_FIELD_CATEGORY_DESC" id="catid" extension="com_content" default="" filter="integer" > <option value="">JOPTION_ANY_CATEGORY</option> </field> <field name="user_id" type="list" label="MOD_LATEST_FIELD_AUTHORS_LABEL" description="MOD_LATEST_FIELD_AUTHORS_DESC" default="0" > <option value="0">MOD_LATEST_FIELD_VALUE_AUTHORS_ANYONE</option> <option value="by_me">MOD_LATEST_FIELD_VALUE_AUTHORS_BY_ME</option> <option value="not_me">MOD_LATEST_FIELD_VALUE_AUTHORS_NOT_BY_ME</option> </field> </fieldset> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> <field name="automatic_title" type="radio" label="COM_MODULES_FIELD_AUTOMATIC_TITLE_LABEL" description="COM_MODULES_FIELD_AUTOMATIC_TITLE_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> </fields> </config> </extension> PKb��\���QJJ#modules/mod_latest/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_latest * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); ?> <div class="row-striped"> <?php if (count($list)) : ?> <?php foreach ($list as $i => $item) : ?> <div class="row-fluid"> <div class="span8 truncate"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'articles.', false, 'cb', $item->publish_up, $item->publish_down); ?> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time); ?> <?php endif; ?> <strong class="row-title" title="<?php echo htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8'); ?>"> <?php if ($item->link) : ?> <a href="<?php echo $item->link; ?>"> <?php echo htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8'); ?></a> <?php else : ?> <?php echo htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8'); ?> <?php endif; ?> </strong> <small class="hasTooltip" title="<?php echo JHtml::_('tooltipText', 'MOD_LATEST_CREATED_BY'); ?>"> <?php echo $item->author_name; ?> </small> </div> <div class="span4"> <div class="small pull-right hasTooltip" title="<?php echo JHtml::_('tooltipText', 'JGLOBAL_FIELD_CREATED_LABEL'); ?>"> <span class="icon-calendar" aria-hidden="true"></span> <?php echo JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC5')); ?> </div> </div> </div> <?php endforeach; ?> <?php else : ?> <div class="row-fluid"> <div class="span12"> <div class="alert"><?php echo JText::_('MOD_LATEST_NO_MATCHING_RESULTS');?></div> </div> </div> <?php endif; ?> </div> PKb��\sq\��modules/mod_latest/helper.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_latest * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_content/models', 'ContentModel'); /** * Helper for mod_latest * * @since 1.5 */ abstract class ModLatestHelper { /** * Get a list of articles. * * @param \Joomla\Registry\Registry &$params The module parameters. * * @return mixed An array of articles, or false on error. */ public static function getList(&$params) { $user = JFactory::getuser(); // Get an instance of the generic articles model $model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true)); // Set List SELECT $model->setState('list.select', 'a.id, a.title, a.checked_out, a.checked_out_time, ' . ' a.access, a.created, a.created_by, a.created_by_alias, a.featured, a.state, a.publish_up, a.publish_down'); // Set Ordering filter switch ($params->get('ordering', 'c_dsc')) { case 'm_dsc': $model->setState('list.ordering', 'modified DESC, created'); $model->setState('list.direction', 'DESC'); break; case 'c_dsc': default: $model->setState('list.ordering', 'created'); $model->setState('list.direction', 'DESC'); break; } // Set Category Filter $categoryId = $params->get('catid', null); if (is_numeric($categoryId)) { $model->setState('filter.category_id', $categoryId); } // Set User Filter. $userId = $user->get('id'); switch ($params->get('user_id', '0')) { case 'by_me': $model->setState('filter.author_id', $userId); break; case 'not_me': $model->setState('filter.author_id', $userId); $model->setState('filter.author_id.include', false); break; } // Set the Start and Limit $model->setState('list.start', 0); $model->setState('list.limit', $params->get('count', 5)); $items = $model->getItems(); if ($error = $model->getError()) { JError::raiseError(500, $error); return false; } // Set the links foreach ($items as &$item) { if ($user->authorise('core.edit', 'com_content.article.' . $item->id)) { $item->link = JRoute::_('index.php?option=com_content&task=article.edit&id=' . $item->id); } else { $item->link = ''; } } return $items; } /** * Get the alternate title for the module. * * @param \Joomla\Registry\Registry $params The module parameters. * * @return string The alternate title for the module. */ public static function getTitle($params) { $who = $params->get('user_id', '0'); $catid = (int) $params->get('catid', null); $type = $params->get('ordering', 'c_dsc') == 'c_dsc' ? '_CREATED' : '_MODIFIED'; if ($catid) { $category = JCategories::getInstance('Content')->get($catid); if ($category) { $title = $category->title; } else { $title = JText::_('MOD_POPULAR_UNEXISTING'); } } else { $title = ''; } return JText::plural( 'MOD_LATEST_TITLE' . $type . ($catid ? '_CATEGORY' : '') . ($who != '0' ? "_$who" : ''), (int) $params->get('count', 5), $title ); } } PKb��\��Y�TT!modules/mod_latest/mod_latest.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_latest * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include dependencies. JLoader::register('ModLatestHelper', __DIR__ . '/helper.php'); $list = ModLatestHelper::getList($params); if ($params->get('automatic_title', 0)) { $module->title = ModLatestHelper::getTitle($params); } require JModuleHelper::getLayoutPath('mod_latest', $params->get('layout', 'default')); PKb��\^�<,,#modules/mod_custom/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_custom * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo $module->content; PKb��\}���!modules/mod_custom/mod_custom.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_custom</name> <author>Joomla! Project</author> <creationDate>July 2004</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_CUSTOM_XML_DESCRIPTION</description> <customContent /> <files> <filename module="mod_custom">mod_custom.php</filename> <folder>tmpl</folder> </files> <languages> <language tag="en-GB">en-GB.mod_custom.ini</language> <language tag="en-GB">en-GB.mod_custom.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_CUSTOM" /> <config> <fields name="params"> <fieldset name="options" label="COM_MODULES_BASIC_FIELDSET_LABEL"> <field name="prepare_content" type="radio" label="MOD_CUSTOM_FIELD_PREPARE_CONTENT_LABEL" description="MOD_CUSTOM_FIELD_PREPARE_CONTENT_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> <field name="cache" type="list" label="COM_MODULES_FIELD_CACHING_LABEL" description="COM_MODULES_FIELD_CACHING_DESC" default="1" filter="integer" > <option value="1">JGLOBAL_USE_GLOBAL</option> <option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option> </field> <field name="cache_time" type="number" label="COM_MODULES_FIELD_CACHE_TIME_LABEL" description="COM_MODULES_FIELD_CACHE_TIME_DESC" default="900" filter="integer" /> </fieldset> </fields> </config> </extension> PKb��\ }��!modules/mod_custom/mod_custom.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_custom * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; if ($params->def('prepare_content', 1)) { JPluginHelper::importPlugin('content'); $module->content = JHtml::_('content.prepare', $module->content, '', 'mod_custom.content'); } // Replace 'images/' to '../images/' when using an image from /images in backend. $module->content = preg_replace('*src\=\"(?!administrator\/)images/*', 'src="../images/', $module->content); require JModuleHelper::getLayoutPath('mod_custom', $params->get('layout', 'default')); PKb��\�p���#modules/mod_toolbar/mod_toolbar.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_toolbar * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $toolbar = JToolbar::getInstance('toolbar')->render('toolbar'); require JModuleHelper::getLayoutPath('mod_toolbar', $params->get('layout', 'default')); PKb��\���w::$modules/mod_toolbar/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_toolbar * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Echo the toolbar. echo $toolbar; PKb��\�M8@33#modules/mod_toolbar/mod_toolbar.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_toolbar</name> <author>Joomla! Project</author> <creationDate>November 2005</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_TOOLBAR_XML_DESCRIPTION</description> <files> <filename module="mod_toolbar">mod_toolbar.php</filename> <folder>tmpl</folder> </files> <languages> <language tag="en-GB">en-GB.mod_toolbar.ini</language> <language tag="en-GB">en-GB.mod_toolbar.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_TOOLBAR" /> <config> <fields name="params"> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> </fieldset> </fields> </config> </extension> PKb��\#�\��,modules/mod_multilangstatus/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_multilangstatus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include jQuery JHtml::_('jquery.framework'); // Use javascript to remove the modal added below from the current div and add it to the end of html body tag. JFactory::getDocument()->addScriptDeclaration(" jQuery(document).ready(function($) { var multilangueModal = $('#multiLangModal').clone(); $('#multiLangModal').remove(); $('body').append(multilangueModal); }); "); ?> <div class="btn-group multilanguage"> <a data-toggle="modal" href="#multiLangModal" title="<?php echo JText::_('MOD_MULTILANGSTATUS'); ?>" role="button"> <span class="icon-comment" aria-hidden="true"></span><?php echo JText::_('MOD_MULTILANGSTATUS'); ?> </a> <span class="btn-group separator"></span> </div> <?php echo JHtml::_( 'bootstrap.renderModal', 'multiLangModal', array( 'title' => JText::_('MOD_MULTILANGSTATUS'), 'url' => JRoute::_('index.php?option=com_languages&view=multilangstatus&tmpl=component'), 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JTOOLBAR_CLOSE') . '</button>', ) ); PKb��\Q�.~~3modules/mod_multilangstatus/mod_multilangstatus.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_multilangstatus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; require JModuleHelper::getLayoutPath('mod_multilangstatus', $params->get('layout', 'default')); PKb��\wEM��3modules/mod_multilangstatus/mod_multilangstatus.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_multilangstatus</name> <author>Joomla! Project</author> <creationDate>September 2011</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_MULTILANGSTATUS_XML_DESCRIPTION</description> <files> <filename module="mod_multilangstatus">mod_multilangstatus.php</filename> <folder>tmpl</folder> <folder>language</folder> </files> <languages> <language tag="en-GB">language/en-GB/en-GB.mod_multilangstatus.ini</language> <language tag="en-GB">language/en-GB/en-GB.mod_multilangstatus.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_MULTILANG" /> <config> <fields name="params"> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> </fieldset> </fields> </config> </extension> PKb��\���ssLmodules/mod_multilangstatus/language/en-GB/en-GB.mod_multilangstatus.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_MULTILANGSTATUS="Multilanguage Status" MOD_MULTILANGSTATUS_XML_DESCRIPTION="This module shows the status of the multilanguage parameters." PKb��\���ssHmodules/mod_multilangstatus/language/en-GB/en-GB.mod_multilangstatus.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_MULTILANGSTATUS="Multilanguage Status" MOD_MULTILANGSTATUS_XML_DESCRIPTION="This module shows the status of the multilanguage parameters." PKb��\�ߢ=='modules/mod_quickicon/mod_quickicon.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_quickicon</name> <author>Joomla! Project</author> <creationDate>November 2005</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_QUICKICON_XML_DESCRIPTION</description> <files> <filename module="mod_quickicon">mod_quickicon.php</filename> <folder>tmpl</folder> <filename>helper.php</filename> </files> <languages> <language tag="en-GB">en-GB.mod_quickicon.ini</language> <language tag="en-GB">en-GB.mod_quickicon.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_QUICKICON" /> <config> <fields name="params"> <fieldset name="basic"> <field name="context" type="text" label="MOD_QUICKICON_GROUP_LABEL" description="MOD_QUICKICON_GROUP_DESC" default="mod_quickicon" /> </fieldset> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> <field name="cache" type="list" label="COM_MODULES_FIELD_CACHING_LABEL" description="COM_MODULES_FIELD_CACHING_DESC" default="1" filter="integer" > <option value="1">JGLOBAL_USE_GLOBAL</option> <option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option> </field> <field name="cache_time" type="number" label="COM_MODULES_FIELD_CACHE_TIME_LABEL" description="COM_MODULES_FIELD_CACHE_TIME_DESC" default="900" filter="integer" /> </fieldset> </fields> </config> </extension> PKb��\���'modules/mod_quickicon/mod_quickicon.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_quickicon * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('ModQuickIconHelper', __DIR__ . '/helper.php'); $buttons = ModQuickIconHelper::getButtons($params); require JModuleHelper::getLayoutPath('mod_quickicon', $params->get('layout', 'default')); PKb��\��S���&modules/mod_quickicon/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_quickicon * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $html = JHtml::_('links.linksgroups', ModQuickIconHelper::groupButtons($buttons)); ?> <?php if (!empty($html)) : ?> <div class="sidebar-nav quick-icons"> <?php echo $html;?> </div> <?php endif;?> PKb��\�S*� modules/mod_quickicon/helper.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_quickicon * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Helper for mod_quickicon * * @since 1.6 */ abstract class ModQuickIconHelper { /** * Stack to hold buttons * * @since 1.6 */ protected static $buttons = array(); /** * Helper method to return button list. * * This method returns the array by reference so it can be * used to add custom buttons or remove default ones. * * @param JObject $params The module parameters. * * @return array An array of buttons * * @since 1.6 */ public static function &getButtons($params) { $key = (string) $params; if (!isset(self::$buttons[$key])) { $context = $params->get('context', 'mod_quickicon'); if ($context == 'mod_quickicon') { // Load mod_quickicon language file in case this method is called before rendering the module JFactory::getLanguage()->load('mod_quickicon'); self::$buttons[$key] = array( array( 'link' => JRoute::_('index.php?option=com_content&task=article.add'), 'image' => 'pencil-2', 'icon' => 'header/icon-48-article-add.png', 'text' => JText::_('MOD_QUICKICON_ADD_NEW_ARTICLE'), 'access' => array('core.manage', 'com_content', 'core.create', 'com_content'), 'group' => 'MOD_QUICKICON_CONTENT', ), array( 'link' => JRoute::_('index.php?option=com_content'), 'image' => 'stack', 'icon' => 'header/icon-48-article.png', 'text' => JText::_('MOD_QUICKICON_ARTICLE_MANAGER'), 'access' => array('core.manage', 'com_content'), 'group' => 'MOD_QUICKICON_CONTENT', ), array( 'link' => JRoute::_('index.php?option=com_categories&extension=com_content'), 'image' => 'folder', 'icon' => 'header/icon-48-category.png', 'text' => JText::_('MOD_QUICKICON_CATEGORY_MANAGER'), 'access' => array('core.manage', 'com_content'), 'group' => 'MOD_QUICKICON_CONTENT', ), array( 'link' => JRoute::_('index.php?option=com_media'), 'image' => 'pictures', 'icon' => 'header/icon-48-media.png', 'text' => JText::_('MOD_QUICKICON_MEDIA_MANAGER'), 'access' => array('core.manage', 'com_media'), 'group' => 'MOD_QUICKICON_CONTENT', ), array( 'link' => JRoute::_('index.php?option=com_menus'), 'image' => 'list-view', 'icon' => 'header/icon-48-menumgr.png', 'text' => JText::_('MOD_QUICKICON_MENU_MANAGER'), 'access' => array('core.manage', 'com_menus'), 'group' => 'MOD_QUICKICON_STRUCTURE', ), array( 'link' => JRoute::_('index.php?option=com_users'), 'image' => 'users', 'icon' => 'header/icon-48-user.png', 'text' => JText::_('MOD_QUICKICON_USER_MANAGER'), 'access' => array('core.manage', 'com_users'), 'group' => 'MOD_QUICKICON_USERS', ), array( 'link' => JRoute::_('index.php?option=com_modules'), 'image' => 'cube', 'icon' => 'header/icon-48-module.png', 'text' => JText::_('MOD_QUICKICON_MODULE_MANAGER'), 'access' => array('core.manage', 'com_modules'), 'group' => 'MOD_QUICKICON_STRUCTURE', ), array( 'link' => JRoute::_('index.php?option=com_config'), 'image' => 'cog', 'icon' => 'header/icon-48-config.png', 'text' => JText::_('MOD_QUICKICON_GLOBAL_CONFIGURATION'), 'access' => array('core.manage', 'com_config', 'core.admin', 'com_config'), 'group' => 'MOD_QUICKICON_CONFIGURATION', ), array( 'link' => JRoute::_('index.php?option=com_templates'), 'image' => 'eye', 'icon' => 'header/icon-48-themes.png', 'text' => JText::_('MOD_QUICKICON_TEMPLATE_MANAGER'), 'access' => array('core.manage', 'com_templates'), 'group' => 'MOD_QUICKICON_CONFIGURATION', ), array( 'link' => JRoute::_('index.php?option=com_languages'), 'image' => 'comments-2', 'icon' => 'header/icon-48-language.png', 'text' => JText::_('MOD_QUICKICON_LANGUAGE_MANAGER'), 'access' => array('core.manage', 'com_languages'), 'group' => 'MOD_QUICKICON_CONFIGURATION', ), array( 'link' => JRoute::_('index.php?option=com_installer'), 'image' => 'download', 'icon' => 'header/icon-48-extension.png', 'text' => JText::_('MOD_QUICKICON_INSTALL_EXTENSIONS'), 'access' => array('core.manage', 'com_installer'), 'group' => 'MOD_QUICKICON_EXTENSIONS', ), ); } else { self::$buttons[$key] = array(); } // Include buttons defined by published quickicon plugins JPluginHelper::importPlugin('quickicon'); $app = JFactory::getApplication(); $arrays = (array) $app->triggerEvent('onGetIcons', array($context)); foreach ($arrays as $response) { foreach ($response as $icon) { $default = array( 'link' => null, 'image' => 'cog', 'text' => null, 'access' => true, 'group' => 'MOD_QUICKICON_EXTENSIONS', ); $icon = array_merge($default, $icon); if (!is_null($icon['link']) && !is_null($icon['text'])) { self::$buttons[$key][] = $icon; } } } } return self::$buttons[$key]; } /** * Classifies the $buttons by group * * @param array $buttons The buttons * * @return array The buttons sorted by groups * * @since 3.2 */ public static function groupButtons($buttons) { $groupedButtons = array(); foreach ($buttons as $button) { $groupedButtons[$button['group']][] = $button; } return $groupedButtons; } /** * Get the alternate title for the module * * @param JObject $params The module parameters. * @param JObject $module The module. * * @return string The alternate title for the module. * * @deprecated 4.0 Unused. Title can be adjusted in module itself if needed. */ public static function getTitle($params, $module) { $key = $params->get('context', 'mod_quickicon') . '_title'; if (JFactory::getLanguage()->hasKey($key)) { return JText::_($key); } else { return $module->title; } } } PKb��\�?\\"modules/mod_title/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_title * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <?php if (!empty($title)) : ?> <?php echo $title; ?> <?php endif; ?> PKb��\��D~��modules/mod_title/mod_title.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_title * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Get the component title div if (isset(JFactory::getApplication()->JComponentTitle)) { $title = JFactory::getApplication()->JComponentTitle; } require JModuleHelper::getLayoutPath('mod_title', $params->get('layout', 'default')); PKb��\F%%modules/mod_title/mod_title.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3.1" client="administrator" method="upgrade"> <name>mod_title</name> <author>Joomla! Project</author> <creationDate>November 2005</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>MOD_TITLE_XML_DESCRIPTION</description> <files> <filename module="mod_title">mod_title.php</filename> <folder>tmpl</folder> </files> <languages> <language tag="en-GB">en-GB.mod_title.ini</language> <language tag="en-GB">en-GB.mod_title.sys.ini</language> </languages> <help key="JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_TITLE" /> <config> <fields name="params"> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> <field name="moduleclass_sfx" type="textarea" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" rows="3" /> </fieldset> </fields> </config> </extension> PKb��\x^Uw��help/en-GB/toc.jsonnu�[���{"COMPONENTS_ASSOCIATIONS":"COMPONENTS_ASSOCIATIONS","COMPONENTS_ASSOCIATIONS_EDIT":"COMPONENTS_ASSOCIATIONS_EDIT","COMPONENTS_BANNERS_BANNERS":"COMPONENTS_BANNERS_BANNERS","COMPONENTS_BANNERS_BANNERS_EDIT":"COMPONENTS_BANNERS_BANNERS_EDIT","COMPONENTS_BANNERS_CATEGORIES":"COMPONENTS_BANNERS_CATEGORIES","COMPONENTS_BANNERS_CATEGORY_EDIT":"COMPONENTS_BANNERS_CATEGORIES_EDIT","COMPONENTS_BANNERS_CLIENTS":"COMPONENTS_BANNERS_CLIENTS","COMPONENTS_BANNERS_CLIENTS_EDIT":"COMPONENTS_BANNERS_CLIENTS_EDIT","COMPONENTS_BANNERS_TRACKS":"COMPONENTS_BANNERS_TRACKS","COMPONENTS_CONTACTS_CONTACTS":"COMPONENTS_CONTACTS_CONTACTS","COMPONENTS_CONTACTS_CONTACTS_EDIT":"COMPONENTS_CONTACTS_CONTACTS_EDIT","COMPONENTS_CONTACT_CATEGORIES":"COMPONENTS_CONTACT_CATEGORIES","COMPONENTS_CONTACT_CATEGORY_EDIT":"COMPONENTS_CONTACT_CATEGORIES_EDIT","COMPONENTS_CONTENT_CATEGORIES":"COMPONENTS_CONTENT_CATEGORIES","COMPONENTS_CONTENT_CATEGORY_EDIT":"COMPONENTS_CONTENT_CATEGORIES_EDIT","COMPONENTS_FIELDS_FIELDS":"COMPONENTS_FIELDS_FIELDS","COMPONENTS_FIELDS_FIELDS_EDIT":"COMPONENTS_FIELDS_FIELDS_EDIT","COMPONENTS_FIELDS_FIELD_GROUPS":"COMPONENTS_FIELDS_FIELD_GROUPS","COMPONENTS_FIELDS_FIELD_GROUPS_EDIT":"COMPONENTS_FIELDS_FIELD_GROUPS_EDIT","COMPONENTS_FINDER_MANAGE_CONTENT_MAPS":"COMPONENTS_FINDER_MANAGE_CONTENT_MAPS","COMPONENTS_FINDER_MANAGE_INDEXED_CONTENT":"COMPONENTS_FINDER_MANAGE_INDEXED_CONTENT","COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS":"COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS","COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS_EDIT":"COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS_EDIT","COMPONENTS_JOOMLA_UPDATE":"COMPONENTS_JOOMLA_UPDATE","COMPONENTS_MESSAGING_INBOX":"COMPONENTS_MESSAGING_INBOX","COMPONENTS_MESSAGING_READ":"COMPONENTS_MESSAGING_READ","COMPONENTS_MESSAGING_WRITE":"COMPONENTS_MESSAGING_WRITE","COMPONENTS_NEWSFEEDS_CATEGORIES":"COMPONENTS_NEWSFEEDS_CATEGORIES","COMPONENTS_NEWSFEEDS_CATEGORY_EDIT":"COMPONENTS_NEWSFEEDS_CATEGORIES_EDIT","COMPONENTS_NEWSFEEDS_FEEDS":"COMPONENTS_NEWSFEEDS_FEEDS","COMPONENTS_NEWSFEEDS_FEEDS_EDIT":"COMPONENTS_NEWSFEEDS_FEEDS_EDIT","COMPONENTS_REDIRECT_MANAGER":"COMPONENTS_REDIRECT_MANAGER","COMPONENTS_REDIRECT_MANAGER_EDIT":"COMPONENTS_REDIRECT_MANAGER_EDIT","COMPONENTS_SEARCH":"COMPONENTS_SEARCH","COMPONENTS_TAGS_MANAGER":"COMPONENTS_TAGS_MANAGER","COMPONENTS_TAGS_MANAGER_EDIT":"COMPONENTS_TAGS_MANAGER_EDIT","COMPONENTS_WEBLINKS_CATEGORIES":"COMPONENTS_WEBLINKS_CATEGORIES","COMPONENTS_WEBLINKS_CATEGORY_EDIT":"COMPONENTS_WEBLINKS_CATEGORIES_EDIT","COMPONENTS_WEBLINKS_LINKS":"COMPONENTS_WEBLINKS_LINKS","COMPONENTS_WEBLINKS_LINKS_EDIT":"COMPONENTS_WEBLINKS_LINKS_EDIT","CONTENT_ARTICLE_MANAGER":"CONTENT_ARTICLE_MANAGER","CONTENT_ARTICLE_MANAGER_EDIT":"CONTENT_ARTICLE_MANAGER_EDIT","CONTENT_FEATURED_ARTICLES":"CONTENT_FEATURED_ARTICLES","CONTENT_MEDIA_MANAGER":"CONTENT_MEDIA_MANAGER","EXTENSIONS_EXTENSION_MANAGER_DATABASE":"EXTENSIONS_EXTENSION_MANAGER_DATABASE","EXTENSIONS_EXTENSION_MANAGER_DISCOVER":"EXTENSIONS_EXTENSION_MANAGER_DISCOVER","EXTENSIONS_EXTENSION_MANAGER_INSTALL":"EXTENSIONS_EXTENSION_MANAGER_INSTALL","EXTENSIONS_EXTENSION_MANAGER_LANGUAGES":"EXTENSIONS_EXTENSION_MANAGER_LANGUAGES","EXTENSIONS_EXTENSION_MANAGER_MANAGE":"EXTENSIONS_EXTENSION_MANAGER_MANAGE","EXTENSIONS_EXTENSION_MANAGER_UPDATE":"EXTENSIONS_EXTENSION_MANAGER_UPDATE","EXTENSIONS_EXTENSION_MANAGER_WARNINGS":"EXTENSIONS_EXTENSION_MANAGER_WARNINGS","EXTENSIONS_LANGUAGE_MANAGER_CONTENT":"EXTENSIONS_LANGUAGE_MANAGER_CONTENT","EXTENSIONS_LANGUAGE_MANAGER_EDIT":"EXTENSIONS_LANGUAGE_MANAGER_EDIT","EXTENSIONS_LANGUAGE_MANAGER_INSTALLED":"EXTENSIONS_LANGUAGE_MANAGER_INSTALLED","EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES":"EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES","EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES_EDIT":"EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES_EDIT","EXTENSIONS_MODULE_MANAGER":"EXTENSIONS_MODULE_MANAGER","EXTENSIONS_MODULE_MANAGER_EDIT":"EXTENSIONS_MODULE_MANAGER_EDIT","EXTENSIONS_PLUGIN_MANAGER":"EXTENSIONS_PLUGIN_MANAGER","EXTENSIONS_PLUGIN_MANAGER_EDIT":"EXTENSIONS_PLUGIN_MANAGER_EDIT","EXTENSIONS_TEMPLATE_MANAGER_STYLES":"EXTENSIONS_TEMPLATE_MANAGER_STYLES","EXTENSIONS_TEMPLATE_MANAGER_STYLES_EDIT":"EXTENSIONS_TEMPLATE_MANAGER_STYLES_EDIT","EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES":"EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES","EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES_EDIT":"EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES_EDIT","EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES_EDIT_SOURCE":"EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES_EDIT_SOURCE","MENUS_MENU_ITEM_MANAGER":"MENUS_MENU_ITEM_MANAGER","MENUS_MENU_ITEM_MANAGER_EDIT":"MENUS_MENU_ITEM_MANAGER_EDIT","MENUS_MENU_MANAGER":"MENUS_MENU_MANAGER","MENUS_MENU_MANAGER_EDIT":"MENUS_MENU_MANAGER_EDIT","SITE_GLOBAL_CONFIGURATION":"SITE_GLOBAL_CONFIGURATION","SITE_MAINTENANCE_CLEAR_CACHE":"SITE_MAINTENANCE_CLEAR_CACHE","SITE_MAINTENANCE_GLOBAL_CHECK-IN":"SITE_MAINTENANCE_GLOBAL_CHECK-IN","SITE_MAINTENANCE_PURGE_EXPIRED_CACHE":"SITE_MAINTENANCE_PURGE_EXPIRED_CACHE","SITE_SYSTEM_INFORMATION":"SITE_SYSTEM_INFORMATION","START_HERE":"START_HERE","USERS_ACCESS_LEVELS":"USERS_ACCESS_LEVELS","USERS_ACCESS_LEVELS_EDIT":"USERS_ACCESS_LEVELS_EDIT","USERS_DEBUG_USERS":"USERS_DEBUG_USER","USERS_GROUPS_EDIT":"USERS_GROUPS_EDIT","USERS_MASS_MAIL_USERS":"USERS_MASS_MAIL_USERS","USERS_USER_MANAGER_EDIT":"USERS_USER_MANAGER_EDIT","USERS_USER_NOTES":"USERS_USER_NOTES","USERS_USER_NOTES_EDIT":"USERS_USER_NOTES_EDIT"}PKb��\�:# ��help/helpsites.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <joshelp> <sites> <site tag="en-GB" url="https://help.joomla.org/proxy?keyref=Help{major}{minor}:{keyref}&lang={langcode}">English (GB) - Joomla help wiki</site> </sites> </joshelp> PKb��\�V�cache/index.htmlnu�[���<!DOCTYPE html><title></title> PKb��\��F�jjtemplates/hathor/cpanel.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** @var JDocumentHtml $this */ $app = JFactory::getApplication(); $lang = JFactory::getLanguage(); // Output as HTML5 $this->setHtml5(true); // Add template js JHtml::_('script', 'template.js', array('version' => 'auto', 'relative' => true)); // Add html5 shiv JHtml::_('script', 'jui/html5.js', array('version' => 'auto', 'relative' => true, 'conditional' => 'lt IE 9')); // Load optional RTL Bootstrap CSS JHtml::_('bootstrap.loadCss', false, $this->direction); // Load system style CSS JHtml::_('stylesheet', 'templates/system/css/system.css', array('version' => 'auto')); // Load template CSS JHtml::_('stylesheet', 'template.css', array('version' => 'auto', 'relative' => true)); // Load additional CSS styles for colors if (!$this->params->get('colourChoice')) { $colour = 'standard'; } else { $colour = htmlspecialchars($this->params->get('colourChoice')); } JHtml::_('stylesheet', 'colour_' . $colour . '.css', array('version' => 'auto', 'relative' => true)); // Load additional CSS styles for rtl sites if ($this->direction === 'rtl') { JHtml::_('stylesheet', 'template_rtl.css', array('version' => 'auto', 'relative' => true)); JHtml::_('stylesheet', 'colour_' . $colour . '_rtl.css', array('version' => 'auto', 'relative' => true)); } // Load additional CSS styles for bold Text if ($this->params->get('boldText')) { JHtml::_('stylesheet', 'boldtext.css', array('version' => 'auto', 'relative' => true)); } // Load specific language related CSS JHtml::_('stylesheet', 'administrator/language/' . $lang->getTag() . '/' . $lang->getTag() . '.css', array('version' => 'auto')); // Load custom.css JHtml::_('stylesheet', 'custom.css', array('version' => 'auto', 'relative' => true)); // IE specific JHtml::_('stylesheet', 'ie8.css', array('version' => 'auto', 'relative' => true, 'conditional' => 'IE 8')); JHtml::_('stylesheet', 'ie7.css', array('version' => 'auto', 'relative' => true, 'conditional' => 'IE 7')); // Logo file if ($this->params->get('logoFile')) { $logo = JUri::root() . $this->params->get('logoFile'); } else { $logo = $this->baseurl . '/templates/' . $this->template . '/images/logo.png'; } ?> <!DOCTYPE html> <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <jdoc:include type="head" /> </head> <body id="minwidth" class="cpanel-page"> <div id="containerwrap"> <!-- Header Logo --> <div id="header"> <!-- Site Title and Skip to Content --> <div class="title-ua"> <h1 class="title"><?php echo $this->params->get('showSiteName') ? $app->get('sitename') . ' ' . JText::_('JADMINISTRATION') : JText::_('JADMINISTRATION'); ?></h1> <div id="skiplinkholder"><p><a id="skiplink" href="#skiptarget"><?php echo JText::_('TPL_HATHOR_SKIP_TO_MAIN_CONTENT'); ?></a></p></div> </div> </div><!-- end header --> <!-- Main Menu Navigation --> <div id="nav"> <div id="module-menu"> <h2 class="element-invisible"><?php echo JText::_('TPL_HATHOR_MAIN_MENU'); ?></h2> <jdoc:include type="modules" name="menu" /> </div> <div class="clr"></div> </div><!-- end nav --> <!-- Status Module --> <div id="module-status"> <jdoc:include type="modules" name="status"/> </div> <!-- Content Area --> <div id="content"> <!-- Component Title --> <jdoc:include type="modules" name="title" /> <!-- System Messages --> <jdoc:include type="message" /> <!-- Sub Menu Navigation --> <div id="no-submenu"></div> <div class="clr"></div> <!-- Beginning of Actual Content --> <div id="element-box"> <p id="skiptargetholder"><a id="skiptarget" class="skip" tabindex="-1"></a></p> <div class="adminform"> <!-- Display the Quick Icon Shortcuts --> <div class="cpanel-icons"> <jdoc:include type="modules" name="icon" /> </div> <!-- Display Admin Information Panels --> <div class="cpanel-component"> <jdoc:include type="component" /> </div> </div> <div class="clr"></div> </div><!-- end element-box --> <noscript> <?php echo JText::_('JGLOBAL_WARNJAVASCRIPT'); ?> </noscript> <div class="clr"></div> </div><!-- end content --> <div class="clr"></div> </div><!-- end containerwrap --> <!-- Footer --> <div id="footer"> <jdoc:include type="modules" name="footer" style="none" /> <p class="copyright"> <?php // Fix wrong display of Joomla!® in RTL language if ($lang->isRtl()) { $joomla = '<a href="https://www.joomla.org" target="_blank">Joomla!</a><sup>®‎</sup>'; } else { $joomla = '<a href="https://www.joomla.org" target="_blank">Joomla!</a><sup>®</sup>'; } echo JText::sprintf('JGLOBAL_ISFREESOFTWARE', $joomla); ?> </p> </div> </body> </html> PKb��\鱦��*templates/hathor/less/colour_standard.lessnu�[���// colour_standard.less // // Less to compile Hathor in the default colour scheme // ----------------------------------------------------- /** * Main colors: * #2c2c2c Text * #054993 Links * #ffffff Background, border, text * #f9fade Background alternate, button/icon/menu background * #e5f0fa Background (input required) * #e3e4ca Background Hover, Right/Bottom icon borders * #c7c8b2 Main borders * #868778 Top/Left icon hover borders * #f6f7db Right/Bottom icon hover borders * * Special Use Colors: * #a20000 Text Error, border invalid * #cccccc Text (faded) * #005800 Text (success) * #eeeeee Background (input disabled) * #ffffcf Background‚ permissions debug * #cfffda Background‚ permissions debug * #ffcfcf Background‚ permissions debug */ // Import the variables file first to get common variables loaded @import "hathor_variables.less"; // Define variables unique to this colour scheme, as well as override variables already defined in the common file @altBackground: #f9fade; @gradientTop: #f9fade; @gradientBottom: #f9fade; @mainBorder: #c7c8b2; // Import the baseline to compile the CSS @import "colour_baseline.less"; PKb��\�� !templates/hathor/less/modals.lessnu�[���// MODALS // ------ // Recalculate z-index where appropriate .modal-open { .dropdown-menu { z-index: @zindexDropdown + @zindexModal; } .dropdown.open { *z-index: @zindexDropdown + @zindexModal; } .popover { z-index: @zindexPopover + @zindexModal; } .tooltip { z-index: @zindexTooltip + @zindexModal; } } // Background .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: @zindexModalBackdrop; background-color: @black; // Fade for backdrop &.fade { opacity: 0; } } .modal-backdrop, .modal-backdrop.fade.in { .opacity(80); } // Base modal div.modal { position: fixed; top: 50%; left: 50%; z-index: @zindexModal; overflow: auto; width: 80%; margin: -250px 0 0 -40%; background-color: @white; border: 1px solid #999; border: 1px solid rgba(0,0,0,.3); *border: 1px solid #999; /* IE6-7 */ .border-radius(6px); .box-shadow(0 3px 7px rgba(0,0,0,0.3)); .background-clip(padding-box); &.fade { .transition(e('opacity .3s linear, top .3s ease-out')); top: -25%; } &.fade.in { top: 50%; } } .modal-header { padding: 9px 15px; border-bottom: 1px solid #eee; // Close icon .close { float: right; margin-top: 2px; } } // Body (where all modal content resides) .modal-body { overflow-y: auto; max-height: 400px; padding: 15px; } // Remove bottom margin if need be .modal-form { margin-bottom: 0; } // Footer (for actions) .modal-footer { padding: 14px 15px 15px; margin-bottom: 0; text-align: right; // right align buttons background-color: #f5f5f5; border-top: 1px solid #ddd; .border-radius(0 0 6px 6px); .box-shadow(inset 0 1px 0 @white); .clearfix(); // clear it in case folks use .pull-* classes on buttons // Properly space out buttons .btn + .btn { margin-left: 5px; margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs } // but override that for button groups .btn-group .btn + .btn { margin-left: -1px; } } /* Prevent scrolling on the parent window of a modal */ body.modal-open { overflow: hidden; -ms-overflow-style: none; } /* Buttons bar in modal iframe */ .modal-buttons { padding: 15px 0px; } .modal-buttons button { font-size: 1.2em; line-height: 1.6em; } PKb��\JVs��"templates/hathor/less/buttons.lessnu�[���// // Buttons // This is a custom version of Bootstrap's buttons.less file suited for Hathor's needs // -------------------------------------------------- // Base styles // -------------------------------------------------- // Core #form-login .btn { display: inline-block; .ie7-inline-block(); padding: 4px 14px; margin-bottom: 0; // For input.btn font-size: @baseFontSize; line-height: @baseLineHeight; *line-height: @baseLineHeight; text-align: center; vertical-align: middle; cursor: pointer; .buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75)); border: 1px solid @btnBorder; *border: 0; // Remove the border to prevent IE7's black border on input:focus border-bottom-color: darken(@btnBorder, 10%); .border-radius(4px); .ie7-restore-left-whitespace(); // Give IE7 some love .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); // Hover state &:hover { color: @grayDark; text-decoration: none; background-color: darken(@white, 10%); *background-color: darken(@white, 15%); /* Buttons in IE7 don't get borders, so darken on hover */ background-position: 0 -15px; // transition is only when going to hover, otherwise the background // behind the gradient (there for IE<=9 fallback) gets mismatched .transition(background-position .1s linear); } // Focus state for keyboard and accessibility &:focus { .tab-focus(); } // Active state &.active, &:active { background-color: darken(@white, 10%); background-color: darken(@white, 15%) e("\9"); background-image: none; outline: 0; .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)"); } // Disabled state &.disabled, &[disabled] { cursor: default; background-color: darken(@white, 10%); background-image: none; .opacity(65); .box-shadow(none); } } // Button Sizes // -------------------------------------------------- // Large .btn-large { padding: 9px 14px; font-size: @baseFontSize + 2px; line-height: normal; .border-radius(5px); } .btn-large [class^="icon-"] { margin-top: 2px; } PKb��\"V.���"templates/hathor/less/icomoon.lessnu�[���@font-face { font-family: 'IcoMoon'; src: url('../../../../media/jui/fonts/IcoMoon.eot'); src: url('../../../../media/jui/fonts/IcoMoon.eot?#iefix') format('embedded-opentype'), url('../../../../media/jui/fonts/IcoMoon.woff') format('woff'), url('../../../../media/jui/fonts/IcoMoon.ttf') format('truetype'), url('../../../../media/jui/fonts/IcoMoon.svg#IcoMoon') format('svg'); font-weight: normal; font-style: normal; } @import "../../../../media/jui/less/icomoon.less"; PKb��\N����&templates/hathor/less/colour_blue.lessnu�[���// colour_blue.less // // Less to compile Hathor in the blue colour scheme // ----------------------------------------------------- /** * #2c2c2c Text * #054993 Links * #ffffff Background, border, text * #c3d2e5 Background alternate, button/icon/menu background * #a5bbd4-c3d2e5 Gradient Background * #e5f0fa Background (input required) * #e5d9c3 Background Hover, Top/Left icon borders * #738498 Main borders * #868778 Top/Left hover borders * #f6f7db Right/Bottom hover borders * * Special Use Colors: * #a20000 Text Error, border invalid * #cccccc Text (faded) * #005800 Text (success) * #eeeeee Background (input disabled) * #ffffcf Background permissions debug * #cfffda Background permissions debug * #ffcfcf Background permissions debug */ // Import the variables file first to get common variables loaded @import "hathor_variables.less"; // Define variables unique to this colour scheme, as well as override variables already defined in the common file @altBackground: #c3d2e5; @gradientTop: #a5bbd4; @gradientBottom: #c3d2e5; @mainBorder: #738498; // Import the baseline to compile the CSS @import "colour_baseline.less"; PKb��\Ӄ��I�I�#templates/hathor/less/template.lessnu�[���// Import the variables file first to get common variables loaded @import "hathor_variables.less"; // Core variables and mixins @import "../../../../media/jui/less/mixins.less"; // Bootstrap Component Animations @import "../../../../media/jui/less/component-animations.less"; // Bootstrap Modals @import "modals.less"; //@import "../../../../media/jui/less/modals.joomla.less"; // Bootstrap Popovers @import "../../../../media/jui/less/popovers.less"; // Icon Font @import "icomoon.less"; /** * CSS Reset */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; font-size: 100%; background: transparent; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } del { text-decoration: line-through; } /** * General styles */ html { overflow-y: scroll; height: 100%; } body { margin: 0; padding: 0; font-size: 62.5%; line-height: 1.5em; height: 100%; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body, td, th, span, a { font-family: Arial, Helvetica, sans-serif; } html, body { height: 100%; } a, img { padding: 0; margin: 0; } img { border: 0 none; } form { margin: 0; padding: 0; } ul { padding: 0; margin: 0; } h1 { margin: 0; padding-bottom: 8px; font-size: 1.4em; font-weight: bold; line-height: 2em; } h2 { padding-top: .83em; padding-bottom: .83em; } h3 { font-size: 1.4em; } a:link { color: #054993; text-decoration: none; } a:visited { color: #054993; text-decoration: none; } a:hover { text-decoration: underline; } a:focus { text-decoration: underline; } iframe { border: 0; } /* new styles */ .enabled { color: #005800; font-weight: bold; } .disabled { color: #a20000; font-weight: bold; } p.error { color: #a20000; font-weight: bold; } .warning { color: #a20000; font-weight: bold; } .nowarning { color: #2c2c2c; font-weight: bold; } .success { color: #005800; font-weight: bold; } .allow { color: #005800; } span.writable { color: #005800; } .deny { color: #a20000; } span.unwritable { color: #a20000; } .none { color: #aaaaaa; } .pointer { cursor: pointer; } .nowrap { white-space: nowrap; } p.nowarning, p.warning { margin: 10px; } /* end new styles */ /** * Overall Styles */ #minwidth, #minwidth-body { min-width: 980px; } #containerwrap { position: relative; } #header { position: relative; } #header h1.title { font-size: 1.5em; font-weight: normal; line-height: 25px; margin: 0; padding: 0 0 0 120px; } #footer { padding: 10px 20px; } #footer .copyright { margin: 0 0 0 0; text-align: center; } #footer p { font-size: 1.2em; } #nav .no-nav { line-height: 2em; } #content { margin: 5px 20px 20px 20px; } .cpanel-page div#element-box { padding: 15px; } /** * Status layout */ #module-status { float: right; position: relative; top: -48px; } #module-status div.btn-group { display: block; float: left; padding: 4px 10px 0 10px; font-size: 1.2em; } #module-status div.divider { display: none; } #module-status .unread-messages a { font-weight: bold; } .title-ua { position: relative; width: 60%; } /** * Various Styles */ .enabled, .disabled, p.error, .warning, .nowarning, .success { font-weight: bold; } .pointer { cursor: pointer; } .nowrap { white-space: nowrap; } span.note { display: block; padding: 5px; } div.checkin-tick { text-indent: -9999px; } /** * Overlib */ .ol-textfont { font-family: Arial, Helvetica, sans-serif; font-size: 1.2em; } .ol-captionfont { font-family: Arial, Helvetica, sans-serif; font-size: 1.2em; font-weight: bold; } .ol-captionfont a { text-decoration: none; } /** * Subheader, toolbar, page title */ div.subheader .padding { padding: 0; } div.pagetitle { padding: 0 0 5px 5px; margin: 0; background-repeat: no-repeat; background-position: left 50%; line-height: 54px; width: 100%; margin-top: -20px; height: 60px; } .tabs-left > .nav-tabs { float: left; margin-right: 19px; border-right: 1px solid #DDD; } tabs-below > .nav-tabs, .tabs-right > .nav-tabs, .tabs-left > .nav-tabs { border-bottom: 0; } /* Tabbed Content */ .tab-content { overflow: visible; } .tabs-left .tab-content { overflow: auto; } /* Non-linkable nav-tabs */ .nav-tabs > li > span { display: block; margin-right: 2px; padding-right: 12px; padding-left: 12px; padding-top: 8px; padding-bottom: 8px; line-height: 18px; border: 1px solid transparent; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } /* Extended Joomla Button Classes */ .btn-micro { padding: 1px 4px; font-size: 10px; line-height: 8px; } /* Joomla => Bootstrap Tooltip */ .tip-wrap { max-width: 200px; padding: 3px 8px; color: #ffffff; text-align: center; text-decoration: none; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; z-index: 100; } .pagetitle h2 { padding: 0 0 0 50px; font-size: 1.3em; font-weight: bold; line-height: 48px; font-style: italic; } div.configuration { font-size: 1.2em; font-weight: bold; line-height: 2em; padding-left: 30px; margin-left: 10px; } div.toolbar-box h3 { height: 0; overflow: hidden; position: absolute; padding: 0; margin: 0; } .btn-toolbar { margin-bottom: 3px; margin-top: 14px; } div.btn-toolbar, div.toolbar-list { float: left; text-align: left; padding: 0; } div.toolbar-list li { padding: 5px 1px 5px 4px; text-align: center; height: 52px; list-style: none; float: left; } div.toolbar-list li.spacer { width: 10px; } div.toolbar-list li.divider { width: 10px; margin-right: 10px; } div.toolbar-list span { float: none; width: 32px; height: 32px; margin: 0 auto; display: block; } div.toolbar-list a { display: block; float: left; white-space: nowrap; padding: 1px 5px; cursor: pointer; font-weight: bold; } div.btn-toolbar div.btn-group button { display: block; float: left; white-space: nowrap; padding: 1px 5px; cursor: pointer; text-align: center; } div.btn-toolbar button:hover, div.btn-toolbar button:focus, div.toolbar-list a:hover, div.toolbar-list a:focus { text-decoration: none; } /** * Massmail component */ td#mm_pane { width: 90%; } input#mm_subject { width: 200px; } textarea#mm_message { width: 100%; } textarea { resize:both; } textarea.vert { resize:vertical; } textarea.noResize { resize:none; } /** * Pane Slider pane Toggler styles */ .pane-sliders { margin: 0; position: relative; } .pane-sliders .title { margin: 0; padding: 2px; cursor: pointer; } .pane-sliders .panel { margin-bottom: 3px; } .pane-sliders .adminlist td { border: 0 none; } h3.pane-toggler-down a:focus, h3.pane-toggler a:focus { outline: none; } .pane-toggler span { padding-left: 20px; } .pane-toggler-down span { padding-left: 20px; } /* The following line hides the unseen panel (prevents the mouse from activating in IE, so overridden in the ie css files) */ /*.pane-toggler + div.pane-slider {display: none;}*/ .pane-slider.pane-hide { display: none; } div#position-icon.pane-sliders div.pane-down div.quickicon-wrapper { margin: 5px 0 5px 0; } div#position-icon.pane-sliders div.pane-down .quickicon-wrapper .icon { padding: 5px 0 5px 10px; margin: 0; } /** * Tabs */ dl.tabs { float: left; margin: 10px 0 -1px 0; z-index: 50; } dl.tabs dt { float: left; padding: 4px 10px; margin-left: 3px; } dl.tabs dt.open { z-index: 100; } div.current { clear: both; padding: 10px 10px; } div.current dd { padding: 0; margin: 0; } /* New parameter styles */ dl#content-pane.tabs { margin: 1px 0 0 0; } div.current label, div.current span.faux-label { display: block; min-width: 150px; float: left; clear: left; margin-top: 8px; } div.current fieldset.radio { float: left; } div.current fieldset.radio input { clear: none; min-width: 15px; float: left; margin: 3px 0 0 2px; } div.current fieldset.radio label { clear: none; min-width: 45px; float: left; margin: 3px 0 0 2px; } div.current fieldset.checkboxes { float: left; clear: right; } div.current fieldset.checkboxes input { clear: left; min-width: 15px; float: left; margin: 3px 0 0 2px; } div.current fieldset.checkboxes label { clear: right; min-width: 45px; margin: 3px 0 0 2px; } div.current input, div.current span.faux-input, div.current textarea, div.current select { clear: none; float: left; margin: 3px 0 0 2px; } div.current select { margin-bottom: 15px; } div.current table#acl-config th.acl-groups { text-align: left; } div.current table#filter-config th.acl-groups { text-align: left; } div.current table#filter-config select { margin-bottom: 0; } /* -------- Menu Assigments ---------- */ div#menu-assignment { clear: left; } div#menu-assignment ul.menu-links { float: left; width: 49%; } div#menu-assignment ul.menu-links label { clear: none; float: left; margin: 3px 0 0 2px; } div#menu-assignment ul.menu-links input { clear: left; float: left; } button.jform-rightbtn { float: right; margin-right: 0; } p.tab-description { font-size: 1.091em; margin-left: 0; margin-top: 5px; } /* end new parameter styles */ /** * Login Settings */ #login-page input, #login-page select { float: right; clear: none; } #login-page .login { margin: 0 auto; width: 575px; margin-bottom: 100px; } #login-page .pagetitle h2 { margin: -70px 0 30px 0; font-size: 2em; padding: 0; } #login-page p { margin: 0; padding: 0; margin-bottom: 1em; font-size: 1.2em; } #login-page #header { margin-bottom: 100px; } #login-page .login-inst { float: left; width: 35%; } #login-page .login-box { float: right; width: 63%; } #login-page #lock { width: 150px; height: 137px; } #login-page #element-box.login { padding: 20px; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } #login-page .button { text-align: right; } #login-page .login-text { text-align: left; width: 40%; float: left; } #form-login { float: left; padding: 1.1em; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } #form-login fieldset { border: none; } #form-login label { display: block; float: left; clear: left; width: 100px; text-align: right; padding: 4px; color: #2c2c2c; font-weight: bold; font-size: 1.4em; margin-bottom: 15px; } #form-login div.button1 div.next { float: left; } #form-login div.button1 a { height: 2.2em; line-height: 2.2em; font-size: 1.5em; cursor: default; padding: 0 15px 0 15px; } .login-submit { border: 0; padding: 0; margin: 0; width: 0; height: 0; } /** * Cpanel Settings */ #cpanel div.icon, .cpanel div.icon { text-align: center; margin-right: 5px; float: left; margin-bottom: 5px; } #cpanel div.icon a, .cpanel div.icon a { display: block; float: left; height: auto; min-height: 97px; width: 108px; color: #2c2c2c; vertical-align: middle; text-decoration: none; font-weight: bold; } #cpanel img, .cpanel img { padding: 10px; margin: 0 auto; } #cpanel span, .cpanel span { display: block; text-align: center; padding: 0 0 5px; } div.cpanel-icons { width: 54%; float: left; } div.cpanel-component { width: 45%; float: right; } /** * Standard Layout Styles */ div.col { float: left; } div.options-section.col { float: right; } div.col1 { float: left; width: 45%; } div.col2 { float: right; width: 45%; } /* Avoid using the width divs. They are here for 3PD Extensions if needed * Use the specific layout divs listed after. See also the th.width entries */ div.width-1 { width: 1%; } div.width-3 { width: 3%; } div.width-5 { width: 5%; } div.width-10 { width: 10%; } div.width-20 { width: 20%; } div.width-30 { width: 30%; } div.width-35 { width: 35%; } div.width-40 { width: 40%; } div.width-45 { width: 45%; } div.width-50 { width: 50%; } div.width-55 { width: 55%; } div.width-60 { width: 60%; } div.width-65 { width: 65%; } div.width-70 { width: 70%; } div.width-80 { width: 80%; } div.width-100 { width: 100%; } .clrlft { clear: left; } .clrrt { clear: right; } .fltlft { float: left; } .fltrt { float: right; } .fltnone { float: none; } /* Layout Divs */ div.main-section { width: 60%; } div.options-section { width: 38%; margin: 10px 10px 10px 0; } /* for bluestork style html */ div.width-40.fltrt { width: 38%; margin: 10px 10px 10px 0; } div.rules-section { width: 98%; margin: 10px; } /** * Form Styles */ fieldset { margin: 2px 10px 2px 10px; padding: 5px; text-align: left; } legend { font-size: 1.3em; font-weight: bold; padding-bottom: 5px; } fieldset p { margin: 10px 0; font-size: 1.2em; } fieldset ol, ol#property-values, fieldset ul, ul#property-values { margin: 0; padding: 0; } fieldset li, ol#property-values li, ul#property-values li { list-style: none; margin: 0; padding: 5px; } fieldset.adminform fieldset.radio, fieldset.panelform fieldset.radio, fieldset.adminform-legacy fieldset.radio { border: 0; float: left; padding: 0; margin: 0 0 5px 0; clear: right; } fieldset.adminform fieldset.radio label, fieldset.panelform fieldset.radio label, fieldset.adminform fieldset.radio span.faux-label, fieldset.panelform fieldset.radio span.faux-label { min-width: 40px; float: left; clear: none; } /* checkboxes */ fieldset.adminform fieldset.checkboxes, fieldset.panelform fieldset.checkboxes, fieldset.adminform-legacy fieldset.checkboxes { border: 0; float: left; padding: 0; margin: 0 0 5px 0; clear: right; } fieldset.adminform fieldset.checkboxes input[type="checkbox"], fieldset.panelform fieldset.checkboxes input[type="checkbox"] { float: left; clear: left; } fieldset.adminform fieldset.checkboxes label, fieldset.panelform fieldset.checkboxes label, fieldset.adminform fieldset.checkboxes span.faux-label, fieldset.panelform fieldset.checkboxes span.faux-label { clear: right; } /* end checkboxes */ /* spacer */ div.current span.spacer > span.before, fieldset.adminform span.spacer > span.before, fieldset.panelform span.spacer > span.before { clear: both; overflow: hidden; height: 0; display: block; } /* end spacer */ fieldset.panelform-legacy label, fieldset.adminform-legacy label, fieldset.panelform-legacy span.faux-label, fieldset.adminform-legacy span.faux-label { min-width: 150px; float: left; } fieldset.adminform, fieldset.panelform { .input-prepend, .input-append { float: left; } .adminformlist .btn.modal, .input-prepend > *, .input-append > * { float: none; vertical-align: middle; } } /* JParameter classes on radio button labels */ fieldset.panelform-legacy label.radiobtn-jno, fieldset.panelform-legacy label.radiobtn-jyes, fieldset.panelform-legacy label.radiobtn-show, fieldset.panelform-legacy label.radiobtn-hide, fieldset.panelform-legacy label.radiobtn-off, fieldset.panelform-legacy label.radiobtn-on { min-width: 40px !important; clear: none !important; } #jform_plugdesc-lbl, #jform_description-lbl { font-weight: bold; clear: both; margin-top: 15px; } p.jform_desc { clear: left; } div#jform_ordering { font-size: 1.091em; margin-top: 3px; } fieldset ul.checklist { margin-left: 27px; } fieldset ul.checklist input, fieldset ul.checklist label { float: none; } fieldset ul.checklist input:focus { outline: thin dotted #333333; } fieldset#filter-bar { margin: 0; padding: 5px 10px 5px 10px; float: left; width: 98% } fieldset#filter-bar ol, fieldset#filter-bar ul { list-style: none; margin: 0; padding: 5px 0 0; } fieldset#filter-bar ol li, fieldset#filter-bar ul li { float: left; padding: 0 5px 0 0; } fieldset#filter-bar ol li fieldset, fieldset#filter-bar ul li fieldset { margin: 0; padding: 0; } fieldset#filter-bar .filter-search { float: left; padding-bottom: 3px; } fieldset#filter-bar .filter-select { float: right; } fieldset#filter-bar input#search { width: 10em; } /* Note: these visual cues should be augmented by aria */ .invalid { font-weight: bold; } /* augmented by aria in template javascript */ input.readonly, span.faux-input { border: 0; } .star { color: #cc0000; font-size: 1.2em; } input, select, span.faux-input { font-size: 1.2em; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } span.readonly { float: left; font-size: 1.2em; line-height: 2em; } div.readonly { font-size: 1.2em; line-height: 2em; } div.extdescript { margin-left: 10px; } input[type="button"], input[type="submit"], input[type="reset"] { font-family: Arial, Helvetica, sans-serif; padding: 1px 6px; font-size: 1.2em; line-height: 1.5em; } textarea { font-size: 1.4em; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } input.button { cursor: pointer; } label { font-weight: bold; font-size: 1.1em; } span.faux-label { font-weight: bold; font-size: 1.1em; } label.selectlabel { position: absolute; left: -1000em; } /** * Option or Parameter styles */ .paramrules { padding: 10px; } span.gi { font-weight: bold; margin-right: 5px; } span.gtr { visibility: hidden; margin-right: 5px; } /** * Admintable Styles */ table.admintable td { padding: 3px; font-size: 1em; } table.admintable td.key, table.admintable td.paramlist_key { text-align: right; width: 140px; font-weight: bold; font-size: 1em; } table.admintable td.key label, table.admintable td.paramlist_key label { font-size: 1em; } table.admintable td.paramlist_value label { font-size: 1em; } table.admintable input, table.admintable span.faux-input, table.admintable select { font-size: 1em; } table.paramlist td.paramlist_description { text-align: left; width: 170px; font-weight: normal; } table.admintable td.key.vtop { vertical-align: top; } /** * Admin Form Styles */ fieldset.adminform { margin: 0 10px 10px 10px; overflow: hidden; } .adminformlist .btn.modal{ float: left; margin-top: 7px; } ul.adminformlist, ul.adminformlist li, dl.adminformlist, dl.adminformlist li { margin: 0; padding: 0; list-style: none; } ul.adminformlist pre { font-size: 1.3em; } ul.adminformlist .button2-left, ul.adminformlist .button2-left { margin-top: 5px; } /* Table styles are for use with tabular data */ table.adminform { width: 100%; border-collapse: collapse; margin: 8px 0 10px 0; margin-bottom: 15px; } table.adminform.nospace { margin-bottom: 0; } table.adminform th { font-size: 1.4em; padding: 6px 2px 4px 4px; text-align: left; height: 25px; } table.adminform td { padding: 3px; text-align: left; } table.adminform td#filter-bar { text-align: left; } table.adminform td.helpMenu { text-align: right; } table.adminform tr { padding-left: 10px; padding-right: 10px; } /** * Table formating styles */ td.center, th.center { text-align: center; } /* Avoid using the width classes. They are here for 3PD Extensions if needed * Use the specific layout table headers listed after. See also the div.width entries */ th.width-1 { width: 1%; } th.width-3 { width: 3%; } th.width-5 { width: 5%; } th.width-10 { width: 10%; } th.width-12 { width: 12%; } th.width-15 { width: 15%; } th.width-20 { width: 20%; } th.width-25 { width: 25%; } th.width-30 { width: 30%; } th.width-40 { width: 40%; } /* Table header layout classes */ th.row-number-col { width: 3%; } th.checkmark-col { width: 1%; } th.state-col { width: 5%; } th.ordering-col { width: 10%; } th.ordering-col a { display: block; float: left; margin-left: 3px; } th.ordering-col a img { margin-left: 4px; margin-right: 4px; } .categories th.ordering-col input, .categories td.order input { font-size: 1em; } th.category-col { width: 5%; } th.access-col { width: 10%; } .categories th.access-col { width: 5%; } th.hits-col { width: 5%; } th.id-col { width: 3%; } th.featured-col { width: 5%; } th.created-by-col { width: 15%; } th.date-col { width: 5%; } th.language-col { width: 5%; } th.home-col { width: 5%; } /** * Adminlist Table layout */ table.adminlist { width: 100%; float: left; } table.adminlist td, table.adminlist th { padding: 4px; font-size: 1.2em; } table.adminlist thead th { text-align: center; } table.adminlist thead a:hover { text-decoration: none; } table.adminlist thead th img { vertical-align: middle; } table.adminlist tbody th { font-weight: bold; } /* Table row styles */ table.adminlist tr { padding-left: 30px; padding-right: 30px; } table.adminlist tbody tr { text-align: left; } table.adminlist tbody tr td, table.adminlist tbody tr th { height: 25px; } table.adminlist tfoot tr { text-align: center; } /* Table td/th styles */ table.adminlist tfoot td, table.adminlist tfoot th { text-align: center; } table.adminlist td.order { text-align: center; white-space: nowrap; } table.adminlist td.order span { float: left; width: 20px; text-align: center; } table.adminlist td.order input { text-align: center; width: 3em; font-size: 100%; } /** * Tree indentation & nesting - Up to 10 levels deep so don't go crazy : */ #media-tree_tree ul { list-style: none outside none; margin: 0 10px; } table.adminlist td.indent-4 { padding-left: 4px; } table.adminlist td.indent-19 { padding-left: 19px; } table.adminlist td.indent-34 { padding-left: 34px; } table.adminlist td.indent-49 { padding-left: 49px; } table.adminlist td.indent-64 { padding-left: 64px; } table.adminlist td.indent-79 { padding-left: 79px; } table.adminlist td.indent-94 { padding-left: 94px; } table.adminlist td.indent-109 { padding-left: 109px; } table.adminlist td.indent-124 { padding-left: 124px; } table.adminlist td.indent-139 { padding-left: 139px; } /** * Adminlist buttons */ table.adminlist tr td.btns a { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; padding: 3px 20px; } table.adminlist tr td.btns a:hover, table.adminlist tr td.btns a:active, table.adminlist tr td.btns a:focus { text-decoration: none; } /** * Adminlist lists */ table.adminlist td li { list-style: inside; } /** * Modal Modules styles */ ul#new-modules-list { margin-left: 50px; font-size: 1.4em; line-height: 1.5em; } /** * Utility styles */ /* General Clearing Class */ .clr { clear: both; overflow: hidden; height: 0; } .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .menu-module-list { list-style-position: inside; padding-left: 10px; margin-left: 5px; } /* stu nicholls solution for centering divs */ .container { clear: both; text-decoration: none; } * html .container { display: inline-block; } /* table solution for global config */ table.noshow { width: 100%; border-collapse: collapse; padding: 0; margin: 0; } table.noshow tr { vertical-align: top; } table.noshow fieldset { margin: 15px 7px 7px 7px; } /** * Saving order icon styling in admin tables */ a.saveorder { width: 16px; height: 16px; display: block; overflow: hidden; float: right; margin-right: 8px; } /** * Button styling */ #editor-xtd-buttons { padding: 5px; } button { font-family: Arial, Helvetica, sans-serif; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; margin-right: 3px; margin-left: 3px; } .invalid { font-weight: bold; } /* Button 1 Type */ .button1, .button1 div { height: 1%; float: right; } .button1 { white-space: nowrap; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .button1 a { display: block; height: 2.2em; float: left; line-height: 2.2em; font-size: 1.2em; font-weight: bold; cursor: default; padding: 0 6px 0 6px; /* add padding if you are using the directional images */ /* padding: 0 30px 0 6px; */ } .button1 a:hover, .button1 a:focus { text-decoration: none; } /* Button 2 Type */ .button2-left, .button2-right { float: left; line-height: 1.5em; font-size: 1.2em; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .button2-left.smallsub, .button2-right.smallsub { line-height: 1.2em; font-size: .9em; } .button2-left a, .button2-right a, .button2-left span, .button2-right span { display: block; float: left; cursor: default; } /* these are inactive buttons */ .button2-left span, .button2-right span { cursor: default; } .button2-left .page a, .button2-right .page a, .button2-left .page span, .button2-right .page span, .button2-left .blank a, .button2-right .blank a, .button2-left .blank span, .button2-right .blank span { padding: 0 6px; } .page span, .blank span { font-weight: bold; } .button2-left a:hover, .button2-right a:hover, .button2-left a:focus, .button2-right a:focus { text-decoration: none; } .button2-left a, .button2-left span { padding: 0 24px 0 6px; } .button2-right a, .button2-right span { padding: 0 6px 0 24px; } .button2-left { float: left; margin-left: 5px; } .button2-right { float: left; margin-left: 5px; } /** * Pagination styles */ /* Normal pagination styles */ div.containerpg { position: relative; left: 50%; float: left; clear: left; } div.pagination { position: relative; left: -50%; margin: 0 auto; padding: .5em; } .pagination div.limit { float: left; margin: 0 10px; font-size: 1.2em; height: 1.8em; line-height: 1.8em; } .pagination div.limit label { font-size: 100%; height: 1.8em; line-height: 1.8em; } .pagination div.limit select { font-size: 100%; } /* The Go submittal button */ .pagination button { font-size: 100%; height: 2.0em; line-height: 1.8em; margin-right: 20px; } div.pagination .button2-right, div.pagination .button2-left { font-size: 1.2em; height: 1.6em; line-height: 1.6em; } /* Style if pagination is part of the table (old style) */ table.adminlist .pagination { display: table; padding: 0; margin: 0 auto; font-size: .8em; } table.adminlist .pagination button { font-size: 1.2em; height: 1.6em; line-height: 1.5em; margin-right: 20px; } /** * MCE Editor */ div.toggle-editor { margin-top: 9px; } /** * Tooltips */ .tip { float: left; padding: 5px; max-width: 400px; z-index: 50; } .tip-title { padding: 0; margin: 0; font-size: 120%; margin-top: -15px; padding-top: 15px; padding-bottom: 5px; } .tip-text { font-size: 100%; text-align: left; margin: 0; } /** * Calendar */ a img.calendar { width: 16px; height: 16px; margin-left: 3px; cursor: pointer; vertical-align: middle; } /** * JGrid styles */ a.jgrid:hover { text-decoration: none; } .jgrid span.state { display: inline-block; height: 16px; width: 16px; } .jgrid span.text { display: none; } /** * Icons * The Background Icons for Menus, Toolbars, Quick Icons * are now in the color css files */ /** * General styles */ div.message { text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: 1.2em; padding: 3px; margin-bottom: 10px; font-weight: bold; } .helpIndex { border: 0; width: 100%; height: 100%; padding: 0; overflow: auto; } .helpFrame { width: 100%; height: 800px; padding: 0 5px 0 10px; } #treecellhelp { width: 25%; display: block; position: relative; float: left; margin: 0; padding: 2px; overflow: hidden; } #datacellhelp { width: 73%; display: block; float: left; margin: 0; padding: 2px 0 0 0; } .outline { padding: 2px; } /** * Modal Styles */ h2.modal-title { margin-left: 15px; margin-bottom: 0; margin-top: 5px; font-size: 1.8em; padding-bottom: .5em; } ul.menu_types { padding: 0 0 0 15px; width: 95%; margin: 0; } ul.menu_types li, dl.menu_type dd ul li { width: 240px; list-style: none; display: block; float: left; margin-right: 10px; } ul.menu_types li { width: 47%; } dl.menu_type { width: 240px; margin: 0; padding: 0; } dl.menu_type dt { font-weight: bold; font-size: 1.5em; float: left; margin: 13px 0 5px 0; width: 240px; } dl.menu_type dd { clear: left; margin: 0; } dl.menu_type dd a { font-size: 1.2em; } dl.menu_type dd ul li { margin: 0; } ul#new-modules-list { padding: 5px 0 0 15px; width: 95%; margin: 0; list-style: none; } ul#new-modules-list li { list-style: none; display: block; float: left; margin: 0 20px 0 0; width: 47%; } ul#new-modules-list li a { font-size: 1em; line-height: 1.5em; } body.contentpane #filter-bar { font-size: 80%; } body.contentpane input, body.contentpane select { font-size: 120%; } #filter-bar input, #filter-bar select, #filter-bar button { font-size: 110%; } /** * User Accessibility */ /* Skip to Content Structural Styling */ #skiplinkholder a, #skiplinkholder a:link, #skiplinkholder a:visited { display: block; width: 99%; position: absolute; top: 0; left: -200%; z-index: 2; } #skiplinkholder a:focus, #skiplinkholder a:active { left: 0; top: 0; z-index: 100; } #skiplinkholder p { margin: 0; } #skiptargetholder { position: absolute; left: -200%; } /* Skip to Content Visual Styling */ #skiplinkholder a, #skiplinkholder a:link, #skiplinkholder a:visited { text-decoration: underline; padding: 5px; font-size: 1.3em; font-weight: bold; padding-left: 20px; padding-right: 20px; } /* Hide overlayed controls so that keyboarders can get to the modal */ .body-overlayed a, .body-overlayed input, .body-overlayed button { visibility: hidden; } .body-overlayed #sbox-window a, .body-overlayed #sbox-window input, .body-overlayed #sbox-window button { visibility: visible; } /** * Admin Form Styles */ /* For elements that aren't to be seen by users unless the user does something * like clicking on a header to see the collapsed section. */ .element-hidden, .hide { display: none; } .hidebtn { border: 0 !important; padding: 0 !important; margin: 0; width: 0; height: 0; } /* For elements that aren't to be seen by visual users but do need to be read by screenreaders. * Cannot be used for elements that can get focus such as links and form elements */ .element-invisible, .hidelabeltxt { height: 0; overflow: hidden; position: absolute; padding: 0; margin: 0; } /* Firefox has issues styling legend so this is a universal fix for making the legend invisible (i.e. visually it's not there, but screen readers see it */ legend.element-invisible { position: absolute !important; margin: 0; padding: 0; border: 0; margin-left: -10000px; font-size: 1px; height: 0; } fieldset.panelform { overflow: hidden; clear: both; } fieldset.adminform label, fieldset.panelform label, fieldset.adminform span.faux-label, fieldset.panelform span.faux-label { line-height: 2em; clear: left; min-width: 12em; float: left; margin-left: 10px; margin-right: 5px; } fieldset.adminform.long label, fieldset.panelform.long label, fieldset.adminform.long span.faux-label, fieldset.panelform.long span.faux-label { min-width: 18em; } fieldset.adminform fieldset.radio label, fieldset.panelform fieldset.radio label, fieldset.adminform fieldset.radio span.faux-label, fieldset.panelform fieldset.radio span.faux-label { margin-left: 0; } fieldset.adminform input, fieldset.adminform span.faux-input, fieldset.adminform textarea, fieldset.adminform select, fieldset.adminform img, fieldset.adminform button, fieldset.panelform input, fieldset.panelform span.faux-input, fieldset.panelform textarea, fieldset.panelform select, fieldset.panelform img, fieldset.panelform button { float: left; margin: 5px 5px 5px 0; width: auto; } /* -------- Batch Section ---------- */ fieldset.batch { margin: 20px 10px 10px 10px; padding: 10px; } fieldset.batch label { margin: 5px; min-width: 40px; } fieldset.batch button { margin: 3px; } fieldset#batch-choose-action { clear: left; border: 0 none; } fieldset.batch label { float: left; clear: none; } fieldset label#batch-choose-action-lbl { clear: left; margin-top: 15px; } label#batch-language-lbl, label#batch-user-lbl { clear: left; margin-right: 10px; margin-top: 15px; } select#batch-language-id, select#batch-user-id { margin-top: 15px; } select#batch-category-id, select#batch-position-id, select#batch-menu-id { margin-right: 30px; } fieldset.batch select, fieldset.batch input, fieldset.batch img, fieldset.batch button { float: left; } label#batch-access-lbl, label#batch-client-lbl { margin-right: 10px; } div#jform_ordering { font-size: 1.091em; margin-top: 3px; } /* Banner edit */ #jform_impmade, #jform_clicks { width: 30px; } fieldset.panelform label#jform-imp { min-width: 3em; font-size: 1.091em; } fieldset.adminform input#jform_clickurl { width: 20em; } /** * ACL STYLES relocated from com_users/media/grid.css */ a.move_up { display: inline-block; height: 16px; text-indent: -1000em; width: 16px; } span.move_up { display: inline-block; height: 16px; width: 16px; } a.move_down { display: inline-block; height: 16px; text-indent: -1000em; width: 16px; } span.move_down { display: inline-block; height: 16px; width: 16px; } a.grid_false { display: inline-block; height: 16px; text-indent: -1000em; width: 16px; } a.grid_true { display: inline-block; height: 16px; text-indent: -1000em; width: 16px; } a.grid_trash { display: inline-block; height: 16px; text-indent: -1000em; width: 16px; } /** * ACL PANEL STYLES */ div.acl-options { width: 100%; } /* All Tabs */ table.aclsummary-table, table.aclmodify-table { border-collapse: collapse; width: 100%; font-size: 1.091em; } td.col1 { font-size: 1.091em; text-align: left; padding: 4px; } table.aclsummary-table caption, table.aclmodify-table caption { display: none; } /* Summary Tab */ table.aclsummary-table th.col1 { width: 25%; } table.aclsummary-table th.col2, table.aclsummary-table th.col3, table.aclsummary-table th.col4, table.aclsummary-table th.col5, table.aclsummary-table th.col6 { width: 15%; vertical-align: bottom; text-align: center; } /* Icons (background images moved to color css files */ span.icon-16-unset, span.icon-16-allowed, span.icon-16-denied, span.icon-16-locked { padding-left: 18px; } label.icon-16-allow, label.icon-16-deny, a.icon-16-allow, a.icon-16-deny, a.icon-16-allowinactive, a.icon-16-denyinactive { display: block; height: 16px; width: 16px; margin: 0 auto; } label.icon-16-allow { text-indent: -9999em; position: relative; left: 40%; } label.icon-16-deny { text-indent: -9999em; position: relative; left: 40%; } /* Create, Edit, Edit State & Delete Tabs */ table.aclmodify-table th.col2, table.aclmodify-table th.col3, table.aclmodify-table th.col4 { width: 20%; vertical-align: bottom; text-align: center; } table.aclmodify-table select { margin: 1px; } table.aclsummary-table td label, table.aclmodify-table td label { min-width: 20px; } /* ACL footer/legend */ ul.acllegend { list-style: none; font-size: 1.091em; padding-bottom: 10px; } ul.acllegend li { display: block; float: left; padding-right: 20px; margin: 15px 0 15px 10px; } ul.acllegend li.acl-allowed { padding-left: 20px; padding-right: 10px; } ul.acllegend li.acl-denied { padding-left: 20px; padding-right: 20px; } ul.acllegend li.acl-editgroups { padding-right: 10px; } ul.acllegend li.acl-resetbtn { padding-right: 0; } li.acl-editgroups, li.acl-resetbtn { display: block; float: left; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } li.acl-editgroups a, li.acl-resetbtn a { padding: 6px; cursor: default; } li.acl-editgroups a:hover, li.acl-resetbtn a:hover, li.acl-editgroups a:focus, li.acl-resetbtn a:focus { text-decoration: none; cursor: default; } li.acl-editgroups:hover, li.acl-resetbtn:hover, li.acl-editgroups:focus, li.acl-resetbtn:focus { text-decoration: none; cursor: default; } table#acl-config { width: 100%; margin-top: 15px; } table#acl-config th, table#acl-config td { height: 2em; background: #f9fade; text-align: center; vertical-align: middle; } table#acl-config th.acl-groups { padding-left: 8px; font-weight: bold; text-align: left; } table#acl-config th.acl-groups span.gi { margin-right: 2px; } table#acl-config td { width: 9em; } table#acl-config td select { float: none; } .acl-action { font-size: 1.091em; margin: auto 0; } .acl-groups { font-size: 1.091em; font-weight: normal; } label#jform_rules-lbl { float: none; white-space: nowrap; display: none; visibility: hidden; } label#jform_filters-lbl { float: none; white-space: nowrap; display: none; visibility: hidden; } /** * Options modal- config */ ul.config-option-list, ul.config-option-list li { margin: 0; padding: 0; list-style: none; } ul.config-option-list fieldset { margin: 0; padding-left: 0; padding-right: 0; } /* * * Permission Rules */ #permissions-sliders { margin-top: 15px; } #permissions-sliders ul#rules, #permissions-sliders ul#rules ul { margin: 0 !important; padding: 0 !important; list-style-type: none; } #permissions-sliders ul#rules li { margin: 0; padding: 0; } #permissions-sliders ul#rules table.group-rules { border-collapse: collapse; margin: 5px; width: 100%; } #permissions-sliders ul#rules table.group-rules td { padding: 4px; vertical-align: middle; text-align: left; overflow: hidden; } #permissions-sliders ul#rules table.group-rules th { font-size: 1.2em; overflow: hidden; font-weight: bold; } #permissions-sliders .panel { margin-bottom: 3px; margin-left: 0; border: 0; } #permissions-sliders p.rule-desc { font-size: 1.1em; } #permissions-sliders div.rule-notes { font-size: 1.1em; } ul#rules table.group-rules td label { margin: 0 !important; line-height: 1.1em; } ul#rules table.group-rules td span { font-size: 1.1em; padding-bottom: 4px; } ul#rules table.group-rules td span span { font-size: 100%; } table.group-rules td select { margin: 0 !important; } #permissions-sliders ul#rules .mypanel { padding: 0; line-height: 1.3em; } #permissions-sliders .mypanel table.group-rules caption { font-size: 1.3em; } #permissions-sliders ul#rules { padding: 5px; } #permissions-sliders ul#rules table.group-rules th { text-align: left; padding: 4px; } #permissions-sliders ul#rules table.group-rules td label { min-width: 1em; } #permissions-sliders .pane-toggler span { padding-left: 20px; } #permissions-sliders .pane-toggler-down span { padding-left: 20px; } #permissions-sliders .pane-toggler-down span.level, #permissions-sliders .pane-toggler span.level { padding: 0; } /* * Debug styles */ .swatch { text-align: center; padding: 0 15px 0 15px; } /* Tab changes for accessibility */ dl.tabs dt h3 { padding: 0; font-size: 100%; } /** * Helpmenus */ ul.helpmenu li { float: right; margin: 10px; padding: 0; list-style-type: none; font-weight: bold; } /* CSS file for Accessible Admin Menu * based on Matt Carrolls' son of suckerfish * with javascript by Bill Tomczak */ /* Note: set up the font-size on the id and used 100% on the elements. If ul/li/a are different ems, then the shifting back via non-js keyboard doesn't work properly */ /** * Menu Styling */ #menu { /* this is on the main ul */ position: relative; z-index: 100; padding: 0; margin: 0; width: 100%; list-style: none; font-size: 1.2em; font-weight: bold; } #menu ul { /* all lists */ padding: 0; margin: 0; list-style: none; font-size: 100%; } #menu ul li.separator { margin-bottom: 1em; } #menu a { padding: 0.35em 2.5em 0.35em 2em; vertical-align: middle; display: block; /* width: 10em; */ text-decoration: none; font-size: 100%; } #menu li { /* all list items */ float: left; /* width: 12em; width needed or else Opera goes nuts */ font-size: 100%; } #menu li a { white-space: nowrap; } #menu li li a { margin-bottom: 1px; margin-top: 1px; width: 10em; } #menu li.disabled a:hover, #menu li.disabled a:focus, #menu li.disabled a { cursor: default; } #menu li ul { /* second-level lists */ position: absolute; width: 16em; margin-left: -1000em; /* using left instead of display to hide menus because display: none isn't read by screen readers */ } #menu li li { /* second-level row */ border: none; width: 16em; } #menu li ul ul { /* third-and-above-level lists */ margin: -2.3em 0 0 -1000em; /* top margin is equal to parent line height+bottom padding */ } #menu li:hover ul ul, #menu li.sfhover ul ul { margin-left: -1000em; } #menu li:hover ul, #menu li.sfhover ul { /* lists nested under hovered list items */ margin-left: 0; } #menu li li:hover ul, #menu li li.sfhover ul { margin-left: 16em; } /** * Menu Icons * These icons are used on the Administrator menu * The classes are constructed dynamically when the menu is generated */ [class^="menu-"], [class*=" menu-"] { background-position: 3px 50% !important; } .menu-archive { background-image: url(../images/menu/icon-16-archive.png); } .menu-article { background-image: url(../images/menu/icon-16-article.png); } .menu-associations { background-image: url(../images/menu/icon-16-assoc.png); } .menu-banners { background-image: url(../images/menu/icon-16-banner.png); } .menu-banners-clients { background-image: url(../images/menu/icon-16-banner-client.png); } .menu-banners-tracks { background-image: url(../images/menu/icon-16-banner-tracks.png); } .menu-banners-cat { background-image: url(../images/menu/icon-16-banner-categories.png); } .menu-category { background-image: url(../images/menu/icon-16-category.png); } .menu-checkin { background-image: url(../images/menu/icon-16-checkin.png); } .menu-clear { background-image: url(../images/menu/icon-16-clear.png); } .menu-component { background-image: url(../images/menu/icon-16-component.png); } .menu-config { background-image: url(../images/menu/icon-16-config.png); } .menu-contact { background-image: url(../images/menu/icon-16-contacts.png); } .menu-contact-cat { background-image: url(../images/menu/icon-16-contacts-categories.png); } .menu-content { background-image: url(../images/menu/icon-16-content.png); } .menu-cpanel { background-image: url(../images/menu/icon-16-cpanel.png); } .menu-default { background-image: url(../images/menu/icon-16-default.png); } .menu-featured { background-image: url(../images/menu/icon-16-featured.png); } .menu-fields { background-image: url(../images/menu/icon-16-puzzle.png); } .menu-groups { background-image: url(../images/menu/icon-16-groups.png); } .menu-help { background-image: url(../images/menu/icon-16-help.png); } .menu-help-this { background-image: url(../images/menu/icon-16-help-this.png); } .menu-help-forum { background-image: url(../images/menu/icon-16-help-forum.png); } .menu-help-docs { background-image: url(../images/menu/icon-16-help-docs.png); } .menu-help-jed { background-image: url(../images/menu/icon-16-help-jed.png); } .menu-help-jrd { background-image: url(../images/menu/icon-16-help-jrd.png); } .menu-help-community { background-image: url(../images/menu/icon-16-help-community.png); } .menu-help-security { background-image: url(../images/menu/icon-16-help-security.png); } .menu-help-dev { background-image: url(../images/menu/icon-16-help-dev.png); } .menu-help-shop { background-image: url(../images/menu/icon-16-help-shop.png); } .menu-info { background-image: url(../images/menu/icon-16-info.png); } .menu-install { background-image: url(../images/menu/icon-16-install.png); } .menu-joomlaupdate { background-image: url(../images/menu/icon-16-install.png); } .menu-language { background-image: url(../images/menu/icon-16-language.png); } .menu-levels { background-image: url(../images/menu/icon-16-levels.png); } .menu-logout { background-image: url(../images/menu/icon-16-logout.png); } .menu-maintenance { background-image: url(../images/menu/icon-16-maintenance.png); } .menu-massmail { background-image: url(../images/menu/icon-16-massmail.png); } .menu-media { background-image: url(../images/menu/icon-16-media.png); } .menu-menu { background-image: url(../images/menu/icon-16-menu.png); } .menu-menumgr { background-image: url(../images/menu/icon-16-menumgr.png); } .menu-messages { background-image: url(../images/menu/icon-16-messaging.png); } .menu-messages-add { background-image: url(../images/menu/icon-16-new-privatemessage.png); } .menu-messages-read { background-image: url(../images/menu/icon-16-messages.png); } .menu-module { background-image: url(../images/menu/icon-16-module.png); } .menu-newarticle { background-image: url(../images/menu/icon-16-newarticle.png); } .menu-newcategory { background-image: url(../images/menu/icon-16-newcategory.png); } .menu-newgroup { background-image: url(../images/menu/icon-16-newgroup.png); } .menu-newlevel { background-image: url(../images/menu/icon-16-newlevel.png); } .menu-newuser { background-image: url(../images/menu/icon-16-newuser.png); } .menu-plugin { background-image: url(../images/menu/icon-16-plugin.png); } .menu-profile { background-image: url(../images/menu/icon-16-user.png); } .menu-purge { background-image: url(../images/menu/icon-16-purge.png); } .menu-readmess { background-image: url(../images/menu/icon-16-readmess.png); } .menu-section { background-image: url(../images/menu/icon-16-section.png); } .menu-static { background-image: url(../images/menu/icon-16-static.png); } .menu-stats { background-image: url(../images/menu/icon-16-stats.png); } .menu-themes { background-image: url(../images/menu/icon-16-themes.png); } .menu-trash { background-image: url(../images/menu/icon-16-trash.png); } .menu-user { background-image: url(../images/menu/icon-16-user.png); } .menu-user-note { background-image: url(../images/menu/icon-16-user-note.png); } .menu-delete { background-image: url(../images/menu/icon-16-delete.png); } .menu-help-trans { background-image: url(../images/menu/icon-16-help-trans.png); } .menu-newsfeeds { background-image: url(../images/menu/icon-16-newsfeeds.png); } .menu-newsfeeds-cat { background-image: url(../images/menu/icon-16-newsfeeds-cat.png); } .menu-redirect { background-image: url(../images/menu/icon-16-redirect.png); } .menu-search { background-image: url(../images/menu/icon-16-search.png); } .menu-finder { background-image: url(../images/menu/icon-16-search.png); } .menu-weblinks { background-image: url(../images/menu/icon-16-links.png); } .menu-weblinks-cat { background-image: url(../images/menu/icon-16-links-cat.png); } .menu-tags { background-image: url(../images/menu/icon-16-tags.png); } .menu-postinstall { background-image: url(../images/menu/icon-16-generic.png); } .icon-32-cog { background-image: url(../images/toolbar/icon-32-cog.png); } /** * Extra positioning rules for limited noscript keyboard accessibility * need the backgrounds here to keep the background as the nav background * since it is overlaying other content. * Using margin-left instead of left so that can move back without javascript * display downlevel ul */ #menu li a:focus+ul { margin-left: 0; } #menu li li a:focus+ul { margin-left: 1016em; } /* bring back the focus elements into view */ #menu li li a:focus { margin-left: 1000em; width: 10em; } #menu li li li a:focus { margin-left: 2016em; width: 10em; } #menu li:hover a:focus, #menu li.sfhover a.sffocus { margin-left: 0; } #menu li li:hover a:focus+ul, #menu li li.sfhover a.sffocus+ul { margin-left: 16em; } /** * Sidebar styling */ #sidebar { float:left; margin: 15px 5px; } /** * Submenu styling */ #submenu { list-style: none; padding: 0; margin: 0; /* border-bottom plus padding-bottom is the technique */ padding-bottom: 2.5em; line-height: 2em; } #submenu ul, #submenu li { display: inline; list-style-type: none; margin: 0; padding: 0; } #submenu li, #submenu span.nolink { float: left; font-weight: bold; margin-right: 8px; padding: 2px 10px 2px 10px; text-decoration: none; cursor: pointer; -moz-border-radius-topright: 3px; -moz-border-radius-topleft: 3px; -webkit-border-top-right-radius: 3px; -webkit-border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-left-radius: 3px; } #submenu span.nolink { color: #999; } #submenu li.active, #submenu span.nolink.active { cursor: default; } #submenu li.active a, #submenu span.nolink.active, #submenu li a:hover, #submenu li a:focus { text-decoration: none; } /* -- CUSTOM LANG STRINGS STYLES ----------- */ .red { font-weight: bold; color: #c00; } /* -- OTHER STYLES ----------- */ .pre_message { font-size: 1.3em; } /* -- Update check badges -- */ span.update-badge { background-image: -moz-linear-gradient(center bottom, #FF0000 41%, #FC7E7E 79%); background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.41, rgb(255, 0, 0)), color-stop(0.79, rgb(252, 126, 126))); border: 2px solid white; border-radius: 1.5em 1.5em 1.5em 1.5em; color: white; display: block; float: left; font-size: 1.2em; font-weight: bold; height: 1.2em; left: 60px; min-width: 1em; padding: 0 0.1em 0; position: relative; top: -88px; } /* User Notes */ .unotes ul, .unotes ol { list-style: none; list-style-position: inside; padding-left: 0; padding-right: 0; } .unotes div.utitle { padding: 10px; float: left; font-size: 1.2em; line-height: 1.2em; } .unotes h4 { margin-top: 0; margin-bottom: 0; font-size: 1.3em; } .unotes .ubody { padding-left: 10px; padding-right: 10px; font-size: 1.2em; line-height: 1.5em; } .unotes p { padding-bottom: 10px; } /* com-install styling */ div#database-sliders { margin: 10px; } fieldset.uploadform { margin-top: 10px; margin-bottom: 10px; min-height: 200px; } /* Installer Database */ #installer-database, #installer-discover, #installer-update, #installer-warnings { margin-top: 10px; } #installer-database #sidebar { float: none } #installer-database p.warning { padding-left: 20px; } #installer-database p.nowarning { padding-left: 20px; } /* Spinner */ .joomlaupdate_spinner { float: left; margin-right: 15px; } .btn-group { position: relative; display: inline-block; } .btn-group + .btn-group { margin-left: 5px; } .btn-group > .btn { position: relative; float: left; margin-left: -1px; } .icon-48-cpanel { height: 50px; width: 50%; } .well { min-height: 20px; padding: 19px; margin-bottom: 20px; background-color: #f5f5f5; border: 1px solid #eee; border: 1px solid rgba(0, 0, 0, 0.05); -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); } .well blockquote { border-color: #ddd; border-color: rgba(0, 0, 0, 0.15); } .well-large { padding: 24px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .well-small { padding: 9px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } /* Striped */ .list-striped, .row-striped { list-style: none; line-height: 18px; text-align: left; vertical-align: middle; border-top: 1px solid #dddddd; margin-left: 0; font-size: 1.2em; padding: 9px; } .list-striped li, .list-striped dd, .row-striped .row, .row-striped .row-fluid { border-bottom: 1px solid #dddddd; padding: 8px; } .list-striped li:nth-child(odd), .list-striped dd:nth-child(odd), .row-striped .row:nth-child(odd), .row-striped .row-fluid:nth-child(odd) { background-color: #f9f9f9; } .list-striped li:hover, .list-striped dd:hover, .row-striped .row:hover, .row-striped .row-fluid:hover { background-color: #f5f5f5; } .row-striped .row-fluid { width: 100%; box-sizing: border-box; } .row-striped .row-fluid [class*="span"] { min-height: 10px; } .alert { padding: 8px 35px 8px 14px; margin-bottom: 18px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); background-color: #fcf8e3; border: 1px solid #fbeed5; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; color: #c09853; font-size: 120%; } .alert-heading { color: inherit; } .alert .close { position: relative; right: -30px; top: -5px; line-height: 18px; float: right; font-size: 20px; font-weight: bold; } .alert-success { background-color: #dff0d8; border-color: #d6e9c6; color: #468847; } .alert-danger, .alert-error { background-color: #f2dede; border-color: #eed3d7; color: #b94a48; } .alert-info { background-color: #d9edf7; border-color: #bce8f1; color: #3a87ad; } .alert-block { padding-top: 14px; padding-bottom: 14px; } .alert-block > p, .alert-block > ul { margin-bottom: 0; } .alert-block p + p { margin-top: 5px; } .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active { z-index: 2; } .btn-group > .btn { position: relative; float: left; margin-left: -1px; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } table { max-width: 100%; background-color: transparent; border-collapse: collapse; border-spacing: 0; } .table { width: 100%; margin-bottom: 18px; } .tab-content > .tab-pane, .pill-content > .pill-pane { display: none; } .tab-content > .active, .pill-content > .active { display: block; } .tabs-below > .nav-tabs { border-top: 1px solid #ddd; } #status .btn-toolbar, #status p { margin: 0px; } .navbar .btn-group { margin: 0; padding: 5px 5px 6px; } /** * Media */ .media .btn { margin: 10px 20px; } .thumbnails > li { list-style: none outside none; float: left; margin-bottom: 18px; margin-left: 20px; } #mediamanager-form { margin: 10px; } .is-tagbox { float: left; } /* Item associations */ .item-associations { margin: 0; } .item-associations li { list-style: none; display: inline-block; margin: 0 0 3px 0; } .item-associations li a, table.adminlist .item-associations li a { color: #ffffff; } .hidden { display: none; visibility: hidden; } // Bootstrap Tooltips (need to load last, something is overriding these styles in the CSS, debug later ;-) ) @import "../../../../media/jui/less/tooltip.less"; .tooltip { max-width: 400px; } .tooltip-inner { max-width: none; text-align: left; text-shadow: none; } th .tooltip-inner { font-weight: normal; } .tooltip.hasimage { opacity: 1; } fieldset.panelform .tooltip img { float: none; margin: 0; } //Toggle editor button div.toggle-editor { float: right; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .module-edit { display: inline-block; } .break-word { word-break: break-all; word-wrap: break-word; } .muted { color: #999; } /* Popover minimum height - overwrite bootstrap default */ .popover-content { min-height: 33px; }PKb��\�Ϣ���$templates/hathor/less/variables.lessnu�[���// Variables.less // Variables to customize the look and feel of Bootstrap // ----------------------------------------------------- // GLOBAL VALUES // -------------------------------------------------- // Grays // ------------------------- @black: #000; @grayDarker: #222; @grayDark: #333; @gray: #555; @grayLight: #999; @grayLighter: #eee; @white: #fff; // Accent colors // ------------------------- @blue: #049cdb; @blueDark: #0064cd; @green: #46a546; @red: #9d261d; @yellow: #ffc40d; @orange: #f89406; @pink: #c3325f; @purple: #7a43b6; // Scaffolding // ------------------------- @bodyBackground: @white; @textColor: @grayDark; // Links // ------------------------- @linkColor: #08c; @linkColorHover: darken(@linkColor, 15%); // Typography // ------------------------- @sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; @serifFontFamily: Georgia, "Times New Roman", Times, serif; @monoFontFamily: Menlo, Monaco, Consolas, "Courier New", monospace; @baseFontSize: 13px; @baseFontFamily: @sansFontFamily; @baseLineHeight: 18px; @altFontFamily: @serifFontFamily; @headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily @headingsFontWeight: bold; // instead of browser default, bold @headingsColor: inherit; // empty to use BS default, @textColor // Tables // ------------------------- @tableBackground: transparent; // overall background-color @tableBackgroundAccent: #f9f9f9; // for striping @tableBackgroundHover: #f5f5f5; // for hover @tableBorder: #ddd; // table and cell border // Buttons // ------------------------- @btnBackground: @white; @btnBackgroundHighlight: darken(@white, 10%); @btnBorder: #ccc; @btnPrimaryBackground: #2384d3; @btnPrimaryBackgroundHighlight: #15497c; @btnInfoBackground: #5bc0de; @btnInfoBackgroundHighlight: #2f96b4; @btnSuccessBackground: #62c462; @btnSuccessBackgroundHighlight: #51a351; @btnWarningBackground: lighten(@orange, 15%); @btnWarningBackgroundHighlight: @orange; @btnDangerBackground: #ee5f5b; @btnDangerBackgroundHighlight: #bd362f; @btnInverseBackground: @gray; @btnInverseBackgroundHighlight: @grayDarker; // Forms // ------------------------- @inputBackground: @white; @inputBorder: #ccc; @inputBorderRadius: 3px; @inputDisabledBackground: @grayLighter; @formActionsBackground: #f5f5f5; // Dropdowns // ------------------------- @dropdownBackground: @white; @dropdownBorder: rgba(0,0,0,.2); @dropdownLinkColor: @grayDark; @dropdownLinkColorHover: @white; @dropdownLinkBackgroundHover: @linkColor; @dropdownDividerTop: #e5e5e5; @dropdownDividerBottom: @white; // COMPONENT VARIABLES // -------------------------------------------------- // Z-index master list // ------------------------- // Used for a bird's eye view of components dependent on the z-axis // Try to avoid customizing these :) @zindexDropdown: 1000; @zindexTooltip: 1020; @zindexFixedNavbar: 1030; @zindexModalBackdrop: 1040; @zindexModal: 1050; @zindexPopover: 1060; // Sprite icons path // ------------------------- @iconSpritePath: "../img/glyphicons-halflings.png"; @iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; // Input placeholder text color // ------------------------- @placeholderText: @grayLight; // Hr border color // ------------------------- @hrBorder: @grayLighter; // Navbar // ------------------------- @navbarHeight: 40px; @navbarBackground: @grayDarker; @navbarBackgroundHighlight: @grayDark; @navbarText: @grayLight; @navbarLinkColor: @grayLight; @navbarLinkColorHover: @white; @navbarLinkColorActive: @navbarLinkColorHover; @navbarLinkBackgroundHover: transparent; @navbarLinkBackgroundActive: @navbarBackground; @navbarSearchBackground: lighten(@navbarBackground, 25%); @navbarSearchBackgroundFocus: @white; @navbarSearchBorder: darken(@navbarSearchBackground, 30%); @navbarSearchPlaceholderColor: #ccc; @navbarBrandColor: @navbarLinkColor; // Hero unit // ------------------------- @heroUnitBackground: @grayLighter; @heroUnitHeadingColor: inherit; @heroUnitLeadColor: inherit; // Form states and alerts // ------------------------- @warningText: #c09853; @warningBackground: #fcf8e3; @warningBorder: darken(spin(@warningBackground, -10), 3%); @errorText: #b94a48; @errorBackground: #f2dede; @errorBorder: darken(spin(@errorBackground, -10), 3%); @successText: #468847; @successBackground: #dff0d8; @successBorder: darken(spin(@successBackground, -10), 5%); @infoText: #3a87ad; @infoBackground: #d9edf7; @infoBorder: darken(spin(@infoBackground, -10), 7%); // GRID // -------------------------------------------------- // Default 940px grid // ------------------------- @gridColumns: 12; @gridColumnWidth: 60px; @gridGutterWidth: 20px; @gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); // Fluid grid // ------------------------- @fluidGridColumnWidth: 6.382978723%; @fluidGridGutterWidth: 2.127659574%; // Login // ------------------------- @loginBackground: #142849; @loginBackgroundHighlight: #165387; // Header // ------------------------- @headerBackground: #1a3867; @headerBackgroundHighlight: #17568c;PKb��\�i�9�9�*templates/hathor/less/colour_baseline.lessnu�[���// colour_baseline.less // // Baseline CSS for the Hathor colours. // Compilers should include this in their colour's imports, but not directly // compile using this file. // ----------------------------------------------------- // Core variables and mixins @import "../../../../media/jui/less/mixins.less"; // Bootstrap Buttons // Using override for Hathor to target specific instances only @import "buttons.less"; // Bootstrap Forms // Using override for Hathor since we're not pulling in all Bootstrap form styles @import "forms.less"; // Bootstrap Labels and Badges @import "../../../../media/jui/less/labels-badges.less"; /* * General styles */ body { background-color: @bodyBackground; color: @textColor; } h1 { color: @textColor; } a:link { color: @linkColor; } a:visited { color: @linkColor; } /* * Overall Styles */ #header { background: @bodyBackground url(../images/j_logo.png) no-repeat; } #header h1.title { color: @textColor; } #nav { #gradient > .vertical(@gradientTop, @gradientBottom); border: 1px solid @mainBorder; } #content { background: @bodyBackground; } #no-submenu { border-bottom: 1px solid @mainBorder; } #element-box { background: @bodyBackground; border-right: 1px solid @mainBorder; border-bottom: 1px solid @mainBorder; border-left: 1px solid @mainBorder; } #element-box.login { border-top: 1px solid @mainBorder; } /* * Various Styles */ .enabled, .success, .allow, span.writable { color: @successText; } .disabled, p.error, .warning, .deny, span.unwritable { color: @errorText; } .nowarning { color: @textColor; } .none, .protected { color: @mainBorder; } span.note { background: @bodyBackground; color: @textColor; } div.checkin-tick { background: url(../images/admin/tick.png) 20px 50% no-repeat; } /* * Overlib */ .ol-foreground { background-color: @altBackground; } .ol-background { background-color: @successText; } .ol-textfont { color: @textColor; } .ol-captionfont { color: @bodyBackground; } .ol-captionfont a { color: @linkColor; } /* * Subheader, toolbar, page title */ div.subheader .padding { background: @bodyBackground; } .pagetitle h2 { color: @textColor; } div.configuration { color: @textColor; background-image: url(../images/menu/icon-16-config.png); background-repeat: no-repeat; } div.toolbar-box { border-right: 1px solid @mainBorder; border-bottom: 1px solid @mainBorder; border-left: 1px solid @mainBorder; background: @bodyBackground; } div.toolbar-list li { color: @textColor; } div.toolbar-list li.divider { border-right: 1px dotted @hoverBackground; } div.toolbar-list a { border-left: 1px solid @hoverBackground; border-top: 1px solid @hoverBackground; border-right: 1px solid @mainBorder; border-bottom: 1px solid @mainBorder; background: @altBackground; } div.toolbar-list a:hover { border-left: 1px solid @nwBorder; border-top: 1px solid @nwBorder; border-right: 1px solid @seBorder; border-bottom: 1px solid @seBorder; background: @hoverBackground; color: @toolbarColor; } div.btn-toolbar { margin-left: 5px; padding-top: 3px; } div.btn-toolbar li.divider { border-right: 1px dotted @hoverBackground; } div.btn-toolbar div.btn-group button { border-left: 1px solid @hoverBackground; border-top: 1px solid @hoverBackground; border-right: 1px solid @mainBorder; border-bottom: 1px solid @mainBorder; #gradient > .vertical(@gradientTop, @gradientBottom); padding: 5px 4px 5px 4px; } div.btn-toolbar div.btn-group button:hover { border-left: 1px solid @nwBorder; border-top: 1px solid @nwBorder; border-right: 1px solid @seBorder; border-bottom: 1px solid @seBorder; background: @hoverBackground; color: @toolbarColor; cursor: pointer; } div.btn-toolbar a { border-left: 1px solid @hoverBackground; border-top: 1px solid @hoverBackground; border-right: 1px solid @mainBorder; border-bottom: 1px solid @mainBorder; #gradient > .vertical(@gradientTop, @gradientBottom); padding: 6px 5px; text-align: center; white-space: nowrap; font-size: 1.2em; text-decoration: none; } div.btn-toolbar a:hover { border-left: 1px solid @nwBorder; border-top: 1px solid @nwBorder; border-right: 1px solid @seBorder; border-bottom: 1px solid @seBorder; background: @hoverBackground; color: @toolbarColor; cursor: pointer; } div.btn-toolbar div.btn-group button.inactive { background: @altBackground; } /* * Pane Slider pane Toggler styles */ .pane-sliders .title { color: @textColor; } .pane-sliders .panel { border: 1px solid @mainBorder; } .pane-sliders .panel h3 { #gradient > .vertical(@gradientTop, @gradientBottom); color: @linkColor; } .pane-sliders .panel h3:hover { background: @hoverBackground; } .pane-sliders .panel h3:hover a { text-decoration: none; } .pane-sliders .adminlist { border: 0 none; } .pane-sliders .adminlist td { border: 0 none; } .pane-toggler span { background: transparent url(../images/j_arrow.png) 5px 50% no-repeat; } .pane-toggler-down span { background: transparent url(../images/j_arrow_down.png) 5px 50% no-repeat; } .pane-toggler-down { border-bottom: 1px solid @mainBorder; } /* * Tabs */ dl.tabs dt { border: 1px solid @mainBorder; #gradient > .vertical(@gradientTop, @gradientBottom); color: @linkColor; } dl.tabs dt:hover { background: @hoverBackground; } dl.tabs dt.open { background: @bodyBackground; border-bottom: 1px solid @bodyBackground; color: @textColor; } dl.tabs dt.open a:visited { color: @textColor; } dl.tabs dt a:hover { text-decoration: none; } dl.tabs dt a:focus { text-decoration: underline; } div.current { border: 1px solid @mainBorder; background: @bodyBackground; } /* * New parameter styles */ div.current fieldset { border: none 0; } div.current fieldset.adminform { border: 1px solid @mainBorder; } /* * Login Settings */ #login-page .pagetitle h2 { background: transparent; } #login-page #header { border-bottom: 1px solid @mainBorder; } #login-page #lock { background: url(../images/j_login_lock.png) 50% 0 no-repeat; } #login-page #element-box.login { #gradient > .vertical(@gradientTop, @gradientBottom); } #form-login { background: @bodyBackground; border: 1px solid @mainBorder; } #form-login label { color: @textColor; } #form-login div.button1 a { color: @linkColor; } /* * Cpanel Settings */ #cpanel div.icon a, .cpanel div.icon a { color: @linkColor; border-left: 1px solid @hoverBackground; border-top: 1px solid @hoverBackground; border-right: 1px solid @mainBorder; border-bottom: 1px solid @mainBorder; #gradient > .vertical(@gradientTop, @gradientBottom); } #cpanel div.icon a:hover, #cpanel div.icon a:focus, .cpanel div.icon a:hover, .cpanel div.icon a:focus { border-left: 1px solid @nwBorder; border-top: 1px solid @nwBorder; border-right: 1px solid @seBorder; border-bottom: 1px solid @seBorder; color: @linkColor; background: @hoverBackground; } /* * Form Styles */ fieldset { border: 1px @mainBorder solid; } legend { color: @textColor; } fieldset ul.checklist input:focus { outline: thin dotted @textColor; } fieldset#filter-bar { border-top: 0 solid @mainBorder; border-right: 0 solid @mainBorder; border-bottom: 1px solid @mainBorder; border-left: 0 solid @mainBorder; } fieldset#filter-bar ol, fieldset#filter-bar ul { border: 0; } fieldset#filter-bar ol li fieldset, fieldset#filter-bar ul li fieldset { border: 0; } /* Note: these visual cues should be augmented by aria */ .invalid { color: @errorText; } /* must be augmented by aria at the same time if changed dynamically by js aria-invalid=true or aria-invalid=false */ input.invalid { border: 1px solid @errorText; } /* augmented by aria in template javascript */ input.readonly, span.faux-input { border: 0; } input.required { background-color: @inputBackground; } input.disabled { background-color: @disabledBackground; } input, select, span.faux-input { background-color: @bodyBackground; border: 1px solid @mainBorder; } /* Inputs used as buttons */ input[type="button"], input[type="submit"], input[type="reset"] { color: @linkColor; #gradient > .vertical(@gradientTop, @gradientBottom); } input[type="button"]:hover, input[type="button"]:focus, input[type="submit"]:hover, input[type="submit"]:focus, input[type="reset"]:hover, input[type="reset"]:focus { background: @hoverBackground; } textarea { background-color: @bodyBackground; border: 1px solid @mainBorder; } input:focus, select:focus, textarea:focus, option:focus, input:hover, select:hover, textarea:hover, option:hover { background-color: @hoverBackground; color: @linkColor; } /* * Option or Parameter styles */ .paramrules { background: @altBackground; } span.gi { color: @mainBorder; } /* * Admintable Styles */ table.admintable td.key, table.admintable td.paramlist_key { background-color: @altBackground; color: @textColor; border-bottom: 1px solid @mainBorder; border-right: 1px solid @mainBorder; } table.paramlist td.paramlist_description { background-color: @altBackground; color: @textColor; border-bottom: 1px solid @mainBorder; border-right: 1px solid @mainBorder; } /* * Admin Form Styles */ fieldset.adminform { border: 1px solid @mainBorder; } /* * Table styles are for use with tabular data */ table.adminform { background-color: @bodyBackground; } table.adminform tr.row0 { background-color: @bodyBackground; } table.adminform tr.row1 { background-color: @hoverBackground; } table.adminform th { color: @textColor; background: @bodyBackground; } table.adminform tr { border-bottom: 1px solid @mainBorder; border-right: 1px solid @mainBorder; } /* * Adminlist Table layout */ table.adminlist { border-spacing: 1px; background-color: @bodyBackground; color: @textColor; } table.adminlist.modal { border-top: 1px solid @mainBorder; border-right: 1px solid @mainBorder; border-left: 1px solid @mainBorder; } table.adminlist a { color: @linkColor; } table.adminlist thead th { background: @bodyBackground; color: @textColor; border-bottom: 1px solid @mainBorder; } /* * Table row styles */ table.adminlist tbody tr { background: @bodyBackground; } table.adminlist tbody tr.row1 { background: @bodyBackground; } table.adminlist tbody tr.row1:last-child td, table.adminlist tbody tr.row1:last-child th { border-bottom: 1px solid @mainBorder; } table.adminlist tbody tr.row0:hover td, table.adminlist tbody tr.row1:hover td, table.adminlist tbody tr.row0:hover th, table.adminlist tbody tr.row1:hover th, table.adminlist tbody tr.row0:focus td, table.adminlist tbody tr.row1:focus td, table.adminlist tbody tr.row0:focus th, table.adminlist tbody tr.row1:focus th { background-color: @hoverBackground; } table.adminlist tbody tr td, table.adminlist tbody tr th { border-right: 1px solid @mainBorder; } table.adminlist tbody tr td:last-child { border-right: none; } table.adminlist tbody tr.row0:last-child td, table.adminlist tbody tr.row0:last-child th { border-bottom: 1px solid @mainBorder; } table.adminlist tbody tr.row0 td, table.adminlist tbody tr.row0 th { #gradient > .vertical(@gradientTop, @gradientBottom); } table.adminlist { border-bottom: 0 solid @mainBorder; } table.adminlist tfoot tr { color: @textColor; } /* * Table td/th styles */ table.adminlist tfoot td, table.adminlist tfoot th { background-color: @bodyBackground; border-top: 1px solid @mainBorder; } /* * Adminlist buttons */ table.adminlist tr td.btns a { border: 1px solid @mainBorder; #gradient > .vertical(@gradientTop, @gradientBottom); color: @linkColor; } table.adminlist tr td.btns a:hover, table.adminlist tr td.btns a:active, table.adminlist tr td.btns a:focus { background-color: @bodyBackground; } /* * Saving order icon styling in admin tables */ a.saveorder { background: url(../images/admin/filesave.png) no-repeat; } a.saveorder.inactive { background-position: 0 -16px; } /* * Saving order icon styling in admin tables */ fieldset.batch { background: @bodyBackground; } /** * Button styling */ button { color: @toolbarColor; border: 1px solid @mainBorder; #gradient > .vertical(@gradientTop, @gradientBottom); } button:hover, button:focus { background: @hoverBackground; } .invalid { color: #ff0000; } /* Button 1 Type */ .button1 { border: 1px solid @mainBorder; color: @linkColor; #gradient > .vertical(@gradientTop, @gradientBottom); } /* Use this if you add images to the buttons such as directional arrows */ .button1 a { color: @linkColor; /* add padding if you are using the directional images */ /* padding: 0 30px 0 6px; */ } .button1 a:hover, .button1 a:focus { background: @hoverBackground; } /* Button 2 Type */ .button2-left, .button2-right { border: 1px solid @mainBorder; #gradient > .vertical(@gradientTop, @gradientBottom); } .button2-left a, .button2-right a, .button2-left span, .button2-right span { color: @linkColor; } /* these are inactive buttons */ .button2-left span, .button2-right span { color: #999999; } .page span, .blank span { color: @linkColor; } .button2-left a:hover, .button2-right a:hover, .button2-left a:focus, .button2-right a:focus { background: @hoverBackground; } /** * Pagination styles */ /* Grey out the current page number */ .pagination .page span { color: #999999; } /** * Tooltips */ .tip { background: #000000; border: 1px solid #FFFFFF; } .tip-title { background: url(../images/selector-arrow-std.png) no-repeat; } /** * Calendar */ a img.calendar { background: url(../images/calendar.png) no-repeat; } /** * JGrid styles */ .jgrid span.publish { background-image: url(../images/admin/tick.png); } .jgrid span.unpublish { background-image: url(../images/admin/publish_x.png); } .jgrid span.archive { background-image: url(../images/menu/icon-16-archive.png); } .jgrid span.trash { background-image: url(../images/menu/icon-16-trash.png); } .jgrid span.default { background-image: url(../images/menu/icon-16-default.png); } .jgrid span.notdefault { background-image: url(../images/menu/icon-16-notdefault.png); } .jgrid span.checkedout { background-image: url(../images/admin/checked_out.png); } .jgrid span.downarrow { background-image: url(../images/admin/downarrow.png); } .jgrid span.downarrow_disabled { background-image: url(../images/admin/downarrow0.png); } .jgrid span.uparrow { background-image: url(../images/admin/uparrow.png); } .jgrid span.uparrow_disabled { background-image: url(../images/admin/uparrow0.png); } .jgrid span.published { background-image: url(../images/admin/publish_g.png); } .jgrid span.expired { background-image: url(../images/admin/publish_r.png); } .jgrid span.pending { background-image: url(../images/admin/publish_y.png); } .jgrid span.warning { background-image: url(../images/admin/publish_y.png); } /** * Toolbar icons * These icons are used for the toolbar buttons * The classes are constructed dynamically when the toolbar is created */ .icon-32-send { background-image: url(../images/toolbar/icon-32-send.png); } .icon-32-delete { background-image: url(../images/toolbar/icon-32-delete.png); } .icon-32-help { background-image: url(../images/toolbar/icon-32-help.png); } .icon-32-cancel { background-image: url(../images/toolbar/icon-32-cancel.png); } .icon-32-checkin { background-image: url(../images/toolbar/icon-32-checkin.png); } .icon-32-options { background-image: url(../images/toolbar/icon-32-config.png); } .icon-32-apply { background-image: url(../images/toolbar/icon-32-apply.png); } .icon-32-back { background-image: url(../images/toolbar/icon-32-back.png); } .icon-32-forward { background-image: url(../images/toolbar/icon-32-forward.png); } .icon-32-save { background-image: url(../images/toolbar/icon-32-save.png); } .icon-32-edit { background-image: url(../images/toolbar/icon-32-edit.png); } .icon-32-copy { background-image: url(../images/toolbar/icon-32-copy.png); } .icon-32-move { background-image: url(../images/toolbar/icon-32-move.png); } .icon-32-new { background-image: url(../images/toolbar/icon-32-new.png); } .icon-32-upload { background-image: url(../images/toolbar/icon-32-upload.png); } .icon-32-assign { background-image: url(../images/toolbar/icon-32-publish.png); } .icon-32-html { background-image: url(../images/toolbar/icon-32-html.png); } .icon-32-css { background-image: url(../images/toolbar/icon-32-css.png); } .icon-32-menus { background-image: url(../images/toolbar/icon-32-menu.png); } .icon-32-publish { background-image: url(../images/toolbar/icon-32-publish.png); } .icon-32-unblock { background-image: url(../images/toolbar/icon-32-unblock.png); } .icon-32-unpublish { background-image: url(../images/toolbar/icon-32-unpublish.png); } .icon-32-restore { background-image: url(../images/toolbar/icon-32-revert.png); } .icon-32-trash { background-image: url(../images/toolbar/icon-32-trash.png); } .icon-32-archive { background-image: url(../images/toolbar/icon-32-archive.png); } .icon-32-unarchive { background-image: url(../images/toolbar/icon-32-unarchive.png); } .icon-32-preview { background-image: url(../images/toolbar/icon-32-preview.png); } .icon-32-default { background-image: url(../images/toolbar/icon-32-default.png); } .icon-32-refresh { background-image: url(../images/toolbar/icon-32-refresh.png); } .icon-32-save-new { background-image: url(../images/toolbar/icon-32-save-new.png); } .icon-32-save-copy { background-image: url(../images/toolbar/icon-32-save-copy.png); } .icon-32-error { background-image: url(../images/toolbar/icon-32-error.png); } .icon-32-new-style { background-image: url(../images/toolbar/icon-32-new-style.png); } .icon-32-delete-style { background-image: url(../images/toolbar/icon-32-delete-style.png); } .icon-32-purge { background-image: url(../images/toolbar/icon-32-purge.png); } .icon-32-remove { background-image: url(../images/toolbar/icon-32-remove.png); } .icon-32-featured { background-image: url(../images/toolbar/icon-32-featured.png); } .icon-32-unfeatured { background-image: url(../images/toolbar/icon-32-featured.png); background-position: 0% 100%; } .icon-32-export { background-image: url(../images/toolbar/icon-32-export.png); } .icon-32-stats { background-image: url(../images/toolbar/icon-32-stats.png); } .icon-32-print { background-image: url(../images/toolbar/icon-32-print.png); } .icon-32-batch { background-image: url(../images/toolbar/icon-32-batch.png); } .icon-32-envelope { background-image: url(../images/toolbar/icon-32-messaging.png); } .icon-32-download { background-image: url(../images/toolbar/icon-32-export.png); } .icon-32-bars { background-image: url(../images/toolbar/icon-32-stats.png); } /** * Quick Icons * Also knows as Header Icons * These are used for the Quick Icons on the Control Panel * The same classes are also assigned the Component Title */ .icon-48-categories { background-image: url(../images/header/icon-48-category.png); } .icon-48-category-edit { background-image: url(../images/header/icon-48-category.png); } .icon-48-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-generic { background-image: url(../images/header/icon-48-generic.png); } .icon-48-banners { background-image: url(../images/header/icon-48-banner.png); } .icon-48-banners-categories { background-image: url(../images/header/icon-48-banner-categories.png); } .icon-48-banners-category-edit { background-image: url(../images/header/icon-48-banner-categories.png); } .icon-48-banners-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-banners-clients { background-image: url(../images/header/icon-48-banner-client.png); } .icon-48-banners-tracks { background-image: url(../images/header/icon-48-banner-tracks.png); } .icon-48-checkin { background-image: url(../images/header/icon-48-checkin.png); } .icon-48-clear { background-image: url(../images/header/icon-48-clear.png); } .icon-48-contact { background-image: url(../images/header/icon-48-contacts.png); } .icon-48-contact-categories { background-image: url(../images/header/icon-48-contacts-categories.png); } .icon-48-contact-category-edit { background-image: url(../images/header/icon-48-contacts-categories.png); } .icon-48-contact-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-purge { background-image: url(../images/header/icon-48-purge.png); } .icon-48-cpanel { background-image: url(../images/header/icon-48-cpanel.png); } .icon-48-config { background-image: url(../images/header/icon-48-config.png); } .icon-48-groups { background-image: url(../images/header/icon-48-groups.png); } .icon-48-groups-add { background-image: url(../images/header/icon-48-groups-add.png); } .icon-48-levels { background-image: url(../images/header/icon-48-levels.png); } .icon-48-levels-add { background-image: url(../images/header/icon-48-levels-add.png); } .icon-48-module { background-image: url(../images/header/icon-48-module.png); } .icon-48-menu { background-image: url(../images/header/icon-48-menu.png); } .icon-48-menu-add { background-image: url(../images/header/icon-48-menu-add.png); } .icon-48-menumgr { background-image: url(../images/header/icon-48-menumgr.png); } .icon-48-trash { background-image: url(../images/header/icon-48-trash.png); } .icon-48-user { background-image: url(../images/header/icon-48-user.png); } .icon-48-user-add { background-image: url(../images/header/icon-48-user-add.png); } .icon-48-user-edit { background-image: url(../images/header/icon-48-user-edit.png); } .icon-48-user-profile { background-image: url(../images/header/icon-48-user-profile.png); } .icon-48-inbox { background-image: url(../images/header/icon-48-inbox.png); } .icon-48-new-privatemessage { background-image: url(../images/header/icon-48-new-privatemessage.png); } .icon-48-msgconfig { background-image: url(../images/header/icon-48-message_config.png); } .icon-48-langmanager { background-image: url(../images/header/icon-48-language.png); } .icon-48-mediamanager { background-image: url(../images/header/icon-48-media.png); } .icon-48-plugin { background-image: url(../images/header/icon-48-plugin.png); } .icon-48-help_header { background-image: url(../images/header/icon-48-help_header.png); } .icon-48-impressions { background-image: url(../images/header/icon-48-stats.png); } .icon-48-browser { background-image: url(../images/header/icon-48-stats.png); } .icon-48-searchtext { background-image: url(../images/header/icon-48-stats.png); } .icon-48-thememanager { background-image: url(../images/header/icon-48-themes.png); } .icon-48-writemess { background-image: url(../images/header/icon-48-writemess.png); } .icon-48-featured { background-image: url(../images/header/icon-48-featured.png); } .icon-48-sections { background-image: url(../images/header/icon-48-section.png); } .icon-48-article-add { background-image: url(../images/header/icon-48-article-add.png); } .icon-48-article-edit { background-image: url(../images/header/icon-48-article-edit.png); } .icon-48-article { background-image: url(../images/header/icon-48-article.png); } .icon-48-content-categories { background-image: url(../images/header/icon-48-category.png); } .icon-48-content-category-edit { background-image: url(../images/header/icon-48-category.png); } .icon-48-content-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-install { background-image: url(../images/header/icon-48-extension.png); } .icon-48-dbbackup { background-image: url(../images/header/icon-48-backup.png); } .icon-48-dbrestore { background-image: url(../images/header/icon-48-dbrestore.png); } .icon-48-dbquery { background-image: url(../images/header/icon-48-query.png); } .icon-48-systeminfo { background-image: url(../images/header/icon-48-info.png); } .icon-48-massmail { background-image: url(../images/header/icon-48-massmail.png); } .icon-48-redirect { background-image: url(../images/header/icon-48-redirect.png); } .icon-48-search { background-image: url(../images/header/icon-48-search.png); } .icon-48-finder { background-image: url(../images/header/icon-48-search.png); } .icon-48-newsfeeds { background-image: url(../images/header/icon-48-newsfeeds.png); } .icon-48-newsfeeds-categories { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } .icon-48-newsfeeds-category-edit { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } .icon-48-newsfeeds-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-weblinks { background-image: url(../images/header/icon-48-links.png); } .icon-48-weblinks-categories { background-image: url(../images/header/icon-48-links-cat.png); } .icon-48-weblinks-category-edit { background-image: url(../images/header/icon-48-links-cat.png); } .icon-48-weblinks-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-tags { background-image: url(../images/header/icon-48-tags.png); } .icon-48-assoc { background-image: url(../images/header/icon-48-assoc.png); } .icon-48-puzzle { background-image: url(../images/header/icon-48-puzzle.png); } /** * General styles */ div.message { border: 1px solid @mainBorder; color: @textColor; } .helpFrame { border-left: 0 solid @mainBorder; border-right: none; border-top: none; border-bottom: none; } .outline { border: 1px solid @mainBorder; background: @bodyBackground; } /** * Modal Styles */ dl.menu_type dt { border-bottom: 1px solid @mainBorder; } ul#new-modules-list { border-top: 1px solid @mainBorder; } /** * User Accessibility */ /* Skip to Content Visual Styling */ #skiplinkholder a, #skiplinkholder a:link, #skiplinkholder a:visited { color: @bodyBackground; background: @linkColor; border-bottom: solid #336 2px; } /** * Admin Form Styles */ fieldset.panelform { border: none 0; } /** * ACL STYLES relocated from com_users/media/grid.css */ a.move_up { background-image: url('../images/admin/uparrow.png'); } span.move_up { background-image: url('../images/admin/uparrow0.png'); } a.move_down { background-image: url('../images/admin/downarrow.png'); } span.move_down { background-image: url('../images/admin/downarrow0.png'); } a.grid_false { background-image: url('../images/admin/publish_x.png'); } a.grid_true { background-image: url('../images/admin/tick.png'); } a.grid_trash { background-image: url('../images/admin/icon-16-trash.png'); } /** * ACL PANEL STYLES */ /* All Tabs */ tr.row1 { background-color: @altBackground; } /* Summary Tab */ table.aclsummary-table td.col2, table.aclsummary-table th.col2, table.aclsummary-table td.col3, table.aclsummary-table th.col3, table.aclsummary-table td.col4, table.aclsummary-table th.col4, table.aclsummary-table td.col5, table.aclsummary-table th.col5, table.aclsummary-table td.col6, table.aclsummary-table th.col6, table.aclmodify-table td.col2, table.aclmodify-table th.col2 { border-left: 1px solid @mainBorder; } /* Icons */ span.icon-16-unset { background: url(../images/admin/icon-16-denyinactive.png) no-repeat; } span.icon-16-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat; } span.icon-16-denied { background: url(../images/admin/icon-16-deny.png) no-repeat; } span.icon-16-locked { background: url(../images/admin/checked_out.png) 0 0 no-repeat; } label.icon-16-allow { background: url(../images/admin/icon-16-allow.png) no-repeat; } label.icon-16-deny { background: url(../images/admin/icon-16-deny.png) no-repeat; } a.icon-16-allow { background: url(../images/admin/icon-16-allow.png) no-repeat; } a.icon-16-deny { background: url(../images/admin/icon-16-deny.png) no-repeat; } a.icon-16-allowinactive { background: url(../images/admin/icon-16-allowinactive.png) no-repeat; } a.icon-16-denyinactive { background: url(../images/admin/icon-16-denyinactive.png) no-repeat; } /* ACL footer/legend */ ul.acllegend li.acl-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat left; } ul.acllegend li.acl-denied { background: url(../images/admin/icon-16-deny.png) no-repeat left; } li.acl-editgroups, li.acl-resetbtn { background-color: @altBackground; border: 1px solid @mainBorder; } li.acl-editgroups a, li.acl-resetbtn a { color: @linkColor; } li.acl-editgroups:hover, li.acl-resetbtn:hover, li.acl-editgroups:focus, li.acl-resetbtn:focus { background-color: @hoverBackground; } /* ACL Config --------- */ table#acl-config { border: 1px solid @mainBorder; } table#acl-config th, table#acl-config td { background: @altBackground; border-bottom: 1px solid @mainBorder; } table#acl-config th.acl-groups { border-right: 1px solid @mainBorder; } /** * Mod_rewrite Warning */ #jform_sef_rewrite-lbl { background: url(../images/admin/icon-16-notice-note.png) right top no-repeat; } /** * Permission Rules */ #permissions-sliders .tip { background: @bodyBackground; border: 1px solid @mainBorder; } #permissions-sliders ul#rules, #permissions-sliders ul#rules ul { border: solid 0 @mainBorder; background: @bodyBackground; } ul#rules li .pane-sliders .panel h3.title { border: solid 0 @mainBorder; } #permissions-sliders ul#rules .pane-slider { border: solid 1px @mainBorder; } #permissions-sliders ul#rules li h3 { border: solid 1px @mainBorder; } #permissions-sliders ul#rules li h3.pane-toggler-down a { border: solid 0; } #permissions-sliders ul#rules .group-kind { color: @textColor; } #permissions-sliders ul#rules table.group-rules { border: solid 1px @mainBorder; } #permissions-sliders ul#rules table.group-rules td { border-right: solid 1px @mainBorder; border-bottom: solid 1px @mainBorder; } #permissions-sliders ul#rules table.group-rules th { background: @hoverBackground; border-right: solid 1px @mainBorder; border-bottom: solid 1px @mainBorder; color: @textColor; } ul#rules table.aclmodify-table { border: solid 1px @mainBorder; } ul#rules table.group-rules td label { border: solid 0 @mainBorder; } #permissions-sliders ul#rules .mypanel { border: solid 0 @mainBorder; } #permissions-sliders ul#rules table.group-rules td { background: @bodyBackground; } #permissions-sliders span.level { color: @mainBorder; background-image: none; } /* * Debug styles */ .check-0, table.adminlist tbody td.check-0 { background-color: @permissionDefault; } .check-a, table.adminlist tbody td.check-a { background-color: @permissionAllowed; } .check-d, table.adminlist tbody td.check-d { background-color: @permissionDenied; } /** * System Messages */ #system-message dd ul { color: @textColor; } #system-message dd.error ul { color: @textColor; } #system-message dd.message ul { color: @textColor; } #system-message dd.notice ul { color: @textColor; } /** CSS file for Accessible Admin Menu * based on Matt Carrolls' son of suckerfish * with javascript by Bill Tomczak */ /* Note: set up the font-size on the id and used 100% on the elements. If ul/li/a are different ems, then the shifting back via non-js keyboard doesn't work properly */ /** * Menu Styling */ #menu { /* this is on the main ul */ color: @textColor; } #menu ul.dropdown-menu { /* all lists */ #gradient > .vertical(@gradientTop, @gradientBottom); color: @textColor; } #menu ul.dropdown-menu li.dropdown-submenu { background: url(../images/j_arrow.png) no-repeat right 50%; } #menu ul.dropdown-menu li.divider { margin-bottom: 0; border-bottom: 1px dotted @mainBorder; } #menu a { color: @toolbarColor; background-repeat: no-repeat; background-position: left 50%; } #menu li { /* all list items */ border-right: 1px solid @mainBorder; background-color: transparent; } #menu li a:hover, #menu li a:focus { background-color: @hoverBackground; } #menu li.disabled a:hover, #menu li.disabled a:focus, #menu li.disabled a { color: @mainBorder; #gradient > .vertical(@gradientTop, @gradientBottom); } #menu li ul { /* second-level lists */ border: 1px solid @mainBorder; } #menu li li { /* second-level row */ background-color: transparent; } /** * Styling parents */ /* 1 level - sfhover */ #menu li.sfhover a { background-color: @hoverBackground; } /* 2 level - normal */ #menu li.sfhover li a { background-color: transparent; } /* 2 level - hover */ #menu li.sfhover li.sfhover a, #menu li li a:focus { background-color: @hoverBackground; } /* 3 level - normal */ #menu li.sfhover li.sfhover li a { background-color: transparent; } /* 3 level - hover */ #menu li.sfhover li.sfhover li.sfhover a, #menu li li li a:focus { background-color: @hoverBackground; } /* bring back the focus elements into view */ #menu li li a:focus, #menu li li li a:focus { background-color: @hoverBackground; } #menu li li li a:focus { background-color: @hoverBackground; } /** * Submenu styling */ #submenu { border-bottom: 1px solid @mainBorder; /* border-bottom plus padding-bottom is the technique */ /* This is the background befind the tabs */ /*background: @bodyBackground;*/ } #submenu li, #submenu span.nolink { #gradient > .vertical(@gradientTop, @gradientBottom); border: 1px solid @mainBorder; color: @linkColor; } #submenu li:hover, #submenu li:focus { background: @hoverBackground; } #submenu li.active, #submenu span.nolink.active { background: @bodyBackground; border-bottom: 1px solid @bodyBackground; } #submenu li.active a, #submenu span.nolink.active { color: #000; } .element-invisible { margin: 0; padding: 0; } /* -- Codemirror Editor ----------- */ div.CodeMirror-wrapping { border: 1px solid @mainBorder; } /* User Notes */ table.adminform tr.row0 { background-color: @bodyBackground; } ul.alternating > li:nth-child(odd) { background-color: @bodyBackground; } ul.alternating > li:nth-child(even) { background-color: @altBackground; } ol.alternating > li:nth-child(odd) { background-color: @bodyBackground; } ol.alternating > li:nth-child(even) { background-color: @altBackground; } /* Installer Database */ #installer-database, #installer-discover, #installer-update, #installer-warnings { border-top: 1px solid @mainBorder; } #installer-database p.warning { background: transparent url(../images/admin/icon-16-deny.png) center left no-repeat; } #installer-database p.nowarning { background: transparent url(../images/admin/icon-16-allow.png) center left no-repeat; } /* Override default bootstrap font-size */ .input-append, .input-prepend { font-size: 1.2em; } PKb��\�x��+templates/hathor/less/hathor_variables.lessnu�[���// hathor_variables.less // // Less file containing Bootstrap variables needed to compile its CSS // ----------------------------------------------------- // Grays // ------------------------- @black: #000000; @grayDarker: #222222; @grayDark: #333333; @gray: #555555; @grayLight: #999999; @grayLighter: #eeeeee; @white: #ffffff; // Accent colors // ------------------------- @blue: #049cdb; @blueDark: #0064cd; @green: #46a546; @red: #9d261d; @yellow: #ffc40d; @orange: #f89406; @pink: #c3325f; @purple: #7a43b6; // Scaffolding // ------------------------- @bodyBackground: @white; @textColor: #2c2c2c; // Links // ------------------------- @linkColor: #054993; @linkColorHover: darken(@linkColor, 15%); // Typography // ------------------------- @baseFontSize: 13px; @baseLineHeight: 15px; @headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily @headingsFontWeight: bold; // instead of browser default, bold @headingsColor: inherit; // empty to use BS default, @textColor // Component sizing // ------------------------- @baseBorderRadius: 4px; @borderRadiusLarge: 6px; @borderRadiusSmall: 3px; // Buttons // ------------------------- @btnBackground: @white; @btnBackgroundHighlight: darken(@white, 10%); @btnBorder: #bbb; @btnPrimaryBackground: @linkColor; @btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%); @btnInfoBackground: #5bc0de; @btnInfoBackgroundHighlight: #2f96b4; @btnSuccessBackground: #62c462; @btnSuccessBackgroundHighlight: #51a351; @btnWarningBackground: lighten(@orange, 15%); @btnWarningBackgroundHighlight: @orange; @btnDangerBackground: #ee5f5b; @btnDangerBackgroundHighlight: #bd362f; @btnInverseBackground: #444; @btnInverseBackgroundHighlight: @grayDarker; // Forms // ------------------------- @inputBackground: #e5f0fa; @inputBorder: #ccc; @inputBorderRadius: 3px; @inputDisabledBackground: @grayLighter; @formActionsBackground: #f5f5f5; @inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border // Z-index master list // ------------------------- // Used for a bird's eye view of components dependent on the z-axis // Try to avoid customizing these :) @zindexDropdown: 1000; @zindexTooltip: 1030; @zindexFixedNavbar: 1030; @zindexModalBackdrop: 1040; @zindexModal: 1050; @zindexPopover: 1060; // Form states and alerts // ------------------------- @warningText: #c09853; @warningBackground: #fcf8e3; @warningBorder: darken(spin(@warningBackground, -10), 3%); @errorText: #a20000; @errorBackground: #f2dede; @errorBorder: darken(spin(@errorBackground, -10), 3%); @successText: #005800; @successBackground: #dff0d8; @successBorder: darken(spin(@successBackground, -10), 5%); @infoText: #3a87ad; @infoBackground: #d9edf7; @infoBorder: darken(spin(@infoBackground, -10), 7%); // Tooltips and popovers // ------------------------- @tooltipColor: @white; @tooltipBackground: @black; @tooltipArrowWidth: 5px; @tooltipArrowColor: @tooltipBackground; @popoverBackground: @white; @popoverArrowWidth: 10px; @popoverArrowColor: @white; @popoverTitleBackground: darken(@popoverBackground, 3%); // Special enhancement for popovers @popoverArrowOuterWidth: @popoverArrowWidth + 1; @popoverArrowOuterColor: rgba(0,0,0,.25); // Variables unique to Hathor // ------------------------- @toolbarColor: @linkColor; @hoverBackground: #e5d9c3; @nwBorder: #868778; @seBorder: #f6f7db; @fadedText: #cccccc; @disabledBackground: #eeeeee; @permissionDefault: #ffffcf; @permissionAllowed: #cfffda; @permissionDenied: #ffcfcf; PKb��\�.r.�� templates/hathor/less/forms.lessnu�[���// // Forms // This is a custom version of Bootstrap's forms.less file suited for Hathor's needs // -------------------------------------------------- // Ensure input-prepend/append never wraps .input-append input[class*="span"], .input-append .uneditable-input[class*="span"], .input-prepend input[class*="span"], .input-prepend .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"], .row-fluid .input-prepend [class*="span"], .row-fluid .input-append [class*="span"] { display: inline-block; } // Allow us to put symbols and text within the input field for a cleaner look .input-append, .input-prepend { margin-bottom: 5px; font-size: 0; white-space: nowrap; // Prevent span and input from separating input, select, .uneditable-input { position: relative; // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms *margin-left: 0; font-size: @baseFontSize; vertical-align: top; .border-radius(0 @inputBorderRadius @inputBorderRadius 0); // Make input on top when focused so blue border and shadow always show &:focus { z-index: 2; } } .add-on { display: inline-block; width: auto; height: @baseLineHeight; min-width: 16px; padding: 4px 5px; font-size: @baseFontSize; font-weight: normal; line-height: @baseLineHeight; text-align: center; text-shadow: 0 1px 0 @white; background-color: @grayLighter; border: 1px solid #ccc; } .add-on, .btn { margin-left: -1px; vertical-align: top; .border-radius(0); } .active { background-color: lighten(@green, 30); border-color: @green; } } .input-prepend { .add-on, .btn { margin-right: -1px; } .add-on:first-child, .btn:first-child { .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); } } .input-append { input, select, .uneditable-input { .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); } .add-on:last-child, .btn:last-child { .border-radius(0 @inputBorderRadius @inputBorderRadius 0); } } // Remove all border-radius for inputs with both prepend and append .input-prepend.input-append { input, select, .uneditable-input { .border-radius(0); } .add-on:first-child, .btn:first-child { margin-right: -1px; .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); } .add-on:last-child, .btn:last-child { margin-left: -1px; .border-radius(0 @inputBorderRadius @inputBorderRadius 0); } } /* Allow for input prepend/append in search forms */ .form-search .input-append .search-query, .form-search .input-prepend .search-query { .border-radius(0); // Override due to specificity } .form-search .input-append .search-query { .border-radius(14px 0 0 14px) } .form-search .input-append .btn { .border-radius(0 14px 14px 0) } .form-search .input-prepend .search-query { .border-radius(0 14px 14px 0) } .form-search .input-prepend .btn { .border-radius(14px 0 0 14px) } .form-search, .form-inline, .form-horizontal { input, textarea, select, .help-inline, .uneditable-input, .input-prepend, .input-append { display: inline-block; .ie7-inline-block(); margin-bottom: 0; vertical-align: middle; } // Re-hide hidden elements due to specifity .hide { display: none; } } // Remove margin for input-prepend/-append .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend { margin-bottom: 0; } /* Accessible Hidden Elements (good for hidden labels and such) */ .element-invisible{ position: absolute; padding: 0 !important; margin: 0 !important; border: 0; height: 1px; width: 1px !important; overflow: hidden; } // Login form only // Shared size and type resets #form-login select, #form-login input[type="text"], #form-login input[type="password"] { display: inline-block; padding: 4px 6px; margin-bottom: 9px; font-size: @baseFontSize; line-height: @baseLineHeight; color: @gray; .border-radius(@inputBorderRadius); width: 175px; } /* Field subform repeatable */ .subform-repeatable-wrapper{ div.btn-toolbar{ float: none; } .text-right{ text-align: right; } .ui-sortable-helper{ background: @white; } tr.ui-sortable-helper{ display: table; } .subform-repeatable-group{ clear: both; } } PKb��\G�e�'templates/hathor/less/colour_brown.lessnu�[���// colour_brown.less // // Less to compile Hathor in the brown colour scheme // ----------------------------------------------------- /** * #2c2c2c Text * #054993 Links * #ffffff Background, border, text * #d5c1b2 Background alternate, button/icon/menu background * #d5c1b2-d5c1b2 Gradient Background * #e5f0fa Background (input required) * #e1d3c8 Background Hover, Top/Left icon borders * #000000 Main borders * #000000 Top/Left hover borders * #000000 Right/Bottom hover borders * * Special Use Colors: * #a20000 Text Error, border invalid * #cccccc Text (faded) * #005800 Text (success) * #eeeeee Background (input disabled) * #ffffcf Background permissions debug * #cfffda Background permissions debug * #ffcfcf Background permissions debug */ // Import the variables file first to get common variables loaded @import "hathor_variables.less"; // Define variables unique to this colour scheme, as well as override variables already defined in the common file @altBackground: #d5c1b2; @gradientTop: #d5c1b2; @gradientBottom: #d5c1b2; @mainBorder: #000000; @toolbarColor: #054993; @hoverBackground: #e5d9c3; @nwBorder: #868778; @seBorder: #f6f7db; // Import the baseline to compile the CSS @import "colour_baseline.less"; PKb��\�_]a��templates/hathor/error.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** @var JDocumentError $this */ $app = JFactory::getApplication(); ?> <!DOCTYPE html> <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <meta charset="utf-8" /> <title><?php echo $this->title; ?> <?php echo htmlspecialchars($this->error->getMessage(), ENT_QUOTES, 'UTF-8'); ?></title> <link href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/css/error.css" rel="stylesheet" /> <?php if ($app->get('debug_lang', '0') == '1' || $app->get('debug', '0') == '1') : ?> <!-- Load additional CSS styles for debug mode--> <link href="<?php echo JUri::root(true); ?>/media/cms/css/debug.css" rel="stylesheet" /> <?php endif; ?> <!-- Load additional CSS styles for rtl sites --> <?php if ($this->direction == 'rtl') : ?> <link href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/css/template_rtl.css" rel="stylesheet" /> <?php endif; ?> <!--[if lt IE 9]><script src="<?php echo JUri::root(true); ?>/media/jui/js/html5.js"></script><![endif]--> </head> <body class="errors"> <div> <h1> <?php echo $this->error->getCode(); ?> - <?php echo JText::_('JERROR_AN_ERROR_HAS_OCCURRED'); ?> </h1> </div> <div> <p> <?php echo htmlspecialchars($this->error->getMessage(), ENT_QUOTES, 'UTF-8'); ?> <?php if ($this->debug) : ?> <br/><?php echo htmlspecialchars($this->error->getFile(), ENT_QUOTES, 'UTF-8');?>:<?php echo $this->error->getLine(); ?> <?php endif; ?> </p> <p><a href="index.php"><?php echo JText::_('JGLOBAL_TPL_CPANEL_LINK_TEXT'); ?></a></p> <?php if ($this->debug) : ?> <div> <?php echo $this->renderBacktrace(); ?> <?php // Check if there are more Exceptions and render their data as well ?> <?php if ($this->error->getPrevious()) : ?> <?php $loop = true; ?> <?php // Reference $this->_error here and in the loop as setError() assigns errors to this property and we need this for the backtrace to work correctly ?> <?php // Make the first assignment to setError() outside the loop so the loop does not skip Exceptions ?> <?php $this->setError($this->_error->getPrevious()); ?> <?php while ($loop === true) : ?> <p><strong><?php echo JText::_('JERROR_LAYOUT_PREVIOUS_ERROR'); ?></strong></p> <p> <?php echo htmlspecialchars($this->_error->getMessage(), ENT_QUOTES, 'UTF-8'); ?> <br/><?php echo htmlspecialchars($this->_error->getFile(), ENT_QUOTES, 'UTF-8');?>:<?php echo $this->_error->getLine(); ?> </p> <?php echo $this->renderBacktrace(); ?> <?php $loop = $this->setError($this->_error->getPrevious()); ?> <?php endwhile; ?> <?php // Reset the main error object to the base error ?> <?php $this->setError($this->error); ?> <?php endif; ?> </div> <?php endif; ?> </div> <div class="clr"></div> <noscript> <?php echo JText::_('JGLOBAL_WARNJAVASCRIPT'); ?> </noscript> </body> </html> PKb��\�P�E�Etemplates/hathor/LICENSE.txtnu�[���GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. PKb��\�0K���/templates/hathor/html/com_tags/tags/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $app = JFactory::getApplication(); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = $listOrder == 'a.ordering'; $n = count($this->items); ?> <form action="<?php echo JRoute::_('index.php?option=com_tags&view=tags');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_TAGS_FILTER_SEARCH_DESC'); ?>" /> <button type="submit" class="btn"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_published"><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true); ?> </select> <label class="selectlabel" for="filter_access"><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')); ?> </select> <label class="selectlabel" for="filter_author_id"><?php echo JText::_('JOPTION_SELECT_AUTHOR'); ?></label> <select name="filter_author_id" id="filter_author_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_AUTHOR'); ?></option> <?php echo JHtml::_('select.options', $this->authors, 'value', 'text', $this->state->get('filter.author_id')); ?> </select> <label class="selectlabel" for="filter_language"><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language')); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'access', $listDirn, $listOrder); ?> <th class="language-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'language', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $item->max_ordering = 0; //?? $canCreate = $user->authorise('core.create', 'com_tags'); $canEdit = $user->authorise('core.edit', 'com_tags.tag.' . $item->id); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out_user_id == $userId || $item->checked_out_user_id == 0; $canChange = $user->authorise('core.edit.state', 'com_tags.tag.' . $item->id) && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <th class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </th> <td> <?php if ($item->level > 0): ?> <?php echo str_repeat('<span class="gi">—</span>', $item->level - 1) ?> <?php endif; ?> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'tags.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit || $canEditOwn) : ?> <a href="<?php echo JRoute::_('index.php?option=com_tags&task=tag.edit&id='.$item->id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <p class="smallsub"> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?></p> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'tags.', $canChange, 'cb'); ?> </td> <td class="center"> <?php echo $this->escape($item->access_title); ?> </td> <td class="center"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php //Load the batch processing form if user is allowed ?> <?php if ($user->authorise('core.create', 'com_tags') && $user->authorise('core.edit', 'com_tags') && $user->authorise('core.edit.state', 'com_tags')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_TAGS_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif;?> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\ïў��3templates/hathor/html/com_tags/tag/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">'.$this->escape(JText::_($fieldSet->description)).'</p>'; endif; ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_($fieldSet->label); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('created_user_id'); ?> <?php echo $this->form->getInput('created_user_id'); ?></li> <li><?php echo $this->form->getLabel('created_by_alias'); ?> <?php echo $this->form->getInput('created_by_alias'); ?></li> <li><?php echo $this->form->getLabel('created_time'); ?> <?php echo $this->form->getInput('created_time'); ?></li> <li><?php echo $this->form->getLabel('publish_up'); ?> <?php echo $this->form->getInput('publish_up'); ?></li> <li><?php echo $this->form->getLabel('publish_down'); ?> <?php echo $this->form->getInput('publish_down'); ?></li> <li><?php echo $this->form->getLabel('modified_user_id'); ?> <?php echo $this->form->getInput('modified_user_id'); ?></li> <li><?php echo $this->form->getLabel('modified_time'); ?> <?php echo $this->form->getInput('modified_time'); ?></li> <li><?php echo $this->form->getLabel('version'); ?> <?php echo $this->form->getInput('version'); ?></li> </ul> </fieldset> <?php $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-params'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">'.$this->escape(JText::_($fieldSet->description)).'</p>'; endif; ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_($fieldSet->label); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php endforeach; ?> PKb��\� �NN+templates/hathor/html/com_tags/tag/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); $saveHistory = $this->state->get('params')->get('save_history', 0); JHtml::_('behavior.formvalidator'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'tag.cancel' || document.formvalidator.isValid(document.getElementById('tag-form'))) { " . $this->form->getField('description')->save() . " Joomla.submitform(task, document.getElementById('tag-form')); } } "); ?> <div class="weblink-edit"> <form action="<?php echo JRoute::_('index.php?option=com_tags&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="tag-form" class="form-validate"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo empty($this->item->id) ? JText::_('JTOOLBAR_NEW') : JText::sprintf('JTOOLBAR_EDIT', $this->item->id); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('title'); ?> <?php echo $this->form->getInput('title'); ?></li> <li><?php echo $this->form->getLabel('alias'); ?> <?php echo $this->form->getInput('alias'); ?></li> <li><?php echo $this->form->getLabel('parent_id'); ?> <?php echo $this->form->getInput('parent_id'); ?></li> <li><?php echo $this->form->getLabel('published'); ?> <?php echo $this->form->getInput('published'); ?></li> <li><?php echo $this->form->getLabel('access'); ?> <?php echo $this->form->getInput('access'); ?></li> <li><?php echo $this->form->getLabel('language'); ?> <?php echo $this->form->getInput('language'); ?></li> <?php if ($saveHistory) : ?> <li><?php echo $this->form->getLabel('version_note'); ?> <?php echo $this->form->getInput('version_note'); ?></li> <?php endif; ?> <li><?php echo $this->form->getLabel('id'); ?> <?php echo $this->form->getInput('id'); ?></li> </ul> <div> <?php echo $this->form->getLabel('description'); ?> <div class="clr"></div> <?php echo $this->form->getInput('description'); ?> </div> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'weblink-sliders-'.$this->item->id, array('useCookie' => 1)); ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_PUBLISHING'), 'publishing-details'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_PUBLISHING'); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('created_by'); ?> <?php echo $this->form->getInput('created_by'); ?></li> <li><?php echo $this->form->getLabel('created_by_alias'); ?> <?php echo $this->form->getInput('created_by_alias'); ?></li> <li><?php echo $this->form->getLabel('created'); ?> <?php echo $this->form->getInput('created'); ?></li> <li><?php echo $this->form->getLabel('publish_up'); ?> <?php echo $this->form->getInput('publish_up'); ?></li> <li><?php echo $this->form->getLabel('publish_down'); ?> <?php echo $this->form->getInput('publish_down'); ?></li> <?php if ($this->item->modified_user_id) : ?> <li><?php echo $this->form->getLabel('modified_user_id'); ?> <?php echo $this->form->getInput('modified_user_id'); ?></li> <li><?php echo $this->form->getLabel('modified'); ?> <?php echo $this->form->getInput('modified'); ?></li> <?php endif; ?> <?php if ($this->item->hits) : ?> <li><?php echo $this->form->getLabel('hits'); ?> <?php echo $this->form->getInput('hits'); ?></li> <?php endif; ?> </ul> </fieldset> <?php echo $this->loadTemplate('options'); ?> <?php echo $this->loadTemplate('metadata'); ?> <?php echo JHtml::_('sliders.end'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> <div class="clr"></div> </form> </div> PKb��\��y��4templates/hathor/html/com_tags/tag/edit_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $fieldSets = $this->form->getFieldsets('metadata'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">'.$this->escape(JText::_($fieldSet->description)).'</p>'; endif; ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_($fieldSet->label); ?></legend> <ul class="adminformlist"> <?php if ($name == 'jmetadata') : // Include the real fields in this panel. ?> <li><?php echo $this->form->getLabel('metadesc'); ?> <?php echo $this->form->getInput('metadesc'); ?></li> <li><?php echo $this->form->getLabel('metakey'); ?> <?php echo $this->form->getInput('metakey'); ?></li> <li><?php echo $this->form->getLabel('xreference'); ?> <?php echo $this->form->getInput('xreference'); ?></li> <?php endif; ?> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php endforeach; ?> PKb��\ܙ~��1templates/hathor/html/com_cache/cache/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_cache'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-select fltrt"> <label class="selectlabel" for="client_id"> <?php echo JText::_('COM_CACHE_SELECT_CLIENT'); ?> </label> <select name="client_id" id="client_id"> <?php echo JHtml::_('select.options', CacheHelper::getClientOptions(), 'value', 'text', $this->state->get('client_id'));?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title nowrap"> <?php echo JHtml::_('grid.sort', 'COM_CACHE_GROUP', 'group', $listDirn, $listOrder); ?> </th> <th class="width-5 center nowrap"> <?php echo JHtml::_('grid.sort', 'COM_CACHE_NUMBER_OF_FILES', 'count', $listDirn, $listOrder); ?> </th> <th class="width-10 center"> <?php echo JHtml::_('grid.sort', 'COM_CACHE_SIZE', 'size', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php $i = 0; foreach ($this->data as $folder => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td> <input type="checkbox" id="cb<?php echo $i;?>" name="cid[]" value="<?php echo $item->group; ?>" onclick="Joomla.isChecked(this.checked);" /> </td> <td> <span class="bold"> <?php echo $item->group; ?> </span> </td> <td class="center"> <?php echo $item->count; ?> </td> <td class="center"> <?php echo JHtml::_('number.bytes', $item->size*1024); ?> </td> </tr> <?php $i++; endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="client" value="<?php echo $this->client->id;?>" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\4�z.aa1templates/hathor/html/com_cache/purge/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cache * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <form action="<?php echo JRoute::_('index.php?option=com_cache'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <table class="adminlist"> <thead> <tr> <th> <?php echo JText::_('COM_CACHE_PURGE_EXPIRED_ITEMS'); ?> </th> </tr> </thead> <tbody> <tr> <td> <p class="mod-purge-instruct"><?php echo JText::_('COM_CACHE_PURGE_INSTRUCTIONS'); ?></p> <p class="warning"><?php echo JText::_('COM_CACHE_RESOURCE_INTENSIVE_WARNING'); ?></p> </td> </tr> </tbody> </table> <div> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> PKb��\�8�L&L&6templates/hathor/html/com_content/featured/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ /* add accessibility, labels on input forms */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_content'); $saveOrder = $listOrder == 'fp.ordering'; $n = count($this->items); ?> <form action="<?php echo JRoute::_('index.php?option=com_content&view=featured'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_CONTENT_FILTER_SEARCH_DESC'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_published"><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true); ?> </select> <label class="selectlabel" for="filter_category_id"><?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?></label> <select name="filter_category_id" id="filter_category_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('category.options', 'com_content'), 'value', 'text', $this->state->get('filter.category_id')); ?> </select> <label class="selectlabel" for="filter_level"><?php echo JText::_('JOPTION_SELECT_MAX_LEVELS'); ?></label> <select name="filter_level" id="filter_level"> <option value=""><?php echo JText::_('JOPTION_SELECT_MAX_LEVELS'); ?></option> <?php echo JHtml::_('select.options', $this->f_levels, 'value', 'text', $this->state->get('filter.level')); ?> </select> <label class="selectlabel" for="filter_access"><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS');?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')); ?> </select> <label class="selectlabel" for="filter_language"><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language')); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th class="title category-col"> <?php echo JHtml::_('grid.sort', 'JCATEGORY', 'a.catid', $listDirn, $listOrder); ?> </th> <th class="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'fp.ordering', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'featured.saveorder'); ?> <?php endif; ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'a.access', $listDirn, $listOrder); ?> </th> <th class="title created-by-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_CREATED_BY', 'a.created_by', $listDirn, $listOrder); ?> </th> <th class="title date-col"> <?php echo JHtml::_('grid.sort', 'COM_CONTENT_HEADING_DATE_CREATED', 'a.created', $listDirn, $listOrder); ?> </th> <th class="hits-col"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?> </th> <th class="language-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'language', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $item->max_ordering = 0; //?? $ordering = ($listOrder == 'fp.ordering'); $assetId = 'com_content.article.' . $item->id; $canCreate = $user->authorise('core.create', 'com_content.category.' . $item->catid); $canEdit = $user->authorise('core.edit', 'com_content.article.' . $item->id); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id')|| $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_content.article.' . $item->id) && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <th class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </th> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'featured.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_content&task=article.edit&return=featured&id='.$item->id);?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <p class="smallsub"> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?></p> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'articles.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> </td> <td class="center"> <?php echo $this->escape($item->category_title); ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) : ?> <?php if ($listDirn == 'asc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, true, 'featured.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, true, 'featured.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, true, 'featured.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, true, 'featured.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" value="<?php echo $item->ordering; ?>" <?php echo $disabled; ?> class="text-area-order" title="<?php echo $item->title; ?> order" /> <?php else : ?> <?php echo $item->ordering; ?> <?php endif; ?> </td> <td class="center"> <?php echo $this->escape($item->access_level); ?> </td> <td class="center"> <?php if ($item->created_by_alias) : ?> <?php echo $this->escape($item->author_name); ?> <p class="smallsub"> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->created_by_alias)); ?></p> <?php else : ?> <?php echo $this->escape($item->author_name); ?> <?php endif; ?> </td> <td class="center nowrap"> <?php echo JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC4')); ?> </td> <td class="center"> <?php echo (int) $item->hits; ?> </td> <td class="center"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\ @#�4templates/hathor/html/com_content/articles/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $app = JFactory::getApplication(); if ($app->isClient('site')) { JSession::checkToken('get') or die(JText::_('JINVALID_TOKEN')); } JLoader::register('ContentHelperRoute', JPATH_ROOT . '/components/com_content/helpers/route.php'); JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); $function = $app->input->getCmd('function', 'jSelectArticle'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_content&view=articles&layout=modal&tmpl=component&function='.$function.'&'.JSession::getFormToken().'=1');?>" method="post" name="adminForm" id="adminForm"> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"> <?php echo JText::_('JSEARCH_FILTER_LABEL'); ?> </label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_CONTENT_FILTER_SEARCH_DESC'); ?>" /> <button type="submit"> <?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"> <?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_access"><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS');?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access'));?> </select> <label class="selectlabel" for="filter_published"><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED');?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true);?> </select> <label class="selectlabel" for="filter_category_id"><?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?></label> <select name="filter_category_id" id="filter_category_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_CATEGORY');?></option> <?php echo JHtml::_('select.options', JHtml::_('category.options', 'com_content'), 'value', 'text', $this->state->get('filter.category_id'));?> </select> <?php if ($this->state->get('filter.forcedLanguage')) : ?> <input type="hidden" name="forcedLanguage" value="<?php echo $this->escape($this->state->get('filter.forcedLanguage')); ?>" /> <input type="hidden" name="filter_language" value="<?php echo $this->escape($this->state->get('filter.language')); ?>" /> <?php else : ?> <label class="selectlabel" for="filter_language"><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE');?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language'));?> </select> <?php endif; ?> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <table class="adminlist modal"> <thead> <tr> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JCATEGORY', 'a.catid', $listDirn, $listOrder); ?> </th> <th class="title language-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'language', $listDirn, $listOrder); ?> </th> <th class="title date-col"> <?php echo JHtml::_('grid.sort', 'JDATE', 'a.created', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <th> <a class="pointer" onclick="if (window.parent) window.parent.<?php echo $this->escape($function);?>('<?php echo $item->id; ?>', '<?php echo $this->escape(addslashes($item->title)); ?>', '<?php echo $this->escape($item->catid); ?>', null, '<?php echo $this->escape(ContentHelperRoute::getArticleRoute($item->id, $item->catid, $item->language)); ?>');"> <?php echo $this->escape($item->title); ?></a> </th> <td class="center"> <?php echo $this->escape($item->access_level); ?> </td> <td class="center"> <?php echo $this->escape($item->category_title); ?> </td> <td class="center"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center nowrap"> <?php echo JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC4')); ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\Q�y�//6templates/hathor/html/com_content/articles/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $app = JFactory::getApplication(); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = $listOrder == 'a.ordering'; $assoc = JLanguageAssociations::isEnabled(); $n = count($this->items); ?> <form action="<?php echo JRoute::_('index.php?option=com_content&view=articles'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_CONTENT_FILTER_SEARCH_DESC'); ?>" /> <button type="submit" class="btn"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_published"><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true); ?> </select> <label class="selectlabel" for="filter_category_id"><?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?></label> <select name="filter_category_id" id="filter_category_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('category.options', 'com_content', array('filter.published' => array(-2, 0, 1, 2))), 'value', 'text', $this->state->get('filter.category_id')); ?> </select> <label class="selectlabel" for="filter_level"><?php echo JText::_('JOPTION_SELECT_MAX_LEVELS'); ?></label> <select name="filter_level" id="filter_level"> <option value=""><?php echo JText::_('JOPTION_SELECT_MAX_LEVELS'); ?></option> <?php echo JHtml::_('select.options', $this->f_levels, 'value', 'text', $this->state->get('filter.level')); ?> </select> <label class="selectlabel" for="filter_access"><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')); ?> </select> <label class="selectlabel" for="filter_author_id"><?php echo JText::_('JOPTION_SELECT_AUTHOR'); ?></label> <select name="filter_author_id" id="filter_author_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_AUTHOR'); ?></option> <?php echo JHtml::_('select.options', $this->authors, 'value', 'text', $this->state->get('filter.author_id')); ?> </select> <label class="selectlabel" for="filter_language"><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language')); ?> </select> <label class="selectlabel" for="filter_tag"><?php echo JText::_('JOPTION_SELECT_TAG'); ?></label> <select name="filter_tag" id="filter_tag"> <option value=""><?php echo JText::_('JOPTION_SELECT_TAG'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('tag.options', true, true), 'value', 'text', $this->state->get('filter.tag')); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th class="nowrap featured-col"> <?php echo JHtml::_('grid.sort', 'JFEATURED', 'a.featured', $listDirn, $listOrder, null, 'desc'); ?> </th> <th class="title category-col"> <?php echo JHtml::_('grid.sort', 'JCATEGORY', 'category_title', $listDirn, $listOrder); ?> </th> <th class="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'a.ordering', $listDirn, $listOrder); ?> <?php if ($saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'articles.saveorder'); ?> <?php endif; ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <?php if ($assoc) : ?> <th width="5%"> <?php echo JHtml::_('grid.sort', 'COM_CONTENT_HEADING_ASSOCIATION', 'association', $listDirn, $listOrder); ?> </th> <?php endif;?> <th class="title created-by-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_CREATED_BY', 'a.created_by', $listDirn, $listOrder); ?> </th> <th class="title date-col"> <?php echo JHtml::_('grid.sort', 'COM_CONTENT_HEADING_DATE_CREATED', 'a.created', $listDirn, $listOrder); ?> </th> <th class="hits-col"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?> </th> <th class="language-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'language', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $item->max_ordering = 0; //?? $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_content.category.' . $item->catid); $canEdit = $user->authorise('core.edit', 'com_content.article.' . $item->id); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canEditOwn = $user->authorise('core.edit.own', 'com_content.article.' . $item->id) && $item->created_by == $userId; $canChange = $user->authorise('core.edit.state', 'com_content.article.' . $item->id) && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <th class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </th> <td class="break-word"> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'articles.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit || $canEditOwn) : ?> <a href="<?php echo JRoute::_('index.php?option=com_content&task=article.edit&id='.$item->id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <p class="smallsub"> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?></p> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'articles.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> </td> <td class="center"> <?php echo JHtml::_('contentadministrator.featured', $item->featured, $i, $canChange); ?> </td> <td class="center"> <?php echo $this->escape($item->category_title); ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) : ?> <?php if ($listDirn == 'asc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, $item->catid == @$this->items[$i - 1]->catid, 'articles.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, $item->catid == @$this->items[$i + 1]->catid, 'articles.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, $item->catid == @$this->items[$i - 1]->catid, 'articles.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, $item->catid == @$this->items[$i + 1]->catid, 'articles.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" value="<?php echo $item->ordering; ?>" <?php echo $disabled; ?> class="text-area-order" title="<?php echo $item->title; ?> order" /> <?php else : ?> <?php echo $item->ordering; ?> <?php endif; ?> </td> <td class="center"> <?php echo $this->escape($item->access_level); ?> </td> <?php if ($assoc) : ?> <td class="center"> <?php if ($item->association):?> <?php echo JHtml::_('contentadministrator.association', $item->id); ?> <?php endif;?> </td> <?php endif;?> <td class="center"> <?php if ($item->created_by_alias) : ?> <?php echo $this->escape($item->author_name); ?> <p class="smallsub"> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->created_by_alias)); ?></p> <?php else : ?> <?php echo $this->escape($item->author_name); ?> <?php endif; ?> </td> <td class="center nowrap"> <?php echo JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC4')); ?> </td> <td class="center"> <?php echo (int) $item->hits; ?> </td> <td class="center"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php //Load the batch processing form. ?> <?php if ($user->authorise('core.create', 'com_content') && $user->authorise('core.edit', 'com_content') && $user->authorise('core.edit.state', 'com_content')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_CONTENT_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\B�e:�*�*2templates/hathor/html/com_content/article/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); // Create shortcut to parameters. $params = $this->state->get('params'); $params = $params->toArray(); $saveHistory = $this->state->get('params')->get('save_history', 0); // This checks if the config options have ever been saved. If they haven't they will fall back to the original settings. $editoroptions = isset($params['show_publishing_options']); $input = JFactory::getApplication()->input; if (!$editoroptions): $params['show_publishing_options'] = '1'; $params['show_article_options'] = '1'; $params['show_urls_images_backend'] = '0'; $params['show_urls_images_frontend'] = '0'; endif; // Check if the article uses configuration settings besides global. If so, use them. if (!empty($this->item->attribs['show_publishing_options'])): $params['show_publishing_options'] = $this->item->attribs['show_publishing_options']; endif; if (!empty($this->item->attribs['show_article_options'])): $params['show_article_options'] = $this->item->attribs['show_article_options']; endif; if (!empty($this->item->attribs['show_urls_images_backend'])): $params['show_urls_images_backend'] = $this->item->attribs['show_urls_images_backend']; endif; $assoc = JLanguageAssociations::isEnabled(); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'article.cancel' || document.formvalidator.isValid(document.getElementById('item-form'))) { " . $this->form->getField('articletext')->save() . " Joomla.submitform(task, document.getElementById('item-form')); } } "); ?> <div class="article-edit"> <form action="<?php echo JRoute::_('index.php?option=com_content&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="item-form" class="form-validate"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo empty($this->item->id) ? JText::_('COM_CONTENT_NEW_ARTICLE') : JText::sprintf('COM_CONTENT_EDIT_ARTICLE', $this->item->id); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('title'); ?> <?php echo $this->form->getInput('title'); ?></li> <li><?php echo $this->form->getLabel('alias'); ?> <?php echo $this->form->getInput('alias'); ?></li> <li><?php echo $this->form->getLabel('catid'); ?> <?php echo $this->form->getInput('catid'); ?></li> <li><?php echo $this->form->getLabel('state'); ?> <?php echo $this->form->getInput('state'); ?></li> <li><?php echo $this->form->getLabel('access'); ?> <?php echo $this->form->getInput('access'); ?></li> <?php if ($this->canDo->get('core.admin')) : ?> <li><span class="faux-label"><?php echo JText::_('JGLOBAL_ACTION_PERMISSIONS_LABEL'); ?></span> <button type="button" onclick="document.location.href='#access-rules';"> <?php echo JText::_('JGLOBAL_PERMISSIONS_ANCHOR'); ?> </button> </li> <?php endif; ?> <li><?php echo $this->form->getLabel('featured'); ?> <?php echo $this->form->getInput('featured'); ?></li> <li><?php echo $this->form->getLabel('language'); ?> <?php echo $this->form->getInput('language'); ?></li> <!-- Tag field --> <li><?php echo $this->form->getLabel('tags'); ?> <div class="is-tagbox"> <?php echo $this->form->getInput('tags'); ?> </div> </li> <?php if ($saveHistory) : ?> <li><?php echo $this->form->getLabel('version_note'); ?> <?php echo $this->form->getInput('version_note'); ?></li> <?php endif; ?> <li><?php echo $this->form->getLabel('id'); ?> <?php echo $this->form->getInput('id'); ?></li> </ul> <div class="clr"></div> <?php echo $this->form->getLabel('articletext'); ?> <div class="clr"></div> <?php echo $this->form->getInput('articletext'); ?> <div class="clr"></div> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'content-sliders-' . $this->item->id, array('useCookie' => 1)); ?> <?php // Do not show the publishing options if the edit form is configured not to. ?> <?php if ($params['show_publishing_options'] || ( $params['show_publishing_options'] = '' && !empty($editoroptions)) ) : ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_CONTENT_FIELDSET_PUBLISHING'), 'publishing-details'); ?> <fieldset class="panelform"> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('created_by'); ?> <?php echo $this->form->getInput('created_by'); ?></li> <li><?php echo $this->form->getLabel('created_by_alias'); ?> <?php echo $this->form->getInput('created_by_alias'); ?></li> <li><?php echo $this->form->getLabel('created'); ?> <?php echo $this->form->getInput('created'); ?></li> <li><?php echo $this->form->getLabel('publish_up'); ?> <?php echo $this->form->getInput('publish_up'); ?></li> <li><?php echo $this->form->getLabel('publish_down'); ?> <?php echo $this->form->getInput('publish_down'); ?></li> <?php if ($this->item->modified_by) : ?> <li><?php echo $this->form->getLabel('modified_by'); ?> <?php echo $this->form->getInput('modified_by'); ?></li> <li><?php echo $this->form->getLabel('modified'); ?> <?php echo $this->form->getInput('modified'); ?></li> <?php endif; ?> <?php if ($this->item->version) : ?> <li><?php echo $this->form->getLabel('version'); ?> <?php echo $this->form->getInput('version'); ?></li> <?php endif; ?> <?php if ($this->item->hits) : ?> <li><?php echo $this->form->getLabel('hits'); ?> <?php echo $this->form->getInput('hits'); ?></li> <?php endif; ?> </ul> </fieldset> <?php endif; ?> <?php $fieldSets = $this->form->getFieldsets(); ?> <?php foreach ($fieldSets as $name => $fieldSet) : ?> <?php // If the parameter says to show the article options or if the parameters have never been set, we will // show the article options. if ($params['show_article_options'] || ($params['show_article_options'] == '' && !empty($editoroptions))): // Go through all the fieldsets except the configuration and basic-limited, which are // handled separately below. if ($name != 'editorConfig' && $name != 'basic-limited' && $name != 'item_associations' && $name != 'jmetadata') : ?> <?php echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-options'); ?> <?php if (isset($fieldSet->description) && trim($fieldSet->description)) : ?> <p class="tip"><?php echo $this->escape(JText::_($fieldSet->description));?></p> <?php endif; ?> <fieldset class="panelform"> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php endif ?> <?php // If we are not showing the options we need to use the hidden fields so the values are not lost. ?> <?php elseif ($name == 'basic-limited') : ?> <?php foreach ($this->form->getFieldset('basic-limited') as $field) : ?> <?php echo $field->input; ?> <?php endforeach; ?> <?php endif; ?> <?php endforeach; ?> <?php // Not the best place, but here for continuity with 1.5/1/6/1.7 ?> <fieldset class="panelform"> </fieldset> <?php // We need to make a separate space for the configuration // so that those fields always show to those wih permissions if ( $this->canDo->get('core.admin') ): ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_CONTENT_SLIDER_EDITOR_CONFIG'), 'configure-sliders'); ?> <fieldset class="panelform" > <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('editorConfig') as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php endif ?> <?php // The URL and images fields only show if the configuration is set to allow them. ?> <?php // This is for legacy reasons. ?> <?php if ($params['show_urls_images_backend']) : ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_CONTENT_FIELDSET_URLS_AND_IMAGES'), 'urls_and_images-options'); ?> <fieldset class="panelform"> <ul class="adminformlist"> <li> <?php echo $this->form->getLabel('images'); ?> <?php echo $this->form->getInput('images'); ?></li> <?php foreach ($this->form->getGroup('images') as $field) : ?> <li> <?php if (!$field->hidden) : ?> <?php echo $field->label; ?> <?php endif; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> <?php foreach ($this->form->getGroup('urls') as $field) : ?> <li> <?php if (!$field->hidden) : ?> <?php echo $field->label; ?> <?php endif; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> <?php endif; ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'), 'meta-options'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'); ?></legend> <?php echo $this->loadTemplate('metadata'); ?> </fieldset> <?php if ($assoc) : ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_ASSOCIATIONS'), '-options');?> <?php echo $this->loadTemplate('associations'); ?> <?php endif; ?> <?php echo JHtml::_('sliders.end'); ?> </div> <div class="clr"></div> <?php if ($this->canDo->get('core.admin')) : ?> <div class="col rules-section"> <?php echo JHtml::_('sliders.start', 'permissions-sliders-' . $this->item->id, array('useCookie' => 1)); ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_CONTENT_FIELDSET_RULES'), 'access-rules'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('COM_CONTENT_FIELDSET_RULES'); ?></legend> <?php echo $this->form->getLabel('rules'); ?> <?php echo $this->form->getInput('rules'); ?> </fieldset> <?php echo JHtml::_('sliders.end'); ?> </div> <?php endif; ?> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="return" value="<?php echo $input->getCmd('return');?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> <div class="clr"></div> </div> PKb��\�E��xx9templates/hathor/html/com_languages/languages/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); $user = JFactory::getUser(); $userId = $user->get('id'); $n = count($this->items); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_languages'); $saveOrder = $listOrder == 'a.ordering'; ?> <form action="<?php echo JRoute::_('index.php?option=com_languages&view=languages'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_LANGUAGES_SEARCH_IN_TITLE'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_published"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('languages.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'COM_LANGUAGES_HEADING_TITLE_NATIVE', 'a.title_native', $listDirn, $listOrder); ?> </th> <th class="nowrap width-5"> <?php echo JHtml::_('grid.sort', 'COM_LANGUAGES_FIELD_LANG_TAG_LABEL', 'a.lang_code', $listDirn, $listOrder); ?> </th> <th class="nowrap width-5"> <?php echo JHtml::_('grid.sort', 'COM_LANGUAGES_FIELD_LANG_CODE_LABEL', 'a.sef', $listDirn, $listOrder); ?> </th> <th class="nowrap width-5"> <?php echo JHtml::_('grid.sort', 'COM_LANGUAGES_HEADING_LANG_IMAGE', 'a.image', $listDirn, $listOrder); ?> </th> <th class="nowrap width-5"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th width="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'a.ordering', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'languages.saveorder'); ?> <?php endif; ?> </th> <th class="nowrap width-5"> <?php echo JHtml::_('grid.sort', 'COM_LANGUAGES_HOMEPAGE', '', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.lang_id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_languages'); $canEdit = $user->authorise('core.edit', 'com_languages'); $canChange = $user->authorise('core.edit.state', 'com_languages'); ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php echo JHtml::_('grid.id', $i, $item->lang_id); ?> </td> <td> <span class="editlinktip hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('JGLOBAL_EDIT_ITEM'), $item->title, 0); ?>"> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_languages&task=language.edit&lang_id='.(int) $item->lang_id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> </span> </td> <td class="center"> <?php echo $this->escape($item->title_native); ?> </td> <td class="center"> <?php echo $this->escape($item->lang_code); ?> </td> <td class="center"> <?php echo $this->escape($item->sef); ?> </td> <td class="center"> <?php if ($item->image) : ?> <?php echo JHtml::_('image', 'mod_languages/' . $item->image . '.gif', $item->image, null, true); ?> <?php echo $this->escape($item->image); ?> <?php else : ?> <?php echo JText::_('JNONE'); ?> <?php endif; ?> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'languages.', $canChange); ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) :?> <?php if ($listDirn == 'asc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, true, 'languages.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, true, 'languages.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, true, 'languages.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, true, 'languages.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" size="5" value="<?php echo $item->ordering; ?>" <?php echo $disabled; ?> class="text-area-order" /> <?php else : ?> <?php echo $item->ordering; ?> <?php endif; ?> </td> <td class="center"> <?php if ($item->home == '1') : ?> <?php echo JText::_('JYES'); ?> <?php else:?> <?php echo JText::_('JNO'); ?> <?php endif; ?> </td> <td class="center"> <?php echo $this->escape($item->lang_id); ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> PKb��\x�r4��9templates/hathor/html/com_languages/overrides/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); $client = $this->state->get('filter.client') == 'site' ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); $language = $this->state->get('filter.language'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_languages&view=overrides'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <div class="filter-search fltlft"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_LANGUAGES_VIEW_OVERRIDES_FILTER_SEARCH_DESC'); ?>" /> <button type="submit" class="btn"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select fltrt"> <select name="filter_language_client" onchange="this.form.submit()"> <?php echo JHtml::_('select.options', $this->languages, null, 'text', $this->state->get('filter.language_client')); ?> </select> </div> </fieldset> <div class="clr"></div> <table class="adminlist"> <thead> <tr> <th width="1%"> <input type="checkbox" name="checkall-toggle" value="" onclick="Joomla.checkAll(this)" /> </th> <th width="30%" class="left"> <?php echo JHtml::_('grid.sort', 'COM_LANGUAGES_VIEW_OVERRIDES_KEY', 'key', $listDirn, $listOrder); ?> </th> <th class="left"> <?php echo JHtml::_('grid.sort', 'COM_LANGUAGES_VIEW_OVERRIDES_TEXT', 'text', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JText::_('COM_LANGUAGES_FIELD_LANG_TAG_LABEL'); ?> </th> <th> <?php echo JText::_('JCLIENT'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="5"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $canEdit = JFactory::getUser()->authorise('core.edit', 'com_languages'); $i = 0; foreach ($this->items as $key => $text) : ?> <tr class="row<?php echo $i % 2; ?>" id="overriderrow<?php echo $i; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $key); ?> </td> <td> <?php if ($canEdit) : ?> <a id="key[<?php echo $this->escape($key); ?>]" href="<?php echo JRoute::_('index.php?option=com_languages&task=override.edit&id='.$key); ?>"><?php echo $this->escape($key); ?></a> <?php else: ?> <?php echo $this->escape($key); ?> <?php endif; ?> </td> <td> <span id="string[<?php echo $this->escape($key); ?>]"><?php echo $this->escape($text); ?></span> </td> <td class="center"> <?php echo $language; ?> </td> <td class="center"> <?php echo $client; ?> </td> </tr> <?php $i++; endforeach; ?> </tbody> </table> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> PKb��\fX���=templates/hathor/html/com_languages/installed/default_ftp.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset class="adminform" title="<?php echo JText::_('COM_LANGUAGES_FTP_TITLE'); ?>"> <legend><?php echo JText::_('COM_LANGUAGES_FTP_TITLE'); ?></legend> <?php echo JText::_('COM_LANGUAGES_FTP_DESC'); ?> <?php if ($ftp instanceof Exception) : ?> <p class="warning"><?php echo JText::_($ftp->message); ?></p> <?php endif; ?> <div> <label for="username"><?php echo JText::_('JGLOBAL_USERNAME'); ?></label> <input type="text" id="username" name="username" value="" /> </div> <div> <label for="password"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></label> <input type="password" id="password" name="password" value="" /> </div> </fieldset> PKb��\���ss9templates/hathor/html/com_languages/installed/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtmlBehavior::core(); // Add specific helper files for html generation JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); $user = JFactory::getUser(); $userId = $user->get('id'); ?> <form action="<?php echo JRoute::_('index.php?option=com_languages&view=installed'); ?>" method="post" id="adminForm" name="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-select fltrt"> <label class="selectlabel" for="client_id"> <?php echo JText::_('COM_CACHE_SELECT_CLIENT'); ?> </label> <select name="client_id" id="client_id"> <?php $options = array(); $options[] = JHtml::_('select.option', '0', JText::_('JSITE')); $options[] = JHtml::_('select.option', '1', JText::_('JADMINISTRATOR')); echo JHtml::_('select.options', $options, 'value', 'text', $this->state->get('client_id')); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <?php if ($this->ftp) : ?> <?php echo $this->loadTemplate('ftp');?> <?php endif; ?> <table class="adminlist"> <thead> <tr> <th class="checkmark-col">   </th> <th class="title"> <?php echo JText::_('COM_LANGUAGES_HEADING_LANGUAGE'); ?> </th> <th> <?php echo JText::_('COM_LANGUAGES_FIELD_LANG_TAG_LABEL'); ?> </th> <th class="width-5"> <?php echo JText::_('COM_LANGUAGES_HEADING_DEFAULT'); ?> </th> <th class="width-10"> <?php echo JText::_('JVERSION'); ?> </th> <th class="width-10"> <?php echo JText::_('JDATE'); ?> </th> <th class="width-20"> <?php echo JText::_('JAUTHOR'); ?> </th> <th class="width-25"> <?php echo JText::_('COM_LANGUAGES_HEADING_AUTHOR_EMAIL'); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->rows as $i => $row) : $canCreate = $user->authorise('core.create', 'com_languages'); $canEdit = $user->authorise('core.edit', 'com_languages'); $canChange = $user->authorise('core.edit.state', 'com_languages'); ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php echo JHtml::_('languages.id', $i, $row->language);?> </td> <td> <?php echo $this->escape($row->name); ?> </td> <td align="center"> <?php echo $this->escape($row->language); ?> </td> <td class="center"> <?php echo JHtml::_('jgrid.isdefault', $row->published, $i, 'installed.', !$row->published && $canChange);?> </td> <td class="center"> <?php echo $this->escape($row->version); ?> </td> <td class="center"> <?php echo $this->escape($row->creationDate); ?> </td> <td class="center"> <?php echo $this->escape($row->author); ?> </td> <td class="center"> <?php echo JStringPunycode::emailToUTF8($this->escape($row->authorEmail)); ?> </td> </tr> <?php endforeach;?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\���#7#7;templates/hathor/html/com_categories/categories/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.multiselect'); $app = JFactory::getApplication(); $user = JFactory::getUser(); $userId = $user->get('id'); $extension = $this->escape($this->state->get('filter.extension')); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $ordering = ($listOrder == 'a.lft'); $canOrder = $user->authorise('core.edit.state', $extension); $saveOrder = ($listOrder == 'a.lft' && $listDirn == 'asc'); $jinput = JFactory::getApplication()->input; $component = $jinput->get('extension'); ?> <div class="categories"> <form action="<?php echo JRoute::_('index.php?option=com_categories&view=categories'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty($this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <?php endif; ?> <div id="j-main-container"<?php echo !empty($this->sidebar) ? ' class="span10"' : ''; ?>> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_CATEGORIES_ITEMS_SEARCH_FILTER'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_level"><?php echo JText::_('JOPTION_SELECT_MAX_LEVELS'); ?></label> <select name="filter_level" id="filter_level"> <option value=""><?php echo JText::_('JOPTION_SELECT_MAX_LEVELS'); ?></option> <?php echo JHtml::_('select.options', $this->f_levels, 'value', 'text', $this->state->get('filter.level')); ?> </select> <label class="selectlabel" for="filter_published"><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true); ?> </select> <label class="selectlabel" for="filter_access"><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')); ?> </select> <label class="selectlabel" for="filter_language"><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language')); ?> </select> <label class="selectlabel" for="filter_tag"><?php echo JText::_('JOPTION_SELECT_TAG'); ?></label> <select name="filter_tag" id="filter_tag"> <option value=""><?php echo JText::_('JOPTION_SELECT_TAG'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('tag.options', true, true), 'value', 'text', $this->state->get('filter.tag')); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"></div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'a.lft', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'categories.saveorder'); ?> <?php endif; ?> </th> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_published')) : ?> <th width="1%" class="nowrap center hidden-phone"> <span class="icon-publish hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_CATEGORY_COUNT_PUBLISHED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_CATEGORY_COUNT_PUBLISHED_ITEMS'); ?></span></span> </th> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_unpublished')) : ?> <th width="1%" class="nowrap center hidden-phone"> <span class="icon-unpublish hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_CATEGORY_COUNT_UNPUBLISHED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_CATEGORY_COUNT_UNPUBLISHED_ITEMS'); ?></span></span> </th> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_archived')) : ?> <th width="1%" class="nowrap center hidden-phone"> <span class="icon-archive hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_CATEGORY_COUNT_ARCHIVED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_CATEGORY_COUNT_ARCHIVED_ITEMS'); ?></span></span> </th> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_trashed')) : ?> <th width="1%" class="nowrap center hidden-phone"> <span class="icon-trash hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_CATEGORY_COUNT_TRASHED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_CATEGORY_COUNT_TRASHED_ITEMS'); ?></span></span> </th> <?php endif; ?> <th class="access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <?php if ($this->assoc) : ?> <th width="5%"> <?php echo JHtml::_('grid.sort', 'COM_CATEGORY_HEADING_ASSOCIATION', 'association', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th class="language-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'language', $this->state->get('list.direction'), $this->state->get('list.ordering')); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <?php $orderkey = array_search($item->id, $this->ordering[$item->parent_id]); $canEdit = $user->authorise('core.edit', $extension . '.category.' . $item->id); $canCheckin = $user->authorise('core.admin', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canEditOwn = $user->authorise('core.edit.own', $extension . '.category.' . $item->id) && $item->created_user_id == $userId; $canChange = $user->authorise('core.edit.state', $extension . '.category.' . $item->id) && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php echo str_repeat('<span class="gi">|—</span>', $item->level - 1) ?> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'categories.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit || $canEditOwn) : ?> <a href="<?php echo JRoute::_('index.php?option=com_categories&task=category.edit&id=' . $item->id . '&extension=' . $extension); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <p class="smallsub" title="<?php echo $this->escape($item->path); ?>"> <?php echo str_repeat('<span class="gtr">|—</span>', $item->level - 1) ?> <?php if (empty($item->note)) : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?> <?php else : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS_NOTE', $this->escape($item->alias), $this->escape($item->note)); ?> <?php endif; ?></p> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'categories.', $canChange); ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) : ?> <span><?php echo $this->pagination->orderUpIcon($i, isset($this->ordering[$item->parent_id][$orderkey - 1]), 'categories.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, isset($this->ordering[$item->parent_id][$orderkey + 1]), 'categories.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" value="<?php echo $orderkey + 1; ?>" <?php echo $disabled; ?> class="text-area-order" title="<?php echo $item->title; ?> order" /> <?php else : ?> <?php echo $orderkey + 1; ?> <?php endif; ?> </td> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_published')) : ?> <td class="center"> <a title="<?php echo JText::_('COM_CATEGORY_COUNT_PUBLISHED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . '&filter[category_id]=' . (int) $item->id . '&filter[published]=1' . '&filter[level]=' . (int) $item->level); ?>"> <?php echo $item->count_published; ?></a> </td> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_unpublished')) : ?> <td class="center"> <a title="<?php echo JText::_('COM_CATEGORY_COUNT_UNPUBLISHED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . '&filter[category_id]=' . (int) $item->id . '&filter[published]=0' . '&filter[level]=' . (int) $item->level); ?>"> <?php echo $item->count_unpublished; ?></a> </td> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_archived')) : ?> <td class="center"> <a title="<?php echo JText::_('COM_CATEGORY_COUNT_ARCHIVED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . '&filter[category_id]=' . (int) $item->id . '&filter[published]=2' . '&filter[level]=' . (int) $item->level); ?>"> <?php echo $item->count_archived; ?></a> </td> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_trashed')) : ?> <td class="center"> <a title="<?php echo JText::_('COM_CATEGORY_COUNT_TRASHED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . '&filter[category_id]=' . (int) $item->id . '&filter[published]=-2' . '&filter[level]=' . (int) $item->level); ?>"> <?php echo $item->count_trashed; ?></a> </td> <?php endif; ?> <td class="center"> <?php echo $this->escape($item->access_level); ?> </td> <?php if ($this->assoc) : ?> <td class="center"> <?php if ($item->association): ?> <?php echo JHtml::_('CategoriesAdministrator.association', $item->id, $extension); ?> <?php endif; ?> </td> <?php endif; ?> <td class="center nowrap"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center"> <span title="<?php echo sprintf('%d-%d', $item->lft, $item->rgt); ?>"> <?php echo (int) $item->id; ?></span> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <div class="clr"></div> <?php //Load the batch processing form. ?> <?php if ($user->authorise('core.create', $extension) && $user->authorise('core.edit', $extension) && $user->authorise('core.edit.state', $extension)) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_CATEGORIES_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <input type="hidden" name="extension" value="<?php echo $extension; ?>" /> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> PKb��\������>templates/hathor/html/com_categories/category/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_PUBLISHING'), 'publishing-details'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('COM_CONTENT_FIELDSET_PUBLISHING'); ?></legend> <ul class="adminformlist"> <li> <?php echo $this->form->getLabel('created_user_id'); ?> <?php echo $this->form->getInput('created_user_id'); ?> </li> <?php if ((int) $this->item->created_time) : ?> <li> <?php echo $this->form->getLabel('created_time'); ?> <?php echo $this->form->getInput('created_time'); ?> </li> <?php endif; ?> <?php if ($this->item->modified_user_id) : ?> <li> <?php echo $this->form->getLabel('modified_user_id'); ?> <?php echo $this->form->getInput('modified_user_id'); ?> </li> <li> <?php echo $this->form->getLabel('modified_time'); ?> <?php echo $this->form->getInput('modified_time'); ?> </li> <?php endif; ?> </ul> </fieldset> <?php $fieldSets = $this->form->getFieldsets('params'); ?> <?php foreach ($fieldSets as $name => $fieldSet) : ?> <?php $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_CATEGORIES_' . $name . '_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), $name . '-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) { echo '<p class="tip">' . $this->escape(JText::_($fieldSet->description)) . '</p>'; } ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_($label); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> <?php if ($name == 'basic'): ?> <li> <?php echo $this->form->getLabel('note'); ?> <?php echo $this->form->getInput('note'); ?> </li> <?php endif; ?> </ul> </fieldset> <?php endforeach; ?> PKb��\�[���6templates/hathor/html/com_categories/category/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); $input = JFactory::getApplication()->input; $saveHistory = $this->state->get('params')->get('save_history', 0); JHtml::_('behavior.keepalive'); JHtml::_('behavior.formvalidator'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'category.cancel' || document.formvalidator.isValid(document.getElementById('item-form'))) { " . $this->form->getField('description')->save() . " Joomla.submitform(task, document.getElementById('item-form')); } } "); $assoc = JLanguageAssociations::isEnabled(); ?> <div class="category-edit"> <form action="<?php echo JRoute::_('index.php?option=com_categories&extension=' . $input->getCmd('extension', 'com_content') . '&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="item-form" class="form-validate"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CATEGORIES_FIELDSET_DETAILS'); ?></legend> <ul class="adminformlist"> <li> <?php echo $this->form->getLabel('title'); ?> <?php echo $this->form->getInput('title'); ?> </li> <li> <?php echo $this->form->getLabel('alias'); ?> <?php echo $this->form->getInput('alias'); ?> </li> <li> <?php echo $this->form->getLabel('extension'); ?> <?php echo $this->form->getInput('extension'); ?> </li> <li> <?php echo $this->form->getLabel('parent_id'); ?> <?php echo $this->form->getInput('parent_id'); ?> </li> <li> <?php echo $this->form->getLabel('published'); ?> <?php echo $this->form->getInput('published'); ?> </li> <li> <?php echo $this->form->getLabel('access'); ?> <?php echo $this->form->getInput('access'); ?> </li> <?php if ($this->canDo->get('core.admin')) : ?> <li> <span class="faux-label"><?php echo JText::_('JGLOBAL_ACTION_PERMISSIONS_LABEL'); ?></span> <button type="button" onclick="document.location.href='#access-rules';"> <?php echo JText::_('JGLOBAL_PERMISSIONS_ANCHOR'); ?></button> </li> <?php endif; ?> <li> <?php echo $this->form->getLabel('language'); ?> <?php echo $this->form->getInput('language'); ?> </li> <!-- Tag field --> <li> <?php if ($this->checkTags) : ?> <?php echo $this->form->getLabel('tags'); ?> <div class="is-tagbox"> <?php echo $this->form->getInput('tags'); ?> </div> <?php endif; ?> </li> <?php if ($saveHistory) : ?> <li><?php echo $this->form->getLabel('version_note'); ?> <?php echo $this->form->getInput('version_note'); ?></li> <?php endif; ?> <li> <?php echo $this->form->getLabel('id'); ?> <?php echo $this->form->getInput('id'); ?> </li> <li> <?php echo $this->form->getLabel('hits'); ?> <?php echo $this->form->getInput('hits'); ?> </li> </ul> <div class="clr"></div> <?php echo $this->form->getLabel('description'); ?> <div class="clr"></div> <?php echo $this->form->getInput('description'); ?> <div class="clr"></div> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'categories-sliders-' . $this->item->id, array('useCookie' => 1)); ?> <?php echo $this->loadTemplate('options'); ?> <div class="clr"></div> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'), 'meta-options'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'); ?></legend> <?php echo $this->loadTemplate('metadata'); ?> </fieldset> <?php $fieldSets = $this->form->getFieldsets(); ?> <?php foreach ($fieldSets as $name => $fieldSet) : ?> <?php if ($name !== 'basic' && $name !== 'item_associations' && $name !== 'jmetadata') : ?> <?php $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_CATEGORIES_' . $name . '_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), $name . '-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) { echo '<p class="tip">' . $this->escape(JText::_($fieldSet->description)) . '</p>'; } ?> <div class="clr"></div> <fieldset class="panelform"> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> <?php endif; ?> <?php endforeach; ?> <?php if ($assoc) : ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_ASSOCIATIONS'), '-options');?> <?php echo $this->loadTemplate('associations'); ?> <?php endif; ?> <?php echo JHtml::_('sliders.end'); ?> </div> <div class="clr"></div> <?php if ($this->canDo->get('core.admin')) : ?> <div class="col rules-section"> <?php echo JHtml::_('sliders.start', 'permissions-sliders-' . $this->item->id, array('useCookie' => 1)); ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_CATEGORIES_FIELDSET_RULES'), 'access-rules'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('COM_CATEGORIES_FIELDSET_RULES'); ?></legend> <?php echo $this->form->getLabel('rules'); ?> <?php echo $this->form->getInput('rules'); ?> </fieldset> <?php echo JHtml::_('sliders.end'); ?> </div> <?php endif; ?> <div> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </form> <div class="clr"></div> </div> PKb��\X����9templates/hathor/html/com_templates/templates/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=templates'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_TEMPLATES_TEMPLATES_FILTER_SEARCH_DESC'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="client_id"> <?php echo JText::_('JGLOBAL_FILTER_CLIENT'); ?> </label> <select name="client_id" id="client_id"> <?php echo JHtml::_('select.options', TemplatesHelper::getClientOptions(), 'value', 'text', $this->state->get('client_id'));?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist" id="template-mgr"> <thead> <tr> <th class="checkmark-col">   </th> <th> <?php echo JHtml::_('grid.sort', 'COM_TEMPLATES_HEADING_TEMPLATE', 'a.element', $listDirn, $listOrder); ?> </th> <th class="width-10"> <?php echo JHtml::_('grid.sort', 'JCLIENT', 'a.client_id', $listDirn, $listOrder); ?> </th> <th class="center width-10"> <?php echo JText::_('JVERSION'); ?> </th> <th class="width-15"> <?php echo JText::_('JDATE'); ?> </th> <th class="width-25"> <?php echo JText::_('JAUTHOR'); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('templates.thumb', $item->element, $item->client_id); ?> </td> <td class="template-name"> <a href="<?php echo JRoute::_('index.php?option=com_templates&view=template&id='.(int) $item->extension_id . '&file=' . $this->file); ?>"> <?php echo JText::sprintf('COM_TEMPLATES_TEMPLATE_DETAILS', $item->name); ?></a> <p> <?php if ($this->preview && $item->client_id == '0') : ?> <a href="<?php echo JUri::root().'index.php?tp=1&template='.$item->element; ?>" target="_blank"> <?php echo JText::_('COM_TEMPLATES_TEMPLATE_PREVIEW'); ?></a> <?php elseif ($item->client_id == '1') : ?> <?php echo JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW_ADMIN'); ?> <?php else: ?> <span class="hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_TEMPLATES_TEMPLATE_NO_PREVIEW', 'COM_TEMPLATES_TEMPLATE_NO_PREVIEW_DESC'); ?>"> <?php echo JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW'); ?></span> <?php endif; ?> </p> </td> <td class="center"> <?php echo $item->client_id == 0 ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); ?> </td> <td class="center"> <?php echo $this->escape($item->xmldata->get('version')); ?> </td> <td class="center"> <?php echo $this->escape($item->xmldata->get('creationDate')); ?> </td> <td> <?php if ($author = $item->xmldata->get('author')) : ?> <p><?php echo $this->escape($author); ?></p> <?php else : ?> — <?php endif; ?> <?php if ($email = $item->xmldata->get('authorEmail')) : ?> <p><?php echo $this->escape($email); ?></p> <?php endif; ?> <?php if ($url = $item->xmldata->get('authorUrl')) : ?> <p><a href="<?php echo $this->escape($url); ?>"> <?php echo $this->escape($url); ?></a></p> <?php endif; ?> </td> <?php echo JHtml::_('templates.thumbModal', $item->element, $item->client_id); ?> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�(8[��=templates/hathor/html/com_templates/style/edit_assignment.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Initialise related data. JLoader::register('MenusHelper', JPATH_ADMINISTRATOR . '/components/com_menus/helpers/menus.php'); $menuTypes = MenusHelper::getMenuLinks(); $user = JFactory::getUser(); ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_TEMPLATES_MENUS_ASSIGNMENT'); ?></legend> <label id="jform_menuselect-lbl" for="jform_menuselect"><?php echo JText::_('JGLOBAL_MENU_SELECTION'); ?></label> <button type="button" class="jform-rightbtn" onclick="$$('.chk-menulink').each(function(el) { el.checked = !el.checked; });"> <?php echo JText::_('JGLOBAL_SELECTION_INVERT_ALL'); ?> </button> <div class="clr"></div> <div id="menu-assignment"> <?php foreach ($menuTypes as &$type) : ?> <ul class="menu-links"> <button type="button" class="jform-rightbtn" onclick="$$('.<?php echo $type->menutype; ?>').each(function(el) { el.checked = !el.checked; });"> <?php echo JText::_('JGLOBAL_SELECTION_INVERT'); ?> </button> <div class="clr"></div> <h3><?php echo $type->title ?: $type->menutype; ?></h3> <?php foreach ($type->links as $link) : ?> <li class="menu-link"> <input type="checkbox" name="jform[assigned][]" value="<?php echo (int) $link->value;?>" id="link<?php echo (int) $link->value;?>"<?php if ($link->template_style_id == $this->item->id):?> checked="checked"<?php endif;?><?php if ($link->checked_out && $link->checked_out != $user->id):?> disabled="disabled"<?php else:?> class="chk-menulink <?php echo $type->menutype; ?>"<?php endif;?> /> <label for="link<?php echo (int) $link->value;?>" > <?php echo $link->text; ?> </label> </li> <?php endforeach; ?> </ul> <?php endforeach; ?> </div> </fieldset> PKb��\f|"":templates/hathor/html/com_templates/style/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_TEMPLATES_'.$name.'_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">'.$this->escape(JText::_($fieldSet->description)).'</p>'; endif; ?> <fieldset class="panelform"> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <li> <?php if (!$field->hidden) : ?> <?php echo $field->label; ?> <?php endif; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> <?php endforeach; ?> PKb��\(�v>��2templates/hathor/html/com_templates/style/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); $user = JFactory::getUser(); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'style.cancel' || document.formvalidator.isValid(document.getElementById('style-form'))) { Joomla.submitform(task, document.getElementById('style-form')); } } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="style-form" class="form-validate"> <div class="width-60 fltlft"> <fieldset class="adminform"> <legend><?php echo JText::_('JDETAILS');?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('title'); ?> <?php echo $this->form->getInput('title'); ?></li> <li><?php echo $this->form->getLabel('template'); ?> <?php echo $this->form->getInput('template'); ?> <?php echo $this->form->getLabel('client_id'); ?> <?php echo $this->form->getInput('client_id'); ?> <input type="text" size="35" value="<?php echo $this->item->client_id == 0 ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); ?> " class="readonly" readonly="readonly" /></li> <li><?php echo $this->form->getLabel('home'); ?> <?php echo $this->form->getInput('home'); ?></li> <?php if ($this->item->id) : ?> <li><?php echo $this->form->getLabel('id'); ?> <span class="readonly"><?php echo $this->item->id; ?></span></li> <?php endif; ?> </ul> <div class="clr"></div> <?php if ($this->item->xml) : ?> <?php if ($text = trim($this->item->xml->description)) : ?> <label> <?php echo JText::_('COM_TEMPLATES_TEMPLATE_DESCRIPTION'); ?> </label> <span class="readonly mod-desc"><?php echo JText::_($text); ?></span> <?php endif; ?> <?php else : ?> <p class="error"><?php echo JText::_('COM_TEMPLATES_ERR_XML'); ?></p> <?php endif; ?> <div class="clr"></div> </fieldset> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> <div class="width-40 fltrt"> <?php echo JHtml::_('sliders.start', 'template-sliders-'.$this->item->id); ?> <?php //get the menu parameters that are automatically set but may be modified. echo $this->loadTemplate('options'); ?> <div class="clr"></div> <?php echo JHtml::_('sliders.end'); ?> </div> <?php if ($user->authorise('core.edit', 'com_menu') && $this->item->client_id == 0):?> <?php if ($this->canDo->get('core.edit.state')) : ?> <div class="width-60 fltlft"> <?php echo $this->loadTemplate('assignment'); ?> </div> <?php endif; ?> <?php endif;?> <div class="clr"></div> </form> PKb��\?��Y``6templates/hathor/html/com_templates/styles/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('script', 'system/multiselect.js', array('version' => 'auto', 'relative' => true)); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=styles'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_TEMPLATES_STYLES_FILTER_SEARCH_DESC'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="client_id"><?php echo JText::_('JGLOBAL_FILTER_CLIENT'); ?></label> <select name="client_id" id="client_id"> <?php echo JHtml::_('select.options', TemplatesHelper::getClientOptions(), 'value', 'text', $this->state->get('client_id'));?> </select> <label class="selectlabel" for="filter_template"><?php echo JText::_('COM_TEMPLATES_FILTER_TEMPLATE'); ?></label> <select name="filter_template" id="filter_template"> <option value="0"><?php echo JText::_('COM_TEMPLATES_FILTER_TEMPLATE'); ?></option> <?php echo JHtml::_('select.options', TemplatesHelper::getTemplateOptions($this->state->get('client_id')), 'value', 'text', $this->state->get('filter.template'));?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col">   </th> <th> <?php echo JHtml::_('grid.sort', 'COM_TEMPLATES_HEADING_STYLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="width-10"> <?php echo JHtml::_('grid.sort', 'JCLIENT', 'a.client_id', $listDirn, $listOrder); ?> </th> <th> <?php echo JHtml::_('grid.sort', 'COM_TEMPLATES_HEADING_TEMPLATE', 'a.template', $listDirn, $listOrder); ?> </th> <th class="width-5"> <?php echo JHtml::_('grid.sort', 'COM_TEMPLATES_HEADING_DEFAULT', 'a.home', $listDirn, $listOrder); ?> </th> <th class="width-5"> <?php echo JText::_('COM_TEMPLATES_HEADING_ASSIGNED'); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_templates'); $canEdit = $user->authorise('core.edit', 'com_templates'); $canChange = $user->authorise('core.edit.state', 'com_templates'); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($this->preview && $item->client_id == '0') : ?> <a target="_blank" href="<?php echo JUri::root().'index.php?tp=1&templateStyle='.(int) $item->id ?>" class="jgrid hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('COM_TEMPLATES_TEMPLATE_PREVIEW'), $item->title, 0); ?>" ><span class="state icon-16-preview"><span class="text"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_PREVIEW'); ?></span></span></a> <?php elseif ($item->client_id == '1') : ?> <span class="jgrid hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_TEMPLATES_TEMPLATE_NO_PREVIEW_ADMIN'); ?>"><span class="state icon-16-nopreview"><span class="text"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW_ADMIN'); ?></span></span></span> <?php else: ?> <span class="jgrid hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_TEMPLATES_TEMPLATE_NO_PREVIEW'); ?>"><span class="state icon-16-nopreview"><span class="text"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW'); ?></span></span></span> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_templates&task=style.edit&id='.(int) $item->id); ?>"> <?php echo $this->escape($item->title);?></a> <?php else : ?> <?php echo $this->escape($item->title);?> <?php endif; ?> </td> <td class="center"> <?php echo $item->client_id == 0 ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); ?> </td> <td> <label for="cb<?php echo $i;?>"> <?php echo $this->escape($item->template);?> </label> </td> <td class="center"> <?php if ($item->home == '0' || $item->home == '1'):?> <?php echo JHtml::_('jgrid.isdefault', $item->home != '0', $i, 'styles.', $canChange && $item->home != '1');?> <?php elseif ($canChange):?> <a href="<?php echo JRoute::_('index.php?option=com_templates&task=styles.unsetDefault&cid[]='.$item->id.'&'.JSession::getFormToken().'=1');?>"> <?php if ($item->image) : ?> <?php echo JHtml::_('image', 'mod_languages/' . $item->image . '.gif', $item->language_title, array('title' => JText::sprintf('COM_TEMPLATES_GRID_UNSET_LANGUAGE', $item->language_title)), true);?> <?php else : ?> <span class="label" title="<?php echo JText::sprintf('COM_TEMPLATES_GRID_UNSET_LANGUAGE', $item->language_title); ?>"><?php echo $item->language_sef; ?></span> <?php endif; ?> </a> <?php else:?> <?php echo JHtml::_('image', 'mod_languages/' . $item->image . '.gif', $item->language_title, array('title' => $item->language_title), true); ?> <?php if ($item->image) : ?> <?php echo JHtml::_('image', 'mod_languages/' . $item->image . '.gif', $item->language_title, array('title' => $item->language_title), true); ?> <?php else : ?> <span class="label" title="<?php echo $item->language_title; ?>"><?php echo $item->language_sef; ?></span> <?php endif; ?> <?php endif;?> </td> <td class="center"> <?php if ($item->assigned > 0) : ?> <?php echo JHtml::_('image', 'admin/tick.png', JText::plural('COM_TEMPLATES_ASSIGNED', $item->assigned), array('title' => JText::plural('COM_TEMPLATES_ASSIGNED', $item->assigned)), true); ?> <?php else : ?>   <?php endif; ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\ː,�OODtemplates/hathor/html/com_templates/template/default_description.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="pull-left"> <?php echo JHtml::_('templates.thumb', $this->template->element, $this->template->client_id); ?> <?php echo JHtml::_('templates.thumbModal', $this->template->element, $this->template->client_id); ?> </div> <h2><?php echo ucfirst($this->template->element); ?></h2> <?php $client = JApplicationHelper::getClientInfo($this->template->client_id); ?> <p><?php $this->template->xmldata = TemplatesHelper::parseXMLTemplateFile($client->path, $this->template->element);?></p> <p><?php echo JText::_($this->template->xmldata->description); ?></p>PKb��\���=templates/hathor/html/com_templates/template/default_tree.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ksort($this->files, SORT_STRING); ?> <ul class='nav nav-list directory-tree'> <?php foreach ($this->files as $key => $value): ?> <?php if (is_array($value)): ?> <?php $keyArray = explode('/', $key); $fileArray = explode('/', $this->fileName); $count = 0; $keyArrayCount = count($keyArray); if (count($fileArray) >= $keyArrayCount) { for ($i = 0; $i < $keyArrayCount; $i++) { if ($keyArray[$i] === $fileArray[$i]) { $count++; } } if ($count === $keyArrayCount) { $class = 'folder show'; } else { $class = 'folder'; } } else { $class = 'folder'; } ?> <li class="<?php echo $class; ?>"> <a class='folder-url nowrap' href=''> <span class='icon-folder-close'> <?php $explodeArray = explode('/', $key); echo end($explodeArray); ?></span> </a> <?php echo $this->directoryTree($value); ?> </li> <?php endif; ?> <?php if (is_object($value)): ?> <li> <a class="file nowrap" href='<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $this->id . '&file=' . $value->id) ?>'> <span class='icon-file'> <?php echo $value->name; ?></span> </a> </li> <?php endif; ?> <?php endforeach; ?> </ul> PKb��\�zԽR�R8templates/hathor/html/com_templates/template/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('bootstrap.tooltip'); $input = JFactory::getApplication()->input; if ($this->type == 'image') { JHtml::_('script', 'system/jquery.Jcrop.min.js', array('version' => 'auto', 'relative' => true)); JHtml::_('stylesheet', 'system/jquery.Jcrop.min.css', array('version' => 'auto', 'relative' => true)); } JFactory::getDocument()->addScriptDeclaration(" jQuery(document).ready(function($){ // Hide all the folder when the page loads $('.folder ul, .component-folder ul').hide(); // Display the tree after loading $('.directory-tree').removeClass('directory-tree'); // Show all the lists in the path of an open file $('.show > ul').show(); // Stop the default action of anchor tag on a click event $('.folder-url, .component-folder-url').click(function(event){ event.preventDefault(); }); // Prevent the click event from proliferating $('.file, .component-file-url').bind('click',function(e){ e.stopPropagation(); }); // Toggle the child indented list on a click event $('.folder, .component-folder').bind('click',function(e){ $(this).children('ul').toggle(); e.stopPropagation(); }); // New file tree $('#fileModal .folder-url').bind('click',function(e){ $('.folder-url').removeClass('selected'); e.stopPropagation(); $('#fileModal input.address').val($(this).attr('data-id')); $(this).addClass('selected'); }); // Folder manager tree $('#folderModal .folder-url').bind('click',function(e){ $('.folder-url').removeClass('selected'); e.stopPropagation(); $('#folderModal input.address').val($(this).attr('data-id')); $(this).addClass('selected'); }); });"); if ($this->type == 'image') { JFactory::getDocument()->addScriptDeclaration(" jQuery(document).ready(function() { var jcrop_api; // Configuration for image cropping $('#image-crop').Jcrop({ onChange: showCoords, onSelect: showCoords, onRelease: clearCoords, trueSize: " . $this->image['width'] . "," . $this->image['height'] . "] },function(){ jcrop_api = this; }); // Function for calculating the crop coordinates function showCoords(c) { $('#x').val(c.x); $('#y').val(c.y); $('#w').val(c.w); $('#h').val(c.h); }; // Function for clearing the coordinates function clearCoords() { $('#adminForm input').val(''); }; });"); } JFactory::getDocument()->addStyleDeclaration(' /* Styles for modals */ .selected{ background: #08c; color: #fff; } .selected:hover{ background: #08c !important; color: #fff; } .modal-body .column { width: 50%; float: left; } #deleteFolder{ margin: 0; } #image-crop{ max-width: 100% !important; width: auto; height: auto; } .directory-tree{ display: none; } .tree-holder{ overflow-x: auto; } '); if ($this->type == 'font') { JFactory::getDocument()->addStyleDeclaration( "/* Styles for font preview */ @font-face { font-family: previewFont; src: url('" . $this->font['address'] . "') } .font-preview{ font-family: previewFont !important; }" ); } ?> <div class="width-60 fltlft"> <?php if ($this->type != 'home'): ?> <div id="deleteModal" class="modal hide fade"> <fieldset> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo JText::_('JLIB_HTML_BEHAVIOR_CLOSE'); ?>"> <span aria-hidden="true">×</span> </button> <h3><?php echo JText::_('COM_TEMPLATES_ARE_YOU_SURE');?></h3> </div> <div class="modal-body"> <p><?php echo JText::sprintf('COM_TEMPLATES_MODAL_FILE_DELETE', $this->fileName); ?></p> </div> <div class="modal-footer"> <form method="post" action=""> <input type="hidden" name="option" value="com_templates" /> <input type="hidden" name="task" value="template.delete" /> <input type="hidden" name="id" value="<?php echo $input->getInt('id'); ?>" /> <input type="hidden" name="file" value="<?php echo $this->file; ?>" /> <?php echo JHtml::_('form.token'); ?> <button type="button" class="btn" data-dismiss="modal"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_CLOSE'); ?></button> <button type="submit"><?php echo JText::_('COM_TEMPLATES_BUTTON_DELETE');?></button> </form> </div> </fieldset> </div> <?php endif; ?> <div id="folderModal" class="modal hide fade"> <fieldset> <legend><?php echo JText::_('COM_TEMPLATES_MANAGE_FOLDERS');?></legend> <div class="modal-body"> <div class="width-50 fltlft"> <form method="post" action="<?php echo JRoute::_('index.php?option=com_templates&task=template.createFolder&id=' . $input->getInt('id') . '&file=' . $this->file); ?>"> <fieldset> <label><?php echo JText::_('COM_TEMPLATES_FOLDER_NAME');?></label> <input type="text" name="name" required /> <input type="hidden" class="address" name="address" /> <input type="submit" value="<?php echo JText::_('COM_TEMPLATES_BUTTON_CREATE');?>" class="btn btn-primary" /> </fieldset> </form> </div> <div class="width-50 fltlft"> <?php echo $this->loadTemplate('folders');?> </div> </div> <div class="modal-footer"> <form id="deleteFolder" method="post" action="<?php echo JRoute::_('index.php?option=com_templates&task=template.deleteFolder&id=' . $input->getInt('id') . '&file=' . $this->file); ?>"> <fieldset> <button type="button" class="btn" data-dismiss="modal"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_CLOSE'); ?></button> <input type="hidden" class="address" name="address" /> <input type="submit" value="<?php echo JText::_('COM_TEMPLATES_BUTTON_DELETE');?>" class="btn btn-danger" /> </fieldset> </form> </div> </fieldset> </div> <div id="fileModal" class="modal hide fade"> <fieldset> <legend><?php echo JText::_('COM_TEMPLATES_BUTTON_FILE');?></legend> <div class="modal-body"> <div class="width-50 fltlft"> <form method="post" action="<?php echo JRoute::_('index.php?option=com_templates&task=template.createFile&id=' . $input->getInt('id') . '&file=' . $this->file); ?>"> <fieldset> <label><?php echo JText::_('COM_TEMPLATES_NEW_FILE_TYPE');?></label> <select name="type" required > <option value="null">- <?php echo JText::_('COM_TEMPLATES_NEW_FILE_SELECT');?> -</option> <option value="css">css</option> <option value="php">php</option> <option value="js">js</option> <option value="xml">xml</option> <option value="ini">ini</option> <option value="less">less</option> <option value="txt">txt</option> </select> <br /> <label><?php echo JText::_('COM_TEMPLATES_FILE_NAME');?></label> <input type="text" name="name" required /> <input type="hidden" class="address" name="address" /> <input type="submit" value="<?php echo JText::_('COM_TEMPLATES_BUTTON_CREATE');?>" class="btn btn-primary" /> </fieldset> </form> <br /> <form method="post" action="<?php echo JRoute::_('index.php?option=com_templates&task=template.uploadFile&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" enctype="multipart/form-data" > <fieldset> <input type="hidden" class="address" name="address" /> <input type="file" name="files" required /> <input type="submit" value="<?php echo JText::_('COM_TEMPLATES_BUTTON_UPLOAD');?>" class="btn btn-primary" /><br> <?php $cMax = $this->state->get('params')->get('upload_limit'); ?> <?php $maxSize = JHtml::_('number.bytes', JUtility::getMaxUploadSize($cMax . 'MB')); ?> <?php echo JText::sprintf('JGLOBAL_MAXIMUM_UPLOAD_SIZE_LIMIT', $maxSize); ?> </fieldset> </form> <br /> <?php if ($this->type != 'home'): ?> <form method="post" action="<?php echo JRoute::_('index.php?option=com_templates&task=template.copyFile&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" enctype="multipart/form-data" > <fieldset> <input type="hidden" class="address" name="address" /> <div class="control-group"> <label for="new_name" class="control-label hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_TEMPLATES_FILE_NEW_NAME_DESC'); ?>"><?php echo JText::_('COM_TEMPLATES_FILE_NEW_NAME_LABEL')?></label> <div class="controls"> <input type="text" id="new_name" name="new_name" required /> </div> </div> <input type="submit" value="<?php echo JText::_('COM_TEMPLATES_BUTTON_COPY_FILE');?>" class="btn btn-primary" /> </fieldset> </form> <?php endif; ?> </div> <div class="width-50 fltlft"> <?php echo $this->loadTemplate('folders');?> </div> </div> <div class="modal-footer"> <button type="button" class="btn" data-dismiss="modal"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_CLOSE'); ?></button> </div> </fieldset> </div> <?php if ($this->type != 'home'): ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&task=template.resizeImage&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" > <div id="resizeModal" class="modal hide fade"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo JText::_('JLIB_HTML_BEHAVIOR_CLOSE'); ?>"> <span aria-hidden="true">×</span> </button> <h3><?php echo JText::_('COM_TEMPLATES_RESIZE_IMAGE'); ?></h3> </div> <div class="modal-body"> <div id="template-manager-css" class="form-horizontal"> <div class="control-group"> <label for="height" class="control-label hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_TEMPLATES_IMAGE_HEIGHT'); ?>"><?php echo JText::_('COM_TEMPLATES_IMAGE_HEIGHT')?></label> <div class="controls"> <input class="input-xlarge" type="number" name="height" placeholder="<?php echo $this->image['height']; ?> px" required /> </div> <br /> <label for="width" class="control-label hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_TEMPLATES_IMAGE_WIDTH'); ?>"><?php echo JText::_('COM_TEMPLATES_IMAGE_WIDTH')?></label> <div class="controls"> <input class="input-xlarge" type="number" name="width" placeholder="<?php echo $this->image['width']; ?> px" required /> </div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn" data-dismiss="modal"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_CLOSE'); ?></button> <button type="submit" class="btn btn-primary"><?php echo JText::_('COM_TEMPLATES_BUTTON_RESIZE'); ?></button> </div> </div> <?php echo JHtml::_('form.token'); ?> </form> <?php endif; ?> <?php if ($this->type == 'home'): ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> <div id="home-box" style="text-align: justify;"> <h1><p><?php echo JText::_('COM_TEMPLATES_HOME_HEADING'); ?></p></h1> <p><?php echo JText::_('COM_TEMPLATES_HOME_TEXT'); ?></p> <p> <a href="https://docs.joomla.org/Special:MyLanguage/J3.x:How_to_use_the_Template_Manager" target="_blank"> <?php echo JText::_('COM_TEMPLATES_HOME_BUTTON'); ?> </a> </p> </div> </form> <?php endif; ?> <?php if ($this->type == 'file'): ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_TEMPLATES_SOURCE_CODE');?></legend> <p class="label"><?php echo JText::_('COM_TEMPLATES_TOGGLE_FULL_SCREEN'); ?></p> <div class="clr"></div> <div class="editor-border"> <?php echo $this->form->getInput('source'); ?> </div> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> <?php echo $this->form->getInput('extension_id'); ?> <?php echo $this->form->getInput('filename'); ?> </fieldset> </form> <?php endif; ?> <?php if ($this->type == 'image'): ?> <div id="image-box"><img id="image-crop" src="<?php echo $this->image['address'] . '?' . time(); ?>" /></div> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm"> <input type ="hidden" id="x" name="x" /> <input type ="hidden" id="y" name="y" /> <input type ="hidden" id="h" name="h" /> <input type ="hidden" id="w" name="w" /> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> <?php endif; ?> <?php if ($this->type == 'archive'): ?> <legend><?php echo JText::_('COM_TEMPLATES_FILE_CONTENT_PREVIEW'); ?></legend> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <fieldset> <ul class="nav nav-list"> <?php foreach ($this->archive as $file): ?> <li> <?php if (substr($file, -1) === DIRECTORY_SEPARATOR): ?> <span class="icon-folder" aria-hidden="true"></span> <?php echo $file; ?> <?php endif; ?> <?php if (substr($file, -1) != DIRECTORY_SEPARATOR): ?> <span class="icon-file" aria-hidden="true"></span> <?php echo $file; ?> <?php endif; ?> </li> <?php endforeach; ?> </ul> </fieldset> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> <?php endif; ?> <?php if ($this->type == 'font'): ?> <div class="font-preview"> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_TEMPLATES_SOURCE_CODE');?></legend> <p class="lead">H1</p><h1>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h1> <p class="lead">H2</p><h2>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h2> <p class="lead">H3</p><h3>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h3> <p class="lead">H4</p><h4>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h4> <p class="lead">H5</p><h5>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h5> <p class="lead">H6</p> <h6>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h6> <p class="lead">Bold</p><b>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </b> <p class="lead">Italics</p><i>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </i> <p class="lead">Unordered List</p> <ul> <li>Item</li> <li>Item</li> <li>Item<br /> <ul> <li>Item</li> <li>Item</li> <li>Item<br /> <ul> <li>Item</li> <li>Item</li> <li>Item</li> </ul> </li> </ul> </li> </ul> <p class="lead">Ordered List</p> <ol> <li>Item</li> <li>Item</li> <li>Item<br /> <ul> <li>Item</li> <li>Item</li> <li>Item<br /> <ul> <li>Item</li> <li>Item</li> <li>Item</li> </ul> </li> </ul> </li> </ol> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </fieldset> </form> </div> <?php endif; ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_TEMPLATES_TEMPLATE_DESCRIPTION');?></legend> <?php echo $this->loadTemplate('description');?> </fieldset> <div class="clr"></div> </div> <div class="width-40 fltrt"> <?php if ($this->type != 'home'): ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_TEMPLATES_FILE_INFO');?></legend> <?php if ($this->type == 'file'): ?> <p><?php echo JText::sprintf('COM_TEMPLATES_TEMPLATE_FILENAME', $this->source->filename, $this->template->element); ?></p> <?php endif; ?> <?php if ($this->type == 'image'): ?> <p><?php echo JText::sprintf('COM_TEMPLATES_TEMPLATE_FILENAME', $this->image['path'], $this->template->element); ?></p> <?php endif; ?> <?php if ($this->type == 'font'): ?> <p><?php echo JText::sprintf('COM_TEMPLATES_TEMPLATE_FILENAME', $this->font['rel_path'], $this->template->element); ?></p> <?php endif; ?> </fieldset> <?php endif; ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_TEMPLATES_TEMPLATE_FILES');?></legend> <?php echo $this->loadTemplate('tree');?> </fieldset> <?php echo JHtml::_('sliders.start', 'content-sliders', array('useCookie' => 1)); ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_TEMPLATES_TEMPLATE_COPY'), 'template-copy'); ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&task=template.copy&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm"> <fieldset class="panelform"> <label id="new_name" class="hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_TEMPLATES_TEMPLATE_NEW_NAME_DESC'); ?>"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_NEW_NAME_LABEL')?></label> <input type="text" id="new_name" name="new_name" /> <button type="submit"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_COPY'); ?></button> </fieldset> <?php echo JHtml::_('form.token'); ?> </form> <?php if ($this->type != 'home'): ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_TEMPLATES_BUTTON_RENAME'), 'file-rename'); ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&task=template.renameFile&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm"> <fieldset class="panelform"> <label id="new_name" class="hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('COM_TEMPLATES_NEW_FILE_NAME')); ?>"><?php echo JText::_('COM_TEMPLATES_NEW_FILE_NAME')?></label> <input type="text" name="new_name" /> <button type="submit"><?php echo JText::_('COM_TEMPLATES_BUTTON_RENAME'); ?></button> </fieldset> <?php echo JHtml::_('form.token'); ?> </form> <?php endif; ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_TEMPLATES_OVERRIDES_MODULES'), 'override-module'); ?> <fieldset class="panelform"> <ul class="adminformlist"> <?php foreach ($this->overridesList['modules'] as $module): ?> <li> <a href="<?php echo JRoute::_('index.php?option=com_templates&view=template&task=template.overrides&folder=' . $module->path . '&id=' . $input->getInt('id') . '&file=' . $this->file); ?>"> <span class="icon-copy"></span> <?php echo $module->name; ?> </a> </li> <?php endforeach; ?> </ul> </fieldset> <?php echo JHtml::_('sliders.panel', JText::_('COM_TEMPLATES_OVERRIDES_COMPONENTS'), 'override-component'); ?> <fieldset class="panelform"> <ul class="adminformlist"> <?php foreach ($this->overridesList['components'] as $key => $value): ?> <li class="component-folder"> <a href="#" class="component-folder-url"> <span class="icon-folder"></span> <?php echo $key; ?> </a> <ul class="adminformList"> <?php foreach ($value as $view): ?> <li> <a class="component-file-url" href="<?php echo JRoute::_('index.php?option=com_templates&view=template&task=template.overrides&folder=' . $view->path . '&id=' . $input->getInt('id') . '&file=' . $this->file); ?>"> <span class="icon-copy"></span> <?php echo $view->name; ?> </a> </li> <?php endforeach; ?> </ul> </li> <?php endforeach; ?> </ul> </fieldset> <?php echo JHtml::_('sliders.panel', JText::_('COM_TEMPLATES_OVERRIDES_LAYOUTS'), 'override-layout'); ?> <fieldset class="panelform"> <ul class="adminformlist"> <?php foreach ($this->overridesList['layouts'] as $layout): ?> <li> <a href="<?php echo JRoute::_('index.php?option=com_templates&view=template&task=template.overrides&folder=' . $layout->path . '&id=' . $input->getInt('id') . '&file=' . $this->file); ?>"> <span class="icon-copy"></span> <?php echo $layout->name; ?> </a> </li> <?php endforeach; ?> </ul> </fieldset> <?php echo JHtml::_('sliders.end'); ?> </div> PKb��\VJ7@templates/hathor/html/com_templates/template/default_folders.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ksort($this->files, SORT_STRING); ?> <ul class='nav nav-list directory-tree'> <?php foreach ($this->files as $key => $value): ?> <?php if (is_array($value)): ?> <li class="folder-select"> <a class='folder-url nowrap' data-id='<?php echo base64_encode($key); ?>' href=''> <span class='icon-folder-close'> <?php $explodeArray = explode('/', $key); echo end($explodeArray); ?></span> </a> <?php echo $this->folderTree($value); ?> </li> <?php endif; ?> <?php endforeach; ?> </ul> PKb��\6�;� 0 02templates/hathor/html/mod_menu/default_enabled.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_menu * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /* @var $menu JAdminCSSMenu */ $shownew = (boolean) $params->get('shownew', 1); $showhelp = $params->get('showhelp', 1); $user = JFactory::getUser(); $lang = JFactory::getLanguage(); // // Site SubMenu // $menu->addChild( new JMenuNode(JText::_('MOD_MENU_CONTROL_PANEL'), 'index.php', 'class:cpanel'), true ); $menu->getParent(); // // Users Submenu // if ($user->authorise('core.manage', 'com_users')) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_USERS_USERS'), '#'), true ); $createUser = $shownew && $user->authorise('core.create', 'com_users'); $createGrp = $user->authorise('core.admin', 'com_users'); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_USERS_USER_MANAGER'), 'index.php?option=com_users&view=users', 'class:user'), $createUser ); if ($createUser) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_USERS_ADD_USER'), 'index.php?option=com_users&task=user.add', 'class:newarticle') ); $menu->getParent(); } if ($createGrp) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_USERS_GROUPS'), 'index.php?option=com_users&view=groups', 'class:groups'), $createUser ); if ($createUser) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_USERS_ADD_GROUP'), 'index.php?option=com_users&task=group.add', 'class:newarticle') ); $menu->getParent(); } $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_USERS_LEVELS'), 'index.php?option=com_users&view=levels', 'class:levels'), $createUser ); if ($createUser) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_USERS_ADD_LEVEL'), 'index.php?option=com_users&task=level.add', 'class:newarticle') ); $menu->getParent(); } } $menu->addSeparator(); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_USERS_NOTES'), 'index.php?option=com_users&view=notes', 'class:user-note'), $createUser ); if ($createUser) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_USERS_ADD_NOTE'), 'index.php?option=com_users&task=note.add', 'class:newarticle') ); $menu->getParent(); } $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_USERS_NOTE_CATEGORIES'), 'index.php?option=com_categories&view=categories&extension=com_users', 'class:category'), $createUser ); if ($createUser) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_CONTENT_NEW_CATEGORY'), 'index.php?option=com_categories&task=category.add&extension=com_users', 'class:newarticle') ); $menu->getParent(); } if (JFactory::getApplication()->get('massmailoff', 0) != 1) { $menu->addSeparator(); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_MASS_MAIL_USERS'), 'index.php?option=com_users&view=mail', 'class:massmail') ); } $menu->getParent(); } // // Menus Submenu // if ($user->authorise('core.manage', 'com_menus')) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_MENUS'), '#'), true ); $createMenu = $shownew && $user->authorise('core.create', 'com_menus'); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_MENU_MANAGER'), 'index.php?option=com_menus&view=menus', 'class:menumgr'), $createMenu ); if ($createMenu) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_MENU_MANAGER_NEW_MENU'), 'index.php?option=com_menus&view=menu&layout=edit', 'class:newarticle') ); $menu->getParent(); } $menu->addSeparator(); // Menu Types $menuTypes = ModMenuHelper::getMenus(); $menuTypes = JArrayHelper::sortObjects($menuTypes, 'title', 1, false); foreach ($menuTypes as $menuType) { $alt = '*' .$menuType->sef. '*'; if ($menuType->home == 0) { $titleicon = ''; } elseif ($menuType->home == 1 && $menuType->language == '*') { $titleicon = ' <span class="icon-home"></span>'; } elseif ($menuType->home > 1) { $titleicon = ' <span>'.JHtml::_('image', 'mod_languages/icon-16-language.png', $menuType->home, array('title' => JText::_('MOD_MENU_HOME_MULTIPLE')), true).'</span>'; } else { $image = JHtml::_('image', 'mod_languages/'.$menuType->image.'.gif', null, null, true, true); if (!$image) { $titleicon = ' <span>'.JHtml::_('image', 'mod_languages/icon-16-language.png', $alt, array('title' => $menuType->title_native), true).'</span>'; } else { $titleicon = ' <span>' . JHtml::_('image', 'mod_languages/' . $menuType->image . '.gif', $alt, array('title' => $menuType->title_native), true) . '</span>'; } } $menu->addChild( new JMenuNode($menuType->title, 'index.php?option=com_menus&view=items&menutype='.$menuType->menutype, 'class:menu', null, null, $titleicon), $createMenu ); if ($createMenu) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_MENU_MANAGER_NEW_MENU_ITEM'), 'index.php?option=com_menus&view=item&layout=edit&menutype='.$menuType->menutype, 'class:newarticle') ); $menu->getParent(); } } $menu->getParent(); } // // Content Submenu // if ($user->authorise('core.manage', 'com_content')) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_CONTENT'), '#'), true ); $createContent = $shownew && $user->authorise('core.create', 'com_content'); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_CONTENT_ARTICLE_MANAGER'), 'index.php?option=com_content', 'class:article'), $createContent ); if ($createContent) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_CONTENT_NEW_ARTICLE'), 'index.php?option=com_content&task=article.add', 'class:newarticle') ); $menu->getParent(); } $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_CONTENT_CATEGORY_MANAGER'), 'index.php?option=com_categories&extension=com_content', 'class:category'), $createContent ); if ($createContent) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_CONTENT_NEW_CATEGORY'), 'index.php?option=com_categories&task=category.add&extension=com_content', 'class:newarticle') ); $menu->getParent(); } $menu->addChild( new JMenuNode(JText::_('MOD_MENU_COM_CONTENT_FEATURED'), 'index.php?option=com_content&view=featured', 'class:featured') ); $menu->addSeparator(); if ($user->authorise('core.manage', 'com_media')) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_MEDIA_MANAGER'), 'index.php?option=com_media', 'class:media')); } $menu->getParent(); } // // Components Submenu // // Get the authorised components and sub-menus. $components = ModMenuHelper::getComponents(true); // Check if there are any components, otherwise, don't render the menu if ($components) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_COMPONENTS'), '#'), true); foreach ($components as &$component) { if (!empty($component->submenu)) { // This component has a db driven submenu. $menu->addChild(new JMenuNode($component->text, $component->link, $component->img), true); foreach ($component->submenu as $sub) { $menu->addChild(new JMenuNode($sub->text, $sub->link, $sub->img)); } $menu->getParent(); } else { $menu->addChild(new JMenuNode($component->text, $component->link, $component->img)); } } $menu->getParent(); } // // Extensions Submenu // $im = $user->authorise('core.manage', 'com_installer'); $mm = $user->authorise('core.manage', 'com_modules'); $pm = $user->authorise('core.manage', 'com_plugins'); $tm = $user->authorise('core.manage', 'com_templates'); $lm = $user->authorise('core.manage', 'com_languages'); if ($im || $mm || $pm || $tm || $lm) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_EXTENSIONS'), '#'), true); if ($im) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_EXTENSION_MANAGER'), 'index.php?option=com_installer', 'class:install')); $menu->addSeparator(); } if ($mm) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_MODULE_MANAGER'), 'index.php?option=com_modules', 'class:module')); } if ($pm) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_PLUGIN_MANAGER'), 'index.php?option=com_plugins', 'class:plugin')); } if ($tm) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_TEMPLATE_MANAGER'), 'index.php?option=com_templates', 'class:themes')); } if ($lm) { $menu->addChild(new JMenuNode(JText::_('MOD_MENU_EXTENSIONS_LANGUAGE_MANAGER'), 'index.php?option=com_languages', 'class:language')); } $menu->getParent(); } // // Help Submenu // if ($showhelp == 1) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP'), '#'), true ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_JOOMLA'), 'index.php?option=com_admin&view=help', 'class:help') ); $menu->addSeparator(); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_SUPPORT_OFFICIAL_FORUM'), 'http://forum.joomla.org', 'class:help-forum', false, '_blank') ); if ($forum_url = $params->get('forum_url')) { $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_SUPPORT_CUSTOM_FORUM'), $forum_url, 'class:help-forum', false, '_blank') ); } $debug = $lang->setDebug(false); if ($lang->hasKey('MOD_MENU_HELP_SUPPORT_OFFICIAL_LANGUAGE_FORUM_VALUE') && JText::_('MOD_MENU_HELP_SUPPORT_OFFICIAL_LANGUAGE_FORUM_VALUE') != '') { $forum_url = 'http://forum.joomla.org/viewforum.php?f=' . (int) JText::_('MOD_MENU_HELP_SUPPORT_OFFICIAL_LANGUAGE_FORUM_VALUE'); $lang->setDebug($debug); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_SUPPORT_OFFICIAL_LANGUAGE_FORUM'), $forum_url, 'class:help-forum', false, '_blank') ); } $lang->setDebug($debug); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_DOCUMENTATION'), 'https://docs.joomla.org', 'class:help-docs', false, '_blank') ); $menu->addSeparator(); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_EXTENSIONS'), 'http://extensions.joomla.org', 'class:help-jed', false, '_blank') ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_TRANSLATIONS'), 'http://community.joomla.org/translations.html', 'class:help-trans', false, '_blank') ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_RESOURCES'), 'http://resources.joomla.org', 'class:help-jrd', false, '_blank') ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_COMMUNITY'), 'http://community.joomla.org', 'class:help-community', false, '_blank') ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_SECURITY'), 'http://developer.joomla.org/security-centre.html', 'class:help-security', false, '_blank') ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_DEVELOPER'), 'http://developer.joomla.org', 'class:help-dev', false, '_blank') ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_XCHANGE'), 'http://joomla.stackexchange.com', 'class:help-dev', false, '_blank') ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_SHOP'), 'http://shop.joomla.org', 'class:help-shop', false, '_blank') ); $menu->getParent(); } // // Admin Settingss Submenu // $su = $user->authorise('core.admin'); $cam = $user->authorise('core.manage', 'com_cache'); $cim = $user->authorise('core.manage', 'com_checkin'); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_SETTINGS'), '#'), true); if ($su): $menu->addChild( new JMenuNode(JText::_('MOD_MENU_CONFIGURATION'), 'index.php?option=com_config', 'class:config') ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_SYSTEM_INFORMATION'), 'index.php?option=com_admin&view=sysinfo', 'class:info') ); endif; if ($cam): $menu->addChild( new JMenuNode(JText::_('MOD_MENU_CLEAR_CACHE'), 'index.php?option=com_cache', 'class:clear') ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_PURGE_EXPIRED_CACHE'), 'index.php?option=com_cache&view=purge', 'class:purge') ); endif; if ($cim): $menu->addChild( new JMenuNode(JText::_('MOD_MENU_GLOBAL_CHECKIN'), 'index.php?option=com_checkin', 'class:checkin') ); endif; $menu->addChild( new JMenuNode(JText::_('MOD_MENU_USER_PROFILE'), 'index.php?option=com_admin&task=profile.edit&id='. $user->id, 'class:profile') ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_LOGOUT'), 'index.php?option=com_login&task=logout&'. JSession::getFormToken() .'=1', 'class:logout') ); $menu->getParent(); PKb��\#ૉ�:templates/hathor/html/com_postinstall/messages/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_postinstall * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $renderer = JFactory::getDocument()->loadRenderer('module'); $options = array('style' => 'raw'); $mod = JModuleHelper::getModule('mod_feed'); $param = array( 'rssurl' => 'https://www.joomla.org/announcements/release-news.feed?type=rss', 'rsstitle' => 0, 'rssdesc' => 0, 'rssimage' => 1, 'rssitems' => 5, 'rssitemdesc' => 1, 'word_count' => 200, 'cache' => 0, 'moduleclass_sfx' => ' list-striped' ); $params = array('params' => json_encode($param)); ?> <?php if (empty($this->items)): ?> <h2><?php echo JText::_('COM_POSTINSTALL_LBL_NOMESSAGES_TITLE') ?></h2> <p><?php echo JText::_('COM_POSTINSTALL_LBL_NOMESSAGES_DESC') ?></p> <div> <button onclick="window.location='index.php?option=com_postinstall&view=messages&task=reset&eid=<?php echo $this->eid; ?>&<?php echo $this->token ?>=1'; return false;" class="btn btn-warning"> <span class="icon icon-eye-open"></span> <?php echo JText::_('COM_POSTINSTALL_BTN_RESET') ?> </button> </div> <?php if ($this->eid == 700): ?> <br/> <div> <h3><?php echo JText::_('COM_POSTINSTALL_LBL_RELEASENEWS'); ?></h3> <?php echo $renderer->render($mod, $params, $options); ?> </div> <?php endif; ?> <?php else: ?> <?php if ($this->eid == 700): echo JHtml::_('sliders.start', 'panel-sliders', array('useCookie' => '1')); echo JHtml::_('sliders.panel', JText::_('COM_POSTINSTALL_LBL_MESSAGES'), 'postinstall-panel-messages'); else: ?> <h2><?php echo JText::_('COM_POSTINSTALL_LBL_MESSAGES') ?></h2> <?php endif; ?> <?php foreach ($this->items as $item): ?> <fieldset> <legend><?php echo JText::_($item->title_key) ?></legend> <p class="small"> <?php echo JText::sprintf('COM_POSTINSTALL_LBL_SINCEVERSION', $item->version_introduced) ?> </p> <p><?php echo JText::_($item->description_key) ?></p> <div> <?php if ($item->type !== 'message'): ?> <button onclick="window.location='index.php?option=com_postinstall&view=messages&task=action&id=<?php echo $item->postinstall_message_id ?>&<?php echo $this->token ?>=1'; return false;" class="btn btn-primary"> <?php echo JText::_($item->action_key) ?> </button> <?php endif; ?> <?php if (JFactory::getUser()->authorise('core.edit.state', 'com_postinstall')) : ?> <button onclick="window.location='index.php?option=com_postinstall&view=message&task=unpublish&id=<?php echo $item->postinstall_message_id ?>&<?php echo $this->token ?>=1'; return false;" class="btn btn-inverse btn-small"> <?php echo JText::_('COM_POSTINSTALL_BTN_HIDE') ?> </button> <?php endif; ?> </div> </fieldset> <?php endforeach; ?> <?php if ($this->eid == 700): echo JHtml::_('sliders.panel', JText::_('COM_POSTINSTALL_LBL_RELEASENEWS'), 'postinstall-panel-releasenotes'); ?> <?php echo $renderer->render($mod, $params, $options); ?> <?php echo JHtml::_('sliders.end'); endif; ?> <?php endif; ?> PKb��\�I���5templates/hathor/html/com_users/debuguser/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=debuguser&user_id=' . (int) $this->state->get('user_id')); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('COM_USERS_SEARCH_ASSETS'); ?></legend> <div class="filter-search fltlft"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('COM_USERS_SEARCH_ASSETS'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_USERS_SEARCH_USERS'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_RESET'); ?></button> </div> <div class="filter-select fltrt"> <label class="selectlabel" for="filter_component"><?php echo JText::_('COM_USERS_OPTION_SELECT_COMPONENT'); ?></label> <select name="filter_component" id="filter_component"> <option value=""><?php echo JText::_('COM_USERS_OPTION_SELECT_COMPONENT');?></option> <?php if (!empty($this->components)) { echo JHtml::_('select.options', $this->components, 'value', 'text', $this->state->get('filter.component')); }?> </select> <label class="selectlabel" for="filter_level_start"><?php echo JText::_('COM_USERS_OPTION_SELECT_LEVEL_START'); ?></label> <select name="filter_level_start" id="filter_level_start"> <option value=""><?php echo JText::_('COM_USERS_OPTION_SELECT_LEVEL_START');?></option> <?php echo JHtml::_('select.options', $this->levels, 'value', 'text', $this->state->get('filter.level_start'));?> </select> <label class="selectlabel" for="filter_level_end"><?php echo JText::_('COM_USERS_OPTION_SELECT_LEVEL_END'); ?></label> <select name="filter_level_end" id="filter_level_end"> <option value=""><?php echo JText::_('COM_USERS_OPTION_SELECT_LEVEL_END');?></option> <?php echo JHtml::_('select.options', $this->levels, 'value', 'text', $this->state->get('filter.level_end'));?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <div> <?php echo JText::_('COM_USERS_DEBUG_LEGEND'); ?> <span class="check-0 swatch"><?php echo JText::sprintf('COM_USERS_DEBUG_IMPLICIT_DENY', '-');?></span> <span class="check-a swatch"><?php echo JText::sprintf('COM_USERS_DEBUG_EXPLICIT_ALLOW', '✓');?></span> <span class="check-d swatch"><?php echo JText::sprintf('COM_USERS_DEBUG_EXPLICIT_DENY', '✗');?></span> </div> <table class="adminlist"> <thead> <tr> <th class="left"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_ASSET_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="left"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_ASSET_NAME', 'a.name', $listDirn, $listOrder); ?> </th> <?php foreach ($this->actions as $key => $action) : ?> <th class="width-5"> <span class="hasTooltip" title="<?php echo JHtml::_('tooltipText', $key, $action[1]); ?>"><?php echo JText::_($key); ?></span> </th> <?php endforeach; ?> <th class="width-5 nowrap"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_LFT', 'a.lft', $listDirn, $listOrder); ?> </th> <th class="width-5 nowrap"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row1"> <th> <?php echo $this->escape($item->title); ?> </th> <td class="nowrap"> <?php echo str_repeat('<span class="gi">|—</span>', $item->level) ?> <?php echo $this->escape($item->name); ?> </td> <?php foreach ($this->actions as $action) : ?> <?php $name = $action[0]; $check = $item->checks[$name]; if ($check === true) : $class = 'check-a'; $text = '✓'; elseif ($check === false) : $class = 'check-d'; $text = '✗'; elseif ($check === null) : $class = 'check-0'; $text = '-'; else : $class = ''; $text = ' '; endif; ?> <td class="center <?php echo $class;?>"> <?php echo $text; ?> </td> <?php endforeach; ?> <td class="center"> <?php echo (int) $item->lft; ?> - <?php echo (int) $item->rgt; ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> PKb��\d >_-templates/hathor/html/com_users/user/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); // Get the form fieldsets. $fieldsets = $this->form->getFieldsets(); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'user.cancel' || document.formvalidator.isValid(document.getElementById('user-form'))) { Joomla.submitform(task, document.getElementById('user-form')); } } Joomla.twoFactorMethodChange = function(e) { var selectedPane = 'com_users_twofactor_' + jQuery('#jform_twofactor_method').val(); jQuery.each(jQuery('#com_users_twofactor_forms_container>div'), function(i, el) { if (el.id != selectedPane) { jQuery('#' + el.id).hide(0); } else { jQuery('#' + el.id).show(0); } }); } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="user-form" class="form-validate" enctype="multipart/form-data"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_USERS_USER_ACCOUNT_DETAILS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('user_details') as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'user-slider', array('useCookie' => 1)); ?> <?php if ($this->grouplist) : ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_USERS_ASSIGNED_GROUPS'), 'groups'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('COM_USERS_ASSIGNED_GROUPS'); ?></legend> <?php echo $this->loadTemplate('groups'); ?> </fieldset> <?php endif; ?> <?php foreach ($fieldsets as $fieldset) : if ($fieldset->name == 'user_details') : continue; endif; echo JHtml::_('sliders.panel', JText::_($fieldset->label), $fieldset->name); ?> <fieldset class="panelform"> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($fieldset->name) as $field) : ?> <?php if ($field->hidden) : ?> <?php echo $field->input; ?> <?php else : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endif; ?> <?php endforeach; ?> </ul> </fieldset> <?php endforeach; ?> <?php if (!empty($this->tfaform) && $this->item->id): ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_USERS_USER_TWO_FACTOR_AUTH'), 'twofactorauth'); ?> <div class="control-group"> <div class="control-label"> <label id="jform_twofactor_method-lbl" for="jform_twofactor_method" class="hasTooltip" title="<?php echo '<strong>' . JText::_('COM_USERS_USER_FIELD_TWOFACTOR_LABEL') . '</strong><br />' . JText::_('COM_USERS_USER_FIELD_TWOFACTOR_DESC'); ?>"> <?php echo JText::_('COM_USERS_USER_FIELD_TWOFACTOR_LABEL'); ?> </label> </div> <div class="controls"> <?php echo JHtml::_('select.genericlist', Usershelper::getTwoFactorMethods(), 'jform[twofactor][method]', array('onchange' => 'Joomla.twoFactorMethodChange()'), 'value', 'text', $this->otpConfig->method, 'jform_twofactor_method', false) ?> </div> </div> <div id="com_users_twofactor_forms_container"> <?php foreach ($this->tfaform as $form): ?> <?php $style = $form['method'] == $this->otpConfig->method ? 'display: block' : 'display: none'; ?> <div id="com_users_twofactor_<?php echo $form['method'] ?>" style="<?php echo $style; ?>"> <?php echo $form['form'] ?> </div> <?php endforeach; ?> </div> <fieldset> <legend> <?php echo JText::_('COM_USERS_USER_OTEPS') ?> </legend> <div class="alert alert-info"> <?php echo JText::_('COM_USERS_USER_OTEPS_DESC') ?> </div> <?php if (empty($this->otpConfig->otep)): ?> <div class="alert alert-warning"> <?php echo JText::_('COM_USERS_USER_OTEPS_WAIT_DESC') ?> </div> <?php else: ?> <?php foreach ($this->otpConfig->otep as $otep): ?> <span class="span3"> <?php echo substr($otep, 0, 4) ?>-<?php echo substr($otep, 4, 4) ?>-<?php echo substr($otep, 8, 4) ?>-<?php echo substr($otep, 12, 4) ?> </span> <?php endforeach; ?> <div class="clearfix"></div> <?php endif; ?> </fieldset> <?php endif; ?> <?php echo JHtml::_('sliders.end'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\����EE1templates/hathor/html/com_users/notes/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canEdit = $user->authorise('core.edit', 'com_users'); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=notes');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('COM_USERS_SEARCH_IN_NOTE_TITLE'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_USERS_SEARCH_IN_NOTE_TITLE'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <span class="faux-label"><?php echo JText::_('COM_USERS_FILTER_LABEL'); ?></span> <label class="selectlabel" for="filter_category_id"> <?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?> </label> <select name="filter_category_id" id="filter_category_id" > <option value=""><?php echo JText::_('JOPTION_SELECT_CATEGORY');?></option> <?php echo JHtml::_( 'select.options', JHtml::_('category.options', 'com_users'), 'value', 'text', $this->state->get('filter.category_id') ); ?> </select> <label class="selectlabel" for="filter_published"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED');?></option> <?php echo JHtml::_( 'select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true ); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="toggle" value="" class="checklist-toggle" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="width-15"> <?php echo JHtml::_('grid.sort', 'COM_USERS_USER_HEADING', 'u.name', $listDirn, $listOrder); ?> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'COM_USERS_SUBJECT_HEADING', 'a.subject', $listDirn, $listOrder); ?> </th> <th class="width-20"> <?php echo JHtml::_('grid.sort', 'COM_USERS_CATEGORY_HEADING', 'c.title', $listDirn, $listOrder); ?> </th> <th class="width-5"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th class="width-10"> <?php echo JHtml::_('grid.sort', 'COM_USERS_REVIEW_HEADING', 'a.review_time', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <?php $canChange = $user->authorise('core.edit.state', 'com_users'); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center checklist"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_users&task=note.edit&id='.$item->id);?>"> <?php echo $this->escape($item->user_name); ?></a> <?php else : ?> <?php echo $this->escape($item->user_name); ?> <?php endif; ?> </td> <td> <?php if ($item->subject) : ?> <?php echo $this->escape($item->subject); ?> <?php else : ?> <?php echo JText::_('COM_USERS_EMPTY_SUBJECT'); ?> <?php endif; ?> </td> <td class="center"> <?php if ($item->catid && $item->cparams->get('image')) : ?> <?php echo JHtml::_('users.image', $item->cparams->get('image')); ?> <?php endif; ?> <?php echo $this->escape($item->category_title); ?> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'notes.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> </td> <td class="center"> <?php if ($item->review_time !== JFactory::getDbo()->getNullDate()) : ?> <?php echo JHtml::_('date', $item->review_time, JText::_('DATE_FORMAT_LC4')); ?> <?php else : ?> <?php echo JText::_('COM_USERS_EMPTY_REVIEW'); ?> <?php endif; ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> PKb��\2?+'--/templates/hathor/html/com_users/users/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); $input = JFactory::getApplication()->input; $field = $input->getCmd('field'); $function = 'jSelectUser_'.$field; $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=users&layout=modal&tmpl=component&groups=' . $input->get('groups', '', 'BASE64') . '&excluded=' . $input->get('excluded', '', 'BASE64'));?>" method="post" name="adminForm" id="adminForm"> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_USERS_SEARCH_IN_NAME'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> <button type="button" data-user-value="" data-user-name="<?php echo $this->escape(JText::_('JLIB_FORM_SELECT_USER')); ?>" data-user-field="<?php echo $this->escape($field);?>" onclick="if (window.parent) window.parent.jSelectUser(this);"><?php echo JText::_('JOPTION_NO_USER')?></button> </div> <div class="filter-select"> <label for="filter_group_id"> <?php echo JText::_('COM_USERS_FILTER_USER_GROUP'); ?> </label> <?php echo JHtml::_('access.usergroup', 'filter_group_id', $this->state->get('filter.group_id')); ?> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <table class="adminlist modal"> <thead> <tr> <th class="title"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_NAME', 'a.name', $listDirn, $listOrder); ?> </th> <th class="nowrap width=25"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_USERNAME', 'a.username', $listDirn, $listOrder); ?> </th> <th class="nowrap width=25"> <?php echo JText::_('COM_USERS_HEADING_GROUPS'); ?> </th> </tr> </thead> <tbody> <?php $i = 0; foreach ($this->items as $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td> <a class="pointer" data-user-value="<?php echo $item->id; ?>" data-user-name="<?php echo $this->escape($item->name); ?>" data-user-field="<?php echo $this->escape($field);?>" onclick="if (window.parent) window.parent.jSelectUser(this);"> <?php echo $item->name; ?></a> </td> <td class="center"> <?php echo $item->username; ?> </td> <td class="title"> <?php echo nl2br($item->group_names); ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\B���&�&1templates/hathor/html/com_users/users/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $loggeduser = JFactory::getUser(); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=users');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('COM_USERS_SEARCH_USERS'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('COM_USERS_SEARCH_USERS'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_USERS_SEARCH_USERS'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_RESET'); ?></button> </div> <div class="filter-select"> <span class="faux-label"><?php echo JText::_('COM_USERS_FILTER_LABEL'); ?></span> <label class="selectlabel" for="filter_state"> <?php echo JText::_('COM_USERS_FILTER_LABEL'); ?> </label> <select name="filter_state" id="filter_state"> <option value="*"><?php echo JText::_('COM_USERS_FILTER_STATE');?></option> <?php echo JHtml::_('select.options', UsersHelper::getStateOptions(), 'value', 'text', $this->state->get('filter.state'));?> </select> <label class="selectlabel" for="filter_active"> <?php echo JText::_('COM_USERS_FILTER_ACTIVE'); ?> </label> <select name="filter_active" id="filter_active"> <option value="*"><?php echo JText::_('COM_USERS_FILTER_ACTIVE');?></option> <?php echo JHtml::_('select.options', UsersHelper::getActiveOptions(), 'value', 'text', $this->state->get('filter.active'));?> </select> <label class="selectlabel" for="filter_group_id"> <?php echo JText::_('COM_USERS_FILTER_USERGROUP'); ?> </label> <select name="filter_group_id" id="filter_group_id"> <option value=""><?php echo JText::_('COM_USERS_FILTER_USERGROUP');?></option> <?php echo JHtml::_('select.options', UsersHelper::getGroups(), 'value', 'text', $this->state->get('filter.group_id'));?> </select> <label class="selectlabel" for="filter_lastvisitrange"> <?php echo JText::_('COM_USERS_OPTION_FILTER_LAST_VISIT_DATE'); ?> </label> <select name="filter_lastvisitrange" id="filter_lastvisitrange" > <option value=""><?php echo JText::_('COM_USERS_OPTION_FILTER_LAST_VISIT_DATE');?></option> <?php echo JHtml::_('select.options', Usershelper::getRangeOptions(), 'value', 'text', $this->state->get('filter.lastvisitrange'));?> </select> <label class="selectlabel" for="filter_range"> <?php echo JText::_('COM_USERS_OPTION_FILTER_DATE'); ?> </label> <select name="filter_range" id="filter_range" > <option value=""><?php echo JText::_('COM_USERS_OPTION_FILTER_DATE');?></option> <?php echo JHtml::_('select.options', Usershelper::getRangeOptions(), 'value', 'text', $this->state->get('filter.range'));?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_NAME', 'a.name', $listDirn, $listOrder); ?> </th> <th class="nowrap width-10"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_USERNAME', 'a.username', $listDirn, $listOrder); ?> </th> <th class="nowrap width-5"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_ENABLED', 'a.block', $listDirn, $listOrder); ?> </th> <th class="nowrap width-5"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_ACTIVATED', 'a.activation', $listDirn, $listOrder); ?> </th> <th class="nowrap width-10"> <?php echo JText::_('COM_USERS_HEADING_GROUPS'); ?> </th> <th class="nowrap width-15"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_EMAIL', 'a.email', $listDirn, $listOrder); ?> </th> <th class="nowrap width-15"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_LAST_VISIT_DATE', 'a.lastvisitDate', $listDirn, $listOrder); ?> </th> <th class="nowrap width-15"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_REGISTRATION_DATE', 'a.registerDate', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $canEdit = $this->canDo->get('core.edit'); $canChange = $loggeduser->authorise('core.edit.state', 'com_users'); // If this group is super admin and this user is not super admin, $canEdit is false if ((!$loggeduser->authorise('core.admin')) && JAccess::check($item->id, 'core.admin')) { $canEdit = false; $canChange = false; } ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php if ($canEdit) : ?> <?php echo JHtml::_('grid.id', $i, $item->id); ?> <?php endif; ?> </td> <td class="break-word"> <div class="fltrt"> <?php echo JHtml::_('users.filterNotes', $item->note_count, $item->id); ?> <?php echo JHtml::_('users.notes', $item->note_count, $item->id); ?> <?php echo JHtml::_('users.addNote', $item->id); ?> <?php if ($item->requireReset == '1') : ?> <span class="label label-warning"><?php echo JText::_('COM_USERS_PASSWORD_RESET_REQUIRED'); ?></span> <?php endif; ?> <?php echo JHtml::_('users.notesModal', $item->note_count, $item->id); ?> </div> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_users&task=user.edit&id='.(int) $item->id); ?>" title="<?php echo JText::sprintf('COM_USERS_EDIT_USER', $this->escape($item->name)); ?>"> <?php echo $this->escape($item->name); ?></a> <?php else : ?> <?php echo $this->escape($item->name); ?> <?php endif; ?> <?php if (JDEBUG) : ?> <div class="fltrt"><div class="button2-left smallsub"><div class="blank"><a href="<?php echo JRoute::_('index.php?option=com_users&view=debuguser&user_id='.(int) $item->id);?>"> <?php echo JText::_('COM_USERS_DEBUG_USER');?></a></div></div></div> <?php endif; ?> </td> <td class="center break-word"> <?php echo $this->escape($item->username); ?> </td> <td class="center"> <?php if ($canChange) : ?> <?php if ($loggeduser->id != $item->id) : ?> <?php echo JHtml::_('grid.boolean', $i, !$item->block, 'users.unblock', 'users.block'); ?> <?php else : ?> <?php echo JHtml::_('grid.boolean', $i, !$item->block, 'users.block', null); ?> <?php endif; ?> <?php else : ?> <?php echo JText::_($item->block ? 'JNO' : 'JYES'); ?> <?php endif; ?> </td> <td class="center"> <?php echo JHtml::_('grid.boolean', $i, !$item->activation, 'users.activate', null); ?> </td> <td class="center"> <?php if (substr_count($item->group_names, "\n") > 1) : ?> <span class="hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('COM_USERS_HEADING_GROUPS'), nl2br($item->group_names), 0); ?>"><?php echo JText::_('COM_USERS_USERS_MULTIPLE_GROUPS'); ?></span> <?php else : ?> <?php echo nl2br($item->group_names); ?> <?php endif; ?> </td> <td class="center break-word"> <?php echo $this->escape($item->email); ?> </td> <td class="center"> <?php if ($item->lastvisitDate != $this->db->getNullDate()) : ?> <?php echo JHtml::_('date', $item->lastvisitDate, JText::_('DATE_FORMAT_LC6')); ?> <?php else:?> <?php echo JText::_('JNEVER'); ?> <?php endif;?> </td> <td class="center"> <?php echo JHtml::_('date', $item->registerDate, JText::_('DATE_FORMAT_LC6')); ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php // Load the batch processing form if user is allowed ?> <?php if ($loggeduser->authorise('core.create', 'com_users') && $loggeduser->authorise('core.edit', 'com_users') && $loggeduser->authorise('core.edit.state', 'com_users')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_USERS_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif;?> <?php echo $this->pagination->getListFooter(); ?> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> PKb��\f�y 2templates/hathor/html/com_users/groups/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); JText::script('COM_USERS_GROUPS_CONFIRM_DELETE'); $groupsWithUsers = array(); foreach ($this->items as $i => $item) { if ($item->user_count > 0) { $groupsWithUsers[] = $i; } } JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(task) { if (task == "groups.delete") { var f = document.adminForm; var cb = ""; var groupsWithUsers = [' . implode(',', $groupsWithUsers) . ']; for (index = 0; index < groupsWithUsers.length; ++index) { cb = f["cb" + groupsWithUsers[index]]; if (cb && cb.checked) { if (confirm(Joomla.JText._("COM_USERS_GROUPS_CONFIRM_DELETE"))) { Joomla.submitform(task); } return; } } } Joomla.submitform(task); }; '); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=groups');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('COM_USERS_SEARCH_GROUPS_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('COM_USERS_SEARCH_GROUPS_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_USERS_SEARCH_IN_GROUPS'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JText::_('COM_USERS_HEADING_GROUP_TITLE'); ?> </th> <th class="width-10"> <?php echo JText::_('COM_USERS_HEADING_USERS_IN_GROUP'); ?> </th> <th class="nowrap id-col"> <?php echo JText::_('JGRID_HEADING_ID'); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_users'); $canEdit = $user->authorise('core.edit', 'com_users'); // If this group is super admin and this user is not super admin, $canEdit is false if (!$user->authorise('core.admin') && JAccess::checkGroup($item->id, 'core.admin')) { $canEdit = false; } $canChange = $user->authorise('core.edit.state', 'com_users'); ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php if ($canEdit) : ?> <?php echo JHtml::_('grid.id', $i, $item->id); ?> <?php endif; ?> </td> <td> <?php echo str_repeat('<span class="gi">|—</span>', $item->level) ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_users&task=group.edit&id='.$item->id);?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <?php if (JDEBUG) : ?> <div class="fltrt"><div class="button2-left smallsub"><div class="blank"><a href="<?php echo JRoute::_('index.php?option=com_users&view=debuggroup&group_id='.(int) $item->id);?>"> <?php echo JText::_('COM_USERS_DEBUG_GROUP');?></a></div></div></div> <?php endif; ?> </td> <td class="center"> <?php echo $item->user_count ?: ''; ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�����2templates/hathor/html/com_users/levels/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_users'); $saveOrder = $listOrder == 'a.ordering'; ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=levels'); ?>" method="post" id="adminForm" name="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('COM_USERS_SEARCH_ACCESS_LEVELS'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('COM_USERS_SEARCH_ACCESS_LEVELS'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_USERS_SEARCH_TITLE_LEVELS'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_RESET'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_LEVEL_NAME', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'a.ordering', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'levels.saveorder'); ?> <?php endif; ?> </th> <th class="nowrap id-col"> <?php echo JText::_('JGRID_HEADING_ID'); ?> </th> <th class="width-40">   </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_users'); $canEdit = $user->authorise('core.edit', 'com_users'); $canChange = $user->authorise('core.edit.state', 'com_users'); ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_users&task=level.edit&id='.$item->id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) :?> <?php if ($listDirn == 'asc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, true, 'levels.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, true, 'levels.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, true, 'levels.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, true, 'levels.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" value="<?php echo $item->ordering; ?>" <?php echo $disabled; ?> class="text-area-order" title="<?php echo $item->title; ?> order" /> <?php else : ?> <?php echo $item->ordering; ?> <?php endif; ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> <td>   </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�\k���6templates/hathor/html/com_users/debuggroup/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=debuggroup&group_id='.(int) $this->state->get('group_id'));?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('COM_USERS_SEARCH_ASSETS'); ?></legend> <div class="filter-search fltlft"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('COM_USERS_SEARCH_ASSETS'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_USERS_SEARCH_USERS'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_RESET'); ?></button> </div> <div class="filter-select fltrt"> <label class="selectlabel" for="filter_component"><?php echo JText::_('COM_USERS_OPTION_SELECT_COMPONENT'); ?></label> <select name="filter_component" id="filter_component"> <option value=""><?php echo JText::_('COM_USERS_OPTION_SELECT_COMPONENT');?></option> <?php if (!empty($this->components)) { echo JHtml::_('select.options', $this->components, 'value', 'text', $this->state->get('filter.component')); }?> </select> <label class="selectlabel" for="filter_level_start"><?php echo JText::_('COM_USERS_OPTION_SELECT_LEVEL_START'); ?></label> <select name="filter_level_start" id="filter_level_start"> <option value=""><?php echo JText::_('COM_USERS_OPTION_SELECT_LEVEL_START');?></option> <?php echo JHtml::_('select.options', $this->levels, 'value', 'text', $this->state->get('filter.level_start'));?> </select> <label class="selectlabel" for="filter_level_end"><?php echo JText::_('COM_USERS_OPTION_SELECT_LEVEL_END'); ?></label> <select name="filter_level_end" id="filter_level_end"> <option value=""><?php echo JText::_('COM_USERS_OPTION_SELECT_LEVEL_END');?></option> <?php echo JHtml::_('select.options', $this->levels, 'value', 'text', $this->state->get('filter.level_end'));?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <div> <?php echo JText::_('COM_USERS_DEBUG_LEGEND'); ?> <span class="check-0 swatch"><?php echo JText::sprintf('COM_USERS_DEBUG_IMPLICIT_DENY', '-');?></span> <span class="check-a swatch"><?php echo JText::sprintf('COM_USERS_DEBUG_EXPLICIT_ALLOW', '✓');?></span> <span class="check-d swatch"><?php echo JText::sprintf('COM_USERS_DEBUG_EXPLICIT_DENY', '✗');?></span> </div> <table class="adminlist"> <thead> <tr> <th class="left"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_ASSET_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="left"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_ASSET_NAME', 'a.name', $listDirn, $listOrder); ?> </th> <?php foreach ($this->actions as $key => $action) : ?> <th class="width-5"> <span class="hasTooltip" title="<?php echo JHtml::_('tooltipText', $key, $action[1]); ?>"><?php echo JText::_($key); ?></span> </th> <?php endforeach; ?> <th class="width-5 nowrap"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_LFT', 'a.lft', $listDirn, $listOrder); ?> </th> <th class="width-5 nowrap"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row1"> <td> <?php echo $this->escape($item->title); ?> </td> <td class="nowrap"> <?php echo str_repeat('<span class="gi">|—</span>', $item->level) ?> <?php echo $this->escape($item->name); ?> </td> <?php foreach ($this->actions as $action) : ?> <?php $name = $action[0]; $check = $item->checks[$name]; if ($check === true) : $class = 'check-a'; $text = '✓'; elseif ($check === false) : $class = 'check-d'; $text = '✗'; elseif ($check === null) : $class = 'check-0'; $text = '-'; else : $class = ''; $text = ' '; endif; ?> <td class="center <?php echo $class;?>"> <?php echo $text; ?> </td> <?php endforeach; ?> <td class="center"> <?php echo (int) $item->lft; ?> - <?php echo (int) $item->rgt; ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> PKb��\��`�$�$7templates/hathor/html/com_weblinks/weblinks/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); JHtml::_('behavior.modal'); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_weblinks'); $saveOrder = $listOrder == 'a.ordering'; ?> <form action="<?php echo JRoute::_('index.php?option=com_weblinks&view=weblinks'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_WEBLINKS_SEARCH_IN_TITLE'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_published"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.state'), true); ?> </select> <label class="selectlabel" for="filter_category_id"> <?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?> </label> <select name="filter_category_id" id="filter_category_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('category.options', 'com_weblinks'), 'value', 'text', $this->state->get('filter.category_id')); ?> </select> <label class="selectlabel" for="filter_access"> <?php echo JText::_('JOPTION_SELECT_ACCESS'); ?> </label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')); ?> </select> <label class="selectlabel" for="filter_language"> <?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?> </label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language')); ?> </select> <label class="selectlabel" for="filter_tag"> <?php echo JText::_('JOPTION_SELECT_TAG'); ?> </label> <select name="filter_tag" id="filter_tag"> <option value=""><?php echo JText::_('JOPTION_SELECT_TAG'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('tag.options', true, true), 'value', 'text', $this->state->get('filter.tag')); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th class="nowrap title category-col"> <?php echo JHtml::_('grid.sort', 'JCATEGORY', 'category_title', $listDirn, $listOrder); ?> </th> <th class="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'a.ordering', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'weblinks.saveorder'); ?> <?php endif; ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'a.access', $listDirn, $listOrder); ?> </th> <th class="hits-col"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?> </th> <th class="width-5"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'a.language', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $item->cat_link = JRoute::_('index.php?option=com_categories&extension=com_weblinks&task=edit&type=other&cid[]=' . $item->catid); $canCreate = $user->authorise('core.create', 'com_weblinks.category.' . $item->catid); $canEdit = $user->authorise('core.edit', 'com_weblinks.category.' . $item->catid); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id') || $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_weblinks.category.' . $item->catid) && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'weblinks.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_weblinks&task=weblink.edit&id='.(int) $item->id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <p class="smallsub"> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?></p> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'weblinks.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> </td> <td class="center"> <?php echo $this->escape($item->category_title); ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) :?> <?php if ($listDirn == 'asc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, $item->catid == @$this->items[$i - 1]->catid, 'weblinks.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, $item->catid == @$this->items[$i + 1]->catid, 'weblinks.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, $item->catid == @$this->items[$i - 1]->catid, 'weblinks.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, $item->catid == @$this->items[$i + 1]->catid, 'weblinks.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" value="<?php echo $item->ordering; ?>" <?php echo $disabled; ?> class="text-area-order" title="<?php echo $item->title; ?> order" /> <?php else : ?> <?php echo $item->ordering; ?> <?php endif; ?> </td> <td class="center"> <?php echo $this->escape($item->access_level); ?> </td> <td class="center"> <?php echo $item->hits; ?> </td> <td class="center"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <div class="clr"> </div> <?php //Load the batch processing form. ?> <?php echo $this->loadTemplate('batch'); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\C�����3templates/hathor/html/com_weblinks/weblink/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); $saveHistory = $this->state->get('params')->get('save_history', 0); JHtml::_('behavior.formvalidator'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'weblink.cancel' || document.formvalidator.isValid(document.id('weblink-form'))) { " . $this->form->getField('description')->save() . " Joomla.submitform(task, document.getElementById('weblink-form')); } } "); ?> <div class="weblink-edit"> <form action="<?php echo JRoute::_('index.php?option=com_weblinks&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="weblink-form" class="form-validate"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo empty($this->item->id) ? JText::_('COM_WEBLINKS_NEW_WEBLINK') : JText::sprintf('COM_WEBLINKS_EDIT_WEBLINK', $this->item->id); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('title'); ?> <?php echo $this->form->getInput('title'); ?></li> <li><?php echo $this->form->getLabel('alias'); ?> <?php echo $this->form->getInput('alias'); ?></li> <li><?php echo $this->form->getLabel('url'); ?> <?php echo $this->form->getInput('url'); ?></li> <li><?php echo $this->form->getLabel('catid'); ?> <?php echo $this->form->getInput('catid'); ?></li> <li><?php echo $this->form->getLabel('state'); ?> <?php echo $this->form->getInput('state'); ?></li> <li><?php echo $this->form->getLabel('access'); ?> <?php echo $this->form->getInput('access'); ?></li> <li><?php echo $this->form->getLabel('ordering'); ?> <?php echo $this->form->getInput('ordering'); ?></li> <li><?php echo $this->form->getLabel('language'); ?> <?php echo $this->form->getInput('language'); ?></li> <!-- Tag field --> <li><?php echo $this->form->getLabel('tags'); ?> <div class="is-tagbox"> <?php echo $this->form->getInput('tags'); ?> </div> </li> <?php if ($saveHistory) : ?> <li><?php echo $this->form->getLabel('version_note'); ?> <?php echo $this->form->getInput('version_note'); ?></li> <?php endif; ?> <li><?php echo $this->form->getLabel('id'); ?> <?php echo $this->form->getInput('id'); ?></li> </ul> <div> <?php echo $this->form->getLabel('description'); ?> <div class="clr"></div> <?php echo $this->form->getInput('description'); ?> </div> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'weblink-sliders-'.$this->item->id, array('useCookie' => 1)); ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_PUBLISHING'), 'publishing-details'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_PUBLISHING'); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('created_by'); ?> <?php echo $this->form->getInput('created_by'); ?></li> <li><?php echo $this->form->getLabel('created_by_alias'); ?> <?php echo $this->form->getInput('created_by_alias'); ?></li> <li><?php echo $this->form->getLabel('created'); ?> <?php echo $this->form->getInput('created'); ?></li> <li><?php echo $this->form->getLabel('publish_up'); ?> <?php echo $this->form->getInput('publish_up'); ?></li> <li><?php echo $this->form->getLabel('publish_down'); ?> <?php echo $this->form->getInput('publish_down'); ?></li> <?php if ($this->item->modified_by) : ?> <li><?php echo $this->form->getLabel('modified_by'); ?> <?php echo $this->form->getInput('modified_by'); ?></li> <li><?php echo $this->form->getLabel('modified'); ?> <?php echo $this->form->getInput('modified'); ?></li> <?php endif; ?> <?php if ($this->item->hits) : ?> <li><?php echo $this->form->getLabel('hits'); ?> <?php echo $this->form->getInput('hits'); ?></li> <?php endif; ?> </ul> </fieldset> <?php echo $this->loadTemplate('params'); ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'), 'meta-options'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'); ?></legend> <?php echo $this->loadTemplate('metadata'); ?> </fieldset> <?php echo JHtml::_('sliders.end'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> <div class="clr"></div> </form> </div> PKb��\O̮��:templates/hathor/html/com_weblinks/weblink/edit_params.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-params'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">'.$this->escape(JText::_($fieldSet->description)).'</p>'; endif; ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_($fieldSet->label); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php endforeach; ?> PKb��\{#65templates/hathor/html/com_checkin/checkin/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_checkin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_checkin'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty($this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <?php endif; ?> <div id="j-main-container"<?php echo !empty($this->sidebar) ? ' class="span10"' : ''; ?>> <fieldset id="filter-bar"> <div class="filter-search fltlft"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_CHECKIN_FILTER_SEARCH_DESC'); ?>" /> <button type="submit" class="btn"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> </fieldset> <div class="clr"></div> <table id="global-checkin" class="adminlist"> <thead> <tr> <th width="1%"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="left"><?php echo JHtml::_('grid.sort', 'COM_CHECKIN_DATABASE_TABLE', 'table', $listDirn, $listOrder); ?></th> <th><?php echo JHtml::_('grid.sort', 'COM_CHECKIN_ITEMS_TO_CHECK_IN', 'count', $listDirn, $listOrder); ?></th> </tr> </thead> <tbody> <?php foreach ($this->items as $table => $count): $i = 0; ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"><?php echo JHtml::_('grid.id', $i, $table); ?></td> <td><?php echo JText::sprintf('COM_CHECKIN_TABLE', $table); ?></td> <td width="200" class="center"><?php echo $count; ?></td> </tr> <?php endforeach; ?> </tbody> <tfoot> <tr> <td colspan="15"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> </table> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�E#|HHAtemplates/hathor/html/layouts/com_messages/toolbar/mysettings.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $text = JText::_('COM_MESSAGES_TOOLBAR_MY_SETTINGS'); ?> <a rel="{handler:'iframe', size:{x:700,y:300}}" href="index.php?option=com_messages&view=config&tmpl=component" title="<?php echo $text; ?>" class="messagesSettings toolbar"> <span class="icon-32-options"></span> <?php echo $text; ?> </a> PKb��\2��!��Btemplates/hathor/html/layouts/com_modules/toolbar/cancelselect.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $text = JText::_('JTOOLBAR_CANCEL'); ?> <a onclick="location.href='index.php?option=com_modules'" class="toolbar" title="<?php echo $text; ?>"> <span class="icon-32-cancel"></span> <?php echo $text; ?> </a> PKb��\����?templates/hathor/html/layouts/com_modules/toolbar/newmodule.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $text = JText::_('JTOOLBAR_NEW'); ?> <a href="javascript:void(0)" onclick="location.href='index.php?option=com_modules&view=select'" class="toolbar"> <span class="icon-32-new"></span> <?php echo $text; ?> </a> PKb��\"�z��8templates/hathor/html/layouts/joomla/quickicons/icon.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $id = empty($displayData['id']) ? '' : (' id="' . $displayData['id'] . '"'); $target = empty($displayData['target']) ? '' : (' target="' . $displayData['target'] . '"'); $onclick = empty($displayData['onclick']) ? '' : (' onclick="' . $displayData['onclick'] . '"'); $title = empty($displayData['title']) ? '' : (' title="' . $this->escape($displayData['title']) . '"'); $text = empty($displayData['text']) ? '' : ('<span>' . $displayData['text'] . '</span>') ?> <div class="quickicon-wrapper"<?php echo $id; ?>> <div class="icon"> <a href="<?php echo $displayData['link']; ?>"<?php echo $target . $onclick . $title; ?>> <?php echo JHtml::_('image', empty($displayData['icon']) ? '' : $displayData['icon'], empty($displayData['alt']) ? null : htmlspecialchars($displayData['alt'], ENT_COMPAT, 'UTF-8'), null, true); ?> <?php echo $text; ?> </a> </div> </div> PKb��\��e��9templates/hathor/html/layouts/joomla/sidebars/submenu.phpnu�[���<?php /** * @package Joomla.Site * @subpackage Layout * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; ?> <div id="sidebar"> <div class="sidebar-nav"> <?php if ($displayData->displayMenu) : ?> <ul id="submenu" class="nav nav-list"> <?php foreach ($displayData->list as $item) : if (isset ($item[2]) && $item[2] == 1) : ?> <li class="active"> <?php else : ?> <li> <?php endif; if ($displayData->hide) : ?> <a class="nolink"><?php echo $item[0]; ?></a> <?php else : if ($item[1] !== '') : ?> <a href="<?php echo JFilterOutput::ampReplace($item[1]); ?>"><?php echo $item[0]; ?></a> <?php else : ?> <?php echo $item[0]; ?> <?php endif; endif; ?> </li> <?php endforeach; ?> </ul> <?php endif; ?> </div> </div> PKb��\6�>��:templates/hathor/html/layouts/joomla/toolbar/separator.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $class = empty($displayData['style']) ? 'spacer' : $displayData['style']; $style = $displayData['style']; ?> <li class="<?php echo $class; ?>"<?php echo $style; ?>></li> PKb��\�=_���7templates/hathor/html/layouts/joomla/toolbar/slider.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $doTask = $displayData['doTask']; $class = $displayData['class']; $text = $displayData['text']; $name = $displayData['name']; $onClose = $displayData['onClose']; ?> <a onclick="<?php echo $doTask; ?>" data-toggle="collapse" data-target="#collapse-<?php echo $name; ?>"<?php echo $onClose; ?>> <span class="<?php echo $class; ?>"></span> <?php echo $text; ?> </a> PKb��\�b=��9templates/hathor/html/layouts/joomla/toolbar/versions.phpnu�[���<?php /** * @package Joomla.Site * @subpackage Layout * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.modal', 'a.modal_jform_contenthistory'); ?> <a rel="{handler: 'iframe', size: {x: <?php echo $displayData['height']; ?>, y: <?php echo $displayData['width']; ?>}}" href="index.php?option=com_contenthistory&view=history&layout=modal&tmpl=component&item_id=<?php echo (int) $displayData['itemId']; ?>&type_id=<?php echo $displayData['typeId']; ?>&type_alias=<?php echo $displayData['typeAlias']; ?>&<?php echo JSession::getFormToken(); ?>=1" title="<?php echo $displayData['title']; ?>" class="toolbar modal_jform_contenthistory"> <span class="icon-32-restore"></span> <?php echo $displayData['title']; ?> </a> PKb��\�֜6templates/hathor/html/layouts/joomla/toolbar/batch.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $title = $displayData['title']; ?> <button type="button" data-toggle="modal" data-target="#collapseModal" class="btn btn-small"> <span class="icon-32-batch" title="<?php echo $title; ?>"></span> <?php echo $title; ?> </button> PKb��\���ODD?templates/hathor/html/layouts/joomla/toolbar/containerclose.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> </ul> <div class="clr"></div> </div> PKb��\��+�8templates/hathor/html/layouts/joomla/toolbar/confirm.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $doTask = $displayData['doTask']; $class = $displayData['class']; $text = $displayData['text']; ?> <a href="javascript:void(0)" onclick="<?php echo $doTask; ?>" class="toolbar"> <span class="<?php echo $class; ?>"></span> <?php echo $text; ?> </a> PKb��\��EE9templates/hathor/html/layouts/joomla/toolbar/standard.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $doTask = $displayData['doTask']; $class = $displayData['class']; $text = $displayData['text']; $btnClass = $displayData['btnClass']; ?> <a href="javascript:void(0)" onclick="<?php echo $doTask; ?>" class="toolbar"> <span class="<?php echo $class; ?>"></span> <?php echo $text; ?> </a> PKb��\���<bb6templates/hathor/html/layouts/joomla/toolbar/popup.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $doTask = $displayData['doTask']; $class = $displayData['class']; $text = $displayData['text']; $name = $displayData['name']; ?> <a onclick="<?php echo $doTask; ?>" class="modal toolbar" data-toggle="modal" data-target="#modal-<?php echo $name; ?>"> <span class="<?php echo $class; ?>"></span> <?php echo $text; ?> </a> PKb��\����5templates/hathor/html/layouts/joomla/toolbar/help.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $doTask = $displayData['doTask']; $text = $displayData['text']; ?> <a href="javascript:void(0)" onclick="<?php echo $doTask; ?>" rel="help" class="toolbar"> <span class="icon-32-help"></span> <?php echo $text; ?> </a> PKb��\�.dyee>templates/hathor/html/layouts/joomla/toolbar/containeropen.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="toolbar-list" id="<?php echo $displayData['id']; ?>"> <ul> PKb��\T����5templates/hathor/html/layouts/joomla/toolbar/base.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <li class="button" <?php echo $displayData['id']; ?>> <?php echo $displayData['action']; ?> </li> PKb��\IW{<��6templates/hathor/html/layouts/joomla/toolbar/title.phpnu�[���<?php /** * @package Joomla.Site * @subpackage Layout * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $class = 'pagetitle'; if (!empty($displayData['icon'])) { // Strip the extension. $icons = explode(' ', $displayData['icon']); foreach ($icons as $i => $icon) { $icons[$i] = 'icon-48-' . preg_replace('#\.[^.]*$#', '', $icon); } $class .= ' ' . htmlspecialchars(implode(' ', $icons), ENT_COMPAT, 'UTF-8'); } ?> <div class="<?php echo $class; ?>"> <h2> <?php echo $displayData['title']; ?> </h2> </div> PKb��\E����5templates/hathor/html/layouts/joomla/toolbar/link.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $doTask = $displayData['doTask']; $class = $displayData['class']; $text = $displayData['text']; ?> <a href="<?php echo $doTask; ?>;" class="toolbar"> <span class="<?php echo $class; ?>"></span> <?php echo $text; ?> </a> PKb��\+��HH:templates/hathor/html/layouts/joomla/toolbar/iconclass.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> icon-32-<?php echo $displayData['icon']; ?> PKb��\��Z~w w 5templates/hathor/html/layouts/joomla/edit/details.phpnu�[���<?php /** * @package Joomla.Site * @subpackage Layout * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // JLayout for standard handling of the details sidebar in administrator edit screens. $title = $displayData->get('form')->getValue('title'); $published = $displayData->get('form')->getValue('published'); $saveHistory = $displayData->get('state')->get('params')->get('save_history', 0); ?> <div class="span2"> <h4><?php echo JText::_('JDETAILS');?></h4> <hr /> <fieldset class="form-vertical"> <?php if (empty($title)) : ?> <div class="control-group"> <div class="controls"> <?php echo $displayData->get('form')->getValue('name'); ?> </div> </div> <?php else : ?> <div class="control-group"> <div class="controls"> <?php echo $displayData->get('form')->getValue('title'); ?> </div> </div> <?php endif; ?> <?php if ($published) : ?> <div class="control-group"> <div class="control-label"> <?php echo $displayData->get('form')->getLabel('published'); ?> </div> <div class="controls"> <?php echo $displayData->get('form')->getInput('published'); ?> </div> </div> <?php else : ?> <div class="control-group"> <div class="control-label"> <?php echo $displayData->get('form')->getLabel('state'); ?> </div> <div class="controls"> <?php echo $displayData->get('form')->getInput('state'); ?> </div> </div> <?php endif; ?> <div class="control-group"> <div class="control-label"> <?php echo $displayData->get('form')->getLabel('access'); ?> </div> <div class="controls"> <?php echo $displayData->get('form')->getInput('access'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $displayData->get('form')->getLabel('featured'); ?> </div> <div class="controls"> <?php echo $displayData->get('form')->getInput('featured'); ?> </div> </div> <?php if (JLanguageMultilang::isEnabled()) : ?> <div class="control-group"> <div class="control-label"> <?php echo $displayData->get('form')->getLabel('language'); ?> </div> <div class="controls"> <?php echo $displayData->get('form')->getInput('language'); ?> </div> </div> <?php else : ?> <input type="hidden" name="language" value="<?php echo $displayData->get('form')->getValue('language'); ?>" /> <?php endif; ?> <div class="control-group"> <?php foreach ($displayData->get('form')->getFieldset('jmetadata') as $field) : ?> <?php if ($field->name == 'jform[metadata][tags][]') :?> <div class="control-group"> <div class="control-label"><?php echo $field->label; ?></div> <div class="controls"><?php echo $field->input; ?></div> </div> <?php endif; ?> <?php endforeach; ?> </div> <?php if ($saveHistory) : ?> <div class="control-group"> <div class="control-label"> <?php echo $displayData->get('form')->getLabel('version_note'); ?> </div> <div class="controls"> <?php echo $displayData->get('form')->getInput('version_note'); ?> </div> </div> <?php endif; ?> </fieldset> </div> PKb��\���::6templates/hathor/html/layouts/joomla/edit/metadata.phpnu�[���<?php /** * @package Joomla.Site * @subpackage Layout * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // JLayout for standard handling of metadata fields in the administrator content edit screens. $form = $displayData->get('form'); ?> <fieldset> <div class="control-group"> <?php echo $form->getLabel('metadesc'); ?> <div class="controls"> <?php echo $form->getInput('metadesc'); ?> </div> </div> <div class="control-group"> <?php echo $form->getLabel('metakey'); ?> <div class="controls"> <?php echo $form->getInput('metakey'); ?> </div> </div> <?php if ($form->getLabel('xreference')):?> <div class="control-group"> <?php echo $form->getLabel('xreference'); ?> <div class="controls"> <?php echo $form->getInput('xreference'); ?> </div> </div> <?php endif; ?> <?php foreach ($form->getGroup('metadata') as $field) : ?> <?php if ($field->name != 'jform[metadata][tags][]') :?> <div class="control-group"> <?php if (!$field->hidden) : ?> <?php echo $field->label; ?> <?php endif; ?> <div class="controls"> <?php echo $field->input; ?> </div> </div> <?php endif; ?> <?php endforeach; ?> </fieldset> PKb��\�f����?templates/hathor/html/layouts/com_media/toolbar/uploadmedia.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $title = JText::_('JTOOLBAR_UPLOAD'); ?> <button data-toggle="collapse" data-target="#collapseUpload" class="toolbar"> <span class="icon-32-upload" title="<?php echo $title; ?>"></span> <?php echo $title; ?> </button> PKb��\|�|���=templates/hathor/html/layouts/com_media/toolbar/newfolder.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $title = JText::_('COM_MEDIA_CREATE_NEW_FOLDER'); ?> <button data-toggle="collapse" data-target="#collapseFolder" class="toolbar"> <span class="icon-folder" title="<?php echo $title; ?>"></span> <?php echo $title; ?> </button> PKb��\9�,k��?templates/hathor/html/layouts/com_media/toolbar/deletemedia.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $title = JText::_('JTOOLBAR_DELETE'); ?> <button onclick="MediaManager.submit('folder.delete')" class="toolbar"> <span class="icon-32-delete" title="<?php echo $title; ?>"></span> <?php echo $title; ?> </button> PKb��\A&:Z��Atemplates/hathor/html/layouts/plugins/user/profile/fields/dob.phpnu�[���<?php /** * @package Joomla.Site * @subpackage Layout * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * $text string infotext to be displayed */ extract($displayData); ?> <div class="clrlft"><?php echo $text; ?></div> PKb��\N�_9��0templates/hathor/html/com_admin/help/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.language.help'); ?> <form action="<?php echo JRoute::_('index.php?option=com_admin&view=help'); ?>" method="post" name="adminForm" id="adminForm"> <div class="width-50 fltrt helplinks"> <ul class="helpmenu"> <li><?php echo JHtml::_('link', JHelp::createUrl('JHELP_GLOSSARY'), JText::_('COM_ADMIN_GLOSSARY'), array('target' => 'helpFrame')) ?></li> <li><?php echo JHtml::_('link', 'https://www.gnu.org/licenses/gpl-2.0.html', JText::_('COM_ADMIN_LICENSE'), array('target' => 'helpFrame')) ?></li> <li><?php echo JHtml::_('link', $this->latest_version_check, JText::_('COM_ADMIN_LATEST_VERSION_CHECK'), array('target' => 'helpFrame')) ?></li> <li><?php echo JHtml::_('link', JHelp::createUrl('JHELP_START_HERE'), JText::_('COM_ADMIN_START_HERE'), array('target' => 'helpFrame')) ?></li> </ul> </div> <div class="clr"> </div> <div id="treecellhelp" class="width-20 fltleft"> <fieldset class="adminform whitebg" title="<?php echo JText::_('COM_ADMIN_ALPHABETICAL_INDEX'); ?>"> <legend><?php echo JText::_('COM_ADMIN_ALPHABETICAL_INDEX'); ?></legend> <div class="helpIndex"> <ul class="subext"> <?php foreach ($this->toc as $k => $v):?> <li> <?php $url = JHelp::createUrl('JHELP_'.strtoupper($k)); ?> <?php echo JHtml::_('link', $url, $v, array('target' => 'helpFrame'));?> </li> <?php endforeach;?> </ul> </div> </fieldset> </div> <div id="datacellhelp" class="width-80 fltrt"> <fieldset title="<?php echo JText::_('COM_ADMIN_VIEW'); ?>"> <legend> <?php echo JText::_('COM_ADMIN_VIEW'); ?> </legend> <iframe name="helpFrame" src="<?php echo $this->page;?>" class="helpFrame"></iframe> </fieldset> </div> </form> PKb��\�����0templates/hathor/html/com_admin/profile/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.formvalidator'); // Get the form fieldsets. $fieldsets = $this->form->getFieldsets(); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'profile.cancel' || document.formvalidator.isValid(document.getElementById('profile-form'))) { Joomla.submitform(task, document.getElementById('profile-form')); } } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_admin&view=profile&layout=edit&id='.$this->item->id); ?>" method="post" name="adminForm" id="profile-form" class="form-validate" enctype="multipart/form-data"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_ADMIN_USER_ACCOUNT_DETAILS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('user_details') as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start'); foreach ($fieldsets as $fieldset) : if ($fieldset->name == 'user_details') : continue; endif; echo JHtml::_('sliders.panel', JText::_($fieldset->label), $fieldset->name); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_($fieldset->label); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($fieldset->name) as $field) : ?> <?php if ($field->hidden) : ?> <?php echo $field->input; ?> <?php else: ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endif; ?> <?php endforeach; ?> </ul> </fieldset> <?php endforeach; ?> <?php echo JHtml::_('sliders.end'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\o��{��:templates/hathor/html/com_admin/sysinfo/default_system.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_ADMIN_SYSTEM_INFORMATION'); ?></legend> <table class="adminlist"> <thead> <tr> <th width="250"> <?php echo JText::_('COM_ADMIN_SETTING'); ?> </th> <th> <?php echo JText::_('COM_ADMIN_VALUE'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="2">  </td> </tr> </tfoot> <tbody> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_PHP_BUILT_ON'); ?></strong> </td> <td> <?php echo $this->info['php'];?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_DATABASE_VERSION'); ?></strong> </td> <td> <?php echo $this->info['dbversion'];?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_DATABASE_COLLATION'); ?></strong> </td> <td> <?php echo $this->info['dbcollation'];?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_PHP_VERSION'); ?></strong> </td> <td> <?php echo $this->info['phpversion'];?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_WEB_SERVER'); ?></strong> </td> <td> <?php echo JHtml::_('system.server', $this->info['server']); ?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_WEBSERVER_TO_PHP_INTERFACE'); ?></strong> </td> <td> <?php echo $this->info['sapi_name'];?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_JOOMLA_VERSION'); ?></strong> </td> <td> <?php echo $this->info['version'];?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_PLATFORM_VERSION'); ?></strong> </td> <td> <?php echo $this->info['platform'];?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_USER_AGENT'); ?></strong> </td> <td> <?php echo $this->info['useragent'];?> </td> </tr> </tbody> </table> </fieldset> PKb��\�a�e��>templates/hathor/html/com_admin/sysinfo/default_navigation.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div id="submenu-box"> <div class="submenu-box"> <div class="submenu-pad"> <ul id="submenu" class="information nav nav-list"> <li> <a href="#" onclick="return false;" id="site" class="active"> <?php echo JText::_('COM_ADMIN_SYSTEM_INFORMATION'); ?></a> </li> <li> <a href="#" onclick="return false;" id="phpsettings"> <?php echo JText::_('COM_ADMIN_PHP_SETTINGS'); ?></a> </li> <li> <a href="#" onclick="return false;" id="config"> <?php echo JText::_('COM_ADMIN_CONFIGURATION_FILE'); ?></a> </li> <li> <a href="#" onclick="return false;" id="directory"> <?php echo JText::_('COM_ADMIN_DIRECTORY_PERMISSIONS'); ?></a> </li> <li> <a href="#" onclick="return false;" id="phpinfo"> <?php echo JText::_('COM_ADMIN_PHP_INFORMATION'); ?></a> </li> </ul> <div class="clr"></div> </div> </div> <div class="clr"></div> </div> PKb��\��O#��:templates/hathor/html/com_admin/sysinfo/default_config.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_ADMIN_CONFIGURATION_FILE'); ?></legend> <table class="adminlist"> <thead> <tr> <th width="300"> <?php echo JText::_('COM_ADMIN_SETTING'); ?> </th> <th> <?php echo JText::_('COM_ADMIN_VALUE'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="2"> </td> </tr> </tfoot> <tbody> <?php foreach ($this->config as $key => $value):?> <tr> <td> <?php echo $key;?> </td> <td> <?php echo htmlspecialchars($value, ENT_QUOTES);?> </td> </tr> <?php endforeach;?> </tbody> </table> </fieldset> PKb��\�-�22?templates/hathor/html/com_admin/sysinfo/default_phpsettings.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_ADMIN_RELEVANT_PHP_SETTINGS'); ?></legend> <table class="adminlist"> <thead> <tr> <th width="250"> <?php echo JText::_('COM_ADMIN_SETTING'); ?> </th> <th> <?php echo JText::_('COM_ADMIN_VALUE'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="2">  </td> </tr> </tfoot> <tbody> <tr> <td> <?php echo JText::_('COM_ADMIN_SAFE_MODE'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['safe_mode']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_OPEN_BASEDIR'); ?> </td> <td> <?php echo JHtml::_('phpsetting.string', $this->php_settings['open_basedir']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_DISPLAY_ERRORS'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['display_errors']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_SHORT_OPEN_TAGS'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['short_open_tag']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_FILE_UPLOADS'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['file_uploads']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_MAGIC_QUOTES'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['magic_quotes_gpc']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_REGISTER_GLOBALS'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['register_globals']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_OUTPUT_BUFFERING'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['output_buffering']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_SESSION_SAVE_PATH'); ?> </td> <td> <?php echo JHtml::_('phpsetting.string', $this->php_settings['session.save_path']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_SESSION_AUTO_START'); ?> </td> <td> <?php echo JHtml::_('phpsetting.integer', $this->php_settings['session.auto_start']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_XML_ENABLED'); ?> </td> <td> <?php echo JHtml::_('phpsetting.set', $this->php_settings['xml']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_ZLIB_ENABLED'); ?> </td> <td> <?php echo JHtml::_('phpsetting.set', $this->php_settings['zlib']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_ZIP_ENABLED'); ?> </td> <td> <?php echo JHtml::_('phpsetting.set', $this->php_settings['zip']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_DISABLED_FUNCTIONS'); ?> </td> <td> <?php echo JHtml::_('phpsetting.string', $this->php_settings['disable_functions']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_MBSTRING_ENABLED'); ?> </td> <td> <?php echo JHtml::_('phpsetting.set', $this->php_settings['mbstring']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_ICONV_AVAILABLE'); ?> </td> <td> <?php echo JHtml::_('phpsetting.set', $this->php_settings['iconv']); ?> </td> </tr> </tbody> </table> </fieldset> PKb��\��7��3templates/hathor/html/com_admin/sysinfo/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Add specific helper files for html generation JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // Load switcher behavior JHtml::_('behavior.switcher'); ?> <form action="<?php echo JRoute::_('index.php'); ?>" method="post" name="adminForm" id="adminForm"> <div id="config-document"> <div id="page-site" class="tab"> <div class="noshow"> <div class="width-100"> <?php echo $this->loadTemplate('system'); ?> </div> </div> </div> <div id="page-phpsettings" class="tab"> <div class="noshow"> <div class="width-60"> <?php echo $this->loadTemplate('phpsettings'); ?> </div> </div> </div> <div id="page-config" class="tab"> <div class="noshow"> <div class="width-60"> <?php echo $this->loadTemplate('config'); ?> </div> </div> </div> <div id="page-directory" class="tab"> <div class="noshow"> <div class="width-60"> <?php echo $this->loadTemplate('directory'); ?> </div> </div> </div> <div id="page-phpinfo" class="tab"> <div class="noshow"> <div class="width-100"> <?php echo $this->loadTemplate('phpinfo'); ?> </div> </div> </div> </div> <div class="clr"></div> </form> PKb��\?_���=templates/hathor/html/com_admin/sysinfo/default_directory.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_ADMIN_DIRECTORY_PERMISSIONS'); ?></legend> <table class="adminlist"> <thead> <tr> <th width="650"> <?php echo JText::_('COM_ADMIN_DIRECTORY'); ?> </th> <th> <?php echo JText::_('COM_ADMIN_STATUS'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="2"> </td> </tr> </tfoot> <tbody> <?php foreach ($this->directory as $dir => $info) : ?> <tr> <td> <?php echo JHtml::_('directory.message', $dir, $info['message']);?> </td> <td> <?php echo JHtml::_('directory.writable', $info['writable']);?> </td> </tr> <?php endforeach; ?> </tbody> </table> </fieldset> PKb��\u����3templates/hathor/html/com_messages/message/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'message.cancel' || document.formvalidator.isValid(document.getElementById('message-form'))) { Joomla.submitform(task, document.getElementById('message-form')); } } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_messages'); ?>" method="post" name="adminForm" id="message-form" class="form-validate form-horizontal"> <fieldset class="adminform"> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('user_id_to'); ?> <?php echo $this->form->getInput('user_id_to'); ?></li> <li><?php echo $this->form->getLabel('subject'); ?> <?php echo $this->form->getInput('subject'); ?></li> </ul> </fieldset> <fieldset class="adminform"> <legend><?php echo $this->form->getLabel('message'); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getInput('message'); ?> </li> </ul> </fieldset> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\U�^^7templates/hathor/html/com_messages/messages/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_messages&view=messages'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_MESSAGES_SEARCH_IN_SUBJECT'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_state"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_state" id="filter_state"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED');?></option> <?php echo JHtml::_('select.options', MessagesHelper::getStateOptions(), 'value', 'text', $this->state->get('filter.state'));?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'COM_MESSAGES_HEADING_SUBJECT', 'a.subject', $listDirn, $listOrder); ?> </th> <th class="width-5"> <?php echo JHtml::_('grid.sort', 'COM_MESSAGES_HEADING_READ', 'a.state', $listDirn, $listOrder); ?> </th> <th class="width-15"> <?php echo JHtml::_('grid.sort', 'COM_MESSAGES_HEADING_FROM', 'a.user_id_from', $listDirn, $listOrder); ?> </th> <th class="nowrap width-20"> <?php echo JHtml::_('grid.sort', 'JDATE', 'a.date_time', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $canChange = $user->authorise('core.edit.state', 'com_messages'); ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php echo JHtml::_('grid.id', $i, $item->message_id); ?> </td> <td> <a href="<?php echo JRoute::_('index.php?option=com_messages&view=message&message_id='.(int) $item->message_id); ?>"> <?php echo $this->escape($item->subject); ?></a> </td> <td class="center"> <?php echo JHtml::_('messages.state', $item->state, $i, $canChange); ?> </td> <td> <?php echo $item->user_from; ?> </td> <td> <?php echo JHtml::_('date', $item->date_time, JText::_('DATE_FORMAT_LC2')); ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\��G G 5templates/hathor/html/com_menus/item/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $assoc = JLanguageAssociations::isEnabled(); ?> <?php $fieldSets = $this->form->getFieldsets('request'); if (!empty($fieldSets)) { $fieldSet = array_shift($fieldSets); $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_MENUS_'.$fieldSet->name.'_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), 'request-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">'.$this->escape(JText::_($fieldSet->description)).'</p>'; endif; ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_($label) ?></legend> <?php $hidden_fields = ''; ?> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('request') as $field) : ?> <?php if (!$field->hidden) : ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php else : $hidden_fields .= $field->input; ?> <?php endif; ?> <?php endforeach; ?> </ul> <?php echo $hidden_fields; ?> </fieldset> <?php } $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_MENUS_'.$name.'_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">'.$this->escape(JText::_($fieldSet->description)).'</p>'; endif; ?> <div class="clr"></div> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_($label) ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php endforeach;?> <?php if ($assoc && $this->state->get('item.client_id') != 1) : ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_ASSOCIATIONS'), '-options');?> <?php echo $this->loadTemplate('associations'); ?> <?php endif; ?> PKb��\>�<EE-templates/hathor/html/com_menus/item/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.framework'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.modal'); $assoc = JLanguageAssociations::isEnabled(); // Ajax for parent items $script = " jQuery(document).ready(function ($){ $('#jform_menutype').change(function(){ var menutype = $(this).val(); $.ajax({ url: 'index.php?option=com_menus&task=item.getParentItem&menutype=' + menutype, dataType: 'json' }).done(function(data) { $('#jform_parent_id option').each(function() { if ($(this).val() != '1') { $(this).remove(); } }); $.each(data, function (i, val) { var option = $('<option>'); option.text(val.title).val(val.id); $('#jform_parent_id').append(option); }); $('#jform_parent_id').trigger('liszt:updated'); }); }); }); Joomla.submitbutton = function(task, type){ if (task == 'item.setType' || task == 'item.setMenuType') { if (task == 'item.setType') { jQuery('#item-form input[name=\"jform[type]\"]').val(type); jQuery('#fieldtype').val('type'); } else { jQuery('#item-form input[name=\"jform[menutype]\"]').val(type); } Joomla.submitform('item.setType', document.getElementById('item-form')); } else if (task == 'item.cancel' || document.formvalidator.isValid(document.getElementById('item-form'))) { Joomla.submitform(task, document.getElementById('item-form')); } else { // special case for modal popups validation response jQuery('#item-form .modal-value.invalid').each(function(){ var field = jQuery(this), idReversed = field.attr('id').split('').reverse().join(''), separatorLocation = idReversed.indexOf('_'), nameId = '#' + idReversed.substr(separatorLocation).split('').reverse().join('') + 'name'; jQuery(nameId).addClass('invalid'); }); } }; "; // Add the script to the document head. JFactory::getDocument()->addScriptDeclaration($script); // In case of modal $input = JFactory::getApplication()->input; $isModal = $input->get('layout') == 'modal' ? true : false; $layout = $isModal ? 'modal' : 'edit'; $tmpl = $isModal || $input->get('tmpl', '', 'cmd') === 'component' ? '&tmpl=component' : ''; $clientId = $this->state->get('item.client_id', 0); ?> <div class="menuitem-edit"> <form action="<?php echo JRoute::_('index.php?option=com_menus&view=item&client_id=' . $clientId . '&layout=' . $layout . $tmpl . '&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="item-form" class="form-validate"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_MENUS_ITEM_DETAILS');?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('type'); ?> <?php echo $this->form->getInput('type'); ?></li> <li><?php echo $this->form->getLabel('title'); ?> <?php echo $this->form->getInput('title'); ?></li> <?php if ($this->item->type == 'url') : ?> <?php $this->form->setFieldAttribute('link', 'readonly', 'false');?> <li><?php echo $this->form->getLabel('link'); ?> <?php echo $this->form->getInput('link'); ?></li> <?php endif; ?> <?php if ($this->item->type != 'url') : ?> <li><?php echo $this->form->getLabel('alias'); ?> <?php echo $this->form->getInput('alias'); ?></li> <?php endif; ?> <li><?php echo $this->form->getLabel('note'); ?> <?php echo $this->form->getInput('note'); ?></li> <?php if ($this->item->type !== 'url') : ?> <li><?php echo $this->form->getLabel('link'); ?> <?php echo $this->form->getInput('link'); ?></li> <?php endif ?> <?php if ($this->canDo->get('core.edit.state')) : ?> <li><?php echo $this->form->getLabel('published'); ?> <?php echo $this->form->getInput('published'); ?></li> <?php endif ?> <li><?php echo $this->form->getLabel('access'); ?> <?php echo $this->form->getInput('access'); ?></li> <li><?php echo $this->form->getLabel('menutype'); ?> <?php echo $this->form->getInput('menutype'); ?></li> <li><?php echo $this->form->getLabel('parent_id'); ?> <?php echo $this->form->getInput('parent_id'); ?></li> <li><?php echo $this->form->getLabel('menuordering'); ?> <?php echo $this->form->getInput('menuordering'); ?></li> <li><?php echo $this->form->getLabel('browserNav'); ?> <?php echo $this->form->getInput('browserNav'); ?></li> <?php if ($this->canDo->get('core.edit.state')) : ?> <?php if ($this->item->type == 'component') : ?> <li><?php echo $this->form->getLabel('home'); ?> <?php echo $this->form->getInput('home'); ?></li> <?php endif; ?> <?php endif; ?> <li><?php echo $this->form->getLabel('language'); ?> <?php echo $this->form->getInput('language'); ?></li> <li><?php echo $this->form->getLabel('template_style_id'); ?> <?php echo $this->form->getInput('template_style_id'); ?></li> <li><?php echo $this->form->getLabel('id'); ?> <?php echo $this->form->getInput('id'); ?></li> <li><?php echo $this->form->getLabel('client_id'); ?> <?php echo $this->form->getInput('client_id'); ?></li> </ul> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'menu-sliders-'.$this->item->id); ?> <?php //Load parameters. echo $this->loadTemplate('options'); ?> <div class="clr"></div> <?php if (!empty($this->modules)) : ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_MENUS_ITEM_MODULE_ASSIGNMENT'), 'module-options'); ?> <fieldset> <?php echo $this->loadTemplate('modules'); ?> </fieldset> <?php endif; ?> <?php echo JHtml::_('sliders.end'); ?> <input type="hidden" name="task" value="" /> <?php echo $this->form->getInput('component_id'); ?> <?php echo JHtml::_('form.token'); ?> <input type="hidden" id="fieldtype" name="fieldtype" value="" /> </div> </form> <div class="clr"></div> </div> PKb��\KJ / /1templates/hathor/html/com_menus/items/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $user = JFactory::getUser(); $app = JFactory::getApplication(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $ordering = ($listOrder == 'a.lft'); $canOrder = $user->authorise('core.edit.state', 'com_menus'); $saveOrder = ($listOrder == 'a.lft' && $listDirn == 'asc'); $menutypeid = (int) $this->state->get('menutypeid'); $assoc = JLanguageAssociations::isEnabled() && $this->state->get('filter.client_id') == 0; ?> <?php // Set up the filter bar. ?> <form action="<?php echo JRoute::_('index.php?option=com_menus&view=items'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_MENUS_ITEMS_SEARCH_FILTER'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="menutype"> <?php echo JText::_('TPL_HATHOR_COM_MENUS_MENU'); ?> </label> <select name="menutype" id="menutype"> <?php echo JHtml::_('select.options', JHtml::_('menu.menus'), 'value', 'text', $this->state->get('filter.menutype')); ?> </select> <label class="selectlabel" for="filter_level"> <?php echo JText::_('COM_MENUS_OPTION_SELECT_LEVEL'); ?> </label> <select name="filter_level" id="filter_level"> <option value=""><?php echo JText::_('COM_MENUS_OPTION_SELECT_LEVEL'); ?></option> <?php echo JHtml::_('select.options', $this->f_levels, 'value', 'text', $this->state->get('filter.level')); ?> </select> <label class="selectlabel" for="filter_published"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter[published]" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('archived' => false)), 'value', 'text', $this->state->get('filter.published'), true); ?> </select> <label class="selectlabel" for="filter_access"> <?php echo JText::_('JOPTION_SELECT_ACCESS'); ?> </label> <select name="filter[access]" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')); ?> </select> <label class="selectlabel" for="filter_language"> <?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?> </label> <select name="filter[language]" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language')); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <?php //Set up the grid heading. ?> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'a.lft', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'items.saveorder'); ?> <?php endif; ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <th width="10%"> <?php echo JText::_('JGRID_HEADING_MENU_ITEM_TYPE'); ?> </th> <?php if ($this->state->get('filter.client_id') == 0): ?> <th class="home-col"> <?php echo JHtml::_('grid.sort', 'COM_MENUS_HEADING_HOME', 'a.home', $listDirn, $listOrder); ?> </th> <?php endif; ?> <?php if ($assoc) : ?> <th class="width-5"> <?php echo JHtml::_('grid.sort', 'COM_MENUS_HEADING_ASSOCIATION', 'association', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th class="language-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'language', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $orderkey = array_search($item->id, $this->ordering[$item->parent_id]); $canCreate = $user->authorise('core.create', 'com_menus.menu.' . $menutypeid); $canEdit = $user->authorise('core.edit', 'com_menus.menu.' . $menutypeid); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id')|| $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_menus.menu.' . $menutypeid) && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php echo str_repeat('<span class="gi">|—</span>', $item->level - 1) ?> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'items.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit && !$item->protected) : ?> <a href="<?php echo JRoute::_('index.php?option=com_menus&task=item.edit&id='.(int) $item->id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <p class="smallsub" title="<?php echo $this->escape($item->path); ?>"> <?php echo str_repeat('<span class="gtr">|—</span>', $item->level - 1) ?> <?php if ($item->type != 'url') : ?> <?php if (empty($item->note)) : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?> <?php else : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS_NOTE', $this->escape($item->alias), $this->escape($item->note)); ?> <?php endif; ?> <?php elseif ($item->type == 'url' && $item->note) : ?> <?php echo JText::sprintf('JGLOBAL_LIST_NOTE', $this->escape($item->note)); ?> <?php endif; ?></p> </td> <td class="center"> <?php echo JHtml::_('MenusHtml.Menus.state', $item->published, $i, $canChange, 'cb'); ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) : ?> <span><?php echo $this->pagination->orderUpIcon($i, isset($this->ordering[$item->parent_id][$orderkey - 1]), 'items.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, isset($this->ordering[$item->parent_id][$orderkey + 1]), 'items.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" value="<?php echo $orderkey + 1; ?>" <?php echo $disabled; ?> class="text-area-order" title="<?php echo $item->title; ?> order" /> <?php else : ?> <?php echo $orderkey + 1; ?> <?php endif; ?> </td> <td class="center"> <?php echo $this->escape($item->access_level); ?> </td> <td class="nowrap"> <span title="<?php echo isset($item->item_type_desc) ? htmlspecialchars($this->escape($item->item_type_desc), ENT_COMPAT, 'UTF-8') : ''; ?>"> <?php echo $this->escape($item->item_type); ?></span> </td> <?php if ($this->state->get('filter.client_id') == 0): ?> <td class="center"> <?php if ($item->type == 'component') : ?> <?php if ($item->language == '*' || $item->home == '0'):?> <?php echo JHtml::_('jgrid.isdefault', $item->home, $i, 'items.', ($item->language != '*' || !$item->home) && $canChange && !$item->protected); ?> <?php elseif ($canChange):?> <a href="<?php echo JRoute::_('index.php?option=com_menus&task=items.unsetDefault&cid[]='.$item->id.'&'.JSession::getFormToken().'=1'); ?>"> <?php if ($item->language_image) : ?> <?php echo JHtml::_('image', 'mod_languages/' . $item->language_image . '.gif', $item->language_title, array('title' => JText::sprintf('COM_MENUS_GRID_UNSET_LANGUAGE', $item->language_title)), true); ?> <?php else : ?> <span class="label" title="<?php echo JText::sprintf('COM_MENUS_GRID_UNSET_LANGUAGE', $item->language_title); ?>"><?php echo $item->language_sef; ?></span> <?php endif; ?> </a> <?php else:?> <?php if ($item->language_image) : ?> <?php echo JHtml::_('image', 'mod_languages/' . $item->language_image . '.gif', $item->language_title, array('title' => $item->language_title), true); ?> <?php else : ?> <span class="label" title="<?php echo $item->language_title; ?>"><?php echo $item->language_sef; ?></span> <?php endif; ?> <?php endif; ?> <?php endif; ?> </td> <?php endif; ?> <?php if ($assoc) : ?> <td class="center"> <?php if ($item->association):?> <?php echo JHtml::_('MenusHtml.Menus.association', $item->id); ?> <?php endif; ?> </td> <?php endif; ?> <td class="center"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center"> <span title="<?php echo sprintf('%d-%d', $item->lft, $item->rgt); ?>"> <?php echo (int) $item->id; ?></span> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <div class="clr"> </div> <?php //Load the batch processing form.is user is allowed ?> <?php if ($user->authorise('core.create', 'com_menus') || $user->authorise('core.edit', 'com_menus')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_MENUS_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\��W -templates/hathor/html/com_menus/menu/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.formvalidator'); JText::script('ERROR'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { var form = document.getElementById('item-form'); if (task == 'menu.cancel' || document.formvalidator.isValid(form)) { Joomla.submitform(task, form); } }; "); ?> <div class="menu-edit"> <form action="<?php echo JRoute::_('index.php?option=com_menus&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="item-form"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_MENUS_MENU_DETAILS');?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('title'); ?> <?php echo $this->form->getInput('title'); ?></li> <li><?php echo $this->form->getLabel('menutype'); ?> <?php echo $this->form->getInput('menutype'); ?></li> <li><?php echo $this->form->getLabel('description'); ?> <?php echo $this->form->getInput('description'); ?></li> <li><?php echo $this->form->getLabel('client_id'); ?> <?php echo $this->form->getInput('client_id'); ?></li> </ul> </fieldset> </div> <div class="clr"></div> <?php if ($this->canDo->get('core.admin')) : ?> <div class="col rules-section"> <?php echo JHtml::_('sliders.start', 'permissions-sliders-' . $this->item->id, array('useCookie' => 1)); ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_MENUS_FIELDSET_RULES'), 'access-rules'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('COM_CONTENT_FIELDSET_RULES'); ?></legend> <?php echo $this->form->getLabel('rules'); ?> <?php echo $this->form->getInput('rules'); ?> </fieldset> <?php echo JHtml::_('sliders.end'); ?> </div> <?php endif; ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> <div class="clr"></div> </div> PKb��\�P5templates/hathor/html/com_menus/menutypes/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $input = JFactory::getApplication()->input; // Checking if loaded via index.php or component.php $tmpl = ($input->getCmd('tmpl') != '') ? '1' : ''; JFactory::getDocument()->addScriptDeclaration( ' setmenutype = function(type) { var tmpl = ' . json_encode($tmpl) . '; if (tmpl) { window.parent.Joomla.submitbutton("item.setType", type); window.parent.jQuery("#menuTypeModal").modal("hide"); } else { window.location="index.php?option=com_menus&view=item&task=item.setType&layout=edit&type=" + type; } }; ' ); ?> <h2 class="modal-title"><?php echo JText::_('COM_MENUS_TYPE_CHOOSE'); ?></h2> <ul class="menu_types"> <?php foreach ($this->types as $name => $list): ?> <li><dl class="menu_type"> <dt><?php echo JText::_($name); ?></dt> <dd><ul> <?php foreach ($list as $item): ?> <li><a class="choose_type" href="#" title="<?php echo JText::_($item->description); ?>" onclick="javascript:setmenutype('<?php echo base64_encode(json_encode(array('id' => $this->recordId, 'title' => isset($item->type) ? $item->type : $item->title, 'request' => $item->request))); ?>')"> <?php echo JText::_($item->title);?> </a> </li> <?php endforeach; ?> </ul> </dd> </dl> </li> <?php endforeach; ?> </ul> PKb��\Bw@�!�!1templates/hathor/html/com_menus/menus/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.multiselect'); $uri = JUri::getInstance(); $return = base64_encode($uri); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $modMenuId = (int) $this->get('ModMenuId'); $script = array(); $script[] = 'jQuery(document).ready(function() {'; foreach ($this->items as $item) : if ($user->authorise('core.edit', 'com_menus')) : $script[] = ' function jSelectPosition_' . $item->id . '(name) {'; $script[] = ' document.getElementById("' . $item->id . '").value = name;'; $script[] = ' jQuery(".modal").modal("hide");'; $script[] = ' };'; endif; endforeach; $script[] = ' jQuery(".modal").on("hidden", function () {'; $script[] = ' setTimeout(function(){'; $script[] = ' window.parent.location.reload();'; $script[] = ' },1000);'; $script[] = ' });'; $script[] = '});'; JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); ?> <form action="<?php echo JRoute::_('index.php?option=com_menus&view=menus');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('COM_MENUS_MENU_SEARCH_FILTER'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_MENUS_ITEMS_SEARCH_FILTER'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> </fieldset> <div class="clearfix"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col" rowspan="2"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th rowspan="2"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="width-30" colspan="3"> <?php echo JText::_('COM_MENUS_HEADING_NUMBER_MENU_ITEMS'); ?> </th> <th class="width-20" rowspan="2"> <?php echo JText::_('COM_MENUS_HEADING_LINKED_MODULES'); ?> </th> <th class="nowrap id-col" rowspan="2"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> <tr> <th class="width-10"> <?php echo JText::_('COM_MENUS_HEADING_PUBLISHED_ITEMS'); ?> </th> <th class="width-10"> <?php echo JText::_('COM_MENUS_HEADING_UNPUBLISHED_ITEMS'); ?> </th> <th class="width-10"> <?php echo JText::_('COM_MENUS_HEADING_TRASHED_ITEMS'); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_menus'); $canEdit = $user->authorise('core.edit', 'com_menus'); $canChange = $user->authorise('core.edit.state', 'com_menus'); $canManageItems = $user->authorise('core.manage', 'com_menus.menu.' . (int) $item->id); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($canManageItems) : ?> <a href="<?php echo JRoute::_('index.php?option=com_menus&view=items&menutype=' . $item->menutype); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <p class="smallsub">(<span><?php echo JText::_('COM_MENUS_MENU_MENUTYPE_LABEL') ?></span> <?php if ($canEdit) : ?> <?php echo '<a href="'.JRoute::_('index.php?option=com_menus&task=menu.edit&id='.$item->id).' title='.$this->escape($item->description).'">'. $this->escape($item->menutype).'</a>'; ?>) <?php else : ?> <?php echo $this->escape($item->menutype)?>) <?php endif; ?> </p> </td> <td class="center btns"> <a href="<?php echo JRoute::_('index.php?option=com_menus&view=items&menutype='.$item->menutype.'&filter_published=1');?>"> <?php echo $item->count_published; ?></a> </td> <td class="center btns"> <a href="<?php echo JRoute::_('index.php?option=com_menus&view=items&menutype='.$item->menutype.'&filter_published=0');?>"> <?php echo $item->count_unpublished; ?></a> </td> <td class="center btns"> <a href="<?php echo JRoute::_('index.php?option=com_menus&view=items&menutype='.$item->menutype.'&filter_published=-2');?>"> <?php echo $item->count_trashed; ?></a> </td> <td class="left"> <ul class="menu-module-list"> <?php if (isset($this->modules[$item->menutype])) : foreach ($this->modules[$item->menutype] as &$module) : ?> <li> <?php if ($canEdit) : ?> <?php $link = JRoute::_('index.php?option=com_modules&task=module.edit&id='.$module->id.'&return='.$return.'&tmpl=component&layout=modal'); ?> <a href="#module<?php echo $module->id; ?>Modal" role="button" class="button" data-toggle="modal" title="<?php echo JText::_('COM_MENUS_EDIT_MODULE_SETTINGS');?>"> <?php echo JText::sprintf('COM_MENUS_MODULE_ACCESS_POSITION', $this->escape($module->title), $this->escape($module->access_title), $this->escape($module->position)); ?></a> <?php else : ?> <?php echo JText::sprintf('COM_MENUS_MODULE_ACCESS_POSITION', $this->escape($module->title), $this->escape($module->access_title), $this->escape($module->position)); ?> <?php endif; ?> </li> <?php endforeach; ?> </ul> <?php foreach ($this->modules[$item->menutype] as &$module) : ?> <?php if ($canEdit) : ?> <?php $link = JRoute::_('index.php?option=com_modules&task=module.edit&id='.$module->id.'&return='.$return.'&tmpl=component&layout=modal'); ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'module' . $module->id . 'Modal', array( 'url' => $link, 'title' => JText::_('COM_MENUS_EDIT_MODULE_SETTINGS'), 'height' => '300px', 'width' => '800px', 'footer' => '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-success" data-dismiss="modal" onclick="jQuery(\'#module' . $module->id . 'Modal iframe\').contents().find(\'#saveBtn\').click();">' . JText::_('JSAVE') . '</button>', ) ); ?> <?php endif; ?> <?php endforeach; ?> <?php elseif ($modMenuId) : ?> <?php $link = JRoute::_('index.php?option=com_modules&task=module.add&eid=' . $modMenuId . '¶ms[menutype]=' . $item->menutype); ?> <a href="<?php echo $link; ?>"><?php echo JText::_('COM_MENUS_ADD_MENU_MODULE'); ?></a> <?php echo JHtml::_( 'bootstrap.renderModal', 'moduleModal', array( 'url' => $link, 'title' => JText::_('COM_MENUS_EDIT_MODULE_SETTINGS'), 'height' => '500px', 'width' => '800px', 'footer' => '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>', ) ); ?> <?php endif; ?> </td> <td class="center"> <?php echo $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\}��G��9templates/hathor/html/com_plugins/plugin/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_PLUGINS_'.$name.'_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">'.$this->escape(JText::_($fieldSet->description)).'</p>'; endif; ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_($label) ?></legend> <?php $hidden_fields = ''; ?> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <?php if (!$field->hidden) : ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php else : $hidden_fields .= $field->input; ?> <?php endif; ?> <?php endforeach; ?> </ul> <?php echo $hidden_fields; ?> </fieldset> <?php endforeach; ?> PKb��\C*�� � 1templates/hathor/html/com_plugins/plugin/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.formvalidator'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'plugin.cancel' || document.formvalidator.isValid(document.getElementById('style-form'))) { Joomla.submitform(task, document.getElementById('style-form')); } } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_plugins&layout=edit&extension_id='.(int) $this->item->extension_id); ?>" method="post" name="adminForm" id="style-form" class="form-validate"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo JText::_('JDETAILS') ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('name'); ?> <?php echo $this->form->getInput('name'); ?> <span class="readonly plg-name"><?php echo JText::_($this->item->name);?></span></li> <li><?php echo $this->form->getLabel('enabled'); ?> <?php echo $this->form->getInput('enabled'); ?></li> <li><?php echo $this->form->getLabel('access'); ?> <?php echo $this->form->getInput('access'); ?></li> <li><?php echo $this->form->getLabel('ordering'); ?> <?php echo $this->form->getInput('ordering'); ?></li> <li><?php echo $this->form->getLabel('folder'); ?> <?php echo $this->form->getInput('folder'); ?></li> <li><?php echo $this->form->getLabel('element'); ?> <?php echo $this->form->getInput('element'); ?></li> <?php if ($this->item->extension_id) : ?> <li><?php echo $this->form->getLabel('extension_id'); ?> <?php echo $this->form->getInput('extension_id'); ?></li> <?php endif; ?> </ul> <!-- Plugin metadata --> <?php if ($this->item->xml) : ?> <?php if ($text = trim($this->item->xml->description)) : ?> <label id="jform_extdescription-lbl"> <?php echo JText::_('JGLOBAL_DESCRIPTION'); ?> </label> <div class="clr"></div> <div class="readonly plg-desc extdescript"> <?php echo JText::_($text); ?> </div> <?php endif; ?> <?php else : ?> <?php echo JText::_('COM_PLUGINS_XML_ERR'); ?> <?php endif; ?> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'plugin-sliders-'.$this->item->extension_id); ?> <?php echo $this->loadTemplate('options'); ?> <div class="clr"></div> <?php echo JHtml::_('sliders.end'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> <div class="clr"></div> </form> PKb��\�EDD5templates/hathor/html/com_plugins/plugins/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_plugins'); $saveOrder = $listOrder == 'ordering'; ?> <form action="<?php echo JRoute::_('index.php?option=com_plugins&view=plugins'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_PLUGINS_SEARCH_IN_TITLE'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_enabled"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_enabled" id="filter_enabled"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', PluginsHelper::publishedOptions(), 'value', 'text', $this->state->get('filter.enabled'), true); ?> </select> <label class="selectlabel" for="filter_folder"> <?php echo JText::_('COM_PLUGINS_OPTION_FOLDER'); ?> </label> <select name="filter_folder" id="filter_folder"> <option value=""><?php echo JText::_('COM_PLUGINS_OPTION_FOLDER'); ?></option> <?php echo JHtml::_('select.options', PluginsHelper::folderOptions(), 'value', 'text', $this->state->get('filter.folder')); ?> </select> <label class="selectlabel" for="filter_access"> <?php echo JText::_('JOPTION_SELECT_ACCESS'); ?> </label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'COM_PLUGINS_NAME_HEADING', 'name', $listDirn, $listOrder); ?> </th> <th class="width-5"> <?php echo JHtml::_('grid.sort', 'JENABLED', 'enabled', $listDirn, $listOrder); ?> </th> <th class="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'ordering', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'plugins.saveorder'); ?> <?php endif; ?> </th> <th class="nowrap width-10"> <?php echo JHtml::_('grid.sort', 'COM_PLUGINS_FOLDER_HEADING', 'folder', $listDirn, $listOrder); ?> </th> <th class="nowrap width-10"> <?php echo JHtml::_('grid.sort', 'COM_PLUGINS_ELEMENT_HEADING', 'element', $listDirn, $listOrder); ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'access', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'extension_id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'ordering'); $canEdit = $user->authorise('core.edit', 'com_plugins'); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id') || $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_plugins') && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->extension_id); ?> </td> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'plugins.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_plugins&task=plugin.edit&extension_id='.(int) $item->extension_id); ?>"> <?php echo $item->name; ?></a> <?php else : ?> <?php echo $item->name; ?> <?php endif; ?> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->enabled, $i, 'plugins.', $canChange); ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) : ?> <?php if ($listDirn == 'asc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, @$this->items[$i - 1]->folder == $item->folder, 'plugins.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, @$this->items[$i + 1]->folder == $item->folder, 'plugins.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, @$this->items[$i - 1]->folder == $item->folder, 'plugins.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, @$this->items[$i + 1]->folder == $item->folder, 'plugins.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" value="<?php echo $item->ordering; ?>" <?php echo $disabled; ?> class="text-area-order" title="<?php echo $item->name; ?> order" /> <?php else : ?> <?php echo $item->ordering; ?> <?php endif; ?> </td> <td class="nowrap center"> <?php echo $this->escape($item->folder); ?> </td> <td class="nowrap center"> <?php echo $this->escape($item->element); ?> </td> <td class="center"> <?php echo $this->escape($item->access_level); ?> </td> <td class="center"> <?php echo (int) $item->extension_id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\C<��##3templates/hathor/html/com_cpanel/cpanel/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // no direct access defined('_JEXEC') or die; use Joomla\Registry\Registry; echo JHtml::_('sliders.start', 'panel-sliders', array('useCookie' => '1')); if (JFactory::getUser()->authorise('core.manage', 'com_postinstall')) : if ($this->postinstall_message_count): echo JHtml::_('sliders.panel', JText::_('COM_CPANEL_MESSAGES_TITLE'), 'cpanel-panel-com-postinstall'); ?> <div class="modal-body"> <p> <?php echo JText::_('COM_CPANEL_MESSAGES_BODY_NOCLOSE'); ?> </p> <p> <?php echo JText::_('COM_CPANEL_MESSAGES_BODYMORE_NOCLOSE'); ?> </p> </div> <div class="modal-footer"> <button onclick="window.location='index.php?option=com_postinstall&eid=700'; return false" class="btn btn-primary btn-large" > <?php echo JText::_('COM_CPANEL_MESSAGES_REVIEW'); ?> </button> </div> <?php endif; ?> <?php endif; foreach ($this->modules as $module) { $output = JModuleHelper::renderModule($module); echo JHtml::_('sliders.panel', $module->title, 'cpanel-panel-' . $module->name); echo $output; } echo JHtml::_('sliders.end'); PKb��\�)cs��+templates/hathor/html/mod_login/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.keepalive'); ?> <form action="<?php echo JRoute::_('index.php', true, $params->get('usesecure')); ?>" method="post" id="form-login"> <fieldset class="loginform"> <label id="mod-login-username-lbl" for="mod-login-username"><?php echo JText::_('JGLOBAL_USERNAME'); ?></label> <input name="username" id="mod-login-username" type="text" size="15" autofocus="true" /> <label id="mod-login-password-lbl" for="mod-login-password"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></label> <input name="passwd" id="mod-login-password" type="password" size="15" /> <?php if (count($twofactormethods) > 1): ?> <div class="control-group"> <div class="controls"> <label for="mod-login-secretkey"> <?php echo JText::_('JGLOBAL_SECRETKEY'); ?> </label> <input name="secretkey" autocomplete="off" tabindex="3" id="mod-login-secretkey" type="text" class="input-medium" size="15"/> </div> </div> <?php endif; ?> <?php if (!empty ($langs)) : ?> <label id="mod-login-language-lbl" for="lang"><?php echo JText::_('MOD_LOGIN_LANGUAGE'); ?></label> <?php echo $langs; ?> <?php endif; ?> <div class="clr"></div> <div class="button-holder"> <div class="button1"> <div class="next"> <a href="#" onclick="document.getElementById('form-login').submit();"> <?php echo JText::_('MOD_LOGIN_LOGIN'); ?></a> </div> </div> </div> <div class="clr"></div> <input type="submit" class="hidebtn" value="<?php echo JText::_('MOD_LOGIN_LOGIN'); ?>" /> <input type="hidden" name="option" value="com_login" /> <input type="hidden" name="task" value="login" /> <input type="hidden" name="return" value="<?php echo $return; ?>" /> <?php echo JHtml::_('form.token'); ?> </fieldset> </form> PKb��\�ܤWW4templates/hathor/html/com_finder/filters/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); JText::script('COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(pressbutton) { if (pressbutton == 'filters.delete') { if (confirm(Joomla.JText._('COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT'))) { Joomla.submitform(pressbutton); } else { return false; } } Joomla.submitform(pressbutton); } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_finder&view=filters');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::sprintf('COM_FINDER_SEARCH_LABEL', JText::_('COM_FINDER_FILTERS')); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::sprintf('COM_FINDER_SEARCH_LABEL', JText::_('COM_FINDER_FILTERS')); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_FINDER_FILTER_SEARCH_DESCRIPTION'); ?>" /> <button type="submit" class="btn"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_state"><?php echo JText::_('COM_FINDER_INDEX_FILTER_BY_STATE'); ?></label> <select name="filter_state" id="filter_state"> <option value=""><?php echo JText::_('COM_FINDER_INDEX_FILTER_BY_STATE');?></option> <?php echo JHtml::_('select.options', JHtml::_('finder.statelist'), 'value', 'text', $this->state->get('filter.state'));?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th class="title created-by-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_CREATED_BY', 'a.created_by_alias', $listDirn, $listOrder); ?> </th> <th class="title date-col"> <?php echo JHtml::_('grid.sort', 'COM_FINDER_FILTER_TIMESTAMP', 'a.created', $listDirn, $listOrder); ?> </th> <th class="nowrap width-5"> <?php echo JHtml::_('grid.sort', 'COM_FINDER_FILTER_MAP_COUNT', 'a.map_count', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.filter_id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php if (count($this->items) == 0) : ?> <tr class="row0"> <td class="center" colspan="7"> <?php if ($this->total == 0): echo JText::_('COM_FINDER_NO_FILTERS'); ?> <a href="<?php echo JRoute::_('index.php?option=com_finder&task=filter.add'); ?>" title="<?php echo JText::_('COM_FINDER_CREATE_FILTER'); ?>"> <?php echo JText::_('COM_FINDER_CREATE_FILTER'); ?> </a> <?php else: echo JText::_('COM_FINDER_NO_RESULTS'); endif; ?> </td> </tr> <?php endif; ?> <?php foreach ($this->items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_finder'); $canEdit = $user->authorise('core.edit', 'com_finder'); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $filter->checked_out == $user->get('id') || $filter->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_finder') && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <th class="center"> <?php echo JHtml::_('grid.id', $i, $item->filter_id); ?> </th> <td> <?php if ($item->checked_out) { echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'filters.', $canCheckin); } ?> <?php if ($canEdit) { ?> <a href="<?php echo JRoute::_('index.php?option=com_finder&task=filter.edit&filter_id=' . (int) $item->filter_id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php } else { echo $this->escape($item->title); } ?> </td> <td class="center nowrap"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'filters.', $canChange); ?> </td> <td class="center nowrap"> <?php echo $item->created_by_alias ?: $item->user_name; ?> </td> <td class="center nowrap"> <?php echo JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC4')); ?> </td> <td class="center nowrap"> <?php echo $item->map_count; ?> </td> <td class="center"> <?php echo (int) $item->filter_id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\t�F���2templates/hathor/html/com_finder/index/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $lang = JFactory::getLanguage(); JText::script('COM_FINDER_INDEX_CONFIRM_PURGE_PROMPT'); JText::script('COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(pressbutton) { if (pressbutton == 'index.purge') { if (confirm(Joomla.JText._('COM_FINDER_INDEX_CONFIRM_PURGE_PROMPT'))) { Joomla.submitform(pressbutton); } else { return false; } } if (pressbutton == 'index.delete') { if (confirm(Joomla.JText._('COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT'))) { Joomla.submitform(pressbutton); } else { return false; } } Joomla.submitform(pressbutton); } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_finder&view=index');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::sprintf('COM_FINDER_SEARCH_LABEL', JText::_('COM_FINDER_ITEMS')); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::sprintf('COM_FINDER_SEARCH_LABEL', JText::_('COM_FINDER_ITEMS')); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_FINDER_FILTER_SEARCH_DESCRIPTION'); ?>" /> <button type="submit" class="btn"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_type"><?php echo JText::_('COM_FINDER_INDEX_TYPE_FILTER'); ?></label> <select name="filter_type" id="filter_type"> <option value=""><?php echo JText::_('COM_FINDER_INDEX_TYPE_FILTER'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('finder.typeslist'), 'value', 'text', $this->state->get('filter.type'));?> </select> <label class="selectlabel" for="filter_state"><?php echo JText::_('COM_FINDER_INDEX_FILTER_BY_STATE'); ?></label> <select name="filter_state" id="filter_state"> <option value=""><?php echo JText::_('COM_FINDER_INDEX_FILTER_BY_STATE');?></option> <?php echo JHtml::_('select.options', JHtml::_('finder.statelist'), 'value', 'text', $this->state->get('filter.state'));?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'l.title', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'l.published', $listDirn, $listOrder); ?> </th> <th class="nowrap width-5"> <?php echo JHtml::_('grid.sort', 'COM_FINDER_INDEX_HEADING_INDEX_TYPE', 'l.type_id', $listDirn, $listOrder); ?> </th> <th class="nowrap width-20"> <?php echo JHtml::_('grid.sort', 'COM_FINDER_INDEX_HEADING_LINK_URL', 'l.url', $listDirn, $listOrder); ?> </th> <th class="title date-col"> <?php echo JHtml::_('grid.sort', 'COM_FINDER_INDEX_HEADING_INDEX_DATE', 'l.indexdate', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php if (count($this->items) == 0) : ?> <tr class="row0"> <td align="center" colspan="7"> <?php if ($this->total == 0) { echo JText::_('COM_FINDER_INDEX_NO_DATA') . ' ' . JText::_('COM_FINDER_INDEX_TIP'); } else { echo JText::_('COM_FINDER_INDEX_NO_CONTENT'); } ?> </td> </tr> <?php endif; ?> <?php $canChange = JFactory::getUser()->authorise('core.manage', 'com_finder'); ?> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <th class="center"> <?php echo JHtml::_('grid.id', $i, $item->link_id); ?> </th> <td class="pull-left break-word"> <?php if ((int) $item->publish_start_date or (int) $item->publish_end_date or (int) $item->start_date or (int) $item->end_date) : ?> <img src="<?php echo JUri::root();?>/media/system/images/calendar.png" style="border:1px;float:right" class="hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::sprintf('COM_FINDER_INDEX_DATE_INFO', $item->publish_start_date, $item->publish_end_date, $item->start_date, $item->end_date), '', 0); ?>" /> <?php endif; ?> <?php echo $this->escape($item->title); ?> </td> <td class="center nowrap"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'index.', $canChange, 'cb'); ?> </td> <td class="center nowrap"> <?php $key = FinderHelperLanguage::branchSingular($item->t_title); echo $lang->hasKey($key) ? JText::_($key) : $item->t_title; ?> </td> <td class="nowrap"> <?php if (strlen($item->url) > 80) { echo substr($item->url, 0, 70) . '...'; } else { echo $item->url; } ?> </td> <td class="center nowrap"> <?php echo JHtml::_('date', $item->indexdate, JText::_('DATE_FORMAT_LC4')); ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="display" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\1��cc1templates/hathor/html/com_finder/maps/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.multiselect'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $lang = JFactory::getLanguage(); JText::script('COM_FINDER_MAPS_CONFIRM_DELETE_PROMPT'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(pressbutton) { if (pressbutton == 'map.delete') { if (confirm(Joomla.JText._('COM_FINDER_MAPS_CONFIRM_DELETE_PROMPT'))) { Joomla.submitform(pressbutton); } else { return false; } } Joomla.submitform(pressbutton); } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_finder&view=maps');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::sprintf('COM_FINDER_SEARCH_LABEL', JText::_('COM_FINDER_MAPS')); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::sprintf('COM_FINDER_SEARCH_LABEL', JText::_('COM_FINDER_MAPS')); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_FINDER_FILTER_SEARCH_DESCRIPTION'); ?>" /> <button type="submit" class="btn"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_branch"><?php echo JText::sprintf('COM_FINDER_FILTER_BY', JText::_('COM_FINDER_MAPS')); ?></label> <select name="filter_branch" id="filter_branch"> <?php echo JHtml::_('select.options', JHtml::_('finder.mapslist'), 'value', 'text', $this->state->get('filter.branch'));?> </select> <label class="selectlabel" for="filter_state"><?php echo JText::_('COM_FINDER_INDEX_FILTER_BY_STATE'); ?></label> <select name="filter_state" id="filter_state"> <option value=""><?php echo JText::_('COM_FINDER_INDEX_FILTER_BY_STATE');?></option> <?php echo JHtml::_('select.options', JHtml::_('finder.statelist'), 'value', 'text', $this->state->get('filter.state')); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?> </button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap center"> <?php echo JText::_('COM_FINDER_HEADING_NODES'); ?> </th> </tr> </thead> <tbody> <?php if (count($this->items) == 0) : ?> <tr class="row0"> <td class="center" colspan="5"> <?php echo JText::_('COM_FINDER_MAPS_NO_CONTENT'); ?> </td> </tr> <?php endif; ?> <?php $canChange = JFactory::getUser()->authorise('core.manage', 'com_finder'); ?> <?php foreach ($this->items as $i => $item) :?> <tr class="row<?php echo $i % 2; ?>"> <th class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </th> <td> <?php if ((int) $item->num_children === 0) : ?> <span class="gi">—</span> <?php endif; ?> <?php $key = FinderHelperLanguage::branchSingular($item->title); $title = $lang->hasKey($key) ? JText::_($key) : $item->title; echo $this->escape(($title == '*') ? JText::_('JALL_LANGUAGE') : $title); ?> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'maps.', $canChange, 'cb'); ?> </td> <td class="center btns"> <?php if ((int) $item->num_children === 0) : ?> <span class="badge <?php if ($item->num_nodes > 0) echo 'badge-info'; ?>"><?php echo $item->num_nodes; ?></span> <?php else : ?> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\��s�+�+5templates/hathor/html/com_modules/modules/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); JHtml::_('behavior.modal'); $client = $this->state->get('client_id') ? 'administrator' : 'site'; $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_modules'); $saveOrder = $listOrder == 'ordering'; ?> <form action="<?php echo JRoute::_('index.php?option=com_modules'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_MODULES_MODULES_FILTER_SEARCH_DESC'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="client_id"> <?php echo JText::_('JGLOBAL_FILTER_CLIENT'); ?> </label> <select name="client_id" id="client_id"> <?php echo JHtml::_('select.options', ModulesHelper::getClientOptions(), 'value', 'text', $this->state->get('client_id')); ?> </select> <label class="selectlabel" for="filter_state"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_state" id="filter_state"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', ModulesHelper::getStateOptions(), 'value', 'text', $this->state->get('filter.state')); ?> </select> <label class="selectlabel" for="filter_position"> <?php echo JText::_('COM_MODULES_OPTION_SELECT_POSITION'); ?> </label> <select name="filter_position" id="filter_position"> <option value=""><?php echo JText::_('COM_MODULES_OPTION_SELECT_POSITION'); ?></option> <?php echo JHtml::_('select.options', ModulesHelper::getPositions($this->state->get('client_id')), 'value', 'text', $this->state->get('filter.position')); ?> </select> <label class="selectlabel" for="filter_module"> <?php echo JText::_('COM_MODULES_OPTION_SELECT_MODULE'); ?> </label> <select name="filter_module" id="filter_module"> <option value=""><?php echo JText::_('COM_MODULES_OPTION_SELECT_MODULE'); ?></option> <?php echo JHtml::_('select.options', ModulesHelper::getModules($this->state->get('client_id')), 'value', 'text', $this->state->get('filter.module')); ?> </select> <label class="selectlabel" for="filter_access"> <?php echo JText::_('JOPTION_SELECT_ACCESS'); ?> </label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')); ?> </select> <label class="selectlabel" for="filter_language"> <?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?> </label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language')); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist" id="modules-mgr"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'title', $listDirn, $listOrder); ?> </th> <th class="width-5"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'published', $listDirn, $listOrder); ?> </th> <th class="width-20"> <?php echo JHtml::_('grid.sort', 'COM_MODULES_HEADING_POSITION', 'position', $listDirn, $listOrder); ?> </th> <th class="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'ordering', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'modules.saveorder'); ?> <?php endif; ?> </th> <th class="width-10"> <?php echo JHtml::_('grid.sort', 'COM_MODULES_HEADING_MODULE', 'name', $listDirn, $listOrder); ?> </th> <th class="width-10"> <?php echo JHtml::_('grid.sort', 'COM_MODULES_HEADING_PAGES', 'pages', $listDirn, $listOrder); ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'access', $listDirn, $listOrder); ?> </th> <th class="language-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'language_title', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'ordering'); $canCreate = $user->authorise('core.create', 'com_modules'); $canEdit = $user->authorise('core.edit', 'com_modules'); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id') || $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_modules') && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'modules.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_modules&task=module.edit&id='.(int) $item->id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <?php if (!empty($item->note)) : ?> <p class="smallsub"> <?php echo JText::sprintf('JGLOBAL_LIST_NOTE', $this->escape($item->note)); ?></p> <?php endif; ?> </td> <td class="center"> <?php // Check if extension is enabled ?> <?php if ($item->enabled > 0) : ?> <?php echo JHtml::_('modules.state', $item->published, $i, $canChange, 'cb'); ?> <?php else : ?> <?php // Extension is not enabled, show a message that indicates this. ?> <button class="btn btn-micro hasTooltip" title="<?php echo JText::_('COM_MODULES_MSG_MANAGE_EXTENSION_DISABLED'); ?>"> <span class="icon-ban-circle" aria-hidden="true"></span> </button> <?php endif; ?> </td> <td class="center"> <?php echo $item->position; ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) :?> <?php if ($listDirn == 'asc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, @$this->items[$i - 1]->position == $item->position, 'modules.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, @$this->items[$i + 1]->position == $item->position, 'modules.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, @$this->items[$i - 1]->position == $item->position, 'modules.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, @$this->items[$i + 1]->position == $item->position, 'modules.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" value="<?php echo $item->ordering; ?>" <?php echo $disabled; ?> class="text-area-order" title="<?php echo $item->title; ?> order" /> <?php else : ?> <?php echo $item->ordering; ?> <?php endif; ?> </td> <td class="left"> <?php echo $item->name; ?> </td> <td class="center"> <?php echo $item->pages; ?> </td> <td class="center"> <?php echo $this->escape($item->access_level); ?> </td> <td class="center"> <?php if ($item->language == ''):?> <?php echo JText::_('JDEFAULT'); ?> <?php elseif ($item->language == '*'):?> <?php echo JText::alt('JALL', 'language'); ?> <?php else:?> <?php echo $item->language_title ? JHtml::_('image', 'mod_languages/' . $item->language_image . '.gif', $item->language_title, array('title' => $item->language_title), true) . ' ' . $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> <?php endif; ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php // Load the batch processing form. ?> <?php if ($user->authorise('core.create', 'com_modules') && $user->authorise('core.edit', 'com_modules') && $user->authorise('core.edit.state', 'com_modules')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_MODULES_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer') ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> <script type="text/javascript"> jQuery("#client_id").on("change", function() { jQuery("#filter_position, #filter_module, #filter_language").val(""); }); </script> PKb��\ɣ�t@@<templates/hathor/html/com_modules/module/edit_assignment.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Initialise related data. JLoader::register('MenusHelper', JPATH_ADMINISTRATOR . '/components/com_menus/helpers/menus.php'); $menuTypes = MenusHelper::getMenuLinks(); JFactory::getDocument()->addScriptDeclaration(" window.addEvent('domready', function(){ validate(); document.getElements('select').addEvent('change', function(e){validate();}); }); function validate(){ var value = document.id('jform_assignment').value; var list = document.id('menu-assignment'); if (value == '-' || value == '0'){ $$('.jform-assignments-button').each(function(el) {el.setProperty('disabled', true); }); list.getElements('input').each(function(el){ el.setProperty('disabled', true); if (value == '-'){ el.setProperty('checked', false); } else { el.setProperty('checked', true); } }); } else { $$('.jform-assignments-button').each(function(el) {el.setProperty('disabled', false); }); list.getElements('input').each(function(el){ el.setProperty('disabled', false); }); } } "); ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_MODULES_MENU_ASSIGNMENT'); ?></legend> <label id="jform_menus-lbl" for="jform_menus"><?php echo JText::_('COM_MODULES_MODULE_ASSIGN'); ?></label> <fieldset id="jform_menus" class="radio"> <select name="jform[assignment]" id="jform_assignment"> <?php echo JHtml::_('select.options', ModulesHelper::getAssignmentOptions($this->item->client_id), 'value', 'text', $this->item->assignment, true);?> </select> </fieldset> <label id="jform_menuselect-lbl" for="jform_menuselect"><?php echo JText::_('JGLOBAL_MENU_SELECTION'); ?></label> <button type="button" class="jform-assignments-button jform-rightbtn" onclick="$$('.chkbox').each(function(el) { el.checked = !el.checked; });"> <?php echo JText::_('JGLOBAL_SELECTION_INVERT_ALL'); ?> </button> <button type="button" class="jform-assignments-button jform-rightbtn" onclick="$$('.chkbox').each(function(el) { el.checked = false; });"> <?php echo JText::_('JGLOBAL_SELECTION_NONE'); ?> </button> <button type="button" class="jform-assignments-button jform-rightbtn" onclick="$$('.chkbox').each(function(el) { el.checked = true; });"> <?php echo JText::_('JGLOBAL_SELECTION_ALL'); ?> </button> <div class="clr"></div> <div id="menu-assignment"> <?php echo JHtml::_('tabs.start', 'module-menu-assignment-tabs', array('useCookie' => 1));?> <?php foreach ($menuTypes as &$type) : echo JHtml::_('tabs.panel', $type->title ?: $type->menutype, $type->menutype.'-details'); $chkbox_class = 'chk-menulink-' . $type->id; ?> <button type="button" class="jform-assignments-button jform-rightbtn" onclick="$$('.<?php echo $chkbox_class; ?>').each(function(el) { el.checked = !el.checked; });"> <?php echo JText::_('JGLOBAL_SELECTION_INVERT'); ?> </button> <button type="button" class="jform-assignments-button jform-rightbtn" onclick="$$('.<?php echo $chkbox_class; ?>').each(function(el) { el.checked = false; });"> <?php echo JText::_('JGLOBAL_SELECTION_NONE'); ?> </button> <button type="button" class="jform-assignments-button jform-rightbtn" onclick="$$('.<?php echo $chkbox_class; ?>').each(function(el) { el.checked = true; });"> <?php echo JText::_('JGLOBAL_SELECTION_ALL'); ?> </button> <div class="clr"></div> <?php $count = count($type->links); ?> <?php $i = 0; ?> <?php if ($count) : ?> <ul class="menu-links"> <?php foreach ($type->links as $link) : if (trim($this->item->assignment) == '-') : $checked = ''; elseif ($this->item->assignment == 0) : $checked = ' checked="checked"'; elseif ($this->item->assignment < 0) : $checked = in_array(-$link->value, $this->item->assigned) ? ' checked="checked"' : ''; elseif ($this->item->assignment > 0) : $checked = in_array($link->value, $this->item->assigned) ? ' checked="checked"' : ''; endif; ?> <li class="menu-link"> <input type="checkbox" class="chkbox <?php echo $chkbox_class; ?>" name="jform[assigned][]" value="<?php echo (int) $link->value;?>" id="link<?php echo (int) $link->value;?>"<?php echo $checked;?>/> <label for="link<?php echo (int) $link->value;?>"> <?php echo $link->text; ?> </label> </li> <?php if ($count > 20 && ++$i == ceil($count / 2)) :?> </ul><ul class="menu-links"> <?php endif; ?> <?php endforeach; ?> </ul> <div class="clr"></div> <?php endif; ?> <?php endforeach; ?> <?php echo JHtml::_('tabs.end');?> </div> </fieldset> PKb��\p�y��9templates/hathor/html/com_modules/module/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_MODULES_'.$name.'_FIELDSET_LABEL'; echo JHtml::_('sliders.panel', JText::_($label), $name.'-options'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">'.$this->escape(JText::_($fieldSet->description)).'</p>'; endif; ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_($label); ?></legend> <?php $hidden_fields = ''; ?> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <?php if (!$field->hidden) : ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php else : $hidden_fields .= $field->input; ?> <?php endif; ?> <?php endforeach; ?> </ul> <?php echo $hidden_fields; ?> </fieldset> <?php endforeach; ?> PKb��\˅PS��1templates/hathor/html/com_modules/module/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.combobox'); $hasContent = empty($this->item->module) || $this->item->module == 'custom' || $this->item->module == 'mod_custom'; $script = "Joomla.submitbutton = function(task) { if (task == 'module.cancel' || document.formvalidator.isValid(document.getElementById('module-form'))) {"; if ($hasContent) { $script .= $this->form->getField('content')->save(); } $script .= " Joomla.submitform(task, document.getElementById('module-form')); if (self != top) { window.parent.jQuery('.modal').modal('hide'); } } }"; JFactory::getDocument()->addScriptDeclaration($script); ?> <div class="module-edit"> <form action="<?php echo JRoute::_('index.php?option=com_modules&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="module-form" class="form-validate"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo JText::_('JDETAILS'); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('title'); ?> <?php echo $this->form->getInput('title'); ?></li> <li><?php echo $this->form->getLabel('showtitle'); ?> <?php echo $this->form->getInput('showtitle'); ?></li> <li><?php echo $this->form->getLabel('position'); ?> <?php echo $this->form->getInput('custom_position'); ?> <label id="jform_custom_position-lbl" for="jform_custom_position" class="element-invisible"><?php echo JText::_('TPL_HATHOR_COM_MODULES_CUSTOM_POSITION_LABEL');?></label> <?php echo $this->form->getInput('position'); ?></li> <?php if ((string) $this->item->xml->name != 'Login Form') : ?> <li><?php echo $this->form->getLabel('published'); ?> <?php echo $this->form->getInput('published'); ?></li> <?php endif; ?> <li><?php echo $this->form->getLabel('access'); ?> <?php echo $this->form->getInput('access'); ?></li> <li><?php echo $this->form->getLabel('ordering'); ?> <?php echo $this->form->getInput('ordering'); ?></li> <?php if ((string) $this->item->xml->name != 'Login Form') : ?> <li><?php echo $this->form->getLabel('publish_up'); ?> <?php echo $this->form->getInput('publish_up'); ?></li> <li><?php echo $this->form->getLabel('publish_down'); ?> <?php echo $this->form->getInput('publish_down'); ?></li> <?php endif; ?> <li><?php echo $this->form->getLabel('language'); ?> <?php echo $this->form->getInput('language'); ?></li> <li><?php echo $this->form->getLabel('note'); ?> <?php echo $this->form->getInput('note'); ?></li> <?php if ($this->item->id) : ?> <li><?php echo $this->form->getLabel('id'); ?> <?php echo $this->form->getInput('id'); ?></li> <?php endif; ?> <li><?php echo $this->form->getLabel('module'); ?> <?php echo $this->form->getInput('module'); ?> <span class="faux-input"><?php if ($this->item->xml) echo ($text = (string) $this->item->xml->name) ? JText::_($text) : $this->item->module;else echo JText::_(COM_MODULES_ERR_XML);?></span></li> <li><?php echo $this->form->getLabel('client_id'); ?> <input type="text" size="35" id="jform_client_id" value="<?php echo $this->item->client_id == 0 ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); ?> " class="readonly" readonly="readonly" /> <?php echo $this->form->getInput('client_id'); ?></li> </ul> <div class="clr"></div> <?php if ($this->item->xml) : ?> <?php if ($text = trim($this->item->xml->description)) : ?> <span class="faux-label"> <?php echo JText::_('COM_MODULES_MODULE_DESCRIPTION'); ?> </span> <div class="clr"></div> <div class="readonly mod-desc extdescript"> <?php echo JText::_($text); ?> </div> <?php endif; ?> <?php else : ?> <?php echo JText::_('COM_MODULES_ERR_XML'); ?> <?php endif; ?> <div class="clr"></div> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'module-sliders'); ?> <?php echo $this->loadTemplate('options'); ?> <?php echo JHtml::_('sliders.end'); ?> </div> <?php if ($hasContent) : ?> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_MODULES_CUSTOM_OUTPUT'); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('content'); ?> <div class="clr"></div> <?php echo $this->form->getInput('content'); ?></li> </ul> </fieldset> </div> <?php endif; ?> <?php if ($this->item->client_id == 0) :?> <div class="col main-section"> <?php echo $this->loadTemplate('assignment'); ?> </div> <?php endif; ?> <div> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> PKb��\H����5templates/hathor/html/com_modules/positions/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); $function = JFactory::getApplication()->input->getCmd('function', 'jSelectPosition'); $lang = JFactory::getLanguage(); $ordering = $this->escape($this->state->get('list.ordering')); $direction = $this->escape($this->state->get('list.direction')); $clientId = $this->state->get('client_id'); $state = $this->state->get('filter.state'); $template = $this->state->get('filter.template'); $type = $this->state->get('filter.type'); ?> <form action="<?php echo JRoute::_('index.php?option=com_modules&view=positions&layout=modal&tmpl=component&function='.$function.'&client_id=' .$clientId);?>" method="post" name="adminForm" id="adminForm"> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label for="filter_search"> <?php echo JText::_('JSEARCH_FILTER_LABEL'); ?> </label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" size="30" title="<?php echo JText::_('COM_MODULES_FILTER_SEARCH_DESC'); ?>" /> <button type="submit"> <?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"> <?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_state"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_state" id="filter_state"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED');?></option> <?php echo JHtml::_('select.options', JHtml::_('modules.templateStates'), 'value', 'text', $state, true);?> </select> <label class="selectlabel" for="filter_type"> <?php echo JText::_('COM_MODULES_OPTION_SELECT_TYPE'); ?> </label> <select name="filter_type" id="filter_type"> <option value=""><?php echo JText::_('COM_MODULES_OPTION_SELECT_TYPE');?></option> <?php echo JHtml::_('select.options', JHtml::_('modules.types'), 'value', 'text', $type, true);?> </select> <label class="selectlabel" for="filter_template"> <?php echo JText::_('JOPTION_SELECT_TEMPLATE'); ?> </label> <select name="filter_template" id="filter_template"> <option value=""><?php echo JText::_('JOPTION_SELECT_TEMPLATE');?></option> <?php echo JHtml::_('select.options', JHtml::_('modules.templates', $clientId), 'value', 'text', $template, true);?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <table class="adminlist"> <thead> <tr> <th class="title width-20"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'value', $direction, $ordering); ?> </th> <th> <?php echo JHtml::_('grid.sort', 'COM_MODULES_HEADING_TEMPLATES', 'templates', $direction, $ordering); ?> </th> </tr> </thead> <tbody> <?php $i = 1; foreach ($this->items as $value => $templates) : ?> <tr class="row<?php echo $i = 1 - $i;?>"> <td> <a class="pointer" onclick="if (window.parent) window.parent.<?php echo $function;?>('<?php echo $value; ?>');"><?php echo $this->escape($value); ?></a> </td> <td> <?php if (!empty($templates)):?> <a class="pointer" onclick="if (window.parent) window.parent.<?php echo $function;?>('<?php echo $value; ?>');"> <ul> <?php foreach ($templates as $template => $label):?> <li><?php echo $lang->hasKey($label) ? JText::sprintf('COM_MODULES_MODULE_TEMPLATE_POSITION', JText::_($template), JText::_($label)) : JText::_($template);?></li> <?php endforeach;?> </ul> </a> <?php endif;?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $ordering; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $direction; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�J��2templates/hathor/html/com_contact/contact/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.formvalidator'); $app = JFactory::getApplication(); $input = $app->input; $saveHistory = $this->state->get('params')->get('save_history', 0); $assoc = JLanguageAssociations::isEnabled(); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'contact.cancel' || document.formvalidator.isValid(document.getElementById('contact-form'))) { " . $this->form->getField('misc')->save() . " Joomla.submitform(task, document.getElementById('contact-form')); } } "); $fieldSets = $this->form->getFieldsets(); ?> <form action="<?php echo JRoute::_('index.php?option=com_contact&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="contact-form" class="form-validate"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo empty($this->item->id) ? JText::_('COM_CONTACT_NEW_CONTACT') : JText::sprintf('COM_CONTACT_EDIT_CONTACT', $this->item->id); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('name'); ?> <?php echo $this->form->getInput('name'); ?></li> <li><?php echo $this->form->getLabel('alias'); ?> <?php echo $this->form->getInput('alias'); ?></li> <li><?php echo $this->form->getLabel('user_id'); ?> <?php echo $this->form->getInput('user_id'); ?></li> <li><?php echo $this->form->getLabel('catid'); ?> <?php echo $this->form->getInput('catid'); ?></li> <li><?php echo $this->form->getLabel('published'); ?> <?php echo $this->form->getInput('published'); ?></li> <li><?php echo $this->form->getLabel('access'); ?> <?php echo $this->form->getInput('access'); ?></li> <li><?php echo $this->form->getLabel('ordering'); ?> <?php echo $this->form->getInput('ordering'); ?></li> <li><?php echo $this->form->getLabel('featured'); ?> <?php echo $this->form->getInput('featured'); ?></li> <li><?php echo $this->form->getLabel('language'); ?> <?php echo $this->form->getInput('language'); ?></li> <!-- Tag field --> <li><?php echo $this->form->getLabel('tags'); ?> <div class="is-tagbox"> <?php echo $this->form->getInput('tags'); ?> </div> </li> <?php if ($saveHistory) : ?> <li><?php echo $this->form->getLabel('version_note'); ?> <?php echo $this->form->getInput('version_note'); ?></li> <?php endif; ?> <li><?php echo $this->form->getLabel('id'); ?> <?php echo $this->form->getInput('id'); ?></li> </ul> <div class="clr"></div> <?php echo $this->form->getLabel('misc'); ?> <div class="clr"></div> <?php echo $this->form->getInput('misc'); ?> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'contact-slider'); ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_PUBLISHING'), 'publishing-details'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_PUBLISHING'); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('created_by'); ?> <?php echo $this->form->getInput('created_by'); ?></li> <li><?php echo $this->form->getLabel('created_by_alias'); ?> <?php echo $this->form->getInput('created_by_alias'); ?></li> <li><?php echo $this->form->getLabel('created'); ?> <?php echo $this->form->getInput('created'); ?></li> <li><?php echo $this->form->getLabel('publish_up'); ?> <?php echo $this->form->getInput('publish_up'); ?></li> <li><?php echo $this->form->getLabel('publish_down'); ?> <?php echo $this->form->getInput('publish_down'); ?></li> <?php if ($this->item->modified_by) : ?> <li><?php echo $this->form->getLabel('modified_by'); ?> <?php echo $this->form->getInput('modified_by'); ?></li> <li><?php echo $this->form->getLabel('modified'); ?> <?php echo $this->form->getInput('modified'); ?></li> <?php endif; ?> </ul> </fieldset> <?php echo JHtml::_('sliders.panel', JText::_('COM_CONTACT_CONTACT_DETAILS'), 'basic-options'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('COM_CONTACT_CONTACT_DETAILS'); ?></legend> <p><?php echo empty($this->item->id) ? JText::_('COM_CONTACT_DETAILS') : JText::sprintf('COM_CONTACT_EDIT_DETAILS', $this->item->id); ?></p> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('image'); ?> <?php echo $this->form->getInput('image'); ?></li> <li><?php echo $this->form->getLabel('con_position'); ?> <?php echo $this->form->getInput('con_position'); ?></li> <li><?php echo $this->form->getLabel('email_to'); ?> <?php echo $this->form->getInput('email_to'); ?></li> <li><?php echo $this->form->getLabel('address'); ?> <?php echo $this->form->getInput('address'); ?></li> <li><?php echo $this->form->getLabel('suburb'); ?> <?php echo $this->form->getInput('suburb'); ?></li> <li><?php echo $this->form->getLabel('state'); ?> <?php echo $this->form->getInput('state'); ?></li> <li><?php echo $this->form->getLabel('postcode'); ?> <?php echo $this->form->getInput('postcode'); ?></li> <li><?php echo $this->form->getLabel('country'); ?> <?php echo $this->form->getInput('country'); ?></li> <li><?php echo $this->form->getLabel('telephone'); ?> <?php echo $this->form->getInput('telephone'); ?></li> <li><?php echo $this->form->getLabel('mobile'); ?> <?php echo $this->form->getInput('mobile'); ?></li> <li><?php echo $this->form->getLabel('fax'); ?> <?php echo $this->form->getInput('fax'); ?></li> <li><?php echo $this->form->getLabel('webpage'); ?> <?php echo $this->form->getInput('webpage'); ?></li> <li><?php echo $this->form->getLabel('sortname1'); ?> <?php echo $this->form->getInput('sortname1'); ?></li> <li><?php echo $this->form->getLabel('sortname2'); ?> <?php echo $this->form->getInput('sortname2'); ?></li> <li><?php echo $this->form->getLabel('sortname3'); ?> <?php echo $this->form->getInput('sortname3'); ?></li> </ul> </fieldset> <?php echo $this->loadTemplate('params'); ?> <?php foreach ($fieldSets as $name => $fieldSet) : ?> <?php if ($name != 'details' && $name != 'display' && $name != 'item_associations' && $name != 'jmetadata' && $name != 'email') : ?> <?php echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-options'); ?> <?php if (isset($fieldSet->description) && trim($fieldSet->description)) : ?> <p class="tip"><?php echo $this->escape(JText::_($fieldSet->description));?></p> <?php endif; ?> <fieldset class="panelform"> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> <?php endif ?> <?php endforeach; ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'), 'meta-options'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'); ?></legend> <?php echo $this->loadTemplate('metadata'); ?> </fieldset> <?php if ($assoc) : ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_ASSOCIATIONS'), '-options');?> <?php echo $this->loadTemplate('associations'); ?> <?php endif; ?> <?php echo JHtml::_('sliders.end'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\>�c5��9templates/hathor/html/com_contact/contact/edit_params.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-params'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">'.$this->escape(JText::_($fieldSet->description)).'</p>'; endif; ?> <fieldset class="panelform" > <legend class="element-invisible"><?php echo JText::_($fieldSet->label); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php endforeach; ?> PKb��\P�i��4templates/hathor/html/com_contact/contacts/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); $forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'cmd'); $function = JFactory::getApplication()->input->getCmd('function', 'jSelectContact'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_contact&view=contacts&layout=modal&tmpl=component');?>" method="post" name="adminForm" id="adminForm"> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter-search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('JSEARCH_FILTER'); ?>" /> <button type="submit"> <?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"> <?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_access"> <?php echo JText::_('JOPTION_SELECT_ACCESS'); ?> </label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS');?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access'));?> </select> <label class="selectlabel" for="filter_published"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED');?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true);?> </select> <label class="selectlabel" for="filter_category_id"> <?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?> </label> <select name="filter_category_id" id="filter_category_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_CATEGORY');?></option> <?php echo JHtml::_('select.options', JHtml::_('category.options', 'com_contact'), 'value', 'text', $this->state->get('filter.category_id'));?> </select> <?php if ($forcedLanguage) : ?> <input type="hidden" name="forcedLanguage" value="<?php echo $this->escape($forcedLanguage); ?>" /> <input type="hidden" name="filter_language" value="<?php echo $this->escape($this->state->get('filter.language')); ?>" /> <?php else : ?> <label class="selectlabel" for="filter_language"><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE');?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language'));?> </select> <?php endif; ?> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist modal"> <thead> <tr> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.name', $listDirn, $listOrder); ?> </th> <th> <?php echo JHtml::_('grid.sort', 'COM_CONTACT_FIELD_LINKED_USER_LABEL', 'ul.name', $listDirn, $listOrder); ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JCATEGORY', 'a.catid', $listDirn, $listOrder); ?> </th> <th class="title language-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'language', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <th> <a class="pointer" onclick="if (window.parent) window.parent.<?php echo $this->escape($function);?>('<?php echo $item->id; ?>', '<?php echo $this->escape(addslashes($item->name)); ?>');"> <?php echo $this->escape($item->name); ?></a> </th> <td class="center"> <?php if (!empty($item->linked_user)) : ?> <?php echo $item->linked_user;?> <?php endif; ?> </td> <td class="center"> <?php echo $this->escape($item->access_level); ?> </td> <td class="center"> <?php echo $this->escape($item->category_title); ?> </td> <td class="center"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <input type="hidden" name="forcedLanguage" value="<?php echo $forcedLanguage; ?>" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\�T.��)�)6templates/hathor/html/com_contact/contacts/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $app = JFactory::getApplication(); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_contact'); $saveOrder = $listOrder == 'a.ordering'; $assoc = JLanguageAssociations::isEnabled(); ?> <form action="<?php echo JRoute::_('index.php?option=com_contact'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_CONTACT_SEARCH_IN_NAME'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_published"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED');?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true);?> </select> <label class="selectlabel" for="filter_category_id"> <?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?> </label> <select name="filter_category_id" id="filter_category_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_CATEGORY');?></option> <?php echo JHtml::_('select.options', JHtml::_('category.options', 'com_contact'), 'value', 'text', $this->state->get('filter.category_id'));?> </select> <label class="selectlabel" for="filter_access"> <?php echo JText::_('JOPTION_SELECT_ACCESS'); ?> </label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS');?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access'));?> </select> <label class="selectlabel" for="filter_language"> <?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?> </label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE');?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language'));?> </select> <label class="selectlabel" for="filter_tag"> <?php echo JText::_('JOPTION_SELECT_TAG'); ?> </label> <select name="filter_tag" id="filter_tag"> <option value=""><?php echo JText::_('JOPTION_SELECT_TAG');?></option> <?php echo JHtml::_('select.options', JHtml::_('tag.options', true, true), 'value', 'text', $this->state->get('filter.tag'));?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.name', $listDirn, $listOrder); ?> </th> <th> <?php echo JHtml::_('grid.sort', 'COM_CONTACT_FIELD_LINKED_USER_LABEL', 'ul.name', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th class="nowrap featured-col"> <?php echo JHtml::_('grid.sort', 'JFEATURED', 'a.featured', $listDirn, $listOrder, null, 'desc'); ?> </th> <th class="title category-col"> <?php echo JHtml::_('grid.sort', 'JCATEGORY', 'category_title', $listDirn, $listOrder); ?> </th> <th class="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'a.ordering', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'contacts.saveorder'); ?> <?php endif; ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <?php if ($assoc) : ?> <th width="5%"> <?php echo JHtml::_('grid.sort', 'COM_CONTACT_HEADING_ASSOCIATION', 'association', $listDirn, $listOrder); ?> </th> <?php endif;?> <th class="language-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'a.language', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php $n = count($this->items); foreach ($this->items as $i => $item) : $ordering = $listOrder == 'a.ordering'; $canCreate = $user->authorise('core.create', 'com_contact.category.' . $item->catid); $canEdit = $user->authorise('core.edit', 'com_contact.category.' . $item->catid); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canEditOwn = $user->authorise('core.edit.own', 'com_contact.category.' . $item->catid) && $item->created_by == $userId; $canChange = $user->authorise('core.edit.state', 'com_contact.category.' . $item->catid) && $canCheckin; $item->cat_link = JRoute::_('index.php?option=com_categories&extension=com_contact&task=edit&type=other&id='.$item->catid); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'contacts.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit || $canEditOwn) : ?> <a href="<?php echo JRoute::_('index.php?option=com_contact&task=contact.edit&id='.(int) $item->id); ?>"> <?php echo $this->escape($item->name); ?></a> <?php else : ?> <?php echo $this->escape($item->name); ?> <?php endif; ?> <p class="smallsub"> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias));?></p> </td> <td align="center"> <?php if (!empty($item->linked_user)) : ?> <a href="<?php echo JRoute::_('index.php?option=com_users&task=user.edit&id='.$item->user_id);?>"><?php echo $item->linked_user;?></a> <?php endif; ?> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'contacts.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> </td> <td class="center"> <?php echo JHtml::_('contact.featured', $item->featured, $i, $canChange); ?> </td> <td class="center"> <?php echo $item->category_title; ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) : ?> <?php if ($listDirn == 'asc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, $item->catid == @$this->items[$i - 1]->catid, 'contacts.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, $item->catid == @$this->items[$i + 1]->catid, 'contacts.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, $item->catid == @$this->items[$i - 1]->catid, 'contacts.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, $item->catid == @$this->items[$i + 1]->catid, 'contacts.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" value="<?php echo $item->ordering; ?>" <?php echo $disabled; ?> class="text-area-order" title="<?php echo $item->name; ?> order" /> <?php else : ?> <?php echo $item->ordering; ?> <?php endif; ?> </td> <td class="center"> <?php echo $item->access_level; ?> </td> <?php if ($assoc) : ?> <td class="center"> <?php if ($item->association) : ?> <?php echo JHtml::_('contact.association', $item->id); ?> <?php endif; ?> </td> <?php endif;?> <td class="center"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center"> <?php echo $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php //Load the batch processing form. ?> <?php if ($user->authorise('core.create', 'com_contact') && $user->authorise('core.edit', 'com_contact') && $user->authorise('core.edit.state', 'com_contact')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_CONTACT_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\}��EPP6templates/hathor/html/com_config/component/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $app = JFactory::getApplication(); $template = $app->getTemplate(); JHtml::_('behavior.formvalidator'); JHtml::_('bootstrap.framework'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (document.formvalidator.isValid(document.getElementById('component-form'))) { Joomla.submitform(task, document.getElementById('component-form')); } } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_config'); ?>" id="component-form" method="post" name="adminForm" autocomplete="off" class="form-validate"> <?php echo JHtml::_('tabs.start', 'config-tabs-' . $this->component->option . '_configuration', array('useCookie' => 1)); $fieldSets = $this->form->getFieldsets(); ?> <?php foreach ($fieldSets as $name => $fieldSet) : ?> <?php $label = empty($fieldSet->label) ? 'COM_CONFIG_' . $name . '_FIELDSET_LABEL' : $fieldSet->label; echo JHtml::_('tabs.panel', JText::_($label), 'publishing-details'); if (isset($fieldSet->description) && !empty($fieldSet->description)) { echo '<p class="tab-description">' . JText::_($fieldSet->description) . '</p>'; } ?> <ul class="config-option-list"> <?php foreach ($this->form->getFieldset($name) as $field): ?> <li> <?php if (!$field->hidden) : ?> <?php echo $field->label; ?> <?php endif; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> <div class="clr"></div> <?php endforeach; ?> <?php echo JHtml::_('tabs.end'); ?> <div> <input type="hidden" name="id" value="<?php echo $this->component->id; ?>" /> <input type="hidden" name="component" value="<?php echo $this->component->option; ?>" /> <input type="hidden" name="return" value="<?php echo $this->return; ?>" /> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\0����?templates/hathor/html/com_config/application/default_locale.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_LOCATION_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('locale') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\�D����?templates/hathor/html/com_config/application/default_system.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_SYSTEM_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('system') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\��lA��?templates/hathor/html/com_config/application/default_server.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_SERVER_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('server') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\v����Ctemplates/hathor/html/com_config/application/default_navigation.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div id="submenu-box"> <ul id="submenu" class="configuration"> <li><a href="#" onclick="return false;" id="site" class="active"><?php echo JText::_('JSITE'); ?></a></li> <li><a href="#" onclick="return false;" id="system"><?php echo JText::_('COM_CONFIG_SYSTEM'); ?></a></li> <li><a href="#" onclick="return false;" id="server"><?php echo JText::_('COM_CONFIG_SERVER'); ?></a></li> <li><a href="#" onclick="return false;" id="permissions"><?php echo JText::_('COM_CONFIG_PERMISSIONS'); ?></a> </li> <li><a href="#" onclick="return false;" id="filters"><?php echo JText::_('COM_CONFIG_TEXT_FILTERS') ?></a></li> </ul> <div class="clr"></div> </div> PKb��\��~~=templates/hathor/html/com_config/application/default_site.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_SITE_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('site') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\j�^���Atemplates/hathor/html/com_config/application/default_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform long"> <legend><?php echo JText::_('COM_CONFIG_METADATA_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('metadata') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\�<�P��@templates/hathor/html/com_config/application/default_filters.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-80"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_TEXT_FILTER_SETTINGS'); ?></legend> <p><?php echo JText::_('COM_CONFIG_TEXT_FILTERS_DESC'); ?></p> <?php foreach ($this->form->getFieldset('filters') as $field) : ?> <?php echo $field->label; ?> <div class="clr"></div> <?php echo $field->input; ?> <?php endforeach; ?> </fieldset> </div> PKb��\ÆZ��?templates/hathor/html/com_config/application/default_cookie.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_COOKIE_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('cookie') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\�N ���<templates/hathor/html/com_config/application/default_seo.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform long"> <legend><?php echo JText::_('COM_CONFIG_SEO_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('seo') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\�%@���@templates/hathor/html/com_config/application/default_session.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_SESSION_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('session') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\���||<templates/hathor/html/com_config/application/default_ftp.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_FTP_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('ftp') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\��Ƕ��Atemplates/hathor/html/com_config/application/default_database.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_DATABASE_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('database') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\*W`55Atemplates/hathor/html/com_config/application/default_ftplogin.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset title="<?php echo JText::_('COM_CONFIG_FTP_DETAILS'); ?>" class="adminform"> <legend><?php echo JText::_('COM_CONFIG_FTP_DETAILS'); ?></legend> <?php echo JText::_('COM_CONFIG_FTP_DETAILS_TIP'); ?> <?php if ($this->ftp instanceof Exception) : ?> <p><?php echo JText::_($this->ftp->message); ?></p> <?php endif; ?> <ul class="adminformlist"> <li> <label for="username"><?php echo JText::_('JGLOBAL_USERNAME'); ?></label> <input type="text" id="username" name="username" class="input_box" size="70" value="" /> </li> <li> <label for="password"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></label> <input type="password" id="password" name="password" class="input_box" size="70" value="" /> </li> </ul> </fieldset> </div> PKb��\:_�@ @ 8templates/hathor/html/com_config/application/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.formvalidator'); JHtml::_('behavior.switcher'); // Load submenu template, using element id 'submenu' as needed by behavior.switcher $this->document->setBuffer($this->loadTemplate('navigation'), 'modules', 'submenu'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'application.cancel' || document.formvalidator.isValid(document.getElementById('application-form'))) { Joomla.submitform(task, document.getElementById('application-form')); } } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_config'); ?>" id="application-form" method="post" name="adminForm" class="form-validate"> <?php if ($this->ftp) : ?> <?php echo $this->loadTemplate('ftplogin'); ?> <?php endif; ?> <div id="config-document"> <div id="page-site" class="tab"> <div class="noshow"> <div class="width-60 fltlft"> <?php echo $this->loadTemplate('site'); ?> <?php echo $this->loadTemplate('metadata'); ?> </div> <div class="width-40 fltrt"> <?php echo $this->loadTemplate('seo'); ?> <?php echo $this->loadTemplate('cookie'); ?> </div> </div> </div> <div id="page-system" class="tab"> <div class="noshow"> <div class="width-60 fltlft"> <?php echo $this->loadTemplate('system'); ?> </div> <div class="width-40 fltrt"> <?php echo $this->loadTemplate('debug'); ?> <?php echo $this->loadTemplate('cache'); ?> <?php echo $this->loadTemplate('session'); ?> </div> </div> </div> <div id="page-server" class="tab"> <div class="noshow"> <div class="width-60 fltlft"> <?php echo $this->loadTemplate('server'); ?> <?php echo $this->loadTemplate('locale'); ?> <?php echo $this->loadTemplate('ftp'); ?> </div> <div class="width-40 fltrt"> <?php echo $this->loadTemplate('database'); ?> <?php echo $this->loadTemplate('mail'); ?> </div> </div> </div> <div id="page-permissions" class="tab"> <div class="noshow"> <?php echo $this->loadTemplate('permissions'); ?> </div> </div> <div id="page-filters" class="tab"> <div class="noshow"> <?php echo $this->loadTemplate('filters'); ?> </div> </div> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> <div class="clr"></div> </form> PKb��\���iiDtemplates/hathor/html/com_config/application/default_permissions.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_PERMISSION_SETTINGS'); ?></legend> <?php foreach ($this->form->getFieldset('permissions') as $field) : ?> <?php echo $field->label; ?> <div class="clr"></div> <?php echo $field->input; ?> <?php endforeach; ?> </fieldset> </div> PKb��\�5�K��>templates/hathor/html/com_config/application/default_debug.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_DEBUG_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('debug') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\0��OO=templates/hathor/html/com_config/application/default_mail.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('jquery.token'); JHtml::_('script', 'system/sendtestmail.js', array('version' => 'auto', 'relative' => true)); JFactory::getDocument()->addScriptDeclaration(' var sendtestmail_url = "' . addslashes(JUri::base()) . 'index.php?option=com_config&task=config.sendtestmail.application&format=json"; '); ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_MAIL_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('mail') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> <button type="button" class="btn btn-small" id="sendtestmail"> <span><?php echo JText::_('COM_CONFIG_SENDMAIL_ACTION_BUTTON'); ?></span> </button> </fieldset> </div> PKb��\7:���>templates/hathor/html/com_config/application/default_cache.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="width-100"> <fieldset class="adminform"> <legend><?php echo JText::_('COM_CONFIG_CACHE_SETTINGS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('cache') as $field): ?> <li> <?php echo $field->label; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> </div> PKb��\�����4templates/hathor/html/com_redirect/links/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_redirect&view=links'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_REDIRECT_SEARCH_LINKS'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_published"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_state" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED');?></option> <?php echo JHtml::_('select.options', RedirectHelper::publishedOptions(), 'value', 'text', $this->state->get('filter.state'), true);?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'COM_REDIRECT_HEADING_OLD_URL', 'a.old_url', $listDirn, $listOrder); ?> </th> <th class="width-30"> <?php echo JHtml::_('grid.sort', 'COM_REDIRECT_HEADING_NEW_URL', 'a.new_url', $listDirn, $listOrder); ?> </th> <th class="width-30"> <?php echo JHtml::_('grid.sort', 'COM_REDIRECT_HEADING_REFERRER', 'a.referer', $listDirn, $listOrder); ?> </th> <th class="width-10"> <?php echo JHtml::_('grid.sort', 'COM_REDIRECT_HEADING_CREATED_DATE', 'a.created_date', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap"> <?php echo JHtml::_('grid.sort', 'COM_REDIRECT_HEADING_HITS', 'a.hits', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_redirect'); $canEdit = $user->authorise('core.edit', 'com_redirect'); $canChange = $user->authorise('core.edit.state', 'com_redirect'); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_redirect&task=link.edit&id='.$item->id);?>" title="<?php echo $this->escape($item->old_url); ?>"> <?php echo $this->escape(str_replace(JUri::root(), '', rawurldecode($item->old_url))); ?></a> <?php else : ?> <?php echo $this->escape(str_replace(JUri::root(), '', rawurldecode($item->old_url))); ?> <?php endif; ?> </td> <td> <?php echo $this->escape(rawurldecode($item->new_url)); ?> </td> <td> <?php echo $this->escape($item->referer); ?> </td> <td class="center"> <?php echo JHtml::_('date', $item->created_date, JText::_('DATE_FORMAT_LC4')); ?> </td> <td class="center"> <?php echo (int) $item->hits; ?> </td> <td class="center"> <?php echo JHtml::_('redirect.published', $item->published, $i); ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php //Load the batch processing form if user is allowed ?> <?php if ($user->authorise('core.create', 'com_redirect') && $user->authorise('core.edit', 'com_redirect') && $user->authorise('core.edit.state', 'com_redirect')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_REDIRECT_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif;?> <?php echo $this->pagination->getListFooter(); ?> <p class="footer-tip"> <?php if ($this->enabled && $this->collect_urls_enabled) : ?> <span class="enabled"><?php echo JText::sprintf('COM_REDIRECT_COLLECT_URLS_ENABLED', JText::_('COM_REDIRECT_PLUGIN_ENABLED')); ?></span> <?php elseif ($this->enabled && !$this->collect_urls_enabled) : ?> <?php $link = JHtml::_( 'link', JRoute::_('index.php?option=com_plugins&task=plugin.edit&extension_id=' . RedirectHelper::getRedirectPluginId()), JText::_('COM_REDIRECT_SYSTEM_PLUGIN') ); ?> <span class="enabled"><?php echo JText::sprintf('COM_REDIRECT_COLLECT_MODAL_URLS_DISABLED', JText::_('COM_REDIRECT_PLUGIN_ENABLED'), $link); ?></span> <?php elseif (!$this->enabled) : ?> <span class="disabled"><?php echo JText::sprintf('COM_REDIRECT_PLUGIN_DISABLED', 'index.php?option=com_plugins&task=plugin.edit&extension_id=' . RedirectHelper::getRedirectPluginId()); ?></span> <?php endif; ?> </p> <div class="clr"></div> <?php if (!empty($this->items)) : ?> <?php echo $this->loadTemplate('addform'); ?> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�jt���;templates/hathor/html/com_installer/default/default_ftp.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset class="adminform" title="<?php echo JText::_('COM_INSTALLER_MSG_DESCFTPTITLE'); ?>"> <legend><?php echo JText::_('COM_INSTALLER_MSG_DESCFTPTITLE'); ?></legend> <?php echo JText::_('COM_INSTALLER_MSG_DESCFTP'); ?> <?php if ($this->ftp instanceof Exception) : ?> <p><?php echo JText::_($this->ftp->getMessage()); ?></p> <?php endif; ?> <ul class="adminformlist"> <li><label for="username"><?php echo JText::_('JGLOBAL_USERNAME'); ?></label> <input type="text" id="username" name="username" value="" /></li> <li><label for="password"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></label> <input type="password" id="password" name="password" class="input_box" value="" /></li> </ul> </fieldset> PKb��\*b־��8templates/hathor/html/com_installer/warnings/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div id="installer-warnings"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=warnings'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty($this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php if (!count($this->messages)) { echo '<p class="nowarning">' . JText::_('COM_INSTALLER_MSG_WARNINGS_NONE') . '</p>'; } else { echo JHtml::_('sliders.start', 'warning-sliders', array('useCookie' => 1)); foreach ($this->messages as $message) { echo JHtml::_('sliders.panel', $message['message'], str_replace(' ', '', $message['message'])); echo '<div style="padding: 5px;" >' . $message['description'] . '</div>'; } echo JHtml::_('sliders.panel', JText::_('COM_INSTALLER_MSG_WARNINGFURTHERINFO'), 'furtherinfo-pane'); echo '<div style="padding: 5px;" >' . JText::_('COM_INSTALLER_MSG_WARNINGFURTHERINFODESC') . '</div>'; echo JHtml::_('sliders.end'); } ?> <div class="clr"> </div> <div> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> </div> PKb��\4i���9templates/hathor/html/com_installer/languages/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.multiselect'); JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $version = new JVersion; // Add spindle-wheel for language installation. JFactory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function($) { Joomla.loadingLayer("load"); $("#adminForm").on("submit", function(e) { if (document.getElementsByName("task")[0].value == "languages.install") { Joomla.loadingLayer("show"); } }); }); '); ?> <div id="installer-languages"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=languages');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <?php if (count($this->items) || $this->escape($this->state->get('filter.search'))) : ?> <?php echo $this->loadTemplate('filter'); ?> <table class="adminlist"> <thead> <tr> <th width="5%"></th> <th class="nowrap"> <?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_NAME', 'name', $listDirn, $listOrder); ?> </th> <th width="10%" class="center"> <?php echo JText::_('JVERSION'); ?> </th> <th class="center nowrap hidden-phone"> <?php echo JText::_('COM_INSTALLER_HEADING_TYPE'); ?> </th> <th width="35%" class="nowrap hidden-phone"> <?php echo JText::_('COM_INSTALLER_HEADING_DETAILS_URL'); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $language) : preg_match('#^pkg_([a-z]{2,3}-[A-Z]{2})$#', $language->element, $element); $language->code = $element[1]; ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php $buttonText = (isset($this->installedLang[0][$language->code]) || isset($this->installedLang[1][$language->code])) ? 'REINSTALL' : 'INSTALL'; ?> <?php $onclick = 'document.getElementById(\'install_url\').value = \'' . $language->detailsurl . '\'; Joomla.submitbutton(\'install.install\');'; ?> <input type="button" class="btn btn-small" value="<?php echo JText::_('COM_INSTALLER_' . $buttonText . '_BUTTON'); ?>" onclick="<?php echo $onclick; ?>" /> </td> <td> <?php echo $language->name; ?> <?php $minorVersion = $version::MAJOR_VERSION . '.' . $version::MINOR_VERSION; ?> <?php // Display a Note if language pack version is not equal to Joomla version ?> <?php if (substr($language->version, 0, 3) != $minorVersion || substr($language->version, 0, 5) != $version->getShortVersion()) : ?> <div class="small"><?php echo JText::_('JGLOBAL_LANGUAGE_VERSION_NOT_PLATFORM'); ?></div> <?php endif; ?> </td> <td class="center"> <?php echo $language->version; ?> </td> <td class="center"> <?php echo JText::_('COM_INSTALLER_TYPE_' . strtoupper($language->type)); ?> </td> <td> <?php echo $language->detailsurl; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <?php else : ?> <div class="alert"><?php echo JText::_('COM_INSTALLER_MSG_LANGUAGES_NOLANGUAGES'); ?></div> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="return" value="<?php echo base64_encode('index.php?option=com_installer&view=languages') ?>" /> <input type="hidden" id="install_url" name="install_url" /> <input type="hidden" name="installtype" value="url" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> PKb��\� b�@templates/hathor/html/com_installer/languages/default_filter.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_INSTALLER_LANGUAGES_FILTER_SEARCH_DESC'); ?>" /> <button type="submit" class="btn"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> </fieldset> <div class="clr"></div> PKb��\��GG8templates/hathor/html/com_installer/database/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div id="installer-database"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=warnings');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <?php if ($this->errorCount === 0) : ?> <?php echo JHtml::_('sliders.start', 'database-sliders', array('useCookie' => 1)); ?> <?php else : ?> <?php echo JHtml::_('sliders.start', 'database-sliders', array('useCookie' => 1)); ?> <?php $panelName = JText::plural('COM_INSTALLER_MSG_N_DATABASE_ERROR_PANEL', $this->errorCount); ?> <?php echo JHtml::_('sliders.panel', $panelName, 'error-panel'); ?> <fieldset class="panelform"> <ul> <?php if (!$this->filterParams) : ?> <li><?php echo JText::_('COM_INSTALLER_MSG_DATABASE_FILTER_ERROR'); ?> <?php endif; ?> <?php if ($this->schemaVersion != $this->changeSet->getSchema()) : ?> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_SCHEMA_ERROR', $this->schemaVersion, $this->changeSet->getSchema()); ?></li> <?php endif; ?> <?php if (version_compare($this->updateVersion, JVERSION) != 0) : ?> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_UPDATEVERSION_ERROR', $this->updateVersion, JVERSION); ?></li> <?php endif; ?> <?php foreach ($this->errors as $line => $error) : ?> <?php $key = 'COM_INSTALLER_MSG_DATABASE_' . $error->queryType; $msgs = $error->msgElements; $file = basename($error->file); $msg0 = isset($msgs[0]) ? $msgs[0] : ' '; $msg1 = isset($msgs[1]) ? $msgs[1] : ' '; $msg2 = isset($msgs[2]) ? $msgs[2] : ' '; $message = JText::sprintf($key, $file, $msg0, $msg1, $msg2); ?> <li><?php echo $message; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php endif; ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_INSTALLER_MSG_DATABASE_INFO'), 'furtherinfo-pane'); ?> <fieldset class="panelform"> <ul> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_SCHEMA_VERSION', $this->schemaVersion); ?></li> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_UPDATE_VERSION', $this->updateVersion); ?></li> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_DRIVER', JFactory::getDbo()->name); ?></li> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_CHECKED_OK', count($this->results['ok'])); ?></li> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_SKIPPED', count($this->results['skipped'])); ?></li> </ul> </fieldset> <?php echo JHtml::_('sliders.end'); ?> <div class="clr"> </div> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> </div> PKb��\�>Y;;6templates/hathor/html/com_installer/manage/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.multiselect'); JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <div id="installer-manage"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=manage');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <?php if ($this->showMessage) : ?> <?php echo $this->loadTemplate('message'); ?> <?php endif; ?> <?php if ($this->ftp) : ?> <?php echo $this->loadTemplate('ftp'); ?> <?php endif; ?> <?php echo $this->loadTemplate('filter'); ?> <?php if (count($this->items)) : ?> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title nowrap"> <?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_NAME', 'name', $listDirn, $listOrder); ?> </th> <th> <?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_LOCATION', 'client_id', $listDirn, $listOrder); ?> </th> <th class="width-10 center"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'status', $listDirn, $listOrder); ?> </th> <th class="center"> <?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_TYPE', 'type', $listDirn, $listOrder); ?> </th> <th class="width-10 center"> <?php echo JText::_('JVERSION'); ?> </th> <th class="width-10"> <?php echo JText::_('JDATE'); ?> </th> <th class="width-15 center"> <?php echo JText::_('JAUTHOR'); ?> </th> <th> <?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_FOLDER', 'folder', $listDirn, $listOrder); ?> </th> <th> <?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_PACKAGE_ID', 'package_id', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_ID', 'extension_id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; if ($item->status == 2) echo ' protected';?>"> <td> <?php echo JHtml::_('grid.id', $i, $item->extension_id); ?> </td> <td> <span class="bold hasTooltip" title="<?php echo JHtml::_('tooltipText', $item->name, $item->description, 0); ?>"> <?php echo $item->name; ?> </span> </td> <td class="center"> <?php echo $item->client; ?> </td> <td class="center"> <?php if (!$item->element) : ?> <strong>X</strong> <?php else : ?> <?php echo JHtml::_('InstallerHtml.Manage.state', $item->status, $i, $item->status < 2, 'cb'); ?> <?php endif; ?> </td> <td class="center"> <?php echo JText::_('COM_INSTALLER_TYPE_' . $item->type); ?> </td> <td class="center"> <?php echo @$item->version != '' ? $item->version : ' '; ?> </td> <td class="center"> <?php echo @$item->creationDate != '' ? $item->creationDate : ' '; ?> </td> <td class="center"> <span class="editlinktip hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('COM_INSTALLER_AUTHOR_INFORMATION'), $item->author_info, 0); ?>"> <?php echo @$item->author != '' ? $item->author : ' '; ?> </span> </td> <td class="center"> <?php echo @$item->folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> </td> <td class="center"> <?php echo $item->package_id ?: JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> </td> <td> <?php echo $item->extension_id ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> PKb��\H�yEE=templates/hathor/html/com_installer/manage/default_filter.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_INSTALLER_FILTER_LABEL'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_client_id"> <?php echo JText::_('COM_INSTALLER_VALUE_CLIENT_SELECT'); ?> </label> <select name="filter_client_id" id="filter_client_id"> <?php echo JHtml::_('select.options', array('0' => JText::_('JSITE'), '1' => JText::_('JADMINISTRATOR')), 'value', 'text', $this->state->get('filter.client_id'), true); ?> </select> <label class="selectlabel" for="filter_status"> <?php echo JText::_('COM_INSTALLER_VALUE_STATE_SELECT'); ?> </label> <select name="filter_status" id="filter_status"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', InstallerHelper::getStateOptions(), 'value', 'text', $this->state->get('filter.status'), true); ?> </select> <label class="selectlabel" for="filter_type"> <?php echo JText::_('COM_INSTALLER_VALUE_TYPE_SELECT'); ?> </label> <select name="filter_type" id="filter_type"> <option value=""><?php echo JText::_('COM_INSTALLER_VALUE_TYPE_SELECT'); ?></option> <?php echo JHtml::_('select.options', InstallerHelper::getExtensionTypes(), 'value', 'text', $this->state->get('filter.type'), true); ?> </select> <label class="selectlabel" for="filter_folder"> <?php echo JText::_('COM_INSTALLER_VALUE_FOLDER_SELECT'); ?> </label> <select name="filter_folder" id="filter_folder"> <option value=""><?php echo JText::_('COM_INSTALLER_VALUE_FOLDER_SELECT'); ?></option> <?php echo JHtml::_('select.options', array_merge(InstallerHelper::getExtensionGroupes(), array('*' => JText::_('COM_INSTALLER_VALUE_FOLDER_NONAPPLICABLE'))), 'value', 'text', $this->state->get('filter.folder'), true); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"></div> PKb��\0�4��8templates/hathor/html/com_installer/discover/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <div id="installer-discover"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=discover');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <?php if ($this->showMessage) : ?> <?php echo $this->loadTemplate('message'); ?> <?php endif; ?> <?php if ($this->ftp) : ?> <?php echo $this->loadTemplate('ftp'); ?> <?php endif; ?> <?php if (count($this->items)) : ?> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"><input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /></th> <th class="title nowrap"><?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_NAME', 'name', $listDirn, $listOrder); ?></th> <th class="center"><?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_TYPE', 'type', $listDirn, $listOrder); ?></th> <th class="width-10 center"><?php echo JText::_('JVERSION'); ?></th> <th class="width-10 center"><?php echo JText::_('JDATE'); ?></th> <th><?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_FOLDER', 'folder', $listDirn, $listOrder); ?></th> <th><?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_CLIENT', 'client_id', $listDirn, $listOrder); ?></th> <th class="width-15 center"><?php echo JText::_('JAUTHOR'); ?></th> <th class="nowrap id-col"><?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_ID', 'extension_id', $listDirn, $listOrder); ?></th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2;?>"> <td><?php echo JHtml::_('grid.id', $i, $item->extension_id); ?></td> <td><span class="bold hasTooltip" title="<?php echo JHtml::_('tooltipText', $item->name, $item->description, 0); ?>"><?php echo $item->name; ?></span></td> <td class="center"><?php echo JText::_('COM_INSTALLER_TYPE_' . $item->type); ?></td> <td class="center"><?php echo @$item->version != '' ? $item->version : ' '; ?></td> <td class="center"><?php echo @$item->creationDate != '' ? $item->creationDate : ' '; ?></td> <td class="center"><?php echo @$item->folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?></td> <td class="center"><?php echo $item->client; ?></td> <td class="center"> <span class="editlinktip hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('COM_INSTALLER_AUTHOR_INFORMATION'), $item->author_info, 0); ?>"> <?php echo @$item->author != '' ? $item->author : ' '; ?> </span> </td> <td><?php echo $item->extension_id ?></td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <?php echo JText::_('COM_INSTALLER_MSG_DISCOVER_DESCRIPTION'); ?> <?php else : ?> <p class="nowarning"> <?php echo JText::_('COM_INSTALLER_MSG_DISCOVER_DESCRIPTION'); ?> </p> <p class="nowarning"> <?php echo JText::_('COM_INSTALLER_MSG_DISCOVER_NOEXTENSION'); ?> </p> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> PKb��\}A�o��<templates/hathor/html/com_installer/install/default_form.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // MooTools is loaded for B/C for extensions generating JavaScript in their install scripts, this call will be removed at 4.0 JHtml::_('behavior.framework', true); JHtml::_('bootstrap.tooltip'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function() { var form = document.getElementById('adminForm'); // do field validation if (form.install_package.value == ''){ alert('" . JText::_('COM_INSTALLER_MSG_INSTALL_PLEASE_SELECT_A_PACKAGE', true) . "'); } else { form.installtype.value = 'upload'; form.submit(); } }; Joomla.submitbutton3 = function() { var form = document.getElementById('adminForm'); // do field validation if (form.install_directory.value == ''){ alert('" . JText::_('COM_INSTALLER_MSG_INSTALL_PLEASE_SELECT_A_DIRECTORY', true) . "'); } else { JoomlaInstaller.showLoading(); form.installtype.value = 'folder'; form.submit(); } }; Joomla.submitbutton4 = function() { var form = document.getElementById('adminForm'); // do field validation if (form.install_url.value == '' || form.install_url.value == 'http://' || form.install_url.value == 'https://'){ alert('" . JText::_('COM_INSTALLER_MSG_INSTALL_ENTER_A_URL', true) . "'); } else { form.installtype.value = 'url'; form.submit(); } }; Joomla.submitbuttonInstallWebInstaller = function() { var form = document.getElementById('adminForm'); form.install_url.value = 'https://appscdn.joomla.org/webapps/jedapps/webinstaller.xml'; Joomla.submitbutton4(); }; // Add spindle-wheel for installations: jQuery(document).ready(function($) { var outerDiv = $(\"#installer-install\"); JoomlaInstaller.getLoadingOverlay() .css(\"top\", outerDiv.position().top - $(window).scrollTop()) .css(\"left\", \"0\") .css(\"width\", \"100%\") .css(\"height\", \"100%\") .css(\"display\", \"none\") .css(\"margin-top\", \"-10px\"); }); var JoomlaInstaller = { getLoadingOverlay: function () { return jQuery(\"#loading\"); }, showLoading: function () { this.getLoadingOverlay().css(\"display\", \"block\"); }, hideLoading: function () { this.getLoadingOverlay().css(\"display\", \"none\"); } }; "); JFactory::getDocument()->addStyleDeclaration( ' #loading { background: rgba(255, 255, 255, .8) url(\'' . JHtml::_('image', 'jui/ajax-loader.gif', '', null, true, true) . '\') 50% 15% no-repeat; position: fixed; opacity: 0.8; -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity = 80); filter: alpha(opacity = 80); overflow: hidden; } ' ); ?> <div id="installer-install" class="clearfix"> <form enctype="multipart/form-data" action="<?php echo JRoute::_('index.php?option=com_installer&view=install');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty($this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <?php if ($this->showJedAndWebInstaller && !$this->showMessage) : ?> <div class="alert j-jed-message" style="margin-bottom: 20px; line-height: 2em; color:#333333; clear:both;"> <a href="index.php?option=com_config&view=component&component=com_installer&path=&return=<?php echo urlencode(base64_encode(JUri::getInstance())); ?>" class="close hasTooltip icon-options" data-dismiss="alert" title="<?php echo str_replace('"', '"', JText::_('COM_INSTALLER_SHOW_JED_INFORMATION_TOOLTIP')); ?>"></a> <p><?php echo JText::_('COM_INSTALLER_INSTALL_FROM_WEB_INFO'); ?> <?php echo JText::_('COM_INSTALLER_INSTALL_FROM_WEB_TOS'); ?></p> <input class="btn" type="button" value="<?php echo JText::_('COM_INSTALLER_INSTALL_FROM_WEB_ADD_TAB'); ?>" onclick="Joomla.submitbuttonInstallWebInstaller()" /> </div> <?php endif; ?> <?php if ($this->ftp) : ?> <?php echo $this->loadTemplate('ftp'); ?> <?php endif; ?> <div class="width-70 fltlft"> <?php $firstTab = JEventDispatcher::getInstance()->trigger('onInstallerViewBeforeFirstTab', array()); ?> <?php // Show installation fieldsets ?> <?php $tabs = JEventDispatcher::getInstance()->trigger('onInstallerAddInstallationTab', array()); ?> <?php foreach ($tabs as $tab) : ?> <fieldset class="uploadform"> <?php echo $tab['content']; ?> </fieldset> <?php endforeach; ?> <?php $lastTab = JEventDispatcher::getInstance()->trigger('onInstallerViewAfterLastTab', array()); ?> <?php $tabs = array_merge($firstTab, $tabs, $lastTab); ?> <?php if (!$tabs) : ?> <?php JFactory::getApplication()->enqueueMessage(JText::_('COM_INSTALLER_NO_INSTALLATION_PLUGINS_FOUND'), 'warning'); ?> <?php endif; ?> <input type="hidden" name="type" value="" /> <input type="hidden" name="installtype" value="upload" /> <input type="hidden" name="task" value="install.install" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> </div> <div id="loading"></div> PKb��\�˦�7templates/hathor/html/com_installer/install/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <?php if ($this->showMessage) : ?> <?php echo $this->loadTemplate('message'); ?> <?php endif; ?> <?php echo $this->loadTemplate('form'); ?> PKb��\5:�##6templates/hathor/html/com_installer/update/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.multiselect'); JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <div id="installer-update"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=update');?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <?php if ($this->showMessage) : ?> <?php echo $this->loadTemplate('message'); ?> <?php endif; ?> <?php if ($this->ftp) : ?> <?php echo $this->loadTemplate('ftp'); ?> <?php endif; ?> <?php if (count($this->items)) : ?> <table class="adminlist" cellspacing="1"> <thead> <tr> <th class="checkmark-col"><input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /></th> <th class="nowrap"><?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_NAME', 'name', $listDirn, $listOrder); ?></th> <th class="nowrap"><?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_INSTALLTYPE', 'extension_id', $listDirn, $listOrder); ?></th> <th ><?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_TYPE', 'type', $listDirn, $listOrder); ?></th> <th class="width-10" class="center"><?php echo JText::_('JVERSION'); ?></th> <th><?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_FOLDER', 'folder', $listDirn, $listOrder); ?></th> <th><?php echo JHtml::_('grid.sort', 'COM_INSTALLER_HEADING_CLIENT', 'client_id', $listDirn, $listOrder); ?></th> <th class="width-25"><?php echo JText::_('COM_INSTALLER_HEADING_DETAILSURL'); ?></th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <?php $client = $item->client_id ? JText::_('JADMINISTRATOR') : JText::_('JSITE'); ?> <tr class="row<?php echo $i % 2; ?>"> <td><?php echo JHtml::_('grid.id', $i, $item->update_id); ?></td> <td> <span class="editlinktip hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('JGLOBAL_DESCRIPTION'), $item->description ?: JText::_('COM_INSTALLER_MSG_UPDATE_NODESC'), 0); ?>"> <?php echo $item->name; ?> </span> </td> <td class="center"> <?php echo $item->extension_id ? JText::_('COM_INSTALLER_MSG_UPDATE_UPDATE') : JText::_('COM_INSTALLER_NEW_INSTALL') ?> </td> <td><?php echo JText::_('COM_INSTALLER_TYPE_' . $item->type) ?></td> <td class="center"><?php echo $item->version ?></td> <td class="center"><?php echo @$item->folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?></td> <td class="center"><?php echo $client; ?></td> <td><?php echo $item->detailsurl ?> <?php if (isset($item->infourl)) : ?> <br /><a href="<?php echo $item->infourl;?>"><?php echo $item->infourl;?></a> <?php endif; ?> </td> </tr> <?php endforeach;?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <?php else : ?> <p class="nowarning"><?php echo JText::_('COM_INSTALLER_MSG_UPDATE_NOUPDATES'); ?></p> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> PKb��\�Z�k��!templates/hathor/html/modules.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * This is a file to add template specific chrome to module rendering. To use it you would * set the style attribute for the given module(s) include in your template to use the style * for each given modChrome function. * * eg. To render a module mod_test in the submenu style, you would use the following include: * <jdoc:include type="module" name="test" style="submenu" /> * * This gives template designers ultimate control over how modules are rendered. * * NOTICE: All chrome wrapping methods should be named: modChrome_{STYLE} and take the same * two arguments. */ /* * Module chrome for rendering the module in a submenu */ function modChrome_xhtmlid($module, &$params, &$attribs) { if ($module->content) { ?> <div id="<?php echo (int) $attribs['id'] ?>"> <?php echo $module->content; ?> <div class="clr"></div> </div> <?php } elseif ($attribs['id'] == 'submenu-box') { ?> <div id="no-submenu"></div> <?php } } ?> PKb��\ �@˥�:templates/hathor/html/com_joomlaupdate/default/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** @var JoomlaupdateViewDefault $this */ JHtml::_('jquery.framework'); JHtml::_('bootstrap.tooltip'); JHtml::_('formbehavior.chosen', 'select'); JHtml::script('com_joomlaupdate/default.js', false, true, false); JFactory::getDocument()->addScriptDeclaration(" jQuery(document).ready(function($) { $('#extraction_method').change(function(e){ extractionMethodHandler('#extraction_method', 'row_ftp'); }); $('#upload_method').change(function(e){ extractionMethodHandler('#upload_method', 'upload_ftp'); }); $('button.submit').on('click', function() { $('div.download_message').show(); }); });"); ?> <div id="joomlaupdate-wrapper"> <form enctype="multipart/form-data" action="index.php" method="post" id="adminForm" class="form-horizontal"> <?php echo JHtml::_('sliders.start', 'joomlaupdate-slider'); ?> <?php if ($this->showUploadAndUpdate) : ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_TAB_ONLINE'), 'online-update'); ?> <?php endif; ?> <?php if ($this->selfUpdate) : ?> <?php // If we have a self update notice to install it first! ?> <?php JFactory::getApplication()->enqueueMessage(JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALL_SELF_UPDATE_FIRST'), 'error'); ?> <?php echo $this->loadTemplate('updatemefirst'); ?> <?php else : ?> <?php if (!isset($this->updateInfo['object']->downloadurl->_data) && $this->updateInfo['installed'] < $this->updateInfo['latest']) : ?> <?php // If we have no download URL we can't reinstall or update ?> <?php echo $this->loadTemplate('nodownload'); ?> <?php elseif (!$this->updateInfo['hasUpdate']) : ?> <?php // If we have no update we can reinstall the core ?> <?php echo $this->loadTemplate('reinstall'); ?> <?php else : ?> <?php // Ok let's show the update template ?> <?php echo $this->loadTemplate('update'); ?> <?php endif; ?> <?php endif; ?> <input type="hidden" name="task" value="update.download" /> <input type="hidden" name="option" value="com_joomlaupdate" /> <?php echo JHtml::_('form.token'); ?> </form> <?php // Only Super Users have access to the Update & Install for obvious security reasons ?> <?php if ($this->showUploadAndUpdate) : ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_TAB_UPLOAD'), 'upload-update'); ?> <?php echo $this->loadTemplate('upload'); ?> <?php echo JHtml::_('sliders.end'); ?> <?php endif; ?> <div class="download_message" style="display: none"> <p></p> <p class="nowarning"> <?php echo JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_DOWNLOAD_IN_PROGRESS'); ?> </p> <div class="joomlaupdate_spinner"></div> </div> <div id="loading"></div> </div> PKb��\.�|� � 5templates/hathor/html/com_search/searches/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_search&view=searches'); ?>" method="post" name="adminForm" id="adminForm"> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_SEARCH_SEARCH_IN_PHRASE'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="title"> <?php echo JHtml::_('grid.sort', 'COM_SEARCH_HEADING_PHRASE', 'a.search_term', $listDirn, $listOrder); ?> </th> <th class="hits-col"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?> </th> <th class="width-15"> <?php echo JText::_('COM_SEARCH_HEADING_RESULTS'); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php echo $this->escape($item->search_term); ?> </td> <td class="center"> <?php echo (int) $item->hits; ?> </td> <td class="center"> <?php if ($this->state->get('show_results')) : ?> <?php echo (int) $item->returns; ?> <?php else: ?> <?php echo JText::_('COM_SEARCH_NO_RESULTS'); ?> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\BAj0zz$templates/hathor/html/pagination.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * This is a file to add template specific chrome to pagination rendering. * * pagination_list_footer * Input variable $list is an array with offsets: * $list[prefix] : string * $list[limit] : int * $list[limitstart] : int * $list[total] : int * $list[limitfield] : string * $list[pagescounter] : string * $list[pageslinks] : string * * pagination_list_render * Input variable $list is an array with offsets: * $list[all] * [data] : string * [active] : boolean * $list[start] * [data] : string * [active] : boolean * $list[previous] * [data] : string * [active] : boolean * $list[next] * [data] : string * [active] : boolean * $list[end] * [data] : string * [active] : boolean * $list[pages] * [{PAGE}][data] : string * [{PAGE}][active] : boolean * * pagination_item_active * Input variable $item is an object with fields: * $item->base : integer * $item->prefix : string * $item->link : string * $item->text : string * * pagination_item_inactive * Input variable $item is an object with fields: * $item->base : integer * $item->prefix : string * $item->link : string * $item->text : string * * This gives template designers ultimate control over how pagination is rendered. * * NOTE: If you override pagination_item_active OR pagination_item_inactive you MUST override them both */ function pagination_list_footer($list) { /** * Fix javascript jump menu * * Remove the onchange=Joomla.submitform from the select tag * Add in a button with onclick instead */ $fixlimit = $list['limitfield']; $fixlimit = preg_replace('/onchange="Joomla.submitform\(\);"/', '', $fixlimit); $html = '<div class="containerpg"><div class="pagination">'; $html .= '<div class="limit"><label for="limit">' . JText::_('JGLOBAL_DISPLAY_NUM') . ' </label>'; $html .= "\n" . $fixlimit; $html .= "\n" . '<button id="pagination-go" type="button" onclick="Joomla.submitform()">' . JText::_('JSUBMIT') . '</button></div>'; $html .= "\n" . $list['pageslinks']; $html .= "\n" . '<div class="limit">' . $list['pagescounter'] . '</div>'; $html .= "\n" . '<input type="hidden" name="' . $list['prefix'] . 'limitstart" value="' . $list['limitstart'] . '" />'; $html .= "\n" . '<div class="clr"></div></div></div>'; return $html; } function pagination_list_render($list) { $html = null; if ($list['start']['active']) { $html .= '<div class="button2-right"><div class="start">'. $list['start']['data']. '</div></div>'; } else { $html .= '<div class="button2-right off"><div class="start">'. $list['start']['data']. '</div></div>'; } if ($list['previous']['active']) { $html .= '<div class="button2-right"><div class="prev">'. $list['previous']['data']. '</div></div>'; } else { $html .= '<div class="button2-right off"><div class="prev">'. $list['previous']['data']. '</div></div>'; } $html .= '<div class="button2-left"><div class="page">'; foreach ($list['pages'] as $page) { $html .= $page['data']; } $html .= '</div></div>'; if ($list['next']['active']) { $html .= '<div class="button2-left"><div class="next">'. $list['next']['data']. '</div></div>'; } else { $html .= '<div class="button2-left off"><div class="next">'. $list['next']['data']. '</div></div>'; } if ($list['end']['active']) { $html .= '<div class="button2-left"><div class="end">'. $list['end']['data']. '</div></div>'; } else { $html .= '<div class="button2-left off"><div class="end">'. $list['end']['data']. '</div></div>'; } return $html; } function pagination_item_active(&$item) { if ($item->base > 0) { return '<a href="#" title="'.$item->text.'" onclick="document.adminForm.' . $item->prefix . 'limitstart.value=' .$item->base.'; Joomla.submitform();return false;">'.$item->text. '</a>'; } else { return '<a href="#" title="'.$item->text.'" onclick="document.adminForm.' . $item->prefix . 'limitstart.value=0; Joomla.submitform();return false;">'.$item->text. '</a>'; } } function pagination_item_inactive(&$item) { if ($item->active) { $class = 'class="active"'; } else { $class = ''; } return '<span ' . $class . '>' . $item->text . '</span>'; } PKb��\���m��/templates/hathor/html/mod_quickicon/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_quickicon * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $html = JHtml::_('icons.buttons', $buttons); ?> <?php if (!empty($html)): ?> <div class="cpanel clearfix"> <?php echo $html;?> </div> <?php endif;?> PKb��\�e` 7templates/hathor/html/com_newsfeeds/newsfeeds/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); $forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'cmd'); $function = JFactory::getApplication()->input->getCmd('function', 'jSelectNewsfeed'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_newsfeeds&view=newsfeeds&layout=modal&tmpl=component');?>" method="post" name="adminForm" id="adminForm"> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search fltlft"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" size="30" title="<?php echo JText::_('COM_NEWSFEEDS_SEARCH_IN_TITLE'); ?>" /> <button type="submit"> <?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"> <?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select fltrt"> <label class="selectlabel" for="filter_access"> <?php echo JText::_('JOPTION_SELECT_ACCESS'); ?> </label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS');?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access'));?> </select> <label class="selectlabel" for="filter_published"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED');?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.state'), true);?> </select> <label class="selectlabel" for="filter_category_id"> <?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?> </label> <select name="filter_category_id" id="filter_category_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_CATEGORY');?></option> <?php echo JHtml::_('select.options', JHtml::_('category.options', 'com_newsfeeds'), 'value', 'text', $this->state->get('filter.category_id'));?> </select> <?php if ($forcedLanguage) : ?> <input type="hidden" name="forcedLanguage" value="<?php echo $this->escape($forcedLanguage); ?>" /> <input type="hidden" name="filter_language" value="<?php echo $this->escape($this->state->get('filter.language')); ?>" /> <?php else : ?> <label class="selectlabel" for="filter_language"><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE');?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language'));?> </select> <?php endif; ?> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <table class="adminlist modal"> <thead> <tr> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.name', $listDirn, $listOrder); ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JCATEGORY', 'a.catid', $listDirn, $listOrder); ?> </th> <th class="title language-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'language', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <th> <a class="pointer" onclick="if (window.parent) window.parent.<?php echo $this->escape($function);?>('<?php echo $item->id; ?>', '<?php echo $this->escape(addslashes($item->name)); ?>');"> <?php echo $this->escape($item->name); ?></a> </th> <td class="center"> <?php echo $this->escape($item->access_level); ?> </td> <td class="center"> <?php echo $this->escape($item->category_title); ?> </td> <td class="center"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <input type="hidden" name="forcedLanguage" value="<?php echo $forcedLanguage; ?>" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\&�q�(�(9templates/hathor/html/com_newsfeeds/newsfeeds/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $app = JFactory::getApplication(); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_newsfeeds'); $saveOrder = $listOrder == 'a.ordering'; $assoc = JLanguageAssociations::isEnabled(); ?> <form action="<?php echo JRoute::_('index.php?option=com_newsfeeds&view=newsfeeds'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_NEWSFEEDS_SEARCH_IN_TITLE'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_published"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true); ?> </select> <label class="selectlabel" for="filter_category_id"> <?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?> </label> <select name="filter_category_id" id="filter_category_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('category.options', 'com_newsfeeds'), 'value', 'text', $this->state->get('filter.category_id')); ?> </select> <label class="selectlabel" for="filter_access"> <?php echo JText::_('JOPTION_SELECT_ACCESS'); ?> </label> <select name="filter_access" id="filter_access"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')); ?> </select> <label class="selectlabel" for="filter_language"> <?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?> </label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language')); ?> </select> <label class="selectlabel" for="filter_tag"> <?php echo JText::_('JOPTION_SELECT_TAG'); ?> </label> <select name="filter_tag" id="filter_tag"> <option value=""><?php echo JText::_('JOPTION_SELECT_TAG'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('tag.options', true, true), 'value', 'text', $this->state->get('filter.tag')); ?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.name', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="nowrap title category-col"> <?php echo JHtml::_('grid.sort', 'JCATEGORY', 'category_title', $listDirn, $listOrder); ?> </th> <th class="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'a.ordering', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'newsfeeds.saveorder'); ?> <?php endif; ?> </th> <th class="title access-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ACCESS', 'a.access', $listDirn, $listOrder); ?> </th> <th class="width-10"> <?php echo JHtml::_('grid.sort', 'COM_NEWSFEEDS_NUM_ARTICLES_HEADING', 'numarticles', $listDirn, $listOrder); ?> </th> <th class="width-5"> <?php echo JHtml::_('grid.sort', 'COM_NEWSFEEDS_CACHE_TIME_HEADING', 'a.cache_time', $listDirn, $listOrder); ?> </th> <?php if ($assoc) : ?> <th class="width-5"> <?php echo JHtml::_('grid.sort', 'COM_NEWSFEEDS_HEADING_ASSOCIATION', 'association', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th class="width-5"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'a.language', $listDirn, $listOrder); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_newsfeeds.category.' . $item->catid); $canEdit = $user->authorise('core.edit', 'com_newsfeeds.category.' . $item->catid); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id') || $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_newsfeeds.category.' . $item->catid) && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <th class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </th> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'newsfeeds.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_newsfeeds&task=newsfeed.edit&id='.(int) $item->id); ?>"> <?php echo $this->escape($item->name); ?></a> <?php else : ?> <?php echo $this->escape($item->name); ?> <?php endif; ?> <p class="smallsub"> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?></p> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'newsfeeds.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> </td> <td class="center"> <?php echo $this->escape($item->category_title); ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) :?> <?php if ($listDirn == 'asc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, $item->catid == @$this->items[$i - 1]->catid, 'newsfeeds.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, $item->catid == @$this->items[$i + 1]->catid, 'newsfeeds.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, $item->catid == @$this->items[$i - 1]->catid, 'newsfeeds.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, $item->catid == @$this->items[$i + 1]->catid, 'newsfeeds.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" size="5" value="<?php echo $item->ordering; ?>" <?php echo $disabled; ?> class="text-area-order" title="<?php echo $item->name; ?> order" /> <?php else : ?> <?php echo $item->ordering; ?> <?php endif; ?> </td> <td class="center"> <?php echo $this->escape($item->access_level); ?> </td> <td class="center"> <?php echo (int) $item->numarticles; ?> </td> <td class="center"> <?php echo (int) $item->cache_time; ?> </td> <?php if ($assoc) : ?> <td class="center"> <?php if ($item->association) : ?> <?php echo JHtml::_('newsfeed.association', $item->id); ?> <?php endif; ?> </td> <?php endif; ?> <td class="center"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php //Load the batch processing form if user is allowed ?> <?php if ($user->authorise('core.create', 'com_newsfeeds') && $user->authorise('core.edit', 'com_newsfeeds') && $user->authorise('core.edit.state', 'com_newsfeeds')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_NEWSFEEDS_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\� � 5templates/hathor/html/com_newsfeeds/newsfeed/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); $app = JFactory::getApplication(); $input = $app->input; $saveHistory = $this->state->get('params')->get('save_history', 0); $assoc = JLanguageAssociations::isEnabled(); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'newsfeed.cancel' || document.formvalidator.isValid(document.getElementById('newsfeed-form'))) { Joomla.submitform(task, document.getElementById('newsfeed-form')); } } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_newsfeeds&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="newsfeed-form" class="form-validate"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo empty($this->item->id) ? JText::_('COM_NEWSFEEDS_NEW_NEWSFEED') : JText::sprintf('COM_NEWSFEEDS_EDIT_NEWSFEED', $this->item->id); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('name'); ?> <?php echo $this->form->getInput('name'); ?></li> <li><?php echo $this->form->getLabel('alias'); ?> <?php echo $this->form->getInput('alias'); ?></li> <li><?php echo $this->form->getLabel('link'); ?> <?php echo $this->form->getInput('link'); ?></li> <li><?php echo $this->form->getLabel('catid'); ?> <?php echo $this->form->getInput('catid'); ?></li> <li><?php echo $this->form->getLabel('published'); ?> <?php echo $this->form->getInput('published'); ?></li> <li><?php echo $this->form->getLabel('access'); ?> <?php echo $this->form->getInput('access'); ?></li> <li><?php echo $this->form->getLabel('ordering'); ?> <?php echo $this->form->getInput('ordering'); ?></li> <li><?php echo $this->form->getLabel('language'); ?> <?php echo $this->form->getInput('language'); ?></li> <!-- Tag field --> <li><?php echo $this->form->getLabel('tags'); ?> <div class="is-tagbox"> <?php echo $this->form->getInput('tags'); ?> </div> </li> <?php if ($saveHistory) : ?> <li><?php echo $this->form->getLabel('version_note'); ?> <?php echo $this->form->getInput('version_note'); ?></li> <?php endif; ?> <li><?php echo $this->form->getLabel('id'); ?> <?php echo $this->form->getInput('id'); ?></li> </ul> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'newsfeed-sliders-' . $this->item->id, array('useCookie' => 1)); ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_PUBLISHING'), 'publishing-details'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_PUBLISHING'); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('created_by'); ?> <?php echo $this->form->getInput('created_by'); ?></li> <li><?php echo $this->form->getLabel('created_by_alias'); ?> <?php echo $this->form->getInput('created_by_alias'); ?></li> <li><?php echo $this->form->getLabel('created'); ?> <?php echo $this->form->getInput('created'); ?></li> <li><?php echo $this->form->getLabel('publish_up'); ?> <?php echo $this->form->getInput('publish_up'); ?></li> <li><?php echo $this->form->getLabel('publish_down'); ?> <?php echo $this->form->getInput('publish_down'); ?></li> <?php if ($this->item->modified_by) : ?> <li><?php echo $this->form->getLabel('modified_by'); ?> <?php echo $this->form->getInput('modified_by'); ?></li> <li><?php echo $this->form->getLabel('modified'); ?> <?php echo $this->form->getInput('modified'); ?></li> <?php endif; ?> <li><?php echo $this->form->getLabel('numarticles'); ?> <?php echo $this->form->getInput('numarticles'); ?></li> <li><?php echo $this->form->getLabel('cache_time'); ?> <?php echo $this->form->getInput('cache_time'); ?></li> <li><?php echo $this->form->getLabel('rtl'); ?> <?php echo $this->form->getInput('rtl'); ?></li> </ul> </fieldset> <?php echo $this->loadTemplate('params'); ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'), 'meta-options'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'); ?></legend> <?php echo $this->loadTemplate('metadata'); ?> </fieldset> <?php if ($assoc) : ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_ASSOCIATIONS'), '-options');?> <?php echo $this->loadTemplate('associations'); ?> <?php endif; ?> <?php echo JHtml::_('sliders.end'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> <div class="clr"></div> </form> PKb��\7����<templates/hathor/html/com_newsfeeds/newsfeed/edit_params.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : echo JHtml::_('sliders.panel', JText::_($fieldSet->label), $name.'-params'); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">'.$this->escape(JText::_($fieldSet->description)).'</p>'; endif; ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_($fieldSet->label); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php endforeach; ?> PKb��\���)�)5templates/hathor/html/com_banners/banners/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_banners'); $saveOrder = $listOrder == 'ordering'; ?> <form action="<?php echo JRoute::_('index.php?option=com_banners&view=banners'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_BANNERS_SEARCH_IN_TITLE'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_published"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_published" id="filter_published"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED');?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true);?> </select> <label class="selectlabel" for="filter_client_id"> <?php echo JText::_('COM_BANNERS_SELECT_CLIENT'); ?> </label> <select name="filter_client_id" id="filter_client_id"> <option value=""><?php echo JText::_('COM_BANNERS_SELECT_CLIENT');?></option> <?php echo JHtml::_('select.options', BannersHelper::getClientOptions(), 'value', 'text', $this->state->get('filter.client_id'));?> </select> <label class="selectlabel" for="filter_category_id"> <?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?> </label> <select name="filter_category_id" id="filter_category_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_CATEGORY');?></option> <?php echo JHtml::_('select.options', JHtml::_('category.options', 'com_banners'), 'value', 'text', $this->state->get('filter.category_id'));?> </select> <label class="selectlabel" for="filter_language"> <?php echo JText::_('JOPTION_SELECT_LANGUAGE'); ?> </label> <select name="filter_language" id="filter_language"> <option value=""><?php echo JText::_('JOPTION_SELECT_LANGUAGE');?></option> <?php echo JHtml::_('select.options', JHtml::_('contentlanguage.existing', true, true), 'value', 'text', $this->state->get('filter.language'));?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th class="title"> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_NAME', 'name', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'state', $listDirn, $listOrder); ?> </th> <th class="nowrap width-5"> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_STICKY', 'sticky', $listDirn, $listOrder); ?> </th> <th class="nowrap width-10"> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_CLIENT', 'client_name', $listDirn, $listOrder); ?> </th> <th class="nowrap title category-col"> <?php echo JHtml::_('grid.sort', 'JCATEGORY', 'category_title', $listDirn, $listOrder); ?> </th> <th class="nowrap ordering-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'ordering', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) : ?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'banners.saveorder'); ?> <?php endif;?> </th> <th class="nowrap width-5"> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_IMPRESSIONS', 'impmade', $listDirn, $listOrder); ?> </th> <th class="nowrap width-10"> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_CLICKS', 'clicks', $listDirn, $listOrder); ?> </th> <th class="nowrap width-5"> <?php echo JText::_('COM_BANNERS_HEADING_METAKEYWORDS'); ?> </th> <th class="width-10"> <?php echo JText::_('COM_BANNERS_HEADING_PURCHASETYPE'); ?> </th> <th class="language-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_LANGUAGE', 'a.language', $this->state->get('list.direction'), $this->state->get('list.ordering')); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'ordering'); $item->cat_link = JRoute::_('index.php?option=com_categories&extension=com_banners&task=edit&type=other&cid[]=' . $item->catid); $canCreate = $user->authorise('core.create', 'com_banners.category.' . $item->catid); $canEdit = $user->authorise('core.edit', 'com_banners.category.' . $item->catid); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_banners.category.' . $item->catid) && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'banners.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_banners&task=banner.edit&id='.(int) $item->id); ?>"> <?php echo $this->escape($item->name); ?></a> <?php else : ?> <?php echo $this->escape($item->name); ?> <?php endif; ?> <p class="smallsub"> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias));?></p> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'banners.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> </td> <td class="center"> <?php echo JHtml::_('banner.pinned', $item->sticky, $i, $canChange);?> </td> <td class="center"> <?php echo $item->client_name;?> </td> <td class="center"> <?php echo $this->escape($item->category_title); ?> </td> <td class="order"> <?php if ($canChange) : ?> <?php if ($saveOrder) : ?> <?php if ($listDirn == 'asc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, @$this->items[$i - 1]->catid == $item->catid, 'banners.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, @$this->items[$i + 1]->catid == $item->catid, 'banners.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?> <span><?php echo $this->pagination->orderUpIcon($i, @$this->items[$i - 1]->catid == $item->catid, 'banners.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> <span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, @$this->items[$i + 1]->catid == $item->catid, 'banners.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> <input type="text" name="order[]" value="<?php echo $item->ordering;?>" <?php echo $disabled; ?> class="text-area-order" title="<?php echo $item->name; ?> order" /> <?php else : ?> <?php echo $item->ordering; ?> <?php endif; ?> </td> <td class="center"> <?php echo JText::sprintf('COM_BANNERS_IMPRESSIONS', $item->impmade, $item->imptotal ?: JText::_('COM_BANNERS_UNLIMITED'));?> </td> <td class="center"> <?php echo $item->clicks;?> - <?php echo sprintf('%.2f%%', $item->impmade ? 100 * $item->clicks / $item->impmade : 0);?> </td> <td> <?php echo $item->metakey; ?> </td> <td class="center"> <?php if ($item->purchase_type < 0):?> <?php echo JText::sprintf('COM_BANNERS_DEFAULT', ($item->client_purchase_type > 0) ? JText::_('COM_BANNERS_FIELD_VALUE_'.$item->client_purchase_type) : JText::_('COM_BANNERS_FIELD_VALUE_'.$this->state->params->get('purchase_type')));?> <?php else:?> <?php echo JText::_('COM_BANNERS_FIELD_VALUE_'.$item->purchase_type);?> <?php endif;?> </td> <td class="center"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="center"> <?php echo $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <div class="clr"> </div> <?php //Load the batch processing form. ?> <?php if ($user->authorise('core.create', 'com_banners') && $user->authorise('core.edit', 'com_banners') && $user->authorise('core.edit.state', 'com_banners')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_BANNERS_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�Rx�4templates/hathor/html/com_banners/tracks/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.multiselect'); JHtml::_('behavior.modal', 'a.modal'); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form id="adminForm" name="adminForm" action="<?php echo JRoute::_('index.php?option=com_banners&view=tracks'); ?>" method="post"> <?php if (!empty( $this->sidebar)) : ?> <div class="span2" id="j-sidebar-container"> <?php echo $this->sidebar; ?> </div> <div class="span10" id="j-main-container"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('COM_BANNERS_BEGIN_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-hide-lbl" for="filter_begin"><?php echo JText::_('COM_BANNERS_BEGIN_LABEL'); ?></label> <?php echo JHtml::_('calendar', $this->state->get('filter.begin'), 'filter_begin', 'filter_begin', '%Y-%m-%d', array('size' => 10));?> <label class="filter-hide-lbl" for="filter_end"><?php echo JText::_('COM_BANNERS_END_LABEL'); ?></label> <?php echo JHtml::_('calendar', $this->state->get('filter.end'), 'filter_end', 'filter_end', '%Y-%m-%d', array('size' => 10));?> </div> <div class="filter-select"> <label class="selectlabel" for="filter_client_id"> <?php echo JText::_('COM_BANNERS_SELECT_CLIENT'); ?> </label> <select id="filter_client_id" name="filter_client_id"> <option value=""><?php echo JText::_('COM_BANNERS_SELECT_CLIENT');?></option> <?php echo JHtml::_('select.options', BannersHelper::getClientOptions(), 'value', 'text', $this->state->get('filter.client_id'));?> </select> <label class="selectlabel" for="filter_category_id"> <?php echo JText::_('JOPTION_SELECT_CATEGORY'); ?> </label> <?php $category = $this->state->get('filter.category_id');?> <select id="filter_category_id" name="filter_category_id"> <option value=""><?php echo JText::_('JOPTION_SELECT_CATEGORY');?></option> <?php echo JHtml::_('select.options', JHtml::_('category.options', 'com_banners'), 'value', 'text', $category);?> </select> <label class="selectlabel" for="filter_type"> <?php echo JText::_('COM_BANNERS_SELECT_TYPE'); ?> </label> <select id="filter_type" name="filter_type"> <?php echo JHtml::_('select.options', array(JHtml::_('select.option', '0', JText::_('COM_BANNERS_SELECT_TYPE')), JHtml::_('select.option', 1, JText::_('COM_BANNERS_IMPRESSION')), JHtml::_('select.option', 2, JText::_('COM_BANNERS_CLICK'))), 'value', 'text', $this->state->get('filter.type'));?> </select> <button id="filter-go" type="submit"><?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="title"> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_NAME', 'name', $listDirn, $listOrder); ?> </th> <th class="nowrap width-20"> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_CLIENT', 'client_name', $listDirn, $listOrder); ?> </th> <th class="width-20"> <?php echo JHtml::_('grid.sort', 'JCATEGORY', 'category_title', $listDirn, $listOrder); ?> </th> <th class="nowrap width-10"> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_TYPE', 'track_type', $listDirn, $listOrder); ?> </th> <th class="nowrap width-10"> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_COUNT', 'count', $listDirn, $listOrder); ?> </th> <th class="nowrap width-10"> <?php echo JHtml::_('grid.sort', 'JDATE', 'track_date', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) :?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php echo $item->banner_name;?> </td> <td> <?php echo $item->client_name;?> </td> <td> <?php echo $item->category_title;?> </td> <td> <?php echo $item->track_type == 1 ? JText::_('COM_BANNERS_IMPRESSION'): JText::_('COM_BANNERS_CLICK');?> </td> <td> <?php echo $item->count;?> </td> <td> <?php echo JHtml::_('date', $item->track_date, JText::_('DATE_FORMAT_LC5'));?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php // Load the export form ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'downloadModal', array( 'title' => JText::_('COM_BANNERS_TRACKS_DOWNLOAD'), 'url' => JRoute::_('index.php?option=com_banners&view=download&tmpl=component'), 'width' => '100%', 'height' => '300px', 'footer' => '<button type="button" class="btn" data-dismiss="modal"' . ' onclick="jQuery(\'#downloadModal iframe\').contents().find(\'#closeBtn\').click();">' . JText::_('COM_BANNERS_CANCEL') . '</button>' . '<button type="button" class="btn btn-success"' . ' onclick="jQuery(\'#downloadModal iframe\').contents().find(\'#exportBtn\').click();">' . JText::_('COM_BANNERS_TRACKS_EXPORT') . '</button>', ) ); ?> <?php echo $this->pagination->getListFooter(); ?> <input name="task" type="hidden" value="" /> <input name="boxchecked" type="hidden" value="0" /> <input name="filter_order" type="hidden" value="<?php echo $listOrder; ?>" /> <input name="filter_order_Dir" type="hidden" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�K��5templates/hathor/html/com_banners/clients/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.multiselect'); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_banners&view=clients'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <fieldset id="filter-bar"> <legend class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></legend> <div class="filter-search"> <label class="filter-search-lbl" for="filter_search"><?php echo JText::_('JSEARCH_FILTER_LABEL'); ?></label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" title="<?php echo JText::_('COM_BANNERS_SEARCH_IN_TITLE'); ?>" /> <button type="submit"><?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="filter-select"> <label class="selectlabel" for="filter_state"> <?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?> </label> <select name="filter_state" id="filter_state"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED');?></option> <?php echo JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.state'), true);?> </select> <button type="submit" id="filter-go"> <?php echo JText::_('JSUBMIT'); ?></button> </div> </fieldset> <div class="clr"> </div> <table class="adminlist"> <thead> <tr> <th class="checkmark-col"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_CLIENT', 'name', $listDirn, $listOrder); ?> </th> <th class="width-30"> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_CONTACT', 'contact', $listDirn, $listOrder); ?> </th> <th class="nowrap state-col"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'state', $listDirn, $listOrder); ?> </th> <th class="width-5"> <?php echo JHtml::_('grid.sort', 'COM_BANNERS_HEADING_ACTIVE', 'nbanners', $listDirn, $listOrder); ?> </th> <th class="nowrap width-5"> <?php echo JText::_('COM_BANNERS_HEADING_METAKEYWORDS'); ?> </th> <th class="width-10"> <?php echo JText::_('COM_BANNERS_HEADING_PURCHASETYPE'); ?> </th> <th class="nowrap id-col"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'ordering'); $canCreate = $user->authorise('core.create', 'com_banners'); $canEdit = $user->authorise('core.edit', 'com_banners'); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id') || $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_banners') && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'clients.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_banners&task=client.edit&id='.(int) $item->id); ?>"> <?php echo $this->escape($item->name); ?></a> <?php else : ?> <?php echo $this->escape($item->name); ?> <?php endif; ?> </td> <td class="center"> <?php echo $item->contact;?> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'clients.', $canChange);?> </td> <td class="center"> <?php echo $item->nbanners; ?> </td> <td> <?php echo $item->metakey; ?> </td> <td class="center"> <?php if ($item->purchase_type < 0):?> <?php echo JText::sprintf('COM_BANNERS_DEFAULT', JText::_('COM_BANNERS_FIELD_VALUE_'.$this->state->params->get('purchase_type')));?> <?php else:?> <?php echo JText::_('COM_BANNERS_FIELD_VALUE_'.$item->purchase_type);?> <?php endif;?> </td> <td class="center"> <?php echo $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\&#��DD1templates/hathor/html/com_banners/banner/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('jquery.framework'); JHtml::_('behavior.formvalidator'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'banner.cancel' || document.formvalidator.isValid(document.getElementById('banner-form'))) { Joomla.submitform(task, document.getElementById('banner-form')); } } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_banners&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="banner-form" class="form-validate"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo empty($this->item->id) ? JText::_('COM_BANNERS_NEW_BANNER') : JText::sprintf('COM_BANNERS_BANNER_DETAILS', $this->item->id); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('name'); ?> <?php echo $this->form->getInput('name'); ?></li> <li><?php echo $this->form->getLabel('alias'); ?> <?php echo $this->form->getInput('alias'); ?></li> <li><?php echo $this->form->getLabel('access'); ?> <?php echo $this->form->getInput('access'); ?></li> <li><?php echo $this->form->getLabel('catid'); ?> <?php echo $this->form->getInput('catid'); ?></li> <li><?php echo $this->form->getLabel('state'); ?> <?php echo $this->form->getInput('state'); ?></li> <li><?php echo $this->form->getLabel('type'); ?> <?php echo $this->form->getInput('type'); ?></li> </ul> <ul id="image"> <?php foreach ($this->form->getFieldset('image') as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> <ul> <li><div id="custom"> <?php echo $this->form->getLabel('custombannercode'); ?> <?php echo $this->form->getInput('custombannercode'); ?> </div> </li> <li><div id="url"> <?php echo $this->form->getLabel('clickurl'); ?> <?php echo $this->form->getInput('clickurl'); ?> </div> </li> <li> <?php echo $this->form->getLabel('description'); ?> <div class="clr"></div> <?php echo $this->form->getInput('description'); ?> <div class="clr"></div> </li> <li><?php echo $this->form->getLabel('language'); ?> <?php echo $this->form->getInput('language'); ?></li> <li><?php echo $this->form->getLabel('id'); ?> <?php echo $this->form->getInput('id'); ?></li> </ul> <div class="clr"> </div> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'banner-sliders-' . $this->item->id, array('useCookie' => 1)); ?> <?php echo JHtml::_('sliders.panel', JText::_('COM_BANNERS_GROUP_LABEL_PUBLISHING_DETAILS'), 'publishing-details'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_PUBLISHING'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('publish') as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php echo JHtml::_('sliders.panel', JText::_('COM_BANNERS_GROUP_LABEL_BANNER_DETAILS'), 'otherparams'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('COM_BANNERS_BANNER_DETAILS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('otherparams') as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> <?php foreach ($this->form->getFieldset('bannerdetails') as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'), 'metadata'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('metadata') as $field) : ?> <li><?php echo $field->label; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php echo JHtml::_('sliders.end'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> <div class="clr"></div> </form> PKb��\�}�#v v 1templates/hathor/html/com_banners/client/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.formvalidator'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'client.cancel' || document.formvalidator.isValid(document.getElementById('client-form'))) { Joomla.submitform(task, document.getElementById('client-form')); } } "); ?> <form action="<?php echo JRoute::_('index.php?option=com_banners&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="client-form" class="form-validate"> <div class="col main-section"> <fieldset class="adminform"> <legend><?php echo empty($this->item->id) ? JText::_('COM_BANNERS_NEW_CLIENT') : JText::sprintf('COM_BANNERS_EDIT_CLIENT', $this->item->id); ?></legend> <ul class="adminformlist"> <li><?php echo $this->form->getLabel('name'); ?> <?php echo $this->form->getInput('name'); ?></li> <li><?php echo $this->form->getLabel('contact'); ?> <?php echo $this->form->getInput('contact'); ?></li> <li><?php echo $this->form->getLabel('email'); ?> <?php echo $this->form->getInput('email'); ?></li> <?php if ($this->canDo->get('core.edit.state')) : ?> <li><?php echo $this->form->getLabel('state'); ?> <?php echo $this->form->getInput('state'); ?></li> <?php endif; ?> <li><?php echo $this->form->getLabel('purchase_type'); ?> <?php echo $this->form->getInput('purchase_type'); ?></li> <li><?php echo $this->form->getLabel('track_impressions'); ?> <?php echo $this->form->getInput('track_impressions'); ?></li> <li><?php echo $this->form->getLabel('track_clicks'); ?> <?php echo $this->form->getInput('track_clicks'); ?></li> <li><?php echo $this->form->getLabel('id'); ?> <?php echo $this->form->getInput('id'); ?></li> </ul> </fieldset> </div> <div class="col options-section"> <?php echo JHtml::_('sliders.start', 'banner-client-sliders-' . $this->item->id, array('useCookie' => 1)); ?> <?php echo JHtml::_('sliders.panel', JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'), 'metadata'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('metadata') as $field) : ?> <li> <?php if (!$field->hidden) : ?> <?php echo $field->label; ?> <?php endif; ?> <?php echo $field->input; ?> </li> <?php endforeach; ?> </ul> </fieldset> <?php echo JHtml::_('sliders.panel', JText::_('COM_BANNERS_EXTRA'), 'extra'); ?> <fieldset class="panelform"> <legend class="element-invisible"><?php echo JText::_('COM_BANNERS_EXTRA'); ?></legend> <ul class="adminformlist"> <?php foreach ($this->form->getFieldset('extra') as $field) : ?> <li><?php if (!$field->hidden) : ?> <?php echo $field->label; ?> <?php endif; ?> <?php echo $field->input; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php echo JHtml::_('sliders.end'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> <div class="clr"></div> </form> PKb��\���{��0templates/hathor/css/colour_highcontrast_rtl.cssnu�[���@charset "UTF-8"; /** * @package Joomla.Administrator * @subpackage templates.hathor * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 1.6 * * RTL CSS file for the color standard */ /** * Overall Styles */ #header { background: #ffffff url(../images/j_logo.png) no-repeat top right; } #element-box { border-left: 1px solid #1b3f7c; border-right: 1px solid #1b3f7c; } /** * Various Styles */ div.checkin-tick { background: url(../images/admin/tick.png) 20px 50% no-repeat; } /** * Subheader, toolbar, page title */ div.toolbar-box { border-left: 1px solid #10254a; border-right: 1px solid #10254a; } div.toolbar-list li.divider { border-left:1px dotted #1b3f7c; border-right:none; } div.toolbar-list a:hover { border-right: 1px solid #000000; border-left: 1px solid #1b3f7c; } /** * Pane Slider pane Toggler styles */ .pane-toggler span { background: transparent url(../images/j_arrow_left.png) right 50% no-repeat; } .pane-toggler-down span { background: transparent url(../images/j_arrow_down.png) right 50% no-repeat; } /** * Cpanel Settings */ #cpanel div.icon a:hover, #cpanel div.icon a:focus { border-right: 1px solid #000000; border-left: 1px solid #1b3f7c; } fieldset#filter-bar { border-left: none; border-right: none; } /** * Admintable Styles */ table.admintable td.key,table.admintable td.paramlist_key { border-left: 1px solid #10254a; border-right: none; } table.paramlist td.paramlist_description { border-left: 1px solid #10254a; border-right: none; } /** * Admin Form Styles */ table.adminform tr { border-left: 1px solid #1b3f7c; border-right: none; } /** * Adminlist Table layout */ table.adminlist.modal { border-right: 1px solid #1b3f7c; border-left: 1px solid #1b3f7c; } /* Table row styles */ table.adminlist tbody tr td, table.adminlist tbody tr th { border-left: 1px solid #1b3f7c; border-right: none; } table.adminlist tbody tr td:last-child { border-left: none; } /** * Saving order icon styling in admin tables */ a.saveorder { background: url(../images/admin/filesave.png) no-repeat; } a.saveorder.inactive { background-position: 0 -16px; } /** * Button styling */ /* Button 1 Type */ /* Use this if you add images to the buttons such as directional arrows */ .button1 a { /* add padding if you are using the directional images */ /* padding: 0 6px 0 30px; */ } /* Button 2 Type */ .button2-right .prev { background-image: url(../images/j_button2_prev.png); background-position: right center; } .button2-right.off .prev { background: url(../images/j_button2_prev_off.png) no-repeat; } .button2-right .start { background-image: url(../images/j_button2_first.png); background-position: right center; } .button2-left .next { background-image: url(../images/j_button2_next.png); background-position: left center; } .button2-left.off .next { /* @TODO check the x position */ background: url(../images/j_button2_next_off.png) 100% 0 no-repeat; } .button2-left .end { background-image: url(../images/j_arrow_left.png); background-position: left center; } .button2-left.off .end { /* @TODO check the x position */ background: url(../images/j_button2_last_off.png) 100% 0 no-repeat; } .button2-left .image { background: url(../images/j_button2_image.png) 100% 0 no-repeat; } .button2-left .readmore { background: url(../images/j_button2_readmore.png) 100% 0 no-repeat; } .button2-left .pagebreak { background: url(../images/j_button2_pagebreak.png) 100% 0 no-repeat; } /** * Tooltips */ /** * System Standard Messages */ #system-message dd.message ul { background: #10254a url(../images/notice-info.png) 99.5% center no-repeat; } /** * System Error Messages */ #system-message dd.error ul { background: #1c4181 url(../images/notice-alert.png) 99.5% top no-repeat; } /** * System Notice Messages */ #system-message dd.notice ul { background: #10254a url(../images/notice-note.png) 99%.5 top no-repeat; } /** * JGrid styles */ /** * Menu Icons * These icons are used on the Administrator menu * The classes are constructed dynamically when the menu is generated */ /** * Toolbar icons * These icons are used for the toolbar buttons * The classes are constructed dynamically when the toolbar is created */ /** * Quick Icons * Also knows as Header Icons * These are used for the Quick Icons on the Control Panel * The same classes are also assigned the Component Title */ /** * General styles */ .helpFrame { border-right: 0 solid #1b3f7c; border-left: none; border-top: none; } /* -- ACL STYLES relocated from com_users/media/grid.css ----------- */ /* -- ACL PANEL STYLES ----------- */ /* All Tabs */ table.aclsummary-table td.col2, table.aclsummary-table th.col2, table.aclsummary-table td.col3, table.aclsummary-table th.col3, table.aclsummary-table td.col4, table.aclsummary-table th.col4, table.aclsummary-table td.col5, table.aclsummary-table th.col5, table.aclmodify-table td.col2, table.aclmodify-table th.col2 { border-right: 1px solid #cbcbcb; border-left: none; } /* Icons */ ul.acllegend li.acl-allowed { background:url(../images/admin/icon-16-allow.png) no-repeat right; } ul.acllegend li.acl-denied { background:url(../images/admin/icon-16-deny.png) no-repeat right; } table#acl-config th.acl-groups { border-left: 1px solid #c7c8b2; } table#acl-config th.acl-groups { text-align: right; } .acl-action { margin: auto 0; } /* Icons */ span.icon-16-unset { background: url(../images/admin/icon-16-denyinactive.png) no-repeat right; } span.icon-16-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat right; } span.icon-16-denied { background: url(../images/admin/icon-16-deny.png) no-repeat right; } span.icon-16-locked { background: url(../images/admin/checked_out.png) no-repeat right; } /** * Mod_rewrite Warning */ #jform_sef_rewrite-lbl { background: url(../images/admin/icon-16-notice-note.png) left top no-repeat; } /** * Modal S-Box overrides */ #sbox-window { text-align:right; } /* * * Permission Rules */ #permissions-sliders ul#rules table.group-rules td { border-left:solid 1px #1b3f7c; border-right:solid 0 #1b3f7c; } #permissions-sliders ul#rules table.group-rules th { border-left:solid 1px #1b3f7c; border-right:solid 0 #1b3f7c; } /** * Menu Styling */ #menu ul li.node { background-image: url(../images/j_arrow_left.png); background-repeat: no-repeat; background-position: left 50%; } #menu a { background-position: right 50%; } #menu li { border-left: 1px solid #000000; } #menu li a:hover, #menu li a:active, #menu li a:focus { border-left: 1px solid #1b3f7c; border-right: 1px solid #000000; } #menu li.disabled a:hover,#menu li.disabled a:focus,#menu li.disabled a { border-right: 1px solid #10254a; border-left: 1px solid #10254a; } #menu li:hover ul,#menu li.sfhover ul { /* lists nested under hovered list items */ border-right: 1px solid #122b56; border-left: 1px solid #122b56; } #menu li li:hover ul,#menu li li.sfhover ul { border-right: 1px solid #122b56; border-left: 1px solid #122b56; } /** * Styling parents */ /* 1 level - sfhover */ #menu li.sfhover a { border-left: 1px solid #1b3f7c; border-right: 1px solid #000000; } /* 2 level - hover */ #menu li.sfhover li.sfhover a,#menu li li a:focus { border-left: 1px solid #1b3f7c; border-right: 1px solid #000000; } /* 3 level - hover */ #menu li.sfhover li.sfhover li.sfhover a,#menu li li li a:focus { border-left: 1px solid #1b3f7c; border-right: 1px solid #000000; } /* bring back the focus elements into view */ #menu li li a:focus { border-left: 1px solid #1b3f7c; border-right: 1px solid #000000; } #menu li li li a:focus { border-left: 1px solid #1b3f7c; border-right: 1px solid #000000; } /* Installer Database */ #installer-database p.warning { background-position: center right; } #installer-database p.nowarning { background-position: center right; } PKb��\�Ar�\\!templates/hathor/css/template.cssnu�[���.clearfix { *zoom: 1; } .clearfix:before, .clearfix:after { display: table; content: ""; line-height: 0; } .clearfix:after { clear: both; } .hide-text { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .input-block-level { display: block; width: 100%; min-height: 25px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .fade { opacity: 0; -webkit-transition: opacity .15s linear; -moz-transition: opacity .15s linear; -o-transition: opacity .15s linear; transition: opacity .15s linear; } .fade.in { opacity: 1; } .collapse { position: relative; height: 0; overflow: hidden; -webkit-transition: height .35s ease; -moz-transition: height .35s ease; -o-transition: height .35s ease; transition: height .35s ease; } .collapse.in { height: auto; } .modal-open .dropdown-menu { z-index: 2050; } .modal-open .dropdown.open { *z-index: 2050; } .modal-open .popover { z-index: 2110; } .modal-open .tooltip { z-index: 2080; } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; background-color: #000000; } .modal-backdrop.fade { opacity: 0; } .modal-backdrop, .modal-backdrop.fade.in { opacity: 0.8; filter: alpha(opacity=80); } div.modal { position: fixed; top: 50%; left: 50%; z-index: 1050; overflow: auto; width: 80%; margin: -250px 0 0 -40%; background-color: #ffffff; border: 1px solid #999; border: 1px solid rgba(0,0,0,0.3); *border: 1px solid #999; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3); -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3); box-shadow: 0 3px 7px rgba(0,0,0,0.3); -webkit-background-clip: padding-box; -moz-background-clip: padding-box; background-clip: padding-box; } div.modal.fade { -webkit-transition: opacity .3s linear, top .3s ease-out; -moz-transition: opacity .3s linear, top .3s ease-out; -o-transition: opacity .3s linear, top .3s ease-out; transition: opacity .3s linear, top .3s ease-out; top: -25%; } div.modal.fade.in { top: 50%; } .modal-header { padding: 9px 15px; border-bottom: 1px solid #eee; } .modal-header .close { float: right; margin-top: 2px; } .modal-body { overflow-y: auto; max-height: 400px; padding: 15px; } .modal-form { margin-bottom: 0; } .modal-footer { padding: 14px 15px 15px; margin-bottom: 0; text-align: right; background-color: #f5f5f5; border-top: 1px solid #ddd; -webkit-border-radius: 0 0 6px 6px; -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; -webkit-box-shadow: inset 0 1px 0 #ffffff; -moz-box-shadow: inset 0 1px 0 #ffffff; box-shadow: inset 0 1px 0 #ffffff; *zoom: 1; } .modal-footer:before, .modal-footer:after { display: table; content: ""; line-height: 0; } .modal-footer:after { clear: both; } .modal-footer .btn + .btn { margin-left: 5px; margin-bottom: 0; } .modal-footer .btn-group .btn + .btn { margin-left: -1px; } body.modal-open { overflow: hidden; -ms-overflow-style: none; } .modal-buttons { padding: 15px 0px; } .modal-buttons button { font-size: 1.2em; line-height: 1.6em; } .popover { position: absolute; top: 0; left: 0; z-index: 1060; display: none; max-width: 276px; padding: 1px; text-align: left; background-color: #ffffff; -webkit-background-clip: padding-box; -moz-background-clip: padding; background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,0.2); -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2); -moz-box-shadow: 0 5px 10px rgba(0,0,0,0.2); box-shadow: 0 5px 10px rgba(0,0,0,0.2); white-space: normal; } .popover.top { margin-top: -10px; } .popover.right { margin-left: 10px; } .popover.bottom { margin-top: 10px; } .popover.left { margin-left: -10px; } .popover-title { margin: 0; padding: 8px 14px; font-size: 14px; font-weight: normal; line-height: 18px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .popover-title:empty { display: none; } .popover-content { padding: 9px 14px; } .popover .arrow, .popover .arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; } .popover .arrow { border-width: 11px; } .popover .arrow:after { border-width: 10px; content: ""; } .popover.top .arrow { left: 50%; margin-left: -11px; border-bottom-width: 0; border-top-color: #999; border-top-color: rgba(0,0,0,0.25); bottom: -11px; } .popover.top .arrow:after { bottom: 1px; margin-left: -10px; border-bottom-width: 0; border-top-color: #ffffff; } .popover.right .arrow { top: 50%; left: -11px; margin-top: -11px; border-left-width: 0; border-right-color: #999; border-right-color: rgba(0,0,0,0.25); } .popover.right .arrow:after { left: 1px; bottom: -10px; border-left-width: 0; border-right-color: #ffffff; } .popover.bottom .arrow { left: 50%; margin-left: -11px; border-top-width: 0; border-bottom-color: #999; border-bottom-color: rgba(0,0,0,0.25); top: -11px; } .popover.bottom .arrow:after { top: 1px; margin-left: -10px; border-top-width: 0; border-bottom-color: #ffffff; } .popover.left .arrow { top: 50%; right: -11px; margin-top: -11px; border-right-width: 0; border-left-color: #999; border-left-color: rgba(0,0,0,0.25); } .popover.left .arrow:after { right: 1px; border-right-width: 0; border-left-color: #ffffff; bottom: -10px; } @font-face { font-family: 'IcoMoon'; src: url('../../../../media/jui/fonts/IcoMoon.eot'); src: url('../../../../media/jui/fonts/IcoMoon.eot?#iefix') format('embedded-opentype'), url('../../../../media/jui/fonts/IcoMoon.woff') format('woff'), url('../../../../media/jui/fonts/IcoMoon.ttf') format('truetype'), url('../../../../media/jui/fonts/IcoMoon.svg#IcoMoon') format('svg'); font-weight: normal; font-style: normal; } [data-icon]:before { font-family: 'IcoMoon'; content: attr(data-icon); speak: none; } [class^="icon-"], [class*=" icon-"] { display: inline-block; width: 14px; height: 14px; margin-right: .25em; line-height: 14px; } [class^="icon-"]:before, [class*=" icon-"]:before { font-family: 'IcoMoon'; font-style: normal; speak: none; } [class^="icon-"].disabled, [class*=" icon-"].disabled { font-weight: normal; } .icon-joomla:before { content: "\e200"; } .icon-chevron-up:before, .icon-uparrow:before, .icon-arrow-up:before { content: "\e005"; } .icon-chevron-right:before, .icon-rightarrow:before, .icon-arrow-right:before { content: "\e006"; } .icon-chevron-down:before, .icon-downarrow:before, .icon-arrow-down:before { content: "\e007"; } .icon-chevron-left:before, .icon-leftarrow:before, .icon-arrow-left:before { content: "\e008"; } .icon-arrow-first:before { content: "\e003"; } .icon-arrow-last:before { content: "\e004"; } .icon-arrow-up-2:before { content: "\e009"; } .icon-arrow-right-2:before { content: "\e00a"; } .icon-arrow-down-2:before { content: "\e00b"; } .icon-arrow-left-2:before { content: "\e00c"; } .icon-arrow-up-3:before { content: "\e00f"; } .icon-arrow-right-3:before { content: "\e010"; } .icon-arrow-down-3:before { content: "\e011"; } .icon-arrow-left-3:before { content: "\e012"; } .icon-menu-2:before { content: "\e00e"; } .icon-arrow-up-4:before { content: "\e201"; } .icon-arrow-right-4:before { content: "\e202"; } .icon-arrow-down-4:before { content: "\e203"; } .icon-arrow-left-4:before { content: "\e204"; } .icon-share:before, .icon-redo:before { content: "\27"; } .icon-undo:before { content: "\28"; } .icon-forward-2:before { content: "\e205"; } .icon-backward-2:before, .icon-reply:before { content: "\e206"; } .icon-unblock:before, .icon-refresh:before, .icon-redo-2:before { content: "\6c"; } .icon-undo-2:before { content: "\e207"; } .icon-move:before { content: "\7a"; } .icon-expand:before { content: "\66"; } .icon-contract:before { content: "\67"; } .icon-expand-2:before { content: "\68"; } .icon-contract-2:before { content: "\69"; } .icon-play:before { content: "\e208"; } .icon-pause:before { content: "\e209"; } .icon-stop:before { content: "\e210"; } .icon-previous:before, .icon-backward:before { content: "\7c"; } .icon-next:before, .icon-forward:before { content: "\7b"; } .icon-first:before { content: "\7d"; } .icon-last:before { content: "\e000"; } .icon-play-circle:before { content: "\e00d"; } .icon-pause-circle:before { content: "\e211"; } .icon-stop-circle:before { content: "\e212"; } .icon-backward-circle:before { content: "\e213"; } .icon-forward-circle:before { content: "\e214"; } .icon-loop:before { content: "\e001"; } .icon-shuffle:before { content: "\e002"; } .icon-search:before { content: "\53"; } .icon-zoom-in:before { content: "\64"; } .icon-zoom-out:before { content: "\65"; } .icon-apply:before, .icon-edit:before, .icon-pencil:before { content: "\2b"; } .icon-pencil-2:before { content: "\2c"; } .icon-brush:before { content: "\3b"; } .icon-save-new:before, .icon-plus-2:before { content: "\5d"; } .icon-minus-sign:before, .icon-minus-2:before { content: "\5e"; } .icon-delete:before, .icon-remove:before, .icon-cancel-2:before { content: "\49"; } .icon-publish:before, .icon-save:before, .icon-ok:before, .icon-checkmark:before { content: "\47"; } .icon-new:before, .icon-plus:before { content: "\2a"; } .icon-plus-circle:before { content: "\e215"; } .icon-minus:before, .icon-not-ok:before { content: "\4b"; } .icon-ban-circle:before, .icon-minus-circle:before { content: "\e216"; } .icon-unpublish:before, .icon-cancel:before { content: "\4a"; } .icon-cancel-circle:before { content: "\e217"; } .icon-checkmark-2:before { content: "\e218"; } .icon-checkmark-circle:before { content: "\e219"; } .icon-info:before { content: "\e220"; } .icon-info-2:before, .icon-info-circle:before { content: "\e221"; } .icon-question:before, .icon-question-sign:before, .icon-help:before { content: "\45"; } .icon-question-2:before, .icon-question-circle:before { content: "\e222"; } .icon-notification:before { content: "\e223"; } .icon-notification-2:before, .icon-notification-circle:before { content: "\e224"; } .icon-pending:before, .icon-warning:before { content: "\48"; } .icon-warning-2:before, .icon-warning-circle:before { content: "\e225"; } .icon-checkbox-unchecked:before { content: "\3d"; } .icon-checkin:before, .icon-checkbox:before, .icon-checkbox-checked:before { content: "\3e"; } .icon-checkbox-partial:before { content: "\3f"; } .icon-square:before { content: "\e226"; } .icon-radio-unchecked:before { content: "\e227"; } .icon-radio-checked:before, .icon-generic:before { content: "\e228"; } .icon-circle:before { content: "\e229"; } .icon-signup:before { content: "\e230"; } .icon-grid:before, .icon-grid-view:before { content: "\58"; } .icon-grid-2:before, .icon-grid-view-2:before { content: "\59"; } .icon-menu:before { content: "\5a"; } .icon-list:before, .icon-list-view:before { content: "\31"; } .icon-list-2:before { content: "\e231"; } .icon-menu-3:before { content: "\e232"; } .icon-folder-open:before, .icon-folder:before { content: "\2d"; } .icon-folder-close:before, .icon-folder-2:before { content: "\2e"; } .icon-folder-plus:before { content: "\e234"; } .icon-folder-minus:before { content: "\e235"; } .icon-folder-3:before { content: "\e236"; } .icon-folder-plus-2:before { content: "\e237"; } .icon-folder-remove:before { content: "\e238"; } .icon-file:before { content: "\e016"; } .icon-file-2:before { content: "\e239"; } .icon-file-add:before, .icon-file-plus:before { content: "\29"; } .icon-file-minus:before { content: "\e017"; } .icon-file-check:before { content: "\e240"; } .icon-file-remove:before { content: "\e241"; } .icon-save-copy:before, .icon-copy:before { content: "\e018"; } .icon-stack:before { content: "\e242"; } .icon-tree:before { content: "\e243"; } .icon-tree-2:before { content: "\e244"; } .icon-paragraph-left:before { content: "\e246"; } .icon-paragraph-center:before { content: "\e247"; } .icon-paragraph-right:before { content: "\e248"; } .icon-paragraph-justify:before { content: "\e249"; } .icon-screen:before { content: "\e01c"; } .icon-tablet:before { content: "\e01d"; } .icon-mobile:before { content: "\e01e"; } .icon-box-add:before { content: "\51"; } .icon-box-remove:before { content: "\52"; } .icon-download:before { content: "\e021"; } .icon-upload:before { content: "\e022"; } .icon-home:before { content: "\21"; } .icon-home-2:before { content: "\e250"; } .icon-out-2:before, .icon-new-tab:before { content: "\e024"; } .icon-out-3:before, .icon-new-tab-2:before { content: "\e251"; } .icon-link:before { content: "\e252"; } .icon-picture:before, .icon-image:before { content: "\2f"; } .icon-pictures:before, .icon-images:before { content: "\30"; } .icon-palette:before, .icon-color-palette:before { content: "\e014"; } .icon-camera:before { content: "\55"; } .icon-camera-2:before, .icon-video:before { content: "\e015"; } .icon-play-2:before, .icon-video-2:before, .icon-youtube:before { content: "\56"; } .icon-music:before { content: "\57"; } .icon-user:before { content: "\22"; } .icon-users:before { content: "\e01f"; } .icon-vcard:before { content: "\6d"; } .icon-address:before { content: "\70"; } .icon-share-alt:before, .icon-out:before { content: "\26"; } .icon-enter:before { content: "\e257"; } .icon-exit:before { content: "\e258"; } .icon-comment:before, .icon-comments:before { content: "\24"; } .icon-comments-2:before { content: "\25"; } .icon-quote:before, .icon-quotes-left:before { content: "\60"; } .icon-quote-2:before, .icon-quotes-right:before { content: "\61"; } .icon-quote-3:before, .icon-bubble-quote:before { content: "\e259"; } .icon-phone:before { content: "\e260"; } .icon-phone-2:before { content: "\e261"; } .icon-envelope:before, .icon-mail:before { content: "\4d"; } .icon-envelope-opened:before, .icon-mail-2:before { content: "\4e"; } .icon-unarchive:before, .icon-drawer:before { content: "\4f"; } .icon-archive:before, .icon-drawer-2:before { content: "\50"; } .icon-briefcase:before { content: "\e020"; } .icon-tag:before { content: "\e262"; } .icon-tag-2:before { content: "\e263"; } .icon-tags:before { content: "\e264"; } .icon-tags-2:before { content: "\e265"; } .icon-options:before, .icon-cog:before { content: "\38"; } .icon-cogs:before { content: "\37"; } .icon-screwdriver:before, .icon-tools:before { content: "\36"; } .icon-wrench:before { content: "\3a"; } .icon-equalizer:before { content: "\39"; } .icon-dashboard:before { content: "\78"; } .icon-switch:before { content: "\e266"; } .icon-filter:before { content: "\54"; } .icon-purge:before, .icon-trash:before { content: "\4c"; } .icon-checkedout:before, .icon-lock:before, .icon-locked:before { content: "\23"; } .icon-unlock:before { content: "\e267"; } .icon-key:before { content: "\5f"; } .icon-support:before { content: "\46"; } .icon-database:before { content: "\62"; } .icon-scissors:before { content: "\e268"; } .icon-health:before { content: "\6a"; } .icon-wand:before { content: "\6b"; } .icon-eye-open:before, .icon-eye:before { content: "\3c"; } .icon-eye-close:before, .icon-eye-blocked:before, .icon-eye-2:before { content: "\e269"; } .icon-clock:before { content: "\6e"; } .icon-compass:before { content: "\6f"; } .icon-broadcast:before, .icon-connection:before, .icon-wifi:before { content: "\e01b"; } .icon-book:before { content: "\e271"; } .icon-lightning:before, .icon-flash:before { content: "\79"; } .icon-print:before, .icon-printer:before { content: "\e013"; } .icon-feed:before { content: "\71"; } .icon-calendar:before { content: "\43"; } .icon-calendar-2:before { content: "\44"; } .icon-calendar-3:before { content: "\e273"; } .icon-pie:before { content: "\77"; } .icon-bars:before { content: "\76"; } .icon-chart:before { content: "\75"; } .icon-power-cord:before { content: "\32"; } .icon-cube:before { content: "\33"; } .icon-puzzle:before { content: "\34"; } .icon-attachment:before, .icon-paperclip:before, .icon-flag-2:before { content: "\72"; } .icon-lamp:before { content: "\74"; } .icon-pin:before, .icon-pushpin:before { content: "\73"; } .icon-location:before { content: "\63"; } .icon-shield:before { content: "\e274"; } .icon-flag:before { content: "\35"; } .icon-flag-3:before { content: "\e275"; } .icon-bookmark:before { content: "\e023"; } .icon-bookmark-2:before { content: "\e276"; } .icon-heart:before { content: "\e277"; } .icon-heart-2:before { content: "\e278"; } .icon-thumbs-up:before { content: "\5b"; } .icon-thumbs-down:before { content: "\5c"; } .icon-unfeatured:before, .icon-asterisk:before, .icon-star-empty:before { content: "\40"; } .icon-star-2:before { content: "\41"; } .icon-featured:before, .icon-default:before, .icon-star:before { content: "\42"; } .icon-smiley:before, .icon-smiley-happy:before { content: "\e279"; } .icon-smiley-2:before, .icon-smiley-happy-2:before { content: "\e280"; } .icon-smiley-sad:before { content: "\e281"; } .icon-smiley-sad-2:before { content: "\e282"; } .icon-smiley-neutral:before { content: "\e283"; } .icon-smiley-neutral-2:before { content: "\e284"; } .icon-cart:before { content: "\e019"; } .icon-basket:before { content: "\e01a"; } .icon-credit:before { content: "\e286"; } .icon-credit-2:before { content: "\e287"; } .icon-expired:before { content: "\4b"; } html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; font-size: 100%; background: transparent; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } del { text-decoration: line-through; } html { overflow-y: scroll; height: 100%; } body { margin: 0; padding: 0; font-size: 62.5%; line-height: 1.5em; height: 100%; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body, td, th, span, a { font-family: Arial, Helvetica, sans-serif; } html, body { height: 100%; } a, img { padding: 0; margin: 0; } img { border: 0 none; } form { margin: 0; padding: 0; } ul { padding: 0; margin: 0; } h1 { margin: 0; padding-bottom: 8px; font-size: 1.4em; font-weight: bold; line-height: 2em; } h2 { padding-top: .83em; padding-bottom: .83em; } h3 { font-size: 1.4em; } a:link { color: #054993; text-decoration: none; } a:visited { color: #054993; text-decoration: none; } a:hover { text-decoration: underline; } a:focus { text-decoration: underline; } iframe { border: 0; } .enabled { color: #005800; font-weight: bold; } .disabled { color: #a20000; font-weight: bold; } p.error { color: #a20000; font-weight: bold; } .warning { color: #a20000; font-weight: bold; } .nowarning { color: #2c2c2c; font-weight: bold; } .success { color: #005800; font-weight: bold; } .allow { color: #005800; } span.writable { color: #005800; } .deny { color: #a20000; } span.unwritable { color: #a20000; } .none { color: #aaaaaa; } .pointer { cursor: pointer; } .nowrap { white-space: nowrap; } p.nowarning, p.warning { margin: 10px; } #minwidth, #minwidth-body { min-width: 980px; } #containerwrap { position: relative; } #header { position: relative; } #header h1.title { font-size: 1.5em; font-weight: normal; line-height: 25px; margin: 0; padding: 0 0 0 120px; } #footer { padding: 10px 20px; } #footer .copyright { margin: 0 0 0 0; text-align: center; } #footer p { font-size: 1.2em; } #nav .no-nav { line-height: 2em; } #content { margin: 5px 20px 20px 20px; } .cpanel-page div#element-box { padding: 15px; } #module-status { float: right; position: relative; top: -48px; } #module-status div.btn-group { display: block; float: left; padding: 4px 10px 0 10px; font-size: 1.2em; } #module-status div.divider { display: none; } #module-status .unread-messages a { font-weight: bold; } .title-ua { position: relative; width: 60%; } .enabled, .disabled, p.error, .warning, .nowarning, .success { font-weight: bold; } .pointer { cursor: pointer; } .nowrap { white-space: nowrap; } span.note { display: block; padding: 5px; } div.checkin-tick { text-indent: -9999px; } .ol-textfont { font-family: Arial, Helvetica, sans-serif; font-size: 1.2em; } .ol-captionfont { font-family: Arial, Helvetica, sans-serif; font-size: 1.2em; font-weight: bold; } .ol-captionfont a { text-decoration: none; } div.subheader .padding { padding: 0; } div.pagetitle { padding: 0 0 5px 5px; margin: 0; background-repeat: no-repeat; background-position: left 50%; line-height: 54px; width: 100%; margin-top: -20px; height: 60px; } .tabs-left > .nav-tabs { float: left; margin-right: 19px; border-right: 1px solid #DDD; } tabs-below > .nav-tabs, .tabs-right > .nav-tabs, .tabs-left > .nav-tabs { border-bottom: 0; } .tab-content { overflow: visible; } .tabs-left .tab-content { overflow: auto; } .nav-tabs > li > span { display: block; margin-right: 2px; padding-right: 12px; padding-left: 12px; padding-top: 8px; padding-bottom: 8px; line-height: 18px; border: 1px solid transparent; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } .btn-micro { padding: 1px 4px; font-size: 10px; line-height: 8px; } .tip-wrap { max-width: 200px; padding: 3px 8px; color: #ffffff; text-align: center; text-decoration: none; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; z-index: 100; } .pagetitle h2 { padding: 0 0 0 50px; font-size: 1.3em; font-weight: bold; line-height: 48px; font-style: italic; } div.configuration { font-size: 1.2em; font-weight: bold; line-height: 2em; padding-left: 30px; margin-left: 10px; } div.toolbar-box h3 { height: 0; overflow: hidden; position: absolute; padding: 0; margin: 0; } .btn-toolbar { margin-bottom: 3px; margin-top: 14px; } div.btn-toolbar, div.toolbar-list { float: left; text-align: left; padding: 0; } div.toolbar-list li { padding: 5px 1px 5px 4px; text-align: center; height: 52px; list-style: none; float: left; } div.toolbar-list li.spacer { width: 10px; } div.toolbar-list li.divider { width: 10px; margin-right: 10px; } div.toolbar-list span { float: none; width: 32px; height: 32px; margin: 0 auto; display: block; } div.toolbar-list a { display: block; float: left; white-space: nowrap; padding: 1px 5px; cursor: pointer; font-weight: bold; } div.btn-toolbar div.btn-group button { display: block; float: left; white-space: nowrap; padding: 1px 5px; cursor: pointer; text-align: center; } div.btn-toolbar button:hover, div.btn-toolbar button:focus, div.toolbar-list a:hover, div.toolbar-list a:focus { text-decoration: none; } td#mm_pane { width: 90%; } input#mm_subject { width: 200px; } textarea#mm_message { width: 100%; } textarea { resize: both; } textarea.vert { resize: vertical; } textarea.noResize { resize: none; } .pane-sliders { margin: 0; position: relative; } .pane-sliders .title { margin: 0; padding: 2px; cursor: pointer; } .pane-sliders .panel { margin-bottom: 3px; } .pane-sliders .adminlist td { border: 0 none; } h3.pane-toggler-down a:focus, h3.pane-toggler a:focus { outline: none; } .pane-toggler span { padding-left: 20px; } .pane-toggler-down span { padding-left: 20px; } .pane-slider.pane-hide { display: none; } div#position-icon.pane-sliders div.pane-down div.quickicon-wrapper { margin: 5px 0 5px 0; } div#position-icon.pane-sliders div.pane-down .quickicon-wrapper .icon { padding: 5px 0 5px 10px; margin: 0; } dl.tabs { float: left; margin: 10px 0 -1px 0; z-index: 50; } dl.tabs dt { float: left; padding: 4px 10px; margin-left: 3px; } dl.tabs dt.open { z-index: 100; } div.current { clear: both; padding: 10px 10px; } div.current dd { padding: 0; margin: 0; } dl#content-pane.tabs { margin: 1px 0 0 0; } div.current label, div.current span.faux-label { display: block; min-width: 150px; float: left; clear: left; margin-top: 8px; } div.current fieldset.radio { float: left; } div.current fieldset.radio input { clear: none; min-width: 15px; float: left; margin: 3px 0 0 2px; } div.current fieldset.radio label { clear: none; min-width: 45px; float: left; margin: 3px 0 0 2px; } div.current fieldset.checkboxes { float: left; clear: right; } div.current fieldset.checkboxes input { clear: left; min-width: 15px; float: left; margin: 3px 0 0 2px; } div.current fieldset.checkboxes label { clear: right; min-width: 45px; margin: 3px 0 0 2px; } div.current input, div.current span.faux-input, div.current textarea, div.current select { clear: none; float: left; margin: 3px 0 0 2px; } div.current select { margin-bottom: 15px; } div.current table#acl-config th.acl-groups { text-align: left; } div.current table#filter-config th.acl-groups { text-align: left; } div.current table#filter-config select { margin-bottom: 0; } div#menu-assignment { clear: left; } div#menu-assignment ul.menu-links { float: left; width: 49%; } div#menu-assignment ul.menu-links label { clear: none; float: left; margin: 3px 0 0 2px; } div#menu-assignment ul.menu-links input { clear: left; float: left; } button.jform-rightbtn { float: right; margin-right: 0; } p.tab-description { font-size: 1.091em; margin-left: 0; margin-top: 5px; } #login-page input, #login-page select { float: right; clear: none; } #login-page .login { margin: 0 auto; width: 575px; margin-bottom: 100px; } #login-page .pagetitle h2 { margin: -70px 0 30px 0; font-size: 2em; padding: 0; } #login-page p { margin: 0; padding: 0; margin-bottom: 1em; font-size: 1.2em; } #login-page #header { margin-bottom: 100px; } #login-page .login-inst { float: left; width: 35%; } #login-page .login-box { float: right; width: 63%; } #login-page #lock { width: 150px; height: 137px; } #login-page #element-box.login { padding: 20px; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } #login-page .button { text-align: right; } #login-page .login-text { text-align: left; width: 40%; float: left; } #form-login { float: left; padding: 1.1em; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } #form-login fieldset { border: none; } #form-login label { display: block; float: left; clear: left; width: 100px; text-align: right; padding: 4px; color: #2c2c2c; font-weight: bold; font-size: 1.4em; margin-bottom: 15px; } #form-login div.button1 div.next { float: left; } #form-login div.button1 a { height: 2.2em; line-height: 2.2em; font-size: 1.5em; cursor: default; padding: 0 15px 0 15px; } .login-submit { border: 0; padding: 0; margin: 0; width: 0; height: 0; } #cpanel div.icon, .cpanel div.icon { text-align: center; margin-right: 5px; float: left; margin-bottom: 5px; } #cpanel div.icon a, .cpanel div.icon a { display: block; float: left; height: auto; min-height: 97px; width: 108px; color: #2c2c2c; vertical-align: middle; text-decoration: none; font-weight: bold; } #cpanel img, .cpanel img { padding: 10px; margin: 0 auto; } #cpanel span, .cpanel span { display: block; text-align: center; padding: 0 0 5px; } div.cpanel-icons { width: 54%; float: left; } div.cpanel-component { width: 45%; float: right; } div.col { float: left; } div.options-section.col { float: right; } div.col1 { float: left; width: 45%; } div.col2 { float: right; width: 45%; } div.width-1 { width: 1%; } div.width-3 { width: 3%; } div.width-5 { width: 5%; } div.width-10 { width: 10%; } div.width-20 { width: 20%; } div.width-30 { width: 30%; } div.width-35 { width: 35%; } div.width-40 { width: 40%; } div.width-45 { width: 45%; } div.width-50 { width: 50%; } div.width-55 { width: 55%; } div.width-60 { width: 60%; } div.width-65 { width: 65%; } div.width-70 { width: 70%; } div.width-80 { width: 80%; } div.width-100 { width: 100%; } .clrlft { clear: left; } .clrrt { clear: right; } .fltlft { float: left; } .fltrt { float: right; } .fltnone { float: none; } div.main-section { width: 60%; } div.options-section { width: 38%; margin: 10px 10px 10px 0; } div.width-40.fltrt { width: 38%; margin: 10px 10px 10px 0; } div.rules-section { width: 98%; margin: 10px; } fieldset { margin: 2px 10px 2px 10px; padding: 5px; text-align: left; } legend { font-size: 1.3em; font-weight: bold; padding-bottom: 5px; } fieldset p { margin: 10px 0; font-size: 1.2em; } fieldset ol, ol#property-values, fieldset ul, ul#property-values { margin: 0; padding: 0; } fieldset li, ol#property-values li, ul#property-values li { list-style: none; margin: 0; padding: 5px; } fieldset.adminform fieldset.radio, fieldset.panelform fieldset.radio, fieldset.adminform-legacy fieldset.radio { border: 0; float: left; padding: 0; margin: 0 0 5px 0; clear: right; } fieldset.adminform fieldset.radio label, fieldset.panelform fieldset.radio label, fieldset.adminform fieldset.radio span.faux-label, fieldset.panelform fieldset.radio span.faux-label { min-width: 40px; float: left; clear: none; } fieldset.adminform fieldset.checkboxes, fieldset.panelform fieldset.checkboxes, fieldset.adminform-legacy fieldset.checkboxes { border: 0; float: left; padding: 0; margin: 0 0 5px 0; clear: right; } fieldset.adminform fieldset.checkboxes input[type="checkbox"], fieldset.panelform fieldset.checkboxes input[type="checkbox"] { float: left; clear: left; } fieldset.adminform fieldset.checkboxes label, fieldset.panelform fieldset.checkboxes label, fieldset.adminform fieldset.checkboxes span.faux-label, fieldset.panelform fieldset.checkboxes span.faux-label { clear: right; } div.current span.spacer > span.before, fieldset.adminform span.spacer > span.before, fieldset.panelform span.spacer > span.before { clear: both; overflow: hidden; height: 0; display: block; } fieldset.panelform-legacy label, fieldset.adminform-legacy label, fieldset.panelform-legacy span.faux-label, fieldset.adminform-legacy span.faux-label { min-width: 150px; float: left; } fieldset.adminform .input-prepend, fieldset.adminform .input-append, fieldset.panelform .input-prepend, fieldset.panelform .input-append { float: left; } fieldset.adminform .adminformlist .btn.modal, fieldset.adminform .input-prepend > *, fieldset.adminform .input-append > *, fieldset.panelform .adminformlist .btn.modal, fieldset.panelform .input-prepend > *, fieldset.panelform .input-append > * { float: none; vertical-align: middle; } fieldset.panelform-legacy label.radiobtn-jno, fieldset.panelform-legacy label.radiobtn-jyes, fieldset.panelform-legacy label.radiobtn-show, fieldset.panelform-legacy label.radiobtn-hide, fieldset.panelform-legacy label.radiobtn-off, fieldset.panelform-legacy label.radiobtn-on { min-width: 40px !important; clear: none !important; } #jform_plugdesc-lbl, #jform_description-lbl { font-weight: bold; clear: both; margin-top: 15px; } p.jform_desc { clear: left; } div#jform_ordering { font-size: 1.091em; margin-top: 3px; } fieldset ul.checklist { margin-left: 27px; } fieldset ul.checklist input, fieldset ul.checklist label { float: none; } fieldset ul.checklist input:focus { outline: thin dotted #333333; } fieldset#filter-bar { margin: 0; padding: 5px 10px 5px 10px; float: left; width: 98%; } fieldset#filter-bar ol, fieldset#filter-bar ul { list-style: none; margin: 0; padding: 5px 0 0; } fieldset#filter-bar ol li, fieldset#filter-bar ul li { float: left; padding: 0 5px 0 0; } fieldset#filter-bar ol li fieldset, fieldset#filter-bar ul li fieldset { margin: 0; padding: 0; } fieldset#filter-bar .filter-search { float: left; padding-bottom: 3px; } fieldset#filter-bar .filter-select { float: right; } fieldset#filter-bar input#search { width: 10em; } .invalid { font-weight: bold; } input.readonly, span.faux-input { border: 0; } .star { color: #cc0000; font-size: 1.2em; } input, select, span.faux-input { font-size: 1.2em; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } span.readonly { float: left; font-size: 1.2em; line-height: 2em; } div.readonly { font-size: 1.2em; line-height: 2em; } div.extdescript { margin-left: 10px; } input[type="button"], input[type="submit"], input[type="reset"] { font-family: Arial, Helvetica, sans-serif; padding: 1px 6px; font-size: 1.2em; line-height: 1.5em; } textarea { font-size: 1.4em; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } input.button { cursor: pointer; } label { font-weight: bold; font-size: 1.1em; } span.faux-label { font-weight: bold; font-size: 1.1em; } label.selectlabel { position: absolute; left: -1000em; } .paramrules { padding: 10px; } span.gi { font-weight: bold; margin-right: 5px; } span.gtr { visibility: hidden; margin-right: 5px; } table.admintable td { padding: 3px; font-size: 1em; } table.admintable td.key, table.admintable td.paramlist_key { text-align: right; width: 140px; font-weight: bold; font-size: 1em; } table.admintable td.key label, table.admintable td.paramlist_key label { font-size: 1em; } table.admintable td.paramlist_value label { font-size: 1em; } table.admintable input, table.admintable span.faux-input, table.admintable select { font-size: 1em; } table.paramlist td.paramlist_description { text-align: left; width: 170px; font-weight: normal; } table.admintable td.key.vtop { vertical-align: top; } fieldset.adminform { margin: 0 10px 10px 10px; overflow: hidden; } .adminformlist .btn.modal { float: left; margin-top: 7px; } ul.adminformlist, ul.adminformlist li, dl.adminformlist, dl.adminformlist li { margin: 0; padding: 0; list-style: none; } ul.adminformlist pre { font-size: 1.3em; } ul.adminformlist .button2-left, ul.adminformlist .button2-left { margin-top: 5px; } table.adminform { width: 100%; border-collapse: collapse; margin: 8px 0 10px 0; margin-bottom: 15px; } table.adminform.nospace { margin-bottom: 0; } table.adminform th { font-size: 1.4em; padding: 6px 2px 4px 4px; text-align: left; height: 25px; } table.adminform td { padding: 3px; text-align: left; } table.adminform td#filter-bar { text-align: left; } table.adminform td.helpMenu { text-align: right; } table.adminform tr { padding-left: 10px; padding-right: 10px; } td.center, th.center { text-align: center; } th.width-1 { width: 1%; } th.width-3 { width: 3%; } th.width-5 { width: 5%; } th.width-10 { width: 10%; } th.width-12 { width: 12%; } th.width-15 { width: 15%; } th.width-20 { width: 20%; } th.width-25 { width: 25%; } th.width-30 { width: 30%; } th.width-40 { width: 40%; } th.row-number-col { width: 3%; } th.checkmark-col { width: 1%; } th.state-col { width: 5%; } th.ordering-col { width: 10%; } th.ordering-col a { display: block; float: left; margin-left: 3px; } th.ordering-col a img { margin-left: 4px; margin-right: 4px; } .categories th.ordering-col input, .categories td.order input { font-size: 1em; } th.category-col { width: 5%; } th.access-col { width: 10%; } .categories th.access-col { width: 5%; } th.hits-col { width: 5%; } th.id-col { width: 3%; } th.featured-col { width: 5%; } th.created-by-col { width: 15%; } th.date-col { width: 5%; } th.language-col { width: 5%; } th.home-col { width: 5%; } table.adminlist { width: 100%; float: left; } table.adminlist td, table.adminlist th { padding: 4px; font-size: 1.2em; } table.adminlist thead th { text-align: center; } table.adminlist thead a:hover { text-decoration: none; } table.adminlist thead th img { vertical-align: middle; } table.adminlist tbody th { font-weight: bold; } table.adminlist tr { padding-left: 30px; padding-right: 30px; } table.adminlist tbody tr { text-align: left; } table.adminlist tbody tr td, table.adminlist tbody tr th { height: 25px; } table.adminlist tfoot tr { text-align: center; } table.adminlist tfoot td, table.adminlist tfoot th { text-align: center; } table.adminlist td.order { text-align: center; white-space: nowrap; } table.adminlist td.order span { float: left; width: 20px; text-align: center; } table.adminlist td.order input { text-align: center; width: 3em; font-size: 100%; } #media-tree_tree ul { list-style: none outside none; margin: 0 10px; } table.adminlist td.indent-4 { padding-left: 4px; } table.adminlist td.indent-19 { padding-left: 19px; } table.adminlist td.indent-34 { padding-left: 34px; } table.adminlist td.indent-49 { padding-left: 49px; } table.adminlist td.indent-64 { padding-left: 64px; } table.adminlist td.indent-79 { padding-left: 79px; } table.adminlist td.indent-94 { padding-left: 94px; } table.adminlist td.indent-109 { padding-left: 109px; } table.adminlist td.indent-124 { padding-left: 124px; } table.adminlist td.indent-139 { padding-left: 139px; } table.adminlist tr td.btns a { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; padding: 3px 20px; } table.adminlist tr td.btns a:hover, table.adminlist tr td.btns a:active, table.adminlist tr td.btns a:focus { text-decoration: none; } table.adminlist td li { list-style: inside; } ul#new-modules-list { margin-left: 50px; font-size: 1.4em; line-height: 1.5em; } .clr { clear: both; overflow: hidden; height: 0; } .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .menu-module-list { list-style-position: inside; padding-left: 10px; margin-left: 5px; } .container { clear: both; text-decoration: none; } * html .container { display: inline-block; } table.noshow { width: 100%; border-collapse: collapse; padding: 0; margin: 0; } table.noshow tr { vertical-align: top; } table.noshow fieldset { margin: 15px 7px 7px 7px; } a.saveorder { width: 16px; height: 16px; display: block; overflow: hidden; float: right; margin-right: 8px; } #editor-xtd-buttons { padding: 5px; } button { font-family: Arial, Helvetica, sans-serif; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; margin-right: 3px; margin-left: 3px; } .invalid { font-weight: bold; } .button1, .button1 div { height: 1%; float: right; } .button1 { white-space: nowrap; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .button1 a { display: block; height: 2.2em; float: left; line-height: 2.2em; font-size: 1.2em; font-weight: bold; cursor: default; padding: 0 6px 0 6px; } .button1 a:hover, .button1 a:focus { text-decoration: none; } .button2-left, .button2-right { float: left; line-height: 1.5em; font-size: 1.2em; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .button2-left.smallsub, .button2-right.smallsub { line-height: 1.2em; font-size: .9em; } .button2-left a, .button2-right a, .button2-left span, .button2-right span { display: block; float: left; cursor: default; } .button2-left span, .button2-right span { cursor: default; } .button2-left .page a, .button2-right .page a, .button2-left .page span, .button2-right .page span, .button2-left .blank a, .button2-right .blank a, .button2-left .blank span, .button2-right .blank span { padding: 0 6px; } .page span, .blank span { font-weight: bold; } .button2-left a:hover, .button2-right a:hover, .button2-left a:focus, .button2-right a:focus { text-decoration: none; } .button2-left a, .button2-left span { padding: 0 24px 0 6px; } .button2-right a, .button2-right span { padding: 0 6px 0 24px; } .button2-left { float: left; margin-left: 5px; } .button2-right { float: left; margin-left: 5px; } div.containerpg { position: relative; left: 50%; float: left; clear: left; } div.pagination { position: relative; left: -50%; margin: 0 auto; padding: .5em; } .pagination div.limit { float: left; margin: 0 10px; font-size: 1.2em; height: 1.8em; line-height: 1.8em; } .pagination div.limit label { font-size: 100%; height: 1.8em; line-height: 1.8em; } .pagination div.limit select { font-size: 100%; } .pagination button { font-size: 100%; height: 2.0em; line-height: 1.8em; margin-right: 20px; } div.pagination .button2-right, div.pagination .button2-left { font-size: 1.2em; height: 1.6em; line-height: 1.6em; } table.adminlist .pagination { display: table; padding: 0; margin: 0 auto; font-size: .8em; } table.adminlist .pagination button { font-size: 1.2em; height: 1.6em; line-height: 1.5em; margin-right: 20px; } div.toggle-editor { margin-top: 9px; } .tip { float: left; padding: 5px; max-width: 400px; z-index: 50; } .tip-title { padding: 0; margin: 0; font-size: 120%; margin-top: -15px; padding-top: 15px; padding-bottom: 5px; } .tip-text { font-size: 100%; text-align: left; margin: 0; } a img.calendar { width: 16px; height: 16px; margin-left: 3px; cursor: pointer; vertical-align: middle; } a.jgrid:hover { text-decoration: none; } .jgrid span.state { display: inline-block; height: 16px; width: 16px; } .jgrid span.text { display: none; } div.message { text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: 1.2em; padding: 3px; margin-bottom: 10px; font-weight: bold; } .helpIndex { border: 0; width: 100%; height: 100%; padding: 0; overflow: auto; } .helpFrame { width: 100%; height: 800px; padding: 0 5px 0 10px; } #treecellhelp { width: 25%; display: block; position: relative; float: left; margin: 0; padding: 2px; overflow: hidden; } #datacellhelp { width: 73%; display: block; float: left; margin: 0; padding: 2px 0 0 0; } .outline { padding: 2px; } h2.modal-title { margin-left: 15px; margin-bottom: 0; margin-top: 5px; font-size: 1.8em; padding-bottom: .5em; } ul.menu_types { padding: 0 0 0 15px; width: 95%; margin: 0; } ul.menu_types li, dl.menu_type dd ul li { width: 240px; list-style: none; display: block; float: left; margin-right: 10px; } ul.menu_types li { width: 47%; } dl.menu_type { width: 240px; margin: 0; padding: 0; } dl.menu_type dt { font-weight: bold; font-size: 1.5em; float: left; margin: 13px 0 5px 0; width: 240px; } dl.menu_type dd { clear: left; margin: 0; } dl.menu_type dd a { font-size: 1.2em; } dl.menu_type dd ul li { margin: 0; } ul#new-modules-list { padding: 5px 0 0 15px; width: 95%; margin: 0; list-style: none; } ul#new-modules-list li { list-style: none; display: block; float: left; margin: 0 20px 0 0; width: 47%; } ul#new-modules-list li a { font-size: 1em; line-height: 1.5em; } body.contentpane #filter-bar { font-size: 80%; } body.contentpane input, body.contentpane select { font-size: 120%; } #filter-bar input, #filter-bar select, #filter-bar button { font-size: 110%; } #skiplinkholder a, #skiplinkholder a:link, #skiplinkholder a:visited { display: block; width: 99%; position: absolute; top: 0; left: -200%; z-index: 2; } #skiplinkholder a:focus, #skiplinkholder a:active { left: 0; top: 0; z-index: 100; } #skiplinkholder p { margin: 0; } #skiptargetholder { position: absolute; left: -200%; } #skiplinkholder a, #skiplinkholder a:link, #skiplinkholder a:visited { text-decoration: underline; padding: 5px; font-size: 1.3em; font-weight: bold; padding-left: 20px; padding-right: 20px; } .body-overlayed a, .body-overlayed input, .body-overlayed button { visibility: hidden; } .body-overlayed #sbox-window a, .body-overlayed #sbox-window input, .body-overlayed #sbox-window button { visibility: visible; } .element-hidden, .hide { display: none; } .hidebtn { border: 0 !important; padding: 0 !important; margin: 0; width: 0; height: 0; } .element-invisible, .hidelabeltxt { height: 0; overflow: hidden; position: absolute; padding: 0; margin: 0; } legend.element-invisible { position: absolute !important; margin: 0; padding: 0; border: 0; margin-left: -10000px; font-size: 1px; height: 0; } fieldset.panelform { overflow: hidden; clear: both; } fieldset.adminform label, fieldset.panelform label, fieldset.adminform span.faux-label, fieldset.panelform span.faux-label { line-height: 2em; clear: left; min-width: 12em; float: left; margin-left: 10px; margin-right: 5px; } fieldset.adminform.long label, fieldset.panelform.long label, fieldset.adminform.long span.faux-label, fieldset.panelform.long span.faux-label { min-width: 18em; } fieldset.adminform fieldset.radio label, fieldset.panelform fieldset.radio label, fieldset.adminform fieldset.radio span.faux-label, fieldset.panelform fieldset.radio span.faux-label { margin-left: 0; } fieldset.adminform input, fieldset.adminform span.faux-input, fieldset.adminform textarea, fieldset.adminform select, fieldset.adminform img, fieldset.adminform button, fieldset.panelform input, fieldset.panelform span.faux-input, fieldset.panelform textarea, fieldset.panelform select, fieldset.panelform img, fieldset.panelform button { float: left; margin: 5px 5px 5px 0; width: auto; } fieldset.batch { margin: 20px 10px 10px 10px; padding: 10px; } fieldset.batch label { margin: 5px; min-width: 40px; } fieldset.batch button { margin: 3px; } fieldset#batch-choose-action { clear: left; border: 0 none; } fieldset.batch label { float: left; clear: none; } fieldset label#batch-choose-action-lbl { clear: left; margin-top: 15px; } label#batch-language-lbl, label#batch-user-lbl { clear: left; margin-right: 10px; margin-top: 15px; } select#batch-language-id, select#batch-user-id { margin-top: 15px; } select#batch-category-id, select#batch-position-id, select#batch-menu-id { margin-right: 30px; } fieldset.batch select, fieldset.batch input, fieldset.batch img, fieldset.batch button { float: left; } label#batch-access-lbl, label#batch-client-lbl { margin-right: 10px; } div#jform_ordering { font-size: 1.091em; margin-top: 3px; } #jform_impmade, #jform_clicks { width: 30px; } fieldset.panelform label#jform-imp { min-width: 3em; font-size: 1.091em; } fieldset.adminform input#jform_clickurl { width: 20em; } a.move_up { display: inline-block; height: 16px; text-indent: -1000em; width: 16px; } span.move_up { display: inline-block; height: 16px; width: 16px; } a.move_down { display: inline-block; height: 16px; text-indent: -1000em; width: 16px; } span.move_down { display: inline-block; height: 16px; width: 16px; } a.grid_false { display: inline-block; height: 16px; text-indent: -1000em; width: 16px; } a.grid_true { display: inline-block; height: 16px; text-indent: -1000em; width: 16px; } a.grid_trash { display: inline-block; height: 16px; text-indent: -1000em; width: 16px; } div.acl-options { width: 100%; } table.aclsummary-table, table.aclmodify-table { border-collapse: collapse; width: 100%; font-size: 1.091em; } td.col1 { font-size: 1.091em; text-align: left; padding: 4px; } table.aclsummary-table caption, table.aclmodify-table caption { display: none; } table.aclsummary-table th.col1 { width: 25%; } table.aclsummary-table th.col2, table.aclsummary-table th.col3, table.aclsummary-table th.col4, table.aclsummary-table th.col5, table.aclsummary-table th.col6 { width: 15%; vertical-align: bottom; text-align: center; } span.icon-16-unset, span.icon-16-allowed, span.icon-16-denied, span.icon-16-locked { padding-left: 18px; } label.icon-16-allow, label.icon-16-deny, a.icon-16-allow, a.icon-16-deny, a.icon-16-allowinactive, a.icon-16-denyinactive { display: block; height: 16px; width: 16px; margin: 0 auto; } label.icon-16-allow { text-indent: -9999em; position: relative; left: 40%; } label.icon-16-deny { text-indent: -9999em; position: relative; left: 40%; } table.aclmodify-table th.col2, table.aclmodify-table th.col3, table.aclmodify-table th.col4 { width: 20%; vertical-align: bottom; text-align: center; } table.aclmodify-table select { margin: 1px; } table.aclsummary-table td label, table.aclmodify-table td label { min-width: 20px; } ul.acllegend { list-style: none; font-size: 1.091em; padding-bottom: 10px; } ul.acllegend li { display: block; float: left; padding-right: 20px; margin: 15px 0 15px 10px; } ul.acllegend li.acl-allowed { padding-left: 20px; padding-right: 10px; } ul.acllegend li.acl-denied { padding-left: 20px; padding-right: 20px; } ul.acllegend li.acl-editgroups { padding-right: 10px; } ul.acllegend li.acl-resetbtn { padding-right: 0; } li.acl-editgroups, li.acl-resetbtn { display: block; float: left; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } li.acl-editgroups a, li.acl-resetbtn a { padding: 6px; cursor: default; } li.acl-editgroups a:hover, li.acl-resetbtn a:hover, li.acl-editgroups a:focus, li.acl-resetbtn a:focus { text-decoration: none; cursor: default; } li.acl-editgroups:hover, li.acl-resetbtn:hover, li.acl-editgroups:focus, li.acl-resetbtn:focus { text-decoration: none; cursor: default; } table#acl-config { width: 100%; margin-top: 15px; } table#acl-config th, table#acl-config td { height: 2em; background: #f9fade; text-align: center; vertical-align: middle; } table#acl-config th.acl-groups { padding-left: 8px; font-weight: bold; text-align: left; } table#acl-config th.acl-groups span.gi { margin-right: 2px; } table#acl-config td { width: 9em; } table#acl-config td select { float: none; } .acl-action { font-size: 1.091em; margin: auto 0; } .acl-groups { font-size: 1.091em; font-weight: normal; } label#jform_rules-lbl { float: none; white-space: nowrap; display: none; visibility: hidden; } label#jform_filters-lbl { float: none; white-space: nowrap; display: none; visibility: hidden; } ul.config-option-list, ul.config-option-list li { margin: 0; padding: 0; list-style: none; } ul.config-option-list fieldset { margin: 0; padding-left: 0; padding-right: 0; } #permissions-sliders { margin-top: 15px; } #permissions-sliders ul#rules, #permissions-sliders ul#rules ul { margin: 0 !important; padding: 0 !important; list-style-type: none; } #permissions-sliders ul#rules li { margin: 0; padding: 0; } #permissions-sliders ul#rules table.group-rules { border-collapse: collapse; margin: 5px; width: 100%; } #permissions-sliders ul#rules table.group-rules td { padding: 4px; vertical-align: middle; text-align: left; overflow: hidden; } #permissions-sliders ul#rules table.group-rules th { font-size: 1.2em; overflow: hidden; font-weight: bold; } #permissions-sliders .panel { margin-bottom: 3px; margin-left: 0; border: 0; } #permissions-sliders p.rule-desc { font-size: 1.1em; } #permissions-sliders div.rule-notes { font-size: 1.1em; } ul#rules table.group-rules td label { margin: 0 !important; line-height: 1.1em; } ul#rules table.group-rules td span { font-size: 1.1em; padding-bottom: 4px; } ul#rules table.group-rules td span span { font-size: 100%; } table.group-rules td select { margin: 0 !important; } #permissions-sliders ul#rules .mypanel { padding: 0; line-height: 1.3em; } #permissions-sliders .mypanel table.group-rules caption { font-size: 1.3em; } #permissions-sliders ul#rules { padding: 5px; } #permissions-sliders ul#rules table.group-rules th { text-align: left; padding: 4px; } #permissions-sliders ul#rules table.group-rules td label { min-width: 1em; } #permissions-sliders .pane-toggler span { padding-left: 20px; } #permissions-sliders .pane-toggler-down span { padding-left: 20px; } #permissions-sliders .pane-toggler-down span.level, #permissions-sliders .pane-toggler span.level { padding: 0; } .swatch { text-align: center; padding: 0 15px 0 15px; } dl.tabs dt h3 { padding: 0; font-size: 100%; } ul.helpmenu li { float: right; margin: 10px; padding: 0; list-style-type: none; font-weight: bold; } #menu { position: relative; z-index: 100; padding: 0; margin: 0; width: 100%; list-style: none; font-size: 1.2em; font-weight: bold; } #menu ul { padding: 0; margin: 0; list-style: none; font-size: 100%; } #menu ul li.separator { margin-bottom: 1em; } #menu a { padding: 0.35em 2.5em 0.35em 2em; vertical-align: middle; display: block; text-decoration: none; font-size: 100%; } #menu li { float: left; font-size: 100%; } #menu li a { white-space: nowrap; } #menu li li a { margin-bottom: 1px; margin-top: 1px; width: 10em; } #menu li.disabled a:hover, #menu li.disabled a:focus, #menu li.disabled a { cursor: default; } #menu li ul { position: absolute; width: 16em; margin-left: -1000em; } #menu li li { border: none; width: 16em; } #menu li ul ul { margin: -2.3em 0 0 -1000em; } #menu li:hover ul ul, #menu li.sfhover ul ul { margin-left: -1000em; } #menu li:hover ul, #menu li.sfhover ul { margin-left: 0; } #menu li li:hover ul, #menu li li.sfhover ul { margin-left: 16em; } [class^="menu-"], [class*=" menu-"] { background-position: 3px 50% !important; } .menu-archive { background-image: url(../images/menu/icon-16-archive.png); } .menu-article { background-image: url(../images/menu/icon-16-article.png); } .menu-associations { background-image: url(../images/menu/icon-16-assoc.png); } .menu-banners { background-image: url(../images/menu/icon-16-banner.png); } .menu-banners-clients { background-image: url(../images/menu/icon-16-banner-client.png); } .menu-banners-tracks { background-image: url(../images/menu/icon-16-banner-tracks.png); } .menu-banners-cat { background-image: url(../images/menu/icon-16-banner-categories.png); } .menu-category { background-image: url(../images/menu/icon-16-category.png); } .menu-checkin { background-image: url(../images/menu/icon-16-checkin.png); } .menu-clear { background-image: url(../images/menu/icon-16-clear.png); } .menu-component { background-image: url(../images/menu/icon-16-component.png); } .menu-config { background-image: url(../images/menu/icon-16-config.png); } .menu-contact { background-image: url(../images/menu/icon-16-contacts.png); } .menu-contact-cat { background-image: url(../images/menu/icon-16-contacts-categories.png); } .menu-content { background-image: url(../images/menu/icon-16-content.png); } .menu-cpanel { background-image: url(../images/menu/icon-16-cpanel.png); } .menu-default { background-image: url(../images/menu/icon-16-default.png); } .menu-featured { background-image: url(../images/menu/icon-16-featured.png); } .menu-fields { background-image: url(../images/menu/icon-16-puzzle.png); } .menu-groups { background-image: url(../images/menu/icon-16-groups.png); } .menu-help { background-image: url(../images/menu/icon-16-help.png); } .menu-help-this { background-image: url(../images/menu/icon-16-help-this.png); } .menu-help-forum { background-image: url(../images/menu/icon-16-help-forum.png); } .menu-help-docs { background-image: url(../images/menu/icon-16-help-docs.png); } .menu-help-jed { background-image: url(../images/menu/icon-16-help-jed.png); } .menu-help-jrd { background-image: url(../images/menu/icon-16-help-jrd.png); } .menu-help-community { background-image: url(../images/menu/icon-16-help-community.png); } .menu-help-security { background-image: url(../images/menu/icon-16-help-security.png); } .menu-help-dev { background-image: url(../images/menu/icon-16-help-dev.png); } .menu-help-shop { background-image: url(../images/menu/icon-16-help-shop.png); } .menu-info { background-image: url(../images/menu/icon-16-info.png); } .menu-install { background-image: url(../images/menu/icon-16-install.png); } .menu-joomlaupdate { background-image: url(../images/menu/icon-16-install.png); } .menu-language { background-image: url(../images/menu/icon-16-language.png); } .menu-levels { background-image: url(../images/menu/icon-16-levels.png); } .menu-logout { background-image: url(../images/menu/icon-16-logout.png); } .menu-maintenance { background-image: url(../images/menu/icon-16-maintenance.png); } .menu-massmail { background-image: url(../images/menu/icon-16-massmail.png); } .menu-media { background-image: url(../images/menu/icon-16-media.png); } .menu-menu { background-image: url(../images/menu/icon-16-menu.png); } .menu-menumgr { background-image: url(../images/menu/icon-16-menumgr.png); } .menu-messages { background-image: url(../images/menu/icon-16-messaging.png); } .menu-messages-add { background-image: url(../images/menu/icon-16-new-privatemessage.png); } .menu-messages-read { background-image: url(../images/menu/icon-16-messages.png); } .menu-module { background-image: url(../images/menu/icon-16-module.png); } .menu-newarticle { background-image: url(../images/menu/icon-16-newarticle.png); } .menu-newcategory { background-image: url(../images/menu/icon-16-newcategory.png); } .menu-newgroup { background-image: url(../images/menu/icon-16-newgroup.png); } .menu-newlevel { background-image: url(../images/menu/icon-16-newlevel.png); } .menu-newuser { background-image: url(../images/menu/icon-16-newuser.png); } .menu-plugin { background-image: url(../images/menu/icon-16-plugin.png); } .menu-profile { background-image: url(../images/menu/icon-16-user.png); } .menu-purge { background-image: url(../images/menu/icon-16-purge.png); } .menu-readmess { background-image: url(../images/menu/icon-16-readmess.png); } .menu-section { background-image: url(../images/menu/icon-16-section.png); } .menu-static { background-image: url(../images/menu/icon-16-static.png); } .menu-stats { background-image: url(../images/menu/icon-16-stats.png); } .menu-themes { background-image: url(../images/menu/icon-16-themes.png); } .menu-trash { background-image: url(../images/menu/icon-16-trash.png); } .menu-user { background-image: url(../images/menu/icon-16-user.png); } .menu-user-note { background-image: url(../images/menu/icon-16-user-note.png); } .menu-delete { background-image: url(../images/menu/icon-16-delete.png); } .menu-help-trans { background-image: url(../images/menu/icon-16-help-trans.png); } .menu-newsfeeds { background-image: url(../images/menu/icon-16-newsfeeds.png); } .menu-newsfeeds-cat { background-image: url(../images/menu/icon-16-newsfeeds-cat.png); } .menu-redirect { background-image: url(../images/menu/icon-16-redirect.png); } .menu-search { background-image: url(../images/menu/icon-16-search.png); } .menu-finder { background-image: url(../images/menu/icon-16-search.png); } .menu-weblinks { background-image: url(../images/menu/icon-16-links.png); } .menu-weblinks-cat { background-image: url(../images/menu/icon-16-links-cat.png); } .menu-tags { background-image: url(../images/menu/icon-16-tags.png); } .menu-postinstall { background-image: url(../images/menu/icon-16-generic.png); } .icon-32-cog { background-image: url(../images/toolbar/icon-32-cog.png); } #menu li a:focus+ul { margin-left: 0; } #menu li li a:focus+ul { margin-left: 1016em; } #menu li li a:focus { margin-left: 1000em; width: 10em; } #menu li li li a:focus { margin-left: 2016em; width: 10em; } #menu li:hover a:focus, #menu li.sfhover a.sffocus { margin-left: 0; } #menu li li:hover a:focus+ul, #menu li li.sfhover a.sffocus+ul { margin-left: 16em; } #sidebar { float: left; margin: 15px 5px; } #submenu { list-style: none; padding: 0; margin: 0; padding-bottom: 2.5em; line-height: 2em; } #submenu ul, #submenu li { display: inline; list-style-type: none; margin: 0; padding: 0; } #submenu li, #submenu span.nolink { float: left; font-weight: bold; margin-right: 8px; padding: 2px 10px 2px 10px; text-decoration: none; cursor: pointer; -moz-border-radius-topright: 3px; -moz-border-radius-topleft: 3px; -webkit-border-top-right-radius: 3px; -webkit-border-top-left-radius: 3px; border-top-right-radius: 3px; border-top-left-radius: 3px; } #submenu span.nolink { color: #999; } #submenu li.active, #submenu span.nolink.active { cursor: default; } #submenu li.active a, #submenu span.nolink.active, #submenu li a:hover, #submenu li a:focus { text-decoration: none; } .red { font-weight: bold; color: #c00; } .pre_message { font-size: 1.3em; } span.update-badge { background-image: -moz-linear-gradient(center bottom,#FF0000 41%,#FC7E7E 79%); background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0.41,#ff0000),color-stop(0.79,#fc7e7e)); border: 2px solid white; border-radius: 1.5em 1.5em 1.5em 1.5em; color: white; display: block; float: left; font-size: 1.2em; font-weight: bold; height: 1.2em; left: 60px; min-width: 1em; padding: 0 0.1em 0; position: relative; top: -88px; } .unotes ul, .unotes ol { list-style: none; list-style-position: inside; padding-left: 0; padding-right: 0; } .unotes div.utitle { padding: 10px; float: left; font-size: 1.2em; line-height: 1.2em; } .unotes h4 { margin-top: 0; margin-bottom: 0; font-size: 1.3em; } .unotes .ubody { padding-left: 10px; padding-right: 10px; font-size: 1.2em; line-height: 1.5em; } .unotes p { padding-bottom: 10px; } div#database-sliders { margin: 10px; } fieldset.uploadform { margin-top: 10px; margin-bottom: 10px; min-height: 200px; } #installer-database, #installer-discover, #installer-update, #installer-warnings { margin-top: 10px; } #installer-database #sidebar { float: none; } #installer-database p.warning { padding-left: 20px; } #installer-database p.nowarning { padding-left: 20px; } .joomlaupdate_spinner { float: left; margin-right: 15px; } .btn-group { position: relative; display: inline-block; } .btn-group + .btn-group { margin-left: 5px; } .btn-group > .btn { position: relative; float: left; margin-left: -1px; } .icon-48-cpanel { height: 50px; width: 50%; } .well { min-height: 20px; padding: 19px; margin-bottom: 20px; background-color: #f5f5f5; border: 1px solid #eee; border: 1px solid rgba(0,0,0,0.05); -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); } .well blockquote { border-color: #ddd; border-color: rgba(0,0,0,0.15); } .well-large { padding: 24px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .well-small { padding: 9px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .list-striped, .row-striped { list-style: none; line-height: 18px; text-align: left; vertical-align: middle; border-top: 1px solid #dddddd; margin-left: 0; font-size: 1.2em; padding: 9px; } .list-striped li, .list-striped dd, .row-striped .row, .row-striped .row-fluid { border-bottom: 1px solid #dddddd; padding: 8px; } .list-striped li:nth-child(odd), .list-striped dd:nth-child(odd), .row-striped .row:nth-child(odd), .row-striped .row-fluid:nth-child(odd) { background-color: #f9f9f9; } .list-striped li:hover, .list-striped dd:hover, .row-striped .row:hover, .row-striped .row-fluid:hover { background-color: #f5f5f5; } .row-striped .row-fluid { width: 100%; box-sizing: border-box; } .row-striped .row-fluid [class*="span"] { min-height: 10px; } .alert { padding: 8px 35px 8px 14px; margin-bottom: 18px; text-shadow: 0 1px 0 rgba(255,255,255,0.5); background-color: #fcf8e3; border: 1px solid #fbeed5; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; color: #c09853; font-size: 120%; } .alert-heading { color: inherit; } .alert .close { position: relative; right: -30px; top: -5px; line-height: 18px; float: right; font-size: 20px; font-weight: bold; } .alert-success { background-color: #dff0d8; border-color: #d6e9c6; color: #468847; } .alert-danger, .alert-error { background-color: #f2dede; border-color: #eed3d7; color: #b94a48; } .alert-info { background-color: #d9edf7; border-color: #bce8f1; color: #3a87ad; } .alert-block { padding-top: 14px; padding-bottom: 14px; } .alert-block > p, .alert-block > ul { margin-bottom: 0; } .alert-block p + p { margin-top: 5px; } .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active { z-index: 2; } .btn-group > .btn { position: relative; float: left; margin-left: -1px; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } table { max-width: 100%; background-color: transparent; border-collapse: collapse; border-spacing: 0; } .table { width: 100%; margin-bottom: 18px; } .tab-content > .tab-pane, .pill-content > .pill-pane { display: none; } .tab-content > .active, .pill-content > .active { display: block; } .tabs-below > .nav-tabs { border-top: 1px solid #ddd; } #status .btn-toolbar, #status p { margin: 0px; } .navbar .btn-group { margin: 0; padding: 5px 5px 6px; } .media .btn { margin: 10px 20px; } .thumbnails > li { list-style: none outside none; float: left; margin-bottom: 18px; margin-left: 20px; } #mediamanager-form { margin: 10px; } .is-tagbox { float: left; } .item-associations { margin: 0; } .item-associations li { list-style: none; display: inline-block; margin: 0 0 3px 0; } .item-associations li a, table.adminlist .item-associations li a { color: #ffffff; } .hidden { display: none; visibility: hidden; } .tooltip { position: absolute; z-index: 1030; display: block; visibility: visible; font-size: 11px; line-height: 1.4; opacity: 0; filter: alpha(opacity=0); } .tooltip.in { opacity: 0.8; filter: alpha(opacity=80); } .tooltip.top { margin-top: -3px; padding: 5px 0; } .tooltip.right { margin-left: 3px; padding: 0 5px; } .tooltip.bottom { margin-top: 3px; padding: 5px 0; } .tooltip.left { margin-left: -3px; padding: 0 5px; } .tooltip-inner { max-width: 200px; padding: 8px; color: #ffffff; text-align: center; text-decoration: none; background-color: #000000; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid; } .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; margin-left: -5px; border-width: 5px 5px 0; border-top-color: #000000; } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-width: 5px 5px 5px 0; border-right-color: #000000; } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-width: 5px 0 5px 5px; border-left-color: #000000; } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-width: 0 5px 5px; border-bottom-color: #000000; } .tooltip { max-width: 400px; } .tooltip-inner { max-width: none; text-align: left; text-shadow: none; } th .tooltip-inner { font-weight: normal; } .tooltip.hasimage { opacity: 1; } fieldset.panelform .tooltip img { float: none; margin: 0; } div.toggle-editor { float: right; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .module-edit { display: inline-block; } .break-word { word-break: break-all; word-wrap: break-word; } .muted { color: #999; } .popover-content { min-height: 33px; } PKb��\�ʶ�{{!templates/hathor/css/boldtext.cssnu�[���@charset "UTF-8"; /** * @package Joomla.Administrator * @subpackage templates.hathor * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 1.6 * * Changes to use bold text as the default */ /** * Default to bold text */ body { font-weight: bold; } PKb��\�r� templates/hathor/css/ie8.cssnu�[���@charset "UTF-8"; /** * @package Joomla.Administrator * @subpackage templates.hathor * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 1.6 * * CSS file for IE8 */ /** * Special Styles for Internet Explorer 8 */ /* Accessibility: css in template.css for slider keyboard * has to be reversed here or the mouse does not work for ie */ .pane-toggler + div.pane-slider { /*display: block;*/ } PKb��\��`���templates/hathor/css/ie7.cssnu�[���@charset "UTF-8"; /** * @package Joomla.Administrator * @subpackage templates.hathor * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 1.6 * * CSS file for IE7 */ /** * Special Styles for Internet Explorer 7 */ input { border-width: expression(this.type == "radio" ? '0px' : this.type == "checkbox" ? '0px' : '1px'); } div.toolbar-box { height: 65px; } div.toolbar-list span { margin: 0; position: relative } div.toolbar-list a { position: relative; } div#subheader { height: 2em; } #login-page .pagetitle h2 { margin: 0px; padding: 0px; } *:first-child+html .clearfix { min-height: 1px; } .menu-links li, .menu-links li label { height: 2em; } div.article-edit, div.category-edit { zoom: 1; } div.pane-sliders, div.panel, div.pane-slider, div.rules-section, div.mypanel, div.containerpg, div.pagination, div.upload-queue { zoom: 1; } div.width-20 fieldset.adminform, div.width-30 fieldset.adminform, div.width-35 fieldset.adminform, div.width-40 fieldset.adminform, div.width-45 fieldset.adminform, div.width-50 fieldset.adminform, div.width-55 fieldset.adminform, div.width-60 fieldset.adminform, div.width-65 fieldset.adminform, div.width-70 fieldset.adminform, div.width-80 fieldset.adminform, div.width-100 fieldset.adminform { zoom: 1; margin-bottom:10px; } div.toggle-editor { margin-top: -5px; margin-bottom: 5px; } table.adminlist { border-bottom-width: 1px; } div.current dd { width: 100%; position: relative; } #permissions-sliders ul#rules table.group-rules caption span { height: 0; overflow: hidden; position: absolute; padding:0; margin:0; } div.current ul.menu-links { zoom: 1; width: 25%; margin: 0; padding:0; list-style-position: inside; } div#position-icon.pane-sliders div.pane-down div.icon-wrapper { margin: 0; } fieldset.panelform fieldset.checkboxes.impunlimited { float: none; width: 170px; } PKb��\���M�Q�Q%templates/hathor/css/template_rtl.cssnu�[���@charset "UTF-8"; /** * @package Joomla.Administrator * @subpackage templates.hathor * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 1.6 * * RTL CSS file for the template */ body { direction: rtl; } h1, h2, h3 { text-align: right; } /** * CSS Reset */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { background-position: transparent none repeat scroll top right; } /* new styles */ /* end new styles */ /** * Overall Styles */ #header h1.title { padding: 0 120px 0 0; } #footer { padding: 10px 20px; } #content { margin: 5px 20px 20px 20px; } .cpanel-page div#element-box { padding: 15px; } /** * Status layout */ #module-status { left: 0; right: none; float: left; } #module-status > span { float: right; padding: 4px 22px 0 20px; } /* background images moved to color css file */ /** * Various Styles */ div.checkin-tick { text-indent: -9999px; } /** * Overlib */ /** * Subheader, toolbar, page title */ div.pagetitle { padding: 0 0 5px 0; background-position: right 50%; line-height: 54px; } .pagetitle h2 { padding: 0 50px 0 0; } div.configuration { padding-right: 30px; margin-right: 10px; } div.toolbar-list { float: right; text-align: left; } div.toolbar-list li { padding: 5px 4px 5px 1px; float: right; } div.toolbar-list li.divider { margin-left: 10px; margin-right: 0; } div.toolbar-list span { margin: 0 auto; } div.toolbar-list a { float: right; padding: 1px 5px; } /** * Massmail component */ /** * Pane Slider pane Toggler styles */ div.pane-sliders { margin-left: 10px; } .pane-toggler span { padding-left: 0; padding-right: 20px; } .pane-toggler-down span { padding-right: 20px; padding-left: 0; } div#position-icon.pane-sliders div.pane-down .icon-wrapper .icon { padding: 5px 10px 5px 0; margin: 0; } /** * Tabs */ dl.tabs { float: right; margin: 10px 0 -1px 0; } dl.tabs dt { float: right; padding: 4px 10px; margin-right: 3px; } div.current { padding: 10px 10px; } /* New parameter styles (check rtl) */ dl#content-pane.tabs { margin: 1px 0 0 0; } div.current label, div.current span.faux-label { float:right; clear:right; } div.current fieldset.radio { float:right; } div.current fieldset.radio input { float:right; margin: 3px 2px 0 0; } div.current fieldset.radio label { float:right; margin: 3px 2px 0 0; } div.current fieldset.checkboxes { float:right; clear:left; } div.current fieldset.checkboxes input { float:right; clear:right; margin: 3px 2px 0 0; } div.current fieldset.checkboxes label { clear:left; margin: 3px 2px 0 0; } div.current input, div.current span.faux-input, div.current textarea, div.current select { float:right; margin: 3px 2px 0 0; } div.current table#acl-config th.acl-groups { text-align: right; } div.current table#filter-config th.acl-groups { text-align: right; } /* -------- Menu Assigments ---------- */ div#menu-assignment { clear:right; } div#menu-assignment ul.menu-links { float:right; } div#menu-assignment h3 { clear:right; } div#menu-assignment ul.menu-links li.menu-link label { float: right; margin: 3px 2px 0 0; } div#menu-assignment ul.menu-links li.menu-link input { clear: right; float: right; } p.tab-description { margin-right: 0; } /* end new parameter styles */ /** * Login Settings */ #login-page input, #login-page select { float: left; } #login-page .login { margin: 0 auto; } #login-page .pagetitle h2 { margin: -70px 0 30px 0; } #login-page .login-inst { float: right; } #login-page .login-box { float: left; } #login-page .button { text-align: left; } #login-page .login-text { text-align: right; float: right; } #form-login { float: left; } #form-login label { float: right; clear: right; text-align: left; } #form-login div.button1 div.next { float: right; } #form-login div.button1 a { padding: 0 15px 0 15px; /* padding: 0 6px 0 30px; use this if you use images */ } /** * Cpanel Settings */ .cpanel div.icon , #cpanel div.icon { margin-left: 5px; float: right; } .cpanel div.icon a , #cpanel div.icon a { float: right; } .cpanel img , #cpanel img { padding: 10px 0; margin: 0 auto; } div.cpanel-icons { float: right; } div.cpanel-component { float: left; } /** * Standard Layout Styles */ div.col { float: right; } div.options-section.col { float: left; } div.col1 { float: right; } div.col2 { float: left; } /* Avoid using the width divs. They are here for 3PD Extensions if needed * Use the specific layout divs listed after. See also the th.width entries */ .clrlft { clear: right; } .clrrt { clear: left; } .fltlft { float: right; } .fltrt { float: left; } .fltnone { float: none; } /* Layout Divs */ div.options-section { margin: 10px 0 10px 10px; } /* for bluestork style html */ div.width-40.fltrt { margin: 10px 0 10px 10px; } /** * Form Styles */ fieldset { margin: 2px 10px 2px 10px; text-align: right; } fieldset p { margin: 10px 0; } /* new form fields (check rtl) */ fieldset.adminform fieldset.radio, fieldset.panelform fieldset.radio, fieldset.adminform-legacy fieldset.radio { float:right; margin: 0 0 5px 0; clear:left; } fieldset.adminform fieldset.radio label, fieldset.panelform fieldset.radio label, fieldset.adminform fieldset.radio span.faux-label, fieldset.panelform fieldset.radio span.faux-label { float:right; } fieldset.panelform-legacy label, fieldset.adminform-legacy label, fieldset.panelform-legacy span.faux-label, fieldset.adminform-legacy span.faux-label { float:right; } /* JParameter classes on radio button labels */ p.jform_desc { clear: right; } fieldset ul.checklist { margin-right: 27px; margin-left: 0; } fieldset#filter-bar { margin: 0; padding: 5px 10px 5px 10px; } fieldset#filter-bar ol, fieldset#filter-bar ul { padding: 5px 0 0; } fieldset#filter-bar ol li, fieldset#filter-bar ul li { float: right; padding: 0 0 0 5px; } fieldset#filter-bar .filter-search { float: right; } fieldset#filter-bar .filter-select { float: left; } /* Note: these visual cues should be augmented by aria */ /* must be augmented by aria at the same time if changed dynamically by js aria-invalid=true or aria-invalid=false */ /* augmented by aria in template javascript */ span.readonly { float: right; } div.extdescript { margin-right: 10px; } input[type="button"] { padding: 1px 6px; } /** * Option or Parameter styles */ /* end from alpha2 */ span.gi { margin-left: 5px; } /** * Admintable Styles */ table.admintable td.key,table.admintable td.paramlist_key { text-align: left; } table.paramlist td.paramlist_description { text-align: right; } /** * Admin Form Styles */ fieldset.adminform { margin: 0 10px 10px 10px; } fieldset.adminform .input-prepend, fieldset.adminform .input-append, fieldset.panelform .input-prepend, fieldset.panelform .input-append { float: right; } fieldset.adminform .adminformlist .btn.modal, fieldset.adminform .input-prepend > *, fieldset.adminform .input-append > *, fieldset.panelform .adminformlist .btn.modal, fieldset.panelform .input-prepend > *, fieldset.panelform .input-append > * { float: none; vertical-align: middle; } /* Table styles are for use with tabular data */ table.adminform { margin: 8px 0 10px 0; } table.adminform th { padding: 6px 4px 4px 2px; text-align: right; } table.adminform td { text-align: right; } table.adminform td#filter-bar { text-align: right; } table.adminform td.helpMenu { text-align: left; } table.adminform tr { padding-right: 10px; padding-left: 10px; border-left: 1px solid #c7c8b2; border-right: none; } /** * Table formating styles */ /* Avoid using the width classes. They are here for 3PD Extensions if needed * Use the specific layout table headers listed after. See also the div.width entries */ /* Table header layout classes */ th.ordering-col a { float:right; margin-right: 3px; } th.ordering-col a img { margin-right: 4px; margin-left: 4px; } /** * Adminlist Table layout */ table.adminlist { float: right; } /* Table row styles */ table.adminlist tr { padding-left: 30px; padding-right: 30px; } table.adminlist tbody tr { text-align: right; } /* Table td/th styles */ table.adminlist td.order span { float: right; } /** * Tree indentation & nesting - Up to 10 levels deep so don't go crazy : */ table.adminlist td.indent-4 { padding-right:4px; } table.adminlist td.indent-19 { padding-right:19px; } table.adminlist td.indent-34 { padding-right:34px; } table.adminlist td.indent-49 { padding-right:49px; } table.adminlist td.indent-64 { padding-right:64px; } table.adminlist td.indent-79 { padding-right:79px; } table.adminlist td.indent-94 { padding-right:94px; } table.adminlist td.indent-109 { padding-right:109px; } table.adminlist td.indent-124 { padding-right:124px; } table.adminlist td.indent-139 { padding-right:139px; } /** * Adminlist buttons */ table.adminlist tr td.btns a { padding: 3px 20px; } /** * Modal Modules styles */ ul#new-modules-list { margin-right: 50px; margin-left: 0; } /** * Utility styles */ /* General Clearing Class */ .menu-module-list { padding-right: 10px; margin-right: 5px; } /* stu nicholls solution for centering divs */ /* table solution for global config */ table.noshow fieldset { margin: 15px 7px 7px 7px; } /** * Saving order icon styling in admin tables */ a.saveorder { float:left; margin-left: 8px; } /** * Button styling */ #editor-xtd-buttons { padding: 5px; } /* Button 1 Type */ .button1,.button1 div { float: left; } /* Use this if you add images to the buttons such as directional arrows */ .button1 a { float: right; padding: 0 6px 0 6px; } /* Button 2 Type */ .button2-left,.button2-right { float: right; } .button2-left a, .button2-right a, .button2-left span, .button2-right span { float: right; } /* these are inactive buttons */ .button2-left .page a, .button2-right .page a, .button2-left .page span, .button2-right .page span, .button2-left .blank a, .button2-right .blank a, .button2-left .blank span, .button2-right .blank span { padding: 0 6px; } .button2-left a,.button2-left span { padding: 0 6px 0 24px; } .button2-right a,.button2-right span { padding: 0 24px 0 6px; } .button2-left { float: right; margin-right: 5px; } .button2-right { float: right; margin-right: 5px; } /* background images moved to the color rtl css file */ /** * Pagination styles */ /* Normal pagination styles */ div.containerpg { position: relative; right: 50%; float: right; clear: right; } div.pagination { right: -50%; margin: 0 auto; } .pagination a { line-height: 1.6em; } .pagination div.limit { float: right; margin: 0 10px; } /* The Go submittal button */ .pagination button { margin-left: 20px; } /* Style if pagination is part of the table (old style) */ table.adminlist .pagination { margin: 0 auto; } table.adminlist .pagination button { margin-left: 20px; } /** * Pagination styles */ /* Normal pagination styles */ div.containerpg { right: 50%; float: right; clear: right; } div.pagination { right: -50%; margin: 0 auto; } .pagination div.limit { float: right; margin: 0 10px; } /* The Go submittal button */ .pagination button { margin-left: 20px; } /* Grey out the current page number */ /* Style if pagination is part of the table (old style) */ table.adminlist .pagination button { margin-left: 20px; } /** * MCE Editor */ div.toggle-editor { } /** * Tooltips */ .tip-text { text-align: right; } /** * Calendar */ a img.calendar { margin-right: 3px; } /** * General styles */ .helpFrame { padding: 0 10px 0 5px; } #treecellhelp { float: right; } #datacellhelp { float: right; padding: 2px 0 0 0; } /* -- MODAL STYLES ----------- */ div#sbox-window { text-align: right; } h2.modal-title { margin: 5px 15px 0 0; } ul.menu_types { padding: 0 15px 0 0; } ul.menu_types li, dl.menu_type dd ul li { float:right; margin-left: 10px; margin-right: 0; } dl.menu_type dt { float:right; margin: 13px 0 5px 0; } dl.menu_type dd { clear:right; } dl.menu_type dd ul li { margin: 0; } dl.menu_type dd ul { margin: 0; } ul#new-modules-list { padding: 5px 15px 0 0; margin: 0; } ul#new-modules-list li { float:right; margin: 0 0 0 20px; } /** * User Accessibility */ /* Skip to Content Structural Styling */ #skiplinkholder a, #skiplinkholder a:link, #skiplinkholder a:visited { left: 0; right: -200%; } #skiplinkholder a:focus, #skiplinkholder a:active { right: 0; top: 0; } #skiplinkholder p { margin: 0; } #skiptargetholder { left: 0; right: -200%; } /* Skip to Content Visual Styling */ #skiplinkholder a, #skiplinkholder a:link, #skiplinkholder a:visited { padding-left: 20px; padding-right: 20px; } /* For elements that aren't to be seen by users unless the user does something * like clicking on a header to see the collapsed section. */ /* For elements that aren't to be seen by visual users but do need to be read by screenreaders. * Cannot be used for elements that can get focus such as links and form elements */ /* Firefox has issues styling legend so this is a universal fix for making the legend invisible (i.e. visually it's not there, but screen readers see it */ legend.element-invisible { /*margin: 0; margin-right: -10000px; */ } fieldset.adminform label, fieldset.panelform label, fieldset.adminform span.faux-label, fieldset.panelform span.faux-label { clear:right; float:right; margin-right: 10px; margin-left: 5px; } fieldset.adminform fieldset.radio label, fieldset.panelform fieldset.radio label, fieldset.adminform fieldset.radio span.faux-label, fieldset.panelform fieldset.radio span.faux-label { margin-right: 0; } /* checkboxes */ fieldset.adminform fieldset.checkboxes, fieldset.panelform fieldset.checkboxes, fieldset.adminform-legacy fieldset.checkboxes { float:right; margin: 0 0 5px 0; clear:left; } fieldset.adminform fieldset.checkboxes input[type="checkbox"], fieldset.panelform fieldset.checkboxes input[type="checkbox"] { float: right; clear: right; } fieldset.adminform fieldset.checkboxes label, fieldset.panelform fieldset.checkboxes label, fieldset.adminform fieldset.checkboxes span.faux-label, fieldset.panelform fieldset.checkboxes span.faux-label { clear: left; } /* end checkboxes */ fieldset.adminform input, fieldset.adminform span.faux-input, fieldset.adminform textarea, fieldset.adminform select, fieldset.adminform img, fieldset.adminform button, fieldset.panelform input, fieldset.panelform span.faux-input, fieldset.panelform textarea, fieldset.panelform select, fieldset.panelform img, fieldset.panelform button { float:right; margin:5px 0 5px 5px; } /* -------- Batch Section ---------- */ fieldset#batch-choose-action { clear:none; clear: right; } fieldset.batch label { float: right; clear: none; } fieldset label#batch-choose-action-lbl { clear: none; clear: right; } label#batch-language-lbl, label#batch-user-lbl { clear: right; margin-left: 10px; margin-right: 0; margin-top: 15px; } select#batch-language-id, select#batch-user-id { margin-top: 15px; } select#batch-category-id, select#batch-menu-id, select#batch-position-id { margin-left: 30px; margin-right: 0; } fieldset.batch select, fieldset.batch input, fieldset.batch img, fieldset.batch button { float: right; } label#batch-access-lbl, label#batch-client-lbl { margin-right: 0; margin-left: 10px; } /* Banner edit */ /* -- ACL STYLES relocated from com_users/media/grid.css ----------- */ /* -- ACL PANEL STYLES ----------- */ /* All Tabs */ td.col1 { text-align:right; } /* Icons */ label.icon-16-allow, label.icon-16-deny, a.icon-16-allow, a.icon-16-deny, a.icon-16-allowinactive, a.icon-16-denyinactive { margin: 0 auto; } label.icon-16-allow { right: 40%; } label.icon-16-deny { right: 40%; } ul.acllegend li { float: right; padding-left: 20px; margin: 15px 10px 15px 0; } ul.acllegend li.acl-allowed { padding-right: 20px; padding-left: 10px; } ul.acllegend li.acl-denied { padding-right: 20px; padding-left: 20px; } ul.acllegend li.acl-editgroups { padding-left: 10px; } ul.acllegend li.acl-resetbtn { padding-left: 0; } li.acl-editgroups, li.acl-resetbtn { float: right; } table#acl-config th.acl-groups { padding-right: 8px; } table#acl-config th.acl-groups { text-align: right; } .acl-action { margin: auto 0; } /* Icons */ span.icon-16-unset, span.icon-16-allowed, span.icon-16-denied, span.icon-16-locked { padding-left: 0; padding-right: 18px; } /* * * Permission Rules */ #permissions-sliders ul#rules, #permissions-sliders ul#rules ul { margin: 0 !important; padding: 0 !important; } #permissions-sliders ul#rules li { margin: 0; padding: 0; } #permissions-sliders ul#rules table.group-rules td { padding:4px; vertical-align:middle; text-align:right; } #permissions-sliders .panel { margin-bottom: 3px; margin-right: 0; } ul#rules table.group-rules td label { margin: 0 !important; } table.group-rules td select { margin: 0 !important; } #permissions-sliders ul#rules .mypanel { padding: 0; } #permissions-sliders ul#rules { padding: 5px; } #permissions-sliders ul#rules table.group-rules th { text-align: right; padding: 4px; } #permissions-sliders .pane-toggler span { padding-left: 0; padding-right: 20px; } #permissions-sliders .pane-toggler-down span { padding-left: 0; padding-right: 20px; } /** * Helpmenus */ ul.helpmenu li { float: left; } /** * Menu Styling */ #menu a { padding: 0.35em 2em 0.35em 2.5em; } #menu li { float: right; } #menu li ul { /* second-level lists */ margin-right: -1000em; /* using right instead of display to hide menus because display: none isn't read by screen readers */ } #menu li ul ul { /* third-and-above-level lists */ margin: -2.3em -1000em 0 0; /* top margin is equal to parent line height+bottom padding */ } #menu li:hover ul ul,#menu li.sfhover ul ul { margin-right: -1000em; } #menu li:hover ul,#menu li.sfhover ul { /* lists nested under hovered list items */ margin-right: 0; } #menu li li:hover ul,#menu li li.sfhover ul { margin-right: 16em; } /** * Extra positioning rules for limited noscript keyboard accessibility * need the backgrounds here to keep the background as the nav background * since it is overlaying other content. * Using margin-left instead of left so that can move back without javascript * display downlevel ul */ #menu li a:focus+ul { margin-right: 0; } #menu li li a:focus+ul { margin-right: 1016em; } /* bring back the focus elements into view */ #menu li li a:focus { margin-right: 1000em; } #menu li li li a:focus { margin-right: 2016em; } #menu li:hover a:focus,#menu li.sfhover a.sffocus { margin-right: 0; } #menu li li:hover a:focus+ul,#menu li li.sfhover a.sffocus+ul { margin-right: 16em; } /** * Submenu styling */ #submenu a, #submenu span.nolink { float: right; margin-left: 8px; padding: 2px 10px 2px 10px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-left-radius: 3px; -webkit-border-top-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; } /* Installer Database */ #installer-database p.warning { padding-left: 0; padding-right: 20px } #installer-database #sidebar { float: none } #installer-database p.nowarning { padding-left: 0; padding-right: 20px } p.nowarning { float: none; margin-left: 0; margin-right: 15px; } table.adminlist tfoot button { float: right; } /* Spinner */ .joomlaupdate_spinner { float: right; margin-left: 15px; } /* Various corrections */ [class*="span"] { float: none; margin-left: 0; margin-right: 0; } #sidebar { float:right; margin: 15px 0; } #submenu li, #submenu span.nolink { float: right; } div.btn-toolbar { float: right; text-align: right; } .btn-group { float: right; margin-right: 10px; } #module-status div.btn-group { float: right; } .nav-tabs > li, .nav-pills > li { float: none; } .tabs-left > .nav-tabs { border-right: 0 solid #DDDDDD; float: right; margin-right: 19px; } .list-striped, .row-striped { text-align: right; } .row-fluid [class*="span"] { float: none; } .media .btn { float: none; } .media { float:none; margin: 10px 20px; } .alert .close { right: 5px; float: left; } .popover, .tooltip-inner { text-align: right; } div.toggle-editor { float: left; } #editor-xtd-buttons .btn { float: right; } div.toggle-editor { margin-top: 14px; } .modal-footer button { float: left; } #form-login { float: right; }PKb��\{{{S�S�(templates/hathor/css/colour_standard.cssnu�[���.clearfix { *zoom: 1; } .clearfix:before, .clearfix:after { display: table; content: ""; line-height: 0; } .clearfix:after { clear: both; } .hide-text { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .input-block-level { display: block; width: 100%; min-height: 25px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } #form-login .btn { display: inline-block; *display: inline; *zoom: 1; padding: 4px 14px; margin-bottom: 0; font-size: 13px; line-height: 15px; *line-height: 15px; text-align: center; vertical-align: middle; cursor: pointer; color: #333333; text-shadow: 0 1px 1px rgba(255,255,255,0.75); background-color: #f5f5f5; background-image: -moz-linear-gradient(top,#ffffff,#e6e6e6); background-image: -webkit-gradient(linear,0 0,0 100%,from(#ffffff),to(#e6e6e6)); background-image: -webkit-linear-gradient(top,#ffffff,#e6e6e6); background-image: -o-linear-gradient(top,#ffffff,#e6e6e6); background-image: linear-gradient(to bottom,#ffffff,#e6e6e6); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe5e5e5', GradientType=0); border-color: #e6e6e6 #e6e6e6 #bfbfbf; *background-color: #e6e6e6; filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); border: 1px solid #bbb; *border: 0; border-bottom-color: #a2a2a2; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; *margin-left: .3em; -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); } #form-login .btn:hover, #form-login .btn:focus, #form-login .btn:active, #form-login .btn.active, #form-login .btn.disabled, #form-login .btn[disabled] { color: #333333; background-color: #e6e6e6; *background-color: #d9d9d9; } #form-login .btn:active, #form-login .btn.active { background-color: #cccccc \9; } #form-login .btn:first-child { *margin-left: 0; } #form-login .btn:hover { color: #333333; text-decoration: none; background-color: #e6e6e6; *background-color: #d9d9d9; background-position: 0 -15px; -webkit-transition: background-position .1s linear; -moz-transition: background-position .1s linear; -o-transition: background-position .1s linear; transition: background-position .1s linear; } #form-login .btn:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } #form-login .btn.active, #form-login .btn:active { background-color: #e6e6e6; background-color: #d9d9d9 \9; background-image: none; outline: 0; -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); } #form-login .btn.disabled, #form-login .btn[disabled] { cursor: default; background-color: #e6e6e6; background-image: none; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .btn-large { padding: 9px 14px; font-size: 15px; line-height: normal; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .btn-large [class^="icon-"] { margin-top: 2px; } .input-append input[class*="span"], .input-append .uneditable-input[class*="span"], .input-prepend input[class*="span"], .input-prepend .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"], .row-fluid .input-prepend [class*="span"], .row-fluid .input-append [class*="span"] { display: inline-block; } .input-append, .input-prepend { margin-bottom: 5px; font-size: 0; white-space: nowrap; } .input-append input, .input-append select, .input-append .uneditable-input, .input-prepend input, .input-prepend select, .input-prepend .uneditable-input { position: relative; margin-bottom: 0; *margin-left: 0; font-size: 13px; vertical-align: top; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-append input:focus, .input-append select:focus, .input-append .uneditable-input:focus, .input-prepend input:focus, .input-prepend select:focus, .input-prepend .uneditable-input:focus { z-index: 2; } .input-append .add-on, .input-prepend .add-on { display: inline-block; width: auto; height: 15px; min-width: 16px; padding: 4px 5px; font-size: 13px; font-weight: normal; line-height: 15px; text-align: center; text-shadow: 0 1px 0 #ffffff; background-color: #eeeeee; border: 1px solid #ccc; } .input-append .add-on, .input-append .btn, .input-prepend .add-on, .input-prepend .btn { margin-left: -1px; vertical-align: top; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-append .active, .input-prepend .active { background-color: #a9dba9; border-color: #46a546; } .input-prepend .add-on, .input-prepend .btn { margin-right: -1px; } .input-prepend .add-on:first-child, .input-prepend .btn:first-child { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append input, .input-append select, .input-append .uneditable-input { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append .add-on:last-child, .input-append .btn:last-child { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend.input-append input, .input-prepend.input-append select, .input-prepend.input-append .uneditable-input { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-prepend.input-append .add-on:first-child, .input-prepend.input-append .btn:first-child { margin-right: -1px; -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-prepend.input-append .add-on:last-child, .input-prepend.input-append .btn:last-child { margin-left: -1px; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .form-search .input-append .search-query, .form-search .input-prepend .search-query { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .form-search .input-append .search-query { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .form-search .input-append .btn { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .search-query { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .btn { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .form-search input, .form-search textarea, .form-search select, .form-search .help-inline, .form-search .uneditable-input, .form-search .input-prepend, .form-search .input-append, .form-inline input, .form-inline textarea, .form-inline select, .form-inline .help-inline, .form-inline .uneditable-input, .form-inline .input-prepend, .form-inline .input-append, .form-horizontal input, .form-horizontal textarea, .form-horizontal select, .form-horizontal .help-inline, .form-horizontal .uneditable-input, .form-horizontal .input-prepend, .form-horizontal .input-append { display: inline-block; *display: inline; *zoom: 1; margin-bottom: 0; vertical-align: middle; } .form-search .hide, .form-inline .hide, .form-horizontal .hide { display: none; } .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend { margin-bottom: 0; } .element-invisible { position: absolute; padding: 0 !important; margin: 0 !important; border: 0; height: 1px; width: 1px !important; overflow: hidden; } #form-login select, #form-login input[type="text"], #form-login input[type="password"] { display: inline-block; padding: 4px 6px; margin-bottom: 9px; font-size: 13px; line-height: 15px; color: #555555; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; width: 175px; } .subform-repeatable-wrapper div.btn-toolbar { float: none; } .subform-repeatable-wrapper .text-right { text-align: right; } .subform-repeatable-wrapper .ui-sortable-helper { background: #ffffff; } .subform-repeatable-wrapper tr.ui-sortable-helper { display: table; } .subform-repeatable-wrapper .subform-repeatable-group { clear: both; } .label, .badge { display: inline-block; padding: 2px 4px; font-size: 10.998px; font-weight: bold; line-height: 14px; color: #ffffff; vertical-align: baseline; white-space: nowrap; text-shadow: 0 -1px 0 rgba(0,0,0,0.25); background-color: #999999; } .label { -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .badge { padding-left: 9px; padding-right: 9px; -webkit-border-radius: 9px; -moz-border-radius: 9px; border-radius: 9px; } .label:empty, .badge:empty { display: none; } a.label:hover, a.label:focus, a.badge:hover, a.badge:focus { color: #ffffff; text-decoration: none; cursor: pointer; } .label-important, .badge-important { background-color: #a20000; } .label-important[href], .badge-important[href] { background-color: #6f0000; } .label-warning, .badge-warning { background-color: #f89406; } .label-warning[href], .badge-warning[href] { background-color: #c67605; } .label-success, .badge-success { background-color: #005800; } .label-success[href], .badge-success[href] { background-color: #002500; } .label-info, .badge-info { background-color: #3a87ad; } .label-info[href], .badge-info[href] { background-color: #2d6987; } .label-inverse, .badge-inverse { background-color: #333333; } .label-inverse[href], .badge-inverse[href] { background-color: #1a1a1a; } .btn .label, .btn .badge { position: relative; top: -1px; } .btn-mini .label, .btn-mini .badge { top: 0; } body { background-color: #ffffff; color: #2c2c2c; } h1 { color: #2c2c2c; } a:link { color: #054993; } a:visited { color: #054993; } #header { background: #ffffff url(../images/j_logo.png) no-repeat; } #header h1.title { color: #2c2c2c; } #nav { background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); border: 1px solid #c7c8b2; } #content { background: #ffffff; } #no-submenu { border-bottom: 1px solid #c7c8b2; } #element-box { background: #ffffff; border-right: 1px solid #c7c8b2; border-bottom: 1px solid #c7c8b2; border-left: 1px solid #c7c8b2; } #element-box.login { border-top: 1px solid #c7c8b2; } .enabled, .success, .allow, span.writable { color: #005800; } .disabled, p.error, .warning, .deny, span.unwritable { color: #a20000; } .nowarning { color: #2c2c2c; } .none, .protected { color: #c7c8b2; } span.note { background: #ffffff; color: #2c2c2c; } div.checkin-tick { background: url(../images/admin/tick.png) 20px 50% no-repeat; } .ol-foreground { background-color: #f9fade; } .ol-background { background-color: #005800; } .ol-textfont { color: #2c2c2c; } .ol-captionfont { color: #ffffff; } .ol-captionfont a { color: #054993; } div.subheader .padding { background: #ffffff; } .pagetitle h2 { color: #2c2c2c; } div.configuration { color: #2c2c2c; background-image: url(../images/menu/icon-16-config.png); background-repeat: no-repeat; } div.toolbar-box { border-right: 1px solid #c7c8b2; border-bottom: 1px solid #c7c8b2; border-left: 1px solid #c7c8b2; background: #ffffff; } div.toolbar-list li { color: #2c2c2c; } div.toolbar-list li.divider { border-right: 1px dotted #e5d9c3; } div.toolbar-list a { border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #c7c8b2; border-bottom: 1px solid #c7c8b2; background: #f9fade; } div.toolbar-list a:hover { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; background: #e5d9c3; color: #054993; } div.btn-toolbar { margin-left: 5px; padding-top: 3px; } div.btn-toolbar li.divider { border-right: 1px dotted #e5d9c3; } div.btn-toolbar div.btn-group button { border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #c7c8b2; border-bottom: 1px solid #c7c8b2; background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); padding: 5px 4px 5px 4px; } div.btn-toolbar div.btn-group button:hover { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; background: #e5d9c3; color: #054993; cursor: pointer; } div.btn-toolbar a { border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #c7c8b2; border-bottom: 1px solid #c7c8b2; background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); padding: 6px 5px; text-align: center; white-space: nowrap; font-size: 1.2em; text-decoration: none; } div.btn-toolbar a:hover { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; background: #e5d9c3; color: #054993; cursor: pointer; } div.btn-toolbar div.btn-group button.inactive { background: #f9fade; } .pane-sliders .title { color: #2c2c2c; } .pane-sliders .panel { border: 1px solid #c7c8b2; } .pane-sliders .panel h3 { background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); color: #054993; } .pane-sliders .panel h3:hover { background: #e5d9c3; } .pane-sliders .panel h3:hover a { text-decoration: none; } .pane-sliders .adminlist { border: 0 none; } .pane-sliders .adminlist td { border: 0 none; } .pane-toggler span { background: transparent url(../images/j_arrow.png) 5px 50% no-repeat; } .pane-toggler-down span { background: transparent url(../images/j_arrow_down.png) 5px 50% no-repeat; } .pane-toggler-down { border-bottom: 1px solid #c7c8b2; } dl.tabs dt { border: 1px solid #c7c8b2; background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); color: #054993; } dl.tabs dt:hover { background: #e5d9c3; } dl.tabs dt.open { background: #ffffff; border-bottom: 1px solid #ffffff; color: #2c2c2c; } dl.tabs dt.open a:visited { color: #2c2c2c; } dl.tabs dt a:hover { text-decoration: none; } dl.tabs dt a:focus { text-decoration: underline; } div.current { border: 1px solid #c7c8b2; background: #ffffff; } div.current fieldset { border: none 0; } div.current fieldset.adminform { border: 1px solid #c7c8b2; } #login-page .pagetitle h2 { background: transparent; } #login-page #header { border-bottom: 1px solid #c7c8b2; } #login-page #lock { background: url(../images/j_login_lock.png) 50% 0 no-repeat; } #login-page #element-box.login { background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); } #form-login { background: #ffffff; border: 1px solid #c7c8b2; } #form-login label { color: #2c2c2c; } #form-login div.button1 a { color: #054993; } #cpanel div.icon a, .cpanel div.icon a { color: #054993; border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #c7c8b2; border-bottom: 1px solid #c7c8b2; background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); } #cpanel div.icon a:hover, #cpanel div.icon a:focus, .cpanel div.icon a:hover, .cpanel div.icon a:focus { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; color: #054993; background: #e5d9c3; } fieldset { border: 1px #c7c8b2 solid; } legend { color: #2c2c2c; } fieldset ul.checklist input:focus { outline: thin dotted #2c2c2c; } fieldset#filter-bar { border-top: 0 solid #c7c8b2; border-right: 0 solid #c7c8b2; border-bottom: 1px solid #c7c8b2; border-left: 0 solid #c7c8b2; } fieldset#filter-bar ol, fieldset#filter-bar ul { border: 0; } fieldset#filter-bar ol li fieldset, fieldset#filter-bar ul li fieldset { border: 0; } .invalid { color: #a20000; } input.invalid { border: 1px solid #a20000; } input.readonly, span.faux-input { border: 0; } input.required { background-color: #e5f0fa; } input.disabled { background-color: #eeeeee; } input, select, span.faux-input { background-color: #ffffff; border: 1px solid #c7c8b2; } input[type="button"], input[type="submit"], input[type="reset"] { color: #054993; background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); } input[type="button"]:hover, input[type="button"]:focus, input[type="submit"]:hover, input[type="submit"]:focus, input[type="reset"]:hover, input[type="reset"]:focus { background: #e5d9c3; } textarea { background-color: #ffffff; border: 1px solid #c7c8b2; } input:focus, select:focus, textarea:focus, option:focus, input:hover, select:hover, textarea:hover, option:hover { background-color: #e5d9c3; color: #054993; } .paramrules { background: #f9fade; } span.gi { color: #c7c8b2; } table.admintable td.key, table.admintable td.paramlist_key { background-color: #f9fade; color: #2c2c2c; border-bottom: 1px solid #c7c8b2; border-right: 1px solid #c7c8b2; } table.paramlist td.paramlist_description { background-color: #f9fade; color: #2c2c2c; border-bottom: 1px solid #c7c8b2; border-right: 1px solid #c7c8b2; } fieldset.adminform { border: 1px solid #c7c8b2; } table.adminform { background-color: #ffffff; } table.adminform tr.row0 { background-color: #ffffff; } table.adminform tr.row1 { background-color: #e5d9c3; } table.adminform th { color: #2c2c2c; background: #ffffff; } table.adminform tr { border-bottom: 1px solid #c7c8b2; border-right: 1px solid #c7c8b2; } table.adminlist { border-spacing: 1px; background-color: #ffffff; color: #2c2c2c; } table.adminlist.modal { border-top: 1px solid #c7c8b2; border-right: 1px solid #c7c8b2; border-left: 1px solid #c7c8b2; } table.adminlist a { color: #054993; } table.adminlist thead th { background: #ffffff; color: #2c2c2c; border-bottom: 1px solid #c7c8b2; } table.adminlist tbody tr { background: #ffffff; } table.adminlist tbody tr.row1 { background: #ffffff; } table.adminlist tbody tr.row1:last-child td, table.adminlist tbody tr.row1:last-child th { border-bottom: 1px solid #c7c8b2; } table.adminlist tbody tr.row0:hover td, table.adminlist tbody tr.row1:hover td, table.adminlist tbody tr.row0:hover th, table.adminlist tbody tr.row1:hover th, table.adminlist tbody tr.row0:focus td, table.adminlist tbody tr.row1:focus td, table.adminlist tbody tr.row0:focus th, table.adminlist tbody tr.row1:focus th { background-color: #e5d9c3; } table.adminlist tbody tr td, table.adminlist tbody tr th { border-right: 1px solid #c7c8b2; } table.adminlist tbody tr td:last-child { border-right: none; } table.adminlist tbody tr.row0:last-child td, table.adminlist tbody tr.row0:last-child th { border-bottom: 1px solid #c7c8b2; } table.adminlist tbody tr.row0 td, table.adminlist tbody tr.row0 th { background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); } table.adminlist { border-bottom: 0 solid #c7c8b2; } table.adminlist tfoot tr { color: #2c2c2c; } table.adminlist tfoot td, table.adminlist tfoot th { background-color: #ffffff; border-top: 1px solid #c7c8b2; } table.adminlist tr td.btns a { border: 1px solid #c7c8b2; background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); color: #054993; } table.adminlist tr td.btns a:hover, table.adminlist tr td.btns a:active, table.adminlist tr td.btns a:focus { background-color: #ffffff; } a.saveorder { background: url(../images/admin/filesave.png) no-repeat; } a.saveorder.inactive { background-position: 0 -16px; } fieldset.batch { background: #ffffff; } button { color: #054993; border: 1px solid #c7c8b2; background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); } button:hover, button:focus { background: #e5d9c3; } .invalid { color: #ff0000; } .button1 { border: 1px solid #c7c8b2; color: #054993; background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); } .button1 a { color: #054993; } .button1 a:hover, .button1 a:focus { background: #e5d9c3; } .button2-left, .button2-right { border: 1px solid #c7c8b2; background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); } .button2-left a, .button2-right a, .button2-left span, .button2-right span { color: #054993; } .button2-left span, .button2-right span { color: #999999; } .page span, .blank span { color: #054993; } .button2-left a:hover, .button2-right a:hover, .button2-left a:focus, .button2-right a:focus { background: #e5d9c3; } .pagination .page span { color: #999999; } .tip { background: #000000; border: 1px solid #FFFFFF; } .tip-title { background: url(../images/selector-arrow-std.png) no-repeat; } a img.calendar { background: url(../images/calendar.png) no-repeat; } .jgrid span.publish { background-image: url(../images/admin/tick.png); } .jgrid span.unpublish { background-image: url(../images/admin/publish_x.png); } .jgrid span.archive { background-image: url(../images/menu/icon-16-archive.png); } .jgrid span.trash { background-image: url(../images/menu/icon-16-trash.png); } .jgrid span.default { background-image: url(../images/menu/icon-16-default.png); } .jgrid span.notdefault { background-image: url(../images/menu/icon-16-notdefault.png); } .jgrid span.checkedout { background-image: url(../images/admin/checked_out.png); } .jgrid span.downarrow { background-image: url(../images/admin/downarrow.png); } .jgrid span.downarrow_disabled { background-image: url(../images/admin/downarrow0.png); } .jgrid span.uparrow { background-image: url(../images/admin/uparrow.png); } .jgrid span.uparrow_disabled { background-image: url(../images/admin/uparrow0.png); } .jgrid span.published { background-image: url(../images/admin/publish_g.png); } .jgrid span.expired { background-image: url(../images/admin/publish_r.png); } .jgrid span.pending { background-image: url(../images/admin/publish_y.png); } .jgrid span.warning { background-image: url(../images/admin/publish_y.png); } .icon-32-send { background-image: url(../images/toolbar/icon-32-send.png); } .icon-32-delete { background-image: url(../images/toolbar/icon-32-delete.png); } .icon-32-help { background-image: url(../images/toolbar/icon-32-help.png); } .icon-32-cancel { background-image: url(../images/toolbar/icon-32-cancel.png); } .icon-32-checkin { background-image: url(../images/toolbar/icon-32-checkin.png); } .icon-32-options { background-image: url(../images/toolbar/icon-32-config.png); } .icon-32-apply { background-image: url(../images/toolbar/icon-32-apply.png); } .icon-32-back { background-image: url(../images/toolbar/icon-32-back.png); } .icon-32-forward { background-image: url(../images/toolbar/icon-32-forward.png); } .icon-32-save { background-image: url(../images/toolbar/icon-32-save.png); } .icon-32-edit { background-image: url(../images/toolbar/icon-32-edit.png); } .icon-32-copy { background-image: url(../images/toolbar/icon-32-copy.png); } .icon-32-move { background-image: url(../images/toolbar/icon-32-move.png); } .icon-32-new { background-image: url(../images/toolbar/icon-32-new.png); } .icon-32-upload { background-image: url(../images/toolbar/icon-32-upload.png); } .icon-32-assign { background-image: url(../images/toolbar/icon-32-publish.png); } .icon-32-html { background-image: url(../images/toolbar/icon-32-html.png); } .icon-32-css { background-image: url(../images/toolbar/icon-32-css.png); } .icon-32-menus { background-image: url(../images/toolbar/icon-32-menu.png); } .icon-32-publish { background-image: url(../images/toolbar/icon-32-publish.png); } .icon-32-unblock { background-image: url(../images/toolbar/icon-32-unblock.png); } .icon-32-unpublish { background-image: url(../images/toolbar/icon-32-unpublish.png); } .icon-32-restore { background-image: url(../images/toolbar/icon-32-revert.png); } .icon-32-trash { background-image: url(../images/toolbar/icon-32-trash.png); } .icon-32-archive { background-image: url(../images/toolbar/icon-32-archive.png); } .icon-32-unarchive { background-image: url(../images/toolbar/icon-32-unarchive.png); } .icon-32-preview { background-image: url(../images/toolbar/icon-32-preview.png); } .icon-32-default { background-image: url(../images/toolbar/icon-32-default.png); } .icon-32-refresh { background-image: url(../images/toolbar/icon-32-refresh.png); } .icon-32-save-new { background-image: url(../images/toolbar/icon-32-save-new.png); } .icon-32-save-copy { background-image: url(../images/toolbar/icon-32-save-copy.png); } .icon-32-error { background-image: url(../images/toolbar/icon-32-error.png); } .icon-32-new-style { background-image: url(../images/toolbar/icon-32-new-style.png); } .icon-32-delete-style { background-image: url(../images/toolbar/icon-32-delete-style.png); } .icon-32-purge { background-image: url(../images/toolbar/icon-32-purge.png); } .icon-32-remove { background-image: url(../images/toolbar/icon-32-remove.png); } .icon-32-featured { background-image: url(../images/toolbar/icon-32-featured.png); } .icon-32-unfeatured { background-image: url(../images/toolbar/icon-32-featured.png); background-position: 0% 100%; } .icon-32-export { background-image: url(../images/toolbar/icon-32-export.png); } .icon-32-stats { background-image: url(../images/toolbar/icon-32-stats.png); } .icon-32-print { background-image: url(../images/toolbar/icon-32-print.png); } .icon-32-batch { background-image: url(../images/toolbar/icon-32-batch.png); } .icon-32-envelope { background-image: url(../images/toolbar/icon-32-messaging.png); } .icon-32-download { background-image: url(../images/toolbar/icon-32-export.png); } .icon-32-bars { background-image: url(../images/toolbar/icon-32-stats.png); } .icon-48-categories { background-image: url(../images/header/icon-48-category.png); } .icon-48-category-edit { background-image: url(../images/header/icon-48-category.png); } .icon-48-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-generic { background-image: url(../images/header/icon-48-generic.png); } .icon-48-banners { background-image: url(../images/header/icon-48-banner.png); } .icon-48-banners-categories { background-image: url(../images/header/icon-48-banner-categories.png); } .icon-48-banners-category-edit { background-image: url(../images/header/icon-48-banner-categories.png); } .icon-48-banners-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-banners-clients { background-image: url(../images/header/icon-48-banner-client.png); } .icon-48-banners-tracks { background-image: url(../images/header/icon-48-banner-tracks.png); } .icon-48-checkin { background-image: url(../images/header/icon-48-checkin.png); } .icon-48-clear { background-image: url(../images/header/icon-48-clear.png); } .icon-48-contact { background-image: url(../images/header/icon-48-contacts.png); } .icon-48-contact-categories { background-image: url(../images/header/icon-48-contacts-categories.png); } .icon-48-contact-category-edit { background-image: url(../images/header/icon-48-contacts-categories.png); } .icon-48-contact-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-purge { background-image: url(../images/header/icon-48-purge.png); } .icon-48-cpanel { background-image: url(../images/header/icon-48-cpanel.png); } .icon-48-config { background-image: url(../images/header/icon-48-config.png); } .icon-48-groups { background-image: url(../images/header/icon-48-groups.png); } .icon-48-groups-add { background-image: url(../images/header/icon-48-groups-add.png); } .icon-48-levels { background-image: url(../images/header/icon-48-levels.png); } .icon-48-levels-add { background-image: url(../images/header/icon-48-levels-add.png); } .icon-48-module { background-image: url(../images/header/icon-48-module.png); } .icon-48-menu { background-image: url(../images/header/icon-48-menu.png); } .icon-48-menu-add { background-image: url(../images/header/icon-48-menu-add.png); } .icon-48-menumgr { background-image: url(../images/header/icon-48-menumgr.png); } .icon-48-trash { background-image: url(../images/header/icon-48-trash.png); } .icon-48-user { background-image: url(../images/header/icon-48-user.png); } .icon-48-user-add { background-image: url(../images/header/icon-48-user-add.png); } .icon-48-user-edit { background-image: url(../images/header/icon-48-user-edit.png); } .icon-48-user-profile { background-image: url(../images/header/icon-48-user-profile.png); } .icon-48-inbox { background-image: url(../images/header/icon-48-inbox.png); } .icon-48-new-privatemessage { background-image: url(../images/header/icon-48-new-privatemessage.png); } .icon-48-msgconfig { background-image: url(../images/header/icon-48-message_config.png); } .icon-48-langmanager { background-image: url(../images/header/icon-48-language.png); } .icon-48-mediamanager { background-image: url(../images/header/icon-48-media.png); } .icon-48-plugin { background-image: url(../images/header/icon-48-plugin.png); } .icon-48-help_header { background-image: url(../images/header/icon-48-help_header.png); } .icon-48-impressions { background-image: url(../images/header/icon-48-stats.png); } .icon-48-browser { background-image: url(../images/header/icon-48-stats.png); } .icon-48-searchtext { background-image: url(../images/header/icon-48-stats.png); } .icon-48-thememanager { background-image: url(../images/header/icon-48-themes.png); } .icon-48-writemess { background-image: url(../images/header/icon-48-writemess.png); } .icon-48-featured { background-image: url(../images/header/icon-48-featured.png); } .icon-48-sections { background-image: url(../images/header/icon-48-section.png); } .icon-48-article-add { background-image: url(../images/header/icon-48-article-add.png); } .icon-48-article-edit { background-image: url(../images/header/icon-48-article-edit.png); } .icon-48-article { background-image: url(../images/header/icon-48-article.png); } .icon-48-content-categories { background-image: url(../images/header/icon-48-category.png); } .icon-48-content-category-edit { background-image: url(../images/header/icon-48-category.png); } .icon-48-content-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-install { background-image: url(../images/header/icon-48-extension.png); } .icon-48-dbbackup { background-image: url(../images/header/icon-48-backup.png); } .icon-48-dbrestore { background-image: url(../images/header/icon-48-dbrestore.png); } .icon-48-dbquery { background-image: url(../images/header/icon-48-query.png); } .icon-48-systeminfo { background-image: url(../images/header/icon-48-info.png); } .icon-48-massmail { background-image: url(../images/header/icon-48-massmail.png); } .icon-48-redirect { background-image: url(../images/header/icon-48-redirect.png); } .icon-48-search { background-image: url(../images/header/icon-48-search.png); } .icon-48-finder { background-image: url(../images/header/icon-48-search.png); } .icon-48-newsfeeds { background-image: url(../images/header/icon-48-newsfeeds.png); } .icon-48-newsfeeds-categories { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } .icon-48-newsfeeds-category-edit { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } .icon-48-newsfeeds-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-weblinks { background-image: url(../images/header/icon-48-links.png); } .icon-48-weblinks-categories { background-image: url(../images/header/icon-48-links-cat.png); } .icon-48-weblinks-category-edit { background-image: url(../images/header/icon-48-links-cat.png); } .icon-48-weblinks-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-tags { background-image: url(../images/header/icon-48-tags.png); } .icon-48-assoc { background-image: url(../images/header/icon-48-assoc.png); } .icon-48-puzzle { background-image: url(../images/header/icon-48-puzzle.png); } div.message { border: 1px solid #c7c8b2; color: #2c2c2c; } .helpFrame { border-left: 0 solid #c7c8b2; border-right: none; border-top: none; border-bottom: none; } .outline { border: 1px solid #c7c8b2; background: #ffffff; } dl.menu_type dt { border-bottom: 1px solid #c7c8b2; } ul#new-modules-list { border-top: 1px solid #c7c8b2; } #skiplinkholder a, #skiplinkholder a:link, #skiplinkholder a:visited { color: #ffffff; background: #054993; border-bottom: solid #336 2px; } fieldset.panelform { border: none 0; } a.move_up { background-image: url('../images/admin/uparrow.png'); } span.move_up { background-image: url('../images/admin/uparrow0.png'); } a.move_down { background-image: url('../images/admin/downarrow.png'); } span.move_down { background-image: url('../images/admin/downarrow0.png'); } a.grid_false { background-image: url('../images/admin/publish_x.png'); } a.grid_true { background-image: url('../images/admin/tick.png'); } a.grid_trash { background-image: url('../images/admin/icon-16-trash.png'); } tr.row1 { background-color: #f9fade; } table.aclsummary-table td.col2, table.aclsummary-table th.col2, table.aclsummary-table td.col3, table.aclsummary-table th.col3, table.aclsummary-table td.col4, table.aclsummary-table th.col4, table.aclsummary-table td.col5, table.aclsummary-table th.col5, table.aclsummary-table td.col6, table.aclsummary-table th.col6, table.aclmodify-table td.col2, table.aclmodify-table th.col2 { border-left: 1px solid #c7c8b2; } span.icon-16-unset { background: url(../images/admin/icon-16-denyinactive.png) no-repeat; } span.icon-16-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat; } span.icon-16-denied { background: url(../images/admin/icon-16-deny.png) no-repeat; } span.icon-16-locked { background: url(../images/admin/checked_out.png) 0 0 no-repeat; } label.icon-16-allow { background: url(../images/admin/icon-16-allow.png) no-repeat; } label.icon-16-deny { background: url(../images/admin/icon-16-deny.png) no-repeat; } a.icon-16-allow { background: url(../images/admin/icon-16-allow.png) no-repeat; } a.icon-16-deny { background: url(../images/admin/icon-16-deny.png) no-repeat; } a.icon-16-allowinactive { background: url(../images/admin/icon-16-allowinactive.png) no-repeat; } a.icon-16-denyinactive { background: url(../images/admin/icon-16-denyinactive.png) no-repeat; } ul.acllegend li.acl-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat left; } ul.acllegend li.acl-denied { background: url(../images/admin/icon-16-deny.png) no-repeat left; } li.acl-editgroups, li.acl-resetbtn { background-color: #f9fade; border: 1px solid #c7c8b2; } li.acl-editgroups a, li.acl-resetbtn a { color: #054993; } li.acl-editgroups:hover, li.acl-resetbtn:hover, li.acl-editgroups:focus, li.acl-resetbtn:focus { background-color: #e5d9c3; } table#acl-config { border: 1px solid #c7c8b2; } table#acl-config th, table#acl-config td { background: #f9fade; border-bottom: 1px solid #c7c8b2; } table#acl-config th.acl-groups { border-right: 1px solid #c7c8b2; } #jform_sef_rewrite-lbl { background: url(../images/admin/icon-16-notice-note.png) right top no-repeat; } #permissions-sliders .tip { background: #ffffff; border: 1px solid #c7c8b2; } #permissions-sliders ul#rules, #permissions-sliders ul#rules ul { border: solid 0 #c7c8b2; background: #ffffff; } ul#rules li .pane-sliders .panel h3.title { border: solid 0 #c7c8b2; } #permissions-sliders ul#rules .pane-slider { border: solid 1px #c7c8b2; } #permissions-sliders ul#rules li h3 { border: solid 1px #c7c8b2; } #permissions-sliders ul#rules li h3.pane-toggler-down a { border: solid 0; } #permissions-sliders ul#rules .group-kind { color: #2c2c2c; } #permissions-sliders ul#rules table.group-rules { border: solid 1px #c7c8b2; } #permissions-sliders ul#rules table.group-rules td { border-right: solid 1px #c7c8b2; border-bottom: solid 1px #c7c8b2; } #permissions-sliders ul#rules table.group-rules th { background: #e5d9c3; border-right: solid 1px #c7c8b2; border-bottom: solid 1px #c7c8b2; color: #2c2c2c; } ul#rules table.aclmodify-table { border: solid 1px #c7c8b2; } ul#rules table.group-rules td label { border: solid 0 #c7c8b2; } #permissions-sliders ul#rules .mypanel { border: solid 0 #c7c8b2; } #permissions-sliders ul#rules table.group-rules td { background: #ffffff; } #permissions-sliders span.level { color: #c7c8b2; background-image: none; } .check-0, table.adminlist tbody td.check-0 { background-color: #ffffcf; } .check-a, table.adminlist tbody td.check-a { background-color: #cfffda; } .check-d, table.adminlist tbody td.check-d { background-color: #ffcfcf; } #system-message dd ul { color: #2c2c2c; } #system-message dd.error ul { color: #2c2c2c; } #system-message dd.message ul { color: #2c2c2c; } #system-message dd.notice ul { color: #2c2c2c; } #menu { color: #2c2c2c; } #menu ul.dropdown-menu { background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); color: #2c2c2c; } #menu ul.dropdown-menu li.dropdown-submenu { background: url(../images/j_arrow.png) no-repeat right 50%; } #menu ul.dropdown-menu li.divider { margin-bottom: 0; border-bottom: 1px dotted #c7c8b2; } #menu a { color: #054993; background-repeat: no-repeat; background-position: left 50%; } #menu li { border-right: 1px solid #c7c8b2; background-color: transparent; } #menu li a:hover, #menu li a:focus { background-color: #e5d9c3; } #menu li.disabled a:hover, #menu li.disabled a:focus, #menu li.disabled a { color: #c7c8b2; background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); } #menu li ul { border: 1px solid #c7c8b2; } #menu li li { background-color: transparent; } #menu li.sfhover a { background-color: #e5d9c3; } #menu li.sfhover li a { background-color: transparent; } #menu li.sfhover li.sfhover a, #menu li li a:focus { background-color: #e5d9c3; } #menu li.sfhover li.sfhover li a { background-color: transparent; } #menu li.sfhover li.sfhover li.sfhover a, #menu li li li a:focus { background-color: #e5d9c3; } #menu li li a:focus, #menu li li li a:focus { background-color: #e5d9c3; } #menu li li li a:focus { background-color: #e5d9c3; } #submenu { border-bottom: 1px solid #c7c8b2; } #submenu li, #submenu span.nolink { background-color: #f9fade; background-image: -moz-linear-gradient(top,#f9fade,#f9fade); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f9fade),to(#f9fade)); background-image: -webkit-linear-gradient(top,#f9fade,#f9fade); background-image: -o-linear-gradient(top,#f9fade,#f9fade); background-image: linear-gradient(to bottom,#f9fade,#f9fade); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9fade', endColorstr='#fff9fade', GradientType=0); border: 1px solid #c7c8b2; color: #054993; } #submenu li:hover, #submenu li:focus { background: #e5d9c3; } #submenu li.active, #submenu span.nolink.active { background: #ffffff; border-bottom: 1px solid #ffffff; } #submenu li.active a, #submenu span.nolink.active { color: #000; } .element-invisible { margin: 0; padding: 0; } div.CodeMirror-wrapping { border: 1px solid #c7c8b2; } table.adminform tr.row0 { background-color: #ffffff; } ul.alternating > li:nth-child(odd) { background-color: #ffffff; } ul.alternating > li:nth-child(even) { background-color: #f9fade; } ol.alternating > li:nth-child(odd) { background-color: #ffffff; } ol.alternating > li:nth-child(even) { background-color: #f9fade; } #installer-database, #installer-discover, #installer-update, #installer-warnings { border-top: 1px solid #c7c8b2; } #installer-database p.warning { background: transparent url(../images/admin/icon-16-deny.png) center left no-repeat; } #installer-database p.nowarning { background: transparent url(../images/admin/icon-16-allow.png) center left no-repeat; } .input-append, .input-prepend { font-size: 1.2em; } PKb��\�z*S�S�%templates/hathor/css/colour_brown.cssnu�[���.clearfix { *zoom: 1; } .clearfix:before, .clearfix:after { display: table; content: ""; line-height: 0; } .clearfix:after { clear: both; } .hide-text { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .input-block-level { display: block; width: 100%; min-height: 25px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } #form-login .btn { display: inline-block; *display: inline; *zoom: 1; padding: 4px 14px; margin-bottom: 0; font-size: 13px; line-height: 15px; *line-height: 15px; text-align: center; vertical-align: middle; cursor: pointer; color: #333333; text-shadow: 0 1px 1px rgba(255,255,255,0.75); background-color: #f5f5f5; background-image: -moz-linear-gradient(top,#ffffff,#e6e6e6); background-image: -webkit-gradient(linear,0 0,0 100%,from(#ffffff),to(#e6e6e6)); background-image: -webkit-linear-gradient(top,#ffffff,#e6e6e6); background-image: -o-linear-gradient(top,#ffffff,#e6e6e6); background-image: linear-gradient(to bottom,#ffffff,#e6e6e6); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe5e5e5', GradientType=0); border-color: #e6e6e6 #e6e6e6 #bfbfbf; *background-color: #e6e6e6; filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); border: 1px solid #bbb; *border: 0; border-bottom-color: #a2a2a2; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; *margin-left: .3em; -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); } #form-login .btn:hover, #form-login .btn:focus, #form-login .btn:active, #form-login .btn.active, #form-login .btn.disabled, #form-login .btn[disabled] { color: #333333; background-color: #e6e6e6; *background-color: #d9d9d9; } #form-login .btn:active, #form-login .btn.active { background-color: #cccccc \9; } #form-login .btn:first-child { *margin-left: 0; } #form-login .btn:hover { color: #333333; text-decoration: none; background-color: #e6e6e6; *background-color: #d9d9d9; background-position: 0 -15px; -webkit-transition: background-position .1s linear; -moz-transition: background-position .1s linear; -o-transition: background-position .1s linear; transition: background-position .1s linear; } #form-login .btn:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } #form-login .btn.active, #form-login .btn:active { background-color: #e6e6e6; background-color: #d9d9d9 \9; background-image: none; outline: 0; -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); } #form-login .btn.disabled, #form-login .btn[disabled] { cursor: default; background-color: #e6e6e6; background-image: none; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .btn-large { padding: 9px 14px; font-size: 15px; line-height: normal; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .btn-large [class^="icon-"] { margin-top: 2px; } .input-append input[class*="span"], .input-append .uneditable-input[class*="span"], .input-prepend input[class*="span"], .input-prepend .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"], .row-fluid .input-prepend [class*="span"], .row-fluid .input-append [class*="span"] { display: inline-block; } .input-append, .input-prepend { margin-bottom: 5px; font-size: 0; white-space: nowrap; } .input-append input, .input-append select, .input-append .uneditable-input, .input-prepend input, .input-prepend select, .input-prepend .uneditable-input { position: relative; margin-bottom: 0; *margin-left: 0; font-size: 13px; vertical-align: top; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-append input:focus, .input-append select:focus, .input-append .uneditable-input:focus, .input-prepend input:focus, .input-prepend select:focus, .input-prepend .uneditable-input:focus { z-index: 2; } .input-append .add-on, .input-prepend .add-on { display: inline-block; width: auto; height: 15px; min-width: 16px; padding: 4px 5px; font-size: 13px; font-weight: normal; line-height: 15px; text-align: center; text-shadow: 0 1px 0 #ffffff; background-color: #eeeeee; border: 1px solid #ccc; } .input-append .add-on, .input-append .btn, .input-prepend .add-on, .input-prepend .btn { margin-left: -1px; vertical-align: top; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-append .active, .input-prepend .active { background-color: #a9dba9; border-color: #46a546; } .input-prepend .add-on, .input-prepend .btn { margin-right: -1px; } .input-prepend .add-on:first-child, .input-prepend .btn:first-child { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append input, .input-append select, .input-append .uneditable-input { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append .add-on:last-child, .input-append .btn:last-child { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend.input-append input, .input-prepend.input-append select, .input-prepend.input-append .uneditable-input { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-prepend.input-append .add-on:first-child, .input-prepend.input-append .btn:first-child { margin-right: -1px; -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-prepend.input-append .add-on:last-child, .input-prepend.input-append .btn:last-child { margin-left: -1px; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .form-search .input-append .search-query, .form-search .input-prepend .search-query { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .form-search .input-append .search-query { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .form-search .input-append .btn { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .search-query { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .btn { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .form-search input, .form-search textarea, .form-search select, .form-search .help-inline, .form-search .uneditable-input, .form-search .input-prepend, .form-search .input-append, .form-inline input, .form-inline textarea, .form-inline select, .form-inline .help-inline, .form-inline .uneditable-input, .form-inline .input-prepend, .form-inline .input-append, .form-horizontal input, .form-horizontal textarea, .form-horizontal select, .form-horizontal .help-inline, .form-horizontal .uneditable-input, .form-horizontal .input-prepend, .form-horizontal .input-append { display: inline-block; *display: inline; *zoom: 1; margin-bottom: 0; vertical-align: middle; } .form-search .hide, .form-inline .hide, .form-horizontal .hide { display: none; } .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend { margin-bottom: 0; } .element-invisible { position: absolute; padding: 0 !important; margin: 0 !important; border: 0; height: 1px; width: 1px !important; overflow: hidden; } #form-login select, #form-login input[type="text"], #form-login input[type="password"] { display: inline-block; padding: 4px 6px; margin-bottom: 9px; font-size: 13px; line-height: 15px; color: #555555; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; width: 175px; } .subform-repeatable-wrapper div.btn-toolbar { float: none; } .subform-repeatable-wrapper .text-right { text-align: right; } .subform-repeatable-wrapper .ui-sortable-helper { background: #ffffff; } .subform-repeatable-wrapper tr.ui-sortable-helper { display: table; } .subform-repeatable-wrapper .subform-repeatable-group { clear: both; } .label, .badge { display: inline-block; padding: 2px 4px; font-size: 10.998px; font-weight: bold; line-height: 14px; color: #ffffff; vertical-align: baseline; white-space: nowrap; text-shadow: 0 -1px 0 rgba(0,0,0,0.25); background-color: #999999; } .label { -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .badge { padding-left: 9px; padding-right: 9px; -webkit-border-radius: 9px; -moz-border-radius: 9px; border-radius: 9px; } .label:empty, .badge:empty { display: none; } a.label:hover, a.label:focus, a.badge:hover, a.badge:focus { color: #ffffff; text-decoration: none; cursor: pointer; } .label-important, .badge-important { background-color: #a20000; } .label-important[href], .badge-important[href] { background-color: #6f0000; } .label-warning, .badge-warning { background-color: #f89406; } .label-warning[href], .badge-warning[href] { background-color: #c67605; } .label-success, .badge-success { background-color: #005800; } .label-success[href], .badge-success[href] { background-color: #002500; } .label-info, .badge-info { background-color: #3a87ad; } .label-info[href], .badge-info[href] { background-color: #2d6987; } .label-inverse, .badge-inverse { background-color: #333333; } .label-inverse[href], .badge-inverse[href] { background-color: #1a1a1a; } .btn .label, .btn .badge { position: relative; top: -1px; } .btn-mini .label, .btn-mini .badge { top: 0; } body { background-color: #ffffff; color: #2c2c2c; } h1 { color: #2c2c2c; } a:link { color: #054993; } a:visited { color: #054993; } #header { background: #ffffff url(../images/j_logo.png) no-repeat; } #header h1.title { color: #2c2c2c; } #nav { background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); border: 1px solid #000000; } #content { background: #ffffff; } #no-submenu { border-bottom: 1px solid #000000; } #element-box { background: #ffffff; border-right: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; } #element-box.login { border-top: 1px solid #000000; } .enabled, .success, .allow, span.writable { color: #005800; } .disabled, p.error, .warning, .deny, span.unwritable { color: #a20000; } .nowarning { color: #2c2c2c; } .none, .protected { color: #000000; } span.note { background: #ffffff; color: #2c2c2c; } div.checkin-tick { background: url(../images/admin/tick.png) 20px 50% no-repeat; } .ol-foreground { background-color: #d5c1b2; } .ol-background { background-color: #005800; } .ol-textfont { color: #2c2c2c; } .ol-captionfont { color: #ffffff; } .ol-captionfont a { color: #054993; } div.subheader .padding { background: #ffffff; } .pagetitle h2 { color: #2c2c2c; } div.configuration { color: #2c2c2c; background-image: url(../images/menu/icon-16-config.png); background-repeat: no-repeat; } div.toolbar-box { border-right: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; background: #ffffff; } div.toolbar-list li { color: #2c2c2c; } div.toolbar-list li.divider { border-right: 1px dotted #e5d9c3; } div.toolbar-list a { border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #000000; border-bottom: 1px solid #000000; background: #d5c1b2; } div.toolbar-list a:hover { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; background: #e5d9c3; color: #054993; } div.btn-toolbar { margin-left: 5px; padding-top: 3px; } div.btn-toolbar li.divider { border-right: 1px dotted #e5d9c3; } div.btn-toolbar div.btn-group button { border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #000000; border-bottom: 1px solid #000000; background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); padding: 5px 4px 5px 4px; } div.btn-toolbar div.btn-group button:hover { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; background: #e5d9c3; color: #054993; cursor: pointer; } div.btn-toolbar a { border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #000000; border-bottom: 1px solid #000000; background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); padding: 6px 5px; text-align: center; white-space: nowrap; font-size: 1.2em; text-decoration: none; } div.btn-toolbar a:hover { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; background: #e5d9c3; color: #054993; cursor: pointer; } div.btn-toolbar div.btn-group button.inactive { background: #d5c1b2; } .pane-sliders .title { color: #2c2c2c; } .pane-sliders .panel { border: 1px solid #000000; } .pane-sliders .panel h3 { background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); color: #054993; } .pane-sliders .panel h3:hover { background: #e5d9c3; } .pane-sliders .panel h3:hover a { text-decoration: none; } .pane-sliders .adminlist { border: 0 none; } .pane-sliders .adminlist td { border: 0 none; } .pane-toggler span { background: transparent url(../images/j_arrow.png) 5px 50% no-repeat; } .pane-toggler-down span { background: transparent url(../images/j_arrow_down.png) 5px 50% no-repeat; } .pane-toggler-down { border-bottom: 1px solid #000000; } dl.tabs dt { border: 1px solid #000000; background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); color: #054993; } dl.tabs dt:hover { background: #e5d9c3; } dl.tabs dt.open { background: #ffffff; border-bottom: 1px solid #ffffff; color: #2c2c2c; } dl.tabs dt.open a:visited { color: #2c2c2c; } dl.tabs dt a:hover { text-decoration: none; } dl.tabs dt a:focus { text-decoration: underline; } div.current { border: 1px solid #000000; background: #ffffff; } div.current fieldset { border: none 0; } div.current fieldset.adminform { border: 1px solid #000000; } #login-page .pagetitle h2 { background: transparent; } #login-page #header { border-bottom: 1px solid #000000; } #login-page #lock { background: url(../images/j_login_lock.png) 50% 0 no-repeat; } #login-page #element-box.login { background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); } #form-login { background: #ffffff; border: 1px solid #000000; } #form-login label { color: #2c2c2c; } #form-login div.button1 a { color: #054993; } #cpanel div.icon a, .cpanel div.icon a { color: #054993; border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #000000; border-bottom: 1px solid #000000; background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); } #cpanel div.icon a:hover, #cpanel div.icon a:focus, .cpanel div.icon a:hover, .cpanel div.icon a:focus { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; color: #054993; background: #e5d9c3; } fieldset { border: 1px #000000 solid; } legend { color: #2c2c2c; } fieldset ul.checklist input:focus { outline: thin dotted #2c2c2c; } fieldset#filter-bar { border-top: 0 solid #000000; border-right: 0 solid #000000; border-bottom: 1px solid #000000; border-left: 0 solid #000000; } fieldset#filter-bar ol, fieldset#filter-bar ul { border: 0; } fieldset#filter-bar ol li fieldset, fieldset#filter-bar ul li fieldset { border: 0; } .invalid { color: #a20000; } input.invalid { border: 1px solid #a20000; } input.readonly, span.faux-input { border: 0; } input.required { background-color: #e5f0fa; } input.disabled { background-color: #eeeeee; } input, select, span.faux-input { background-color: #ffffff; border: 1px solid #000000; } input[type="button"], input[type="submit"], input[type="reset"] { color: #054993; background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); } input[type="button"]:hover, input[type="button"]:focus, input[type="submit"]:hover, input[type="submit"]:focus, input[type="reset"]:hover, input[type="reset"]:focus { background: #e5d9c3; } textarea { background-color: #ffffff; border: 1px solid #000000; } input:focus, select:focus, textarea:focus, option:focus, input:hover, select:hover, textarea:hover, option:hover { background-color: #e5d9c3; color: #054993; } .paramrules { background: #d5c1b2; } span.gi { color: #000000; } table.admintable td.key, table.admintable td.paramlist_key { background-color: #d5c1b2; color: #2c2c2c; border-bottom: 1px solid #000000; border-right: 1px solid #000000; } table.paramlist td.paramlist_description { background-color: #d5c1b2; color: #2c2c2c; border-bottom: 1px solid #000000; border-right: 1px solid #000000; } fieldset.adminform { border: 1px solid #000000; } table.adminform { background-color: #ffffff; } table.adminform tr.row0 { background-color: #ffffff; } table.adminform tr.row1 { background-color: #e5d9c3; } table.adminform th { color: #2c2c2c; background: #ffffff; } table.adminform tr { border-bottom: 1px solid #000000; border-right: 1px solid #000000; } table.adminlist { border-spacing: 1px; background-color: #ffffff; color: #2c2c2c; } table.adminlist.modal { border-top: 1px solid #000000; border-right: 1px solid #000000; border-left: 1px solid #000000; } table.adminlist a { color: #054993; } table.adminlist thead th { background: #ffffff; color: #2c2c2c; border-bottom: 1px solid #000000; } table.adminlist tbody tr { background: #ffffff; } table.adminlist tbody tr.row1 { background: #ffffff; } table.adminlist tbody tr.row1:last-child td, table.adminlist tbody tr.row1:last-child th { border-bottom: 1px solid #000000; } table.adminlist tbody tr.row0:hover td, table.adminlist tbody tr.row1:hover td, table.adminlist tbody tr.row0:hover th, table.adminlist tbody tr.row1:hover th, table.adminlist tbody tr.row0:focus td, table.adminlist tbody tr.row1:focus td, table.adminlist tbody tr.row0:focus th, table.adminlist tbody tr.row1:focus th { background-color: #e5d9c3; } table.adminlist tbody tr td, table.adminlist tbody tr th { border-right: 1px solid #000000; } table.adminlist tbody tr td:last-child { border-right: none; } table.adminlist tbody tr.row0:last-child td, table.adminlist tbody tr.row0:last-child th { border-bottom: 1px solid #000000; } table.adminlist tbody tr.row0 td, table.adminlist tbody tr.row0 th { background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); } table.adminlist { border-bottom: 0 solid #000000; } table.adminlist tfoot tr { color: #2c2c2c; } table.adminlist tfoot td, table.adminlist tfoot th { background-color: #ffffff; border-top: 1px solid #000000; } table.adminlist tr td.btns a { border: 1px solid #000000; background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); color: #054993; } table.adminlist tr td.btns a:hover, table.adminlist tr td.btns a:active, table.adminlist tr td.btns a:focus { background-color: #ffffff; } a.saveorder { background: url(../images/admin/filesave.png) no-repeat; } a.saveorder.inactive { background-position: 0 -16px; } fieldset.batch { background: #ffffff; } button { color: #054993; border: 1px solid #000000; background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); } button:hover, button:focus { background: #e5d9c3; } .invalid { color: #ff0000; } .button1 { border: 1px solid #000000; color: #054993; background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); } .button1 a { color: #054993; } .button1 a:hover, .button1 a:focus { background: #e5d9c3; } .button2-left, .button2-right { border: 1px solid #000000; background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); } .button2-left a, .button2-right a, .button2-left span, .button2-right span { color: #054993; } .button2-left span, .button2-right span { color: #999999; } .page span, .blank span { color: #054993; } .button2-left a:hover, .button2-right a:hover, .button2-left a:focus, .button2-right a:focus { background: #e5d9c3; } .pagination .page span { color: #999999; } .tip { background: #000000; border: 1px solid #FFFFFF; } .tip-title { background: url(../images/selector-arrow-std.png) no-repeat; } a img.calendar { background: url(../images/calendar.png) no-repeat; } .jgrid span.publish { background-image: url(../images/admin/tick.png); } .jgrid span.unpublish { background-image: url(../images/admin/publish_x.png); } .jgrid span.archive { background-image: url(../images/menu/icon-16-archive.png); } .jgrid span.trash { background-image: url(../images/menu/icon-16-trash.png); } .jgrid span.default { background-image: url(../images/menu/icon-16-default.png); } .jgrid span.notdefault { background-image: url(../images/menu/icon-16-notdefault.png); } .jgrid span.checkedout { background-image: url(../images/admin/checked_out.png); } .jgrid span.downarrow { background-image: url(../images/admin/downarrow.png); } .jgrid span.downarrow_disabled { background-image: url(../images/admin/downarrow0.png); } .jgrid span.uparrow { background-image: url(../images/admin/uparrow.png); } .jgrid span.uparrow_disabled { background-image: url(../images/admin/uparrow0.png); } .jgrid span.published { background-image: url(../images/admin/publish_g.png); } .jgrid span.expired { background-image: url(../images/admin/publish_r.png); } .jgrid span.pending { background-image: url(../images/admin/publish_y.png); } .jgrid span.warning { background-image: url(../images/admin/publish_y.png); } .icon-32-send { background-image: url(../images/toolbar/icon-32-send.png); } .icon-32-delete { background-image: url(../images/toolbar/icon-32-delete.png); } .icon-32-help { background-image: url(../images/toolbar/icon-32-help.png); } .icon-32-cancel { background-image: url(../images/toolbar/icon-32-cancel.png); } .icon-32-checkin { background-image: url(../images/toolbar/icon-32-checkin.png); } .icon-32-options { background-image: url(../images/toolbar/icon-32-config.png); } .icon-32-apply { background-image: url(../images/toolbar/icon-32-apply.png); } .icon-32-back { background-image: url(../images/toolbar/icon-32-back.png); } .icon-32-forward { background-image: url(../images/toolbar/icon-32-forward.png); } .icon-32-save { background-image: url(../images/toolbar/icon-32-save.png); } .icon-32-edit { background-image: url(../images/toolbar/icon-32-edit.png); } .icon-32-copy { background-image: url(../images/toolbar/icon-32-copy.png); } .icon-32-move { background-image: url(../images/toolbar/icon-32-move.png); } .icon-32-new { background-image: url(../images/toolbar/icon-32-new.png); } .icon-32-upload { background-image: url(../images/toolbar/icon-32-upload.png); } .icon-32-assign { background-image: url(../images/toolbar/icon-32-publish.png); } .icon-32-html { background-image: url(../images/toolbar/icon-32-html.png); } .icon-32-css { background-image: url(../images/toolbar/icon-32-css.png); } .icon-32-menus { background-image: url(../images/toolbar/icon-32-menu.png); } .icon-32-publish { background-image: url(../images/toolbar/icon-32-publish.png); } .icon-32-unblock { background-image: url(../images/toolbar/icon-32-unblock.png); } .icon-32-unpublish { background-image: url(../images/toolbar/icon-32-unpublish.png); } .icon-32-restore { background-image: url(../images/toolbar/icon-32-revert.png); } .icon-32-trash { background-image: url(../images/toolbar/icon-32-trash.png); } .icon-32-archive { background-image: url(../images/toolbar/icon-32-archive.png); } .icon-32-unarchive { background-image: url(../images/toolbar/icon-32-unarchive.png); } .icon-32-preview { background-image: url(../images/toolbar/icon-32-preview.png); } .icon-32-default { background-image: url(../images/toolbar/icon-32-default.png); } .icon-32-refresh { background-image: url(../images/toolbar/icon-32-refresh.png); } .icon-32-save-new { background-image: url(../images/toolbar/icon-32-save-new.png); } .icon-32-save-copy { background-image: url(../images/toolbar/icon-32-save-copy.png); } .icon-32-error { background-image: url(../images/toolbar/icon-32-error.png); } .icon-32-new-style { background-image: url(../images/toolbar/icon-32-new-style.png); } .icon-32-delete-style { background-image: url(../images/toolbar/icon-32-delete-style.png); } .icon-32-purge { background-image: url(../images/toolbar/icon-32-purge.png); } .icon-32-remove { background-image: url(../images/toolbar/icon-32-remove.png); } .icon-32-featured { background-image: url(../images/toolbar/icon-32-featured.png); } .icon-32-unfeatured { background-image: url(../images/toolbar/icon-32-featured.png); background-position: 0% 100%; } .icon-32-export { background-image: url(../images/toolbar/icon-32-export.png); } .icon-32-stats { background-image: url(../images/toolbar/icon-32-stats.png); } .icon-32-print { background-image: url(../images/toolbar/icon-32-print.png); } .icon-32-batch { background-image: url(../images/toolbar/icon-32-batch.png); } .icon-32-envelope { background-image: url(../images/toolbar/icon-32-messaging.png); } .icon-32-download { background-image: url(../images/toolbar/icon-32-export.png); } .icon-32-bars { background-image: url(../images/toolbar/icon-32-stats.png); } .icon-48-categories { background-image: url(../images/header/icon-48-category.png); } .icon-48-category-edit { background-image: url(../images/header/icon-48-category.png); } .icon-48-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-generic { background-image: url(../images/header/icon-48-generic.png); } .icon-48-banners { background-image: url(../images/header/icon-48-banner.png); } .icon-48-banners-categories { background-image: url(../images/header/icon-48-banner-categories.png); } .icon-48-banners-category-edit { background-image: url(../images/header/icon-48-banner-categories.png); } .icon-48-banners-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-banners-clients { background-image: url(../images/header/icon-48-banner-client.png); } .icon-48-banners-tracks { background-image: url(../images/header/icon-48-banner-tracks.png); } .icon-48-checkin { background-image: url(../images/header/icon-48-checkin.png); } .icon-48-clear { background-image: url(../images/header/icon-48-clear.png); } .icon-48-contact { background-image: url(../images/header/icon-48-contacts.png); } .icon-48-contact-categories { background-image: url(../images/header/icon-48-contacts-categories.png); } .icon-48-contact-category-edit { background-image: url(../images/header/icon-48-contacts-categories.png); } .icon-48-contact-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-purge { background-image: url(../images/header/icon-48-purge.png); } .icon-48-cpanel { background-image: url(../images/header/icon-48-cpanel.png); } .icon-48-config { background-image: url(../images/header/icon-48-config.png); } .icon-48-groups { background-image: url(../images/header/icon-48-groups.png); } .icon-48-groups-add { background-image: url(../images/header/icon-48-groups-add.png); } .icon-48-levels { background-image: url(../images/header/icon-48-levels.png); } .icon-48-levels-add { background-image: url(../images/header/icon-48-levels-add.png); } .icon-48-module { background-image: url(../images/header/icon-48-module.png); } .icon-48-menu { background-image: url(../images/header/icon-48-menu.png); } .icon-48-menu-add { background-image: url(../images/header/icon-48-menu-add.png); } .icon-48-menumgr { background-image: url(../images/header/icon-48-menumgr.png); } .icon-48-trash { background-image: url(../images/header/icon-48-trash.png); } .icon-48-user { background-image: url(../images/header/icon-48-user.png); } .icon-48-user-add { background-image: url(../images/header/icon-48-user-add.png); } .icon-48-user-edit { background-image: url(../images/header/icon-48-user-edit.png); } .icon-48-user-profile { background-image: url(../images/header/icon-48-user-profile.png); } .icon-48-inbox { background-image: url(../images/header/icon-48-inbox.png); } .icon-48-new-privatemessage { background-image: url(../images/header/icon-48-new-privatemessage.png); } .icon-48-msgconfig { background-image: url(../images/header/icon-48-message_config.png); } .icon-48-langmanager { background-image: url(../images/header/icon-48-language.png); } .icon-48-mediamanager { background-image: url(../images/header/icon-48-media.png); } .icon-48-plugin { background-image: url(../images/header/icon-48-plugin.png); } .icon-48-help_header { background-image: url(../images/header/icon-48-help_header.png); } .icon-48-impressions { background-image: url(../images/header/icon-48-stats.png); } .icon-48-browser { background-image: url(../images/header/icon-48-stats.png); } .icon-48-searchtext { background-image: url(../images/header/icon-48-stats.png); } .icon-48-thememanager { background-image: url(../images/header/icon-48-themes.png); } .icon-48-writemess { background-image: url(../images/header/icon-48-writemess.png); } .icon-48-featured { background-image: url(../images/header/icon-48-featured.png); } .icon-48-sections { background-image: url(../images/header/icon-48-section.png); } .icon-48-article-add { background-image: url(../images/header/icon-48-article-add.png); } .icon-48-article-edit { background-image: url(../images/header/icon-48-article-edit.png); } .icon-48-article { background-image: url(../images/header/icon-48-article.png); } .icon-48-content-categories { background-image: url(../images/header/icon-48-category.png); } .icon-48-content-category-edit { background-image: url(../images/header/icon-48-category.png); } .icon-48-content-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-install { background-image: url(../images/header/icon-48-extension.png); } .icon-48-dbbackup { background-image: url(../images/header/icon-48-backup.png); } .icon-48-dbrestore { background-image: url(../images/header/icon-48-dbrestore.png); } .icon-48-dbquery { background-image: url(../images/header/icon-48-query.png); } .icon-48-systeminfo { background-image: url(../images/header/icon-48-info.png); } .icon-48-massmail { background-image: url(../images/header/icon-48-massmail.png); } .icon-48-redirect { background-image: url(../images/header/icon-48-redirect.png); } .icon-48-search { background-image: url(../images/header/icon-48-search.png); } .icon-48-finder { background-image: url(../images/header/icon-48-search.png); } .icon-48-newsfeeds { background-image: url(../images/header/icon-48-newsfeeds.png); } .icon-48-newsfeeds-categories { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } .icon-48-newsfeeds-category-edit { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } .icon-48-newsfeeds-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-weblinks { background-image: url(../images/header/icon-48-links.png); } .icon-48-weblinks-categories { background-image: url(../images/header/icon-48-links-cat.png); } .icon-48-weblinks-category-edit { background-image: url(../images/header/icon-48-links-cat.png); } .icon-48-weblinks-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-tags { background-image: url(../images/header/icon-48-tags.png); } .icon-48-assoc { background-image: url(../images/header/icon-48-assoc.png); } .icon-48-puzzle { background-image: url(../images/header/icon-48-puzzle.png); } div.message { border: 1px solid #000000; color: #2c2c2c; } .helpFrame { border-left: 0 solid #000000; border-right: none; border-top: none; border-bottom: none; } .outline { border: 1px solid #000000; background: #ffffff; } dl.menu_type dt { border-bottom: 1px solid #000000; } ul#new-modules-list { border-top: 1px solid #000000; } #skiplinkholder a, #skiplinkholder a:link, #skiplinkholder a:visited { color: #ffffff; background: #054993; border-bottom: solid #336 2px; } fieldset.panelform { border: none 0; } a.move_up { background-image: url('../images/admin/uparrow.png'); } span.move_up { background-image: url('../images/admin/uparrow0.png'); } a.move_down { background-image: url('../images/admin/downarrow.png'); } span.move_down { background-image: url('../images/admin/downarrow0.png'); } a.grid_false { background-image: url('../images/admin/publish_x.png'); } a.grid_true { background-image: url('../images/admin/tick.png'); } a.grid_trash { background-image: url('../images/admin/icon-16-trash.png'); } tr.row1 { background-color: #d5c1b2; } table.aclsummary-table td.col2, table.aclsummary-table th.col2, table.aclsummary-table td.col3, table.aclsummary-table th.col3, table.aclsummary-table td.col4, table.aclsummary-table th.col4, table.aclsummary-table td.col5, table.aclsummary-table th.col5, table.aclsummary-table td.col6, table.aclsummary-table th.col6, table.aclmodify-table td.col2, table.aclmodify-table th.col2 { border-left: 1px solid #000000; } span.icon-16-unset { background: url(../images/admin/icon-16-denyinactive.png) no-repeat; } span.icon-16-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat; } span.icon-16-denied { background: url(../images/admin/icon-16-deny.png) no-repeat; } span.icon-16-locked { background: url(../images/admin/checked_out.png) 0 0 no-repeat; } label.icon-16-allow { background: url(../images/admin/icon-16-allow.png) no-repeat; } label.icon-16-deny { background: url(../images/admin/icon-16-deny.png) no-repeat; } a.icon-16-allow { background: url(../images/admin/icon-16-allow.png) no-repeat; } a.icon-16-deny { background: url(../images/admin/icon-16-deny.png) no-repeat; } a.icon-16-allowinactive { background: url(../images/admin/icon-16-allowinactive.png) no-repeat; } a.icon-16-denyinactive { background: url(../images/admin/icon-16-denyinactive.png) no-repeat; } ul.acllegend li.acl-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat left; } ul.acllegend li.acl-denied { background: url(../images/admin/icon-16-deny.png) no-repeat left; } li.acl-editgroups, li.acl-resetbtn { background-color: #d5c1b2; border: 1px solid #000000; } li.acl-editgroups a, li.acl-resetbtn a { color: #054993; } li.acl-editgroups:hover, li.acl-resetbtn:hover, li.acl-editgroups:focus, li.acl-resetbtn:focus { background-color: #e5d9c3; } table#acl-config { border: 1px solid #000000; } table#acl-config th, table#acl-config td { background: #d5c1b2; border-bottom: 1px solid #000000; } table#acl-config th.acl-groups { border-right: 1px solid #000000; } #jform_sef_rewrite-lbl { background: url(../images/admin/icon-16-notice-note.png) right top no-repeat; } #permissions-sliders .tip { background: #ffffff; border: 1px solid #000000; } #permissions-sliders ul#rules, #permissions-sliders ul#rules ul { border: solid 0 #000000; background: #ffffff; } ul#rules li .pane-sliders .panel h3.title { border: solid 0 #000000; } #permissions-sliders ul#rules .pane-slider { border: solid 1px #000000; } #permissions-sliders ul#rules li h3 { border: solid 1px #000000; } #permissions-sliders ul#rules li h3.pane-toggler-down a { border: solid 0; } #permissions-sliders ul#rules .group-kind { color: #2c2c2c; } #permissions-sliders ul#rules table.group-rules { border: solid 1px #000000; } #permissions-sliders ul#rules table.group-rules td { border-right: solid 1px #000000; border-bottom: solid 1px #000000; } #permissions-sliders ul#rules table.group-rules th { background: #e5d9c3; border-right: solid 1px #000000; border-bottom: solid 1px #000000; color: #2c2c2c; } ul#rules table.aclmodify-table { border: solid 1px #000000; } ul#rules table.group-rules td label { border: solid 0 #000000; } #permissions-sliders ul#rules .mypanel { border: solid 0 #000000; } #permissions-sliders ul#rules table.group-rules td { background: #ffffff; } #permissions-sliders span.level { color: #000000; background-image: none; } .check-0, table.adminlist tbody td.check-0 { background-color: #ffffcf; } .check-a, table.adminlist tbody td.check-a { background-color: #cfffda; } .check-d, table.adminlist tbody td.check-d { background-color: #ffcfcf; } #system-message dd ul { color: #2c2c2c; } #system-message dd.error ul { color: #2c2c2c; } #system-message dd.message ul { color: #2c2c2c; } #system-message dd.notice ul { color: #2c2c2c; } #menu { color: #2c2c2c; } #menu ul.dropdown-menu { background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); color: #2c2c2c; } #menu ul.dropdown-menu li.dropdown-submenu { background: url(../images/j_arrow.png) no-repeat right 50%; } #menu ul.dropdown-menu li.divider { margin-bottom: 0; border-bottom: 1px dotted #000000; } #menu a { color: #054993; background-repeat: no-repeat; background-position: left 50%; } #menu li { border-right: 1px solid #000000; background-color: transparent; } #menu li a:hover, #menu li a:focus { background-color: #e5d9c3; } #menu li.disabled a:hover, #menu li.disabled a:focus, #menu li.disabled a { color: #000000; background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); } #menu li ul { border: 1px solid #000000; } #menu li li { background-color: transparent; } #menu li.sfhover a { background-color: #e5d9c3; } #menu li.sfhover li a { background-color: transparent; } #menu li.sfhover li.sfhover a, #menu li li a:focus { background-color: #e5d9c3; } #menu li.sfhover li.sfhover li a { background-color: transparent; } #menu li.sfhover li.sfhover li.sfhover a, #menu li li li a:focus { background-color: #e5d9c3; } #menu li li a:focus, #menu li li li a:focus { background-color: #e5d9c3; } #menu li li li a:focus { background-color: #e5d9c3; } #submenu { border-bottom: 1px solid #000000; } #submenu li, #submenu span.nolink { background-color: #d5c1b2; background-image: -moz-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#d5c1b2),to(#d5c1b2)); background-image: -webkit-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: -o-linear-gradient(top,#d5c1b2,#d5c1b2); background-image: linear-gradient(to bottom,#d5c1b2,#d5c1b2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd5c1b2', endColorstr='#ffd5c1b2', GradientType=0); border: 1px solid #000000; color: #054993; } #submenu li:hover, #submenu li:focus { background: #e5d9c3; } #submenu li.active, #submenu span.nolink.active { background: #ffffff; border-bottom: 1px solid #ffffff; } #submenu li.active a, #submenu span.nolink.active { color: #000; } .element-invisible { margin: 0; padding: 0; } div.CodeMirror-wrapping { border: 1px solid #000000; } table.adminform tr.row0 { background-color: #ffffff; } ul.alternating > li:nth-child(odd) { background-color: #ffffff; } ul.alternating > li:nth-child(even) { background-color: #d5c1b2; } ol.alternating > li:nth-child(odd) { background-color: #ffffff; } ol.alternating > li:nth-child(even) { background-color: #d5c1b2; } #installer-database, #installer-discover, #installer-update, #installer-warnings { border-top: 1px solid #000000; } #installer-database p.warning { background: transparent url(../images/admin/icon-16-deny.png) center left no-repeat; } #installer-database p.nowarning { background: transparent url(../images/admin/icon-16-allow.png) center left no-repeat; } .input-append, .input-prepend { font-size: 1.2em; } PKb��\� �S�S�$templates/hathor/css/colour_blue.cssnu�[���.clearfix { *zoom: 1; } .clearfix:before, .clearfix:after { display: table; content: ""; line-height: 0; } .clearfix:after { clear: both; } .hide-text { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .input-block-level { display: block; width: 100%; min-height: 25px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } #form-login .btn { display: inline-block; *display: inline; *zoom: 1; padding: 4px 14px; margin-bottom: 0; font-size: 13px; line-height: 15px; *line-height: 15px; text-align: center; vertical-align: middle; cursor: pointer; color: #333333; text-shadow: 0 1px 1px rgba(255,255,255,0.75); background-color: #f5f5f5; background-image: -moz-linear-gradient(top,#ffffff,#e6e6e6); background-image: -webkit-gradient(linear,0 0,0 100%,from(#ffffff),to(#e6e6e6)); background-image: -webkit-linear-gradient(top,#ffffff,#e6e6e6); background-image: -o-linear-gradient(top,#ffffff,#e6e6e6); background-image: linear-gradient(to bottom,#ffffff,#e6e6e6); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe5e5e5', GradientType=0); border-color: #e6e6e6 #e6e6e6 #bfbfbf; *background-color: #e6e6e6; filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); border: 1px solid #bbb; *border: 0; border-bottom-color: #a2a2a2; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; *margin-left: .3em; -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); } #form-login .btn:hover, #form-login .btn:focus, #form-login .btn:active, #form-login .btn.active, #form-login .btn.disabled, #form-login .btn[disabled] { color: #333333; background-color: #e6e6e6; *background-color: #d9d9d9; } #form-login .btn:active, #form-login .btn.active { background-color: #cccccc \9; } #form-login .btn:first-child { *margin-left: 0; } #form-login .btn:hover { color: #333333; text-decoration: none; background-color: #e6e6e6; *background-color: #d9d9d9; background-position: 0 -15px; -webkit-transition: background-position .1s linear; -moz-transition: background-position .1s linear; -o-transition: background-position .1s linear; transition: background-position .1s linear; } #form-login .btn:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } #form-login .btn.active, #form-login .btn:active { background-color: #e6e6e6; background-color: #d9d9d9 \9; background-image: none; outline: 0; -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); } #form-login .btn.disabled, #form-login .btn[disabled] { cursor: default; background-color: #e6e6e6; background-image: none; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .btn-large { padding: 9px 14px; font-size: 15px; line-height: normal; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .btn-large [class^="icon-"] { margin-top: 2px; } .input-append input[class*="span"], .input-append .uneditable-input[class*="span"], .input-prepend input[class*="span"], .input-prepend .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"], .row-fluid .input-prepend [class*="span"], .row-fluid .input-append [class*="span"] { display: inline-block; } .input-append, .input-prepend { margin-bottom: 5px; font-size: 0; white-space: nowrap; } .input-append input, .input-append select, .input-append .uneditable-input, .input-prepend input, .input-prepend select, .input-prepend .uneditable-input { position: relative; margin-bottom: 0; *margin-left: 0; font-size: 13px; vertical-align: top; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-append input:focus, .input-append select:focus, .input-append .uneditable-input:focus, .input-prepend input:focus, .input-prepend select:focus, .input-prepend .uneditable-input:focus { z-index: 2; } .input-append .add-on, .input-prepend .add-on { display: inline-block; width: auto; height: 15px; min-width: 16px; padding: 4px 5px; font-size: 13px; font-weight: normal; line-height: 15px; text-align: center; text-shadow: 0 1px 0 #ffffff; background-color: #eeeeee; border: 1px solid #ccc; } .input-append .add-on, .input-append .btn, .input-prepend .add-on, .input-prepend .btn { margin-left: -1px; vertical-align: top; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-append .active, .input-prepend .active { background-color: #a9dba9; border-color: #46a546; } .input-prepend .add-on, .input-prepend .btn { margin-right: -1px; } .input-prepend .add-on:first-child, .input-prepend .btn:first-child { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append input, .input-append select, .input-append .uneditable-input { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append .add-on:last-child, .input-append .btn:last-child { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend.input-append input, .input-prepend.input-append select, .input-prepend.input-append .uneditable-input { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-prepend.input-append .add-on:first-child, .input-prepend.input-append .btn:first-child { margin-right: -1px; -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-prepend.input-append .add-on:last-child, .input-prepend.input-append .btn:last-child { margin-left: -1px; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .form-search .input-append .search-query, .form-search .input-prepend .search-query { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .form-search .input-append .search-query { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .form-search .input-append .btn { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .search-query { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .btn { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .form-search input, .form-search textarea, .form-search select, .form-search .help-inline, .form-search .uneditable-input, .form-search .input-prepend, .form-search .input-append, .form-inline input, .form-inline textarea, .form-inline select, .form-inline .help-inline, .form-inline .uneditable-input, .form-inline .input-prepend, .form-inline .input-append, .form-horizontal input, .form-horizontal textarea, .form-horizontal select, .form-horizontal .help-inline, .form-horizontal .uneditable-input, .form-horizontal .input-prepend, .form-horizontal .input-append { display: inline-block; *display: inline; *zoom: 1; margin-bottom: 0; vertical-align: middle; } .form-search .hide, .form-inline .hide, .form-horizontal .hide { display: none; } .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend { margin-bottom: 0; } .element-invisible { position: absolute; padding: 0 !important; margin: 0 !important; border: 0; height: 1px; width: 1px !important; overflow: hidden; } #form-login select, #form-login input[type="text"], #form-login input[type="password"] { display: inline-block; padding: 4px 6px; margin-bottom: 9px; font-size: 13px; line-height: 15px; color: #555555; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; width: 175px; } .subform-repeatable-wrapper div.btn-toolbar { float: none; } .subform-repeatable-wrapper .text-right { text-align: right; } .subform-repeatable-wrapper .ui-sortable-helper { background: #ffffff; } .subform-repeatable-wrapper tr.ui-sortable-helper { display: table; } .subform-repeatable-wrapper .subform-repeatable-group { clear: both; } .label, .badge { display: inline-block; padding: 2px 4px; font-size: 10.998px; font-weight: bold; line-height: 14px; color: #ffffff; vertical-align: baseline; white-space: nowrap; text-shadow: 0 -1px 0 rgba(0,0,0,0.25); background-color: #999999; } .label { -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .badge { padding-left: 9px; padding-right: 9px; -webkit-border-radius: 9px; -moz-border-radius: 9px; border-radius: 9px; } .label:empty, .badge:empty { display: none; } a.label:hover, a.label:focus, a.badge:hover, a.badge:focus { color: #ffffff; text-decoration: none; cursor: pointer; } .label-important, .badge-important { background-color: #a20000; } .label-important[href], .badge-important[href] { background-color: #6f0000; } .label-warning, .badge-warning { background-color: #f89406; } .label-warning[href], .badge-warning[href] { background-color: #c67605; } .label-success, .badge-success { background-color: #005800; } .label-success[href], .badge-success[href] { background-color: #002500; } .label-info, .badge-info { background-color: #3a87ad; } .label-info[href], .badge-info[href] { background-color: #2d6987; } .label-inverse, .badge-inverse { background-color: #333333; } .label-inverse[href], .badge-inverse[href] { background-color: #1a1a1a; } .btn .label, .btn .badge { position: relative; top: -1px; } .btn-mini .label, .btn-mini .badge { top: 0; } body { background-color: #ffffff; color: #2c2c2c; } h1 { color: #2c2c2c; } a:link { color: #054993; } a:visited { color: #054993; } #header { background: #ffffff url(../images/j_logo.png) no-repeat; } #header h1.title { color: #2c2c2c; } #nav { background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); border: 1px solid #738498; } #content { background: #ffffff; } #no-submenu { border-bottom: 1px solid #738498; } #element-box { background: #ffffff; border-right: 1px solid #738498; border-bottom: 1px solid #738498; border-left: 1px solid #738498; } #element-box.login { border-top: 1px solid #738498; } .enabled, .success, .allow, span.writable { color: #005800; } .disabled, p.error, .warning, .deny, span.unwritable { color: #a20000; } .nowarning { color: #2c2c2c; } .none, .protected { color: #738498; } span.note { background: #ffffff; color: #2c2c2c; } div.checkin-tick { background: url(../images/admin/tick.png) 20px 50% no-repeat; } .ol-foreground { background-color: #c3d2e5; } .ol-background { background-color: #005800; } .ol-textfont { color: #2c2c2c; } .ol-captionfont { color: #ffffff; } .ol-captionfont a { color: #054993; } div.subheader .padding { background: #ffffff; } .pagetitle h2 { color: #2c2c2c; } div.configuration { color: #2c2c2c; background-image: url(../images/menu/icon-16-config.png); background-repeat: no-repeat; } div.toolbar-box { border-right: 1px solid #738498; border-bottom: 1px solid #738498; border-left: 1px solid #738498; background: #ffffff; } div.toolbar-list li { color: #2c2c2c; } div.toolbar-list li.divider { border-right: 1px dotted #e5d9c3; } div.toolbar-list a { border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #738498; border-bottom: 1px solid #738498; background: #c3d2e5; } div.toolbar-list a:hover { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; background: #e5d9c3; color: #054993; } div.btn-toolbar { margin-left: 5px; padding-top: 3px; } div.btn-toolbar li.divider { border-right: 1px dotted #e5d9c3; } div.btn-toolbar div.btn-group button { border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #738498; border-bottom: 1px solid #738498; background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); padding: 5px 4px 5px 4px; } div.btn-toolbar div.btn-group button:hover { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; background: #e5d9c3; color: #054993; cursor: pointer; } div.btn-toolbar a { border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #738498; border-bottom: 1px solid #738498; background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); padding: 6px 5px; text-align: center; white-space: nowrap; font-size: 1.2em; text-decoration: none; } div.btn-toolbar a:hover { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; background: #e5d9c3; color: #054993; cursor: pointer; } div.btn-toolbar div.btn-group button.inactive { background: #c3d2e5; } .pane-sliders .title { color: #2c2c2c; } .pane-sliders .panel { border: 1px solid #738498; } .pane-sliders .panel h3 { background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); color: #054993; } .pane-sliders .panel h3:hover { background: #e5d9c3; } .pane-sliders .panel h3:hover a { text-decoration: none; } .pane-sliders .adminlist { border: 0 none; } .pane-sliders .adminlist td { border: 0 none; } .pane-toggler span { background: transparent url(../images/j_arrow.png) 5px 50% no-repeat; } .pane-toggler-down span { background: transparent url(../images/j_arrow_down.png) 5px 50% no-repeat; } .pane-toggler-down { border-bottom: 1px solid #738498; } dl.tabs dt { border: 1px solid #738498; background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); color: #054993; } dl.tabs dt:hover { background: #e5d9c3; } dl.tabs dt.open { background: #ffffff; border-bottom: 1px solid #ffffff; color: #2c2c2c; } dl.tabs dt.open a:visited { color: #2c2c2c; } dl.tabs dt a:hover { text-decoration: none; } dl.tabs dt a:focus { text-decoration: underline; } div.current { border: 1px solid #738498; background: #ffffff; } div.current fieldset { border: none 0; } div.current fieldset.adminform { border: 1px solid #738498; } #login-page .pagetitle h2 { background: transparent; } #login-page #header { border-bottom: 1px solid #738498; } #login-page #lock { background: url(../images/j_login_lock.png) 50% 0 no-repeat; } #login-page #element-box.login { background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); } #form-login { background: #ffffff; border: 1px solid #738498; } #form-login label { color: #2c2c2c; } #form-login div.button1 a { color: #054993; } #cpanel div.icon a, .cpanel div.icon a { color: #054993; border-left: 1px solid #e5d9c3; border-top: 1px solid #e5d9c3; border-right: 1px solid #738498; border-bottom: 1px solid #738498; background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); } #cpanel div.icon a:hover, #cpanel div.icon a:focus, .cpanel div.icon a:hover, .cpanel div.icon a:focus { border-left: 1px solid #868778; border-top: 1px solid #868778; border-right: 1px solid #f6f7db; border-bottom: 1px solid #f6f7db; color: #054993; background: #e5d9c3; } fieldset { border: 1px #738498 solid; } legend { color: #2c2c2c; } fieldset ul.checklist input:focus { outline: thin dotted #2c2c2c; } fieldset#filter-bar { border-top: 0 solid #738498; border-right: 0 solid #738498; border-bottom: 1px solid #738498; border-left: 0 solid #738498; } fieldset#filter-bar ol, fieldset#filter-bar ul { border: 0; } fieldset#filter-bar ol li fieldset, fieldset#filter-bar ul li fieldset { border: 0; } .invalid { color: #a20000; } input.invalid { border: 1px solid #a20000; } input.readonly, span.faux-input { border: 0; } input.required { background-color: #e5f0fa; } input.disabled { background-color: #eeeeee; } input, select, span.faux-input { background-color: #ffffff; border: 1px solid #738498; } input[type="button"], input[type="submit"], input[type="reset"] { color: #054993; background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); } input[type="button"]:hover, input[type="button"]:focus, input[type="submit"]:hover, input[type="submit"]:focus, input[type="reset"]:hover, input[type="reset"]:focus { background: #e5d9c3; } textarea { background-color: #ffffff; border: 1px solid #738498; } input:focus, select:focus, textarea:focus, option:focus, input:hover, select:hover, textarea:hover, option:hover { background-color: #e5d9c3; color: #054993; } .paramrules { background: #c3d2e5; } span.gi { color: #738498; } table.admintable td.key, table.admintable td.paramlist_key { background-color: #c3d2e5; color: #2c2c2c; border-bottom: 1px solid #738498; border-right: 1px solid #738498; } table.paramlist td.paramlist_description { background-color: #c3d2e5; color: #2c2c2c; border-bottom: 1px solid #738498; border-right: 1px solid #738498; } fieldset.adminform { border: 1px solid #738498; } table.adminform { background-color: #ffffff; } table.adminform tr.row0 { background-color: #ffffff; } table.adminform tr.row1 { background-color: #e5d9c3; } table.adminform th { color: #2c2c2c; background: #ffffff; } table.adminform tr { border-bottom: 1px solid #738498; border-right: 1px solid #738498; } table.adminlist { border-spacing: 1px; background-color: #ffffff; color: #2c2c2c; } table.adminlist.modal { border-top: 1px solid #738498; border-right: 1px solid #738498; border-left: 1px solid #738498; } table.adminlist a { color: #054993; } table.adminlist thead th { background: #ffffff; color: #2c2c2c; border-bottom: 1px solid #738498; } table.adminlist tbody tr { background: #ffffff; } table.adminlist tbody tr.row1 { background: #ffffff; } table.adminlist tbody tr.row1:last-child td, table.adminlist tbody tr.row1:last-child th { border-bottom: 1px solid #738498; } table.adminlist tbody tr.row0:hover td, table.adminlist tbody tr.row1:hover td, table.adminlist tbody tr.row0:hover th, table.adminlist tbody tr.row1:hover th, table.adminlist tbody tr.row0:focus td, table.adminlist tbody tr.row1:focus td, table.adminlist tbody tr.row0:focus th, table.adminlist tbody tr.row1:focus th { background-color: #e5d9c3; } table.adminlist tbody tr td, table.adminlist tbody tr th { border-right: 1px solid #738498; } table.adminlist tbody tr td:last-child { border-right: none; } table.adminlist tbody tr.row0:last-child td, table.adminlist tbody tr.row0:last-child th { border-bottom: 1px solid #738498; } table.adminlist tbody tr.row0 td, table.adminlist tbody tr.row0 th { background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); } table.adminlist { border-bottom: 0 solid #738498; } table.adminlist tfoot tr { color: #2c2c2c; } table.adminlist tfoot td, table.adminlist tfoot th { background-color: #ffffff; border-top: 1px solid #738498; } table.adminlist tr td.btns a { border: 1px solid #738498; background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); color: #054993; } table.adminlist tr td.btns a:hover, table.adminlist tr td.btns a:active, table.adminlist tr td.btns a:focus { background-color: #ffffff; } a.saveorder { background: url(../images/admin/filesave.png) no-repeat; } a.saveorder.inactive { background-position: 0 -16px; } fieldset.batch { background: #ffffff; } button { color: #054993; border: 1px solid #738498; background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); } button:hover, button:focus { background: #e5d9c3; } .invalid { color: #ff0000; } .button1 { border: 1px solid #738498; color: #054993; background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); } .button1 a { color: #054993; } .button1 a:hover, .button1 a:focus { background: #e5d9c3; } .button2-left, .button2-right { border: 1px solid #738498; background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); } .button2-left a, .button2-right a, .button2-left span, .button2-right span { color: #054993; } .button2-left span, .button2-right span { color: #999999; } .page span, .blank span { color: #054993; } .button2-left a:hover, .button2-right a:hover, .button2-left a:focus, .button2-right a:focus { background: #e5d9c3; } .pagination .page span { color: #999999; } .tip { background: #000000; border: 1px solid #FFFFFF; } .tip-title { background: url(../images/selector-arrow-std.png) no-repeat; } a img.calendar { background: url(../images/calendar.png) no-repeat; } .jgrid span.publish { background-image: url(../images/admin/tick.png); } .jgrid span.unpublish { background-image: url(../images/admin/publish_x.png); } .jgrid span.archive { background-image: url(../images/menu/icon-16-archive.png); } .jgrid span.trash { background-image: url(../images/menu/icon-16-trash.png); } .jgrid span.default { background-image: url(../images/menu/icon-16-default.png); } .jgrid span.notdefault { background-image: url(../images/menu/icon-16-notdefault.png); } .jgrid span.checkedout { background-image: url(../images/admin/checked_out.png); } .jgrid span.downarrow { background-image: url(../images/admin/downarrow.png); } .jgrid span.downarrow_disabled { background-image: url(../images/admin/downarrow0.png); } .jgrid span.uparrow { background-image: url(../images/admin/uparrow.png); } .jgrid span.uparrow_disabled { background-image: url(../images/admin/uparrow0.png); } .jgrid span.published { background-image: url(../images/admin/publish_g.png); } .jgrid span.expired { background-image: url(../images/admin/publish_r.png); } .jgrid span.pending { background-image: url(../images/admin/publish_y.png); } .jgrid span.warning { background-image: url(../images/admin/publish_y.png); } .icon-32-send { background-image: url(../images/toolbar/icon-32-send.png); } .icon-32-delete { background-image: url(../images/toolbar/icon-32-delete.png); } .icon-32-help { background-image: url(../images/toolbar/icon-32-help.png); } .icon-32-cancel { background-image: url(../images/toolbar/icon-32-cancel.png); } .icon-32-checkin { background-image: url(../images/toolbar/icon-32-checkin.png); } .icon-32-options { background-image: url(../images/toolbar/icon-32-config.png); } .icon-32-apply { background-image: url(../images/toolbar/icon-32-apply.png); } .icon-32-back { background-image: url(../images/toolbar/icon-32-back.png); } .icon-32-forward { background-image: url(../images/toolbar/icon-32-forward.png); } .icon-32-save { background-image: url(../images/toolbar/icon-32-save.png); } .icon-32-edit { background-image: url(../images/toolbar/icon-32-edit.png); } .icon-32-copy { background-image: url(../images/toolbar/icon-32-copy.png); } .icon-32-move { background-image: url(../images/toolbar/icon-32-move.png); } .icon-32-new { background-image: url(../images/toolbar/icon-32-new.png); } .icon-32-upload { background-image: url(../images/toolbar/icon-32-upload.png); } .icon-32-assign { background-image: url(../images/toolbar/icon-32-publish.png); } .icon-32-html { background-image: url(../images/toolbar/icon-32-html.png); } .icon-32-css { background-image: url(../images/toolbar/icon-32-css.png); } .icon-32-menus { background-image: url(../images/toolbar/icon-32-menu.png); } .icon-32-publish { background-image: url(../images/toolbar/icon-32-publish.png); } .icon-32-unblock { background-image: url(../images/toolbar/icon-32-unblock.png); } .icon-32-unpublish { background-image: url(../images/toolbar/icon-32-unpublish.png); } .icon-32-restore { background-image: url(../images/toolbar/icon-32-revert.png); } .icon-32-trash { background-image: url(../images/toolbar/icon-32-trash.png); } .icon-32-archive { background-image: url(../images/toolbar/icon-32-archive.png); } .icon-32-unarchive { background-image: url(../images/toolbar/icon-32-unarchive.png); } .icon-32-preview { background-image: url(../images/toolbar/icon-32-preview.png); } .icon-32-default { background-image: url(../images/toolbar/icon-32-default.png); } .icon-32-refresh { background-image: url(../images/toolbar/icon-32-refresh.png); } .icon-32-save-new { background-image: url(../images/toolbar/icon-32-save-new.png); } .icon-32-save-copy { background-image: url(../images/toolbar/icon-32-save-copy.png); } .icon-32-error { background-image: url(../images/toolbar/icon-32-error.png); } .icon-32-new-style { background-image: url(../images/toolbar/icon-32-new-style.png); } .icon-32-delete-style { background-image: url(../images/toolbar/icon-32-delete-style.png); } .icon-32-purge { background-image: url(../images/toolbar/icon-32-purge.png); } .icon-32-remove { background-image: url(../images/toolbar/icon-32-remove.png); } .icon-32-featured { background-image: url(../images/toolbar/icon-32-featured.png); } .icon-32-unfeatured { background-image: url(../images/toolbar/icon-32-featured.png); background-position: 0% 100%; } .icon-32-export { background-image: url(../images/toolbar/icon-32-export.png); } .icon-32-stats { background-image: url(../images/toolbar/icon-32-stats.png); } .icon-32-print { background-image: url(../images/toolbar/icon-32-print.png); } .icon-32-batch { background-image: url(../images/toolbar/icon-32-batch.png); } .icon-32-envelope { background-image: url(../images/toolbar/icon-32-messaging.png); } .icon-32-download { background-image: url(../images/toolbar/icon-32-export.png); } .icon-32-bars { background-image: url(../images/toolbar/icon-32-stats.png); } .icon-48-categories { background-image: url(../images/header/icon-48-category.png); } .icon-48-category-edit { background-image: url(../images/header/icon-48-category.png); } .icon-48-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-generic { background-image: url(../images/header/icon-48-generic.png); } .icon-48-banners { background-image: url(../images/header/icon-48-banner.png); } .icon-48-banners-categories { background-image: url(../images/header/icon-48-banner-categories.png); } .icon-48-banners-category-edit { background-image: url(../images/header/icon-48-banner-categories.png); } .icon-48-banners-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-banners-clients { background-image: url(../images/header/icon-48-banner-client.png); } .icon-48-banners-tracks { background-image: url(../images/header/icon-48-banner-tracks.png); } .icon-48-checkin { background-image: url(../images/header/icon-48-checkin.png); } .icon-48-clear { background-image: url(../images/header/icon-48-clear.png); } .icon-48-contact { background-image: url(../images/header/icon-48-contacts.png); } .icon-48-contact-categories { background-image: url(../images/header/icon-48-contacts-categories.png); } .icon-48-contact-category-edit { background-image: url(../images/header/icon-48-contacts-categories.png); } .icon-48-contact-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-purge { background-image: url(../images/header/icon-48-purge.png); } .icon-48-cpanel { background-image: url(../images/header/icon-48-cpanel.png); } .icon-48-config { background-image: url(../images/header/icon-48-config.png); } .icon-48-groups { background-image: url(../images/header/icon-48-groups.png); } .icon-48-groups-add { background-image: url(../images/header/icon-48-groups-add.png); } .icon-48-levels { background-image: url(../images/header/icon-48-levels.png); } .icon-48-levels-add { background-image: url(../images/header/icon-48-levels-add.png); } .icon-48-module { background-image: url(../images/header/icon-48-module.png); } .icon-48-menu { background-image: url(../images/header/icon-48-menu.png); } .icon-48-menu-add { background-image: url(../images/header/icon-48-menu-add.png); } .icon-48-menumgr { background-image: url(../images/header/icon-48-menumgr.png); } .icon-48-trash { background-image: url(../images/header/icon-48-trash.png); } .icon-48-user { background-image: url(../images/header/icon-48-user.png); } .icon-48-user-add { background-image: url(../images/header/icon-48-user-add.png); } .icon-48-user-edit { background-image: url(../images/header/icon-48-user-edit.png); } .icon-48-user-profile { background-image: url(../images/header/icon-48-user-profile.png); } .icon-48-inbox { background-image: url(../images/header/icon-48-inbox.png); } .icon-48-new-privatemessage { background-image: url(../images/header/icon-48-new-privatemessage.png); } .icon-48-msgconfig { background-image: url(../images/header/icon-48-message_config.png); } .icon-48-langmanager { background-image: url(../images/header/icon-48-language.png); } .icon-48-mediamanager { background-image: url(../images/header/icon-48-media.png); } .icon-48-plugin { background-image: url(../images/header/icon-48-plugin.png); } .icon-48-help_header { background-image: url(../images/header/icon-48-help_header.png); } .icon-48-impressions { background-image: url(../images/header/icon-48-stats.png); } .icon-48-browser { background-image: url(../images/header/icon-48-stats.png); } .icon-48-searchtext { background-image: url(../images/header/icon-48-stats.png); } .icon-48-thememanager { background-image: url(../images/header/icon-48-themes.png); } .icon-48-writemess { background-image: url(../images/header/icon-48-writemess.png); } .icon-48-featured { background-image: url(../images/header/icon-48-featured.png); } .icon-48-sections { background-image: url(../images/header/icon-48-section.png); } .icon-48-article-add { background-image: url(../images/header/icon-48-article-add.png); } .icon-48-article-edit { background-image: url(../images/header/icon-48-article-edit.png); } .icon-48-article { background-image: url(../images/header/icon-48-article.png); } .icon-48-content-categories { background-image: url(../images/header/icon-48-category.png); } .icon-48-content-category-edit { background-image: url(../images/header/icon-48-category.png); } .icon-48-content-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-install { background-image: url(../images/header/icon-48-extension.png); } .icon-48-dbbackup { background-image: url(../images/header/icon-48-backup.png); } .icon-48-dbrestore { background-image: url(../images/header/icon-48-dbrestore.png); } .icon-48-dbquery { background-image: url(../images/header/icon-48-query.png); } .icon-48-systeminfo { background-image: url(../images/header/icon-48-info.png); } .icon-48-massmail { background-image: url(../images/header/icon-48-massmail.png); } .icon-48-redirect { background-image: url(../images/header/icon-48-redirect.png); } .icon-48-search { background-image: url(../images/header/icon-48-search.png); } .icon-48-finder { background-image: url(../images/header/icon-48-search.png); } .icon-48-newsfeeds { background-image: url(../images/header/icon-48-newsfeeds.png); } .icon-48-newsfeeds-categories { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } .icon-48-newsfeeds-category-edit { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } .icon-48-newsfeeds-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-weblinks { background-image: url(../images/header/icon-48-links.png); } .icon-48-weblinks-categories { background-image: url(../images/header/icon-48-links-cat.png); } .icon-48-weblinks-category-edit { background-image: url(../images/header/icon-48-links-cat.png); } .icon-48-weblinks-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-tags { background-image: url(../images/header/icon-48-tags.png); } .icon-48-assoc { background-image: url(../images/header/icon-48-assoc.png); } .icon-48-puzzle { background-image: url(../images/header/icon-48-puzzle.png); } div.message { border: 1px solid #738498; color: #2c2c2c; } .helpFrame { border-left: 0 solid #738498; border-right: none; border-top: none; border-bottom: none; } .outline { border: 1px solid #738498; background: #ffffff; } dl.menu_type dt { border-bottom: 1px solid #738498; } ul#new-modules-list { border-top: 1px solid #738498; } #skiplinkholder a, #skiplinkholder a:link, #skiplinkholder a:visited { color: #ffffff; background: #054993; border-bottom: solid #336 2px; } fieldset.panelform { border: none 0; } a.move_up { background-image: url('../images/admin/uparrow.png'); } span.move_up { background-image: url('../images/admin/uparrow0.png'); } a.move_down { background-image: url('../images/admin/downarrow.png'); } span.move_down { background-image: url('../images/admin/downarrow0.png'); } a.grid_false { background-image: url('../images/admin/publish_x.png'); } a.grid_true { background-image: url('../images/admin/tick.png'); } a.grid_trash { background-image: url('../images/admin/icon-16-trash.png'); } tr.row1 { background-color: #c3d2e5; } table.aclsummary-table td.col2, table.aclsummary-table th.col2, table.aclsummary-table td.col3, table.aclsummary-table th.col3, table.aclsummary-table td.col4, table.aclsummary-table th.col4, table.aclsummary-table td.col5, table.aclsummary-table th.col5, table.aclsummary-table td.col6, table.aclsummary-table th.col6, table.aclmodify-table td.col2, table.aclmodify-table th.col2 { border-left: 1px solid #738498; } span.icon-16-unset { background: url(../images/admin/icon-16-denyinactive.png) no-repeat; } span.icon-16-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat; } span.icon-16-denied { background: url(../images/admin/icon-16-deny.png) no-repeat; } span.icon-16-locked { background: url(../images/admin/checked_out.png) 0 0 no-repeat; } label.icon-16-allow { background: url(../images/admin/icon-16-allow.png) no-repeat; } label.icon-16-deny { background: url(../images/admin/icon-16-deny.png) no-repeat; } a.icon-16-allow { background: url(../images/admin/icon-16-allow.png) no-repeat; } a.icon-16-deny { background: url(../images/admin/icon-16-deny.png) no-repeat; } a.icon-16-allowinactive { background: url(../images/admin/icon-16-allowinactive.png) no-repeat; } a.icon-16-denyinactive { background: url(../images/admin/icon-16-denyinactive.png) no-repeat; } ul.acllegend li.acl-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat left; } ul.acllegend li.acl-denied { background: url(../images/admin/icon-16-deny.png) no-repeat left; } li.acl-editgroups, li.acl-resetbtn { background-color: #c3d2e5; border: 1px solid #738498; } li.acl-editgroups a, li.acl-resetbtn a { color: #054993; } li.acl-editgroups:hover, li.acl-resetbtn:hover, li.acl-editgroups:focus, li.acl-resetbtn:focus { background-color: #e5d9c3; } table#acl-config { border: 1px solid #738498; } table#acl-config th, table#acl-config td { background: #c3d2e5; border-bottom: 1px solid #738498; } table#acl-config th.acl-groups { border-right: 1px solid #738498; } #jform_sef_rewrite-lbl { background: url(../images/admin/icon-16-notice-note.png) right top no-repeat; } #permissions-sliders .tip { background: #ffffff; border: 1px solid #738498; } #permissions-sliders ul#rules, #permissions-sliders ul#rules ul { border: solid 0 #738498; background: #ffffff; } ul#rules li .pane-sliders .panel h3.title { border: solid 0 #738498; } #permissions-sliders ul#rules .pane-slider { border: solid 1px #738498; } #permissions-sliders ul#rules li h3 { border: solid 1px #738498; } #permissions-sliders ul#rules li h3.pane-toggler-down a { border: solid 0; } #permissions-sliders ul#rules .group-kind { color: #2c2c2c; } #permissions-sliders ul#rules table.group-rules { border: solid 1px #738498; } #permissions-sliders ul#rules table.group-rules td { border-right: solid 1px #738498; border-bottom: solid 1px #738498; } #permissions-sliders ul#rules table.group-rules th { background: #e5d9c3; border-right: solid 1px #738498; border-bottom: solid 1px #738498; color: #2c2c2c; } ul#rules table.aclmodify-table { border: solid 1px #738498; } ul#rules table.group-rules td label { border: solid 0 #738498; } #permissions-sliders ul#rules .mypanel { border: solid 0 #738498; } #permissions-sliders ul#rules table.group-rules td { background: #ffffff; } #permissions-sliders span.level { color: #738498; background-image: none; } .check-0, table.adminlist tbody td.check-0 { background-color: #ffffcf; } .check-a, table.adminlist tbody td.check-a { background-color: #cfffda; } .check-d, table.adminlist tbody td.check-d { background-color: #ffcfcf; } #system-message dd ul { color: #2c2c2c; } #system-message dd.error ul { color: #2c2c2c; } #system-message dd.message ul { color: #2c2c2c; } #system-message dd.notice ul { color: #2c2c2c; } #menu { color: #2c2c2c; } #menu ul.dropdown-menu { background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); color: #2c2c2c; } #menu ul.dropdown-menu li.dropdown-submenu { background: url(../images/j_arrow.png) no-repeat right 50%; } #menu ul.dropdown-menu li.divider { margin-bottom: 0; border-bottom: 1px dotted #738498; } #menu a { color: #054993; background-repeat: no-repeat; background-position: left 50%; } #menu li { border-right: 1px solid #738498; background-color: transparent; } #menu li a:hover, #menu li a:focus { background-color: #e5d9c3; } #menu li.disabled a:hover, #menu li.disabled a:focus, #menu li.disabled a { color: #738498; background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); } #menu li ul { border: 1px solid #738498; } #menu li li { background-color: transparent; } #menu li.sfhover a { background-color: #e5d9c3; } #menu li.sfhover li a { background-color: transparent; } #menu li.sfhover li.sfhover a, #menu li li a:focus { background-color: #e5d9c3; } #menu li.sfhover li.sfhover li a { background-color: transparent; } #menu li.sfhover li.sfhover li.sfhover a, #menu li li li a:focus { background-color: #e5d9c3; } #menu li li a:focus, #menu li li li a:focus { background-color: #e5d9c3; } #menu li li li a:focus { background-color: #e5d9c3; } #submenu { border-bottom: 1px solid #738498; } #submenu li, #submenu span.nolink { background-color: #b1c4db; background-image: -moz-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -webkit-gradient(linear,0 0,0 100%,from(#a5bbd4),to(#c3d2e5)); background-image: -webkit-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: -o-linear-gradient(top,#a5bbd4,#c3d2e5); background-image: linear-gradient(to bottom,#a5bbd4,#c3d2e5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa5bbd4', endColorstr='#ffc3d2e5', GradientType=0); border: 1px solid #738498; color: #054993; } #submenu li:hover, #submenu li:focus { background: #e5d9c3; } #submenu li.active, #submenu span.nolink.active { background: #ffffff; border-bottom: 1px solid #ffffff; } #submenu li.active a, #submenu span.nolink.active { color: #000; } .element-invisible { margin: 0; padding: 0; } div.CodeMirror-wrapping { border: 1px solid #738498; } table.adminform tr.row0 { background-color: #ffffff; } ul.alternating > li:nth-child(odd) { background-color: #ffffff; } ul.alternating > li:nth-child(even) { background-color: #c3d2e5; } ol.alternating > li:nth-child(odd) { background-color: #ffffff; } ol.alternating > li:nth-child(even) { background-color: #c3d2e5; } #installer-database, #installer-discover, #installer-update, #installer-warnings { border-top: 1px solid #738498; } #installer-database p.warning { background: transparent url(../images/admin/icon-16-deny.png) center left no-repeat; } #installer-database p.nowarning { background: transparent url(../images/admin/icon-16-allow.png) center left no-repeat; } .input-append, .input-prepend { font-size: 1.2em; } PKb��\�FH���templates/hathor/css/error.cssnu�[���/** * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ .outline { border: 1px solid #cccccc; background: #ffffff; padding: 2px; } body { height: 100%; padding: 0; font-family: Arial, Helvetica, Sans Serif; font-size: 11px; color: #2c2c2c; background: #ffffff; width: 80%; min-width: 400px; margin: 15px auto; } div { background-color: #f9fade; padding: 8px; border: solid 1px #c7c8b2; margin-top: 13px; margin-bottom: 25px; } .frame { background-color: #f9fade; padding: 8px; border: solid 1px #c7c8b2; margin-top: 13px; margin-bottom: 25px; } .table { border-collapse: collapse; margin-top: 13px; } a { border: 1px solid #c7c8b2; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; background-color: #ffffff; color: #2c2c2c; padding: 3px 20px; text-decoration: none; } a:hover, a:focus, a:active { background-color: #e3e4ca; text-decoration: none; } td { padding: 3px; padding-left: 5px; padding-right: 5px; border: solid 1px #c7c8b2; font-size: 10px; } .type { background-color: #cc0000; color: #ffffff; font-weight: bold; padding: 3px; } PKb��\TXK�)templates/hathor/css/colour_brown_rtl.cssnu�[���@charset "UTF-8"; /** * @package Joomla.Administrator * @subpackage templates.hathor * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 1.6 * * RTL CSS file for the color standard */ /** * Overall Styles */ #header { background: #ffffff url(../images/j_logo.png) no-repeat top right; } /** * Various Styles */ div.checkin-tick { background: url(../images/admin/tick.png) 20px 50% no-repeat; } /** * Pane Slider pane Toggler styles */ .pane-toggler span { background: transparent url(../images/j_arrow_left.png) right 50% no-repeat; } .pane-toggler-down span { background: transparent url(../images/j_arrow_down.png) right 50% no-repeat; } /** * Cpanel Settings */ fieldset#filter-bar { border-left: none; border-right: none; } /** * Admintable Styles */ table.admintable td.key,table.admintable td.paramlist_key { border-left: 1px solid #e9e9e9; border-right: none; } table.paramlist td.paramlist_description { border-left: 1px solid #e9e9e9; border-right: none; } /** * Admin Form Styles */ table.adminform tr { border-left: 1px solid #000000; border-right: none; } /** * Adminlist Table layout */ table.adminlist.modal { border-right: 1px solid #000000; border-left: 1px solid #000000; } /* Table row styles */ table.adminlist tbody tr td:last-child { border-left: none; } /** * Saving order icon styling in admin tables */ a.saveorder { background: url(../images/admin/filesave.png) no-repeat; } a.saveorder.inactive { background-position: 0 -16px; } /** * Button styling */ /* Button 1 Type */ /* Use this if you add images to the buttons such as directional arrows */ .button1 a { /* add padding if you are using the directional images */ /* padding: 0 6px 0 30px; */ } /* Button 2 Type */ .button2-right .prev { background-image: url(../images/j_button2_prev.png); background-position: right center; } .button2-right.off .prev { background: url(../images/j_button2_prev_off.png) no-repeat; } .button2-right .start { background-image: url(../images/j_button2_first.png); background-position: right center; } .button2-left .next { background-image: url(../images/j_button2_next.png); background-position: left center; } .button2-left.off .next { /* @TODO check the x position */ background: url(../images/j_button2_next_off.png) 100% 0 no-repeat; } .button2-left .end { background-image: url(../images/j_arrow_left.png); background-position: left center; } .button2-left.off .end { /* @TODO check the x position */ background: url(../images/j_button2_last_off.png) 100% 0 no-repeat; } .button2-left .image { background: url(../images/j_button2_image.png) 100% 0 no-repeat; } .button2-left .readmore { background: url(../images/j_button2_readmore.png) 100% 0 no-repeat; } .button2-left .pagebreak { background: url(../images/j_button2_pagebreak.png) 100% 0 no-repeat; } /** * Tooltips */ /** * System Standard Messages */ #system-message dd.message ul { background: #C3D2E5 url(../images/notice-info.png) 99.5% center no-repeat; } /** * System Error Messages */ #system-message dd.error ul { background: #E6C0C0 url(../images/notice-alert.png) 99.5% top no-repeat; } /** * System Notice Messages */ #system-message dd.notice ul { background: #EFE7B8 url(../images/notice-note.png) 99%.5 top no-repeat; } /** * JGrid styles */ /** * Menu Icons * These icons are used on the Administrator menu * The classes are constructed dynamically when the menu is generated */ /** * Toolbar icons * These icons are used for the toolbar buttons * The classes are constructed dynamically when the toolbar is created */ /** * Quick Icons * Also knows as Header Icons * These are used for the Quick Icons on the Control Panel * The same classes are also assigned the Component Title */ /** * General styles */ .helpFrame { border-right: 0 solid #222; border-left: none; border-top: none; } /* -- ACL STYLES relocated from com_users/media/grid.css ----------- */ /* -- ACL PANEL STYLES ----------- */ /* All Tabs */ table.aclsummary-table td.col2, table.aclsummary-table th.col2, table.aclsummary-table td.col3, table.aclsummary-table th.col3, table.aclsummary-table td.col4, table.aclsummary-table th.col4, table.aclsummary-table td.col5, table.aclsummary-table th.col5, table.aclsummary-table td.col6, table.aclsummary-table th.col6, table.aclmodify-table td.col2, table.aclmodify-table th.col2 { border-right: 1px solid #cbcbcb; border-left: none; } /* Icons */ ul.acllegend li.acl-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat right; } ul.acllegend li.acl-denied { background: url(../images/admin/icon-16-deny.png) no-repeat right; } table#acl-config th.acl-groups { border-left: 1px solid #000000; } table#acl-config th.acl-groups { text-align: right; } .acl-action { margin: auto 0; } /* Icons */ span.icon-16-unset { background: url(../images/admin/icon-16-denyinactive.png) no-repeat right; } span.icon-16-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat right; } span.icon-16-denied { background: url(../images/admin/icon-16-deny.png) no-repeat right; } span.icon-16-locked { background: url(../images/admin/checked_out.png) no-repeat right; } /** * Mod_rewrite Warning */ #jform_sef_rewrite-lbl { background: url(../images/admin/icon-16-notice-note.png) left top no-repeat; } /** * Permission Rules */ #permissions-sliders ul#rules table.group-rules td { border-left: solid 1px #000000; border-right: solid 0 #000000; } #permissions-sliders ul#rules table.group-rules th { border-left: solid 1px #000000; border-right: solid 0 #000000; } /** * Menu Styling */ #menu ul li.node { background-image: url(../images/j_arrow_left.png); background-repeat: no-repeat; background-position: left 50%; } #menu a { background-position: right 50%; } /* Installer Database */ #installer-database p.warning { background-position: center right; } #installer-database p.nowarning { background-position: center right; } PKb��\��Z=ii(templates/hathor/css/colour_blue_rtl.cssnu�[���@charset "UTF-8"; /** * @package Joomla.Administrator * @subpackage templates.hathor * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 1.6 * * RTL CSS file for the color standard */ /** * Overall Styles */ #header { background: #ffffff url(../images/j_logo.png) no-repeat top right; } #element-box { border-left: 1px solid #738498; border-right: 1px solid #738498; } /** * Various Styles */ div.checkin-tick { background: url(../images/admin/tick.png) 20px 50% no-repeat; } /** * Subheader, toolbar, page title */ div.toolbar-box { border-left: 1px solid #738498; border-right: 1px solid #738498; } div.toolbar-list li.divider { border-left: 1px dotted #e5d9c3; border-right: none; } div.toolbar-list a:hover { border-right: 1px solid #e5d9c3; border-left: 1px solid #738498; } /** * Pane Slider pane Toggler styles */ .pane-toggler span { background: transparent url(../images/j_arrow_left.png) right 50% no-repeat; } .pane-toggler-down span { background: transparent url(../images/j_arrow_down.png) right 50% no-repeat; } /** * Cpanel Settings */ #cpanel div.icon a:hover, #cpanel div.icon a:focus { border-right: 1px solid #e5d9c3; border-left: 1px solid #738498; } fieldset#filter-bar { border-left: none; border-right: none; } /** * Admintable Styles */ table.admintable td.key,table.admintable td.paramlist_key { border-left: 1px solid #738498; border-right: none; } table.paramlist td.paramlist_description { border-left: 1px solid #738498; border-right: none; } /** * Admin Form Styles */ table.adminform tr { border-left: 1px solid #738498; border-right: none; } /** * Adminlist Table layout */ table.adminlist.modal { border-right: 1px solid #738498; border-left: 1px solid #738498; } /* Table row styles */ table.adminlist tbody tr td, table.adminlist tbody tr th { border-left: 1px solid #738498; border-right: none; } table.adminlist tbody tr td:last-child { border-left: none; } /** * Saving order icon styling in admin tables */ a.saveorder { background: url(../images/admin/filesave.png) no-repeat; } a.saveorder.inactive { background-position: 0 -16px; } /** * Button styling */ /* Button 1 Type */ /* Use this if you add images to the buttons such as directional arrows */ .button1 a { /* add padding if you are using the directional images */ /* padding: 0 6px 0 30px; */ } /* Button 2 Type */ .button2-right .prev { background-image: url(../images/j_button2_prev.png); background-position: right center; } .button2-right.off .prev { background: url(../images/j_button2_prev_off.png) no-repeat; } .button2-right .start { background-image: url(../images/j_button2_first.png); background-position: right center; } .button2-left .next { background-image: url(../images/j_button2_next.png); background-position: left center; } .button2-left.off .next { /* @TODO check the x position */ background: url(../images/j_button2_next_off.png) 100% 0 no-repeat; } .button2-left .end { background-image: url(../images/j_arrow_left.png); background-position: left center; } .button2-left.off .end { /* @TODO check the x position */ background: url(../images/j_button2_last_off.png) 100% 0 no-repeat; } .button2-left .image { background: url(../images/j_button2_image.png) 100% 0 no-repeat; } .button2-left .readmore { background: url(../images/j_button2_readmore.png) 100% 0 no-repeat; } .button2-left .pagebreak { background: url(../images/j_button2_pagebreak.png) 100% 0 no-repeat; } /** * Tooltips */ /** * System Standard Messages */ #system-message dd.message ul { background: #C3D2E5 url(../images/notice-info.png) 99.5% center no-repeat; } /** * System Error Messages */ #system-message dd.error ul { background: #E6C0C0 url(../images/notice-alert.png) 99.5% top no-repeat; } /** * System Notice Messages */ #system-message dd.notice ul { background: #EFE7B8 url(../images/notice-note.png) 99%.5 top no-repeat; } /** * JGrid styles */ /** * Menu Icons * These icons are used on the Administrator menu * The classes are constructed dynamically when the menu is generated */ /** * Toolbar icons * These icons are used for the toolbar buttons * The classes are constructed dynamically when the toolbar is created */ /** * Quick Icons * Also knows as Header Icons * These are used for the Quick Icons on the Control Panel * The same classes are also assigned the Component Title */ /** * General styles */ .helpFrame { border-right: 0 solid #738498; border-left: none; border-top: none; } /* -- ACL STYLES relocated from com_users/media/grid.css ----------- */ /* -- ACL PANEL STYLES ----------- */ /* All Tabs */ table.aclsummary-table td.col2, table.aclsummary-table th.col2, table.aclsummary-table td.col3, table.aclsummary-table th.col3, table.aclsummary-table td.col4, table.aclsummary-table th.col4, table.aclsummary-table td.col5, table.aclsummary-table th.col5, table.aclsummary-table td.col6, table.aclsummary-table th.col6, table.aclmodify-table td.col2, table.aclmodify-table th.col2 { border-right: 1px solid #738498; border-left: none; } /* Icons */ ul.acllegend li.acl-allowed { background:url(../images/admin/icon-16-allow.png) no-repeat right; } ul.acllegend li.acl-denied { background:url(../images/admin/icon-16-deny.png) no-repeat right; } table#acl-config th.acl-groups { border-left: 1px solid #738498; } table#acl-config th.acl-groups { text-align: right; } .acl-action { margin: auto 0; } /* Icons */ span.icon-16-unset { background: url(../images/admin/icon-16-denyinactive.png) no-repeat right; } span.icon-16-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat right; } span.icon-16-denied { background: url(../images/admin/icon-16-deny.png) no-repeat right; } span.icon-16-locked { background: url(../images/admin/checked_out.png) no-repeat right; } /** * Mod_rewrite Warning */ #jform_sef_rewrite-lbl { background: url(../images/admin/icon-16-notice-note.png) left top no-repeat; } /** * Modal S-Box overrides */ #sbox-window { text-align: right; } /** * Permission Rules */ #permissions-sliders ul#rules table.group-rules td { border-left: solid 1px #738498; border-right: solid 0 #738498; } #permissions-sliders ul#rules table.group-rules th { border-left: solid 1px #738498; border-right: solid 0 #738498; } /** * Menu Styling */ #menu ul li.node { background-image: url(../images/j_arrow_left.png); background-repeat: no-repeat; background-position: left 50%; } #menu a { background-position: right 50%; } #menu li { border-left: 1px solid #738498; border-right: 0 solid #738498; } #menu li li li a:focus { border-right: 1px solid #fafafa; } /* Installer Database */ #installer-database p.warning { background-position: center right; } #installer-database p.nowarning { background-position: center right; } PKb��\*�s�ee,templates/hathor/css/colour_standard_rtl.cssnu�[���@charset "UTF-8"; /** * @package Joomla.Administrator * @subpackage templates.hathor * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 1.6 * * RTL CSS file for the color standard */ /** * Overall Styles */ #header { background: #ffffff url(../images/j_logo.png) no-repeat top right; } #element-box { border-left: 1px solid #c7c8b2; border-right: 1px solid #c7c8b2; } /** * Various Styles */ div.checkin-tick { background: url(../images/admin/tick.png) 20px 50% no-repeat; } /** * Subheader, toolbar, page title */ div.toolbar-box { border-left: 1px solid #c7c8b2; border-right: 1px solid #c7c8b2; } div.toolbar-list li.divider { border-left:1px dotted #e3e4ca; border-right:none; } div.toolbar-list a:hover { border-right: 1px solid #e3e4ca; border-left: 1px solid #c7c8b2; } /** * Pane Slider pane Toggler styles */ .pane-toggler span { background: transparent url(../images/j_arrow_left.png) right 50% no-repeat; } .pane-toggler-down span { background: transparent url(../images/j_arrow_down.png) right 50% no-repeat; } /** * Cpanel Settings */ #cpanel div.icon a:hover, #cpanel div.icon a:focus { border-right: 1px solid #e3e4ca; border-left: 1px solid #c7c8b2; } fieldset#filter-bar { border-left: none; border-right: none; } /** * Admintable Styles */ table.admintable td.key,table.admintable td.paramlist_key { border-left: 1px solid #c7c8b2; border-right: none; } table.paramlist td.paramlist_description { border-left: 1px solid #c7c8b2; border-right: none; } /** * Admin Form Styles */ table.adminform tr { border-left: 1px solid #c7c8b2; border-right: none; } /** * Adminlist Table layout */ table.adminlist.modal { border-right: 1px solid #c7c8b2; border-left: 1px solid #c7c8b2; } /* Table row styles */ table.adminlist tbody tr td, table.adminlist tbody tr th { border-left: 1px solid #c7c8b2; border-right: none; } table.adminlist tbody tr td:last-child { border-left: none; } /** * Saving order icon styling in admin tables */ a.saveorder { background: url(../images/admin/filesave.png) no-repeat; } a.saveorder.inactive { background-position: 0 -16px; } /** * Button styling */ /* Button 1 Type */ /* Use this if you add images to the buttons such as directional arrows */ .button1 a { /* add padding if you are using the directional images */ /* padding: 0 6px 0 30px; */ } /* Button 2 Type */ .button2-right .prev { background-image: url(../images/j_button2_prev.png); background-position: right center; } .button2-right.off .prev { background: url(../images/j_button2_prev_off.png) no-repeat; } .button2-right .start { background-image: url(../images/j_button2_first.png); background-position: right center; } .button2-left .next { background-image: url(../images/j_button2_next.png); background-position: left center; } .button2-left.off .next { /* @TODO check the x position */ background: url(../images/j_button2_next_off.png) 100% 0 no-repeat; } .button2-left .end { background-image: url(../images/j_arrow_left.png); background-position: left center; } .button2-left.off .end { /* @TODO check the x position */ background: url(../images/j_button2_last_off.png) 100% 0 no-repeat; } .button2-left .image { background: url(../images/j_button2_image.png) 100% 0 no-repeat; } .button2-left .readmore { background: url(../images/j_button2_readmore.png) 100% 0 no-repeat; } .button2-left .pagebreak { background: url(../images/j_button2_pagebreak.png) 100% 0 no-repeat; } /** * Tooltips */ /** * System Standard Messages */ #system-message dd.message ul { background: #C3D2E5 url(../images/notice-info.png) 99.5% center no-repeat; } /** * System Error Messages */ #system-message dd.error ul { background: #E6C0C0 url(../images/notice-alert.png) 99.5% top no-repeat; } /** * System Notice Messages */ #system-message dd.notice ul { background: #EFE7B8 url(../images/notice-note.png) 99%.5 top no-repeat; } /** * JGrid styles */ /** * Menu Icons * These icons are used on the Administrator menu * The classes are constructed dynamically when the menu is generated */ /** * Toolbar icons * These icons are used for the toolbar buttons * The classes are constructed dynamically when the toolbar is created */ /** * Quick Icons * Also knows as Header Icons * These are used for the Quick Icons on the Control Panel * The same classes are also assigned the Component Title */ /** * General styles */ .helpFrame { border-right: 0 solid #c7c8b2; border-left: none; border-top: none; } /* -- ACL STYLES relocated from com_users/media/grid.css ----------- */ /* -- ACL PANEL STYLES ----------- */ /* All Tabs */ table.aclsummary-table td.col2, table.aclsummary-table th.col2, table.aclsummary-table td.col3, table.aclsummary-table th.col3, table.aclsummary-table td.col4, table.aclsummary-table th.col4, table.aclsummary-table td.col5, table.aclsummary-table th.col5, table.aclsummary-table td.col6, table.aclsummary-table th.col6, table.aclmodify-table td.col2, table.aclmodify-table th.col2 { border-right: 1px solid #c7c8b2; border-left: none; } /* Icons */ ul.acllegend li.acl-allowed { background:url(../images/admin/icon-16-allow.png) no-repeat right; } ul.acllegend li.acl-denied { background:url(../images/admin/icon-16-deny.png) no-repeat right; } table#acl-config th.acl-groups { border-left: 1px solid #c7c8b2; } table#acl-config th.acl-groups { text-align: right; } .acl-action { margin: auto 0; } /* Icons */ span.icon-16-unset { background: url(../images/admin/icon-16-denyinactive.png) no-repeat right; } span.icon-16-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat right; } span.icon-16-denied { background: url(../images/admin/icon-16-deny.png) no-repeat right; } span.icon-16-locked { background: url(../images/admin/checked_out.png) no-repeat right; } /** * Mod_rewrite Warning */ #jform_sef_rewrite-lbl { background: url(../images/admin/icon-16-notice-note.png) left top no-repeat; } /** * Modal S-Box overrides */ #sbox-window { text-align: right; } /** * Permission Rules */ #permissions-sliders ul#rules table.group-rules td { border-left: solid 1px #c7c8b2; border-right: solid 0 #c7c8b2; } #permissions-sliders ul#rules table.group-rules th { border-left: solid 1px #c7c8b2; border-right: solid 0 #c7c8b2; } /** * Menu Styling */ #menu ul li.node { background-image: url(../images/j_arrow_left.png); background-repeat: no-repeat; background-position: left 50%; } #menu a { background-position: right 50%; } #menu li { border-left: 1px solid #c7c8b2; border-right: 0 solid #c7c8b2; } #menu li li li a:focus { border-right: 1px solid #fafafa; } /* Installer Database */ #installer-database p.warning { background-position: center right; } #installer-database p.nowarning { background-position: center right; } PKb��\� ��,templates/hathor/css/colour_highcontrast.cssnu�[���@charset "UTF-8"; /** * @package Joomla.Administrator * @subpackage templates.hathor * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 1.6 * * Changes to use high contrast colors */ /** * Main Colors * #163365 Text background/border * #1c4181 Alternative text background 1/border * #1b3f7c Alternative text background 2/border * #fcff20 Text * #ffffff Highlighted Text * #10254a Main hover color/border * #000000 Highlight/shadow border * #a20000 Invalid Alert Color * #00f800 Success Alert Color * #feffbf Disabled Menu/Protected * * MENU: * * Standard Link * #1b3f7c Link Background * #ffffff Text * #10254a Border * * Pressed Link * #163365 Text background * #ffffff Highlighted Text * #000000 Left & Top Border * #1b3f7c Right & Bottom Border * * Background behind the links * #163365 Background * #122b56 Border * * Inactive (Disabled) * #cccccc Text * * SUBMENU * #163365 Active Tab Background * #fcff20 Active Tab Text color * #10254a Hover background * #10254a Border * #1b3f7c "off" Tab Background * #ffffff "off" Tab Text color * * #1c4181 Color behind the tabs */ /** * General styles */ body { background-color: #1c4181; color: #fcff20; } div#sbox-content { background-color: #1c4181; color: #fcff20; } h1 { color: #163365; } a:link { color: #ffffff; } a:visited { color: #ffffff; } a:hover,a:focus { text-decoration: underline; color: #fcff20; } /** * Overall Styles */ #header { background: #ffffff url(../images/j_logo.png) no-repeat; } #header h1.title { color: #163365; } #footer { background: #163365; border: 1px solid #1b3f7c; } #nav { background: #163365; border: 1px solid #1b3f7c; } #content { background: #1c4181; } #no-submenu { border-bottom: 1px solid #1b3f7c; } #element-box { background: #163365; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #1b3f7c; } #element-box.login { border-top: 1px solid #1b3f7c; } /** * Status layout */ #module-status a, #module-status span { color: #163365; } #module-status .preview { background: url(../images/menu/icon-16-media.png) 3px 3px no-repeat; } #module-status .viewsite { background: url(../images/menu/icon-16-viewsite.png) 3px 3px no-repeat; } #module-status .unread-messages,#module-status .no-unread-messages { background: url(../images/menu/icon-16-messages.png) 3px 3px no-repeat; } #module-status .loggedin-users { background: url(../images/menu/icon-16-user.png) 3px 3px no-repeat; } #module-status .backloggedin-users { background: url(../images/menu/icon-16-back-user.png) 3px 3px no-repeat; } #module-status .multilanguage { background: url(../images/menu/icon-16-language.png) 3px 3px no-repeat; } #module-status .logout { background: url(../images/menu/icon-16-logout.png) 3px 3px no-repeat; } /** * Various Styles */ .enabled, .success , .allow, span.writable { color: #00f800; } .disabled, p.error, .warning, .deny, span.unwritable { color: #a20000; } .nowarning { color: #fcff20; } .none,.protected { color: #feffbf; } span.note { background: #163365; color: #fcff20; } div.checkin-tick { background: url(../images/admin/tick.png) 20px 50% no-repeat; } /** * Overlib */ .ol-foreground { background-color: #fcff20; } .ol-background { background-color: #1b3f7c; } .ol-textfont { color: #163365; } .ol-captionfont { color: #ffffff; } .ol-captionfont a { color: #1b3f7c; } /** * Subheader, toolbar, page title */ .pagetitle h2 { color: #fcff20; } div.configuration { color: #fcff20; background-image: url(../images/menu/icon-16-config.png); background-repeat: no-repeat; } div.toolbar-box { border-right: 1px solid #10254a; border-bottom: 1px solid #10254a; border-left: 1px solid #10254a; background: #163365; } div.toolbar-list li { color: #fcff20; } div.toolbar-list li.divider { border-right:1px dotted #1b3f7c; } div.toolbar-list a { border: 1px solid #10254a; color: #fcff20; background: #1b3f7c; } div.toolbar-list a:hover { border-left: 1px solid #000000; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; background: #163365; color: #ffffff; } /** * Pane Slider pane Toggler styles */ .pane-sliders .title { color: #fcff20; border: 1px solid #10254a; } .pane-sliders .panel { border: 1px solid #1b3f7c; } .pane-sliders .panel h3 { background: #1c4181; color: #fcff20; } .pane-sliders .content { background: #163365; } .pane-sliders .adminlist { border: 0 none; } .pane-sliders .adminlist td { border: 0 none; } .pane-toggler span { background: transparent url(../images/j_arrow.png) 5px 50% no-repeat; } .pane-toggler-down span { background: transparent url(../images/j_arrow_down.png) 5px 50% no-repeat; } .pane-toggler-down { border-bottom: 1px solid #1b3f7c; } /** * Tabs */ dl.tabs dt { border: 1px solid #10254a; background: #1c4181; color: #fcff20; } dl.tabs dt.open { background: #163365; border-bottom: 1px solid #163365; color: #fcff20; } dl.tabs dt.open a:visited { color: #fcff20; } div.current { border: 1px solid #10254a; background: #163365; } div.current dd { padding: 0; margin: 0; } div#menu-assignment h3 { border-bottom: 1px solid #fcff20; } /** * Login Settings */ #login-page .pagetitle h2 { background-color: transparent; /* background-color: #1c4181; */ color: #fcff20; } #login-page #header { border-bottom: 1px solid #1b3f7c; } #login-page #content { background: #1c4181; } #login-page #lock { background: url(../images/j_login_lock.png) 50% 0 no-repeat; } #login-page #element-box.login { background: #163365; border: 1px solid #10254a; } #form-login { border: 1px solid #10254a; background: #1c4181; } #form-login label { color: #fcff20; } #form-login div.button1 a { color: #fcff20; background-color: #1b3f7c; border: 1px solid #10254a; } #form-login div.button1 a:hover,#form-login div.button1 a:focus { text-decoration: none; background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #fcff20; } /** * Cpanel Settings */ .cpanel-page div#element-box { background: #163365; border: 1px solid #10254a; } #cpanel div.icon a, .cpanel div.icon a { border: 1px solid #10254a; background: #1b3f7c; color: #fcff20; } #cpanel div.icon a:hover, #cpanel div.icon a:focus, .cpanel div.icon a:hover, .cpanel div.icon a:focus { border-left: 1px solid #000000; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; background: #163365; color: #ffffff; } /** * Form Styles */ fieldset { border: 3px dotted #1b3f7c; } legend { color: #fcff20; } fieldset ul.checklist input:focus { outline: thin dotted #333333; } fieldset#filter-bar { border-bottom: 1px solid #1b3f7c; } fieldset#filter-bar ol, fieldset#filter-bar ul { border: 0; } fieldset#filter-bar ol li fieldset, fieldset#filter-bar ul li fieldset { border: 0; } input,span.faux-input, select,option { color: #fcff20; background-color: #163365; border: 1px solid #1b3f7c; } /* Note: these visual cues should be augmented by aria */ .invalid { color: #a20000; background-color: #ffffff; } /* must be augmented by aria at the same time if changed dynamically by js aria-invalid=true or aria-invalid=false */ input.invalid { border: 1px solid #a20000; } input.required { background-color: #fcff20; color: #163365; border: 1px solid #1b3f7c; } input.disabled { background-color: #eeeeee; } /* Inputs used as buttons */ input[type="button"], input[type="submit"], input[type="reset"] { background-color: #1b3f7c; border: 1px solid #10254a; color: #fcff20; } input[type="button"]:hover, input[type="button"]:focus, input[type="submit"]:hover, input[type="submit"]:focus, input[type="reset"]:hover, input[type="reset"]:focus { background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #fcff20; } textarea { color: #fcff20; background-color: #163365; border: 1px solid #1b3f7c; } input:focus, select:focus, textarea:focus, option:focus, input:hover, select:hover, textarea:hover, option:hover { background-color: #10254a; color: #fcff20; } /** * Option or Parameter styles */ .paramrules { background: #1b3f7c; } span.gi { color: #ffffff; } /** * Admintable Styles */ table.admintable td.key,table.admintable td.paramlist_key { background-color: #1c4181; color: #fcff20; border-bottom: 1px solid #10254a; border-right: 1px solid #10254a; } table.paramlist td.paramlist_description { background-color: #1c4181; color: #fcff20; border-bottom: 1px solid #10254a; border-right: 1px solid #10254a; } /** * Admin Form Styles */ fieldset.adminform { border: 1px solid #1b3f7c; } /* Table styles are for use with tabular data */ table.adminform { background-color: #163365; } table.adminform tr.row0 { background-color: #163365; } table.adminform tr.row1 { background-color: #10254a; } table.adminform th { color: #fcff20; background: #163365; } table.adminform tr { border-bottom: 1px solid #1b3f7c; border-right: 1px solid #1b3f7c; } /** * Adminlist Table layout */ table.adminlist { background-color: #163365; color: #fcff20; } table.adminlist a { color: #ffffff; } table.adminlist thead th { background: #163365; color: #fcff20; } /* Table row styles */ table.adminlist tbody tr { background: #163365; } table.adminlist tbody tr.row1 { background: #163365; } table.adminlist tbody tr.row1 td, table.adminlist tbody tr.row1 th { border-bottom: 1px solid #1b3f7c; } table.adminlist tbody tr.row0:hover td, table.adminlist tbody tr.row1:hover td, table.adminlist tbody tr.row0:hover th, table.adminlist tbody tr.row1:hover th, table.adminlist tbody tr.row0:focus td, table.adminlist tbody tr.row1:focus td, table.adminlist tbody tr.row0:focus th, table.adminlist tbody tr.row1:focus th { background-color: #10254a; } table.adminlist tbody tr td, table.adminlist tbody tr th { border-right: 1px solid #1b3f7c; } table.adminlist tbody tr td:last-child { border-right: none; } table.adminlist tbody tr.row0:last-child td, table.adminlist tbody tr.row0:last-child th { border-bottom: 1px solid #1b3f7c; } table.adminlist tbody tr.row0 td, table.adminlist tbody tr.row0 th { background: #1c4181; } table.adminlist tfoot tr { color: #fcff20; } /* Table td/th styles */ table.adminlist tfoot td,table.adminlist tfoot th { background-color: #163365; border-top: 1px solid #1b3f7c; } /** * Adminlist buttons */ table.adminlist tr td.btns a { background-color: #1b3f7c; border: 1px solid #10254a; color: #fcff20; } table.adminlist tr td.btns a:hover, table.adminlist tr td.btns a:active, table.adminlist tr td.btns a:focus { background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #fcff20; } /** * Saving order icon styling in admin tables */ a.saveorder { background: url(../images/admin/filesave.png) no-repeat; } a.saveorder.inactive { background-position: 0 -16px; } /** * Saving order icon styling in admin tables */ fieldset.batch { background: #1c4181; } /** * Button styling */ button { color: #fcff20; background-color: #1b3f7c; border: 1px solid #10254a; } button:hover, button:focus { background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #fcff20; } /* Button 1 Type */ .button1 { border: none; background: #1b3f7c; } /* Use this if you add images to the buttons such as directional arrows */ .button1 .next { /* background: transparent url(../images/j_button1_next.png) 100% 0 no-repeat; */ } .button1 a { border: 1px solid #10254a; color: #fcff20; } .button1 a:hover,.button1 a:focus { text-decoration: none; background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #fcff20; } /* Button 2 Type */ .button2-left,.button2-right { border: none; background: #1b3f7c; } .button2-left a,.button2-right a,.button2-left span,.button2-right span { color: #fcff20; border: 1px solid #10254a; } /* these are inactive buttons */ .button2-left span,.button2-right span { color: #cccccc; border: 1px solid #10254a; } .page span,.blank span { color: #fcff20; border: 1px solid #10254a; } .button2-left a:hover,.button2-right a:hover,.button2-left a:focus,.button2-right a:focus { text-decoration: none; background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #fcff20; } /** * Pagination styles */ /* Grey out the current page number */ .pagination .page span { color: #cccccc; } /** * Tooltips */ .tip { background: #000000; border: 1px solid #FFFFFF; } .tip-title { background: url(../images/selector-arrow-std.png) no-repeat; } /** * Calendar */ a img.calendar { background: url(../images/calendar.png) no-repeat; } /** * JGrid styles */ .jgrid span.publish { background-image: url(../images/admin/tick.png); } .jgrid span.unpublish { background-image: url(../images/admin/publish_x.png); } .jgrid span.archive { background-image: url(../images/menu/icon-16-archive.png); } .jgrid span.trash { background-image: url(../images/menu/icon-16-trash.png); } .jgrid span.default { background-image: url(../images/menu/icon-16-default.png); } .jgrid span.notdefault { background-image: url(../images/menu/icon-16-notdefault.png); } .jgrid span.checkedout { background-image: url(../images/admin/checked_out.png); } .jgrid span.downarrow { background-image: url(../images/admin/downarrow.png); } .jgrid span.downarrow_disabled { background-image: url(../images/admin/downarrow0.png); } .jgrid span.uparrow { background-image: url(../images/admin/uparrow.png); } .jgrid span.uparrow_disabled { background-image: url(../images/admin/uparrow0.png); } .jgrid span.published { background-image: url(../images/admin/publish_g.png); } .jgrid span.expired { background-image: url(../images/admin/publish_r.png); } .jgrid span.pending { background-image: url(../images/admin/publish_y.png); } .jgrid span.warning { background-image: url(../images/admin/publish_y.png); } /** * Menu Icons * These icons are used on the Administrator menu * The classes are constructed dynamically when the menu is generated */ .icon-16-archive { background-image: url(../images/menu/icon-16-archive.png); } .icon-16-article { background-image: url(../images/menu/icon-16-article.png); } .icon-16-banners { background-image: url(../images/menu/icon-16-banner.png); } .icon-16-banners-clients { background-image: url(../images/menu/icon-16-banner-client.png); } .icon-16-banners-tracks { background-image: url(../images/menu/icon-16-banner-tracks.png); } .icon-16-banners-cat { background-image: url(../images/menu/icon-16-banner-categories.png); } .icon-16-category { background-image: url(../images/menu/icon-16-category.png); } .icon-16-checkin { background-image: url(../images/menu/icon-16-checkin.png); } .icon-16-clear { background-image: url(../images/menu/icon-16-clear.png); } .icon-16-component { background-image: url(../images/menu/icon-16-component.png); } .icon-16-config { background-image: url(../images/menu/icon-16-config.png); } .icon-16-contact { background-image: url(../images/menu/icon-16-contacts.png); } .icon-16-contact-cat { background-image: url(../images/menu/icon-16-contacts-categories.png); } .icon-16-content { background-image: url(../images/menu/icon-16-content.png); } .icon-16-cpanel { background-image: url(../images/menu/icon-16-cpanel.png); } .icon-16-default { background-image: url(../images/menu/icon-16-default.png); } .icon-16-featured { background-image: url(../images/menu/icon-16-featured.png); } .icon-16-groups { background-image: url(../images/menu/icon-16-groups.png); } .icon-16-help { background-image: url(../images/menu/icon-16-help.png); } .icon-16-help-this { background-image: url(../images/menu/icon-16-help-this.png); } .icon-16-help-forum { background-image: url(../images/menu/icon-16-help-forum.png); } .icon-16-help-docs { background-image: url(../images/menu/icon-16-help-docs.png); } .icon-16-help-jed { background-image: url(../images/menu/icon-16-help-jed.png); } .icon-16-help-jrd { background-image: url(../images/menu/icon-16-help-jrd.png); } .icon-16-help-community { background-image: url(../images/menu/icon-16-help-community.png); } .icon-16-help-security { background-image: url(../images/menu/icon-16-help-security.png); } .icon-16-help-dev { background-image: url(../images/menu/icon-16-help-dev.png); } .icon-16-help-shop { background-image: url(../images/menu/icon-16-help-shop.png); } .icon-16-info { background-image: url(../images/menu/icon-16-info.png); } .icon-16-install { background-image: url(../images/menu/icon-16-install.png); } .icon-16-joomlaupdate { background-image: url(../images/menu/icon-16-install.png); } .icon-16-language { background-image: url(../images/menu/icon-16-language.png); } .icon-16-levels { background-image: url(../images/menu/icon-16-levels.png); } .icon-16-logout { background-image: url(../images/menu/icon-16-logout.png); } .icon-16-maintenance { background-image: url(../images/menu/icon-16-maintenance.png); } .icon-16-massmail { background-image: url(../images/menu/icon-16-massmail.png); } .icon-16-media { background-image: url(../images/menu/icon-16-media.png); } .icon-16-menu { background-image: url(../images/menu/icon-16-menu.png); } .icon-16-menumgr { background-image: url(../images/menu/icon-16-menumgr.png); } .icon-16-messages { background-image: url(../images/menu/icon-16-messaging.png); } .icon-16-messages-add { background-image: url(../images/menu/icon-16-new-privatemessage.png); } .icon-16-messages-read { background-image: url(../images/menu/icon-16-messages.png); } .icon-16-module { background-image: url(../images/menu/icon-16-module.png); } /* .icon-16-new { background-image: url(../images/menu/icon-16-new.png); } */ .icon-16-newarticle { background-image: url(../images/menu/icon-16-newarticle.png); } .icon-16-newcategory { background-image: url(../images/menu/icon-16-newcategory.png); } .icon-16-newgroup { background-image: url(../images/menu/icon-16-newgroup.png); } .icon-16-newlevel { background-image: url(../images/menu/icon-16-newlevel.png); } .icon-16-newuser { background-image: url(../images/menu/icon-16-newuser.png); } .icon-16-plugin { background-image: url(../images/menu/icon-16-plugin.png); } .icon-16-profile { background-image: url(../images/menu/icon-16-user.png); } .icon-16-purge { background-image: url(../images/menu/icon-16-purge.png); } .icon-16-readmess { background-image: url(../images/menu/icon-16-readmess.png); } .icon-16-section { background-image: url(../images/menu/icon-16-section.png); } .icon-16-static { background-image: url(../images/menu/icon-16-static.png); } .icon-16-stats { background-image: url(../images/menu/icon-16-stats.png); } .icon-16-themes { background-image: url(../images/menu/icon-16-themes.png); } .icon-16-trash { background-image: url(../images/menu/icon-16-trash.png); } .icon-16-user { background-image: url(../images/menu/icon-16-user.png); } .icon-16-user-note { background-image: url(../images/menu/icon-16-user-note.png); } .icon-16-delete { background-image: url(../images/menu/icon-16-delete.png); } .icon-16-help-trans { background-image: url(../images/menu/icon-16-help-trans.png); } .icon-16-newsfeeds { background-image: url(../images/menu/icon-16-newsfeeds.png); } .icon-16-newsfeeds-cat { background-image: url(../images/menu/icon-16-newsfeeds-cat.png); } .icon-16-redirect { background-image: url(../images/menu/icon-16-redirect.png); } .icon-16-search { background-image: url(../images/menu/icon-16-search.png); } .icon-16-finder { background-image: url(../images/menu/icon-16-search.png); } .icon-16-weblinks { background-image: url(../images/menu/icon-16-links.png); } .icon-16-weblinks-cat { background-image: url(../images/menu/icon-16-links-cat.png); } /** * Toolbar icons * These icons are used for the toolbar buttons * The classes are constructed dynamically when the toolbar is created */ .icon-32-send { background-image: url(../images/toolbar/icon-32-send.png); } .icon-32-delete { background-image: url(../images/toolbar/icon-32-delete.png); } .icon-32-help { background-image: url(../images/toolbar/icon-32-help.png); } .icon-32-cancel { background-image: url(../images/toolbar/icon-32-cancel.png); } .icon-32-checkin { background-image: url(../images/toolbar/icon-32-checkin.png); } .icon-32-options{ background-image: url(../images/toolbar/icon-32-config.png); } .icon-32-apply { background-image: url(../images/toolbar/icon-32-apply.png); } .icon-32-back { background-image: url(../images/toolbar/icon-32-back.png); } .icon-32-forward { background-image: url(../images/toolbar/icon-32-forward.png); } .icon-32-save { background-image: url(../images/toolbar/icon-32-save.png); } .icon-32-edit { background-image: url(../images/toolbar/icon-32-edit.png); } .icon-32-copy { background-image: url(../images/toolbar/icon-32-copy.png); } .icon-32-move { background-image: url(../images/toolbar/icon-32-move.png); } .icon-32-new { background-image: url(../images/toolbar/icon-32-new.png); } .icon-32-upload { background-image: url(../images/toolbar/icon-32-upload.png); } .icon-32-assign { background-image: url(../images/toolbar/icon-32-publish.png); } .icon-32-html { background-image: url(../images/toolbar/icon-32-html.png); } .icon-32-css { background-image: url(../images/toolbar/icon-32-css.png); } .icon-32-menus { background-image: url(../images/toolbar/icon-32-menu.png); } .icon-32-publish { background-image: url(../images/toolbar/icon-32-publish.png); } .icon-32-unblock { background-image: url(../images/toolbar/icon-32-unblock.png); } .icon-32-unpublish { background-image: url(../images/toolbar/icon-32-unpublish.png); } .icon-32-restore { background-image: url(../images/toolbar/icon-32-revert.png); } .icon-32-trash { background-image: url(../images/toolbar/icon-32-trash.png); } .icon-32-archive { background-image: url(../images/toolbar/icon-32-archive.png); } .icon-32-unarchive { background-image: url(../images/toolbar/icon-32-unarchive.png); } .icon-32-preview { background-image: url(../images/toolbar/icon-32-preview.png); } .icon-32-default { background-image: url(../images/toolbar/icon-32-default.png); } .icon-32-refresh { background-image: url(../images/toolbar/icon-32-refresh.png); } .icon-32-save-new { background-image: url(../images/toolbar/icon-32-save-new.png); } .icon-32-save-copy { background-image: url(../images/toolbar/icon-32-save-copy.png); } .icon-32-error { background-image: url(../images/toolbar/icon-32-error.png); } .icon-32-new-style { background-image: url(../images/toolbar/icon-32-new-style.png); } .icon-32-delete-style { background-image: url(../images/toolbar/icon-32-delete-style.png); } .icon-32-purge { background-image: url(../images/toolbar/icon-32-purge.png); } .icon-32-remove { background-image: url(../images/toolbar/icon-32-remove.png); } .icon-32-featured { background-image: url(../images/toolbar/icon-32-featured.png); } .icon-32-unfeatured { background-image: url(../images/toolbar/icon-32-featured.png); background-position: 0% 100%; } .icon-32-export { background-image: url(../images/toolbar/icon-32-export.png); } .icon-32-stats { background-image: url(../images/toolbar/icon-32-stats.png); } .icon-32-print { background-image: url(../images/toolbar/icon-32-print.png); } .icon-32-batch { background-image: url(../images/toolbar/icon-32-batch.png); } .icon-32-envelope { background-image: url(../images/toolbar/icon-32-messaging.png); } .icon-32-download { background-image: url(../images/toolbar/icon-32-export.png); } .icon-32-bars { background-image: url(../images/toolbar/icon-32-stats.png); } /** * Quick Icons * Also knows as Header Icons * These are used for the Quick Icons on the Control Panel * The same classes are also assigned the Component Title */ .icon-48-categories { background-image: url(../images/header/icon-48-category.png); } .icon-48-category-edit { background-image: url(../images/header/icon-48-category.png); } .icon-48-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-generic { background-image: url(../images/header/icon-48-generic.png); } .icon-48-banners { background-image: url(../images/header/icon-48-banner.png); } .icon-48-banners-categories { background-image: url(../images/header/icon-48-banner-categories.png); } .icon-48-banners-category-edit { background-image: url(../images/header/icon-48-banner-categories.png); } .icon-48-banners-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-banners-clients { background-image: url(../images/header/icon-48-banner-client.png); } .icon-48-banners-tracks { background-image: url(../images/header/icon-48-banner-tracks.png); } .icon-48-checkin { background-image: url(../images/header/icon-48-checkin.png); } .icon-48-clear { background-image: url(../images/header/icon-48-clear.png); } .icon-48-contact { background-image: url(../images/header/icon-48-contacts.png); } .icon-48-contact-categories { background-image: url(../images/header/icon-48-contacts-categories.png); } .icon-48-contact-category-edit { background-image: url(../images/header/icon-48-contacts-categories.png); } .icon-48-contact-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-purge { background-image: url(../images/header/icon-48-purge.png); } .icon-48-cpanel { background-image: url(../images/header/icon-48-cpanel.png); } .icon-48-config { background-image: url(../images/header/icon-48-config.png); } .icon-48-groups { background-image: url(../images/header/icon-48-groups.png); } .icon-48-groups-add { background-image: url(../images/header/icon-48-groups-add.png); } .icon-48-levels { background-image: url(../images/header/icon-48-levels.png); } .icon-48-levels-add { background-image: url(../images/header/icon-48-levels-add.png); } .icon-48-module { background-image: url(../images/header/icon-48-module.png); } .icon-48-menu { background-image: url(../images/header/icon-48-menu.png); } .icon-48-menu-add { background-image: url(../images/header/icon-48-menu-add.png); } .icon-48-menumgr { background-image: url(../images/header/icon-48-menumgr.png); } .icon-48-trash { background-image: url(../images/header/icon-48-trash.png); } .icon-48-user { background-image: url(../images/header/icon-48-user.png); } .icon-48-user-add { background-image: url(../images/header/icon-48-user-add.png); } .icon-48-user-edit { background-image: url(../images/header/icon-48-user-edit.png); } .icon-48-user-profile { background-image: url(../images/header/icon-48-user-profile.png); } .icon-48-inbox { background-image: url(../images/header/icon-48-inbox.png); } .icon-48-new-privatemessage { background-image: url(../images/header/icon-48-new-privatemessage.png); } .icon-48-msgconfig { background-image: url(../images/header/icon-48-message_config.png); } .icon-48-langmanager { background-image: url(../images/header/icon-48-language.png); } .icon-48-mediamanager { background-image: url(../images/header/icon-48-media.png); } .icon-48-plugin { background-image: url(../images/header/icon-48-plugin.png); } .icon-48-help_header { background-image: url(../images/header/icon-48-help_header.png); } .icon-48-impressions { background-image: url(../images/header/icon-48-stats.png); } .icon-48-browser { background-image: url(../images/header/icon-48-stats.png); } .icon-48-searchtext { background-image: url(../images/header/icon-48-stats.png); } .icon-48-thememanager { background-image: url(../images/header/icon-48-themes.png); } .icon-48-assoc { background-image: url(../images/header/icon-48-assoc.png); } .icon-48-writemess { background-image: url(../images/header/icon-48-writemess.png); } .icon-48-featured { background-image: url(../images/header/icon-48-featured.png); } .icon-48-sections { background-image: url(../images/header/icon-48-section.png); } .icon-48-article-add { background-image: url(../images/header/icon-48-article-add.png); } .icon-48-article-edit { background-image: url(../images/header/icon-48-article-edit.png); } .icon-48-article { background-image: url(../images/header/icon-48-article.png); } .icon-48-content-categories { background-image: url(../images/header/icon-48-category.png); } .icon-48-content-category-edit { background-image: url(../images/header/icon-48-category.png); } .icon-48-content-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-install { background-image: url(../images/header/icon-48-extension.png); } .icon-48-dbbackup { background-image: url(../images/header/icon-48-backup.png); } .icon-48-dbrestore { background-image: url(../images/header/icon-48-dbrestore.png); } .icon-48-dbquery { background-image: url(../images/header/icon-48-query.png); } .icon-48-systeminfo { background-image: url(../images/header/icon-48-info.png); } .icon-48-massmail { background-image: url(../images/header/icon-48-massmail.png); } .icon-48-redirect { background-image: url(../images/header/icon-48-redirect.png); } .icon-48-search { background-image: url(../images/header/icon-48-search.png); } .icon-48-finder { background-image: url(../images/header/icon-48-search.png); } .icon-48-newsfeeds { background-image: url(../images/header/icon-48-newsfeeds.png); } .icon-48-newsfeeds-categories { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } .icon-48-newsfeeds-category-edit { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } .icon-48-newsfeeds-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-weblinks { background-image: url(../images/header/icon-48-links.png); } .icon-48-weblinks-categories { background-image: url(../images/header/icon-48-links-cat.png); } .icon-48-weblinks-category-edit { background-image: url(../images/header/icon-48-links-cat.png); } .icon-48-weblinks-category-add { background-image: url(../images/header/icon-48-category-add.png); } .icon-48-tags { background-image: url(../images/header/icon-48-tags.png); } /** * General styles */ div.message { border: 1px solid #1b3f7c; color: #333; } .helpFrame { border-left: 0 solid #1b3f7c; border-right: none; border-top: none; border-bottom: none; } /** * Override mootree.css styles * media/system/css/mootree.css */ .mooTree_selected { background-color: #10254a; } /** * Modal Styles */ dl.menu_type dt { border-bottom: 1px solid #1b3f7c; } ul#new-modules-list { border-top: 1px solid #1b3f7c; } /** * Override mediamanager.css styles * administrator/components/com_media/assets/mediamanager.css */ #folderview input#folderpath { width: 65%; color: #fcff20; background-color: #163365; border: 1px solid #1b3f7c; } .upload-queue .queue-loader { background-color: #fcff20; color: #163365; border: 1px inset #fcff20; } .upload-queue .queue-subloader { background-color: #1b3f7c; color: #fcff20; } /** * User Accessibility */ /* Skip to Content Visual Styling */ #skiplinkholder a, #skiplinkholder a:link, #skiplinkholder a:visited { color: #163365; background: #fcff20; } /** * Admin Form Styles */ fieldset.panelform { border: none 0; } /** * ACL STYLES relocated from com_users/media/grid.css */ a.move_up { background-image: url('../images/admin/uparrow.png'); } span.move_up { background-image: url('../images/admin/uparrow0.png'); } a.move_down { background-image: url('../images/admin/downarrow.png'); } span.move_down { background-image: url('../images/admin/downarrow0.png'); } a.grid_false { background-image: url('../images/admin/publish_x.png'); } a.grid_true { background-image: url('../images/admin/tick.png'); } a.grid_trash { background-image: url('../images/admin/icon-16-trash.png'); } /** * ACL PANEL STYLES */ /* All Tabs */ tr.row1 { background-color: #1c4181; } /* Summary Tab */ table.aclsummary-table td.col2, table.aclsummary-table th.col2, table.aclsummary-table td.col3, table.aclsummary-table th.col3, table.aclsummary-table td.col4, table.aclsummary-table th.col4, table.aclsummary-table td.col5, table.aclsummary-table th.col5, table.aclsummary-table td.col6, table.aclsummary-table th.col6, table.aclmodify-table td.col2, table.aclmodify-table th.col2 { border-left: 1px solid #cbcbcb; } /* Icons */ span.icon-16-unset { background: url(../images/admin/icon-16-denyinactive.png) no-repeat; } span.icon-16-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat; } span.icon-16-denied { background: url(../images/admin/icon-16-deny.png) no-repeat; } span.icon-16-locked { background: url(../images/admin/checked_out.png) 0 0 no-repeat; } label.icon-16-allow { background: url(../images/admin/icon-16-allow.png) no-repeat; } label.icon-16-deny { background: url(../images/admin/icon-16-deny.png) no-repeat; } a.icon-16-allow { background: url(../images/admin/icon-16-allow.png) no-repeat ; } a.icon-16-deny { background: url(../images/admin/icon-16-deny.png) no-repeat ; } a.icon-16-allowinactive { background: url(../images/admin/icon-16-allowinactive.png) no-repeat ; } a.icon-16-denyinactive { background: url(../images/admin/icon-16-denyinactive.png) no-repeat ; } /* ACL footer/legend */ ul.acllegend li.acl-allowed { background: url(../images/admin/icon-16-allow.png) no-repeat left; } ul.acllegend li.acl-denied { background: url(../images/admin/icon-16-deny.png) no-repeat left; } li.acl-editgroups, li.acl-resetbtn { background-color: #1b3f7c; border: 1px solid #10254a; } li.acl-editgroups a, li.acl-resetbtn a { color: #fcff20 } li.acl-editgroups:hover, li.acl-resetbtn:hover, li.acl-editgroups:focus, li.acl-resetbtn:focus { background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #fcff20; } /* ACL Config --------- */ table#acl-config { border: 1px solid #10254a; background: #1c4181; } table#acl-config th, table#acl-config td { background: #1c4181; border-bottom: 1px solid #10254a; border-top: none; border-left: none; border-right: none; } table#acl-config th.acl-groups { border-right: 1px solid #10254a; } /** * Mod_rewrite Warning */ #jform_sef_rewrite-lbl { background: url(../images/admin/icon-16-notice-note.png) right top no-repeat; } /** * Options modal- config */ /* * * Permission Rules */ #permissions-sliders ul#rules, #permissions-sliders ul#rules ul { border:solid 0 #1b3f7c; background:#163365; } ul#rules li .pane-sliders .panel h3.title { border:solid 0 #1b3f7c; } #permissions-sliders ul#rules .pane-slider { border:solid 1px #1b3f7c; } #permissions-sliders ul#rules li h3 { background:#1c4181; border: 1px solid #1b3f7c; } #permissions-sliders ul#rules li h3.pane-toggler-down a { border:solid 0; } #permissions-sliders ul#rules .group-kind { color:#fcff20; } #permissions-sliders ul#rules table.group-rules td { border-right:solid 1px #1b3f7c; border-bottom:solid 1px #1b3f7c; } #permissions-sliders ul#rules table.group-rules th { background: #10254a; border-right:solid 1px #1b3f7c; border-bottom:solid 1px #1b3f7c; color:#fcff20; } ul#rules table.aclmodify-table { border:solid 1px #fcff20; } ul#rules table.group-rules td label { border:solid 0 #1b3f7c; } #permissions-sliders ul#rules .mypanel { border:solid 0 #1b3f7c; } #permissions-sliders ul#rules table.group-rules td { background: #163365; } #permissions-sliders span.level { color:#ffffff; background-image:none; } /* * Debug styles */ .check-0, table.adminlist tbody td.check-0, table.adminlist tbody tr:hover td.check-0 { background-color: #FFFFCF; color: #163365; } .check-a, table.adminlist tbody td.check-a, table.adminlist tbody tr:hover td.check-a { background-color: #CFFFDA; color: #163365; } .check-d, table.adminlist tbody td.check-d, table.adminlist tbody tr:hover td.check-d { background-color: #FFCFCF; color: #163365; } /** * System Messages */ #system-message dd ul { color: #fcff20; border-top: 3px solid #84A7DB; border-bottom: 3px solid #84A7DB; } #system-message dd.error ul { color: #fcff20; background: #1c4181 url(../images/notice-alert.png) 4px top no-repeat; border-top: 3px solid #a20000; border-bottom: 3px solid #a20000; } #system-message dd.message ul { color: #fcff20; background: #10254a url(../images/notice-info.png) 4px center no-repeat; border-top: 3px solid #EFE7B8; border-bottom: 3px solid #EFE7B8; } #system-message dd.notice ul { color: #fcff20; background: #10254a url(../images/notice-note.png) 4px top no-repeat; border-top: 3px solid #F0DC7E; border-bottom: 3px solid #F0DC7E; } /** CSS file for Accessible Admin Menu * based on Matt Carrolls' son of suckerfish * with javascript by Bill Tomczak */ /* Note: set up the font-size on the id and used 100% on the elements. If ul/li/a are different ems, then the shifting back via non-js keyboard doesn't work properly */ /** * Menu Styling */ #menu { /* this is on the main ul */ color: #ffffff; } #menu ul { /* all lists */ background-color: #163365; color: #ffffff; } #menu ul li.node { background: #163365 url(../images/j_arrow.png) no-repeat right 50%; } #menu a { color: #ffffff; background-repeat: no-repeat; background-position: left 50%; background-color: #1b3f7c; } #menu li { /* all list items */ background-color: #163365; border-right: 1px solid #000000; } #menu li a { border: 1px solid #10254a; } #menu li li a { border: 1px solid #10254a; } #menu li a:hover, #menu li a:active, #menu li a:focus { background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #ffffff; } #menu li.disabled a:hover, #menu li.disabled a:focus, #menu li.disabled a { color: #feffbf; background-color: #1b3f7c; border-top: 1px solid #163365; border-right: 1px solid #10254a; border-bottom: 1px solid #163365; border-left: 1px solid #10254a; } #menu li ul { /* second-level lists */ border-top: 1px solid #10254a; border-bottom: 2px solid #10254a; } #menu li li { /* second-level row */ background-color: #163365; } #menu li:hover ul,#menu li.sfhover ul { /* lists nested under hovered list items */ margin-left: 0; border-left: 1px solid #122b56; border-right: 1px solid #122b56; } #menu li li:hover ul,#menu li li.sfhover ul { border-left: 1px solid #122b56; border-right: 1px solid #122b56; } /** * Styling parents */ /* 1 level - sfhover */ #menu li.sfhover a { background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #fcff20; } /* 2 level - normal */ #menu li.sfhover li a { /* background-color: #f0f0f0; */ background-color: #1b3f7c; border: 1px solid #10254a; color: #ffffff; } /* 2 level - hover */ #menu li.sfhover li.sfhover a,#menu li li a:focus { background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #fcff20; } /* 3 level - normal */ #menu li.sfhover li.sfhover li a { background-color: #1b3f7c; border: 1px solid #10254a; color: #ffffff; } /* 3 level - hover */ #menu li.sfhover li.sfhover li.sfhover a { background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #fcff20; } /* bring back the focus elements into view */ #menu li li a:focus, #menu li li li a:focus { background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #ffffff; } #menu li li li a:focus { background-color: #163365; border-top: 1px solid #000000; border-right: 1px solid #1b3f7c; border-bottom: 1px solid #1b3f7c; border-left: 1px solid #000000; color: #ffffff; } /** * Submenu styling */ #submenu { border-bottom: 1px solid #10254a; /* border-bottom plus padding-bottom is the technique */ /* This is the background befind the tabs */ background: #1c4181; } #submenu a, #submenu span.nolink { background: #1b3f7c; border: 1px solid #10254a; color: #ffffff; } #submenu a:hover, #submenu a:focus { background-color: #10254a; } #submenu a.active, #submenu span.nolink.active { background: #163365; border-bottom: 1px solid #163365; color: #fcff20; } /** * Webkit fixes **/ input:-webkit-autofill { background-color: #163365 !important; } /* -- Codemirror Editor ----------- */ div.editor-border, div.CodeMirror-wrapping { border: 1px solid #163365; background-color: #ffffff; } /* User Notes */ div.unotes h1 { background-color: #ffffff; } ul.alternating > li:nth-child(odd) { background-color: #163365; } ul.alternating > li:nth-child(even) { background-color: #10254a; } ol.alternating > li:nth-child(odd) { background-color: #163365; } ol.alternating > li:nth-child(even) { background-color: #10254a;} /* Installer Database */ #installer-database, #installer-discover, #installer-update, #installer-warnings { border-top: 1px solid #1b3f7c; } #installer-database p.warning { background: transparent url(../images/admin/icon-16-deny.png) center left no-repeat; } #installer-database p.nowarning { background: transparent url(../images/admin/icon-16-allow.png) center left no-repeat; } PKb��\|W�͏�templates/hathor/css/theme.cssnu�[���@charset "UTF-8"; /** * @package Joomla.Administrator * @subpackage templates.hathor * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 1.6 */ /* ThemeOfficeMenu Style Sheet */ .ThemeOfficeMenu, .ThemeOfficeSubMenuTable { font-family: Arial, Verdana, sans-serif; font-size: 13px; padding: 0; white-space: nowrap; cursor: default; height: 25px; } .ThemeOfficeSubMenu { position: absolute; visibility: hidden; /* Netscape/Mozilla renders borders by increasing their z-index. The following line is necessary to cover any borders underneath */ z-index: 100; border: 0; padding: 0; overflow: visible; border: 1px solid #8C867B; filter:progid:DXImageTransform.Microsoft.Shadow(color=#BDC3BD, Direction=135, Strength=4); } .ThemeOfficeSubMenuTable { overflow: visible; } .ThemeOfficeMainItem, .ThemeOfficeMainItemHover, .ThemeOfficeMainItemActive, .ThemeOfficeMenuItem, .ThemeOfficeMenuItemHover, .ThemeOfficeMenuItemActive { border: 0; cursor: default; white-space: nowrap; } .ThemeOfficeMainItem { /*background-color: #EFEBDE;*/ } .ThemeOfficeMainItemHover, .ThemeOfficeMainItemActive { background-color: #e7eddf; } .ThemeOfficeMenuItem { background-color: #F1F3F5; } .ThemeOfficeMenuItemHover, .ThemeOfficeMenuItemActive { background-color: #e7eddf; } /* horizontal main menu */ .ThemeOfficeMainItem { padding: 4px 1px 4px 1px; border: 0; } td.ThemeOfficeMainItemHover, td.ThemeOfficeMainItemActive { padding: 0; border-right: 1px solid #6d9d2e; border-left: 1px solid #6d9d2e; } .ThemeOfficeMainFolderLeft, .ThemeOfficeMainItemLeft, .ThemeOfficeMainFolderText, .ThemeOfficeMainItemText, .ThemeOfficeMainFolderRight, .ThemeOfficeMainItemRight { background-color: inherit; } /* vertical main menu sub components */ td.ThemeOfficeMainFolderLeft, td.ThemeOfficeMainItemLeft { padding-top: 2px; padding-bottom: 2px; padding-left: 0; padding-right: 2px; border-top: 1px solid #6d9d2e; border-bottom: 1px solid #6d9d2e; border-left: 1px solid #6d9d2e; background-color: inherit; } td.ThemeOfficeMainFolderText, td.ThemeOfficeMainItemText { padding-top: 2px; padding-bottom: 2px; padding-left: 5px; padding-right: 5px; border-top: 1px solid #6d9d2e; border-bottom: 1px solid #6d9d2e; background-color: inherit; white-space: nowrap; } td.ThemeOfficeMainFolderRight, td.ThemeOfficeMainItemRight { padding-top: 2px; padding-bottom: 2px; padding-left: 0; padding-right: 0; border-top: 1px solid #6d9d2e; border-bottom: 1px solid #6d9d2e; border-right: 1px solid #6d9d2e; background-color: inherit; } tr.ThemeOfficeMainItem td.ThemeOfficeMainFolderLeft, tr.ThemeOfficeMainItem td.ThemeOfficeMainItemLeft { padding-top: 3px; padding-bottom: 3px; padding-left: 1px; padding-right: 2px; white-space: nowrap; border: 0; background-color: inherit; } tr.ThemeOfficeMainItem td.ThemeOfficeMainFolderText, tr.ThemeOfficeMainItem td.ThemeOfficeMainItemText { padding-top: 3px; padding-bottom: 3px; padding-left: 5px; padding-right: 5px; border: 0; background-color: inherit; } tr.ThemeOfficeMainItem td.ThemeOfficeMainItemRight, tr.ThemeOfficeMainItem td.ThemeOfficeMainFolderRight { padding-top: 3px; padding-bottom: 3px; padding-left: 0; padding-right: 1px; border: 0; background-color: inherit; } /* sub menu sub components */ .ThemeOfficeMenuFolderLeft, .ThemeOfficeMenuItemLeft { padding-top: 2px; padding-bottom: 2px; padding-left: 1px; padding-right: 3px; border-top: 1px solid #6d9d2e; border-bottom: 1px solid #6d9d2e; border-left: 1px solid #6d9d2e; background-color: inherit; white-space: nowrap; } .ThemeOfficeMenuFolderText, .ThemeOfficeMenuItemText { padding-top: 2px; padding-bottom: 2px; padding-left: 5px; padding-right: 5px; border-top: 1px solid #6d9d2e; border-bottom: 1px solid #6d9d2e; background-color: inherit; white-space: nowrap; } .ThemeOfficeMenuFolderRight, .ThemeOfficeMenuItemRight { padding-top: 2px; padding-bottom: 2px; padding-left: 0; padding-right: 0; border-top: 1px solid #6d9d2e; border-bottom: 1px solid #6d9d2e; border-right: 1px solid #6d9d2e; background-color: inherit; white-space: nowrap; } .ThemeOfficeMenuItem .ThemeOfficeMenuFolderLeft, .ThemeOfficeMenuItem .ThemeOfficeMenuItemLeft { padding-top: 3px; padding-bottom: 3px; padding-left: 2px; padding-right: 3px; white-space: nowrap; border: 0; background-color: #DDE1E6; } .ThemeOfficeMenuItem .ThemeOfficeMenuFolderText, .ThemeOfficeMenuItem .ThemeOfficeMenuItemText { padding-top: 3px; padding-bottom: 3px; padding-left: 5px; padding-right: 5px; border: 0; background-color: inherit; } .ThemeOfficeMenuItem .ThemeOfficeMenuFolderRight, .ThemeOfficeMenuItem .ThemeOfficeMenuItemRight { padding-top: 3px; padding-bottom: 3px; padding-left: 0; padding-right: 1px; border: 0; background-color: inherit; } /* menu splits */ .ThemeOfficeMenuSplit { margin: 2px; height: 1px; overflow: hidden; background-color: inherit; border-top: 1px solid #C6C3BD; } /* image shadow animation */ /* seq1: image for normal seq2: image for hover and active To use, in the icon field, input the following: <img class="seq1" src="normal.gif" /><img class="seq2" src="hover.gif" /> */ .ThemeOfficeMenuItem img.seq1 { display: inline; } .ThemeOfficeMenuItemHover seq2, .ThemeOfficeMenuItemActive seq2 { display: inline; } .ThemeOfficeMenuItem .seq2, .ThemeOfficeMenuItemHover .seq1, .ThemeOfficeMenuItemActive .seq1 { display: none; } /* inactive settings */ div.inactive td.ThemeOfficeMainItemHover, div.inactive td.ThemeOfficeMainItemActive { border-top: 0; border-right: 1px solid #f1f3f5; border-left: 1px solid #f1f3f5; } div.inactive .ThemeOfficeMainItem { color: #bbb; } div.inactive span.ThemeOfficeMainItemText { color: #aaa; } div.inactive .ThemeOfficeMainItemHover, div.inactive .ThemeOfficeMainItemActive { background-color: #f1f3f5; }PKb��\=|j�Z�Z%templates/hathor/template_preview.pngnu�[����PNG IHDR 3ϛ���PLTE����}K���4kU*Z���~����;s��s�I���76t~����������dmiզ�>?Z��k�>�ת�;DJ����v��$lo���@3eA�Dc��˸y�:���L}������R���|m6k��1?|��������僞���;����K\dHR�9�?�ɖ�w�tRNS@��fY�IDATx왋w�:Ƌ�+(G<R�%Q�d�\@�Z��v�뤾}����4b�I%�u y���AW]��t��+!���檫^���Ұ��j��\u����*{<&����ȱ�ɽH�t��\�eǥ���_��{�~'e�r��ȹ�9�8���Z���D�4�j@��{S'˦����Y_;�ٙ�w�9��9O�̥����T�,��������뽰̌�2_�x������`s����J6P?����v������]Y�#�/V��%3.\�F귓�yo�gפ?������xs�����T�z�h�ؿ��(�2�K�dRV�" QГ[�N��K�9�)�w���]Qt���8����ù��ɱ��a�)(KԚ~'�b��ZQ�D���<�䋀D��q�軻�=��f�9V�y�N��úr�����`��-D�Nc���H����{�� �Y� �uz�����@f�p��qF���7v�HEI�x`nuLaz�A���>�5�e=��b���v�������77��(<���Y��zL��t �DM38P����Z��q�(W�)�eZ):�J�,�J����%@Hb"h�1"�5��M� ѷ�����o�>������)�Q��Y�7���tv��� �i�v�c��c�L���t �c/�xs)�S�m-68� �D����_)��O��QvJ�� ������X|t��l��#V&�+b�H� Ug��P��d&�#o��g"�����(�P깂�b�mm��=gmS�B�ib�:�A�Ȑ���,���`��5��D�@82�ODD�$� d�C�c�Ƥpl��*Qm�c=�DH�pjf@ 1P8u��r� ��U,�J�vq\B��"MO���\�i��F�9ix�r�JHй�/���i�I�j�Y���-O��}��3@�t$�xp=�Q��~N��ֆ�� �����QVt�'@;�:�z��{1=bMFpDj���eG�&�N�?��W�S�x� �4K����u��pE��9 *��c�H�`��o��X�x�c�ٴXi�%@@ ������n���G.Vx�\�H�XM�3��b�`����@�q���(/;Ru7-���3T�U���.���X��e@�ǡ�=*��%aN�aC@l��� �����/�p���M� �C�� X�&@2p.��CE�����ӎZ�dG��պ�>����Ro��X�i�BD/ҫ��|d��t,�@�hYD���Db�D������.V���B�Q� im0=Q�-yD\z���h����r�< �z���b�,�^UVsvWV��SSvs�Pq��yUoÿi��v��'Ӈ~�:�ɪ�^2��πl_<�L����F��3 6 ��ɤj�s@pG[�:�a�n��a$��B�)/i���m$�� !�7C����xf@��h4O�(\��h��h��XVP2Fqq �E(X`I�Y�F��t�%����nɅ�eo3xO�όM���qE��U!��iP��X���[��2&'���39\�� �L [�v&�7��\-��GyK��Ie n�����* �Q.��TH�8O���9@����8���ܶ�6�ˎ�WȣB:@@��$����[v({����K���D�~�;N�%��/W �2"�V��EZ)�jdC|+�I�F�5]P�k��f~I��z]P�XJA�� J�Eh��u!���h]�! C �!'�T�1e�Y_�1t�*H����d�|�:��R~����9�� ڒZ���fD,~(���B����p�'@p�_&�<�mr���@�a��3@�� �@��j%7�k�� %�:���\�؟,��^��}�}�d4��[ƕc?C���sY�j� ]?�7��1a��8�ȡ#���F����]��:�P��-� �F�sʢ�;�{�|�D�C=�:��' ��l���BFT�}T��8)R#a�fs�3�ÔD�FѴV��x�dR6�V�d���$�{-�?��oR2���s4�Y�D���c���Ν�Ȯ*q��t�P([�eh� �J��_�YfΜw���k����&��^���@Z٭����*� !콦`?�����8 ]��1끚V�5k�5k�ˬ�����������Z��+�~��1�Y0k���&�n�?c���}��/��P+��5���Sp �<�n>��@�_$�2�L �2�L �2�L HH�L6�a A�B}Ȗ��)=d���c���:d�Ϳ�fH�V���R}; ������r�@zeD��qH�����! �Yl~�G�l+���X�y��8d;��։2d�[)%�yc�7٠<3ş�C�@<W�]cZi�u�j��\=S"���qccOeV0:f3�Ij�g�v'�@&S]5s��-ĞB�����،qlt7Ѭ� 9�z�Kz,��-�f�r�:$����i��wl{���l�\�����*ַ�! ԁ�@�P8N �%%�x��J:d����8���! (�βa�{��&3Q��]b��'����㖎Ŏ9��Ǿ���Pt�-o��ړ�-��8�RJ��'��S.�-�U��PH�2^���=��"5a��Q��hy����,�Q��;rH���j�DfY��"�P��L;�S�9���R�P���\4�5=t��b��bˣ 4�aK�Hqp���F���;�ʢ�O4)��ɦ�+�Q �vD�w�EF�8m�Y��[�����c�G^�x&�#O�s4��N$�j3���a8d�mI��M((@�G}_~�`��4�t����dx�e3�B�; ��3�6 �b5al����5q�d�T�^�Xd��T�w]ud�n��6d�҆�Q���s{�#@2K���b�"�.�2��,q?����:�gm:�lE�!B*}���$`s��D?�X:��Xb�h�7<I�ã�e.���0�L�sf3�:�ݜ�דt T�:�$=�B�F� �2� /_�I�i)(����ƞ�� �wd\�j�O�5�Jn���s':���ETf8��G��-�a5���߬�����ن����XQ�_�Z.�r���K�w]����B�ŝ�e0�p��E�᷋tc^?p�����n���X��'�Q���{�0.|\B ��N�^ �vB "$>j������So(�Q��ϛX��@���6�Iu�����S����b@ ��S@ �@ ��@ �����N�s���VUu2_R�8��l'�[�G�U/�)��(�E'��y�n���{���:�1����`�~s��>�Y~�'��O��B�al'��Gm*�9�6�J���N���Rֲ����a}�x�q0Q���vy��Ŷ�l/�d���q ��^�T}�g�ݙ�J���#��-��*���E'-[���R�oi��Q�Y�ue�R~]�小�+g�Vvn{��P�����X�L�:�i��Xߧb���,����qy�O��~H�������]�0�����k�c�^fue��h�S݉c���s���.ޯ�嚉�*���A�j�6ku� ��h��~wt��r�چ�?��[��:��[��3�w� �� �@ �@r�@�@���>@�0��N�>�i��@ ���@ �@q!�:〗8�E�{c��0�v ��s�6�{�{κ�?��!�=�C��L �@�@$��V`B �]l�]����3�mS���F��6d�bJ���������g��eI�&��^�+���\�|:@��[�pbI��(�(���@�a�ljΉ�5�p;���$��b�� �.�v�&�'�oO|VFAFA�)��(���A��z���������Y�Xo����� "�J���l ��|�YY �T�=$7�lM�z�_� �٤�� �R�(�&� �9���.�<�i�d1��r^k�`^�5�:?��Q� � ��(HsR��·%�waĨK�C1�/.�&��a���ߚ�u]�$Z���C[A�dy���Pd�u pDs8���(��ט�܈����K ��- �$�Z@���6�k�:�1ڸw '4�J<_�fM��, 'r�3�(��FI3@�������7���|��a0��X>\����$�1�ir �X�^è}�O}-�����@�_0 ��4F�������!�/ 9!��k>p����W$W�H3P%-� ʁGr� �Y4}7P���b�O������A$EC b� ��A�a���C��gϙCQ�6��f�ȇD�AА� ��y}Rr� l�s��C�pf(` ��`7�H�h��kAА��`0~]a.�����U{����̀�h�D+f�@I|��1Ku��\gHoA�wh���2\�kZ5�3�vu�In�$� � &�0Aԩ �>kAO���3�ù� G����%1� _[b ���T�O��>������Jl�G�/(j� "�Θ��(� Rp�N�#�=Y D�v���b��y[�D����ZD!�`YI���� �Kh��Y�^�դ��b_�/�Sw}����ʛ�����벸����A�[G�q�!�U�G,X�i!Brq��������~oA|/{�W'�ʍ� gR:3J��G=�]����˗��>4ff���$��9e�ጯh��h�o��v}ԗF{9�O4�bt�1�ªvNf��vݤ�k�`�z�R�m���GF�+P�A�h���6���� /�1塃��YPiz ����Y� �l�����)���v�Ҥi���<f�<&��I�4g͡�7���<r9hp&�R7ߢ>k���v}�4��~8��MS�a�)=Mg�ګ�o�4G�"�&�����^�w��O?�O�9 � ��`�/��;5H���f��z ����ŤcQ� ���DoK/=˿=� "�v^zk�C/M =�e�m�&m�� R:sN�+;A�y��}g�2�� ��O ����&YC��Ir�!�T��$���*�̮�[��@���t��ʁ�G���:8Q�;��;Ȭݭn�0�X��!��W��� �Ӧ:�?��n� 7�I���x�^¼�%fꦶ�@���pC�x:'Į�a�������!bbY���N�x����0�%Ko�\�s"�C�� �e銈 ��=�"م @e@�0��b�d�ٻ�ͳ�ք 7�i.�9b~��Vkśgh�� ��z:X�����i0�x�e/V���� 2��� �[Po,]iR� �g�{9� y� ��OC��]Az��\ ��QGA���� 3/Jrs��iÞ��7⭭ �y�o�I\<-CL,=ͶY�ͷO �~����P]6��Ma؟�� �צ� ��\��������hf����}�V�Y1���i�k��O���+�׀1?��t�C��q��N;A��� &������I��)I{VV����$��QR BnFE��������)+�����T�l%e0.���-�#�EP�p�������p�N�^AX�133���AD�?����G�ٱWA?� �c`�>ct��s�A{ �� �����-A�R���ۏſ*Tb7�g�E���!+���^ao�S���]^A\E���Z�BJ����|� ��z�8��8dAh{����A$��w���*�(��Ü��w�����K��m����� "�!R��g> 2V�S0L������a �-*�t� \r�?�������7��6L+ř�2L��݄ў�`���Ȣ=�E}eAFA�u�G\��C��M?V��E�(�� t�]�X�v��dk!�y�.��)H;�}1�� A�Wd� ���@�`���Nl�a�&{�W��ׂX$��� -Ӛ���c�F�A�����`A�o�P���������P#�q�>:�Wvr�������o "{2k���!�%�(e"�,���S�2w�����(6C��g4�B:3�)�{��i�!��%�q�o�/��=\��4����w^�w�E2����!��4C*��e�C��]^AF��'��3AT��%��<��IZORrPy49��蠙�6n"��M4q�g�&�i�?�D��i�ͼ�I�E�oG+���65��6q����/�,8�}��Hx[B�&��� 2������8�;� �۷�P�ỌK/�HZt�F�ʡ�S���Ѿ����K����lnr�Y��R�62� u�H�Pd�F�����2+J��m�Գ`��^ͲP�Ds�����/"����Q�9X�d��� �(�{���B��I�T�i��PGb�Ig{B�Z( �Uz�� �mf>|���"2��^F�h'���X)��'[[A�T1�Ķ��+��$�`͟(��1��^"�AA�q��!�����H�(A���dhY�f�T�%ȶ��%�l� P �rQ{h��?b�eh��N�%B�Jr�L���\� T�(:Hj�u{�yD����.H��hAR�YD� �$.����\nQ���V�����(�eN�ȱ|V�^$ygA�`.����n��z��t�y�-Ozb�ʍ���oħ��;��h�:�@�2ZFtL`Ax�}������l&~��m~A��djY\�BB?�.�\N��P��%�OV$>�g�-�a@�D��"���1O�p:��6�?5�{MB�j������e�^T�{��i�|��J��bM�&Hdx�m 5AO�� �ii��_� -M�&HK�0M��&H�� �i�4A� M�&H� ��c���2A/X���?���埭w�w���}���?>�:�����ѷs�/����3]��IQA&}� ���ח,�rM�R��#'S�%A�[�Q�����:Z䄡(�M(�5��]�� &�قбV���I�":�b�C��W���$�X�u����4���e���M�\7���J�p���O�gf�� 7Q7aƭ�"@�\�s�7�bF2�2so� �R��\y"2UmG���x��� �����)�B��#��x ��2�٠Y�xC��8y���H}�N�6�R�6�z��ŕ��U'��t�];��̯�cA(n������!�Q� {�&�!�D�leֆ]�d�c'; � N��Ԩ#/��'����[dZ˓�� 2���I$ .��:�� ��)s��������<XZR�ֻ�����]��ߠ,�>��p�,�ot\���'u��)�yoEӈ�6��a�n� ��T&�Zd����������O#������ � �б�"�|(�1y���[���L�o����`A:�pD�+�� �s���N��L�Ĺ~h���� "|�t�� za����fo�YF���eg"K;�k�|��� �o+h������:+$g�3k�A&��&l�}����Ib�k1���s(��i^'��7�u�� �|��a��NjO#7M5}ak� [}f���"H��7z��y��%�mІ�68�U�<�a½u���fF'ɺ�<�i���M��{��y��"�X}���aMMx�촵<�S{$��~qܺ���>L���{an�8>9w$���� �#�P�F����#jC���t�,�?[�Y��#0���:��" [�Pؙ��6����k" [���Q�V���B1C@���щr1^�zE@6��S����"B@�YH <jB��d�i5��%g��ڇ���.l%B@�B2�J�4Z��� �2B��d��� o l#B@�R���$��2J�F Ad��@|�J��ȼ9� �b���F ���}�5� 6! BJ&� Xɡ.8��.��4W���[��?1��f����]A@�S��ԸR@(� w��y��Z�#@uC�A�9���)�Jz�V��B���/��S���d���u��P� � T'um��w�������; �:E@Ȃ:A]��¨�# tG!E��" ! �0:�U�k�M7�v:BT�Gu��X�Q�E��1qr�ܺQB@���r�ӝR��Xl�UA��� �4(u�ܖ�p���~��[U�A�0J) G��l��5�# Dz3�4o�с֒�v�D�5�ZWZKQ�M���S���dz��ڟv��t�wa2����p��9��q^��# tG�3�WQ4�jWrh5�Q�Zs��J�,2ʸ($KK���F��;�O/8d�<*�ګ ����l�/��i@@n Hw��ux@�e�S ��_�X���郎q��]����,����y���P$ ����S����g#�4��w%��cˁ�O{L� ��X����!V�ӂ��sV7A@���NJY�J�=�Iz��v�Qȥab�˔c ������+" �~��a��v!�����ﻛ\��a �,��Qh�["U���_��O~ �qT6�2D %�nx�qWh���dT(8�H�s�i���G >\�����e@�=��ǵ���ef��}5ŗ�$�/��F �䐎��[?��C]@z�^K��?�!f�O�0+ԅn&;<�ǧ��#�ܧìPJ����� �s6�>�������.2. i YH6�2��� 1S ��'9�1�^(d��S�����Nv���X�۞}�X�)ۘY �_�5٪a��E@0S��*n_�,�=N���Q`�qI@�����ߐk �N�O�A����H ��z�E@��k�(�F��?4+1����6���Z�;8�e�5��c-�\��x��p��n��[n]��Qv9<I?���}!ׯ��!@� [��(4s�R�V"�2a�c%�G��16Q�+H��CC@�:`j�0Ia��t�O��5�/S��2�RYֶ��,��!���S|�@ȡ�u^�0�/3f��A��o��ac�%"Y��n ������n�@H�J���.[ ���݃<�a�!��dL)���O��z<�" ��rX�wq����UOһ�Nҹ�Ci�K!P�m! �3 �U�tG�qj<i��6/?w�G���ZE@~G/Ჿ} 8G�߹�! �H��>&�U' �V/V�T��I���@(b[� <9�|p��Ň���@>�*���o���B@0�1Uǯ�n }��r����+������R��]�Q����,�O{���?]C�Z��`θ�:�M����ǫ�<�A>�] �wM�' ������X�Yz%=�3E*֬���4<����nu QG��<��_(��a�[ Hux�H���' �zxo�Ry�'��r��5\E@0�r�L������]�Q�/�n��y� $6����zcT��T�KUp�@���;?�젖�Q�e����m�@U��q �`�D�u�k۹; aM ���! X�Vvl�M��XX�_�ח|��y�1�}+����ޝ���CqǺ]{�4]�L!B9��?ٕ�t�]�ݽ�6I����st攘3]滔k�z�9�?f2=9�(��������/����E��sf�s���&��#���)��1�B!�|��c~z {9�3�������5��^(B��^�W����!| 6@ �@.�A �A �@ ��K��}s����'�ː<���֊����&^��Wn�1n7뛳�/ ��@��}��Ւ��,�/�n��2���)Ϟuy �WC�����\ne���WZ�6寎T"Z�N�g�K$�a�^���D�&O쇦�ڧl�^+��"w:� ��K �K���~���g�f����F�<J�0u��@�{��{�m��rk};�C��\�&뵨KSק����)�H���+!�0��#�H��ӗӕ�)��8�7^[^�}k���,/'�kžg/��>I�A�^�,7���m��.��U�%�z���c�}�&�}`)�:�HH�VnD烑ɮ�K20�/��K��#���s��lV�Ͷ�L/x�#�*Y_�$S>N�>�Ə��$�=N�^DHa6wއ��)���$�mR���r#{}�Jn_y�Y�فȑ�z�ŝ�T�s�<����7��u�r7����RǢ�[N�{�������b�tSiyM�?.}�_������ڛ��\��N�l9�ʑ����>[��K�@W�����U/����o�$�m�\�b_Y� }�u2H~ �i_��l�Rdzv��]\���/?�&g�Z?t���!��t�������C�u��C���&ɪ�C�{SnW5����{�%)���$B�~�H�rIY�1R̊�#�n2�6㢣Xn��e�-�p�2��E��2�|<��Scn�)Ӷ��`����2�F�hY,w�Za�Se<������CF��[�4��"��Q�Lήn\�.��ƕ3�\�1T�|�$�6���?H���+�Dy��_�� �\�#�"M���A �@ ���@ �A �@ ���X�F ����'?[� �B� �@x�@ � b�x���@��*��@�@ �%����x��Ł�ǫpy ���vr����<!G�����,�?|��Еj�R��d�&:ș��=�E�zb�k:A��Wn���}�����c�W�c�l��ı0|�b0!,/Rt��xb#�5�e�^I�2ߓv:������ ��c��L��b�R릖�"c������rܷы~���V랳�^Nw9� /�sf�bZ&r�[��^��BY~ss�K�֞�J���{��� �V��ȩ}�6ʰ��*�_� ��Ec���WZ�>��êB:���I��K��r��b���E���><<\���kE�-?vt�7�X"�ۦ�&뺉�� �@7[��'oW�>d�Zは�We�W���,��l~ �1�������=��� a^�O�S��Xo�^1���+�T�z4tq���,8�V��)�ۘE�� ͢��z�5�{K��G]��qJR��J��۾��=r��z�RP��q��� ���tuV��|DD��.w�r��R�Ʊ�/N�~� 8�%6�;�ڔ�dN�iw3�h �Xu��=�Ύ*��Ј�&lz�X�hܸ���^Թ�SϚ��7[b��� $^�u����Vym�YLLF�5� �X@��5 c�����J�x�W���������o��mD�!+n�Q1��[䖇U�3j�c����?���ة��AO!B��M�#�J?P��8���o�"��ɍN%�mB�����N!�G�H� !�L���e�iʭ���R�g㍛oY�L�I��=r��.��m�J����0�kԯ�_��5�:�9�]�U�#N9Y��:��@�Tj�� 7��u7�z��%�� ���!�yxL�1��$B(��1�f̯���8!��@����u@r?�B����h�y�W��88@��О������Z �Z�E���R2*~��Uu���DPX�ǢA/� dy���<6hѣ��#�[㝡� ���z;��;M%��Ď,Ґ���,���g<c<�� �$� 2`�=4U�,���u�� b��d|$� >�}�� <Ј��2��\�D>4�ld�����7o��J���GuZgkw�`�c��ES�T�� 2"`�dT�q�s�ĭzL`fz�7�d�ey� � M:�U�HK�"��.����v��8@��Aܿ�<<ppD_�:��iD3��@��`�H�u�uI3(M)�A��5�<��� p���M���첺G@@YM8��~��q��4o$����B�-�f'K�X���$@���C��.uɑB�A���v�o��R���b*B���� � A�������7 ��a����O��(.�fzD��zd[��L>�� 9� ��� 6hˁN�}��j1B�ӈ���7� ruu]���ַ�,w�~�#qR� �����R�?��dsh�=��x�t��"HHd�cf�66fs�d����2+E��҈�d� Q���%��y��K�ĮG�5;@x��z�"3;!fRLm)� �� �Ia@Z�"zTV}IL��&� 4�iZHŇ���%"Ŵ�bږVF f<8@Hh��p֢�j�q7�52�� �OD�d/��e�7H'�˭��j��H��,���+r�E� q������a�$mE3�h]��n�A 6d�'�rpZ+��f6��I$��7HDen|;���DA�崛�����*S��;O�ma����p°�D >~�m�2��X)�l˂h�?������@����ꕏ�����Nt��8q6�&3 �e��Ċ~�C� � B���H�o��F�0��mw� � d��q�m��aD�/�b15���s Z�o�R�$D�H�6�G�.���&ّD�����a���n��6���=�1Z���]6�"�v��Q�1� {mp>1�6�y)3��P mk�*A��=��B�r 1�;�=�.d%��9�(6f�ʴˢ�*Ⱖ�>�M[v�z��*䎓��#tMPEBqXF貱aM�|�D��9����P����nD=�i"7�o�ڏ[���9�NBO!��1�L|�7Ő�u�^�د�_M�� �� �ײ��������q��|��^+���ba�����<�.�A�wl?���M�Ϯ��Ʈ#a�F f��JÍ���4���/f�ɦJN�싒�Y<��c+K�-������H� �A� q9:�B��|�����^��qg c Ʒ���|i���?ϼKp��v����=i���R_�a�Q��� m��|� A �� �@���]���`�� �; ��.��roA HM"���cc�gM�5��V��� �Dv��[�̃��"o�L�����rd�ڴ}�io n�W�v�J��7v�V~۹o���-���k��>�_lV�,!�O�9 K\%4�@?���d+�!4�,#���ۤ_��/�5- �JlI�KO�5�تF�x�S�-K����uZO1o��m����W�������y[�,�k����t���I8��*��W� c������*�7��]Hy���q\�@��N*iΎ��!A��I�H���2�y�$���Ne[aDݜ��k I��\F�d�eYyNH(��I:H�&�$Y�O-eʃ�0�Ө�=gk�:gz�A�5�.F���8*�Z��M�� C��ڿz㊓L��S����҃vhX��K[���x�<e^�!A�ɩ ��Z�d�4sD'Q��N�����hvDzN? �vZM'�[z�@���S��z������R�aLE�E��B���kв�O�[�k� �t��Ĥ c�̢L�q��Q�"�-�J_VID�U,G��D'����ݙ�HvfY���A�E}M��.��8��З��#H��*��O�e�O��dy�'Sْ�iL��,���mA[Vwł�T�)�دG�*Z^l�=ҍ ��fn�s�m��+��5Al)��<0O9ĖN�J�ҩ��k�AN�� Z�{xD{*#��?S�|{!idU���e���Iy�4�2����n�5ؒ~���f��ؖ�-h����M�kD�T��Gg c�AX����9a<�XS)�r�ӯB2";"�HB�$t��k2��G'���!RL :�,4v�钐�핌m��>�iH-�R*�D��d�e��B��l��?%�� B�'��A{n��/��G���d����<�>�=a�E�_[���)�Bl>�e�azۜ����2�[J�d@��*-�Z��� ���>hY?o�_tK�zjC���f�zܯR���o'��pu#�b)�:�[ϛ��(�ۨݲ�{`����ܭ�����U��!��+���B�ǧ�|�Oҹ�x�0��I���# _�s�����]�� � �@���E2�.Ax��6Ѓ� A�!��@�`�x��� ��;r��N�U[�]�<� /�b۫��ʾS�����;���� A|��n�����F>:@ �@ �A� ��A� @ ���ľ_���>2��i�"��Ɯ��α�$�e>2��s��C|�Go����E����srh H�� G"�N2IL�\t$eɭka{����S&)�D2������͓4Osv�h���G���lrݦ�H�̑f���\���� s�֙�h��W9�_E��")�)KV)T�u����<�4^�":��[��?�)�9��诵h�K��*�I��0�zTK���J�!Q�W�}��?K�Y�$Y$���DT���}*m*�r�)0�D�WS@����8������`rt� @ �A����!��"�?.� ���}A�� ȁ� ��A�� @�q� @ 9��?[���ԗ�� �|��� ;���V�N3��L��~�|��7�s�;]�v�`�&ȥ�0�Kg�)Z�A?h���i{ r�i{ �C/>'H�<h�I ����Ƈ�@���k'���\ǿZ��/���m��1c|���(HV���B��e�� �?���uugԫ�>��xL�N� ��tXE.<�n��x�B;�}q�8�bL8J�|L��Xe�*|�1�a9�� +�;,��(� .e��g��v ;�����"p^ 8s^�0��ч~U(8~e�X���y�\�q���sn�U:����w��0BC)��Pn��U�'�(�rQ�UX�<��c �;Z@��*C?%�3�a�v ��'���R�V��J)��T�J��G�c�1IQd�e�x��$4�X^���h�ȟլ!�Z�0ƔR��6���/0Q�s��=�+�B$�2�l���= �i�@�+�i��4u^e9.P$^?O�A; ��o���h��5�Gԭ?�s/e)��˺U�MFm���Q�<�[.�@���t.:�8J�Jq�8U� (���-ځH�i�Z1f�{�R�8���G�W�U�,�2RZ�ďd�M@�1YXe���7�A) #������d03Z��dd@!���H���8oL�z)�Ttm��n� pӿ|0V�[u��#6�M�`|���m��l ~�c�}�\��E G���p���N�e�y[� �I9������b����'@<��4ˀ�1?�K�|x�+�Xc �&�I� �����u�a��k-��,��;�%�{~��a�X�4��qlۼ̹��2-������7�� �o�Ŀb�|�H3?I���fߟ��l ��(#���ׇث��o�eJ�@�~��?Ȼd�{�V���n $���B6�}��IH�?�2��ÁsT"I���Ɓ��C�����)$`�rw/u:��o9��A����&�O6?t[�$V�@n��̠��o A��Hk��_/����@~��G�y�O읏s�:��m8�r U.���mTp��^E�?�]D�I�{w~I�%��j=�O�ӝk曲,6�u��d��p?��} 8�c������~j��ݗH��LQ�@�g@�;�g茇H��K���r�}�J�ŧ/���1�Y/`Zd��lR`�D����D7V�V��v�����)sf37X�d|��|�~^4 ��[ɔ�dU��<d���קּO@"ܽ.^y��" z���"@�:ԧ/���h%1�\Y�!���f1[k4K4u ���-#!GJ3dL��n�������é� �փČ�&�L8T��RPa9I�ή�9�� H�����<@P5"�>��/<��ҁ�܃,���6�|����o?ԡ�t}�w�i�C@$2cc0����&SƜ%��1FP?����[N��A6��$ ��5(`4�h�n�?I�AiS+J�$`47A����&�&D���KT�K�d@ړ�~��å����{GDAF�꾀�@NhD^� �:��~��� ſr�M:0#LC@G@8O�H�]�A.p���9��,A�� �q��䜮h�)b%�jۑ�xG��?�#�d=V��`�|��BF�)9��� �Ne�_>�&���+w���D@:K�@O������)�"���������u�b�"K(��:k�J#c8�)),vPQ�,�g��r6 �_äI�.����"��k�-��i@�GD�j@���^����.�'N�~������$��?�R���s@� ����3�(�|tK-Pr����Zcy��szD����2^V<E��� �� +�9$#���3�:�<&��L� %$H&,�xr����� *�5�uJf =+ހ��2@���s�g8$w���}�,V�p��Lj���f�"�5:!���; ��]��5�Z���q�1<�f��V����<>�1M`�4�$��Np� ��Q$��lPR��=���p�� ȹ��ٴ(�B��n<�S|���E@��wd�'�\p1�8�5�8��]mMd#��!� ��6�Ո �P��8Qg�¢m����A��MW��9t��Ӷ��5�V���i,������ыޤ�K�f�>gv,��[�-� �.�7�"ݿH��d||ן�(��� �+�:�����`d[��&:/�^���)S�o�t)3�40���Ař�� �4���E0ȣ/ K�u�C��<y�7��I�Ǎ^n۾�H�G�.�7!�2�$ �w�W�}� (X�/R���y^?~�7"A��?����=~5b��� *�8(l|�= ��@�o�"�o�- �~��t{$mfr�w�ԁ�j �)@ހD�!><��;���G)NO 7G�r6 E����)\�F� H��HT-�z��9)\�[@>�(�vs��m<�e�ޭ�3>�(�% �/ hUeE~���z�~�� �:�:�?( �� �MH������A������t�" w���z�9��;�_V��$�܂x��ֻ",��yy� �0,���8m�9�;$$@�t��w���?��Y ū�<z2� ���T��T�hA�B'�ٹo�B-�K|��/�s�Q։50m�*�h�w �H�;<i���C�9�� �^d���҆s!�S�u��=�ms��^BE�Dk�#�9d�T�ā����]TL�,�`��'��0��@n�H�-brǽA��t��t���z�g����b ��T�2��xH���=���4��tY/�0�����cR�W�cMb��l���"5���W�����10 ��8�m����3�`NI��=�V� c[�$x� HG��t�R]�ހ�"������! Q-�?�a�9-6���tq���+@X��, ���V�ִ�,�\p0`yd]�H�ڔ�5CC�5X#�� Ⱥ6ԗ�\ӌ�;��9h�)�s�w�����Y�,i�5��^,*���R��2� ���) �V��� ��2B��x�40M�0#� Z \X !%` �7��RAP��>$��?pHOp@���7j}S�kW��n�����4��:!��՟�*�)�*$@��o�� �+��L�� �{�% ��Qκ6��ZP��<�V�����7 �k�XsHx����շ}q��%@��4�Ks��<b�f�z���f��HCa�]hO1�$�B�P��Ԑ���Vv%f�{<S���H�e����pw���7@А}�DEWR� ࠡ� H�����m���ү�@��|�����˧hN'<�)^�w3g�� �~6�b�g��B���_O�pOu�1���7�������5\GM)���O�ض�:��;�d����?q�^��y�-���/����t��&h�{�M��\ ��=�Y��#����~ @F @ � ;j2j25�@ ��d2��!��������y' �S6����9�� ��-�� �,��K.�xJ�k���Xmy��!Gl��XX*��7����d-�4_���2f���@8��2ͨ9�f^I��ӜK�-���:�eΓ�< �xuy�y]�����cxLaT���e�H"L�C�R�3W�*^-qu�����튉. r�|�sN���[�f�|[�-�2N@��q1�*vQR�,��Hv� �8!y�U�H�8��'r%#m�)iL�n&�H�H�<�����t6 Eq�w!�3��Z����tu?��,�����j5��o�?�X�e����� �d!'M�)Gǫ&?�MTp;@�����O����<wi��,�+�$��U^ �T��r���XL<�ͥX4����r����_�ƍ�rwh��{�Ys����(�� ��-?iNB*�"��~�@�'$TL����)WDt#�R89��` ��&gD� �.i{Gj�(�̫'�� �v �$&���+'BAQJj�AA������� ��AE�C<QĤ�d���, Q� ���&�mգ2d���A\\+���� X�cN X����H��Xu�*)��P�������}�3��TS��d�<Cy(�V������y���.��0i��H( jËe8D`W�\����� �A> |��5CT��e��pk;�|��R�[�J��ݷy[Ӻ���l�Dv�y��ܷq�/6�V�ryͳȴ�p����%����)r߽��}@��Q;�y�\v�w)������F=> �&Q��s7L���K� A��o`3�04��1s��7; h�鶧�8k����A�o�ۀʢ�T�b����.�Y.t^�;�A*vf��; D�Ot��S���AHt �'��K��~�p��� �u�D��c)�'#)QR��B��~�1U�널��I�,���SVf�-0ެ�5�OjEY�!|N�z�K�!�. $2B��q�L���R��à��# m�H���� �w ��a�"��k�u�� >�S��0u}���Z=����c~����D֫: �r����:�]�x� ����B� ��U���K���"6��\��S���S�?�@�M��U �KU���K���a�7Tp��s�����5��= �r"����PF����� �cs���� ?�F��o@��:�>�]��0�_�.ֲ�^�[q����J�\�oz��1_ww04����s�� �a �� ��. ��=����YNtf���=�ܓ�QD �`�$�=̓�}�í�k�W��՛ n�b�� S�P�#���R�L�M�n�J��ٻ%�^��ؽ��Wo6Rmg�m�E��Sٽ'��cJ�g��~4��숀�=��\��_���ݝ%��?������΅8|ً��� �B'm'/oo/�-� @��Y�'���`|N���3���qCYN��p�� +��[G��U���*�Ǎ��˫C=�C�n�uF�x� .=ԏ�%�PvN;����?�u��~ ��t��{ҙ�N)�l��θ���-����|��MF�8�\��8�a����8ۭ��q)5&L��b�Z�)�DmÞ�|=z���3���k�zZȯ�@�'�vM��a�E�C��!��=� �Կ�eH�ǭ#�2|f�Ck��2��R>�?+���1+}x�_��쥀̽�b���x7�܍�( �Y>H��E�����������Z���Rϼv�J/����ѱQ@X1$�>*��M\ꇌc�$W&��!z <W�3�y�3�Th$��9�� �^j�DR�"�В�F�T;�3 ���g=���T�� �$( �#��X��M��>�\#YY"1�rq\4���+���&�&��L��< e�: e���4O6u\o�t!3�J�*T��j��J2�{��z��a2��ĥ�v���Ӳ ��y�N�ga�q�29R������i���U��� �?���{d�qCDҽ���Ax���O9h������^�e�\u��#j)C���R#Q��<(�pzL��~�t��&wF$���Y,����?���֥�,B薁DG@�j����D�)SN�^�ݒ����Do%j/}m�뷫]SN�t�bj����b�G�R�U�Q= �-��@�pI��]�iRE�/�u-^���8f�~�m:�L�?`�2O{��C��,� ����ꢰd�b��܅~_(B_Hٝaq�9/�:aw��! �8Y�� �yb&�T��Bl]��:��tj��.l�V�o;����ǎ �y��B�o�H $��;��r ��Z[@Zd=ZBgW���Q�Il~�9��틙@�E〈t���<�[��T�Rc�sw]�〨�����r��Ŀ���Z�)�Ee-tf��M�I�Z�pGb�uG|��薀��Rmg�c��E�� w�c���FW�j;�u�~ nt��b�����5b5���~\:�O��*���Cı����D�����rp���"!�E1�^������9ú�kw_�i���W}1��ǁ��R f1�ܮ +�b�F�n�ճBE-�i����q����* �F�e �������+��B���0��md :�A^���k�̢�3��yŻz"�����k���D��dE�����X���Q]�Sk@d��A��� �vr�t(�Qv�Ųs�.�a��)��H����cŗ�y�9�$��[|�wP[c,[��k��� V��~ϟ���3�������X'���Q����jYEw�@�;?�;����AV���7L]���ӟ0��;���v,aH����w���jf��gu�@�~Ӵ=Y�RqS@P��S�<T�'jdL.��aU�;"h{�� @>$��E3�A�}ΰ�OmOم@Pt2$�A��JmD�����k�C�7�r)���O�{�"�Cq�I1�*M�b�xȈ"����r�'u�ӳ���NY����;/�?>�C�?�����~���$��-��G�](D����Z��$ H��$ H��$ H��$ H��$ ��$[��dK@�l H��$ H���0wEk�Z;�V��-j�8�|����F����kh�W������C]m����1�O��U&>�����PߧJ�$ ���q-duZ|��.Q' #��Xzo\������J��G.,�S!�m"�JVW�K�L�[`���T�\�lw���t��.>L?�.��<q�؋��q�� uc^ȸ���PO@^!.��݅�X��s�$�[҈d��� �Q�\ ���}�Q�E@+K��P0�B 埘^�V���݂ B�����:ͤ賣$� 4����$ �+6�9$�Z��m}70KH|��(!�O��uF���iM!�w����� �6(�&յ''�k��)���7K��!� ����0���ʲ�ՋFHp7'耴����'�?+�w���0 QejA�[� � a�"�`�m`� ��j$FQ'%��g��'h�ˍ�ļ�/rۂuf�JF 3�{,��4 �駀0��0sA�.�43����3H�������p��<�����@�'��'la_�@$$�}�^�`k�(`g�� �� +�I�ӈ���W�]p�Zv8`��nZ� ����ޕ�9w��|!`Y�U_Ou�:q=K2iWO@^�i��y�}4����wA�X��x�jč\�#��/��͏��дA�}��S��#��͏���$_����,�� �p��?�$?�g�h�A�z��U���H%�g�g���[m" �@�@�@�@�@2�@�@�@H8�g:�Q { �n���H�VZr�5�T�H��؛Cgq��@ ��@@ �@�G �@��2tpyD�N��@@ �+��@@ �v@ ��@�@3h��4=�#_IEND�B`�PKb��\���}LLtemplates/hathor/index.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** @var JDocumentHtml $this */ $app = JFactory::getApplication(); $lang = JFactory::getLanguage(); // Output as HTML5 $this->setHtml5(true); // jQuery needed by template.js JHtml::_('jquery.framework'); // Add template js JHtml::_('script', 'template.js', array('version' => 'auto', 'relative' => true)); // Add html5 shiv JHtml::_('script', 'jui/html5.js', array('version' => 'auto', 'relative' => true, 'conditional' => 'lt IE 9')); // Load optional RTL Bootstrap CSS JHtml::_('bootstrap.loadCss', false, $this->direction); // Load system style CSS JHtml::_('stylesheet', 'templates/system/css/system.css', array('version' => 'auto')); // Load template CSS JHtml::_('stylesheet', 'template.css', array('version' => 'auto', 'relative' => true)); // Load additional CSS styles for colors if (!$this->params->get('colourChoice')) { $colour = 'standard'; } else { $colour = htmlspecialchars($this->params->get('colourChoice')); } JHtml::_('stylesheet', 'colour_' . $colour . '.css', array('version' => 'auto', 'relative' => true)); // Load additional CSS styles for rtl sites if ($this->direction === 'rtl') { JHtml::_('stylesheet', 'template_rtl.css', array('version' => 'auto', 'relative' => true)); JHtml::_('stylesheet', 'colour_' . $colour . '_rtl.css', array('version' => 'auto', 'relative' => true)); } // Load additional CSS styles for bold Text if ($this->params->get('boldText')) { JHtml::_('stylesheet', 'boldtext.css', array('version' => 'auto', 'relative' => true)); } // Load specific language related CSS JHtml::_('stylesheet', 'administrator/language/' . $lang->getTag() . '/' . $lang->getTag() . '.css', array('version' => 'auto')); // Load custom.css JHtml::_('stylesheet', 'custom.css', array('version' => 'auto', 'relative' => true)); // IE specific JHtml::_('stylesheet', 'ie8.css', array('version' => 'auto', 'relative' => true, 'conditional' => 'IE 8')); JHtml::_('stylesheet', 'ie7.css', array('version' => 'auto', 'relative' => true, 'conditional' => 'IE 7')); // Logo file if ($this->params->get('logoFile')) { $logo = JUri::root() . $this->params->get('logoFile'); } else { $logo = $this->baseurl . '/templates/' . $this->template . '/images/logo.png'; } $this->addScriptDeclaration(" (function($){ $(document).ready(function () { // Patches to fix some wrong render of chosen fields $('.chzn-container, .chzn-drop, .chzn-choices .search-field input').each(function (index) { $(this).css({ 'width': 'auto' }); }); }); })(jQuery); "); ?> <!DOCTYPE html> <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <jdoc:include type="head" /> </head> <body id="minwidth-body"> <div id="containerwrap" data-basepath="<?php echo JURI::root(true); ?>"> <!-- Header Logo --> <div id="header"> <!-- Site Title and Skip to Content --> <div class="title-ua"> <h1 class="title"><?php echo $this->params->get('showSiteName') ? $app->get('sitename') . ' ' . JText::_('JADMINISTRATION') : JText::_('JADMINISTRATION'); ?></h1> <div id="skiplinkholder"><p><a id="skiplink" href="#skiptarget"><?php echo JText::_('TPL_HATHOR_SKIP_TO_MAIN_CONTENT'); ?></a></p></div> </div> </div><!-- end header --> <!-- Main Menu Navigation --> <div id="nav"> <div id="module-menu"> <h2 class="element-invisible"><?php echo JText::_('TPL_HATHOR_MAIN_MENU'); ?></h2> <jdoc:include type="modules" name="menu" /> </div> <div class="clr"></div> </div><!-- end nav --> <!-- Status Module --> <div id="module-status"> <jdoc:include type="modules" name="status"/> </div> <!-- Content Area --> <div id="content"> <!-- Component Title --> <jdoc:include type="modules" name="title" /> <!-- System Messages --> <jdoc:include type="message" /> <!-- Sub Menu Navigation --> <div class="subheader"> <?php if (!$app->input->getInt('hidemainmenu')) : ?> <h3 class="element-invisible"><?php echo JText::_('TPL_HATHOR_SUB_MENU'); ?></h3> <jdoc:include type="modules" name="submenu" style="xhtmlid" id="submenu-box" /> <?php echo ' ' ?> <?php else : ?> <div id="no-submenu"></div> <?php endif; ?> </div> <!-- Toolbar Icon Buttons --> <div class="toolbar-box"> <jdoc:include type="modules" name="toolbar" style="xhtml" /> <div class="clr"></div> </div> <!-- Beginning of Actual Content --> <div id="element-box"> <div id="container-collapse" class="container-collapse"></div> <p id="skiptargetholder"><a id="skiptarget" class="skip" tabindex="-1"></a></p> <!-- The main component --> <jdoc:include type="component" /> <div class="clr"></div> </div><!-- end of element-box --> <noscript> <?php echo JText::_('JGLOBAL_WARNJAVASCRIPT'); ?> </noscript> <div class="clr"></div> </div><!-- end of content --> <div class="clr"></div> </div><!-- end of containerwrap --> <!-- Footer --> <div id="footer"> <jdoc:include type="modules" name="footer" style="none" /> <p class="copyright"> <?php // Fix wrong display of Joomla!® in RTL language if ($lang->isRtl()) { $joomla = '<a href="https://www.joomla.org" target="_blank">Joomla!</a><sup>®‎</sup>'; } else { $joomla = '<a href="https://www.joomla.org" target="_blank">Joomla!</a><sup>®</sup>'; } echo JText::sprintf('JGLOBAL_ISFREESOFTWARE', $joomla); ?> </p> </div> </body> </html> PKb��\" ����templates/hathor/favicon.iconu�[����PNG IHDR�asRGB��� pHYs��$iTXtXML:com.adobe.xmp<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xmp="http://ns.adobe.com/xap/1.0/"> <tiff:ResolutionUnit>2</tiff:ResolutionUnit> <tiff:Compression>5</tiff:Compression> <tiff:XResolution>72</tiff:XResolution> <tiff:Orientation>1</tiff:Orientation> <tiff:YResolution>72</tiff:YResolution> <exif:PixelXDimension>16</exif:PixelXDimension> <exif:ColorSpace>1</exif:ColorSpace> <exif:PixelYDimension>16</exif:PixelYDimension> <dc:subject> <rdf:Seq/> </dc:subject> <xmp:ModifyDate>2015:03:15 13:03:46</xmp:ModifyDate> <xmp:CreatorTool>Pixelmator 3.3.1</xmp:CreatorTool> </rdf:Description> </rdf:RDF> </x:xmpmeta> >Iv]XIDAT8}�]h\E�ϙ�{wﺻI]m�XClK4�RE�w-E��(->�f|)y�~(Z�"ȢA�R�h�Z�B46M��-$ӆ6&-k41����c�xn��S��\����s��g;^��t}�Pc{���յ�� �uQ��{VJ�5"I"�:�����X���7���O))����:L;�j8�lQ�P ��%!��럒|2��qye��4��m�m<3�@�!��$�+c粒���J�ۤ-S�R��Hk�A8$��k��� )��[�O�/�ov,�6�˔�}�O0|� ��n�����N�ҀF�{Ӂ�{ǽLK�)��{�|�G�� ʭ�"W���?��X-����Y�W�~Rn�2�˰o.� x�*S߇�Kê: �4`DF�oԝ.(Y�&pKq��ѵX�n���9�bbn��|��cc�N��ݛZĴ�&��ܖۑ�t�B���Trj]ޱ*�Sxqd�w?�� p�|���n�)3^E8Y��⑷g"rU`Wn�A�O�5���?�H�lpY[��Q8��+��]��r�q�oޱe��t����j Z�G�O\}�����r���7�wَ�C����V6t�b70j�#Ū�!��_WH+��R����F&/������Ϗ��j.9W���xZA!�/�W> `[�X;���GP���w6�V���R�{4w�e��WD�0�Α�h�������Lȣ��%J�Л��z����=i ZϰŠ��Q����^"���O:58՛�k��~h���l`M��ǽS�qV1DZ���m���hb��w�yu�K����o��;�������DS(IEND�B`�PKb��\v�[���templates/hathor/login.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** @var JDocumentHtml $this */ $app = JFactory::getApplication(); $lang = JFactory::getLanguage(); // Gets the FrontEnd Main page Uri $frontEndUri = JUri::getInstance(JUri::root()); $frontEndUri->setScheme(((int) $app->get('force_ssl', 0) === 2) ? 'https' : 'http'); // Output as HTML5 $this->setHtml5(true); // jQuery needed by template.js JHtml::_('jquery.framework'); // Add template js JHtml::_('script', 'template.js', array('version' => 'auto', 'relative' => true)); // Add html5 shiv JHtml::_('script', 'jui/html5.js', array('version' => 'auto', 'relative' => true, 'conditional' => 'lt IE 9')); // Load optional RTL Bootstrap CSS JHtml::_('bootstrap.loadCss', false, $this->direction); // Load system style CSS JHtml::_('stylesheet', 'templates/system/css/system.css', array('version' => 'auto')); // Loadtemplate CSS JHtml::_('stylesheet', 'template.css', array('version' => 'auto', 'relative' => true)); // Load additional CSS styles for colors if (!$this->params->get('colourChoice')) { $colour = 'standard'; } else { $colour = htmlspecialchars($this->params->get('colourChoice'), ENT_COMPAT, 'UTF-8'); } JHtml::_('stylesheet', 'colour_' . $colour . '.css', array('version' => 'auto', 'relative' => true)); // Load additional CSS styles for rtl sites if ($this->direction === 'rtl') { JHtml::_('stylesheet', 'template_rtl.css', array('version' => 'auto', 'relative' => true)); JHtml::_('stylesheet', 'colour_' . $colour . '_rtl.css', array('version' => 'auto', 'relative' => true)); } // Load additional CSS styles for bold Text if ($this->params->get('boldText')) { JHtml::_('stylesheet', 'boldtext.css', array('version' => 'auto', 'relative' => true)); } // Load specific language related CSS JHtml::_('stylesheet', 'administrator/language/' . $lang->getTag() . '/' . $lang->getTag() . '.css', array('version' => 'auto')); // Load custom.css JHtml::_('stylesheet', 'custom.css', array('version' => 'auto', 'relative' => true)); // IE specific JHtml::_('stylesheet', 'ie8.css', array('version' => 'auto', 'relative' => true, 'conditional' => 'IE 8')); JHtml::_('stylesheet', 'ie7.css', array('version' => 'auto', 'relative' => true, 'conditional' => 'IE 7')); // Logo file if ($this->params->get('logoFile')) { $logo = JUri::root() . $this->params->get('logoFile'); } else { $logo = $this->baseurl . '/templates/' . $this->template . '/images/logo.png'; } ?> <!DOCTYPE html> <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <jdoc:include type="head" /> </head> <body id="login-page"> <div id="containerwrap"> <!-- Header Logo --> <div id="header"> <h1 class="title"><?php echo $this->params->get('showSiteName') ? $app->get('sitename') . ' ' . JText::_('JADMINISTRATION') : JText::_('JADMINISTRATION'); ?></h1> </div><!-- end header --> <!-- Content Area --> <div id="content"> <!-- Beginning of Actual Content --> <div id="element-box" class="login"> <div class="pagetitle"><h2><?php echo JText::_('COM_LOGIN_JOOMLA_ADMINISTRATION_LOGIN'); ?></h2></div> <!-- System Messages --> <jdoc:include type="message" /> <div class="login-inst"> <p><?php echo JText::_('COM_LOGIN_VALID') ?></p> <div id="lock"></div> <a href="<?php echo $frontEndUri->toString(); ?>" target="_blank"><?php echo JText::_('COM_LOGIN_RETURN_TO_SITE_HOME_PAGE'); ?></a> </div> <!-- Login Component --> <div class="login-box"> <jdoc:include type="component" /> </div> <div class="clr"></div> </div><!-- end element-box --> <noscript> <?php echo JText::_('JGLOBAL_WARNJAVASCRIPT'); ?> </noscript> </div><!-- end content --> <div class="clr"></div> </div><!-- end of containerwrap --> <!-- Footer --> <div id="footer"> <p class="copyright"> <?php // Fix wrong display of Joomla!® in RTL language if ($lang->isRtl()) { $joomla = '<a href="https://www.joomla.org" target="_blank" rel="noopener noreferrer">Joomla!</a><sup>®‎</sup>'; } else { $joomla = '<a href="https://www.joomla.org" target="_blank" rel="noopener noreferrer">Joomla!</a><sup>®</sup>'; } echo JText::sprintf('JGLOBAL_ISFREESOFTWARE', $joomla); ?> </p> </div> </body> </html> PKb��\*I�Jee8templates/hathor/language/en-GB/en-GB.tpl_hathor.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 HATHOR="Hathor Administrator template" TPL_HATHOR_POSITION_CP_SHELL="Unused" TPL_HATHOR_POSITION_CPANEL="Control Panel" TPL_HATHOR_POSITION_DEBUG="Debug" TPL_HATHOR_POSITION_FOOTER="Footer" TPL_HATHOR_POSITION_ICON="Quick Icons" TPL_HATHOR_POSITION_LOGIN="Login" TPL_HATHOR_POSITION_MENU="Menu" TPL_HATHOR_POSITION_POSTINSTALL="Postinstall" TPL_HATHOR_POSITION_STATUS="Status" TPL_HATHOR_POSITION_SUBMENU="Submenu" TPL_HATHOR_POSITION_TITLE="Title" TPL_HATHOR_POSITION_TOOLBAR="Toolbar" TPL_HATHOR_XML_DESCRIPTION="Hathor is an accessible Administrator template for Joomla! The Colour CSS files can also be used for custom colour branding." PKb��\���x��4templates/hathor/language/en-GB/en-GB.tpl_hathor.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 HATHOR="Hathor Administrator template" TPL_HATHOR_ALTERNATE_MENU_DESC="Use the alternative menu which integrates mouse and keyboard. JavaScript Required. The regular menu for Hathor is accessible with or without Javascript, but leaves the mouse and keyboard independent." TPL_HATHOR_ALTERNATE_MENU_LABEL="Alternative Menu" TPL_HATHOR_BOLD_TEXT_DESC="Use bold text." TPL_HATHOR_BOLD_TEXT_LABEL="Bold Text" TPL_HATHOR_CHECKMARK_ALL="Checkmark All" TPL_HATHOR_COLOUR_CHOICE_BLUE="Blue" TPL_HATHOR_COLOUR_CHOICE_DESC="Select the colour palette to use with the template. You can use this option to select a high contrast version or use it to create custom branding." TPL_HATHOR_COLOUR_CHOICE_LABEL="Select Colour" TPL_HATHOR_COLOUR_CHOICE_STANDARD="Standard" TPL_HATHOR_COLOUR_CHOICE_HIGH_CONTRAST="High Contrast" TPL_HATHOR_COLOUR_CHOICE_BROWN="Brown" TPL_HATHOR_COM_MENUS_MENU="Menu" TPL_HATHOR_COM_MODULES_CUSTOM_POSITION_LABEL="Select" TPL_HATHOR_CPANEL_LINK_TEXT="Return to Control Panel" TPL_HATHOR_GO="Go" TPL_HATHOR_LOGO_DESC="Select or upload a custom logo for the administrator template." TPL_HATHOR_LOGO_LABEL="Logo" TPL_HATHOR_MAIN_MENU="Main Menu" TPL_HATHOR_SHOW_SITE_NAME_DESC="Show the site name in the template header." TPL_HATHOR_SHOW_SITE_NAME_LABEL="Show Site Name" TPL_HATHOR_SKIP_TO_MAIN_CONTENT="Skip to Main Content" TPL_HATHOR_SUB_MENU="Sub Menu" TPL_HATHOR_XML_DESCRIPTION="Hathor is an accessible Administrator template for Joomla! The Colour CSS files can also be used for custom colour branding." PKb��\�Љ;��templates/hathor/component.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.hathor * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** @var JDocumentHtml $this */ // Get additional language strings prefixed with TPL_HATHOR // @todo: Do we realy need this? $lang = JFactory::getLanguage(); $lang->load('tpl_hathor', JPATH_ADMINISTRATOR) || $lang->load('tpl_hathor', JPATH_ADMINISTRATOR . '/templates/hathor/language'); $app = JFactory::getApplication(); // Output as HTML5 $this->setHtml5(true); // jQuery needed by template.js JHtml::_('jquery.framework'); // Add template js JHtml::_('script', 'template.js', array('version' => 'auto', 'relative' => true)); // Add html5 shiv JHtml::_('script', 'jui/html5.js', array('version' => 'auto', 'relative' => true, 'conditional' => 'lt IE 9')); // Load optional RTL Bootstrap CSS JHtml::_('bootstrap.loadCss', false, $this->direction); // Load system style CSS JHtml::_('stylesheet', 'templates/system/css/system.css', array('version' => 'auto')); // Loadtemplate CSS JHtml::_('stylesheet', 'template.css', array('version' => 'auto', 'relative' => true)); // Load additional CSS styles for colors if (!$this->params->get('colourChoice')) { $colour = 'standard'; } else { $colour = htmlspecialchars($this->params->get('colourChoice')); } JHtml::_('stylesheet', 'colour_' . $colour . '.css', array('version' => 'auto', 'relative' => true)); // Load additional CSS styles for rtl sites if ($this->direction === 'rtl') { JHtml::_('stylesheet', 'template_rtl.css', array('version' => 'auto', 'relative' => true)); JHtml::_('stylesheet', 'colour_' . $colour . '_rtl.css', array('version' => 'auto', 'relative' => true)); } // Load additional CSS styles for bold Text if ($this->params->get('boldText')) { JHtml::_('stylesheet', 'boldtext.css', array('version' => 'auto', 'relative' => true)); } // Load specific language related CSS JHtml::_('stylesheet', 'administrator/language/' . $lang->getTag() . '/' . $lang->getTag() . '.css', array('version' => 'auto')); // Load custom.css JHtml::_('stylesheet', 'custom.css', array('version' => 'auto', 'relative' => true)); // IE specific JHtml::_('stylesheet', 'ie8.css', array('version' => 'auto', 'relative' => true, 'conditional' => 'IE 8')); JHtml::_('stylesheet', 'ie7.css', array('version' => 'auto', 'relative' => true, 'conditional' => 'IE 7')); // Logo file if ($this->params->get('logoFile')) { $logo = JUri::root() . $this->params->get('logoFile'); } else { $logo = $this->baseurl . '/templates/' . $this->template . '/images/logo.png'; } ?> <!DOCTYPE html> <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <jdoc:include type="head" /> </head> <body class="contentpane"> <jdoc:include type="message" /> <jdoc:include type="component" /> </body> </html> PKb��\�onntemplates/hathor/js/template.jsnu�[���/** * @package Hathor * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ /** * Functions */ /** * Change the skip nav target to work with webkit browsers (Safari/Chrome) and * Opera */ function setSkip() { var $ = jQuery.noConflict(); var browser = $.browser; if (browser.chrome || browser.safari || browser.opera) { var $target = $('#skiptarget'); $target.attr('href',"#skiptarget"); $target.text("Start of main content"); $target.attr("tabindex", "0"); $('#skiplink').on("click", function(){ $('#skiptarget').focus(); }); } } /** * Set the Aria Role based on the id * * @param id * @param rolevalue * @return */ function setRoleAttribute(id, rolevalue) { if (jQuery('#' + id).length) { jQuery('#'+ id).attr("role", rolevalue); } } /** * Set the WAI-ARIA Roles Specify the html id then aria role * * @return */ function setAriaRoleElementsById() { setRoleAttribute("header", "banner"); setRoleAttribute("element-box", "main"); setRoleAttribute("footer", "contentinfo"); setRoleAttribute("nav", "navigation"); setRoleAttribute("submenu", "navigation"); setRoleAttribute("system-message", "alert"); } /** * This sets the given Aria Property state to true for the given element * * @param el * The element (tag.class) * @param prop * The property to set to true * @return */ function setPropertyAttribute(el, prop) { if (jQuery(el).length) { jQuery(el).attr(prop, "true"); } } /** * Set the WAI-ARIA Properties Specify the tag.class then the aria property to * set to true If classes are changed on the fly (i.e. aria-invalid) they need * to be changed there instead of here. * * @return */ function setAriaProperties() { setPropertyAttribute("input.required", "aria-required"); setPropertyAttribute("textarea.required", "aria-required"); setPropertyAttribute("input.readonly", "aria-readonly"); setPropertyAttribute("input.invalid", "aria-invalid"); setPropertyAttribute("textarea.invalid", "aria-invalid"); } /** * Process file */ /** from accessible suckerfish menu by Matt Carroll, * mootooled by Bill Tomczak */ jQuery(function($){ var $menu = $('#menu'); if ($menu.length && !$menu.hasClass('disabled')) { $menu.find('li').each(function(){ $(this).on('mouseenter', function(){ $(this).addClass('sfhover'); }); $(this).on('mouseleave', function() { $(this).removeClass('sfhover'); }); }); $menu.find('a').each(function() { $(this).on('focus', function() { $(this).addClass('sffocus'); $(this).closest('li').addClass('sfhover'); }); $(this).on('blur', function() { $(this).removeClass('sffocus'); $(this).closest('li').removeClass('sfhover'); }); }); } }); jQuery(function() { setSkip(); setAriaRoleElementsById(); setAriaProperties(); });PKb��\ ����'templates/hathor/template_thumbnail.pngnu�[����PNG IHDR���w��PLTE���2d;t6R(Da9|6j>|��������ٜ�ó����觧�����ż��涾���������ڂ���������߃����I{�nt�g��;���-��it��@]������g��ߪ��T]uds�N�pp���Ddh�|w�TBBB�ꁛ͘drOA�8M`�Q՚tRNS@��f �IDATx웇r�8�F�r7�FF3Z�9nN�d�i����h��%���T�)4���/�7?l��A�/L���s��x{5�wh:7=s�����ֳ�@���쨴PZ��ZiP���۟/4�p0�9�иF�ˑ{J�y�r�\ӸP�����r�w�. �/��:��Ә��n9�%�O�]���]^�K�\.�;���(��|�Ο?���j�І��!됔M��&/N�%����@�L�٩�1C� b�L��� B��D!����@�)�#r����vX$���a�g�A lB.u;tb������(����9�ȴ�q���SAѪ��*�v��=�XDދ�83Yc��|!��5BN��WAx��kc���bF3�����i��^�5M'����M������ @�Y��R.�9����i���c�|tJ��B�jrTU�����Vm�Y��qI�A)��~�/6w�`s�۞ �q�=Q[:G�?6�O�'"�t,Xo�Rҥ�ke�9r�4�SKZ�1%}�[�8c��S�W�S��(��S�K�0���O���n��au�^8!z~Az!`���CT�q�X�� ��w�j�Z�:�m�����[u_M�+�Į<������>�^���(z��敯v�! $�1g�T���g���V.ԟ�!��c��e|���8����h?�A�GGؑߜ��^^^��ϧ�7��i�]#�j ��K��.��H�A,��@(|���=Q#�=:��Yg���3rr~O<�F���R��R����*�n�ֆgHiIi�Ә�S�SJ����#2��8�ʹM��V������� ѐ�'=�D֔�M�(������T@�D�ߤc�m��J���qtn*�Eg�wpU D���>�S��DU��˷�ؼ��Z����(�8�0?�[GgOkkw��p6aw��i+c�$��<x����R{ v� ��,H���ּS'��'���kB���L��\��ւ@P`�S�@,�C� ~^Q��t�p4]Ӽ�䈘{1? 7�{)"B��R-J����!u��S�lm^U�*�*9��u���ӣ�m�6%��C6i�@%Hi�����KO��;��0�l�1<w�ܿy��ϝ�q�۷n+�N�v�#ס^��tr�c�!��;��0��S�J3-'��9�z)E�B��{�C^�N=��6}ك-R?�5���b܄�q*Xt�U�Xt/V~ծ���ym��y���:�?�o��wx�p3>_�ϛ�z�N�(���K!�Xڂ���_X�vV��:��� �0���q�^�:��e��Sg��<���>:�\�ھ�:��kS��=X [:f�9�u'�I��O�ܥ�5��k����9�N�[:�=���h��2z[�[|:�;%s��yqr�hj��t���Mn�3}����.,*�����zu�=��ރ� �-..V�{�l�0����>o����|�D� ,8p�Z�9vb6�JZ/J�R�� �* 8:�X���/��Z&=��Z)� ����x��+��MI���%�w�s�S�(��98�:H/�#�v�Xl��Z�0Z��{��/���F�Q�[��{Q/���u(7�7�ߪq�a��rjL`j]� �F2:��C����T� ��):6fC f�&D㦭�i���`����uDnįW�:'��Z�az�|��f�p�d�u݊a)e��^�R-[/e�:~��_H��V�fJ�#OJ���F�jJ��9)/�D�yY���� �KR��1�U�@���(�i�l��cN6��r���+@~����0�s�M F�P��{L]L�rR�z���ͅ�U\kÊ�be������4�^uÖ|�� +���}k���=�7�s�C��V�4����z#��tf�>�un�2@��ѓ"�����tʡ����U���X��xم�{��^]��K��~�A?�RW���"Z�PX����#uR��hm-�#&��U�E��%dw7����l���j���X��O#�!y�N�Ѧ���Swc�tP�%��g���&��\ҁ����g��:��D���$V�.t}bt�"\�.��'��1:������T@�>�xR,����NLg�����KП����uj��1Fmk>��X�5��,零��Q�pֳc��Z�u��\h�S���v�G��b|�������,Δ�7��N<�O��8�Y�?��Q�G�Z �Ɗ^{���<DR��7O�!�t�#P�:{�u��iZdiRf���"I3~�й�s�uT�d�P�t�l�����A�(��c�gȋBֺ&ߦe��\)��:��@'��U�$�(�v2nI!7��f(��EzqUh6 t*�ܷ(�Rq��U$������@'���B�:����T�*�T�����6�m�q�Ż�#�ɾɏ6i��9����N�� ����c���{zZ���B�tbS-�b"��=��QX�i����5֕64�i����謎u�K?f0;����c�����~��/ ���Uc�ӱLU��e:M%&�&nu���0U'ݬ��B����P���u��Y�����Dls�H�[�d����:��t��Zz�p'��M'u>���'��c8;*��9��A��:+�@Gf""Y\^�́��(�"����u�%�:�(�ŝ��c8n:8h#(�ʍ���AiV$cm�X��UӴ:͡��HZ�7��9���RG�vL�T��Z�����i���� 9� �C#�t���6˹CH�?��萛ntt�v�~�c�w�s�P]˕���)ިՁ�H���X{ԜJUIy't:P[FBI5̨c���!c�P���ƹZ^G:{�kα�y#��7;��rR�E���l�7ĥ}W�*vO�ǃ�8�8��/H�:�DmAz'tp�1q���|WdY�%���u>7;�.�,K�")�>U�U�oZ�P��TKy'�Ν����Oij]�h^ $�|)P���#����ɯ�(R��&�d��i�PUE��&fDg���?�xx)H]IR�'y�%Y��"-v�i2t@���(!�i�t�l�~���{��}|��^ tr7�]R�N$�$�%�f��C^���:��zsyy�\����?u.����Y��u.y��p%��N%���"I '3I�Av-w� u���A��C��R�sgg�:�@�8����o�B�_^�Gg�zs�Z����n�� :�rw��5�rOG:��ȹ�̗��������n��C6 ��f����j;��o�0��d�H�p�]�8Сb�����4���Z���p�/q��:�V0��::D�G^t����q�& ��s�(� ��t@�J��`k���1횈l��pgI����ɢ��/C8����k��̞�1���H�#�$��}�S��v��͌:=z玫�"I�����f�9Ft�c5=�G'����U�:gȗ�|�3e\���t�t�t�=y%��'�IEND�B`�PKb��\�S���(templates/hathor/images/j_arrow_left.pngnu�[����PNG IHDR PX�tRNS���7X}zIDATxc�� �|���ӛ@�'�L���a9i����!�/�c����`�0��J����t<\nΙ2�k��6��K�<Z �FX\�)"=mX��k��ғ��@�1=ݶ:&��x�H|>�IEND�B`�PKb��\iA�/'templates/hathor/images/notice-note.pngnu�[����PNG IHDRV�g�IDATx����@���9G���#p��`�m�%������,�}]��i:7�~x��`ŭ��]qpGҼ�p�nGnJ�ܥ�ޖ.�/Ѹ!�]T����u\���<\g�ћ\|K|�S+^N!|�E��C� ��rI�+�./J�����@�E� t�*?ϡ|J�P�y:+���") ���Ŗ�1A�)<�"t��i3��(�HO��e�pB������ѳ���I�N1z�����CQ�<Q@N|�8D�E����h�l=**z4�1Q���q��AD̅�[ ���{F4+��/����w���⓹蠩4N�}#�;Յ*z r0�!q�� �B?�w9&���蘃�d�0Y;ʅ� [}T�;��F%@8�z�X;5��yvt��3k�0�����g�s���q�a�l�C��>����sUt�Έ�IQ�Y *=���nT�./fP���%>�{�qWuF�݂���F41�9�q��v�[��[���� 7<���ʼ�ٟ6w��ѽ��}�����ޙ�H����/Ya?��w��#hC��c~�>�C�����yL���;�%`�fn����>�|}�a����U�/3Z�Ό�{4�z;JF��Nr�w����ũA*n� |Nm���o�u���,��p�k� �ݎF�{�ijA�t����y�7h��3|��uf8`�g8ð���ᯤ�_�[x�̋IEND�B`�PKb��\����zz$templates/hathor/images/required.pngnu�[����PNG IHDR {DAIDATxc@����0��)��0EPv6����L@R�M��� e`SX���z��(�x9?���IEND�B`�PKb��\�ȩ��.templates/hathor/images/selector-arrow-std.pngnu�[����PNG IHDR X0$� PLTE����ȲMLD(tRNS@��f'IDATx�EDZ �0�e0�[G0q�,�݊���j��q�Q�IEND�B`�PKb��\����%templates/hathor/images/mini_icon.pngnu�[����PNG IHDR�Ѹ�IDATxcx��}{{���n���dR�,~9V5+��91�Z� �X��c T ��T�0�\���'�ț��pq�h�[�]�r�q�=eP�]�e#�)-��_�V|�6h����Ȋ�B��������Q�ޯ���4Q4i��w���3�O�ԣ����L.�d}Ѣ �P�,�P tq�Q��X}.��7y=���d`9^���1�o�)��->�T��I~Wj�c�y���(��V�97B���ucwZ�]�O���y˵��:(�0U�AQ�$(��N8!7p*o�v)�@Y��9�Gb���y������GR.� �c0+��Q��t_�]�2&�}<���R%�y�*9��B��M:�9U7�9l�q����n�D��J�ݑ�����%!��9+̺�k���.�"Z�E(m1��}.7�SE����4�y8��w��<��7{��ܵ� @ρ�$uK�5�'�R�f�Hs�3QIEND�B`�PKb��\���66 templates/hathor/images/logo.pngnu�[����PNG IHDR���?��IDATx��xS����S\��d��ܛv8����S��[u�5ڹ�T�:2wõq9�� I�d�v��<b?��{E����wM*�.L���2��zDgys���� ��Rw�����-�CR�uZj���Ys㤒Rn�%}���Tv� ����Y�{���+_ҥ�c]�ͱ^���M$���\�oH���I�zHr�.o�<U�,��h/_��&��M�(=y@p�&}V���zD�����D�c�RfS�˒?�.M.�]�\��5�3˾FR���[`=ƛg����]�ɵ�NX� � _�I7 ��֏�h_&����'������x�oL)�{��2�n�\�H��)ۓO�d��-�H7v���� ��_7�u�,��f�t[թ��xY��tB�N�Kk���v'DGI)�c0�Bl�z"&��_�?�7DXo��Pĭ�YvH*־�� ^&��90jKS�b�me7��+�{[+�k����qT�"��ЖEG��=G������ �@l�vE�1�/���0 ��~܊�Z8�Dߟ`�Ggq%G�cʦ��S<Κ�7��V|���#��3 �@�5�ͷ|���s�Z����;�s�b���R�7�*b�<X��!��B�9HA�}��q��Oч�,����ǧM�q'�xU{@hk�� �>O�e6�"�NE`*Y�8�� y��7D�I�T%Al��h���0<oB�Y� W�-����ŷ�3�n�(�}�o��z��ϵL��8Q�q9�9�e���v�%�P���Մ��Ex��� ����s6�£��B�5.����b}ijy\(<�(pK��Ax�,g��18����3�yJ��2~��M?�=y�� ��ڃ��0�< �y����VLá�łмƱ|ӶE�n*�+j^�N �i�� �"�������t��6�l�M�g�Nk��+��)��ڶ���:�����<>F9�D&.¾m�3f�A��R|�܉q����K�4>B) pcx�0���E�3<���o;�36� �o! ��l8U݅0���D� ����B!�*fn[��P{S�k�����\��Q4SN �,�����_��[xIwC�Y�*��Bt����a"����p@������,��*/�E5j�3"�R�N< ?o5T�E=��Ty�����F���;���\����C5��a�5�� �U{v8<W24N���9@΄���B��PoP��"���ϡ�>�35�C��ʾs�}LA�5�ZC��:�P� Ukp�� �Ao��oX���T��L����q ���J��qQ�:��A�GT-?V�f����0K���h&<��cCX���l�����ۆ�̃�أ���?h�Of�շ�,���N�0�B�Zo�����ȭ�~v�x��,��U� �\�?�>mp\`��*��} Z1��癏�1� ь��N�%F�2�?�.M�'����V�-�ԆN�g�CKΝ�U�-��)M��6_,d��T��'� "�d�N��W}�����k��rYM?x���E��!��8�r�@6T� ���=TM�n�hŃP��C�<;�3���h�g�$<�G�����g}!��>����c���VmJq�^�ΰg�:�! Ђo&��Oۭ��7�Ri���� Aէ�t|X�=P U�!���ʂ ��A��n�z���rITx���������ۖ=���)�-��Ӫ�=s�L�,y'���lý�[��?N�,>ߞ^�g�nZ��TN|�����x��Px�h��<�D��:�z��Wi�CQU�!�i&T�"����hE>T]����ކh�� ���'*�LN����U CB�"9��EI74uHr������Բ���`�����LN���Q{�7���b?�� P0>� D0��k1����� ��0�C����2T��o�`L��o���aE��M���OT!<?BQ�?4o��>3D��Zqʲ���r'�-Y��qXkϬ��Ҫ�P��R�!<��� :+|7��.�H�DA�� �@�3��0���F�p#���32�w����n�u"�"���L-�59��>!�.�m�y���"���3�3��7gR�"?A�"b��X ~sx�{��hI���f�ăC p!T�q=�6����bw��#��-��&*���l�3��{��-���bw�i1<c�_��r&���Φ`��A�f����^7)��aspj�쥞��^�[w~�i�ma9ء�R��� �'\6� ����ZKl,D�pG)��(C�p+2�F�Ź�����T}�1��S�?�d8@�B�����5�aN K�]XU�6|���qں��hEATxX �!@�B�w��S��� �P� �!<G�7�վ�Ę�y� LŔǿ��pp�p��v�N`k"0������Kp }ڮKe� Hh@v{ٮB�1p�u��ż�9f�0��\��r�P� ���xӚ�B�,x������������@O[��"� XfO��HB ���x����ڶtx�j.@D�r���Be����u��y�m��mS@a - @jM*DS����'bl����3t���c�]��C1��,��~�i�����5��������1���G����0�j�qt����ð��a,v�h� ?�q� �:}1�NS��-%<u�8U]*�>�[O�mf_�P�qB�r��p����a�}���O�%- �u�a �K��s��G���M'��=�bۚ�Q7/a�-ިǮj*@�!�f*���G��3(�5[�g�_��',�~�;�����H������c�/l�G��ǟ���J�i*D��_�ɏV�,�Sۓ Q"[CqY�#�;B�q� ����£dk��8S��X�g����/�T��Q�>�O]Bz���rDG���,��t�C7W�ts��j����:=#�~jIEND�B`�PKb��\s)X:PP+templates/hathor/images/system/calendar.pngnu�[����PNG IHDR�aIDATx����I���}�c۶K��b�rl뿈�۶}w��ۙ�,�U���L�&+���O'Cm�����?jnP���he�"Gf�-]; @�vr�!��]�<Zp9q�0����<���w��ף�{���`�@�l~FB|�����Wi>�|L�?�H�H���<y�| P!�%E�ӳa�ݧ[�<�8�rXu�>���aݡ������/�}1�(Vy��f�������ݟ�!��d�H �;7��Ξ�(:��!�����ʔ(�m;���',���=0Bpq㱇~4�C� ���(�ō��p<�/��6�OJ������́�P�HQ�ߺ�5��e�m�r�9)�$�F}AIHsl���p��-,,��~�+ b���sҒb�J��X�0�!4��E�3����u�M�q���\������S��c��W�!T,�ĿO�R"O<7�{E��.�y����圴��S��!�I#�}S�\�ђ��������[��� ��A�3f�vIIEND�B`�PKb��\Aj$��1templates/hathor/images/system/selector-arrow.pngnu�[����PNG IHDR X0$�0PLTE������������������ޱ�����������������)��tRNS@��fCIDAT�M�1�0�@".6&��� 궑��͖<ۢ���ʈ�/���t ��z�����,T�MK��o���7IEND�B`�PKb��\���"��-templates/hathor/images/selector-arrow-hc.pngnu�[����PNG IHDR o���GIDATxc��A�����D�F �^5�0 �5��B�F[5h�ԄcjDv��m!Z#LI*��b�AIEND�B`�PKb��\�ZxB��-templates/hathor/images/menu/icon-16-tags.pngnu�[����PNG IHDR�a�IDATx���VQF��ȶm�v��F��a�{e� Ïl/紛97{]�] �I��ճE�?�p �WeW^+ℾ��[�!;51�%�&�ѻR�R�pu"O��C~"eF81�EC�������N�#���+��������r�t�����i;9�W���zV��(��j���X��6ں~�v��=��=q%ׂ���X�$���ۯ��+>B.�}Dv��)�G�NB���O���S}�$�3��2�_�Y��c-X��[1���Ԩ�IF[\���&o���EX$>�Z'��/��%c����� �m���e:�{=��cN����I�Zc�X��F�zUiZu���H���+� �Y�F ��ڝE����J|����O�X�O2��1rW�Y�rW���B� Qf�s��׀~�e�`>��IEND�B`�PKb��\�I���/templates/hathor/images/menu/icon-16-delete.pngnu�[����PNG IHDR�a�IDATx�͒�KBa�_"#IP �A� C��2�� ��h1%��jrh�?¥����� �44B��P���wﭾ~ m�����'�SLM�FkD"�A0x��h�����=���r���۰���P*�[���~���"��A2 06f����|�[��0=]�P��X^��EGņ�U��BUA��v��v��N�:LNB�`WP�w�R&�t�A4�aa���������R���~��j�H�J��J�c�������a�zzm�������f��Ï0O"5m��fas�^h�u�#m23c�"܈T�����C���ٙ�����/`�W"\�|�TjsƺA�CC�l��|��� ��T�'1<\��m�&ݤ�O���"����E�f�E2��^��{o?�@\IEND�B`�PKb��\�0���.templates/hathor/images/menu/icon-16-inbox.pngnu�[����PNG IHDR�a�IDATx���-W@�]=\Զm��jŬm�F�m۶m�������<�qױ�����F�1c^?nܷƍ�I&��IG�� �C��m 3�E�ϛ�+�o��&��!�ꌙ3t�ԩ'ӆE'2n�خq�<�8N��r�$����$`�b�w�?p/�A}����qro�j�r}�����߃�Ԫ�y�Y�1�S�TQ�;2�D��~�#���9������f.���=�,6~c�%>�1� �� `Zm7�N�zb�N����-��A1�]�~�-�b~���p��|�_fr����O._�W�M���O�Dž�������xr�5�����;?|�O_���ǎ�_|>��}�O��o��"�"�q�`��E�v�䃗��OŧϾ��>��bJ���QHAHI�������a!$�E'��ߒ��K�&_�@i��-�s&�|�q� 5,Ǥd��b��PK(>��� qL� ��#a� a�#)f�J���ڠȧ����O�3N�9�(A~�M��~F�H��Ȱ,�?1�+�\)�c�a�5 �aP%�/�f1�>�#'7�B��9:?;JQLx���9�0��G�����?��O}��$�\��}>IEND�B`�PKb��\�|2�-templates/hathor/images/menu/icon-16-edit.pngnu�[����PNG IHDR�a�IDATx}�5�a�;�aS�#�5�&/�!�<Ýswwww����-áy�б�ow���fgaJ����yh�B�(�G��!�8��o3j�P7DUDE���5���@�l���n�}DY/Q��� S(�ZM�[ ��"��+��{����O��h�ܠ�@����o(߮D�;]]�|�gK*�$�.凉�@Ƌ.�� Ҝ�k�¯���*f]�I���ګ����,E�G�7�g���`O�B��<2���x)��ȫ�W̝�5�����y@D�3�W��,ǖjoE]D�%Bo�%�v�?9G�"���7�]{��KD�����X3S�\���#�W��+y�_�/B��kQ�r�(}/ׄ$�#��D���_��_��'*��`�~�r��;Kq��7NJ<𫖿�,�R�h�3'ˈ����uL9���:�ɯ6��D(Qp�B;�.'�d���5�cL�Ñt��lN����?v,� �t��IEND�B`�PKb��\���!��/templates/hathor/images/menu/icon-16-cpanel.pngnu�[����PNG IHDR�acIDATx���AE�f �f ��YBv��o۶��߶m3�K͇Iq�9���_U�S���r�5{Dݾ��]�b�D2��k)�H�mR���Uq�(��|��,�\�YJQ�v�`��z�=�2��h5{�(\�{�,��h�I%k�z�:[��(��Z���Z�e2�I�L ���o�k]��7,� C`;ND�9|е�jޜ%��~���C��H۳�ƌ��>�Ȗ�c���M�u�McȎ�9�a�D�ݐ�E�p��������L�W��WF7S�|K�O�<� ���~����V�*��q�jx�w�9:\��pWc��q=A�O����\���7��"$S� ��RG��#IEND�B`�PKb��\�U�p��0templates/hathor/images/menu/icon-16-menumgr.pngnu�[����PNG IHDR�a�IDATx���A����{�m۶c�ۨvP��kUT;�m۶�>�����_2qF;�D���z��W�`������X�<�rrz��T�5Cv �:�v�/�SqS�$%����9{����_�tD�pS��6MMǺ��c�)k�$���#9�����O��#m(E�d �t�� D"Q�djM�UI��8�K*����n���*31a�%����ʮcg;jW��l���Z�\��w\���<��l֏ ��{�X�a#?""8��u� �s�ӡ �T�K*�b�,Z��G ��� u�S�c �ֶ(G�Ž}��G�t��m~T�@ǎ�+Q�|y&M�Ľ{w��� �m�6�?��a���K�_���鋝Ԝ��{%��%��^Z�])����Nm�M�K۶�� ���≜6��SF��$PJ�@0���,q�7X�A���IEND�B`�PKb��\�����2templates/hathor/images/menu/icon-16-help-this.pngnu�[����PNG IHDR�a�IDATx��pQ�_m۶m۶m��n���ض�Mv���n����{7v�̷<��?���q\o�B$c��nYM�E���B����CbV2E �`�?�rL ֻ�ì�\źVH����0�/N"ak'(�vMP!���Vmh������̷����!~o_$���(l�a�졢|g�� ���� s} �6��̑��'m� ��-��(�l�[N�������>?2ńJ�#�fB����B84)7#��#��5��T��ri�iޖJ��-�Yl�������@�V�N��VnF�cY6�*B}h2�^���<�T�L�5���Rz�u"�_E�X�S�@��hu��*�H��@r�o,���4��ݣ$����~>^��~k�?��r�.݀��@#��������$��B"�CTT��������s�a�� ]�;�o�L���s�jc;$��Q�������'1d�Y�hܗanj��;{5*n��Y�r���]�M�h4���ɳg�~�0[�"wo̝sc�)�.�����B6"Td�>h�y�NNNN�G��3�f�a�y ͆L�ٯ��hLhAh����a��� 毙����V�~����Õ7������VVk@�@BGON�JhD����-S��IEND�B`�PKb��\9�����2templates/hathor/images/menu/icon-16-messaging.pngnu�[����PNG IHDR�a�IDATxe��,I���g5�-��f϶m۶m#8۶m�ѳ�\L�z�u�tA��p��p������r�X���}b04C�G�>��~'�D$� ( �JSd�`��(�2S�ݛ/�����d�g���<Q���� �JEk���:�/�>���[ � ��"_������ !l�Pd����R�Cn��\�,��|�n�{&]������W��t�`EC������x�xd���n@��ڳ���c��Q,��l�b1�]��j�zBv8L���%��"�H�;�s��� ��nG��O�pn�BQ(�< 1 ���~��+���voii! �4�OW6xf�Ơ_t(�8#�� n���������<��s��|d29�nn��O�*�*v3�L) ��h��6mZ ��0tJ�S�լE~�_�Ys�b���M丅D"�+�N�jT�U��0�l���^E�022²e�-W�{RL�� MU�����~��_������y\.�sS5]�$� ��$�����)�z�ɧz�i��g<--��� ��1�>Ɋm��\�Dv�A���=����`����F���~y�r,Y�t� ��1s��/���w@� �!��sν���kU&S�9c濓&M���/���U@��� $ p��Ջ�@ ��~�*`���}�&Y�cJ�IEND�B`�PKb��\!�X��-templates/hathor/images/menu/icon-16-menu.pngnu�[����PNG IHDR�aSIDATx͑l%Q@�W��m��Qm�v�7��X�b5VԶ����w�Zoָ��ə73F��1f7��<z��� L�*0���n�FPUe�^7@ ��L��%@��+���G���[�S�p9�A��E&�'gall�(�H8�4"!1y��@�n��/f�`���s<ǝ���r�"�q��Qzx��.8�˗F^����'�TDEǞ7����#��L&��ƍ���a00���FJ��GD�v���% DA�7[,�U����_ �-p.\��|�I�*�VW^(��7�=N}]M�F���v�,��s3���J�;v#i�����f|j�_î����_�/���w!IEND�B`�PKb��\�3)��-templates/hathor/images/menu/icon-16-help.pngnu�[����PNG IHDR�aYIDATx���ca�m��:X۶m[�*^۶���x(F};�˴�2<{��p�|�=���2�(� q�0 B�ߗ��-S������� gVCQx�^�y<H���s>�l��'���W�3�鵑4� 2�_#r���8�1�y� �$�La�g�C�p-o���;�PVu�kY;$/lۂ�l,F���GZԖ��Z����`>0�,�,?��v�5�x��� ^=f�%A�e�^�e}/.4�>�hb�w��Ӭ�euW��Ǜԁ�Kp�f��v����/������>��5~���D���p�-�o��V̮>VA�$G�����2X�,��f�������a��ٴE���y�~���W�?��,�N�L98��m�����A.�u��O/3b�w�XW(�z!��v�V�'��� m�mRr]0��I�`��ƅ�?r�wJ�Vԅ�.">g�g�Gʢ����w�@��y]?���D�����Y�miG�ĦE/��f~�Ҿq`7C�FE.�^刊���#���Kq��VU��*��>gY�"~ݹs�%�e�'�B�$jEEE�1��/h�F+���O�x�b0�5�ʅ��"6�p��~�IEND�B`�PKb��\Д����1templates/hathor/images/menu/icon-16-help-dev.pngnu�[����PNG IHDR�a�IDATxe��Q����nm� k3fc�F\#Vc�1ڠ�j�am�k����E_z���I��G� -5K�Kf<x���YTI[���q��w�vv� ��(��#����}v����!kx�h.E��wn�A�Yr�0�vB�B�D�&��H�̆�%M=C� ���K`�x����ҧ�:��i7fL\���5v�3W�6�^A{)rM�w�Y�T ��T���u��� �MȬB7x���!턟��%�|F̀����D<��R^ˢ��~�ĥ�����`�>�� Ư���_�ni���{�M=����[�� K��a$���R| ������ϛ�x�f��Y ufz�{���Rp����#�N�}�f(�T��� ��&|�h�DR戮����W��5�s��hD� }�d���}0ޕ�IEND�B`�PKb��\�o3p$$.templates/hathor/images/menu/icon-16-links.pngnu�[����PNG IHDR�a�IDATx���Q�O\��S������I�m>۶m�wgv϶;�wP'�F����0ESk{ �ᷓ7~Rn�L�3:�Z<@�ą��9��b�b�k"[C���ډ�Fd��VNL�6� r��S����n���/儞�H�'{�ag��3���RX$wS��1����v"����yp���..��s{V����� Ǎ��h#¾���].��{�c�����;� ��"�Kz�KYy9M&3M��<���;��-o��+�#��>vvt���A���g�5L6�y*��i���rOm�-=g|e�&�ɨ��}�k�<w��O��9�����<�a���:��0��K<���Ǎ�K�s�t/���tT�{��XM��������/x�@�����IHL�5�䒙orqٝ4�V�Ν,�Yq??�͍���q�Lm�����+�r2q;�x�G<�ש��i.�ō�B�J �e��N"n�j��{yt�+��i@IEND�B`�PKb��\���ƌ�1templates/hathor/images/menu/icon-16-readmess.pngnu�[����PNG IHDR�aSIDATx���$G�����m���l����*�ٶY|e�bkd�;�ٍ�o��Ξ=;�~�;�?��W@�ݻw?u����QU��j��]�Ԁ� &\�}������8-��8Θ��K�,���r�C�]��͛7o7Ms\__�|M�h���,|�L�J%�40����v��I�m���A�]900��w�N|��\s۽�d>��Z�gE��W�v�m� aY���(J������e�V�4o4��T@��,�=V�u���G|t�z�J�X��+ |���\��:�b5���[9y����㶇o�>�FTa7Z|�m*�ƨ���#PeL�F0�>�R���Jb�\�T/��w���1�*�ۮv�3Jڐn�H ���PeJ�E&H�C��s�u �7�|��J�te��������* H�uz����.�@��c�B��� @6�Q� DV����ΛX������q�f�uM!� Z�!�Z�� ���*�a�R�q�����LH$����s�e;��"nC��^�=U�x�����@×5�<��Y t1N��~�~�(�?�͵�y(+��@0�� B���`��IEND�B`�PKb��\V ��\\0templates/hathor/images/menu/icon-16-default.pngnu�[����PNG IHDR�a#IDATx��3@Fa�Ӓ�5-�vSn˞�����)ۘr��K��:}���:�\��L���v�`��o6~�3�l'K#X�Z˅ϝR�K$����G��f��X�d `!�y�����XxZH��2�_cр3F�ɜ��ׁPx���H�`�dQt�)��Ͻ�p��)�`;,����,�3�2K�)���*C���zpT�"��N� ���s�h���e�k���ɢ�:/�a�� �(��3��z3<V%JP�aF1����c6%J��aQ�f��0��8w�IEND�B`�PKb��\��#��1templates/hathor/images/menu/icon-16-newlevel.pngnu�[����PNG IHDR�ahIDATx���a��SD��6��ڶ�j�f\{m۶�k������o��ϙhH��7�c_~#� �ǎR�ڗ�d?�['fl'q v[� �?B�z !���/hp=�����OaP䦁�z���3Y�ƨ��Qk���Q�;'-���A�_�_��9B�d�ِ�W@� D��JT��?w� ����OV���?k��!?���{l�E�rU's��!q����>�*��u{ i�J˞�BRp�0��17yd����)L����+}Ro��Km�nY*��H^0�5)���x75�����P��lɫ�/��R�ڠ�<�AKi�G�ZzHR#o�2ha'I�9�u[����5��^T2}IEND�B`�PKb��\�Z��0templates/hathor/images/menu/icon-16-user-dd.pngnu�[����PNG IHDR�a�IDATx����@F_1۶�x��p��řs��gf03�����w��o�%u��z�jP� 9�T��2!����*�� �e�C��H�B�!�1lFLʢY��~X��B(<ϿVS���(�%A��M��o�t��@�0��-���K��U��R/jV��GP� X�;�K�x�6RN),� ������tkr�R�h�����x7"0��OF�!Z�Jz �|Uu��"(G;�z���z,��~�:�y�n��AN68���Y�LT_�Ra���}��2*'�15߁a����dA�� �p�L�~�5�9pF�����b��qҳ��.[�0��y���mGc ߚ?V��X#��C��,��� ���$�i��v�Х��~ߟ&�|D�Cc�4�E�|�*������x ��#53�o�4��O��H������5 �b�}HyTK�ZiMzH�p�^��`L��?,�%�%IEND�B`�PKb��\bˤ��2templates/hathor/images/menu/icon-16-component.pngnu�[����PNG IHDR�a�IDATx��%�\A��~t���b��Q'�6��w�.��a�Qa�,���̣��w��W5w���a�f`$���@3�@[K�S��7v*K��Ũ�1E�u�b9T[<��8aes��ޓ�8?�p��Z�;�k�(�+]g9�V���RY��Cs�q��)6��0�0L^��i���O��B�`BN��@���ԫ�����.������-QD�0��'�T(D��"�U%!Sr�5���m�%�|���(���Z�-Y�ګ ���!CREMFAX�@����h�]L�i���� S��D�Bf|2�O�͞�6�jۈv���\���sO�4 �!5bA��L-0�����L�ۡ�U�0'1�}��[�"Ųz �x���'��Ǔi<ϫ��� Y���8���q���o�C�76=���8>�mT�2IEND�B`�PKb��\��WW4templates/hathor/images/menu/icon-16-newcategory.pngnu�[����PNG IHDR�aIDATx��3x4A��?۶m���4q�h�ض���S��M��l�6�y~�y1��:Op �B��PtH���?A�C���(ퟋ�Q}�u�` �[��M���*B�z��}�T��'�=�A�Ijn6�����)�S� ��G�e"n���_KN{��[���w�v���^����ʯ�%�~(�9�p�g����Z��oǻ��XX^����3�Vn�^�_o�-��]�꽚,�]х��s�� C�̲�z<�;H@�<qޢ v���'�~��ۃ��L�_��IEND�B`�PKb��\�{���<templates/hathor/images/menu/icon-16-contacts-categories.pngnu�[����PNG IHDR�ajIDATx���A�m�qr�U����8m?۶m�,�ڶϳs��oU|/�����>(�#h��Dk9�ԅޅ�����@J�2�ąIB|5wP��Ex?\��x�/�d�.�(��Z!��k���Ю ����#kpM�_��un��-���&�F7/�ؖ �:�J%b�ۋϟ?�K��� �F*T,�����C�f�R�<G�8��p�İ_��A���V�bJT�g����X�R,���<X���W�*Ĕ��c�"����zw-�&�FX�6����ʁ���e��#;�q� !2�������X�g���z�Ҹ������3<}���]i��T.�%�]t�xuU�O/��*�"�=+�&�WB~IEND�B`�PKb��\��_��0templates/hathor/images/menu/icon-16-content.pngnu�[����PNG IHDR(-S�PLTE���������������������������������ޅ��r�����������{�̚���������ַ�ԭ���������ڀ���������������������c����箻ǽ�Ɲ����Ӕ�ذ����ԁ����т�Њ����ٳ���?�tRNS@��f�IDATx^M���0@���2Ø�����6Ѵ�xlKfLYJR�R�1a�0D�O.���E�����ƻ8@H��� �1k3���M�q�;�R�n�u�@fͧ��L��H��l�� �L��)y(�A�UeXK�@X!�11$��W��1�O�b�b qAӡ�IEND�B`�PKb��\�~m**-templates/hathor/images/menu/icon-16-send.pngnu�[����PNG IHDR�a�IDATxݒl`��`�m+��[�Eg۶m۵{�m�g۾���� g/�����?���� ����w�D���XTT��� ���A(�gz��.���b; P]]����d2h�Z�F���#���*�(�Jh4�z�'������Ӥ:\��ƕ�"�����k+(�H$-��ϕB9=l6,}ƿ��t���$���� *��<�&��F`�� l����G�j�"��F�Β���,�/���%Z��]H��555\p�k,|��a�L�eW��Ù����rp[���Ԣ.�Oyy9o�mT&�|�Ç�l<Im��xl���>Fs\f��MD��&��6%�OJ!J�Y�6��i l7�#̈́��*T���9�r9T*_%�n�n�n�co$Z�L��X(��A��Q��mț�A���Ħ�:�t��7,���NX!�>&������ۆb�M�̅we�d�egLb�쬠�7ccc�?a��K<!LIEND�B`�PKb��\�նe/templates/hathor/images/menu/icon-16-groups.pngnu�[����PNG IHDR�a�IDATx}���V���Gwߚ?k۶msP��rT�|�m۶m���Mr����c*�ʯ��O�D"G>�������� �O>x{��o��v����.Y;�F9w�rҤ�rĈ�B~&d�ɪ����%�u☳#�/:�4UEU,��;���F>����j �PXQ�o�@=��s;��\��V��hj��jX�~3��S� ���|����ӧ�=���&�:G� M��0�� fG�E?��]V�&VXBII�Sa+w� �~�H$@��䟎�h��v��ȉ]�_�E��)�d�Z��$��jϞ=O�����HdKr��!�0�]I��P���짵����N�H����i�eoSp�7�b%�o���F�8�]�h��5MN=g$J���G�f��<��XCr�x�7���匕��d�qVԤ� )%���ڵkg� -)ZC'�@ �O��\M`�����&-����mحz��4��)������GUk_��8�$��\��(2@�#�HI�kY�髅:� !����8�bJ�,����=&�T!}��(*Rl�������߿�]��ߚN����c�hl`G�M��H����� �ی���nݺ�E��0��ӥe�y�l<TǮ�f��mY�ƴ�Y�6|��}��ݻ_7`��UÇ�cƌ9�Æ �a�K:v�x����?��Ñ]�v��g��/2�:jw� ~6f\�F��IEND�B`�PKb��\�,���1templates/hathor/images/menu/icon-16-language.pngnu�[����PNG IHDR�acIDATx��ldE�ͨ�ڶm۶mԶm�6Ƕg��A2훜���n��� g2To�ˏ�*[v&(�7IA�LWii��e���T�-F��l�<�`��ӣV�J �͠(�aU�����I�����?\J�D��p���x�/�H� c�ȱ1�ob���T�<���D"��Bik*K�:䈱=���k�����`�f�E��Y�Ds9M8���cWe��0�V�� �˥XD�R_ V�Sq4�������u <�:���>u� 0�� �>�����Vm�e�eb�5p1�epjH�B�rb�W%��V�umx��4����i��V�㨨��,�% �� �,?�`_`%n%4���*`N�X��t�K��H�z�BŤW�02�*'B*�^�L�,Sm�}.�Yચa�UW�kJH��� �я�`�IR=�a�t��UH�&Ԛ�ף�`�M;O �Y,�Jir7F��KDs{'4��o�s�A|5�JY�])Гy_���y4aq=Co#�)�*�T�IF�é���l�x�o�cj��͎�j˧8앍A�I�����V9W>����{��9OVX%�/���钖�4���/�����$���A�IEND�B`�PKb��\Ljyy/templates/hathor/images/menu/icon-16-upload.pngnu�[����PNG IHDR�a@IDATx��Cp�QǓ�ym��v��am��mm۪m�6�k�ַ�LR͞��y~��G�S�#��ڏ1���_Ǭ�8�o ����R���V��fc�F���QD��PτG!^�T���3l��QKH��arߪ�S5w�\8`�:r���&�(�P�Z>}���|���f#z��>�C�l���������<���\L�����T����6�{�Ak����[�jaCQ�@�pf�FHT��J~m�[����p�g�5�����x��!f���p�c���,?���PT��Z�e .���t�v��(��bBwׯ��A����y��5Q W��`:�g)�sC�p�m�Qb�O�φ�9�b�r�LV�(�sC��8�6�P$},�fC�o3q��~��ytw��p���@Xf ɓmQ�XB�ƂS�KtX����&Xh��in2!LeA�2��'ӖG��:G��ia�ۄ�%�a-I��;W ^�������bu���+K��9�I��7ِ&q!K5�{��i��6���d��V�L���l��,�7�L�cE�2��� �5 ���fdϟIEND�B`�PKb��\Xڽ�))1templates/hathor/images/menu/icon-16-featured.pngnu�[����PNG IHDR�a�IDATx��S��A�c ��^B-�_B-��f^ڶm��Km۶m���;�c#ωԍ��'H�Ph�ԉ4(9���F͙A�h�"���d.{��;7�����(���(Y#�����RO?ʏt�`?0I��(�-�`f��̓� ���x���d[�e�2ś^"��y��h�!RF��5�l��5�? ��Q ��9�b:�e����Əm~�Zb��D� ��B���Y��.������-Mґ�X�)@���H�u�4�����+���D�TFS��y"a��'��i�>��B}����4���(f�� %�����t�-&"G�/Q2�S�3T��A"B�^��X��?��4�G����'�G??D�4k��!B�`eX݀@��ES�&�a���_١���ꈸ>J��X���v��F��.لg!�m"\s�ڧ��Oh��ǟ�_I*���PCXDf�@���^x�̭�_�L�i� �PB��+��~���ڏ~���;����9��IEND�B`�PKb��\��h� 4templates/hathor/images/menu/icon-16-maintenance.pngnu�[����PNG IHDR�a�IDAT8�c����� P� VĦ�1t�k����x"�hj�����/� ��y? ٨�f�� v��T�i�JGF�wA� ^O��@���q�u���cq6.�!�+��s.�ǡH�P�|h8a�h2����B��<�hԛp�2Ի�Q�Ŗ��t�&ʢQ�r e ��d9eI�;e��={E�7�LpXWIEND�B`�PKb��\i�y��2templates/hathor/images/menu/icon-16-help-shop.pngnu�[����PNG IHDR�a�IDATx}��.G�߇ڶ�VP3�zc'�yㆵ�g�/|�Q۽��)v��6�3<e+���UXO:_��I�_�ɗ�h���}!MΗ��s^��4�Q���@y��Ս:>��w;���I�I���P��#�3���9�?����GSy��/���]x���7��)ͯe�������t�T���W����S~L�0λ��6p�M�X4 :�����7��L� �j����t9����f�3�q!; ��^^�+���n?ȰÃ/CfN�������D]뛜���r#w=�ꇘ4�CR��J����e����q�p�Ť�z�s�l+�ԅA�_�ifg�}��Q��J��O�z�a�[�y�m������᷸��?��A�f���>����'���mO���?����q�b�D~P��:��ר �)a���F��f<�3 ���(�IEND�B`�PKb��\��mrr2templates/hathor/images/menu/icon-16-writemess.pngnu�[����PNG IHDR�a9IDATx�R�A�mƵ�X�]�n�ڶ~�>�m۶ξ��3����x�fG��*rs�QQٚ���}�X��|Wȷ�G�bcQ�Ԅ꾾h�4�uq'�dr�YYYHJJ����Ȉ�����t�2VA���J$u&''��� ҢV<W�����o���eD��vƍ���0��N��^�ǻ�V���41*�|��=��j���+�>�8k�h4�S؉�Ȩ�Dee%�B��UA.oT*����C?���П��qԞ��d�@�����Lbbb�����������ۋl�mXbǡ*� �م�b�h4���A <cH`�i�t3���|E�(��ܸ{ {/���$���;]�ۘ!�J� F�Χ�8�.n�d�} q �)��j����z �M���\ETii)��X��<�MDVY-c����OKB쉌�|B��e��� D{w��������U����v��O��,�g*�����k���Ѱz����/^����K���L�q��5�m�D��p8���&�4�Mt��b������ݾ}{=��m< ����7�l�>dM���5�ZIEND�B`�PKb��\�|RO��2templates/hathor/images/menu/icon-16-unarticle.pngnu�[����PNG IHDR�aWIDATxeS��P=�{��ٶg�p��9��d�g۶k�l��g�}���iNy��� `J�Z�0����p]�m#�!��ϵZ �BCJ��� �@�B�0��~s��`�a�рa�h٢$ �t����8�s�d����ڴi=��}H�q��ix����,2toYR?3��-$�q��%Y~YW*��d�m�}��m��C�l6W�(-�Ȑ���}B����D�Z=���gOorm�Ay>=�r��.�: Ţ���'56��[�n��R$�w���Y�3=;PtE�|�JO"��@�۷������;����_-,(�T*�T25T~���c�Th�lЩ]j��KK$�:�O�>#��7o#����W��n�n�o<��wy�^��RM�ԅ�ؾw�M��ڀ�R� Ժun����1jh_\!�{wc��Yضs#v����`�H@Y���na$2���އb�����h�!X�r�����P)�i\qx���02�-�~�L ǥ�����x:��%�FHk|�A��D�>�%-���/�����B��O�]���?�L��@�XP�D!��v�j"��4�<�EIEND�B`�PKb��\r�VH0templates/hathor/images/menu/icon-16-article.pngnu�[����PNG IHDR�a�IDATx��E�QD��&1K[��x�Y��s4��k�#h�13���MΪ}�1#*>U�_���Ʊ�4}��6GlK²��p��L:!��l$�����$I^,�K�q�B�����\�`�p]�o߾��h�Ç:Rr�{ �_,��W�����8�Mҽ{�F����f�Õ�s��A,I�LAGGG�<�+W�l��L���o}.�,,ZV;���q�ڵ �t����8��L���M;2F�J��pQ�� �҅�&s��EY@>�_�~�6y?We2A��N���8�5@FQ?I��3g���A�ԩSR�7xc�VC��`�h��Q�Z�jQ���1�^"##C���#Lw;#R#I�.�Q#e�(�˰X��I� S�� �DS@����x��-���6@|�WS(��}>2�x���?Ӥ�-�cۃ�2VƼ��{��c��EYہMZL;Y� n>��RL�IEND�B`�PKb��\۠A���.templates/hathor/images/menu/icon-16-clear.pngnu�[����PNG IHDR�a�IDATx��s��PF�2�"�혵m۶����F���g� !C��;��{��c}a��lj"?�UO�Ђ��z�jP^�/�$�ʈG\�s�(Y)����A=}1l�ɀ�'��(�l���W�yħO��x�g�d�\��[w��Lt\�heވ5�I��!����l��3��|�����^�ha���ˑ��w�c,ˑЪ98|�d`��t9;N���,��,�2���6r�2e�Ku����vtZ�v�:-l�DY��Ns�n��NSf[;,i3m \��6�n�묦��U�ֶ��V���i�kHd�R}��8�B�u�]�N�+y-�;�-��C:���C�fW6�=dyP��K� ��hq~�{�����۵��GV��=�9 �5z��j�UK>{)�J.��~��і�����w��ZY㿷OQ����RX��-IEND�B`�PKb��\�I���0templates/hathor/images/menu/icon-16-checkin.pngnu�[����PNG IHDR�a�IDATx���@�k[qj۶ֶm�:��m�m�?�~�t�Rۛ|��L������d�o��S�A�T�$�~92=z9s;�NŖBYD���>��S���n����)�i�=���� [\��w��8�DI���� �Q���z_J)���2��G�E���Ƥ��58nZ/}����G��ݯ��Q8��;5��aQ��#���]Ь���c�v9�r��|E�w_���y�C�ӡ�S��u�9���˪�r����˳�#�3Ah���͢��K��M�9��.�=����n<Uy02���r��j��C�#���<�<�9���-5�� �tE���������;B�� �J��9�r��Ez�u���ȣ�H�E#ʝ����va�J �52��qIEND�B`�PKb��\I�\p��7templates/hathor/images/menu/icon-16-help-community.pngnu�[����PNG IHDR�asIDATx%�3�-��o�̹�۶�6f��V� �ض���Ŷ����bv���وʦIZ��]�&�ʆ���.�+r�2Ъ����f�G�x�4Yz��&"B�Q�!I��qL�'L��`3�?#1ֿ��d&�"IH�P���YE{ 30aZH�4���X��V�"�t�S�)siJ� d��'��3���}�|�~N�M���|�QD-ʒ�d��a��t���&�d�Ƣ|<����+�I�(UI��|Ǣ홿-�r��xO�W�����b�.bE��#���ya�^�5Z�=|x-�ߊ��^e�;��D1B�o����9���G�4��3��w.d�K@��-bTcbUJ�RT�Y�!]d��&0i>5�UDTh���}Ϻo�����Nd���F��f�+��lz��;K�$C5 ����Yʌ�$v=����٭���?0k#�=.����0�ϯPTMI=��y�qb��� �v�%���E�O�P6Q�tE����fݗlr4�6�HY� k��E;Y�bU��0w3~|2$����o�;��)����.6;��ȴ���ۏ��/���5?�FA�Qx�Bp��וgDy�h��쉺>�U{j�� g�+!�F$�6��O{�����=¦p��IEND�B`�PKb��\������2templates/hathor/images/menu/icon-16-help-docs.pngnu�[����PNG IHDR�a�IDATx}�C�%W����u������O�U��X�Y�gb�N��{��>O��U�y?eq淫��x����Yo�� ��Y���[q0�iAH6�鹞����Q�����U�J՜�q �s5E��jM�L/�U�θ�Z:'!r�u���R5�\�Ȝs� }���|��N4�Jiy��~+��Ko#�P�~cr�KN�c����fEY�ew�����[c[�ST��"��������қ({�w��c[��W�;id���4�#M Tm�W>@�bC� ?5Ŀ8�]�)���b�s�-~B����:��� ���G�\|#1&���͏�jܬ+.�� �<�G{��I S��P �Ě��}E��&33�ʌ�FȺ C@L' ��'OjNj��� ��0���`�N/�lE�+0^�$�V��i�IEND�B`�PKb��\�}bG��2templates/hathor/images/menu/icon-16-newsfeeds.pngnu�[����PNG IHDR�aIIDATx͐�EQ@�Ҿ�Ɵ]?{m۶m�Hk;�f��kv����_�^s�3��G_X��%Ҋ�S�:u^@���4�a�4�V��DH'HL2g!��ܫ�A;i�D�:������B@��gϿ!��:Ic��/�AKK�r��f螊�$��9��_��M0����Q�ݐ�%��U[��z�h�:y_�j�c�s6�h�<z���bA�3M��x�$1LK$f�@~s`�Rz�tc@?n�û���}��M����c�>$�o��@D ��`A���T.�Z$�yȆu!��i�@<^(�� ���]n��:��IEND�B`�PKb��\bj��/templates/hathor/images/menu/icon-16-levels.pngnu�[����PNG IHDR�a�IDATxڥ�!1��Ѳb���E��v���G0,�%�Y�kr�`Qa��'���+�>3�����7���ˈ�/�3;=`?P��i�Ȁ"D40��$P���s!k7��R� �I#�%`�F�q��p�)я��o��p`��k,��zPC2��wԒf��U��YoUy��:��A6$��1��K��nIEND�B`�PKb��\�Q�6110templates/hathor/images/menu/icon-16-preview.pngnu�[����PNG IHDR(-S�PLTE���z��|�������������W��t������}�������������ȓ���������������丒�|�忱ݫm�`e�Z������ؤq�i��z������O�J����������������կ��ytRNS@��f[IDATx]N�@����w��S�=H��d��xUZ b]ȅqe�����?�'�i�{؞������w����Ǯ��G�n�7F���� IEND�B`�PKb��\��66/templates/hathor/images/menu/icon-16-plugin.pngnu�[����PNG IHDR�a�IDATx��t#Q�s�E�I��m۶m�<Zm۶m��qk�h��<�~��*oo�M�EE�� j�L����Rff&232����h,�"ݢIҏ��x�<�M��S��<�������J��]]\d�"�TXXxix8� �HӋ A�V�x�@�ŵI�餧�#7'�����A��Pd��d��C��8V��D/�u}j���n���hp:�ȹ�b9��P�WU�lT�5S�8x!�!75�vrt�d��pH��f�Y\k��k��Y�gH@�7��둠ӑN��>�$�i� �ʂa� �yl���Yu� \)�Z����쮰H���� v�ZT�PQ�� ��>��zǺ��n�kPw��vI�i��Y�D��(z7-?�=����`Is��C��k���|Th�G�ɨ�@A�' ��Q��=,ͺ� ��o��A�m1�Dh�'�L�W�'�O�!�p�f�Lm�+��җĢ�w�K�m��HcQ[�d*?��0���l��AIEND�B`�PKb��\����;;:templates/hathor/images/menu/icon-16-banner-categories.pngnu�[����PNG IHDR�aIDATx��l��g[�̶Όg۶m��4�_m۶���Kξ��Q�ot��C\��tn��{9V9{e�#�:�l�dH�� 2����9���V�� q2�d�>�r�{�T|�ԙ��cUL��ٲ� e�w�b����,l2ոg)���",�K�������<�?���h����υ���4���8��f�[2OC2y�� ���a��m=��뮟��\h)�L��c�@i4����3�T���p�,yD�_9 i�H[܊�d�Co���)bc�^�T^g�9�gvѸ���^y��*p���^�k��$�f�<�k<�J�.�cG��9-�a(�K�Ù`5�� y�B'E�Ef��bD! H7�tI.n^��+�m����t*.���O��7�'(D�+��Q26;q�O�Q~��)��h��Ө�|}ݑ�荢S�;��Mx��:��o`6m���(V����t!F�����O�(�h���eu���"�Y�l{IEND�B`�PKb��\�D���1templates/hathor/images/menu/icon-16-category.pngnu�[����PNG IHDR�a�IDATxc<�� ����I5`?\3a\�i���@��H�U�L����_ �R҃0`���RI� =p�&���@�?)�a�b���H�'�� X�T���R0H�:���'���`�t�w��?���Aj�9{Ŕ<�5IEND�B`�PKb��\,ZP���/templates/hathor/images/menu/icon-16-logout.pngnu�[����PNG IHDR�a�IDATx��EvA@�@��r6���G7�.ޅ/�Z9����0s"���Sﵰ�I���-�S\~ *�����ex2@�>���g��d���ѣWij�'�u!`t����5kl�� �<�*�0|� �_����p��Ok�jm͚��(�8r=�7o �LFF��G���5��ۭN��4@�wO��Ϟ�ښ���y�w���H( 7�9�S����0lm!�z(�9�#�������� (�wwk�����ؿ��+�:hp+�e�������6�<`rB�� �M�E(����#�R��b�P����,Co���ׯ��-���jT�<\�X.;ڲ �p��F�ú���ż#cX�ʹ<3;kf�|��(�ʋ�2�lC\+�Fԁ1�~`Y��c��(����"IEND�B`�PKb��\�X?Z��3templates/hathor/images/menu/icon-16-help-forum.pngnu�[����PNG IHDR�a�IDATx}��P����ٶm��\Z�eײ�-���)k�m���s~�t_�:]~�A�G�'�QԺާ��T�X:��FXH��5ܼ��G��38)������z�n���?��Z��E(��TV�~0|�\�h6~��W�V��#��?�������`I�s�����^�#��Sc� �p !V@f�?&m�{��YU��{ɪ����Ƶ��~�$H�h#�%��)A�(��y �}�,o/��5��-ZsɃCm�.������.��3����Z �5D���}��Lޡi7�J��.�Z��C����^�H�>ܾ b[֖��'� � �n%�"�eP�:H`��Xq�$�C����@�S�qgp�Y�a`wy0c!��WIEND�B`�PKb��\D]� 1templates/hathor/images/menu/icon-16-viewsite.pngnu�[����PNG IHDR�a�IDATx�ӵA,Q��wGq���ifc2�* � "��e���>ܝ�ecw��1|D��,����*)Z��k'���P�����Y�w��*�y�ta�����o"_��k%Qx���Ơ����*ę!K��2�u�A�nn���\S�8��䑃j�G�[Pp��܁�r؏ H!�@Jл�E�ͣJ��&r;ų�ë�ޤ�����Vi �a���`k �?X�S��l��amTIEND�B`�PKb��\o���pp/templates/hathor/images/menu/icon-16-revert.pngnu�[����PNG IHDR�a7IDATx��huqƟ��۲�m�N'/��e7�1϶me�-�����{8�_�xN��'��W�٫�ro��z��s�T�߿��c\�@��{�� �%��Z(˃?b�1�Ggt�Ń^���C�v"����n��{�`r���Ő @�D����Pp���>2$x�c`��{�:��˳_HA1� E)���#����1�)A��*U�� ���0�Y �ʅYA����Q�"WS�+�l�熌��z]� [�x&�*#���W$�j��c�����C� 2�~�;?A}�d��IEND�B`�PKb��\AߗH.templates/hathor/images/menu/icon-16-stats.pngnu�[����PNG IHDR�a�IDATx�n���ho�#�z��u�ڍӰvm�g��p�[|��<O�S#�|n���3��D��=%�q~G�RN0��G��R���ڬ`���}���'bP����e��{����1\.����]�[S�N� J%vi\;)��eH��Pk� I6� 5ܶG�b��R �N����� n��0��dw�@���;}$�ϫ/&��9LdZ0nR�IEND�B`�PKb��\���F��.templates/hathor/images/menu/icon-16-trash.pngnu�[����PNG IHDR�a�IDATx���\A@�̲�m�����q��eP3Nj۶��ms��t�~���$<�ˡ~��h4��ͯ_�����6m�tv�ҥ3*d@Q �2�9r�ȁH$"�?��7oʎ;6���^93i8~���ˤ�e��2m�����={]��*���CnIѪs�)Z� �L-;��lܐ�����D0 �-�~�����aS�ƭ��s��!/��������~h��ƈ8�ī�>��/��ĕA�qӣM[��0��p��OA�z���8��h*��L�"'J����\��ee"�D��(�a� D��a[�3��8��c�n��f4��'od�e3x1o�����&=�̴��=� �A\�*��FQy2P�,�y�ɍΈE(//ϙ��_��FP*w $���Yq3}ԹƏ�O�k�bhBp���q�,����7�̜Y�b!�hqIEND�B`�PKb��\��5��6templates/hathor/images/menu/icon-16-newsfeeds-cat.pngnu�[����PNG IHDR�a~IDATx��3tlA��l۶m�V�XŶm۶^�I'��2�ї���S���� �Cŭ�T9Exl��2���@�E 3�$r���%9�0�.}# ����f��1��<(ȭ�Ng�ͼw�Ez�3�9�וK��r��Υ���Ё}�-��� }�!ᎇ�ۿ�!�˼�����/_klr�ġ��6����/��F�Y�ۤ`�c -�,@R_����V�w���X~=7 x���~�z�r��m�y�p���,�٭�p�K��y~��4QK��ѿ�:uh�g5�z� X�6��7�5z!�b���l��:t~�1]� ��*�����|�@�"�,�ұ|�7:Oa>Y��?m=?_O�Wυ���K���l<)IEND�B`�PKb��\���--2templates/hathor/images/menu/icon-16-user-note.pngnu�[����PNG IHDR(-S`PLTE������E�Ҕ��V��������3���g��V����������z�����2����x�����e����N��e���ܼ��~��LGI��IDATx^]�7�0DQ�I9:��!��v��,����VJ Þ���Aᶽ>1jc�4�!��U�1�|���6��k�!�;ή�a���1�2tW��� ��_�i����;+��`q�����C��<�2Mn�p Slr�XIEND�B`�PKb��\t��DD1templates/hathor/images/menu/icon-16-messages.pngnu�[����PNG IHDR�aIDATx�R��q~�l�6�\SCvs������m7�)۶y�l��^��\s���Z�����~�Z�N�j�� ��@��j]���y�w�����{+���\�H�U*��>�cǭTDk1"��!���1��5 d2�ہ�L���B�$DZ���|������B�L�[>2wb�����d_�"{w���/�g��+�$�K�ł��� J�"�!�\x��̍\us��ñ[/݁�-6p��B1D����NXXX���{/>FVl��pW1e�I�0�#*�c{�B@���.rΦ�&#�~0Q~�������J�6pK��Q��d2X�웛�s���_��Kc� �蛗��P1����t,x]݄��i1�bB���N�tD���~�p8�egg�� �D�f��h81�Q�<46��B2����K�Ӵp��'ډ-��ҽ{�6� �����T�i���X�����EZn��'�;C'��2Pz�U,��dv��?�d�kƊ�+IEND�B`�PKb��\������-templates/hathor/images/menu/icon-16-user.pngnu�[����PNG IHDR�aYIDATx���e9ƿ���1yX��ض�� � ��03�۶g�>�w��vm�����/�����{���l�ࣥ��9=���H��Y�iq�W�G�jD2�bz����o/��/`?)�:�{F9.D� ӫ�R)�I���S�DŽ����|��� � �'p]�s0���U�;O���i�^nV����q�3��C���B��ޗŲr�j���:鉧^z6{�����n�j&�%��a����sO����$F=a{�r�����ip�����x�6�E��Ѭل�,*j6�{��A� �"L�)�rܵs�K`%#k�ei B �D�H�&^,�u�RA�s�>�;��Z*t ��� &�ŗ>�=�[p��pdn�I(�4h��l)��Hh0�8^~u�n��w��4H(��f��ٜ�Ң�z�qY^?��w1�NJ�ί?%/_��j�5�}h��i R$�A�cQò5 �Q(���#~K�� h��2���;��5���}��f~����{�-l�=���>H~����}�=?J�:hz�H��R�5���\�J�)��T[�������IEND�B`�PKb��\�V�2templates/hathor/images/menu/icon-16-nopreview.pngnu�[����PNG IHDR��h6tRNS���7X}�IDATx�R�b�A����m4q� v۶m���ǰO&�~}�>, ŇDg6\� �;�O���7�-���={�h�Q��p���1NBl�C�v N�o�2��Ҽ2��̦][�Od6Xa�����|�_� ������脹H���o�1������'2�T?����a��;2!�09�j����h>��ggg��̖�jPo1z��IEND�B`�PKb��\WD�ߒ�2templates/hathor/images/menu/icon-16-back-user.pngnu�[����PNG IHDR�aYIDATx���I��==~~om3���b۶m'��F!����栧{m�~��������#�o�.�j��ޝ�sw�8 �T�U��N��u$e��բs�w���_`��p}&<��L�� x��KK��3�o/}��������& *�Ʋa����6n C>����o\�λ/��J������d-`�2�7��E G�8��=���>{��T��o�?}��9�����p�R�n q��QY�5d�!��wTC!�� �L��UW��w,�x�3���m�]n�� �j$�i�J�)E-����"մ�~W�����W9F ��By9x��ڢ.��bA���n����� ;�AL%������Y��7����a�n)���P�h�%x6�X4L+&6@�6��a�sxi�����K�A��ņz_�u�<����M/ɇ^N� �K�/(���������h5\A���S����h,�|x��6�!_��X�~��b�@RJ@�XB�u�6:j���[�_~%��>�@{!ŝR�Wo�+ MSv�����%��B�R� �%���Bɧ��2�__���h�IEND�B`�PKb��\�L�333templates/hathor/images/menu/icon-16-newarticle.pngnu�[����PNG IHDR�a�IDATx}�3�\q����ڶ�\TI�&�Y��OЗic���nm۶w�_��=����6el߿��u=�%r8�333�D�'�Zii�k�Mv���fCl�&��077�(,,���V���gggU� �ӹ���������z� ��i5�% ��`��Z\:yonn���r�N<^�?UUU���/&>>^B������EZZ�a�� ����Z(�����w�n����>��;���:::$��i�gTUehhH 2 <==��\�m�V ��:�� �=���d ?�:1=�!��K��+V8���P>(�(�ń{����\ �y{�~��(a��'����V�C�>@����Fkk+�=U�B6�+@�n��+�����@ZCCC G�@��2���٦B<�b�� ��>��[0===633�x�bv��p c���[fJ^�na2���eҀ �g-蛣�]�sN;�Ɉa�<�q p���ː�s��*S�8#�zIEND�B`�PKb��\�6��0templates/hathor/images/menu/icon-16-install.pngnu�[����PNG IHDR(-S�PLTEb��b��b��b��[��^��a��K��L��Y��@��U��V��f�m�u�}�#��(��-��2��7��8��;��<��>��?��?��@��B��C��D��E��H��J��L��M��N��O��P��P��Q��S��T��Z��\��]��m�����Ε���������������������������������B�o=tRNSPp�������%=a�IDAT��JA�3�ɒT���� ��/���X����w�i�H��ey�v�k�� n�>N�<��PUuX�ZU�ԇ�!� �� {����U��ҟG�2$Ю}!��;�MC����U?e���C�iH`�� vm6�]^a�Z�+����@�G|U��شIEND�B`�PKb��\��f���0templates/hathor/images/menu/icon-16-generic.pngnu�[����PNG IHDR(-S�PLTE̮s�������ˍ�Ύո{Ťc��Z��Q�Ӗȩj _غ{�dž��T�����������έj�՜���Ѳs�ɑ�Д����ȋ��H�������Äݾ}մs��Jλ�ε��ߢ��W�������͔�ޭĢ^��A�ߦ����Ɠ��������檙StRNS@��f�IDATx^��E�0Dј9̜2�/�خ��_>i&��'L�����4�[o�q]!����X�9_���P��b��/���2)-��hNd.��$Un�T�ք��3�q�̟n0BmkM{x���f4C�$}�4�P�U�)\����IEND�B`�PKb��\�6W���<templates/hathor/images/menu/icon-16-read-privatemessage.pngnu�[����PNG IHDR�a�IDATx����f��f��9�ֶm�����o�v;�m��Ӡ�m�g��L�o��{3o�M��Y �% (�뮻.Z�z��@�1��1���G}�}__�����|���?<��#7�[I��G���_��v����f���_]}}���?���@ ���o͚5'>��C�3�LӬ��C�^�~�[��s�e#CE�����lٲ�.�!�-�tٟ̒�����fO+8��c/^2 �?��-�g�e�U��`�^|. �>����7��ʢ�wt������7�D�6�>���#��U!{mU��E��Ѕ^̆���H$�$Id���$T7=�q�q�R~���?:��=�O���[�|��$����~zDz�}��,�& ��[_e8k���F�Ө��pȧ�I��ύ@��N*--ݙ��i4M#��*�t�Q�0�e&W�HLұ2�jV�Z2P���mc��b��X�\.�`�m���ia�!�Y,K�h��|{{�gB$�E��(���!�!=��Ռ��O0ւd���؊h��_7�q�B(����6J�R����b�(*���E;����۸���O>�������_~���o�W\q&��m���ī���l~���.��b 0���#� �O9�ʈ@���!i"GO�IEND�B`�PKb��\z���0templates/hathor/images/menu/icon-16-newuser.pngnu�[����PNG IHDR�a�IDATx����F�of���[۶�Զ�>���۶m۶k�7��ܦ�������.������4�[w�=�'�+��^�A�3��{�;��"���p|��[�Xv�kֶ�����O&�D�u\��2�{~i�¹ۆ����w�5 ϶���w�'�MDв�#�ݵs�,�N���v� �����z^/�5Ր�~��@8����n� ��J\9��27���"ת;PZ��I�������^����_���/�ɶ)T��~e�Q�ړ�?����t�Pg�����t�����7�/�m�`l�e�L.�n���z$ /��(��?�}�A&�^\���g�}?��f4̮-v�v(�>�<�g�&����m'r�}0>iH�6�PB�2���)�e�|�gFU�_� �(��#��페B_|�пx����<�҂oYP]�)a7�v�߀e9�Ɨ���g����%v8������\���#��G��C�_|���nɇ����N���gǽьzzcV��枍#�?9� ��i��AF{=9��n?��h��z�?�(= ��{�&����T�ꔴ�@`���H�����>�]���/��rד��1� �����$ ���}蓧�x?�zf��2�/�,�7(H�/!����ע�M!��IEND�B`�PKb��\6@���.templates/hathor/images/menu/icon-16-apply.pngnu�[����PNG IHDR�agIDATx���,Q��^Bm�v��.a�m�|o/γmk��B��Μ��U�-��n�E��8��)�+av�Aq��(�0�[)\OZ ��;m7k��I_ ��̄[����0�����#D�Aa��om��Tl�i�x�D��>�F `�M`'���v����5�Θ��N��9�����aJ#z��������ԫ�C���4���2�aa��+OzDLw/R�{s�J��.����S���02��/�1?��N�po���y^���N=2�d��jQa�>+r�F^5*�C��^ 2Zѥi$pT�yP-��f%~v�A�J:;�=�/��F�-���.5��}v�v�BA��*IEND�B`�PKb��\��$�::/templates/hathor/images/menu/icon-16-module.pngnu�[����PNG IHDR�aIDATx�RCb�A�����r��m��5�m�8��vq^��l��(�X���%�btl��X\Z��66�����,�@��@���>;0�JU�����I��/bye �G89=�����������P4�:�t���۔�P$�d*�r�� H xA�SD�bQo��/�p��pyǺ����nK�_���=���-��}=�K�#Z��'V���ԛi�B1��{ǻ��$�+�D*K���#�� �7~ Lc�IEND�B`�PKb��\B�nn,templates/hathor/images/menu/icon-16-new.pngnu�[����PNG IHDR�a5IDATx�œDq�� D����*���@�Ю0��L()A�DJ���|K��s���=><�<6���+�n �w4���q˿��྄��Y�Y\k?�TG��ل/;�+�oVH�yc�N�{wP9��oKpO��� ���I�ݓI0c�]m�k{�rϧaW}D"zb��v��f�_�a47�~H���î6��Ph��kYr�؉�>�^���,1�{���Z�� M,�V���m� M,�V�?Q���,uJ��Чv��m1�]�I2v2_"�4o��9ê y( �1Ӟ�����/���IEND�B`�PKb��\2Ƞ?rr6templates/hathor/images/menu/icon-16-help-security.pngnu�[����PNG IHDR�a9IDATx}��%g���ܝ����n��1ڰVԠ��n��u���m������r'Y�����ɉ�����@�RҊ,�_'�$�+bi�A��,��"{����Y� ����b/p����k����~*�����Js�F���UU8�������uǝ~���NJT��'���,W�f����ʇ�|��_qǭ��庫 ox��{o2����D�ߣ��ʕ��U8�*�$�|�AQXL��0�����c�cO�.�{���Ċ�Ysr9Q�X�,V, !-�G�)��2I��/}O,+,� �+ ��4ϒ˷W�w0��4��� �<���VV;^ ,��� 3�H][[��8C�@l��4�ʚ�[�=�~��8���!E]��m�.����߶Zv�q��ːA�3�w���&�~� 9I�$��_[4u4��� B ������]|��ύLO��,H�$��y��'k�+�E����o�U����.��ۂP�$a�4��N}��h��Ԅ�vk�?�� l�(<�~R�P�Id��V�0�>�?�SQx̹R�j���E;��q��#�gp��bIEND�B`�PKb��\���dd3templates/hathor/images/menu/icon-16-help-trans.pngnu�[����PNG IHDR�a+IDATx]�5�$E�o�vw����!�H�#��<"�"$����w�s>�3-,���~m��,\zo��D?���T���h��d�$M�jB�$R�K�j����~z��v���ƍ��֭�\�#%�s�&� ����\���k��mޱ��(QU�T�m���JOIFieA�v6��G(Ď*����Ma�6�Ao��Źۛ����u�{+�&t��̖5�w0���%����"��r��*t�'b'�e�Niw��E��oظ�n���n��@M�����a����b3ۏ��,iD�Ҭgx�Y��hbW=(�����UC"(ݺ$m9$�,�deC���U���;���rԮ^��VL�H�����]�YS e�s2����/��$?�ӔW)�<F_˔�(��0?Iڀ��r�����\zLj��T���$�M"4�B.��`4����)3�~d�v&s4����R=K"drfz����W)+��������z�;���.r�;#yuA^۩��mw���1u�V�� �`>L/{BvN�SF��1& �0�����T��ik��IEND�B`�PKb��\ٙ�bb/templates/hathor/images/menu/icon-16-banner.pngnu�[����PNG IHDR�a)IDATx���]k�_m+(��Wk۶m۶m۶mWk��Q��:��o<�1���~�"�����'i^R����°[�p��x��!m�\˦�o/���� .��}9�4A7��d�7��oq�s�v���-}��y����n�%t�CZ/�5��N�_���x�04��{bJ�!ad,��@?���8�]�Dl����Ι��%���Arh���!��,Րf�\I\��:��id��5ws'[3���E�� ��i9�)f&��'*A�o�Y7/�p+{�N�@3\�z�ALF�X�@JJ����7��-Ǐ�Q��6.���xOm@�.to���&�qqI����9�K���6 ���e��U!�q��=g#!�~`ў��� ��3+���7O�w�g%�q�E� ���[���q��P��vdb�ʫޖW�A@X��o X�������%���d����O�L m��@EI�w���|���f�44�?���=D��Q_P�SAi�fZv΅���z2*���jIEND�B`�PKb��\+�V��.templates/hathor/images/menu/icon-16-purge.pngnu�[����PNG IHDR�a�IDATx���%Q�7�Nv���J��k�7�gLx�m�m^dNvM�Z�۷�=;X{�~�1����Aւ�D��z�n��2L9�������0���E��I�:��ϋ�I��O���wS��FnQp�<L�� �R}�#��M1FX�#����J�r-�}n"7��Yp1�` �hr)�&_�28��|1���ҹ0'� ��|6�2�� �vC������6�:���Z����7�qջO\�� .�*#���\\pAa�;�-�t�yL�� ҍ�\�u�0����bɴ=�iX���f�/�'�>'1��5ŏ[�2aG�G[��2��m��'`z�k_]"?\�"@i�#8j]C^�N�*x?PK�U��z��Ts����h�y�A�Y�~�y�r�{�~�y�y���l�w��pSIEND�B`�PKb��\�ܣ\\/templates/hathor/images/menu/icon-16-themes.pngnu�[����PNG IHDR�a#IDATx��5BCAE�hYk�e������p������� ��;q��<�9��l�L���g-hIκ�-TJ�!�ۙdH �[i�ƹ�r˸@�6���B<4���DW2]ʜ]�{ig&w_�X�V*��T(z�E6C��\�,�%��r�L&YF��f�}�ٜ.�P*���.B�}73�.�0�"�d��V�Q�R��P�}�ju��a��.\쑸����e����C���YJ�`��b�8�q����jj1Q`�)�2�^%%�^�ڐ{� 6Ѭ�g�J�����+%m�IEND�B`�PKb��\�͂�/templates/hathor/images/menu/icon-16-config.pngnu�[����PNG IHDR�aIIDATx��pkk��?��Nj�=�m[�c�fm۶m۶m��m<3k�.�-Z�e�]N�A��&�wVص�T��|�'n]�^��B/����9p������͇�ɪ��"��X���a��X��}���o�kV�6���x]�?� �?9�l���9��G�A6����虤��Ik[�H��(b�6[�N�m����ǥv9W�J��V齧<�[�=z�� n��#�����,�k]�ر�2�)��{P$<ҳ�@�1��/Z.��sς��<�.q��1�'z���@�}$��빸B-��:� ��r�}_��t�'�v� x ,��.�+�!�־]\-$T"@\1��m�ߍm���C�4�{IIA��H��0$���{�!�/���ƥ����羶~�廒�ضwp;��yWA_!(���!��w0��O8�<��fM�#��/�o)_A_#^I��\��k�"\�N�zL��� �<����5�Q�1�����B�:%N���F��C�|�#�r&�荷��; �{,��6�<B�!ƍ���_�_�����@�]�IEND�B`�PKb��\f^88.templates/hathor/images/menu/icon-16-alert.pngnu�[����PNG IHDR�a�IDATx���\A��8)�wk+��P۶'ul�q6�m۶m���{�I͛|9{���M>��Ъ�K��ci_�����o�4m+�E�?�M��hU�8���Ei�5(�ٺiU�7+�dh&�,~ݴx�xѤ�#}ݬ���|���-���ͨ�٤8����t���Qz��FiDQv'_�x�)��q�T+3���k��|fG�p��U�&���f��u}n}����Ī�h���2����f�+�]�dl�}�(�v���"7<7��as��uCkM���e�\��<5�L�7'��� �2�z ��l�|�}���s�p(qv�m�Ŏ��l��s��uHtU�e�����Q&��FN��͑˦�av�����:�c�l��(�V�݉�X��@Yy�&>kB���.�d�����ۊ�9+B�u�LJ6���Oyi�WpI�^��WI��>�e�9�y������8��(����$L� �9y��EaplY�\�7E�ݳ�R�%+������z�E�IEND�B`�PKb��\ek))-templates/hathor/images/menu/icon-16-move.pngnu�[����PNG IHDR�a�IDATxc@���y�X�e��I�*&UÈ���%��9"�-~�h��I^$���ʱ�$y�Xkm%��O+E�^/��p��Y��-�@�-H$RR�֛��ts��_@I~�P��թ�nL�� 6HY HH/ûeb�~��O酸`�ȝ_k��$`��^D�,��\�ǯ����������@r 5@��0@��(;�ȧ��=�#v=@b 9�x,P����a��z�IEND�B`�PKb��\�J�_��1templates/hathor/images/menu/icon-16-redirect.pngnu�[����PNG IHDR�aMIDATxՒL`dzm�S ��l5�!۶���l�6���l��=S�{�?�S��� y#�4�� �A ��j!��L�i#� բq��k�V�n�x���[� ?�0Aa��yp����-�.�"o�_���U963J\8�ȏI�,�N���TR�DSD�a�U/!C��oO%��&c��k��,��/+�OOސ�8C�I��8�F��J^��c��ͩk��pD%<�c�X5�k�t�/^(�ҹ6�dx��r(##�5�ͬv�<?�{�Q<�4C_��o�m�hb�u�U�A�`��v-�?�$��Ϭ���J�Hv�8���~IEND�B`�PKb��\D�ZVV6templates/hathor/images/menu/icon-16-banner-client.pngnu�[����PNG IHDR�aIDATx͍3t-Q@_�Y}b�M�Q��.ml۶�v��u���:�'xf�f�}����.�?�x�lPF�ulE��Q��pYiw���oǰ�j�v[c)ܷ;�9*���&�y�1b-=��4���Fc�o3њ�*C��9r��m��9�g$��<�P`?���|:,���e�+�O�`�p�{�/�e���Qۉt�.m��A{S6`����|�G,��<˩�0�� ��6�l.�$1��"�D�%��`1�7�����῾���z����~�U�sܣy�H/�'co�<���IEND�B`�PKb��\�r�1templates/hathor/images/menu/icon-16-newgroup.pngnu�[����PNG IHDR�a�IDATxu���F@���ڶm۶mj��g�fm۶���v����ņ�:u*����*�MM�p���2��ʳ#z ���\��W��bH)���`z5���3��SO=�-�3V\q����$�@rֳ6 �oy��o~�Gh�0����˻m��e�s��_���J��}���M;�;�mn��O?}l>e���VY�e\y1]� �[���.O��S�2[��ѣ��`�V^�����&��/��V��8O��'_�]�{Q���dm�XO=�������y��М�joə�u�-\�BAg��I�Ri��C�^_�o��eY�Y�E|5��� Q.Ss]������R�0��Y)������q�0\וk��(k�"t%a"�����d�&n-G������g�}��� ���C�V!ްY��5�&(۬��ƣt��h|� :����փz��W巊�e�sx�؎H�7�����䪹o��`�{��>���j�^��r�C+F���O�,5�$[w0�?���ƳU�W~����n�Y���$sРA�_a��O]��恔��P:j�<�����`(�"G�u�'�x�n9�����5%��A��%X�G�ӞP���(��z�.~2߯�`��ߤ � ��b���/&/9��S�Q?��~��O�)I%u�W�w�=�����t�w� ow��>��%�IEND�B`�PKb��\�e��-templates/hathor/images/menu/icon-16-info.pngnu�[����PNG IHDR�a�IDATx��ՑQD��6� aBP A)��eff.3333�Hff���h4f��T���_pE�j(�/EˣHt<�D�S���>]� ZD��=ɗN~HC@C�7h{D4�����1� ~�����|�"Rx��<Rv�Qk>�9#���LƔ�&��y��Z)�H���_�ͻJ{�Q�%����[w�@��c��Ȱl��g��O�Q���' 7UfY)V�S�O�l��wL�N�����d�j�`���2�� �f�?sBA ��Vn�6ar6��n��J�OP�� �xN\�r�\لɔQ�a��e*���A"e��M�ֈ0�o�8N$�1�̟ܧ�9@[���Tf�:E��t"L|oR��E�k�s�&�_o��u��c�WĶL"�_�^�F mE]�2�������}D��O�#���wj#��Db'�*��$�\2�qb��N�u&��(��^m'�ꈸF"V�Q�7�S�L��3�·{��IEND�B`�PKb��\O��i��.templates/hathor/images/menu/icon-16-print.pngnu�[����PNG IHDR�a�IDATx���a+�q/�+�V*O)�***�R0ب@�H)�9��m�( �d4l�v�ܱ;[�\�٦�[91K�J�y��[���O�a`mIGҗNp��۰�_����5�nX6���9V&>89<���ȯbn� ��p@U��9`$WS��I�h\�4�Y� VWV�nT�$oL&}×�(>//b� �P)k4�Ucp�?�y~~��r���{�����w��.9�0X��մ&5��w��9 >|P��$5�� �����x���x�9^_C�,+AK�⋎"�rr��֎�=XO�c���eW\��agg���&��\�My�K�QU� Ezf��`"��up[!��(�́@^�������EQ�i:vu��$�D"@�x�7�j�vo�^nIEND�B`�PKb��\�����1templates/hathor/images/menu/icon-16-help-jrd.pngnu�[����PNG IHDR�a�IDATx}���A���o}����A�3@�kH�� �$���$8$���u���B��Kp�S�:�����Ӡ�P�����.~�w'��� �B�� � j���~��ĵYH�4a)$�rªA}ߍJ��Y�TT!l�A�w�oY�� ��A�74�*�187FN�d���)�1����A�����B�<;i�%s0a%IڽzK@�&��m�|�Aڠ!��N�?AX3��A�'|b��T`�tX 6^�q��E��)��h :_�ڃ�O4~ (�Z[� I�A.�5���C=�`{L����@�p���-���&������8X�*����+�Z��7��6�<�O�7��>2i�����@���Êm=�v�@�f����hd&��K�& ��KHc�� �Wލ�J8���#���g%�к�IEND�B`�PKb��\#��56templates/hathor/images/menu/icon-16-banner-tracks.pngnu�[����PNG IHDR�a�IDATx��p�A��Mmk�Am۶m�vl۶m۶ms���8�=3�[/�ϦM�����P�fF� ��+���=���{��{f�n��(����M$Rⴣ� ���ƺ�?]�̃Ρ�����Ў,������- �?���S/h���4}� �*���>9��ц}����Q�@��i��'S�~�����mr+ƛb�u6ix�Q�L��q%x�:��, N7����|L��Ě/bݟ�y�!�w���s[� ���S/ƙa�U.��e`��n�*⋶%3���X�b�A�������&|L�����? �1I�� ��f�E����L�I�h��齷�7m�Q���1����k��%�b]���'r*j�9�G��'�ur�����c#|��t<�cᄱ��}o�<{�q?'�Q13�ܽ�5��H'��##��)D}m`IEND�B`�PKb��\�{m$$1templates/hathor/images/menu/icon-16-calendar.pngnu�[����PNG IHDR�a�IDATx���\Q� �6c5��FPیj۶ֶm��[������I��3g�=������G�pDp����[q��<�@^ٟ���S^��C�f{� �ӌؘ�{�2L؛c��t�`j�b%8V�Ɂ��zV����F�(xA�����]�=��`��9�"�,� L�����z�4����i�� �ᙅ�2���AKKD"���h��l�N���ӌ-���{'�#�؞�CKDX�,��H�t�������f��E��/?�횄f]+�{�~Fs�#��e���x��j3b�=R!VRx���hԘp6,���sқ�>����y��lƗ΄�Q��'Qߝ >���/:3 3���^��Spԑ���kBLYN� ��^%Нwj!e�Z-/�� `�j)�L:7}p%<����{�ϑw��MȢ�T&�2a�̿��W>YzՃη����"�\sECC#������� TW����b^���䚑�����?���1���K�!�iPc�IEND�B`�PKb��\�L#��1templates/hathor/images/menu/icon-16-help-jed.pngnu�[����PNG IHDR�a�IDATx}�E��@D�&��̸��f���|�^��ff�ш��.QEL���eVV ���k ��R���m�[N2���X�`�s�zo���y)��ūa�J��B�)4��(�� ���B1���CL'50`=������`RN�'��{����K}k��g�b0o1l8�<��[�g4oT9d���E�y�O mH��~�x�k��^�� ���z�o��]#�7���?le ����![B��oa�*���p� }�FNA���cݨW(�@���9�}v�l�㫁�s� X�[w�B� t� �=m;�bxs�3�~�@�n�>=I��~��������%�&qUo���o���������/73\��f���Z�IEND�B`�PKb��\E���II2templates/hathor/images/menu/icon-16-frontpage.pngnu�[����PNG IHDR�aIDATxu��A���}�{�m�n���j[Q�2jP�1/F�g��;�j�3����O�ݙ��J�/>�<��vOE�dY6-�/_�1�l7Õ����B��$I`�&t]7v��C��\vF�1N�4'K��f��U���B8>���6�z�^�D�<݂�<\�&6�P쏱S�1��~033�}��T\\�����i��O���X�b�Ν�0\) &N��P`�G"ꁊ�nG{{;"���v ===hll?�\.�i&4d@j�D�kb^�7��+�F�*Rؙ@(�:��m�,�Ǔހ�}O_!�U�C�� ��Jn�ڃ0k����6����[�Z'~�!$�#a��<L��=MRD�Q��E �P�(C�14f�=z�d��nj�%�W�n~SW�t�sz�\L����*����8 ��~H� �I�NeԺL.�HF �����ݫ�$�;�z���Lw9����=�� ܙbX2�=l�����gw��X���cvF�L|d��U�E�myIEND�B`�PKb��\ĚD� 0templates/hathor/images/menu/icon-16-archive.pngnu�[����PNG IHDR�a�IDATx���A��g3�b�a۾�Nژu��E�ֶm�g��鷓��f��%��p��!��T�Jd�̐�&7F"�aیs�Cv� G�������z��/_�|Ӧ,�%��ݺu�]�v��\�r�3���xmٲe�a�)&����+VB�4M ���ә��(�4 2?�GGk���pC@�~���Y���� �X4�H$,�������F��6;SHm04<]���P����~���܅� b�wY�N�B���j�X�ԤK]t]�w��~�#*�?}��9�4� #�;�\˲`�&)��deqq����tÈ�b��C[[O��b��d��i*��6���a�3��/]t�Y�Bު���h���jAV=���H��M�����B2��璘a�1aT��E�3 ���^,�����?���b����U�>}�I/V� ����R�0�Bj���������/�����$IEND�B`�PKb��\���,,1templates/hathor/images/menu/icon-16-download.pngnu�[����PNG IHDR�a�IDATx�����A�_���!LB��!lc۶m۶m�fw��9c�w�_U�E�~��3U�Š��V7�j�,�n�i��]$p�H_R~d��;�l8��|ʜePƼ|P�ڼ�V�)�O����&E�6���]��`��qv�#�y���h��]XTCQz�@oQ��Ay�|� LY}��h�)8cV��ݿ�.o����%�Ô܊��&�d��[���zF��JY��;b��:|D4�$#YMw��$��� �rJs��ē�d�w�Q�s9j�׃��+|�x���Z|F3 ����T���|D4�$#YM,��>f쑂�@���w3��\8�3�M<�h#���n|}BPk�>j���_ȣF�4L.#�e��i��U@3�1�m6�[�AuC摝|Jȫ���C:ȭ@4���a��oU }�#Ϩ�/k��h�.�j�ެ*�bh�a��_#�^���*��?z��&�bX��2�z��G�WN!�$��o�ɔ���qBIEND�B`�PKb��\ �����2templates/hathor/images/menu/icon-16-links-cat.pngnu�[����PNG IHDR�a�IDATx���@F�Զm�A�6Vm#jp�m۶m۶�9ߏ�K�zfv�x�V����)�|2:G;�Z��b_���kUYȝ�Z7ڏ���>/��ꅥJ�ȶ"��*A���u,�fl>~�T`t�B��"dZ,F�% ӢI�Y�"��f�U�*��#�<���A~)��b��J�]���9p���7�<���F&H#c��|r��� ��D$d�b�!;���JH1eT��B�gU�;$v��H��!�T�TK�f�0� ! �_N�(�m�|:��B A��F%Z����|u.�O'�t,��š(���!f���p+���}]k�}D��I�� �7h:�{^2�r�/�5�Cߡ7�=�C�0_����2�>0a�V�x2��x1���S �֦�|�ٚ���U��|e�[i:�?��1_�yי �N���Y�[�?��a�s�C��0G\/M��?�Y����i�IEND�B`�PKb��\ܲ4�1templates/hathor/images/menu/icon-16-contacts.pngnu�[����PNG IHDR�a�IDATxm��.G�=��m�b�F)�m���6�m���6>���C��-��>W��ZF#&m�P��@4�#�šy9DVv ?�,�O<xw���s���Y"���߀ ~��h�XY�ѫ�Vu~s��-�C��uŒ���e��"0��%�o��k0*��h��t"� �bU�m�3�h�B #�>1�`96��@���X�~��ǎ�#�����h�z�tT)������t�㴷j��S �Y�b�ꦦ�ҒRZ�����=��W�I�g�t���<"s���&��k�ֻ�[�/#Vh|�>��AN�&@���V��x\��ۮ�F}��3�V4�a��iD([�r2�X6�����q�p�'U�����Ur2rQb#���<T���~��y�}�����F{;��Q�_����x��F�m�Q��2B|?��; �l�lX7��7��ޑ��c*�~%�����"��Z��Ж�rȆy\�a���y�����������Gf�_f<����}X�J v�M�x�8���� H��{#�Q� @�*+���(�@����}�8�F�٠oR쮟�}�#d��;�U���Z�m�EP��faQ�������3��n���p�@�'�\ј���R'�s�#��y8�]0����߆�"��y�&#W�X��p�IEND�B`�PKb��\O�<�WW;templates/hathor/images/menu/icon-16-new-privatemessage.pngnu�[����PNG IHDR�aIDATxŒ3�o�����]Ŷ�l��]� �Tq�q��lb�c���^�1s���<��h�.�k�� �ۨ|E�&��~P�(�~�C��Ǐ߭aÆ͛�jݹ~���+**j���͛7�^�n�~�6Vҽ�u�֭WZZڸQ�FJ���(���87n<�����F��R,�b��8V�=� �W�^��ʉ�P(�m���>�f�l]^^�����.m'͟�!�p�O�~Nu�"G,�a�k�r���PRR�"�� [���7px����,4MS۴i�Ȳ̲�S�Lӌ�e��{�����k� =-'x\�!AUՏA�u]�cYY��<Ϝ�.��"�봂�s����RKktys�R�g I���Ȝ6T8�*�T�p�X�<W�߿���<�]ב����?RfU�L�E*�����͆�j#4�2������k��'O^0`�2��ݻw�55�ŷo�|�#�&?�Sz�\&j��Z�����ɽG8!�}#��/^LT �y�D��(5p��LuIEND�B`�PKb��\��4"��/templates/hathor/images/menu/icon-16-search.pngnu�[����PNG IHDR�a�IDATx����#a�����RBJH )%���m+�mc����5��{��n��xoxxx<99�j�-~}}�gk-$�K�s�Z,�>���ذ�R���d)�X����q2���/�ӝa�� ���x<�����2�����B�T�E�UFD~ x ��H�H � =�ᑤ�S��ǿ�g �_|M�׀H$Ry�Q`�`)�)��ӽ&H���r�0��i�UȎ����Iԇ8=���ޞ�[շ3�L0SD��D ���r{{˜��a�q{{[�+��Nc4]����X��p~~�A����w��#u'...pxx�AL�|:���P���� GGGy��#H04x�^����8==��q(�P�@�D(/���� �xV���LIEND�B`�PKb��\�2�V��-templates/hathor/images/menu/icon-16-deny.pngnu�[����PNG IHDR�a�IDATx��3teQ���rl��jl+h�T�_߅eإ��ضm��x���Z����g�����'y�����9p�h��D?^�����?�㣗�D7^� <9� ����w���j���p����Q�}t䇼yh����'�N6��Ca��a��zp���l������ &�w�fu�!+�S�$� 0{KĜ�_���f��,`�'��/��l��1����x75�t#M6@�q�}�qy��mWפD���F� Z �$� P�qn���r�G�ʙ�)��J�� ~��_��BM��4D�rTс`��E��F��{ʙ��;C�t�]�&"W��A&�\��" ui>M}���x���(Rl�*uei�l�*Φir}�"Q߉_���n2���%IEND�B`�PKb��\������1templates/hathor/images/menu/icon-16-massmail.pngnu�[����PNG IHDR�a{IDATx���[�g�rm�^�c�Qݵ7�۸��6�<۶]�u�ٻ��;�dj������Jp���a�������W�;�����l*))�������poo/�q��rss����TTTp��|��5e���I��d����"���������B�,��aYM!����j�}hh�8 $\�(J, 9 �L&C:�F�uL�İ!�dg1�4����"����199I,���{(M�&QSS���~x�A��`�^� �Ȋ�����Q�L�e%k�w��O��*��@,��z}��� ���`Y��333Ε��T�"�gɪ� ��S�$�uq�+�(����9�YŠ��� ٢y۶QB����Ќ̀m���5��T��{�h�F<�֮dѾ3�$��o���&������_�:�.� ��:�=��;��k ^N��$��w�[�klsp�Կ(XX�8m���i�[o�5�\ɐ�O�VZꏚb~�5���-��=�K;p�$�(155u������ܪU�����N�MF�-=��rW� ��jo�}vtt��ŋ�e���Q/��R�������̙3���ψ<�0\�v��@Rp�|@���a]9�b^[�(kCa�4IEND�B`�PKb��\��C]]3templates/hathor/images/menu/icon-16-notdefault.pngnu�[����PNG IHDR�a$IDATx�S��Lm_�qͱQ�n���7��Q:g�Fζm���ח�8����M��@��Z�(Ǜx������*�8d(yp�d��9�,�H �Clal0�R8G8�j�o5���#�s��>�_6�!�a{dNd�D*��"��r#�<#���/�������XV�@D�Fz����t�vi�: �t:0��7�+M+KK�ͳ{����؇ۯ#�(����!� X�qA���J��M��z�������'��@8�9�ˏ)�dM�T.�Mr%�hT?�f#c���Q�T�K�˞_S'��2� z�zA���XE�2Z0"�>�l��_ �{_PjP���(��1�(��%9n�1���BH �B�1�������$X|�R�/�ŐP�>:;��I$��t7��B3B}$�sȩəG2�4 ��┒���V ��^��ܚ��!���%�Ŧ��&E|Al�[��Y��k��#���'�&���������ƽz�����y��K�Rdy���<���ⳋG�x��� W�]9��������XQQ�IEND�B`�PKb��\_�P���/templates/hathor/images/menu/icon-16-notice.pngnu�[����PNG IHDR�a�IDATx��%�UQ���q2��Cd���F�%����������c�F�}�ޝ�fm]� �����1k�딍�uΞs������l�-�mp�:rԮh�����[+\����8�ָ�`��`�]��x��xxy ���qU�ug��D;!l��l1���)�x(��*6���`]x̚�#.O�y~�U��Ul��EnO�<��Uy�G�E�%�"Ot�g6��A<����*>G��*,����pnaO��*�0��Oq����j.L���)'F7g�'��gz=�ȹQ�����hbʭ#s�}t.�'e�X�L�K��,�sg����_�˃���Y4�^�! �gY�!�լ���zqe�`�,���9�使3��?�UY*F�:��]C �ԗs3�K��a�X��`u�_(��N��g��lȟ��9!����X�gh��_�ɬIEND�B`�PKb��\4�JJ.templates/hathor/images/menu/icon-16-media.pngnu�[����PNG IHDR�aIDATx��5�1�{�xfff>�L��V�]y��}���N�0�13����'�VU��O�}c�]��̿"D:s�%�!P����x������%%%�������=J�!�%=z�Y(@��������Db/>�y��$��(��q���- ,�$bD�{��߿?���}�zb�t�1xKς��}��H$�����G��}D�(��X�zA�D��JW��$���hO:��,�H.~[%��b��b1�{�� �0�Lf��~�v ��#����bRJPʕ���vJee%�JK��Ո��*��Y��5,BtKK� 7��XE��B�+3���+p�466���h�gL���DΏ@���A(�����d3[<���>��!�%����n�B.�&�E5�S��X�t��XhDa����'�o]{@�.3�h��� O�cڹ�\� ���ư`���[J��w�\*�z��ܼPQQq����,���y������/��p?��>IEND�B`�PKb��\$#�d��"templates/hathor/images/j_logo.pngnu�[����PNG IHDR��=9�IDATx��P�ǟ�Ɵ��11"<@m1ɓ��{w���3"��4Fg����?�1j�?PS�D�XE��(�q�q�)��-����j�I�D�&�G�q{��L�����;s�]�ܳw��s�^�%K�,Y�dɒ%K!%o��ݯ�ޣ��w��i^F:=ȞmI�l�6���ZKz�,=��Un��:d��{�ds��ˍi3���Y�S�, [Oz� �gon�^j.��Ktƶ�q��s-/���ң�� ���D6ke��u>|YG�3���O�>���P���́m���b�2\7}�Ye�#�5ӿsh����t&�t����@���?t=���?��6��c�Z�p�9h��uH?���iveY��o�W'^�S�p��S����^a�zs�N�sVj�h,Қ����#�>P�/a�?ȿ���K"�1���!BT�y��X�p�ԩQ�B��1��E�Ƈ �P5�Q�y{F�:'{/�=^���h>VL��ܷ��t���X e�H��v%u��1R�H�����!�$���!��l�Y�DQT�0&:�1�jr+�C��e$J�s���ed2[��ѫ�D���_�p��a�e������<�%��0����Z,��r������yL�������(�S~��.��nQ��,��`��"�d���� ��(�H�.���I�EY�I�e}���p�S�m.��_D Ѱ���$%��e�˳d<�@�߇�`>��PВJ���Z���x�Ӌ�vj'��&4�k��DMoR����;��������M��1�{xx{��8Q|)�GB�� ���l��5���@H�,Q� �(c؝"�{�Z��c��B��O8�%DV��E`��X�2�����`�B�]�x@1��9�]���`�� d���|$�ˑ�ר��%0�!�zDQ9�i�Al���{�p�,K��:�����=�����=����g�&�f�2]�����L;�1�C]�LBH��m�z�#����ȥM9��#a�IK0����P���2�K�����ÿ�w���y��r:e;O�0�3�X��s?�Dw�Ȓ1yGF�f�I�!��p��3�0L~��~��p���p:�j2��tO^Y��1��ⴽ��ΫR2��Wg��ϩ}������\}b�Uf�7�T�Ϋ4�O�j<RV��Uƴ�}6O�m} @^��^ �]�e���C��$(�E�T��<�e,S�r���� d2�gE�)K�ɘ�͒F%)N�ڟF鿙�h|�,��9�����^]p��5Z�����+իwM>���T}�ϛ�����b̛~�Ɍdw�]jgY�=�bY�J���"�t &��#��$���Nuh[�h�ZH�s��M��s��!2|����W��l��+P�tG���u0F����0� � 98�>:�o_'-���Z��o��5}����6�j�''�MY�C�a?�8��(�3�Ӯ�?գ�O�ШQQv�j쾣�w$����1&s���u������[�Rm:o2e����<��3^��[�}�{I$c���C��� ��a�[A��(�=�ێ�t �o�ϛV��C�{x�@.y���Z�������-��cȀ1*�DFZn���ܚ��U�YJ���k�N��_���1o�_%�^fZX]�� P|���n6�Qk�>݃�T/�d,*yH X�v_�,S8S�n��H����K0�z5�f���r0EЇ���!�H����v� �#�r�a2�V�����1 ���~�á���O�� ~��hOg]w�E�*�_ 0��֏�d����=��H�� 2\�N3������:6*����V���5��/���#�j_���H��f#�v�������XB����D���ZBHO��G�\��k���{�!���yO�-M�� �\���;��N���'���'�^�};�n�����k��M��Λ�{OH��ų �Ǒ`��~�=1)�n�����f%���~;5�ԭ���ũ�)9���Wָ�W�Uf�zG����-9���WgD��A�od#=n��h*�[�XjN���'O���L�8�\��w����^�`Fl��DD�,Y�dɒ%K�,Y��\��`��qIEND�B`�PKb��\@H�7%%#templates/hathor/images/bg-menu.gifnu�[���GIF87a����,���;PKb��\�Y�^^(templates/hathor/images/notice-alert.pngnu�[����PNG IHDRV�g%IDATxՖ5�WE�7р������w��W�R�L�>̜�����Ff�ɝ���~k��-�{���\:��Y"_E�p�W�������Ϋ�{>��@%�y��^^sŀ#O��M&ۦɁ�z�7_���g_)�y�E`�E��l��q7��c$*O0�M͙h)=(�f��Qh[z��`�U|8Ņ��x8V����!=�*�%�;�^ց{ct�C�{N��3J�m*�5F��5َ[��=CY�5I�o����k#�K�h����8��1H�|]iq8�qq���\��\���4�Smr�8O5W�v(g0�h]�;��p�˜Nip��Ntڊ�������~箑�O��4�!�&4�I���� ���H�$�(�@LյT�����R����L�Q��h�R��"/�S_Gz4�D9�Ê��T�$+���$+�k���@9��J���S7���&E��'�c�,���I|��t_�ٺ?��2{��!ۂ϶�vb7��2ٟ`����Έ��+%���UaW����v15��!�{s���(�M!e_ؒ�)���S��� ���K�&�����'��8�Kh��*�P�<�r/�X�2A��]�<�K�s�Ԗm����0�%+F,j:bQ\��i�XP��EA5���aV@�찀yi+�,��bV�mL�Ü��2t>i��.�h�ݑ������1#f�m���cf�*�3#n��hρ�)�Gt���Ӄ�����o���[J�G��#a-�"���B:C����|_��8��~���J� ���ҙ� �i���;<�pH�X�IEND�B`�PKb��\� c�ee!templates/hathor/images/arrow.pngnu�[����PNG IHDR˝�tRNS���IDATxc���v�/��&�A�=������5�F�\�IEND�B`�PKb��\Ҽ�VV'templates/hathor/images/notice-info.pngnu�[����PNG IHDRV�gIDATx��l�v���۾�:ff^I0���IE�8f�XO8f��h̛hq;�2Cl�ߛ�Z�u��U0��_����!�77� T�I�Y?�����є�jȕ��'0S2R�Uj<��@�K_��(�g��PzB'�j� �g�&�T3>��uA��1�Z��-7����^pfK��rD�Ƹ7���d��a����F�~g��B[�E���pU��kj�G��Wq��7ԘbJu���GSֽ�W>p �P�=t�4 �x�,��ƞC�4��{j�d�P�tF�a�+���ک����3��=pw��P�d ��+g�S�neѧ[!���@[ ��֏�Q@�T�&�p�"�j��5G}y�@ܮX�8jUA 2���;)��z�t��E��&,<��#�:!�>���� D���]�f����g�'Q�^Ӕ#[�7���:)����ă��z<ގ� �E�SD�ix����<%�4����B��v��`R?��5���'X�gy��!K�=��7/; ��~��j{��-B�Ӝ=���U;G�7�A� �h������� �/=q(,�n�@ ����"�JS��=�������+�h�� ��3�,D�b�8r23U��,�縃)oȧ����B� �>�N|8�G��3��=倩+�\�0O+��.͊K���24#S�>�)���V(�x�H 4q B��Б� �b��t�(�8I'>�\UM��d>��=+�]q����<�S+7�8�"'��zqRb)�4�j,���(`4�Sa��Sve��s ݏ� ��/%tB�N2@P"�:e�ĕ��(d,�^�,���S9����������~�?5pZÀ(�'2Yn�O�p�KL�cO��<lfLx%�<�S@���g)��yo�h�aЏ�n ��p�S��/��Q "�W#S����:!�1>�1����C�����a��_R𪤪x5�~��;iB��!��&3��U����@�@��h���j�����4��l\�IEND�B`�PKb��\�� , 0templates/hathor/images/header/icon-48-alert.pngnu�[����PNG IHDR00W���IDATx�� l���e+�]�6��8Gs�Wlqn�@B�A���6���;;��1�i�e�i�M�P�椤 �I҄��hd]3�Z��w���S�.����&�I����~�{�G��?�0^z�{��ϭ�Ѹvy߹U�N�X�{l���lݸ�����OL.�Tg�9��Y��&X�12��gs��g`�s�ֵ����3����<`�x�+�%ς s��b��I��O/�cN2P5X�K�M#�WP�܈-���30P��K�)�+��JY���Z����s�خA�&�~`^��mݹ��эnKr���@ ��u��I�������� ��ն&�_~]e�1T�ý��F�/50 v�aڬ�u_����\]d�\�PL(�� *H�˵�0X��w�"T����LU>*I�SI>R���c�w��b5�K�����B�0*�:��ޥ�e��8[�L�k��3�ݚOϭ��.ہ�,`~���d������[�$���0�Sѱ�p� �ر�s��֘��᪙�8 �X�qػ�����-��;d�v���k}��lUh��dܡ�*�/M�S����Z��$8̌�K]�ґ�D@�ul ���kQ����]^3/Qh�q�j�?�j"�ۮ�;o��5�[��.��^9՞���% `^� ���k�n�H��ߢ��8?[�3�َp�yi!=��>���@i�p�<E�Pm��rn�hq�H1W Uh��7��E�<j'�fe��y�(�w�Y�x߭&RW���Ss�]��B�U��PY2nz� �ϯY� �e��;nф�D�å��w�Js&#T;��6Yt�t�ާ�p�0o��,��Q�� M����Y�IԺm3z���b2o��+��A �w�2&�p9ē��ח�ϡ�Z�=o"Q�y �B*P��c�Og�����)�F�ly�n ޥ�Z4��9h�1�M����0+�b���\+P�K �c���*F����C�I��u�I4@�C&�>&.�e8�H�s�.��$1�rO��إ4X�c�2q�7�IԲ��h7�ǬK;�z��hP� ��� c�pd�����Jb�tȸ�4z��N5�l��9��3���K3q���E�Bxz1o�v���]����1�i���<�+�а�'W���ʹ�.P�+�̛h�,��q�P��r�Z%1�CtZ$�3�/���:V�>�s>_ �M4@ݲ��69.Ҥn�4j���f N��!s��H}s�g,�����.�pͼ�`�,��wk�m��o���=��'��������m| G6~�Z���q&�]�)����ֵ;hۜS��4b��dޞ�k�]���n¡Y���+q�����y�,��q��N��,��8�'��ҡ�G�aW�H�r�%�����'�[\]�dS�W�V�>�L��tD�oلp�w�8n��j�;�8�J����p^�p��g�����q���)��س���dauX�s�����ø��zŕhv��C!�mJ5+B�o�ǷnF��=C�FSh��gKR�Z�����[Y]��]0m�ٝ���8��58lV�Q����oB���ؕ+ccGcQ�Օ�ͫ�{v�0�=��/WU��S��N=�J���y¦B��� ǫk�a�j?�[���M�}y�Q�N:�Y��No ���z2�j�ׯח/��m+�4صh� �NS�#V����go��(�,~�!�O�-�R�*G�W� ���cs��q�7UX�V� 5X V�������Ϛ��T�Q��4tx���MC+� bR#�wЪ�q2��K'���vZ�F{�0�i&?1��WY�ɕ3�/_���T�*J��� �hw(T0��oxRpȡ�Lj0-�|0?1�k+��6�֤�� z���W��fo:ڊ�k�'�v-I��y*vU`s��C���L &�����[�u�*sׯ�X.nv���v��ac�<�i4�6��L���on��B�2BIh�D"���D�NL�t~?�H&��TBE� �1��0�|��� q�3�"��"��"�0pf������לɃ&�@����۫��Y�07b|@����=<��G %_�4�O�vA�Q+��3����{��I<��QB���<NH�6�����U�sR�='�/D�&�A(�z�-�u�nLa�>�# �$��u2�!��>���O�87/ �����7�@���UIEND�B`�PKb��\��J���8templates/hathor/images/header/icon-48-newsfeeds-cat.pngnu�[����PNG IHDR00W���IDATx��mlu����`�v����LpءD`a; �(J�DoLcL|!B�M�\:��`�Ǟ�]���TAH$����j�o�F� ����J��u�]gө4�d������ݵ����o �{`�L DB����b�0&@M9�D&�I#@��b�LB>B� Œ��@� .z�R�@�qF/0��@ �H����z�qf=sqƸ�'p��Ɇ�ĕ��e�a�%��V�������� ԗL�q�Z�����M7���,К ����T(�G�d�w:���T���*$�b�G�5��,��b&B�n@����*r�����,��W�ߚ�j��m�"�ʲ�-FI�u`��¹_�b���/����z`������ԛo��P{6�� <?��nJ��!�v�.|��:����:f���r�|���?b��sL�釽�%=�X� tx�U#�-K�W���Ӄ���f���k<;�Ø�:����w��]2���O��Іn� �.��D��_f��}����x����7]�����f�B���=Ef�$�΅$����!��_����XM{^-����2�C��;�B<�" ��S_ae�7*bGbI���;=�fL�o�D@/��Ű7� �^�ְ��]_Dz�5,�ѕhA�em7U�k��I(kc%z���lڣ�\WB̡k~���H��yg#�#F�I'�P������Xᾡ�V��>��R��^�}`Y�<&%�������^����W1 U�Kw��T���Bs�1� ,9vm\�記v�v�RYOO1 ��*o>|)�O��y���e-��~��rYL�G�+ȶj��1�S�`zc�����y� H��˝�A��'ay��M`*]�g�z����RXr�gI�A5��i3f��ʦ��qc�����[�+��� ��rg���-I[c����9�����u��hH�� �N����L�o;�Qa�n���!�5��`��W�a��P���m�#���Ip�~;��;��ݒ�}<C��X&�k��Ƞ5>��=�"�·��M�ܭf�/g��[�ϩr��2��4��a�s���QXwAEzu��9����2ٵC,�1&`�q_��n�кg�k?a��Lڛ���Ps��.qK�*3�Mo`<�ƛ�g�^˫���AK&5(bQd�)�]��mc�)E��^�If̱�膓Mj�$)&��gT��r�[���ȑ�3%���BY����s�"o�J۔��朑2ӂGL2i�H�ҩ�55iAII��N�I�L��#�H���f����L%b% &mnǴMm�H�����F�K��F�L�ڱb&����F1D���Rj'�̳���x��U��q ���0G�K������[�v�{�+qO�.�'�|k���qIEND�B`�PKb��\���11templates/hathor/images/header/icon-48-module.pngnu�[����PNG IHDR00W���IDATx�Ev$G��,?�%�д�ܠ���'�v�3GЬ�t��4l��P�Wf�k4���2���̦�2��Q3}@h��������֚^$D�+��(��!{�7ͅ�7;�w��\��M�ݺs*^xaa� �M�W�5~g�i´,X�I9{".�u]��0!� 4��`(6rN�k��:<߇�y��<�}�H�|>�z�ƭ;P����9;3�-8==����(b`�!�K �x(��ܱ؎ [E����8��( ��R�� �T���H������������P�������R���(��B�?� �; �4@��Ņ���I�lLNL|P�V�@���ѣ��V�+�:��}%2������N0�}��C��y�.Z�V2[*�6�0iD����mN�36�lb�w�h.�8�y���47;7; ��k��L���V�u=�th�w݁���~� �ௐ>4������ޣC�o����[!����x|gg;{r||���H�˖m�������144� X�{�y,ۈ���\��nP����^�*�ډ �w� �*\0�!���s�4�_LF! -^UDr�gAzďP�$��DRp��r��^���Z����Ȧ��� �w<y�$�y� �\ǿB/<�9=;K���;;;��� �9??���r�8>>��AF�FD�r�����e9BDGv�>a��e�r.�rzT�դh�9����.��:�8a��\)�R�rk�s ƅ�z�{� |����_C�?��r�ɝ?J�2��� �9�̒��a� �{�\���, E�BȁC���+/cpp0^ Ӏ ҍ0�����F�F�3F!����W�EH�2UEs-�D�z�X���F�{҅ap ߩKьwuۂ���t�/�-��9�t�7�Pk�t�,��?��/���@� a58��_GIEND�B`�PKb��\0�a���0templates/hathor/images/header/icon-48-trash.pngnu�[����PNG IHDR00W��zIDATx^͙]lUY��s����mK[����L�q�O&�Px1�$���>b3J�0a��|�8�13 <#ꋏLH������@��~�~���{��˕�}9�צi�q����6'{�����[bf<�A2$�@����g4zzzR'O�<p���C���FD9!!�*�Ϗ2�sss;�A��ӧO^�z���/_>w�^�D�ZΞ=��H�U�9�u�ҥ3G�=���}���ç����%�<��/��������W�\�q�Z} @�y@����{{{��� ��)�2A���?~� tF8!"wQ��d`rrritt�N�\F.�þ}��w�F2�DE��bSSS����}pp�����()�'-�=z4322�a�R���J��Rhkk��d����Ӑ����{�ܹ7�;� ���`�gy��ؿ{���%A�}��@XG�b��?���{�N��o^0s�166��������n��o�>���f�~�:@����6-@6��mm=���]�|{�"�#U]F$@kP������e,M�a�=��h7B��Z�lv~~�d@�12Z[[ 7���;c��hd����A�� �͟𮀗����i����5�i)F* ,��EF�l̓��ri�m��+/��JD�]/tC���A&�y��e�T��n?Ƈ�,�����o����8���}� �ζ��Q0k@k|�dC�Q �`����F��̼_��}� @�m��Dy0���t�TR�m �Q+W.ؘ���Rvg{~�<�� �p�a����RB�)!R�0b}?@ !HHL"�$l���������t�aQ|2�|*8h�� {P�,�P2q#���qy����� �RZ�����(���i�� n�L;���$A a�xA��#��b�����ޯ �tu]h�ك�:��+��\<�1�ck���Gh� Y�Il�X,�1>?��SE,��_+���W7�K���z���v"�։ls*"�W5*�����# -"��0�ZD�SW�O�M%Xk�f��d��D�M��`A3��a��\�f�yx W������'ؤ��7-��~dh�&�m�:j��ҖN���6@\B���g������]g��3�#+�R@��S`���77UB�F���@6�ˇ��f]�a��&6�Y#3�M��.<oJ(6��e�����4;�s u`���h���nb��7l�ND<r�K܁X���9ȀF\B�sUB�������a�ж����]��L<���8���gWB��%�( �=`&�ed��s�B�nb�M켍��Țx���KN��Ɗ����A����!hۮM����}�m'�v��s6�ۙ{�O�d���C����n�Q0GjǷ2�G+��QH�� *D�~�@rv�b�q�f@뒎"[B��p��U&�=���gF~�#�'�Jj$�@��U�H�% D@|+s�2��:����67&&"_Ȁ��:~��%f��zF�r�kl���BFئ*��z�zl�]])�Z�����Ĥ�6!/l2��ܬ5�M���&1n��G�m�����D1�OVyZh�$�D�?��0�"��[Qɖe�-\��^�C��*(!�1��5=����B�ҝ��xx��jí̕�kJ�0���6U`Kؒ�/�:%dT���`�Ƶ���W��\z���9�4a1b�6i���2JP*�2���K�L���w�T"u���(�j�8�v}c�;����)H����0&�~�*6R�Z�}�ߛ@<�k�4 �Y{�:�E�y�5;���H�`H�IEND�B`�PKb��\9w��[[1templates/hathor/images/header/icon-48-themes.pngnu�[����PNG IHDR00`� �PLTE�����������������������������������������������������������������������ξ����������������ƶ��������������������������������������� ��)��3��s�z�m�<��B��E�����G�����M�����N�����S���T����[��c�֙�j��q��w��>��C��H��U��Y��M��^��Q��b��e�Љ��w��؇���y������{������tRNS06`ox������������V����IDATx^����0F��2sM����������(�|����ƞ/ɉ�G���w�Tq��|�� �g� ��ڃT�x��pF��U�`�Y���!%�N�}��Bxv��Bxz��Bxr��Bx�QC!<\����P��j(��5� �����d��V�4��Q�@��<x�С�>��!�nA����D�6�h�mR%�Y���V�jeYm����@C? 0t��$"��G��V��;��s �H���ֱ*q);&!b%�3C��TQ6f�֘2ݞƶ��{ �B@��>D�1`��<��C<����.��q�mU�(�UDYA4��E���{a��]�(�Hh�1�W�1�R���BVs������M]g��)�˧̯�P�e~�Bx�&�?�ۗ���P�_d�zC)�z���:�4�I�?f~���?}�WR�p҄9�4��u¥S����Z��d�IEND�B`�PKb��\�r� � 3templates/hathor/images/header/icon-48-readmess.pngnu�[����PNG IHDR00W�� tIDATx�t\���U�Ƴm��m;��W;vOԉ�6�m?o�^�5���!]��Z������>ߟ'�>�|�qww����f��D�e�&� )@RR���PTT___:��耊���'"##������*���(茛��U��-�/����dTVV���VQXV ��<:���r�s���ޠ�� �{�h�b���A"2ʰ�;?9�����[{5H/(��zgg����1@(z�d�F�%��Рǯ�&�z�;�r�Z���%�E�CXZ,�!�s��I�h{y{{#&&�6E666>���ə�6v���/�N)��+1���`C���NNN?�����>��w�2z=�755)������XJH�)��Ţ���98t?�ᅌ�fqqqpuu�&OC�A7�������gMS\�<G�t��������R�J Dvv6&���Q��������[p����#11�j��4���� BZZk��T���8I���YJ���AVV�߿�,!>>w��Ahh(N\����.�����h4 �"$$~~~�j�5�O N �8�hII �� 77�hff&�p:�y�~�(F���G e�Q(�}A`0��8e3� ��Y6� `��@zz:����Tp�0�Z��h`` 5 e�Q8��z:�2bY����DeS����mbf���ȈFDD0��H� eD���e���:��TX.~t<�vE`�v ��G��B�>S�ܯ&�q��^��oQ �`�0��{ݨ*��H��F�L���e�L�"�ZTT�z3���O�81[f���R̴S�����ܬ��#�2q"��Mݨl��Ũ"� ��$��z3�����H���x���oii�C��\K�BFU�����t ��3�,����ܼyӓ5����Wb[[[��u�/�c�F�)� ��s�]���=Ƒ�f3����+WqO�x�mmmz�:A�l���O���?���p��p�rp�r����fVƣI�%Vɰm۶� S���B5�u0$���]��*'�Ž�����D����;�֭[X�p�j�V�Ry$|�d�d�d�Og�o��%�cǎq"�%ŗ��!t�����#\��ܓon�w�o_Bҍ МZ�s��Y ؼy�Fj�Vj~,���Ą+/��S����u��t�@�v#T�6�cp���� ,�'���m�i_-����٩�N�9��Y��z��Q�}*m�PwjH��5�w� w�0$��{���Z%f�3a$�<3a�p�>0����5�Y��tM�g�l��o.��}�S��bͪ�"�v1i�s��y� ���H�.�s����<��9�j��D�F�ل���� 'j�v��˨_k8? ���S钎�o7F\�;bcc����^p¶S7��<9\��k8t��O�97I8�cⓐ��������rI��@��NT�{�R3�i�_�`�?���F�h�4�یXZ��M���=Y{g!�v�m�@�a"�7����myU�-���^?�Z�쭙��D�z�&Sӭ�ڀ� �2E��j�@is���u"F�-��ǧ���L���_@wȗ-���:�9�#�%_�}�BQ�(��AK���J��o9`���1�~��H�)�t@���<K��1��- וVd��]�s�D��� ��f"c�XT�����&�I��x�9���^��䍣�]6���^�lu_ouP���X �~����t��2�v� H���}�[��ig�C��9���C߳��y�Ge7^�a��g����&��^6Qԝ���[��]b Ry|�����d�}$�͵�u���G�a���Vڀ�k�~~��\Gt��%E��q�6� �E� �Gƀ�D|`���#@;c�p���MyTky�ك����J�j�c����D�����(��h������36%ʎxߜ��<��A�`�p�Z�*�>����U5q�1}B��9H���`#�� h�o�&��V���j�x��#n�h��e ~��z�C5q�6+Eˉ��<;� �MA*l����c�rs�N_oIz�x��'���k���l�����چ#��1�|v�nk�$:M������<5� i+�@j�e3`+�Y�v�V�$i�x���|���s����� x�{�z����������/����a�<��2�Ǭ-�o�:�����"k�H�x������)<2x��g�,�.��P���_��6M�)*�f�7�j!����ٺ�� �gj�^$\��?>o����ĕ��ϡi���v�j�6j��ݿ;]|MJ�� ߷��W�����3v0AM��ŝS�����e�oCs%�x�@-�4M��!��un�AM溿��0w�~c+IEND�B`�PKb��\��회�3templates/hathor/images/header/icon-48-language.pngnu�[����PNG IHDR00W��SIDATx��TTW�W��FQcI�&FטD�1��$�]��&�˚h�]cAMb��h�`oAziCW C�>0�03������<8�ț�d�'������7o��w� �� ,U��);�j���U��(�["R5&R�-+#���S�O�xn�]1�_g�?1�(�̔�=N}�U ��EȐ����o}L���73�0�t��-Յ��6Qj�&�����R��i_B�7�_5� Pa�2L�t�����X�ĖX�������, R��ZYB\U�=���w��h�bn�.+Õu4g����)�.��E0����#��M�H/�G��'V`Ux)vǫp�Q��*�]���z�����W�OY�gBFU7)��̻Q<�&LA-,'k#K�U�ҚFJPaU���Z4CX��,��R�v|\�õ7�(��bV��~�B�C)�#k�K��U�oc�v�OJ��]�C��7t�و��J9Z�m�)-�m��B�%���Mt �%��ڿt�ᒦƖ�쾣��(98@�� J�(�x�*�MX%*fsu��+�|>��r_���e�S��y������ �"QV1��jj���ROT�P�{cK���g|&CNy:�c>�as���'��/�ܶ�f{�X�W��㕇/A�XT�]��C���A�7%�.�����J-���2�(�}Bs5���gc��W>RTȯ���2�����H� �r�1��w�"v��P�����>qO�� H�t7ja��` � �p�_�,�c��b�5r ��[��~��P$����2�3.�*ܗUs�+���-��lË�پ20�5k��{v��>��/���6���� Mh�@l1f�ea�@�hf�e��q�N1�B����C�;��l]kՃC�e5 �sK�]12�V"�a����Dq�^S�g[yfOcehd��w���Y�=ED�3\���Vl�;F�9�Y���5�љ˾#R5��bX�&b�m7gkd�'E#A���X�fjf�d�S\����rA�i�\�e-��)�t� 1Y6>�zמ㖉�c��!�]S�hQt���Oܟ��XAwH�B��o}���L���Y��g�E�z쎒p�'9�Y���Ȣ���$��NwJ�l�t�)D �iQ#�2�,n�~Y����ī)`P��ЧU-���w�<,������SV�Ȃ����K`� ���2��h��r-$t�oѡ����s< �rJ}8�r*����a���:��S|Hk7��`KX.�#�R��ȫ�����c9�K+[�&�gb_t|Ҕ�~� y�K |t�q�����y0D *v�;�s1�Z2[ks�SD'�XV�s��\��4h��#V`�S �$�^�3�1�jR��������|�F��zI�m�VQ6��h��K��_�i�?�1 ?�.@����N%=F��h1�)�6p6��/g�»Ħ�L�+�Й�����]��ȧ��T`c`&>�t�ݸOj �j�Ǭ_�;���o���� �B[%�4pM*F�Z���O.��W�}Y1�56�%I���g���[ᝊ���b�l����O�6�u2�~%�b9������#��6 �t���Ļ�qH/�D[�/��,%IՐWj��#k�Ũ�o�̫�l���7��BgL8�L���ѹ����l>����8\�'���S.&�����c��x�>��3�,��W2���%Чzz�V�$���>�r �q>�O�� ��� ���o���+w�/,���5��E��j�b�V�0�BWwʅ�lA#� `ִy�)�8���b�.��d�=�.Bp�2�H���UZ}�TT⃟b�u�/ܹ(h`�����F����~$�TM8eU���J�e���E�S�8��������fL;˭sD4U��^=��}���Igc�Q���1�> ���A��F�Π'h����2�=*�� ����^�`L�"`([��,�����q!\`���z�X^��2zې�i��n��S��( �`���O���R�!�I��4�X]�՛g���b�;�W�4МQ�����t�N�#ac"!_�ΔD�ӄ"�yf��jg@][O�osc��c��o��m^���˧�"��|:�]�����1�L�U��1BR��Q���)��� ��p�v�:���o��R����(�{ǂaH�i��Q��� #���ލö{-�!�ŷn&�a����d��x=1����q�x�X���!J�b�>?�o�n{��M�� �����o������3�h�Kb�m�`�3t�;f����wx�(`��RF�W_��ɳ�&g��5L�%�כ�u2��gݕ��~h��'ыa���0�G�m��,&����{t'��n�g�}�|��2����_�g� A��g � S��h�3�3�ot*��-��p �"S��.���������2[y��^oL��z�YM��q[#�:lބOԇx��OX�^?���� � �Z�u`���_��a�{<��}m��Y��do<w㻔��j�5��FLښ4�O4��e�ă��!=����ьU�W��3_���d�Ut7X4�~�f_�:f4m�,�K�k�k��M�F]0������|��İ_�sܔ�{Y�\`��ɓ�k.%����6^s��#��b���4��^�/�9vҘ_|����jB׀a�k@�b�͙ >��t`��h����!� ���cԏ�ݛ0�{x�����s`ƒ�f��I�kC�_B�\}��|M�gm^Ȁ�k���v��[��1�1fuu_������7�g�M�:��)ʣ��r"IEND�B`�PKb��\��6�1templates/hathor/images/header/icon-48-cpanel.pngnu�[����PNG IHDR00`� �nPLTE������k����`v�����������s��Jc|Vp�@[xc{�������k��Rk���놛�������A[u�������Li������卜�j~�t�����������ׯ��[r������ȝ��������p�����������Ca~r��������������9Ur�����॰�Zs�������}�����������c}����������dy�����Ro������έ�����z�������͇����ݧ�μ�ԓ�������ޑ��{�����|��������������]y�Wn����Yv�<Xs�����<Zy����5Rn���w����Þ�����Ut�Gf������፦���ù�ݭ�ֵ��,�J�tRNS@��f�IDATx^��U��6�a�����L�����L�����lz2͙^��q.�2#��u�)h4�������\�r��ȫ@Ñ$��.�,I���*���ˊ�JE���� v��1�r�!VEp;�(�1+ÏI�ō�j���C�x(�]A)Z�rQ�۪[&�j4�KA#��w����0�[m�� ڟ5��>�V�N�oF;(��� �l>����Ϊۤ���{^Ex�v!H(X*�zw�c65_��t�3����#5�� ����PbsP�,I�x���L9���r:dZO+ǽS�h�6�a� ����,�&�]1/���m��]wwj� �o��V�>bX=$�(�U���6�g��ڼgA����힟'��鄝9��`�nh�q>���v����b��3�!!KQ�]�W��p���C�����њ�b�?���P��d�@��k�O�b���;��sv�q��- {���)��Dy�C+ MW���w��t���x8Z8��Ԑ���@� �:�gGn�A˦$%�-�b0h�Nf�ùY����p�Y�_�4���I�^�;�٪���!���<�DWh�N�A��͖ �#�]��sT\�m]������(;i&]����b4"R�ժ`Y/�9������� 0���K��y� ��_!���={ܗQ�%��R�x's��w����%ţ]��Q+Y�'4��£�:��[ѿ}�j�J��^�1{�lZ�� ˥I�O?O��)�V�~~kEz�@�� x� �R`icTL�_���-9E�7�N���~�i@�Wմ��?[,�/��V�<�8��F�3�`���ٮ)�h �7.��'��+ӛEQ[�#�*Zs�0�ϕ�L�~�l6��n��7�Z�=>�ܴ��>1s��m��|�T@M��JQӝ@���h�6,d6���mi�t�طs����9��f1��IEND�B`�PKb��\3�r�2templates/hathor/images/header/icon-48-article.pngnu�[����PNG IHDR00W���IDATxݙE�K�SК7fff��23�|�{,��g�q�����ό��3�n��b�:j�V�֘�ꮪn����U�㐔6� �=Z��Jix�ҥK�N&�N&����8^ccc����~��hW��l�zg�P����~�v�ڟ�eR=oG� ���z�� y�lllLm�3�So>s��7-Zx�u�#��C�����i���9P�-OtG"�VM؊�>�ɲ٬S�f�@��PH�j�E"\^��x�Ν���!��W�\��C!<��4r���ӧ/(hU>���@^=�)�?444lH�tA)X^����V�:{����"ƫ�@�'���r�,cr��U�xN߃��exh7����7��R�_��W�N�:5���s�wnߖ��qY�r��tw��,^�DZ[ZD�Pr�� �Xp��A�7�V��Z�K!�F���%������]�=T"J��v���V�C��Џ��3�k�סru�� �i:���V���7l��Wb�.iQ���/���aɨ�G�,\�HRɤ�X���C�R��@V=������'O�@��9O�'hm;~�D�ː�m�����k��I�ԭ[��>|H��2S���Լǚ����$Ui"C]���}��j�yX̉��ǐ7��"@�Lݼy��h4zT,�ژ��f\��A���ZP�~�@6��s�8sи���i�e��uEV���?����w�~����R��b3����[��1D��>��0��?���|��_��3��\E��p5�4 ���(^VT5)��~����<}��O�3���o��k�n�4�U0�i�ڵkh{��\f���녰�֭�"��8�i��3��`n�_�<�u�E�b�������v�S雸A}����b:Q �Xq ���fx� �A�1���%�{�27�����9�~�7���/|�|#r�`y��_Ё}�Ei�2�h68~%�#���7$S)�R@��k�L���u�zU}�\��#A���N��O��@�L��m�3&t��f 4״�l��Ƙ9b�H�f�E}̤�y>���#��|�Ϳ}�K_�*�vޝ;sƬ.��Ŷ+XF� ������9��k5"̅-;5ϱ8`ԑ���+d�ڵ�2�U8UaN�q�ລ�98ԙ�ր8;4`�-�����\���:::��4-d��5x��E���w��ƾ����i[l�]>3s���&��2`�cf53�g����e��@�ʍ�����Du��'=H���n��qM�U''&f��פ��Y �{ �^!k֬��o��"��|��S� ���;p@x��@-J M��ٷov�mj��˖ �s�X�cHM�t�"�0�+xuD@�GlC1�< �30��� 5��t�,iG a�6����6��?��\ 60?���W_P̈́c��5"+t� R~q2�I�)R"ѡ���#���P��������N���^��ZM�:t�H���K�.5`,uչ1�V�raƸ�����1����j��>����I�`)���WAeKEKA�Ze�or�kltL��ux�*<m,Ɗ����SSY���۵���|�����+mz]���r����c�5���x�ƍ''@تRٴU�l����f<���i�;��.�#�W\|rR&�k!P��BS�D���Ӥ�@��P������k�����kH!�+ �pk���n|�5a����gS�|O hok�}c�D�QR�V��� ��W�ʶsDp��(~vb�o�t2*`����[����Y����<�c�Q�A��k���Xش�k�� �*H��\�IT���X�����L��p�#���`9'U2ס1��\1����6��[����2�����c�Y��֯� ����)�q�)@X���r������}��}�T���:�1IEND�B`�PKb��\4︓AA/templates/hathor/images/header/icon-48-edit.pngnu�[����PNG IHDR00W��IDATx��lY�+N�c�͛l��ض_�w���0����c۶m��ڬ�?wu��E'_��:��ܦ���_��m�e�"�S��g�A��C�]s�^�PNe{�c�ɪC��#��c�p�Ԣ����Ț�w��f�6��=����L��&��N2�v�/Xi~uD�BF���P��-PX�\�پD��q��c.,7��R,��@/f`fb6v`�@�Z�{� ��:��6����ي �Ub^;�; J���%a]���]�1��;}����������M Z�X�"�w�����OT��rI �9����;��H�[�@>��%�]��7Q�c�}e<������^`����ͫ�;�:�S,+qdYerl0Y%Zb�}��<���s����ڪ\`43�_ʪ�Ns���E ��zP�!���c�}%����}�����\M�r��4�Yo�g�����8*X��1V��S���wq�[&&x����#3���A=+�$���d�B�ٴȔ{���h�SS���goo/7;�|o����I -�3�`6#��ZΟu��.��Z�&�{�Vی֫�d�_HAKd�]��9F�<G�a)c�s1w��t�'�+ty��3Ly��&���Ș���2g��(*U�A�'����t��/� :NpHAK�M�KdJ�� ��د�Oe��X�?��c_��o-�i��&���H�B!#F���(n��G2|!�T�HAK$O2�ɑa�(��}��D Z"i\�&1\�oh��pgC���H3/�F��?�A>���N��%���7E#��|����<�HAK\6o�F�+4��#Dq"-���8ŏ�Ġi���"�D}T�pHAK|4`�k�,1 �%��&ݎ��>�hHAK|�s�>�c����|*o���g}O�?Ǐ\��6z�0��&���x��6z�Cn<���8��z�<ڙ������R��ؐ0hFqHAK�����JӇ�,�/�Jx�+�{�qk�ۼY�� ���8�Ni�M�[G�60]�fz�^#�/���m���̥�gy���?ˏ|����q]�Ni�M����飖�h+�;�(Wl��3�w�bg�j۶m��D�T�<���߹�{��G�{{���n�����_��� e��XR�i�Gڬ��iY�d݃���'2�c4J�W�>���x�� ��~���t�벳�8Fd.8��"�&*�ݕ��>B_Z�Qko���� �9�ུ뢲1Qm��F�D|?�- � o^��l*�l>���E�u�3D��G��8Hd(|\�Ӽ6Des���"�n�mD��2F�tP{�!V�Rlj4��n�y�����l���G��7��j�i�<,��LT�F����nʈ3x�QK�0/�-���K�7�tH�)"�W�Z�!(�rl��LcڔQ�"D5�u�>��;ߊ��[�<�� �У C�awt�zX/�)�3*��5�<��A�W1�D\;�i��ggN���c�[�Q�mb��%��}��:���o�>���s���Lc����`�5�m������IR���o�:�N�"A�!�k�DH3��s� ��N�,���|��3w\r��,1M�}&�2��S�F�z~5`Ȁ>]�4�S!�{L��O$8$O�#&�i��2Q�)8�E��iҦK�>���Т�S]��+�,�&N�0!��Q�$�f�U���K�x�W���^x�k�8��ß�}v�b��!M�� a"�H�b�if~�)��f�EV�`�M�Ya����S���kUIEND�B`�PKb��\+����7templates/hathor/images/header/icon-48-user-profile.pngnu�[����PNG IHDR00W��hIDATx�p#����I�A�c���a�6�� B��fN1���|�=���|�[�5�f��E`W�䑥Q����=����/�(�\�c(/�(�'�i������"#�~p��Jx/� ��PJ����X+M!K��$�� \���X[@����i<�p��nC�H �Bh@����&D>ߏ��[I�ȗ@�O����Ii�0"DV��L]�5�VA��x8Y����Q*�b#���e��\���0�C����T�%ゲ�h�!h-���Uwq��#`"p\.xl�M��GIy��A)�@5$4�>�3��|3]�u�r��`��U�Jd������W7���/"�Ͱ�L������d�E+�8 ���(Y0 F� ���.{�[��)��cٴ�2B�ILj��'y�]�4J; �߸�8��Q�u5���˒ [�u;�K��2?U_8?�r�RhV�D���'�*:�fz�p}��8)�aBa�f>�[&:�"���I)��4a-l�c��"����S��1W7��Zc+.|��Dmld^�� =!����������е�4q�Z�v�V!�d}��bm�����V�!#���;�x�Kڛ�y?#��d6���B�֚��|v��(�5,T#�0̺om�㇐?b �[��wR�n>�V�fQ X�B!΄�{����z�s&�"#��U�� ��!�/ J��1�jJF��I`CL��&<�RhH�5T�<�2��j�ץ]i�, JPV!V&r�cե}�E �� 2`%�n�`v7������8 �C.;@q�>>��).�Z��A;�J5<W4�3\�2�|�}��(�9g�"K�Ur�[��kN`♧Љ �5�sÐ" ���&��8{�)d%/�B]=�����6N�cX�7�t���T�D(�U[�)$�o�����`����5Y&���vriL�lm���4�w'��56�A�ì��!�0!y�h������Ol ���(�z8D7/{�Z� P�%�G���Kb���2F�i^�7�����1�)����~�C���vz:˾�&Ƅ�y&�s:�\x�}�Q BrT�,XݼLL����#�q�_��1}����ym��ִ&Q����3����ǷP�z0�_|�0V������X�O�hQH��1��3V��!3H_��("�Z�uo��fe8KiA"� >��5~p||��An-؈~P�a��@��bn �o C��g�~A�v&;� Hr�RXLJJ��b�����+�D�LDW���t@���h��' �"�>�Z$��1V �W�Jy"��R��ҕ�<���g��0rt_�q�B|��� 1�N�M��ܔMy�0�a��.���i�+����5��\ˀr �ק Hg�(U�`ÛV�J�D��-���5,�5$�H�La�d��g�v �c�a��c�߉5t#30@�F*��|g�������Ki����(�����7#�ݘ~b�>��H�|��5���kV��T�ɫX���yI�P�ߏ�1q��Ǐް��^����?��x53��Kщ�� �03{����[Qf}�4;5��Q.iLeD`�T���x� ������{6�v�ѱ ��b`h73T/~R+Qj=]P|�b�b��Rr}638�f�P�"j3HX��@B������r�O�ׯKk��3�dG�(J3��a���w?�#zB�؍i�ϧG�j� �F�beI���,�zֵv � ��]���A'�y�#�#6�����2�9�t�&��0�b�E�����vю��g���R ��T�6b }���o�1���[�Ӄ��8>K+��7��T֨��T@�M�����_�o$* �^�Ԅ��N]�qAipR415�Z� �je ��B�I�����/~@+����e(�b<�(5^י�!r��(���O����Lv�z����.�[�t�I/]��kgy� ��@�(��j��! x���xu]W��ę�e`�[x@Rm;����b��:�����Ҁ�K&��&YR�}�@��v�k�le���T���߶=G�5u����}��.P �߾����y�¿��P5!9�IEND�B`�PKb��\s��L��1templates/hathor/images/header/icon-48-plugin.pngnu�[����PNG IHDR00W��kIDATx�혋oS����^;![�uݼN��TU���J�ںJc���[�nhS�N �B���%�a ����$��(�&!�?��k��s�FWN�qB�H=�G�Ϲ?�s~��;���臘D446ꛛ�M'��L<�g��������҂��a�##�X~�ϝ����8k��6�!���4cr8��!tb�!V���TVT~23�1�N�A�m.���̱�WWW�jjj�fD��)0T��A8��p8����5̬| Q��u5�G��5$�g�|1��̽uu������oc�o:^�d:�=&o.��������������\�%`]��w���[{��c�o<t�t������;[C�����qS$�h���i�D�� � ;u�T�F,�f�ł˗/#����������s���'��!��ثu�z���u�8����I��\p����i}Z�i��.�]���lUz�}�1OF������b��')p.�{q�U��Z�?���.�c�u)՚c�߲y3m�m�h卡3����<�5p&���'��]F8�$��\ ���ad�C�Zs,%Q�>�6���?��b"��|/݅��X��}O�&J�ZFhN��;�\[�"}��@c~�ݵ���'�:�5t��P��~,�j���C��ަ Cc�ڶd��;��Ez��e�S(��5f� �G�'�����$��H��`�b�c��$x̚0�I��c���������Z٢���C���1C�9aB�_���T-aߑ _}2mMq�K��J�'��"t�M�O���ku��T�+�ߔ��k�nL�����N�wo �[5a|4��I��� Cci�p����|m��=����R^oCb�?��Ws$�=����R�[K�fm��X� |9�Gc�;���x��=�:�d�V!?%��%=��i�#!iŁ�|M��T�S� #����[�04�����83^˯Лš#�u�6p�=)%t'�;7����ۉDF���nfe�0��=T,N�~��0��a���v��DY�66O]����*���8��;��$<$G��4<�>���v�ų�R��wQ'��`�h��u�� �̾&-�]K�w�+�mCɄ�# p5$c����J-V�H�Ł}��� �1+�(��$��X�6�/�J�^y_3��u-Л ����&*��۩�H��-��"qWj�S!�?��V�Q W�`� BC �%�-�jcv-#�������;K�?�.\�S��[Y�s(c�Lgy$�-�b��4v�wg�*�� �Wj�o��\�E��N,� ���W�_Y/�ĭ��;�'�oW+��t�~�w���Z8�b"ptX��gQ������_r�hK����M8��,�Y�����Soc�B���.L���t���c�����H\�Z����8*��ч�6��ܩ��[�d��Z� >Kt�o�Bmb�7r�љ5]+�0T�����Ϲ����ܡ2Pgi�Ydy����n��?�?�&�� ��K��ҧ��$ �����|�1�Um�R�|�e���T֨�;��.��H��7�S�_�g.}����0����B��p+�'�}�&[�|}�$/4�-����4��;9:���g�s�<�>�1J2��X>x8����K�aݵ)�|]�Ԙ�,5`����2ng��]Y��^����:�`1��{,��OI�5����7e�?��VI�]jx���E�̫p��+t��s�`]���E�R�Y,FL܄���|�%B�Zz�1�Wh$y=)���C��|��=�;����V�#���vJ@o9���ŶeS+9��$��k�j�`�~�V������u{����ù;w3�'¯=���^ö��ҙ�-�`-�N|�Z�U�7������0���X��E8�e�Y�HۆV>��Ӄn��z��,�L��7���e���m�P��H�D��p�攫@ۦ5���O"OH�ֻ�1�d2����<U�P��.�v#���� ����w���R�6�J�'�8P�̦C��ҵ�AK�1:yeP�1�P���R~&����+����| m�$?�A����$m�O7�m�q�1�G%IEND�B`�PKb��\�zH���1templates/hathor/images/header/icon-48-static.pngnu�[����PNG IHDR00`� ��PLTE��������̵�������씔��������٪����������˜�ϥ��X����Д����R�Nj�ԗ����ծ����������Ț���������ťd�����Z���ίp��K�ˎ��c�Å������ۣ����֛�۟ѳt�����ZԵv�˭���۽~ɪi̬l��羾�����ě��͏���ŕǮ{����������f�˓�ؤ�ͤ�ۦ������]]]j}~zþ��״�ܽzzz��u����{���ػ|ƪr����Ͳ�۩���~f7llk��֥���Κ���ħp�Ӥ����؝m���k:<n�¥kbpnttt�Cջ��Ի��a���о��š�Яǿ�����ʨ̶�mX.]v��Ƣ������8f}���u��ɸ�=q����{lSfffOW[iU/�����Hy�̵�δ|��ψz[���<��nz�&SdHegv����s$Wk��l���|������i���_��M��A���q?JjlW�Ğ��ƽ����lbLH��;agtpf_vx��J�x`Joq\su���ø����w_3�ŌPljZoo8iw���Ai}n��ex�dz|{}���K���]uwsrhNl}o\<���p��^aR���ֵ�Sf`���C��t}��ʗ�����˖~Q���6��ywsbhjxm[���x������κXqm?q�crrMMMs\1־���~�����G"[t��p�߾nw~�zlmeT��ѣ��ztf{c5���w1�otRNS@��f�IDATx^��S��H��M�شm�ضmsl۶m۶�O1���+�tf�n��z��}�̉XU^n��+��R~e���FG0�g��������922<::ZSS���dr�l��>���s�5����P~���pM~ns�T���슮��;6��~ߴBpsO�����G������@����[�͗m=2�,h�nhhٲ��i����p���i�ժ�{�y���-X�]/O������Y�)�� �N�3��3p4�O��L���u@aj6^R��7cr�а�g�5OQ��У6�����!Q����Ȣ"EQ*0�j��+|Xb� � @@�eE�$N�fP�&m6j��0��(}�����6[L�ր��vRc�v�� Ȅ��� &!� 7���9�9;hBK��1�;\.�^;�o��5H$�{nB29W��#x� ��f�R2~<a0�¢V46w���dY�jGe��}����(�)Mq����� �����0��(�N_�0�:�q��L�#�O~��D&���Y����f�,UUU��2��_����,��!5���p�$4�K �Lpz)`8�����.�|���Md�7(p~$|�8zM��o(� �)`�Լ7�$��?��P�,.�W������i�^w�J<��M�P��U�T�ԃ~#N "�P&s-}K=C`�3�p�W�_�wd'ϵ� ��P�ѩ�%������/<~�"�d�QᾍQc�)_�0�ͻi֯����腗�x��L��4γqB��OO~�}��y�E�֮�����������d��,���o\<q��/=�i��]�ҽ��[\F�� �{�.+Z|I�`1�]�}��������%m���xO��j��bnM�o�a6&(x��Zܟxֶ6�?>x�����IEND�B`�PKb��\g����3templates/hathor/images/header/icon-48-redirect.pngnu�[����PNG IHDR00W��MIDATx�C�&I�Ƕ�6��Z�5ƶm�6���6Ns\��|��3���q�U��+��AD��n��� ���ǡ/z�x���d��y�*k�c59զ�:��+I��(�or5YH���g��I#��5絺{b��9���g�����Z@<1k/���t@e�+S<6s��9h�0~z�χ�ic�����*˕Mۡ5�=�B�B��Q� �7�s�j�8<O�%��*���[� ��w#=1c�Q� ���cK��D�U������U�"lV�K®1�YA��{!·鱆��ƻ�N�q�����\sU�j�m%�bå�44��m%�sPϵj��~�(ap��J|g�V����!,�7<�qN%ܪU������-���6�S �k_�����F�����z�a�E��>��z�ZuY��3�>Ѽ�R5��& Zt^f��NB�.�@�F�꺒B�EUj�q �Ou���;,Ch�aI�I���G�� D�PK�Ѻ����O����w��~Z(M����A�~5H�+j��|1�y(Փ�i����y�l���ws�ᷳ�s�³�>��� �����mo0Cx��N�t-��"���|��|�&��Z�]�5�G�B=���@g���)��(�n ܆?&Z��q���o+NT�/.<Jу��!\�OU�5#��.��0������y(r�V�О/�od�F�KU#���~W̐le�zZԌ�Po'�j�;q�74'`Ո�'CX��V�6�M�&ԍ�ޗ�_t��G� ��X5��b�`K���q�����e$jG������"<VtS3.�^��5`��Lǹ�9D�XlPm���c� .|�� ��a}6X�����Z�L�Z��"����բ�,Չ��!ڠ������A=V[ д�R��������J�;/7��_�qxB�յ� �9��M�/�>�ѩ���T��G�1�u1�5���ﰿ����F�� F�\t���sb�I�j&�5��׳�b���az !�D����e0���Aa�+�U�/�Usԭ�IEND�B`�PKb��\�)͂� � 7templates/hathor/images/header/icon-48-article-edit.pngnu�[����PNG IHDR00W�� cIDATxݙst,��/���ٶm۶m۶�O]D3N43�5�m�*�W��>�:N�qq���t��L�ާ�Nu��.㨅N^a����@�/ܡ�����p�]����R��.++{�o��+��T�����h���C9� sw���;)�x�\E���"F9�U�4���)��>����D:�l��F(JT��!��������,KKK���+r5 ���|�N�x�������H �f�U�4��ҋ/ ����kj��dz��"�.�������^3H�G=���ꪀ��Q��˻f���+^=888���&ccc���/W|��˺��]U�C/7#@w�+�y݉ `p���'~��������u��2=5��Z_����1Ü�uV �Co�����I@gG����J��ǁ�LI���k����\���B�9��w�2S�[��� 9s���d=7�9H�>�9��$�=�ufιH]M�K�����S����gP���͎Y����!̊ f����V����ሯ�kY�$sss��R~/P�]�㠥x����"@z�}Ÿ|P ?99)LJJ������EO~�s(��=�O�Қ������>q7��ㅅ�S��q���u`�456����)�ho��ّ|cQ��#@Z�����y�3����D����r���� 4��|ݡ�q�C0+#�s1 �=��^|��U�+�c��+ z���F���Y:5\�n�I ��Ǯ7>�ُ���TN��7������]����.8cb��t}~~�.��,�0�u?�;����S����+�W�¨��R'!q� �p�cf�gU�<O�.�f>//+�ifV��r,��ęs��&'K��_C�J[���v�ѿ���}��]O���?��ș�5D�5��!��̐D�9&�9����<�t����==2�U�EX��6�Emm�XY)Y�����~��V5:�[5z��Nw&+ǐ"V �b�� QH��� ����6|YVK�*������j���Z��<@����$ݭ�9��8�9 T���>=n�D�9.��}))251�JK妨(IKM���/�����7�����O~�o��Eބ�}/��3�L�1;��ϝ;G,۳<��4���A}��U�Xڋ�g��<E���Er��m���nSNϷ6�}ǽ���8m��U�Y\�i\�e��n��6u����Jp���U8.+)��,!GJR>���z�9wD�b�$����߈�x2�ӓ�<�i@���P5i��6�n�(ٰ&fC}� �JC�X7�� ��Ȯ�o�@$�7�#������B���6�\Zᭆ 6���Qa�����x����Β�K�%������]�\�U� 4\\�EK.�x��:jylt4��lE@*�Dҡ������K>�FnQ��O�k&��6�FϪ�f�5�m�����W�i}��.��5����ڗ|e���K(���)�� H>'Z[Z��������ϗt-��ޝ���$/�\(�~z_����6F~��^����d� n\!T@(q܆4� ��`^��ĕ���q�ߗ|c�wx+ȊA��T!�2�HJLt/���q�" � � G�;�����:���oS~��!l�{��Ĥ$$$�`�7���Ҳ���Qy��折�K��gu�/H["h5��[q�8��v�T�b���tvvJm��)y����ߢ)�|C0��i_�H��9��x��)��2�00��õ��|���$����X�Ӷ��}S��ۅ��) T��9�}��C����e0o����T1H�u�4-�/��d'}W��k���~�ݚ]�v���6� �>M���ld�� ��b�h�nh7��;6y��L�G���S�%-Z�)��&��L�s6P~�[�����{{���M8+��_����M��}�"�)I�����q�Z����6�[6i�Ä��:݁�����{{�a0 iM:gŠ;�<x�{�+I��%%�a���T��C#��Յ<�j}�Q��V��DE���� ���~�;�vuY1iڊ� ң��&�q�7�����oٵ b����ߢ �����L����� �X�~�t�d���?��ry� �����2I�ˈ�%M/Ľ�&f�֛��p�&�������]VJߒ���ː���Deb�W��evU\��Y5=� �6٦�b�#70���^�A?��{*�����c���?��}��y�J��%���̓#$5�ܭ�'Iq�����\�R|M�+��*>�x���[�}7���<�� ⅊�)b=�?��c���N������nV�PU\?��x�x ��IEND�B`�PKb��\y���2templates/hathor/images/header/icon-48-archive.pngnu�[����PNG IHDR00W���IDATxݚl$���e4��13���1+La�Df��|��l��̻�Δ�����3��J5�}�U�UK C�\kc<�� _;q�ԆT"~~ժ��wl��6�A������@�����L&233b�x���^������:������#�����=�D"v"��?x�`�m����j! �J)u�x����'?�I%�p���|�K_�Ξ=����ƻ�0���yBB@H�@->p�}����L}��-�f�����o�b``�(��RQ ���ߺ|����e�r��Z|�U�|��((EMM �Ν�+&''@����(�8 ˔R�˺�_L��9�?¼eq�7��҂W���F�o�� T �B��A]}=�ϞCcf�⩀.�đ#G:7nܸ@�����=���=����Beu5�v�b���\mK[���������A�Cz��u��ֲj� nqJ����)0L~���=$���Z����cld������/�?� �<���N ]�����"� ����ؽ����cG��� �B�Y10 ��߿�?��_Ο� �ye�������g�9��aTN��3�[4y�����_� �{z�no�����(����G����c���,]��$� ���q��<G�D�Lc�N�:)�����ͯ~I4fβؾs�&�/1�et�С&d1==��t����C��+Ȍ�p��{���L �2?����f�O�8�<w�)�{{�'�|�_�p���$ְ�lww���/JEM��R�u�zB�0r�?^<�(�%�Lc]]]�����d�R֭_O2�f�)�����2���h����"�Oǐ9pǧ?E"e��2�x �XP9���D6��WJ��c:[����2����x{{{�!��S>�xB�Q.HXa\B:Q3@�?��A?Cρt*I2��9��h/�H�1�� S��a!az�7^��dF�I�� gJ���9`�k�=r���}�9PL���Y ⢭d�8�6*s����m���W��J��0��gR�2*+�������� �f��m��R�wm�Z�s��,��[����#�ff+�'���Td�x-�9p��%���� �(e����=;O�U��5���;e��w��t�m-D���^�1��+V"B�K�-�%/}� ���,{ZD���˙q����M��z����B,����b.��d�U\�>�^�[ڻ�Ź����H��/,�<ʮ=��͞�Q�K�7O}�5Y�T���*��mˇ��8�n��/_�d���<eQ�E\G����p$� ]VF&���,ʝg/��(�"��S�!�!{�T���::;-@�fe� ����c�����+і�t����.0>:ʨc�x�2�\�\���j��$Bzbb����\a|lP�Y��+���PB�]�l)�.�n���w"'��r��%z��L�@Ey�V� #%%���r�,��|K$D�G8��"67;�m+#UȊ��k.�K��K�c��%�I�N e1��/�z�i�X�E6$_qi�3���L��mY��r�wGѝĚ�grj��!$�BN.l2�*I6���.Y;� �(0g�S�r`-p3�Y?s���S�`@�ʀ�K�K@�g�@�dm�� A����3�#=�3�{���wgy�nIEND�B`�PKb��\��pp/templates/hathor/images/header/icon-48-move.pngnu�[����PNG IHDR00W��7IDATx�E�M��pwwww�qw�+��\VN\pw8��:{F���n����E֒1Q[ѻ�]8TF|�5���Uv�2�9�ʑ~ٰ�k���k��2�a����`�qY$f�t!!P�����T\:|X��a�M�=V7x4�� �{m hp�j��=���h�z�њBx< �$Ir�S��&�CU��v���D�u��H����=�|�t���{�B9q�#m?W0@,g�q��A�PNn�<�!�2��u�x�e�r�$� "b�$�`��z���c������+Q���j�����N���w�P��2�ytGk���b�q<�G5�)K�i��&���71=ǔ���?K| ��V�cbס�,��t3��(���m.����q����N�7��.��TNҠ�>�)�@$P�~������ގ�<���M��+;�kN���T��{�L�̗���7)ݥ�y��s`�Xf�K��B7�.4 �8:��3B�U���@od�W� @�H]�j�qeUa�ICS��S}�K���D!^�' o˴��r/�!��*>��8��PM�/�7��X��_=La�D��U?̉���A@!�D�ڇz�7�8�|�c��z���DX�F�(z#�7�B�j����8 �O��A�z�=� �ր5���ak̘1�1 r!9�D6"+��Ld���6�E\$B|D> �;� �y�v��WF0�� �[��ڣ�L<�|z2%��oj`1�K �~���i�3HpI����� OA��}#�y����O�ų9;�IEND�B`�PKb��\�GSgg/templates/hathor/images/header/icon-48-deny.pngnu�[����PNG IHDR00W��.IDATx��{PTe�Ӭ�RX���,�)�\��eW�*���i�t��m���T�M�����?ml�?�8�D��X"i mFx���Ji�9���������]j�3����y���3�^�?��'|ĵ�;7l_����J�N�p�3��syX�}����2�x�4h� ,+Js>�8/2G��\#���sw�{U� ��F̴��+l� �`�+�TZ�5��LH��o]D}&�@�\ZH�K#Ư�qyI���g���Qg��<� �CsŚeE�+R�ɵ���{2ZZB���C��2|M.�j���[���K����!\�5X+�������%a,��XD�qf���?��Lݧ0��c%v��X3&]s��صEa�eR���{����O��3�x��iwr�p���c�����͐���x���I4.,�"�0�������UM��T�z ϒ�3�i�6g)�u4�3�=��Ϭ�#�;��E9���A!�\3�wE����:��f� w���7$��]��35F��Qx�����H�̟��������K��i�����^`ƩNUƏj#N�eK�ӈ<|��^����qgp~&N�Ӥ�n_cV��6�����٣n-���A�]�]�)�0Ft���3���O��tNP���%�}'�M�ɣ��%��pI��#�W�K/ �P�{�V�-���tԕ�~�?��2:mja>>�x�e�?��)��M1�w�T��e��Q!�W����[��k{ ���b�o+�,�e�W��{�[�O�)r�'��Th�Gel/V% �zX�o�'��.��F[���`���.Sɵ���s��dh���0����$��;��r�/iR�4�h+N���_�-��o�~�J�M���l����z�9T2�K�Ѷz B��s�oy;���u��4蟛 ��`c���JJ�q�����$a[�4�U0o�dž��S��xz�XG� p�v��)xlqӆ#�z|�J���_A�9\��� ��FW�#GiQ�=e�)��{�={S�l��8�5�ǡF�>��8�L{�k�[�.�6w:m)�FW�G���GA�ӈ0/�K{����b�M�x��ʔ��˨�',n �v�p�oA�C��2uB�v�pȓ.ݳ�Q`��;����nK�β������H�=�郭=�Bn3z)D�C���4qe�nj�5�h'-��'s+�Z̛+r��,|N�i�ӀmeB[lZtz2�y=6�� ���07544o��-��Ɗ �ϝZI8|�2bu6����>��D�Y3��/ol2?_�ju���Jb�(�{v�.���Q�kv��?[jJ�ׂV���Zq����y�-v#�<��"�O����g�^�uT'|�T7�ݻv���G�d<Hk��Fi�N�WL+��zfn)7a�;{���W}U�;�<ij(����e��zp-����.t�X� �d�R^s��Za�N��U9��砫��ܷ���kYxǕ�W�Ұ�D^�5.�5������$��҅�ޕ��lGf�6��1�����*�'��^��E�I�������"�PZ�@����&�D�;9�y�I��4BG�*�Jb�4!��SYH���#f�D1�($���HP(�pQs��!]�!���W# 糰0R'�Ds̢q�5�D� B+:c�0�ȓ�����<Q�"�Gw�"�b�/�D��E�i�Jl�N/��E��7,�L�#���F�DG�v��I�1E�}�'�0��_"q^'.�|�_��#�Oݟ&̫��$~�O������IEND�B`�PKb��\coU�PP8templates/hathor/images/header/icon-48-banner-tracks.pngnu�[����PNG IHDR00W��IDATx^�YlS�=���y9qBH���,&�������&��NP��]5�� ��I�ZX5�+�H�^������u��� $� %$�CyS�!% $�?��}�W����@Iǎt�B:�;�۾�dY���-�\b\t�1tB%�D������X����$����p�M'�F���,H���sW F���d� 0���^��. R _�8��0�E9=� ǘ,d8� EѴ�M�Շzõ�H���b`ͫ���|uz��^<%��+�%ӆK����+h;p ٣��C7:Nvb�|����_�F�.xfSC��f��=�L�9�khm8�����@4B(.)�����G����*�:~���ϟ�y���3�d��q��AU�f�c�q��F���lͧ�~Z�$aذa�K|��т��y����тk�B�A�����O����p��s5�l[���}붵T�ζ-y�S��{N��FX.��X��{�����^�Go��Q�&x|Gx��c�9��/���'�p�J�:.4Nʩr����ɲa]��`2���n&��s�}g���K��>;oN]�Ż_\�ֳ���dY ��=���7^���:����Rp����<'�3M��i6��)F_���嚍fޛ�q~���n:ϰ�����xЕ�#�c��[�:Y�!e:e��Y��@��q��e?���aH�G����u$zm��d� �VL�H������u)EL%�8 ��ۇ���x��V+�g>��K���"ޠ�WL�fO�#��Ȝ�f�+K��6`����8��(��*�lG�Â��>�¶��`�d���"�����8�D�Y1�:����q������u�lF��۔���O��7�Й�����Z�e��Ε E����XQ��C�Cx�7��Ai�'�&� �8�"�l@n�Nb�ɀnA`TM�i�%�|F�zЕ���/�m��#�a��UOq���_9҃S7�U8* �J�* H�8Xy�N"�S-�ʩc���@�d.�L!�����2>>��_F݉�8BqN���D*� �1 �%�F�f��b��x<���@��W��'82��է�OÈ�Z">la-.fD�Y �eM<;%2-�d�����dA5�PZj="���:꺯�#�)�f���sj��:ϒ�PS *T��A�/��72�z����E#`�����p�+���4 a|��E�Ā,�,���-l����09% ���Q����O�6��%�r` R`�g�F���D�oO��)M@Mc(,[��UZZ�Y�|�����s�$�FY����(���G�Љ $��P̨�~U�,��Ґ;�t�� J��x@��+Joj��;΄����(��%IVEc��\�Rn!/n�ŋW�&2����[�^�=����]X`� X��n��$I1��(�ICV��d�ІA�h�"������2��i���8�QR`bo�� 蟻TM@O6B�����8�ًPL�s�:̛7�MB7酓���O;�e��Џ��f8�F�-Z��ksȀ5�[�&��S PjG�{��ٲ�l� �3g���V�ؙ�L�E���aM4JOܓ�����T��w¹�*1jV+�W y����fɤ ЁD�'���(��[H�:%�gg�f�� p��a����I��L3��<�"qt����S�>|H?�j �{�� ���}͚5�`u_}�f'���&�'���&���x��p\����\��?����4�D��ѫx�c��5��p�/���B��z}t��|�!�Q=�MFFXʙTl�j�*)TLKW�|�a�/�� ���~����?�6u�ͩ��$�wVB�3�v������wpQ�U�����А��<�ΰ���क़kj� ox{VcE �%���>Y��`(�%f�y�@ѯE�@B�.]Zll��j_RdJ!��ol �����������G�F ��x��$b�zYss�����a�����*�!sx6��^�܉c��qT ������n%n"�ۅ�(�_�$���o��g@*���ޚ��� �#Ǒ��\g9�����]4��[������;z�����_+��E�c�8�k�s?O*�c�uF�:�n�xv��W644�ߑ�UO�)"�� ��#(*,���S�� ��(��� onll�֣E��X�"#--����U�.�cǎ�(�������/��PRR�@0�5MMMU�~6���jⱸ_#A1�x"���kAH��Be�J5���U�M�F�R��۪r�~DqK_ �>�ߏ�Q� +T%y#�a̜9��q�[)��t���^bՈ>��X,5AJ �H�1�x����T`x�I���֥Y�����?�h�V�b�x]-s$��hF9�\���g�o�N�<L�H`��1B��9˞��1���V�r�ΰ@��̈N��v���3�魷}4F���LL���8uf-�� � ��}��g�3��ŷR /+�\8F�hQ �e"�@�S��� �0��չ��^韘8�h*1��O?P�(��jŽ'd�_��&���߂S���?��D�B������ML'���H���f.1c��j��i�5�:s�c�/�hm> ��3Ȍ�O�� �}��q�I�{�a�4b1GK������/:����ךF�7gQK�#���[�(���بph�ڈ&M0�#ǘD�B���-� ��1Bt�gL*�ثEi�̔ބ�/�E&FoFKª�{}��,��5�r2�IEND�B`�PKb��\��BRR=templates/hathor/images/header/icon-48-new-privatemessage.pngnu�[����PNG IHDR00W��IDATx�Yp�ز=�e�1�9�<�233333333333�c8��8fK���ՖJ��{����J>��ʃ������������1���9� >��uC���D�!�0hH5D��Ɩ&$1B��"���f�FY�II�6�lSYZZZYPP0����4??�����.77ש( ~�����C?���nQ��#�'�����ܼ�>����˫(++�ZYYY�z���DN�999`�z,_��/��裏��!BHg��>��\�Ց��G����$++,,l,...q�\u>��Œ�h"��,��s6���fC]]]� �$ [��3g��]�p�m؉,-bO�WٴUr�x\��%�L��ގ��&���!`L�I�m�j���[o]E!��-S�LQ�^G��I�� � ىf�d2�+V0y8���a�-�إ��m1� E+����w�q����[�`�{�d���+�D��:u*�f3?�hg�uֹO<��K��z�w�uם{��|��`vo�y3�Z0D ����a4�߉n����FBH[�K^�^�?G4�uwwcrr�f���0��bNmuN��h�eQ q��$��ҥK��5��0�u�`��EI���A�����R�˖-CEE��AO\[W<C2}���?�����X�-BWWR��������i2��G�Z����*����OT<��b. �7o+�/�q������1w�\p�S�C{���d͞F�>���6�L�i���h�E�ܱ��uvv��zKK;J%�� Z*��s]���7h�B֮]������3���z����aɒ%�s��p�]��É�Ο?L�S���#;���w�`zQ��%�a̫��$ �-���,B+ A)�C~W*))��d�ʕL�#�i�Qɘ�,�#�����L��?�opX���0=��$ b���><�:����X5r4Q0����@[�Whˠ�^ƣ�{���{Y�VpK樨���o���I���2YďX4���9�*��E<v9 ��Ѵ�Z��eĉ�����ڱ軯�~U��</&�A��!����J]��8��v9��j��|� �zss3{�I# a����}$"q\?R�����Q�����(2$$�n�NDpӒ0��:��6�b� I����d�{��%���r ���;��%��y�3�.�R�N� E���S["��p?��I�8����S�⃘u�l���ּ�q��W~{���|_�Ě5k��ցs��/555�}�2T� �4����l�0 i�ͮ8�aGG��B(ǃAO "V�X�ob��*ņ��� ��l����-v�j'��[ Z˹�9Ϟ�H����.�GV��=,�<1�+g2���:��1nw1y��V~��q�n�X�x���h�y2d,=�ʋ,�����3/�Ew".:�ݎ�2&��m�M��T��K�)EXYX[<�Ʊ&�W¶U1�J#�P�I9HJ2`/@�2�oR �*�.tG�=x���8$�O����Cez�F6#�<A�&�'�1���a���q�=�&9m��L�[h-R�!��"�BF;J�I(&8��:]�7[7�an��8 �VX�Y1n�<�y]'@�^6���R�� 1�+���䙰J�!�ӈ�L��B)��x�Қ��>�\�މD����JK�w ��Hb��OH� �����Lq�YC6%D���'D6��`��s��>2�;� H�b1�'�u���m��W��џk�:������>&6�eA:3qH(ғ���D�����/��~��#EH�jӾ�q�c����0�\ N'}� �|I�4��pD°F&A.�xJ 9I��IM�������í���:s���%1/5��������S���GU�W��F��We�s P$��D�y�R9t^O"�y�<�j���@����`�F3�v���4!��g��b�<��<O�_Nzh��������kh}���g�A�K����<�n�i�1.�9�Q�<'�B���1ٱ2�FI2Nw��V�;,e��P 1M!�{�o@L #�L���3�p8���� u� �D��%&Aᆪ��w�>z��9 �|U��L^�d �t q��Ԓ��y��@�͉UIbJCf��;��:��s��k�4�� �����7?��@���S,Nk� �===A���}Q�x#&������������s���C���P� �`H�a<T'�Ui��n*��:���6Ӵ�9����A���V[m���y�y�W�.�GFFbD��� S��fbz�:$R63 J�w|{EJU��6ZQ�k�9� ���N$$���U����'��U�xY�c���`5��@6�CRC8)��3aߑ_��>[D��|���+�=#�'`�Xb� đ�����@<��$�%z�A�z�;|j�p��m�<��A�84� 5�9�� �6&l@hקź !�P��^v���i�s7�L<g��_���kj���[�U|�0��ø���3��^��jZ��������� � ���T*&�*����]G�(��КA|fՈ�Q8k�}�e�8��KwE�My�ܺ(��[�����|���-�e��%����9l��w��7�|M-� ����:�^%�7;����ڦbM=�#�5k��ZvM�HǙ"=�5�:S|�k�I�z!&U�H�|QK%����9t�F����?�6E@P��]� ����8�h���LIEND�B`�PKb��\O/��##>templates/hathor/images/header/icon-48-contacts-categories.pngnu�[����PNG IHDR00W���IDATx��$[��s3��gֶm۶m3�Vpm۶mۻ�=Ө�{Ͽ�y�;��zr��"N�f���A������7]b+��[�Kq��o���9��P4 ��ؔ��q�|��pk�!����) �����:��9�8��һ/FFѤ�q4�)UF|><x�?��@-["�P/|8���t���dG�>_6$X�R2����v� (�]\�F) `�8Tԛ����藊�ų��M��"�w�n���1���W���1B�F�5�цp��Tz�>�@����@C�fw����!ϯ%�&� ���7"��[��(�c�P�`ӳ��g���:�<�]�Bx��+M3Y���a���jM{��7�(mj�YM��g*�fv�2 �;�Dr�ެB0��@��M�m�8�E�E60����Nu<w6q��[�W%��]��BfFa��(jf`��ĞS /L�Č��h/�sOAJ�x"VDJ�� h��= �!A��hML��n2��O<i�.>�J�rv!waWx��t��H�`F���ⷞ�ϜH��3�h��<�R����sP��U� � ���E�}<F�(�_�uw��/�w!����A6�9�p��E����E�(�R � �+?�ݫ0�Ѥ瀧Q��[�Kt3����[H�?^Pʖs��;hW!�`0X��,�b�� #�*)�8"JV�$��M��02H�<#B�9 X�=9 ��5^O�D�5z��P't`��3��v�T@R���=��`��M�&3*q�Y��4ք���� �kUr�u��4Z9-�A8�{���9�"���Gj�k���F��u�㍌07��͛)�p���:��M�����~s�Z�*%�i ?U�.�F�0����)o� �}�t�{<�o<��WӜ��V2����-�M.&�� I��P���ϟ�<�L]�~�����~��4�#o�ڼf�L4�8it<وxh^������t���_���ɔ�1i�v��W~�]��L���g��@��bZ9��-gݥn̆+�a�oB8n3��?�̟�-O�9����Pp��p�l��`�E6����W�#�n�l��jcH&n ��W�c���㧙��{H�9��r{f��{�*��p 6\�~l��k03RJaӅ�r�gн� ��!��Al� HkV �B��Ԭ̦[�I�->�(/v}:�2~��[rk�B�[ȅ ��j1��b��=r�`d�[B}�M]���?���6R��ق���EA��k�yYx6Q(���y��n!AM�y� caaw'�XeI��i :�!&��!)=�V`�0Cg����&�l�Wo!n�$��H��28��105}B�m��)�.�d �4Q��������Oy~��ib����/ӵb0�1R�xr� �PU0!��.97^iz�����%>��'ۺnϯY��L0�K�L`��Y���9�C��G~^0s����) ������@(�P�e�!�\Űo�\E��p�HZ^��`0P��%Up =`���KƓ�%`��P��e�lu�e@e�̴�e����eViԱ��Fc<(j�Su�U�F��nQ����@�^�À� �2�$)�YF�@˕T�:�H��0��@B3��[�I�m��!�rwo�1�m%�o��A�����a�a��5�IEND�B`�PKb��\��04templates/hathor/images/header/icon-48-newsfeeds.pngnu�[����PNG IHDR00W���IDATx�Xc�\Y}I�m{l۶��}�m<c;y���Vf�O�ٵz�Aϩۧ=��n�:U���_}BO� =�ˀ���u`/P< $��/Y���k��^>�7<���]��彼�"��(Rˀ+� >���z~�gc��W�;I��z�偉����ف�<"�9�������g�~��v|E,;�;�����^��z�� n��J�U�ug ܙ4���X{ʿ�'��� ��:��P`��nt@ i�)�j�q�n�6=��[�b/~m��ZA(rDx(�FLm�|��k֟�G-S��x��� �]x(�cf�sd��ύp�ʣ�%�!ST��h���F�o��%.^q8�$$")j��:J�bj���D�Nx�P���ϋ^�Ew�`��T$�}�ׯgWQ1����B�:��n&ipWw��� g莚wE���X�/t��܆6)�Mo��}VŠ�ʀ݈�^����9hѼzK�n����n�)ʇ����� �|��1��t�wn@����kN���\)��@^��xϹj��0�:��������J�Y�o{>�b�@fÓW�>�1.��M��Kl�Tgv:.�|0�JB爙�F�1س�b=�b�#\�x�DB��B��T����D5�r=��r���%�A�-�[��R�v�� �7�]��Qt/�UV:���Pd�x9zZi�d��%�Թ=*�~[����|^��m Y��|]�vDLi�@ދ�dN�I��D���:��4�S��pB<-�EM�G�i���җ�kQ�(isQG$�4Ԑ��!���(����!E�;Q���,��bGBi~��ܦ�?��-@���0��M�魢��I ,��Fʗf"���o�?���k��g��Y-bA� v�#E�h|ue�`㧵R��n��ABO�ʜݥ�KF�����M�١����̇ƀq��pN��� �N&�4*�d�Q&h��V �A����Q�2)!��g|ƹ~"'7�1�FS� S�y�+Y����l��jbz$�/@w,��D;����- �!��G 2x/0�cP��(�1��D rx/�t�C�<��_�|�f��GL����D����2'���5�Z>���2#@�F�LW7����j4�6��#qY�ح9f�����/�0h��gy�_I������6I'�]Ht�2'�n~��='}�CO� =��W��♀vIEND�B`�PKb��\��à��5templates/hathor/images/header/icon-48-help-forum.pngnu�[����PNG IHDR00W��mIDATx��t9��?�����q&���'�g����eN�1�������g����8d���"�U���i���\�v[p���J- N|x�B�W�2a��� �5]I�z}��� D29����>�U��?��^����P����J%��� ����@j��qx�I����V<��5�H �ƀ�5*�Rı"ܿ��?^Zc���X��z��ۈH�:9�ƛ(��V�D�ZV7߄W(G!*��Z���� T�$��Z;AO*��x��|[{�P�+�� �0�;M.�/u��Nγ}�<뀞�i����㚉�R;�B3��l�+�E|x/��Mf,���Jv��qL����6`�!N�ꥶt"+�M!��C7�0 ��iC��8��1�3������1`�ے)��X4+�H�K#~��}���;~��gi��\��Wh3�@`3�s<�fśUOb:R�� 2l��SA �#~dk��Ei���&��L,<=ֹ$Y[E��P�05�����7G=F�8f>�c��cy�~}��L:����� 21!���~�MM)eh Ҿ}»��h iT -A(@���k;�Vq���OL����W��)CDK� %����j��j֪UG�n���nbMf�[�!d6� C��n����-�QJǮ�!v�3�Ib��W}n����ۨZF|`���1Tm2\� 9>�-Y�ct8���v2}�Baj0oJ3��L�+Ě�z@��d(a*p��^��7�w�럨����5`ȑ�O��f�.��s�תy��&��ĵ/{w��i';���ZA�mIXmԂ����?��/��*�@ J)��F}A�#V�����JI ���Bi���uj�TD��y��<� ��a�՟$�^������}������{ݸ�К �$�C#~��S�Á(V���� �Ck���ߌ���R��AGbB����B�h>k�x��`��i���$��b����"������ж�Ÿ�{y��]��te?d�6 ?LD��7�(6���I�u��t�s�C�s�pa�_�xr��p�sH�!Q�����X$})�+S)�M�3s��_im�˼��o$��&"j ӲIW^ Q��0��w�~�q�u��RJ�d�5/»��=�,)q����^�ߍ���I*{i����8?r矈o��n#�y)E�〔�� Z�w����WѾ���3�x�#�^c�6& =r"h����:�^���w�����?��}��_/�1�֎R�T�Qa6Ä�h,����vǜ�D�#�,��?�c�*�� �מgNiJ� 5�O)�x�1�u'�) h�N�h�s��r�3�V��d� �eSC�9�H�����ĸ�L3��3�я��b�f[ ��?NnB���.�`b|���Vj��r�vܕ����3]}�ɋʜ�)Ǿ�N�1�c`L0���*+5�)q�уT�����h!`{�a��z���!�G]�����HL����͠�wBl�y3x�Y8'�-�\�(���@�ـR��68��lμ��i��یly��$�n�����/W�|�A[9����K��j��*�R��[�2���uW,�13��B��9���e3��*V�q<�@��N�;~M�� h�����s)x.� ���.���'��Ua�����m�k5Gǂz�lx�Q��U�;xյb���3�xh�&��g{^��m�6��JȑA�[��/P��q��j���{#���z�>4�l�,vr� �f�#�(<��%�~�s�=�Z����X 6o݆�:<��tcY��Fw�g�cWj) ��P3�S���]��#vr� �Q�����9;g_������|�^C"6nނ�ۖ�k'�3���M��7�q���8�9�S�f�m���,�s;*�.�v���+�4�}�E�p2�_+>Ԓ�^7��W��éF! X��^���7��}.��V¸�O/Z��G�G9!�@��hB�Y?�z�.���T� .�f�ks+�?9��͂0�Yi��)Q�1�_W�ŋ����%ԅ����S7~o+���s_Az��'��k��iJ(��@���$�hMDZp:А��u�_i��|H+�L����o �4�}���N(1�bǚ��Iu<zp���CZ����?}�j`]�eh�('�V�4��2$ #N�^q��E_�=!1ћ���y�H(=j 6̿�_-y!WCN5��Kg�����k����2N��)�K_K���r�P ?�9�X<�˟U*~x#-pc5���o<� ��oq��H�d���w���p��a�֜ \�Y�R���r�U�A�X������J�g�Y�Y�T�@;���M��{g��G�N��es��ۿ���<���X�V�S�;����t�J����6.������H��Ʉ���tK?�雞��VY�2��F�?�E��sX�wx}�)�|!G�V~��ʞ�ܵ��q���tK�T��-]6�U*��o~�1��QZ�#�mr)�q)/����>����ǣa��T����C��2Z�M.����3��9�3c��zmC��� �Ճ�����,;s�����xSkD�Ұ��Yr,= ��w������弎�|���t&^�B���Q��&�Z+�Q�B��{�b�^�������u���>�ų}�u+ 3�<��V��0��n�x����_zj�S��c�Z:���t]y��pV��ܡ��*S�زw�_~�GEQ(@g48��h�3>��K�R[�O�ܟOTBr|�rB���2wĵ�m)��!B��L��՜�L!^O0�D��-&���ol���>��C4�5dIEND�B`�PKb��\hˢ|223templates/hathor/images/header/icon-48-menu-add.pngnu�[����PNG IHDR00W���IDATx�s�$k�o}m�؞�[۶m�ضm۶��m�0]im���s�����E�_�q�2������?����?��Ŀ��'��y�]Fg������F�7�av���N��\�+%�/ D'���<��AE�@��A�L`��E��T&�z����,�d@{�,�(��<���5��.Jx�7�j-{K��?�_�L�WP9_�P���3y�� ,�]�,�Dd8�ܪv��g��;�-�<>ofLJ/����pd�zܩ O˻�kPgva���%(�]%�5"~s�'*���R�O=���6��_ȫ>�b�\/�M�+9��Ⱞ�K��+�Xq��D� -�'��_ó��'�Wb��+!�$�4�2?���&��|�&1O�׳��+�_ �a)Q��-�y6�4�����+��T�A�مa�獗ѿ˫A!:"wʦ#�zs�o���`c>�!8����x��w���ϡ�3s�F�/ں@rB�cce^�k�~G�9�����i͒�D{�:0��!��Lm�'R0�6�����Bzr��-�\��a�T��v �i�#�n ���� P8��w�`_�tݙ���%���K\f͞�#F��v���}�a��)�dF��������,� hO�nԁم�-t��:�'�`Y��q��%K����1D{w�Hg{(���@;r-��yxW�DG6�=Y� H�y=>~� �f��}�p���#%5R�[(-- ��B�d��?ų�>���Q��E >J����0p �t�wu>x���h�C�^��_�9��3(��z}�;�w�G����O��~�#�=�u�mA�Pϛ��|��?��a�P&Mu:�>��o�UH�������֮�o~�[X��� \10 ʥ�P�n��8ʤ�N��g]�Xf���{��>J��šo�~x���A������Ɇ�u���O!�oR&Mu:���� �u`u ���"225S��Ȩ��EKB�� ����e��%e�F��G�t��G;�.h�j��Q<5<Ew�/*���́V�����{ XzoPP�jtN}�����A~1J��ǐ�����W���Xf_PP�jtN}�_��:0�PU�FvAʪܨ��.���A���i���l����Qn>y�af&��?�G9y��(;���q0d ���� �3��l���_�e�8��[�A�K�h����.1�g�a�$�fr��.��~�kݽ��OE�� ��/t$�����'q�,�B<3�1�a�����M���"o&���(�{�������W>����s&_����%��t$�Z�?�㕻����|U�AV��wf�D�Z�b��%P�oT?3U�`��+9U�E%��</�<=E>��r@7QM��D0�)w4C�h���z�5[K3I5I�:G�>`�6�l��z�[:���˖y|�l����@h�+a #���L��<Q'� �H����IEND�B`�PKb��\�zH���2templates/hathor/images/header/icon-48-content.pngnu�[����PNG IHDR00`� ��PLTE��������̵�������씔��������٪����������˜�ϥ��X����Д����R�Nj�ԗ����ծ����������Ț���������ťd�����Z���ίp��K�ˎ��c�Å������ۣ����֛�۟ѳt�����ZԵv�˭���۽~ɪi̬l��羾�����ě��͏���ŕǮ{����������f�˓�ؤ�ͤ�ۦ������]]]j}~zþ��״�ܽzzz��u����{���ػ|ƪr����Ͳ�۩���~f7llk��֥���Κ���ħp�Ӥ����؝m���k:<n�¥kbpnttt�Cջ��Ի��a���о��š�Яǿ�����ʨ̶�mX.]v��Ƣ������8f}���u��ɸ�=q����{lSfffOW[iU/�����Hy�̵�δ|��ψz[���<��nz�&SdHegv����s$Wk��l���|������i���_��M��A���q?JjlW�Ğ��ƽ����lbLH��;agtpf_vx��J�x`Joq\su���ø����w_3�ŌPljZoo8iw���Ai}n��ex�dz|{}���K���]uwsrhNl}o\<���p��^aR���ֵ�Sf`���C��t}��ʗ�����˖~Q���6��ywsbhjxm[���x������κXqm?q�crrMMMs\1־���~�����G"[t��p�߾nw~�zlmeT��ѣ��ztf{c5���w1�otRNS@��f�IDATx^��S��H��M�شm�ضmsl۶m۶�O1���+�tf�n��z��}�̉XU^n��+��R~e���FG0�g��������922<::ZSS���dr�l��>���s�5����P~���pM~ns�T���슮��;6��~ߴBpsO�����G������@����[�͗m=2�,h�nhhٲ��i����p���i�ժ�{�y���-X�]/O������Y�)�� �N�3��3p4�O��L���u@aj6^R��7cr�а�g�5OQ��У6�����!Q����Ȣ"EQ*0�j��+|Xb� � @@�eE�$N�fP�&m6j��0��(}�����6[L�ր��vRc�v�� Ȅ��� &!� 7���9�9;hBK��1�;\.�^;�o��5H$�{nB29W��#x� ��f�R2~<a0�¢V46w���dY�jGe��}����(�)Mq����� �����0��(�N_�0�:�q��L�#�O~��D&���Y����f�,UUU��2��_����,��!5���p�$4�K �Lpz)`8�����.�|���Md�7(p~$|�8zM��o(� �)`�Լ7�$��?��P�,.�W������i�^w�J<��M�P��U�T�ԃ~#N "�P&s-}K=C`�3�p�W�_�wd'ϵ� ��P�ѩ�%������/<~�"�d�QᾍQc�)_�0�ͻi֯����腗�x��L��4γqB��OO~�}��y�E�֮�����������d��,���o\<q��/=�i��]�ҽ��[\F�� �{�.+Z|I�`1�]�}��������%m���xO��j��bnM�o�a6&(x��Zܟxֶ6�?>x�����IEND�B`�PKb��\VՀD��1templates/hathor/images/header/icon-48-banner.pngnu�[����PNG IHDR00W��iIDATx^�Zl��~�ﻻ^����UJ[z����(��nQ�\Ж�ˢn�%�-s,�2�9Ȧ.�H�D6�Q�� P{B�^j��r��ϻ_�{��Z��{����5����=���9���u�Wݚ������5?��ݿ�Cp]<��;��p55J�k�TA��d���]���֍h0��'!� `��b�CW�j|%���U��²Mr�Y��3��b8�^3���14��@�A�.���E�Iژc�t�O�I��kù3=�x�-�N"�ȁ9�W�Nl{i�/�Zq��GCF�:x�w{jl6����nƭ3&��ׇ�=������B��2�[z;��� G������ \W?��J����g@�9�n9��3�� J��+ƣjٝ��~�~r���X�k��f�|���ܹc�� �JsP��(��B� pp����G��?Zк��n�G��_o���n,ʷ���?8���a�qN����;����{�;��{1H� �̻�6�d�<u�>х��Ac\h��&8g�$���φf�l�C�:�Gm�N�l�c]�7&����{��G�,�Z<}x�/�f닋p�:Ķw�.��3�WJ�;rͬ�e�}����"� -��E�f1�}�A������\Y���;�yh����/!��.��8U�8��bh1�����z�, �/���Zjze���fIf931͞jV n+��\0���A�t�W4�U � 63�1��܉�q�湜h��fO/BS�9'�m^��?f�͝���2��]=Ł�N+�{C��¦3}����(��09'�Yf��&��@M裪�[$7�R�>��ނRW6�h��5I�u�ou�0��K��W:q�?��=�q>��QtEt{c*./�L0�V�Y�Έ����~�QUO�e�<�m�:�Ȏ $`�!���ٻ~6f�<n���� �5]�B��J�Ј&��̘�,T���)Om���*':�a�q�T���;�F퀄��hh�� �p�2ep�"G�@rׁ��c�i�8�E&�̆Fd$��k4>{@�����=��\�0 �p.]Y�Đ�E� r6�����߃��+c�:-��Ι��|S�-(�p&�g��ԫx�kr%�s0y��7��֊����D� +K���7��pW��I��#�!bՔQJu"�"r��# ��P��9�F �t�k ����:VL�v_ظ="5�W �|%�D)�L1��n�������t0\��}�VקE���躖��7�Uz&Xa�$|�����a�hڔ�+eȒ!H^N��6"��s�����/>���u��mzFH�[N��)ɼ��DX���Xj��H�,I�p���A6�`S.����v/Xp�#-�G�^p�=�G&���6���kM�������Ĉ2�Q~?t��*,����wWyT�Y�p|C(α�v$rA4���1�C�\q�����K�$\�B{nn%q��yϘ�ӫ+l�"��A�Z3-���F�1�:L���8��S۶��S9 #�� G$���b��Xռ��k�Տz�v�欮7�k�(-�9/�0"a�zNA�Ȓf yD�YFLՌ,ܘgc��%N�z��DQq Ra�Z!��F�<OE���U�l��n;�3��FXj�nƼ"+fd`Z�y 2�����'Lwd�s@P4HL\���880�|gf�� ((,�]Pu��Ύ���C`Do��7����E�ܝ�m�!DT�L�FI�l�V?돢�?��@AU9@ԑ!.���"�jB!�Ƨ��sh� ��i*h�HD�]�)��@ ������:pV`����9+�B�� �jF�`��$�e���$.{�p+�� ��!Y'��G!���K��A�8��!0�J���1����: \�ܞe���Yx�;@�i`�7P���������U�M<}��ȱۑ������Ue9��x�P��/�8�R��/ �n� O�'hݷ{՛������L&H��$\A[(��b��J�k�����;�~̽��g Ff4/��I�J�`:�ȴ�<�f|͝6z��_��kC(A�3� ]գk�d�h���b�nl���Z��:V���*�y-5�@0d��7Nt�������� "�/V���*�A# 2�p(N"ȅ��U��&`ْ�>�yc D$EYi)�FႮ��5PPg|���*�Z.\ a�Y33�i|�h6��A�adgg���ijxY�#@`p`�{���!@�F�%�9��p�֩�i���딸�1��j�R~��+1�|v| ��X4��F6�c���L�+�i}��jچAr!�`� � � 8~��.��$Y��'\��\9m�-�� ��V]��4R�R~�cI���"���<Ⴂ�El&ɵ�@c��W��A s4��h"npQ�Ӏ�?����.h�qB`ɰT�ퟘc��ku�4F�B�|G.J��{�[�̽m�[>� ���hZ��BtN4�mt-c, �~����������:�fo=��%A&*�z(x u_��s%�z������i@`�Ht������(tTx�hN��3:QT�qP��e�8@�ߡ�[���=�v,���B�0�Z �}μ�'���ޕ� ��!H%����nb���S���[6gκ}��9�����kk=����C'f ��p�ĉ=�G��h1I'����~��M�O��5f@���%^nX��� Or���C�L4i�������%)u�k�M���UP�X����ELP���3&9���']4 �)�U�/��:�(K3IEND�B`�PKb��\~�NN7templates/hathor/images/header/icon-48-category-add.pngnu�[����PNG IHDR00W��IDATx��p$y�l���϶m���J)Jg�F��7�m��ֶ��g���Sә����W�4��(3^��֙�ٙ��A�/�1�1�-�(�8m%���R� J5J�K&I�&�L��J`��ϓhO�@��*����u�ߦ�:��7�3��ר3����3�����"�k+��m�Y��'�K� K_����@Y ��R IV�u�<Pr��Ux�ׂ2�Y $�x��Qʉ�,ǟb] ������^����#�txʚj_ �L_d��p�K�2�9���3��?Sd]p���]�qq*r.��Q�R��]����)�~�V����� �An�\3���Ւ�^�#�`�}V��Jm?����ݐ˺ ���nH5}`����p��:�w�A��rW�r(=P�:��B֑tXa;c��[](����c&|�N�ۡd7�����J�Jlj��m��>��)l��(��#wk*xJ�N?<JN;��S�߇�gY篐h��K���q��[o!p�ײ������DN"�'��,���٢�`��� 8����J�9nn���OL>� �6�:z�\��R��� ��ӈ�{]��u�RwRbvC�� �<��������o�ȝ&b�����#p'%|;�%�L>�)�x�-�q����v�h�*}�����G]����e[[����|WF��y����J�����˙�B[g"�Zx�K�6˚��h'�XB�: /ƵG_tǯ��6��|6���E~���A Zj�;,�R�i�����E�m-�Dd��cv� w�� <��Ox�����X�v�,��%ɿz̯��a`�|�vA�ezfߕ_jW�&���8r<9��HN2;y�Nғ�Ύ�~(Ǿ/tH���f�,�'_`ZK���&ݎ�#|�I�Ƴ:* 8z iE�e��4*�}[◱��/�g1�挂����f�V�����}� �}�h��?]� /H��ܜM��-� :� 6CD�>�>�DNs) p#IEND�B`�PKb��\��4\� � 0templates/hathor/images/header/icon-48-inbox.pngnu�[����PNG IHDR00W�� �IDATx��yPU��/�&��ĸDQkM�����AڴV��m5���WM(\�� .,�� ����>@|(�"�q�����ܞ���0��xg>s�;��s�����{Ozy=�u�ʕ���`���/dDFEE!##UUUhllDaa!71裝��Hb�薖ASSbbb��A�w�����Vd�� 0Y�0u%7����˗/�h߸qEEE\\{{;���8�C�0�;��I���)�K@���]C``����LTWWs�>�g�o�0�'�}h�a� 5�5 <����)�ּ�h+EwttH<��� 쏭��fZ�;��FPb�ݻ�۷o��46�я��Z���)#N�ByN�"����"U���' �Rc�g�= YYY�F�Ν��$J���P�gJ#:&+**PVV���b���sӮGð�X(�<F�'(ׯ_�����L|DDD@dd$��Ҡ�hP[[˹�>E�������JKK�Ђ�^*� III�����$�LЩ�߯��#�"��3 i6��BQTD�r�%������\G�B)��q�H3�70����/�Azz:RRR@��� m? MMMENN���ܬ(f��H�.'s�8 =� �3�d���k��x1�>}z�ŋ���@�)x�JJJ(u(�)�$H�S�@z(��{,s}sQЄ-��X�7���r���S]H1�x�~�V��+����tz(���ڎ>t������I5�w6;;{@�و�@0E������N=F�MS7����J�KK�5*�H#�Pa@�� �J�]]]z(���`�O.|R�a��[��Q�Tkd���S��ؔaΰd8���ҹNi���a����z(��������p\)��SM��L����GmHHH:�`B��#܌a���x������J�:���@��B��G��`�z;AsP`�P����]�����S� ���o3VdĐx>g�4-p��6q�䛽^���.E��f{��jd%���=� ����0!БK�1yq�(=�;�� � (���(9�>|V��g�`�=˄)�Q�&��c��#C�~z,t!�m����e�2�?���e�]÷���=�&�(r1յ������46�Fn)!��~�Xiܝ�r��M����G�g�;����$����AJ^*-a:m�/�� 6JgIxo�,<Q��Lt�&�v���2y�n� FzV�Ccp8�*����s).�>x�ӗ�}�*T�yt��9���gOM�2�}3��6Hg�d��1E�:ɍ\y�xH+�٢O�����<8��~'h�V�y��j�Po��cP|�9G\P|�(�'�y��ε���:0 ����nw䛨�*��tW��6�fw�<���~��E�L݅ Н�_��q3��u�;�|�P�\2-�0���Zg�����Y��Fh�G�j)B�A�f�!a�b>��$�٣/q�`C�^j��ŒVԁ0�܊����6���%�"�Ձ0p�o&h=��i���詃 ����K)tr u����O����4~;�;��k$ZϼA��}��Y9N�'�v�MR�cݩQ(�$�>e ��;�qJ����pg��7ء�s'4��Ė���@��}�ۇ��m���Zk��=���ó��;گ_E�J+Ck }��� y�T@5 !f�9'i�5_o��-�G��Q|L� Kt�Fm�w�������*7Tz���g���B_����P����\�9Y��q����ق{���� 1�T��j��#�E��k$����h�x�Omz��u7�КB_�*�(�?]���{fd�Q��F�.;4��%f�987�XR[�U�u��/7G���x�OmzN�Z|��v�1��k�v�d� ��7j7K�n�Eá��a[J}�6�6��{���h'�4�v�=�+����[!o�M���8j�o��&��f� j��J=��p������V�}7W��\t��+vڰ�7�]'�]9O�Q�g�)�E-2��JV�bN�r�vi98�_ۢˇ킗 ���|(�ј�{�>S��?kM�/j�1�JU�]�ݥ�;���n��]�t�6��S�X!�.x�y���堧��떹�,���d�0�p��1�y3_� ZZ�C�N a�G1�%�O����$O����u�:����ɠ��� :��Ѱ� K�L��#&�� ���2~ei*->�@���!���E��)�"u��J�[�J~L�B��0����[3���1V3\e�2��e<e>�'�q2��y��h�\e ��1f2�0�El$�`�0�0�1&2�0����fP�f̥]c��1����*�>�����g�|�oQtLW���Y���ˍ�xq3LdsfdPvmMF�ڱe�=��xyNK}x������6�r���<�/� ��{y��~�oR(�4K�*lIEND�B`�PKb��\l��ׁ�2templates/hathor/images/header/icon-48-default.pngnu�[����PNG IHDR��h6tRNS���7X}6IDATxc�O"���>��5��|�������j�s����ډ������z�+j ����w����2�_ ����~��r.������� /�}�M���įﳀ���4�p�� ^�*s��'�zr��N�o�">�@A�_,�~��1?]���g>p���.@q��jx���~��ް(�ӈ�zuI��sÏw����_�[c�Sß�G=�vPvӪ���^>V����8������?�~�8І��wc����=`h�;s�P0?|��ڀ>�4Y�D�]��IEND�B`�PKb��\�1-�VV/templates/hathor/images/header/icon-48-tags.pngnu�[����PNG IHDR00W��IDATxp#������pÜ�aΆ���2W�2˝����C9e�q��2)e�^8�2;���*��Lv���zu�Y����魎f�G����4�z��+�� �J �b�3�SX�{��s��1�+X�o�+G� ��x��|��>�Wp�rrl�,�O��>`T"M\s$^�`�>u�s�3������_����X�}�!�KI��= ��/�������1��A{&z�!��z�+>M�W���/.�|}ԩ�S��ogk�Ɨ�:�[�t��#Z��ٱ$�����k��=���$Eq�Ok�[��gE���h[z�im�vd*�`㎐����|�d�%w2S�Db�(f��e#"�~*��jй$��E��x����������/d�?�P�2�N�������:t����d�N:�$�|�=�Myx�O���/��4ގQ�P-4��ɢ �/���<N<��1|��3��C;�%��N�������7/�H�Gg E���[�c���7�����m�8B�u7�J��ג$��l夥 &���E�=<O�������ߌ�U�>��,��R.>�ʀ�-̓'+V�m#��Կ~M�?3�b:��s�BU�d��R*q8#0 ��q��ΐ��g�WRT�����f�x����#)'��ߵ�%}`��[�=�|xy��?D 7�J��)�Mg�mP9%�D-��e�4�g���]qx�<�; L��۾籒Hg*@:�����*E\�����cW����yP�r�A�����z��{Z���r�|A��C����ô���sG��� �3{��ѭ�,x��� �s��G$��J,�Fhٳ�e��2ɉ]L�x;oy+���J��D��=���e�v�cCVy���?�Y&O����r�(����"b?tP�v���i"�5����Ml��!��2����� �AQ�}%�� <����^�Eߋ�JSv���5*-��� L0��4��t��� �UB�y �ހ�F���f�Q$��얡���e� ���y��5����N��tqA�V ��x��2Dڷ� F� 67��hՁ���^��*uʦצ_64����n@j�R����D��0u�)�2EBC��ij��H�Qs���? �j�������o�)�{�1!kn�}x�Z�� ׀�����4�H��cr���J���/q"3^7":��o�M)�@W܀8y�kz�zǚ��!�fU�!k�\�=���9�7o����-�r�i��ǵ��:o�Ϳ���5����w�3����O�� ����E�Zy�~9�8�v� _)��u��6�@�By��Co�����}@(G�A�]�ۀ�W}�F����ސ�fN�����a@L@�&6],�<z~�C��.p�Y%p��I1�_@�^� �S��Ą�A��`��2Mh@LXc��Lˀ��6���5Mf�2q�ۉ�Y�UEp���,IEND�B`�PKb��\4b��EE5templates/hathor/images/header/icon-48-levels-add.pngnu�[����PNG IHDR00W��IDATx���%]�߶m۶mE��ڶm�ضm���m�٪�߾��~}{�|�tU�M�D��������������\����i��+��@å��#o����i?�"%�[��C/R��::����Љ�͉�N��kj�6�I p�8�t0]Jv�g����w��U~ �4�#6��6: ��� �.�� ����@�<���@`�:��o�(������?��sLC��? 0��|@`0 \��`8�����?S�U4][�-W�@� �2W�M�@��: ���t�:}�N�d �X�Wk�֓�z,W~澰;��p��W�@�d��á�нs6z���s�=�Wr�g��oy�,��%�:�ڢ{�lt�LAGȗ������}��n�A �W�B ���BtD���x[�{��е{#pU{<�=������`�L�Ο�#�{����V��v��j����qj�w��l-ʓhu}-N�_���,��=���g���.�5�����8��i���3L�[�����д�)t�-a�.J�j���p�)�cb ��O�a�fړWq������#�i�,;�Ϻ�L[�<�*�x_<CQ�1�φ@��)��v���9��-fW�>�Ѿ�5�i��B �c$�}�c/>%�Ӟ�ޅ��4���4j�ψ��v��b?S_ܭ#�Ż������އ'�苎�.��Ap..IEND�B`�PKb��\�胁��4templates/hathor/images/header/icon-48-user-edit.pngnu�[����PNG IHDR00W���IDATx^�]hU����I����"Ֆ�� E����}�.(�@m���@%ƪRZHQ)�TԢEp�/�K�'��&T���6-M?���n�c�'\谌f'ղ#�lΰ��s���M�)���4�0V�i��Ȏ@J@)%��d��9����� _r�q�>I�aB�# ��L���i'9-�����2� b�Ri�Ȃ� �F���ݼZ���P�����)h��,,�و����uD�(D��B�"!�RP��b���9���~�]�Y/4B4���+���-$8�q t>p�Ѱj�EE"�X�.4Ci� ��E�o��D��n�0?��������"1�q�?*p�u�9K���J+A������Z�D�\��n2�Q�]��Nr�靹�맑�B͍��hr�����M�;�[&l ��`�'v-Z'�@0t����>�m�|�M�$�#�;�o�+姓y�ڡ���"�P- 4h�w~pQ~ ����ky��9[@_�Pb_7m�!�R�n�N6�v#~ 5���M �h�1�x���|1U@d P0�aӂt�z *eP �Jg"D����,I��x�����|9���@�F�� ej��*��W�� �>�OκHߝG(�;�m-���b��Mv�j����P�$"M=� �#��s0��C#��5_��o�5?SM��bI>>�x�0��G8r)t��1�S��P"���f硶��/��q[GK1�{��a���� �Wa� ,,s��E�Z��D �n��"(��1[�D�8(�}���4�5]��ׄs�����e��P. ��!��g�@��߲����y���a(�V�*\�jq��o��~�?�;'��9l�Z� �*�G�Ƶ}]�C]W �- ���t��ހ�9�R��O���k]�w��VZh�B�{�ic�W?�3��|��Zx(���o��]��h���5����Ǩ0�x�P�lbT��_�E����s�s a�ƭ��x��Vv�ڿ�������^@��"��z5>44��sMN�_&:�6ժ���G�m��V �r��u�(�6�*#Е��q�1����@e�e��I�f�em���o��L���#��n��͇�oqYl�L'�ٺ�����T`��a�2��d���Y����U!��{� ���AW��[&�s�yW���ݱƽ��� �Y�Y���$4`�����%_�AiY���@P�Fc�39<9Cd�`�Au�,���`�\,� C�a��4�%�2@X�å�P�`m����Bg��A����ؓ�փ���o�l���6^�t%"ad_��I�@�W�BP��5��Ϡ��$@�n���_�Y��)zN^IEND�B`�PKb��\C�%~ff0templates/hathor/images/header/icon-48-apply.pngnu�[����PNG IHDR00W��-IDATx�n#[��s�\9=�| ��AfC+�4��af��^v�<�f���e�q�ɕRd9��#����n�[ �<x"�D�'���_FZ4ʗ�JQ��'.��"��x�'O�#�.!�b2&p�YNR�Nw�Uo�Tm�QO�]��z�4}�t��v'�wx|�MP�`B��8|�D �����g��iJ�x��: "�@�߸[��<{�[#x�D���-�<n����o�Љ8�ib�S�� 0x0xI ��9�^� ��H��"��>�oBa�%��+�WL�i�#��^�m�;�,a?��n�<,����+��)�"A��ww�/V��>g�(��SG ���Ý'��j"�~ex�����Qv�d;���:��^dД֝�M�_�=�������v���R�'�7�~�r.��\ =}?�0 �۪{Ҋ�i��.3���Z~$19� ������q�<3?OT�� ���Fv�.�^��0��2|�o��+0���)��res��>�A���s�)[!m5�m>xI��@}r�����Ŕ����M�o� \���\����h��ãGu�?���"i�I��^|X�oo�#�����H��k[���}�RFl��%m7=&��"�;�h7�5�/��%*��!V]�|g|�J�Û�_F��ՙ�%��Z�C�K�\"�J�J<;��r�~.�m���6.�v�O/alvo��H�F���)�s"�] *q��L&��5�J���P���3���[x���G7��"�vL�(����$�$�������y/v^�M�~c�����%`_�)D�j��IT��%�uO��H���$�� �/0F�)�p&�JD���>�1�V�@/��:`���v<�W�wC�0�$�p��.d��l�t��E��%��! ��(���ހtg�R6BP���0L�w�|��I�9�$���H�J@і ��k7�e�k��C^%g�$L�) �I�F��8��[�%<W�R6�S�*ds��m��cL�7n��I���L��$�U)[�dޢ�ߛ��y��HBv��aw���I8ѻ�3�]��݂� 2 ;�6��!�[t�7e/�x�m�ry��?lx����#�5�����Dv��4G]���O�nv�/K�BO����8��|��ȱ���@T��l�0b��=�tl�6- �6����CB`x?0c v���$�1����-s�M$|8&p�,B��B��B�<+W�g�-�')L�:� ��<x"p0�?�yX=ѶIEND�B`�PKb��\g&x�SS4templates/hathor/images/header/icon-48-links-cat.pngnu�[����PNG IHDR00W��IDATxՙpIF_�̘A�x�̜,����L���̷����s�c�$G�t�K3O�֔(vݫ�k��}��G0V<Ѷ��;�6F�f���B�� ����n}'P=����Kq�L��R\�!A @ J���_*���m�2���'o�p���$�� ��s��!��>�G����vy ��r�����ICʆ� N L��@���O��&�?�OΩ�t;p �d�x��+�P��R�e�� �Y�d���'Qx��Uz��]5� ��� B>iC4��D;O�����Ǔ��h�Bp�{��'��`���[?"gHk&��`���<�>�x/��/�K�'lnl�2ߤ����Tͭ��PRA_�U��\i���{�N !��>����۶ˇz�\��[<��8�<r̟�9�&p뛽PP ��?���Os�r)E�'8t;��?������_z��)���JD9�<ʯO����M��Pz�,�8*W�3HP��p{?������i��>�:��$h�qXT����� z��^���(���BZ'lF0_%1�$bۜ�`�L�����6����� �v]������S�K�����Jg��z��[�}� ٚ�`�mMۘ�'��P��.M��4�u��Q(xh=�3q�\��J�5����t�}�Qi7@"B"a���̝>5#����ዧs���������Ҕ?���6���4;��o ��iQ�c]9�a��ID#a�}���L�.��O~� X����k�䪗�i2w���&( B�ƭ�=����˧�ej��'/܇�3�b�6�x��� JKK2�l�º����Z4�խ �kvHNp_�d�'��tW!�@ w ���2�S���t�*&�� ����D4%P^��_��C~�1�]R�3a�F1��U����{�!g@/�9�����=����~Wn�'"}��t�+���O0���K�s{�,_�{�V(�pGB���_�4xx�N���uN=�d5���v['�o'�gR�+ɿ����Td���X�l)�T �+�~|���2!� �n=h�C�|M��~�lHǨ��9t�c�Fc|��x�ۄ�R~������p��J����3�ʦA%i�Y(� �P�N+A(pl�U��om��)ɰ�gW�9��'� ��0�I�J��`��T��2����-��,ld�u���/W7@�⨉&�>�à�'�?64�Ub � �[<1���H��ħ�}�4(*�3Zē�7r�~˹��Y0��5-[���� �?��:J�P��sQ�aЩ/�C�����U���]GB�fJ��;�:���&d��b[g7�?�. CA Xy �/�X����|�,����RwO��T���z��`�e(���=ă5A��R�/�X^H(�� �S rć���GϺ�@��[�ʦ��!! Ak����FV��C��[�����X1�m?�u�ِ_�V2�`��?��nÏ�sU �O�E`!h�QC����8��[n�x7��w��B����YXF���ͨ"�S�-m��K����gx��N��q ��Y6��s\�|�����o�3f�7�US/�~��k�1�����V��C ���b}��AX�b��~(��l��j��~>ع��0�~yd�����1�-����l0�"h݁`7F���#��G�����=�Ks3n��r�hg-��|.�� F -_��W!q�0��j^�Ɋ������_�x�?~b��ѝT�n����g �w�:��7���m�*�DggS�i@�7�/Xq���e��"9�o%�W>6W��i{=�4݀���J�o� ^I@xK��h_9��v�]^ż}�+�a���yYe��VV�%M�xHyK�U�w��R�㫴�ԃY%=Q���+8鯬{�9�� 81�*䎢�Gd���&{S^)<�!;���fIEND�B`�PKb��\�2� � 0templates/hathor/images/header/icon-48-print.pngnu�[����PNG IHDR00W�� VIDATx^�k�\Wu�k�3�p���8v�mb��Z��@[�F�$5����B���VT跢&H��6���"�|jTH�� �4�N�H'q�����Ν�s�^�������D�^�B�_Zs��g���k�C#��O���j]� p �'��y��V��� �1wA0A�9��� ��b�z��;?t�ǟ���<�3��ӏg���f�z\�sx��A�t��=N�x #�t����z�����o�n�iy^ x�.^�_A��(x��/p��K� @�ˍ�З7���]1�~>�Y�X䬛Y��3��p� 9��㎨#�+P?s�f��\�|�����(B#1�[�+ Чѯ��/�F�J&k5$� �Ap<����R�l���mǢ���z����xEChvv16�:��2��6C�qd�`~n���7��ɋǎ�ڹ��ed�ӑ+ 0�Y��j�]\��e� ~"EN�ՠ�뱸�%/�`�K\�X��D�=�h��z���T����͘�[��!ta��NL7�G�P�^�H#I�1q��̴��Z(����.�p�;\Y�����g;�B�; (݈�� ꎋ$0�5�%u�}:�e�X27������M�E��f+�fp��^3]l�憗FK�"Og"�XrX�HκWYH��D�0�ժ�+���ػw��z�K]s�����F���g~�����տi��ؽ{���� !��ظa��|�;�� �,��+�r��YЪ�y�8�%�*B��`�%���)�:�ώ12=�f�-?{+eQ���A���?}�����~xdl"��'�h�;y�[6m\#f�3xo�i'[�l���O?�KK�8Te��Z9�"*��F�����s�-��w�{>�`�w0��>]:�{�}ǻ�� �����۶n��0s���h��lB|��� �(��T�0-\����u0��" j�f����]`��;����)�p�Af/�v�������~�!��3����{߾)�e4k@u����|�Fp�6���AR���C�hD$`n(��T�N��M�YӞ��h&���ꑴ��O��%�c�X?���*P��D/ +�����)vﺑ�N����C��D_��$�S�Cq�� �SRh4w#�e����D���g��;�����<�w���N����;¥r��I�ū,���"eD̫�� � ��"D@p@U!��0L��"E�'�T4�u��=�c��eqw�Q'/��1&�Mu,/�cD��y=E"o,��Y$C��<�r��jX,���j�˽��.+�'��F�GTYUY,)cA>�.����2V������&��:�ޣ1UN#n�h�h��be����Q��(#�g[���0p��`%�0w܅��$ �j��%�wǣ#U�ab����kY����8�R��ȋª�(�@F-��u�r�P�(���*��`0 /rV�@��, Y�a�** ��hUQ0�&&�;C���l��AoP��j�����F�A���>���}dY �՜�}� �Y������1�ԯ:@*^J��q��D�%Ǐ� ��2 *�,����2�Vi��VQ�DT!d��{��Z���j�0<��#����C����*�� VM]"���`"q����F !�����?J�3ǎ�w�v�Z�|�5Skҏ.�����$͉&fq��8���v���۔s�*ADP����Hr^0,:�NP'���)�m,F�O��P�}p��1f6n����@���}�)�� 7�w~1� _�Uݥ%�8�>���qQ�|��@O`Bi�ԅ��dA���:�bێm��������Agf�s��α~f��8���goؼ�Mgm�c��Ak�~��K#ӌ��Iv�.�y��g��PB� ��;�L7�,��q�-%��|k> '�ܙ3|����o|z�.nQeq~��_H�-w;��N�ڱ}�(?����P~���6sϺO��I^~�8Ѭr�i5�4�����qj���� 5��ʑ������9������۶��'N@�,7.-�W�����/,Й���w �8��/'�!�]����caa������k?q�S��_���?s[72P��gGp52 �,�/^C�;��3wN�uX������`� 3ܺ�V�ڛ��S�Ck�EN�|���ڼ���Jp0�={����>˾}��� )i��y��S��g_��Cc#�p�k��Ձ�����I-�@2D�TA��Te��4C�Y���vš'��۷��3��KTv��AƊx3�K ���'��M�Fi�2/S�^,�,Һ�K}}DTPUB�e!K��n 4jZ��r� C����@h�H���Q��"0u� $�@ѬՈ�),��`QiX-����j�q�čjH�eD�eJА������E��;#�*�ƔB*��j#��X�,�Z+ #V ��F��+G,��r �L�]����WW�\�_0�b�'�IEND�B`�PKb��\�{?H 6templates/hathor/images/header/icon-48-article-add.pngnu�[����PNG IHDR00W���IDATx�Yt+]ݓ�$�Q�P��m۶m۶m�~۶����چ�=�;o2��*��Zg�a��>��{�jX��_\�E{d8�c}�x�����R����dt\$�Qlhh����+^�iY%��� ͦi����ӧ?200�Z)��7�� �F�n\B���%��ĪW�$¿����ں�6�B��C�����ª`���r<�H$��J�P- �Q\J�f��z=��o�4� t]��r�ώ�Ç�W\6�������IZ���c�|����fՑF����DZJhlrrrJ��$�&LWTP�X�X���~�wE�b p6�̀iH�r�� �9�a������k#g�bjr� u�y�kCͫ9��g?�ٽ�|�;����=|���Ӄ��% �L����HR��ɵ��7�Zv�t���=@��,�x<~������G�1*BEI^�7@4%y cvx�������uy�p����?d�t����U��-� #~��nwK"B�YFFk[�����ov�Ðg���"�J���wÛh�\���D�K_��ߟ�'<[ք�7op��� ���m�Z�H7�D��xCPe�>x�����(�(TS���=�K�E2����EľN��9�>G��<;O��M `�,8p�~��VpAz�T��E.Z=pD��I��: �����f3�Y^�p>C��FFh?�e�2�����T%���o����|�-�/�6��zP�=P�V��k]�Z�h�&T-�v H���?>~���oF>p6��r9:�|!W�M�@V����]U%���9�y^�=f�nw�;���?[�C���_�n�<�K��N{���[��ˌ���N�$188��ER��9�6�E�?�l���<-}pMK��3?�i�Q�U�*eG�JtI\�X,~6� �fe�!閂j`>C�<�Q8�߷�uf��9��Y�/����>�W����}�{��i�\)D�^V�¿�)y%�.��_L'y��`i�U� �t-B�}�o�^�;$��!q���,��Y��w���j��V��n�kK~�R�ȫ�&�1G��>w���Ce�eF�t�P���f�rπ¯�����+� ~��ߪم_B��f��3�2$��OOO�~�_3r> �Ñ+5���@��T&����?0�F��B���b�鸝�q$V�:5�pT�I��l���b[Am��Z_��^kjjb鐴5R�3�*U��.����G��,C�&7E&�)[#¡��e�U>�S��#��|~��=EJ�@���M���1��y���T<N��q!ͺ7-W�Kّc���Y`؟Cq\K�f������Q3l.w����7�6).D7��M��s�PD�CU�7��K�m(���N�om+v�=Z��M��VI,�,n"$4*_���$O��g�8�K#���8˲c �W�:IZf˱ouƙw���3h�%@'{��Ők�'"�C�N�PӨ8�;���ҮD)!�2c=r�YTm�����O�< �0��}R���� 0���<�����,M3�^012�/�>#�N�u �~W鏋��d�V�A��jT�E����A k�w>�s��q@��b?��;%T��^��;jP�+�>6y�ϔs.6�Z����~H����p ��d|?�Z|9x��.s����#�����5����@0t���]Q�4Y������[�2��|>��R�Α�P� ʛ����zO�X]��]������o� ~�4�ܕ :L-�7�܊���栙�Pa�r����:�V�y��"���C�C�o�I���Y>��,*�x�G��"R���d��]��s�MK�"_A�w��� ب���%�`B!<�_ �C!����w���3�ԱzG��S�K�qy��3}1h�=�|�! L=�)X��_��*/�%��@Al�e��!���7 ��l�bg�>1�͑$��cy� �Kh�.;�C!k���� ̦f�����:���N!syZc����6�o�&��g��B�.�����D!����*7p̦���`0�P8,ǻ���=������2�1TZ�r4L~a{��Eۄ�����`���K�W��m�7��@Fb�>�b����=Y��vi��K�J����z��> ���чmƗ�w?`H{i�=5��{��Z�ɾ9��_+�Pm�+��ow�3?�7IEND�B`�PKb��\� NN0templates/hathor/images/header/icon-48-clear.pngnu�[����PNG IHDR00W��IDATx���sSu�#;.x3���c[ۛ��,U��;�q,H�*h��h�ԉ��NtXR�r�,[ ��k�}� �N�ݲT83������_� �a7�2�O7I <�n�� �/�V�υM5� ���.��N\��/}y�w �v�7�3pQ&�A��F�{S�$|dQo����,��d�7-ӱ)/��@�Ŝ����=:)re9�ucH ӗ^��[M����Hh+�:����X�߱�1�90 1=�;�!�}�þǯp,��HWJ&�I������{!���u�i-K|��$�Lg�C��:vE��K>��!�����q�\ή�\�,�u���h7�<&��˘�Z�t,�ӄ��#��?��*c�z$�%�U�H�C�S>��y!����Q�g��s��˚#�7�; ��B�>B�&t�$ �a~����A��\k�-�� ���'s8�)�%��z�84�o'>��P$�ᚾ��� 4�5����D_T���'jDQo��?�3����&�>L��벥��q��mR�� �\S:����� �T?�s?v���a� |8���K*�?��N�A�� ��A�5��K��4ЁqO��ء�|�h�z�T|��ړP O�x�}��ʰ|�3q���M���U���|��$�Mc_�T&Y���܀vh*�i��c�ŋ1�J0L�{Li�9�����.&�D<�d�Q(�&�9��£~�5��!�D<r�!FTJ3}gT�n��V�;FGG1b�*-�[# �2�'<����U� �1��K��H���#jP5xsD-��{mX��� ϒ��/;�u�Zt@����&�+�G�2l��*���Mf���*�f��/�� f�HT�(���/@�-C���V� t^j�E���6��������_dĖk��J��HJȣ�s��[&�r.d�V��nD+�rD�9-�~uo �2�E���\���C�:���Ս��v�J��: #8ٶau��?�9�1b~�і!?�2���P<d���E]ƃ����r��M�@s9�8$+�F�k�9�o�6��#��:�_�lMy����Y�_�{��+lς�b����&�X|��,q��� ��gB: +�b�>�/��ˮȇ?7܇���˫���a�\�|&d���?��ؒp��r�]*��>�r�9����8&\�[���sU��1����4��2 �C��Z���(�Y"��T3�W�6�|����u�� �M?�����s��5�1 )?"�P�蜋s�fۂ�%n�֟�b[��l�7�Z6}�F6�h��>����Znss�<���#L|2>sY��xvXnK���rpg�D�$��:D� �]yPGSb,�/��.2n\$��r�H|7X V�Ղ�œ���&XR8�� /继 �*n���1n;1�h�l�"�b��yP�����+���E�¼����gN��j��3�EIEND�B`�PKb��\K� ��4templates/hathor/images/header/icon-48-unarchive.pngnu�[����PNG IHDR00W���IDATx�We��6,�4;�ݡ�03����߿�%p�03?f��=R��^��ޯ�e U�[�.l�-�%��D�%��40`�3������0h�e7�2�An�q �rw��{�$|n0�Pm���>�b�}����R��.|�{�˗a�S�u ��ŋ1��1���l��Ȳi��8HI�iCk���qew���QU5�ϫ ڄB)�zY���[o�c-$���*�p�X�F/ )����-�uU��+���o�qH�� !�`�B٬,W���ip����|`P�l^B�s`�4���&�r�)�������=?q�`�b�4p�2 gPpx=b�R�$����V��A��$N�V�W�eKC�WD�,���Q�<y �J e�E�ӹ��@<�3�J��1�M�1�nw ?� ��f(�Sc���8u�Zǫ&�t`��'��"�� �� lmnb0������"�qژ�w�A��ʹ��C��V�xx�hOw���z%��]��Uh0����dBF�Ę�o�|_��ͯXHD#n���[��D�gT hErVQv������ ��g���_7��Z�4���� ��L,܇f�F�&(˒VZJYdY���?� ��ǟ�c�̙�h �Cx����)�eb��O{�'(�����R2���kg{�<�v��p��9|���� ��B�L\G���,q2J��eiF�b1 �����'���8x�<r� h�Q3��g��1���SV��Lh�Zy��p����/<��>����D���(�� ?�v�JA�q��X,T��i(_-�;�G{�}.>j@�O��ѳ w`c�Yk �d2!�� KS����6�YϺpM��" ZA1��+��ʌ�M�0hp��%2ςL��?�,�������P��+��8E�7A�c�snkk�V�ӧO�v�G��ݏNѱ;8 :~��m;B����g�A6� �v�t����=�,����W�ԩ�ȋ'N��p8@��smnm�@L���*�5��b���ZL��&� �eL+�Gt�UZ3-��-ȫ/��\E��Md.4���n�/_!N���PZ)߮�c�J9�N��B�m�{���ϳ����Ň�������)tT�x��[����0(��ó�g`6��n������MC+it�����:H�~��EDwvʓ���E��ΰh���P7����,I��5m۶m۶m�ֶ�ֶ���n���3�?�LOu%�D�C����k�%� Oo�l��'���=}}�{S� �s58�ȃ:4YySJ�( x�qa�u䦶��t�Cje����p��귾�1.�q���O?�}�����L��f�Ɏij�d̶��b��J%��r��/����|o�y����BN\}�Q��uw����δSO����u�o�9��?.���+}�M7��_i��Sy�R����f����+��6+2��i8|x�����J��z��滟����q�ƙE�M2��S���3s���x\g^|��&�lת�.��^HSN6��P��<�����;^����U��,0Ϭ�e�il�uԾ9�V��~�}Ɵ�cm��jz��O��������v�aG�Ke�s�����Jg^t��V_qq�t�N��c�!���2~ψ� �yL0�>�h+f�Da�Z�g((�ȏΉL�[�&�A�?�n��(�z�Y�������@����Y���W�_{��\�m���8zw,ɾ� |�H1��s���"k�ˆ8Z<�Dq��)G[��E$��7��:�Нm�گyDϾ�<U��M�k4`��}F�w�( ��G��b��KI6C�r"��P�;��`"_�^0���u#��p��5픓�;;����%z���q��c�7�5CaVI�zȐ���<�f0N���C��k�=�����K��zᥗ���|�m���~�Yc�%|�����a߁�&��J���CV&�����ۘ�e���l�$(n�������m���>�3�R�/C.S*�z�cH'Kam�!�5��]�� @1�j��eI�<g��@�Ƀ���|r��|�9f�E�O3�&�h�h�>�eoRs5�D�,�D6.�R(��l�!��sńf df�g�cl�Ѧ�غ��7�H�M:k�J"��"�h���hnaIP�l*x� ���E*�3J{`�i+���Y��J�샏=�n�ȯ��~���4�M�p�9e4j��[9H�ᡠ�P*�����������ʐJ�¹���g�]���p�y��o6Q�\0���H�|�ڐ��B��'0�HeX�!�0g�?�9 [� �e�B�����q�����"sq�`Q�R��e�*{&�%�$ ���Ы`���f���_f9�Y�Ϛ�(J�l��� ��?W��c�����/��B1'`!�S�ˮD��|�/�$���#GY%F��k6ǗCBa?����*�v����n���m�d�����z|ׅm���ps��� :G��;��-e8f�2��m�1�56S�h��o����O=��n�E3�2�K ��8�N3�����P���<>�/�� ��f�gêe��Jb<���{��j%St��6��/���Vm��kF�@����4�M�Y�s�������}-�ɣ\��k �ύ)�|�5 v7ܨWVWߪ��O��#��Z�V %eXc��$�Y)R��CL&�#���9%����vq}}���#\��css�l��@�����@ �4�F�K�p��C�75�{w_Ka���Z�4��o���h�ޠ7L?��El�C"���=&����g��������� Ǡ* �IEND�B`�PKb��\��?222templates/hathor/images/header/icon-48-generic.pngnu�[����PNG IHDR00`� ��PLTE�������������������՜������̮s�džŦk�ˍ��M�Ä���ݾ}�͔�ߢ���λ���T�ٜ����Ύ�Ɠ��ո{������έj�ůŤc��Zε�Ѳs��W��|��b�ɑ�Д�����J�ƍ��e��ƫt���ͼ��ܜ�����Q�ȋ���ƶ�����H�ӖȩjЬeԿ���lδ}��� _��������{���¶�������غ{Ž��̽�������ޭǰ{�����yμ�����������ɥ�����r����·մs�她��������ػ�ʸ���A�ߦ�Ҳ�����ʦ�̮ [Ģ^����ו��Y�ɵ��v���Ƽ�������ʪ�ǵ���������������Ⱥ�����ţ֭c�ʵ��(�ļtRNS@��f]IDATx^��C��@��M۸�mm۶���:�T�w1�y��|ϩZ��o��~��~^�.��7=vP@P��|��$U���gX�g� �_}w�1��Ak�J���w^�ү��*�\'JTq>� ���G+�f�HMzJE�)L���z<˄�<���Gs��%��i�I1ȝͲS��I�G�)Le������� ��<�~�[��Q���/��ԖL&�����"u�qZ�M�T�v���H�]1�mֱ�,�� ����a�H�uM�,S,� �O8�.iz� �#0c�� P�*%$��t7BYQ�y�E��6݁a�\�����s� �o���WC�v6'l�x9{�Ȫj�N��@���;��` �64Y�,��Rw�hx#ެ�}K�-��(�F�E$�R��B~ֲhCsƽ;�l ��g��l<� �ֹ�R>x�/�рSϧ�y� \N�G�A�#2�b7t7�h$\��פ�i��k'$������n`�)�E�)��B���P.�?�b�N��\�:�K��{!�]��)�*��TE��/�2P���Z�T��tB�w@ET��(��?�}��>��IEND�B`�PKb��\�2�F F >templates/hathor/images/header/icon-48-read-privatemessage.pngnu�[����PNG IHDR00W�� IDATx�Zt#Dz��Y`df\/c��y�����m�0�����̌^,9f˖-��Я����x�S�s-�������v�$A��,��a��q�w��L�������e�( ��L����'_��k^��ǭg�}ֺ��;Cg�qƥ����?��PϏ�a�v��.���{�����7>����hѢr���b�&''�u����y睻Hн2��@�xxY�D���a����~���͛7�\:���06n�8�e˖��뮛�|���r1��+{\���e�|�i��v���u�<J�e�����4B�hDz��8�s��ݝQ�v"Y�x��э�<�?���ʼn�i�f������ʫ��:U4*:��ިH;Qi*W�Z�}衇^�bŊ���F� �F����b!����4�O�\�s1�3*;+@�����_X��o|�\�|Oee%���Qa�2H�aÆ멢���Ϗ� B,��W����K��{�r�ۍ=h%C0�Jadd$���O�~��^ !�I����d�����|�e�v�<ݥ�z��Go����w1B�8������G�ӏ��Z�`�+Qfɼ��a,d &4]�a�%�{�n�喧��(T&�;�>�}���y��fPu�F�HkDX3-�.��_]� ���eK�^���$�u!�tQ�C���d�W\q�A��]&�i�t۳i�a������;C�«��t�"��===��c�8W�k|Ϛ5k��g�}z+**v�|4�"CDcY �\9�@*��tq�2{-�'�A���o>'�QWW���A�ǚC9�b�|��((�HZ%bf��MZՙ�KR�G��,,��s�o �hm�I��%�:\����?��R�\��3�Q"��F��É����4�1��\4�κJ�47��<3�$R)��k����ʕ+W~�� l��Ȼ�(6��� Ң@�}~�1Z*��u�|+I����~P۲�G����px�/�������<h� ,If�š/MnF����R�o%�;hooob�.%�M�:'�|>�b)V�:��;SID5��3,�쎼&'�����&o��H��*��<��U�B2-@�mmm5��y��,�011��pS�ٿK��bSX��ώm�0�$.I�������E2���c��'���jP�����RQ��"��U�cՆ ��%!��/��@��������xqK��a~uhu>�G���Gy�����6B7� ����9G5Y��|>��L��I�JFF�z�d�L���/Y�<���u��!�����ma�7X����c��p����7�ٙg�y�u�]w;�I�V� O����Ԏκ�����h�WY�3qhePO���G&��W.w��͡)D8(��=�*D6�`}>�-i�>>g�pڛ�x!�wB!�s�ݶ�C%D��ASx_Q��� E"V�v�qkhh[�$ LGH$�˫`j* V�|V�=]y�]�ji�6]���`��� �&��L(��H�dq�$^�z�[Y�$�R�?�s�=Gu�� v��"���ʎ�7C��C }f!���~�z�`$��1[-|Ċ�� �1o/��<z�S��3��� F,��U�O�"b��4���� �6��M�0�Ni5F���ܝU- �r�ö��D��F���092�*�'U�@�,��\�HШ��������� ����7Y^�7n4Z���MCD>��r���R��Є���#��f���I�nx�3x�h9�&0�؍���&��=,6�PK�>TRn�%C�bJ���QM+-�<�Y~w������6�fvҘwGGG�p�B;�iǜR��d�ڛ�=�Z��Da�� 6l��T�"�-W�T�U)������i��[�X��2�L�~����;h�#���:���%K����ȋ3�=A��(�46M�(\R� �1fac{�&ot0�sh:�@�R�F.Z��-�3��}>�MrU�!�Q؉�n�p.c�!,ii3��g�wJ�x���%a�t�`㶘7�m�5������2�A�bP5�o�ۯ��Wz�x�9&�r�}����ǎ��ac��H�X��>I�w��aDf1и^]��.�@V�"tQTB�2�eM%$4&���m�^�LE�*�DT��L䡡!��TWW{��Fk�y��?�uA��m��I�&n����{� ���DE���G�9/4v�2��g#�QR��YYd=zI�� !&`Q��5[��Ó5x�c5��l��t1Ң�9@�c��u��86�������^�a����+�Wn�݈y�ȳ��y©4���,���bs����jT咈3.���,� ����B-nX�F����vՇ%��}H�X�Bd�9��f1;;��!"� �D�i]��x�鑧���O�C��I�ͼD�9�m�W@�c$T�>l,h��zn����O�*���<�o�(��m��P�Itvv�lN�8V����0�3�x����M�.��F��� k�P�:�����.���&MF�2R|J�lhx���n0�y��� �4���� �UJ� ���ur�)�eee ��[ƌ��k�e*����dQ$�b�R<66^L�:�6Oi��e�A}������� B��ᅫ�D�,�&�I38d���gVB��}N�>�r�rd7~��n�<�,�]t~P3gz���瓚Ì���B"L)�&��<msG�LE�J��c킽� �f�����)*����Z�n�8_ �����B��%ջ��O}�+J>�Oxk�A�0�V�~�*�B\�ݲ[���?��ݟ����9v�!'N�^B-�����y������H����@ᱱ�i������W���M*��/�y���x������h�`9LRr6mU7�k�^��?��y��S��y�y�0C�r�#�RW_}��Ԙ�C�V�0�TB��R�%����ԍA*GA��X||\����5�ِ�? }�?ow�bGi��T�;�~sr���/��Se��yc�!ɯkB0��A'����� � �'���J�,�c�� �V��]�6�Su�jB��0���JX��U�5�ռ��c`�w%�˯�H�v&$���k?�Y��#g�,@�08�"X��������rq�p?��k��w?�T�'\�)HN�L�@L`� k��dQ��$蜔���Ut?��#����s�s�!�dv���␄�-�9#���c�����?���"�VIEND�B`�PKb��\M��4templates/hathor/images/header/icon-48-help-this.pngnu�[����PNG IHDR00W���IDATx^�YtUՙ�����M ��,(0*�XJ"8�BY���e���)�����蠨�Bg�]��VdX�uِB+aJP��$�����k���p� ����#g��{�{G�m�$I�Wm'N6�(�1��h�2 ��!f�y�'J]�YC��c��*|���U|�V?�ɵ���I�( Y�L !���e[˲�-�*7-'��׳�M��C�B��*q�Y[�� �B��^ H�'�`_8�>�� e�Ŧ�"�2�4���ڊR�!�a@����n��H|z�/��a}f�;B6XC��z��/� �<T5/4"� ��ª�vC�����#{�缁<����<OϽ!��<[�e�XQ��Z ��1�� {���/¼xJ��h 8��3l$GD����T�� O�WY$B��jة�X̀,z��B� D�� �)y2��~a9HL\�]��3�i���'��O�� @{��p�o�.yau�4�;\�kv�f�j�������ˢW44��r{O��X+vb�a�p�K� ��YM��]�y�S�\�0y�c�N[ne��&��'�)I�6H�z$d��75˲D��Y}� �ے؝��e���-aR�N��mg�2�9*hy�ح8iܥ�!K>�j>T���V$ ���J����>��/�ô�Z��7$��'X�����"~����*'tă2��A�� r^�͉�}� b�� ��B���BS"���Z�,�=��U^�����m��4W@��K�[�Cȱ��=!����i#��"ښF� ^��H&�R��?#��5��������30,��YA^r�`�*�,a/t�����v/d#�9�J�p-�5-�SY��,YU�ꦵ����V=���J���,�J�Fe��l�?�}TQ�ɢW,ʶY��3���wxӾ� �[�Uh_+�R�|�ǿ~/�u���D6��.��R��0��G~��e �hus#��;*"o��_�eK*4n����<�{�Y0�����^� �қ�rUU��0ԩx��f��6��+@��&�щ��� �5̊Ǫ�9�=��"RA�V+�a�{h8�%�_L�gL|w�����hM���`���`Ȏ;��������Z���'BO�I��V� Y�%�S�غm�5jFYSx=*���|hc�!�C��pn*Y��N�8�^@Y��HnS�}S�$�#����]H��n��"�n|�ނ%���T; ��E �eE�ܘ��Ȃ/�� @�ܵ��Rv��ـ��Y�k�����%����{���u �$�1rc�cv�x�4�GB9R|�BGr 766'sh��b�7 ��@�u��)D"h���k�)ܫ�Չܹ�>Q�R6jzH\&(�N��J~��嚯��yyy.�l6���455q$��S�]s92r<��[��:a���m�V��{������hnn�M\�EEE� �s�PRR���2��NvbA�'�$�KR���ޕ+W�ߺukUaa��A�!??Ǐ� 1q�D�8�Ǐ�UVV���N�.?��u��u��;�Fm��{2�.�X�y����y�� � �Ű����O~�Y7�"�J����$�HĚ�p�$v�ލ'�|˗/g����D̑ј�;j�\�v/@,e;~ �_���˃�,O�ܹsU�>}&s�saw�}��Gk�B2 ��DB� �l.|�K�䱳��+��l�,^ �ӧO�0cB@6�i3�ب5�mu�>��G�?��/D��=��&G�FR�O��n8����@CC����}�=�"�'/@xl´�LY���G��琎��G����a�ׯ����`�X&/��A�E�G3�|s-�kg�#"~M�WU*�,x�-a ~B�ȑ#�߿��ɷi�&;v�m@� �y�G ���� D1DZ�0�uR�!(��f�_Emm-V�ZUU9/XL��L�t�xr���nF�ʩ�o�D�U��1����^U ��-�O��X?���O����9r�ׯG~0�h$��] �`���g�����x�j���A4�>q�R2�$�!�� 6���BH�Rf��� I�� u��T�H���s�<�^}�BH���<0�Č�a�'�7<�Q��iӦ� �{x�~�W�'/�[(��@��I�Xs��x��7HY�Y� ���C�1��?��xT ��^��o^�J<��كq��Q>*�S�t0��߬2�J����D��![�DPd!��m�F���[wg��9K�/���yA<%��+�Hx�T �߇�B���y&@�;d�.���c;q!�[�5BC'"ڛ�m�LX�b�H�K�.�f�G�MqWi�Yg�p��p�,#�k� /���u}?_0��]�xw�6]�T2 ��B���O�"m�PP���ϋ�Z?���~�Q��KA����bYb�� ��i�M�̙3���;)�+�L��3��ն��A�Mȍ"8�B~�}8�:DQ�,�U�>�b��(:�$��|"���!������Є�U0 v��ذ��eۉ��ڵ�pZ��k�e��-C�#�H&I� �H2�ۼ�$H0�M��&`@��i�DKkR8r܀���M�C<� '��9�/X����N���'7�iB���N�,� #�{�i������w+V��^T"�Ӫ�G�&-�XB��`���H��H��,�_(�5��}��'�P�G/�������w�q�]l�!�[�YfdR��U5$�l�1����C2���3Q�����Ϗ�<$=�5��9b�� �=��O�~�10�,�g[H7�4E���1x�`6�q�+�h�t,Pm�z`��"6 #���dC~'Ғ$��q0@i�v���B��E^�a�2�~Z*?ǣ'�E��HG���Fa+&���w<���gP�do��}�i�g�f�P\c��P��4� V�l*�N�{è�8y�<�>�RK�,��z(�}����0,A#�uw/��w?���"ꕑr>|;���<G��=o#zh+|�\�1c���ŋ'iS��ȅ�!�eBD!"*���� νb� !��O��U#�>��1b���K�b���O�a �%��3d�F\��%B���G/ꅄaCK�²e\y�P�F�/^�W_}U�����{�g�@7�x�Ƽ@���l�U��0\O�N���2x��*::�et͚5���Q�T �ţ���r$/6�$ç-�|$(a���|E��t�zr���M�3F�S��ϼ��ko�;�@��}0�bvI�p>�?yݿԄ��g0���`�\���k�С�ի.\���3g����Ɍ�}��;x�P��-_"}�(B�O���2ڂ�w܁�;��q����'P����Y�&=��~@��'����3����LK�{<c�3y�rСF|������.��$�� En��|~�8��[�\rI����?9�|��� 9hKn�+!��!R/��&���M{�G� 2�t������Ω:��|ii)�p}��a�߿����A*��U��E!g͚��S�bҤI�v���lUU�3O<��VI�N���]n�"W�}�^<^Qu�V:z�I\��Si�l �8�L#�e��M�섇N�>͡!��ۗC������,�����-[�.��c}37$F��\!�|����>P�-r}%[D�oS�$DI�Rr����iY-���6��<R��d^v�7z����+g�,����^�E��v� ��6���[���[E������O9�W�9+�����̙3n 5ʑ��i>&C�Iڤ�<I���^�r�C<�� 997�:�c�;�K%���#�CP�y�vș���R�����2�s�C��sz���:B<��+@��f���Wl�y�7�KIEND�B`�PKb��\�(���1templates/hathor/images/header/icon-48-groups.pngnu�[����PNG IHDR00W��KIDATxՙ�$K��Yjc�����xm�l۶m�l��6��;��A����eVLE����}�Ŝ��T�f�S'O .��s�&�H�6�y�R�bW���,�"�H���a�.�z=<� yP���x�s�u_�u��X9�cB�+Z[[s�hkk_-dzz���1����Y�iA\�v����z��?kM�G��q2�!���m;07^��w�$ X)%�B���-�M��]CCC�����f��ݓ��ڟ��l�L���W,S�������0{���099��ࠞ����7�Ri]<�Too�U�끟"��#���I�e��y�Z�ک�3뱏��};+���Ӝ:uj�x�%0X��.Q�5k�����'��L{���D� #��Hg�e�(��7�#�<���H�֮]�֭[���oy���4�/l۶�����g�ik{�I .��~��_�}�U��'��""�$ީ����O�R���ٷo_����n�7�u �R>�{��D*��V��+w�:�����A�K ��h$"�!q���=��:��%�c�G�d,����ʄ ��DA`����M4\p�EH���8��g���+���N�[���p���ׯ�����1�;���,<4�Ɇ�0��4�t����g�Ν櫯�z7�^J�o�`=��6�(_����/O���&h3m��eƫ5�ǧ1 �>����c�,�J߬[��Ce���i1���Q?f^L���!�8A�W)�|�?�,SU�\.�H�&��M�����\zY٩X,~���ĝ�g�7ntt M�6�c���)@��t)�g�8p䊛X���m��\�j�מ}�����\IO>�R�L���B�ߢs}���4A��o�HȅC ku>|��Ou~+��|5k�LҎ�c@@�t\~����|���k�ȤX]k���Vw�+�/5�^�fs������7R�V�+�q������q��Qv\���&˼0V�Tд�M6t�ٹ{#�?~��<���,��JJ�70�o�Yg>�M�$�n�:j'���n��3/���a�s�^n���X��%/IH��ʉ��)�m�8�O�m�t�%ga�to эl�JW/<xpފQ�Ҩ���Ŀ�Ct�Mb%l��I4�:��\��l�M.z�eԫe�A�,J#�N���|�%�jɲ���:���� ��5�����ed$Z(o�n�/�*���H�o��dr�A��+\�~���C^`:1N] ����y-��d2���C<Y/b�|g�q��WpR1d��lr�G�= ^_Y�l!i�ժ�,A¶X�\�sc`G2���,di�̣���z��`'l���K,ɬCG��W��7<�c1�J�ޤE6cD��M� ت?�N��OP��X��; ;��MH@�>b�% �S'��0���;;r���r��t�t�a9�%���}�hӣ��o4\�ÿGr�S�ZSH+��I�u��E�����ͪ��P�0N:�ԃ���Zq���r�b�E�l����MӜu��w� R�_%Ӛ��[��l#�6%�?)X�F Y��p��8�0���[�� v~�g*ص"��nX� g��b�8`���$�5\�V %�D��r7W�5�+y���R���)�Z�Cqb�#�q��cD����|�e���>��G��jT�J��Bx�7�K���8�5�;�Ö5��ޜ�1�j���0�\���c����������_<�F�E�*q�|@ }���[�Z������M6ała�T�e.�Sܸo�9�րaRʷ����ya u��:PAr�6!g+��Z��m��K�)�\��dZ��S�Jz�$��ڌ(�}m� S5��Sr߮*=�\D[^�W����wɷ��T�����\Z���`���$�7��2��01$��tqg��E*c>=����/<�O�m�����z#�x�/ɜ���U �M���H��ĕ��W8����+�F2��� ���C�iH�G�Z����)���n���nػ��d���s���?~Y����q��������ڧYo��m�9u�^��+��pOa�7t~���|�#�-�I�l9�hޜaT+*�2�z[��o���l���^zI��W_�6��{�}\�P�B����a�+�Ͼ�;�6m� N�6s��p�2ʼXJ��_�[��c>.�&+C@(�C��4*� ���|ݕht���ƀ���u����i���F�!]�i:��ߍ��p� F�F9U�^���x�Q�Ys=�B��a�1�vn���C%,a��1<<p�XZ��;U�����C�c�v$t��]�zM8���1�<�-�i�Z� H����d�3\w#_8q��u��*�/���S)���R��ٶ�gD-��+M_�f��< �ӭ2͙3g��?�PW�Տ~X��}z� ��KK78���$��|�����7�yJ�//�*?��|Zh�E·f�)A�e��1�=�'�:�^���>0�Tg�3�yt���oW=�����7���[�����ۘ�-�Ҽ���c��#������.����gϞ�g��n}skv^���B��yٶu|��c|��S�5�k.��~ �X� �3ᶲ#�PG��=mܲc-vir�&�_I{�xlÆ �V�^���'ڽE���/�嵡q&�ϔ�����m��1 �E[:��u����`Kw�~�ıcǦ�5���<uct�Y|B ح��i�7�}���:{H:?]�szb _J̍+���c��=O&c)f�J����~60���x�ЏK�����TG�z�^�y;�5�QBhjc�\��S�����1����/)!ttt,|p��855�ʀ���v�;��~�}1�'J�a-D b�5��Oa�~ ���>��Nψ�I�S�=����m�f�w���4&p+�]*.���2m��յT:��F8��T*zC�M�� �(q�,Mx��� ��fEF�o�̾?w"���/a�*?�k�@IEND�B`�PKb��\}�<��1templates/hathor/images/header/icon-48-search.pngnu�[����PNG IHDR00W��lIDATxԗ�3]���:g<k۶m�,,~�(���va�����3�I'�4�����|[ߩz�\V�o���<l��H��#�BN��^�툄@� }!&ֿ)�j��vګk�ڃ���=]םaG�a�Z��7���_����%`] �À�W|��O~�mo{��o����gvv�J���8DQd�79r�F�N��<���~�����G?���ci��O���ԧ>�"�Vw��ݸ��oM����@�$[d�!�%�8t�k�+��w����wh �� �X�կ~���ǽ�Z�z���}��߮`ݭ��ݔ�ea�n�O$��Kx��B������/y��_~��I���<�9|�������w?���������ݙ^���M%c� �Z���M|�������(�*��w=��o~`M�@J�~�^�)O�{~��?Қ���YJi�RF�\T��s�ɕb��=F��E1�t����<�)O������5�\s�|inu��ݞ�ovW n�bʢ����Fv,��,h��6���w}q�L���T�{�}!P�Ip�ڝ�|�����!�C�y�lZ�ȉh�A�F�&�q�ɺ���aB���z�_�p 3 9�����r^6�r��.UG���� ��2�bk�5ۦ��f(���q�{��@~�[���s��aiΈ4�D iCJ�)K��:n�5�dF��Ԁޅ���l��@V~Pw���~�k*��H�X�����l�QsjT �ɐ���w�e/{�}g���^�r�-A��.A3 M��kې1�m>[� yL����s�m�}ʥ�b�C�:6mkh_�t�"�w��c���i�~۱Q!*� #ڐDѱ�� ��ɈD����hfw�f����!�z{מf����6�����6�$3�D��,�@ojl�h5��ĜT�T��~4z��Q ��@��?����0NLcA���4�=J�>S'H�b�<�U7|�C��ۀ/�䯣W9��D0��-#jBE�`A��N�E����L�`YG��Н�#�ԧ>���p��M�� ���~��&�)��1sB4"�'6��_KKK�T����7����?��h�{ S�;m�AH/L������=��%CY/���56���v��@0 �Б���v{ ����;��s��.~?�+&|EK"S�(�9����sd���#�L�"�x�5H��@����9�8��KP�&��l��������V���o}�[��p� ��h�?n�P8餓�(��Ԅ��[!ʕp\OO��y1��b�@?��4;��j///��]k��$�k}�m۶}�ٶm�����Vt�m۶9��ImRIf�?���zݯ45�w��իC�9r�d�u D�1^-��fs>�E����G#�p<�/n�Ϛ�&�?/��֭[���n�~�U8 ? �����zٞGC,�%R���ݻ�BCC�-J���=��"8j~�3��UҢ|��GO�4��ѣGC?~|D�Z:4'#��.�?�9{��;v� 5���ݻ���5��첱bŊ�H@�pU�rg�b��u���ܬY���/��!n�����w��ts�̉+T�P͚`)�6>d� �E7d��96��Ugd��q��`ȧG@XhO���BC��������l߾�*]l���0,~�5�Hpy�����p����z�r��M�:u�H�~�� N@� 80 �a:�>�I$�����lCQ�w~7ӦM$�t�����gϞ�[�l�\���ѣGc�XqOh*��b�l���u`�H4i��Y�z�B�������Ǐ��ر0~P=��f�p9BK��Y2�fذa6���V�J�)�4�TsTɕ+W�i47� N� A��i*�(`<),:�_E���&#` ���<{<�m��" �X(�X�4h�\��{\��9H�B�t����W�^!+iԟ��0n==�b=x��C�֭[�(�xZ���0s����Q�yߟy�G�yރA�! $d�Yz����Y�flذa� T�V�6�Ǐ�l߾�B�ә�~��S ��W�^���˗��_<�3�`5��xM�g�T?�Ev\�T)IEND�B`�PKb��\��/##4templates/hathor/images/header/icon-48-frontpage.pngnu�[����PNG IHDR00`� ��PLTE��������������������̦������근̝����������������·�����ǫ�������ƻ������������д����湺���Ž���������㻼���������������ް�Į��������DJT����������S!�����핓����b`^v5�����:/�����ԅ�����Ž���R"���f'MJGĎa�J�{hshS��� ���ZZY������ �r/�e���������HE@�����>BM�ZĹ�k^I����xy{������*#������ƾ���� �y+_T@����U ~YE�����й��CA<���̑bxlX����~n������������s_���& ��w���RY0 \Q=���������_HUUSQ��t��kҾ����ckt���������k!(&!�����ռ[�iА]ZIDJGB}q]�yX���E �����ɩk>�N��o52+���cXCEP]�ua{96 x3 ���a�����{�L;W ���0'?89jig}O2�����t�pQylV����p-ncMYB8$$!���XZc����������K�}Q�S+�zt�n&kZB+���uml��|b'�tRNS@��fLIDATx^��S�3;��ɰ�mwӶ�ڶmۇ�m۶�yN&�vO��k_�u~WI�����3��;f�]s��.�Q�d$�;c�+���x<.��aI+�T1)mF`n����5s�� �p�9��E2��&�U�m�Vt�78�Pg<*���``��G�@|v��,w����ܳ�Ӊ&#S6��D��ϧ8D��7�{4cWx�^e8��1�`��w� ��g����v��D"B?�����Ņ�#_������1�G�����{�F30p�F�⦖�>V������10l_�����ǚc��>( ���C��(���mG�jo�߯_��3������"��ݗ�V����{���ӏ.���v�X� 8�Q�X?y�7���E�tK��v�1Ǐ�Kx�=��)wU3��+�_h�뮮ڎ�� �G�h�4�~����*�{����\�v~����%��m;aO��t9y����9�ѶE��m骫; s_�r�Ef�1s���qض�lU7x�)���O ։��.��7����\d���χA����`��Jkk�;'0( F��:����##o�$!��쳪'p��_���^�D,�A��3���J� MAL �X�`�o?[��u +��S�q-@�����Q�`��V��U;|�Ѓ7�uӷ B h$@;�T�@�rQlK-}v���+�B$�%�$y�W6��4m� i�9�jC m�2(��:�|�18��2�D�Q�eJ�lJ�,�4�,JH�RLY𰉇#2n ���$#U����h{�F��i�<ϣ�K��KxSV�U�x�U�������?�E�/-�9�IEND�B`�PKb��\��hh8templates/hathor/images/header/icon-48-banner-client.pngnu�[����PNG IHDR00W��/IDATh��Y l\�����]{��'v�I�1�:4n(�iEi�����$*("���*Z������H/$jJEU ��AΜ��sxcǎov������Y'>r�I�fv��������\��|�^Kj>]�}zRka�X���'���G���y���Ȁ2�z-́K&�N�������=͈<~���V�� �f�i��%��-��=� ��p�o���چ��� F��0�+�����Z�'�F��쨮����T�RlE���t����g�*s`�m���~��l:����{�e!p��w7�i�[������?�O>�O� ��,��k+q㽫��}8�'ML��?z���}� �������w.�jP�|�st�D��X<��p=�y�C}��i�?7m���KM@��5,�v��g^+JA@*QxJ���W?F��i��p)�o~�`㼒�ڛWT�u�q$u�(�CJ�����;q��;���4�w\2O�r���ck��w��g}8��������햶�(�w��=�B�����T��k��○����P��mX��$�[���ͣP5}�k\翨 ^9��XC�Q+�(�I��$��f��1 ��t�m�m�ؼ�`������va�ω}�G���,Lp!�+��=���ўS��&l�K]B�z��":n*�a��W��`�a���X!&u�n@&@RՑ�t��<V}J/���{(��/����ꖕa_[#'6����� ��5+�o�R�u[�6�����0DB�*���Qm�Yk⤠I�Q��$��(f-�"9x*i����8M���N�\Ih��eS���q]U1�U�ݞ:r�qL�T�Ppg�:X�K��K�"�,<������5��,�<��>o�K�R�E���N�� ����9�7��p��@8p����=�f�"$�Z��)�)�d<.�Ό���S���!�h9:�"�RxDPJ8�p�1<���B��� �O$a�TI� �|g_��g�E!�f��ְ��F�F���N3��( ��<q����E!��/i���ww�Q�2���xrN_�*d2�U"�T�D̓}q<�evޯ�H �T�65p�/�[|�c*�X(��1.���r��'�<�B�ZU֞���/o��a~�� P4q`��1ԗ�*��Y�9 ����x�u�"�e�+�' ZTҔP��aW�w3#1J@�� ��&^�,��g*��9�S�)"*E��e��K�V�T�>HB�P��?��P�F��T�k� ��:E(���L��'�[XjG�H��l��qGo����o�sjg���7x�����%k↑7�[��L$��3��u�"�H�|��Y'Xfֆ�uA���8�,85��kE���5.������`n�>��>�f��"I�Nw\�]�QP Y�i�c���V�"��p��q���J, �����7=��&���<�o�Z8����!�G�����~<����bX�2�[ ��s��f�ɬ c�`��� i�X�"V.�@��:�p=}�xh<8倨����iṼQ�e_?X\������J� �P�D�,���!�Hh:x-,bE��eC���� �� �V��1M�I�RL�{`�dW�uvX%%U��"���e�y̸���I��/��/�B&?�9 R/� Uǩ`��H7� ? ڴg�PC�0c��/4���FU�5�x��/)D�Mı���\GǕ8�R��)�*߭�[)�k��sÇpk�0� ���D�@&��>))i���а��ț�Z� �[L�$:���x"m(BQ�$�,��ڙ�D�B}XhE�r0;QL� �H��d�ƹ��<�i��{�Z��d6�i�ꎑ�j��#� ��2ܥ�t!#�ї����ӉE��@j��,�� �t�)�JPJ������*ҰU}w��x����d�VH�*���I12H��I��X��y��-D.��oy�v)�%^ ��~���Ӡ�����0�����@��2 ���*�,cfy|~Ȯ(&/ �J�����PD��QQj��L@)�ٱ mp*;���8��·�����I�@�]D�M��������͒�h�^I'a�Y0���=��Dw���rs�1�s��lm�Gb J8G���|�>�p�A�O~�(���s��83��َe��D'XRi�_*tF��s��~x��I�[ ��8*+*P�T0`�A �ׅ��j8�6V���9�>��e�9�����(J<.TT���^d No�(�G���tz-Ø�g��~`�=MjR pi����U�Y�R7���"�n��$ ��3ft����F4Ü�D�kju�1#���{6�B�M��^b�(����3"��IUm �b�'l6Z��b S�=fs���l�6��(���g߃K�_��/Ok x�h,��6��Y��cU�4zYc� ��B���^d*<ɋ�b�<|XX�d��+���G>fP��8��$#U�K6٬p2#1�:B0t\�����| ���B�̘�UbG��7��-��r:PS"C��y.��h&�q�4!��L��r&H�����֒��O�m9��ٳ��+�&GO����@R�����X�I4|�ߧB�?3�H�i_�-V:��Q����-G9��8zS9�B��t��f��'ƵL�#B���H��+��bN�#�d>ИN��2��<�d�e�D���wJ��IEND�B`�PKb��\�胁��3templates/hathor/images/header/icon-48-user-add.pngnu�[����PNG IHDR00W���IDATx^�]hU����I����"Ֆ�� E����}�.(�@m���@%ƪRZHQ)�TԢEp�/�K�'��&T���6-M?���n�c�'\谌f'ղ#�lΰ��s���M�)���4�0V�i��Ȏ@J@)%��d��9����� _r�q�>I�aB�# ��L���i'9-�����2� b�Ri�Ȃ� �F���ݼZ���P�����)h��,,�و����uD�(D��B�"!�RP��b���9���~�]�Y/4B4���+���-$8�q t>p�Ѱj�EE"�X�.4Ci� ��E�o��D��n�0?��������"1�q�?*p�u�9K���J+A������Z�D�\��n2�Q�]��Nr�靹�맑�B͍��hr�����M�;�[&l ��`�'v-Z'�@0t����>�m�|�M�$�#�;�o�+姓y�ڡ���"�P- 4h�w~pQ~ ����ky��9[@_�Pb_7m�!�R�n�N6�v#~ 5���M �h�1�x���|1U@d P0�aӂt�z *eP �Jg"D����,I��x�����|9���@�F�� ej��*��W�� �>�OκHߝG(�;�m-���b��Mv�j����P�$"M=� �#��s0��C#��5_��o�5?SM��bI>>�x�0��G8r)t��1�S��P"���f硶��/��q[GK1�{��a���� �Wa� ,,s��E�Z��D �n��"(��1[�D�8(�}���4�5]��ׄs�����e��P. ��!��g�@��߲����y���a(�V�*\�jq��o��~�?�;'��9l�Z� �*�G�Ƶ}]�C]W �- ���t��ހ�9�R��O���k]�w��VZh�B�{�ic�W?�3��|��Zx(���o��]��h���5����Ǩ0�x�P�lbT��_�E����s�s a�ƭ��x��Vv�ڿ�������^@��"��z5>44��sMN�_&:�6ժ���G�m��V �r��u�(�6�*#Е��q�1����@e�e��I�f�em���o��L���#��n��͇�oqYl�L'�ٺ�����T`��a�2��d���Y����U!��{� ���AW��[&�s�yW���ݱƽ��� �Y�Y���$4`�����%_�AiY���@P�Fc�39<9Cd�`�Au�,���`�\,� C�a��4�%�2@X�å�P�`m����Bg��A����ؓ�փ���o�l���6^�t%"ad_��I�@�W�BP��5��Ϡ��$@�n���_�Y��)zN^IEND�B`�PKb��\��*o��1templates/hathor/images/header/icon-48-revert.pngnu�[����PNG IHDR00W���IDATx�W�,M����m۶m۶m۶m۶m�o5�]�_e�ӓN�n���Ҿ����t��5�y-�L$$��`�_5$W�O�*����"=1��DF(ZM�*���Κ2�+�?�`�I`��L�1�+ s.ּ~9,�so�8>�]7|�n}���$�[�h�����!Y@ �P �\�N�{��4�,sޠ� � ̵?C����L�~��(��q.�.;)}���4Lԩ̞��sG$j���@#A��햭d� ������.NS�"�J�,�eJ��U�ͺ���e������1�Q��k5d���Ww^��V�JD4*��Ċ2ó� n�/םN�%�%7ψ��s��O�=0rǫ�ۯ~��ꉪ�= xl��^�q4{����8Q`�`�{��y�|���2S�&�R5[HZV�����Q���]`H��R3H8' �{p^L����;����+%��� >/���Q [�N��}��J n���q� ��2����Z�7?����o�q��>*����SS����f��K�9U����g%�G%\A)OF�W�*N1�\�.2�s��772T�U��w��6����#��+��Lϋ�^=<b����QoW���r3"���������#wˀ���<8 �p`f�>9��4괾�!����_6Vxq����� �:&Kb�*�W��ȼ�(�Dޕ�|r��%w�����&~�p)H��7=�|<S��/~� s#K���c��6}�����p���Y�ԁ��A�L��W� :�C�^8�<^������I�o?mOQe"!��]2�P��Sy��'�^���JZ�P��/�<]B��짦��Pq!G�OJ�x]�Ǚ�s�?cj8S!�O�4��_�H*�iUj|��.��K3 �3j5���|���:�|�GN�\]δa�Z�"�J��~�@�3�߄ �)b70�î�\���wo� ��R������ H\� ���Y*J$� EL�8���1��O�.� �~�<%ڴiM(�~�f�00��74,X��d��f��O����JP�J��*T�3�CSˡ;s�7����:��Z�Π5$�9ϔ�Z P�����cn*�>���}�y�(@��\���m~�h��+�&˲�n�[B{�nj��-�"q�A<Դ�G�������g�ek�RfIEND�B`�PKb��\^�w���4templates/hathor/images/header/icon-48-extension.pngnu�[����PNG IHDR00W��vIDATx��$[��s��{m۶m��m۶m{wlۭa�]��lGUdDMEμ��9;�͛/�D�G73�߸�e�+�i������A�$���O�����ѳ�Ebf�t����_�"?� ��sߍnq���?��rٻ���V��~Qq�5"�#���oz����^�p%a|d���6�v� ���F5�J���Wg���۶ܮ=$��>�x6��ї'�&�l=_�����;=�9m��+o���S �o��[���G��ʑͫ8�y���w��TQ�7l�8�u��on�!ΨRW+`��4�:F&fؾ���kb�M��� @�"�/�ĺCC�R��:*����8> 4�B��09}v��d������*6*�&�{�Lw?�mpqT�@c)t��,I�m�A�x�0b���B �!<M���� �mT��M�s�^{d r��F�.��CW�Zv�dd|�Lo{�>4���A'?�{ '�)�J���Y��}?x�T��ݤ���Z�s`�hi1Ĥ��*��,���u{x�}o�M; ��S��� � L�5X�s1C��O�?�'��FT�j�^�ӓ�&�$���i�eY�/3�rlhKk�(�.���\�9w��|�s1xf������,�8��ٚ�o_��0��1e�����V�'+6r��v�~�VV��*�7��E�� �yO+�L����?������8?{�ˉ1(ZpA��5��*�M��?m���"��l�֦1��F�T ��?�&y���m�.�#~��5/[���oy�>bN��Αv��(``t��3Se�=ϯ�l 3U�w�q�ξ�C.�q�B��>E�� C��A7�� fծ�����o~nE�{ ���LDP�,`i<bN�A��a8p��6��*X�'pj*�M���'f��} ���[ ����f71��S�Z,�Օ�ӞcTH�ܻP�~��x�]nI5�����æ��~�r�����BI|��V������_'R��7#�,�I?�4�:v�?X��g�NL������� L�E+�*�r ���C�����}�l;4���0���Z�6�u��������,��Z� ���U�l�� D+"S�2�5�6�iu!cx�~��²�YT�Q�J���+0!�q�X|l�y���R �(S���[U�(* ��|�l���-���� ��I! ��������sKK� w��/�>����{M��~.�\�7���D�:mU�zz���d|*g���l�y�mi�}��CAA���v~��_E`���Y�|*G �פ�V���,�;�J����E��^P@j́tD���P�j_ ��/P� �IEND�B`�PKb��\L�3K��2templates/hathor/images/header/icon-48-checkin.pngnu�[����PNG IHDR00W���IDATx��{SW��j�*^��?��V[��a����ʴ���� $@B L0�jQ�D���E;��KՖ��IH�!��~���nvv�f� j��yf����'gO� �?�����x���c�0�߈�ґd�������9�!_�H%T��C;��~����Q"rGv>_D�P�P�8��4'�䣯��q�����U��|�R�ʃޥ�z({��Gk�u��i��F|S~� mhY�A?���E�/E�p/}���d���{]� ��S���>F��A� wp'��{}��@,Q쌇ީB�3 �K��C�9��)���M�*h�w�D�c�7�k�U>#_�Ȯ��m��_ m6D�u��ċޡ6����>�0�N���d��"�X�K�=�w�N��J����C�#�D(b�Kx�!�'���h1Eȋ�7�� r{v�ھ,�rPh�F��c^��0r"��Ֆ�E�n$[>��G^��˞w�̵�$�m)��(!�#��^��_��q'd�e�0Rc��?��ԑIw(.�g��3�"� �|6��x�r�u.���(�E[���8��R��&�15kv {���4��q�Z(|Z�&ѝBKt�rTi��X�}�˼"�X���a�DE�Y��}�(�����.CN��\�] Ńo�H� x'�$56E@g���Ȁ�=��mwnu�DF�I� ���p��(*s}�"Y�[��n�X*e��P�,��t.'����t�B��ĿW���PjMBeo}T�G���~2 ��o��3i��t% D�ˈ�� D|�rxCضG�E��e����=t��s��{;PcM��G U�6��h�K)�WsM��5�-˽�ܶ��h5!����Ne���פ֒��{uD���Ho����s���g�ņ�+�Gj������VR3_ѕ�%G�����-d-� ����)��J�նZJ��EEŃ$]_��� 8�Y,|����$�M����u+j�ӡ5�q�Z0����J�Z����&� ��GN�V�6�Im~�-}?�������Hѕ5x*of4��h�4��_݈��k���(�o�ܝR���H�����o�C��S����x�W���F� �Cۢ0���|d\�m��C�$&?�|�����c�)���z�Gqi;�ZKDL۷�x0��m���=?�a ���Mz2ϠS�AY���m��u�8��>���0"�)ޡ��0�"�a�8���3��@����3��g�=gg���g�����g}�����PE�bDfS�a�K1�b>ûh��vs�� �oE��O���GÑ�Ѓ���B:ǣf�Y�D ��8��d��Y��Y\�#�>�(Wv.#<ۋ�t�8 s�)<��d�a���=��)� r�8 W�^&<�,l����]�ss��2l;vw���0\�� ���]�IEND�B`�PKb��\+����/templates/hathor/images/header/icon-48-info.pngnu�[����PNG IHDR00W��hIDATx�p#����I�A�c���a�6�� B��fN1���|�=���|�[�5�f��E`W�䑥Q����=����/�(�\�c(/�(�'�i������"#�~p��Jx/� ��PJ����X+M!K��$�� \���X[@����i<�p��nC�H �Bh@����&D>ߏ��[I�ȗ@�O����Ii�0"DV��L]�5�VA��x8Y����Q*�b#���e��\���0�C����T�%ゲ�h�!h-���Uwq��#`"p\.xl�M��GIy��A)�@5$4�>�3��|3]�u�r��`��U�Jd������W7���/"�Ͱ�L������d�E+�8 ���(Y0 F� ���.{�[��)��cٴ�2B�ILj��'y�]�4J; �߸�8��Q�u5���˒ [�u;�K��2?U_8?�r�RhV�D���'�*:�fz�p}��8)�aBa�f>�[&:�"���I)��4a-l�c��"����S��1W7��Zc+.|��Dmld^�� =!����������е�4q�Z�v�V!�d}��bm�����V�!#���;�x�Kڛ�y?#��d6���B�֚��|v��(�5,T#�0̺om�㇐?b �[��wR�n>�V�fQ X�B!΄�{����z�s&�"#��U�� ��!�/ J��1�jJF��I`CL��&<�RhH�5T�<�2��j�ץ]i�, JPV!V&r�cե}�E �� 2`%�n�`v7������8 �C.;@q�>>��).�Z��A;�J5<W4�3\�2�|�}��(�9g�"K�Ur�[��kN`♧Љ �5�sÐ" ���&��8{�)d%/�B]=�����6N�cX�7�t���T�D(�U[�)$�o�����`����5Y&���vriL�lm���4�w'��56�A�ì��!�0!y�h������Ol ���(�z8D7/{�Z� P�%�G���Kb���2F�i^�7�����1�)����~�C���vz:˾�&Ƅ�y&�s:�\x�}�Q BrT�,XݼLL����#�q�_��1}����ym��ִ&Q����3����ǷP�z0�_|�0V������X�O�hQH��1��3V��!3H_��("�Z�uo��fe8KiA"� >��5~p||��An-؈~P�a��@��bn �o C��g�~A�v&;� Hr�RXLJJ��b�����+�D�LDW���t@���h��' �"�>�Z$��1V �W�Jy"��R��ҕ�<���g��0rt_�q�B|��� 1�N�M��ܔMy�0�a��.���i�+����5��\ˀr �ק Hg�(U�`ÛV�J�D��-���5,�5$�H�La�d��g�v �c�a��c�߉5t#30@�F*��|g�������Ki����(�����7#�ݘ~b�>��H�|��5���kV��T�ɫX���yI�P�ߏ�1q��Ǐް��^����?��x53��Kщ�� �03{����[Qf}�4;5��Q.iLeD`�T���x� ������{6�v�ѱ ��b`h73T/~R+Qj=]P|�b�b��Rr}638�f�P�"j3HX��@B������r�O�ׯKk��3�dG�(J3��a���w?�#zB�؍i�ϧG�j� �F�beI���,�zֵv � ��]���A'�y�#�#6�����2�9�t�&��0�b�E�����vю��g���R ��T�6b }���o�1���[�Ӄ��8>K+��7��T֨��T@�M�����_�o$* �^�Ԅ��N]�qAipR415�Z� �je ��B�I�����/~@+����e(�b<�(5^י�!r��(���O����Lv�z����.�[�t�I/]��kgy� ��@�(��j��! x���xu]W��ę�e`�[x@Rm;����b��:�����Ҁ�K&��&YR�}�@��v�k�le���T���߶=G�5u����}��.P �߾����y�¿��P5!9�IEND�B`�PKb��\������6templates/hathor/images/header/icon-48-newcategory.pngnu�[����PNG IHDR00W���IDATx���#Y�>{�m۶m������Fg����k#���w�z��'ۙ�L���W�<��d�JʖJ*����D�"�9���J�������#h��������q-/���J,p�H������_"��b����E����� 8SB�"gJ(�8A$�L lG��i��v��;H:!ӝ�����~�&�b�6�~�ΡL���d�p���k���fg 4�)���L��}D}�[�0��������8/����@^.���z�r8tB.,`=�>X�Bk���4��}��Ӈ�a?�E���7�L�#�+�9�����/n`?~bk<1��o���{}�"�Y�����!�q�֮q�������p��r��m�=�x���/Fr�LM�«�R���3�<�s��\��\Ƹ���P��?��X���d\Bi �vΩ���;�8��D�<e�7��h�]�e��wGF�ְ�`�q�P,���hm��1\k��۬3���rl��lL�)i��a�+���G�B��9��#���9k��|�I��5X��Ix�3��ň/]U �0f�#��tI���ʅ��Vk�U�����șiv�Y��̂E+��J>1��#hk�;q��Kt)�Ve���yo�4���'�f�T�'�]���5a^�Na^&����65��+���M_��2sV� ��ę�>�8j��7��Ɣ\�;�G]��W�Z���N�8J�C� �xs_�Oͮ#��,p�{Z���G�C ���E˙'�?)�9��s��6[<���~��M���%��q��V��s���=�A�57u�](5kk�ynM�Қ���ZyL�4u�'.d;�?.�>��8��`����m��S���f PI"��e�wLϑ�26���{v}��>"�O�I*�wc}�NE�IEND�B`�PKb��\*K�f 1templates/hathor/images/header/icon-48-config.pngnu�[����PNG IHDR00W���IDATx��pO��P�Rť.)���.��zq�;�m�T���N%?��� ��Ix�υ���A�O�5v�3��K����6w�g��~� �:H� '�6N[6L4c�,��U3E�V�@6�S[*�fR�.��i��r��LY��g�i�v]���>���1ȴ�b���)���Д,����w�E���`̂�VA�IY�m��� ��;��+�o�8��F�d���G�k�.�x� � ��X���֢p=�CB�@�RiT�\������'�C ���6scˀ4�ï���;9�xd��P�~}������&��ϟ����9�S�����t�_�:�_����1j� &8���0��`��\1��" �s��^�`���g��?}������矐���8��x�i���+�{Io�1]�������G� q��'�Q l}c�} �ؗ�!2G�����w?^�z���~��eg_"!+��_`��9�KS���G�C��\���s��+F�g@0���b߽2�����٠nRitN~A!������oǟ7l��H�tj��6l�����C��O�}u�S��;��Q��t�y �gV����3g͉�y�<z� ���ݻw���1�,�J7$BV��M�Xy{p�3�������*#s٬��1s�4B�ƍ�����g�/���슐� �g��`���nd}���Ce���a�K�S<�H� �ӄ���C��H�qx�� �gd�5�e^�U��,Pw���n�o�&<��h~�`��*n��ݩE?qҔ����"8z4k1Y�R<��!j��9jY�%�n��̓���="n�Ӻ�W���FL���.>�?q�'Y���jkz�٢��68���w��mu�ރ��n@�Mg�������[�Ǡ��3g��e�[S� \T�u4�� �͖I�;�{�Ȼ��i�M=�6t�~ڇ���>�0h�f(�l�� <q_DMO7]�#!�Pޠ,N[�V�u�u���2�5I�yn�m<���uZ�����y�o�mBN@��a��Mĸ�]�i4s�EѴ�#�*�=ȼ�Gƨ�F�����>��r;�cd>Ԡco�9��>�dFB�uq��Fu����k2�xZ�����Q���4Y\�$�FD���6��Ty�(�ݤ>�����oZ���2���t Zo��Гt�ɵ�<@'I Ɲi;4IYm@y�-(PZPW�y�.H8�$8�㧿�b��S��;������N�58j#�����hk��`�ߨ^q� (����p�6Z���c�p;���� s Q����=d�<��"=��N'������P�I�*�2�ӷ������8 �6�^A0�O���?Ka�(� �V���;]�$H�iJ�ܧT۷��)֣�J�m���/�Q�c�L��+~M� e�(�mA��G�5�$��}4�?d�&s����G@�^�BT���Ս���l@�����)Ԙ��_{mJ�}+ԇzv6u�&k�� h�K�0)/��ů���kJ�"���_K�Na�|:�������І�GD>u;�*�]|��i�2�9�R���P�2fx�XB��b�,��#�l3�~a�" �L���ԝ�w����{5�Ъ�#K͂�)M@��T�+�)Ը)�߿.��Ѝuo�K?����Ө���&���+�p�[�`ܢ]�c����@Â]j�J�jI ���k2�==�lB=���37��$Dǎөu�"_�]� e$[�q�h��e�<E4?��k�1{���o_�f�J �15���&n��!D�)jG��^wN�+z%C��B���1�d�f��7nM���U7a`�f��`��� �.j�:p{�YL��E� P�P�A�9���N!��+T�uAk����1ƌc�������3�E*��Ï�1�>++�A~\����1|u��>?��u�BX���^��1��$Rn�L�u�e�0� �g K���Se_��j�1������a�,�3!��s�p�����@��T��n Ⱅ �k�D��������c�⫼]oL�D+<sq'��S�m3>��v���u� ۻPw�W��"1��A�R<�L�P=Ԙ0��[*�K�p �SwI��L gF�LN�j,�B�� .a@��Te7� қ�y<����=�#� �L���g��j�Qh�q%iCuIEND�B`�PKb��\Nv� 3templates/hathor/images/header/icon-48-massmail.pngnu�[����PNG IHDR00W�� �IDATx�YpK���x�����|W��f'f3s"333�$3�S}�w������cܪ�-i���~3c��x��:���R 0(&`r��k���ݻwQRR���v444��ի��K2ڗ/_Fff&a�X`��$����s��% �\�C����{�PZZ���Ntww�� �����ŋ����.`2�C��vVV���A�=== (�ȪjŞ���~�RDrr2N�>�F�d���A�vYY�"����h��PR~y�o��m0�]����H555L�VQ�n�T'��nii�������_6��E8�Ԍ����`3RJ�@]]]�q�N�:�I��㯂�)�ѶZ�$���~���_�(�B3q������� �Jv\.���b�ٳg������� �V��v�Ad�U�*�g�Y��*BE�r��ܮ�O#�dm�����6�hWUU1J2-��$�Q�lŻv�m�*-#�Pl�G����"����C��a����ͥ��bT�������nN�ʰ�^3~�� ���sw�PPP���|TTT��Ŭ�6�$B'a�著䆆�t�{�5'��}��p�.��pu6���t�+W����(�K'a�srr�%9��N�ݒ<�K~xx-���III A�y���H�,���:p)�65~�|����@�-L>@ P�����~���s�H���(�������%��65U���P���f �T���Qa���8xSS ���6��[�@�Q]]-�H��% ��YԌ;�W܄���~�g��9rd��IP��y���ie!edd�l6�(���{�(E�����+E��yь���x�o]�=[�x�X>d�ʼn'��҈"ZH�Q�D��zN?E���ԚP[�*��������m��. ;��T�!.R�.]��cǎ}J�����+�U7o���jA��~�p(�jqf�ME�hh٢�� \/��dM�����ʞpT�{���� �|o�U�]À�Uu%�b(�#g6 �J4���H���5�4�]����J��3+�X�`e���J�z��o��Ω ��{�z�W��"b��v�l!�^u>&:2W�r\�D�I�%�3��;w��F�#�[N�=�s� �Cx\�es? �g"�T�B<_0��a��x�_;��wl6�#!fi�҉��d-�w�3g��p��#�t�Gy��3ۯ��{x\�<m�!~�l��FFF$����3>�'ߋ���brE �N��|vv6��2[YN��op�>�<�����I��0�#x��AH�����FGG ]Z��}B���D,b ��l��鸸��Ў���sЮC�ȹ7 ��ä�C��w�#l1IS��*B[R�tH6Q�2[)bq��`�i�r���/aHD���w;E�*I��ם9�V��:.W؋�%G������,1i҉T@ ��ރ����;��x�$���4R��6�X�j��uT�X0z�O�s�7\}�C[�4SI�Pm�ap�ʨs($11q����H��%vcG�A-�����xp� P�x�e�3҉�����}HМ&��P�t"U�6}$���h_��cKp��� ����vmz��r��I��СC�"Sǟ�jrt�߿s�yg$�辵�P�?�t���o�Tto�%�D��)�]~�P�Z҉Dpsũ�&��]t�!ڕ����x0�-A>����GN���Eu0t|%����KX��Dp,U���.�M��q"�0:L�e�7�N�p��s�b$v>��إ��Ù0����̞�^��+N$�P ��]�><\��x��0xx6x�e��Z��[dm��������Dj/�NGw�����`~����p�1*��7=!>�#�)�h�LN111�E_]҉�ը��пU������clO,<8�E����Bl��T2t")�zuz�<���>���2Fv���m_��"v�Ĵ�� `]���' x:��lH��m�;F�yal��!x__������@g���K�WLqɉ��4귶��`���M�����?���n��s�#iv��HK�*y�:�ܰ���?�q����p �y�]M��<�a��r�"�^��n(����ɄJ��Ͷ�6F�r��zdJ'$$p�9�͌���WT������:�.� )ĥ�s���\�5�(�#�'Of��=+\g�8|��'>�7 Zf���H=�SlU�� 1r_+�Hy���*�s��/�~1�B;�ys�k���N��ʉ�pvF��|����OGDEJV?~�6��ܹ�W/����t�ζ���t������.yʼnZ�s"�Eqm�"g��W�<�.ޡCtɺ@�O����� ��+u��9�B"Qք�(��D8��߀�,����D�����^z{ll�n���K����dU�����N`& D����|�: �N���KTN�?��#���U�#7IEND�B`�PKb��\�A�z��1templates/hathor/images/header/icon-48-notice.pngnu�[����PNG IHDR00W��nIDATx��ŗ#�v��O$H��R����[�fk�Yy;����3ofm��f��j��l���bQf�!7��T��e��� ���� )��_Lp}��|��7%��} �LD��#L]����S8���C�BN�_GR$�AB�3��qt�~�nI�(�2 �e �jҒ��NDp$z�~���c�5�$�a�@�D��]^F��ٜ�(���Nf�W�AȐ�^g�H >���3�;�҃��ƾ��|DԑfI\���g�����ow��})��������>��S�K!��dHs�9u�'�����͌�K~Z>�p��zF��Ȼ'|��>��?���屿����G�v*��G�YC��ihL�&6���Ѓ����g0f�qq�⌦��*��|���YG������Mdy����r�<�O��J���6�����#��6���m��6ȫ?�o6GDj%6�NY.h��9��I~[�*eWnPzM ��=+��4�F���%Y̎et�) V3V��1!�}�k���܁�K�]� ���vw�/B[�Wq��?6����Y�&�.�K���3ݒ�ԉ��z�VÂ�?6q�'��Zu^�&�*�[��H�X^�huU�D���O]m �MUEw�n��x��@�l�bF�H���RUR�߾��� Gܨ6�F/��%�<ѡXR_����T9��&����;���7�'E��@L���\���r�%M��*��r��.�o�GB\S:]5s�$p�y"�nJ��V�3���/��v��ԡ;�{����c��/�;�w�P��щ>��N��N#�=j�z���@��-�V���UUr��~�xrw Ys��Dd��yG�D�DWR�ԧ��Q.�y�d\1���� F] �'��辨�Nt�/�얄���S��:ۘ��0��Ot�}0�Sl8~�j�.�1Э����ۉX��V����Խ��`��N��V���}{�N.?vdT� �� ;f�V?�'B��ƽe%��2�n���a�&���RN9�I��EO�h֮����7*������e�xē�T�w�Yg0���2R �̓��<</�D��� GO����T��k���=V�H��֚Donn�ɑ劝�Ւn��zS��XԜ̹X�P�m�E��JGd=��r�� m����3bq([�����Ƀ�e��} ���G��g�ԏz�!�&��~�� yݼ>T ۈt�_�����?��m�}ng��?����?��'\S.�c"�x���@�=G��TPe@�H���r���6�����>%v��%PU���VۭJ��bA�KzZfG ����}�j�o���α�V� ^�~a�#M�+vF���;K���*��A�ِ����$��ߺ�^��O�3ƻ��cP�̕�O)s]H��U��d�i�7��g�.���{s��0�����[?�1y��#P�2l�פ����/-���3;��%Fc�*��̈́��˩�~�9'oO��;�����^O��nPd���j���$�W)��to�xP�վ݊,�,�:��#�3d�$��y`�#cFB@�`@U�gԫ��K�Y^�l�k�5Y�ш*' �X�h��3���2ʂ�`P" 2����Ǐ۞3�����Bљ�#�9�%�#���t]#/ʳCyIQP�A+��ZcuM�Қ�3�uo��?/�o�����?�Q7w�>�}m|��2�?��Y���}�o�췿�O� �h�D��e��s]��xӣ�V�Mf �ɰ�1F(�#�k�C�L��9.q�%�u T�ðs��g�~,P������0@Ak��l6��P��̐�#��lq��f�Z���t:�;ۄ5���:���6���=v֣�f�e�OW�մ?0$"IEND�B`�PKb��\��&��1templates/hathor/images/header/icon-48-levels.pngnu�[����PNG IHDR00W���IDATx��3�_A��ضm۶���Ƕm۶m�l;�W�ib_�^O�{�9'[sV��+��i�����A�W�[Z@��q�&#%��ш�DH �?f��b��DN@� O`95V܁Y�TXxf�Pb���DH (8�X?� �H �{`7�@��o��#v���"���5��蚏|4G�~�\�ԏA���?�J�~E��p�EA����7�GPNs��:��i8Q�A9�G˵#(�9�P�v�4�+X����@؝{7A�9�vf�G� �6fJlϘ�� HAs��F��t>�C�-j�e���H,�5�.�ߙ�r$6A���8��`3c�t:A���_Z�z��x���׀:k���TYz6�5��K� 6��K@��}�i�%T`����X��-�k�9$%h��(_�ͱ�1�λ������H�J�IEND�B`�PKb��\��I� � 3templates/hathor/images/header/icon-48-contacts.pngnu�[����PNG IHDR00W�� �IDATxt�����eHj�I�����233o��{����������X4%Cl�TgN�jEN�>��\�ؖ���_�;t���4��, w�T{�_}%���#RK#%>���K�@}�2�Q�mF�,�y�B>��V H" ��ls�YcĶK'�o������}Ʌ�o��u�~�{�=u�f�����3���m�-�T ���!kI�Ru�����ۄ����$QS����1�1 ���So��Ɒx%����w�1*�:�T�c�k7d@ ��<y�Ɩe-�u�Sm�sAS:)��.5��+/�{(>���|����n,�'����L�z`��@��g�}�^{�y����4Mv�꽎)koֺ�b#Ň d{x~���lU�>H��>���q{�g=�# m���g��,d�"�db��R��g@��F�B�Yg�u��)S��!Դ���5� ��g�9ˮ>$B��x}�#ȾG�!]WD%�d���V&m�wD��Z����j��@�Gܲ���h!��^y�%��곁xa�K$v�z�6Ò�^�3���~��S��D���%��HBݧ�j��DY>S�E��SGVp��z��_������e����2` :�������7�x��;��Q�eU� �3� Hb3a�#*hkI����tׄQ,�z���.�L��-iN[�)�a6 @T/��������FcS�㤾>�o[�ۢK���5��C<G�]��}W������-��D�{e�5 "&<��p^~����7@�x��^ު��@B|�\���3�w��^ ��1-iI�>�%&�hH�QG1l@,|�#�r b�,��`�����oe�m��ګ�bs(��X;`��]�Tx�z�ǧ����, h����i�_������?M��;��}��C+1`(�Ax}�����ԢT�~�DŽ V��%�����.�7I�ـd�ͦ��1��6Ơ�����^d��� d�n��������-�c651��&Ӭ�@��I�ذ���oz�m�\mX���I�t#{=�.0#�����$րJ�hE��>ѝs�v�yĴ���?��u��C��o栉�u��/��˼�$:��v�~�t]O����\�8��y�Ynx�\%���,�~�̈́�M��ۮ�|�Y� ((k@[e�UFn��iö��9���1G��*d�<� ��l$(�/��L�p��JF@eFF�{�[�|,�H���������1�c��]��J|�%$o���o\��L��M�3]����́����C�y�7~���@+��<���$ ��2,�(q;����jA�O�1#kQ��9z�a,�k��w�iϘ�A=/���:`+����֥b�R;�T�F�TS��!�`�Q͔b���|���GӲ>_�i^ɳJ|IH1�4Z���� [9p�j�15kJ<�S��X�!�ʍ�L����wfpӻ�=�JA1Vin�M�%���������8�Y"�G�j��ۺ-��|7� ~���lg�!��!��?�����R{��8�����j7�G��2�lfn{�jmZ:��;�/�,�B�%�6+Մ�'K�g�V/4�Є,�ތ��tk?G���s��m����5M\�u}xʲ�m�{�}���mhL���0�C�XH$�X�I)V�-�^�\��Ū���X�$noo����D��(�&nO���d�b,]�B�Bo�&�T��?L� dG`����v���\w�uO�r04��M�$F�ZU�NC�����CbJDO��b��'� 2Q��P O�ii8�2a\7z������\5W����-�`�B��հ|T��%˥����������|/s�R8��2}� �xBJ|�k_��o��P����Z��0$��:`�,�#(��B+k �X@�FeD�b�k�(`.�m �JY4 =M�F�6n�QF�TTFK��p��5_����@z�!�����#���?ސL&�ݪ�e�<�L���y���6�)� ��`���ñ�L�4����oD�H�}�M��ڴ�@��P\R���u�V.�[����+���Ԭ��z}����t��L�9�"��W�xG�_σ�x��~6�Of�m�J�5��M5���P9 �T:U~G�z�~}��c��Jx0/j[�*EPX2�s���_�du�D@�ȋJiL5�8E �M�6��c ��/},��e�7�[�M�/�~ɧ8D#�-�X��cצm���%j���[5H�r՛T���+��KM���&Z�1��%7�*��b�QH���X\Q�� �Tt[����R���PP��訳L /B9;�)��4�cA:�cN`�q��\�y��(*�e3.�|OIEND�B`�PKb��\^y�r��1templates/hathor/images/header/icon-48-upload.pngnu�[����PNG IHDR00W��HIDATx�p�J@_�$ˎ��ݟM>33�13�]1333333,�gf^fNb[�f��UI���:�nr��:в�~�3���_�0��G��Q��.�Sq��.��{K$z�X �� �ɋs�XVQy��O:L��#�`���s�1�c�X�K�:�_�MeX��p��2�}'hx�I���O|�Cѡ��b�NF< ��E�&Z��{DD��f���\�5g� S"�����U���a��`I;� ��hL�E�c���Xo������M����e�K��#�L�%�Q:�N-3!|��M c<�am���z�����~13�8sH�_?��C�~�,�K�@%�'��5ح1ձ����7�,p���A�[�N_F��z~� I���u�x����Q�6�'�c�#4D�5���I ܙ3uB�����(�9�'��YK��(�_|�a7�|��?䄑S�f���������-�2�y�ݐR*��Z��[�3耔�eD�}��f�5[�:����O<�T��_�U��T��/�K@蕩k��6�*����Y�x�/����%��zP��i��:Hj�����)>�UL"��t����w��K�V�G��+�_"b:��,�{4�{��:�"����cusRb�� �<SBDw����K���,�}����_rtP���P4��x̲p��|��?������U_��k>Ju$دDū�pu�t1w�}�]Y����G��6}���� ����U��,����|Q-�J��2���٭��N>�$�HʏWO���V�*�n��ͳ��3���<��go;Ց< ��&n{��N������$��<�pS%Ibԑ)��3���x��?�\��I |���x%-Mmb��0�:�i�w�Q@��. �C@-g�6��V&�Z��K\�\F�=�_A��Ak'�:|<�)��+�Nie��>/��8G���x��>�|p�q���/�gۿ�� �(*��?�6��$�,�;Q-�#�W1��'O�l����8����Q�;��O��}U�4�dXg�EH��V�ɠv���LfߘP����=6���VAI��Ck̊��w���*�4�/��L� �����g�UPG.�IӨ���IG�Q�*�C��$ ��Pf�K�8x�dړ��S�S �T�5��*{�� � ��K@fw@�4@A]�k���i�=Y�����R�ŧBF�R#OBjɮ�2��A+�&�~��6)����4 !�؝�]��L���O?_�i���.b1�^�게@f���ۚ5������'*���eg�Lk�q kv��y��4�A鈊0�&� ��n@C�^6`S��7U*k2�I�Y����Г�f�Nk����?�9�_�j�^mڷ��]�a�^�L�x�Q�5&l������yeF�>�R9�������(���nDS�.H'Y�\���jb� �rr��%�ZR��� �h��?�0,㌲�a�#Z��K��������HƉuP�)��z4�{�a[�K�t�`���'��Q��:�����V���qc˯H�Nl�v^r�t�yt�2l*B#��b�\#a���{4#���}C�֯`D�0Phs����?��=�ͤIEs� ��e%��5�l����b����V��ÁU�T��:N�MR�]�~P C�1$I��Un��r����ˊo�z���c�?j��+�}���&��E8Prc�</���#"8�0����qӾ���'�ӱ݇���4Q/�4Xu�/ ��h�Y��Vy��s���w�-���s�8vt������,*W�4&�:�R��(�v�bz�9��F�m�}��m����hq}�n2!��=�^�bq���=g��8r��i|� c��%�I~���hK���!̌L�?��o�%L���-��as"������t� L�$/ �W�d�@ ���@��@�6����wM�X�gf,P(%����L�b�t��,u@����e4�W L)H���:�]�c$oQ�=�M��#�#E ��MNH��,�F2���IEND�B`�PKb��\��a�\ \ 5templates/hathor/images/header/icon-48-groups-add.pngnu�[����PNG IHDR00W�� #IDATx՚T[�ۇٲu����k}���w��� ��Z ����݂{K���{��l��z����ɕ�<w�y��$��+""B���U�{��'04�n��?��x���(` &&gΜArr2RRR��qqq`�1C�������C!!!/���E����PE���Q^^����~�����Bjj*�( �O��xPP�rV��I ��:�r��zb�� ��7BQ_Y�*[7�L]]rssq���ɥV�����u���}q�|�=���mZB��A�chK|��s�*}�Eͽ3jI������� ����`w=#-- �wSQ��8�G-A���ў�.:r?BG����z�_���L��天-�s��-��f<��P�����]�rEEE(�~�A�YE_EG�g�,�]��U�:˾EG�h��6ZB�9�&������ )㫿*�9뤊{����S ��ŕh�x�Y@qqdg��,��S�S�Yk| y�2Ȏ�Ľ��A���`-N"�V�YVy)u��� � ��G�@����/A~�Yȓ�����n��).����* |&b�v�)�����Ib�`&3�"�UUU(--E^^ �|�y�%�;~�&@���q��e舜��C_�Y��7 t2^UW`��۷Q[[Kw�(� N ���3i�B�{����BJ�ğ����!�:�ul�^��}�(..�R��-� �@v����>���t�Q^V���\��AH�5��]GAY9*�k��B��PTWW��j �Y��"?�:AF��9 Sv�Ck�!L>p�È߬���%�Jа�$��O ���z�P^�)<&@�cI�t&,B�`*��� F�D�3e�>����ׂ|)��1��Xj� QA�Zt)�����T�Sz�܉s�ģ�F��ŐE/�y�btD̆ǁ�m�O�J��B�Z�9T˰��+�DXi&@vq�Z4��J��:n� � �(�fgg��a gA��>芞��Exz�<��-%R�(j����x.���5X�ׂ��p��C��t����2)��#z S�D��ޑ�B�H�檤��$����]k����,�+OU`�i�8Y�Ul���Mx�' ߸���J� ?�5Px�ԩS��FYw����Q<� Yk���1��d�n^=���\�� %X�X���X���b2O oa��q���� ��+e�]ׯ_�S@9�� EqΨ�9 M�\8 b�qر�S�����`rEx&<� �����{�����@ŷr� ���TV��� EI(��chrч,p*��Sz c4��b��g"dw��Gf�ɲ�<<x��p%3W-���2�RQ�(W�¦2?��(;�*�uPg��fW}<���$�Ȩ�/��0��x6T�'$��<^�9�?�4y_q��P�`���یD��>ڎM������h;6�>���)��A��#2��6�J�a�S,�uB��R-">>�$��c����S�Z�@���N@�`<='��s"���k,$�c���DN�1o�A�J�S,D�g��`�Y����Qҡ�C���ݕ/E��`T[B*0@��!j�Ǡ�uZ� =��!9l�/2�>Z=�{���2 a��ر�ް�y ����їnJ��ٳ$����z���|�A��W��4-�z����}W]H=9 �P�h�y��⌅^)���X�u��O��|~�8*�g��$%%��R�5k�eSF�qy��DW-4؏F��dn�l�(�F��Y�m~��`� �Oa��i,p���].$�z�}��IX��^CN�8�D��_�_gVy����:�������q�t"n܅I6�X�����]0����i � �>A�g�$�) �ݹs��T�6�h��&�a�A�"aH g%1�#�c=�7�ƨMΘm�9���c�1�1SM��p� N$_f�[� =X�� N�-V\�|�(?H��6��:E��&��F@l����nӻ���fL�i;�lw�t�P̲ ��Y�O5:�1�0y�%ޱ;��gҐ]T�� 1�s�Oy�!�#�x��in�V���ym��5!�{����:�j;f�X�� h��z�c�vWL3�l_�f��c�� ��Y�kɮ1>���`��C�ۏg��)���*� @�f�9�yzz�b+\"��V�߷�F��`>�C�i?rVJm��i@�gF~��6�b�AoVo�2`��aL7�fǎ ��G�3��L㣘��:����JU� x�&[6�����e#!�0�8mG��w���)�0��"�����rn���S����L�灩{�0y�+�����0����qa�S�y�`�~��+OC~��ɏ�8 �Ҽ���4'��/B���RS�#!:a�]�n?���a�:h�q���0n�&�pawΝ�6(��Pr�kt�܄�$�k�y�Ÿ-����K6$������6�:�<�rz2$DOh��CB�<�|>/�0��`��� ��완3�Im��Cz��Y�s�*�GW�W�>��&�=�<��d��kR������5 � �L��KXf&���f�u�0�hϰS�;��y����H|��7љ�˕�O���w�;o@�Z1u��s�Dh��Z����Xa� �M���1�>�0Xk�6V��Bq�3���y��G�+�ct��k��H���ܟ�6������R4?�|�.Vt��O�� ��cˡHz�OC�8G�=p%���u-!���^u�F�]��R@y��!,�3��/F��~h�x:�OF���BHO,�$���tO������1:O���y��ݼ�s��Fԩ�[�ۢ� �Yk8c�6LYg�d�aķ{1�1�}��6����P�tE?/:O���Foh� ��(���,@�@Z9�R� QV6Ϥb�_�s��kf�x���8a��w�����"(��謸T���<]ǣ���Iw�)�X�7���n �������\�gf#�f:�O����y�v���]��~l���J��Ÿ�Foh�|fJ�/(|zg'����P듺�}h���� PI�=��5eh�6jA��s��Ai��P)�K�b��s��O��hx���C�lA%�+���Pmԅ$V3����0Sc��_��E�u|5�5��v�fz㾇���͠�f��D��ޟ��'4��4s�VC�&M�do�,�ۢi����)('w�$��~��H�2S��up�Tw���;q��C����x�aψe�bt2�����p'���+���N�n)�Z#IEND�B`�PKb��\1��%��/templates/hathor/images/header/icon-48-user.pngnu�[����PNG IHDR00W���IDATx^�{l[�ǿ�{���y4�6M�Җ��ia0J����2PaPĪm}(l A7Z���&1T��ʐ`c��v�ie����B����i���}��G��N�{�9�][7����N��HYI���?���q� ����4�~��,�Kw���z|Eh� p!�nE�ݬ'����+�U�=� � ���Zh� ��D��ɳ=�b���#7H{IY�檻�?]yI͆��Y`��\w�Cl���� O`/J�Vd����\V�Yp) ����J0Ç4jp���D��X�1���������?`Z�L�m�>r�}{3:�N��#S�௫�9%���c�'��W�oWnoi��VvE3DU5TdY�����Hv��}G�0�{��J+pꈴ�A\k��R��݀�ȇ����Q�Ʊ����y��یWk�i^l�GP�o���ߕ3ۅ�O���\�A�h��:��Ri��)��r8��N��I����F8'��}7�G�6��x; ��[kڞ#����� 0`������*��[x�"6�؈��*�T*�#V}�i����^��|&��>~t���y�^���^�I@� �i��B��0�� �_�:P3�����և�)��\�Ƒ������_y�}��V��'&s o �����ı��^fB����|�ݺ�N}IK�ZI�4�! �֙�®=G���=v�d�^��7�L]S�jsJcAR��+�jy�Lk=�2�+䢱Ƈ�~�^z�x������j^�m�q�M��+�5`,�t�Ѽ��jї��2��h�����J�>��vl}j���.���{`k��5���]����ڒ_Z�5��#p���9���O��T����/{�+C�G�oޣ���J:(�\�Er�S�e�<�nE�u��#�c�!����z�����^Nڎr ��}0�M̲�f��0sj���t�/�L��O�f����Ta��U���.J�Ꮄ��{���t �p� hj,ǃ�h3�>!t��4 �8��` ��²n��M�N�(��X� ���#����]f�A��~�qG��U� ��a,(�YH�)C!$.�Hu ��r�l��&�T���:R)���)�\"((� s_M�>5��+1��l+��� �GlY�{�e�ku�#�Tp�B�G��YT�UǖC�P��c,�?�R��@K[��=���(�!�I�q�``Y�ڻN���� R����g�Ql�.0W��-����fk�[h�G RM7����&9���k?�� �=��\ �WL U"�M�����R׀\\��1�h|<H)��̴!�0QN��88\�-]Wafk5d�5�Ї���Qv�q����a���j���VN10Q�6X��Ě���X��7M�u�Ah�AD�=әJ��D���PJ��y�9�{G�'�"|�irh���?6u-����d��p��ApG FC����)$��_�Y��2!��ұ�c��G��DO�s�ź�f:��e%�C]7�g}-UM�?�& �$qW�+~l4f�3EEC�8�xr(��s�]�Ǐʚ��!ך[�1��y�aV%�M��ŧ! 8���@pdB�I�c���0j�@���)����x`�`d�y�D1���Ο9�~��ˑ��{{"���V6��j�ͭƬ��д(|��/<�T>��1�$�� 0�IE� e� ���p"�q���r���\%���}X�b��t��e�UA�J@3�`��H'��#��X���Oޘ}�,��tu\-�dV@-+����_�t#(m�!�@P(��m��L��.4����عH��H��lw\5�A��2�����+%}le�ꢠ����ܵd(�$8�h\_-R��r0p�AI�R��8��}'.2��ᡟ�Znp�#t!"�`��H�`9N����7+��̺��-�oa��]ĵ�9c)���jp��Zt(Eru�J>�j2�,9ֳ�p�E�eG� Pt�y+7�nE��Zf��L�|6gl`�i��ΐ�_�m��wcߛ}�+@����_��K���h�c'��)X) @吲� �,�<���=�X��*:� a�<X�ul(O(*�IK+,@�W�}����IEND�B`�PKb��\��h~��1templates/hathor/images/header/icon-messaging.pngnu�[����PNG IHDR00W���IDATx�Yl��e0,8ưb;��9�0瘙�������������:1����w�����gG�w-�z�띩z���^���?q�'@'gB���3�Y�X���@@ ��HM\��F����9l��#�?�F��������"�($kP`0�Z�P'��2�o�A8�ƕ0�`����y<r�)W���)@M�D�,�lV%��@H����_���'�a�t& ��/ó�����t Q�@�@��C �ϝ�D���`�٠7�аe9,v?>z�kp�Mpf�䭠3&���@�ˏ���;�L�����*�s0u�N(��ȑ?d�.�% �Fs/t��8���s�W�c(,�� �8�x�4�g����o)@�X#�ı�i�bX�0[�l�X����)Dc1 :�z].�9��ߏ�Jܸ�<���B�N�O\�����0��L�hb�^�cb�ɤB�"B,�U���@"�ʐ"�bL& ���m����u��|6N��v����� �8!�r�ku��f�bD����p�њ����G�7&A�`�J� "h��1Cνkv �A?V�{^�2eQ됚� ��̣p��}������n ��5���h�m@(��Mx�X��,�~08q�s�"k��)-�ĵ���KIR%B��h1i�'�:V��*E��a?��� HD[�';ݜ=�Н�L&�HQe>z�:�ĭ�;�3�r֬�-���+»�1\��<�T�W�q#jW���T���Ν���7�|���@$A\x5�!�������E�+LCPL-�_Ӭ�� e���{O~B�ڇy�4�?���I�d�YPP0��7���� ��FA��aaU?���0x�`��塳�z�qU�- �$4p{�0�8�`$����٫ަ�_�S��B��B�s�=w� '�A0�$N!$��ڊ��R��P����:�9���,��Dc��˃�J�h�K�<]�s����8��/�첃h�&H���\�0a�z=H�u�u��n.k�C݃x�~f!����7:�����Q�~��K`�.���>z���1���3�999(,,d�!m%��y�f�<z� :�0c$�;�x�� i�rXc�r�����O�>����F6��k���vΰ��HKK�*_��e�c@�T%��х���b�5���/�S��ܟ#r�M7�t��G=�v`�ikkCWWƌ�P�F#����\8�NڇY��p�����$�B�>�Bc��Ѕxw����`�=a2�PUUU�`������N�h�{�u�]�$�����J�#;;��a�I�k���7�����F�vD]#@�1�|C%�8\fv�L�l6�$����+2<u���hhlĄ��jR�Y�u�٢����6������cǒ3�#F��$M@;��������&Q��-[j0e�d5q�����#������B�xަ�}�}��w�����f�ԩS���P[[�T� R ��@ɳ�,5y��7�|�O8�,=R�S����?�c��袋�f�2:�l� �hllĝ�Vq�$���h�֒��e�1cO(����ys���&�H�?~��O?}szz��;n�8�u�e.:��G�0m��K� �F�S2X+�}�fϚ�'y��:�v�m[���$U�Nއ~��ĉ��(1d�ddd���N�֭üy�Md�����)�NJv���b��[̙3�Y��b,z���>�cy�Q��m��v���7!nX���v#,�P>4����3��SM^=��Eج<�r�ӊ!�w�}_4�1��Q��~ ��/���-g�}��|r1�_WW�7 *d�c�:�EE�5k��a<��#����\� 6 ++n�����S��K�@�ӣ��U��Y��H%b��}��^��@;�2�u n��<�.�ܨ����^�2����j��y9�{m�Cd���3��F��Y�W���sf�l2�V�{�PW_��q� 4� d�-"�-���L�{����aC1��@�?����3R��k�"�O�ۭ&,��\�U���p߀U�aW�g>��Ǐ#�>m������gL���O�:#O�ee��c��y��>��S̟?�W�3�$O[�$����C��[v�Cl��O�W��˯���E��?l�P�Z��a�F/ׄ�2�9�~�3�QI��r�|jA��z/v�mW)n�tE����h�\p��T��3��W3����ܡ�^�HK�|MM-�8R�(yy|�C�i!� X� 9��Ï:��S����fgڴ�����TVVa��ג�F�;2S�8a���&6��O<a��B�2�UB�EE�/��sE���C���j�jq�.���k����|]#Gf�VE[��L���z�����~yEe�7����l�j�,� ��Cr��~��]`�Z��3�p�����ǥm�r�$��VCܧu�ަښ��+V�����H���I�P������4Q��t�R��w�c� '�p���x�Ɗ+y���ɓ�m��!;{P��&Y�%��c7x6n�ٲ|�O˿�To����i�d5�S��&� i)Ar��'�z��ys&�����M��x"�>�'aiv4��{7y����^�ZnRE8J�[��CGh,eQY�)�9kցx�"q�N�:��Fi-! �Z�p���������Ϧ�$�Z@ِ���K�gڜ9sO�={vVQQ! ��"�M��8̕UVT~�lُ�R^���=�\��zi*!��-9t��~�߿z�����'4 �(?:|J�Ƌn��ͤY�]�Zˢ�VЩ�8G���͆� ��ZF峄B6��w���O�"r]���)H���9�i�5�2�mIEND�B`�PKb��\A8�� � 3templates/hathor/images/header/icon-48-featured.pngnu�[����PNG IHDR00W�� �IDATxݙt������M&�!k �ȷ��[wwwwwwwww�m����$��ǧ��d�O�9l�S���]=}�ߺ ���}�_Hh�?�!�9#G��occcv8��!;;;����ׯ���o�}1A"2x6(�m��� �̙�r�����Idy��˹����m�aɒ%�@���^"���sޤI�^?~|�^��7��������Ȗ�����>_�F�mK-�|�N�D"��jV���e�e����'�I��ɓ'���Hh�=z�H[����U����K���yd�"� �'{j�I���ՋJJJ�%�o!���ݥ�Jq ���g��g�}<� �5M!;)��|�G��|0��p�B��I'2{�,48��g�M Q��;�3v���u���I�4p ��3j�H�|�u�2��/�Dv��d�}�W��ew���*d��̙3g�3GϚ��e�&$1h�y�������i-�+�/��v�!�m�����v��m�.�7����?]�BA<�ة��p�z(C�GϞ�l�%�JJ��ۈ�Թ3������f���ٵ�M���&{.�u�Ν������W�^��9眭עcl�".//�������lIM!'��&N��`���3L!��J ���HT��Qd3�v��Ȏ���'��w�fڇ���oүJQ"O�Z����� &���{� S��z��I,�PȐ�9�ڷ��~Rm2D�WvG� L1EH ՞��(飡uF����3�8c�'�z*鐗$��N^�ڐ�`�G��bŊշQ;s h��矧{�5�m��z�����R���ڥ�:"��l�9�w<,�REQ�M���u��Vl:����j�)�~�ر��`e�DR�5�F�=�֬�� �}�#�}v0�5w7{rM��̞��t�ؑ���[��=v�ЁҲ2�E�U�ȟ&PaE��W_���/_O�$�����=s�KT�UBY2�$J�`s3B��[k�v4��JC=��(R���V�1@L�x��y��)⽍� �FH��m���L�L����q�EF���wo=/��A�̾F\����~GQd̨Q\p��k�Z�m3�a"��pB'�2��g�Y^�^���4DNX��UU�v�* z��i �L��[��8���W�p`;Ûw�!�¯��}*�|0J��f�<�<�'UW#B�D79"l�jV�;�,��DR�е[7OMd(�0�#ʒc� �f�l���"/"nOwȋ���>����(.�،.]�j�3��5����2|��i��wJ�T���1��)N�mjv>���ha5��y�8ݓ�mKK5�-�3�2�'��̄܁z�<�����J�""��NE�"D�I�J�JZ��S�LQ h�ۅ�E��Ht�҅m�>'j���.��kWA��uA�#�<�-F ���Î8��^`ǝwF��f��n]m-�o���G���W�S��|�!3z�h7���ZCbgCP�IB�N��-DҶ�u�ݙL�de��j�6��Y`HXQ����ڴ����H$҇$ԣ�5v/��v�!�]aJGLaa![��nj��5Vz�^�{Z�7�,���햴�,|>�x�*?�]���@s���a H{ ST2��}wvk�|А&&F������!Ԅ��9��ǖ�?&��.n �?�K*b�o�� ����q�wJ��M6��=/�a/��W�-���!��6�8����߅P�9�$��M ֻ�5�ޟ���ʰ�y_�u�Sls�mK��~xsd+ >�s�}���T��8���B�~��Ԧ����!!a�l�^V�5W��t�"�)l��ʉ`�`�-��6`�=�\�7���˚R�%ײ�� C8���]��nf<^J�����۫O����q�jxpp%��-H�mY�#v,�:��eͩĝ��8G�P�cwiO�m��O��XJש��_5�sԝ�X�}D2x9��Dc�VNy�gz_{$"�����@Q ��Ek���єJ�p��c|}'=� �}��7n*};���i���q"����{��aYYq�#����,��C��F$�|�Ʈ�lj ªO$���)�u�g��������!�H���pPY]Ci���n�5v�+���H�P�X;/��۴!';��gIc��`ǹ��|7� \D��ĩ\�����^c�R�ޣvc�]v��ɣ ��Z��#�����������999d�B<�9D:ES8�����U�7i1���"a�윖~��a%҆6�\�x��E��_���ç[���6�p��QQq��������r�'�D��Z��e!��u�|���i�ɬN���諉箽�5��, � ߑ�lmm���G�U([����h��V?���@\F�-��H��u��IEND�B`�PKb��\s��! ! 0templates/hathor/images/header/icon-48-links.pngnu�[����PNG IHDR00W�� �IDATx�p#�օ�����Iӆ��33��������a�r8Y6�,k43}�j�֪)K���V�]���=��X�/ſ]pgW�� l�R[QN"�b1���� ��E�����l�K��¯1U:�.�l��q�w6��Q�H��"(E}�צ���1��u uI�LP�$b���� Z('�!@���4 g{�g���$_2(���A��|M�2&��1E�,�`�^�Pmn\EU�� ԝت�� "�������^�D��H@<� �rs�� ܰ��B��c[���������[J�������H���z�L�e-/���:AK�/��8.���{����s�8n�,6�x#|���> ���0'>��kzF�O�b�mAdak�,�5�SQ(�`�� ~��_'�8�g_���y�ֈH0Z�E<�����$L[" Pև.l���W�*QO�� 4��,��[{9��f�<�y���x����}b3Z��'��֗x.���6 {"�+e�Hle൦N�2?�_��"��K�=}����S@)�{�in��m�OL��SSxn�4%!�~���)��h7h^<�F���3��y%� �S B�h��[�%?nGDh��w .�D�ځ�������1n!��!_����{����i^�l�H��Gs�7��� /��2Le �&$-m�l�F�S�O�aS��Y�ib��}�c�2�S<Ϙ� �c� Z�-�`�D,��F�Ca���1�Z4 �ًX6�ﰺ��&[��>��C�Z8DW���8�����V�/����1ژfW���{ǚ�%b�(���mGsS��"�Ϸvr��!�Kd9��ېI%��9����4P�J�I�m5�Qic���������[q�����\�v�"�n!��y�%�����SʰU]�"[��n@L���( �"h���av���L�6-�������}�i|�YAG&�~�놦A* V,|f�@� (���u�͛�w'� ��s~W~�����ڗC6��?8�Ŋ6>JL�;�K;@%x�������0�cS��F�PJ����[��cg�0 ~��w ����q�c��uh*�+�d��f�[ �(�ʌ��/��K�r柾��̔`=�ò�HG��Z?�E2�}3�g�sE���hMaro����-��j��e^\�����9��?e1�͢���7�B�0�SK����IZ��bF���֙�C$>96!�V�2c��l��s��|-x����0�?���e�Y�/xg�dg�ԩД�*PX�9± +|NVe]`v" �r*�p���{t!s��=.�ɮ�2����.�;v<00I@%�0[ �xZmZ�'�'�N�ۏЂ����W�?�=���?^v�j���P�L\Ә�6l��7_�K�������fDcQ��r%xk#h��lV��eL���������y���Xԭh�h=�L<B�σD\|����O����{�a�L��$D���yFz��H�N�11e��x �D!WT��Q�Z��w�[��|�DH;P�u�?��`+PJ;NW�&N����c�@JDQ���,/c��$�w6�?���`����ZPJ`[�c�)� �g�.:��?ܓdҜ۸��/�g�IH���l�2<ʨ�v�9�ĢP�`)�\���oD�P�������� l�q���.:�k.}����5 >u)�L`�R��ң��;���vZ3&���_̗w�>�§>���y*�/%����g?A45�6N�z�KVxВ۞�b͊��FG@q4�8�N*J�gbE�I"Ý���Y)~��/���y��w8�\��'0k2 ��r�2�����A�PY{���q�V$g�h�}}-]���/�B1�!��k;9�c�� �� Kꉎ1ܔ����_Y�Cn�C%~�&ڈ%!���L/�Ì�(hFb�o���խy�"�t�r�P�-G���_KUio+�;��m$��9����R��D"`GM,U;|�icb�<g9�o�x%5I��'Q�V4�0���!�S(1�FpeA� �Y^r���`�q{��K�K�p&�O�I�g��t�˛�^P!YS�D��tp| Y�p�w>uK�v�#QV;�f����Q��8���@t�1�{ K�vD��6��dbaELg�x�\J��;9��P���o�3�Yg�kR�C�f�A,���٠�I��A�gx�x�A@��ڤj|� ā(��ǀ5cP6�*�d����r1�aF�R����2�L 4�*S���J� ���@��ŀ������|�P��[ x� 8 4�bS���hS��ap1�#��4a�ח Em��h�2�ʘ�|8�> e�����ח�S�/U��Ёꪴ�X��Ҥ@ؘ���Ч�IEND�B`�PKb��\�|�pp;templates/hathor/images/header/icon-48-jupdate-uptodate.pngnu�[����PNG IHDR00W��7IDATx�Օ{LSW�{��?����%�e�ɒ,5Y�ײ�FuDݘ�Y�ɖl&�6�P��|N�l��@ 0���D�p��@�g�����CZۓ��������s~��OoQ���?�w�*�8s�B�u&���3�PJ�g��RA����g�A��}<C|.���3�p��hU�F\�Ħ�n�`.��D���=�a���ۿ'\�\���#"��c)wC�����9N �J���Њ��C��sQ7\c��7�6� �݅�֊웤�fL\�z��(�r9.�X�><i$�q� ��BϢ��}�׃�Ћ��B?N�l;x�{1ð'S���W�'�/�B?N ���M>B$o "�خy��qY-PB��L#��id�T�q��P���5R��W�Pysn�Z/N �ZD9���?��Ü�B��WG��J�:�8���q�N!�Rt:q� �C)Q�ZB���>�E��v�;l��� \�e�'p�z($l�qǫU>��D��s��N�A�X�ick��A����~��fs��N���$���j������7x��w��Q�fe���1Ї8qz�*] Q�����2@�ثJ�/h���p��aVԀ��RG���oHB���.�@�5�|�FSB��MjW�u4�kJ8]^v��.����0�X� �Ȅ���CX���bʚ���?�ك'� ��Mn�?E]"�6l�V�X#P����p�*����&B���%l��t���}PKTz5��������>hx �j�]P ;O)��>�� $W@���l��X�����U/��O��<v��>����PHp�|T"<b���vO�ڹzp��J1���k&!uj�K��vfԉ�P��>�@R)�����R�;l_���Ȟa�ֆ�� W㰕�C�'�y�������!^m�5�&���tN�\˩*�^���(a��@$��뇗�9�L�'��<f{)"�to���$��2�q��cͼ�H"V5�s��۞�9<���p�˘I�-�t�?���4�K8^��^��N��<�5�u</�w4\`g>x�IE��6���Q����k9Q[q ��M��R������Un���y��ق��<(!VކV,�辈��|͎�X{F��5�@�A$����!^j�dbr���1�+���&�VD�)����4�Jؘ��Df�_B��$��Q�%�V3���U��SǒR���^���*[䐴>p�a2%��l����:&����lqF����M���:x?��3��e�0�,ܳ+��2Y@|~4hL��C�"d_H�m��͘L �y�&o�Z�v˓lH]@�%i�Ȉ=4�� �� ؚ�&a�����x,�/`��i6�-�Hy��5�ӵ0�%1�������,�+����}�"�}.ܼ+a����k�Ov�N�iKz����� �N\XN�-I0@")��][i�Y#:^0/�&�m�Y���� ��V�N���I0/�U�?I�-Ӆ�����5$�kV��;���`��"ȋ��7�`2��q�5t�|wЂ��{9IEND�B`�PKb��\^�7rr6templates/hathor/images/header/icon-48-help_header.pngnu�[����PNG IHDR00W��9IDATx��|I��_H�d��x���2��,33)G�}t�������X�23ô���j�o<ى-�U~��i�߫j��F�����hB��B�Y@�M@kʺ����,b��1��hr5����@���.p]��!��Z�PZ�RJ�*�Z��Nۮ]�6�����!�C"0��g�#Z�wg���7,��B*3�����wF(o3��Aw��fm3W�!� ��54��3}���������QE�Z�Z#�'���� �Y���"C���F���g�K������E�=���������v�t7�o��~�����ę|#�\Cmb�E0�4�/�@~���dh��/��b��D� X�E���/�DV�ǎ �`��rl�M3pL��l��n��eM�c���K&���`*��#>61�فx���u�z� 4O�l盇b`��xSu�<αKe֭�j����}��u��c���!�`����b�1�l�� \�i� @(�|�����Ëm��c��ט/����^�`�9�N!�IJ���A x{&����2����>����kh pV �/W(k�x��ڎ��l���z(�[��X6V�[�8��F�����ݵL��ל;?���ᅡԈ���p��`{[?�U�qv����� ٯ%��j���*~�h>:���ք�]3�ì{������*z� N��Lr.�5:\׃���b�5��%d+!�D�� �Fg)@{O�ëO�T*�,�+'�(��S*��է��]�*"�dgm����`�U��Ժ�/k$��^NT��"�[�@*t�tݕ����R�vυ��SG����*aT��4�F��4���44�Lk6fV��пYz6���\o8�/����b���g�{���f_7�{�MD$:4�;ʴ$��H��ڝ���k�����H���Ҧ��h""_C��� #Ѱ�v��[�2n1PW��5���R����<����m�����]�2�f���nS��$�V���4�1���O��p1������k�Cv���'OEn���!������]+���ha�c����k�>~����;�!,u��=/�<U���9�P��U��2����8�h��!3�Θ�".�6]�qQ �V.�E��|3���Z� I|�kOBξ�y/���]w~%��U�[L��12���%&���&�q�� 8f��� �Bg�p�7��?�� �����ʄ=�:a�A7"�����7�>�� a4�"�k���O ��TΨ 3�?wF;������L��AJ�$���ψ��-��N�hhMp�4f?�ymL��_X��d�����^��:}'�� ��Oİ�Ţ��ٔh��0/vӹf�!�x�'V�V#�9g��3@�+�m���'�?ry�N[��P���S�+�y"(����h�F[�/^Bs�R�?H��o=��G�9����� ��H9����Ů�Υ�Fpߙ���շ�2�d/�e���E� ����[�E�I۠t���~�9�CC�C�s�R�� �q��1F�qd���/�ͳ5ʏ]n�~&C�x�؇�9RI��+�_�F���v�F輠��+�C�:�䳞���ل}�5�J����> Ss����Vz�R�� :/�_T^�V��|�y��c|߿_v���g߆�]=^`�X��Eke:Иˠ��<�L����P�Q��+d�bS��"�f\������P����~�?Q�l���%o��a��E>{�3��.¡�:\=e��*�`�g����0qϣf�<���?>|��x�� _���D!�Y�fi��-��Z���[���7�����H�DQEdp{ L[�n��=ʚ7#�z��O�e?Zl��[\��d��Զ�I�O����\ L�&���K���ؔ�F��L1ǒ~Ki1�+�U��U+��Z�A $f�.��ƍ�57E�Ј��B��Ikn���9���E4�|`K;�!�8����֦��@��H���Y�~��Q���}`�����)|�{0#�!�i��Pz�b���]KÊOJ�Q� ^\\�zO%�� Q����Nb'��F�*����S.�<n"�L忳�ɤ���w�j��w��N Zi��Z6GX/����Xۊ�V�V9?¼��p],22+m�`�3��H��6i5���vb:g�+e�0ىD�8[�[P/��Z�{��>%��VJf ��Ҏ��]v�av��\J,��� C>W�N��&2��kB.T��I<�Ǜ��1}��?K�����Zi� ��vi#�i�S1�+��y�V�n��+�e�q�ڊ�i��:���!Ҙ���( Q-�0�JE�d��S���Dv��s��Z)#�d��])��5pw�i4��HŢ�LF���^-��x(k��9���U6�@�����i�Nc��M=qʓ8!�q:t_bE��76�?=��F�?q1�;�3b6(���Ҟ*Ko<���L�C��~7�+�A�ܔ�>�H�gKK�e�̕1r��_� 02;m:�<!~��8����}�W{�d0'˶N�.uBj��q�Ƴ0�����XD"����O�`��߾Uv���xYyd��w���X|$ͺ������o�e̋��_�J���aRFR]JO��c��?r�ȕ3�?�� ��J�/�C���}��?O/~�����4��P/�&��V[l�`���3�eP!�}F� �t�t�Iu���_��.���6{H�GJx���\��uƮ������)�IEND�B`�PKb��\�:.�3templates/hathor/images/header/icon-48-calendar.pngnu�[����PNG IHDR00W���IDATx^ՙolg�g�'N�m���Җ�6M�Vmb[�"�0X74J�h�$$ ��4�����A�]�������`뺬i:hI�&��ϱ�b�|w�r:���v��f��t�{~��g�V��|���G���2t��SvׄuH�$�X�t�e��t����,9������E�G��Kx��#O߸���� !� ו�i�����V=����=̡hl9<�XKm�;냄� �����k��n�>��=Q����[*�̈�'a�������OS��ʺPݹh��yY����`D�L�8����B"�DQ�L��uA����y����a� �h��!���3L6Bm#ך����� ԘnY���p��&!���I�/��@������{/��[�ZcE���z�����?��1��p���j�SUU������T/'�l^���(�eIh~KH�s&d�0r9S�����Ey���r�@��D�_tݴ��/���غ*��[�p`�1Ĺ���u-\ ��3.��Z�k����@]E��Ua�4M������Ⱦ�>�P���ǎ�щ Y����s�1��K����,�D���i�~~�O$)\�?��9B8����Y=�<���X�Ekkk�@�J&Sr�2)j!���"�{��H��h$�/OOq�_�/��sS/]L�)�6��f��A��ꏦ-���I�}y�G^��g'c|��(w�`ݾ��ݟ��S&��F��Z��N���1v�5����0 ��R�ॅ�U�ʫL�M҆Ef&r�E���&�_�[[��QG!�Nd���a{n�(N�3 ���/o��R�V�ѷb\HdIfL�g�6�eK��W"l�ʲ�}9��CI�r�9)9���gn^K)�� �� ���<��t�I�Q���5&'Օ�y G!O�c� ��?�&O���eQ���x��`�pS���q�ݴƫ��zc4cN8�K ��<|ϧ�y����#�ѳ�\@������w����Gqq��]�زH�B��G��U��y�u�A�2*T_��:��Q�ަ��F[4���M�җ~d��C��\��9AҢ2�ń�T+F^ �v����%�E2H �Wl�j#ŃM�G�^��Y�P�l�m7T���]!G�6W�tt�Rv��M�BJ��M���si�~��$���sCC�kU�+�-@�l��O�P aY,ᔪ<�)��'4'��F�G�'Y�zc�k��&�x<�ob�t_�"��eF$;��\��尼Xb~�����X̬�D�1�灻���fGF�Y_v� �d�;o�E$m!�=u|h��ֆ�h!˲MK����s&B�Q�$85ʷV��uӖYs�2�? ���rX��L�SQ�༆��t��{�@��Px�&f6��kj¼l��������Sl���1�G3���pPk�5j��K��"�=��J]��� %��H�Isf��'�h�ά����QSS�Z�����O�K�?�<�@12l����iz��yY���a��o'/$�n��1aW�- 0�Sy3���2�����[c���m%LO0Mc���0C���P�|��&#q�,��_�FՀ�f���+�O�sK���w�用�7�4(�#�AړI�����Y�\ܞ�7�a�T �,˅Ʀ�������V�����ƿdcC=��s��}v�=��V �ɐ�U��p;�|w�J�R����.UUYLL�bX��OQ��9]�;<2rsSc�ͪ��b �i���=_��Ł2{���?<W��UTt���DV���Ю��< �(J���@�S9_q��L�4� Ĝ���1 �A T���$������5�r�Ӏ~�&w���@�*(n��x�%��cN�I@��� �SN)e*��s��� �=_$*3�z7L/����&Y��#�pq�t�{Ȫ\1� ^�őp���h�,*����I-GdF�6@IEND�B`�PKb��\�%ש 2templates/hathor/images/header/icon-48-section.pngnu�[����PNG IHDR00`� �gPLTE�����������I�J���B�C�����:�;����������Z�[���A�B��ն��R�SE�G��״��Y�Z���P�Q���K�L��������������>�?���������N�O�����ϴ��@�A������5�6)a)��������1�2�ٿu�v&[&���j�kr�sr�s��䚝�������J�KR�S���������S�Ty�{��𧬼���)�*��������������ְ�����1t1���[�[�Ӱ���`�a5�6I�J$z!���g�hD�E���L�MW�X���G�G���U�W)j*a�bc�c������^�_����3�4A�B7�8�������)})Z�[�����Qd�eu�v���7�8h�i����������ѿK�L�ӭ�r�s������-�-f�gOfQ���c�c���f�fi�jO�PDuD���Z\[���nnr:b;y~���|�~�ܶ���B�D���.l.��LP�Q�Ū���fjg^�_f�f�ѯ���������Ҁ�٠��e�{�����Z�[c�d{�|:�8d�dk�kQ B�JL�Mu�vJ�K X!���F�ƛ������J�R��Ʉ����ؘ����������͉�����R�Zout�ð�B^tRNS@��fTIDATx�σ��:���c��m��l۶m��^����>���`�_����mm7���n�:��K�|��$3$I*E�◌LJ3l!SJ�P�ґi)Aw�zl-e�� 08H�/��X�\��C��B!������M]��[���=;�j��,���G߸��N��O65Pa�����~��hS;Z_���+t �BLN�Ȼ��FPW�jW��v'��FYrN'$p���?` ���].׆���I�NgLA���>5��6v:pf�� �� �A��:��:�A4F:�k����F`~9����C8@�un�� HE�����"�ҙy|Ϝ�&SQЋ��K�1OT�a�� ~9�"�V�S�|jv>Yz�Հ) �ހw��g@4З�o�K�8LC�C�y>�����}j�ĘU`��*@ ��I�����2�/>z��ȃu�@��%�r�S�G ������0Kk��)��AE�Lv�ϚոHC��v���Y|Z*�A+�EQ�K�v��n�x����ʹ�Q=�-��Z?w 8ʘ��F��k)�~X?��A`Ϝ�ݤ��5#P�id䡝/�E�~a+9s�Z�h����ϝ�Պ������ʉ���:hE������=@��p�������~�C`8*�����?m�yS�O�17���10h�0� ���?��|˲4��#|ɢ l��rt�����_��� �:Ll�Ѻ��T,��LE D%A�y�]I�ewU`HT%��x�{YOB��c�*��ݤb��n� ��tn0����\�o� T ��O�}HB t�IEND�B`�PKb��\틭�� � /templates/hathor/images/header/icon-48-send.pngnu�[����PNG IHDR00W�� jIDATx^�Z l��fw�k��>���� ��0�)`ZATZ��*��FH�GS( �!@K)MS!�^�-M��4V���#��&��c���k�k���=���{�x�^/�ڴU>��{3ì��|���A�/ÀO����m�y�sF� �y��40���H ���E\�>����I#��)$E��(1�C�%����)�a[�n�?r�Ⱥ�Ǐ�~� 3�.]�|�ʕ�����ӧO��D �l�_�j��4��X�zu�ԩS'6,'...;2225&&f4Amm�;+V�x@���פ�S�Q5�4b#�͛7dɒ%nj3�j��EEE�����"�F�L&��ftuu!�ޝ�Q`��h P�>O�,v��322>GB�ɫ�l6��A`0!��-�k���b#����Ht{�u`��*af9�#�餱c�N���MONN�F,�R`(�� $�2I0����/�^�A��V�cD(@��X)�/]\\��:���u����rrrrSRR&���'��ޤ9S��7}Ј��Lj6�F��c͘�i�Ĵi�rȀ���5`�q'N�ؑ���2B�E�Gٳj��] �x~.�DV�W�Ga��x\��@Q�=�vz�XHdff��!�/�6 f���KX|�<%��Y EhG�z�ڹ��Æ|9w8��n@ p���)#F "�m YG�9C�a���RS3h�Bb|>"ތ��a��<����8��j�"SL�"����Ҁ�B!9�=a�gn�">�w�������n8�$$$d���n���~�Z����ۥ�8L����6��.o��S�Ab�ʕ�E �TWW�@��*�M[<����q�=T5w"�fFVb$}1bD���u �.^�h�z�=���"�:�4��.���������9�RHۉ��$;Oz����V�*��5b�h�l� �δ�|OFa�С#5u�0�m�D i�{n ������0111S�hoo�*�ʈ���Q�p�-^�s�F��щr-�u�'555w!�����~�]���I�O�����{dP�Վ���&CWț6mzV�O!:L�@� z@OU�6C���A��&�ۢ,<��A��#�E�'� #��0��!�% :K�k �'~b/���z��ʚ&ܱ;��E���On�b����E�G���9�q�H���� :��d��ʪ���6��]B�,dU �^��H����upP ٬fd�%a��8��E� �!�(.��3�Yhl���돗���8�d�Jn�G�G7�yh���XrT���ىz{{���l~�a)�-~�ǤRn���ަ�*S��aos�5��O�V�Û�b��v��I�k}��>Y�J��K�;Q�4�yq%{��Ri��T�`��rJĺ����t��Z��H,�4럟�U�'�l�Kسr!G�n�NdQ�" �=��4�yF�Qj���Sw���YE����өp�dm^��U4�@·5�d�/�q5�A��/�7�Nd��8GL%���4�����V��.q��%ڈ��16��^OQ�������ߖ������w5?W��c�]B �X@6<��"��+�5 Gii鯩��Dt)�q8q틎�;�N\HJJ�L�)k�`|z�Z<u/l��:��X�d:N71E��g��i�<�����G5�F���?���(nZT\XX����� 3F��n��)SH�9�� �SI�R���$�ƽ��4�Q^�(��e�"�|�Ji�pb�2�n��U�< �=\Į � �汋��k�<9�������2�Q�$b֡C�����=BZZZ����<�^��8��+9�������}��B�����w�֪��4�xO���=F$P}/���[���f��':Q3�N���GC��B��=9��Eԁ�~�a#�+RÓFX�I|/���*��[�>�9HYq��pp˱�SQ���k֬Y�v���@ߊ�ZW��1�<dg�^�����_/��?��B��K@��#���� �BE�"ƪ:�{ P13UB�҈���s.^�|,=��[1��Ȉ;}�"�2��OѤ����� O��LzO�Fj�x���f@#�v�<r�t���*�S�a@�G UE�`(n�i�4B���0@l��F�D�H&y�E�yH���q���E�y*���>u+mnn�5j�D�j���,R��`��s[�������)�/�ip��� �/=uuu�s��ԕ��ҳ������Ɩ����۷o;._�\�����#��7�"���)�� 2�����o�� �5�K|r�̙2�Q����Q�R�v�mv����tvTTT�Z�_���E��Q��8xvh��L�����vy�7��K���!pj�tѦ�a߾}o|�~��q�\n�������B������ϟ�G�`�e��.���X�iS}�\#� �^��]<@@���b�����j�;V�PI)TC��_R�~Y�Έ�,�kjE����r=����&�F��AP-R�~�XI�NepG�U�$.\�ה7S�� ���G��"\��ՠj�a"��t�#1���y�`=�z�$E�/4|�m�B��.�Ut��S��W����ʧ���z�� U�IEND�B`�PKb��\vG���2templates/hathor/images/header/icon-48-install.pngnu�[����PNG IHDR00W���IDATxՙ�-Y��s���ڶ흵m��m۶�Ƴ��Cw�6/NnO��Fŭ��{jb{��52�������H��oR��YtE�w�Pl�����ӷ/�Z7�"`fb̕zm�V��� �4�x���>�vbqن-KI�ӝ���p_���/�Á �������s_S��a�r���s�N��d�=��D(���O�����Y�۟������Z�����m�(�ӅY>rl[N��m����r��iŚQ1�j�Z�.��5Hm��B�ŘzA�l0� ��cÍ��]ԟw��_�j>VGM���i����!��=Gub����%Ҥ�W`m�%��7�=�(��r������O;�/���$cDS�s}p� �cӄkW���y�=`!�M������qѾZ[�I�t�W�_��Ey>�>b�LS�L�����c�4L�j=�qb���=b���V�i�S�(��N�a��d�=t<? !������;o�{z��Գ�@�V)��f�8ۇ�/����[��e��@�wy�?�F�(DZ��`7B7_^ �_g|�F���.��{�����7Dud'_� ��B:�~�I���\,���ܓ'�z3��\�2z�� P~�@�Nb�Z_ I�q�R����S��^@jUD�q^;۟��y���Aw'�����$,8�cob[z/�":Ĉ@ `a�[�*�P�.��*��פ�̙�(z�4~��]��m7o|�ø�-o@DZ3�h��AL& H� ���������D� �F7rq�1��à4��yɠ�e�u�J��\�+�'?��N��\�3�(��0�!�רк�;��v��ݹS�C{*��u.Ͻn��Fڏ��0b�R���<�O}b�8~��8�E9����r��Ȭר��G���\7j�ʢE)��W�Hϼ��k0bP�)`u/$(7���6g�;��'�nYuI_�u�1B�{l]���!�+#���A������BH��V��-p��l�j���Wh2_���vlZ^�"�_�T���h_m;��[ 2U`��x�Ir�m�8�}��g7���Ni���@� ��8G��.�}��4265�+?� �.�s%t��d�ȴ���_����4�}�'N�%��W�duCvm'�h;r���f|�?���SZ�9p��ޓ6�$�{�惿�+��o��x�w~�#�+ A�Q���J�1��V@i�N���������Pb�l��zQ+E�h���7H�@.� �ݸZ�Z���J�J�y�R�l��d�R�(�p<���� Х����g��Q��ڹg�:Y"b�f�h���jm�$?t� ~<���S�H����H��î.>�@#[��KY<� �O���0�z���ԣIEND�B`�PKb��\U�7�%%0templates/hathor/images/header/icon-48-media.pngnu�[����PNG IHDR00W���IDATx�YEp�=� kF�d�e�ô��0�&��U���03g���A��e��IP��~��[=]��'�5�ԩ: �V�9�{�%c7��`+P=�Y}�=��%���D"q@k=��߬��g~��;�B�?��s�Ç+z��a'�� �b��8�,x�G*�B&��\.6�q��i��Tt%o����l6;�b�JDN�~��Enfq"*"2<w "�@�P��p���d1�=�S3��w'7m�4��E�q�W��Hk-��1Pŧ�rSHdV�=��<���|�OqE���A��.��@��ݼy�'V�Z�����E�L��B5.��H�g��P^�q4�?�z�.�~j]�"�K��~ރ��~�HD�^��@��[XX�.�D$��=�E����Pd�<��UBj�D|�XD�ٔ�Zk���tܿm�V�[����ِ3�'�i������F(533s�5�yM�ڱ�?#��}G���B���'��< E�'Z�+M]?���^�,%=408�A�_3Ć�ʆ��L���=^�P`(�n��8~��<�54@z0m�|#�7��nΡR.�R�8��K����z��H#�Q;���밇9�|=����l���c2�M��+�}��]$]�4���~��F�힚��{�����,`I�7�+��R���e�l�q�'vc*04�\١���-���"�^��M߈0Lߑ3{�V���xՈV�Ző T���[p��!�����R�Q<���~��@ �uخ���F�[��"�{+B�e�Qf"���� �o��*a�h[YE/AD�VC5��2) ���O1� �6o�77�P+0���q�|��m۶�M�3�:X�A� ��F(P,bb����kxv��n�.����c�+h� �4�c�0���WΫ�/�h��+�����P=1�>o�L���ȊY8<s���� ���CarU�/������ �L�R)�5bu4B�^�!��L�VF{FHh���� �㠌�v�\��8�k�ls|�\[.���^vv��{�%�0�i!����'m7�V��!��$-х���cR������%�կ���T@����enb�TL�٭"<�U�p!3��mUG�[���X����@ւt��Gi�k�w{�X6\�h���po�����}���T V^iwLؑ>"F)p�JG ~�>p�Q�ibp_!0-`�"d�]F(�9�ڡx��b`Cj�$����w:�h����s��+�UA� "d ���C�*i`O�muj�\W�բ��� p��0)�⒥ǀ�_�6��'c44G7SN �D���P9���j�k�bu2 �<==��C�>��#�x��Q�c(�(\��a�P�= �DhAi^@G�&�@�y��?j��ͥ��"E�3R�Ц"D��bo* M,щ�P(�hfR��� ��ѩ̏��|!Ą�d�YǶ��@W���h�M�F��rM�ވ�s���߿�|c�j�G 4BD�)1�u�0�K�k�%\\��%�\�"�� �Oh6%>�74��#��UX�^]��ʱ��s��x;G^�~G�6'����@�u�S���j��`�6OV���%qx$�n�}U:���,�dP�����D����h0Kw�q�/�n�n�kȍ������\�o�:�{�{Z���-�ny���G0��Đ�5#��ـa֙yn�V�^���g���?-H2���������B���%#�/��3@�&�̬=z4��� f�)_�[��)9f�F����F`�f&f��?lX�^��j�5�G,.{PP��ڌD6��b���뮻>Γ&�s����_rCD1�Fı<�'�t:ӷ����ܹO}�S'����կ&���F���v�r ԙ�3g���>��d�8.�E�ȷY�cAT5S1�>��^�G,h�43)�7�l��"��&�%W�'�V����u�rߋ�tIEND�B`�PKb��\��<templates/hathor/images/header/icon-48-banner-categories.pngnu�[����PNG IHDR00W��pIDATx^�kl��wf��Ǯ�6l�!m"p�RD҄Vm��&-mD�Q�DmU�C�R)���"��QQDR�*T@�ڴ�A4D�nl^��1֎�ٙ����WXa����H?����:����S}�9���~��k�jty8��6X�w_��x��i%�������y��V�6�W��@��r�-,#X�x~K2M���I_�;�>ɿu��f�9�^>�L��uV�����]���5.��]_��{���2p��tW[�~�H�r��4�u��Ӏp�a]��6R�Cz�?�.I�1j�������_U۰tQ��C/��z�}b��<���dFMNh�7;��f ����5��6���!&�IB��:8a2bZ\7[�u��"���V7?���~7ng�G>���H����1,e>KYy�n~�-g8~ ����[��ޔ�i��=W�͋���7Ĩ�h���Lz��m�]��,�qQ)wFt�Nrql��Q354:��2VmeH�]��:ƅˣ��x~�A �K"�'>�_��ﷻ���qg^�B��W~�$�oݾ��'�6Bs� 钪�� ��#�XV$ft$Y�pm�b`d���F�W���S2زi5w�v2ռ��_��,�C,�S�6E���1n; ��VYG2f;�ꗴG*�9ݨ�j���i��h.�Xw=v)�}�I)�������� H�L2fI/�xf}��i����Gh��J�a��N�����w*� H�XԖ����D���Zp�ȩ�o����P}-'R����k?]��o�h��R�)�R�6�T.~�SF}����X��Dm�R��}y�� I�Fl���2�jCx�^S2Ղ���1�.�x��ܶ�:0>5��"�2�ڐ�IƦ��u�\ʊC�_G3���D C�c�Zo�qP�=�06��u�6ԡ���:fif(/�Q�����^R�QjJӍ��S�&����0�(� o���E��J�"4��Se�8��U�u�9�wG�{$�fw�g�oBzwb��hqe �H����ԯ�\���S�}��t�,O����w��� .��,�;��-[����� ��#T���MHR�u�!4�aEECH��VtC����i9���X�K,�y���L '��n��܂t>F;��x3����*7h�+fi,�ȤĒR�)l�.�iI���1!! 4X���&�H����~V��k\s<� 8� *�#�Gz �8;��21B�~���$�"�R�o�9D��J�\"JHLdm�J qmh�GG_��le+���$7R�v�SW��V;J��1�K^@I�=Tr�Y�;�{9j�ᝫ1�#�8K���{�Y���z��ݒ���ph_�k!�}}�x�����'x'���������gv�l�Ρ�%�f%e�8�=�T��M5�w�E��/�F�|��~n�y��K�LM�t�(�,io���a�hO�9!�j�����(�s�a�[�S֮[j@ ��m(:�0�`�C�L a�R`��ӌ�\f����9�L�-�dn�ю̑�����h��E&�,�"N�E��7�PǨ!)��]-����@;P��|���T2��bcg�|���J��u��p���|h-X)��S�|�~eX�7?��d�N d'����ԟ���:q~�p0�N.Y��_�� ��O4��Mj��l�50�i �K(@ ������>������p�'XӾ��5�B��B�!g�������o[K}_��*�`v e�f �.G1]�OG5͌`���$`+s̡fl� ��E��lܒi���IEND�B`�PKb��\������3templates/hathor/images/header/icon-48-download.pngnu�[����PNG IHDR00W���IDATx���х���HZ[v���9�u*�afff�����L�0{���x̠%���n�JU�hgdUG,�s�}��㟌p"����]�N@�E�-GtX��8�Ãs̨u�' ,"N��x+�vT�����F`��|��F����.�#�����jd�+,a��c "|�<��� O��Q�5'�70#W�������!�@ � U47��7O�/��Υ���G�S��$!����f�tb�'99<�0��a�ߜ'�>�W-��ϡ���%�SZ��P O=�\ɍc� $�� �y�v&�~`�<���*��m�`�S�����('7N�@3t���f�z&pFY%���Y��]�:�j!y���)��3���� �̘�sPoB�a�V�@��GB>WP]�����1�������I��W���:��N��u9/�C {� ��J�F4����<���u�R�|�Hϛ?bޘI�b��x�P�3�]�kׂ0�� k*X��7k� Q��D��4�zv$pJ���C�e�g�L�z��s�X�V���sJ�̘U5����Ԭ����0}BF9�F)j̍f;~�H�б1�T�t��)�bd��y*a�|�nJ�Y(`b� ���ў^VC�M���܃�ɫ�Z�w������E�S��S�2Oe�8ZȬ��� ��m{��BS�&$6UGt�[�$6�T)����:��d5�����^Am�Q�<ۼ�0��Fy�>L�@n�:�j���jT���90eyJ;��Y�0a׀v3�=\~�<�'Mc�Re��� d)O�\���/��"E�s���*U@m�FB��ӳ��vӽ��h�o@X+�@A]�� ��U��_�{�x�ov�̿�|�o��l[�/�T��.;�+QA �t]��w��z��o�*K�Mh] pL�8���Ve/����!�&����(7���_`9��� BѸ!W��V>���y�8�r�L�@��<����Ļ�n~�M�I��Q�8�,��a+旲4'j$�٨�`�}U�����G� g^x)�� ��]�$���! b��,1���m����7��b���)E=�]�O�q/vb�/g��M_�:Ԛ �N$��� ��/�Z(e��1�kI��ڐJ4w����{����50�LB'X��`o��_�Ϳ�l���ܣ��P�W�x���?r�v��������: ��]l�2l4\��ρ ��h���m������,���p�g���|����j��}�g������2�F�� �Ax���<3��8~�k��^>�f0�Cu�;���`U��b��^6��ԗ�VyΧ���͎�w�_���L�Ac�˰lT��ֳ?Ǝ�ov��\8��Mc?X3N$"Bcaa��z�R�h�LD*�Z|և)E�}���N �{�9����9�I���E��]�f�3A*��}����m��ף�S�}5�E�Y�h}�V�\�#�7����\H��\�i�n���O7s���C瞘���6�#S%K��t�������B\��QE�%��`�R��*�1\�x�[��]��a؍�-¤ A���m�(Mu�����u0]9�KLOynj�]̞�D�(&���&ǵA �S��|�'K7�y�D��"ߓ_Ge^�d��O:�������#rDnLf�C+�~�y�"_�@�-����ʑ�±��}�Enr?n��F�ʀ|,����$� �*�]� Sj�5 �xD@�Ԧ�铁���� ����> @��p��mʱ� ^�6�v�w�9t@PAn,��:S��S���I=�y��&̏�@���o�I��<����vIEND�B`�PKb��\���:��3templates/hathor/images/header/icon-48-category.pngnu�[����PNG IHDR00W��]IDATx���\m��ڶm[�U� 1���*Njkmo�+c�v��Q��s��c,��̓����ά��5�.u�K����(�%�J1�@]%�"�)W����F25�E�=e�9@�_@�E�f�����+�0*���I� L�cA�8JG(�0qVa"࠙���pܭ��?��A8���C�s���L�p��B�`�j�f�l i@�8psƟ�#��gFG;�_:t�7 ��)�?ty`�oC~����JGAo�C����}�����o��LQ4�A��~����!��k#�7|-A����F %���-� ��P1�� ԩ�U�7�ʈP=m*A(e�rr���5�������ι`�z�_�A�e~�Ιڷ�EihXI��-\��E �<��ڹ��̅��8w^ww[`D�x���=�g~<���#}В� �������!�z|+jMm���k��kٍ,k��k���ke4�uc��x�ǜ�n��9aƷ��ԁ:R'��钠�Qt�t���oᐝD@�F$`�z鐀���0�bY[�����P�Z���$�:D�8��`i��F� �c�0�IEND�B`�PKb��\O<�Μ�2templates/hathor/images/header/icon-48-menumgr.pngnu�[����PNG IHDR00W��cIDATx��$Y����i��;��m۶m۶m۶m���jV�{7�$���ݚ���~�//��֤�����,�YAb���YS�s�H�Р�@BVp�%��µ^�/(��3k��B����b1�ސ�OZR�$)����v�%�X��@WF;=���U ��d}=��|/>|�4�ĺ��}��[�z �9��w��7�J���Aˠ�/%)�"S�4��������]_�s�hN�5ZX�N�-4@�$H�0�&DsR�Qp ��� 3�6*�Ĵ|�|���8����x�k8����Y��|-��{H���DK�;����m�ޕ��C��j�q�~��T|v�'mD0�4V,Io�*����[f���Hb���MM�I�2�ǁ��}��O�����O+8�.4/��N|��|���˦2G�6��P �+t]g ��c������1�L$Y~�5�����JF�4M��/�T��wb-~��(ǍL6KG����h$�I�y�/�^(�ڋ7P�����!l/�)U�~�����! J|T�ŚB�����x!�(j��=^�m�XW]} �=�v�!����������x�3�?[[[����8��É�b�E�}O���9/�'_,�l6K"��o��[oc�"�)1�5@oO��813Y�����*�e��~��H��X��B�خq2-�c2$�9���^c� 6`��gF��������*s6� 7�iokCc�8��f��_�k�g�*�E6�<�+��b�����O?��{��y��Ub����_��g��/�K��B�E;Ȗ_ay�*���T5�,ۿ��U����e�[�� ���B�E!��(C���P���U���3&L�pڤ�%�G��-~���ʊrJ���!L�������%�&4��P"�-���Vla?�6��N<>J�+G�kQq��]Vf�B�!��,����VWM�"��t�ܓg�}��a�"����1�hhR�n�e�ow�4?y�y��*��x ���TB��20U���/`�o���(X(`�V��% ԇ$ ��9RL�#9 G�� 8?��e<���H\׀Z�P�mHg+G)���w�=DCIEND�B`�PKb��\�ܭ��0templates/hathor/images/header/icon-48-stats.pngnu�[����PNG IHDR00W���IDATx홃�<F���mc{�IԶm�V���\۶m��{�ٳ�=�K�h�^�[�����r$���� BC���p-�B�i�ۚ9�p��7���9ot�.�T^���Ʌ_�iډv�u\#��x���� [ڍv\k�姼#(���[ڍv\k�T��Ўk h8� 9�2��Y�-��C�G����!=����M5�i1��V�o��?$x�Î�:x�ˉW�]x�ǍG�*�z�o���o �P�pCx�ɀ���e<Ӥ�{��` r<�l��ǫ�n�x��n��F�.�CC\�A�!��D�1�� He2��d�9���%���F���������0FFG1>>���I�|>�����Ȁa�bF5�|A�RE�<�����1�:,V~�����눡�C�3�n��� �" #��a1��dX*�t&�l6�\>�B!�R���@���a1+Q�I����ٌ�岈'b�dzZ͛;�����7����^'P��T�)��3�h� �BL!�S�)�b 1���`��S�)�$�D4�С�A�� gJWjw�<^=�5�ζ�V�]H(�hǵ�����7�܀H$ڍv\�拾���;������9�z�b��٬�*�WT(���P(�A*��T*J͔?k�#͚#N$\L���Pg83ڜ4�m������F��t�bIEND�B`�PKb��\�p� 2templates/hathor/images/header/icon-48-preview.pngnu�[����PNG IHDR00W���IDATx���x��N;?\��m��k�f��m;X�x�msx�T���o�H�N��3��5���31�C�, ��h�x�2@ $"l@P @�r@ۡ�|�Z뮷��SkI�ah3���G~���g?,2���N:��CϿ���#,6�b�y��ùyy�֍f��\X`��ެ�K0bY������O����Z��v��47 ,��&�n�l�mȒ��lݐA�N3[��;�<�e�5�za��`V\�*xab�b4'�4$,V]D�<3��lۘE��2�f���=P�p �2});6g����K*�=�<���7K�!�yk�2ъhXk�c�9�s/��:��G�~����b��X=I=�ǀu��H�RضM�( �1�U�5� ��wZkr��d������l�X7S�f�� �J%�!J(�6�l�g1�$V�� ��+ jH+����e��������W�u�A�R�k��"d �c�����h$0r�@��x�VȊ����3��H¨P�k�^� +�:]"� t���z%�|4�-���e}UH�W��(��6-ޘ�_��{¨Q�y���,�(b1^��_��>�B�@�ڎ�� �k��x~|1�:�E�(�D4 ��/�hI��!ـ��~���N�������A��O�[b7�X%�:��v/�j�@k^��r�a�N��4n�������ԉ�[`��a�1~"�W�^c?���>��I��Ba�U�6���p|�a�v�˷���skq¦'w:��0٠�<���]_��O�+2�_�֝K˥�����lj2��!�f@[�g�����u]��R���*�Z���?=���WYe�t=��U���C������n���n��v��Q�Ji�vuذaCƎ;Xa&`i �#~���@��{�`t�*}(W뵰�f������ ���SIEND�B`�PKb��\��4templates/hathor/images/header/icon-48-component.pngnu�[����PNG IHDR00W���IDATx���Z��dx��m۶���Zŷ��ֻ��m۶�';]�Ԝ=����������sN�535l����!��Gn(�#�x���y"Ȕ0�sW~7)X��;�L��D�$�ȜsT�ֽ��~}0��cY���2z�>�1j�{(�Z���sv��Xn'o&v���{���M��4>}*�f������/��O��>Ik����q��/!MR~0|G��+�hr��>��߅�he~=I����g�`�������������~�p��oheG`WY���� ���|�K�KAo}�k�;��MJ#e�|8�y�˲����Gr|��O�~�Ĥ����ja�X2x�pz5�����\KnǤ�g3�N�$�4v��=�s�"i�~�{9��"��+�g��O���(v�o��A��T~;�0MV��$c��Pn� !�o��Fc��&��܈��6Y#�a�(��U��sn��\9.�FYc���R�����6P�ֳ�j�z::���5���E�3��]���{%ϗ���%<�1J��y��֕�q��Uq����)�8����S�x�m2D��ESv,;����QO6t*<�f��^��x�e/���%7WWBn*#��;��Rv�&��ˀ�}K}���,���yA0e`1�� �q��c�2�w��^p�eN��/�C�m}7#�1j��Ķо�Y��{=�-P[��DH��4���q��w'y�Vx� Vx�/�s`��(G��{��>���3c�/�N��jz q�ɭãN�{�+-g4r�R5 �";��ʧ��kz�g[9�=Ͻ�*w�T���$?�א�i�9���W�;��M�Xu�n ��cÜ�X�q�U�v�6��� ��{D�⫮f�n�T8��G���d�N{ZE�ZW ���fJ���s3���Džc��!�|�W��8_�9$�ɻ_�ã��L�?��=��l0�J�N�ݬE IBւ@@�<��W���?%��x�O����4SH��w�x�o�Ν��{P1�DH�q�CgWf@���+�"��An�F*di�B�?U�VB�TG%��ÿT"(/�b�{�D�g`5�Ra#���#B2�\������ʀ: 3�l%E^�F>�%e��0��e m����gGM��6� Z"ι0H=��e\�7��R�-��Q^*��PC\B@Z��G�L��2ۘ�D��@M;�@L��/ ���~�D�Y i� A�$�Z2 9�d�b��"Ul����Ȧ��L|P^���)q�l� �2��XS�P�O���YM�m{���˄�z2�ĩ�%��7z\�cX�#Dd{��{�Խ�9M����]Z)�4�����)����1�S��$d]_����l�}�n�Ź�����+_��߾��o�`'�h�C�}�(�[�ڽ�m;�1��U�S����W\��Uu�E�z�#��l�H��n��Lu��j�w��)�v�+^�\��amm�V�u���%R���'<�9���}n���y�7�1��^�Z�2TW�M�Y�1���W�)�n�[@������s�_���(*�䫽�C�v��O�_�%�p�J�� ,+@W9�RH��:]�������J�X��OK!ׁ$�:ܗ��8�琷*a]�{�g��)',��R���d!$sHI�k�\��&lag ���3��IEND�B`�PKb��\~��/templates/hathor/images/header/icon-48-menu.pngnu�[����PNG IHDR00`� ��PLTE���������������������������ž���������������Ц����������������������ظ�����ǰ��?q������㴴��������������ÿ���i�����:q�Bt����S{����#_�4k����2c���Σ�ԥ��;m����)c�������y��?X|���H�Ks�������������������Ro����`~�Q�u��)Y���ޅ�á�����:UyJq���덪͂��Z�{��u��:`������ɦ��Bi���۔�����7Qu���Ou�d�����$S�������1g�Bk�z�����>Vx���Ln�s��!Z��������������ʌ�����Py�]}�K��Ǿ���Y�'V����x��L����s�� L�.U�i����R�������9c�.[�����:h�Or���Ϧ�Ƙ��Cx��C^(tRNS@��f�IDATx�҃�3I��.��۶=k۶m�z���d����>�$s��i�M�pW�{���{�}��77�@9���8N׃�'n�=�t,65���8|����&2�k�1��/FPY+��z��/������.ņ�4H4�r6�-��e�x<;��փ�w��8n��m�a�����;�>x���Y~�|���x� U�P4�*ʪ�bje��������@R !YV(I����l�1��v%�D����]h0�d�0��HQ���A� a췥��d�� (������>���3�j��p�<�˽����ߟy��?UN&N��>y��G�J��^���������cG���G/<5���uO"�҄��0��)y�)I�0!-d�z��3���!���⮒@lc�#�yi�=�DI�t�����{]���:f��:�$�U�ލ�UL � ����%UR���[��XQ=*(ev��Q�,(��i� =�$ 4�F�c#ղ��=�M��P�k���ݞ�.$�K�,Y�:߱��2�j8VUh����|�|�+�N��݇Jr�~�e��L�R�74��@�'�[_������U����>���vۋ5#�g���|jp�.�&�Є{� � ��Z�(]���[�(�aU= :�BHiA�& �4�����l�M[�x�����)XC+�8~e���n6L�l�o�Us�Kc �;LΔ XOIEND�B`�PKb��\�!~QQ>templates/hathor/images/header/icon-48-jupdate-updatefound.pngnu�[����PNG IHDR00W��IDATx�Օ�OSgƛ,٭�O�b56��6�3F�\l[2=3qN��3����~���lN�dTT7�s� +XȔ: �P��KtP��g߾[����%�|r�����9��T6�d/�&&,"z���KL<&ӵЋD�E��M <D�9a�X�(�!��R�9��#J���H�"�e��1�w����=�c�N�ϰT��\)p�jػb���%�[OKUޑi�q MB*��qWz!�vZ�ֆsƑ���?>�x��j��@�`ߴV��)��qr�"Ћ� �f9�"?x��A<m\�8r�ÐJ*�����9��Z���.u����1��布��j>I}��8�� ":5�Tb�;�T#� ��q; ��Ƴ�G��F&�ҍ��5�m#e������.w����߇i�����C␊:{���!a�׆�Ӿ�l��?6���>�t� [��(iW;{�(���C��W췔���}Q�pg[�� �uGWD�|� �D��s�� ���(֟}l��9�Q~b��g�ٜ���BS0Ї��z8���5��bl�($��ra�c�'�zȵ~P����������֟:`�'p�F`E H�5=OΑ�#C��1�� ��#HM W`��[8�hҔp�#�|�]8�S�0����ؤXbr��&�\Ne�=�G���=8�o�0��- ��E��9��3�Fa�����.��7���ZҬ�s7'�%����q�G�����0Ї��=�ݏ��Ix�bP��*a��?}8���Ё}�|rk;!��J��"��}C�96υ�e�'`�=DI�I']�c��;�s��� |��E:Q�\O��$\�iZ�3��oB}8�� ha9W�R�_�/���xC��)mT�y��� �-��� |yj8�A+�� ��;YA����鹟�wz��n�^���r��{z�J���%�!�u��(�d�@�q=��D�'�Y)x��Jl�vv������� |Z��g��c��rg��O��f�nG�-ؾ��}�m��=�U��;�8z<R�5D���e����M���H��WA.�`^b1 /غزؼY ݏ��-�M����C����b9s��K�`�<l�dg�QX��80w����e0�#EP�V� .���ձ�T��������X���J���e����V`͚4��v Z�/�\z���\r����t%&�g�W+���\���������X�;df/��d�n$Þ��re�d��b��Bb{}/�b�|��]���F����b���`� M-]:�Df�k�˖����3���"k�QĩИ�<����0SU%\��W�\�B`!X���@�lVٹ�'�6lP��32��p�L&y�XE��\�z���JuQ�$�T<�~�I�%$Hؗ�ne����t�+#��b�����lt��h��d�Z�|�^�{f�=1dž��͒�$�I�����pS�:*�k;�� <��O ,:j�f���A-T�`2���j6[��Ϝ �hn�IEND�B`�PKb��\1�`̿�0templates/hathor/images/header/icon-48-purge.pngnu�[����PNG IHDR00W���IDATx�ԅo�F��'�OXa��]�$�1���2C@�r�\����*<� ��b8�~�y+Y֮!�9ѭ���flG��������8pхaJ�s.H�4��b�������C8�Č[ Wd0�kZ�P��#��p iJڿ�QT9���}�@���G�.H��a�ۗpt�]{�����}�;���XDS��-Q9��EJ��X���`�=mo�ꢎf��ڮs!I ��w��9���6>�K���&�h�=�r�#�Y�y�3���5]�$ 9v/F�.�-��1m�5��c{ԞG�!v�>G��o�kr�'�$iȰs�-�o�&� Gv-h-��ϸ���>��u���'��$ �� �` v,�D����G����ג�!�_��S�o�M�'��N��:s���͜��ѐ��\g��y����4&O������v�c�.�FCʗs$~+�"�X�BD�5_���0α�QH�����T�S��_0� Y�Ap��y�^g�5X�ѐ���VD."�l�)ȳ50Bj4C��r٧e,���ξR5W"��=&�ZH���Lo�c=c.���f:�U���b��Ù� c�'l�p�?�3B��*��ô����z�z�9BHI��� �6ߝf0�肔���`Z�J�%qP��T3� A.Rδ.� 5�V�e�a�o�Zv!e�r<t%�|��:z�3SPI���g�4��� �`� Q��I�n�4Y6L��� c?� aƾ?k3��3``�W�ih���q�AZ���%��iP�;��4�3��!M�==td !iԺ�Ga�M��d�D�W����;ӣ�4 +kX����wjn;1��́�EmHzy9Ǖ�4 P4a���A^�� 8����E�9N@��տ�&ӪG�9�ދ�W>�Cr��ոFO/�s��z4��x� �-~>�g3����*�Ç�<,GU���O�`m�+S�H������<d�p(��Ì�IQ�x-s���RC����A�P��.�)@���_���wƙ���8�t�/�u�l�di<�փN����)�70>xG���y[<ǚ2N�3@�dN���D0�X�+!y4dx��+�{���자"4�x��ʿ��=��{̤b��RT�����=�/���63��=�{@��P\��Mn�� �/\oZ�j{B&BCy�={����Wn���+�DP�Ã4C����%������������O�^h�svM��H+h���)]�0af]�u�����S���DG ��$F*�җ^���'B��hC�-:1��Zi���ȳ{fc�hLƈ52�x!r��<bƊ ;�AK%�]s����d��-�W �L�r)�4 d/�?Қ���{�@.��'�_�iØ��ϊLIEND�B`�PKb��\S¿�%%4templates/hathor/images/header/icon-48-writemess.pngnu�[����PNG IHDR00W���IDATx�p�J�u���� �������a����qC;��3�����1�7=��T�D�QU���R=�O����=�pUT��[[����_W�w��{���[a�k�ee�����{��A���/de�ƚ��� �ON�����!,�"���<�.D�p�h��������immm�ag�6S�bT��tj�U�[��1�rafy�d�x�/bʤ����a�۱Ş�����86��[ ����KH��<�~�ٌ��9�{<1!B��I �vWW��kkk�È�{��X,hmm�bR�H;a�uL�)hl�U��,H� �]_� �9����=�<�p8q��E1pM���@qqä����f��DŽ�8�Y`\!�<�333�<�K�.��kƳ��>����������1)�I�C ��0���B��t:y�\�|Y�Z ���e|�ڊ��NjO��&|$e\X\\�2ڸm^����1��Z�z��k��)gԲ���γ|���8�u�5�q0�s%V��:����h¸��B�������>&E���"Do����J$���Y�6��իqE���<^z��K��_�bd7u{���мAfnii�fRd����MUA�fk]�K����>�o�;������e|�pF��a3K�B$''�g��S�F ��r4���m.=�����,ؼ�7\��ƻ�&�VF_��9�d�'0��ն�����lu��@�� �����W*�H��'uN�� o����J�63t�J�>�n�����̹5�`˃����A|�ʎG�ބ�a�'M�L��>l�*�!3�'���Ʃ����Q��i�i7�D"�6Ӊ� ����A���r� S�!$.�� N���+5�vB��l6�;��ޘ�6774��AD�"�!3� �=4UT&��E�4F���9�VA���Ń�͂�̪a_C�/�"�� ���Al�ń�-�n�� b�.�W>$�Oc�1��!�j~.|�Z T�gARFr3k'��MU<��5��*5���τu,��R6��8�2RD3�L�2�&^���E5�4F�j�=D��Χb��>����lx�mt-�d]���r3�;1�H��"�����U��l;���ODwŷ����t������q�_�iv����|�H;�vBjnn~/���`3�`���h�Ck� 4~�_C[�9���N��8z�4��]xɏ��F�3`|�M�f�WB77�����ըY�ڦ��^a1w����+~�?��k��>��3�o9�gM �&2�6[t�hf��?sC����Nh�����k�%�'P�7��� |�������Z��-^���V8�/��z�4s�e��|��J��VF�v�����X�a���K����0M�yZj镒?<77�ﱾ�X�o�6P���.��wf��z3K��}ʆo�6�g�M���%��3�� �47>�w�ä7c���8�^�62�DeTSS�&E�z�f�WFC�r�&y��(X �@D%6�P5<�#e�x�/2�;m�o3��`��ˇD��8r��� �9^7�u��gy��jh��%��D�W[��%4+�/����C0�<��c���199 zﮪ��b!>R ���no�4ĮL�@ ^& �M�ɥ1f�~ӿHw�$�0Z�V�UE���,�'?��YxOdz� ��cAdwN���&��A]�hu�%��s!py��,1���iii�� �̓����3��̱J�D+���s:'�Wb�b�R�H�l?� �>�C�b�f����6|#��<�vj��qK���rX���J�n�3�!���XRFD �ó}��c���()�.ζ3!�ܩ�}+q�-B� "��=�6bfBB[��?�F�,J��l��<::�~��v�{X��f~8�nQ��*ݣ�-9�c��Jii�ɟ��go��e���<��1�l��!|O ��O�8�IEND�B`�PKb��\쿧ʗ�(templates/hathor/images/j_arrow_down.pngnu�[����PNG IHDR �2Ͻ^IDATxc@���yo��g1����@���c�o�Xn���f@���#�o@l�����@����N��M���8�DŽRـ8���E&O:<@�PIEND�B`�PKb��\�I���&templates/hathor/images/admin/tick.pngnu�[����PNG IHDR�a�IDATx���@�k[qj۶ֶm�:��m�m�?�~�t�Rۛ|��L������d�o��S�A�T�$�~92=z9s;�NŖBYD���>��S���n����)�i�=���� [\��w��8�DI���� �Q���z_J)���2��G�E���Ƥ��58nZ/}����G��ݯ��Q8��;5��aQ��#���]Ь���c�v9�r��|E�w_���y�C�ӡ�S��u�9���˪�r����˳�#�3Ah���͢��K��M�9��.�=����n<Uy02���r��j��C�#���<�<�9���-5�� �tE���������;B�� �J��9�r��Ez�u���ȣ�H�E#ʝ����va�J �52��qIEND�B`�PKb��\U�M�*templates/hathor/images/admin/filesave.pngnu�[����PNG IHDR ����IDATHǵ�KOW����g��Q#��V,Pc�"��`�H�t�,Zu��#�UR��Q�HWi[�* �t���<�pC1�1O{&��ئhIUu��+�9��=����G:k��h����EQ�c���ܿ�`1�u�k?�}��|������,�*cR�/W��,�w:����\���&���$���PO��.���p����5n�)loovw�@Qd@�}����۶4w�<��2�ւV�-,,�"8�@Qu-9:ha �R��dj��P�����H̕u#hC<'��*�QȊ�"���1�s9��s0���088������[Z�aT���BGGF`u�d.d�'�3�`�Q�-b���A'4 /�JB<��\�k�����?��S����#�t�'�O�����Ξ��cY�� P��Q@b�x� �O��Ez���F@Շ���D��'Ʊ�1��-0 ���ح�N z�9LMM�����K�H�P�)�~�حT��>�=x���4ꗎj��&&rp/M�4~�u��:NEf�Q:�)&3i��Mc�F��c�!0??�>,m7[���bs�B��a|� $l,��!��&��ZV˱m��2 ��i����T:�&�$S�8k+�Y�l���R�2�W��0yj���8Gs���ȃy�^�#Gy�iZ�,733s�x��������<p��u1=�@b'E݈w�omm������q ��ߙ���04�&B%P��r���C&������I1nnn��.YA���c٬�xty�J�έ;������ ���j&���ԍ�Y�6H��j��N<��^]I���e0M�ض(�����h�ժQ!T��*^���`B����,?-��̓��5��]F�~���y��z�N�y`�y ����X�?�� b��Gz �φ(3�$H�p_���}�"�IEND�B`�PKb��\�o3p$$/templates/hathor/images/admin/icon-16-links.pngnu�[����PNG IHDR�a�IDATx���Q�O\��S������I�m>۶m�wgv϶;�wP'�F����0ESk{ �ᷓ7~Rn�L�3:�Z<@�ą��9��b�b�k"[C���ډ�Fd��VNL�6� r��S����n���/儞�H�'{�ag��3���RX$wS��1����v"����yp���..��s{V����� Ǎ��h#¾���].��{�c�����;� ��"�Kz�KYy9M&3M��<���;��-o��+�#��>vvt���A���g�5L6�y*��i���rOm�-=g|e�&�ɨ��}�k�<w��O��9�����<�a���:��0��K<���Ǎ�K�s�t/���tT�{��XM��������/x�@�����IHL�5�䒙orqٝ4�V�Ν,�Yq??�͍���q�Lm�����+�r2q;�x�G<�ש��i.�ō�B�J �e��N"n�j��{yt�+��i@IEND�B`�PKb��\�D3���+templates/hathor/images/admin/downarrow.pngnu�[����PNG IHDR�axIDATxcl`0g�V�@�����E�@�~�Bx �\�į��?�I�W[vd�4|���2@o�f >��� Ij=� ����dŊ���K��'��e@����@�8�D�e{1� IEND�B`�PKb��\��t��-templates/hathor/images/admin/note_add_16.pngnu�[����PNG IHDR(-S�PLTEF� Y�.K�P�b�9N� R� [�y�TZ���Z��T��@��X��b��I��U�̃��c��,��\��/��E��L�Ϟ��V��Z��P��3��e��z��N��V�Ҕ��?��c��g�눵�z��q��e��~��M���ܼ����x�[���������������������������g�IDAT�=KBa���F���" I56I���ojtp�!p���'�+ |��d�3`N���i���Wp�B�Q�nЃj+tՐ�I�[A�2�!���_W9�-d.GS�G23�����g\�*�j�����U��K�gaS�@�/���{��A_'���3��}�q��=�m���оey ���T�hv��IEND�B`�PKb��\_�s"��*templates/hathor/images/admin/featured.pngnu�[����PNG IHDR�a�IDATx����AD;�A!(� A!(3333���̟�����]{]b|U�nn�{Q���Q�Ճ��>�I���{^e���Q��À�(�Pf"e�s�ݛ�'���݀��]���s��`�f${l���Mnx�����<+����-�w`�0�i�N�՞y�9����y�wu��J�����Zc-f^~�s���ׁfU��[��J������u�5ͲNb�5k��e�rp�n��(h_%�]��<r��/?2X"��h�ށy���Ǵ;����7_���|�d� ��e��yG���]�yb�;�Pm?Gg�~���z��w,<N�P��� �=@��c�*�����2q� ��!���b�8E晲���9@UƬT��y&o'�'�S���-;��cU�\�IEND�B`�PKb��\�HD'+templates/hathor/images/admin/publish_r.pngnu�[����PNG IHDR�a�IDATx����q�o��ݳ�m�6���?d�v=��]S�����;��{�9ۥ�HjҔ����BK�@3�W�栾\�_Q >E9��ԕ�+��'����µ��$�6���=>X��k����9�si�N��q}����P�:ϸ�y��D}"]��w�^��=�.c)��(���=�&�vU�T��Y@�W���m�������s�M�����p����6R�̅���M��дwo�g��")6��q�g|��#ؽ�bą6�^ ĆUO8�/�+ۗf~��>�ZႮ�0'�"��EOm\b+�|f��$K-a.O6�M5/������:T���j�8���,��x7��gw���j�ՕW�uhC!�;B��P^g�Ԇ��N���Nܗ��!���e�����15m?�&��Nh�%}K��x���"{$�i��Zn�P�f E6�&0�}x��F��G�����h�0IEND�B`�PKb��\��u��-templates/hathor/images/admin/collapseall.pngnu�[����PNG IHDR r��|`IDAT(�cX���b1�8W?�'��j꙲�h����jz�?ƪ������?�c��X\kpb����"# ~��@����� `�����14���!�ڡcXIEND�B`�PKb��\۳��jj*templates/hathor/images/admin/sort_asc.pngnu�[����PNG IHDR �8��tRNS�[�"�#IDATxc����Ǚ��$�1�d1�L �d� ��"r�m�IEND�B`�PKb��\�+g_QQ'templates/hathor/images/admin/blank.pngnu�[����PNG IHDR7n�$tRNS��� IDATxch��L��IEND�B`�PKb��\�?;���)templates/hathor/images/admin/uparrow.pngnu�[����PNG IHDR�awIDATxc�`mzQ��di�Zu_��R��_pu5��b�4�L;e���y f&J�F�~f >��p&Q�6l��X� �Y�l���8p;^��v�<�'�����h� ��IEND�B`�PKb��\|�מ��+templates/hathor/images/admin/uparrow-1.pngnu�[����PNG IHDR��h6tRNS���7X}lIDATxc�O" _è�G�O?�|�X o<8��v,4� ���W'��y{Ѷ��Oo��4��V�� �`j8^RS�@SRRpj��t)]X��ΛD{���9w� �84�ӝsKguIEND�B`�PKb��\w��WYY/templates/hathor/images/admin/icon-16-allow.pngnu�[����PNG IHDR�a IDATx��%pA��߫�*^�W�&��#WTQefffffff��j����Q�;�,����/M�R��FRW>+��]Ç�3%SǕ�.�����k?M��̨!o}�l�>����(PHm�:�V��3jO.헲sNs}�s��ֿ���sFl/U��O��$u��u�T�����r�|&��ޛl��^*��Bө�μ����0B�UXx��^=��X�����DՁ�u`�B+�ѱ�w@#��m+��qD1B���Ա� w@�J4�Ǯ���'+���f&�,��IEND�B`�PKb��\x䪅��-templates/hathor/images/admin/downarrow-1.pngnu�[����PNG IHDR��h6tRNS���7X}fIDATxc�O" Yè�����;:�hwK˖��� �jk���۷85�FC@ ��t��Y��~�~,) �zm\�K�ӟ_�<�7<��p(��w�'C%�k �y�j�IEND�B`�PKb��\w��aa6templates/hathor/images/admin/icon-16-denyinactive.pngnu�[����PNG IHDR�a(IDATxc�����p߀��� `��"�M�(�σ==^f$4�ix�������~����": ⱅ6N�π�_��6<qs��6<� �����������GN�x�萆����y�e��ݶᡛmÓ�8����K�]Æ��a�*Lw�k���rbo������6\3�h��d���C�;�� /��p�h�Ec���fZ�\2Ѱ�e��p�\�ᨿ'V|�ڸᜑczᔡ�c���� D`�i☾��Q}��oB:��l�@܀�4{u�8���@���u���IEND�B`�PKb��\�d��'templates/hathor/images/admin/trash.pngnu�[����PNG IHDR(-S�PLTE�����ţ����������𨫴������:;B��������̚����ɤ�����229��������٦�����������˘��ru{�������`ak���]^i���pqv��WXc���RS[������JLU���������|~�CDLkmv�H�tRNS@��f�IDATx^M�E��0І�L�q��/5�;?y�dK�qC����:�~�Hw!���z^M��H��c�W�M<�_� 珛BL�)��jT;Ъ9ji��E=�ڃ ��E�^!��"h�Y���k=k'j`F68X�Yv�����]��o�?� � }�IEND�B`�PKb��\"+�+KK.templates/hathor/images/admin/menu_divider.pngnu�[����PNG IHDR���IDATc<p���P�BI����IEND�B`�PKb��\Wdt���-templates/hathor/images/admin/checked_out.pngnu�[����PNG IHDR�aMIDATxc� H�-�0u�����_�r���n�Dj.J�1w����F�����̂e+_�b�{ _����|����Y��� +֬�|��x5�lX�b� �.WQ�2���� �0y� ]������vN�������2m�y��7̜9���_�0c��/�����U�����d��G�����c����*��?o���G�� �%�m��t��V��:�6`O:A*ZqP\��P��߿����K�O�:����3�/_������96� PPQ3�IJ��cמ����9�߾�����_�i��Qq���s�BgI��IEND�B`�PKb��\븬\��,templates/hathor/images/admin/downarrow0.pngnu�[����PNG IHDR��7�^IDATxcN����� hJN����ߞBSp�����0�5�3w���(�ļ��`h�é�lV���x|�p�U�(�-=���A[IX�PH�IEND�B`�PKb��\=Jd��*templates/hathor/images/admin/uparrow0.pngnu�[����PNG IHDR��7�]IDATxc�`V�,i<�T�\���嫗�B��l���똱Hoc�v~�(�Ģ`_�p�d��Q��o��G��h Nw����V�V��H��:M�IEND�B`�PKb��\]����5templates/hathor/images/admin/icon-16-notice-note.pngnu�[����PNG IHDR�a�IDATx��3�XI�o�}~k۶m7k�F�:�/U��I�&���4���.g�7���7��L�1L:�?l O���N�y��X�ָR H��p��(�;��l������1:�/DU>w�����p�j���Q����G�b�G:�����M*wx$� X�W��ЧD�����*�a<$�����BA(Q�����f i�lN�)�畨PZڟw��O�/���� OC(�-""��"b��?�G���#�K�����O;䵴9d$���t�d^�۬�e���""Zd����P�&�B}� ���㚡��S)��6�W�K�����t_�����U�E��M��q��G4�\��5E�c����t""*E�z>���ʣ�&�K�? t�.�W�5��� H��xS�\���a�)2�$`0�������IEND�B`�PKb��\�}�<kk+templates/hathor/images/admin/sort_desc.pngnu�[����PNG IHDR �8��tRNS�[�"�$IDATxc� � ��?���3�2A �$F"w��.IEND�B`�PKb��\TQM?��3templates/hathor/images/admin/icon-16-protected.pngnu�[����PNG IHDR�aTIDATxݐ��a�7��醵�fnm۶wr��ضm3���za5�x��?���-�X|�����b�C(���O�����+�VX~{{d���?������?y-��I�XJ��u�������Z&�[.��H�L�� (���Q�������\���G�(�?��S�=���?����ɢ������bSF�']��8|��銀��v>74טp���x�\�����lی������c�������3��;SpilN]�g �:��7 �� ��d���ő�������4`��ۯ�}�ՎLq9���t�U�` �l�՛p��ʀV���I��HIEND�B`�PKb��\\�Y��+templates/hathor/images/admin/publish_x.pngnu�[����PNG IHDR�anIDATx���Q��_mۍ����ncm����;{q�):�Z{Pqj�տc�&��y��������s£�{�R|gŻ��QlxJ��A��'� �z'S�5���G\�o?�8���-�Zl���I��E��1�O�1v��J?�n�K���)����P�4��Q誻�Ӎ���1�~��|`�4o�T.��¡Ք�@'��>�{EZOF�,���s�ݳ��T6�����H�uϳ�d�rt�����Ral��+>E�j پS~p)��C ��u�ܻ���^�@�|)��'6҃�nן����;�Z�Al�oH�ހm�~�/x5�z|�.7�7��n�Q��ov ��и$z$�{[H��Nli���OIEND�B`�PKb��\��ܳ�+templates/hathor/images/admin/expandall.pngnu�[����PNG IHDR r��|zIDATxڍ�� � �a[��Z��6誫fh��� � 0�����|� �y݂4�OB���8-�J$�����~H_Ġ�R U�.KacP��K;ݞ���Oa+P�� ���r�S�5�����w��SIEND�B`�PKb��\�z��*templates/hathor/images/admin/disabled.pngnu�[����PNG IHDR��7��IDATx��Ua�P��_B$TB% �0 �� s�1C�ƫ��x��L}��LB{�fsa,O�9Y�9ʷ��0�<0�y�͞6Xb��������4,JD�'fV�d�����#� gaxGT4���aH���Ɉ�J{E4l�� c<� N}�o�A,��g��J'� ܣ�CiW�%rW]�w�9����'�'��.� *�9 �IEND�B`�PKb��\�`�WW7templates/hathor/images/admin/icon-16-allowinactive.pngnu�[����PNG IHDR�aIDATx�уn�Q�ƍ�x���>©��3���l�^g۶�:��h;��ڗ����R*p�g4��Fǭ|Va��8|��Қ�y���h�P��ڀ��fc�D��Æ���ǒ��_踹7��;{t\��y�g@�M.[�n6N=�0�P�S}(,�r��f_�?���H�;̿U[��:��&#�e9��"~�s��Q{$�#Vȍ{b��^�c�d�� �2O[�z �s��IP�W�m�n��qPү2o3m��(�v ,���E�.Bޟ�_�v�Y�^��IEND�B`�PKb��\riS�ii+templates/hathor/images/admin/publish_y.pngnu�[����PNG IHDR�a0IDATxc�:xU�R���Il���c��_;X߿�fY���Y�� l�`���R���D9��~Mb����%�揭�A�`�������6�����ݐ�,� I�@��E�k�{�O�F�������Q�<\�A~��M�]3��O�&�c��~�7�0��X ��� 1�>./l0�peV^ֲ@D!�4� )�a!RT>,����s�0xs��P�@b&�&V�ү����`M���Y ��{پ��:���b��6p��TϛY��,a��@���5�NIEND�B`�PKb��\No����+templates/hathor/images/admin/filter_16.pngnu�[����PNG IHDR�a�IDATxݏ5RCDs�1��%��� �qwww�O6� tg�|+�� 5��$��ɣR�"KAm�%����{�,,�ގ �n�D�l��m<��8z�cq�Mj\��D,��p<��qKU`i�a<>��7�f/>,�����;�ؼ����i\��J[+���=�Z5!����-�IEND�B`�PKb��\����bb.templates/hathor/images/admin/icon-16-deny.pngnu�[����PNG IHDR�a)IDATx͒��`��]��ڶm�6�nv�]ߛ��Z�m����Yv�Q��y����G���Ei���:��ײ�e��37�26�T-[&a�h�����>[�G`�i�3chUc�66��᯼X�����+��G����hBzZ��P&/秵�����wy�F���-�{n��9��������"�$�l�!5oř��r�ط�8���&��uJnӣ�nR#����g�a��J��\$�{��p�N_�D8��`�8H�O�˔���C�8�@�����i7��9��K�������IEND�B`�PKb��\�(�Κ�+templates/hathor/images/admin/publish_g.pngnu�[����PNG IHDR��h6tRNS����6OIDATxc�����O����H���g�~�t� �~�����r����ON�y 4��{א�4�=�����xA�����(�۷�(*�p��)t0�m�^X�� E�{��ٻk�o�=�� ��WK��p@�4Э@��v4;�?n�����/��h����s�� ��s�����K睭*â�} ��C�@S��%�w [���n�Xâ�J�;G�� �D{8ҎK%oTz�� v Ժ+����@Tv�t۩e@Y�1 �ӿ�t�ò�����-i�<p! i�=�ꀚ!q$�"b�=0��+ �Z^v��N�IEND�B`�PKb��\s)X:PP$templates/hathor/images/calendar.pngnu�[����PNG IHDR�aIDATx����I���}�c۶K��b�rl뿈�۶}w��ۙ�,�U���L�&+���O'Cm�����?jnP���he�"Gf�-]; @�vr�!��]�<Zp9q�0����<���w��ף�{���`�@�l~FB|�����Wi>�|L�?�H�H���<y�| P!�%E�ӳa�ݧ[�<�8�rXu�>���aݡ������/�}1�(Vy��f�������ݟ�!��d�H �;7��Ξ�(:��!�����ʔ(�m;���',���=0Bpq㱇~4�C� ���(�ō��p<�/��6�OJ������́�P�HQ�ߺ�5��e�m�r�9)�$�F}AIHsl���p��-,,��~�+ b���sҒb�J��X�0�!4��E�3����u�M�q���\������S��c��W�!T,�ĿO�R"O<7�{E��.�y����圴��S��!�I#�}S�\�ђ��������[��� ��A�3f�vIIEND�B`�PKb��\�����)templates/hathor/images/j_arrow_right.pngnu�[����PNG IHDR �2Ͻ�IDAT�c`�{Oo����B`������� �_.��w=�?�t� A�`��B��bW<�L�d����� S�̣�( w����,��i� �6�v��%`E�k����mu�|�p`��veA h2IEND�B`�PKb��\&��337templates/hathor/images/toolbar/icon-32-article-add.pngnu�[����PNG IHDR @{�u��IDATx��Kl�W�I�[�hAtU����E,(B � �ET�� R�ƋV *��*!$DiDҢʍ���*'Np_��؎�:{ƞ��8��/�����9��o�q�����s�?���w.s�91��Q<311�P(t2�z\�� ������_R����i���K����6�xA�TZ@AA�!��zSSSiyyy<���h��O�崀H$R���,��\�~]����*�!ųieee��{����dU���H@���jZ��#G�p��}��'���W���fc��TUUe�|}}]t5d�Su^�H$$??�1�Z�(�G'N��+Μ93n�|��D��ꤣ�]�*+��練)�Dž�T�r|||���mg��!-�χ�:��H�ܱ�,�Cccc� ��c�s�vh�;bmm-�����eN�:�^aaa������eKs������v`hH�==�����deeҭ����0���VTT�cIgtL���V�m�FGehp��{6ޱ�����4.��0�|��� �A�� �7nH�ի��;uș#�3�/^�4�?:wNz��M�_}780 �3�M�>�f���to���J�y�}�6�-� u41D�ss�>7;+�]]��`P�ݻg044�QO���lJ�#P�rNX+�M�����-���M�����W*��FM��jm�ښ�z��c1&1��*�(|Sq�N!F����ё�)��%�).�:;��������3�n�����T����+~n� 2\�:�phI!�]0%�Ύ���8�Y1l��ˢ��`+V���WN-�|>�!�����^//�4dWJK���A>.*��2S�^�$�Z"~1�(~�wvƲ5�r|lL�)��'q��,�*����S3<~%�A0�X,�$&r��3�|q���6�^�fڞ�g���˒���eue�qY\Xh�&�IY�6��\���kX�>(���O�*�� �f-�@�qKKK���(� �I��q����%%�*��8����DQ�H��|��_t�F d,!�pA !��?�k>�%�����{�+��R��WE�9(R:�]<�K6K�I�ef6���߉|��X+}E�3Q�m� nvs9��3JhI�x��xBV=EN���ٗDZ�"��yB�-eG�s%������x<�7?N�HT�]u�OE��ez�k�s�x�r&��xLI�p"5'i=��X8l���;ω�M#�F�A#�OE`.d��=��;�]�S;�df?��Cl��i��b�oE��Q8kũ9��� �<���n.GGF�>fHo�H>��7�H����x�;"�%"�G����g�>��g?T���S��(��/�_�?9↕7�>O�2 x�a@�`8��:��r���ٌ�?:�|y?��L�#�H0�y���+��+�e�O�D|1x:E~`��' �' �' �' �E��g.���a~hHNliS�/+ ���jCZQ^u`�!��3�g���N9���g/A��q�o> �Y`s�1k����~o :�c:D�%��l�S'%�S%G��%(�T2�Zo�L���C^�K���p��94�g����=Z���r��( 9wN��8��C�!ZL&�s��nȹ� n�2%(�w=�V��q�C.�\6�.�s;�*������4��� �dJP@1"�NǐS��1Nq���5�� ̬g���{��V�'(p�pK�+8 it2\�\d�45!�{��ͧNP@ܮd�� ����ݐ�%dLP"U���aa����#��'(��r2��.Hi/ 8�)� "Ő08%D 2ikkK�[�uttL?t���h���%ː���d�pI�d٩�a������Ǐ1 �%.�d}�Ͳ0�ѡ��"Ng#AA�EZ���n�DV]:a鼧��,ͅh�ʹۥjd'Aa;�l۳=�IP����!{OP���e�=AaZ�k���---�YIP��{������a //�[YKP�cǎ����n'�z��>�m9; w�,��D�`s��@�X�^_1IEND�B`�PKb��\���4��4templates/hathor/images/toolbar/icon-32-user-add.pngnu�[����PNG IHDR @{�u��IDATx^�]hU���Mڔ�R�nAD�>����}kJ�)��Ⳛ� (������/��nUDhJ?�P�I��PH^�P�f4��c������u�pY73�����,����{���QF�Gqt`�q�zGM�8�n��`;��8� cEB�^�B�T�v0\�:��b��Sૅ��G'����^m A�Z%d[���J ���JD(�`�P.� �p4�PȅP�B��,�V%'���t�8*�@� B�DD��& ��{�8�B��@J#Xg^��x����:/.���K3]+v�)��x�T�E1@���|t�L�s�w���oCG�>�Q�|4��&�_���o9��i�x�y�O.���/���[Jկ�nNcĠ=岮Z5m�$J��ó&Nu��,�5��a���ZԢK�#�.Mg7���^����Z�U�Pv��ר�"�}��'��?�y��u��"��� m�u��g��q�ܖ��l> 0 ,f���5�\��&h�� +��Z[۽�k1��)<���XE�~ �^Q\_RX7�*�Ę�D�OX4��:P���t�*܇�pkë<����,��B~luNS� �U�S��Ǩޅ�o��5E��yn���T�N� �k��D�T-�먑�.s���˰���<���d��Y�A(�C�J˥d���������� �兗�bS \,�l0��;�c=(5�B���EX/ՋA�bP�~��b�)�\�lO� ��GrZ�Z���+�O�ﰾx�{��t.�N���l�X��ed3i�qz���aތKfS�l�p����'�Q���<Z���M��@1���|j���_Ǐ�y�8s�L�PJ 뾁�<pphh�����b1<����`#��*�<y2��m���v'���T�}�,"H�"�hr�_N�8q"��T��*�J����k!Q8`j�P�Q80L��{[?ؽ{�0�0"��T��� ﭯ�14����|����,A���8��܆�N�J�[�6 p���'�����@1�_�N�>�����(�qݎ���|�!n��<::j���9`ܻ�<b����'����� �C����JA� ��g;;;���Xm��ٝ;w��`B��*n&�]]]B.b�V����H�s�Ν��# �^����===r|��핂���|@����b<x�y�{� ����(�7�"�z�A�T*o߾�����رC�����kU�!�4엾�>���[�_3Y�`�f��M�t��% ��/_����,�D"���ٳ����ɷc�ȕJ˲$S*�hoo����w��ڥ�%i��'��{�ǁ��wQ6*p���`��&%�{x<��;4�Y�E�IEND�B`�PKb��\�;= � 1templates/hathor/images/toolbar/icon-32-inbox.pngnu�[����PNG IHDR @{�u� dIDATx��yPU��/�6D�PE����1qj;�v��?�Il��?�6�dڒ6ͤII4A��h,ƊZ�}Yd�d�}e�e�#3���g��wy�9��3��g�}��������Gu%%%�b�����C(�c�1�iiiTSSC�nݢ7nϝ5�����TPP@���4::Je-}�Z�It������7���oߦ;w����0m��'��z�t�ttS~~>��j��811q�ŋc._�L999���$<���twwSGG�=�����H�_Kq�TYYI�.]�cF��^���� �,�������^����E���@���TVV&�p&!�"U��=��������(<�V�F�<CpUU�𦤤�E��� ����t��u�����)F���`eP/�! 7�?55E�����:��:��>ԁ(ƈ��5�(@���N���q����"�tzzZ�"j�z�ԕTX�+ғ���4���s�8"� �P633Cw��U��/s�Wxa��t���J��rM�W�FP��1����^QQQ���H���0BK��{�hvv�^̝��C/����a�Y\#�rbbb�����m)��q�1N�H�_��R�����k������ �RcD����`���Lj�x��C����vS�ޠ�G��Y��B�6��I燂�h��F�Qy�T������RC�~��-����.bSs(46�I��ȋ�,���Y}��i*ƍ�^�&dM�ەF���P��I��JE���ѓ�T�I�%�(X��I�FTwd3�8S�A����mT��Jm�����:>�J�A�4����b�3��C �J��CR�B�Z.��^�R�k1����O��^Ky�i�τ8͎ �ޖ(�Mk*<`OKٿ4ݧ݄��?�P�;�N���I���-�m7#�q:*�1��?J��:�D��$�4�;QO�us�(���Q�Ϫ��|K�z��}�*|�i��O1�S��QR�.=�:P��5s*|ۆ/<�E�[j�w����1*�r����c;�n�+_SF��?:2oL�I{� Q�Q��6��sƊ}�C[�^�E��� �y8�I���1�%c"l����=It������pG-J�fI͇l�/�J{����[�yߚ�}�w�,�V췢�c�2f�셎��:S�M��L��O����=��i(Ȇ&O�~{��cI퇬��W���y�c��2:?�"��|UB<t�H �f4lA�'- ��q9jNJ�k��i�Q��Ҿa?#�;fJ�� �h�1�Ѭ�A�s�5�/�j�S�F�H4���(�-)�u�`l5�&�:f�7���+ҙ0/)��o�ؓ/K�/I �|QR�xQR�|�)QFs��d�zY��������<�<���{'@x\7Ɲy�yre�v=<�¶��[��s�qf�ފL3�L`�XI��׃�� z��0��B�����i o�8����sg �-ކq:�k9�x-G�g�{�{+Lp��k9#0����n���|��İb��%<�σ8� ����k�@�pV����Y{�7�p�{��B����"� Gp�r���#�=��0#���Z���H�`xp䒻!���ȱ��� b �Ct�#`P�Z 0��2(�:!��������A������R�A`/��dG���N�sss�"�tqqQ̡�=�"��# ���rƜ-a�c�B��piiI�r�p�F�`�\M,��՛w(f�g�hx�7$�`�.����@�������B�K9���t�ڵX�%��e���<��B�5������#Ұ�1��(��0+w���Rvvv1��X�2���q�є��ͅrG�.4�����P��Y⧈=�Ő���'aj{D|u�0<F��� ��[sx�� ��ի�{bx�{� �w5p]�p�4��^l�z@�P���b]�ze�i �9���b��BSD:.\�@\c;W��!��!@�:P�{*�9F8����1�P�����ŋ9]��m�gQ� 4<B�!T6B�QĈ˭]��� 0:�N���{peb3�^h���[x'�c��,�0B�5�+��Хe�FX!��U@�����a��g�E�`�B�S�+߰`���`(���=��vzY9�1b�Ր��0^N���� �C������@ga����'��9 �Ѭ�A�sƕC����bP��#�u�`l�l� ����y����2�LBxx��Qk�(�j^��اAd�����y�y���N��0n�;������zxz�m+�b/�=�4�7#�̦���2f0���������Z\s8IEND�B`�PKb��\7(u�gg1templates/hathor/images/toolbar/icon-32-stats.pngnu�[����PNG IHDR @{�u�.IDATx�p�V�ˌWf�P��ۡ�1333333_4�c�㘙�~aƲs�]i�j��p��v�|�߮-�ޫ�H�k�ې����{�[�k�_�܊<߭���M=��Ф�Tg�y��j�h��rcG7��;�=�\U��t5����c��ً_��o��H�5V�������n�����z�뿜4��灍��z���qs�<'`���^�֝���� �և ��lsv�@���*��=�p@jY��PE�����6����8����)@k�[ٖ|3d4_�� �(���T!�!��R�B�PVV ��7�@mm ���AcS8vhkk��qɡ��O|n�������9v�4�SV�NI/��Q��C]}=k���Vp����/�@*��s��A$��HD�Rr�ҘΟ?�mmx���n�( ����_�@���b�<�i��B!;0aٌ�<�ڵ�� ����9|DGg|�+�����`HI$EO$!�$PZVΨ���5�8�|����.���۷o5J�$IIM��""W�HF�i�R+�F�&�:-���!�b4��l"4M���CB�$6�1)}�X,�dvv���_{�3�\�j�����ȳ]���&��b�!�?rA1dȐ�K�,�_�p!��`�ݻ_yA��/��w�ު3g�@W�v�ڿ.(fΜy��� �|� A� :Bѷo_��b�ԩԾ}�@(z���wD[�n�����~�! �?��b�$ H&��t:��AEE��W��烚�x�9��v�ٳ�6�ĉ�8@��q@�A���j4�l�z�46Bz&A+��6�m���YQ�xD�Q.�>�g�癜8r���R����y��\���JKK����5#.\`o��́���������nV���7�����; v@��R ��lނ �Q��@UUL�4���x뭷>�)t.�j� �������<y���^�O"�`0��D�r91��$6����j��"h����":��x<��w*����4M��}��B��0bxu;�5NIEND�B`�PKb��\Ռ��rr0templates/hathor/images/toolbar/icon-32-lock.pngnu�[����PNG IHDR @LP��HPLTE������������������������������������Ż��������kkk���������uts{{{fff�~ȴ��tRNS@��f�IDATx^���n�0CK�M��$]�����B�4����<���/��Z�Qm�?2��O 9�-�U�3�*:�!RqE_�,N~;�y��7}��@��L�Ы#e�qi�ƅ�P��-S�9��V)(���#4ħ:/�K�!-f(:����h��KJ.�p��\u���D�K�:88��d0J��\�IZ/�b�${I�AҬ���F������d��d/�kN��y�d]Kü�����t:���ad|��RqْR�'���;A��e;e�%���Р�xX3�by�G�x^`<$�BW�� ���:��af��ӓ/ ��ڏ�i��0!��Z�����.�qDp�^\x�ko}����゙�4��,|�/q�`�|X$X��/$�^�D�x������Ii�QSu(�ˈ�6�[��R��Z���&h��G�����&��&{�<����ZIEND�B`�PKb��\�i3pp=templates/hathor/images/toolbar/icon-32-banner-categories.pngnu�[����PNG IHDR @{�u�7IDATx^�Xml��~��N�8ɛ��%�>�&6D�ب��k�ю6ubF�N�S�I[�Mj�M�&��Q�&4-t� �[� �0 ]�))M�G��#�?_�w��Q��#�V�H������s�=�r�6�<������xK,���Ŋ��1���F��\�p̭�Z��]?��U���w*%��vG���܊�`�`C�ز}#J*��Fۯ/�7p8.D8�����d>;x���+i�;�ٷ���=��㥿p��d��p�}�ċo�G�?���9~��>��+���?}���ے6�ӣǪ��ٯ�-J]���"s�c,��jk!��x(�fDg�͎*록uU����а��!i?�%���}W����;o<Պ̀9&�����������}^���ԕ��Ey�^v4��G�@3�f6W���>Ěl�x�����罁݂ܕqN�{��B��st�\0�6��jD�Մu&��LO�KzC�W�E$�����>��X�$�3�8��� ��T ���I@��V9$��[�_����Wܯ��Y X��q�WNQg@4'B\#@e,I*�h�X����&�U�e-�3�۟�]�\O���DR��!�qȲ, ��3�r|8p�>���e�[B�}�0$��DP8 �y!���g&��\hOW�'B��f�uק ��n.Ār�-&�r����PYh���BL��w�P�%�6�p}h �Qj[�]�7ۥM_m�D☊���2�+�I��!��sMI�B$�� k���:�C�_�K�;�N�0�]� ��مo/A�H�D�<a�+|���d�Y�&Q(�%J�g��NH����e-� W���&P�}�(�����J1:��8in�窫�(����㛞?�FMI~�����^<�/�Ș���״v�c1�F���R>����Xz�u��r�e�C�-���GX����멿�v��d��i������(P�ȫ��� �{Q��N�`� {f������!�ߜ���L+#��d"@x�Iȿ�+!?��0%���2�m�/�: ��`�%����2/D2�A�;���R�+���Fc�^��۾�|Y\�nd#�T���'ܹ�̰l1#�o]�2b-?�~�x��!� Ś�!��p���g������Ϋg�<��:�Db(�!)V��> ���JD����Q%$�Z�e�j��xA�A�ߑi�E��Q������jP\�tII$-�TU�4@4���w�u���mP8p � ���.�h4�WVV:L&b��`UUUb055�����a'��B�sQ/^�� �b�Y,;,�]s���?�]��188�����Z� �v����������j�;Q�V+$I"���n���V1?'�I$�����Cb�J?�>� ���all�w���皛�ӿ /\�@q��e�RLq�nEEE�����f� '7�Lw�����(l۶ w��� �o_� �mhhP�j$�?;�+ $�����DfIu����Ј۷o�gOV ��~X�&�\SH���$�������A��<[���(..N���u���}^^^���q��ؠ\�P"�S<@�4m��u�(���Ν;�9��=�c^� O� ��{��E��Qv�!N C<�����?s���(!��-K @a PVS X�z5DѡL���DHǓ>K��������"��F��T�@ @.GII ����u�V:�DJ�O¨�`�-��y{N��8ȕT� � :����CE���ߨfPAғ�N������n���$%������)sV�������+$�v���OZ'������/���^���B�y4=t��d��+֠�iKr4(2JB�X� pez �BV�2oP�yӜ�\NB�x!�2 �uЂ��[� 7d=Z��p!��]�b��͗�-�<����V�7�r�p���ϾAq��ᗏ9�5Mc�s[ \|�\�$��ū*p�ĉO~���YD�F�ǷIEND�B`�PKb��\2���ww4templates/hathor/images/toolbar/icon-32-download.pngnu�[����PNG IHDR @{�u�>IDATx��iOTgǏZm�Z{��}K�&M��i��/��M���IkcA�Ez-�P-c]p�����V��d_.�lC��e��vzΝg��;����0�9��3wxqaQ/��M�pn� %3(��g��3 ��(��� � {���f�K����i��I�r�`�� o�I��B���y��)R��� 寇��5,@���E��٣���!��~���^�3.�,�7&�b'���FD�H��Q#H{/����hͨB��r?*�r�2¡zj��W�V��2��g���>���TކF�)nDHSr��n� �2\J@Hw�Z�R�4��"��C�� �҉>NӨO��r� J�5h >�мS����!,��8�x/±�PR�QrV����cts�&ն���\���n�%�_� e�Α��*�ܣWwǀ�u!���#� a_-��[rP�t7�_�W�����Z�RW Lu���I2�ԣTD�ϩ@��IVzPʻ��&�]��ulj]L�ڎ�G��� T��q��m:Z];�j���Ǯj�檣Wv�jė�9�֕�T{����Kr�$#��@{e�����M��8�Hi�US�^e��z�5��K�D&5�d��������djf]$�FSI-�O)�A�$�~8EM4`��#1��B�RjxuB�J,�a�L79O���ac�J�|�G�|S:5��O�HTp-+����(�����H{2���,2<��ݟ��bO#���%RC{.Ѿ�sV|��d��� d��cnHlN�۳؞-@D��!�̓/�m ��q��OM'���x�qv�_�Ya�I7$�z���&�v2H���A ��_�e���i6�`A���ml=�x2�f�B�!��� G�x+,��ˈW��ě�[��+|�#6��?&��F)W��3D�Ŭ&V�+����k�����O �9m�Y�؏�w A�Lz�X��Я�u��gAX��O-��mm�˴i,��kxM�j���~���7���j���:�#z&"`�6�| F�/�E-jQ�E�Ix0T a#,/��K&��XPo�<���+��O��G���Ç<~�X=ӑ�H��O�<�;w��7pff����x��u�{���#+�ETD$0�����c�(ܼyS���u�+���`nݺ���H]�۷os�����7���8� � ��{N��NOO����c8�����!P���)���@#MNNrkD���p�F\������������� �s�#���{�����nu�F���Ȉ:���a�F3��?|#�}�U}}}����7�ghh;;;��)�7���H`&2T���ra[[�z3q��(�ù��`������bss3���?w쭭��9z`����ztuuaCC�:�`�7��ݍ�NWTL&P�������q�766�B�joo�"<��O���kjj?�3#l0WQA��@!�D---"��@!L�͛���ml� /)RSSߡ�zOSSӈ�)?����|a/)bcc�v8��,�-eee��'I����ŗ/�K���P��ǖIEND�B`�PKb��\n=����3templates/hathor/images/toolbar/icon-32-archive.pngnu�[����PNG IHDR @{�u�IDATx�XE�#GL�2�H�w�13����{��e���gf�ef�����A��H���G��Uh1#2z��]U�� ^}�U�,�O>��˺�;��`�CSN�:=�n�a���o�6�-i�����M���"/�����L� ݥ��O�=�,n���������/�� "��FY�ƅ�����h��XTF�S���;w��y �yN?~���b��T[�QP������pa(�� ���!$ f�r�����f���*�5>��c���o�8e*T�L&�"lg�_�~��)���i�:e2�� �����{LR�@Y��#���l�?ر}[&�T�����������Z�QQY���Z:��Ȁ�0n܄����FL@�G��*X���Y6����a���?� �P�D��MDY�U�%�3o>����>� �Ԅm����ȪT��p���d�%� �{����CG�g�����0�!a���J-o��6hn�If���Ť� �Z~��W�=ss�-H�^����7z!��|�����P꽖H+�ȂN��2�5{.]2�e$�h�����f�/�����U+W ����Ϙ\��pZe��9��f���QP�j��K^ˀ��z����=�7��4K1W�\�N'��_��J��w��܌3g�X���4���->/y{�`0�?# ����ʌ2p��k嗳��h ���g3Q^^��xM���G�����\�V2����<��)�}\�ݘ9�� � [�|���d",G��� ���ԍ_N@TXc\ {��l a#7k�CH�Ў�B7bD�2`�d� �G nքE��?�)�xS�\���ˠ�ߠX�jF�A!X�t�C7�pCn ���ZL�>�]���<\��9��M�6a߾}4hP� � O���l,G��d0�E]]��g~��������rq ��cP8p��cǎ��bذa())�֭[;Ǡ��TTTt�A�㗧t�A1|�pFl��1(v���2�:Ǡ�0bx"�aPШ̂A���s���� 9M\$&{�<�F�ݽ �>��Ϡ�3(��>��?�ϴ}�.��IEND�B`�PKb��\��>0templates/hathor/images/toolbar/icon-32-back.pngnu�[����PNG IHDR @LP���PLTE����������������̥�����������������R� ������͔�ꗁ�'��sN� �Ƅ��M�艪�D���ؕ�ݷJ� ��S�Ϟ���N���;��ue� ��b�9��l[�n���5x�!��z��/y�Tg�@��LY�"n�<��Yf���8h�1���G� s�$���YX�Y���{^����a�����>�̃Z���c��l��k��P�؍S���ߌ�q�ݜ����ͯ�l��,�륯�`��W��@_���a��ƌt���,�ռ[���RS� P� �ב�鰒�Q�ᖲ炗�r�ʋ��Y�.N� ��w��R[�,��I]���9R���H��j��^�1��?K�k�:��~���|��T��8a�P��븓�q��,��I��i���/��z��?��n}�"��a��K_�'��v��V��ap�@h� ��yF� ��e��8�ă��N��[���[ .5.tRNS@��f�IDATx����@�L�ٚk���m�~�m���M�f7~�x�ZJ��즗� E*�7��r��"I)P���N��V�o���,$�����3-#�q�呖�It^h:��0�_�����x棏��������D���+�!�@N��{�#vr��M<=BH������/J��WBώL��� X&�G#~�y���� ��opK ��js,��S�T� �p�6X�4��w&���0X"��d�A>��<�K�����QB����jV�++/�M���IS�L~\ ��ĉ�B��,�48���t1���V)�Ryvh�p]6,Ӽ >��Dl6�o�k<~���i�/�L���ڭ��5�gVV�S��ՕL{C�騈�e���y��6v��8[��L�$9�@�J4����oVe�����ǷU2��^�}� "��$"@朽?sc�E��HTbuT�>��_��GdF����ʪoZ�+�{��� 9㬧��FT�^�g&eV¹��$U�H>A��>@�\{ּw�'AkXn]�ꀲ�6QD�u��T��l?|L�f��`��Q� �ю�g��#�C��W)6��^gw�D?�{/9�)���dPĵ�R�lM�He���@�%t\<��,�nl�A���y!C�d3�����ӛ[ˮ\�y������nO;3��^���Yu�� �Q��k��7C<�l��+XIEND�B`�PKb��\V��/templates/hathor/images/toolbar/icon-32-xml.pngnu�[����PNG IHDR @LP���PLTE���������������������������̾�����n����������|�˶��f�������^��d������������������ō�ǹ���b����ؾ�隺�u�Ʊ�����q����Ɇ��q�����c��}������֕��b��m������������⤿�Q��VtRNS@��fIDATx^}��+1Fc Ly.33���� �IF��#ەO��QT�`j�:�� ��9q�A�/��+���@/��~s{q�;���u�_�)�k����K��ϣ��F�]D�w�o�����;�qb�o�.�O�'�>>�~����e|��4�}��y��I R+P0*DO�} �\>�� HYr�҇����2T�B@�������V�U ��>kK��}���{��P�$�T�"���4�� V'(Q�Sra@$�ȝ��Gy;�ڔ���Z�:��$������C�"H�hӅ�d @J�y���+\��� �HAY��p �g�q�AT\d�^M��PnB�:���@���W�4�t�)�N�A�%&+6Qׄ�O� ���'"���#Je̐�� �lD�c��e��O�Ȣ���A���(,x0�r�l yѥ�����������(�V�qfc�X�a.����Тu+� �y.P!� ��*�ך+��׆IEND�B`�PKb��\*`�#1templates/hathor/images/toolbar/icon-32-alert.pngnu�[����PNG IHDR @{�u��IDATx���$M���ofU����m۶m�l���m۶��a5�rqX�6v<���繭��x+*����OD�3�7�ϔ��6��7�3�^\�5�a��1()�:"+P]�eT� =��`fE�V���D���� a��L<q$qLܚB�������\�ݨ�9&���\��j�Nxg]k��f����k`0 إQ-�0A.iИ^�s/��9���ЉS�y'}�7`�>�MHZ�&¦sn��g�����͋0���q��)ETj���ߋw/>C�؛N��;�Z�SP���@UI�kx�o�"{�z6Y#/&�� ��!eJl`��x0��<�䄉�(�T�wy�D��"��ȋEq"x������G�Ow����*y��d��9�̑tڍ��dr�<�y��j�"� c�y���E� ȣD)p� KG%͆QQ@� ��U��W��,$���΄-W����T��� �B-��J\�s QfV=@�膵���*8�\�U=LT/!�P�q8��Hقn�@���u��E1r��Hr�N�¢��^�X��W?@��E�M�ґ�5D�##,j �����1l|�~�:�XR���4Q:�ܚ��J�5��M�2�q-�$�� 811�15d�^ �N�pY��V<�\C��t>��D)b���S�)��E�DWa�."�A �X�������g(U�)��5�L'^$#����0� K�i.�t�H�穅x�B<�j*ְ{) 6�*a!ޏ9�<2B�!����<�[*��x�m�P���8�,f6���,~t#��dGF��b0A�b�~%؟��X��՝�z�R{Lkf&p�GC�^�.���_�h��N~|���Y�g0@�Z%v���`����qq�_/�F��1qc0,�a`�}ɚ��~LyH�(�}��h:�����t.2�������Z��٤!�W��-�g,M,�J�@�ZA�e���W>֑N�����M���_��t-n�J%�5�<�wL�N{�K�G�|���E!�j'R��7>����@�Sv���pi�Zy�@�|F���g�3MQ0Y�V"*����7[+�[�W����|��ݘ��2W��Z�|]- ,vNؚU�{q^d*vn�T3�M,�)����ݽd�,����Sw�3�x�Jt~_hN)[�� ��`�uч�cY�p{c�7�̌}@8@(`�.��a���f(���74�Q`PrB��L�>��L�ߧ J����0�]� �%>�r!-��v�$�ß�,�f������1��T�1�u���0Y0��x�uOFU���o��s����}�v��&�Z�e�]�V�chy,���_�kVկjƎ����F��m�i�&]�b��Z-�S��?���iΚ5ktÆ ��|�r������4����Ǔ�.����$I�N��O��D�1���֦����a�'�d�"�)�[� �"�m�F��>��S����/� ��1�p�; ����1��2�tp��\�-@���T�yn��Y8��9w>]Xkɷ۲e���i[z8�l��AA�az(�J��g�=�$�1A�&�0@��V{:��6�g��r��,���m�Z-���i��g�t}{I+~ff�u�֥�gΜ9�m��W��Ӆ1aɒ%T*��c�t�~�W�@�g����nݚ�AD�^Oߓ��룇��&�ǁ��AZ|���{nvGĢE��g�}z >�30�p>��d�50==ݫ�е2�X`0�igTT]� �٬kD�G�vB隧�ޮ~.\��@���r �i�.>����}�ܹs�7o^Z�������(�p0N�x�bz�v���-?�/�� ���O>���~�)�<�\.�e�ݗ.�8�ΎS���z�?|��\�D�������}�so��'?��/|���O��;��7��;�줓N:8888 89��B`�����fy��-`��ߤ0�̛�y��Ox�Ԝ�&IEND�B`�PKb��\h�~��?templates/hathor/images/toolbar/icon-32-contacts-categories.pngnu�[����PNG IHDR @{�u�ZIDATx^��k\EƟ��g7�i6��)%�*նiـ��[�Di�R@���_Q�� z�R�^ �ܕ hhi���6�6擘��1�:�@��9��4Q�<�f�l8g~�y�}� "����o���4?9-+zPL��~kl[d��R(��(�z����[7'@���$J>�3�8�f�B���^���ApR�����%�JU������;' �W�`��q��Z}������D���N��4vB��8|��W@Me�@(�����4}P��/���C��7��Yhm\0��� +=�V������b�U@���7,�Uq��w �5w��H2J4����<� tRt�E�w{��<���.��?��O��>@��*�O��e����~�%�k�g�B'��0��i��$l*��\�C^�G1�<��HD!��E�,)D���" ^�=q�( �8G,�u���uD��[[O;�D����S�R"-���v�t �J۞@����"����S�v;� (�^�@kh20���bW����x+.}�pe:�&���0�eu?����W�]��۸����m�D�P �!�3�0!JUGO�t�$��d���>w��%�~����0��=`@��N~�/LC*��'Q��=�2V�|�]��فXk(�DI)��<� �*�U }��/\R@����^.�c�A�_�G,�P�\�P�8O�{���O�GƐ�@�g@w�@*��%����ic��Q�*�|x3�#���X6D����a�<����h�nG���9��D��I�� (����d@�r���ftHG�D���������.�.@�N�^�zZJ9�.DD�����tB"�Y"�kY !�Qg�Ʊc�&�E "��e��g�(��V����Չ�"ŎM2D� ?{��Ş={`嚎NRJ��ݻh�Z�+W�4�?>��������S�T*���E���N���Y^^��Ғ�x�e�`��3��s�{`eeŤc��Ϯq$OH6� [dr�*OJh{��J�R~�q��e�j ��2�poF3���;�+ƌ�V�TOoo�k��N�bќ yBb ��ֺo�J�Ԣ� �l���Zo�������R��Y�?��l�iV����v����e��Esss��������0]�Ȭ���!DQdf7Lp?��!,�y8[n��Yڷo��\����G��i��0D�\�xB����~���X�\����� ���3A��@b�='$�َNm�o6��MKlR����nL:q�ƍF�Z5��jN���ҕ��!�t������ȱQ�K'$�H�m�K��{IEND�B`�PKb��\wR�T��0templates/hathor/images/toolbar/icon-32-copy.pngnu�[����PNG IHDR @LP��!PLTE�����������������������������,�z�tRNS@��f/IDATx����n� �a<;��$���]쿛�״�Z-}Q.W��?fP�j|gw�w�߀�-z�[����7@l���2"�� ��� I�jx&]�فM��f�(�| �y���Am�h{{Bt����8�����4��ƌ a�[��"Ыa�<���\�;g�������E� N�iM@C+"����0i�CZ�G�g:����-�{�=j�>��-���hI�q'�9��{b��2ܹt ��Aąu)F��� �_`�W�=`�k\ҔZ+��Ͻ#��، IEND�B`�PKb��\-$��2templates/hathor/images/toolbar/icon-32-upload.pngnu�[����PNG IHDR @{�u��IDATx��yP����z��� ��j-��$HA]�ꉠueѥ��Δ���t�vڮ��]u B��XV�.���x_#(��U 6�_O|��&yCd���3�y ��>G�̼�I}�D��R�m9!7�;�L<k��7H�2��FC�g���89e�;}B��~�y��{yK�ؚk� m7ˇ��c`�����o3�mJ#�y!j����g� ���CK���\S�pnG���E��h��C1z�MJ��{��~�Zο��e���h�����`�i�U�!�t��d��d��;�7�"`�>>�G�B�M�o���[������J SÇLl����Or�òd�f�F��.ҏ�a��0��}��h�����Rg�����[6i��`}������q!�������P�+�9���?�C�7i$ >�L}�wK:(`Q��kY�RX�,�5�x�>�TqᗥЇ����� �����$�A�Y �[�:3�#�1h ��O��o��V�;~rF�XV΅�aqo���cH*�@�W��`��R�h�SA|F�S�SkΈ�����AJ5vV�xT�+e9H ��&1,k��R A�b4��A� �é BH����?_�8�R���!2O-~A���f4����.�a� (Jx��"r�3 {�Z�]e��f�/*� �<��%���\˻�h �NfU��I5BH<&��J>�?Y���@ĩx$ޑ7�NJ��Z�l �&ʚx\���z6��W��.s�����y��}�UBpE� lE��|���5Klo���h@~,Ɯpt�]Q!g���yr�̀���//�����#o�3_�岽ˏɆ��pP�?�>a^4�J��X)�w�.�JW3߄��Ӫ��ʄ{D� 1{8��� �t���.A�W�Jx;F��ԑ�X۟���i��q'�j�p� ����K� �� �] �!�����lx��H��SY&�����P����䦖'u%�D@l:4N�|��d�"�X�740�5�3R�qe���A����� z,I%���h�,��R��c���{�9+K��*$��,�%���鉐���x��� �t�MVSK��c���}��L�ԭ=gM>,e��C��K ���ʃ" �)Ų��#�=�}�P���fM������|.�M�*�JFYJ���VG�WG R�d��e)ɪćK)�?�'NH_d*�=䇬9SgQ��\B�xkGЧ�z�^�Y�_n��.j�>����h�&V����3� 3�)���"d!"B$H$"s�б�H(�P����EcL��&R'$�X�� Cfӫ8�^ ��mx�^Z�X�h��7ɖ�'�7��t��>� �B��2 ��IMjR��E��T#�Yz��|[�-ཚ���h�G��Y�U��\N�/^@oo/<~�,��n7��@���٣G�`hhF��� Ϟ=�dB1��X(����ϟ?���fg=|������w�6��,bA�ft��߿O7w���.x��)�'q����j�F`�����3�6A�������W0��W����݃��ɓ'$��p����}� @ �If��4��̯ �#���8 uvv�͛7��ŋ�I7n܀�ׯ�ݻwɖ��0�2㱐�M1b6����^� w��!�$��;��h�$����+WF���������O�t�ܺu<�`�,�G�����Id��]�Fb�|-c�\��j���F#\�|�ĺ��6�e� � �N�8ͮD��� Y7��,oe2��p�`0�F����hnn~�s�^�'q�� � &��xu� l&=���E����z��9� rۇ��������ϟ��Ommmw�����UTT�}k/)���6�T���dSS�������o�N�L��|I�zI�_��x`�PTIEND�B`�PKb��\��]�NN5templates/hathor/images/toolbar/icon-32-extension.pngnu�[����PNG IHDR @{�u�IDATx��$�����aw��o۶m��m۶m�m#��kgZU�Λ��zۓ�}"zz����soV�|�x�{�t&p!)7 �<����'�C�%��y��ǜP��B�&����=]�t�?i9t/��� ��ٜz����,)��*]p�z8P� -��~���Do�������9���f���>��k=�M�c|�K��I9������n � u�0z����bU�C� P,@ɰ�R^��3.U)�+���@f��Iyͱ %7(p�b��3,�?�����6��CL�}J1���%(�-|�q+I�z_���� ��y��1�!��JE(�T0l���$�`�!(:�y"n6o�o�[�@Q �1�J�,�������t gI�!�o"h�V 2�*p���}��`D���G�B�dV;��a<�NRȡm(�����~�z+�a|��`�p�u߀�=l6�Y`R@ϥ@>%���Cf�=��>��_~��#��B�h5X� M�M�B�@ ��KS��P�}�~Ǖ4�V��v��=�� ��T��i�@���� �tB��Ҝ�!�\M���NpR�l�o���a~x"XYM��"�E�l����x���8ҟcKO����r���-���Ұ)Hm�R��%����b�&8��q��l9���Pg#�X�Ѝ QN��7a(q��?�u���Q\0c:�N�셺`p�(Y<P,J�� ]��#�C:����Ԉ��P���8��J舀؛ �lMz�L�)u|�a��z���,4ت@�'r&e��l��js�f6U��� "'gj9�i�3~$�o_}/���"��|Tx�L[(� D����g0��a��k�|�L56���E+�-��ϳ���{Y�s�~��W�1i�aQ�w��H��[��?,_��?� ��Sc3'zEǍ �ф���x�(���@[��9b˂]�(7ᮍ�`�ę4���b�'���@e����u������13��wA��}s g]�^�M��M>���c/��|�# 8�r k禀 �T@��8���O���۱h)�EU�\�xѩ�?����|��|EC��3�@��6�w�y��;���ݎ��}������??�ގ�?��/L�2�>�L`�@)r{<�7A�}}}�\�����;>�s4��'�p�.���l*�2W�t:M2������D�ZZZ�������v���I�&e�v``�����F.��r2���y۶mc֬YZ�>F��,#G��r�����8DD ~�n_&q�B�@MM MMMh\hmm�s+���:�y��q�h�R��p9I�.�֯_O>�G_�F���qb�Ԩ V�G;w�d߾}�3&g#Q��;z�D�$!IlݺU*H�k+m ����B����J-Rm�F)dS@����1�`�����={PZj�ĉ9p��hS Z���PUUE�%K������'��-�܂��}�Z�4�>e&�R�F@�&ؾ};��w7�|3ښ����(U+�+�}�F�(���>��?��c���G�Tr�����oAB#Ԫ4� 5Tْ>|8N5l h����Ymm-DUqݺu( o��6�.S���"bF3G��#����y}}�3w�\*̟?���>�{�{����&�O�u*c�{���ڵkQ�aڴi:�d�q�Ɖ��(�y@L�Ľ���媈�;j�(��cn5a$�<`�@��ZQ���=7VQk�`K�$�@�\�BЁ��h�?�a?� ��(��_�ԩS��7���3gʈV��'Z�V)�"h������S�y� ����o;z#z��'��Ks�p��.�;$�� ����M�R���`'�M@�mUpI�D!��� |զ���g;yԾ+�۱^DTD�aJ����� M�Dm�ވ,�R$�'0ȣ�rr�|�2}��o�����g�v,uuJ� }S~;V��d)�"d�g��pPxfn��%~�۱���ey;~��_�J���t2IEND�B`�PKb��\� �C883templates/hathor/images/toolbar/icon-32-preview.pngnu�[����PNG IHDR @{�u��IDATx���x����}k�l۶m۶dz78۶m�|�z�I�^ߙt��%�a��6���ߣ8?��U�`:�4`�O��Z�0�c8:ۤhbt�3/�u��νO%x@ӤB��Pe��%��9�9�#/��vʌW��0��Vn��~IE+!m�[�U#X�,�1����x�{�Wl���ym�W@ѝOE�F}��+�0�JSc�|��V�$~�1��ZS@R��q7��.�����\���> t�8�\��g����'��laJ |:"��܌�d2���)ν�3V���t�P(���S�U�߁l6��i466��4�Ϊ���Ӄ�ʣ�'TU�g\6�?g@~�J<g!�lx�s��+�b�TK���%:#���M���Իh�7�"�2C�1�"�b��� ��S���IV��m���c�;\�� �L����u�pĚǺ2�k��Iܽ�#,���Q�����ժVGؾu'�f�_B?-~���~Wl~kT��Pt�E�(7��i�]�'̨����m ��1�ʍ�f4eʔ)���;R�du@\�}���o����.��#� :::�) [�uA�WF� &�`B!Q��kN=��=O9��JJJ�G?�0���ȹ���z�)����w��B��z��'�Y��444�/L�xkk+�A�UVY����ƭ�D"Cn�| �d�`0Hoo/UUUʈ�VHn�営�w �w�q�c�=�W�D��+��~266Fii)�O�`}�����wϚ5��~���7�x��R����Q_��E�1c��x ���ٖ������ �4��*$2��Ë��L�>]��8�������ku�H$��b��믿fdd��5 j���OQ�������W�����X��+�m��p�H1Ξ=��5�hVZi%)Hц^~ k��6�m����WH�0.�$d�W^�O�� ��UHt]7� wvv�7�a��o���� 7ܰ I{{�?G!�PH~�����IEND�B`�PKb��\���3templates/hathor/images/toolbar/icon-32-adduser.pngnu�[����PNG IHDR @LP���PLTE��������ֵ����ŭ����楥��J����������������ރ���{R�X�b1�k<��j�ͽ�Skkk�ra�#�xM�쇵ߓ��>��Ki�Sf�,��Czzz���k�3QQQ h�)�Z&�T��]������h�N�^+��j,h�%�`�͍�0�h���W���L��l�S�=��kÅ:�I�����{��:��T��c�M�y�淓��!!!ƋB����\��l��B��~�a"��q��J��ε�s��,��l϶��ų�뭓�d��&{V0�6ĩ��t#_S"��%k�7�h9Կ���G��G��@��4}�F�.ɱ���{�W!ѯ4���f��X`WKߟI��h��H��j��{�zkt�9��=��@�bIII����q��л�@��_�°�Ϡ�wU�,��c���B��пz!��dzQr�#z�LߤV�b(P�ʴ؇�y>���ϐ4�X�b��ɕ{a=��L�wL��l��&�ܦ��tfffхV�$��lm�X~�DŁ(mXEd�+Ր-�ܭ<?"ttt�C��}��ȫ�E�pB�J�r'i�4��l�����8��r�5)��-`�Z����nA�ʕҿ���R�{.��SѕI��ϗQ��ɡce�+��I����~ r�&}�O�W��Rè���@��G��tRNS@��fIDATx���r�Q��L�&��c�VlL<�U�Vj۶�vj۶n��|1.���JW@�d��&�5!��'^i~�X,X{X*u#6BwDʼ�,v�ݷ��f�Z(�D贈�j�$D]�D2bWa�:��%��O: tQ+�F)�1�@��..� e��ҟ%[9�����r�tѸ�]��m��C��6o\C��AW�����3B^Z��� �x0wKy���GƏ��2�]��r%s���������+�{1^�RT4Q�Z� ��+AF��ƥi4��5�4G��C�,W*W](�B�sߑ�а`Mff�����e����mm|h�qL�#�\������W�f�).��l�V�sg���r�V�u�%�d��~28���Y�+*L� ��gg��Q('B����k��i�����0~$%\��ݱ��C��5y7c����f��@��a:6���g")�hGh�1%�XI z�Q��v�#�a ��"|(�uo} /}�9��휶���D���h䝧't��3_{�cImz��l��H%�Q�$r/�E�(��S��6o�Nu��=|�~yf �w!�݉B�ez�T�J�����dq2�vnS��@��J,�v�i�!L�H���� ����$#�𠋅!�͒��H8 [Q�ҭ��F��<�1�3�@U�X=�Nq�#��]c*�S�u�l�T��@ �N�7�E;-T����Y!�8���(���֎�m��{l ��Z���D�8�;�,`;��ɳ�:?�o�Ŭuz�W�a.����2���9 vIEND�B`�PKb��\�� ��1templates/hathor/images/toolbar/icon-32-batch.pngnu�[����PNG IHDR @{�u�`IDATx^řMlg��|�z?mo�Nb�8���B�D�nH��X$āW��҈ ��^*���H�H�JH�E��r�I�zwf����J�9t��zV�{�?��w~3��Ļ�E�=P��A����Xn�|�=��z����艭�,�/���s�ZwV;1�$��Ɲ/��n��Ӌ�Ѓ���=�P�|�_��t�a$�vR����־����헷�n/]�z��K[�7����7^H5��l�����Rm+��`��fZ��<D&�'��?����[(�2��2C $�Nj�ψ̃ E0�,�e!�́�\�@{�#S�Lؚ����-t �n�5l�`���Mn�;6,psG#���P$���M*�Y1����3!H���Qfp�Ay��6������l4��3���8Q��l����v�����Z,P��� �M,��l(�Hhһ�&ݺW$��g�u�A�<�(���"�ʊ�&rzs�X�}�Ե��v�j�ޖ,�Ft�Mg���|�T�Oo�I-� ��1�#�9�/�l��� ��wƍ�3B��|����]���/�����^�(c�W�v���� ��?� œ����{���ݯ�$^������:>i�W߾���a�o�v�N�衪�c: D�� ��t<S�����<���������T�R[U�e[�zMW*�P0e��<+ꘜ�Ј��h�V,���`%�ʖu|�?Q����5C���C_��XahB����M8�ʗ#�G�50UT�9�\� m5vq��c�O-L`*)U[��U��Vc;%OXKǭ���|0D�"@�Z��\�1P]dž�V��_ҽ{�XG���Ͽ�ډo�t��U�g���A�x��g���ܱ�/�^64$�6c���> |h�}qsWy�+C<�ڼ�40����?�H<�E�T��z��_o�bU�/��\�/�!$q�կ����|{��CF�3�U��v�u��ݝ�6�!�g�,�`i�g>������c���]����hJk\����4?��ړa/gg+Af��[,h��^�y�����p4D� -H��N(�O�u@��Z�H�����@����q�"�`H�㜭y�PF�N� M�F#�G�?'��H�Խ��ޓ<�O&�CK�:�$ �0�X��X���0��- 1%�����F`��`Q)<�(#췌���tZ�IF9k���Nq+�Qk;�I`c[�$��2l�Xe� ����9��R>9(����4gC ���bY�I�BՊ��cE��qms֖�H5NS �n-笖��+[P�-C�^Ƙ���[-|�h5[o�����_�8$N�z��?����Rw�� m ���`iq�=u��a^c$�qݮ��~���s�ܹ�^2l�v�mά�q���~{�����:���Cg��X�q}���� ~p��j0u��u���Leܼ���ե�/�t�[9����<��%�<�'S���V'O,��U��J���Z�&WjD^FZ��h&�"�cו�%���(� �$Vd'9��$I�LJ�I�5�(���\���:)�{òXv bA�YT�qnC��Ը]��ht8�`b��p8m�Cײa�����p:�";c�%��kK�)ՀdԶm7�^�ՕJK@��:NsVԱ���c�>D�ZBg4ҭۃWItx���|9V�٣t2�> eT^�nhk��1�1ag�}�u�����g# #?a������fssae�O����cXm4;�Λ.����_�|�_�H��@�V�\<7��ϭ^�ZE��#�F�� ���7ז�$IEND�B`�PKb��\�zP��0templates/hathor/images/toolbar/icon-32-html.pngnu�[����PNG IHDR @LP��.PLTE�����������������������������������������������������������������������������������������������������5��>��H��R��V��[��\��_��b��f��i��n��p��q��u��x��{��}�ր�́�ׄ�Յ�׆�و�ω�Ҋ�ҋ�ӌ�Ԍ�Ռ�،�ٍ�Ս�֎��є�ە�ۚ�Л�ѝ�ޞ������������������߷�߷�ุ�����������������ٻ�ڻ�������꼼��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$.5tRNS ::??```aa�������������������������%L"IDATx��5|lU��>w&��ݡC� � �� ���u�6xO��ww�x2�䞽���%��~�N����DV�?yl;af``��Kp̀�`�8vq9hK��з�mJ"f�0#�:C��@�'�ʥ�Jd �k!�D���V̏5���Y���|��b����җa�R���$d6咛,o/�4�I��]�H��ퟛ^������|��%SX.���3:n�w^9��{��3�����r���.zdk��V�#��@�����N��~�H'3�Q�<ui,���'<�e���eDi�j�+�a߾�����e�{�����2oS�� �`�E3Z�($�>׀c����$E_{�r ��@)Q.�9L&@�S|�iiA��$7U�,�G`J�0T_(��a� ��к�i�=�!��C`�z�q������`4O W)�, ��/=[7�����Fc�/+A �c�h��e�I��:�w$���@7��E^=�ɠ��D���p���@�n����P�x�7��Bu�~�Y�U��L����e`��px�Lw�X�Bgpmy���Œ��q�O��h����]�^܋�{��J��2*���/����Sd�=���4�;-�9��n�»GyIofw��J���vE���ufW�s����|�m��^�/~L_X��zR^&3��x��q�رh�GH1&s�q@B�� P����ޫ�u��#S�mN������ �O��o��e(�^�e�WV����6�P�"�IEND�B`�PKb��\Y����0templates/hathor/images/toolbar/icon-32-save.pngnu�[����PNG IHDR @{�u��IDATx���F��q&��-33�̌�r+���ݫ�*f:������l<��k���9���>��'����7��Ob/���O?�I0�o�xD�Va-xo9�kp�R���c�t:=Ͳ,���y8:�m��Q,��ۋ|>�\.�5�������"��u]��!@D�TxZ���i��_���+.�1G�R����I��RjFX&�1:(��96�8 ���3�}9:J��q�L�� B�7?J)�^���4�?G�&�.���P��r����,�=�XpT�E�z|�9����Y�bE�� 2b�ȑ��HC;�@!�GT�����@1_��q�~�x㭝��ֈF<Ot�S b 0Ԏ���{W�����`�d�PDz��Ԏ�< -!�g�L��Щ�Y4N;�����z~�!�������bi9d2Y���ӏ?"�Ə� B~��|�@���3a�D@lڴ��/��2?{�[9/X�8�c���x��WpÍ7��0���.��@Μ9�3�:K�p҉'Z�:o�R�1�7�ɝc��P�<�� �HH�����t]�G�s�!�l�0~��$����_�K�k}7D�.@�aQ��!8*��A;@��ljW��"��� "�j�0�Ni��|��M��W_�%B,���?�/ϫUǶL�iB��`�G�E(Q`ͨ�T:�� �L�AX�����9i�m��vg���w����j��jyvz�{XK[ �9�uxyNDA/ΑA-xZ#���r�>�qYX�EyB�@����@�5�� �!����R����c���<�[���~z����) ��#�A̘>�u�JQ�,�Tj�������G)��˯� 0D� FD_�_f�`� ��' �8�3����h��P�-@;A L���uҞf����?�PP��~ک8�������b~���k�!e��a��e���5�*���O�Y�n� ^|��'.\�ߴq��"[�lF2�6oقK.���zʰ��o.ϫ�6��7n���CS}�}��8��<QoB�s@��s!��g��2=���Z���f��Y����|ܸq��S��1��*Q�8�T�IEND�B`�PKb��\ٙ� � 9templates/hathor/images/toolbar/icon-32-banner-tracks.pngnu�[����PNG IHDR @{�u� �IDATx�ݘP�e�K/%���Sd[M�U�%pLw)u7�ձl�=k�Nf�1���͎��l7�0W��-�(�臢 rU@��� ������y=sX 8�3{f~#�������{��)?�}͉�ekcM>����+C�|#����}-�0��3����#��K���0��S�]E�k�Ch}/[�*�j�����$��D�!��26E�E��x��t�Q��5�����3Ǭk��Z2���/���d`�;�XIb���p�!�1끍1Ŧ��&�����ϲ�R�w!���lϮ��9&M��h�aӡJKtA3�z��_x����1���@e7��K6;=&�o2L����H�jZ�ʻ�Qm/>�Ym���ڿ�;��v[~� ��?�և���+;�#���X����ۍ��tX���ު�aE~^)�u��빌e����7�[e��ȓ`)�zp>6�;���o��+�{:��w9=`09�Sj�\��3j�4�o��U�����鉧�~�6n�[�g�!���U ���?ՌN������� ��Ô�j�"�s���B^3��9s���g��g�n����;2�Ϧd)N����֗�ߞ��W͘ۈ�q��ZܜT���`Q��[�'�xs��ł�p�B����Y(��Y5H(l�~p�������b[�w�B+&~դJQ���R�&��z����x�b�����:$�b]�i�K�$���ǃi]���'���KqWj5f/{���"��⩧���h�߶�Į�V$��c}x��s�ľ�c�L��w[e������,4KT)j0����T�K̛7O�;�5]Bp~3�QE�`���8J�}���aƅ�����@6�!���bPCN߰���R���8���x'�Bs|&w�u`D�m%��b�7����ؐ��!]#���7E`@)��';ϴ������l�E@PYhA��85�G���:�ཪ~�^�:����*��B�gH��`'��6���s�Ξ=�A�L"��OJN /`�豮/�7"/���2�Z��B�Ɔ�X ��WfϝweɟW�p|���)+���,D�,�k��| 2-Qee/����Y�f�O�(l���nb/�H�R��(pc��@ ۗ�刎���K/���3x6�P�X�����jJ�5���"����L�����y��r�O�ߍ�C)>��@�na1q(=W�O��#p'�S�:%p��Q��2.���E'i9�p8�(^X��8��7 b��d�x�t9�i�V����"��MJ�ٲ2lڲ-d��U�)�m�Gv1p*��5�G�� 04�_��a H?�"_�7���Kz���|�~}�y�Wȃ�$�~샨�"cY�rX>����n%��mC0mƌ�\`o�0�oD�����O�ح���G�>/&>d Y����^ă�����8g��Yd��q���-�,Z�h-��;�2��䬀�����!�jd�ě�V��w%?�<N��;T&\��\F�� d�z�͎�s��D�O�/�]�N��� ���HƓ����A���a8t�)555$99��c>|���HHH@dd����Ǐ7;v�r�� [II ��֦��ݍs�Ή����f�"//����/^Dqq1�= ����%���c�Aq��i˅PWWMӐ�����ޮOJJ� ���"�����'O�K������fKKK� ��� �j���(,,Dnn.rrr$�>���L�7(��G�1i����W]] ��*XYO�ͥ1����l���Aoo/Ξ=����8u�:::��ߠ`p#Sh�����T�---Eyy9���`����ק EXX�L-�>�3g�r��� 6��N�`� eO������ ]"<<����'"r���E��贀4���%�O)N5=#���طo����,DEEI�u���Jɖd��W,�5� �V��p��DHH��������3���k�T�Ɇ`�dd���� Y�K!���K�v�J�J���L�Ȃ�Bz���V$Sx�-$��y���S�@F2��H���ސrM�bNUiH{0KSI�>��܈4��|Ȇ�,p����H%YlPPp�\%��)++��R@^�����R Y�} �=�<���(�hI��tڧ�t~}}=:;;e͗EJV��(�T����ח��% "'er�y�B�Q���~ ��~pT8d�J||���� G D�F�$S��Ȭ�K-.����3@ T'8�vT�G#` 6=�|����3@6� �Up����mPp���y-� �7#�C{!@ L%��%1� 6�g�4��l�a�$uA�)�{��R�� N�$y���¦3#�M�`-��%]�4�_��d6�B3� �B�&~dI%AA +�@�� F!����(r}|�Zd!�̓�G!p�@q�<x]���Jd]hںu�d�m��ٳ瓫��k�*��n"��G84y�rf��x1�!K�R��G]�"ĝ<���9+0��"K���Q���x��,#��I� �#��n�z���'�&F��y�]��$����� W58��s@��5��)IEND�B`�PKb��\s9��0templates/hathor/images/toolbar/icon-32-edit.pngnu�[����PNG IHDR @{�u�WIDATx��_L[u�O�nsn��1�8�8U63���'5��ތ�ɮ�Fg6���5R�`d�� ��BK/�,����,p`c�1�I�^�b�p<� )����O~���s����B �ʪ���������wq�&��D{�1��p���L"g�hbh�4��xo#x��QNܲ ���fD*H�o!4�X?�PE2���)S��%ǔ��%.�wN#�u��nkܭ��у�.,�@MP��i$#Hs�lk�ā�8�v�ݎ�����@�5A)X5�4�M�7��n��q�z��V��} �@�U�ʯ�&�}M����kl[쯪£�b�`��I�(�l�dT7�j��o��k��>t���ޮPL��cA} ��P4�PxEF���>��-���UĿ=�;/�kRm��۰�!ԃ��3'���vޯހ?�g��#� �6`D���XZ�@�/;`q�g�s��h�6p�w��RT�E���ş.�gQ� ��G��]c���wE�S�ڵ ��Cȼ��Y��ޏN�RW�#ȼ$���~ �c��g�7/����ɺ̣�m�� ����j�Q*><��#���܁p�!�o�6`j5�1Jʸ�`jQx��fl=gÎ�fl�����`q����,?���?���>��!��!�q��c��W���z?� ��3�|]�V��k%�7�扃��2��#�q�_+l;��p�^?�"±6��-��;Nq���<p"��Ć��)7�!A�Ӱ�_DI����,ݍ!�!�,:i����v ��e�&�� �pI�]!#���H���C�!�u��7�H�B8T`�\��(��ZLp(/)$�fL�G��N#IEO����_�{�� ����XOlؼ���g3��'fd��o�?���X�h�ܘ��w�w�_R��r��D�������V�Mb�6��x';�x� �55�9bM��UE�%�_�f6�j�Ib��EbG��{���k��V5�U��^ ��骁1�zB$dQ1���+ߞ{<�E���*�6���ࣜ��n��@�D*.����j��2�/�=���7R�0�u��֦�൰T�Z &$I©�)����P�����֞�\.AMD��f�����Y�5�===l����!2����<@Y�qff��|s������s��)P0Ҩ����9�{�����$����#x<N_{�p8DN�Q���|�|�aq^�K8/N��ݞ�>}Z&Paq����a�5�b9����M�������Kǟl�<�ް��5XL��x�\�.�������I���yj]��� �v{$���~TԺڏ��$+**��#�����5���2�8Gkk+^����}M�������yii��8�� 811����aq��xO,Σ�������&hĢ�"looWL����ω�t�����$G 2'����f���F�y�E��y{{^PP ��:&˕���t���s䂴�D�gx-�k�����鱄���Q�/))a��<�2��j5��暨`�Y���y�&�(R�H�]{n6�wfgg'�8q"3''�O8x����755u�=_m�W��o�����4IEND�B`�PKb��\>��� 9templates/hathor/images/toolbar/icon-32-banner-client.pngnu�[����PNG IHDR @{�u� �IDATx��pI��n�$�e^��(̉w��>�e*8.8��;'ǜeff{��l8��,�k���#g.�W��W�MY���c��̦���A�5�N�r �z��1�ԭ�mҲZ#����8�+tU ���V�w��\H�#V~|���ydQE�ba9�az��~u c#h{��C؏_��9�/�m����hk�ƾ�N!=��ǯk�P�(��k�nBȶO�B�qU��Ee-�U���6�Ƴ��ǮOE!k���ʴ�Z,�����������ă��f�p8X�� �E>���;�n�b:��[����R�7v�G�~�D����O|t9Z���^)���LJbc����qY��iy؉'E��U7ګ�tȊ���Wݸ�N��`f0l\\���8�i嗘��?}���F���~���p���tg�H��!7Vq���`�+)ch\Al(M�ĚO�_�l^~�;��@Z��?Ӫ"���o( �3�ŵ�� ���8��ub�WB�� 3���Ԭ�ε��R?N���b�P~3.9HbB3��B�$\�q�aX5 �2�B���kε�b��b6RkG��i���:.ؒ@gDO����Jb�Y��zc���0��v`��Z�,+v�+9�1�ZL�&���Eh�L�J�.�$���h&e>�Ź������ Q���'"~��%2F0�1�(����NK�~��+uutk \�KIlr��d��'����=�S���99�19���>�{�=.��XQ:P�^��30U,3�]���+���3�X۞��~`Då�>�2�Mv"����`u���]غ��zư����paAϪ��]8%cg�ǾS��G�����Z�0|�^r ��b���c`��4��L)���d|�MA�5� Ẁ���c��T��ʰ)b�I/�M \ܣ�����?��t�Y@�M["y�c��_l.��3<p"�_��1(�XeA�$�&|���2l'ؐ~ {����1 '(��m+����ҥ~��$x��~(�?���2��x�@0L�p�|�o��C{�� r���J30������AR�n�'Vǂ������� ��X�( :0<�#�0H��.`Mɑ4�r�^E3�q��Cf�0)�I� Wz���&�oN6�0b�Q�P���A���v#A��y�0䅊�|�o[��j�d*��]�=b���hZ��ٻ_�Z:�E�؞���jk��aN�bgV�m�t���3]7%�S� �tsΥ3]ܼ����(7���cɲ5x3YMÜ*�͌�������/���uP'�0�PU5awޯ{ W⺸���q6zY�E;1�uCV�9S�hs��� r����+ ����h]Խd!��k,��B0R�>@0�����VX��p ��^8���<�~Y�k�S��3�F<��%.d��t��,x���Vf�`��z��.�t��Kl�0m�����h?��Pn�5��!\j�k��i 0+�Y��d���9s����ᄏ�00���0�7�Fn���\�x�⽠��������p$ ��r!�H���J����/�"x�;�D���˿SXX���!BQ,]��t����}�݇�����ϲ%��ѣPUU�\1;vl�N���y�@`oEE:::`�&(�m�x<��w�}7q1��_����/��|�������#����vs1���ؑe�r�ȟ�&��hw�� 멎�sak��kD�耘�Xw��{A���C >T������ђ�$�Id�Y�Q�(F(�E��l�w����A!�"Z.\�:!9D������O -���+G��Q^�i�&�+��i���OI/���{�o������~��d�n�I��{�fΜ)��,����e7�E<�{a�9�c�)f/��z=� ��}�Cj7=<y�,\��ސ<f�,3��)`��m��l�h�n��Ǐ����0 D!U��o�"솈�a�k�n�~t�(8�G��Dj7��6��Tdmtd��������>�p�j"�N"��_�3N�@1V��s��-���.���@�g2!�Q��ٳg��D�� 20�T��y�#�@�ŋ�$�2��U˶oS��p(��tB�%�YE��z��y�\���4@�=�W���FUnݺ�;�&��MkP�3%�J�8��dJ3۰�`��b>P��*z��E� �" hJ�A/?�� �rﺐKG��Jcyq#�˼7q ځQ��>�cu1xW�\Yp�.S��1�F����^s<��>��y�|h�<0�#�� J�����0K�Ok��y�!�E�?�o�"���Έ���~��ǎ������͛��n����N�<ٸ@�d�! Ɖ��zu���a�u��Ν;���CWD��F? =U����zD�|���/P�۷�.P|���[-#IEND�B`�PKb��\��<���3templates/hathor/images/toolbar/icon-32-refresh.pngnu�[����PNG IHDR @{�u��IDATx���\���ޝ��[O֎m۶�l�۶���6�m=Ķ��~�N�nݙ�;�|VW��O��}���S��4'���sV��8�($!�ӂ� �f�b�;�lݓ]jb����xb���.�I�+Z�MW_M�\d��y�佂���Bj�s�q ��eqm�@Ѳ�8�\ ���V��ͳO��������S}��0g����qޚ�ͳ���k.���e�Y5܊4���~���iE����7�pX�u�2�W�f�G�_���,�6�tP����m�_��<������Vg�%��doQ�"�ur�k35cb��}����6�XuQ��9-d�{y����e��q���Pr�M�;w���_G�㝿��}ZT]~��Y�0����f.?�zJ��'9�(e���sF>��I�^;J�&�� f�����OT�<i�V�!Aa�ZMJ�/� �< q�Ĺzx)ѺW#f�R�zR%�&�R���d�ԡ��w�iE�R��)G�TL~��U�s��s�R�a�B\h��X��+'�16UM: �q�y��@��I oe�Y���<�|0!?�^�V�v3r>WcuU\��,�u��F�l��p�(�hW���v�a�_��}�Ցr�+<�f>Ts�/ܢ��+�>�.���`ݟ)?o�(>wK���6 �v����I��N�ZW��*+�"�� ��G�[��(����։"3��9g��0w�$5)�b� �BϿ4e鮡��L�ݬ��̙76<�� %�lF@4�)5u�(8yE���W 3��,&.��hS��ήnqF?sa���b�OxLQ��Bq����mz�+�P1́��'g��qy�LȔ�v&(о#|aF0B�*�vF��v3sv��.�nc����i�h>6~Q�)�"jd��Z�rd����/���c��ǧ[�15G��4Po�3���~H��m��%"|TG������_MWx�FC�t&�y��x�x���o�P�,V�l�RL���F%����,�P�3�UT�̀�V�S���i���(=*Q01Wo������L��������(��k���LQ�犪�R>� &&��e�f�!�G��:&�~x�m���l �l�0���*c�D�_'����������%�a����lU�a��W�h�ΚFl@\F,���U�L0�w��G�&�N˝H qquZ�d9�<j���X��Q��W&9�����O��Y�`F�âK�4�����ߌ�K�/ڏw���Y�����&��*ܑf�#+��[{ַ�lO��/��6I��q\y^����*ʪ�gRs�w���_D>�#���,$�D�?��|�9��=�w#�eW�����1�J�p��ܱ"�`�7�D!Z# A �a�����<`�7�aF 3�� #<�O�/6�p�0¤� �;\ᬗ�ˎ���+�#/)~��v���p��H$" �f�b�;�lݓG�bܽ{�.A�q��&��&L��c��SpA��M±.�3��a��ax9Z�'�!�������ܹ#�L����E%G �e�ч�NPrɍ�2xa�S�C � ����+��:�b������d<���${T�s����E�/����0B�((:|��7��V'�.���g�ܾ}�(� YP�� M��[�X�����bG �b�?|��G�^���I�;@�2�8�N$r{���� F(Z'�n�� �%`&(0 �l�?�hY���a�o���+�6��?G+(v4�3��7(���X�����*�}�B�J8�/��7 W���H�5;ޢ&G �&C|�fA��L���ç��7oc+ė�f(z���7n��S�O��7@�]+��W�^}a���GU(���й'�]�re$6���~]�8Jn�U?��]44��5~IEND�B`�PKb��\�w��0templates/hathor/images/toolbar/icon-32-send.pngnu�[����PNG IHDR @{�u��IDATx��ML�Uǻxf߽�1����D]��v������ą&~Dk���ul$�UK�REl*j(�-8|����]�)C�(�ia -���ŝ<<3�Pcf�M��a�>��?�s�î��3r5 �������� Q~~�=,~�ȑ����PUUU���O���D�a3,ѹs�6�$CCC��䤦��5;;�x<.��ٻ"*,,|���(�A��ؘ�]�xQ������ҕ+W������%-..꽪A��S���2�����5ϰ^V����%/���� ��dnnN]�����@��ŝz���N���ů��LjppP�+���b���_��p�իW��E��D"�+v�h�RS������'}�K���.�,���ׯ���x��K��6uc}S/��o��t��(A�Q�ń��!�q�F +++�}J���{u��z��v�)l��A]�|�MG҈ �K@FrH���*��DDT�?���\*0Y����M1&�b1�Z�&O&�V��<��A���} �+���֗�ڮ��s�y�旖56=gEXȦ�@��n��:�3��5������]��<��N�X����L��aM��+k&��n��#ox�?�{dJ�j�X�������>�9�P~��O���@�b�[@lfN� �n����?��lASd\`o� =��z*��W�-��d�j5fff���o~8T�(,�h�����!�x�x&��� Gg�)�>�Yw��m���}q�5- �o��g����+ճ˕��Z$OwB�K�6�T���&0�2���O#^h����6���W?Kygx*.�Tמԝ��jC\i�8�HՎ⧟Hn� �b<u��u__+��� �m�:�.���?k�%�2�'��<���ŋ%�;�S�H?�r>�̈́.lP�9���X�a4=��F��1黀�����Qw����'u�fB���h�q�1s�gB���ގ��1���R��!?��!u��dB=����g�d��5H�+�v8���[��?*���Lc~�YAG2��mLXhbb�BDC���/l^C8Ϫ(��2X_5�>��Q>!"}��l���� �(h���=��7o��|9R9�o`�>D�ob����f�v{�Qb�#>�:��pR��0PF�;3g��\�s�ӻN��qda��j�!�;cg�z455=���JOO�����B�{X�����Mhdd$�6��� �Ç-�^NM�m�h�7{W�;��+����g���� 2���=!m9m:�n��ϟW{{;��H���Jj��%/���A������`�E����o���=�`����( �� 2���!� +�\���I_��R\iad"�u�V�w��������x���k�CL�!�%�}�v������cR}}=��kF�|ӑ4b��%����VnA��d]և�7Ř�R�Y�&��^�ư>��-(L`�<�Z�=�@��y��Wp ��gQJ����t \Z�i��uuu�&e`�W�A�Q��f��@K^]]-���,�g�zss�-������ �>�TLp �e�V4$x������mke�j��wtwwD",�P�<���^�~&�������j���J��C�d�J�6�s��3�� XE0"������;�=s �JG��n�ϒ�e�����1��B��p���V#�q�d.by�o���f��P�I!�y���g�Đq"��� r���ܨ�� �g��"1@���@�^�2���(�v8� ^�͆�L]��L�g��0�����D�f"�[��γ��� y��R0����(��>�p���y�@X ���A\���I�l�m5@C�G,��-F9�Pooo�@>� tW.�!��x��@.D �w;���_���/\�*IEND�B`�PKb��\P��1templates/hathor/images/toolbar/icon-32-error.pngnu�[����PNG IHDR @{�u��IDATx�X�5G>�Fm�6��7VՊj�mT3nP�v�[϶��E�Kzn�}�t����/;�3;��3:gc�\N�J��/FR<X�~����ŷ��q��b�ՇD"1���x�^{�J��ASSS���Ɣ�+$�GUU����_�u�˙x�>����������`1�mP^XX�E ��p��KKK��d0��y�o�/(�N�E�W� L�d2)���2==-n5xD�!�v��t@��ؘ ��UTTHuuu���W��2��q��������<�f��+h� Q���&$���j�=�.`e��ID;� 0�)��`����̷�i�QU��.`��J��V�:_��e��W�>�a�q���v������RQ+;_���v:�{Q@����vp_wrJ�~�T��}5ׯ��].�E��y1o@ۡ������"Ƶt��e��`�n���dE @J�ߍ�#z�I��?*��.;C��go�M�^-8��w�cWs=�c��w�9&��D� :nK}��ն��옻_���@���L�gff��e@�>>Zfl\�U�P�mG�����52x��c��_�{P�����J���~������9�%�3����<?�8Ƈ�Y���###����]䂌j!x=@^ >\�b·U��1*�Ŏ%��U�ؐ\�0� ��g>h�4��ٸU��UOB~Y� _o�FV�{����Ia� b���q��n��3��Kj�����t��*!���8�9��,B� ������VEΎ-�R�c'��eC�����ܒ�0MN "L�{�� �V�HNA��"���:�?LMM Rs�b~��ˡ!�e(����6EEE���e5��#3�1B'�!$� l_���6hmm�+��d�v�p�'���hhh���z�Ȅ�e��v���9q?&�>Zz����r���2\~��(�{�`4�����zw���Lܾ��0��g����z;���������Wc�3�m�w���HZ���ay�70�0�e��������eݺu�jժe��~����9��^��<����8V��,=?��cE#"CT�� _A|�]w�O��$B�MB2F�!��ZPzn�I�����}�lmz���(�y�(nOKۛ��}�KL�w�f2��1��3�e"�X�bMϗ���W �N�>DIEND�B`�PKb��\�Zk%%2templates/hathor/images/toolbar/icon-32-module.pngnu�[����PNG IHDR @{�u� �IDATx���R[��~?Ba�N��3m��Ni�܈'�c;66�l��Y��I�@B$@W��I��߆ܦ�$ά��f��sp��L�!���b�����^{��CD�W~Y�-V�h�8$M�v��좡�d�&���cuw,���"-fah6��Mm�hl�LM�Ir�xG��� �m4�({V���6���1��v�Z�@W��Q��;T�d'���lN��z����nLt�j ����N]���:�+���6]��$�\i��+״c�+j��C��j�� f2;� ]���wx���'9��i2�=t������}�������{�*շ����\�G��`8A�.������&����|~}�~�����;�mh�HkܷE��, ��t{<��lj��G��vrS�#J�q�� ��D�V��E��Ҷ�-�����Ԗ\���2��+dάPe"O����/��R2=C�c�"�Q����Z� �m����2UT#��&9��o*� .l��&��dK��=�'{&O��U˭�k�E�ϯ�����I}�{Oe(��������@hH�`Vr,X���E2��d�OR�@��S�t�9M��,�V����"�g��b2�s�f��El:A���+182F���y3�yZ\Z�"�����Q<�>��$�4�L��/�Ƣ�4�LQ���Rtj��a����AS�D��B������̌e�:}j�"�6'mmo�VW@a}C�24�%o������)9~��3��18k��5t�v����V���Mz��I��UQm��sh��Џ@>/bSI�����|Қ�.i�^���7��dsuRU(�Ĩ*���y2��4�%��Y�����>{!�5SUO�N_����jP�1j����)fz^R_����߀y��F^��M�ٹy��"K�+�($�.�[ 9���Ȗaf���<]�����U�/llP"��<�����)���p�Ug`���Jl��Ml�Z�@�h�̱%�L/3+T�����ӓ��7�B�� �}�.����T�gS?����MS�h�����ǩ���X�Z� ��r}��SS�E_@��z��b�O�t����"n9%���%�n����>2��+����M624��m�LtK��P-S}����Z*�v�U��cC|EE�-�P~�N��B�O��}��#�X�h4�SY��8W����.g.VawEeTRzR���F��|�����7N����������i\T�[�چ&*�)����P���:�I����]�N�������o(26Y�/0���}[�>:C=�K��si*G�!�JS���#1ҟ�Q�/�/%�DS����j����H�1�����Ր�X��$�Z�\M��@f�ފ�!�DV���:uZ_�;g� �]7�7A�y�[����c��AK?�ta�6��ь�֨=S���]�\#ei�� �����K�*+��WU�w7>��k'�E��;��jw������7�Px����,�3t�#N��7�K?�����2��onή��<*��<�r1]F������v�C_��n;��r�Xi626FÑQN� S0��@�z�~����^�x�g�m���70����QUR&&�*�( �zz<�u���?.�y��䫯��x��i���C���G�ν� ���͋�&�?V�r�������Sx��`w���/������|S��w������������t���) ���"�i�F�&&&4����� �G����ܻ�R���b(����0)�B,���$e2���!��)�u��=ސ~C� <4:: ��Ǝ��h�*�P��rd \�� ������'w���J���#-�b�X�w�A��<��*��f������2w�ERX���[��#���%,�G���ҟ��չ����ڢ��`���,�j�w�A8XYY����7���.}��'�/�U�O?��=zdb}��g8?9�$��8g{{��<yB���X�G���~̅���M}�{�B)�.4�#�� �H���n���"�]<:l~�;;;�X�`�嫀���CA}�'dY%B�R�SD����=v � �� ��C'"�3��������S���x���@�pՀ����nu[�z$. *% �ᵑ����r��E�#�+�4��h��T�c�!�t C�lUAՃ���Ռ� \��c�\� ����+ĽUA9�j����kP�."?/^ 9��������Q@a�9x��Wu�'�C8n �Q_��`����"�J�8\;��g�Ee��Σ��PP�_�d��[���r�w��B4�W�� ��W@���;�!����r�a����C�^�<���!w����S��{���k���1,X�-S�1�b�CP3� �d�X���P \��֏D<0_�t ?Gd��8�� ���aq��P�~�D?���Ï� ~F9��= zB �]����k���H-@���Nj�V����c������S�-�c�1�^�����ԣ��炆9�j�Q�}<Y�(*�Bq�`���m9g��`c�Y,���n;����P[m��G0ϩ��������-������oK�={V��_�?���+|� `·"�Y+{{{ �}��<���E�q�MX���ńIEND�B`�PKb��\n���330templates/hathor/images/toolbar/icon-32-info.pngnu�[����PNG IHDR @{�u��IDATx��OTWǏZm�Z;V�J�&M�mZ���?��&M��Iccq�8� R�Q�D�"��("qeTYƕF6\F-���ܾ�cx3o@��x�O���|�yw1�+嵀�o�sE�==����>~�>��5|�/\���8�$L��j^�ɴ��)��iOC����Ş��@y�6���A@�´c>�!���ez9��B��8�?"~���ߔ��K6����I"p���� O��� �9N�9T��"�۵� p<B�dճc�15��T�y�O���ǰ��VM��Ƙes=��e���-�0�5}E���n�E/`Ks�ٜ͍(w9k��8�{���L� �5 ��sF%�64h*��s6�3�>Ô������4?�)��i�E�=�16����C�d]�P�^`J/瘔Bv:��-���E�L�^Y?s���V_�j2cE-�WI�� ��ˋ�zؽkP�U�d�gZyΜ�*�~;��8������,���{3����,.�ߜ���kkv��hv�����Rq��2p��� Oj5.�^��:�,y�1�<�(�>=n����Z��*<�}���F��r�"o�}�*n� ��O�p���2'�������o� �L�ÓZ%�f-��.J=���'N9c;�[:�bg��,9ɴ�"Km����|�G������c�n\��y��{d=<��2z��(N*�R N��07�����YL?�B����,9I,G�bh�� -9Ș3-�`V;wd3��E���o�$J>��.���s4JB�`S<���b{�:\�~�M͝��~Y�4��S8%9�&�)a�md���o�(ɗ A�.$�f�=�mӗ�c�:�ǯ`��d��q뱾��)`A�{l����sм�J�_Ȣ�j;���J�� ��N�'`}�ua���(���F�\N��*@�Y��8��D7Ġ �2<�w<��b�(0� ƃw�{��4��0����F���Wg��O�?�b��>��6F��Y &�����K`߀XsԚ]��|l`�H�&�A>5��JO�uv}�A����Wq�^�Q� }o饝��l`�� ��˨��L�㌵`b�F�h�����>^�w�Z�k#��P����Y�Ǐ�57�ļ6ub{��!߸q��_�.�\��`A`�!�N�g{�� �A�w���7o��O���k#��0���#�v��*�ę��:$�J-�܇�W��8�=}�A���!nݺŽ��*�����o߾��E�!����C�u�*wgg'���rGG���w���{��ܹs��cb�X� H�嵬�_$�;$l�����˪졦WA�"a�!������n6ڥK�d]�"� +===����MMM ����˺�EºC"'��hhhP��M*"�d� ��<�H>�<����ٻ��G�������:nnn�PSS�---�n�u��t6CNZ]]�>�uSo�3g��z4XwHpB;`3��l��g� �nE�$��V��hEEE\VV&�!���;$(i6�ӫ�`f�"P��~����Vl����+**ԗ�n2W�JKK� ����C��`%����O�<�����D��O��P��:$�c`$2�(�ĂXvH�jRddd|�'#a��*t ??���&����3g���v�#���[]\\\(s�366��Ia&�5)��/�I���7)�ϭ��ҏIEND�B`�PKb��\��.ll2templates/hathor/images/toolbar/icon-32-revert.pngnu�[����PNG IHDR @{�u�3IDATx��#K��t2��mۻ϶m۶m۶m+k�f��~�����t�z���ܮF���d�Emhz ��H���" �f�1�eo�4���F�.�y��q`�����ƥ�ތ��I���������{�e�t�Iy����dlٚ�J�d@�F6�z�kR�G��L��R���\$�Z����F���fW�4%�fǢl�gV�����܅�@��) �E=�e���pW�&�p�i9�D�45<�ɭ�Q��%�JX�R���3�X"��V�|�K~�qcf#f��ou���Z\��X X�� ��k�[��1�k��t�Go�h�n�|��{�� �hϗwߪ�M~+����V�N]f��4��|��ȳ@�J�ݙ ��no�V�LuHb��Jd\���vo�cd�=�dU��Y���8Zg1���X���_��볎\�>9�.@�����o�W? 3`�w����C[]կS�<6Fӫ��t��a�FE����p�y<���P�_�fƸ<r\8���cN���O�!۵��,��g�Z�g����?VO$�r1�<���48N��n)�?8�ݶ�|�Ud��y�G��D�A]M�7�l),@���ӿ=��O��eV2ѩ�1�|�?���3 gc�IwN|���&�0m���DC�T�<��(�1A��H8�������x\� � ��?��k @�Pָ{]��6�<9ڝS�{,���B%` �Q�Lxx,���ܫ1�gq^ �)<�u�=Qp8����0@?� �P��d2s#�ӓ�՛�j}Ӎ�v�M���%�|��|�L#G&9Jg���WU������s٤t:-�Oq���@ ����,��*Gq�?���/��N;��SO�����n_<������ph�z���3a��l���oD������9�˗��8�fn5��H]P~�嗿�D��`�@�{��xqM�u �}��!�*k�L&s�p8�'9/��JG�293ս/}�'�o������H�Ln���w%�W��ܠ���vyD�ѭ��,��G��j�@ĝxG�8E��ϝ����B�+���40Ŝ���/D�X�J�0���kge��KQ�Df�Ʊ��93��x<�i�� �s?&j�$ �[Q�Q�6#*X������[�^w�v����}~Qh�{����=P�A���{$N����,�A���q!z���k���t�ڵ���(���_}4����Y��> �>}�4p�� E6a����_C���� dAv�����IEND�B`�PKb��\�c�v++2templates/hathor/images/toolbar/icon-32-delete.pngnu�[����PNG IHDR @{�u��IDATx^�X]l����c/6�Y�֖����-����*5�-�K��@�P�S��Jꭊ*EP�T�Qy�<��*-�n��*�2A!&VC���?q����ߙ{{tŕ�e��1�҇�����;߹�̝ˤ�x�1�P�LB����p���DZr3 kϝ;��Ç������� 1E���@����/l۶��۷�|Ϟ=o�<y���ԩS/���?�H� ��x2�666�%�U���_���zu���=���B�7F�����/g�Y�� "��7�����P2�|��ѣ���ʿr+O>���S {O�|n�&<מ�)-�RBX�F��?�@����u�P*��D@*(�b�XC�y���_<qy�?�{ F`7�tU�-;[�O�*�0|w!QB�i!lY� �����Bњ1Dpnn�uq,-.���q��at���ؒ�:3��{VW%�ds�a��`�"�6[e�r!�T��3L�1H�������-@J��apff0�@8��:$�;ӊ{*�`�X}]kmC#daF�#_$���Hj۶����I��� !�`8�P�av��9�Y_q2�eI �@���e�r�@��:U �$?�^��"/��B����0���oz��G��D3&,����-��ԙ��� �h6�w�܆y��y^�����`�'�Nn0��Ϧ��H�R�3�����B���L@�61�������Z��-����|w�O'L��b���2�EA>(%�36J (�*�N�i ���c�R�c%s@QV�ɖt��G�4/ �����.��%����Ps�����6S��R@*���{zj�AA$,rf>h��7v��&6����Y~��� Ky"���L��b�O�g>�3^�?(����#�`��z�X��{�e�(!3�qo 4e'��#(.-���0 ��C�AU0��%d���X�C^%U���`@Жp��D��G֏���%P��`��i����מG�Q� ��l��`�0<��U��P$�y���#V��m��㮀�H�]�3�haAI�W?��]V��˽�-!��� !P����d+ �;��w��*���G5&� �G4'&�J @XCh�~p�[_ڠ7��`h<W��9���D DHJ��Yna� Ϊρ����o���S<�l����� v%�>�8�az�+;��#5(���n�u�����_#2��V��_�r�?����䨴 x�_v���2���d������zxB��ߔ5�O&�<��|���ʫ`߾}���H�b����f����Ʃ7d˲@Y�s���)��etvv���|@}�y�K�H�Ӹs����.���{���0#�J=��FF��u��A2� �ϫ�BA]�7���)���iܸq��yd �[�� ������T���F���A9ڶ���1��R�c�1�J���ի�դ�B4�p�$֬Y������#�49�F�Q��SG0�`PЪ�w4d��j.h���Γ2^QI�EY�Le�ՠ��ԭѨ����e�v>044�ڲeK����&�=����*k���LNN��8`Le�-�����Ti?.j��'_���l>��T������� ����7��d��`T;s�W��N��U��K@�צ���1���� >�k8'afe <��I\�K`P���s�@T��իW�����k�<�r�Jf�@w@=�I*��H�G�{Y��n~� ��T���j�Q���-\=�s��2�3E��W��饉x4��'Suߴi�"�MoZn߾�L%^e��i^��C>:x%�:�g�>���T�;f2 �?~��fsj�ڵ������U���C�s�<�����mmm^'�&��� ��y>�]����f��=�ކ�jc�Ο?���z>���;M�]o�l;HV�n��봝s��[��gΜ��� ���w��D�� �tt�� ��B�}�v�>�Q�z�i�IEND�B`�PKb��\&��v��0templates/hathor/images/toolbar/icon-32-move.pngnu�[����PNG IHDR @{�u�\IDATx�5p�F�ߓ��`��LU�K��}N�C�2��(e�06����p���of�Y�wt:�BF}�o�~�}+���1@D�?/.5 ���ip7uQ����F��}[Naʼ��p>��g�Y���1�J$>3�]is�.E�e\��䗅<���U�d'��j�k=��a� ��@ ��p=x�� ��wF�����j����f>�b��d�� �K��_ξDz��s�zm��\-���˵v-B1���Gy?��h@�X���� �R(�H^���Xԓ������}�U<OY}�{"~�66R�YK��m�ob���r�N���N��r��}�CR�@�2�݊pn��>�NHF�����U5E��N� tC�ߗ�^��8k?@]�b����w/��R?�~?��� i���3�T�X�>����d����o�Mj�����J=�>1�Kp��b� �b�H===��iZ�a$Q����-�� �m�"���������(�"@�P�= ���:kB% ��]p��=�U�������M~����g-�̑~=|�� �([Y��L&C��@nC���.���3SD9��@:�&W���m2\�ZZ���h�T*��n83��Ac=@t�/����$ab�� V.Jƺ����q���}�.<�5GG�P.�0�@� ���u>033C��룋�;��> ���� �V�nef�N(��Ps>0::JQ� ��|�r�?����>���|��Sz�2F�I��IEND�B`�PKb��\�� 5templates/hathor/images/toolbar/icon-32-messaging.pngnu�[����PNG IHDR @{�u�FIDATx�t$��km��m۶m[�ڌ3�m{&��m�Y?�;S=�3'���%ٚ�ݺU�S]�?��S�i*��k&\�tf&3���b3����&:�)2�)Z�,a�3+��{��l�����Վf�0�?=�|���b61�3I.`63됐��`��ގ�O�$��wG��t)_"2_�L���Qx��U��U#���}��[ϊ�\�r�P&�ď��% E>[�|�x����g���ă�U�]1$��8�F∎Ğ[#I����a$vh��8�ިL�ь�,f�x��.9�<��,��l�cY4�-���@:������ci�'���m�E���Rّ��|���{�y�� R�*�1j ��[�X�e2��c�P&�Mbg�}�$��9�� 9���KX&�\��0 ����e�X½���-Ћ�3�H�W�p�F5����~�ؚ��=aA6�ْ�}�{��^J7���:�))��a D�I*�y�)�s��� W�������~&+1`�g��Z��!��kU[[����n������R��Ƞ��_�D�F�*��"� =v���*z�\K·�f��I��{�� ��3�272O���A^SSC������N���t��Y���܆�8��ѰB�:��$��^M$�i�g]V�@Kn �k�y�����*���#�VK���������eR���@�r{�B�f=>-\�V$�Ì�%Ǭe.g�}衇L����Pjj*%''� TPP�D('' �C�-,2��1�mzQ �U �[;�Qm�$4˧�rB̓��[��+** F���!����o~�:}�4�8q�>���'�<��nK��{h{I/��RAu=�#�����C��S����0�G�I�8���Puu5zkb�{{{�A�@ȉ[F'O��ע��o=�����������<���R����HE��Ț��덄Cë�JJJr�A���E���d��bf&���_��{��7!�N���ͽ(%���!��b�qo?ygg'm ��K~(�.&&&����o,�J�1���� !CP�gT\\�˳��<""�����ɱz g�2�1�17��Bഴt���5$(�q"�N�" �̬,��C*?��0g����R�ܑ^��yGG���<�\�O@V�'ݱc�$�:Z���D�I�D���6$��\se�5s2H����xXQ,{��*88ث�]��~`��fr�=�*��ᷱ��Z��(;��AV��J��J�X\�����Ϙ���Ós!44������@A0C"m����ܨz�I�Մ�%�b���a.cn[�dɫ{���DX������0��9h+D#��b.%%%���W���{<��װ�\*��T> {�ɧ�FEE��~�3��cB��m@!*�1����˻h�]��>���{:�B>�+�3U�ϵr8n`\�p����oE��\�RB�����FEE�����������]nf�ɡ��Lj��X$��\�*�n�c=�s�.BX�ʊ�� Y[�}��7�r�G�R8�G� �%˳L5$71_y�U�xn�����/�}�}�y�o���D�I�t�ϻ��^FΕ�f)|����B.a\7[�zO仠R L���+t��MH5�ӆ����)d�$�e����\ �K �Ѯ�L���N��p����}��58p�_s8����В��5>|xr'^z�Ͼ�ꫣ?���+011Ѽ��[�s���$&�p��{k���Z����/'rqq�ݒF�!GGG|�� �<$c?�x�Wn���A@E��H@��ٙ sss�g������-_���'������X-QWAI���݀��'y{{��N���Ow��<��4b �����p��mR��쎎����H ���"//�A~~~Htd���x��=���*^ב�� ľ�����dffvw�J��p[2�@6�B@@��w8!�q8�J(R@�� �>��9���Xb,S���'Ċ���w8!�s8����O�/���z��=�p�����O-�bLwN�� �9�;'t��Н�sBwN�� �9�}N$' ���"(�IEND�B`�PKb��\���5templates/hathor/images/toolbar/icon-32-unpublish.pngnu�[����PNG IHDR @{�u��IDATx��[LU���XX��KO��P/��PZh�u�]���@k��KC�1i"�Om��E��mP�TIj�"�*�e�Y�>��Є7�J�}��}���;gf�!�ē�2�g����9�3Kc�*O�-m�O�@0$#m-y����>��e`�k��H��I>���S� R���r3���v+�.6��R����m�>����᷅E���m[��� ������͖����}��D<�7=�9`žPJ"P<���x��N�r�!7��20�;lb�W�����䀎���eMf|�`.���P��s]�j�l�ʁ�~U�^�5me30�|D7�@Ӽ$40养��bs�v�]� X�ԔǠFP�O^X����ʽA���P��+l�ީ�m�1�h�Ǘ�d�u��"��������V��j�0w��3������\��� X�����2�]�|��Y<�$6��fw H�_�hcj�GCB ^ß�@�fv�Q�!U+�I��t�� &!@Ē6+F�wpQ�σ�`����d`�C$���#:)���k���3��o=$0�C�?/���QCR\��x�`Z��� ���p�M�1���w���d `��-~����?�6�!M�������}�錤yC��^�QN��r�tb勽� �-��e��"l�,�V�ҖL�}RJ.\JX*@�ا�q�io�q5���k�� �i��]$�A �\�\����/��4� �6N&��6��[;����$�#;ɝ�� C�-&��J����������n� �s3�ـ��@g3@5�yU�Ө���\�܄�;����N�x,��F� �c�0����Cg�d�ph@�c_�X2��=�4�¬\S6����6��k2�^�(����o����wUU�������@����絵��A���]TVVf�p^cc#moo������� ���������c0rܐ��.���Ζ�z��A,�S��������h�)��r�ȡC�P�'���Ç�FP+)0Ď�� `�A��7�����Y�9B���p(��p$�ܢj&��ĉ�+\�%4�8�رc���g���Q�s��@ΩS�TŎ?NC�����s��U|֪y�O�ƣC�@ooo�ZVdpp�.//���Μ9#� �8r���0�����r��1J�X<nBɀ��ѣ�����`!!/^j�<y���tvvZ����P5p��u��aMh�"��ǵcy�,=@E\�tI���0U�Q\8ID�:^\\T,�Ũ�p�� �={=V<��~�Qéh^�6�j��ttt4ιs�O+V�#�� �2�W� ��U�~6.����0�:�M��^�F ��ąZ)}��a� /����{A]>�s<O>�{���{^Σkeee[\.W���6�-�6h/B۾죔����y���<�2i{�Y�qIEND�B`�PKb��\1�k9��1templates/hathor/images/toolbar/icon-32-apply.pngnu�[����PNG IHDR @{�u��IDATx���O\eƹ�k'є�;� ��b��k�+���[ע�-V�2@)k�e_�}��Kk�D����h�j)0X�3�����|����Dͼɓs8a�;�s1a� U��Q�T��9��s��t_{�ᾖ^4�ژlr�Sv�Ob�7;}��g!(��$�ڜ�x�^��3��x:r4 �c�WLj�E�t����lGw�;=� �a�6ޤ6�*�yl��P�,P��6�h���Ӂ�8�Z��x����� Pj}ԫ�z��ÇW5m�%)���rAp<&���'�Rh���ܭ6P۵�P����ߟ�(~P��zd�`���\)��� �lNĶ=�5f��D%�D`���)�Sf��7�՚�՚T�J9%���wc[�Mh"x�+��J������X罚,�.M��s���8\-9X�ĪNb�ސ w��'�/����gc��.���G����W��+V�7��X���$6ߪ6+j��s���%t�#he �%~(�����XH4�ಧ�\�ب�sl�Z��-���#�03.������O"�t!+�zC6��ب�f]&6��Q`�p���_B�(w>�įc�R{���=O��Q�M! �;��7�?���o���|��fp����Qh:��J�}��K��{i4}C��W � 7DB�íb��(�A�eJ���$$�P ��p��>�r! ?��QF� �H ��r�r\���%<X�>,�/�|7�YEEE�0/0�L.s�y�y�9ͼ��i�יW�<�Ƥ1�D�Y&��~�[�杧��`��B�P���RSSS�������Y'�� ��eaa���Z������Iq���t����C�.�s���p 'Lw�H8#%c:0>>�׀�8�% ���93��z�B��H��������xhh�566������u?p�������pNb[ŗ���.p���9��^bom���v�����p���O�0_$�J�C��:�̾�R@t���<G�� B��8�N���K�.�����Ip|�쐕�}�p)`f\>���NMb``@J(�C�SF�@p���_������b/�8(�A���CB��RHhw�1��$��%�> �'��B/!�Hp��M�O�OB������p�%8 ��, �w�8��������S���kIEND�B`�PKb��\��]AA5templates/hathor/images/toolbar/icon-32-save-copy.pngnu�[����PNG IHDR @{�u�IDATx^�Y]lU����nw��-�$B�BA������k1��&�/��;%<�M6� �$U-�>�'�j��@lK �XLi��n�����\�anvv;��<��ܜ�0����9��s�g ��M@�c8x�H�����%�l�\[ǘ4�L�x���'N��������p�$Iqk@�u�UU�i�i�R)�b1(��h4 �0(�M�#�(@L7g�ٸ5E�}&�B7��{_~�x M�F�|i%���@ ��ܲ����o��8�C�KrιN�MW���A7t�A ѷdUMs֑%%c'�xH��d�N�ᆦi��� gd�<!{HNs������f� D"�Z��,4-^,b,$9/�Rȍ� ��� ��5��';;�pKf�\B��R�Yƒ�K穀��2��N�X�Ulm�܃���[�@W E�# �{�Z��/�I�Y[+���?|( :�cM@H%$Ϲ4_\L�Z�-��D�ۿh�o��-0�JL������������yy�oo����}��{� �r$���a��8JJ"�I���s��Wzz�8��h\��KH�������@SU ?����߷���O�{��$�dA$7G��LM��7n8�<���d��nr���A`��}��7o╆��H�uw��T��!4mo����S)T,���?�-yss3:��Tz�^.�@^6̈́K������o�Ir��/��0��]o��(�Ǔ�?�;�.P�k�]�~�VSW[+1i�L&�4b%%���$�Kr2�%�J�z��0�D���_�X�l����ۏA�!۹s� w�9E����HƴKi�" �V�_� ljp`�Q�"�|X�|a�g=�/�sx�E�رcزu[^`ǎf`����`w��N���^'�okk��W�l����1�� kP�y��US5��!��`��`�@6Y$��s�i�M��yt�(�d����{è��B��R"�dWR@j��z岫<����0�ݵ�.rż�%��ud�0���c�����$�Ƭ�M���C����9�"�L4����X)Y;��E7(rYÞ�@g��� J�h&''im�אÃ������po�3*�I �BOO��cbAݲ�G�Y�E��㗓# �hq�z{{s�W�G,���C@�ś�[\�3S@D�����Y(��n���9�M@��W�[2�z����ܧk��c�ƍ8}���ԉ8 S_����q��]�����d�3���qy��^ۆ#(�21��n�� ԯ���Pf�UՃ�#'⡡!k��W��`��_=.)y�tH]�*��U�I�+W����/��pH������;�ѣG��n�:86:'gOS�KUUU���_?���Z�[��VT,����Z��rB�y, � �`~��̨��Cez((�Z�"������]]]�_y.�E0��^�(��T$��oHIEND�B`�PKb��\�Fm�� � 0templates/hathor/images/toolbar/icon-32-help.pngnu�[����PNG IHDR @{�u� ZIDATx��XilT�6 qR��a���@℥-��J��l�!P�����ž�m��[R#*S ��.�%%� �cp�=�سx�fO�w�7�=� ?*e�#=�}�9��sϹo"~���5F��j�&}��l0�-��c<7�'q|{tD"[Y͒Q䨫'��C �M����3����IQ^��Ž��p�F�c_!�7��袇ңG����,�ZΕ#�́�_�P6o��d��&٧�P]z/���#��cMkޓ��.kT�E���WɒEui���ϽəٗV��t������_��XS�4� {�8�M�����P}F)�ޟ\Y��C�U��\1�p��"�X:��.R��ї���k�{���d���������0���٘Fb]�a.4���!�B̹���;ɽ�g�����g�`r�B�U㩡��\.�4��L����Xp� �Śo)���5�v$�o?�s]\�sv,QE��~R�<�[U��v���a`�A@ZЄ6��ӊ��Z�d���rļ���~ ��@����At�Oq�O{zKG���G�D�Mrl`���؎R�[��!�.�j���+��M��=t��j�8��Y�g� r�B?��c�=%#�=5��wzbLw`�Wj���#�哜/��F��b�fCcSʟ�����ɴ��nB,���`I\8,Z�y�8�/����A>L�:y��r��xɨ�.��dQHǨ�������҃��V�"� �������'��A7o� ��Qi`�*=������4�w���v�f�TT�00\�|X�ZX��ڪ�TWW�(}nx��J>,6�A+�--�-��@��s�_)�a�A[��tߦ�����ˢ�c@��|�(�puC[mgb��4�_.���Q1�` X<��X�4�Ǔ��B> MR>���*D-E;�~��߱h(��{|U�vf<��,����f��'Qq���wu,8�BZ�t�E����Z�.h�:�Ҟ��\ �qs�GA�u�*�}2�����N��YZV^~];�}I%�0�� hAڸ�<��t�hD�+��A�Y�<c U��|jL&�+�D�1��\h@��%1��Q;�5r|�Mķ2�[��-����EF��sC�$�,8�BCjAo�T���=�Aȕ���vK�*��~{s��w ha{ù��p�c����+[�g�G*羾���P�U�� �69�l�wťB�Qk�8Դ�)�˜n�>�s�:�n%ECN�m��٦t�v�����9�Ă���s�"�)z�:~��#[$�����X�^����w��u��g�5:,���q������ �֫�%8 ӝ�[,��ys�Uު*�Br�fw���=�jw��XyEE���;X��d{�- �@;�J ���~��sއ�]��ƘO�+���c���<���w %Lb�^g{�y�GQNY�{�7�9�g�a.`:���:���Z��_MMM$[|mmm��hL6�L�9 c<��8�?~,[��ݻ����5$��H455��19�l�2c�:�Ǒp�&.\(�.]*���_,_�M�]�~�e,�E�ǰ�,X��k֬yyy���\p�Ӵ��2`��pY#/�\��&+V��֭�ׯ7n�t�-Ylڴ `%g�ʕX���)�W�Z%�6l� ŷl�"�n݊}W�7a�,8�B�D�$c���֛7o��۶m;v�W�^���_>0�|��q�,8�j@Kَ�`������˱�x�7۾}�عs�t��~%��s��?hA�X�g��h�"���9�2�9����m.]�����J����bs� hIMh�>�����֮]��9����x�ٳg�f̘���Ȉ�>}z¬Y��V �U������4�J�{��)�ܹ#���Ç�XV�< � ��?5�u:]�̙3���q�� �+%�>ؗ�b��666"����l?��صk��;w�`��8333ؽ{��d�x��� f�Y��<�kiiQ/%�ӧO�t����"/\��*=��X,I*"���V��\�?��'��u��pUz�a�Z�5�ow���������҃�͖���+�����@R+��PW$s�S�2���by�,h�MOO�GG<v�N��>�z5�R���x�V%�`0�}���k�HVVVr��6m�X��M�4Hm���U��N�:%���*yEw��ₓ<u����c�y*0�*eJ5,../^DЮ%�K�,��҄� �*���?�$.X 0��)�0 \�@ڸ�<�$(5]�]o���K)���������!�����.^�8�!���Ǟ"�a��*灍�x�P/���a9!x�8��*��\��9`�CCja{ùų�^�v@tϞ=*羾�8Vq �y��VX�իW��Jѳg�¡�:t`����+����q�d�2fs"e�9���i|UFb�a�xn�Q/������B�|����8�s ��v���櫙|�Xuu�����\��"��?������s"oC�k��q �� ������q#F����?�_K�t�_�yIEND�B`�PKb��\>e 221templates/hathor/images/toolbar/icon-32-purge.pngnu�[����PNG IHDR @{�u��IDATx����oUp���4���/\造 *U��-а��B@+����V���J�&�3���`i�&!�8�B�.�3���O��}�5���f� �O���[~�=����[�yi��f ����X�f����]P����� ��K������t�z&�L^Ic����~����0��)�� %�=�/�>����KA:3آ���N_�s{:� E��7��{������H鉀�5��i>@��D������μ���<�a.���B�Q�=�(�Pw~/K�1��؇"`���ƃ�S�����gH���tj<@lܑ;��}���6=(����r!z,X��>L�i�M ����Ԏ�>�㴰�wt5�:�wuՉ��U�S�2@���Ya�FC��!zkT�3[GU�)k~(b���CX�ё��{�I�k�1�q�j��F��K�B��q!rGP�+�a幡�/{��X��� �5�j����ёp�O�C��ɋQV��o1"J�c?;���!�#�Qz=�]}�L�j�N�'��[|��٬�+@B� �Y/<��Q���n�2M�*��`T�b�ENzh��IQ?� v�<��l��]��@V x!v%���)��8� ���#a���;�祅�cY �(�=��q���<�����Ԧ�x���M�?&{*@���/ċ@vx��7ږ߆��1S��NҾZڣ}q�@_�x�/A��k����#�$L ��~Md|;њ�I�c��Qr�T~���t�}�ǿ��ia��7a���6�a}G7� p���]|�d�s��>�Ǎ�� <H�;�N�����o�ne�����]���������e�]g� ��{���m;mmmM�$�A�4>V�Y���U �@��봱�q6�u{� �8 H֚<���8�ZbLP�XYY!����*0�>��q�k�0�w���4S,}M�{^�ĥq�Mr ��$$A�4��u��������P�+�e��---�l�T!��@�����EBN����]�R�A�%�zeaa�З�.�Ӏ�ao������7��H����/�]�`iN����� � d�ɺ��-��Rn� �k~0�^'�����@Vfw0��XŲ_�$K���=@@�w2+�%�RKl��u�N�T���E ;$d���e(�%a�Nj{>�@�\D�|`ffF�a�EH���������jP>P>�k�#�*��T�XIEND�B`�PKb��\\u'o��2templates/hathor/images/toolbar/icon-32-remove.pngnu�[����PNG IHDR @{�u��IDATx��[O\UǗxE�9����y��|����|Z�V��1^Rm,��`��R�;�jm��X0���v`�0��x(H�r��spfs.s��˾����=�d�P5)ZP���b0��6Iڋ:�5h���+�#E���p�D�x����JW���4E��BT̄�Z�G��iap�f��h=\�n�:7B�+˂��[��Z��摊!|� �M���\��a�?�V�¥t�\��M�܀�Է�Bʴ \L"�5�@ں9��UK,� .,"���F�����`��2VL7���CP]�3�ZI�=�=B�r����E-��������ҷX�@�- P_��� ����U$U�JZ1_GY��Le���l�����cX g�TN!K6!�=@YF顕#c� ���������L�0H�\9w�-��>���O"73��6*]s��v��o#|ꏘ��n�o�}���N͢��)��j89�^D�%��9�:>�5F��zfe�w02��FYZ���F|��Omʴ�H�k����5�&B}�9&cB�ޛPA��2j�$5�Y<jݷ*�v�F~��?��Ψ PF==���_��-�|t��<w��q�҉� �4 lC:Ԥ�4x��å(ԥ�"o�7 ���(��@�j�֠�ˀ��X;�:4M��ñ�$�`:�t^���Sa8��m�$�Q\��(�8�$��M+�=h��<���e�ժ�;I!^ ^$^�9b�?g�,cϟ�οB���{G�sO@ja�6�1e��G$Z:�Z�LF!"� b�$�Nh�l��i���&��l��P�·��<DX�ˡ� ��sFJ#�#��4)Ǩ�D*� ;�hl���*ar2����yG-�[�\]]�\.�ڌc�iz���L&U'��{��yt������������8?uyܩ'�1�A�?K6�4�Ć9�d�(O�n@6��|{{�s����%W��"����۵u�T����~���7�lll����ւr�Xo���"z 5�7�S'�@�%��X���B�`������@�����F�L�T��s��(���#\�@ 2��$��i�#�HU�y�ķ����v3 �% A��p��]�|��j��$���P����5�D�%� ����*�k�A`��,q1"Ye�(��SSS����|`Ƥ��������E��!�x���jѿ݄�0 JDIEND�B`�PKb��\�K9���2templates/hathor/images/toolbar/icon-32-config.pngnu�[����PNG IHDR @{�u��IDATx�Xl#W}k���u����rŬ2��'.3s+� K�23sef3sbZ���2��8���*�Ic��̾�����M��~��������9w��c���F#�}��.\�? �|�^}�c<+{�h4 ʚ5k���>���c``���A�ؾ���3�D���R ��-���_�a�:��ףF({�?��p8��u��c1�]���Q+��XL a�E�1ߛ6m�����˯���6�9�h�\��R��_15��`�I�eKl{�o��F���%[��+��+.�J�/�6ओN�����GC.�G"�}d��'m��b3�����ގ˯��v8�|Ǽ��)�6�7y%�~�}�=��LAP��Lſ��;ρ ̀+n�)�sκ'�d�b��"�N0�����$V,[f�.��g�M]�Ut�P�m��&��-�1�ѧd�9�Je�]�6�u��X$tvt�K{�U�19�`bb�_����XP��C��!��u]�p �,f` ���.̟?�B�h��7� ��\S_P(�Q�EGaIW6�ܟf���J�tץ�LMM� 94D�iJ���A�ރ�o`�UO��l�&�l6 �v0<�@��¦6�e1��>��T ���6+P,���>����=#"�̙�7w.b�8�a���7p�t�53E��֞�����e˗��L0:2�S?� S��e�!�A�tG�J�X�b��fR��O�{�@e<�1���l֪��`|$��T�Y��&����Z9m����}F�^�b�}�%�y�],7��W_}sR��Zy������V�I��2&8�p�=�@�/G�.���13�\��ov���e�VPf@�"d1��'+���X�zZZ[el�e��$��X,f�~�����=Ԋ�!�/V�Ԝj]@jr��x��B �=�Xh ��k��I�=S;nE �zT�p�L�{����A�����\Cb Dz�rpph���Ș}Gd�H�X�'�����-�#�O�s������^� �.QcmRd��%>�K�b�;Jϟ� Ā:^���T��Z���������đ�c��V�~�8��9���D"��`fFGG�~���G�9o886�S+l{�d�'����d!"*�.�wǵ�Ҟ�q�!8��8�d�]+�=�m�HN` Q���C.�� >)�3�\�F}ҎmO�5 �B�����644��D��o��(222B���) ���-X��L��2�Y��à���ɜ S��S��I�(�y���n;L��N�+�B����, �v:(� Ā�(��uJ�S��q�#y����OB�k-���]�`5eV�m�Ak�$c\�6 ���g������l����[N L���Yk4�:g4<k �&�ڬq�e�j�2�l�H�ِ�� ��f@�e��ؾ���g��M1"�St �R �H�s�0�bL�4�x�~m5�9N(6/^[��<0^G�.�Ǚ��g�e�^�{oT#x P��$�bV{��o��+��`� ��թӣ�Yf9+�k��F�j����~��1��vӰaV�T@V��X�F���=��+��'z�s�b������`�y���!8�C�Q�~?�����������#��IEND�B`�PKb��\�ψ���0templates/hathor/images/toolbar/icon-32-deny.pngnu�[����PNG IHDR @{�u�TIDATx��YLTW�ǵi�:��pa�] .l��#XP���$m5��I��M�4�ڤi��jlc��8���*�P�aؗ�_��z�����L��_�]����Y�+��%�D���C��^ӌ=Qv��ٽ����AN��4O�]�K��<;t/5(Ǿ�v��B��� x�8?���h^8��U7~�-PAF�� ��a�b�ݫ��p`W�+蜿�#p0t�!u��-���V���a��Q�[����z<���~�ت= )���iGN�cW(��p���08r"@'35n5���|0�68M��c�Ln��\���|x��rt��j<+�a��h����`lK�m$Csd��P4M:4�=tԞ����g�~�����q�:���Z�m[:�F4�`:���-����|ѝ�F��P�}���\���,��x���y���s�_ 0�Ƶ��4�.A���HQOU)�T�|h72�6:�]4@o��N�Q��'�zއǬ���h�')*��zƭX�P=�Ó�7E��'+����`܈Y Ot3F�<&�S�)�w�#ɧ�@{�1+0n�=��ؕ��#��L���7_4@[���-Q9�j��2~%���G��(��u����I�ѭ�iK����O�h2*�iM��hJ�ՠ@�^��x9,nP�S��j�ɣ��@�&�I�V�� pϨ�5�XU�5*_b�a�{PM ���FS���/uF�B4/�J�~�O��ҠD�A�2���q%ʩ�j��^2�QaP��\U�^q��P�I� p[�B!a�3�9� t/�*��5���_P��2w��W�,K�2��苛z5��Ը�g��3�:��s��+SQ�� ��3䥕I������X���d Ԁ�\���'�t�`I��]s((��-w�N)�Dĩ3�&^.6���q�i �4���s#A����I B �/��(Hֶ���Z� ��\��^J *�7�v�ÇJ3#��2#�J :+L�)������8�썾�E�[�r�ۋ}>�T$����X.�|<WK����V�����WQ���~�V��2b)�Pj�%��'��h"���?�{���("��ńR0Y�b��$f�½�a�j�W��E�n,����V!S9�����(̗;�B�Y"�3!���N.e�X�/j^��%��++q��~]�mp]"�����F���+Wj�<xO&��;�\^������jf�F��w����d.�Y���1::����a�'&&X�3�.�#�B__�>}����������v;�qF�7��l֘/����a��8�;��A����OD�����A?fimm�'�z��E4�Y������8sV4@ww7finn�BRľ=---���G���a%�x��>|���Nv�2]]],<��{O�g�����=C~ ���w���������_CjM�5�'sU�/����� /qJ����r x+!�IQmmm.�"��C��N �Or���8y�$WZZ�euu�c���.^����^R;vl߹s羥&?Y,���ׯ_fǤ�qqq���o�K�ߎ|G*+PKIEND�B`�PKb��\���]]2templates/hathor/images/toolbar/icon-32-notice.pngnu�[����PNG IHDR @{�u�$IDATx��]L[��06�P�4ه�I��u��nc���]LH�v���ٴu��U��7[[�ҚhmU�5iZ�$&!��!K�BLB��0�jc�@8u��������c�T��#�t�����}��_(��WaL�"(ĸ�AHF�"rW%$��H�0��� F�pF�l���&J���1�[H� q �Q� y�e7��&���ڵ��.�����nE�C��=L6 >P���]�M�>�1$��]�O�pcd�'�Q ����ZX��f�Nxl�#�#�0˱<��\��?�&�+G��)|Š�[e�I0�"5���y��a�� �-?ߞ@���E����dB�L����;mN.K�m`;�@#��k� ��\��x����$B~�N������H:�<W$�\� ���OЖ������|vY_�P�mr��s��R�+���դ#���>��~��{JހVp9o��ϛ\�Q\�_��X9'�;Q���"�R�F�Ͷ(�Ϛ�GbF�S`� Ar�ٓjޘ� ���$F���q.L��&���3������ r���D8�B�-����d���:�E�g��{G�q��P��|`���l.P#m8���j�˜�c'�1��73��-g��<��:��Ra*� ��ֶ���[ϪK0Y)�v � �� 6ʪm��H^��c.pB~��;Kt�U ���3�_w!p� �>�;*i˳=��5v~���\R���P[���q��w9�v�1nD�J>�*r��Ο�ϲ~��'p�؏jԆ�ip��+W���? _R�G��)v�g篐���5N��Z�\��{M0ҤyQ��s���X�*�znoDo�sp�P�ಪ ��-�ڇ�|Z�Bwj�UP�s�8��ߒo?�;a��� ����*ņ��"���/[0���a+Nj�<;/]ǻ�Q�Wɗ�Ki�<N���w���$B��p�?E�=�c���~���� q�uy�ߊy�B I�S_��[�$?�{Y��|H<��ҟ���*��.mK���/�s{F���d'��|13+�K�E�&�'e�Gd�J�L+��&���\ ����&I�@��)�i��)he�$_�FѢ�F^����X�ݚ��$�h��c�D;�{�Z;Vs}��@�6�6R�a#����#�G9 8��D��$e���c�ӵ�5,,, bhh~���������^��a؉I����@ ���l���*�H$�Q��؉)�\��̌��lx�Xi��i" ajj ���ߏh4 �(ߖ����� �Dj�ayy�"Ğ�'Z� ���� twwcuuU)c�3+6� 0bnnH���%�|>%��HV\N#� tʜ�q㆒7��T�39J`�:Ѯ]������͛7��1P���~߾}���ޮN�,�:M���a����l���U��,�zM�+3�[�:�q��EܺuY�u� ( �166�NDN>u_���3��AA&8��}ohh���%���S����Jԫokk�իW����K��P�f�MFGG���p+��6�K�.)�Lx�ފ�������ß���J>�Yp��#Q�T(�� �|`ވ�m?���q������FuصP�ZZZ�|:|Ğ�7A2|�[qSSjjjPWW���)�T|�n�Bb*QN"ۤR���G�����p����2븳��C��/S?R�(��Hq�߹�����>���S�����g�Ha ��|��v|�)l�����/�E��4��IEND�B`�PKb��\�6��2templates/hathor/images/toolbar/icon-32-cancel.pngnu�[����PNG IHDR @{�u�{IDATx��}P��qu�����*T���9`DЊ��:�ε��n��k�b�V]۵�ۮkon�sg{>��s8|�4��`�Gi��/ Đ@�|�OF����?v���~�yz��������[�E� 4��"Di�Y��@k,�r&~�{�x=���'�����<� [c1��-a��?x�4�DpXO�gY�#`���������$`�<�9�{��X��I�<��BiVD;�?X5{��~2w�*��"X>˕���3d�����\��V��v���#,��f�31���z�)-��Pn�w��`(?��6�TǛR�L������N��;�S�1��ݲ�Db�7�^ ��YX�5' ֕s`]�����&���ۻ��í�����Er�/O@���}�f�ɛ�܉�[ֱ5�y��װ��弄�%����ύ�� i����0;K���F%wb�F�g[Fb�^n;}#���O�8Ϣ�Q^�p��������RbO�ܒ8v�~�\�p�����xvJ�]��%,����ٴÿH�F��%u/G75�������!�h�m�@E �5x�w_b�zȄy��$0p�� �;S�[��pS� ���;�;���nz~��� ���ƭ�P�����P0L#`��'�2v�4xÀ�͋Y�(�U��9]�!0��������w��y�������1f�a�YlQ��RƮ1����+�S�/ѹ4�劢3�˔:��A �)A��z��\���M�ǡϛ�jX�]Fh�Ѐ�����i��&%�$IG�oR���wY�M��ꂻ���nm"��ˌ�.'�"0`X�_֞��R�d��u��=��]=�����x\ېK�E����Ϳ��j]I�5���Ӵ���װ�&�A���`�/rbھ��G�v��hȌ���NDsh���b1��o�7l��ϓ�r���PT'��bF��9��I�M��P���B�j[w�a] n�|�{u������R��kR�p�L7dI�~bj_�_P� 2P�����O7Ia��h.Q_�Z��?4�\�KEՂ�g(p6-�ĐG�,I���Y������ϛ�n���Xd�Ж]H ��X�ɜ�Sd8��;��p:-��t9�Ӄ쬷�/j��8�da[W�L��cpB���q8��#�a�M��$=e���J�'�C-릍��u�4Ey���LT���2%pT5�������p�L��S/�����M��i�-� ��^~cԤԬ �u(9�qb�U�2T��it8���ȌC�j*�D�R�e4.�Qf��j*�K�F��u�w����)��/TSg�/��?���Gq�G�ӎ$ s����}`�,�</��հZփ��틁�|��%�o�<[�l����%GJ�J�?���;o�s,gT��!x#���s�]b��"bx"��TJHx�l�-?�ϗ����o� �y�A�9~kG��6�-?�_�:�k���9x�g��w)�{>�����`�% �݄ڍ�|,v��;�JBM�G4Ħq��u�j�����Hï��G`�p��vC�m�'0��f����\�#�Pz5��ڦ!������\AW�uܾ}::\�s�(�4���|�� �*j�rCSwL�o`��4ht���g�T��#�#����\�'���^��`0:c�� ���q��.��!<��u��<�ޮ��nܼ�l���z�ՊQ$0PSS�& �N��w��6:�|�(��@UU5��ѡs��V+��K/�������<��v444��>B����K�4�)�7n��U��^Bj�Y��4����~*+��:Q�JO�Q�DuM���l7����nTV]`�bhN�<���'��s��hDY�YT� ��,��j��V��%%���D[[F�������;u1a������bb�yґ����9y�z}'�ţ;��4�=�,�0��g����O��c:��T\|XI�1��炢C�>!�P�y����L!��E�G�����EƉ��<�{��l��/9c�۷o�� y?�ꫯE������{��a��]���6�y,�����?��y۷�uˎ;?~[S�T ߾���c��@ IEND�B`�PKb��\�i�-BB3templates/hathor/images/toolbar/icon-32-publish.pngnu�[����PNG IHDR @{�u� IDATx��kP�U�x��$��ewYHEPA�E�BM\��2���&k��6�G���T�ePy�R��HV��/�rK@�;�(^P�p�鿇�f{��wY�3�g~s���y��yλ˰�Q=Vb�9�ռ��4i�^S�4ݠ�c�t�� V�قuϱ*��-^� ��ߊny��5���ג��mkhޅ��M�{`� $�����/\��"�6u��3�����n^LʚH�UG������Uw~5����rV�^�}��~H�:�aYς�x�UE����"�cJbG@��u��?�U��s<�1/%V،�k�3P��>�Zw/��E��ช��td��"��m2R��qB+ciN��j�q/�x���馅���(�|����,�ŅZW� ���1A�QZk5n��@ϊ�P�&N+ ?��O�N�?���{SP\`"&�<���BK_���S-���#j�� ;��s2�0�Y��Zwj=y���˄�<�-~���c�5S�Q��A���y��@���Q|J�O#fP�A���s<�� ��(�&�<��TҪ��7b��< ����0�/n�P@7 NHW�.w�r�>�}��m"�!�t� vP�s�Q����X,n p�b� ��ȝtY��0��8�<�#3���H��or����\�p+�2=�ή �~�@:��$�rf�`�7�_q���7 �.b ~��x������0O7����}���d;D�a`��r�3#�']݀��� �"��f�c�o*b)rG�cK>9S���������C�����T���7�ЂA��'���.�?��Rb_;�|��?�u���OMXfMHn�|��S�]���S�G L�!�;����#($c~/�-��I�#$y3��ma1C�َn�3����G��֮%#W�����h��b/�b�tkb�v'�$���qҔ��~�"�����{�钇��Jp����o܌5,���R�L'鞐!v��bo��Ő�yl��AU�L3�}���"�g_I?���͟w@wq��[K��gga�k�Q���gS"��i �R�lDꂱ� �D9֟�?i���&��4E�`��J0?�>��d��#�=9�}�D���4�A(� "�����ϴ���@���̖$��\[�(Z۳96"�`��X[7���0��Z�͘�� ?0 <m}����<^��ļ`���>� �|S�ը�%�,`B�@�>���\F0e$ ��{'X���M$Ѓ���������d�X����Ʌ�5��8/v��U��>�u��5�}��;K�U�9�s�:::h``���r� uww�g�X��<6�$@v�-�t��v�˗/�͛7�z��٣�}}} �����XϚ�\\�?��w��xZ<2��,@�z��|/^�H�э7xr���9Zk;�n�7�B>5`uo����'jkk���f���%wjjj�s��Q{{;?2�"�Xw����q#555�N �����#��0���@Ԁ�l�pE��k�]QYYI�TWWG�ϟ'79ď L��q��Yr#ޡ��F���_�H������NUUUT__�@��m�rFYY����a�w�E|��SUWW ����3g�PAA�����b2�L|�<���BS���$�����&�'�F8�@� �7��xQ<������xѾ())i+\TTtX���?�)6n�Vjj�V��h4�����X������%�?R<V?R��N�@ON�IEND�B`�PKb��\e���3templates/hathor/images/toolbar/icon-32-article.pngnu�[����PNG IHDR @{�u�zIDATx�Ew�� �e����e�.ò��(�ߠ��L�n.l�̔�aft�v��y=s�)Z���$=�!�Œ�.,,|8�˹�K�DN�s��v����w�5�(�P�a冖�������o5��r�*�կ~�����;;;�R:��kU�U� <��s���Ϭ����.�WG:� P����?������}�J*�JNd*;����g~�(�(�����/�nooo9��*��������s�=�OMM-j���B�"��w��P��ᕗ^�x"!�pX666dc}]�[Zl9�m�w�)^���+)���G?��w����,J����fe/��{�_P`iqQ �`Ꚛ��Y���f<�͙���j3 o�;M���(e-���y��D�2 ###?��b/��?��VV��̈��(QW'�KK��DP�����ʝ�@�i��7������-��X��gF�ږi����)��'L�!N��<���K/���g����i�B$��M���%�h�����)��9���w�# ���'�ʧ���R�z����������YW��M��g�%pF�`qGG��B!,��oȟ�ԂsR��������ىŒ/���Jh���JYR���?IH�����4$ccc���`td�T��T�P�j+�G��{��N{J$5����WV��-(P�p)��Re�7�2C@ |�U�ə.MMM(!� =��ac�]� �0�1�T����(�R�:�V566���,���+++/;()��'�S�����2����v ?��hf�(�q2�%�ʭ��|'���[ ��R,�T,�_����v�AX�`,\^^�B�e�������G���)#��)/^d ^���;�Z�[A�����+;��-�s�\�d�)�G�������1]E���e�s*p+ �L��z�[�ԫ/�z���)p+*`�s�!��ݝ]Y�{������p��4(T���d�o �R �ʫ�;V�lmn ������ �N���k ��l6�J�e|l\�=����ڮ��W٭�9U<$[,O��X���KV���L&S��K$� C)w���ڧș��J �w���ެi��z�� f�|�*)�U^Q��}R=��2���'"PV�ɪ�+�X�����9�M��S F�IN�(j�Z����/~�3 G"z�pN��֖yC�]]:�P��t� �������cX2�4L��~�⩧�6ك�����U���(f����\]Y�$L�i-�� �$��~�Gb�b���d �2e��� ��7|k|�� ^�\��̷L XzhI$�w!�qZ��ջ���}E��kP!�-�k���纙=C��R����Q�/��v�}�a1p� �y b�J|B᪸G|~+�v.�(s���b>yt2 �.�*�o|�u�R��7��<,|x���&i�K膤лb W%�2�/�R���<cխ%���ev����������5��1�M� P�Q+2*���y�H�ZL,(�Lh�i�ֶ6��.�0�8AX*8�H4�m��UWW�����]�����(j�Z�����9���IEND�B`�PKb��\�`*BB0templates/hathor/images/toolbar/icon-32-menu.pngnu�[����PNG IHDR @LP��)PLTE������������������������������ž������������������ĺ��������������������������ű�����������������������ؙ�������ơ������ÿ��Ƹ����ދ��k�����y�����d����尲�Ro���܅��u����ɓ����Ղ�����Bi���퍪ͨ�������՞�Ǐ��]}����s������������9c���ͦ��`~����Or�Ln�g������Ǿ���u�Ϙ�Θ�ϓ�ԉ�ʝ�����z�����i�Dp>�tRNS@��f�IDATx^ՓŮ�6@=cv�>f��?�����Q;Q�owU�)��h�:qȿş/-77/?���7;�����E[�����v0���wA�M�<���t���O�>(Cl�E��b�^��#)g��0�� �u�3�WH���f<�X3��1q�|������ �0����:�鐬V����{�,KSE4I�ɨ-��W��}[���:=����~����7�����﵅/���x���w��w������>��>�L��})%�&�~�C� �c�4��YG8��!D��Km��+�5r�+���Ahq�h� n��r��^j8 ��>ʪc�CO��*6�~0O��t� � �+Q�q�l� ,��](a*�q,�ɺC�y���$��@�R�ſQ�9GI9��N��zA��y`�w��w��� ��[E�R�<��ţe��>n�ʲ��t�,P �!�����i��1J!�cI�� jC�I���#P�iA%AO`LXRfvB�P��$.��Y�qB-(D[P$i��r��� F�l��l{�2[�g��,�|��M�!���&�3c����s�t��!#Q���_?�� �a�^j��RK.�J��M�'4]"���n(���}AYA��k3����J���P���p��)� X�)o:��ʿ!�%e�H���JKQ�Jɒ�iW XD(���EB�%H�G��F*i��IEND�B`�PKb��\��;Cvv3templates/hathor/images/toolbar/icon-32-checkin.pngnu�[����PNG IHDR @{�u�=IDATx��OSg��E'���-!ۜ3��(]ܚ���e3�d�WmE`��E���T���fm`�M�(ז�܄q��О����[L4�&�����Ĕ�"9�e�ɇ����9��}�鬙13�1��s�#�$�ݾ¯�DpI�h<-A�h! �I�M���o�b�$��R�4��\e#�/��q&�/8�@�D�:�!d9� QP���+>�De9�@5� �C��GHq��r0Uƛ�j U�e?*�iH�� ;�s��ċ�?���[(�N�ԶvYVxpƶ��E��zU�n�p�l'�%v�>� ��'�BBou��' �?� �a�a�8b��]�䤋��_皤2���2h��O$\���?�H�j�œ�AB��C�-d�88ֻ�Uf��R��b�/��sD�����U�wC.-�F�1�[�C���%�A�16Q�}u��(����k�̃\�Է��a��$5� �o��|�6�3eH� ��N����;AiJ���M8ǃ?uG�>R�>M&�����!�q5Ct�wp�t2��Нx���:���^J:NunE[�;�ӯZɂ�����/ƑغrL ���9�jM_� �c/(�GAֵm<Hi�NO�ݲ�k�| \��7�e"��}�wD���x��#o� ]S>l���wCiQ�W�Eھ�#�싃�đ��`���M.mo�൏є��1��k�ٶ��B4�T��x�{����O�)��]$U��:X�|!V�=\k;;�Gly�Z����Ek'�r�15/L����p� xB.��kg�9�2eQ7� �f��v{cr���DE�qu��p'K{p���9�<���ۄ�,s�0��a�q.�a'#n�︣�LQ�-��\Y���&GH�����,f�-d��5�0zn�s��pYJ䰌�]�{,�Y�gY��Y�@\�͉��`.Bcf+����"��D=ޞ� �6w�H�ҥnpû��3��;q���f��_�gϞ �߿��*������~�f�QV���M\��K������1��p0W��L�%D0l``�����J�b�0<}���(����������FUTT0�ӓ"Q��[x'�1�(���A���{�x���NGa���(�V�Aoo���'O�9�\�����ʱ8������vFÏ��h4�`!��I_�DHB���}i7���!�`���UUU����'�;i��&�[�L&&d�?~��4M��ǖ�s�UVV����Ч0b��9D'RTg&� CGI�Q���Tii�N�ӷ��w������n���|�DOO���.��(����Mw����rliia�XRR�`���F&��V�����N�j%�[��Ջ⸃a]�=z�(�����9^ц:%�R����,**������I�N�F"Gq��7ۚ������o㶊N�E�a��`����>F����R0�X�^�gxrzN��UWW�o߾M�G|�����Fc_�z��oݺ5X��|�����n@L��}���7oR�n���n�߾tvv�"��!]r���n������1�W�kr,M>IEND�B`�PKb��\��_��4templates/hathor/images/toolbar/icon-32-featured.pngnu�[����PNG IHDR @{�u�dIDATx��$M�sg�m��=X۶m��Fۣ�m�]h�v�}�ي�������97#����P�{֎b+8<<��������@��r����w������q?���[�p�s����t�r<Fq//{XX�K���RQQ����5*'X���ڔ�ي�[��---K__�dgg�I�.�|��A�)����� �9��v�J� Ń-S��~mccCt�INN��.�����ə��Q���;1���m�հ��ש�ⱱ1 0���^�_��o OINL���bi�����\��sO �?~,�)�w�DFF���DGFB*a����3R3w��<�a(++kT������恦�'����p:�� x�p�M7��2�m�������J����g�{Gw�����BVVV ��p�*�>�������8�X�0�@m� s���#�]]�����z����?l�0�����9��<�J��$#-�['�ӆ�9�g )!��!-��Ԓ��uuv ��'�������Ato���yj�\���dbb�����!�E!����-�33���$��v�d}}]@ww��(A�'�)��b�s�5W�iӽ8������B��"m'^�"9�>)*(�ښ),(���Ta�;��G+�f&�#���K��-�S�S�q�˦�F�(+P��ho>������)��:::� �<B�f�� �%ni� ��2>sy@��� �mm{7+�myyY�@��3c!Υ;��(/�!��n�{���I YjJ����J\L�deduJR��j��ŅEimm�_���l��Q��W0�8ĩ����$eb��iUB��N����0���+ ������#��%59Y��Cp���\�FGN$�wF��;)A�xl��o���{ `��Y&`��Ғ,-.ʢ �a��� J��K�7��/��A�Fľ�� p^���%��+!����gt�M��/)a�ۋ?6��b���"�O�0ד��pɆcH9� ˌ ��J␠;��Ny{ڀ̬m ���%���8��,.����N+�!e�G����/+�Mm@��?V����۷u(,�0�siY%����p^N��b�%�L#�s��א7�/��on[���6�����.�wu9:��J8��N�z��~]�,�7�5I�?j��]���m��b��4(,�0 ���%[0�A_o�a��'dJ����V �s![A�Y�P!+B�cq/��QX��a�����ݣ�~HeBE�}gG���5�C��*����S�v&��|1�^^v���}����*�������������'~|�W�L���a@=�p�����?<;b��F�� ������y�_SN!��`8`<T��==��k ��=��C~ڏ�����Eey9���j��hHN��S��D���JNVD� ��Ԝ��qʑ�<���%(�z{�q�;��,�sOD�YpO���>V����`�jC`�{NM����9�/AAPɤ�����Ĉ�!��%[SU���qN�����h N��P�����nq�j�-.,��HOlȹ� �H z�Xgt+��q�C�R�M�K�DDŽ�͍M��DҤs8�:A!Ĉ���!���c��%f2k�Y�p�k�OP� 2��6!8ݐ C�+^��AʤD8�p8|��z%�&1�8�[� ɎPC��� tr2,L�r�w�:AAt���1bAjo�C���������Ҩ�_WW�$�����~�@ �����,C�g�_ܒ�%�%�NE9�%�Ԟ��gѝ�|�� pIP0Q�j��"!��8�RSSc�<YaY\@ LN^��vEs�QQQ�O(ɚ�IЌjzz:=��� 8~��Y.H�,��R__�@~W�+� f� ������!'Ƚt�ߙa� H���*� $$������d���HPtuugrY�{��a� ��8F����ΥF-��[��G q�J� ���`'lmi��L6��hKii)m�!B�����Ї>�]=������9>鉖}J`��F�;����LP�8�G;g�IEND�B`�PKb��\-�4003templates/hathor/images/toolbar/icon-32-default.pngnu�[����PNG IHDR @{�u��IDATx��4G��Fl�6϶ �m{bۜ�v~䏓Bl[k{��U�^�a�n�g�r誧v�=ow�&O�ͷ�F6_����C�j�a���2�'��kY���G�P���(�Ɖ@�t�ɗ�����U� ��*���wϢ�G���x��X!�K>5D�� �%�����+�P��S'{~o�W��[�:��kcO ��ѓx���*(�xg���.?J<�A�G�(�� ��&��t�=�����<���s(�c���$�=�A������1 ��x��R�p��t/�ȃm�|�+'x�D�f�Z5|_#9�7�= A�)ݶ9D�=�v���mg ���\/ĝ��?�l&��ƭ)t�n��b��m;�_����k6���;e'Cnٖ��`�o�^N.����Y��K�d�3�u��w��N�47���as�������]�Eϕ�ѯ'&|��+(���&�~j�.XI7� �p�H,��i�z�s�^j��L�x5��ȗJ�W/� ����"^r�E������] �U�Ν鷓Jx��?��b�+��� �r�ǺQo!(��,�6ވ"���O/�yC>6 �T2ݴGk����S4{\���/�jglZ���r`��Ʋ���j �^z\����+hc�_ K��P���4��Q�y�8f�ͷ�Ԃ��`I ��r����r�| ��w-�g�3B����j��Y�zGA 7~��$�����8��\qd�\�x<K�z���� c�*��V�Růi�^7P�x�]n��x���������c�>��}��}�,`)��Okn.�K�+x�����\>����?-�N� H�G��|����p��3�H��d(��d,���4�H���l�Na� ��!�*�Z�Kq��b\�,V���o-� �7�+�f�m�E��X�wŰP�c����_7r����7�xcJ�����V�~�<?���������"�{�|�vHIEND�B`�PKb��\�m�4templates/hathor/images/toolbar/icon-32-calendar.pngnu�[����PNG IHDR @{�u��IDATx^�XklW�ffߎ�Y;������T&��@�!V#T H�T�����R�$� ?ʏ6�$"�/B����"�����()y�J��Nl'~��^{ߞ�0��Wx<;��� |�͝�ss�w�9��,������k�C���HC��`����c3�$�:�l�̔'�y�X�G;���� y��uowG��<R�Z�p<��>=���lE�a��-A���(j�.9i3;�H���/��CNW$`���� &�:�5���T!B�_��|�PQ�ÈEl ��!(�&�22��������� �qy���=��R�NBݴ�)� �Mm��>������׃�mu�����_!��!(ٿ% �T��P�$�8@���B�hq���ZsssV�����-E�� �J��ڦ�v����q�j��{��ʕ+X�d@0M�;Ĉ���n=d�:k����0M|�5�JH.�-�t�����n�= :��S8��p�oi��Q/~8��ߟ��wG�V�CKx����h��=�~8�.>��遟|���e�n���e���i�n7�Q?3���9�����K�z[��aU<`<�8[�?f �.k�9���u�r�Ar��w�O�u|�ASş�)�{�qy�!����� �B�Z�g:��Sm��.axh�L�20�n��oFV1�H8��kp4�W��Q"��c1x����IR�iY8�)�H���>H�Rbd3&���;�v�����}��#݀a���ߎ��Y��"�4�|µ��g��[P���xg8�W�8k���U����`->J�Ӥ�hȇ`>��}qڷmE^�1^��Z�"~5ЉW2E�tIf^��H ��5b5��t���r��;3M��MeĚ�H�4�d��M!ڭ<N�k�!��aX�(�.}��y�g#��mM��[��Y�vC i���>U~�מ��χ�y0�� �u��I�z��1r�D����s@SU��BZ���l�!�r*g�_[�j��_υP2�KK ��n�5��EU�( �)�;���R��n�z,��Y�l�ɚ�>|�G@4��q@UU�\�� ;����N���*��T*��B?�&aY�)�=C���t�\.�#��~QP3��������� �8��N�� @Z"��+C�}���*�������gq�9�"���Mi��X�jf�VF�?W��U���X�Vk+C� )���9��6�_E��Ȝ�f��A0���oP\�z��$IG�~?8�&ZS��]�&d�8p��Aq�ڵ��h�m�B�����tz����ܠ�w�f @>���ģ<�nho.���g��\��T*ayy X\\����6Da��|���\.B0dD�#5��O!`�B�Pտ ��[������y7(�-w93,�b�!�M�^���̳AAF-�L&c �V����yK�u&(�^ 'FFF`wHP+H����G�{��E�p�q�B7�dd�Y,--�>��u��0� CCC�u�nIe�ϟ���;6�@ׯ_g�s�0== � �h�ܹë"���3k^����J6ŗ�D�*��y��^�Nf����+c$&&&���ݻw#��#�JUk�T��}\���߱Xmmm�e���ޑ�ͽ��D��qGx���P:::h8dv] #�̼�g �}^t�o�Nk�=�ݢq�bMII������ZW��iPxxH�K�Ř�œ\Jƻ������yH��E9�Bs��mz� َ;j���D"A;#}^)�Y>�����q2F�(��s/Yҷq�r��;���NMM�w===tѠ���vSN�B� �4x#�*rd/�/_O�F�g.�����wبJ�)�n/p#�$�!*Xt���H����5��R�Ztc�D�WO�ڵ�ՠ��=m�|���{7(��n�>n'�M��gm�Μ9���ɓ'y���mPp4(<�埕X��Q��0IEND�B`�PKb��\5��PP2templates/hathor/images/toolbar/icon-32-export.pngnu�[����PNG IHDR @LP��PPLTE������������������������������߭����������Ž�����U� ���M�R�J����O�_� Y� ���W� ���B����G����\� F��������������ξޤ��뮰����b����pwuX�#�����Ӿ���������l���������S�!y�+��ea� �ɇghp�˪q�6u�"R���L����c�-�������UW\�����UV\e�B���&&(\�\�0���b�&~~~w�'�̉!sx{�����j����Ʌ{�Nn�W�ĕ��~gy_=�����҉��L{}��慔���4@��܌��}tRNS@��f�IDATx^͕E��0@'*��˺�������Z:�m�n�^����l��������oL �,w��0,�u�`���7��v�-!�Ҵ�.����/�uSA�R���l�z�|�9� �� x �����T��b_030�� ��b�Pȟ�2�M��8�l� ���kk���cOB~-���W��#�8OJJ��ף����� n�� :�n��k^��\��*���B|�w�sn!48��Ӎ}���%���F���U*ŏ�����!�A���z��?�Jy��������;� Iຌ ����+;���X����R��l������ :�Vo�j�|�iuš&����u�m��'�k����������e3�������>�%��d�%F�1�P�}�|�S�B��L�(��0��LI����R7L$�EX{a��� a�i;Ü�q��@'w�dĄ��-r� g}:0��j��%�@?�c�ڱ�pK�������0���'���� �L0C�ܘ��`ñ�R��W�H c<,aC�BB0�G��u�بZC�B�� �Ghb a����L��f:�m�b�z�a�� `�,�)Ɣ�A"шPYX��#�,O�i,�>����1:�Q�u4��̓f��4` ��#IEND�B`�PKb��\��5�. . >templates/hathor/images/toolbar/icon-32-new-privatemessage.pngnu�[����PNG IHDR @{�u��IDATx��YiP���Ġ;Z`��G�F5�!��+U��R�h7.BEe���]qD�7ȡ����<�sTfwm�y�.��j) ��UO�t�<�{|_�� �{�cq�cL`���)�`��>b|�0e��1������e�ʕJGG��|n�0.�/�{�Q0�3,�6˖-sݲeK���_-��庶�6z��5�zz��yyy@�i�U9�1�aƘ����r�%K����T�������֛7o�"�����۷o�͛7 I_�|I/^����V�~����`��.� ����.;;;�������*&z���LO�<������jll$�:u� p���dӦMG����5�����.�$"���! ���B��W�vECJmmm��:)�Hށc����=z$������f�|��A�>&�@�t:��SF�����s�6�!��B҅lA4$yii)�8���p�B�i�X��Ԅ�� ��7n�;���W�^E)%������n�+�9�*B�$�n݂|I�1<%������K̹��$�<99�AJ{!�AL���jD����e�����!ɟ={FO�>��˗���$&�������I�_������˗EB��ҥKb��ܹC�o�E"� K�v��)� ��ҍ� �7����q�{��y-�g�Х�jJ��4�m���v1�G��̈́ x`���t"��#�� ��,[�]vUi+��:���[@�B I�� Q�t*�2]�Vӽ{�(==}�L�r� �'��:1���#3+�CQ���PCF�7H�m)�_%E����d�F���_\F7x&�fB~~�?�H$@}}=�I����&��?�kiN���т��-�y��4?\C���dr,�,�������b&�`�R�?~L� b4U1�eM�,<���+�8�����7'��cu;}���Ɵo'E�M���&�i4��ir N!~G���SOO�l&E���H��s���q���e�̸ �YF�b�� �) Y$�>!!����fR�U��oM�8M[���MmV�����7n�fb4 �e$��D `}@�v�h�H�DB�h�$d�H��#N����DB�-2���~���J��v����+Q��t��5�T2"�@�:ġ���r~W ����ζ���\2J�Gv�c!���ՓXK>�4�'��=O�����������r� ݿD�v�浸k�Z����NLLluww��رC�t�R7ccc'G�Ê�����Z�I��MB�u��H8ZDR���y2b3���2d�i@@@>DpC�"##��ߟ�aÆhd�w��˘���P0��Y'�̔��cy �#��k$Ց�,#�;�<R�����i��i��_����c��������(�����i��gYDj{&EUv�� Y�吉����3i���fy��^�&�w:M�WrǼ��n�o��1��FV�DT~oQE/��E���}yE<�O���ͷp汿b��θ/\�͵إ�:M�S6S��jQGF!�4ɷX?�;���HN�gs�m���6�[3iπ}�{gO�Ͽt�k7U�o�K-�����gR����8���s�c�L��������z��H���;� ��X�b�oە۶m]`���������`�ï��~�o���ŋ7�]�֝MUtt��_�G�X�j�.'''����LT1ш��g���ٳ�h^^^=?�G�ؾ}��X�f�X����g,�����?�z��?PXX�~�������@AA���Μ93����͛������8x��`�pD��i����jkk�����{ � ��x`��?r��N�SVV\1�{II ��Bp}�4 65�͗ �� K��bWb�� �X����@��_�x���ddd��;wn���J��F��d���� �����-E.#���J��iiit��I=?���ݻ�� z�L��b����=����'���p�����5�ԄҌ��Z��'$$��?��S�N����j8�Z�n���������a&�A��45�R��qqq�������g��XaT�hd��'N����TJ�\�����s}LLLBXX����Y]vAj�ԣ��L�������0����g1 ��2��ٍ 44t�R����+c�V�2P=�w�g�#̆��������g�P<�)eQ_'%%Ű��������_J���L#IEND�B`�PKb��\�� 6templates/hathor/images/toolbar/icon-32-messanging.pngnu�[����PNG IHDR @{�u�FIDATx�t$��km��m۶m[�ڌ3�m{&��m�Y?�;S=�3'���%ٚ�ݺU�S]�?��S�i*��k&\�tf&3���b3����&:�)2�)Z�,a�3+��{��l�����Վf�0�?=�|���b61�3I.`63됐��`��ގ�O�$��wG��t)_"2_�L���Qx��U��U#���}��[ϊ�\�r�P&�ď��% E>[�|�x����g���ă�U�]1$��8�F∎Ğ[#I����a$vh��8�ިL�ь�,f�x��.9�<��,��l�cY4�-���@:������ci�'���m�E���Rّ��|���{�y�� R�*�1j ��[�X�e2��c�P&�Mbg�}�$��9�� 9���KX&�\��0 ����e�X½���-Ћ�3�H�W�p�F5����~�ؚ��=aA6�ْ�}�{��^J7���:�))��a D�I*�y�)�s��� W�������~&+1`�g��Z��!��kU[[����n������R��Ƞ��_�D�F�*��"� =v���*z�\K·�f��I��{�� ��3�272O���A^SSC������N���t��Y���܆�8��ѰB�:��$��^M$�i�g]V�@Kn �k�y�����*���#�VK���������eR���@�r{�B�f=>-\�V$�Ì�%Ǭe.g�}衇L����Pjj*%''� TPP�D('' �C�-,2��1�mzQ �U �[;�Qm�$4˧�rB̓��[��+** F���!����o~�:}�4�8q�>���'�<��nK��{h{I/��RAu=�#�����C��S����0�G�I�8���Puu5zkb�{{{�A�@ȉ[F'O��ע��o=�����������<���R����HE��Ț��덄Cë�JJJr�A���E���d��bf&���_��{��7!�N���ͽ(%���!��b�qo?ygg'm ��K~(�.&&&����o,�J�1���� !CP�gT\\�˳��<""�����ɱz g�2�1�17��Bഴt���5$(�q"�N�" �̬,��C*?��0g����R�ܑ^��yGG���<�\�O@V�'ݱc�$�:Z���D�I�D���6$��\se�5s2H����xXQ,{��*88ث�]��~`��fr�=�*��ᷱ��Z��(;��AV��J��J�X\�����Ϙ���Ós!44������@A0C"m����ܨz�I�Մ�%�b���a.cn[�dɫ{���DX������0��9h+D#��b.%%%���W���{<��װ�\*��T> {�ɧ�FEE��~�3��cB��m@!*�1����˻h�]��>���{:�B>�+�3U�ϵr8n`\�p����oE��\�RB�����FEE�����������]nf�ɡ��Lj��X$��\�*�n�c=�s�.BX�ʊ�� Y[�}��7�r�G�R8�G� �%˳L5$71_y�U�xn�����/�}�}�y�o���D�I�t�ϻ��^FΕ�f)|����B.a\7[�zO仠R L���+t��MH5�ӆ����)d�$�e����\ �K �Ѯ�L���N��p����}��58p�_s8����В��5>|xr'^z�Ͼ�ꫣ?���+011Ѽ��[�s���$&�p��{k���Z����/'rqq�ݒF�!GGG|�� �<$c?�x�Wn���A@E��H@��ٙ sss�g������-_���'������X-QWAI���݀��'y{{��N���Ow��<��4b �����p��mR��쎎����H ���"//�A~~~Htd���x��=���*^ב�� ľ�����dffvw�J��p[2�@6�B@@��w8!�q8�J(R@�� �>��9���Xb,S���'Ċ���w8!�s8����O�/���z��=�p�����O-�bLwN�� �9�;'t��Н�sBwN�� �9�}N$' ���"(�IEND�B`�PKb��\�<Q��3templates/hathor/images/toolbar/icon-32-forward.pngnu�[����PNG IHDR @LP���PLTE����������������̥����ޙ������������R� ���ꗳ艪�D�N� �͔��s���l�ݷ�ؕ��Mb�9��S��6�Ϟn���ϭ�YS� ��'e� J� ��,��<Y�"�Ƅy�T��[��[�ݜ�ă[���?��u��`Z���,N�f�Y�h�1�Y��ŵ�z�ʋ��RP� ��^�x�!G� X���@��N� a��ƌ��V��ͦ�l��{��Q�ב_�Y�.�؍��������N���w��T��P�̃��aS�t���߁�8��q�ռ��k��s�$��>g�@�����rn�<[�,��]�븮�|��j��[��I��:h� ��0��z��H��9���쓾q}�"��P���J��/^�1]���R��8F� ��k�:��ip�@��N��K����?��@��y��8R���E��2��n_�'��v��Ma���~�M�tRNS@��f�IDATx���#A�W��JǶm�m{7��Y�m�֏���`���� �����x�I-��w����E��l[a84ˉ?E[��d3�I�s�ޔ��ly�̱T�����R�kI$����S*#�E+��m�xIJ��K�9��ů��}�V�lY|�w�˸p�S���E*;����n�~�`�G��<ʸ8T��ˣ�y�wa��X���U�8w��Q�T��a�6�*�bޘP��@�h4����(�ݦ�ZEw~����Z���m� Տ�X,�Q�AǙCv]�º͌��d�����2�3ʇ��v�TB��;���!�-Zsx��#W8�OY��Zq+����a������M��'�P(4b� L�E��63嬤L�)UqNͬ��ȱ+�F$]�#�a�Q�z�ت7�6Sۍ�@U���O��@�@�Wc{f���%��1g�����̯03�j��^˜�w�� �MKj=K��tw�~�61��vS:L�,�g�d� ᚫ���W����Q�7�-�@`>7�c|c�+��R�T�*��(�K)z�$m]�Y���p�C@�U(Տ�b 8���̫�,�3�(�W��;p����B ر�K �m��G<.X��K�3��_�C�]��6||ز#\�!p��uC��s�$�-������fג �Q����6�u��}���-�����R.!8�$���<�j�fIEND�B`�PKb��\���?templates/hathor/images/toolbar/icon-32-read-privatemessage.pngnu�[����PNG IHDR @{�u��IDATx�Y�dɶ�ɲ����6��m۶m[�g�m�3mWg]V�xg��Q��]Yx����ދ�����OʼnHL���9���� Ji�$�IP|�G\�677lj�?�|�{�yk�=�<)!X������'9,9��ξ�+�:uj 4-����?���F�{����_�#pB��?"�UPq�e��x��_ZQQ�x<��.�uuu�+V|��/�r�֭v�e�[�L���GO9唣���1����ׇ��}��o>���袌��xNe[�lٯ=��]����6�χ��Ǜo��K�� ABzBm?s�ܹ�����x�5�e<�1�����t�W^z]4z��d�S�LY���O�i�w.S�%r"D��b��5B�8L�0li�6m�6 bZH��I''��Y�r�"�#p�Cp !I�ј�Fa1aX̦�>̬,DfF:B�ę/s<y� �q�cD틫��R�;&������/$��`b�a^�j1��g6"�q`F��c��I�&H�Pp�G�<OKm�w��،�"��b1�?���{�X��/Cjj*ɇ!yd&�'��y���b#6������h��(��H�j��S��NL�.猇�c�x ON&��/����n������B̒���*V��>�8z0�V �Q���H���fNNNQ2"CCC���:233���,,��;{�:�ߠT�#6k� �C�t�^/z@8���! ����D�����u�IeGv��;����G�;J]������C�Ȁq�V �1������5���e������GC]=^������x�E4z���l\ͤ�°Lb�Wg�q�Q�AU��3�x%��i���_؇i��p8X�i�ḿ��CwZ�PDB�Y�|��^|���߸@� ���o������˵�c�� 1����t:��s{'^we�Ӕ��Xe�A���-AWČ`؏�3��S���1y$>�$m�4K�ڶm�2�W�f1�Պ�^'>ms��T�\!�Am%�h/����bx�(�a�F�1c���n���ڕ����y��\�F�=��3%9�C �gӦM��6���rl�쀽b\��@��8�:�%1MsmC�ϋlwo��kh�$�H�Rt�.^��L�l��\۴����m�l��f�;��D�@hA��F�H���cD��������-UBdv��չ�T����/--e�f��|&a�y��p�+��3��eTAP!����d�k4�q �9(!@� ͜9s4mpplyyyjƼ���/�۰>���% )B4dL��>(�@�(�qPS���lyq�q� ��`GGG;U�'9---��T�Nz �d"=�À�۹;�O�'b�Q�B��CȌyQ�jEW����(,�.� 4jL��%�����s��p�}L0���EU�#ޞ�x��Ӊ\�C� R�}ȍ�`���[�`����=���;���{����S�R����SPB�?'2��B['�i-4b�o!c�đ���.��_3��vmf��YЧ�j��z�Y��z"^r~����Y��G�%!�����YjPG�U��7t���<c_���p�� v���k?���_���|���R8��v�ڸ��/�R�6-^��Gـ�q�'�n��`G��$A� K`M�r�U�>~O�nG^_��g��˖�)�t��{?��-<����@9��/�J����0�F&���?����~�>�%�������P����/�&����h�tA~�B��# ��2�D�rd�t��E��(,,d ���nii�����O�Vp���?S�Hr:�]w�W��ʎ�n�R-��V�xKrȳz�D���P���Ͽc���dee ��ڦ�m�#n���?#�'L�D�V,��}��g�9s��p�M'�J�������W6n�v"�)�DHTv�aϋ��q�<�X°V��]�r��_& �%@zQQѼ=���Ś�� ��#� زe�[_����dr2O6�o����M����V�\5Y���?�.]�t6�Z�5bo(Ȗr�D �gD �R+�`�$$e�L��P{A � ���Ev���yC+@��� ���y��ͤ"�C���*�$ ��xU��{6$Wc�6.Lz�g̘q��Y�.䇌m5c-!S���&!wNL[?J�M�)�~�"&�`c��>5Er%�Ɨ�����Q� �P��j��q�i���bE��Q�%OL��0 �R�y��{����S��l��cp�JФ���<��o P����D�R���^QvK��ЂV��s��ݍ 6@�wѨ��g��G&%���jB��9�g��0��N{U�� �Y K����Z&9I��WPc1�^�3�t"f�@TԪ*�磻�p�����$�o�Zm�f�=���s�c�8�����Q �4&[l�(�R�� ���ژ��w�_h�H�RX�1M�|��f�]���!Q�̸��+7�g�f� ��+���H�Ӛ�B�7��&`PֆCl$yL��z�6SW��"��L�A��zr���W��~��ٳ��U�v�c��1��4�M:3�1��^���2�>h6~q�5z?�]�1��� ���4���t@�����Ot �M��s�j�Θ��l���"����=8!wH4�W ��6)"�ӻ�뉵��N���U$�ə�W��K���@j�Od�˗���{j�����-�P��8c%�:;���?Я�@��Yx$�g&;�`SՎ����$:$�}�<����/u���,$�{?�����Q��Y�� �@��ׄ���䋒�P���D��Hd��g����"��Q�'B\�79�X��ND;ӥJ�]ˑ|����z��\Bs� ������)��>2ks"/D���o'��h����3���IwJ���$a�V#���]�xIEND�B`�PKb��\�3�?Z Z 1templates/hathor/images/toolbar/icon-32-print.pngnu�[����PNG IHDR @{�u� !IDATx�W�,Y�=�y���z�g�olOh��� �m�ֶ78�m��vw�Jɻ߉�S�3]k��Efg��|Ⱥ8�4��������t��؇��7@�. mٰ�J�?������<�0���8����op���O�Z�����6l݊M;vC��Z4��<��1>:�'�Q�@g[�MdAm�y����%�R��TA/,m'x� �ٰa�;nCD6B݄P�B������ʆm�H��Pʁa��6��q��M[w`vz�u'J~�t`fn�02��u�hll0, �5Y�nh�g1�D�jlr �008Zh�S��Pl;�x��S��cSY�������ց�k��d��^�J&j���8|?a��U9�6�g*U�����'�(���n��֞�R���*���������ߘH&��47տ�l���f��Π�� l� k�W:�ԥ��N c.V����m�{��d����ǽ$��>H�@����n�u����va*�@$Z�3�����Q�ASC�0,��Eô\6m�Ғ�����(^|�e�ݻ�ٻ�tfYk:��(O����p*#��O��۲eÅ�dB�(U*G��w푪�N#;1^��P_�^@���J$�e�&$��ٱ��7d ���g� ]�2���"�N�kk�����5��ڈ��چLCh��i;�$�"+��M��H�A�X)ZG�,�Dҽt@n$R넺tb��t�aک������5��m�R��8��m�1���Xnm��y yA�m*�^����p)Q�F t#�`-@&�/W1gJ�L,�`��h�d�b�8��"L�� Pr訛�T��Ł����c�a��)�^'�e?H���&}����"�X�zY0Ј�K[�0%���M?�7D�b�8¥�@�Rv�h�m;�׆���"�\w��H�P,�� ��`Ď����5�W��[�z�2(�9���n"�(�>, �S�/z`*�P��D � �x��'��������Zq@<�9�%Jf�ժ\��@)W�05�M��v����?�Q�.l��k���,v\(W�Pr#��[�d�W`#�N�z��3�yIAI��<N@2E3�e�LU,{{ݱ�Å\���<�l%Q��% 6)* B��B�.Ia|繯��6|���,t"���^����.�Ea�{0>oa��)cYƆ��,�+_��-�A�d�������$�M&��7�?p��۷o�x��*Q%1��/�!�B�u���/��[!��k�?�<#9��2)�����>�ͫ5���@?���ށt2����D%d�q�Y��E>�CXw�}n��N[�ṫWt���#�<[� :�sa��-�;�Wn@��q�K6~��� mlY��u�0�-���ᩡz��'�t�̱G=������-cW[���j<6>�7Y_���1�7� �[�N$�*tuuf�?o�8�c�a!\+D ��1UB3)u�B���Ô��C4��o}�ס"%�I%�!ȋ��z�WĦtw/G���OB���EB1���)ǫ�\�zIWq���)��M(��Df���>�z|+�dE܊�*q*����{MY`(���"A��U�#�@AP��N���A:���8㌶T*u��a�t��k��<�*�y��P���C�D��2Tnhooe)�r9 �w��� �w/�@EK9`��/�b௦L&����d����k���R�T��z�����>������s.����yM�t Y9�,�e��E2�ZP�|�077W�t�b*_ d�i�n)���s�B455Y�d�N�э���L�/���0%����{���}����yWW��N���F��x)����)M�LU6�5)X� >#c�Bd�����{D_I�<&�.ihhx�x�r�JC�+�uyy�,��`�J��Ge ��^4�Y����bŊt]]]Z8�"iy�x.s�����v!�l"�" YbA�Rc�8Q�%E�L)����CϞ��-υf*_'~���"�lmm5�]� �>�b:�'�b�|<�T� �p��f!�#ܰH�K=7Ӑb �0[>�W���B��P�1,�B� 0�p?�1Lљefsa7 y]��P7u���P�@`F����gƫ��?���̻1�wUY�@�%��?fzR7�qzz�fA��@d��1�|nR�g;`�������e��\d�T��C�W�Y�<x�ad��G����b:��\�I� �[����*6W�W3!Q]Kt\�1H�dӤ�.��੧��K�ݻ�:2��F�1j���3�a||2���x�������Ų���[n�R:�1�q�FLNN�111�hh�k�+����89���sb�ϼ�q����yOODlYp�T�:�8��Tgg�N�*�9~`022Bj!�4G9�R ��{Æ ��U��F�0�% -*��eM�x~�����/^�x�~������M��F5���e��<3y���g?[�x.�k�I�x�G�F�����}��0���φK��[��&ja�IEND�B`�PKb��\���ll3templates/hathor/images/toolbar/icon-32-unblock.pngnu�[����PNG IHDR @{�u�3IDATx�͘ LTW�� 1Mcc���!ctk��B)@���:�V+�h����]�e-PC7vc��¨�����X�Z���Ɗ�(t`��_u�]vΞss�d���v�%_�̻��s�0sy��� h]��ye�8�av�����A{R����n�2�yL���ь�����r�?�6�Z �O�����6�I̋��\�?*�����^�B�o�2��A�9�μ��q6�+^[ή���f�r8|��N���>�I�/X�N�<s��bE�ĉj����Ⱥ/�!g�BÈ�yg�-Z�$��(�H��Gk��WdE�}>�r?xYw4BLL2oF��K��S=4�d�S�H1�X䘠Ɉ��EX�&-Щ ���UDV`��+�Ê��q��Ѥv�{�� l6a0 �p�m_�ñ�Cp���7����BH��MSB쑜P��>_' �{� ���.A�U9000���044V����j_Bٓ�a�RӼ�����ĆP ��=���'>|( �EՠXUH y�o�$�5�U�2��C$�#��_����^���W������,� �UYAVI@o�,��9�>��U��@I}1���I�8�����ҿ�%�%h}�߿��-��� �c=Z`��w��g�B�'��VX���U���o%�*�;-Pj:�$� $"l��E �������\xho/�p?�@�G�}�@r�K�d�x�D}@w ��1���"N��#?�غ}�Qص�MO�@�'�$�9-����"�d/A�;��! q�{X�>t�B!���GB?LUd�?�?�]���ÐR�.�����X��T�A��k�@��-u ��|� ��7i������ۛ^�F��5 ��gԐ�R���-�h����]�V���?-�� �?�v�To������^��N�$K����'.�\ !��� H�R��Y�f�!�����b�^�'٣�b�ӭ�8��f�K1^_��4c���% �(�ʯsI��$��+�����J"<�� -�1���ؠ��v�[�QpQƐ�� d �42���~a�T���_�n�7�� �ɯ@�^�̩��=��l��0vٜ�}����s*�1�$l��q�����"�H�Wp��� ~ޮ���Y勣��R�g��q Q�×s�F��d ��MckO�yY����1�$ c"�Y��X��9�Gt�S4�al�$K̤`����3/�37n�Ǎ������q��48O��^@�p!3��BS��g�%����.�m���;2���v/�����ljll�g=�6�w���]�^Ss+8CcSK���yߘ0�W����a4�4��G%�'�7��x���9#0M�3�����F+�aH���Y�{�VLVD�*p�ƭ"&�RU��Ճ�U7@�[�u�qk���n��ꆶ�v��X��X�$PQQ���#�_��� zzz��;p���{���D(�b�0HW�0"��etvuAwwt�$��V�բ]��ǫT��UB{{tttb�I�+q[�FM�-U(/�Q[[G%f���J��0�qh����28������,юU� HKA��6�|�@Yٷ��hiiA�6�hU�@z�m�d�o��dE@ZW*-J� ��H�0��F,P�Ej�_���YT���%:ŦƵ���O�^I��8�P�B����ʍt�0��p�B h�2Jg�~�G��Ν���j{ ڐH����g()��b�Ȑ�:}���pUVU�w}��f�Qs.�_�vMU�N�<���cp�u\t��5&������:��qf�rk��*((�!��VD?���{g���1�K�(�3���5�O�Oggr�ɳ����@}ȹ���8ߓ��]���.�������1an�p�df~����>ʡ��:M�xζ��S���;��s����iZZz9T�@Ϩ���rʩy<g��l�,B��0&��|�݃�g�B�|���U�xN�9H��,� ��u�6͎g���x~=�ۦr�I���_w CC�IEND�B`�PKb��\��EÈ�5templates/hathor/images/toolbar/icon-32-component.pngnu�[����PNG IHDR @{�u�OIDATx�XEt3�����N�C�q~fff^�a�^_7en��~Uf�uS؟2���f�c��{��(��)77G��ݫ��R2X�=4��B|�:�s�8��`�,`� �>�{XF��@Z@����t�@![����h|v���p_���7�Je�]x&�r�5�=Xy��mY�/��T�:�נ�0�P(���d� ��:����@}#�\ Ϭ��6�����#�l�6lHaCAA�u!���B����Etįa�e�ֽo��d�6d�U|����i'� �?~�� 7���L$Ǟ����J���C�� b����{l����_3�%-�t`���ܫ ��/�)����r2Б(fA�����Y��Y;�ı���K_�X��l��;�ȇ�|��W!���&(���z�|�G����Š_���g�.�{7��{9���}~�v=L�0 [� ��=.η'Q�C�* ����?�!�ȰRH��gV;8�q�?#�Gh�������^(��=Y�� k�'��<w�3���=�.V4y���&1�E������OƊ�ʅ:�tҡDX���( �@�1 � N���q8҂c[`��O�e2�_;�J=`s2�ꪦ�����0aK0�� �U��JiIB'Ԉ�6h���a�H藌Ѓ+1����ca����@e�*B��JW,!���8���f�f.�a�Z[�H.m��j��F���0�!�!^F\W�`fW*>��A�3�ã��ޏ6�.�BuC�Ԧ�˄��0��O��Qt�,��>��W,����O��>|�{YЁe�ǣ+!q���ػ���<9E ��X�_2 ��\� ��ś���y@�c�m��:8nY<�����:�ˁ��t*��|>`+�N�3@�NXRjS�,[�-�k�#��z�,>�I�7m��[5��D(�c=���=Ky1:��E,�!]����7$S�P�}�y�x�3�IJ9� ��� ��b��ߏl6N^�v-=z jmmo�����{�n�'(�e���(�t�������6 �q�������( ضm�f����oH<��u�6o��-�ʕ+166�L&������gX(����K���b*�'��6sti1]Wv�U�Y�<����]�������cbbB`NT����9U����+mњZlٲ�{�\��@��"���kt�m �v��?��;w�����B#99�`v�O�L�5k�����cf���Y�g��U��z�j������i�r���^#�$�\Q�c�Ŝ���khh�O�S�a� �yg�T�{�b�T��$7P�TܹsG}_�ǃ�Z�C'�u�0�~�I����a���6 L�����>�$�0���9e�R��f�Z�0vM�Vy`f"4C�G�L.-s������K&�<�j[�R��9�3������J���fr.�g�X�7��]�z� q�������?�k��رc� �y� ��B��<O��k�3B�tE%j���*�IF7�T>�����={����?� �����f�Y��IEND�B`�PKb��\�d2� � 1templates/hathor/images/toolbar/icon-32-links.pngnu�[����PNG IHDR @{�u� �IDATx��yL\��o[5v�%�m�%u�,�U�H��ժ��ʩ�4�)�U*YU��imSRl�m�1�`v�Y�a��0�m؊]o��6���<n�_��<g`�0ح�HE��ys�{�y3�Q>V>T�b�jYLU-w���T�?�:���k��.8��/�W���1��v*B�jºX(��������m@����o�T���G �3���<ע����ٹn�f~��]P��Z��6�f�j��"T�T�(T�9(�U����QP�����L� ��Kؔ�F�篸rm7o��o>�nj�*��9�Ŀ3:�^f���ud��S`������<���!q��mܺu����;�P�/�5� (�ˁg���Xf�f�si�����ݲF��߈6�(fggᛠx���u����~e��kS>����_�����u�b�cx6��SS�v���e�VR9�rX��ꛪ��+�2x\��MXZ�ײ�Q+ԑ.��q�x&щK�/�ʕ+Pi=�F��ho�dʦʮ�ctd�A�k���G[�NԶ#���h6&�`m�����'x�W[��/� �7`��Sœ�Y���ލ[������|�wJ)ޣ�ONNbOy#T�ȣu%�o��S�w�ր|�6�<w~ny<6��Y0<<���Z��������R�Y�8�10��T卯Fg��J���m�Q^��A=6챠��Eoii���x���:�:��q�Jw�6��T�3|�^Zp��tww���Q����(̮n��Uu���?�Bb҄��lwz�L��!<�`��� �� >�^�~(�NrT<�9��:9z�R�蝕8��52�y�����Ⳛ��?���kq����|��>YY �����s���ǂ�~l;l��c�nX�oh��<���Z֬ͱ3�����CqRl����3���$ �(ԉo'T�'����� �}3-�C֬I0�/��#}�*m�N��^��v)8�K��沨x�۱�T�v��J�]�˚5裁Q��3�.Hq���Ap��f`aao$���Rl�C,͝����Zf��۹�32�1O@�xb� n�U)�u����u�~-S�R�4���ۯ��X�xzO1���E���R#�x�J]�����8���]��������Lȇ��<3�"j����IcR�X|=r�'Y�æR�i�v�`��Lė��wU�� ����V��8T ���{x��Dg�~��3�ԡ�d@�q&�E!���O��~��)�p-3y���-���<�4N�+�Tf#��"rA3�hc`�>⠓���y�s�C�%.�P�D���]i�U|�]%S�"b�h� ڗ���38B�)c�R���b��Lx�|�l&/��ԋ[�R�z�H�>e\��\R)�N|���y�Im�[��J~@�G^ 1�3�1�,�1�A�~B~4��O�M��o ��)y��F^'�X��{�l��A����7��`�$#�S�?8i�y�|�|�|�<�����k�K�su�,�����%.��)R��d��dA^o�d�� ������ FGGW!�γ�'���1"L$�*1��Ą�%���]���10���ɵ��uD�^/zzz��ڊ��z��ա���`<C��c�8�5�� �͆���?p��y�mU���~�D��d]�f3������uhoo�l�D�0�;%0ǵX)���nsT�l����N�<�`���������� W��u�J�UĴ�7���ѵa�"�&A�tvv�Re�E&Tѐ�d���H��0�?�B�D�T�G��x�����Ae�nO��ཏ� �����D�h!+���'(���ڝ5b.dmX������yWW��^����_P���x�N��V�C�/� ��."��ѡ����*4fV~nn.�����f�':�w�r�PRR�4��Č�ˣ�:�](7[d�R�#$������Ȯ�L&y� �<s]�����j��e�g%�VNlkkCqq�����,����s�r�&*�����+8 ��z�&S1k�pU�͔��G֬�d�� ���U.H��9c1$�rb"99E���d�b@֬I0~��+=68Q���Pw���'ťW��l���&"�/�ڸ?�����r�?P����b���f�N]\ �b�H-Ț�0��U����Œ�L����z�A��.^�tJ����E�^�?�T�ф��;�aѭ�0��J�d@��5�0��]���pW6y�����ň\;X�999(++��O�ǹ�P\v.&�d}�V�-�^٩<r,�PL�ŀ�������8������T�dԑ�2OD�%y���3wm��@�H(�91�<&�?��۶m{+))���<�%�Á "����cǎ��P��������ٛ��PIEND�B`�PKb��\r�A�� � 5templates/hathor/images/toolbar/icon-32-new-style.pngnu�[����PNG IHDR @{�u� ~IDATx��kpT���OL��]GE�qm��~hSն2ОN�m�2�S�ں3��Zu��� �A-(�[IXC �+w����l.K �\6لM��\N�Mvs#�>�'��=�P����&��y��{{�s��O�*`�0�O�~f4²�2�K ���� ��N;��v��*��|�=V����Sq~��������|�Y�.�T�+"`��2'���܃�3~i�gq*g�Y���q8��0���lI@��ߠ����v�K��]���wTb�kR�o��m�����_�P��+��߆ƦO�->�E_�<�.�>�����֓v��'�.��� �� �ro�Bۻ�#XSM�[�h��>z�'�i�>���Je�.��/��6���h��%��(u܇2���4/��j6?�<o!���?s&m�DWތ�� �1����Dd��7�����p`��A���;Q��b������A4�K�N�%]�&�{�J���rt-Q09�]�CSǐ#����9����z ��6�W�"�F�%�m)���*^�`⛦����?W8�ۆ�w�Ә����"�Wqʗ�A���:^Wv�� uQ�I���i�� �Z,�S�H�6}t�o^g��B����\.���!%��=V�n�~�r�����^Q��s/˨�} �?B0퇨_p=햔��U=m�]O��p�� �5a����̵/³l�����T��Z�)[�\�<G!���hqވP�B�q�ߜ���l�4Us��^��qƟ�t:���Ȯ�a��]�?����Q�a�K�'�S��5�à���r���mm&��G>��7=�:�K]l&�ǰ)E% h{U!�l8��F��`pr��C��W���n�����@�\��::�FMD��* ��Mf/ra�Ӗ�r;ry0e�?�R�����7R���9��u'��Q5V���_�ӡv�ҽ�X��_wV��,��TBh�B<�����u%x�<�8�/���J��2 f߅�W�c�d�`K'�8������C��^F��Q'Gr�B<�O�0~�ڋ��Y ��C���<<�U��6����M����u������CF�_���IR�����o��X�r��v(�&�_�;����� ��D�L�%�+ۉ畳�y��K��K���u� �[�ac���T�4g��Ĺndy��VT�+;���{c/�{,X��-7Y%OV�d��Gf�e�Z|mf����{��pì����6<���;*� �G�Q���Mko�p6}���78k�ꜵ�uΦ�&O(�� V����[��ۊ�X?RPXv����{�|{����Ol<�s�oGg8����% 8���D<z{;B���֡��U�jTVV����B���d~�5ؑS��*?��ը� @���V��]�%� [���ӫqV�]]Z{g�&�#����;����v�}ֻ�����u9�;:�NyN�Z���#��o���oë� �?���:*6A#,�v�d�.8�P�A�`����T���sp��A{��Ç��K~�1�����_Ż�WVV�������'O&�>}�-�!"��{��E0��!�p��)� b*��!.y�vYJJJ8@����F q���|444@.�;w��xP�P�.�>��'N�ā[4�#77�eqf8�ummm5mV�3��_��|>����ѣ8v��G����8c`�E0m��?��)@F��"����{�n�ܹ� ;;�b;1Fw��Y��g���`�DK2b��={�0�0���fsIZ[[���B�X�-b;�߿�"�طo��l�����ncI��h<�0�]@\k.���Y�=.t�M;00��O��h�� �"8+V�\q��4&���4��mT�?��,��#�xD�A9+1�[\�M������bhg�Hخ��_<�i�@�ؔ�b�5uIӏ�z%����9J�Y��X�H` �floog��1� 1�J�c(#I�k8 bar"999���uI�~�܈� ===,�FQ����Ly@����\c53#���S�6 `��D!�FY6l������Y � ��H� ���aV� 0��|?2h\B����"F`�������[�0(���p8��}���L�&�L��F�i��F�{�K��H���z b�� N�.@�8��8j��F�1�1V�i��Ȕn!�Yk��$�]@L�B���$��f~|7H�+����{5Q�Ol�$��gºG��#g��]����2�>b�p�rB6J��v����wD��n b��0��W�%��WWWgP__O�G�̎��%� �(��b�0��E9�&J�)�l0�� �8.�פl��?��nx��P��\G����IEND�B`�PKb��\���,,/templates/hathor/images/toolbar/icon-32-css.pngnu�[����PNG IHDR @{�u��IDATx�X�.9=���g۶�k{õw�`����m<۶m���$i2i���W�In:�̴gn����<w�e���֭[�KKKk�k�q K�����ݻ��(;v옟���\ ࠪ�d�i�eAAv��y�.]�L@|y�`0h��J�m555A$� �U/����֭[$���|3 w���N$�m���?8�i�g�k�u%��}�!`H-�u2��͛7AI� ��'A�Sp��m;v�N����q��U�<p�@/�<��j*�ג����AR�P,��0��d l��D"e�����o�Yb�@��?E�V�� ����F9z{f�1 yK�d0�{`�"��XDX��� >Òu��>�T��@2$��C�_���SKA|�� z!��y��Y����~��F���ᵾ��L��B����/@��b�[!\�N�(��5��8 ��Y��~�g67|5t�@�6���@2 A��D�1�Y��<�k�Ƶ/F#}�Ⱥwn|5���U���@B���é����y�z��'�Q��%��BZ���"�Oo�S�K��C�=�/��Ƣ�(|b2�<��?<���(�:��_��-@aǙ(y�C��a�XU7 #R� �,��(|��Qhz�n��[l����,hc3ES?@ff����M����s��7�|��k5���N�#�˒�~`��� 8,���#��$̛R�hܰ8:rpZ��V���PM�� 覀=��3��Y�k���b���DH<��x<��Fv�w���~�@��'>l۶�Pn�?������W��;�LE��.��2e��>�h�1c�����>��/��+}&�/�mj*��>�m �����*? �[k�㖶��h[��G´1e��&��X*�k=PYYY��g� �2�e����~~��Y����^�n���}I�����ˋp�1��&J�_�$��lH�)ʹ�Q͔ ��B�HD%Dp[�L�� 0#R�R�R��Њ�@�.]��:�����_K���gp��Y[�H������K�0���6�Q�<�_�nlTTT= �O~Q[[�V�Z!''DUU�())�3,Yg�\�U��F�j��.���������Βu�����)H�0;�u��.6<�v`�a���^�ހ�� V�r R�Kr���Sz���ؽ{7��Ν;c����=��O�ќ�6m���ѣ��ѯ_?�rĮ]�Э[7z�}4��'O�k�<:�˗/����u���s�1p�@&��}4Loy���fQ�Æ 3�c�ӛF�[�f^�f>�.0h.N���/���>�ۋS����,�'�0�L7��fy�$�p ����Z2��乔cz=�U��[�sP:k���s!�>�v8�Q��^�J�z���ڣVA8`������3gΤ:v,2ׄc����1��g��8@���|(�����X'�i������]��44Fy�?@��FCaokIEND�B`�PKb��\�h���1templates/hathor/images/toolbar/icon-32-trash.pngnu�[����PNG IHDR @{�u��IDATx^�XhG�fv�WR�&�x��J�H��J�҂�� ��P�[� R ���6H+��0��&F���X���R�i~�]�K���L� �����C��N��y�|����C�f+�(�*D��{���]]]�O�<�u{{{�M �!��V]�p������3�oߞ;{�lϱc�~:w��w����7��˗/we�Y9;;+�<y"����7���`����G��D�d <��͛7����`�6��$�mۦ���ñ���oN�:u@�BM��(_4�g�;�$7}�gK�t �y�[�[�N>��H;�݊H$�D"�R����! 455���8~��;w��+r��t$� � ��֏?���D�����\���.�� |�u,� ����5�-,�,��cɊ��H�~���3��Z�V.?�omjy�Z +pm6�WT�/�- $�,`�)����H����8,;;A$^���:$�� �ΚI+�",U[_�a=d~V>k��b�N��u��4e�U�h,�G4�@,��av|��㬯0���H KAE+��KEpRE��-U˵��Z�( .��wKR@��SȞ��#y�ףu�؞l�S��Q^����,�����s�5�������[p�ŴB챜|<'�c��7�L���`hRB A�TL@�.\�BR��1��p�+0���N�"'W+��M`�^ hAf[1c���h2�$����R���P \��5�Q�خ4Ș��^P�3��)�p��h���!�%�HƼH�`�cB�E�!gO� "@ �¬�w�g�N������m�H��� 9�=����kH�����48{&4H��j!������O� ���Q $,00�H/���w(��9�\H�~�-�kJ�|���ԄNdŻ!�3�(���(lPxk��-�x�k�JIx_��� ��w}������B�P�~�� �3�ᗐlqq �C9�+��P���d�´B!}����mW�h�WP��� �9-����,�=�;�w�7�ϛ[�t���o>�s���a��KҖ�'���˷s��AǞ�^���(��^�^�N�>�Q[[{����͐R���8��9��Ą�������R)��� ��]W~:�B��2��|�q�F}�@`iiI����Կ��i�MMM�{�d��S��}nq�X̟� ��yOO�������@��*>66FI�7c����Z�[�n�S�DF��B�?�xJI�[�333k*J��3g�P��$G LA�^_�@�ʙ�j������}���� �)�w�Dd�:_ z�J˘���y?m�����ŋ�����QO�-\^Z5�_�ޔ��q��/<x���9c$�3�5"N�555��z=�M��o�'�6���w��b��'P��<ǪH�!���`�w朇U�_=���MS@Ϫ�'�oT����>�E� �@�5�/�)��D�{�#����T�,K���(oaX� �+�O4`�@�T*�� $�[�ϱ{��P�<�7#�3NV�j�4��d2� �T?��+�?��z��/���P� ��C� �i�����=�k+��6۶��V:I�aVݘ099y��������'Z�]o�"R�@Β�*��?^��s����b���HP���I:IEND�B`�PKb��\3��4��8templates/hathor/images/toolbar/icon-32-delete-style.pngnu�[����PNG IHDR @{�u��IDATx��kL���'Ki�jcU�iR��!R�i�4u�B;�#��6BQ[EQ���6m�TƸ�M���5)����\��v;Y�]��5��k���ca��c����s�]���DV$_�'��s�9���{�w��Hғ&B��t�8 *a�",e;i��Ś�Pl��c[��L�~��~�۷1s<N�9|o��OIДU$N��M�2�LK�v�kh(9���o`*o�s����Q3&?�9&?x�|+������~�8a�sN��c"�QLZ�����]_DkŇ����l�E&�^L��֯��u��{��w�-��(B�_�7S�s���{<K`���h��É�Il3�c��P�E�$����|P ���4��V�ޒ�F�j4ʋfn��� t��+�q�Å�7�͐�ޕf�ؗ���v4�k�/���q1a�( j��&�_����~|T�B�@q�3l3ķ����D�侷�ŗ.�sE��� �(!������� 6o@�s�è�+���a30�C8�;t�5�?�AQ�c��?��f�f��-6�g$��-hN��FD^�ѷD,�p�m]�p�$г��l��;�a�fƧp�E�O[n��@��7!�]ܩˑ�[���;�'99�Fm��l��7i�{��ެUp�.z��`�!�o~Iݗ�;����7�sЏc;���N� ����4�I�|C��;C�p'�o\5-���!m��S��{�3�ۜ�7���9�ǩ:79Nk3�IȜC,V�"�:�z�R�&��h���?;���*�Kj�Ma�͎�M&�h�@�H"0�W����� ��)��Y��ƕs���_U�w����=�q}k��a�����U1�?���D��?Y8 ���饡�~���<�_X�?���c��6��=�}h���w ����L+���$��u�X�u ���?J�Ԯ�4���5�"%.b�J��I/�6�IŭƧEw=�� K���j<��ʛ��{�(��#r䍧��Y�6���S-������$���n6^ͭ���{�ٷʏvg���y�xfO������T�^ȵ�J�<e9����9���f#�N�o�X�o]���WOw� ��$n��'SY�H*M��d�X'�����E�U� ��#��v�%�833������>�]=�rgW����%���~���IqT���8���z��Q�������~{__���wu��GOF��e�ؖ1�W���0�LOOK�@��z<p����م���9���چ��V��-LKT�}��6����p����ax�>�0(,�499)�B�ϊ��<cc)O����}>�Lv���e�}>�gtT�~T����X��fq��-w�����iӝ�$@���N��#�퍍��,T�KAAAl����B8:�;4�����o�{@ijj��]�z5�ڵk6 �%?{�,\.�J����ͰML+]B$�J�oo����sb'lnn�Q0TTT���tီ[�E�E��R��/���:�QG-imm-����7ӂ�����5ی�gH��K/��(�\!PSS�+W����x���"TVV��qb� ���f��6�%��@Bx�i O�>��'Oj\�t �/_f?������2óö��6�(h�:gΜ���������-���0���ض6C�������ϟgs�;w��A�/��%�8� �%�%�5//'�:�#�y�NMM��g��TUUI>�$��b��Q�N"�C�̛F߽l[���R�f�Jg� |Fp���"�DM���r��<"��a;���~�����82�Y����db��(z����Y�*��N�ml��z�,"��P�6^�pX�>�����ƢUڈV����Gu��@��O�~x�k�I�����o~Jط���oK�.D��@�"��#C�a��T�-����M��ӣ�u��h!0=�-��������VD��:I�J@�6�g�m�[��ŋ$���A9j��D�4r��ΜP?�x�i6��$�y�m�F����#]�Rh�MDa#TK�$db�����7�ݢГ���oD��/9M� ��_lyttT�x<���t�+|�D�}��Z��V�?�>���(�e||\�W=��D��`�i�m�:�W�'�cp<�K���0�@��L�P����I�����D���A��:\�2�^��Z�Gq�~�������B0E�IEND�B`�PKb��\���� � 4templates/hathor/images/toolbar/icon-32-contacts.pngnu�[����PNG IHDR @{�u� �IDATx�X��Z=�hm<[߶m۶m۶m��g�k3�$��mf*�L6��U]��$��۷�o�e��"�/��$�!�Y��@{�y�!��zl�!�I ��p�Y�~c�a�����g����T$-Ai冿�+3z2����5�ڮ ���\�d��!�nD#5V�R]��j���666n�T��j]K�]��^Z�u�P�3��Y�bDuw����H��N4m{��8��O�b��O�M�~6N��Y�!��� �\�Tm��f��� |���@������x�ְ�:hp)4��@Y>���X��ֵ���8l��c ��_�%� �<�.*��`0��j�����Y�-=c1�4d�i�[�6uƕɈi�G�RhN"�@��E��{`[DZC��m=������Q�PS)���K7 a��av���po����أ������_� d�մ�]n�P.�@��(0i<h�q�e8�v�e�-0��3g~�Rէ~W�vVT�'�Y�}���V�" ��i$g�l� 4���k� 9�`��D��v�jv�M7��9��8�u���*�a/���a�`,64&@r�,��ĥ(�4z�]r= UI�ÝZ��2�ME `���� L��4$��KGU+)�>�����5� L����U\��$�L��d���0�;��%�~V���@��n;i�u�e������N��w�����~^��6H�2�9����� P�Zg`�k�:@��]��$����P��0����n�z)�誵����q"&�l �Y���v�Yg=E�s��Xk�ܵ�! � .���ԡG�1���}p�N����.�"�qm��ۂ��I�]D�*��I��uj��� d�ݿ#�[A�ݨrC1�H�9��Ҝ˹�V����L~�H�a袘WӇ�*xs��`I���T��ڬ�r_û�:��Ӯv��ͼo# 2� �ȯʕW\qȈ#Nj3J��,I��ץ)����>\rUMCEVl3"�#0����O�c� ��NU��6|8丄t0BU3QO@b��F�|�ʊ Չx<��H )7��DD����X;�S�!����C���X}���!����<�7��(�i%e�0O�ĀD�v��PɤH��VE� (W�,��`J���^G�hi_�� o<$-�i��b�,�G��pqMij�q|��o����_ߜ�3��0R�[�Ə�w�����`�&0��Xc���^g�U���e����0(��&�#�<��ɾ����\m��j@ Xx�V��E�w��V&K��6@���h�5�x�_��쾳e�+�HuK!�)�6竏�ѣ����6I�SH5�z���r�%nmz�3�.k��3��G����D��w� ��:Y�0y�ܘ�Lo����40-L��H���� X�J�����u���4Ų�l)i�4A�*D�ŰT���#c �L�-�ꪫ�����&���ߴ�j������y�1���8q��K�,��Ȳ�a,��>�˲���q]RR�w#��JB/n+B)�t���L&��sr?�=/(��o���W��M�|�?��k�>d�G`ѢEX�p���,�4hЁ�#I���_��r{q*��% Uq�����u�h�sI�>|��U��wZ�0�����`���DQQ�[mmm���"����%����?�$� ��cǂ�Z�@�=z4~��g$��$�<���� 0�"�K�.u����� �e�aÆa�ԩnp7w����kr�S�drg*U�2^M��.--�v�����k�/�F����ne�V�MT�G�qW� ���W����e�G��}R�K�v���~�v�d�W ��_d��+Ÿ>��viii���]\�����$ ��a���fW~3��y�0f�X¤������ݴ���Ƒ��0]s~{�ٳg�� �,,`b~c� �裏V��Lz���l�Wec�WUU�S�y�<NG8o+���s�{���]dA����e���:��gx;���~?����p��o������\MW�X:�:�/_�-e���o��!t�D�8M�eWWXح�J�'�=55594g��.VM�#�?���3�U;��W� ��-��g8q��"���?���pR%���!{���'�s�GxL��sTPce}���f����;����L�=�"��Ћ�W�ؿE@Yo�����z�7B������;X�nP>oL�x��Z�l�_v �{��z뭕�*6/Я�8~� ���hU��ȻQ����f���ܹ���� ��Y0���c�W�wտ����Ky�3����OOJ���|O6A[� �)������Y��=zv�'IEND�B`�PKb��\��CF��2templates/hathor/images/toolbar/icon-32-search.pngnu�[����PNG IHDR @{�u��IDATx��XkL��Vw�uۮ���v�]ɶ�d7���&M�]ښ�"%H��x��?F�x���5ML�Dk��Vͮ��W`� 30� 008��N���Mݏ���ox�2�7|�9�<眗o�˼���>����^G�0?p)�ý{��9���ڵkޛ7oRvv6�~��e�ٳg3���b�����7�^�tɐ��Kd��&��B��V2�[���L%%Z���Wt�̙��ߎ��o�ڵkSzz��ٳgd��|S�uzH��Sq����?n��Z#iK����L�p�B���oͅ������x�^��ة�g�*�~�w���i(HM����)��I�r ���ӹs�r�pՆ����4C[���ں��u0�2�g�����t{Cԁ�f\�P��E_~�.���a��~����*++�hn��./�¸e$(����4�����XXi�j��~j.^�h`G�T�[�o�Ψo0P����^x(����`��C�7�� aDZ���H������-����o����'�A��y��&��a8H��ם��� �����!5ix����QS������Nx?��C������(��V2Kk�����yo�"�WP�� ��5�N@��{D}A �w�<yb(Fs)�ps�������L D��(DV�Jgs"ZA�ȑ#)x�w��3��z=i-�DNې�^�xD���D����D���~*��/�2n�jD����Û��SCi�T��x�����6�|�7�y(��L�"�r劕��2\��$t�vҴ;���(GAĉ��0��~㠏��#��������s��n�;w���2��f+�"��}^jvO��p�1�5�Ʃ�>L9�R��>��3;��Ū����%���f�Y���w��c���Sà��:<�5٨�-((�������,JMM�X�vm�"�%jR���ѣI%%%V&!Qmlx��D555TQQA����y3RG<�>|H��ݣ[�nY�oߞ�Z^Q{���ի)�?��$������333�n�k|�c��6�.�w���g9%j�43��2bW�_�~��'�G�d��z߾}Ɉ��P^^=z�h�6y�Qn�\�o�B�ΒW������o2���"�\!DN���`���Y��.IDz1���V��FB���w�o۶�W���ũ�hd�L#�f͚OE�"��W�N�:�WVHqq1ͬ[�'nN�|�/�������$�i�<v��!!�yZ���DUU�,ͬ�;w�XEyb- �NG3�ɢ��������$ N�G��-���?���q�4��"ؽ{�_�-��e˖`TW��ќ�и.o9�E�X���D��������$�ٳ��KLL�߰a�o�ϓ��V�ZԢ���~�`���566v�H�'�uuuQ8th����r���9�N��顾�>���x_P[�dNGԸ�`��l�a��٠ 000�;_/.��۩���8J1����Ȉ2|����gq�oNL&���č9hii�C�1FGGG�����ؘؽ^���v�EZ�2��u��#��+{��=�0�)Lb||���}A�j�J�`<!�dو0) I�g&�9%B2 �+���S�/�{�a�J��pXB��2 �I Ax�Ai � K�ǒ��(0QA���U8����lf��JkV(� 2)@~0`Clp&d 8�7SS�C�/` p�� �Q`L�?��}+�m�"��h���l@�$�F%�q�/� m�[/����F��Z � !���Za���n�$�J p��8�!�� JȖ�ƅ�������N�>n �G�=�6X�h߄�!I�ϩ��H��$��0�a4��i��֦�$�F�H"�NJ�D4vYɈ(��7@B($��hL�d$�,��� C:��̸'L%�1��4HpJ$����,_zD�G�5a��ܒ�,��F�:Y!��Y�)Ώ�Mb�@J$�i�D4��t�H�B�.��X0��'�_( �VHHq��ދ�{���9� �6~ğ<yr^P|��9�xo��?~�?~|�b�π5���LA��l������E/�7_��(~9PIEND�B`�PKb��\�?+�{ { 2templates/hathor/images/toolbar/icon-32-banner.pngnu�[����PNG IHDR @{�u� BIDATx^�XkLT�~��p�p�QT����f+ê.��k/ٵ�(vi��O�Y$�i�!]w���#�dMf5KQ���WEʠ�H��H�;g`n�圾�qN:Df1�K�|g��}��|�A�M���6�T��n����� �n0���`��������_�m��ű��)]k>�6l�h�A��4�+[�E�]k,��|{S�:ii�yz�a������p�s���2M��rU�~�� ��`�l�������:n��~�$�����Ug�Ǘ��*jj�����P�}�ejn���% �\{�����u~�e�#QvE�T���H�/++����O"���̆m፧Z�b��(NMP��dhn<� �ѹ<X���`��}��/�]��{��C����4Z�Vń����q`x���.T�՛2c!.,���:��E缛���F�F,~���>�/3Y�ۉ���l��,p{��,S�ژP6,H��&]p�C�(P�+��y�}��x��� �fa�C���R�G�cC�P�:�m��pA�� �v'Oz��f���9uR��כ5*���xt�O��d�́n�G�VV=�A�D�orz^?8@�/#��(C�G,�@�7�3��r92�!�H�f��0���c�� '%��#��{x �a )A��7>s��j���4b�1^R�=��\��8X;�A_s�0A�����ZU��%%lAt>� �g�� ��`hp��=��oNi6n��M��+�du Ƈ�.(@��W ����b��Q���B$ ���a�Z, sٔqq�]�4~���R!_R���Ӄ�@� ���r��z{��vCHH���dشqs�_<���u�=9SG� ^`/� ���pX�TѰHJ���0�� ���l6��0lLl���?(�5)=��Az�Y_����Y� ;]�2C!@�]$�����+Dp��D@Y�RY�����~,F����,��2���u�T�ف�y�2�c��,��M+=\���P�b ��� 1�!2:ZT���r�:��'+�B����s�{����J�7 ��6�@X��za��<A�A+l�3�>�6o���~�&So�������,�c(�a�X���s��n���1�;����d��%�ӵ�-U�� ���m���%ېDpppQn�F�~@ Ϊ��1HMI����0�Y-�������{�I����f�3PFE�D 1!N?>a�x^������rM��G���1�wp`I��x劬iUx���5�թ)�!Xn�u�%N?O�C�*� �; ��+�G��Z����a�l>r����ߛR��|:�a�a�!-%�����"�����a(�F,CJȢ�6���w�;U�f��Wd���KR��{{�`60�]RRr70Pkw��n�?*�~��<����x���s��8J;8��'��w$��1�p!�^xd�z�RjF��\�"V��v@+�?�{>h��{���}DbA��$x'��F��I���o��������֪�!�@�s��=�r�Jq}}}b,&&�+55Ր��aX�d�x>p����9�~�zQPPP�J�RG�^�r��8X�`��2>~�X<@�|�֭[e �����shoo���IHOO���hkk۽c�ݼ�@SS��e����dx��8�N�y/^d>�瘀�dbq��Ù�4k���a$D��+�m�����k״7o��677O���l�#""Z0�4���$99����h�����466c2�GY5�(qf���kG5&���&&&ȱ�@XX��=�v{�����܀�,KIII4����qz�H" w�,][�VJ0q��5$F�C���j��/������xR"IF� r��$A�K�������1??���2�Z>k9����(%�t ��7�Ĝ���Ra��[9�@�븵�U �A����Bq$�T��} �J��Şz&�"PU�������@������(tvvjΞ=�M`˖-&�ڈeE$�SAr.�ŜH�'uB%&kWuu�&����)*��W� U�D��@�(�X�Ri8w�_���k��.����t���J�F�uD"'�1�����fՈ$<y�<kccc�-Z���H����S��-��ݗ�#b��.�������b��j(_�p!�[q���@3��&�8�w�sP?K� U�� �T1Z���^�Z��TD�0$G6o�|f0L8Ar� ���@"����nW�*�.] �0���� }�!�ȑ��C��шYlB9���ҥKjx�qX��)� ̏�'Nv>��U��b�!���ș Q�{�H��j�T�|��N�R��T�����ٓ[ZZj�k�X%Fi �=v�X@��Ȝƺ/�Rkii)�ϳ:���_��pШ\1�GP���S >�B1��\Yǰڥ�@�|����m[�nm�x���u��Y�`N|���c-�"��Ç˱|��~�9A���998x��ގi�gQ�.T����kCC�ߩ�O��gt{3��a�5�%`E8�\Rq��_��aC����^IEND�B`�PKb��\�ͧ��4templates/hathor/images/toolbar/icon-32-save-new.pngnu�[����PNG IHDR @{�u��IDATx^�X]lU���l�-�2v�"�O!Bk#$�bDM�$!$�+��ɄФ��AL��C)ix2Q� ���K�(-��Rڔ�lw�33;w�97�MY��L(��/�=�MO�w�9�n��,���'�3d�c���U�c�~PUSS�t]Ø���"� ��}[����*�@�E�$�^05M7M$c$6�h4�`0�H$���lp���� Kl��(@L���q�^ E���j08G2�����fT�� X,�����;v^��~_�k�i�6�8�����A QEM�yI ����J�������G*Bk�?�隭�����0�|u=>e�'R�j��1�EEb�ܾ�� �Vj���ӫ�p$��e�rr�@42�� �� j�ݻ�L���܂�1�Na��g�u�;FP��; c,��3��&�cVw�K���(U��/��e1�]'Z�co��x�D�cQ����/x�o��8�m0���_��st�I�i�s"� 0�N����0��8,5 �e� ߆4|Ɵ?���W����*5�����}��= Ӹ� X�K`��f��يu�� e*]�^\�F`헐K�b��J����P��,y���0Ib0\0�9�Q@;� xO�`!�/n����f�10Z=݄�])�eAV�M�����\T!��P�|�IHO@S�E�/,|a�+ђ��3�x~�F��7�`i*D I�cȘ$�}++J��X�9Oc�� p���?xm�~s�����W�z�2J��u���mG��\�v]�5 7o܀����a�t E# :���B_P�g�����V�`�O����-^��KL*WU�&fff���A�!�V"U�|>������� MӚCyy�����Ǔ $��Y��:�N'��� ���s�d�� "�|)�ҁM"@0�SN��T�I� "ӌT���3f�H��{�b��W��W�����'O�J���'<auu�;//_��>��1��K���L�e�##�M��a���� Kl��9,,�&WLn>pO�z{{�u�. � ���Kd�^�IU���^�x���|�9E'\��>�r(��8ya���i%�OI�r��y��"� �b�d�e��\97���@*P P1{�X���a�<����%������ dddd<:���߃Wа��D�4(���;%g=>>.ڱ��Tt�� �l٢�7lĹ=Հ���FFFĠ2ۖ?`/z����y��͛�:t��c �S��$uM�h:BϡP�>�999%�a4mڴI�s�c��<"A�rssi�+H؛#(��{>� ���MLE�����Y��^u)S陀e�'@�����bh=EQ�������&`�[N�w雑� ���˙;�(BL� �h4O*8��'� {zz��sn�E���S��� P�#�N����y��A�1�ڞӿa(,(,�ߢ�w�]ͥeep��$�����X�\FS��m������w_!Y�=}��H��%�����P[�Ξ���5�Bs�يR�ʩ�m��>Y.�sB+ɞ3���#����f��`dhȽ=ohh���3��ÿ�?*SaNIEND�B`�PKb��\��0^ ^ 5templates/hathor/images/toolbar/icon-32-unarchive.pngnu�[����PNG IHDR @{�u� %IDATx��#�������-�13��9���Q&qaf��?33�R�m�ǩO��-�,J�.��zU]]��9Ihd�7�Mu����f��VM�M�`]*E�h�Z�A����*�%l��G�T ���;ƺ�����"Eu�,W�c-.-��Jj5E��rQd����y�+�G����U�媖�˚���;^Z*�k�y�;���&@�X}���b� ��ڪ��E��̨��M����c8���"5#�A�v�'N�V�X�;[ƶ�/$�\��qNfYhH���SkVoo�N�����R!����ަRi�Pw6 ��S,�9�h �D��5�W�\��%��e�1BgϞ�(�U�����;�C�� v�z���!����âR����6!33���eww7�eT`�"�+Cr�F.��9�z�����f���jc��.�l�N�:���e#�a7��9go�a U���--��\ZZ ���0CdIxR�N�ɥ#@#0�z�&�)5�n�Z�r�Z�V�K����k���z�s���t�&����t��0o��!%�_��x��B� �<tX��<�~��=ǀy&���=J�\C*6�36,9fʽ��(�A�\�E _��F�5Ԓ\���r���5��XN.Lj��Ĥ�E圜�[)�2 �xW�o�s4 ��B_�>�J�аM�KPO�'��a{���:6��:�R,���͂B���Bj�����/,����8��n�&�e�I+5c�f縬��n"AR�$�EeQ�9@۾m�(D�]��N�xƅXQ.V����]�d� x��Cڸn}#nؐM�ů}�H�P�p��]B��ַ�����U@�bkQ3�������?�Q��CI��l��G��^��2H<rB�ٟuѥ����87;7'�'N�ҋ_�ju��W�P��n �����#@�����t~{vl��` ���٬�=�z���W����w�+�}��ަ����>���*����o����Y�x�d$N��Nb��_Ѕ_�+��J��h���45yF?��g,E�'D�Ԉ�� �#�!��ł�w�����λ��/~�+���l�"���HH#ƙ%�X�q�al.�d�+���TOW�N�8�Cit������O�E��M�T*�^e(�jU�id��q�zu�lx�S���E�a�q,Wʠ�S&�SD�¸��͛k���E��[.I��{�����Xs�� ��/�\��z5C� $�{z����ޥ|*a�ro �&9@G�ۍ¯+�������{oH2���rR�w�cEgV|G%VA q���aH��$�8Y����$r$�B�Pg� ]|�%!� oD�6@���Չ��4�����G�%��:z����'CTG{��NMh�d&*���ԑCG���v����'�*��_�um}�� ��y��朗bNҮ< _�� ���[�zu���-�##��zxB�'�3�I��R������>�я�رc^rI0B9���`���Y����h˖-ʙ� ��oPXD�,DO�O����ct�� wz�`aa�c*"C������oP�n�u�E&���B>�h��=��|���٠ȅI���G+V��S\sss,T�̫]����ކ �8ܠ0��.���^vH��ߤ�g8����d�EnP���L"l�b�,�9�2;;9�7!��y��x6�&�~�6C�y�}zz:�m�6(<���L��Lc��sȠF�s����������3#ْ~�73�5����s��?D�7(����.n�Չ�`ܷ�MLL`�����%�̈�m�pQ/�-�͌�CٝgKS$#�]]]�A�>�~צ��!^���Q$s��k}��{��(6Y��q?� �F��C�CCC o<o����{��O9^R'�����?��O~�5*��ȈFGG��'>�����@�A�M7ݤ믿�Y�q�wA6����e�9��kJ���O��O�x�;8����?�1�j����(6 ����Y��+W6 ��ܹS�{������5$�_��WL5��կցlwl��Bd2g,ϻ��#D�������NrC�x�+���"��d�1�X3tD��o������Zmڴ���t�t���~ �}G�LgyMv��>�JN!�����#"טZ��7n��^7`�=�M `��Q`��GD��fE�#�37(\}�B�� H���F��� 밖嵣wLRt �[�`���7(`��pYa% <苐�E�y&{�²:aNS���г�Na!�Γ�p�\������V)&T/�HIEND�B`�PKb��\Z�T�/templates/hathor/images/toolbar/icon-32-new.pngnu�[����PNG IHDR @{�u��IDATx��kle�hE�����K�n�Q��`䟷?��&�S$ԤF�Ul�ʭ\�X�Z�-Ћ���Wh)]Z)�-�V��YZ���{&؝�v�S�8ɓ9s�s��7_g���_y(�o��>�EjI;iӸD�5�yyP�&�(ہ��wP���B@��@լn�{�w�l'��/�PARQ2���y P�E�C�%.�Bq�m�Ր��(P,$3<�|8��\b'�i�\-.�'����yϜ�|e=ʦ�AI<��c�_V��k+��+�s�pr���'e��?I^훀�]8&�Q4��U{˖!�\v��J�c�������U��7� �}�D&T�F�]p���P@�P7��d���?���?�H��' 8���`\�CP0Q�E$�P������M2II'6��*t�k��Z~�V�>�G��/6��:��U���Vj��ڄ���m&��qv���j����z Аω��ׄdEٱm�3 ���@e�����`������~����v�4�0e `���5��� c6��@�9�۵}��+��pV`�r�@%����%��l�r��5"�<n�s\�4��[���+c�������>�-�U6i"֑��jޒU�s5����7J�FZ�sT�dc�$؞��=�]������D���X�z�9�p?D�~0I!$�x��w�NFHQ"�a���=2�/�#X�X�����C\��c�2 �&�a�h�$�|Cr���@I����\�O��W$"|� ���MH��@V����d��ll�;kꍈ�,¶���=��#��l���6����dr�� y��nlv�� �\�8NB1k-���9.p�Ğf� 2�~�D�O�:�[g5#��d,�s���H�^ú�N3�F^�[1mD�aSG)Q>P�^�TY~s�b�R�&U��/�C�˔��?V}>Oy������#d ��D�G���Jf�9!�1��;�L 2����5��'b�6�,Vml���>CF���j1� �߆��ҎЄ��a!��09j�?�D�&H"��0X�A���<`J@�7��IR��AH n�o2�~�;̙����κ���v���Ԅ��F��X/�`R@�{�^\�|N��ϟGss3jjj$���b�$���x<�8qzcL�$'.b [��M���� G����1��İtvv&����Q^^�1&c����ܺu�N ܼy���hii�իW�r��p8�7�dLr$Wj�Vz� hoowܸqgΜAee%JKKQRR���"@o�1ɑ\��Z�^�,1 E��� �5�J��O��YFA���*�k�����a(��ŋ����%���UUU����y� �N�Bqq1�k������9 Ξ=��G����P�d���طo����H��H�ڃ��I0�eO!���Q[[�>�?�n���l�1�ɕ��z,����=�}r8&9�a�Q|��I�.kH�p������G����={�@o999"@rB���c��&�s��1y��f������'�Nn���XL��i�?|�ʳ_&ė�����X��N����&%��#Errr,dV�>7M�?�ܬ����)L �H�t��w222�r�-\�jކ����̙3���&<������@_��)�+[� ���IEND�B`�PKb��\̬� � (templates/hathor/images/j_login_lock.pngnu�[����PNG IHDR���H� {IDATx��Q�@�?���E�[�!��a00�``0���`OF�e�,��H�0�1ē�����_Cf�wӽ���{��\wwC�+�v=�owwI�����n�T30��gpJ�8�G^��Ʒ��H��!_z�'"Y��e��l���2<i$`��b�<6�� �F�'&������v�jꛚP�،�v���R[�X�GN�OO��ĄW����v{*ء�� �dyU5�����#riu��Z���9+!|0�(SͶ��u���O�� �yL���H�����y�dg�B� P�T/w �K�V�AFJ2����˄c?ʂv@.)ʻ��7�����/���vS8.n��}��-�q��{qߝ�)�-�r��F�9����G���}P�Ԙ����frr B�`��C1��>������!���G�D 8\ ffT�K{v�߇��|��i�.i�L����lژ��S�5�FF1_ꛚq��#��� ��_�_����]���י�:xϝ:ZWa!8��o��>��v�$/w0 �q�iú��z�011��I(�J�F��3gQZY��B����H�2��@/�m�a���Y7��ѩ�F���q8�g��ڴI�W>��r�$�B����s�LMOC�J��%X-8��㞀�����[���6;u�#F3Mw�v45fczz]=}�># �����c�C\TDD�;|��Vu.�119���� *�k^֮�<Ou����O�ϖ���*d��o�l�?����Cf�����0?%,4���;n� zڻz�T�]=���)d�"�%��� ������;�����C��봞�54����N[X��E����j$oۚ�j�:��r��3���#Z�S�J�t;F���&7��̙Ȏ.8�N����M�^�A��Š^��[�z͎��1`���4�<�?��+�)~_��\�M���t����#���ѝ$�.��b�������ڳ��FK[;�{��k�%� ��K �Z�� � Ҹ\�:��Iy���< )˱"u�""�"#"M�q+����5odrj ��J�^f�W�V�{�q��� �-9�|lL�NR�cE��|pޚ�8v{ u/;���C�R�x�/4���]n�]�t䨈plZ�n��`�IHU�)K{��/���c�����<W-�;A��aw�v����\]l�|�8# �ʱ"e].�)�4 ��Ax㱒�@X���W��]����)����#!n%;����T�X����������e�UYS:'�?��gr��V_����W�J�ĸUIcccq$�(NJTE�w��I�ё>w�յu ,����{�<4<��Dpk�Y�6���+���>(������D!���5� ��SV0V�X�~�9`WC�{[dD��v�����%�?���c���� �@B�r�HU YRh�!�T���YH~J�@ɀ��>::FpP���GBjr�HU0�^_�������������#a�Jq���+�y�V�xL��j�a.h9�DBjr�H���Z�����84l��M����U x��]Y���Y �nQ�e��0s��̴������ K 3~fӳ-)�ef�3��J�)�ò^�L}��m�]�?~�Èw-��S-��S�`��S�`�LQ�`�Lт)�Lт)�L�����s�i_�%�,�bQ"N����A�DH#b Θo��2�2�}��"d.����\0�ƘK��HD�����������%��p}����#��?�� MӠm[��?_cc�}�Clg�9�U�Xn�t'H�)�,*׳+D� 6_"����M J����Φ$g�h^��SJ�$!kH���킼��%8dM�$��R֒�!i�}��\�}�5� �=��a�S�'1�}��8��CW���m�/��s��]i�v+Y���"$}��`�I1v\���+���ϖp��� c?;�R8�^�a�NeC�<[�Kv�X2Д$�X�q�G��ƐD$�H� D�o@�v�����zD�t���w��}�8���o|�mȶ~�;I�/�����(�8m���z��v�dخ&<�\0����C��KR����^�6��z��m)ɰ]]�#i����/nKI��hU-��S�`��S�`�LQ�`���E�E�/^y˲DY(�Y� �d���ɼD�{I&f��d#x��=������ڟ3��p�`��i�#/x4s���d.I�$Ik9��M)k�Fܐcؔ�5��Al���f+t5+�m�m6����"�`7Jl ��K����t�t��\�S'��\��˕e)�$�{�»�/�2� sɹ\��=�x�Æg�&�K%2t6�.��R>��ڎm M�nc4u���Q�%���a�R���-�v���3���c��{0�!0C`���!0��O�f0C`��@`�{W�G{�Ƿ' B��C�b��O�7�0 ��̰`�lߵף�Ι퉮K*uϘ۵K�Q�@�䋰���#��/Q�u:PL�" ��mA# ���P��<�9P�s�:yQdZ���i7��<*� � 2��� �.��vT\L� G0��`��l��f�h��E`�� G0�/+v-"�h�F+%k��`&롚l����� �*�عM����0W���p����k��`�u�F�loo���<X��PG�&F�F�x�!D��..�Tda�o���(� ��X\Sc#�k�+_�8Rɓ��s3o*�ʣ�_Z_ݸu._�VuT+���y%�J�8�9���q�<��AK�6�0ɑ"�~$�9�ុ� V�5���T)�l��5ʹ�9}���Vժ/��U����_�[[]���A���i����<hQV�����w�=�83=�$X_{�/IT��<��ί\T�"�I��+���bMX��쏁M̜� fĔ�� �i3&B#l�����$�� ��}�O�}H}a�Ѩ�����}!5���vwW ��yJWF<�� �8�x��S�R�]CP;)�y�0�0�����^���6do�P��T0m��<�4ŕo��0xg�,��2�u�=���0*d�y����B�p�`Cuـq��"(�V��@��Fj���sS��^���u8�39�? �a�#y.��~�����T��u�iAu4���W뿯��r�VAX.\Ï)�\?9f_�Ҵ#d2���L���!Z�������P4��B) �� ���M>ԇ9��H��cE��(TX�}]��#�p�VF@=/a \���GCՀ�����<�-m9??IEND�B`�PKb��\��?���#templates/hathor/images/j_arrow.pngnu�[����PNG IHDR �2ϽzIDATxc���g�.!���� ~�6x�������7 �éPi��-@���q2V�r�[��4��P�i� ����1�B�[��?��d�n����O�����R+�X����H�=y?�IEND�B`�PKb��\�^���.templates/hathor/images/selector-arrow-rtl.pngnu�[����PNG IHDR X0$� PLTE������Ȳnh� tRNS@��f*IDATx�Mɱ 0���C���@:�~-3�����:�t�q�A4\IEND�B`�PKb��\Aj$��*templates/hathor/images/selector-arrow.pngnu�[����PNG IHDR X0$�0PLTE������������������ޱ�����������������)��tRNS@��fCIDAT�M�1�0�@".6&��� 궑��͖<ۢ���ʈ�/���t ��z�����,T�MK��o���7IEND�B`�PKb��\q)L���$templates/hathor/templateDetails.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE install PUBLIC "-//Joomla! 1.6//DTD template 1.0//EN" "https://www.joomla.org/xml/dtd/1.6/template-install.dtd"> <extension type="template" version="3.1" client="administrator"> <name>hathor</name> <creationDate>May 2010</creationDate> <author>Andrea Tarr</author> <authorEmail>admin@joomla.org</authorEmail> <copyright>Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <version>3.0.0</version> <description>TPL_HATHOR_XML_DESCRIPTION</description> <files> <filename>component.php</filename> <filename>cpanel.php</filename> <filename>error.php</filename> <filename>favicon.ico</filename> <filename>index.php</filename> <filename>login.php</filename> <filename>LICENSE.txt</filename> <filename>templateDetails.xml</filename> <filename>template_preview.png</filename> <filename>template_thumbnail.png</filename> <folder>css</folder> <folder>html</folder> <folder>images</folder> <folder>js</folder> <folder>language</folder> </files> <positions> <position>menu</position> <position>submenu</position> <position>toolbar</position> <position>title</position> <position>status</position> <position>icon</position> <position>cp_shell</position> <position>cpanel</position> <position>login</position> <position>debug</position> <position>footer</position> </positions> <languages> <language tag="en-GB">language/en-GB/en-GB.tpl_hathor.ini</language> <language tag="en-GB">language/en-GB/en-GB.tpl_hathor.sys.ini</language> </languages> <config> <fields name="params"> <fieldset name="basic"> <field name="showSiteName" type="radio" label="TPL_HATHOR_SHOW_SITE_NAME_LABEL" description="TPL_HATHOR_SHOW_SITE_NAME_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="logoFile" type="media" label="TPL_HATHOR_LOGO_LABEL" description="TPL_HATHOR_LOGO_DESC" class="" default="" /> <field name="colourChoice" type="list" label="TPL_HATHOR_COLOUR_CHOICE_LABEL" description="TPL_HATHOR_COLOUR_CHOICE_DESC" default="0" filter="word" > <option value="">TPL_HATHOR_COLOUR_CHOICE_STANDARD</option> <option value="highcontrast">TPL_HATHOR_COLOUR_CHOICE_HIGH_CONTRAST</option> <option value="brown">TPL_HATHOR_COLOUR_CHOICE_BROWN</option> <option value="blue">TPL_HATHOR_COLOUR_CHOICE_BLUE</option> </field> <field name="boldText" type="radio" label="TPL_HATHOR_BOLD_TEXT_LABEL" description="TPL_HATHOR_BOLD_TEXT_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> </fields> </config> </extension> PKb��\ju 6templates/system/error.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.system * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** @var JDocumentError $this */ ?> <!DOCTYPE html> <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <meta charset="utf-8" /> <title><?php echo $this->error->getCode(); ?> - <?php echo htmlspecialchars($this->error->getMessage(), ENT_QUOTES, 'UTF-8'); ?></title> <link href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/css/error.css" rel="stylesheet" /> <!--[if lt IE 9]><script src="<?php echo JUri::root(true); ?>/media/jui/js/html5.js"></script><![endif]--> </head> <body> <table class="outline" style="margin: 0 auto; width: 550px;"> <tr> <td style="text-align: center;"> <h1><?php echo $this->error->getCode() ?> - <?php echo JText::_('JERROR_AN_ERROR_HAS_OCCURRED'); ?></h1> </td> </tr> <tr> <td style="text-align: center;"> <p> <?php echo htmlspecialchars($this->error->getMessage(), ENT_QUOTES, 'UTF-8'); ?> <?php if ($this->debug) : ?> <br/><?php echo htmlspecialchars($this->error->getFile(), ENT_QUOTES, 'UTF-8');?>:<?php echo $this->error->getLine(); ?> <?php endif; ?> </p> <p><a href="<?php echo JRoute::_('index.php'); ?>"><?php echo JText::_('JGLOBAL_TPL_CPANEL_LINK_TEXT'); ?></a></p> <?php if ($this->debug) : ?> <div> <?php echo $this->renderBacktrace(); ?> <?php // Check if there are more Exceptions and render their data as well ?> <?php if ($this->error->getPrevious()) : ?> <?php $loop = true; ?> <?php // Reference $this->_error here and in the loop as setError() assigns errors to this property and we need this for the backtrace to work correctly ?> <?php // Make the first assignment to setError() outside the loop so the loop does not skip Exceptions ?> <?php $this->setError($this->_error->getPrevious()); ?> <?php while ($loop === true) : ?> <p><strong><?php echo JText::_('JERROR_LAYOUT_PREVIOUS_ERROR'); ?></strong></p> <p> <?php echo htmlspecialchars($this->_error->getMessage(), ENT_QUOTES, 'UTF-8'); ?> <br/><?php echo htmlspecialchars($this->_error->getFile(), ENT_QUOTES, 'UTF-8');?>:<?php echo $this->_error->getLine(); ?> </p> <?php echo $this->renderBacktrace(); ?> <?php $loop = $this->setError($this->_error->getPrevious()); ?> <?php endwhile; ?> <?php // Reset the main error object to the base error ?> <?php $this->setError($this->error); ?> <?php endif; ?> </div> <?php endif; ?> </td> </tr> </table> </body> </html> PKb��\����!templates/system/html/modules.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.system * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /* * none (output raw module content) */ function modChrome_none($module, &$params, &$attribs) { echo $module->content; } /* * html5 (chosen html5 tag and font header tags) */ function modChrome_html5($module, &$params, &$attribs) { $moduleTag = $params->get('module_tag'); $headerTag = htmlspecialchars($params->get('header_tag'), ENT_COMPAT, 'UTF-8'); $headerClass = $params->get('header_class'); $bootstrapSize = $params->get('bootstrap_size'); $moduleClass = !empty($bootstrapSize) ? ' span' . (int) $bootstrapSize . '' : ''; $moduleClassSfx = htmlspecialchars($params->get('moduleclass_sfx'), ENT_COMPAT, 'UTF-8'); if (!empty ($module->content)) { $html = "<{$moduleTag} class=\"moduletable{$moduleClassSfx} {$moduleClass}\">"; if ((bool) $module->showtitle) { $html .= "<{$headerTag} class=\"{$headerClass}\">{$module->title}</{$headerTag}>"; } $html .= $module->content; $html .= "</{$moduleTag}>"; echo $html; } } /* * xhtml (divs and font header tags) * With the new advanced parameter it does the same as the html5 chrome */ function modChrome_xhtml($module, &$params, &$attribs) { $moduleTag = $params->get('module_tag', 'div'); $headerTag = htmlspecialchars($params->get('header_tag', 'h3'), ENT_COMPAT, 'UTF-8'); $bootstrapSize = (int) $params->get('bootstrap_size', 0); $moduleClass = $bootstrapSize != 0 ? ' span' . $bootstrapSize : ''; // Temporarily store header class in variable $headerClass = $params->get('header_class'); $headerClass = $headerClass ? ' class="' . htmlspecialchars($headerClass, ENT_COMPAT, 'UTF-8') . '"' : ''; $content = trim($module->content); if (!empty ($content)) : ?> <<?php echo $moduleTag; ?> class="module<?php echo htmlspecialchars($params->get('moduleclass_sfx'), ENT_COMPAT, 'UTF-8') . $moduleClass; ?>"> <?php if ($module->showtitle != 0) : ?> <<?php echo $headerTag . $headerClass . '>' . $module->title; ?></<?php echo $headerTag; ?>> <?php endif; ?> <?php echo $content; ?> </<?php echo $moduleTag; ?>> <?php endif; } /* * allows sliders */ function modChrome_sliders($module, &$params, &$attribs) { $content = trim($module->content); if (!empty($content)) { echo JHtml::_('sliders.panel', $module->title, 'module' . $module->id); echo $content; } } /* * allows tabs */ function modChrome_tabs($module, &$params, &$attribs) { $content = trim($module->content); if (!empty($content)) { echo JHtml::_('tabs.panel', $module->title, 'module' . $module->id); echo $content; } } PKb��\�if%templates/system/css/system.cssnu�[���/** * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ /* Import project-level system CSS */ @import url(../../../../media/system/css/system.css);PKb��\���>>templates/system/css/error.cssnu�[���/** * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ .outline { border: 1px solid #cccccc; background: #ffffff; padding: 2px; } body { margin: 15px; height: 100%; padding: 0; font-family: Arial, Helvetica, Sans Serif; font-size: 11px; color: #333333; background: #ffffff; } .frame { background-color: #FEFCF3; padding: 8px; border: solid 1px #000000; margin-top: 13px; margin-bottom: 25px; } h1 { color: #cc3333; font-size: 18px; } .table { border-collapse: collapse; margin-top: 13px; } td { padding: 3px; padding-left: 5px; padding-right: 5px; border: solid 1px #bbbbbb; font-size: 10px; } .type { background-color: #cc0000; color: #ffffff; font-weight: bold; padding: 3px; }PKb��\9��!>>templates/system/index.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.system * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; include __DIR__ . '/component.php'; PKb��\IA����templates/system/component.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.system * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** @var JDocumentHtml $this */ // Output as HTML5 $this->setHtml5(true); // Add html5 shiv JHtml::_('script', 'jui/html5.js', array('version' => 'auto', 'relative' => true, 'conditional' => 'lt IE 9')); ?> <!DOCTYPE html> <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <jdoc:include type="head" /> </head> <body class="contentpane"> <jdoc:include type="message" /> <jdoc:include type="component" /> </body> </html> PKb��\s)X:PP$templates/system/images/calendar.pngnu�[����PNG IHDR�aIDATx����I���}�c۶K��b�rl뿈�۶}w��ۙ�,�U���L�&+���O'Cm�����?jnP���he�"Gf�-]; @�vr�!��]�<Zp9q�0����<���w��ף�{���`�@�l~FB|�����Wi>�|L�?�H�H���<y�| P!�%E�ӳa�ݧ[�<�8�rXu�>���aݡ������/�}1�(Vy��f�������ݟ�!��d�H �;7��Ξ�(:��!�����ʔ(�m;���',���=0Bpq㱇~4�C� ���(�ō��p<�/��6�OJ������́�P�HQ�ߺ�5��e�m�r�9)�$�F}AIHsl���p��-,,��~�+ b���sҒb�J��X�0�!4��E�3����u�M�q���\������S��c��W�!T,�ĿO�R"O<7�{E��.�y����圴��S��!�I#�}S�\�ђ��������[��� ��A�3f�vIIEND�B`�PKb��\^�G+>>templates/isis/cpanel.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Templates.isis * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; require_once __DIR__ . '/index.php'; PKb��\���%templates/isis/less/template-rtl.lessnu�[���@import "template.less"; @import "../../../../media/jui/less/bootstrap-rtl.less"; .navbar { .admin-logo { float: right; padding: 7px 15px 0px 12px; } .brand { float: left; padding: 6px 10px; } .nav { margin: 0 0 0 10px; > li > a { padding: 6px 10px; } > li ul { overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch; -moz-overflow-scrolling: touch; -ms-overflow-scrolling: touch; -o-overflow-scrolling: touch; overflow-scrolling: touch; height: auto; max-height: 500px; margin: 0; &::-webkit-scrollbar { -webkit-appearance: none; width: 7px; } &::-webkit-scrollbar-thumb { border-radius: 4px; background-color: rgba(0,0,0,.5); -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5); } } } .nav-user .dropdown-menu li span { padding-left: 0; padding-right: 10px; } .nav > .dropdown.open:after { right: 10px; width: 0; } .empty-nav { display: none; } } #toolbar { .btn { padding: 0 10px; } [class^="icon-"], [class*=" icon-"] { border-radius: 0 3px 3px 0; border-right: 0; border-left: 1px solid #b3b3b3; margin: 0 -10px 0 6px; } } .chzn-container-single .chzn-single { padding-left: 8px; div { border-left: 0; border-right: 1px solid #cccccc; } abbr { left: 36px; } } .chzn-container-active.chzn-with-drop .chzn-single div { background-color: #f3f3f3; border-bottom: 1px solid #cccccc; border-bottom-left-radius: 0px; border-bottom-right-radius: 3px; border-left: 1px solid #cccccc; } .chzn-container-multi .chzn-choices .search-choice { padding-left: 7px; .search-choice-close { margin-left: 0; margin-right: 3px; } } .chzn-container .chzn-single.chzn-color[rel="value_0"] div, .chzn-container .chzn-single.chzn-color[rel="value_1"] div { border-right: none; } .chzn-container-single .chzn-search::after { left: 20px; right: auto; } .container-logo { padding-top: 0; float: left; text-align: left; } .page-title { [class^="icon-"], [class*=" icon-"] { margin-right: 0; margin-left: 16px; } } @media (max-width: @md-max) { .navbar { .admin-logo { margin-right: 10px; padding: 9px 9px 0 9px; } .btn-navbar { float: left; margin-right: 5px; margin-left: 3px; } .nav-collapse .nav.pull-left { float: none; margin-left: 0; margin-right: 0; } } .nav-collapse .nav > li { float: none; } .page-title { [class^="icon-"], [class*=" icon-"] { margin-left: 10px; } } } /* Status module */ #status { padding: 4px 10px; .btn-group { margin: 0; } .btn-group.separator:after { content: ' '; display: block; float: left; background: #ADADAD; margin: 0 10px; height: 15px; width: 1px; } .badge { margin-left: .25em; margin-right: 0; } } /* Menus */ .dropdown-menu > li > a { text-align: right; } /* btn-group */ .btn-group.btn-group-yesno > .btn, .btn-group > .btn, .btn-group > .btn + .dropdown-toggle { float: none; } /* For grid.boolean */ a.grid_false { display: inline-block; height: 16px; width: 16px; background-image: url('../images/admin/publish_r.png'); } a.grid_true { display: inline-block; height: 16px; width: 16px; background-image: url('../images/admin/icon-16-allow.png'); } /* Login */ .view-login { .login-joomla { position: absolute; right: 50%; height: 24px; width: 24px; margin-right: -12px; font-size: 22px; } .input-medium { width: 169px; } } .login { .chzn-single { width: 219px !important; } .chzn-container, .chzn-drop { width: 227px !important; max-width: 227px !important; } .input-prepend .chzn-container-single .chzn-single { .border-radius(3px 0 0 3px); border-right:0px; } } /* For collapsible sidebar */ .j-sidebar-container { position: absolute; display: block; left: auto; right: -16.5%; padding-top: 28px; padding-bottom: 40px; clear: both; margin: -10px -1px 0 0; border-right: 0; border-left: 1px solid #d3d3d3; } .j-sidebar-container.j-sidebar-hidden { left: auto; right: -16.5%; } .j-sidebar-container.j-sidebar-visible { left: auto; right: 0; } .j-toggle-sidebar-header { padding: 10px 19px 10px 0; } .sidebar { padding: 3px 4px 3px 3px; } .j-toggle-button-wrapper { &.j-toggle-hidden { right: auto; left: -24px; } &.j-toggle-visible { right: auto; left: 10px; } } .j-sidebar-container .icon-folder-2 { line-height: 15px; padding-left: 0; } #system-message-container, #j-main-container { padding: 0 5px 0 0; } #system-message-container.j-toggle-main, #j-main-container.j-toggle-main, #system-debug.j-toggle-main { float: left; } @media (max-width: @lg-max) { .j-toggle-button-wrapper.j-toggle-hidden { right: auto; left: -20px; } } @media (max-width: @md-max) { .j-sidebar-container { position: relative; padding: 0; border-right: 0; border-left: 0; } .j-sidebar-container.j-sidebar-hidden { margin-left: auto; margin-right: 16.5%; } .j-sidebar-container.j-sidebar-visible { margin-left: auto; margin-right: 0; } /* login */ .view-login { select { width: 229px } } } #j-main-container.expanded { margin-right: 0; } /* Modal batch */ @media (min-width: @md) { .row-fluid [class*="span"] { margin-right: 15px; margin-left: 0; } .row-fluid .modal-batch [class*="span"] { margin-right: 0; } } .row-fluid .modal-batch [class*="span"] { margin-right: 0; } /* Extended Responsive Styles */ @media (max-width: @sm-max) { .btn-toolbar .btn-wrapper .btn { width: 100% !important; margin-right:0px; } .btn-toolbar .btn-wrapper { margin:0 10px 5px 10px; } } @media (max-width: 420px) { .j-sidebar-container { margin: 0; } /* login */ .view-login { .input-medium { width: 173px; } select { width: 229px } } } /* Stats plugin */ .js-pstats-data-details dd { margin-right: 240px; } /* Modal footer */ .modal-footer button { float: left; } /* Modal Header text align right even if parent container centered */ .modal-header { text-align: right; } /* Media Manager */ #mediamanager-form .thumbnails-media .thumbnail { margin-left: 18px !important; margin-right: 0; direction: ltr; text-align: center; } .thumbnails-media .imgThumb label::before, .thumbnails-media .imgThumb .imgThumbInside::before { left: 0; right: auto; border-radius: 3px 0; } .thumbnails-media .thumbnail input[type="radio"], .thumbnails-media .thumbnail input[type="checkbox"] { left: auto; right: 5px; } .thumbnails-media .imgDelete a.close { border-radius: 0 3px; } .thumbnails-media .imgPreview a, .thumbnails-media .imgDetails { border-radius: 3px 0; border-width: 1px; left: 0; right: 0; text-align: left; direction: ltr; } .thumbnails-media .imgPreview a { width: 100%; } /* SubForms (Table) */ .subform-table-layout { td { padding-left: 10px; &::before { content: attr(data-column); left: auto; right: 10px; padding-left: 10px; padding-right: 0; } } .subform-repeatable tbody td:last-of-type { text-align: left; } .form-horizontal .controls { margin-top: 0; } } /* com_templates */ .tree-holder { ul { ul { padding-right: 15px; box-shadow: 3px 0 0 rgba(0, 0, 0, 0.08); padding-left: 0; .folder-url, .file { box-shadow: 3px 0 0 @linkColor; border-right: 0; border-left: 1px solid rgba(0, 0, 0, 0.08); } } } } /* Dropdown */ .dropdown-reverse { left: 0; right: auto; } /* CPanel Site Information mod_stats_admin */ .com_cpanel .well > .row-striped > .row-fluid [class*="span"], .com_cpanel .well > .list-striped > .row-fluid [class*="span"] { margin-right: 0; } PKb��\FI��?? templates/isis/less/icomoon.lessnu�[���@font-face { font-family: 'IcoMoon'; src: url('../../../../media/jui/fonts/IcoMoon.eot'); src: url('../../../../media/jui/fonts/IcoMoon.eot?#iefix') format('embedded-opentype'), url('../../../../media/jui/fonts/IcoMoon.woff') format('woff'), url('../../../../media/jui/fonts/IcoMoon.ttf') format('truetype'), url('../../../../media/jui/fonts/IcoMoon.svg#IcoMoon') format('svg'); font-weight: normal; font-style: normal; } @import "../../../../media/jui/less/icomoon.less"; .icon-edit:before { color: @btnInfoBackgroundHighlight; } .icon-publish:before, .icon-save:before, .icon-ok:before, .icon-save-new:before, .icon-save-copy:before, .btn-toolbar .icon-copy:before { color: @btnSuccessBackgroundHighlight; } .icon-unpublish:before, .icon-not-ok:before, .icon-eye-close:before, .icon-ban-circle:before, .icon-minus-sign:before, .btn-toolbar .icon-cancel:before { color: @btnDangerBackgroundHighlight; } .icon-featured:before, .icon-default:before, .icon-expired:before, .icon-pending:before { color: @btnWarningBackgroundHighlight; } .icon-back:before { content: "\e008"; }PKb��\���)''!templates/isis/less/template.lessnu�[���// CSS Reset @import "../../../../media/jui/less/reset.less"; // Core variables and mixins @import "variables.less"; // Custom for this template @import "bootstrap/mixins.less"; // Grid system and page structure @import "../../../../media/jui/less/scaffolding.less"; @import "../../../../media/jui/less/grid.less"; @import "../../../../media/jui/less/layouts.less"; // Base CSS @import "../../../../media/jui/less/type.less"; @import "../../../../media/jui/less/code.less"; @import "../../../../media/jui/less/forms.less"; @import "../../../../media/jui/less/tables.less"; // Components: common // @import "../../../../media/jui/less/sprites.less"; @import "../../../../media/jui/less/dropdowns.less"; @import "bootstrap/wells.less"; @import "../../../../media/jui/less/component-animations.less"; @import "../../../../media/jui/less/close.less"; // Components: Buttons & Alerts @import "bootstrap/buttons.less"; @import "bootstrap/button-groups.less"; @import "../../../../media/jui/less/alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less // Components: Nav @import "../../../../media/jui/less/navs.less"; @import "../../../../media/jui/less/navbar.less"; @import "../../../../media/jui/less/breadcrumbs.less"; @import "../../../../media/jui/less/pagination.less"; @import "../../../../media/jui/less/pager.less"; // Components: Popovers @import "../../../../media/jui/less/modals.less"; @import "../../../../media/jui/less/tooltip.less"; @import "../../../../media/jui/less/popovers.less"; // Components: Misc @import "../../../../media/jui/less/thumbnails.less"; @import "../../../../media/jui/less/media.less"; @import "../../../../media/jui/less/labels-badges.less"; @import "../../../../media/jui/less/progress-bars.less"; @import "../../../../media/jui/less/accordion.less"; @import "../../../../media/jui/less/carousel.less"; @import "../../../../media/jui/less/hero-unit.less"; // Utility classes @import "../../../../media/jui/less/utilities.less"; // RESPONSIVE CLASSES // ------------------ @import "../../../../media/jui/less/responsive-utilities.less"; // MEDIA QUERIES // ------------------ // Phones to portrait tablets and narrow desktops @import "../../../../media/jui/less/responsive-767px-max.less"; // Tablets to regular desktops @import "bootstrap/responsive-768px-979px.less"; // Large desktops @import "bootstrap/responsive-1200px-min.less"; // RESPONSIVE NAVBAR // ------------------ // From 979px and below, show a button to toggle navbar contents @import "../../../../media/jui/less/responsive-navbar.less"; // Extended for JUI @import "../../../../media/jui/less/bootstrap-extended.less"; // Has to be last to override when necessary // div.modal (instead of .modal) @import "../../../../media/jui/less/modals.joomla.less"; @import "../../../../media/jui/less/responsive-767px-max.joomla.less"; // Icon Font @import "icomoon.less"; // Blocks @import "blocks/_global.less"; @import "blocks/_chzn-override.less"; @import "blocks/_editors.less"; @import "blocks/_forms.less"; @import "blocks/_header.less"; @import "blocks/_login.less"; @import "blocks/_media.less"; @import "blocks/_modals.less"; @import "blocks/_navbar.less"; @import "blocks/_quickicons.less"; @import "blocks/_sidebar.less"; @import "blocks/_status.less"; @import "blocks/_tables.less"; @import "blocks/_toolbar.less"; @import "blocks/_treeselect.less"; @import "blocks/_utility-classes.less"; @import "blocks/_custom.less"; // Pages @import "pages/_com_cpanel.less"; @import "pages/_com_postinstall.less"; @import "pages/_com_privacy.less"; @import "pages/_com_templates.less"; PKb��\Z��k�'�'"templates/isis/less/variables.lessnu�[���// // Variables // -------------------------------------------------- // > Joomla JUI // Responsive Breakpoints // ------------------------- @xs: 320px; @sm: 480px; @md: 768px; @lg: 980px; @xl: 1200px; @xs-max: @xs - 1; @sm-max: @sm - 1; @md-max: @md - 1; @lg-max: @lg - 1; @xl-max: @xl - 1; // < Joomla JUI // Global values // -------------------------------------------------- // Grays // ------------------------- @black: #000; @grayDarker: #222; @grayDark: #333; @gray: #555; @grayLight: #999; @grayLighter: #eee; @white: #fff; // Accent colors // ------------------------- @blue: #049cdb; @blueDark: #0064cd; @green: #46a546; @red: #9d261d; @yellow: #ffc40d; @orange: #f89406; @pink: #c3325f; @purple: #7a43b6; // Scaffolding // ------------------------- @bodyBackground: @white; @textColor: @grayDark; // Links // ------------------------- @linkColor: darken(#428bca, 10%); @linkColorHover: darken(@linkColor, 15%); // Typography // ------------------------- @sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; @serifFontFamily: Georgia, "Times New Roman", Times, serif; @monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace; // > Joomla JUI @baseFontSize: 13px; // < Joomla JUI @baseFontFamily: @sansFontFamily; // > Joomla JUI @baseLineHeight: 18px; // < Joomla JUI @altFontFamily: @serifFontFamily; @headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily @headingsFontWeight: bold; // instead of browser default, bold @headingsColor: inherit; // empty to use BS default, @textColor // Component sizing // ------------------------- // Based on 14px font-size and 20px line-height @fontSizeLarge: @baseFontSize * 1.25; // ~18px // > Joomla JUI @fontSizeSmall: ceil(@baseFontSize * 0.85); // ~12px // < Joomla JUI @fontSizeMini: @baseFontSize * 0.75; // ~11px @paddingLarge: 11px 19px; // 44px @paddingSmall: 2px 10px; // 26px @paddingMini: 0 6px; // 22px @baseBorderRadius: 3px; @borderRadiusLarge: 6px; @borderRadiusSmall: 3px; // Tables // ------------------------- @tableBackground: transparent; // overall background-color @tableBackgroundAccent: #f9f9f9; // for striping @tableBackgroundHover: #F0F0F0; // for hover @tableBorder: #ddd; // table and cell border // Buttons // ------------------------- @btnBackground: #f3f3f3; @btnBackgroundHighlight: darken(@grayLighter, 3%); @btnBorder: lighten(@grayLight, 10%); // > Joomla JUI @btnPrimaryBackground: #2384d3; @btnPrimaryBackgroundHighlight: #15497c; // < Joomla JUI @btnInfoBackground: #2f96b4; @btnInfoBackgroundHighlight: darken(@btnInfoBackground, 10%); @btnSuccessBackground: #46a546; @btnSuccessBackgroundHighlight: darken(@btnSuccessBackground, 10%); @btnWarningBackground: @orange; @btnWarningBackgroundHighlight: darken(@btnWarningBackground, 10%); @btnDangerBackground: #bd362f; @btnDangerBackgroundHighlight: darken(@btnDangerBackground, 10%); @btnInverseBackground: #444; @btnInverseBackgroundHighlight: @grayDarker; // Forms // ------------------------- @inputBackground: @white; @inputBorder: #ccc; @inputBorderHighlight: #3071A9; @inputBorderRadius: 3px; @inputDisabledBackground: @grayLighter; @formActionsBackground: #F0F0F0; @inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border // Dropdowns // ------------------------- @dropdownBackground: @white; @dropdownBorder: rgba(0,0,0,.2); @dropdownDividerTop: #F0F0F0; @dropdownDividerBottom: @white; @dropdownLinkColor: @grayDark; @dropdownLinkColorHover: @white; @dropdownLinkColorActive: @dropdownLinkColor; @dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; @dropdownLinkBackgroundActive: @linkColor; // COMPONENT VARIABLES // -------------------------------------------------- // Z-index master list // ------------------------- // Used for a bird's eye view of components dependent on the z-axis // Try to avoid customizing these :) @zindexDropdown: 1000; @zindexTooltip: 1030; @zindexFixedNavbar: 1030; @zindexModalBackdrop: 1040; @zindexModal: 1050; @zindexPopover: 1060; // Sprite icons path // ------------------------- @iconSpritePath: "../img/glyphicons-halflings.png"; @iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; // Input placeholder text color // ------------------------- @placeholderText: @grayLight; // Hr border color // ------------------------- @hrBorder: @grayLighter; // Horizontal forms & lists // ------------------------- @horizontalComponentOffset: 180px; // Wells // ------------------------- @wellBackground: #F0F0F0; // Navbar // ------------------------- // > Joomla JUI @navbarCollapseWidth: @md-max; // < Joomla JUI @navbarCollapseDesktopWidth: (@navbarCollapseWidth + 1); @navbarHeight: 40px; @navbarBackgroundHighlight: #ffffff; @navbarBackground: darken(@navbarBackgroundHighlight, 5%); @navbarBorder: darken(@navbarBackground, 12%); @navbarText: @gray; @navbarLinkColor: @gray; @navbarLinkColorHover: @grayDark; @navbarLinkColorActive: @gray; @navbarLinkBackgroundHover: transparent; @navbarLinkBackgroundActive: darken(@navbarBackground, 5%); @navbarBrandColor: @navbarLinkColor; // Inverted navbar // > Joomla JUI @navbarInverseBackground: darken(@headerBackground, 10%); @navbarInverseBackgroundHighlight: darken(@headerBackground, 5%); @navbarInverseBorder: darken(@headerBackground, 15%); @navbarInverseText: lighten(@grayLight, 25%); @navbarInverseLinkColor: lighten(@grayLight, 25%); // < Joomla JUI @navbarInverseLinkColorHover: @white; @navbarInverseLinkColorActive: @navbarInverseLinkColorHover; @navbarInverseLinkBackgroundHover: transparent; @navbarInverseLinkBackgroundActive: @navbarInverseBackground; @navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%); @navbarInverseSearchBackgroundFocus: @white; @navbarInverseSearchBorder: @navbarInverseBackground; @navbarInverseSearchPlaceholderColor: #ccc; @navbarInverseBrandColor: @navbarInverseLinkColor; // Pagination // ------------------------- @paginationBackground: #fff; @paginationBorder: #ddd; @paginationActiveBackground: #F0F0F0; // Hero unit // ------------------------- @heroUnitBackground: @grayLighter; @heroUnitHeadingColor: inherit; @heroUnitLeadColor: inherit; // Form states and alerts // ------------------------- @warningText: #8a6d3b; @warningBackground: #fcf8e3; @warningBorder: darken(spin(@warningBackground, -10), 5%); @errorText: #a94442; @errorBackground: #f2dede; @errorBorder: darken(spin(@errorBackground, -10), 5%); @successText: #3c763d; @successBackground: #dff0d8; @successBorder: darken(spin(@successBackground, -10), 5%); @infoText: #31708f; @infoBackground: #d9edf7; @infoBorder: darken(spin(@infoBackground, -10), 7%); // Tooltips and popovers // ------------------------- @tooltipColor: #fff; @tooltipBackground: #000; @tooltipArrowWidth: 5px; @tooltipArrowColor: @tooltipBackground; @popoverBackground: #fff; @popoverArrowWidth: 10px; @popoverArrowColor: #fff; @popoverTitleBackground: darken(@popoverBackground, 3%); // Special enhancement for popovers @popoverArrowOuterWidth: @popoverArrowWidth + 1; @popoverArrowOuterColor: rgba(0,0,0,.25); // GRID // -------------------------------------------------- // Default 940px grid // ------------------------- @gridColumns: 12; @gridColumnWidth: 60px; @gridGutterWidth: 20px; @gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); // 1200px min @gridColumnWidth1200: 70px; @gridGutterWidth1200: 30px; @gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); // 768px-979px @gridColumnWidth768: 42px; @gridGutterWidth768: 20px; @gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); // Fluid grid // ------------------------- @fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); @fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); // 1200px min @fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); @fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); // 768px-979px @fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); @fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); // > Joomla JUI // Login // ------------------------- @loginBackground: #17568c; // Header // ------------------------- @headerBackground: #1a3867; @headerBackgroundHighlight: #17568c; // < Joomla JUIPKb��\GE�tC0C0templates/isis/error.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Templates.isis * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; /** @var JDocumentError $this */ // Getting params from template $params = JFactory::getApplication()->getTemplate(true)->params; $app = JFactory::getApplication(); $lang = JFactory::getLanguage(); $input = $app->input; $user = JFactory::getUser(); // Gets the FrontEnd Main page Uri $frontEndUri = JUri::getInstance(JUri::root()); $frontEndUri->setScheme(((int) $app->get('force_ssl', 0) === 2) ? 'https' : 'http'); $mainPageUri = $frontEndUri->toString(); // Detecting Active Variables $option = $input->get('option', ''); $view = $input->get('view', ''); $layout = $input->get('layout', ''); $task = $input->get('task', ''); $itemid = $input->get('Itemid', 0, 'int'); $sitename = htmlspecialchars($app->get('sitename'), ENT_QUOTES, 'UTF-8'); $cpanel = ($option === 'com_cpanel'); $showSubmenu = false; $this->submenumodules = JModuleHelper::getModules('submenu'); foreach ($this->submenumodules as $submenumodule) { $output = JModuleHelper::renderModule($submenumodule); if ($output !== '') { $showSubmenu = true; break; } } // Logo file if ($params->get('logoFile')) { $logo = JUri::root() . $params->get('logoFile'); } else { $logo = $this->baseurl . '/templates/' . $this->template . '/images/logo.png'; } // Template Parameters $displayHeader = $params->get('displayHeader', '1'); $statusFixed = $params->get('statusFixed', '1'); $stickyToolbar = $params->get('stickyToolbar', '1'); ?> <!DOCTYPE html> <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title><?php echo $this->title; ?> <?php echo htmlspecialchars($this->error->getMessage(), ENT_QUOTES, 'UTF-8'); ?></title> <?php if ($app->get('debug_lang', '0') == '1' || $app->get('debug', '0') == '1') : ?> <!-- Load additional CSS styles for debug mode--> <link href="<?php echo JUri::root(true); ?>/media/cms/css/debug.css" rel="stylesheet" /> <?php endif; ?> <?php // If Right-to-Left ?> <?php if ($this->direction == 'rtl') : ?> <link href="<?php echo JUri::root(true); ?>/media/jui/css/bootstrap-rtl.css" rel="stylesheet" /> <?php endif; ?> <?php // Load specific language related CSS ?> <?php $file = '/administrator/language/' . $lang->getTag() . '/' . $lang->getTag() . '.css'; ?> <?php if (is_file(JPATH_ROOT . $file)) : ?> <link href="<?php echo JUri::root(true) . $file; ?>" rel="stylesheet" /> <?php endif; ?> <link href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/css/template<?php echo ($this->direction == 'rtl' ? '-rtl' : ''); ?>.css" rel="stylesheet" /> <link href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" /> <?php // Template color ?> <?php if ($params->get('templateColor')) : ?> <style> .navbar-inner, .navbar-inverse .navbar-inner, .nav-list > .active > a, .nav-list > .active > a:hover, .dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover, .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { background: <?php echo $params->get('templateColor');?>; } .navbar-inner, .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle{ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .25), inset 0 -1px 0 rgba(0, 0, 0, .1), inset 0 30px 10px rgba(0, 0, 0, .2); -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .25), inset 0 -1px 0 rgba(0, 0, 0, .1), inset 0 30px 10px rgba(0, 0, 0, .2); box-shadow: 0 1px 3px rgba(0, 0, 0, .25), inset 0 -1px 0 rgba(0, 0, 0, .1), inset 0 30px 10px rgba(0, 0, 0, .2); } </style> <?php endif; ?> <?php // Template header color ?> <?php if ($params->get('headerColor')) : ?> <style> .header { background: <?php echo $params->get('headerColor');?>; } </style> <?php endif; ?> <?php // Sidebar background color ?> <?php if ($params->get('sidebarColor')) : ?> <style> .nav-list > .active > a, .nav-list > .active > a:hover { background: <?php echo $params->get('sidebarColor'); ?>; } </style> <?php endif; ?> <script src="<?php echo JUri::root(true); ?>/media/jui/js/jquery.js"></script> <script src="<?php echo JUri::root(true); ?>/media/jui/js/jquery-noconflict.js"></script> <script src="<?php echo JUri::root(true); ?>/media/jui/js/bootstrap.js"></script> <script src="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/js/template.js"></script> <!--[if lt IE 9]><script src="<?php echo JUri::root(true); ?>/media/jui/js/html5.js"></script><![endif]--> </head> <body class="admin <?php echo $option . ' view-' . $view . ' layout-' . $layout . ' task-' . $task;?>" data-spy="scroll" data-target=".subhead" data-offset="87"> <!-- Top Navigation --> <nav class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar-inner"> <div class="container-fluid"> <?php if ($params->get('admin_menus') != '0') : ?> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="element-invisible"><?php echo JTEXT::_('TPL_ISIS_TOGGLE_MENU'); ?></span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <?php endif; ?> <a class="admin-logo" href="<?php echo $this->baseurl; ?>"><span class="icon-joomla"></span></a> <a class="brand hidden-desktop hidden-tablet" href="<?php echo $mainPageUri; ?>" title="<?php echo JText::sprintf('TPL_ISIS_PREVIEW', $sitename); ?>" target="_blank"><?php echo JHtml::_('string.truncate', $sitename, 14, false, false); ?> <span class="icon-out-2 small"></span></a> <?php if ($params->get('admin_menus') != '0') : ?> <div class="nav-collapse"> <?php else : ?> <div> <?php endif; ?> <?php // Display menu modules ?> <?php $this->menumodules = JModuleHelper::getModules('menu'); ?> <?php foreach ($this->menumodules as $menumodule) : ?> <?php $output = JModuleHelper::renderModule($menumodule, array('style' => 'none')); ?> <?php $params = new Registry($menumodule->params); ?> <?php echo $output; ?> <?php endforeach; ?> <ul class="nav nav-user<?php echo ($this->direction == 'rtl') ? ' pull-left' : ' pull-right'; ?>"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"><span class="icon-cog"></span> <span class="caret"></span></a> <ul class="dropdown-menu"> <li> <span> <span class="icon-user"></span> <strong><?php echo htmlspecialchars($user->name, ENT_QUOTES, 'UTF-8'); ?></strong> </span> </li> <li class="divider"></li> <li class=""> <a href="index.php?option=com_admin&task=profile.edit&id=<?php echo $user->id; ?>"><?php echo JText::_('TPL_ISIS_EDIT_ACCOUNT'); ?></a> </li> <li class="divider"></li> <li class=""> <a href="<?php echo JRoute::_('index.php?option=com_login&task=logout&' . JSession::getFormToken() . '=1'); ?>"><?php echo JText::_('TPL_ISIS_LOGOUT'); ?></a> </li> </ul> </li> </ul> <a class="brand visible-desktop visible-tablet" href="<?php echo $mainPageUri; ?>" title="<?php echo JText::sprintf('TPL_ISIS_PREVIEW', $sitename); ?>" target="_blank"><?php echo JHtml::_('string.truncate', $sitename, 14, false, false); ?> <span class="icon-out-2 small"></span></a> </div> <!--/.nav-collapse --> </div> </div> </nav> <!-- Header --> <header class="header"> <?php if ($displayHeader) : ?> <div class="container-logo"> <img src="<?php echo $logo; ?>" class="logo" /> </div> <?php endif; ?> <div class="container-title"> <h1 class="page-title"><?php echo JText::_('ERROR'); ?></h1> </div> </header> <?php if (!$statusFixed && $this->getInstance()->countModules('status')) : ?> <!-- Begin Status Module --> <div id="status" class="navbar status-top hidden-phone"> <div class="btn-toolbar"> <div class="btn-group pull-right"> <p> © <?php echo date('Y'); ?> <?php echo $sitename; ?> </p> </div> <?php // Display status modules ?> <?php $this->statusmodules = JModuleHelper::getModules('status'); ?> <?php foreach ($this->statusmodules as $statusmodule) : ?> <?php $output = JModuleHelper::renderModule($statusmodule, array('style' => 'no')); ?> <?php $params = new Registry($statusmodule->params); ?> <?php echo $output; ?> <?php endforeach; ?> </div> <div class="clearfix"></div> </div> <!-- End Status Module --> <?php endif; ?> <div class="subhead-spacer" style="margin-bottom: 20px"></div> <!-- container-fluid --> <div class="container-fluid container-main"> <section id="content"> <!-- Begin Content --> <div class="row-fluid"> <div class="span12"> <!-- Begin Content --> <h1 class="page-header"><?php echo JText::_('JERROR_AN_ERROR_HAS_OCCURRED'); ?></h1> <blockquote> <span class="label label-inverse"><?php echo $this->error->getCode(); ?></span> <?php echo htmlspecialchars($this->error->getMessage(), ENT_QUOTES, 'UTF-8');?> <?php if ($this->debug) : ?> <br/><?php echo htmlspecialchars($this->error->getFile(), ENT_QUOTES, 'UTF-8');?>:<?php echo $this->error->getLine(); ?> <?php endif; ?> </blockquote> <?php if ($this->debug) : ?> <div> <?php echo $this->renderBacktrace(); ?> <?php // Check if there are more Exceptions and render their data as well ?> <?php if ($this->error->getPrevious()) : ?> <?php $loop = true; ?> <?php // Reference $this->_error here and in the loop as setError() assigns errors to this property and we need this for the backtrace to work correctly ?> <?php // Make the first assignment to setError() outside the loop so the loop does not skip Exceptions ?> <?php $this->setError($this->_error->getPrevious()); ?> <?php while ($loop === true) : ?> <p><strong><?php echo JText::_('JERROR_LAYOUT_PREVIOUS_ERROR'); ?></strong></p> <p> <?php echo htmlspecialchars($this->_error->getMessage(), ENT_QUOTES, 'UTF-8'); ?> <br/><?php echo htmlspecialchars($this->_error->getFile(), ENT_QUOTES, 'UTF-8');?>:<?php echo $this->_error->getLine(); ?> </p> <?php echo $this->renderBacktrace(); ?> <?php $loop = $this->setError($this->_error->getPrevious()); ?> <?php endwhile; ?> <?php // Reset the main error object to the base error ?> <?php $this->setError($this->error); ?> <?php endif; ?> </div> <?php endif; ?> <p><a href="<?php echo $this->baseurl; ?>" class="btn"><span class="icon-dashboard"></span> <?php echo JText::_('JGLOBAL_TPL_CPANEL_LINK_TEXT'); ?></a></p> <!-- End Content --> </div> </div> <!-- End Content --> </section> <hr /> </div> <script> (function($){ // fix sub nav on scroll var $win = $(window) , $nav = $('.subhead') , navTop = $('.subhead').length && $('.subhead').offset().top - 40 , isFixed = 0 processScroll() // hack sad times - holdover until rewrite for 2.1 $nav.on('click', function () { if (!isFixed) setTimeout(function () { $win.scrollTop($win.scrollTop() - 47) }, 10) }) $win.on('scroll', processScroll) function processScroll() { var i, scrollTop = $win.scrollTop() if (scrollTop >= navTop && !isFixed) { isFixed = 1 $nav.addClass('subhead-fixed') } else if (scrollTop <= navTop && isFixed) { isFixed = 0 $nav.removeClass('subhead-fixed') } } })(jQuery); </script> </body> </html> PKb��\�����+templates/isis/html/mod_version/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage mod_version * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <?php if (!empty($version)) : ?> <?php echo $version; ?> <?php echo ' — '; ?> <?php endif; ?> PKb��\���N5templates/isis/html/layouts/joomla/system/message.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.Isis * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $msgList = $displayData['msgList']; $alert = array('error' => 'alert-error', 'warning' => '', 'notice' => 'alert-info', 'message' => 'alert-success'); ?> <div id="system-message-container"> <?php if (is_array($msgList) && $msgList) : ?> <?php foreach ($msgList as $type => $msgs) : ?> <div class="alert <?php echo isset($alert[$type]) ? $alert[$type] : 'alert-' . $type; ?>"> <button type="button" class="close" data-dismiss="alert">×</button> <?php if (!empty($msgs)) : ?> <h4 class="alert-heading"><?php echo JText::_($type); ?></h4> <?php foreach ($msgs as $msg) : ?> <div class="alert-message"><?php echo $msg; ?></div> <?php endforeach; ?> <?php endif; ?> </div> <?php endforeach; ?> <?php endif; ?> </div> PKb��\R�|%%templates/isis/html/modules.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Templates.isis * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * This is a file to add template specific chrome to module rendering. To use it you would * set the style attribute for the given module(s) include in your template to use the style * for each given modChrome function. * * eg. To render a module mod_test in the submenu style, you would use the following include: * <jdoc:include type="module" name="test" style="submenu" /> * * This gives template designers ultimate control over how modules are rendered. * * NOTICE: All chrome wrapping methods should be named: modChrome_{STYLE} and take the same * two arguments. */ /* * Module chrome for rendering the module in a submenu */ function modChrome_title($module, &$params, &$attribs) { if ($module->content) { echo '<div class="module-title"><h6>' . $module->title . '</h6></div>'; echo $module->content; } } function modChrome_no($module, &$params, &$attribs) { if ($module->content) { echo $module->content; } } function modChrome_well($module, &$params, &$attribs) { if ($module->content) { $moduleTag = $params->get('module_tag', 'div'); $bootstrapSize = (int) $params->get('bootstrap_size'); $moduleClass = $bootstrapSize ? ' span' . $bootstrapSize : ''; $headerTag = htmlspecialchars($params->get('header_tag', 'h2'), ENT_COMPAT, 'UTF-8'); // Temporarily store header class in variable $headerClass = $params->get('header_class'); $headerClass = $headerClass ? ' ' . htmlspecialchars($headerClass, ENT_COMPAT, 'UTF-8') : ''; echo '<' . $moduleTag . ' class="well well-small' . $moduleClass . '">'; if ($module->showtitle) { echo '<' . $headerTag . ' class="module-title nav-header' . $headerClass . '">' . $module->title . '</' . $headerTag . '>'; } echo $module->content; echo '</' . $moduleTag . '>'; } } PKb��\�|�4&templates/isis/html/editor_content.cssnu�[���body { background: #000; font-family: Arial,sans-serif; line-height: 1.3em; font-size: 96%; color: #333; } h1 { font-family:Helvetica ,Arial,sans-serif; font-size: 16px; font-weight: bold; color: #ff0000; } h2 { font-family: Arial, Helvetica,sans-serif; font-size: 14px; font-weight: normal; color: #333; } h3 { font-weight: bold; font-family: Helvetica,Arial,sans-serif; font-size: 19px; color: #135cae; } h4 { font-weight: bold; font-family: Arial, Helvetica, sans-serif; color: #333; } a:link, a:visited { color: #1B57B1; text-decoration: none; font-weight: normal; } a:hover { color: #00c; text-decoration: underline; font-weight: normal; } div.caption { padding: 0 10px 0 10px; } div.caption img { border: 1px solid #CCC; } div.caption p { font-size: .90em; color: #666; text-align: center; } div.teaser { background:#ccc; } PKb��\h�D���"templates/isis/html/pagination.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Template.Isis * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * This is a file to add template specific chrome to pagination rendering. * * pagination_list_footer * Input variable $list is an array with offsets: * $list[limit] : int * $list[limitstart] : int * $list[total] : int * $list[limitfield] : string * $list[pagescounter] : string * $list[pageslinks] : string * * pagination_list_render * Input variable $list is an array with offsets: * $list[all] * [data] : string * [active] : boolean * $list[start] * [data] : string * [active] : boolean * $list[previous] * [data] : string * [active] : boolean * $list[next] * [data] : string * [active] : boolean * $list[end] * [data] : string * [active] : boolean * $list[pages] * [{PAGE}][data] : string * [{PAGE}][active] : boolean * * pagination_item_active * Input variable $item is an object with fields: * $item->base : integer * $item->link : string * $item->text : string * * pagination_item_inactive * Input variable $item is an object with fields: * $item->base : integer * $item->link : string * $item->text : string * * This gives template designers ultimate control over how pagination is rendered. * * NOTE: If you override pagination_item_active OR pagination_item_inactive you MUST override them both */ /** * Renders the pagination list * * @param array $list Array containing pagination information * * @return string HTML markup for the full pagination object * * @since 3.0 */ function pagination_list_render($list) { // Calculate to display range of pages $currentPage = 1; $range = 1; $step = 5; foreach ($list['pages'] as $k => $page) { if (!$page['active']) { $currentPage = $k; } } if ($currentPage >= $step) { if ($currentPage % $step == 0) { $range = ceil($currentPage / $step) + 1; } else { $range = ceil($currentPage / $step); } } $html = '<ul class="pagination-list">'; $html .= $list['start']['data']; $html .= $list['previous']['data']; foreach ($list['pages'] as $k => $page) { $html .= $page['data']; } $html .= $list['next']['data']; $html .= $list['end']['data']; $html .= '</ul>'; return $html; } /** * Renders an active item in the pagination block * * @param JPaginationObject $item The current pagination object * * @return string HTML markup for active item * * @since 3.0 */ function pagination_item_active(&$item) { $class = ''; // Check for "Start" item if ($item->text == JText::_('JLIB_HTML_START')) { $display = '<span class="icon-first"></span>'; } // Check for "Prev" item if ($item->text == JText::_('JPREV')) { $item->text = JText::_('JPREVIOUS'); $display = '<span class="icon-previous"></span>'; } // Check for "Next" item if ($item->text == JText::_('JNEXT')) { $display = '<span class="icon-next"></span>'; } // Check for "End" item if ($item->text == JText::_('JLIB_HTML_END')) { $display = '<span class="icon-last"></span>'; } // If the display object isn't set already, just render the item with its text if (!isset($display)) { $display = $item->text; $class = ' class="hidden-phone"'; } if ($item->base > 0) { $limit = 'limitstart.value=' . $item->base; } else { $limit = 'limitstart.value=0'; } $title = ''; if (!is_numeric($item->text)) { JHtml::_('bootstrap.tooltip'); $title = ' class="hasTooltip" title="' . $item->text . '"'; } return '<li' . $class . '><a' . $title . ' href="#" onclick="document.adminForm.' . $item->prefix . $limit . '; Joomla.submitform();return false;">' . $display . '</a></li>'; } /** * Renders an inactive item in the pagination block * * @param JPaginationObject $item The current pagination object * * @return string HTML markup for inactive item * * @since 3.0 */ function pagination_item_inactive(&$item) { // Check for "Start" item if ($item->text == JText::_('JLIB_HTML_START')) { return '<li class="disabled"><a><span class="icon-first"></span></a></li>'; } // Check for "Prev" item if ($item->text == JText::_('JPREV')) { return '<li class="disabled"><a><span class="icon-previous"></span></a></li>'; } // Check for "Next" item if ($item->text == JText::_('JNEXT')) { return '<li class="disabled"><a><span class="icon-next"></span></a></li>'; } // Check for "End" item if ($item->text == JText::_('JLIB_HTML_END')) { return '<li class="disabled"><a><span class="icon-last"></span></a></li>'; } // Check if the item is the active page if (isset($item->active) && $item->active) { return '<li class="active hidden-phone"><a>' . $item->text . '</a></li>'; } // Doesn't match any other condition, render a normal item return '<li class="disabled hidden-phone"><a>' . $item->text . '</a></li>'; } PKb��\/�O����templates/isis/css/template.cssnu�[���article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; } audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; } audio:not([controls]) { display: none; } html { font-size: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } a:hover, a:active { outline: 0; } sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; } img { max-width: 100%; width: auto \9; height: auto; vertical-align: middle; border: 0; -ms-interpolation-mode: bicubic; } #map_canvas img, .google-maps img, .gm-style img { max-width: none; } button, input, select, textarea { margin: 0; font-size: 100%; vertical-align: middle; } button, input { *overflow: visible; line-height: normal; } button::-moz-focus-inner, input::-moz-focus-inner { padding: 0; border: 0; } button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; cursor: pointer; } label, select, button, input[type="button"], input[type="reset"], input[type="submit"], input[type="radio"], input[type="checkbox"] { cursor: pointer; } input[type="search"] { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; -webkit-appearance: textfield; } input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { -webkit-appearance: none; } textarea { overflow: auto; vertical-align: top; } @media print { * { text-shadow: none !important; color: #000 !important; background: transparent !important; box-shadow: none !important; } a, a:visited { text-decoration: underline; } a[href]:after { content: " (" attr(href) ")"; } abbr[title]:after { content: " (" attr(title) ")"; } .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } thead { display: table-header-group; } tr, img { page-break-inside: avoid; } img { max-width: 100% !important; } @page { margin: 0.5cm; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } } .clearfix { *zoom: 1; } .clearfix:before, .clearfix:after { display: table; content: ""; line-height: 0; } .clearfix:after { clear: both; } .hide-text { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .input-block-level { display: block; width: 100%; min-height: 28px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } body { margin: 0; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px; color: #333; background-color: #fff; } a { color: #3071a9; text-decoration: none; } a:hover, a:focus { color: #1f496e; text-decoration: underline; } .img-rounded { -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .img-polaroid { padding: 4px; background-color: #fff; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,0.2); -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1); -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.1); box-shadow: 0 1px 3px rgba(0,0,0,0.1); } .img-circle { -webkit-border-radius: 500px; -moz-border-radius: 500px; border-radius: 500px; } .row { margin-left: -20px; *zoom: 1; } .row:before, .row:after { display: table; content: ""; line-height: 0; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 20px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 940px; } .span12 { width: 940px; } .span11 { width: 860px; } .span10 { width: 780px; } .span9 { width: 700px; } .span8 { width: 620px; } .span7 { width: 540px; } .span6 { width: 460px; } .span5 { width: 380px; } .span4 { width: 300px; } .span3 { width: 220px; } .span2 { width: 140px; } .span1 { width: 60px; } .offset12 { margin-left: 980px; } .offset11 { margin-left: 900px; } .offset10 { margin-left: 820px; } .offset9 { margin-left: 740px; } .offset8 { margin-left: 660px; } .offset7 { margin-left: 580px; } .offset6 { margin-left: 500px; } .offset5 { margin-left: 420px; } .offset4 { margin-left: 340px; } .offset3 { margin-left: 260px; } .offset2 { margin-left: 180px; } .offset1 { margin-left: 100px; } .row-fluid { width: 100%; *zoom: 1; } .row-fluid:before, .row-fluid:after { display: table; content: ""; line-height: 0; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; width: 100%; min-height: 28px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; float: left; margin-left: 2.1276595744681%; *margin-left: 2.0744680851064%; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.1276595744681%; } .row-fluid .span12 { width: 100%; *width: 99.946808510638%; } .row-fluid .span11 { width: 91.489361702128%; *width: 91.436170212766%; } .row-fluid .span10 { width: 82.978723404255%; *width: 82.925531914894%; } .row-fluid .span9 { width: 74.468085106383%; *width: 74.414893617021%; } .row-fluid .span8 { width: 65.957446808511%; *width: 65.904255319149%; } .row-fluid .span7 { width: 57.446808510638%; *width: 57.393617021277%; } .row-fluid .span6 { width: 48.936170212766%; *width: 48.882978723404%; } .row-fluid .span5 { width: 40.425531914894%; *width: 40.372340425532%; } .row-fluid .span4 { width: 31.914893617021%; *width: 31.86170212766%; } .row-fluid .span3 { width: 23.404255319149%; *width: 23.351063829787%; } .row-fluid .span2 { width: 14.893617021277%; *width: 14.840425531915%; } .row-fluid .span1 { width: 6.3829787234043%; *width: 6.3297872340426%; } .row-fluid .offset12 { margin-left: 104.25531914894%; *margin-left: 104.14893617021%; } .row-fluid .offset12:first-child { margin-left: 102.12765957447%; *margin-left: 102.02127659574%; } .row-fluid .offset11 { margin-left: 95.744680851064%; *margin-left: 95.63829787234%; } .row-fluid .offset11:first-child { margin-left: 93.617021276596%; *margin-left: 93.510638297872%; } .row-fluid .offset10 { margin-left: 87.234042553191%; *margin-left: 87.127659574468%; } .row-fluid .offset10:first-child { margin-left: 85.106382978723%; *margin-left: 85%; } .row-fluid .offset9 { margin-left: 78.723404255319%; *margin-left: 78.617021276596%; } .row-fluid .offset9:first-child { margin-left: 76.595744680851%; *margin-left: 76.489361702128%; } .row-fluid .offset8 { margin-left: 70.212765957447%; *margin-left: 70.106382978723%; } .row-fluid .offset8:first-child { margin-left: 68.085106382979%; *margin-left: 67.978723404255%; } .row-fluid .offset7 { margin-left: 61.702127659574%; *margin-left: 61.595744680851%; } .row-fluid .offset7:first-child { margin-left: 59.574468085106%; *margin-left: 59.468085106383%; } .row-fluid .offset6 { margin-left: 53.191489361702%; *margin-left: 53.085106382979%; } .row-fluid .offset6:first-child { margin-left: 51.063829787234%; *margin-left: 50.957446808511%; } .row-fluid .offset5 { margin-left: 44.68085106383%; *margin-left: 44.574468085106%; } .row-fluid .offset5:first-child { margin-left: 42.553191489362%; *margin-left: 42.446808510638%; } .row-fluid .offset4 { margin-left: 36.170212765957%; *margin-left: 36.063829787234%; } .row-fluid .offset4:first-child { margin-left: 34.042553191489%; *margin-left: 33.936170212766%; } .row-fluid .offset3 { margin-left: 27.659574468085%; *margin-left: 27.553191489362%; } .row-fluid .offset3:first-child { margin-left: 25.531914893617%; *margin-left: 25.425531914894%; } .row-fluid .offset2 { margin-left: 19.148936170213%; *margin-left: 19.042553191489%; } .row-fluid .offset2:first-child { margin-left: 17.021276595745%; *margin-left: 16.914893617021%; } .row-fluid .offset1 { margin-left: 10.63829787234%; *margin-left: 10.531914893617%; } .row-fluid .offset1:first-child { margin-left: 8.5106382978723%; *margin-left: 8.4042553191489%; } [class*="span"].hide, .row-fluid [class*="span"].hide { display: none; } [class*="span"].pull-right, .row-fluid [class*="span"].pull-right { float: right; } .container { margin-right: auto; margin-left: auto; *zoom: 1; } .container:before, .container:after { display: table; content: ""; line-height: 0; } .container:after { clear: both; } .container-fluid { padding-right: 20px; padding-left: 20px; *zoom: 1; } .container-fluid:before, .container-fluid:after { display: table; content: ""; line-height: 0; } .container-fluid:after { clear: both; } p { margin: 0 0 9px; } .lead { margin-bottom: 18px; font-size: 19.5px; font-weight: 200; line-height: 27px; } small { font-size: 85%; } strong { font-weight: bold; } em { font-style: italic; } cite { font-style: normal; } .muted { color: #999; } a.muted:hover, a.muted:focus { color: #808080; } .text-warning { color: #8a6d3b; } a.text-warning:hover, a.text-warning:focus { color: #66512c; } .text-error { color: #a94442; } a.text-error:hover, a.text-error:focus { color: #843534; } .text-info { color: #31708f; } a.text-info:hover, a.text-info:focus { color: #245269; } .text-success { color: #3c763d; } a.text-success:hover, a.text-success:focus { color: #2b542c; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } h1, h2, h3, h4, h5, h6 { margin: 9px 0; font-family: inherit; font-weight: bold; line-height: 18px; color: inherit; text-rendering: optimizelegibility; } h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { font-weight: normal; line-height: 1; color: #999; } h1, h2, h3 { line-height: 36px; } h1 { font-size: 35.75px; } h2 { font-size: 29.25px; } h3 { font-size: 22.75px; } h4 { font-size: 16.25px; } h5 { font-size: 13px; } h6 { font-size: 11.05px; } h1 small { font-size: 22.75px; } h2 small { font-size: 16.25px; } h3 small { font-size: 13px; } h4 small { font-size: 13px; } .page-header { padding-bottom: 8px; margin: 18px 0 27px; border-bottom: 1px solid #eee; } ul, ol { padding: 0; margin: 0 0 9px 25px; } ul ul, ul ol, ol ol, ol ul { margin-bottom: 0; } li { line-height: 18px; } ul.unstyled, ol.unstyled { margin-left: 0; list-style: none; } ul.inline, ol.inline { margin-left: 0; list-style: none; } ul.inline > li, ol.inline > li { display: inline-block; *display: inline; *zoom: 1; padding-left: 5px; padding-right: 5px; } dl { margin-bottom: 18px; } dt, dd { line-height: 18px; } dt { font-weight: bold; } dd { margin-left: 9px; } .dl-horizontal { *zoom: 1; } .dl-horizontal:before, .dl-horizontal:after { display: table; content: ""; line-height: 0; } .dl-horizontal:after { clear: both; } .dl-horizontal dt { float: left; width: 160px; clear: left; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .dl-horizontal dd { margin-left: 180px; } hr { margin: 18px 0; border: 0; border-top: 1px solid #eee; border-bottom: 1px solid #fff; } abbr[title], abbr[data-original-title] { cursor: help; border-bottom: 1px dotted #999; } abbr.initialism { font-size: 90%; text-transform: uppercase; } blockquote { padding: 0 0 0 15px; margin: 0 0 18px; border-left: 5px solid #eee; } blockquote p { margin-bottom: 0; font-size: 16.25px; font-weight: 300; line-height: 1.25; } blockquote small { display: block; line-height: 18px; color: #999; } blockquote small:before { content: '\2014 \00A0'; } blockquote.pull-right { float: right; padding-right: 15px; padding-left: 0; border-right: 5px solid #eee; border-left: 0; } blockquote.pull-right p, blockquote.pull-right small { text-align: right; } blockquote.pull-right small:before { content: ''; } blockquote.pull-right small:after { content: '\00A0 \2014'; } q:before, q:after, blockquote:before, blockquote:after { content: ""; } address { display: block; margin-bottom: 18px; font-style: normal; line-height: 18px; } code, pre { padding: 0 3px 2px; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 11px; color: #333; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } code { padding: 2px 4px; color: #d14; background-color: #f7f7f9; border: 1px solid #e1e1e8; white-space: nowrap; } pre { display: block; padding: 8.5px; margin: 0 0 9px; font-size: 12px; line-height: 18px; word-break: break-all; word-wrap: break-word; white-space: pre; white-space: pre-wrap; background-color: #f5f5f5; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,0.15); -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } pre.prettyprint { margin-bottom: 18px; } pre code { padding: 0; color: inherit; white-space: pre; white-space: pre-wrap; background-color: transparent; border: 0; } .pre-scrollable { max-height: 340px; overflow-y: scroll; } form { margin: 0 0 18px; } fieldset { padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; padding: 0; margin-bottom: 18px; font-size: 19.5px; line-height: 36px; color: #333; border: 0; border-bottom: 1px solid #e5e5e5; } legend small { font-size: 13.5px; color: #999; } label, input, button, select, textarea { font-size: 13px; font-weight: normal; line-height: 18px; } input, button, select, textarea { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } label { display: block; margin-bottom: 5px; } select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { display: inline-block; height: 18px; padding: 4px 6px; margin-bottom: 9px; font-size: 13px; line-height: 18px; color: #555; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; vertical-align: middle; } input, textarea, .uneditable-input { width: 206px; } textarea { height: auto; } textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { background-color: #fff; border: 1px solid #ccc; -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); -webkit-transition: border linear .2s, box-shadow linear .2s; -moz-transition: border linear .2s, box-shadow linear .2s; -o-transition: border linear .2s, box-shadow linear .2s; transition: border linear .2s, box-shadow linear .2s; } textarea:focus, input[type="text"]:focus, input[type="password"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus, .uneditable-input:focus { border-color: rgba(82,168,236,0.8); outline: 0; outline: thin dotted \9; -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); } input[type="radio"], input[type="checkbox"] { margin: 4px 0 0; *margin-top: 0; margin-top: 1px \9; line-height: normal; } input[type="file"], input[type="image"], input[type="submit"], input[type="reset"], input[type="button"], input[type="radio"], input[type="checkbox"] { width: auto; } select, input[type="file"] { height: 28px; *margin-top: 4px; line-height: 28px; } select { width: 220px; border: 1px solid #ccc; background-color: #fff; } select[multiple], select[size] { height: auto; } select:focus, input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .uneditable-input, .uneditable-textarea { color: #999; background-color: #fcfcfc; border-color: #ccc; -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.025); -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.025); box-shadow: inset 0 1px 2px rgba(0,0,0,0.025); cursor: not-allowed; } .uneditable-input { overflow: hidden; white-space: nowrap; } .uneditable-textarea { width: auto; height: auto; } input:-moz-placeholder, textarea:-moz-placeholder { color: #999; } input:-ms-input-placeholder, textarea:-ms-input-placeholder { color: #999; } input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #999; } .radio, .checkbox { min-height: 18px; padding-left: 20px; } .radio input[type="radio"], .checkbox input[type="checkbox"] { float: left; margin-left: -20px; } .controls > .radio:first-child, .controls > .checkbox:first-child { padding-top: 5px; } .radio.inline, .checkbox.inline { display: inline-block; padding-top: 5px; margin-bottom: 0; vertical-align: middle; } .radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { margin-left: 10px; } .input-mini { width: 60px; } .input-small { width: 90px; } .input-medium { width: 150px; } .input-large { width: 210px; } .input-xlarge { width: 270px; } .input-xxlarge { width: 530px; } input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"] { float: none; margin-left: 0; } .input-append input[class*="span"], .input-append .uneditable-input[class*="span"], .input-prepend input[class*="span"], .input-prepend .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"], .row-fluid .input-prepend [class*="span"], .row-fluid .input-append [class*="span"] { display: inline-block; } input, textarea, .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 20px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 926px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 846px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 766px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 686px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 606px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 526px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 446px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 366px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 286px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 206px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 126px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 46px; } .controls-row { *zoom: 1; } .controls-row:before, .controls-row:after { display: table; content: ""; line-height: 0; } .controls-row:after { clear: both; } .controls-row [class*="span"], .row-fluid .controls-row [class*="span"] { float: left; } .controls-row .checkbox[class*="span"], .controls-row .radio[class*="span"] { padding-top: 5px; } input[disabled], select[disabled], textarea[disabled], input[readonly], select[readonly], textarea[readonly] { cursor: not-allowed; background-color: #eee; } input[type="radio"][disabled], input[type="checkbox"][disabled], input[type="radio"][readonly], input[type="checkbox"][readonly] { background-color: transparent; } .control-group.warning .control-label, .control-group.warning .help-block, .control-group.warning .help-inline { color: #8a6d3b; } .control-group.warning .checkbox, .control-group.warning .radio, .control-group.warning input, .control-group.warning select, .control-group.warning textarea { color: #8a6d3b; } .control-group.warning input, .control-group.warning select, .control-group.warning textarea { border-color: #8a6d3b; } .control-group.warning input:focus, .control-group.warning select:focus, .control-group.warning textarea:focus { border-color: #66512c; } .control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on { color: #8a6d3b; background-color: #fcf8e3; border-color: #8a6d3b; } .control-group.error .control-label, .control-group.error .help-block, .control-group.error .help-inline { color: #a94442; } .control-group.error .checkbox, .control-group.error .radio, .control-group.error input, .control-group.error select, .control-group.error textarea { color: #a94442; } .control-group.error input, .control-group.error select, .control-group.error textarea { border-color: #a94442; } .control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus { border-color: #843534; } .control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on { color: #a94442; background-color: #f2dede; border-color: #a94442; } .control-group.success .control-label, .control-group.success .help-block, .control-group.success .help-inline { color: #3c763d; } .control-group.success .checkbox, .control-group.success .radio, .control-group.success input, .control-group.success select, .control-group.success textarea { color: #3c763d; } .control-group.success input, .control-group.success select, .control-group.success textarea { border-color: #3c763d; } .control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus { border-color: #2b542c; } .control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on { color: #3c763d; background-color: #dff0d8; border-color: #3c763d; } .control-group.info .control-label, .control-group.info .help-block, .control-group.info .help-inline { color: #31708f; } .control-group.info .checkbox, .control-group.info .radio, .control-group.info input, .control-group.info select, .control-group.info textarea { color: #31708f; } .control-group.info input, .control-group.info select, .control-group.info textarea { border-color: #31708f; } .control-group.info input:focus, .control-group.info select:focus, .control-group.info textarea:focus { border-color: #245269; } .control-group.info .input-prepend .add-on, .control-group.info .input-append .add-on { color: #31708f; background-color: #d9edf7; border-color: #31708f; } input:focus:invalid, textarea:focus:invalid, select:focus:invalid { color: #b94a48; border-color: #ee5f5b; } input:focus:invalid:focus, textarea:focus:invalid:focus, select:focus:invalid:focus { border-color: #e9322d; -webkit-box-shadow: 0 0 6px #f8b9b7; -moz-box-shadow: 0 0 6px #f8b9b7; box-shadow: 0 0 6px #f8b9b7; } .form-actions { padding: 17px 20px 18px; margin-top: 18px; margin-bottom: 18px; background-color: #F0F0F0; border-top: 1px solid #e5e5e5; *zoom: 1; } .form-actions:before, .form-actions:after { display: table; content: ""; line-height: 0; } .form-actions:after { clear: both; } .help-block, .help-inline { color: #595959; } .help-block { display: block; margin-bottom: 9px; } .help-inline { display: inline-block; *display: inline; *zoom: 1; vertical-align: middle; padding-left: 5px; } .input-append, .input-prepend { display: inline-block; margin-bottom: 9px; vertical-align: middle; font-size: 0; white-space: nowrap; } .input-append input, .input-append select, .input-append .uneditable-input, .input-append .dropdown-menu, .input-append .popover, .input-prepend input, .input-prepend select, .input-prepend .uneditable-input, .input-prepend .dropdown-menu, .input-prepend .popover { font-size: 13px; } .input-append input, .input-append select, .input-append .uneditable-input, .input-prepend input, .input-prepend select, .input-prepend .uneditable-input { position: relative; margin-bottom: 0; *margin-left: 0; vertical-align: top; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-append input:focus, .input-append select:focus, .input-append .uneditable-input:focus, .input-prepend input:focus, .input-prepend select:focus, .input-prepend .uneditable-input:focus { z-index: 2; } .input-append .add-on, .input-prepend .add-on { display: inline-block; width: auto; height: 18px; min-width: 16px; padding: 4px 5px; font-size: 13px; font-weight: normal; line-height: 18px; text-align: center; text-shadow: 0 1px 0 #fff; background-color: #eee; border: 1px solid #ccc; } .input-append .add-on, .input-append .btn, .input-append .btn-group > .dropdown-toggle, .input-prepend .add-on, .input-prepend .btn, .input-prepend .btn-group > .dropdown-toggle { vertical-align: top; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-prepend .add-on, .input-prepend .btn { margin-right: -1px; } .input-prepend .add-on:first-child, .input-prepend .btn:first-child { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append input, .input-append select, .input-append .uneditable-input { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append input + .btn-group .btn:last-child, .input-append select + .btn-group .btn:last-child, .input-append .uneditable-input + .btn-group .btn:last-child { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-append .add-on, .input-append .btn, .input-append .btn-group { margin-left: -1px; } .input-append .add-on:last-child, .input-append .btn:last-child, .input-append .btn-group:last-child > .dropdown-toggle { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend.input-append input, .input-prepend.input-append select, .input-prepend.input-append .uneditable-input { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-prepend.input-append input + .btn-group .btn, .input-prepend.input-append select + .btn-group .btn, .input-prepend.input-append .uneditable-input + .btn-group .btn { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend.input-append .add-on:first-child, .input-prepend.input-append .btn:first-child { margin-right: -1px; -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-prepend.input-append .add-on:last-child, .input-prepend.input-append .btn:last-child { margin-left: -1px; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend.input-append .btn-group:first-child { margin-left: 0; } input.search-query { padding-right: 14px; padding-right: 4px \9; padding-left: 14px; padding-left: 4px \9; margin-bottom: 0; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; } .form-search .input-append .search-query, .form-search .input-prepend .search-query { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .form-search .input-append .search-query { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .form-search .input-append .btn { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .search-query { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .btn { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .js-stools-field-filter .input-prepend, .js-stools-field-filter .input-append { margin-bottom: 0; } .form-search input, .form-search textarea, .form-search select, .form-search .help-inline, .form-search .uneditable-input, .form-search .input-prepend, .form-search .input-append, .form-inline input, .form-inline textarea, .form-inline select, .form-inline .help-inline, .form-inline .uneditable-input, .form-inline .input-prepend, .form-inline .input-append, .form-horizontal input, .form-horizontal textarea, .form-horizontal select, .form-horizontal .help-inline, .form-horizontal .uneditable-input, .form-horizontal .input-prepend, .form-horizontal .input-append { display: inline-block; *display: inline; *zoom: 1; margin-bottom: 0; vertical-align: middle; } .form-search .hide, .form-inline .hide, .form-horizontal .hide { display: none; } .form-search label, .form-inline label, .form-search .btn-group, .form-inline .btn-group { display: inline-block; } .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend { margin-bottom: 0; } .form-search .radio, .form-search .checkbox, .form-inline .radio, .form-inline .checkbox { padding-left: 0; margin-bottom: 0; vertical-align: middle; } .form-search .radio input[type="radio"], .form-search .checkbox input[type="checkbox"], .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { float: left; margin-right: 3px; margin-left: 0; } .control-group { margin-bottom: 9px; } legend + .control-group { margin-top: 18px; -webkit-margin-top-collapse: separate; } .form-horizontal .control-group { margin-bottom: 18px; *zoom: 1; } .form-horizontal .control-group:before, .form-horizontal .control-group:after { display: table; content: ""; line-height: 0; } .form-horizontal .control-group:after { clear: both; } .form-horizontal .control-label { float: left; width: 160px; padding-top: 5px; text-align: right; } .form-horizontal .controls { *display: inline-block; *padding-left: 20px; margin-left: 180px; *margin-left: 0; } .form-horizontal .controls:first-child { *padding-left: 180px; } .form-horizontal .help-block { margin-bottom: 0; } .form-horizontal input + .help-block, .form-horizontal select + .help-block, .form-horizontal textarea + .help-block, .form-horizontal .uneditable-input + .help-block, .form-horizontal .input-prepend + .help-block, .form-horizontal .input-append + .help-block { margin-top: 9px; } .form-horizontal .form-actions { padding-left: 180px; } .control-label .hasPopover, .control-label .hasTooltip { display: inline-block; } .subform-repeatable-wrapper .btn-group>.btn.button { min-width: 0; } .subform-repeatable-wrapper .ui-sortable-helper { background: #fff; } .subform-repeatable-wrapper tr.ui-sortable-helper { display: table; } @media (min-width: 980px) and (max-width: 1215px) { .float-cols .control-label { float: none; } .float-cols .controls { margin-left: 0; } } table { max-width: 100%; background-color: transparent; border-collapse: collapse; border-spacing: 0; } .table { width: 100%; margin-bottom: 18px; } .table th, .table td { padding: 8px; line-height: 18px; text-align: left; vertical-align: top; border-top: 1px solid #ddd; } .table th { font-weight: bold; } .table thead th { vertical-align: bottom; } .table caption + thead tr:first-child th, .table caption + thead tr:first-child td, .table colgroup + thead tr:first-child th, .table colgroup + thead tr:first-child td, .table thead:first-child tr:first-child th, .table thead:first-child tr:first-child td { border-top: 0; } .table tbody + tbody { border-top: 2px solid #ddd; } .table .table { background-color: #fff; } .table-condensed th, .table-condensed td { padding: 4px 5px; } .table-bordered { border: 1px solid #ddd; border-collapse: separate; *border-collapse: collapse; border-left: 0; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .table-bordered th, .table-bordered td { border-left: 1px solid #ddd; } .table-bordered caption + thead tr:first-child th, .table-bordered caption + tbody tr:first-child th, .table-bordered caption + tbody tr:first-child td, .table-bordered colgroup + thead tr:first-child th, .table-bordered colgroup + tbody tr:first-child th, .table-bordered colgroup + tbody tr:first-child td, .table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child td { border-top: 0; } .table-bordered thead:first-child tr:first-child > th:first-child, .table-bordered tbody:first-child tr:first-child > td:first-child, .table-bordered tbody:first-child tr:first-child > th:first-child { -webkit-border-top-left-radius: 3px; -moz-border-radius-topleft: 3px; border-top-left-radius: 3px; } .table-bordered thead:first-child tr:first-child > th:last-child, .table-bordered tbody:first-child tr:first-child > td:last-child, .table-bordered tbody:first-child tr:first-child > th:last-child { -webkit-border-top-right-radius: 3px; -moz-border-radius-topright: 3px; border-top-right-radius: 3px; } .table-bordered thead:last-child tr:last-child > th:first-child, .table-bordered tbody:last-child tr:last-child > td:first-child, .table-bordered tbody:last-child tr:last-child > th:first-child, .table-bordered tfoot:last-child tr:last-child > td:first-child, .table-bordered tfoot:last-child tr:last-child > th:first-child { -webkit-border-bottom-left-radius: 3px; -moz-border-radius-bottomleft: 3px; border-bottom-left-radius: 3px; } .table-bordered thead:last-child tr:last-child > th:last-child, .table-bordered tbody:last-child tr:last-child > td:last-child, .table-bordered tbody:last-child tr:last-child > th:last-child, .table-bordered tfoot:last-child tr:last-child > td:last-child, .table-bordered tfoot:last-child tr:last-child > th:last-child { -webkit-border-bottom-right-radius: 3px; -moz-border-radius-bottomright: 3px; border-bottom-right-radius: 3px; } .table-bordered tfoot + tbody:last-child tr:last-child td:first-child { -webkit-border-bottom-left-radius: 0; -moz-border-radius-bottomleft: 0; border-bottom-left-radius: 0; } .table-bordered tfoot + tbody:last-child tr:last-child td:last-child { -webkit-border-bottom-right-radius: 0; -moz-border-radius-bottomright: 0; border-bottom-right-radius: 0; } .table-bordered caption + thead tr:first-child th:first-child, .table-bordered caption + tbody tr:first-child td:first-child, .table-bordered colgroup + thead tr:first-child th:first-child, .table-bordered colgroup + tbody tr:first-child td:first-child { -webkit-border-top-left-radius: 3px; -moz-border-radius-topleft: 3px; border-top-left-radius: 3px; } .table-bordered caption + thead tr:first-child th:last-child, .table-bordered caption + tbody tr:first-child td:last-child, .table-bordered colgroup + thead tr:first-child th:last-child, .table-bordered colgroup + tbody tr:first-child td:last-child { -webkit-border-top-right-radius: 3px; -moz-border-radius-topright: 3px; border-top-right-radius: 3px; } .table-striped tbody > tr:nth-child(odd) > td, .table-striped tbody > tr:nth-child(odd) > th { background-color: #f9f9f9; } .table-hover tbody tr:hover > td, .table-hover tbody tr:hover > th { background-color: #F0F0F0; } table td[class*="span"], table th[class*="span"], .row-fluid table td[class*="span"], .row-fluid table th[class*="span"] { display: table-cell; float: none; margin-left: 0; } .table td.span1, .table th.span1 { float: none; width: 44px; margin-left: 0; } .table td.span2, .table th.span2 { float: none; width: 124px; margin-left: 0; } .table td.span3, .table th.span3 { float: none; width: 204px; margin-left: 0; } .table td.span4, .table th.span4 { float: none; width: 284px; margin-left: 0; } .table td.span5, .table th.span5 { float: none; width: 364px; margin-left: 0; } .table td.span6, .table th.span6 { float: none; width: 444px; margin-left: 0; } .table td.span7, .table th.span7 { float: none; width: 524px; margin-left: 0; } .table td.span8, .table th.span8 { float: none; width: 604px; margin-left: 0; } .table td.span9, .table th.span9 { float: none; width: 684px; margin-left: 0; } .table td.span10, .table th.span10 { float: none; width: 764px; margin-left: 0; } .table td.span11, .table th.span11 { float: none; width: 844px; margin-left: 0; } .table td.span12, .table th.span12 { float: none; width: 924px; margin-left: 0; } .table tbody tr.success > td { background-color: #dff0d8; } .table tbody tr.error > td { background-color: #f2dede; } .table tbody tr.warning > td { background-color: #fcf8e3; } .table tbody tr.info > td { background-color: #d9edf7; } .table-hover tbody tr.success:hover > td { background-color: #d0e9c6; } .table-hover tbody tr.error:hover > td { background-color: #ebcccc; } .table-hover tbody tr.warning:hover > td { background-color: #faf2cc; } .table-hover tbody tr.info:hover > td { background-color: #c4e3f3; } .table-noheader { border-collapse: collapse; } .table-noheader thead { display: none; } .dropup, .dropdown { position: relative; } .dropdown-toggle { *margin-bottom: -3px; } .dropdown-toggle:active, .open .dropdown-toggle { outline: 0; } .caret { display: inline-block; width: 0; height: 0; vertical-align: top; border-top: 4px solid #000; border-right: 4px solid transparent; border-left: 4px solid transparent; content: ""; } .dropdown .caret { margin-top: 8px; margin-left: 2px; } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; list-style: none; background-color: #fff; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,0.2); *border-right-width: 2px; *border-bottom-width: 2px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2); -moz-box-shadow: 0 5px 10px rgba(0,0,0,0.2); box-shadow: 0 5px 10px rgba(0,0,0,0.2); -webkit-background-clip: padding-box; -moz-background-clip: padding; background-clip: padding-box; } .dropdown-menu.pull-right { right: 0; left: auto; } .dropdown-menu .divider { *width: 100%; height: 1px; margin: 8px 1px; *margin: -5px 0 5px; overflow: hidden; background-color: #F0F0F0; border-bottom: 1px solid #fff; } .dropdown-menu .menuitem-group { margin: 4px 1px; overflow: hidden; border-top: 1px solid #eee; border-bottom: 1px solid #eee; background-color: #eee; color: #555; text-transform: capitalize; font-size: 95%; padding: 3px 20px; } .dropdown-menu > li > a { display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 18px; color: #333; white-space: nowrap; } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus, .dropdown-submenu:hover > a, .dropdown-submenu:focus > a { text-decoration: none; color: #fff; background-color: #2d6ca2; background-image: -moz-linear-gradient(top,#3071a9,#2a6496); background-image: -webkit-gradient(linear,0 0,0 100%,from(#3071a9),to(#2a6496)); background-image: -webkit-linear-gradient(top,#3071a9,#2a6496); background-image: -o-linear-gradient(top,#3071a9,#2a6496); background-image: linear-gradient(to bottom,#3071a9,#2a6496); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2f70a9', endColorstr='#ff296395', GradientType=0); } .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { color: #333; text-decoration: none; outline: 0; background-color: #2d6ca2; background-image: -moz-linear-gradient(top,#3071a9,#2a6496); background-image: -webkit-gradient(linear,0 0,0 100%,from(#3071a9),to(#2a6496)); background-image: -webkit-linear-gradient(top,#3071a9,#2a6496); background-image: -o-linear-gradient(top,#3071a9,#2a6496); background-image: linear-gradient(to bottom,#3071a9,#2a6496); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2f70a9', endColorstr='#ff296395', GradientType=0); } .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { color: #999; } .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { text-decoration: none; background-color: transparent; background-image: none; filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); cursor: default; } .open { *z-index: 1000; } .open > .dropdown-menu { display: block; } .dropdown-backdrop { position: fixed; left: 0; right: 0; bottom: 0; top: 0; z-index: 990; } .pull-right > .dropdown-menu { right: 0; left: auto; } .dropup .caret, .navbar-fixed-bottom .dropdown .caret { border-top: 0; border-bottom: 4px solid #000; content: ""; } .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; margin-bottom: 1px; } .dropdown-submenu { position: relative; } .dropdown-submenu > .dropdown-menu { top: 0; left: 100%; margin-top: -6px; margin-left: -1px; -webkit-border-radius: 6px 6px 6px 6px; -moz-border-radius: 6px 6px 6px 6px; border-radius: 6px 6px 6px 6px; } .dropdown-submenu:hover > .dropdown-menu { display: block; } .dropup .dropdown-submenu > .dropdown-menu { top: auto; bottom: 0; margin-top: 0; margin-bottom: -2px; -webkit-border-radius: 5px 5px 5px 0; -moz-border-radius: 5px 5px 5px 0; border-radius: 5px 5px 5px 0; } .dropdown-submenu > a:after { display: block; content: " "; float: right; width: 0; height: 0; border-color: transparent; border-style: solid; border-width: 5px 0 5px 5px; border-left-color: #cccccc; margin-top: 5px; margin-right: -10px; } .dropdown-submenu:hover > a:after { border-left-color: #fff; } .dropdown-submenu.pull-left { float: none; } .dropdown-submenu.pull-left > .dropdown-menu { left: -100%; margin-left: 10px; -webkit-border-radius: 6px 0 6px 6px; -moz-border-radius: 6px 0 6px 6px; border-radius: 6px 0 6px 6px; } .dropdown .dropdown-menu .nav-header { padding-left: 20px; padding-right: 20px; } .typeahead { z-index: 1051; margin-top: 2px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .well { min-height: 20px; padding: 19px; margin-bottom: 20px; background-color: #F0F0F0; border: 1px solid #F0F0F0; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .well blockquote { border-color: #f0f0f0; border-color: rgba(0,0,0,0.15); } .well-large { padding: 24px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .well-small { padding: 9px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .fade { opacity: 0; -webkit-transition: opacity .15s linear; -moz-transition: opacity .15s linear; -o-transition: opacity .15s linear; transition: opacity .15s linear; } .fade.in { opacity: 1; } .collapse { position: relative; height: 0; overflow: hidden; -webkit-transition: height .35s ease; -moz-transition: height .35s ease; -o-transition: height .35s ease; transition: height .35s ease; } .collapse.in { height: auto; } .close { float: right; font-size: 20px; font-weight: bold; line-height: 18px; color: #000; text-shadow: 0 1px 0 #ffffff; opacity: 0.2; filter: alpha(opacity=20); } .close:hover, .close:focus { color: #000; text-decoration: none; cursor: pointer; opacity: 0.4; filter: alpha(opacity=40); } button.close { padding: 3; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; } .alert-options { float: right; line-height: 18px; color: #000; text-shadow: 0 1px 0 #ffffff; opacity: 0.2; filter: alpha(opacity=20); } .alert-options:hover, .alert-options:focus { color: #000; text-decoration: none; cursor: pointer; opacity: 0.4; filter: alpha(opacity=40); } .btn { display: inline-block; *display: inline; *zoom: 1; padding: 4px 12px; margin-bottom: 0; font-size: 13px; line-height: 18px; text-align: center; vertical-align: middle; cursor: pointer; background-color: #f3f3f3; color: #333; border: 1px solid #b3b3b3; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; box-shadow: 0 1px 2px rgba(0,0,0,0.05); } .btn:hover, .btn:focus { background-color: #e6e6e6; text-decoration: none; text-shadow: none; } .btn:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .btn.active, .btn:active { background-image: none; outline: 0; } .btn.disabled, .btn[disabled] { cursor: default; background-image: none; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .btn-large { padding: 11px 19px; font-size: 16.25px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .btn-large [class^="icon-"], .btn-large [class*=" icon-"] { margin-top: 4px; } .btn-small { padding: 2px 10px; font-size: 12px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .btn-small [class^="icon-"], .btn-small [class*=" icon-"] { margin-top: 0; } .btn-mini [class^="icon-"], .btn-mini [class*=" icon-"] { margin-top: -1px; } .btn-mini { padding: 0 6px; font-size: 9.75px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .btn-block { display: block; width: 100%; padding-left: 0; padding-right: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .btn-block + .btn-block { margin-top: 5px; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } .btn-primary, .btn-warning, .btn-danger, .btn-success, .btn-info, .btn-inverse { box-shadow: 0 1px 2px rgba(0,0,0,0.05); } .btn-primary { border: 1px solid #15497c; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #2384d3; } .btn-primary:hover, .btn-primary:focus { background-color: #185b91; color: #fff; text-decoration: none; } .btn-warning { border: 1px solid #f89406; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #f89406; } .btn-warning:hover, .btn-warning:focus { background-color: #ad6704; color: #fff; text-decoration: none; text-shadow: none; } .btn-danger { border: 1px solid #bd362f; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #bd362f; } .btn-danger:hover, .btn-danger:focus { background-color: #802420; color: #fff; text-decoration: none; } .btn-success { border: 1px solid #378137; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #46a546; } .btn-success:hover, .btn-success:focus { background-color: #2f6f2f; color: #fff; text-decoration: none; } .btn-info { border: 1px solid #2f96b4; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #2f96b4; } .btn-info:hover, .btn-info:focus { background-color: #1f6377; color: #fff; text-decoration: none; } .btn-inverse { border: 1px solid #444; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #444; } .btn-inverse:hover, .btn-inverse:focus { background-color: #1e1e1e; color: #fff; text-decoration: none; } button.btn, input[type="submit"].btn { *padding-top: 3px; *padding-bottom: 3px; } button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner { padding: 0; border: 0; } button.btn.btn-large, input[type="submit"].btn.btn-large { *padding-top: 7px; *padding-bottom: 7px; } button.btn.btn-small, input[type="submit"].btn.btn-small { *padding-top: 3px; *padding-bottom: 3px; } button.btn.btn-mini, input[type="submit"].btn.btn-mini { *padding-top: 1px; *padding-bottom: 1px; } .btn-link, .btn-link:active, .btn-link[disabled] { background-color: transparent; background-image: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .btn-link { border-color: transparent; cursor: pointer; color: #3071a9; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .btn-link:hover, .btn-link:focus { color: #1f496e; text-decoration: underline; background-color: transparent; } .btn-link[disabled]:hover, .btn-link[disabled]:focus { color: #333; text-decoration: none; } .btn-group { position: relative; display: inline-block; *display: inline; *zoom: 1; font-size: 0; vertical-align: middle; white-space: nowrap; *margin-left: .3em; } .btn-group:first-child { *margin-left: 0; } .btn-group .btn + .btn { margin-left: -1px; } .btn-group + .btn-group { margin-left: 5px; } .btn-toolbar { font-size: 0; margin-top: 9px; margin-bottom: 9px; } .btn-toolbar > .btn + .btn, .btn-toolbar > .btn-group + .btn, .btn-toolbar > .btn + .btn-group { margin-left: 5px; } .btn-group > .btn { position: relative; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .btn-group > .btn-micro { margin-left: -1px; } .btn-group > .btn, .btn-group > .dropdown-menu, .btn-group > .popover { font-size: 13px; } .btn-group > .btn-mini { font-size: 9.75px; } .btn-group > .btn-small { font-size: 12px; } .btn-group > .btn-large { font-size: 16.25px; } .btn-group > .btn:first-child { margin-left: 0; -webkit-border-top-left-radius: 3px; -moz-border-radius-topleft: 3px; border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px; -moz-border-radius-bottomleft: 3px; border-bottom-left-radius: 3px; } .btn-group > .btn:last-child, .btn-group > .dropdown-toggle { -webkit-border-top-right-radius: 3px; -moz-border-radius-topright: 3px; border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; -moz-border-radius-bottomright: 3px; border-bottom-right-radius: 3px; } .btn-group > .btn.large:first-child { margin-left: 0; -webkit-border-top-left-radius: 6px; -moz-border-radius-topleft: 6px; border-top-left-radius: 6px; -webkit-border-bottom-left-radius: 6px; -moz-border-radius-bottomleft: 6px; border-bottom-left-radius: 6px; } .btn-group > .btn.large:last-child, .btn-group > .large.dropdown-toggle { -webkit-border-top-right-radius: 6px; -moz-border-radius-topright: 6px; border-top-right-radius: 6px; -webkit-border-bottom-right-radius: 6px; -moz-border-radius-bottomright: 6px; border-bottom-right-radius: 6px; } .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active { z-index: 2; } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } .btn-group > .btn + .dropdown-toggle { padding-left: 8px; padding-right: 8px; *padding-top: 5px; *padding-bottom: 5px; } .btn-group > .btn-mini + .dropdown-toggle { padding-left: 5px; padding-right: 5px; *padding-top: 2px; *padding-bottom: 2px; } .btn-group > .btn-small + .dropdown-toggle { *padding-top: 5px; *padding-bottom: 4px; } .btn-group > .btn-large + .dropdown-toggle { padding-left: 12px; padding-right: 12px; *padding-top: 7px; *padding-bottom: 7px; } .btn-group.open .dropdown-toggle { background-image: none; } .btn-group.open .btn.dropdown-toggle { background-color: #e6e6e6; } .btn-group.open .btn-primary.dropdown-toggle { background-color: #15497c; } .btn-group.open .btn-warning.dropdown-toggle { background-color: #c67605; } .btn-group.open .btn-danger.dropdown-toggle { background-color: #942a25; } .btn-group.open .btn-success.dropdown-toggle { background-color: #378137; } .btn-group.open .btn-info.dropdown-toggle { background-color: #24748c; } .btn-group.open .btn-inverse.dropdown-toggle { background-color: #222; } .btn .caret { margin-top: 8px; margin-left: 0; } .btn-large .caret { margin-top: 6px; } .btn-large .caret { border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; } .btn-mini .caret, .btn-small .caret { margin-top: 8px; } .dropup .btn-large .caret { border-bottom-width: 5px; } .btn-primary .caret { border-top-color: #1f496e; border-bottom-color: #1f496e; } .btn-warning .caret, .btn-danger .caret, .btn-info .caret, .btn-success .caret, .btn-inverse .caret { border-top-color: #fff; border-bottom-color: #fff; } .btn-group-vertical { display: inline-block; *display: inline; *zoom: 1; } .btn-group-vertical > .btn { display: block; float: none; max-width: 100%; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .btn-group-vertical > .btn + .btn { margin-left: 0; margin-top: -1px; } .btn-group-vertical > .btn:first-child { -webkit-border-radius: 3px 3px 0 0; -moz-border-radius: 3px 3px 0 0; border-radius: 3px 3px 0 0; } .btn-group-vertical > .btn:last-child { -webkit-border-radius: 0 0 3px 3px; -moz-border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px; } .btn-group-vertical > .btn-large:first-child { -webkit-border-radius: 6px 6px 0 0; -moz-border-radius: 6px 6px 0 0; border-radius: 6px 6px 0 0; } .btn-group-vertical > .btn-large:last-child { -webkit-border-radius: 0 0 6px 6px; -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; } .alert { padding: 8px 35px 8px 14px; margin-bottom: 18px; text-shadow: 0 1px 0 rgba(255,255,255,0.5); background-color: #fcf8e3; border: 1px solid #faebcc; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .alert, .alert h4 { color: #8a6d3b; } .alert h4 { margin: 0 0 .5em; } .alert .close { position: relative; top: -2px; right: -21px; line-height: 18px; cursor: pointer; } .alert-success { background-color: #dff0d8; border-color: #d6e9c6; color: #3c763d; } .alert-success h4 { color: #3c763d; } .alert-danger, .alert-error { background-color: #f2dede; border-color: #ebccd1; color: #a94442; } .alert-danger h4, .alert-error h4 { color: #a94442; } .alert-info { background-color: #d9edf7; border-color: #bce8f1; color: #31708f; } .alert-info h4 { color: #31708f; } .alert-block { padding-top: 14px; padding-bottom: 14px; } .alert-block > p, .alert-block > ul { margin-bottom: 0; } .alert-block p + p { margin-top: 5px; } .nav { margin-left: 0; margin-bottom: 18px; list-style: none; } .nav > li > a { display: block; } .nav > li > a:hover, .nav > li > a:focus { text-decoration: none; background-color: #eee; } .nav > li > a > img { max-width: none; } .nav > .pull-right { float: right; } .nav-header { display: block; padding: 3px 15px; font-size: 11px; font-weight: bold; line-height: 18px; color: #999; text-shadow: 0 1px 0 rgba(255,255,255,0.5); text-transform: uppercase; } .nav li + .nav-header { margin-top: 9px; } .nav-list { padding-left: 15px; padding-right: 15px; margin-bottom: 0; } .nav-list > li > a, .nav-list .nav-header { margin-left: -15px; margin-right: -15px; text-shadow: 0 1px 0 rgba(255,255,255,0.5); } .nav-list > li > a { padding: 3px 15px; } .nav-list > .active > a, .nav-list > .active > a:hover, .nav-list > .active > a:focus { color: #fff; text-shadow: 0 -1px 0 rgba(0,0,0,0.2); background-color: #3071a9; } .nav-list [class^="icon-"], .nav-list [class*=" icon-"] { margin-right: 2px; } .nav-list .divider { *width: 100%; height: 1px; margin: 8px 1px; *margin: -5px 0 5px; overflow: hidden; background-color: #e5e5e5; border-bottom: 1px solid #fff; } .nav-tabs, .nav-pills { *zoom: 1; } .nav-tabs:before, .nav-tabs:after, .nav-pills:before, .nav-pills:after { display: table; content: ""; line-height: 0; } .nav-tabs:after, .nav-pills:after { clear: both; } .nav-tabs > li, .nav-pills > li { float: left; } .nav-tabs > li > a, .nav-pills > li > a { padding-right: 12px; padding-left: 12px; margin-right: 2px; line-height: 14px; } .nav-tabs { border-bottom: 1px solid #ddd; } .nav-tabs > li { margin-bottom: -1px; } .nav-tabs > li > a { padding-top: 8px; padding-bottom: 8px; line-height: 18px; border: 1px solid transparent; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } .nav-tabs > li > a:hover, .nav-tabs > li > a:focus { border-color: #eee #eee #ddd; } .nav-tabs > .active > a, .nav-tabs > .active > a:hover, .nav-tabs > .active > a:focus { color: #555; background-color: #fff; border: 1px solid #ddd; border-bottom-color: transparent; cursor: default; } .nav-pills > li > a { padding-top: 8px; padding-bottom: 8px; margin-top: 2px; margin-bottom: 2px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .nav-pills > .active > a, .nav-pills > .active > a:hover, .nav-pills > .active > a:focus { color: #fff; background-color: #3071a9; } .nav-stacked > li { float: none; } .nav-stacked > li > a { margin-right: 0; } .nav-tabs.nav-stacked { border-bottom: 0; } .nav-tabs.nav-stacked > li > a { border: 1px solid #ddd; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .nav-tabs.nav-stacked > li:first-child > a { -webkit-border-top-right-radius: 4px; -moz-border-radius-topright: 4px; border-top-right-radius: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topleft: 4px; border-top-left-radius: 4px; } .nav-tabs.nav-stacked > li:last-child > a { -webkit-border-bottom-right-radius: 4px; -moz-border-radius-bottomright: 4px; border-bottom-right-radius: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomleft: 4px; border-bottom-left-radius: 4px; } .nav-tabs.nav-stacked > li > a:hover, .nav-tabs.nav-stacked > li > a:focus { border-color: #ddd; z-index: 2; } .nav-pills.nav-stacked > li > a { margin-bottom: 3px; } .nav-pills.nav-stacked > li:last-child > a { margin-bottom: 1px; } .nav-tabs .dropdown-menu { -webkit-border-radius: 0 0 6px 6px; -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; } .nav-pills .dropdown-menu { -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .nav .dropdown-toggle .caret { border-top-color: #3071a9; border-bottom-color: #3071a9; margin-top: 6px; } .nav .dropdown-toggle:hover .caret, .nav .dropdown-toggle:focus .caret { border-top-color: #1f496e; border-bottom-color: #1f496e; } .nav-tabs .dropdown-toggle .caret { margin-top: 8px; } .nav .active .dropdown-toggle .caret { border-top-color: #fff; border-bottom-color: #fff; } .nav-tabs .active .dropdown-toggle .caret { border-top-color: #555; border-bottom-color: #555; } .nav > .dropdown.active > a:hover, .nav > .dropdown.active > a:focus { cursor: pointer; } .nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > li.dropdown.open.active > a:hover, .nav > li.dropdown.open.active > a:focus { color: #fff; background-color: #999; border-color: #999; } .nav li.dropdown.open .caret, .nav li.dropdown.open.active .caret, .nav li.dropdown.open a:hover .caret, .nav li.dropdown.open a:focus .caret { border-top-color: #fff; border-bottom-color: #fff; opacity: 1; filter: alpha(opacity=100); } .tabs-stacked .open > a:hover, .tabs-stacked .open > a:focus { border-color: #999; } .tabbable { *zoom: 1; } .tabbable:before, .tabbable:after { display: table; content: ""; line-height: 0; } .tabbable:after { clear: both; } .tab-content { overflow: auto; } .tabs-below > .nav-tabs, .tabs-right > .nav-tabs, .tabs-left > .nav-tabs { border-bottom: 0; } .tab-content > .tab-pane, .pill-content > .pill-pane { display: none; } .tab-content > .active, .pill-content > .active { display: block; } .tabs-below > .nav-tabs { border-top: 1px solid #ddd; } .tabs-below > .nav-tabs > li { margin-top: -1px; margin-bottom: 0; } .tabs-below > .nav-tabs > li > a { -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; } .tabs-below > .nav-tabs > li > a:hover, .tabs-below > .nav-tabs > li > a:focus { border-bottom-color: transparent; border-top-color: #ddd; } .tabs-below > .nav-tabs > .active > a, .tabs-below > .nav-tabs > .active > a:hover, .tabs-below > .nav-tabs > .active > a:focus { border-color: transparent #ddd #ddd #ddd; } .tabs-left > .nav-tabs > li, .tabs-right > .nav-tabs > li { float: none; } .tabs-left > .nav-tabs > li > a, .tabs-right > .nav-tabs > li > a { min-width: 74px; margin-right: 0; margin-bottom: 3px; } .tabs-left > .nav-tabs { float: left; margin-right: 19px; border-right: 1px solid #ddd; } .tabs-left > .nav-tabs > li > a { margin-right: -1px; -webkit-border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px; } .tabs-left > .nav-tabs > li > a:hover, .tabs-left > .nav-tabs > li > a:focus { border-color: #eee #ddd #eee #eee; } .tabs-left > .nav-tabs .active > a, .tabs-left > .nav-tabs .active > a:hover, .tabs-left > .nav-tabs .active > a:focus { border-color: #ddd transparent #ddd #ddd; *border-right-color: #fff; } .tabs-right > .nav-tabs { float: right; margin-left: 19px; border-left: 1px solid #ddd; } .tabs-right > .nav-tabs > li > a { margin-left: -1px; -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } .tabs-right > .nav-tabs > li > a:hover, .tabs-right > .nav-tabs > li > a:focus { border-color: #eee #eee #eee #ddd; } .tabs-right > .nav-tabs .active > a, .tabs-right > .nav-tabs .active > a:hover, .tabs-right > .nav-tabs .active > a:focus { border-color: #ddd #ddd #ddd transparent; *border-left-color: #fff; } .nav > .disabled > a { color: #999; } .nav > .disabled > a:hover, .nav > .disabled > a:focus { text-decoration: none; background-color: transparent; cursor: default; } .navbar { overflow: visible; margin-bottom: 18px; *position: relative; *z-index: 2; } .navbar-inner { min-height: 40px; padding-left: 20px; padding-right: 20px; background-color: #fafafa; background-image: -moz-linear-gradient(top,#ffffff,#f2f2f2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#ffffff),to(#f2f2f2)); background-image: -webkit-linear-gradient(top,#ffffff,#f2f2f2); background-image: -o-linear-gradient(top,#ffffff,#f2f2f2); background-image: linear-gradient(to bottom,#ffffff,#f2f2f2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); border: 1px solid #d4d4d4; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 4px rgba(0,0,0,0.065); -moz-box-shadow: 0 1px 4px rgba(0,0,0,0.065); box-shadow: 0 1px 4px rgba(0,0,0,0.065); *zoom: 1; } .navbar-inner:before, .navbar-inner:after { display: table; content: ""; line-height: 0; } .navbar-inner:after { clear: both; } .navbar .container { width: auto; } .nav-collapse.collapse { height: auto; overflow: visible; } .navbar .brand { float: left; display: block; padding: 11px 20px 11px; margin-left: -20px; font-size: 20px; font-weight: 200; color: #555; text-shadow: 0 1px 0 #ffffff; } .navbar .brand:hover, .navbar .brand:focus { text-decoration: none; } .navbar-text { margin-bottom: 0; line-height: 40px; color: #555; } .navbar-link { color: #555; } .navbar-link:hover, .navbar-link:focus { color: #333; } .navbar .divider-vertical { height: 40px; margin: 0 9px; border-left: 1px solid #f2f2f2; border-right: 1px solid #ffffff; } .navbar .btn, .navbar .btn-group { margin-top: 5px; } .navbar .btn-group .btn, .navbar .input-prepend .btn, .navbar .input-append .btn, .navbar .input-prepend .btn-group, .navbar .input-append .btn-group { margin-top: 0; } .navbar-form { margin-bottom: 0; *zoom: 1; } .navbar-form:before, .navbar-form:after { display: table; content: ""; line-height: 0; } .navbar-form:after { clear: both; } .navbar-form input, .navbar-form select, .navbar-form .radio, .navbar-form .checkbox { margin-top: 5px; } .navbar-form input, .navbar-form select, .navbar-form .btn { display: inline-block; margin-bottom: 0; } .navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] { margin-top: 3px; } .navbar-form .input-append, .navbar-form .input-prepend { margin-top: 5px; white-space: nowrap; } .navbar-form .input-append input, .navbar-form .input-prepend input { margin-top: 0; } .navbar-search { position: relative; float: left; margin-top: 5px; margin-bottom: 0; } .navbar-search .search-query { margin-bottom: 0; padding: 4px 14px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 13px; font-weight: normal; line-height: 1; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; } .navbar-static-top { position: static; margin-bottom: 0; } .navbar-static-top .navbar-inner { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .navbar-fixed-top, .navbar-fixed-bottom { position: fixed; right: 0; left: 0; z-index: 1030; margin-bottom: 0; } .navbar-fixed-top .navbar-inner, .navbar-static-top .navbar-inner { border-width: 0 0 1px; } .navbar-fixed-bottom .navbar-inner { border-width: 1px 0 0; } .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner { padding-left: 0; padding-right: 0; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 940px; } .navbar-fixed-top { top: 0; } .navbar-fixed-top .navbar-inner, .navbar-static-top .navbar-inner { -webkit-box-shadow: 0 1px 10px rgba(0,0,0,.1); -moz-box-shadow: 0 1px 10px rgba(0,0,0,.1); box-shadow: 0 1px 10px rgba(0,0,0,.1); } .navbar-fixed-bottom { bottom: 0; } .navbar-fixed-bottom .navbar-inner { -webkit-box-shadow: 0 -1px 10px rgba(0,0,0,.1); -moz-box-shadow: 0 -1px 10px rgba(0,0,0,.1); box-shadow: 0 -1px 10px rgba(0,0,0,.1); } .navbar .nav { position: relative; left: 0; display: block; float: left; margin: 0 10px 0 0; } .navbar .nav.pull-right { float: right; margin-right: 0; } .navbar .nav > li { float: left; } .navbar .nav > li > a { float: none; padding: 11px 15px 11px; color: #555; text-decoration: none; text-shadow: 0 1px 0 #ffffff; } .navbar .nav .dropdown-toggle .caret { margin-top: 8px; } .navbar .nav > li > a:focus, .navbar .nav > li > a:hover { background-color: transparent; color: #333; text-decoration: none; } .navbar .nav > li > a:focus { outline: 2px solid #5e9ed6; } .navbar .nav > .active > a, .navbar .nav > .active > a:hover, .navbar .nav > .active > a:focus { color: #555; text-decoration: none; background-color: #e6e6e6; -webkit-box-shadow: inset 0 3px 8px rgba(0,0,0,0.125); -moz-box-shadow: inset 0 3px 8px rgba(0,0,0,0.125); box-shadow: inset 0 3px 8px rgba(0,0,0,0.125); } .navbar .btn-navbar { display: none; float: right; padding: 7px 10px; margin-left: 5px; margin-right: 5px; background-color: #f2f2f2; *background-color: #f2f2f2; -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); } .navbar .btn-navbar:hover, .navbar .btn-navbar:focus, .navbar .btn-navbar:active, .navbar .btn-navbar.active, .navbar .btn-navbar.disabled, .navbar .btn-navbar[disabled] { color: #fff; background-color: #d9d9d9; *background-color: #d9d9d9; } .navbar .btn-navbar:active, .navbar .btn-navbar.active { background-color: #f2f2f2; } .navbar .btn-navbar .icon-bar { display: block; width: 18px; height: 2px; background-color: #f5f5f5; -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px; -webkit-box-shadow: 0 1px 0 rgba(0,0,0,0.25); -moz-box-shadow: 0 1px 0 rgba(0,0,0,0.25); box-shadow: 0 1px 0 rgba(0,0,0,0.25); } .btn-navbar .icon-bar + .icon-bar { margin-top: 3px; } .navbar .nav > li > .dropdown-menu:before { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 7px solid #ccc; border-bottom-color: rgba(0,0,0,0.2); position: absolute; top: -7px; left: 9px; } .navbar .nav > li > .dropdown-menu:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #fff; position: absolute; top: -6px; left: 10px; } .navbar-fixed-bottom .nav > li > .dropdown-menu:before { border-top: 7px solid #ccc; border-top-color: rgba(0,0,0,0.2); border-bottom: 0; bottom: -7px; top: auto; } .navbar-fixed-bottom .nav > li > .dropdown-menu:after { border-top: 6px solid #fff; border-bottom: 0; bottom: -6px; top: auto; } .navbar .nav li.dropdown > a:hover .caret, .navbar .nav li.dropdown > a:focus .caret { border-top-color: #333; border-bottom-color: #333; } .navbar .nav li.dropdown.open > .dropdown-toggle, .navbar .nav li.dropdown.active > .dropdown-toggle, .navbar .nav li.dropdown.open.active > .dropdown-toggle { background-color: #e6e6e6; color: #555; } .navbar .nav li.dropdown > .dropdown-toggle .caret { border-top-color: #555; border-bottom-color: #555; } .navbar .nav li.dropdown.open > .dropdown-toggle .caret, .navbar .nav li.dropdown.active > .dropdown-toggle .caret, .navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { border-top-color: #555; border-bottom-color: #555; } .navbar .pull-right > li > .dropdown-menu, .navbar .nav > li > .dropdown-menu.pull-right { left: auto; right: 0; } .navbar .pull-right > li > .dropdown-menu:before, .navbar .nav > li > .dropdown-menu.pull-right:before { left: auto; right: 12px; } .navbar .pull-right > li > .dropdown-menu:after, .navbar .nav > li > .dropdown-menu.pull-right:after { left: auto; right: 13px; } .navbar .pull-right > li > .dropdown-menu .dropdown-menu, .navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { left: auto; right: 100%; margin-left: 0; margin-right: -1px; -webkit-border-radius: 6px 0 6px 6px; -moz-border-radius: 6px 0 6px 6px; border-radius: 6px 0 6px 6px; } .navbar-inverse .navbar-inner { background-color: #13294a; background-image: -moz-linear-gradient(top,#152d53,#10223e); background-image: -webkit-gradient(linear,0 0,0 100%,from(#152d53),to(#10223e)); background-image: -webkit-linear-gradient(top,#152d53,#10223e); background-image: -o-linear-gradient(top,#152d53,#10223e); background-image: linear-gradient(to bottom,#152d53,#10223e); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff142c52', endColorstr='#ff0f213e', GradientType=0); border-color: #0b172a; } .navbar-inverse .brand, .navbar-inverse .nav > li > a { color: #d9d9d9; text-shadow: 0 -1px 0 rgba(0,0,0,0.25); } .navbar-inverse .brand:hover, .navbar-inverse .brand:focus, .navbar-inverse .nav > li > a:hover, .navbar-inverse .nav > li > a:focus { color: #fff; } .navbar-inverse .brand { color: #d9d9d9; } .navbar-inverse .navbar-text { color: #d9d9d9; } .navbar-inverse .nav > li > a:focus, .navbar-inverse .nav > li > a:hover { background-color: transparent; color: #fff; } .navbar-inverse .nav .active > a, .navbar-inverse .nav .active > a:hover, .navbar-inverse .nav .active > a:focus { color: #fff; background-color: #10223e; } .navbar-inverse .navbar-link { color: #d9d9d9; } .navbar-inverse .navbar-link:hover, .navbar-inverse .navbar-link:focus { color: #fff; } .navbar-inverse .divider-vertical { border-left-color: #10223e; border-right-color: #152d53; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { background-color: #10223e; color: #fff; } .navbar-inverse .nav li.dropdown > a:hover .caret, .navbar-inverse .nav li.dropdown > a:focus .caret { border-top-color: #fff; border-bottom-color: #fff; } .navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { border-top-color: #d9d9d9; border-bottom-color: #d9d9d9; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { border-top-color: #fff; border-bottom-color: #fff; } .navbar-inverse .navbar-search .search-query { color: #fff; background-color: #2959a4; border-color: #10223e; -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); -webkit-transition: none; -moz-transition: none; -o-transition: none; transition: none; } .navbar-inverse .navbar-search .search-query:-moz-placeholder { color: #ccc; } .navbar-inverse .navbar-search .search-query:-ms-input-placeholder { color: #ccc; } .navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { color: #ccc; } .navbar-inverse .navbar-search .search-query:focus, .navbar-inverse .navbar-search .search-query.focused { padding: 5px 15px; color: #333; text-shadow: 0 1px 0 #fff; background-color: #fff; border: 0; -webkit-box-shadow: 0 0 3px rgba(0,0,0,0.15); -moz-box-shadow: 0 0 3px rgba(0,0,0,0.15); box-shadow: 0 0 3px rgba(0,0,0,0.15); outline: 0; } .navbar-inverse .btn-navbar { background-color: #10223e; *background-color: #10223e; } .navbar-inverse .btn-navbar:hover, .navbar-inverse .btn-navbar:focus, .navbar-inverse .btn-navbar:active, .navbar-inverse .btn-navbar.active, .navbar-inverse .btn-navbar.disabled, .navbar-inverse .btn-navbar[disabled] { color: #fff; background-color: #050c16; *background-color: #050c16; } .navbar-inverse .btn-navbar:active, .navbar-inverse .btn-navbar.active { background-color: #10223e; } .breadcrumb { padding: 8px 15px; margin: 0 0 18px; list-style: none; background-color: #f5f5f5; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .breadcrumb > li { display: inline-block; *display: inline; *zoom: 1; text-shadow: 0 1px 0 #fff; } .breadcrumb > li > .divider { padding: 0 5px; color: #ccc; } .breadcrumb > .active { color: #999; } .pagination { margin: 18px 0; } .pagination ul { display: inline-block; *display: inline; *zoom: 1; margin-left: 0; margin-bottom: 0; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.05); -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.05); box-shadow: 0 1px 2px rgba(0,0,0,0.05); } .pagination ul > li { display: inline; } .pagination ul > li > a, .pagination ul > li > span { float: left; padding: 4px 12px; line-height: 18px; text-decoration: none; background-color: #fff; border: 1px solid #ddd; border-left-width: 0; } .pagination ul > li > a:hover, .pagination ul > li > a:focus, .pagination ul > .active > a, .pagination ul > .active > span { background-color: #F0F0F0; } .pagination ul > .active > a, .pagination ul > .active > span { color: #999; cursor: default; } .pagination ul > .disabled > span, .pagination ul > .disabled > a, .pagination ul > .disabled > a:hover, .pagination ul > .disabled > a:focus { color: #999; background-color: transparent; cursor: default; } .pagination ul > li:first-child > a, .pagination ul > li:first-child > span { border-left-width: 1px; -webkit-border-top-left-radius: 3px; -moz-border-radius-topleft: 3px; border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px; -moz-border-radius-bottomleft: 3px; border-bottom-left-radius: 3px; } .pagination ul > li:last-child > a, .pagination ul > li:last-child > span { -webkit-border-top-right-radius: 3px; -moz-border-radius-topright: 3px; border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; -moz-border-radius-bottomright: 3px; border-bottom-right-radius: 3px; } .pagination-centered { text-align: center; } .pagination-right { text-align: right; } .pagination-large ul > li > a, .pagination-large ul > li > span { padding: 11px 19px; font-size: 16.25px; } .pagination-large ul > li:first-child > a, .pagination-large ul > li:first-child > span { -webkit-border-top-left-radius: 6px; -moz-border-radius-topleft: 6px; border-top-left-radius: 6px; -webkit-border-bottom-left-radius: 6px; -moz-border-radius-bottomleft: 6px; border-bottom-left-radius: 6px; } .pagination-large ul > li:last-child > a, .pagination-large ul > li:last-child > span { -webkit-border-top-right-radius: 6px; -moz-border-radius-topright: 6px; border-top-right-radius: 6px; -webkit-border-bottom-right-radius: 6px; -moz-border-radius-bottomright: 6px; border-bottom-right-radius: 6px; } .pagination-mini ul > li:first-child > a, .pagination-mini ul > li:first-child > span, .pagination-small ul > li:first-child > a, .pagination-small ul > li:first-child > span { -webkit-border-top-left-radius: 3px; -moz-border-radius-topleft: 3px; border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px; -moz-border-radius-bottomleft: 3px; border-bottom-left-radius: 3px; } .pagination-mini ul > li:last-child > a, .pagination-mini ul > li:last-child > span, .pagination-small ul > li:last-child > a, .pagination-small ul > li:last-child > span { -webkit-border-top-right-radius: 3px; -moz-border-radius-topright: 3px; border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; -moz-border-radius-bottomright: 3px; border-bottom-right-radius: 3px; } .pagination-small ul > li > a, .pagination-small ul > li > span { padding: 2px 10px; font-size: 12px; } .pagination-mini ul > li > a, .pagination-mini ul > li > span { padding: 0 6px; font-size: 9.75px; } .pager { margin: 18px 0; list-style: none; text-align: center; *zoom: 1; } .pager:before, .pager:after { display: table; content: ""; line-height: 0; } .pager:after { clear: both; } .pager li { display: inline; } .pager li > a, .pager li > span { display: inline-block; padding: 5px 14px; background-color: #fff; border: 1px solid #ddd; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; } .pager li > a:hover, .pager li > a:focus { text-decoration: none; background-color: #f5f5f5; } .pager .next > a, .pager .next > span { float: right; } .pager .previous > a, .pager .previous > span { float: left; } .pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { color: #999; background-color: #fff; cursor: default; } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; background-color: #000; } .modal-backdrop.fade { opacity: 0; } .modal-backdrop, .modal-backdrop.fade.in { opacity: 0.8; filter: alpha(opacity=80); } .modal-header { padding: 9px 15px; border-bottom: 1px solid #eee; } .modal-header .close { margin-top: 2px; } .modal-header h3 { margin: 0; line-height: 30px; } .modal-body { width: 98%; position: relative; max-height: 400px; padding: 1%; } .modal-body iframe { width: 100%; max-height: none; border: 0 !important; } .modal-form { margin-bottom: 0; } .modal-footer { padding: 14px 15px 15px; margin-bottom: 0; text-align: right; background-color: #f5f5f5; border-top: 1px solid #ddd; -webkit-border-radius: 0 0 6px 6px; -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; -webkit-box-shadow: inset 0 1px 0 #fff; -moz-box-shadow: inset 0 1px 0 #fff; box-shadow: inset 0 1px 0 #fff; *zoom: 1; } .modal-footer:before, .modal-footer:after { display: table; content: ""; line-height: 0; } .modal-footer:after { clear: both; } .modal-footer .btn + .btn { margin-left: 5px; margin-bottom: 0; } .modal-footer .btn-group .btn + .btn { margin-left: -1px; } .modal-footer .btn-block + .btn-block { margin-left: 0; } .tooltip { position: absolute; z-index: 1030; display: block; visibility: visible; font-size: 11px; line-height: 1.4; opacity: 0; filter: alpha(opacity=0); } .tooltip.in { opacity: 0.8; filter: alpha(opacity=80); } .tooltip.top { margin-top: -3px; padding: 5px 0; } .tooltip.right { margin-left: 3px; padding: 0 5px; } .tooltip.bottom { margin-top: 3px; padding: 5px 0; } .tooltip.left { margin-left: -3px; padding: 0 5px; } .tooltip-inner { max-width: 200px; padding: 8px; color: #fff; text-align: center; text-decoration: none; background-color: #000; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid; } .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; margin-left: -5px; border-width: 5px 5px 0; border-top-color: #000; } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-width: 5px 5px 5px 0; border-right-color: #000; } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-width: 5px 0 5px 5px; border-left-color: #000; } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-width: 0 5px 5px; border-bottom-color: #000; } .popover { position: absolute; top: 0; left: 0; z-index: 1060; display: none; max-width: 276px; padding: 1px; text-align: left; background-color: #fff; -webkit-background-clip: padding-box; -moz-background-clip: padding; background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,0.2); -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2); -moz-box-shadow: 0 5px 10px rgba(0,0,0,0.2); box-shadow: 0 5px 10px rgba(0,0,0,0.2); white-space: normal; } .popover.top { margin-top: -10px; } .popover.right { margin-left: 10px; } .popover.bottom { margin-top: 10px; } .popover.left { margin-left: -10px; } .popover-title { margin: 0; padding: 8px 14px; font-size: 14px; font-weight: normal; line-height: 18px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .popover-title:empty { display: none; } .popover-content { padding: 9px 14px; } .popover .arrow, .popover .arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; } .popover .arrow { border-width: 11px; } .popover .arrow:after { border-width: 10px; content: ""; } .popover.top .arrow { left: 50%; margin-left: -11px; border-bottom-width: 0; border-top-color: #999; border-top-color: rgba(0,0,0,0.25); bottom: -11px; } .popover.top .arrow:after { bottom: 1px; margin-left: -10px; border-bottom-width: 0; border-top-color: #fff; } .popover.right .arrow { top: 50%; left: -11px; margin-top: -11px; border-left-width: 0; border-right-color: #999; border-right-color: rgba(0,0,0,0.25); } .popover.right .arrow:after { left: 1px; bottom: -10px; border-left-width: 0; border-right-color: #fff; } .popover.bottom .arrow { left: 50%; margin-left: -11px; border-top-width: 0; border-bottom-color: #999; border-bottom-color: rgba(0,0,0,0.25); top: -11px; } .popover.bottom .arrow:after { top: 1px; margin-left: -10px; border-top-width: 0; border-bottom-color: #fff; } .popover.left .arrow { top: 50%; right: -11px; margin-top: -11px; border-right-width: 0; border-left-color: #999; border-left-color: rgba(0,0,0,0.25); } .popover.left .arrow:after { right: 1px; border-right-width: 0; border-left-color: #fff; bottom: -10px; } .thumbnails { margin-left: -20px; list-style: none; *zoom: 1; } .thumbnails:before, .thumbnails:after { display: table; content: ""; line-height: 0; } .thumbnails:after { clear: both; } .row-fluid .thumbnails { margin-left: 0; } .thumbnails > li { float: left; margin-bottom: 18px; margin-left: 20px; } .thumbnail { display: block; padding: 4px; line-height: 18px; border: 1px solid #ddd; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.055); -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.055); box-shadow: 0 1px 3px rgba(0,0,0,0.055); -webkit-transition: all .2s ease-in-out; -moz-transition: all .2s ease-in-out; -o-transition: all .2s ease-in-out; transition: all .2s ease-in-out; } a.thumbnail:hover, a.thumbnail:focus { border-color: #3071a9; -webkit-box-shadow: 0 1px 4px rgba(0,105,214,0.25); -moz-box-shadow: 0 1px 4px rgba(0,105,214,0.25); box-shadow: 0 1px 4px rgba(0,105,214,0.25); } .thumbnail > img { display: block; max-width: 100%; margin-left: auto; margin-right: auto; } .thumbnail .caption { padding: 9px; color: #555; } .media, .media-body { overflow: hidden; *overflow: visible; zoom: 1; } .media, .media .media { margin-top: 15px; } .media:first-child { margin-top: 0; } .media-object { display: block; } .media-heading { margin: 0 0 5px; } .media > .pull-left { margin-right: 10px; } .media > .pull-right { margin-left: 10px; } .media-list { margin-left: 0; list-style: none; } .label, .badge { display: inline-block; padding: 2px 4px; font-size: 10.998px; font-weight: bold; line-height: 14px; color: #fff; vertical-align: baseline; white-space: nowrap; text-shadow: 0 -1px 0 rgba(0,0,0,0.25); background-color: #999; } .label { -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .badge { padding-left: 9px; padding-right: 9px; -webkit-border-radius: 9px; -moz-border-radius: 9px; border-radius: 9px; } .label:empty, .badge:empty { display: none; } a.label:hover, a.label:focus, a.badge:hover, a.badge:focus { color: #fff; text-decoration: none; cursor: pointer; } .label-important, .badge-important { background-color: #a94442; } .label-important[href], .badge-important[href] { background-color: #843534; } .label-warning, .badge-warning { background-color: #f89406; } .label-warning[href], .badge-warning[href] { background-color: #c67605; } .label-success, .badge-success { background-color: #3c763d; } .label-success[href], .badge-success[href] { background-color: #2b542c; } .label-info, .badge-info { background-color: #31708f; } .label-info[href], .badge-info[href] { background-color: #245269; } .label-inverse, .badge-inverse { background-color: #333; } .label-inverse[href], .badge-inverse[href] { background-color: #1a1a1a; } .btn .label, .btn .badge { position: relative; top: -1px; } .btn-mini .label, .btn-mini .badge { top: 0; } @-webkit-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @-moz-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @-ms-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @-o-keyframes progress-bar-stripes { from { background-position: 0 0; } to { background-position: 40px 0; } } @keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } .progress { overflow: hidden; height: 18px; margin-bottom: 18px; background-color: #f7f7f7; background-image: -moz-linear-gradient(top,#f5f5f5,#f9f9f9); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9)); background-image: -webkit-linear-gradient(top,#f5f5f5,#f9f9f9); background-image: -o-linear-gradient(top,#f5f5f5,#f9f9f9); background-image: linear-gradient(to bottom,#f5f5f5,#f9f9f9); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .progress .bar { width: 0%; height: 100%; color: #fff; float: left; font-size: 12px; text-align: center; text-shadow: 0 -1px 0 rgba(0,0,0,0.25); background-color: #0e90d2; background-image: -moz-linear-gradient(top,#149bdf,#0480be); background-image: -webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be)); background-image: -webkit-linear-gradient(top,#149bdf,#0480be); background-image: -o-linear-gradient(top,#149bdf,#0480be); background-image: linear-gradient(to bottom,#149bdf,#0480be); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15); -moz-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15); box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15); -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-transition: width .6s ease; -moz-transition: width .6s ease; -o-transition: width .6s ease; transition: width .6s ease; } .progress .bar + .bar { -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); } .progress-striped .bar { background-color: #149bdf; background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,0.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,0.15)),color-stop(.75,rgba(255,255,255,0.15)),color-stop(.75,transparent),to(transparent)); background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); -webkit-background-size: 40px 40px; -moz-background-size: 40px 40px; -o-background-size: 40px 40px; background-size: 40px 40px; } .progress.active .bar { -webkit-animation: progress-bar-stripes 2s linear infinite; -moz-animation: progress-bar-stripes 2s linear infinite; -ms-animation: progress-bar-stripes 2s linear infinite; -o-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } .progress-danger .bar, .progress .bar-danger { background-color: #dd514c; background-image: -moz-linear-gradient(top,#ee5f5b,#c43c35); background-image: -webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35)); background-image: -webkit-linear-gradient(top,#ee5f5b,#c43c35); background-image: -o-linear-gradient(top,#ee5f5b,#c43c35); background-image: linear-gradient(to bottom,#ee5f5b,#c43c35); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); } .progress-danger.progress-striped .bar, .progress-striped .bar-danger { background-color: #ee5f5b; background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,0.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,0.15)),color-stop(.75,rgba(255,255,255,0.15)),color-stop(.75,transparent),to(transparent)); background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); } .progress-success .bar, .progress .bar-success { background-color: #5eb95e; background-image: -moz-linear-gradient(top,#62c462,#57a957); background-image: -webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957)); background-image: -webkit-linear-gradient(top,#62c462,#57a957); background-image: -o-linear-gradient(top,#62c462,#57a957); background-image: linear-gradient(to bottom,#62c462,#57a957); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); } .progress-success.progress-striped .bar, .progress-striped .bar-success { background-color: #62c462; background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,0.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,0.15)),color-stop(.75,rgba(255,255,255,0.15)),color-stop(.75,transparent),to(transparent)); background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); } .progress-info .bar, .progress .bar-info { background-color: #4bb1cf; background-image: -moz-linear-gradient(top,#5bc0de,#339bb9); background-image: -webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9)); background-image: -webkit-linear-gradient(top,#5bc0de,#339bb9); background-image: -o-linear-gradient(top,#5bc0de,#339bb9); background-image: linear-gradient(to bottom,#5bc0de,#339bb9); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); } .progress-info.progress-striped .bar, .progress-striped .bar-info { background-color: #5bc0de; background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,0.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,0.15)),color-stop(.75,rgba(255,255,255,0.15)),color-stop(.75,transparent),to(transparent)); background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); } .progress-warning .bar, .progress .bar-warning { background-color: #faa732; background-image: -moz-linear-gradient(top,#fbb450,#f89406); background-image: -webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406)); background-image: -webkit-linear-gradient(top,#fbb450,#f89406); background-image: -o-linear-gradient(top,#fbb450,#f89406); background-image: linear-gradient(to bottom,#fbb450,#f89406); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffab44f', endColorstr='#fff89406', GradientType=0); } .progress-warning.progress-striped .bar, .progress-striped .bar-warning { background-color: #fbb450; background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,0.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,0.15)),color-stop(.75,rgba(255,255,255,0.15)),color-stop(.75,transparent),to(transparent)); background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); } .accordion { margin-bottom: 18px; } .accordion-group { margin-bottom: 2px; border: 1px solid #e5e5e5; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .accordion-heading { border-bottom: 0; } .accordion-heading .accordion-toggle { display: block; padding: 8px 15px; } .accordion-toggle { cursor: pointer; } .accordion-inner { padding: 9px 15px; border-top: 1px solid #e5e5e5; } .carousel { position: relative; margin-bottom: 18px; line-height: 1; } .carousel-inner { overflow: hidden; width: 100%; position: relative; } .carousel-inner > .item { display: none; position: relative; -webkit-transition: .6s ease-in-out left; -moz-transition: .6s ease-in-out left; -o-transition: .6s ease-in-out left; transition: .6s ease-in-out left; } .carousel-inner > .item > img, .carousel-inner > .item > a > img { display: block; line-height: 1; } .carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev { display: block; } .carousel-inner > .active { left: 0; } .carousel-inner > .next, .carousel-inner > .prev { position: absolute; top: 0; width: 100%; } .carousel-inner > .next { left: 100%; } .carousel-inner > .prev { left: -100%; } .carousel-inner > .next.left, .carousel-inner > .prev.right { left: 0; } .carousel-inner > .active.left { left: -100%; } .carousel-inner > .active.right { left: 100%; } .carousel-control { position: absolute; top: 40%; left: 15px; width: 40px; height: 40px; margin-top: -20px; font-size: 60px; font-weight: 100; line-height: 30px; color: #fff; text-align: center; background: #222; border: 3px solid #fff; -webkit-border-radius: 23px; -moz-border-radius: 23px; border-radius: 23px; opacity: 0.5; filter: alpha(opacity=50); } .carousel-control.right { left: auto; right: 15px; } .carousel-control:hover, .carousel-control:focus { color: #fff; text-decoration: none; opacity: 0.9; filter: alpha(opacity=90); } .carousel-indicators { position: absolute; top: 15px; right: 15px; z-index: 5; margin: 0; list-style: none; } .carousel-indicators li { display: block; float: left; width: 10px; height: 10px; margin-left: 5px; text-indent: -999px; background-color: #ccc; background-color: rgba(255,255,255,0.25); border-radius: 5px; } .carousel-indicators .active { background-color: #fff; } .carousel-caption { position: absolute; left: 0; right: 0; bottom: 0; padding: 15px; background: #333; background: rgba(0,0,0,0.75); } .carousel-caption h4, .carousel-caption p { color: #fff; line-height: 18px; } .carousel-caption h4 { margin: 0 0 5px; } .carousel-caption p { margin-bottom: 0; } .hero-unit { padding: 60px; margin-bottom: 30px; font-size: 18px; font-weight: 200; line-height: 27px; color: inherit; background-color: #eee; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .hero-unit h1 { margin-bottom: 0; font-size: 60px; line-height: 1; color: inherit; letter-spacing: -1px; } .hero-unit li { line-height: 27px; } .pull-right { float: right; } .pull-left { float: left; } .hide { display: none; } .show { display: block; } .invisible { visibility: hidden; } .affix { position: fixed; } @-ms-viewport { width: device-width; } .hidden { display: none; visibility: hidden; } .visible-phone { display: none !important; } .visible-tablet { display: none !important; } .hidden-desktop { display: none !important; } .visible-desktop { display: inherit !important; } @media (min-width: 768px) and (max-width: 979px) { .hidden-desktop { display: inherit !important; } .visible-desktop { display: none !important; } .visible-tablet { display: inherit !important; } .hidden-tablet { display: none !important; } } @media (max-width: 767px) { .hidden-desktop { display: inherit !important; } .visible-desktop { display: none !important; } .visible-phone { display: inherit !important; } .hidden-phone { display: none !important; } } .visible-print { display: none !important; } @media print { .visible-print { display: inherit !important; } .hidden-print { display: none !important; } } @media (max-width: 767px) { body { padding-left: 20px; padding-right: 20px; } .navbar-fixed-top, .navbar-fixed-bottom, .navbar-static-top { margin-left: -20px; margin-right: -20px; } .container-fluid { padding: 0; } .dl-horizontal dt { float: none; clear: none; width: auto; text-align: left; } .dl-horizontal dd { margin-left: 0; } .dropdown-menu .menuitem-group { background-color: #10223e; color: #eee; } .container { width: auto; } .row-fluid { width: 100%; } .row, .thumbnails { margin-left: 0; } .thumbnails > li { float: none; margin-left: 0; } [class*="span"], .uneditable-input[class*="span"], .row-fluid [class*="span"] { float: none; display: block; width: 100%; margin-left: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .span12, .row-fluid .span12 { width: 100%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .row-fluid [class*="offset"]:first-child { margin-left: 0; } .input-large, .input-xlarge, .input-xxlarge, input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input { display: block; width: 100%; min-height: 28px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .input-prepend input, .input-append input, .input-prepend input[class*="span"], .input-append input[class*="span"] { display: inline-block; } .controls-row [class*="span"] + [class*="span"] { margin-left: 0; } } @media (max-width: 480px) { .nav-collapse { -webkit-transform: translate3d(0,0,0); } .page-header h1 small { display: block; line-height: 18px; } input[type="checkbox"], input[type="radio"] { border: 1px solid #ccc; } .form-horizontal .control-label { float: none; width: auto; padding-top: 0; text-align: left; } .form-horizontal .controls { margin-left: 0; } .form-horizontal .control-list { padding-top: 0; } .form-horizontal .form-actions { padding-left: 10px; padding-right: 10px; } .tag-category input#filter-search, .newsfeed-category input#filter-search { width: auto; margin-bottom: 9px; } .category-list input#filter-search { width: auto; } .media .pull-left, .media .pull-right { float: none; display: block; margin-bottom: 10px; } .media-object { margin-right: 0; margin-left: 0; } .modal-header .close { padding: 10px; margin: -10px; } .carousel-caption { position: static; } } @media (min-width: 768px) and (max-width: 979px) { .row { margin-left: -20px; *zoom: 1; } .row:before, .row:after { display: table; content: ""; line-height: 0; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 20px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 724px; } .span12 { width: 724px; } .span11 { width: 662px; } .span10 { width: 600px; } .span9 { width: 538px; } .span8 { width: 476px; } .span7 { width: 414px; } .span6 { width: 352px; } .span5 { width: 290px; } .span4 { width: 228px; } .span3 { width: 166px; } .span2 { width: 104px; } .span1 { width: 42px; } .offset12 { margin-left: 764px; } .offset11 { margin-left: 702px; } .offset10 { margin-left: 640px; } .offset9 { margin-left: 578px; } .offset8 { margin-left: 516px; } .offset7 { margin-left: 454px; } .offset6 { margin-left: 392px; } .offset5 { margin-left: 330px; } .offset4 { margin-left: 268px; } .offset3 { margin-left: 206px; } .offset2 { margin-left: 144px; } .offset1 { margin-left: 82px; } .row-fluid { width: 100%; *zoom: 1; } .row-fluid:before, .row-fluid:after { display: table; content: ""; line-height: 0; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; width: 100%; min-height: 28px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; float: left; margin-left: 2.76243094%; *margin-left: 2.70923945%; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.76243094%; } .row-fluid .span12 { width: 100%; *width: 99.94680851%; } .row-fluid .span11 { width: 91.43646409%; *width: 91.3832726%; } .row-fluid .span10 { width: 82.87292818%; *width: 82.81973669%; } .row-fluid .span9 { width: 74.30939227%; *width: 74.25620078%; } .row-fluid .span8 { width: 65.74585635%; *width: 65.69266486%; } .row-fluid .span7 { width: 57.18232044%; *width: 57.12912895%; } .row-fluid .span6 { width: 48.61878453%; *width: 48.56559304%; } .row-fluid .span5 { width: 40.05524862%; *width: 40.00205713%; } .row-fluid .span4 { width: 31.49171271%; *width: 31.43852122%; } .row-fluid .span3 { width: 22.9281768%; *width: 22.87498531%; } .row-fluid .span2 { width: 14.36464088%; *width: 14.31144939%; } .row-fluid .span1 { width: 5.80110497%; *width: 5.74791348%; } .row-fluid .offset12 { margin-left: 105.52486188%; *margin-left: 105.4184789%; } .row-fluid .offset12:first-child { margin-left: 102.76243094%; *margin-left: 102.65604796%; } .row-fluid .offset11 { margin-left: 96.96132597%; *margin-left: 96.85494299%; } .row-fluid .offset11:first-child { margin-left: 94.19889503%; *margin-left: 94.09251205%; } .row-fluid .offset10 { margin-left: 88.39779006%; *margin-left: 88.29140708%; } .row-fluid .offset10:first-child { margin-left: 85.63535912%; *margin-left: 85.52897614%; } .row-fluid .offset9 { margin-left: 79.83425414%; *margin-left: 79.72787116%; } .row-fluid .offset9:first-child { margin-left: 77.0718232%; *margin-left: 76.96544023%; } .row-fluid .offset8 { margin-left: 71.27071823%; *margin-left: 71.16433525%; } .row-fluid .offset8:first-child { margin-left: 68.50828729%; *margin-left: 68.40190431%; } .row-fluid .offset7 { margin-left: 62.70718232%; *margin-left: 62.60079934%; } .row-fluid .offset7:first-child { margin-left: 59.94475138%; *margin-left: 59.8383684%; } .row-fluid .offset6 { margin-left: 54.14364641%; *margin-left: 54.03726343%; } .row-fluid .offset6:first-child { margin-left: 51.38121547%; *margin-left: 51.27483249%; } .row-fluid .offset5 { margin-left: 45.5801105%; *margin-left: 45.47372752%; } .row-fluid .offset5:first-child { margin-left: 42.81767956%; *margin-left: 42.71129658%; } .row-fluid .offset4 { margin-left: 37.01657459%; *margin-left: 36.91019161%; } .row-fluid .offset4:first-child { margin-left: 34.25414365%; *margin-left: 34.14776067%; } .row-fluid .offset3 { margin-left: 28.45303867%; *margin-left: 28.3466557%; } .row-fluid .offset3:first-child { margin-left: 25.69060773%; *margin-left: 25.58422476%; } .row-fluid .offset2 { margin-left: 19.88950276%; *margin-left: 19.78311978%; } .row-fluid .offset2:first-child { margin-left: 17.12707182%; *margin-left: 17.02068884%; } .row-fluid .offset1 { margin-left: 11.32596685%; *margin-left: 11.21958387%; } .row-fluid .offset1:first-child { margin-left: 8.56353591%; *margin-left: 8.45715293%; } input, textarea, .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 20px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 710px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 648px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 586px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 524px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 462px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 400px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 338px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 276px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 214px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 152px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 90px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 28px; } } @media (min-width: 1200px) { .row { margin-left: -30px; *zoom: 1; } .row:before, .row:after { display: table; content: ""; line-height: 0; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 30px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 1170px; } .span12 { width: 1170px; } .span11 { width: 1070px; } .span10 { width: 970px; } .span9 { width: 870px; } .span8 { width: 770px; } .span7 { width: 670px; } .span6 { width: 570px; } .span5 { width: 470px; } .span4 { width: 370px; } .span3 { width: 270px; } .span2 { width: 170px; } .span1 { width: 70px; } .offset12 { margin-left: 1230px; } .offset11 { margin-left: 1130px; } .offset10 { margin-left: 1030px; } .offset9 { margin-left: 930px; } .offset8 { margin-left: 830px; } .offset7 { margin-left: 730px; } .offset6 { margin-left: 630px; } .offset5 { margin-left: 530px; } .offset4 { margin-left: 430px; } .offset3 { margin-left: 330px; } .offset2 { margin-left: 230px; } .offset1 { margin-left: 130px; } .row-fluid { width: 100%; *zoom: 1; } .row-fluid:before, .row-fluid:after { display: table; content: ""; line-height: 0; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; width: 100%; min-height: 28px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; float: left; margin-left: 2.76243094%; *margin-left: 2.70923945%; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.76243094%; } .row-fluid .span12 { width: 100%; *width: 99.94680851%; } .row-fluid .span11 { width: 91.43646409%; *width: 91.3832726%; } .row-fluid .span10 { width: 82.87292818%; *width: 82.81973669%; } .row-fluid .span9 { width: 74.30939227%; *width: 74.25620078%; } .row-fluid .span8 { width: 65.74585635%; *width: 65.69266486%; } .row-fluid .span7 { width: 57.18232044%; *width: 57.12912895%; } .row-fluid .span6 { width: 48.61878453%; *width: 48.56559304%; } .row-fluid .span5 { width: 40.05524862%; *width: 40.00205713%; } .row-fluid .span4 { width: 31.49171271%; *width: 31.43852122%; } .row-fluid .span3 { width: 22.9281768%; *width: 22.87498531%; } .row-fluid .span2 { width: 14.36464088%; *width: 14.31144939%; } .row-fluid .span1 { width: 5.80110497%; *width: 5.74791348%; } .row-fluid .offset12 { margin-left: 105.52486188%; *margin-left: 105.4184789%; } .row-fluid .offset12:first-child { margin-left: 102.76243094%; *margin-left: 102.65604796%; } .row-fluid .offset11 { margin-left: 96.96132597%; *margin-left: 96.85494299%; } .row-fluid .offset11:first-child { margin-left: 94.19889503%; *margin-left: 94.09251205%; } .row-fluid .offset10 { margin-left: 88.39779006%; *margin-left: 88.29140708%; } .row-fluid .offset10:first-child { margin-left: 85.63535912%; *margin-left: 85.52897614%; } .row-fluid .offset9 { margin-left: 79.83425414%; *margin-left: 79.72787116%; } .row-fluid .offset9:first-child { margin-left: 77.0718232%; *margin-left: 76.96544023%; } .row-fluid .offset8 { margin-left: 71.27071823%; *margin-left: 71.16433525%; } .row-fluid .offset8:first-child { margin-left: 68.50828729%; *margin-left: 68.40190431%; } .row-fluid .offset7 { margin-left: 62.70718232%; *margin-left: 62.60079934%; } .row-fluid .offset7:first-child { margin-left: 59.94475138%; *margin-left: 59.8383684%; } .row-fluid .offset6 { margin-left: 54.14364641%; *margin-left: 54.03726343%; } .row-fluid .offset6:first-child { margin-left: 51.38121547%; *margin-left: 51.27483249%; } .row-fluid .offset5 { margin-left: 45.5801105%; *margin-left: 45.47372752%; } .row-fluid .offset5:first-child { margin-left: 42.81767956%; *margin-left: 42.71129658%; } .row-fluid .offset4 { margin-left: 37.01657459%; *margin-left: 36.91019161%; } .row-fluid .offset4:first-child { margin-left: 34.25414365%; *margin-left: 34.14776067%; } .row-fluid .offset3 { margin-left: 28.45303867%; *margin-left: 28.3466557%; } .row-fluid .offset3:first-child { margin-left: 25.69060773%; *margin-left: 25.58422476%; } .row-fluid .offset2 { margin-left: 19.88950276%; *margin-left: 19.78311978%; } .row-fluid .offset2:first-child { margin-left: 17.12707182%; *margin-left: 17.02068884%; } .row-fluid .offset1 { margin-left: 11.32596685%; *margin-left: 11.21958387%; } .row-fluid .offset1:first-child { margin-left: 8.56353591%; *margin-left: 8.45715293%; } input, textarea, .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 30px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 1156px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 1056px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 956px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 856px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 756px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 656px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 556px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 456px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 356px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 256px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 156px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 56px; } .thumbnails { margin-left: -30px; } .thumbnails > li { margin-left: 30px; } .row-fluid .thumbnails { margin-left: 0; } } @media (max-width: 767px) { body { padding-top: 0; } .navbar-fixed-top, .navbar-fixed-bottom { position: static; } .navbar-fixed-top { margin-bottom: 18px; } .navbar-fixed-bottom { margin-top: 18px; } .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner { padding: 5px; } .navbar .container { width: auto; padding: 0; } .navbar .brand { padding-left: 10px; padding-right: 10px; margin: 0 0 0 -5px; } .nav-collapse { clear: both; } .nav-collapse .nav { float: none; margin: 0 0 9px; } .nav-collapse .nav > li { float: none; } .nav-collapse .nav > li > a { margin-bottom: 2px; } .nav-collapse .nav > .divider-vertical { display: none; } .nav-collapse .nav .nav-header { color: #555; text-shadow: none; } .nav-collapse .nav > li > a, .nav-collapse .dropdown-menu a { padding: 9px 15px; font-weight: bold; color: #555; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .nav-collapse .btn { padding: 4px 10px 4px; font-weight: normal; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .nav-collapse .dropdown-menu li + li a { margin-bottom: 2px; } .nav-collapse .nav > li > a:hover, .nav-collapse .nav > li > a:focus, .nav-collapse .dropdown-menu a:hover, .nav-collapse .dropdown-menu a:focus { background-color: #f2f2f2; } .navbar-inverse .nav-collapse .nav > li > a, .navbar-inverse .nav-collapse .dropdown-menu a { color: #d9d9d9; } .navbar-inverse .nav-collapse .nav > li > a:hover, .navbar-inverse .nav-collapse .nav > li > a:focus, .navbar-inverse .nav-collapse .dropdown-menu a:hover, .navbar-inverse .nav-collapse .dropdown-menu a:focus { background-color: #10223e; } .nav-collapse.in .btn-group { margin-top: 5px; padding: 0; } .nav-collapse .dropdown-menu { position: static; top: auto; left: auto; float: none; display: none; max-width: none; margin: 0 15px; padding: 0; background-color: transparent; border: none; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .nav-collapse .open > .dropdown-menu { display: block; } .nav-collapse .dropdown-menu:before, .nav-collapse .dropdown-menu:after { display: none; } .nav-collapse .dropdown-menu .divider { display: none; } .nav-collapse .nav > li > .dropdown-menu:before, .nav-collapse .nav > li > .dropdown-menu:after { display: none; } .nav-collapse .navbar-form, .nav-collapse .navbar-search { float: none; padding: 9px 15px; margin: 9px 0; border-top: 1px solid #f2f2f2; border-bottom: 1px solid #f2f2f2; -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); } .navbar-inverse .nav-collapse .navbar-form, .navbar-inverse .nav-collapse .navbar-search { border-top-color: #10223e; border-bottom-color: #10223e; } .navbar .nav-collapse .nav.pull-right { float: none; margin-left: 0; } .nav-collapse, .nav-collapse.collapse { overflow: hidden; height: 0; } .navbar .btn-navbar { display: block; } .navbar-static .navbar-inner { padding-left: 10px; padding-right: 10px; } } @media (min-width: 768px) { .nav-collapse.collapse { height: auto !important; overflow: visible !important; } } .small { font-size: 11px; } iframe, svg { max-width: 100%; } .nowrap { white-space: nowrap; } .center, .table td.center, .table th.center { text-align: center; } a.disabled, a.disabled:hover { color: #999999; background-color: transparent; cursor: default; text-decoration: none; } .hero-unit { text-align: center; } .hero-unit .lead { margin-bottom: 18px; font-size: 20px; font-weight: 200; line-height: 27px; } .btn .caret { margin-bottom: 7px; } .btn.btn-micro .caret { margin: 5px 0; } .blog-row-rule, .blog-item-rule { border: 0; } body.modal { padding-top: 0; } .row-even, .row-odd { padding: 5px; width: 99%; border-bottom: 1px solid #ddd; } .row-odd { background-color: transparent; } .row-even { background-color: #f9f9f9; } .blog-row-rule, .blog-item-rule { border: 0; } .row-fluid .row-reveal { visibility: hidden; } .row-fluid:hover .row-reveal { visibility: visible; } .btn-wide { width: 80%; } .nav-list > li.offset > a { padding-left: 30px; font-size: 12px; } .blog-row-rule, .blog-item-rule { border: 0; } .row-fluid .offset1 { margin-left: 8.382978723%; } .row-fluid .offset2 { margin-left: 16.89361702%; } .row-fluid .offset3 { margin-left: 25.404255317%; } .row-fluid .offset4 { margin-left: 33.914893614%; } .row-fluid .offset5 { margin-left: 42.425531911%; } .row-fluid .offset6 { margin-left: 50.93617020799999%; } .row-fluid .offset7 { margin-left: 59.446808505%; } .row-fluid .offset8 { margin-left: 67.95744680199999%; } .row-fluid .offset9 { margin-left: 76.468085099%; } .row-fluid .offset10 { margin-left: 84.97872339599999%; } .row-fluid .offset11 { margin-left: 91.489361693%; } .navbar .nav > li > a.btn { padding: 4px 10px; line-height: 18px; } .nav-tabs.nav-dark { border-bottom: 1px solid #333; text-shadow: 1px 1px 1px #000; } .nav-tabs.nav-dark > li > a { color: #F8F8F8; } .nav-tabs.nav-dark > li > a:hover { border-color: #333 #333 #111; background-color: #777777; } .nav-tabs.nav-dark > .active > a, .nav-tabs.nav-dark > .active > a:hover { color: #ffffff; background-color: #555555; border: 1px solid #222; border-bottom-color: transparent; } .thumbnail.pull-left { margin: 0 10px 10px 0; } .thumbnail.pull-right { margin: 0 0 10px 10px; } .width-10 { width: 10px; } .width-20 { width: 20px; } .width-30 { width: 30px; } .width-40 { width: 40px; } .width-50 { width: 50px; } .width-60 { width: 60px; } .width-70 { width: 70px; } .width-80 { width: 80px; } .width-90 { width: 90px; } .width-100 { width: 100px; } .height-10 { height: 10px; } .height-20 { height: 20px; } .height-30 { height: 30px; } .height-40 { height: 40px; } .height-50 { height: 50px; } .height-60 { height: 60px; } .height-70 { height: 70px; } .height-80 { height: 80px; } .height-90 { height: 90px; } .height-100 { height: 100px; } hr.hr-condensed { margin: 10px 0; } .list-striped, .row-striped { list-style: none; line-height: 18px; text-align: left; vertical-align: middle; border-top: 1px solid #ddd; margin-left: 0; } .list-striped li, .list-striped dd, .row-striped .row, .row-striped .row-fluid { border-bottom: 1px solid #ddd; padding: 8px; } .list-striped li:nth-child(odd), .list-striped dd:nth-child(odd), .row-striped .row:nth-child(odd), .row-striped .row-fluid:nth-child(odd) { background-color: #f9f9f9; } .list-striped li:hover, .list-striped dd:hover, .row-striped .row:hover, .row-striped .row-fluid:hover { background-color: #F0F0F0; } .row-striped .row-fluid { width: 100%; box-sizing: border-box; } .row-striped .row-fluid [class*="span"] { min-height: 10px; } .row-striped .row-fluid [class*="span"] { margin-left: 8px; } .row-striped .row-fluid [class*="span"]:first-child { margin-left: 0; } .list-condensed li { padding: 4px 5px; } .row-condensed .row, .row-condensed .row-fluid { padding: 4px 5px; } .list-bordered, .row-bordered { list-style: none; line-height: 18px; text-align: left; vertical-align: middle; margin-left: 0; border: 1px solid #ddd; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .radio.btn-group input[type=radio] { display: none; } .radio.btn-group > label { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .radio.btn-group > label:first-of-type { margin-left: 0; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-topleft: 4px; } fieldset.radio.btn-group { padding-left: 0; } .iframe-bordered { border: 1px solid #ddd; } .tab-content { overflow: visible; } .tabs-left .tab-content { overflow: auto; } .nav-tabs > li > span { display: block; margin-right: 2px; padding-right: 12px; padding-left: 12px; padding-top: 8px; padding-bottom: 8px; line-height: 18px; border: 1px solid transparent; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } .btn-micro { padding: 1px 4px; font-size: 10px; line-height: 8px; } .btn-group > .btn-micro { font-size: 10px; } .tip-wrap { max-width: 200px; padding: 3px 8px; color: #fff; text-align: center; text-decoration: none; background-color: #000; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; z-index: 100; } .page-header { margin: 2px 0px 10px 0px; padding-bottom: 5px; } .input-prepend > .add-on, .input-append > .add-on { vertical-align: top; } .input-prepend .chzn-container-single .chzn-single { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend .chzn-container-single .chzn-single-with-drop { -webkit-border-radius: 0 3px 0 0; -moz-border-radius: 0 3px 0 0; border-radius: 0 3px 0 0; } .input-append .chzn-container-single .chzn-single { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append .chzn-container-single .chzn-single-with-drop { -webkit-border-radius: 3px 0 0 0; -moz-border-radius: 3px 0 0 0; border-radius: 3px 0 0 0; } .input-prepend.input-append .chzn-container-single .chzn-single, .input-prepend.input-append .chzn-container-single .chzn-single-with-drop { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .element-invisible { position: absolute; padding: 0; margin: 0; border: 0; height: 1px; width: 1px; overflow: hidden; } .element-invisible:focus { width: auto; height: auto; overflow: auto; background: #eee; color: #000; padding: 1em; } .form-vertical .control-label { float: none; width: auto; padding-right: 0; padding-top: 0; text-align: left; } .form-vertical .controls { margin-left: 0; } .width-auto { width: auto; } .btn-group .chzn-results { white-space: normal; } .accordion-body.in:hover { overflow: visible; } .invalid { color: #9d261d; font-weight: bold; } input.invalid { border: 1px solid #9d261d; background: #f2dede; } select.chzn-done.invalid + .chzn-container.chzn-container-single > a.chzn-single, select.chzn-done.invalid + .chzn-container.chzn-container-multi > ul.chzn-choices { border-color: #9d261d; color: #9d261d; } .tooltip { max-width: 400px; } .tooltip-inner { max-width: none; text-align: left; text-shadow: none; } th .tooltip-inner { font-weight: normal; } .tooltip.hasimage { opacity: 1; } .tip-text { text-align: left; } .btn-group > .btn + .dropdown-backdrop + .btn { margin-left: -1px; } .btn-group > .btn + .dropdown-backdrop + .dropdown-toggle { padding-left: 8px; padding-right: 8px; -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); *padding-top: 5px; *padding-bottom: 5px; } .btn-group > .btn-mini + .dropdown-backdrop + .dropdown-toggle { padding-left: 5px; padding-right: 5px; *padding-top: 2px; *padding-bottom: 2px; } .btn-group > .btn-small + .dropdown-backdrop + .dropdown-toggle { *padding-top: 5px; *padding-bottom: 4px; } .btn-group > .btn-large + .dropdown-backdrop + .dropdown-toggle { padding-left: 12px; padding-right: 12px; *padding-top: 7px; *padding-bottom: 7px; } .dropdown-menu { text-align: left; } .alert-link { font-weight: bold; } .alert .alert-link { color: #66512c; } .alert-success .alert-link { color: #2b542c; } .alert-danger .alert-link, .alert-error .alert-link { color: #843534; } .alert-info .alert-link { color: #245269; } div.modal { position: fixed; top: 5%; left: 50%; z-index: 1050; width: 80%; margin-left: -40%; background-color: #fff; border: 1px solid #999; border: 1px solid rgba(0,0,0,0.3); *border: 1px solid #999; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3); -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3); box-shadow: 0 3px 7px rgba(0,0,0,0.3); -webkit-background-clip: padding-box; -moz-background-clip: padding-box; background-clip: padding-box; outline: none; } div.modal.fade { -webkit-transition: opacity .3s linear, top .3s ease-out; -moz-transition: opacity .3s linear, top .3s ease-out; -o-transition: opacity .3s linear, top .3s ease-out; transition: opacity .3s linear, top .3s ease-out; top: -25%; } div.modal.fade.in { top: 5%; } .modal-batch { overflow-y: visible; } .modal-body[class^="jviewport-height"], .modal-body[class*="jviewport-height"] { max-height: none; } .jviewport-height10 { height: 10vh; } .jviewport-height20 { height: 20vh; } .jviewport-height30 { height: 30vh; } .jviewport-height40 { height: 40vh; } .jviewport-height50 { height: 50vh; } .jviewport-height60 { height: 60vh; } .jviewport-height70 { height: 70vh; } .jviewport-height80 { height: 80vh; } .jviewport-height90 { height: 90vh; } .jviewport-height100 { height: 100vh; } div.modal.jviewport-width10 { width: 10vw; margin-left: -5vw; } div.modal.jviewport-width20 { width: 20vw; margin-left: -10vw; } div.modal.jviewport-width30 { width: 30vw; margin-left: -15vw; } div.modal.jviewport-width40 { width: 40vw; margin-left: -20vw; } div.modal.jviewport-width50 { width: 50vw; margin-left: -25vw; } div.modal.jviewport-width60 { width: 60vw; margin-left: -30vw; } div.modal.jviewport-width70 { width: 70vw; margin-left: -35vw; } div.modal.jviewport-width80 { width: 80vw; margin-left: -40vw; } div.modal.jviewport-width90 { width: 90vw; margin-left: -45vw; } div.modal.jviewport-width100 { width: 100vw; margin-left: -50vw; } @media (max-width: 767px) { div.modal { position: fixed; top: 20px; left: 20px; right: 20px; width: auto; margin: 0; } div.modal.fade { top: -100px; } div.modal.fade.in { top: 20px; } div.modal[class*="jviewport-width"] { width: auto; margin: 0; } } @media (max-width: 480px) { div.modal { top: 10px; left: 10px; right: 10px; } } @font-face { font-family: 'IcoMoon'; src: url('../../../../media/jui/fonts/IcoMoon.eot'); src: url('../../../../media/jui/fonts/IcoMoon.eot?#iefix') format('embedded-opentype'), url('../../../../media/jui/fonts/IcoMoon.woff') format('woff'), url('../../../../media/jui/fonts/IcoMoon.ttf') format('truetype'), url('../../../../media/jui/fonts/IcoMoon.svg#IcoMoon') format('svg'); font-weight: normal; font-style: normal; } [data-icon]:before { font-family: 'IcoMoon'; content: attr(data-icon); speak: none; } [class^="icon-"], [class*=" icon-"] { display: inline-block; width: 14px; height: 14px; margin-right: .25em; line-height: 14px; } [class^="icon-"]:before, [class*=" icon-"]:before { font-family: 'IcoMoon'; font-style: normal; speak: none; } [class^="icon-"].disabled, [class*=" icon-"].disabled { font-weight: normal; } .icon-joomla:before { content: "\e200"; } .icon-chevron-up:before, .icon-uparrow:before, .icon-arrow-up:before { content: "\e005"; } .icon-chevron-right:before, .icon-rightarrow:before, .icon-arrow-right:before { content: "\e006"; } .icon-chevron-down:before, .icon-downarrow:before, .icon-arrow-down:before { content: "\e007"; } .icon-chevron-left:before, .icon-leftarrow:before, .icon-arrow-left:before { content: "\e008"; } .icon-arrow-first:before { content: "\e003"; } .icon-arrow-last:before { content: "\e004"; } .icon-arrow-up-2:before { content: "\e009"; } .icon-arrow-right-2:before { content: "\e00a"; } .icon-arrow-down-2:before { content: "\e00b"; } .icon-arrow-left-2:before { content: "\e00c"; } .icon-arrow-up-3:before { content: "\e00f"; } .icon-arrow-right-3:before { content: "\e010"; } .icon-arrow-down-3:before { content: "\e011"; } .icon-arrow-left-3:before { content: "\e012"; } .icon-menu-2:before { content: "\e00e"; } .icon-arrow-up-4:before { content: "\e201"; } .icon-arrow-right-4:before { content: "\e202"; } .icon-arrow-down-4:before { content: "\e203"; } .icon-arrow-left-4:before { content: "\e204"; } .icon-share:before, .icon-redo:before { content: "\27"; } .icon-undo:before { content: "\28"; } .icon-forward-2:before { content: "\e205"; } .icon-backward-2:before, .icon-reply:before { content: "\e206"; } .icon-unblock:before, .icon-refresh:before, .icon-redo-2:before { content: "\6c"; } .icon-undo-2:before { content: "\e207"; } .icon-move:before { content: "\7a"; } .icon-expand:before { content: "\66"; } .icon-contract:before { content: "\67"; } .icon-expand-2:before { content: "\68"; } .icon-contract-2:before { content: "\69"; } .icon-play:before { content: "\e208"; } .icon-pause:before { content: "\e209"; } .icon-stop:before { content: "\e210"; } .icon-previous:before, .icon-backward:before { content: "\7c"; } .icon-next:before, .icon-forward:before { content: "\7b"; } .icon-first:before { content: "\7d"; } .icon-last:before { content: "\e000"; } .icon-play-circle:before { content: "\e00d"; } .icon-pause-circle:before { content: "\e211"; } .icon-stop-circle:before { content: "\e212"; } .icon-backward-circle:before { content: "\e213"; } .icon-forward-circle:before { content: "\e214"; } .icon-loop:before { content: "\e001"; } .icon-shuffle:before { content: "\e002"; } .icon-search:before { content: "\53"; } .icon-zoom-in:before { content: "\64"; } .icon-zoom-out:before { content: "\65"; } .icon-apply:before, .icon-edit:before, .icon-pencil:before { content: "\2b"; } .icon-pencil-2:before { content: "\2c"; } .icon-brush:before { content: "\3b"; } .icon-save-new:before, .icon-plus-2:before { content: "\5d"; } .icon-minus-sign:before, .icon-minus-2:before { content: "\5e"; } .icon-delete:before, .icon-remove:before, .icon-cancel-2:before { content: "\49"; } .icon-publish:before, .icon-save:before, .icon-ok:before, .icon-checkmark:before { content: "\47"; } .icon-new:before, .icon-plus:before { content: "\2a"; } .icon-plus-circle:before { content: "\e215"; } .icon-minus:before, .icon-not-ok:before { content: "\4b"; } .icon-ban-circle:before, .icon-minus-circle:before { content: "\e216"; } .icon-unpublish:before, .icon-cancel:before { content: "\4a"; } .icon-cancel-circle:before { content: "\e217"; } .icon-checkmark-2:before { content: "\e218"; } .icon-checkmark-circle:before { content: "\e219"; } .icon-info:before { content: "\e220"; } .icon-info-2:before, .icon-info-circle:before { content: "\e221"; } .icon-question:before, .icon-question-sign:before, .icon-help:before { content: "\45"; } .icon-question-2:before, .icon-question-circle:before { content: "\e222"; } .icon-notification:before { content: "\e223"; } .icon-notification-2:before, .icon-notification-circle:before { content: "\e224"; } .icon-pending:before, .icon-warning:before { content: "\48"; } .icon-warning-2:before, .icon-warning-circle:before { content: "\e225"; } .icon-checkbox-unchecked:before { content: "\3d"; } .icon-checkin:before, .icon-checkbox:before, .icon-checkbox-checked:before { content: "\3e"; } .icon-checkbox-partial:before { content: "\3f"; } .icon-square:before { content: "\e226"; } .icon-radio-unchecked:before { content: "\e227"; } .icon-radio-checked:before, .icon-generic:before { content: "\e228"; } .icon-circle:before { content: "\e229"; } .icon-signup:before { content: "\e230"; } .icon-grid:before, .icon-grid-view:before { content: "\58"; } .icon-grid-2:before, .icon-grid-view-2:before { content: "\59"; } .icon-menu:before { content: "\5a"; } .icon-list:before, .icon-list-view:before { content: "\31"; } .icon-list-2:before { content: "\e231"; } .icon-menu-3:before { content: "\e232"; } .icon-folder-open:before, .icon-folder:before { content: "\2d"; } .icon-folder-close:before, .icon-folder-2:before { content: "\2e"; } .icon-folder-plus:before { content: "\e234"; } .icon-folder-minus:before { content: "\e235"; } .icon-folder-3:before { content: "\e236"; } .icon-folder-plus-2:before { content: "\e237"; } .icon-folder-remove:before { content: "\e238"; } .icon-file:before { content: "\e016"; } .icon-file-2:before { content: "\e239"; } .icon-file-add:before, .icon-file-plus:before { content: "\29"; } .icon-file-minus:before { content: "\e017"; } .icon-file-check:before { content: "\e240"; } .icon-file-remove:before { content: "\e241"; } .icon-save-copy:before, .icon-copy:before { content: "\e018"; } .icon-stack:before { content: "\e242"; } .icon-tree:before { content: "\e243"; } .icon-tree-2:before { content: "\e244"; } .icon-paragraph-left:before { content: "\e246"; } .icon-paragraph-center:before { content: "\e247"; } .icon-paragraph-right:before { content: "\e248"; } .icon-paragraph-justify:before { content: "\e249"; } .icon-screen:before { content: "\e01c"; } .icon-tablet:before { content: "\e01d"; } .icon-mobile:before { content: "\e01e"; } .icon-box-add:before { content: "\51"; } .icon-box-remove:before { content: "\52"; } .icon-download:before { content: "\e021"; } .icon-upload:before { content: "\e022"; } .icon-home:before { content: "\21"; } .icon-home-2:before { content: "\e250"; } .icon-out-2:before, .icon-new-tab:before { content: "\e024"; } .icon-out-3:before, .icon-new-tab-2:before { content: "\e251"; } .icon-link:before { content: "\e252"; } .icon-picture:before, .icon-image:before { content: "\2f"; } .icon-pictures:before, .icon-images:before { content: "\30"; } .icon-palette:before, .icon-color-palette:before { content: "\e014"; } .icon-camera:before { content: "\55"; } .icon-camera-2:before, .icon-video:before { content: "\e015"; } .icon-play-2:before, .icon-video-2:before, .icon-youtube:before { content: "\56"; } .icon-music:before { content: "\57"; } .icon-user:before { content: "\22"; } .icon-users:before { content: "\e01f"; } .icon-vcard:before { content: "\6d"; } .icon-address:before { content: "\70"; } .icon-share-alt:before, .icon-out:before { content: "\26"; } .icon-enter:before { content: "\e257"; } .icon-exit:before { content: "\e258"; } .icon-comment:before, .icon-comments:before { content: "\24"; } .icon-comments-2:before { content: "\25"; } .icon-quote:before, .icon-quotes-left:before { content: "\60"; } .icon-quote-2:before, .icon-quotes-right:before { content: "\61"; } .icon-quote-3:before, .icon-bubble-quote:before { content: "\e259"; } .icon-phone:before { content: "\e260"; } .icon-phone-2:before { content: "\e261"; } .icon-envelope:before, .icon-mail:before { content: "\4d"; } .icon-envelope-opened:before, .icon-mail-2:before { content: "\4e"; } .icon-unarchive:before, .icon-drawer:before { content: "\4f"; } .icon-archive:before, .icon-drawer-2:before { content: "\50"; } .icon-briefcase:before { content: "\e020"; } .icon-tag:before { content: "\e262"; } .icon-tag-2:before { content: "\e263"; } .icon-tags:before { content: "\e264"; } .icon-tags-2:before { content: "\e265"; } .icon-options:before, .icon-cog:before { content: "\38"; } .icon-cogs:before { content: "\37"; } .icon-screwdriver:before, .icon-tools:before { content: "\36"; } .icon-wrench:before { content: "\3a"; } .icon-equalizer:before { content: "\39"; } .icon-dashboard:before { content: "\78"; } .icon-switch:before { content: "\e266"; } .icon-filter:before { content: "\54"; } .icon-purge:before, .icon-trash:before { content: "\4c"; } .icon-checkedout:before, .icon-lock:before, .icon-locked:before { content: "\23"; } .icon-unlock:before { content: "\e267"; } .icon-key:before { content: "\5f"; } .icon-support:before { content: "\46"; } .icon-database:before { content: "\62"; } .icon-scissors:before { content: "\e268"; } .icon-health:before { content: "\6a"; } .icon-wand:before { content: "\6b"; } .icon-eye-open:before, .icon-eye:before { content: "\3c"; } .icon-eye-close:before, .icon-eye-blocked:before, .icon-eye-2:before { content: "\e269"; } .icon-clock:before { content: "\6e"; } .icon-compass:before { content: "\6f"; } .icon-broadcast:before, .icon-connection:before, .icon-wifi:before { content: "\e01b"; } .icon-book:before { content: "\e271"; } .icon-lightning:before, .icon-flash:before { content: "\79"; } .icon-print:before, .icon-printer:before { content: "\e013"; } .icon-feed:before { content: "\71"; } .icon-calendar:before { content: "\43"; } .icon-calendar-2:before { content: "\44"; } .icon-calendar-3:before { content: "\e273"; } .icon-pie:before { content: "\77"; } .icon-bars:before { content: "\76"; } .icon-chart:before { content: "\75"; } .icon-power-cord:before { content: "\32"; } .icon-cube:before { content: "\33"; } .icon-puzzle:before { content: "\34"; } .icon-attachment:before, .icon-paperclip:before, .icon-flag-2:before { content: "\72"; } .icon-lamp:before { content: "\74"; } .icon-pin:before, .icon-pushpin:before { content: "\73"; } .icon-location:before { content: "\63"; } .icon-shield:before { content: "\e274"; } .icon-flag:before { content: "\35"; } .icon-flag-3:before { content: "\e275"; } .icon-bookmark:before { content: "\e023"; } .icon-bookmark-2:before { content: "\e276"; } .icon-heart:before { content: "\e277"; } .icon-heart-2:before { content: "\e278"; } .icon-thumbs-up:before { content: "\5b"; } .icon-thumbs-down:before { content: "\5c"; } .icon-unfeatured:before, .icon-asterisk:before, .icon-star-empty:before { content: "\40"; } .icon-star-2:before { content: "\41"; } .icon-featured:before, .icon-default:before, .icon-star:before { content: "\42"; } .icon-smiley:before, .icon-smiley-happy:before { content: "\e279"; } .icon-smiley-2:before, .icon-smiley-happy-2:before { content: "\e280"; } .icon-smiley-sad:before { content: "\e281"; } .icon-smiley-sad-2:before { content: "\e282"; } .icon-smiley-neutral:before { content: "\e283"; } .icon-smiley-neutral-2:before { content: "\e284"; } .icon-cart:before { content: "\e019"; } .icon-basket:before { content: "\e01a"; } .icon-credit:before { content: "\e286"; } .icon-credit-2:before { content: "\e287"; } .icon-expired:before { content: "\4b"; } .icon-edit:before { color: #24748c; } .icon-publish:before, .icon-save:before, .icon-ok:before, .icon-save-new:before, .icon-save-copy:before, .btn-toolbar .icon-copy:before { color: #378137; } .icon-unpublish:before, .icon-not-ok:before, .icon-eye-close:before, .icon-ban-circle:before, .icon-minus-sign:before, .btn-toolbar .icon-cancel:before { color: #942a25; } .icon-featured:before, .icon-default:before, .icon-expired:before, .icon-pending:before { color: #c67605; } .icon-back:before { content: "\e008"; } html { height: 100%; } body { height: 100%; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; box-sizing: border-box; } a:hover, a:active, a:focus { outline: none; } .small { font-size: 11px; } .row-even .small, .row-odd .small, .row-even .small a, .row-odd .small a { color: #888; } .content-title { font-size: 24px; font-weight: normal; line-height: 26px; margin-top: 0; } .well .page-header { margin: -10px 0 18px 0; padding-bottom: 5px; } .well .module-title.nav-header { padding: 0 0 7px; margin: 0; font-size: 13px; } .well .row-even p, .well .row-odd p { margin-bottom: 0; } h1, h2, h3, h4, h5, h6 { margin: 12px 0; } h1 { font-size: 26px; line-height: 28px; } h2 { font-size: 22px; line-height: 24px; } h3 { font-size: 18px; line-height: 20px; } h4 { font-size: 14px; line-height: 16px; } h5 { font-size: 13px; line-height: 15px; } h6 { font-size: 12px; line-height: 14px; } .truncate { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .chzn-container .chzn-drop { border-radius: 0 0 3px 3px; } .control-group .chzn-container { max-width: 100%; } .control-group .chzn-container .chzn-choices li.search-field, .control-group .chzn-container .chzn-choices li.search-field input { width: 100% !important; } .chzn-container-single .chzn-single { background-color: #fff; background-clip: inherit; background-image: none; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,0.2); border-radius: 3px; box-shadow: 0 1px 0 rgba(255,255,255,0.2) inset, 0 1px 2px rgba(0,0,0,0.05); height: auto; line-height: 26px; } .chzn-container-single .chzn-single div { background-color: #f3f3f3; border-left: 1px solid #ccc; bottom: 0; height: auto; text-align: center; width: 28px; } .chzn-container-single .chzn-single div b { background-image: none; display: inline-block; } .chzn-container-single .chzn-single div b:after { content: '\E011'; font-family: IcoMoon; } .chzn-container-single .chzn-single abbr { background: none; right: 36px; top: 0; } .chzn-container-single .chzn-single abbr:before { font-family: IcoMoon; content: '\0049'; font-size: 10px; line-height: 26px; } .chzn-container-single .chzn-single abbr:hover { color: #000; } .chzn-container-single .chzn-search:after { content: '\0053'; font-family: IcoMoon; position: relative; right: 20px; top: 2px; } .chzn-container-single .chzn-search input[type="text"] { background: none; border-radius: 3px; border: 1px solid #ccc; box-shadow: none; height: 25px; } .chzn-container-single .chzn-search input[type="text"]:focus { border-color: #3071A9; } .chzn-container-single .chzn-drop { background-clip: padding-box; border-color: #3071A9; border-radius: 0 0 3px 3px; } .chzn-container-active .chzn-single { color: #3071A9; } .chzn-container-active.chzn-with-drop .chzn-single { background-image: none; border: 1px solid #3071A9; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .chzn-container-active.chzn-with-drop .chzn-single div { background-color: #f3f3f3; border-bottom: 1px solid #ccc; border-bottom-left-radius: 3px; border-left: 1px solid #ccc; } .chzn-container-active.chzn-with-drop .chzn-single div b:after { content: '\E00F'; font-family: IcoMoon; } .chzn-container-active.chzn-container-multi .chzn-choices { border: 1px solid #3071A9; box-shadow: none; } .chzn-container .chzn-results { background-color: #fff; border-radius: 0 0 3px 3px; margin: 0; padding: 0; } .chzn-container .chzn-results li.highlighted { background-color: #3071A9; background-image: none; } .chzn-color[rel="value_"] div { background-color: #f3f3f3; border-left: 1px solid #ccc; } .chzn-color-state.chzn-single div, .chzn-color.chzn-single[rel="value_0"] div, .chzn-color.chzn-single[rel="value_1"] div, .chzn-color-state.chzn-single[rel="value_-1"] div, .chzn-color-state.chzn-single[rel="value_-2"] div, .chzn-color.chzn-single[rel="value_hide"] div, .chzn-color.chzn-single[rel="value_show_no_link"] div, .chzn-color.chzn-single[rel="value_show_with_link"] div { background-color: transparent !important; border: none !important; } .chzn-container-active .chzn-choices { border: 1px solid #3071A9; } .chzn-container-multi .chzn-choices { background-image: none; border-radius: 3px; border: 1px solid #ccc; } .chzn-container-multi .chzn-choices li.search-choice { background-color: #3071A9; background-image: none; border: 0; box-shadow: none; color: #fff; line-height: 20px; padding: 0 7px; } .chzn-container-multi .chzn-choices li.search-choice .search-choice-close { color: #f5f5f5; display: inline-block; margin-left: 5px; position: relative; top: 0; left: 0; background-image: none; font-size: inherit; } .chzn-container-multi .chzn-choices li.search-choice .search-choice-close:hover { text-decoration: none; } .chzn-container-multi .chzn-choices li.search-choice .search-choice-close:before { font-family: IcoMoon; content: '\004A'; position: relative; right: 1px; top: 0; } .js-stools .js-stools-container-bar .js-stools-field-filter .chzn-container { margin: 1px 0; padding: 0 !important; } .chzn-color.chzn-single[rel="value_1"], .chzn-color-reverse.chzn-single[rel="value_0"], .chzn-color-state.chzn-single[rel="value_1"], .chzn-color.chzn-single[rel="value_show_no_link"], .chzn-color.chzn-single[rel="value_show_with_link"] { background-color: #46a546; *background-color: #46a546; box-shadow: 0 1px 2px rgba(0,0,0,0.05); color: #ffffff; } .chzn-color.chzn-single[rel="value_1"]:hover, .chzn-color.chzn-single[rel="value_1"]:focus, .chzn-color.chzn-single[rel="value_1"]:active, .chzn-color.chzn-single[rel="value_1"].active, .chzn-color.chzn-single[rel="value_1"].disabled, .chzn-color.chzn-single[rel="value_1"][disabled], .chzn-color-reverse.chzn-single[rel="value_0"]:hover, .chzn-color-reverse.chzn-single[rel="value_0"]:focus, .chzn-color-reverse.chzn-single[rel="value_0"]:active, .chzn-color-reverse.chzn-single[rel="value_0"].active, .chzn-color-reverse.chzn-single[rel="value_0"].disabled, .chzn-color-reverse.chzn-single[rel="value_0"][disabled], .chzn-color-state.chzn-single[rel="value_1"]:hover, .chzn-color-state.chzn-single[rel="value_1"]:focus, .chzn-color-state.chzn-single[rel="value_1"]:active, .chzn-color-state.chzn-single[rel="value_1"].active, .chzn-color-state.chzn-single[rel="value_1"].disabled, .chzn-color-state.chzn-single[rel="value_1"][disabled], .chzn-color.chzn-single[rel="value_show_no_link"]:hover, .chzn-color.chzn-single[rel="value_show_no_link"]:focus, .chzn-color.chzn-single[rel="value_show_no_link"]:active, .chzn-color.chzn-single[rel="value_show_no_link"].active, .chzn-color.chzn-single[rel="value_show_no_link"].disabled, .chzn-color.chzn-single[rel="value_show_no_link"][disabled], .chzn-color.chzn-single[rel="value_show_with_link"]:hover, .chzn-color.chzn-single[rel="value_show_with_link"]:focus, .chzn-color.chzn-single[rel="value_show_with_link"]:active, .chzn-color.chzn-single[rel="value_show_with_link"].active, .chzn-color.chzn-single[rel="value_show_with_link"].disabled, .chzn-color.chzn-single[rel="value_show_with_link"][disabled] { color: #fff; background-color: #2f6f2f; *background-color: #2f6f2f; } .chzn-color.chzn-single[rel="value_1"]:active, .chzn-color.chzn-single[rel="value_1"].active, .chzn-color-reverse.chzn-single[rel="value_0"]:active, .chzn-color-reverse.chzn-single[rel="value_0"].active, .chzn-color-state.chzn-single[rel="value_1"]:active, .chzn-color-state.chzn-single[rel="value_1"].active, .chzn-color.chzn-single[rel="value_show_no_link"]:active, .chzn-color.chzn-single[rel="value_show_no_link"].active, .chzn-color.chzn-single[rel="value_show_with_link"]:active, .chzn-color.chzn-single[rel="value_show_with_link"].active { background-color: #46a546; } .chzn-color-state.chzn-single[rel="value_0"], .chzn-color-state.chzn-single[rel="value_-2"] { background-color: #bd362f; *background-color: #bd362f; box-shadow: 0 1px 2px rgba(0,0,0,0.05); color: #ffffff; } .chzn-color-state.chzn-single[rel="value_0"]:hover, .chzn-color-state.chzn-single[rel="value_0"]:focus, .chzn-color-state.chzn-single[rel="value_0"]:active, .chzn-color-state.chzn-single[rel="value_0"].active, .chzn-color-state.chzn-single[rel="value_0"].disabled, .chzn-color-state.chzn-single[rel="value_0"][disabled], .chzn-color-state.chzn-single[rel="value_-2"]:hover, .chzn-color-state.chzn-single[rel="value_-2"]:focus, .chzn-color-state.chzn-single[rel="value_-2"]:active, .chzn-color-state.chzn-single[rel="value_-2"].active, .chzn-color-state.chzn-single[rel="value_-2"].disabled, .chzn-color-state.chzn-single[rel="value_-2"][disabled] { color: #fff; background-color: #802420; *background-color: #802420; } .chzn-color-state.chzn-single[rel="value_0"]:active, .chzn-color-state.chzn-single[rel="value_0"].active, .chzn-color-state.chzn-single[rel="value_-2"]:active, .chzn-color-state.chzn-single[rel="value_-2"].active { background-color: #bd362f; } .CodeMirror { height: calc(100vh - 400px); min-height: 400px; max-height: 800px; } .form-horizontal .control-label { padding-right: 5px; text-align: left; } .form-horizontal .control-label .spacer hr { width: 380px; } @media (max-width: 420px) { .form-horizontal .control-label .spacer hr { width: 220px; } } .form-horizontal .field-spacer>.control-label { width: auto; } .form-horizontal #jform_catid_chzn { vertical-align: middle; } .form-vertical .control-label > label { display: inline-block; *display: inline; *zoom: 1; } .form-vertical .controls { margin-left: 0; } @media (max-width: 979px) { .form-horizontal-desktop .control-label { float: none; width: auto; padding-right: 0; padding-top: 0; text-align: left; } .form-horizontal-desktop .control-label > label { display: inline-block; *display: inline; *zoom: 1; } .form-horizontal-desktop .controls { margin-left: 0; } } @media (max-width: 1199px) { .row-fluid .row-fluid .form-horizontal-desktop .control-label { float: none; width: auto; padding-right: 0; padding-top: 0; text-align: left; } .row-fluid .row-fluid .form-horizontal-desktop .control-label > label { display: inline-block; *display: inline; *zoom: 1; } .row-fluid .row-fluid .form-horizontal-desktop .controls { margin-left: 0; } } .form-inline-header { margin: 5px 0; } .form-inline-header .control-group, .form-inline-header .control-label, .form-inline-header .controls { display: inline-block; *display: inline; *zoom: 1; } .form-inline-header .control-label { width: auto; padding-right: 10px; } .form-inline-header .controls { padding-right: 20px; } fieldset[class^="form-"] { min-width: 100%; } @-moz-document url-prefix() { fieldset[class^="form-"] { display: table-cell; } } fieldset.checkboxes input { float: left; } fieldset.checkboxes li { list-style: none; } .control-group, .controls, .controls input[type="text"], .controls input[type="number"], .controls input[type="email"], .controls select, .controls textarea { max-width: 100%; } .controls .btn-group > .btn { min-width: 50px; margin-left: -1px; } .controls .btn-group.btn-group-yesno { width: 220px; max-width: 100%; } .controls .btn-group.btn-group-yesno > .btn { width: 50%; min-width: 40px; padding: 2px 0; } input.input-large-text { font-size: 18px; line-height: 22px; height: auto; } textarea { resize: both; } textarea.vert { resize: vertical; } textarea.noResize { resize: none; } .subform-repeatable { padding-right: 10px; } .subform-repeatable > .btn-toolbar { margin: 0; } .subform-repeatable > .btn-toolbar .group-add { line-height: 26px; width: 56px; font-size: 13px; margin-left: 28px; } .subform-repeatable-group { margin-top: 20px; margin-left: 28px; border: 1px solid #ccc; padding: 8px 25px 15px; position: relative; border-radius: 3px; } .subform-repeatable-group > .btn-toolbar { margin: 0; } .subform-repeatable-group > .btn-toolbar .btn-group { margin-right: 0px; margin-top: -1px; position: static; } .subform-repeatable-group > .btn-toolbar .btn { font-size: 13px; line-height: 26px; background-color: #F3F3F3; position: absolute; } .subform-repeatable-group > .btn-toolbar .btn span { vertical-align: middle; line-height: 11px; } .subform-repeatable-group > .btn-toolbar .btn.btn-success { color: #378137; bottom: 0; right: 0; border-radius: 3px 0 0 0; border-width: 1px 0 0 1px; padding-top: 1px; } .subform-repeatable-group > .btn-toolbar .btn.btn-success .icon-plus:before { content: "]"; } .subform-repeatable-group > .btn-toolbar .btn.btn-danger { color: #942a25; top: 0; right: 0; border-radius: 0 0 0 3px; border-width: 0 0 1px 1px; } .subform-repeatable-group > .btn-toolbar .btn.btn-danger .icon-minus:before { content: "I"; } .subform-repeatable-group > .btn-toolbar .btn.btn-primary { color: #24748c; color: #333; right: 100%; top: 50%; margin-top: -27px; margin-right: 1px; border-radius: 3px 0 0 3px; border-width: 1px 0 1px 1px; line-height: 52px; } .subform-repeatable-group > .btn-toolbar .btn.btn-primary .icon-move:before { content: "Z"; } .subform-repeatable-group > .btn-toolbar .btn [class^="icon-"], .subform-repeatable-group > .btn-toolbar .btn [class*=" icon-"] { margin: 0; } .subform-repeatable-group > .btn-toolbar .btn:hover { background-color: #E6E6E6; } .subform-repeatable-group .control-group:last-of-type { margin-bottom: 10px; } @media (max-width: 979px) { .subform-repeatable-group > .btn-toolbar .btn-group { margin-bottom: 10px; } } .subform-table-layout .control-group { margin-bottom: 10px; } .subform-table-layout .control-group:last-of-type { margin-bottom: 0; } .subform-table-layout .controls { padding-right: 20px; } .subform-table-layout input { width: 100%; max-width: 206px; } .subform-table-layout table .btn-group { margin: 0 7px; } @media (max-width: 1024px) { .subform-table-layout .subform-repeatable { padding-right: 0; } .subform-table-layout .subform-repeatable tbody td:last-of-type { text-align: right; padding-bottom: 15px; } .subform-table-layout table, .subform-table-layout thead, .subform-table-layout tbody, .subform-table-layout th, .subform-table-layout td, .subform-table-layout tr { display: block; } .subform-table-layout table { border: 1px solid #ddd; } .subform-table-layout thead th { position: absolute; top: -9999px; left: -9999px; } .subform-table-layout thead th:last-of-type { position: static; width: 100% !important; text-align: right; box-sizing: border-box; border-left: 0; } .subform-table-layout tr { margin: 0; padding: 0; border: 0; } .subform-table-layout td { border: none; position: relative; padding-left: 50%; } .subform-table-layout tbody td:first-of-type { padding-top: 15px; border-top: 1px solid #ddd; } .subform-table-layout tbody td:first-of-type:before { top: 18px; } .subform-table-layout td:before { content: attr(data-column); position: absolute; top: 13px; left: 10px; padding-right: 10px; } } .controls > .radio:first-child, .controls > .checkbox:first-child { padding-top: 0; } .form-horizontal .controls > .radio:first-child, .form-horizontal .controls > .checkbox:first-child { padding-top: 5px; } .form-horizontal .controls > .radio.btn-group:first-child { padding-top: 0; } .form-horizontal .controls > .radio.btn-group-yesno:first-child { padding-top: 2px; } input.field-media-input { width: auto; } .header { background-color: #1a3867; border-top: 1px solid rgba(255,255,255,0.2); padding: 8px 25px; } @media (max-width: 767px) { .header { padding: 4px 18px; margin-left: -20px; margin-right: -20px; } } .header .navbar-search { margin-top: 0; } @media (max-width: 979px) { .header .navbar-search { border-top: 0; border-bottom: 0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } } .container-logo { float: right; text-align: right; } .logo { width: auto; max-width: 100%; max-height: 36px; height: auto; } .page-title { color: white; font-weight: normal; font-size: 20px; line-height: 36px; margin: 0; } .page-title [class^="icon-"], .page-title [class*=" icon-"] { margin-right: 16px; } @media (max-width: 767px) { .container-logo { display: none; } .page-title { font-size: 18px; line-height: 28px; } .page-title [class^="icon-"], .page-title [class*=" icon-"] { margin-right: 10px; } } .view-login { background-color: #17568c; padding-top: 0; } .view-login .container { width: 300px; position: absolute; top: 50%; left: 50%; margin-top: -206px; margin-left: -150px; } .view-login .navbar-fixed-bottom { padding-left: 20px; padding-right: 20px; text-align: center; } .view-login .navbar-fixed-bottom, .view-login .navbar-fixed-bottom a { color: #FCFCFC; } .view-login .navbar-inverse.navbar-fixed-bottom, .view-login .navbar-inverse.navbar-fixed-bottom a { color: #555; } .view-login .well { padding-bottom: 0; } .view-login .login-joomla { position: absolute; left: 50%; height: 24px; width: 24px; margin-left: -12px; font-size: 22px; } .view-login .navbar-fixed-bottom { position: absolute; } .view-login .input-medium { width: 176px; } .view-login #lang_chzn { width: 233px !important; max-width: none; } .view-login #lang_chzn .chzn-single div { width: 43px; } .view-login .input-prepend .add-on, .view-login .controls .btn-group > .btn { margin-left: 0; } .navbar-inverse { color: #333; } .login .btn-large { margin-top: 15px; } .login .form-inline .btn-group { display: block; } @media (max-width: 479px) { .login .chzn-single { width: 222px !important; } .login .chzn-container, .login .chzn-drop { width: 230px !important; } } @media (max-width: 319px) { .view-login .navbar-fixed-bottom { display: none; } } ul.manager .height-50 .icon-folder-2 { height: 35px; width: 35px; line-height: 35px; font-size: 30px; } #imageForm .well { margin-bottom: 5px; } .thumbnails-media .thumbnail { background-color: #f4f4f4; border-radius: 3px; border: 0; box-shadow: 0 0 0 1px rgba(0,0,0,0.05) inset; padding: 0px; height: 100px; width: 100px; margin: 8px; position: relative; text-align: center; overflow: hidden; } .thumbnails-media .thumbnail .close { background-color: #ccc; border-left: 1px solid rgba(0,0,0,0.1); height: 22px; line-height: 22px; opacity: 0.3; text-align: center; width: 22px; top: 0; right: 0; } .thumbnails-media .thumbnail .close:hover { background-color: #bbb; } .thumbnails-media .thumbnail *, .thumbnails-media .thumbnail *:before { -webkit-transition: all 0.2s ease; transition: all 0.2s ease; -webkit-box-sizing: border-box; box-sizing: border-box; } .thumbnails-media .thumbnail input[type="radio"], .thumbnails-media .thumbnail input[type="checkbox"] { margin: 0; opacity: 0.55; position: absolute; top: 5px; left: 5px; } .thumbnails-media .thumbnail .controls, .thumbnails-media .thumbnail .imginfoBorder { display: none; } .thumbnails-media .imgThumb { position: relative; z-index: 1; width: 100%; display: inline-block; } .thumbnails-media .imgThumb input { display: none; } .thumbnails-media .imgThumb label, .thumbnails-media .imgThumb .imgThumbInside { display: block; line-height: 100px; position: relative; width: 100%; border-radius: 3px; overflow: hidden; } .thumbnails-media .imgThumb label:before, .thumbnails-media .imgThumb .imgThumbInside:before { font-family: "IcoMoon"; font-style: normal; content: 'G'; position: absolute; top: 0; right: 0; background-color: #46a546; color: #fff; line-height: 26px; width: 26px; -webkit-transform: scale(0.5); transform: scale(0.5); opacity: 0; border-color: rgba(0,0,0,0.2); box-shadow: 0 1px 2px rgba(0,0,0,0.05); border-radius: 0 3px; } .thumbnails-media .imgThumb img { width: auto; } .thumbnails-media .selected :checked + label, .thumbnails-media .selected .imgThumbInside, .thumbnails-media .imgInput :checked + label, .thumbnails-media .imgInput .imgThumbInside { background-color: #ddd; } .thumbnails-media .selected :checked + label:before, .thumbnails-media .selected .imgThumbInside:before, .thumbnails-media .imgInput :checked + label:before, .thumbnails-media .imgInput .imgThumbInside:before { -webkit-transform: scale(1); transform: scale(1); opacity: 1; } .thumbnails-media .selected :checked + label:after, .thumbnails-media .selected .imgThumbInside:after, .thumbnails-media .imgInput :checked + label:after, .thumbnails-media .imgInput .imgThumbInside:after { position: absolute; top: 0; left: 0; right: 0; bottom: 0; content: ''; border: 3px solid #46a546; border-radius: 5px; } .thumbnails-media .imgDelete a.close, .thumbnails-media .imgPreview a { padding: 0; position: absolute; left: 0; z-index: 1; height: 26px; width: 26px; } .thumbnails-media .imgPreview a { width: 100%; } .thumbnails-media .imgDelete a.close { background-color: #bd362f; border-color: #bd362f rgba(0,0,0,0.2) rgba(0,0,0,0.2) #bd362f; top: 0; line-height: 28px; font-size: 12px; padding-left: 1px; color: #fff; border-bottom-right-radius: 3px; border-top-left-radius: 3px; z-index: 10; opacity: 0; -webkit-transform: scale(0.5); transform: scale(0.5); } .thumbnails-media .imgDelete a.close:hover { background-color: #802420; } .thumbnails-media .thumbnail:hover .imgDelete a.close { opacity: 1; -webkit-transform: scale(1); transform: scale(1); } .thumbnails-media .imgPreview a, .thumbnails-media .imgDetails { position: absolute; left: 0; text-align: left; background-color: #fff; border-color: rgba(0,0,0,0.2); bottom: 0; line-height: 26px; border: 1px solid rgba(0,0,0,0.1); border-width: 1px; border-radius: 0 3px 0 0; z-index: 1; } .thumbnails-media .imgPreview a:hover, .thumbnails-media .imgDetails:hover { background-color: #eee; } .thumbnails-media .imgDetails { padding: 0 5px; line-height: 20px; color: #555; } .thumbnails-media .imgFolder span { line-height: 90px; font-size: 38px; margin: 0; width: auto; } .thumbnails-media .imgFolder + .imgDetails { color: inherit; } .com_media .media a + a { margin-left: -1px; } .com_media .tree-holder { padding: 0 15px; } #folderframe.thumbnail { border: 0; box-shadow: none; padding: 0; } #mediamanager-form { margin: 0 -10px; overflow-x: hidden; } #mediamanager-form > .muted { padding: 0px; } #mediamanager-form .checkbox { padding-left: 30px; margin-bottom: 15px; } #mediamanager-form .checkbox input { margin-top: 3px; } #mediamanager-form .thumbnails { margin: 0 -8px; overflow-x: hidden; } #mediamanager-form .thumbnails .thumbnail { height: 120px; width: 120px; margin: 8px; } #mediamanager-form .thumbnails .imgThumb label, #mediamanager-form .thumbnails .imgTotal { line-height: 120px; } #mediamanager-form .icon-search::before { padding-right: 5px; padding-left: 1px; } #mediamanager-form .height-50 { background-color: #fafafa; height: 77px; position: relative; z-index: 1; width: 100%; display: inline-block; } #mediamanager-form .height-50 a, #mediamanager-form .height-50 .icon-folder-2 { display: inline-block; line-height: 75px; margin-top: -1px; } #mediamanager-form .height-50 a:after { bottom: 0; box-shadow: 0 0 0 1px rgba(0,0,0,0.08) inset; content: ""; display: block; left: 0; overflow: hidden; position: absolute; right: 0; top: 0; } #mediamanager-form .height-50 .icon-folder-2 { font-size: 40px; } .uploadform { margin-top: 20px; } body.modal-open { -ms-overflow-style: none; } .modal-header { padding: 0 20px; text-align: left; } .modal-header h3 { font-weight: normal; line-height: 50px; } .modal-header .close { width: 50px; margin-top: 0; margin-right: -15px; font-size: 2rem; line-height: 50px; border-left: 1px solid #ccc; } .modal-body { padding: 0; width: 100%; height: auto; max-height: none; } .modal-body .container-fluid { padding-top: 15px; padding-bottom: 15px; } .modal-footer { clear: both; } .contentpane { padding: 10px; height: auto; } @media (min-width: 768px) { .row-fluid .modal-batch [class*="span"] { margin-left: 0; } } .container-popup { padding: 10px; } .field-media-wrapper iframe { max-height: 75vh; } body .navbar, body .navbar-fixed-top { margin-bottom: 0; } .navbar-inner { min-height: 0; background: #f2f2f2; background-image: none; filter: none; } .navbar-inner .container-fluid { padding-left: 10px; padding-right: 10px; font-size: 15px; } .navbar-inverse .navbar-inner { background: #10223e; background-image: none; filter: none; } .navbar .navbar-text { line-height: 30px; } .navbar .admin-logo { float: left; padding: 7px 12px 0px 15px; font-size: 16px; color: #555; } .navbar .admin-logo:hover { color: #333; } .navbar-inverse.navbar .admin-logo { color: #d9d9d9; } .navbar-inverse.navbar .admin-logo:hover { color: #ffffff; } .navbar .brand { float: right; display: block; padding: 6px 10px; margin-left: -20px; font-size: inherit; font-weight: normal; } .navbar .brand:hover, .navbar .brand:focus { text-decoration: none; } .navbar .nav > li > a { padding: 6px 10px; } .navbar .nav > li > a:hover { color: white; } .navbar .nav > li > a:hover span.carot { border-bottom-color: #fff; border-top-color: #fff; } .navbar .dropdown-menu, .navbar .nav-user { font-size: 13px; } .navbar .nav-user .dropdown-menu li span { padding-left: 10px; } .navbar .nav > li ul { overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch; -moz-overflow-scrolling: touch; -ms-overflow-scrolling: touch; -o-overflow-scrolling: touch; overflow-scrolling: touch; height: auto; max-height: 500px; margin: 0; } .navbar .nav > li ul::-webkit-scrollbar { -webkit-appearance: none; width: 7px; } .navbar .nav > li ul::-webkit-scrollbar-thumb { border-radius: 4px; background-color: rgba(0,0,0,0.5); -webkit-box-shadow: 0 0 1px rgba(255,255,255,0.5); } .navbar .nav > li > .dropdown-menu:after { display: none; } .navbar .nav > .dropdown.open:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #fff; position: absolute; top: 25px; left: 10px; z-index: 1001; } .navbar .empty-nav { display: none; } .navbar-fixed-top .navbar-inner, .navbar-static-top .navbar-inner { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus, .dropdown-submenu:hover > a, .dropdown-submenu:focus > a { background-image: none; } .navbar-fixed-bottom { bottom: 0; } .navbar-fixed-bottom .navbar-inner { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .navbar .btn-navbar { background: #17568c; border: 1px solid #0D2242; margin-bottom: 2px; } @media (max-width: 767px) { .navbar .admin-logo { margin-left: 10px; padding: 9px 9px 0 9px; } } .navbar-search .search-query { background: rgba(255,255,255,0.3); } @media (max-width: 979px) { .navbar .nav { font-size: 13px; margin: 0 2px 0 0; } .navbar .nav > li > a { padding: 6px; } } @media (max-width: 767px) { .navbar-search.pull-right { float: none; text-align: center; } } @media (max-width: 738px) { .navbar .brand { font-size: 16px; } } .nav-collapse .nav li a, .dropdown-menu a { background-image: none; } .nav-collapse .dropdown-menu > li img { max-width: none; } @media (max-width: 767px) { .navbar-fixed-top .navbar-inner, .navbar-fixed-top .navbar-inner .container-fluid { padding: 0; } .navbar .brand { margin-top: 2px; float: none; text-align: center; } .navbar .btn-navbar { margin-top: 3px; margin-right: 3px; margin-bottom: 3px; } .nav-collapse .nav .nav-header { color: #fff; } .nav-collapse .nav, .navbar .nav-collapse .nav.pull-right { margin: 0; } .nav-collapse .dropdown-menu { margin: 0; } .nav-collapse .dropdown-menu > li > span { display: block; padding: 4px 15px; } .navbar-inverse .nav-collapse .dropdown-menu > li > span { color: #d9d9d9; } .nav-collapse .nav > li > a.dropdown-toggle { background-color: rgba(255,255,255,0.07); font-size: 12px; font-weight: bold; color: #eee; text-transform: uppercase; padding-left: 15px; } .nav-collapse .nav li a { margin-bottom: 0; border-top: 1px solid rgba(255,255,255,0.25); border-bottom: 1px solid rgba(0,0,0,0.5); } .nav-collapse .nav li ul li ul.dropdown-menu, .nav-collapse .nav li ul li:hover ul.dropdown-menu, .nav-collapse .caret { display: none !important; } .nav-collapse .nav > li > a, .nav-collapse .dropdown-menu a { font-size: 15px; font-weight: normal; color: #fff; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .navbar .nav-collapse .nav > li > .dropdown-menu::before, .navbar .nav-collapse .nav > li > .dropdown-menu::after, .navbar .nav-collapse .dropdown-submenu > a::after { display: none; } .nav-collapse .dropdown-menu li + li a { margin-bottom: 0; } } .quick-icons { font-size: 14px; margin-bottom: 20px; } .quick-icons .nav-header { margin: 12px 0 5px; font-size: 13px; } .quick-icons .nav-header:first-child { margin: 0 0 5px; } .quick-icons [class^="icon-"], .quick-icons [class*=" icon-"] { margin-right: 9px; } .quick-icons [class^="icon-"]:before, .quick-icons [class*=" icon-"]:before { font-size: 16px; margin-bottom: 20px; line-height: 18px; } html[dir=rtl] .quick-icons .nav-list [class^="icon-"], html[dir=rtl] .quick-icons .nav-list [class*=" icon-"] { margin-left: 9px; margin-right: 0; } .sidebar-nav .nav-list { padding-left: 25px; padding-right: 25px; } .sidebar-nav .nav-list > li > a { color: #555; padding: 3px 25px; margin-left: -26px; margin-right: -26px; } .sidebar-nav .nav-list > li.active > a { color: #fff; margin-right: -26px; } .sidebar-nav .nav-list > li > a:focus, .sidebar-nav .nav-list > li > a:hover { text-decoration: none; color: #fff; background-color: #2d6ca2; text-shadow: none; } .j-sidebar-container { position: absolute; display: block; left: -16.5%; width: 16.5%; margin: -18px 0 0 -1px; padding-top: 28px; padding-bottom: 40px; clear: both; background-color: #F0F0F0; border-bottom: 1px solid #dedede; border-right: 1px solid #dedede; -webkit-border-radius: 0 0 3px 0; -moz-border-radius: 0 0 3px 0; border-radius: 0 0 3px 0; } .j-sidebar-container.j-sidebar-hidden { left: -16.5%; } .j-sidebar-container.j-sidebar-visible { left: 0; } .j-sidebar-container .filter-select { padding: 0 14px; } .j-toggle-sidebar-header h3 { font-weight: normal; padding: 0 15px; } .j-toggle-button-wrapper { position: absolute; display: block; top: 7px; padding: 0; } .j-toggle-button-wrapper.j-toggle-hidden { right: -24px; } .j-toggle-button-wrapper.j-toggle-visible { right: 7px; } .j-toggle-sidebar-button { font-size: 16px; color: #3071a9; text-decoration: none; cursor: pointer; } .j-toggle-sidebar-button:hover { color: #1f496e; } #system-message-container, #j-main-container { padding: 0 0 0 5px; min-height: 0; } #system-message-container.j-toggle-main, #j-main-container.j-toggle-main, #system-debug.j-toggle-main { float: right; } @media (min-width: 768px) { .j-toggle-transition { -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease; } } @media (max-width: 979px) { .j-toggle-button-wrapper.j-toggle-hidden { right: -20px; } } @media (max-width: 767px) { .j-sidebar-container { position: relative; width: 100%; margin: 0 0 20px 0; padding: 0; background: transparent; border-right: 0; border-bottom: 0; } .j-sidebar-container.j-sidebar-hidden { margin-left: 16.5%; } .j-sidebar-container.j-sidebar-visible { margin-left: 0; } .j-toggle-sidebar-header, .j-toggle-button-wrapper { display: none; } .view-login select { width: 232px; } } @media (max-width: 420px) { .j-sidebar-container { margin: 0; } .view-login .input-medium { width: 180px; } .view-login select { width: 232px; } } #status { background: #ebebeb; border-top: 1px solid #dedede; padding: 4px 10px; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.08); -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.08); box-shadow: 0 0 3px rgba(0, 0, 0, 0.08); color: #626262; } #status .btn-group { margin: 0; } #status .btn-group.separator:after { content: ' '; display: block; float: left; background: #ADADAD; margin: 0 10px; height: 15px; width: 1px; } #status .btn-toolbar, #status p { margin: 0px; } #status .btn-toolbar, #status .btn-group { font-size: 12px; } #status a { color: #626262; } #status .badge { margin-right: .25em; } #status.status-top { background: #1a3867; -webkit-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.2) inset, 0px -1px 0px rgba(0, 0, 0, 0.3) inset, 0px -1px 0px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.2) inset, 0px -1px 0px rgba(0, 0, 0, 0.3) inset, 0px -1px 0px rgba(0, 0, 0, 0.3); box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.2) inset, 0px -1px 0px rgba(0, 0, 0, 0.3) inset, 0px -1px 0px rgba(0, 0, 0, 0.3); border-top: 0; color: #d9d9d9; padding: 2px 20px 6px 20px; } #status.status-top a { color: #d9d9d9; } @media (max-width: 479px) { .pagination a { padding: 5px; } .btn-group.divider, .header .row-fluid .span3, .header .row-fluid .span7 { display: none; } .navbar .btn { margin: 0; } .btn-subhead { display: block; margin: 10px 0; } .subhead-collapse.collapse { height: 0; overflow: hidden; } .btn-toolbar .btn-wrapper { display: block; margin: 0px 10px 5px 10px; } .btn-toolbar .btn-wrapper .btn { width: 100% !important; } .subhead { background: none repeat scroll 0 0 transparent; border-bottom: 0 solid #dedede; } .btn-group + .btn-group { margin-left: 10px; } .login .chzn-single { width: 222px !important; } .login .chzn-container, .login .chzn-drop { width: 230px !important; } #toolbar [class^="icon-"], #toolbar [class*=" icon-"] { background-color: transparent; border-right: medium none; width: 10px; } } table label { margin: 0; } td.has-context { height: 23px; } td.nowrap.has-context { width: 45%; } .subhead { background: #F0F0F0; border-bottom: 1px solid #dedede; color: #0C192E; text-shadow: 0 1px 0 #FFF; margin-bottom: 10px; min-height: 51px; } .subhead-collapse { margin-bottom: 19px; } .subhead-collapse.collapse { height: auto; overflow: visible; } .btn-toolbar { margin-bottom: 5px; } .btn-toolbar .btn-wrapper { display: inline-block; margin: 0 0 8px 5px; } .subhead-fixed { position: fixed; width: 100%; top: 30px; z-index: 100; } @media (max-width: 767px) { body { -webkit-overflow-scrolling: touch; } .subhead { margin-left: -20px; margin-right: -20px; padding-left: 10px; padding-right: 10px; } } .subhead h1 { font-size: 17px; font-weight: normal; margin-left: 10px; margin-top: 6px; } #toolbar { margin-bottom: 2px; margin-top: 12px; } #toolbar .btn { line-height: 24px; margin-right: 4px; padding: 0 10px; } #toolbar .btn-success { min-width: 148px; } #toolbar .btn-primary [class^="icon-"], #toolbar .btn-primary [class*=" icon-"], #toolbar .btn-warning [class^="icon-"], #toolbar .btn-warning [class*=" icon-"], #toolbar .btn-danger [class^="icon-"], #toolbar .btn-danger [class*=" icon-"], #toolbar .btn-success [class^="icon-"], #toolbar .btn-success [class*=" icon-"], #toolbar .btn-info [class^="icon-"], #toolbar .btn-info [class*=" icon-"], #toolbar .btn-inverse [class^="icon-"], #toolbar .btn-inverse [class*=" icon-"] { background-color: transparent; border-right: 0; border-left: 0; width: 16px; margin-left: 0; margin-right: 0; } #toolbar #toolbar-options, #toolbar #toolbar-help { float: right; } #toolbar [class^="icon-"], #toolbar [class*=" icon-"] { background-color: #e6e6e6; border-radius: 3px 0 0 3px; border-right: 1px solid #b3b3b3; height: auto; line-height: inherit; margin: 0 6px 0 -10px; opacity: 1; text-shadow: none; width: 28px; z-index: -1; } #toolbar iframe .btn-group .btn { margin-left: -1px !important; } html[dir=rtl] #toolbar #toolbar-options, html[dir=rtl] #toolbar #toolbar-help { float: left; } @media (max-width: 767px) { .subhead-fixed { position: static; width: auto; } } .btn-subhead { display: none; } @media (min-width: 480px) { #filter-bar { height: 29px; } } @media (max-width: 479px) { .navbar .btn { margin: 0; } .btn-subhead { display: block; margin: 10px 0; } .subhead-collapse.collapse { height: 0; overflow: hidden; } .btn-toolbar .btn-wrapper { display: block; margin: 0px 10px 5px 10px; } .btn-toolbar .btn-wrapper .btn { width: 100% !important; } .subhead { background: none repeat scroll 0 0 transparent; border-bottom: 0 solid #dedede; } #toolbar [class^="icon-"], #toolbar [class*=" icon-"] { background-color: transparent; border-right: medium none; width: 10px; } } @media (max-width: 319px) { .view-login .navbar-fixed-bottom { display: none; } } ul.treeselect, ul.treeselect li { margin: 0; padding: 0; } ul.treeselect { margin-top: 8px; } ul.treeselect li { padding: 2px 10px 2px; list-style: none; } ul.treeselect i.treeselect-toggle { line-height: 18px; } ul.treeselect label { font-size: 1em; margin-left: 8px; } ul.treeselect label.nav-header { padding: 0; } ul.treeselect input { margin: 2px 0 0 8px; } ul.treeselect .treeselect-menu { margin: 0 6px; } ul.treeselect ul.dropdown-menu { margin: 0; } ul.treeselect ul.dropdown-menu li { padding: 0 5px; border: none; } .tree-holder .folder-url, .tree-holder .file { position: relative; background-color: #fefefe; margin-bottom: 4px; padding: 0 10px; line-height: 32px; border: 1px solid rgba(0,0,0,0.08); } .tree-holder .folder-url, .tree-holder .folder-url:hover, .tree-holder .folder-url:focus { font-weight: bold; background-color: #f5f5f5; color: #3071a9; } .tree-holder .active { background-color: #3071a9; color: #fff; box-shadow: -3px 0 0 #36a2ff !important; } .tree-holder .active.folder-url { background-color: #f5f5f5; color: #3071a9; } .tree-holder .active.file:hover { background-color: #3071a9; } .tree-holder ul ul { box-shadow: -3px 0 0 rgba(0,0,0,0.08); padding-right: 0; } .tree-holder ul ul .folder-url, .tree-holder ul ul .file { box-shadow: -3px 0 0 #3071a9; border-left: 0; } .break-word { word-break: break-all; word-wrap: break-word; } .disabled { cursor: default; background-image: none; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .j-links-separator { margin: 20px 0px; width: 100%; height: 0px; border-top: 2px solid #DDDDDD; } .container-main, #system-debug { padding-bottom: 50px; } .pagination-toolbar { margin: 0; } .pagination-toolbar a { line-height: 26px; } .pull-right > .dropdown-menu, .dropdown-reverse { left: auto; right: 0; } .nav-filters hr { margin: 5px 0; } #assignment.tab-pane { min-height: 500px; } @media (max-width: 979px) { .container-fluid { padding-left: 10px; padding-right: 10px; } } @media (min-width: 768px) { body { padding-top: 30px; } .nav-collapse.collapse.in { height: auto !important; } } @media (max-width: 767px) { .container-fluid { padding-left: 0; padding-right: 0; } } @media (max-width: 479px) { .pagination a { padding: 5px; } .btn-group.divider, .header .row-fluid .span3, .header .row-fluid .span7 { display: none; } .btn-group + .btn-group { margin-left: 10px; } } .info-labels { margin-top: -5px; margin-bottom: 10px; } .sortable-handler.inactive { opacity: 0.3; filter: alpha(opacity=30); } .alert-joomlaupdate { text-align: center; } .alert-joomlaupdate button { vertical-align: baseline; } .j-jed-message { line-height: 2em; color: #333333; } .moor-box { z-index: 3; } .admin .chzn-container .chzn-drop { z-index: 1060; } .item-associations { margin: 0; } .item-associations li { list-style: none; display: inline-block; margin: 0 0 3px 0; } .item-associations li a { color: #ffffff; } #flag img { padding-top: 6px; vertical-align: top; } .tooltip { max-width: 400px; } .tooltip-inner { max-width: none; text-align: left; text-shadow: none; } th .tooltip-inner { font-weight: normal; } .tooltip.hasimage { opacity: 1; } #permissions-sliders .chzn-container { margin-top: -5px; position: absolute; } #permissions-sliders .table td { padding: 8px 8px 9px; } .img-preview > img { max-height: 100%; } .alert-no-items { margin-top: 20px; } @media (max-width: 767px) { html[dir=rtl] #toolbar #toolbar-options, html[dir=rtl] #toolbar #toolbar-help, #toolbar #toolbar-options, #toolbar #toolbar-help { float: none; } } #permissions-sliders .input-small { width: 120px; } .editor { overflow: hidden; position: relative; } .editor textarea.mce_editable { box-sizing: border-box; } a.grid_false { display: inline-block; height: 16px; width: 16px; background-image: url('../images/admin/publish_r.png'); } a.grid_true { display: inline-block; height: 16px; width: 16px; background-image: url('../images/admin/icon-16-allow.png'); } textarea, input, .uneditable-input { box-shadow: none !important; } textarea:focus, input:focus, .uneditable-input:focus { box-shadow: none; border: 1px solid #3071A9; } .js-pstats-data-details dd { margin-left: 240px; } .js-pstats-data-details dt { width: 220px; } #permissions table td, #page-permissions table td { vertical-align: middle; } #permissions table select, #page-permissions table select { margin-bottom: 0; } .js-stools-container-bar .btn-primary .caret { border-bottom: 4px solid #fff; } .input-append .add-on, .input-append .btn, .input-append .btn-group > .dropdown-toggle, .input-prepend .add-on, .input-prepend .btn, .input-prepend .btn-group > .dropdown-toggle { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .alert, .alert-options, .badge, .breadcrumb > li, .close, .input-append .add-on, .input-prepend .add-on, .label, .nav-header, .nav-list .nav-header, .nav-list > .active > a, .nav-list > .active > a:focus, .nav-list > .active > a:hover, .nav-list > li > a, .nav-tabs.nav-dark, .navbar .brand, .navbar .nav > li > a, .navbar-inverse .brand, .navbar-inverse .nav > li > a, .navbar-inverse .navbar-search .search-query.focused, .navbar-inverse .navbar-search .search-query:focus, .progress .bar, .subhead { text-shadow: none; } .popover-content { min-height: 33px; } .lead, .navbar .brand, .hero-unit, .hero-unit .lead { font-weight: 400; } @media (min-width: 1200px) { #permissions .tab-content { position: sticky; top: 90px; } } .com_cpanel .well { padding: 8px 14px; border: 1px solid rgba(0,0,0,0.05); } .com_cpanel .well .module-title.nav-header { color: #555; } .com_cpanel .well > .row-striped, .com_cpanel .well > .list-striped { margin: 0 -14px; } .com_cpanel .well > .row-striped > .row-fluid, .com_cpanel .well > .list-striped > .row-fluid { padding: 8px 14px; } .com_cpanel .well > .row-striped > .row-fluid [class*="span"], .com_cpanel .well > .list-striped > .row-fluid [class*="span"] { margin-left: 0; } .com_cpanel .well > .row-striped > li, .com_cpanel .well > .list-striped > li { padding-left: 15px; padding-right: 15px; } .com_postinstall fieldset { background-color: #fafafa; border: 1px solid #ccc; border-radius: 5px; margin: 0 0 18px; padding: 4px 18px 18px; } .com_postinstall fieldset .btn { margin-top: 10px; } .com_postinstall legend { border: 0 none; display: inline-block; padding: 0 5px; margin-bottom: 0; width: auto; } .com_privacy .well { padding: 8px 14px; border: 1px solid rgba(0,0,0,0.05); } .com_privacy .well .module-title.nav-header { color: #555; } .com_privacy .well > .row-striped, .com_privacy .well > .list-striped { margin: 0 -14px; } .com_privacy .well > .row-striped > .row-fluid, .com_privacy .well > .list-striped > .row-fluid { padding: 8px 14px; } .com_privacy .well > .row-striped > .row-fluid [class*="span"], .com_privacy .well > .list-striped > .row-fluid [class*="span"] { margin-left: 0; } .com_privacy .well > .row-striped > li, .com_privacy .well > .list-striped > li { padding-left: 15px; padding-right: 15px; } #menu-assignment { position: relative; } #menu-assignment .menu-links { margin-top: 15px; margin-left: 0; -webkit-column-count: 4; -moz-column-count: 4; column-count: 4; -moz-column-gap: 15px; -webkit-column-gap: 15px; column-gap: 15px; } #menu-assignment .menu-links > li { display: inline-block; vertical-align: top; margin-bottom: 15px; width: 100%; list-style: none; page-break-inside: avoid; break-inside: avoid; } #menu-assignment .menu-links-block { background-color: #fafafa; border: 1px solid #ddd; border-radius: 3px; padding: 15px; } @media (max-width: 1199px) { #menu-assignment .menu-links { -webkit-column-count: 3; -moz-column-count: 3; column-count: 3; } } @media (max-width: 767px) { #menu-assignment .menu-links { -webkit-column-count: auto; -moz-column-count: auto; column-count: auto; } } PKb��\嵣4y+y+#templates/isis/css/template-rtl.cssnu�[���article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; } audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; } audio:not([controls]) { display: none; } html { font-size: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } a:hover, a:active { outline: 0; } sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; } img { max-width: 100%; width: auto \9; height: auto; vertical-align: middle; border: 0; -ms-interpolation-mode: bicubic; } #map_canvas img, .google-maps img, .gm-style img { max-width: none; } button, input, select, textarea { margin: 0; font-size: 100%; vertical-align: middle; } button, input { *overflow: visible; line-height: normal; } button::-moz-focus-inner, input::-moz-focus-inner { padding: 0; border: 0; } button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; cursor: pointer; } label, select, button, input[type="button"], input[type="reset"], input[type="submit"], input[type="radio"], input[type="checkbox"] { cursor: pointer; } input[type="search"] { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; -webkit-appearance: textfield; } input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { -webkit-appearance: none; } textarea { overflow: auto; vertical-align: top; } @media print { * { text-shadow: none !important; color: #000 !important; background: transparent !important; box-shadow: none !important; } a, a:visited { text-decoration: underline; } a[href]:after { content: " (" attr(href) ")"; } abbr[title]:after { content: " (" attr(title) ")"; } .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } thead { display: table-header-group; } tr, img { page-break-inside: avoid; } img { max-width: 100% !important; } @page { margin: 0.5cm; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } } .clearfix { *zoom: 1; } .clearfix:before, .clearfix:after { display: table; content: ""; line-height: 0; } .clearfix:after { clear: both; } .hide-text { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .input-block-level { display: block; width: 100%; min-height: 28px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } body { margin: 0; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px; color: #333; background-color: #fff; } a { color: #3071a9; text-decoration: none; } a:hover, a:focus { color: #1f496e; text-decoration: underline; } .img-rounded { -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .img-polaroid { padding: 4px; background-color: #fff; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,0.2); -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1); -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.1); box-shadow: 0 1px 3px rgba(0,0,0,0.1); } .img-circle { -webkit-border-radius: 500px; -moz-border-radius: 500px; border-radius: 500px; } .row { margin-left: -20px; *zoom: 1; } .row:before, .row:after { display: table; content: ""; line-height: 0; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 20px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 940px; } .span12 { width: 940px; } .span11 { width: 860px; } .span10 { width: 780px; } .span9 { width: 700px; } .span8 { width: 620px; } .span7 { width: 540px; } .span6 { width: 460px; } .span5 { width: 380px; } .span4 { width: 300px; } .span3 { width: 220px; } .span2 { width: 140px; } .span1 { width: 60px; } .offset12 { margin-left: 980px; } .offset11 { margin-left: 900px; } .offset10 { margin-left: 820px; } .offset9 { margin-left: 740px; } .offset8 { margin-left: 660px; } .offset7 { margin-left: 580px; } .offset6 { margin-left: 500px; } .offset5 { margin-left: 420px; } .offset4 { margin-left: 340px; } .offset3 { margin-left: 260px; } .offset2 { margin-left: 180px; } .offset1 { margin-left: 100px; } .row-fluid { width: 100%; *zoom: 1; } .row-fluid:before, .row-fluid:after { display: table; content: ""; line-height: 0; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; width: 100%; min-height: 28px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; float: left; margin-left: 2.1276595744681%; *margin-left: 2.0744680851064%; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.1276595744681%; } .row-fluid .span12 { width: 100%; *width: 99.946808510638%; } .row-fluid .span11 { width: 91.489361702128%; *width: 91.436170212766%; } .row-fluid .span10 { width: 82.978723404255%; *width: 82.925531914894%; } .row-fluid .span9 { width: 74.468085106383%; *width: 74.414893617021%; } .row-fluid .span8 { width: 65.957446808511%; *width: 65.904255319149%; } .row-fluid .span7 { width: 57.446808510638%; *width: 57.393617021277%; } .row-fluid .span6 { width: 48.936170212766%; *width: 48.882978723404%; } .row-fluid .span5 { width: 40.425531914894%; *width: 40.372340425532%; } .row-fluid .span4 { width: 31.914893617021%; *width: 31.86170212766%; } .row-fluid .span3 { width: 23.404255319149%; *width: 23.351063829787%; } .row-fluid .span2 { width: 14.893617021277%; *width: 14.840425531915%; } .row-fluid .span1 { width: 6.3829787234043%; *width: 6.3297872340426%; } .row-fluid .offset12 { margin-left: 104.25531914894%; *margin-left: 104.14893617021%; } .row-fluid .offset12:first-child { margin-left: 102.12765957447%; *margin-left: 102.02127659574%; } .row-fluid .offset11 { margin-left: 95.744680851064%; *margin-left: 95.63829787234%; } .row-fluid .offset11:first-child { margin-left: 93.617021276596%; *margin-left: 93.510638297872%; } .row-fluid .offset10 { margin-left: 87.234042553191%; *margin-left: 87.127659574468%; } .row-fluid .offset10:first-child { margin-left: 85.106382978723%; *margin-left: 85%; } .row-fluid .offset9 { margin-left: 78.723404255319%; *margin-left: 78.617021276596%; } .row-fluid .offset9:first-child { margin-left: 76.595744680851%; *margin-left: 76.489361702128%; } .row-fluid .offset8 { margin-left: 70.212765957447%; *margin-left: 70.106382978723%; } .row-fluid .offset8:first-child { margin-left: 68.085106382979%; *margin-left: 67.978723404255%; } .row-fluid .offset7 { margin-left: 61.702127659574%; *margin-left: 61.595744680851%; } .row-fluid .offset7:first-child { margin-left: 59.574468085106%; *margin-left: 59.468085106383%; } .row-fluid .offset6 { margin-left: 53.191489361702%; *margin-left: 53.085106382979%; } .row-fluid .offset6:first-child { margin-left: 51.063829787234%; *margin-left: 50.957446808511%; } .row-fluid .offset5 { margin-left: 44.68085106383%; *margin-left: 44.574468085106%; } .row-fluid .offset5:first-child { margin-left: 42.553191489362%; *margin-left: 42.446808510638%; } .row-fluid .offset4 { margin-left: 36.170212765957%; *margin-left: 36.063829787234%; } .row-fluid .offset4:first-child { margin-left: 34.042553191489%; *margin-left: 33.936170212766%; } .row-fluid .offset3 { margin-left: 27.659574468085%; *margin-left: 27.553191489362%; } .row-fluid .offset3:first-child { margin-left: 25.531914893617%; *margin-left: 25.425531914894%; } .row-fluid .offset2 { margin-left: 19.148936170213%; *margin-left: 19.042553191489%; } .row-fluid .offset2:first-child { margin-left: 17.021276595745%; *margin-left: 16.914893617021%; } .row-fluid .offset1 { margin-left: 10.63829787234%; *margin-left: 10.531914893617%; } .row-fluid .offset1:first-child { margin-left: 8.5106382978723%; *margin-left: 8.4042553191489%; } [class*="span"].hide, .row-fluid [class*="span"].hide { display: none; } [class*="span"].pull-right, .row-fluid [class*="span"].pull-right { float: right; } .container { margin-right: auto; margin-left: auto; *zoom: 1; } .container:before, .container:after { display: table; content: ""; line-height: 0; } .container:after { clear: both; } .container-fluid { padding-right: 20px; padding-left: 20px; *zoom: 1; } .container-fluid:before, .container-fluid:after { display: table; content: ""; line-height: 0; } .container-fluid:after { clear: both; } p { margin: 0 0 9px; } .lead { margin-bottom: 18px; font-size: 19.5px; font-weight: 200; line-height: 27px; } small { font-size: 85%; } strong { font-weight: bold; } em { font-style: italic; } cite { font-style: normal; } .muted { color: #999; } a.muted:hover, a.muted:focus { color: #808080; } .text-warning { color: #8a6d3b; } a.text-warning:hover, a.text-warning:focus { color: #66512c; } .text-error { color: #a94442; } a.text-error:hover, a.text-error:focus { color: #843534; } .text-info { color: #31708f; } a.text-info:hover, a.text-info:focus { color: #245269; } .text-success { color: #3c763d; } a.text-success:hover, a.text-success:focus { color: #2b542c; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } h1, h2, h3, h4, h5, h6 { margin: 9px 0; font-family: inherit; font-weight: bold; line-height: 18px; color: inherit; text-rendering: optimizelegibility; } h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { font-weight: normal; line-height: 1; color: #999; } h1, h2, h3 { line-height: 36px; } h1 { font-size: 35.75px; } h2 { font-size: 29.25px; } h3 { font-size: 22.75px; } h4 { font-size: 16.25px; } h5 { font-size: 13px; } h6 { font-size: 11.05px; } h1 small { font-size: 22.75px; } h2 small { font-size: 16.25px; } h3 small { font-size: 13px; } h4 small { font-size: 13px; } .page-header { padding-bottom: 8px; margin: 18px 0 27px; border-bottom: 1px solid #eee; } ul, ol { padding: 0; margin: 0 0 9px 25px; } ul ul, ul ol, ol ol, ol ul { margin-bottom: 0; } li { line-height: 18px; } ul.unstyled, ol.unstyled { margin-left: 0; list-style: none; } ul.inline, ol.inline { margin-left: 0; list-style: none; } ul.inline > li, ol.inline > li { display: inline-block; *display: inline; *zoom: 1; padding-left: 5px; padding-right: 5px; } dl { margin-bottom: 18px; } dt, dd { line-height: 18px; } dt { font-weight: bold; } dd { margin-left: 9px; } .dl-horizontal { *zoom: 1; } .dl-horizontal:before, .dl-horizontal:after { display: table; content: ""; line-height: 0; } .dl-horizontal:after { clear: both; } .dl-horizontal dt { float: left; width: 160px; clear: left; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .dl-horizontal dd { margin-left: 180px; } hr { margin: 18px 0; border: 0; border-top: 1px solid #eee; border-bottom: 1px solid #fff; } abbr[title], abbr[data-original-title] { cursor: help; border-bottom: 1px dotted #999; } abbr.initialism { font-size: 90%; text-transform: uppercase; } blockquote { padding: 0 0 0 15px; margin: 0 0 18px; border-left: 5px solid #eee; } blockquote p { margin-bottom: 0; font-size: 16.25px; font-weight: 300; line-height: 1.25; } blockquote small { display: block; line-height: 18px; color: #999; } blockquote small:before { content: '\2014 \00A0'; } blockquote.pull-right { float: right; padding-right: 15px; padding-left: 0; border-right: 5px solid #eee; border-left: 0; } blockquote.pull-right p, blockquote.pull-right small { text-align: right; } blockquote.pull-right small:before { content: ''; } blockquote.pull-right small:after { content: '\00A0 \2014'; } q:before, q:after, blockquote:before, blockquote:after { content: ""; } address { display: block; margin-bottom: 18px; font-style: normal; line-height: 18px; } code, pre { padding: 0 3px 2px; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 11px; color: #333; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } code { padding: 2px 4px; color: #d14; background-color: #f7f7f9; border: 1px solid #e1e1e8; white-space: nowrap; } pre { display: block; padding: 8.5px; margin: 0 0 9px; font-size: 12px; line-height: 18px; word-break: break-all; word-wrap: break-word; white-space: pre; white-space: pre-wrap; background-color: #f5f5f5; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,0.15); -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } pre.prettyprint { margin-bottom: 18px; } pre code { padding: 0; color: inherit; white-space: pre; white-space: pre-wrap; background-color: transparent; border: 0; } .pre-scrollable { max-height: 340px; overflow-y: scroll; } form { margin: 0 0 18px; } fieldset { padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; padding: 0; margin-bottom: 18px; font-size: 19.5px; line-height: 36px; color: #333; border: 0; border-bottom: 1px solid #e5e5e5; } legend small { font-size: 13.5px; color: #999; } label, input, button, select, textarea { font-size: 13px; font-weight: normal; line-height: 18px; } input, button, select, textarea { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } label { display: block; margin-bottom: 5px; } select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { display: inline-block; height: 18px; padding: 4px 6px; margin-bottom: 9px; font-size: 13px; line-height: 18px; color: #555; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; vertical-align: middle; } input, textarea, .uneditable-input { width: 206px; } textarea { height: auto; } textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { background-color: #fff; border: 1px solid #ccc; -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); -webkit-transition: border linear .2s, box-shadow linear .2s; -moz-transition: border linear .2s, box-shadow linear .2s; -o-transition: border linear .2s, box-shadow linear .2s; transition: border linear .2s, box-shadow linear .2s; } textarea:focus, input[type="text"]:focus, input[type="password"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus, .uneditable-input:focus { border-color: rgba(82,168,236,0.8); outline: 0; outline: thin dotted \9; -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); } input[type="radio"], input[type="checkbox"] { margin: 4px 0 0; *margin-top: 0; margin-top: 1px \9; line-height: normal; } input[type="file"], input[type="image"], input[type="submit"], input[type="reset"], input[type="button"], input[type="radio"], input[type="checkbox"] { width: auto; } select, input[type="file"] { height: 28px; *margin-top: 4px; line-height: 28px; } select { width: 220px; border: 1px solid #ccc; background-color: #fff; } select[multiple], select[size] { height: auto; } select:focus, input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .uneditable-input, .uneditable-textarea { color: #999; background-color: #fcfcfc; border-color: #ccc; -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.025); -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.025); box-shadow: inset 0 1px 2px rgba(0,0,0,0.025); cursor: not-allowed; } .uneditable-input { overflow: hidden; white-space: nowrap; } .uneditable-textarea { width: auto; height: auto; } input:-moz-placeholder, textarea:-moz-placeholder { color: #999; } input:-ms-input-placeholder, textarea:-ms-input-placeholder { color: #999; } input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #999; } .radio, .checkbox { min-height: 18px; padding-left: 20px; } .radio input[type="radio"], .checkbox input[type="checkbox"] { float: left; margin-left: -20px; } .controls > .radio:first-child, .controls > .checkbox:first-child { padding-top: 5px; } .radio.inline, .checkbox.inline { display: inline-block; padding-top: 5px; margin-bottom: 0; vertical-align: middle; } .radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { margin-left: 10px; } .input-mini { width: 60px; } .input-small { width: 90px; } .input-medium { width: 150px; } .input-large { width: 210px; } .input-xlarge { width: 270px; } .input-xxlarge { width: 530px; } input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"] { float: none; margin-left: 0; } .input-append input[class*="span"], .input-append .uneditable-input[class*="span"], .input-prepend input[class*="span"], .input-prepend .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"], .row-fluid .input-prepend [class*="span"], .row-fluid .input-append [class*="span"] { display: inline-block; } input, textarea, .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 20px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 926px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 846px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 766px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 686px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 606px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 526px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 446px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 366px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 286px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 206px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 126px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 46px; } .controls-row { *zoom: 1; } .controls-row:before, .controls-row:after { display: table; content: ""; line-height: 0; } .controls-row:after { clear: both; } .controls-row [class*="span"], .row-fluid .controls-row [class*="span"] { float: left; } .controls-row .checkbox[class*="span"], .controls-row .radio[class*="span"] { padding-top: 5px; } input[disabled], select[disabled], textarea[disabled], input[readonly], select[readonly], textarea[readonly] { cursor: not-allowed; background-color: #eee; } input[type="radio"][disabled], input[type="checkbox"][disabled], input[type="radio"][readonly], input[type="checkbox"][readonly] { background-color: transparent; } .control-group.warning .control-label, .control-group.warning .help-block, .control-group.warning .help-inline { color: #8a6d3b; } .control-group.warning .checkbox, .control-group.warning .radio, .control-group.warning input, .control-group.warning select, .control-group.warning textarea { color: #8a6d3b; } .control-group.warning input, .control-group.warning select, .control-group.warning textarea { border-color: #8a6d3b; } .control-group.warning input:focus, .control-group.warning select:focus, .control-group.warning textarea:focus { border-color: #66512c; } .control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on { color: #8a6d3b; background-color: #fcf8e3; border-color: #8a6d3b; } .control-group.error .control-label, .control-group.error .help-block, .control-group.error .help-inline { color: #a94442; } .control-group.error .checkbox, .control-group.error .radio, .control-group.error input, .control-group.error select, .control-group.error textarea { color: #a94442; } .control-group.error input, .control-group.error select, .control-group.error textarea { border-color: #a94442; } .control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus { border-color: #843534; } .control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on { color: #a94442; background-color: #f2dede; border-color: #a94442; } .control-group.success .control-label, .control-group.success .help-block, .control-group.success .help-inline { color: #3c763d; } .control-group.success .checkbox, .control-group.success .radio, .control-group.success input, .control-group.success select, .control-group.success textarea { color: #3c763d; } .control-group.success input, .control-group.success select, .control-group.success textarea { border-color: #3c763d; } .control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus { border-color: #2b542c; } .control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on { color: #3c763d; background-color: #dff0d8; border-color: #3c763d; } .control-group.info .control-label, .control-group.info .help-block, .control-group.info .help-inline { color: #31708f; } .control-group.info .checkbox, .control-group.info .radio, .control-group.info input, .control-group.info select, .control-group.info textarea { color: #31708f; } .control-group.info input, .control-group.info select, .control-group.info textarea { border-color: #31708f; } .control-group.info input:focus, .control-group.info select:focus, .control-group.info textarea:focus { border-color: #245269; } .control-group.info .input-prepend .add-on, .control-group.info .input-append .add-on { color: #31708f; background-color: #d9edf7; border-color: #31708f; } input:focus:invalid, textarea:focus:invalid, select:focus:invalid { color: #b94a48; border-color: #ee5f5b; } input:focus:invalid:focus, textarea:focus:invalid:focus, select:focus:invalid:focus { border-color: #e9322d; -webkit-box-shadow: 0 0 6px #f8b9b7; -moz-box-shadow: 0 0 6px #f8b9b7; box-shadow: 0 0 6px #f8b9b7; } .form-actions { padding: 17px 20px 18px; margin-top: 18px; margin-bottom: 18px; background-color: #F0F0F0; border-top: 1px solid #e5e5e5; *zoom: 1; } .form-actions:before, .form-actions:after { display: table; content: ""; line-height: 0; } .form-actions:after { clear: both; } .help-block, .help-inline { color: #595959; } .help-block { display: block; margin-bottom: 9px; } .help-inline { display: inline-block; *display: inline; *zoom: 1; vertical-align: middle; padding-left: 5px; } .input-append, .input-prepend { display: inline-block; margin-bottom: 9px; vertical-align: middle; font-size: 0; white-space: nowrap; } .input-append input, .input-append select, .input-append .uneditable-input, .input-append .dropdown-menu, .input-append .popover, .input-prepend input, .input-prepend select, .input-prepend .uneditable-input, .input-prepend .dropdown-menu, .input-prepend .popover { font-size: 13px; } .input-append input, .input-append select, .input-append .uneditable-input, .input-prepend input, .input-prepend select, .input-prepend .uneditable-input { position: relative; margin-bottom: 0; *margin-left: 0; vertical-align: top; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-append input:focus, .input-append select:focus, .input-append .uneditable-input:focus, .input-prepend input:focus, .input-prepend select:focus, .input-prepend .uneditable-input:focus { z-index: 2; } .input-append .add-on, .input-prepend .add-on { display: inline-block; width: auto; height: 18px; min-width: 16px; padding: 4px 5px; font-size: 13px; font-weight: normal; line-height: 18px; text-align: center; text-shadow: 0 1px 0 #fff; background-color: #eee; border: 1px solid #ccc; } .input-append .add-on, .input-append .btn, .input-append .btn-group > .dropdown-toggle, .input-prepend .add-on, .input-prepend .btn, .input-prepend .btn-group > .dropdown-toggle { vertical-align: top; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-prepend .add-on, .input-prepend .btn { margin-right: -1px; } .input-prepend .add-on:first-child, .input-prepend .btn:first-child { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append input, .input-append select, .input-append .uneditable-input { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append input + .btn-group .btn:last-child, .input-append select + .btn-group .btn:last-child, .input-append .uneditable-input + .btn-group .btn:last-child { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-append .add-on, .input-append .btn, .input-append .btn-group { margin-left: -1px; } .input-append .add-on:last-child, .input-append .btn:last-child, .input-append .btn-group:last-child > .dropdown-toggle { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend.input-append input, .input-prepend.input-append select, .input-prepend.input-append .uneditable-input { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-prepend.input-append input + .btn-group .btn, .input-prepend.input-append select + .btn-group .btn, .input-prepend.input-append .uneditable-input + .btn-group .btn { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend.input-append .add-on:first-child, .input-prepend.input-append .btn:first-child { margin-right: -1px; -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-prepend.input-append .add-on:last-child, .input-prepend.input-append .btn:last-child { margin-left: -1px; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend.input-append .btn-group:first-child { margin-left: 0; } input.search-query { padding-right: 14px; padding-right: 4px \9; padding-left: 14px; padding-left: 4px \9; margin-bottom: 0; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; } .form-search .input-append .search-query, .form-search .input-prepend .search-query { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .form-search .input-append .search-query { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .form-search .input-append .btn { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .search-query { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .btn { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .js-stools-field-filter .input-prepend, .js-stools-field-filter .input-append { margin-bottom: 0; } .form-search input, .form-search textarea, .form-search select, .form-search .help-inline, .form-search .uneditable-input, .form-search .input-prepend, .form-search .input-append, .form-inline input, .form-inline textarea, .form-inline select, .form-inline .help-inline, .form-inline .uneditable-input, .form-inline .input-prepend, .form-inline .input-append, .form-horizontal input, .form-horizontal textarea, .form-horizontal select, .form-horizontal .help-inline, .form-horizontal .uneditable-input, .form-horizontal .input-prepend, .form-horizontal .input-append { display: inline-block; *display: inline; *zoom: 1; margin-bottom: 0; vertical-align: middle; } .form-search .hide, .form-inline .hide, .form-horizontal .hide { display: none; } .form-search label, .form-inline label, .form-search .btn-group, .form-inline .btn-group { display: inline-block; } .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend { margin-bottom: 0; } .form-search .radio, .form-search .checkbox, .form-inline .radio, .form-inline .checkbox { padding-left: 0; margin-bottom: 0; vertical-align: middle; } .form-search .radio input[type="radio"], .form-search .checkbox input[type="checkbox"], .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { float: left; margin-right: 3px; margin-left: 0; } .control-group { margin-bottom: 9px; } legend + .control-group { margin-top: 18px; -webkit-margin-top-collapse: separate; } .form-horizontal .control-group { margin-bottom: 18px; *zoom: 1; } .form-horizontal .control-group:before, .form-horizontal .control-group:after { display: table; content: ""; line-height: 0; } .form-horizontal .control-group:after { clear: both; } .form-horizontal .control-label { float: left; width: 160px; padding-top: 5px; text-align: right; } .form-horizontal .controls { *display: inline-block; *padding-left: 20px; margin-left: 180px; *margin-left: 0; } .form-horizontal .controls:first-child { *padding-left: 180px; } .form-horizontal .help-block { margin-bottom: 0; } .form-horizontal input + .help-block, .form-horizontal select + .help-block, .form-horizontal textarea + .help-block, .form-horizontal .uneditable-input + .help-block, .form-horizontal .input-prepend + .help-block, .form-horizontal .input-append + .help-block { margin-top: 9px; } .form-horizontal .form-actions { padding-left: 180px; } .control-label .hasPopover, .control-label .hasTooltip { display: inline-block; } .subform-repeatable-wrapper .btn-group>.btn.button { min-width: 0; } .subform-repeatable-wrapper .ui-sortable-helper { background: #fff; } .subform-repeatable-wrapper tr.ui-sortable-helper { display: table; } @media (min-width: 980px) and (max-width: 1215px) { .float-cols .control-label { float: none; } .float-cols .controls { margin-left: 0; } } table { max-width: 100%; background-color: transparent; border-collapse: collapse; border-spacing: 0; } .table { width: 100%; margin-bottom: 18px; } .table th, .table td { padding: 8px; line-height: 18px; text-align: left; vertical-align: top; border-top: 1px solid #ddd; } .table th { font-weight: bold; } .table thead th { vertical-align: bottom; } .table caption + thead tr:first-child th, .table caption + thead tr:first-child td, .table colgroup + thead tr:first-child th, .table colgroup + thead tr:first-child td, .table thead:first-child tr:first-child th, .table thead:first-child tr:first-child td { border-top: 0; } .table tbody + tbody { border-top: 2px solid #ddd; } .table .table { background-color: #fff; } .table-condensed th, .table-condensed td { padding: 4px 5px; } .table-bordered { border: 1px solid #ddd; border-collapse: separate; *border-collapse: collapse; border-left: 0; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .table-bordered th, .table-bordered td { border-left: 1px solid #ddd; } .table-bordered caption + thead tr:first-child th, .table-bordered caption + tbody tr:first-child th, .table-bordered caption + tbody tr:first-child td, .table-bordered colgroup + thead tr:first-child th, .table-bordered colgroup + tbody tr:first-child th, .table-bordered colgroup + tbody tr:first-child td, .table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child td { border-top: 0; } .table-bordered thead:first-child tr:first-child > th:first-child, .table-bordered tbody:first-child tr:first-child > td:first-child, .table-bordered tbody:first-child tr:first-child > th:first-child { -webkit-border-top-left-radius: 3px; -moz-border-radius-topleft: 3px; border-top-left-radius: 3px; } .table-bordered thead:first-child tr:first-child > th:last-child, .table-bordered tbody:first-child tr:first-child > td:last-child, .table-bordered tbody:first-child tr:first-child > th:last-child { -webkit-border-top-right-radius: 3px; -moz-border-radius-topright: 3px; border-top-right-radius: 3px; } .table-bordered thead:last-child tr:last-child > th:first-child, .table-bordered tbody:last-child tr:last-child > td:first-child, .table-bordered tbody:last-child tr:last-child > th:first-child, .table-bordered tfoot:last-child tr:last-child > td:first-child, .table-bordered tfoot:last-child tr:last-child > th:first-child { -webkit-border-bottom-left-radius: 3px; -moz-border-radius-bottomleft: 3px; border-bottom-left-radius: 3px; } .table-bordered thead:last-child tr:last-child > th:last-child, .table-bordered tbody:last-child tr:last-child > td:last-child, .table-bordered tbody:last-child tr:last-child > th:last-child, .table-bordered tfoot:last-child tr:last-child > td:last-child, .table-bordered tfoot:last-child tr:last-child > th:last-child { -webkit-border-bottom-right-radius: 3px; -moz-border-radius-bottomright: 3px; border-bottom-right-radius: 3px; } .table-bordered tfoot + tbody:last-child tr:last-child td:first-child { -webkit-border-bottom-left-radius: 0; -moz-border-radius-bottomleft: 0; border-bottom-left-radius: 0; } .table-bordered tfoot + tbody:last-child tr:last-child td:last-child { -webkit-border-bottom-right-radius: 0; -moz-border-radius-bottomright: 0; border-bottom-right-radius: 0; } .table-bordered caption + thead tr:first-child th:first-child, .table-bordered caption + tbody tr:first-child td:first-child, .table-bordered colgroup + thead tr:first-child th:first-child, .table-bordered colgroup + tbody tr:first-child td:first-child { -webkit-border-top-left-radius: 3px; -moz-border-radius-topleft: 3px; border-top-left-radius: 3px; } .table-bordered caption + thead tr:first-child th:last-child, .table-bordered caption + tbody tr:first-child td:last-child, .table-bordered colgroup + thead tr:first-child th:last-child, .table-bordered colgroup + tbody tr:first-child td:last-child { -webkit-border-top-right-radius: 3px; -moz-border-radius-topright: 3px; border-top-right-radius: 3px; } .table-striped tbody > tr:nth-child(odd) > td, .table-striped tbody > tr:nth-child(odd) > th { background-color: #f9f9f9; } .table-hover tbody tr:hover > td, .table-hover tbody tr:hover > th { background-color: #F0F0F0; } table td[class*="span"], table th[class*="span"], .row-fluid table td[class*="span"], .row-fluid table th[class*="span"] { display: table-cell; float: none; margin-left: 0; } .table td.span1, .table th.span1 { float: none; width: 44px; margin-left: 0; } .table td.span2, .table th.span2 { float: none; width: 124px; margin-left: 0; } .table td.span3, .table th.span3 { float: none; width: 204px; margin-left: 0; } .table td.span4, .table th.span4 { float: none; width: 284px; margin-left: 0; } .table td.span5, .table th.span5 { float: none; width: 364px; margin-left: 0; } .table td.span6, .table th.span6 { float: none; width: 444px; margin-left: 0; } .table td.span7, .table th.span7 { float: none; width: 524px; margin-left: 0; } .table td.span8, .table th.span8 { float: none; width: 604px; margin-left: 0; } .table td.span9, .table th.span9 { float: none; width: 684px; margin-left: 0; } .table td.span10, .table th.span10 { float: none; width: 764px; margin-left: 0; } .table td.span11, .table th.span11 { float: none; width: 844px; margin-left: 0; } .table td.span12, .table th.span12 { float: none; width: 924px; margin-left: 0; } .table tbody tr.success > td { background-color: #dff0d8; } .table tbody tr.error > td { background-color: #f2dede; } .table tbody tr.warning > td { background-color: #fcf8e3; } .table tbody tr.info > td { background-color: #d9edf7; } .table-hover tbody tr.success:hover > td { background-color: #d0e9c6; } .table-hover tbody tr.error:hover > td { background-color: #ebcccc; } .table-hover tbody tr.warning:hover > td { background-color: #faf2cc; } .table-hover tbody tr.info:hover > td { background-color: #c4e3f3; } .table-noheader { border-collapse: collapse; } .table-noheader thead { display: none; } .dropup, .dropdown { position: relative; } .dropdown-toggle { *margin-bottom: -3px; } .dropdown-toggle:active, .open .dropdown-toggle { outline: 0; } .caret { display: inline-block; width: 0; height: 0; vertical-align: top; border-top: 4px solid #000; border-right: 4px solid transparent; border-left: 4px solid transparent; content: ""; } .dropdown .caret { margin-top: 8px; margin-left: 2px; } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; list-style: none; background-color: #fff; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,0.2); *border-right-width: 2px; *border-bottom-width: 2px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2); -moz-box-shadow: 0 5px 10px rgba(0,0,0,0.2); box-shadow: 0 5px 10px rgba(0,0,0,0.2); -webkit-background-clip: padding-box; -moz-background-clip: padding; background-clip: padding-box; } .dropdown-menu.pull-right { right: 0; left: auto; } .dropdown-menu .divider { *width: 100%; height: 1px; margin: 8px 1px; *margin: -5px 0 5px; overflow: hidden; background-color: #F0F0F0; border-bottom: 1px solid #fff; } .dropdown-menu .menuitem-group { margin: 4px 1px; overflow: hidden; border-top: 1px solid #eee; border-bottom: 1px solid #eee; background-color: #eee; color: #555; text-transform: capitalize; font-size: 95%; padding: 3px 20px; } .dropdown-menu > li > a { display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 18px; color: #333; white-space: nowrap; } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus, .dropdown-submenu:hover > a, .dropdown-submenu:focus > a { text-decoration: none; color: #fff; background-color: #2d6ca2; background-image: -moz-linear-gradient(top,#3071a9,#2a6496); background-image: -webkit-gradient(linear,0 0,0 100%,from(#3071a9),to(#2a6496)); background-image: -webkit-linear-gradient(top,#3071a9,#2a6496); background-image: -o-linear-gradient(top,#3071a9,#2a6496); background-image: linear-gradient(to bottom,#3071a9,#2a6496); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2f70a9', endColorstr='#ff296395', GradientType=0); } .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { color: #333; text-decoration: none; outline: 0; background-color: #2d6ca2; background-image: -moz-linear-gradient(top,#3071a9,#2a6496); background-image: -webkit-gradient(linear,0 0,0 100%,from(#3071a9),to(#2a6496)); background-image: -webkit-linear-gradient(top,#3071a9,#2a6496); background-image: -o-linear-gradient(top,#3071a9,#2a6496); background-image: linear-gradient(to bottom,#3071a9,#2a6496); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2f70a9', endColorstr='#ff296395', GradientType=0); } .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { color: #999; } .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { text-decoration: none; background-color: transparent; background-image: none; filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); cursor: default; } .open { *z-index: 1000; } .open > .dropdown-menu { display: block; } .dropdown-backdrop { position: fixed; left: 0; right: 0; bottom: 0; top: 0; z-index: 990; } .pull-right > .dropdown-menu { right: 0; left: auto; } .dropup .caret, .navbar-fixed-bottom .dropdown .caret { border-top: 0; border-bottom: 4px solid #000; content: ""; } .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; margin-bottom: 1px; } .dropdown-submenu { position: relative; } .dropdown-submenu > .dropdown-menu { top: 0; left: 100%; margin-top: -6px; margin-left: -1px; -webkit-border-radius: 6px 6px 6px 6px; -moz-border-radius: 6px 6px 6px 6px; border-radius: 6px 6px 6px 6px; } .dropdown-submenu:hover > .dropdown-menu { display: block; } .dropup .dropdown-submenu > .dropdown-menu { top: auto; bottom: 0; margin-top: 0; margin-bottom: -2px; -webkit-border-radius: 5px 5px 5px 0; -moz-border-radius: 5px 5px 5px 0; border-radius: 5px 5px 5px 0; } .dropdown-submenu > a:after { display: block; content: " "; float: right; width: 0; height: 0; border-color: transparent; border-style: solid; border-width: 5px 0 5px 5px; border-left-color: #cccccc; margin-top: 5px; margin-right: -10px; } .dropdown-submenu:hover > a:after { border-left-color: #fff; } .dropdown-submenu.pull-left { float: none; } .dropdown-submenu.pull-left > .dropdown-menu { left: -100%; margin-left: 10px; -webkit-border-radius: 6px 0 6px 6px; -moz-border-radius: 6px 0 6px 6px; border-radius: 6px 0 6px 6px; } .dropdown .dropdown-menu .nav-header { padding-left: 20px; padding-right: 20px; } .typeahead { z-index: 1051; margin-top: 2px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .well { min-height: 20px; padding: 19px; margin-bottom: 20px; background-color: #F0F0F0; border: 1px solid #F0F0F0; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .well blockquote { border-color: #f0f0f0; border-color: rgba(0,0,0,0.15); } .well-large { padding: 24px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .well-small { padding: 9px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .fade { opacity: 0; -webkit-transition: opacity .15s linear; -moz-transition: opacity .15s linear; -o-transition: opacity .15s linear; transition: opacity .15s linear; } .fade.in { opacity: 1; } .collapse { position: relative; height: 0; overflow: hidden; -webkit-transition: height .35s ease; -moz-transition: height .35s ease; -o-transition: height .35s ease; transition: height .35s ease; } .collapse.in { height: auto; } .close { float: right; font-size: 20px; font-weight: bold; line-height: 18px; color: #000; text-shadow: 0 1px 0 #ffffff; opacity: 0.2; filter: alpha(opacity=20); } .close:hover, .close:focus { color: #000; text-decoration: none; cursor: pointer; opacity: 0.4; filter: alpha(opacity=40); } button.close { padding: 3; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; } .alert-options { float: right; line-height: 18px; color: #000; text-shadow: 0 1px 0 #ffffff; opacity: 0.2; filter: alpha(opacity=20); } .alert-options:hover, .alert-options:focus { color: #000; text-decoration: none; cursor: pointer; opacity: 0.4; filter: alpha(opacity=40); } .btn { display: inline-block; *display: inline; *zoom: 1; padding: 4px 12px; margin-bottom: 0; font-size: 13px; line-height: 18px; text-align: center; vertical-align: middle; cursor: pointer; background-color: #f3f3f3; color: #333; border: 1px solid #b3b3b3; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; box-shadow: 0 1px 2px rgba(0,0,0,0.05); } .btn:hover, .btn:focus { background-color: #e6e6e6; text-decoration: none; text-shadow: none; } .btn:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .btn.active, .btn:active { background-image: none; outline: 0; } .btn.disabled, .btn[disabled] { cursor: default; background-image: none; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .btn-large { padding: 11px 19px; font-size: 16.25px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .btn-large [class^="icon-"], .btn-large [class*=" icon-"] { margin-top: 4px; } .btn-small { padding: 2px 10px; font-size: 12px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .btn-small [class^="icon-"], .btn-small [class*=" icon-"] { margin-top: 0; } .btn-mini [class^="icon-"], .btn-mini [class*=" icon-"] { margin-top: -1px; } .btn-mini { padding: 0 6px; font-size: 9.75px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .btn-block { display: block; width: 100%; padding-left: 0; padding-right: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .btn-block + .btn-block { margin-top: 5px; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } .btn-primary, .btn-warning, .btn-danger, .btn-success, .btn-info, .btn-inverse { box-shadow: 0 1px 2px rgba(0,0,0,0.05); } .btn-primary { border: 1px solid #15497c; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #2384d3; } .btn-primary:hover, .btn-primary:focus { background-color: #185b91; color: #fff; text-decoration: none; } .btn-warning { border: 1px solid #f89406; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #f89406; } .btn-warning:hover, .btn-warning:focus { background-color: #ad6704; color: #fff; text-decoration: none; text-shadow: none; } .btn-danger { border: 1px solid #bd362f; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #bd362f; } .btn-danger:hover, .btn-danger:focus { background-color: #802420; color: #fff; text-decoration: none; } .btn-success { border: 1px solid #378137; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #46a546; } .btn-success:hover, .btn-success:focus { background-color: #2f6f2f; color: #fff; text-decoration: none; } .btn-info { border: 1px solid #2f96b4; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #2f96b4; } .btn-info:hover, .btn-info:focus { background-color: #1f6377; color: #fff; text-decoration: none; } .btn-inverse { border: 1px solid #444; border: 1px solid rgba(0,0,0,0.2); color: #fff; background-color: #444; } .btn-inverse:hover, .btn-inverse:focus { background-color: #1e1e1e; color: #fff; text-decoration: none; } button.btn, input[type="submit"].btn { *padding-top: 3px; *padding-bottom: 3px; } button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner { padding: 0; border: 0; } button.btn.btn-large, input[type="submit"].btn.btn-large { *padding-top: 7px; *padding-bottom: 7px; } button.btn.btn-small, input[type="submit"].btn.btn-small { *padding-top: 3px; *padding-bottom: 3px; } button.btn.btn-mini, input[type="submit"].btn.btn-mini { *padding-top: 1px; *padding-bottom: 1px; } .btn-link, .btn-link:active, .btn-link[disabled] { background-color: transparent; background-image: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .btn-link { border-color: transparent; cursor: pointer; color: #3071a9; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .btn-link:hover, .btn-link:focus { color: #1f496e; text-decoration: underline; background-color: transparent; } .btn-link[disabled]:hover, .btn-link[disabled]:focus { color: #333; text-decoration: none; } .btn-group { position: relative; display: inline-block; *display: inline; *zoom: 1; font-size: 0; vertical-align: middle; white-space: nowrap; *margin-left: .3em; } .btn-group:first-child { *margin-left: 0; } .btn-group .btn + .btn { margin-left: -1px; } .btn-group + .btn-group { margin-left: 5px; } .btn-toolbar { font-size: 0; margin-top: 9px; margin-bottom: 9px; } .btn-toolbar > .btn + .btn, .btn-toolbar > .btn-group + .btn, .btn-toolbar > .btn + .btn-group { margin-left: 5px; } .btn-group > .btn { position: relative; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .btn-group > .btn-micro { margin-left: -1px; } .btn-group > .btn, .btn-group > .dropdown-menu, .btn-group > .popover { font-size: 13px; } .btn-group > .btn-mini { font-size: 9.75px; } .btn-group > .btn-small { font-size: 12px; } .btn-group > .btn-large { font-size: 16.25px; } .btn-group > .btn:first-child { margin-left: 0; -webkit-border-top-left-radius: 3px; -moz-border-radius-topleft: 3px; border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px; -moz-border-radius-bottomleft: 3px; border-bottom-left-radius: 3px; } .btn-group > .btn:last-child, .btn-group > .dropdown-toggle { -webkit-border-top-right-radius: 3px; -moz-border-radius-topright: 3px; border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; -moz-border-radius-bottomright: 3px; border-bottom-right-radius: 3px; } .btn-group > .btn.large:first-child { margin-left: 0; -webkit-border-top-left-radius: 6px; -moz-border-radius-topleft: 6px; border-top-left-radius: 6px; -webkit-border-bottom-left-radius: 6px; -moz-border-radius-bottomleft: 6px; border-bottom-left-radius: 6px; } .btn-group > .btn.large:last-child, .btn-group > .large.dropdown-toggle { -webkit-border-top-right-radius: 6px; -moz-border-radius-topright: 6px; border-top-right-radius: 6px; -webkit-border-bottom-right-radius: 6px; -moz-border-radius-bottomright: 6px; border-bottom-right-radius: 6px; } .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active { z-index: 2; } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } .btn-group > .btn + .dropdown-toggle { padding-left: 8px; padding-right: 8px; *padding-top: 5px; *padding-bottom: 5px; } .btn-group > .btn-mini + .dropdown-toggle { padding-left: 5px; padding-right: 5px; *padding-top: 2px; *padding-bottom: 2px; } .btn-group > .btn-small + .dropdown-toggle { *padding-top: 5px; *padding-bottom: 4px; } .btn-group > .btn-large + .dropdown-toggle { padding-left: 12px; padding-right: 12px; *padding-top: 7px; *padding-bottom: 7px; } .btn-group.open .dropdown-toggle { background-image: none; } .btn-group.open .btn.dropdown-toggle { background-color: #e6e6e6; } .btn-group.open .btn-primary.dropdown-toggle { background-color: #15497c; } .btn-group.open .btn-warning.dropdown-toggle { background-color: #c67605; } .btn-group.open .btn-danger.dropdown-toggle { background-color: #942a25; } .btn-group.open .btn-success.dropdown-toggle { background-color: #378137; } .btn-group.open .btn-info.dropdown-toggle { background-color: #24748c; } .btn-group.open .btn-inverse.dropdown-toggle { background-color: #222; } .btn .caret { margin-top: 8px; margin-left: 0; } .btn-large .caret { margin-top: 6px; } .btn-large .caret { border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; } .btn-mini .caret, .btn-small .caret { margin-top: 8px; } .dropup .btn-large .caret { border-bottom-width: 5px; } .btn-primary .caret { border-top-color: #1f496e; border-bottom-color: #1f496e; } .btn-warning .caret, .btn-danger .caret, .btn-info .caret, .btn-success .caret, .btn-inverse .caret { border-top-color: #fff; border-bottom-color: #fff; } .btn-group-vertical { display: inline-block; *display: inline; *zoom: 1; } .btn-group-vertical > .btn { display: block; float: none; max-width: 100%; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .btn-group-vertical > .btn + .btn { margin-left: 0; margin-top: -1px; } .btn-group-vertical > .btn:first-child { -webkit-border-radius: 3px 3px 0 0; -moz-border-radius: 3px 3px 0 0; border-radius: 3px 3px 0 0; } .btn-group-vertical > .btn:last-child { -webkit-border-radius: 0 0 3px 3px; -moz-border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px; } .btn-group-vertical > .btn-large:first-child { -webkit-border-radius: 6px 6px 0 0; -moz-border-radius: 6px 6px 0 0; border-radius: 6px 6px 0 0; } .btn-group-vertical > .btn-large:last-child { -webkit-border-radius: 0 0 6px 6px; -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; } .alert { padding: 8px 35px 8px 14px; margin-bottom: 18px; text-shadow: 0 1px 0 rgba(255,255,255,0.5); background-color: #fcf8e3; border: 1px solid #faebcc; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .alert, .alert h4 { color: #8a6d3b; } .alert h4 { margin: 0 0 .5em; } .alert .close { position: relative; top: -2px; right: -21px; line-height: 18px; cursor: pointer; } .alert-success { background-color: #dff0d8; border-color: #d6e9c6; color: #3c763d; } .alert-success h4 { color: #3c763d; } .alert-danger, .alert-error { background-color: #f2dede; border-color: #ebccd1; color: #a94442; } .alert-danger h4, .alert-error h4 { color: #a94442; } .alert-info { background-color: #d9edf7; border-color: #bce8f1; color: #31708f; } .alert-info h4 { color: #31708f; } .alert-block { padding-top: 14px; padding-bottom: 14px; } .alert-block > p, .alert-block > ul { margin-bottom: 0; } .alert-block p + p { margin-top: 5px; } .nav { margin-left: 0; margin-bottom: 18px; list-style: none; } .nav > li > a { display: block; } .nav > li > a:hover, .nav > li > a:focus { text-decoration: none; background-color: #eee; } .nav > li > a > img { max-width: none; } .nav > .pull-right { float: right; } .nav-header { display: block; padding: 3px 15px; font-size: 11px; font-weight: bold; line-height: 18px; color: #999; text-shadow: 0 1px 0 rgba(255,255,255,0.5); text-transform: uppercase; } .nav li + .nav-header { margin-top: 9px; } .nav-list { padding-left: 15px; padding-right: 15px; margin-bottom: 0; } .nav-list > li > a, .nav-list .nav-header { margin-left: -15px; margin-right: -15px; text-shadow: 0 1px 0 rgba(255,255,255,0.5); } .nav-list > li > a { padding: 3px 15px; } .nav-list > .active > a, .nav-list > .active > a:hover, .nav-list > .active > a:focus { color: #fff; text-shadow: 0 -1px 0 rgba(0,0,0,0.2); background-color: #3071a9; } .nav-list [class^="icon-"], .nav-list [class*=" icon-"] { margin-right: 2px; } .nav-list .divider { *width: 100%; height: 1px; margin: 8px 1px; *margin: -5px 0 5px; overflow: hidden; background-color: #e5e5e5; border-bottom: 1px solid #fff; } .nav-tabs, .nav-pills { *zoom: 1; } .nav-tabs:before, .nav-tabs:after, .nav-pills:before, .nav-pills:after { display: table; content: ""; line-height: 0; } .nav-tabs:after, .nav-pills:after { clear: both; } .nav-tabs > li, .nav-pills > li { float: left; } .nav-tabs > li > a, .nav-pills > li > a { padding-right: 12px; padding-left: 12px; margin-right: 2px; line-height: 14px; } .nav-tabs { border-bottom: 1px solid #ddd; } .nav-tabs > li { margin-bottom: -1px; } .nav-tabs > li > a { padding-top: 8px; padding-bottom: 8px; line-height: 18px; border: 1px solid transparent; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } .nav-tabs > li > a:hover, .nav-tabs > li > a:focus { border-color: #eee #eee #ddd; } .nav-tabs > .active > a, .nav-tabs > .active > a:hover, .nav-tabs > .active > a:focus { color: #555; background-color: #fff; border: 1px solid #ddd; border-bottom-color: transparent; cursor: default; } .nav-pills > li > a { padding-top: 8px; padding-bottom: 8px; margin-top: 2px; margin-bottom: 2px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .nav-pills > .active > a, .nav-pills > .active > a:hover, .nav-pills > .active > a:focus { color: #fff; background-color: #3071a9; } .nav-stacked > li { float: none; } .nav-stacked > li > a { margin-right: 0; } .nav-tabs.nav-stacked { border-bottom: 0; } .nav-tabs.nav-stacked > li > a { border: 1px solid #ddd; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .nav-tabs.nav-stacked > li:first-child > a { -webkit-border-top-right-radius: 4px; -moz-border-radius-topright: 4px; border-top-right-radius: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topleft: 4px; border-top-left-radius: 4px; } .nav-tabs.nav-stacked > li:last-child > a { -webkit-border-bottom-right-radius: 4px; -moz-border-radius-bottomright: 4px; border-bottom-right-radius: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomleft: 4px; border-bottom-left-radius: 4px; } .nav-tabs.nav-stacked > li > a:hover, .nav-tabs.nav-stacked > li > a:focus { border-color: #ddd; z-index: 2; } .nav-pills.nav-stacked > li > a { margin-bottom: 3px; } .nav-pills.nav-stacked > li:last-child > a { margin-bottom: 1px; } .nav-tabs .dropdown-menu { -webkit-border-radius: 0 0 6px 6px; -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; } .nav-pills .dropdown-menu { -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .nav .dropdown-toggle .caret { border-top-color: #3071a9; border-bottom-color: #3071a9; margin-top: 6px; } .nav .dropdown-toggle:hover .caret, .nav .dropdown-toggle:focus .caret { border-top-color: #1f496e; border-bottom-color: #1f496e; } .nav-tabs .dropdown-toggle .caret { margin-top: 8px; } .nav .active .dropdown-toggle .caret { border-top-color: #fff; border-bottom-color: #fff; } .nav-tabs .active .dropdown-toggle .caret { border-top-color: #555; border-bottom-color: #555; } .nav > .dropdown.active > a:hover, .nav > .dropdown.active > a:focus { cursor: pointer; } .nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > li.dropdown.open.active > a:hover, .nav > li.dropdown.open.active > a:focus { color: #fff; background-color: #999; border-color: #999; } .nav li.dropdown.open .caret, .nav li.dropdown.open.active .caret, .nav li.dropdown.open a:hover .caret, .nav li.dropdown.open a:focus .caret { border-top-color: #fff; border-bottom-color: #fff; opacity: 1; filter: alpha(opacity=100); } .tabs-stacked .open > a:hover, .tabs-stacked .open > a:focus { border-color: #999; } .tabbable { *zoom: 1; } .tabbable:before, .tabbable:after { display: table; content: ""; line-height: 0; } .tabbable:after { clear: both; } .tab-content { overflow: auto; } .tabs-below > .nav-tabs, .tabs-right > .nav-tabs, .tabs-left > .nav-tabs { border-bottom: 0; } .tab-content > .tab-pane, .pill-content > .pill-pane { display: none; } .tab-content > .active, .pill-content > .active { display: block; } .tabs-below > .nav-tabs { border-top: 1px solid #ddd; } .tabs-below > .nav-tabs > li { margin-top: -1px; margin-bottom: 0; } .tabs-below > .nav-tabs > li > a { -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; } .tabs-below > .nav-tabs > li > a:hover, .tabs-below > .nav-tabs > li > a:focus { border-bottom-color: transparent; border-top-color: #ddd; } .tabs-below > .nav-tabs > .active > a, .tabs-below > .nav-tabs > .active > a:hover, .tabs-below > .nav-tabs > .active > a:focus { border-color: transparent #ddd #ddd #ddd; } .tabs-left > .nav-tabs > li, .tabs-right > .nav-tabs > li { float: none; } .tabs-left > .nav-tabs > li > a, .tabs-right > .nav-tabs > li > a { min-width: 74px; margin-right: 0; margin-bottom: 3px; } .tabs-left > .nav-tabs { float: left; margin-right: 19px; border-right: 1px solid #ddd; } .tabs-left > .nav-tabs > li > a { margin-right: -1px; -webkit-border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px; } .tabs-left > .nav-tabs > li > a:hover, .tabs-left > .nav-tabs > li > a:focus { border-color: #eee #ddd #eee #eee; } .tabs-left > .nav-tabs .active > a, .tabs-left > .nav-tabs .active > a:hover, .tabs-left > .nav-tabs .active > a:focus { border-color: #ddd transparent #ddd #ddd; *border-right-color: #fff; } .tabs-right > .nav-tabs { float: right; margin-left: 19px; border-left: 1px solid #ddd; } .tabs-right > .nav-tabs > li > a { margin-left: -1px; -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } .tabs-right > .nav-tabs > li > a:hover, .tabs-right > .nav-tabs > li > a:focus { border-color: #eee #eee #eee #ddd; } .tabs-right > .nav-tabs .active > a, .tabs-right > .nav-tabs .active > a:hover, .tabs-right > .nav-tabs .active > a:focus { border-color: #ddd #ddd #ddd transparent; *border-left-color: #fff; } .nav > .disabled > a { color: #999; } .nav > .disabled > a:hover, .nav > .disabled > a:focus { text-decoration: none; background-color: transparent; cursor: default; } .navbar { overflow: visible; margin-bottom: 18px; *position: relative; *z-index: 2; } .navbar-inner { min-height: 40px; padding-left: 20px; padding-right: 20px; background-color: #fafafa; background-image: -moz-linear-gradient(top,#ffffff,#f2f2f2); background-image: -webkit-gradient(linear,0 0,0 100%,from(#ffffff),to(#f2f2f2)); background-image: -webkit-linear-gradient(top,#ffffff,#f2f2f2); background-image: -o-linear-gradient(top,#ffffff,#f2f2f2); background-image: linear-gradient(to bottom,#ffffff,#f2f2f2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); border: 1px solid #d4d4d4; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 4px rgba(0,0,0,0.065); -moz-box-shadow: 0 1px 4px rgba(0,0,0,0.065); box-shadow: 0 1px 4px rgba(0,0,0,0.065); *zoom: 1; } .navbar-inner:before, .navbar-inner:after { display: table; content: ""; line-height: 0; } .navbar-inner:after { clear: both; } .navbar .container { width: auto; } .nav-collapse.collapse { height: auto; overflow: visible; } .navbar .brand { float: left; display: block; padding: 11px 20px 11px; margin-left: -20px; font-size: 20px; font-weight: 200; color: #555; text-shadow: 0 1px 0 #ffffff; } .navbar .brand:hover, .navbar .brand:focus { text-decoration: none; } .navbar-text { margin-bottom: 0; line-height: 40px; color: #555; } .navbar-link { color: #555; } .navbar-link:hover, .navbar-link:focus { color: #333; } .navbar .divider-vertical { height: 40px; margin: 0 9px; border-left: 1px solid #f2f2f2; border-right: 1px solid #ffffff; } .navbar .btn, .navbar .btn-group { margin-top: 5px; } .navbar .btn-group .btn, .navbar .input-prepend .btn, .navbar .input-append .btn, .navbar .input-prepend .btn-group, .navbar .input-append .btn-group { margin-top: 0; } .navbar-form { margin-bottom: 0; *zoom: 1; } .navbar-form:before, .navbar-form:after { display: table; content: ""; line-height: 0; } .navbar-form:after { clear: both; } .navbar-form input, .navbar-form select, .navbar-form .radio, .navbar-form .checkbox { margin-top: 5px; } .navbar-form input, .navbar-form select, .navbar-form .btn { display: inline-block; margin-bottom: 0; } .navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] { margin-top: 3px; } .navbar-form .input-append, .navbar-form .input-prepend { margin-top: 5px; white-space: nowrap; } .navbar-form .input-append input, .navbar-form .input-prepend input { margin-top: 0; } .navbar-search { position: relative; float: left; margin-top: 5px; margin-bottom: 0; } .navbar-search .search-query { margin-bottom: 0; padding: 4px 14px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 13px; font-weight: normal; line-height: 1; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; } .navbar-static-top { position: static; margin-bottom: 0; } .navbar-static-top .navbar-inner { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .navbar-fixed-top, .navbar-fixed-bottom { position: fixed; right: 0; left: 0; z-index: 1030; margin-bottom: 0; } .navbar-fixed-top .navbar-inner, .navbar-static-top .navbar-inner { border-width: 0 0 1px; } .navbar-fixed-bottom .navbar-inner { border-width: 1px 0 0; } .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner { padding-left: 0; padding-right: 0; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 940px; } .navbar-fixed-top { top: 0; } .navbar-fixed-top .navbar-inner, .navbar-static-top .navbar-inner { -webkit-box-shadow: 0 1px 10px rgba(0,0,0,.1); -moz-box-shadow: 0 1px 10px rgba(0,0,0,.1); box-shadow: 0 1px 10px rgba(0,0,0,.1); } .navbar-fixed-bottom { bottom: 0; } .navbar-fixed-bottom .navbar-inner { -webkit-box-shadow: 0 -1px 10px rgba(0,0,0,.1); -moz-box-shadow: 0 -1px 10px rgba(0,0,0,.1); box-shadow: 0 -1px 10px rgba(0,0,0,.1); } .navbar .nav { position: relative; left: 0; display: block; float: left; margin: 0 10px 0 0; } .navbar .nav.pull-right { float: right; margin-right: 0; } .navbar .nav > li { float: left; } .navbar .nav > li > a { float: none; padding: 11px 15px 11px; color: #555; text-decoration: none; text-shadow: 0 1px 0 #ffffff; } .navbar .nav .dropdown-toggle .caret { margin-top: 8px; } .navbar .nav > li > a:focus, .navbar .nav > li > a:hover { background-color: transparent; color: #333; text-decoration: none; } .navbar .nav > li > a:focus { outline: 2px solid #5e9ed6; } .navbar .nav > .active > a, .navbar .nav > .active > a:hover, .navbar .nav > .active > a:focus { color: #555; text-decoration: none; background-color: #e6e6e6; -webkit-box-shadow: inset 0 3px 8px rgba(0,0,0,0.125); -moz-box-shadow: inset 0 3px 8px rgba(0,0,0,0.125); box-shadow: inset 0 3px 8px rgba(0,0,0,0.125); } .navbar .btn-navbar { display: none; float: right; padding: 7px 10px; margin-left: 5px; margin-right: 5px; background-color: #f2f2f2; *background-color: #f2f2f2; -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); } .navbar .btn-navbar:hover, .navbar .btn-navbar:focus, .navbar .btn-navbar:active, .navbar .btn-navbar.active, .navbar .btn-navbar.disabled, .navbar .btn-navbar[disabled] { color: #fff; background-color: #d9d9d9; *background-color: #d9d9d9; } .navbar .btn-navbar:active, .navbar .btn-navbar.active { background-color: #f2f2f2; } .navbar .btn-navbar .icon-bar { display: block; width: 18px; height: 2px; background-color: #f5f5f5; -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px; -webkit-box-shadow: 0 1px 0 rgba(0,0,0,0.25); -moz-box-shadow: 0 1px 0 rgba(0,0,0,0.25); box-shadow: 0 1px 0 rgba(0,0,0,0.25); } .btn-navbar .icon-bar + .icon-bar { margin-top: 3px; } .navbar .nav > li > .dropdown-menu:before { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 7px solid #ccc; border-bottom-color: rgba(0,0,0,0.2); position: absolute; top: -7px; left: 9px; } .navbar .nav > li > .dropdown-menu:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #fff; position: absolute; top: -6px; left: 10px; } .navbar-fixed-bottom .nav > li > .dropdown-menu:before { border-top: 7px solid #ccc; border-top-color: rgba(0,0,0,0.2); border-bottom: 0; bottom: -7px; top: auto; } .navbar-fixed-bottom .nav > li > .dropdown-menu:after { border-top: 6px solid #fff; border-bottom: 0; bottom: -6px; top: auto; } .navbar .nav li.dropdown > a:hover .caret, .navbar .nav li.dropdown > a:focus .caret { border-top-color: #333; border-bottom-color: #333; } .navbar .nav li.dropdown.open > .dropdown-toggle, .navbar .nav li.dropdown.active > .dropdown-toggle, .navbar .nav li.dropdown.open.active > .dropdown-toggle { background-color: #e6e6e6; color: #555; } .navbar .nav li.dropdown > .dropdown-toggle .caret { border-top-color: #555; border-bottom-color: #555; } .navbar .nav li.dropdown.open > .dropdown-toggle .caret, .navbar .nav li.dropdown.active > .dropdown-toggle .caret, .navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { border-top-color: #555; border-bottom-color: #555; } .navbar .pull-right > li > .dropdown-menu, .navbar .nav > li > .dropdown-menu.pull-right { left: auto; right: 0; } .navbar .pull-right > li > .dropdown-menu:before, .navbar .nav > li > .dropdown-menu.pull-right:before { left: auto; right: 12px; } .navbar .pull-right > li > .dropdown-menu:after, .navbar .nav > li > .dropdown-menu.pull-right:after { left: auto; right: 13px; } .navbar .pull-right > li > .dropdown-menu .dropdown-menu, .navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { left: auto; right: 100%; margin-left: 0; margin-right: -1px; -webkit-border-radius: 6px 0 6px 6px; -moz-border-radius: 6px 0 6px 6px; border-radius: 6px 0 6px 6px; } .navbar-inverse .navbar-inner { background-color: #13294a; background-image: -moz-linear-gradient(top,#152d53,#10223e); background-image: -webkit-gradient(linear,0 0,0 100%,from(#152d53),to(#10223e)); background-image: -webkit-linear-gradient(top,#152d53,#10223e); background-image: -o-linear-gradient(top,#152d53,#10223e); background-image: linear-gradient(to bottom,#152d53,#10223e); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff142c52', endColorstr='#ff0f213e', GradientType=0); border-color: #0b172a; } .navbar-inverse .brand, .navbar-inverse .nav > li > a { color: #d9d9d9; text-shadow: 0 -1px 0 rgba(0,0,0,0.25); } .navbar-inverse .brand:hover, .navbar-inverse .brand:focus, .navbar-inverse .nav > li > a:hover, .navbar-inverse .nav > li > a:focus { color: #fff; } .navbar-inverse .brand { color: #d9d9d9; } .navbar-inverse .navbar-text { color: #d9d9d9; } .navbar-inverse .nav > li > a:focus, .navbar-inverse .nav > li > a:hover { background-color: transparent; color: #fff; } .navbar-inverse .nav .active > a, .navbar-inverse .nav .active > a:hover, .navbar-inverse .nav .active > a:focus { color: #fff; background-color: #10223e; } .navbar-inverse .navbar-link { color: #d9d9d9; } .navbar-inverse .navbar-link:hover, .navbar-inverse .navbar-link:focus { color: #fff; } .navbar-inverse .divider-vertical { border-left-color: #10223e; border-right-color: #152d53; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { background-color: #10223e; color: #fff; } .navbar-inverse .nav li.dropdown > a:hover .caret, .navbar-inverse .nav li.dropdown > a:focus .caret { border-top-color: #fff; border-bottom-color: #fff; } .navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { border-top-color: #d9d9d9; border-bottom-color: #d9d9d9; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { border-top-color: #fff; border-bottom-color: #fff; } .navbar-inverse .navbar-search .search-query { color: #fff; background-color: #2959a4; border-color: #10223e; -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); -webkit-transition: none; -moz-transition: none; -o-transition: none; transition: none; } .navbar-inverse .navbar-search .search-query:-moz-placeholder { color: #ccc; } .navbar-inverse .navbar-search .search-query:-ms-input-placeholder { color: #ccc; } .navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { color: #ccc; } .navbar-inverse .navbar-search .search-query:focus, .navbar-inverse .navbar-search .search-query.focused { padding: 5px 15px; color: #333; text-shadow: 0 1px 0 #fff; background-color: #fff; border: 0; -webkit-box-shadow: 0 0 3px rgba(0,0,0,0.15); -moz-box-shadow: 0 0 3px rgba(0,0,0,0.15); box-shadow: 0 0 3px rgba(0,0,0,0.15); outline: 0; } .navbar-inverse .btn-navbar { background-color: #10223e; *background-color: #10223e; } .navbar-inverse .btn-navbar:hover, .navbar-inverse .btn-navbar:focus, .navbar-inverse .btn-navbar:active, .navbar-inverse .btn-navbar.active, .navbar-inverse .btn-navbar.disabled, .navbar-inverse .btn-navbar[disabled] { color: #fff; background-color: #050c16; *background-color: #050c16; } .navbar-inverse .btn-navbar:active, .navbar-inverse .btn-navbar.active { background-color: #10223e; } .breadcrumb { padding: 8px 15px; margin: 0 0 18px; list-style: none; background-color: #f5f5f5; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .breadcrumb > li { display: inline-block; *display: inline; *zoom: 1; text-shadow: 0 1px 0 #fff; } .breadcrumb > li > .divider { padding: 0 5px; color: #ccc; } .breadcrumb > .active { color: #999; } .pagination { margin: 18px 0; } .pagination ul { display: inline-block; *display: inline; *zoom: 1; margin-left: 0; margin-bottom: 0; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.05); -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.05); box-shadow: 0 1px 2px rgba(0,0,0,0.05); } .pagination ul > li { display: inline; } .pagination ul > li > a, .pagination ul > li > span { float: left; padding: 4px 12px; line-height: 18px; text-decoration: none; background-color: #fff; border: 1px solid #ddd; border-left-width: 0; } .pagination ul > li > a:hover, .pagination ul > li > a:focus, .pagination ul > .active > a, .pagination ul > .active > span { background-color: #F0F0F0; } .pagination ul > .active > a, .pagination ul > .active > span { color: #999; cursor: default; } .pagination ul > .disabled > span, .pagination ul > .disabled > a, .pagination ul > .disabled > a:hover, .pagination ul > .disabled > a:focus { color: #999; background-color: transparent; cursor: default; } .pagination ul > li:first-child > a, .pagination ul > li:first-child > span { border-left-width: 1px; -webkit-border-top-left-radius: 3px; -moz-border-radius-topleft: 3px; border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px; -moz-border-radius-bottomleft: 3px; border-bottom-left-radius: 3px; } .pagination ul > li:last-child > a, .pagination ul > li:last-child > span { -webkit-border-top-right-radius: 3px; -moz-border-radius-topright: 3px; border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; -moz-border-radius-bottomright: 3px; border-bottom-right-radius: 3px; } .pagination-centered { text-align: center; } .pagination-right { text-align: right; } .pagination-large ul > li > a, .pagination-large ul > li > span { padding: 11px 19px; font-size: 16.25px; } .pagination-large ul > li:first-child > a, .pagination-large ul > li:first-child > span { -webkit-border-top-left-radius: 6px; -moz-border-radius-topleft: 6px; border-top-left-radius: 6px; -webkit-border-bottom-left-radius: 6px; -moz-border-radius-bottomleft: 6px; border-bottom-left-radius: 6px; } .pagination-large ul > li:last-child > a, .pagination-large ul > li:last-child > span { -webkit-border-top-right-radius: 6px; -moz-border-radius-topright: 6px; border-top-right-radius: 6px; -webkit-border-bottom-right-radius: 6px; -moz-border-radius-bottomright: 6px; border-bottom-right-radius: 6px; } .pagination-mini ul > li:first-child > a, .pagination-mini ul > li:first-child > span, .pagination-small ul > li:first-child > a, .pagination-small ul > li:first-child > span { -webkit-border-top-left-radius: 3px; -moz-border-radius-topleft: 3px; border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px; -moz-border-radius-bottomleft: 3px; border-bottom-left-radius: 3px; } .pagination-mini ul > li:last-child > a, .pagination-mini ul > li:last-child > span, .pagination-small ul > li:last-child > a, .pagination-small ul > li:last-child > span { -webkit-border-top-right-radius: 3px; -moz-border-radius-topright: 3px; border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; -moz-border-radius-bottomright: 3px; border-bottom-right-radius: 3px; } .pagination-small ul > li > a, .pagination-small ul > li > span { padding: 2px 10px; font-size: 12px; } .pagination-mini ul > li > a, .pagination-mini ul > li > span { padding: 0 6px; font-size: 9.75px; } .pager { margin: 18px 0; list-style: none; text-align: center; *zoom: 1; } .pager:before, .pager:after { display: table; content: ""; line-height: 0; } .pager:after { clear: both; } .pager li { display: inline; } .pager li > a, .pager li > span { display: inline-block; padding: 5px 14px; background-color: #fff; border: 1px solid #ddd; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; } .pager li > a:hover, .pager li > a:focus { text-decoration: none; background-color: #f5f5f5; } .pager .next > a, .pager .next > span { float: right; } .pager .previous > a, .pager .previous > span { float: left; } .pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { color: #999; background-color: #fff; cursor: default; } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; background-color: #000; } .modal-backdrop.fade { opacity: 0; } .modal-backdrop, .modal-backdrop.fade.in { opacity: 0.8; filter: alpha(opacity=80); } .modal-header { padding: 9px 15px; border-bottom: 1px solid #eee; } .modal-header .close { margin-top: 2px; } .modal-header h3 { margin: 0; line-height: 30px; } .modal-body { width: 98%; position: relative; max-height: 400px; padding: 1%; } .modal-body iframe { width: 100%; max-height: none; border: 0 !important; } .modal-form { margin-bottom: 0; } .modal-footer { padding: 14px 15px 15px; margin-bottom: 0; text-align: right; background-color: #f5f5f5; border-top: 1px solid #ddd; -webkit-border-radius: 0 0 6px 6px; -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; -webkit-box-shadow: inset 0 1px 0 #fff; -moz-box-shadow: inset 0 1px 0 #fff; box-shadow: inset 0 1px 0 #fff; *zoom: 1; } .modal-footer:before, .modal-footer:after { display: table; content: ""; line-height: 0; } .modal-footer:after { clear: both; } .modal-footer .btn + .btn { margin-left: 5px; margin-bottom: 0; } .modal-footer .btn-group .btn + .btn { margin-left: -1px; } .modal-footer .btn-block + .btn-block { margin-left: 0; } .tooltip { position: absolute; z-index: 1030; display: block; visibility: visible; font-size: 11px; line-height: 1.4; opacity: 0; filter: alpha(opacity=0); } .tooltip.in { opacity: 0.8; filter: alpha(opacity=80); } .tooltip.top { margin-top: -3px; padding: 5px 0; } .tooltip.right { margin-left: 3px; padding: 0 5px; } .tooltip.bottom { margin-top: 3px; padding: 5px 0; } .tooltip.left { margin-left: -3px; padding: 0 5px; } .tooltip-inner { max-width: 200px; padding: 8px; color: #fff; text-align: center; text-decoration: none; background-color: #000; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid; } .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; margin-left: -5px; border-width: 5px 5px 0; border-top-color: #000; } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-width: 5px 5px 5px 0; border-right-color: #000; } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-width: 5px 0 5px 5px; border-left-color: #000; } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-width: 0 5px 5px; border-bottom-color: #000; } .popover { position: absolute; top: 0; left: 0; z-index: 1060; display: none; max-width: 276px; padding: 1px; text-align: left; background-color: #fff; -webkit-background-clip: padding-box; -moz-background-clip: padding; background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,0.2); -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2); -moz-box-shadow: 0 5px 10px rgba(0,0,0,0.2); box-shadow: 0 5px 10px rgba(0,0,0,0.2); white-space: normal; } .popover.top { margin-top: -10px; } .popover.right { margin-left: 10px; } .popover.bottom { margin-top: 10px; } .popover.left { margin-left: -10px; } .popover-title { margin: 0; padding: 8px 14px; font-size: 14px; font-weight: normal; line-height: 18px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .popover-title:empty { display: none; } .popover-content { padding: 9px 14px; } .popover .arrow, .popover .arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; } .popover .arrow { border-width: 11px; } .popover .arrow:after { border-width: 10px; content: ""; } .popover.top .arrow { left: 50%; margin-left: -11px; border-bottom-width: 0; border-top-color: #999; border-top-color: rgba(0,0,0,0.25); bottom: -11px; } .popover.top .arrow:after { bottom: 1px; margin-left: -10px; border-bottom-width: 0; border-top-color: #fff; } .popover.right .arrow { top: 50%; left: -11px; margin-top: -11px; border-left-width: 0; border-right-color: #999; border-right-color: rgba(0,0,0,0.25); } .popover.right .arrow:after { left: 1px; bottom: -10px; border-left-width: 0; border-right-color: #fff; } .popover.bottom .arrow { left: 50%; margin-left: -11px; border-top-width: 0; border-bottom-color: #999; border-bottom-color: rgba(0,0,0,0.25); top: -11px; } .popover.bottom .arrow:after { top: 1px; margin-left: -10px; border-top-width: 0; border-bottom-color: #fff; } .popover.left .arrow { top: 50%; right: -11px; margin-top: -11px; border-right-width: 0; border-left-color: #999; border-left-color: rgba(0,0,0,0.25); } .popover.left .arrow:after { right: 1px; border-right-width: 0; border-left-color: #fff; bottom: -10px; } .thumbnails { margin-left: -20px; list-style: none; *zoom: 1; } .thumbnails:before, .thumbnails:after { display: table; content: ""; line-height: 0; } .thumbnails:after { clear: both; } .row-fluid .thumbnails { margin-left: 0; } .thumbnails > li { float: left; margin-bottom: 18px; margin-left: 20px; } .thumbnail { display: block; padding: 4px; line-height: 18px; border: 1px solid #ddd; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.055); -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.055); box-shadow: 0 1px 3px rgba(0,0,0,0.055); -webkit-transition: all .2s ease-in-out; -moz-transition: all .2s ease-in-out; -o-transition: all .2s ease-in-out; transition: all .2s ease-in-out; } a.thumbnail:hover, a.thumbnail:focus { border-color: #3071a9; -webkit-box-shadow: 0 1px 4px rgba(0,105,214,0.25); -moz-box-shadow: 0 1px 4px rgba(0,105,214,0.25); box-shadow: 0 1px 4px rgba(0,105,214,0.25); } .thumbnail > img { display: block; max-width: 100%; margin-left: auto; margin-right: auto; } .thumbnail .caption { padding: 9px; color: #555; } .media, .media-body { overflow: hidden; *overflow: visible; zoom: 1; } .media, .media .media { margin-top: 15px; } .media:first-child { margin-top: 0; } .media-object { display: block; } .media-heading { margin: 0 0 5px; } .media > .pull-left { margin-right: 10px; } .media > .pull-right { margin-left: 10px; } .media-list { margin-left: 0; list-style: none; } .label, .badge { display: inline-block; padding: 2px 4px; font-size: 10.998px; font-weight: bold; line-height: 14px; color: #fff; vertical-align: baseline; white-space: nowrap; text-shadow: 0 -1px 0 rgba(0,0,0,0.25); background-color: #999; } .label { -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .badge { padding-left: 9px; padding-right: 9px; -webkit-border-radius: 9px; -moz-border-radius: 9px; border-radius: 9px; } .label:empty, .badge:empty { display: none; } a.label:hover, a.label:focus, a.badge:hover, a.badge:focus { color: #fff; text-decoration: none; cursor: pointer; } .label-important, .badge-important { background-color: #a94442; } .label-important[href], .badge-important[href] { background-color: #843534; } .label-warning, .badge-warning { background-color: #f89406; } .label-warning[href], .badge-warning[href] { background-color: #c67605; } .label-success, .badge-success { background-color: #3c763d; } .label-success[href], .badge-success[href] { background-color: #2b542c; } .label-info, .badge-info { background-color: #31708f; } .label-info[href], .badge-info[href] { background-color: #245269; } .label-inverse, .badge-inverse { background-color: #333; } .label-inverse[href], .badge-inverse[href] { background-color: #1a1a1a; } .btn .label, .btn .badge { position: relative; top: -1px; } .btn-mini .label, .btn-mini .badge { top: 0; } @-webkit-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @-moz-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @-ms-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @-o-keyframes progress-bar-stripes { from { background-position: 0 0; } to { background-position: 40px 0; } } @keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } .progress { overflow: hidden; height: 18px; margin-bottom: 18px; background-color: #f7f7f7; background-image: -moz-linear-gradient(top,#f5f5f5,#f9f9f9); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9)); background-image: -webkit-linear-gradient(top,#f5f5f5,#f9f9f9); background-image: -o-linear-gradient(top,#f5f5f5,#f9f9f9); background-image: linear-gradient(to bottom,#f5f5f5,#f9f9f9); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .progress .bar { width: 0%; height: 100%; color: #fff; float: left; font-size: 12px; text-align: center; text-shadow: 0 -1px 0 rgba(0,0,0,0.25); background-color: #0e90d2; background-image: -moz-linear-gradient(top,#149bdf,#0480be); background-image: -webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be)); background-image: -webkit-linear-gradient(top,#149bdf,#0480be); background-image: -o-linear-gradient(top,#149bdf,#0480be); background-image: linear-gradient(to bottom,#149bdf,#0480be); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15); -moz-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15); box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15); -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-transition: width .6s ease; -moz-transition: width .6s ease; -o-transition: width .6s ease; transition: width .6s ease; } .progress .bar + .bar { -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); } .progress-striped .bar { background-color: #149bdf; background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,0.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,0.15)),color-stop(.75,rgba(255,255,255,0.15)),color-stop(.75,transparent),to(transparent)); background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); -webkit-background-size: 40px 40px; -moz-background-size: 40px 40px; -o-background-size: 40px 40px; background-size: 40px 40px; } .progress.active .bar { -webkit-animation: progress-bar-stripes 2s linear infinite; -moz-animation: progress-bar-stripes 2s linear infinite; -ms-animation: progress-bar-stripes 2s linear infinite; -o-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } .progress-danger .bar, .progress .bar-danger { background-color: #dd514c; background-image: -moz-linear-gradient(top,#ee5f5b,#c43c35); background-image: -webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35)); background-image: -webkit-linear-gradient(top,#ee5f5b,#c43c35); background-image: -o-linear-gradient(top,#ee5f5b,#c43c35); background-image: linear-gradient(to bottom,#ee5f5b,#c43c35); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); } .progress-danger.progress-striped .bar, .progress-striped .bar-danger { background-color: #ee5f5b; background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,0.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,0.15)),color-stop(.75,rgba(255,255,255,0.15)),color-stop(.75,transparent),to(transparent)); background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); } .progress-success .bar, .progress .bar-success { background-color: #5eb95e; background-image: -moz-linear-gradient(top,#62c462,#57a957); background-image: -webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957)); background-image: -webkit-linear-gradient(top,#62c462,#57a957); background-image: -o-linear-gradient(top,#62c462,#57a957); background-image: linear-gradient(to bottom,#62c462,#57a957); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); } .progress-success.progress-striped .bar, .progress-striped .bar-success { background-color: #62c462; background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,0.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,0.15)),color-stop(.75,rgba(255,255,255,0.15)),color-stop(.75,transparent),to(transparent)); background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); } .progress-info .bar, .progress .bar-info { background-color: #4bb1cf; background-image: -moz-linear-gradient(top,#5bc0de,#339bb9); background-image: -webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9)); background-image: -webkit-linear-gradient(top,#5bc0de,#339bb9); background-image: -o-linear-gradient(top,#5bc0de,#339bb9); background-image: linear-gradient(to bottom,#5bc0de,#339bb9); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); } .progress-info.progress-striped .bar, .progress-striped .bar-info { background-color: #5bc0de; background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,0.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,0.15)),color-stop(.75,rgba(255,255,255,0.15)),color-stop(.75,transparent),to(transparent)); background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); } .progress-warning .bar, .progress .bar-warning { background-color: #faa732; background-image: -moz-linear-gradient(top,#fbb450,#f89406); background-image: -webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406)); background-image: -webkit-linear-gradient(top,#fbb450,#f89406); background-image: -o-linear-gradient(top,#fbb450,#f89406); background-image: linear-gradient(to bottom,#fbb450,#f89406); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffab44f', endColorstr='#fff89406', GradientType=0); } .progress-warning.progress-striped .bar, .progress-striped .bar-warning { background-color: #fbb450; background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,0.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,0.15)),color-stop(.75,rgba(255,255,255,0.15)),color-stop(.75,transparent),to(transparent)); background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); } .accordion { margin-bottom: 18px; } .accordion-group { margin-bottom: 2px; border: 1px solid #e5e5e5; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .accordion-heading { border-bottom: 0; } .accordion-heading .accordion-toggle { display: block; padding: 8px 15px; } .accordion-toggle { cursor: pointer; } .accordion-inner { padding: 9px 15px; border-top: 1px solid #e5e5e5; } .carousel { position: relative; margin-bottom: 18px; line-height: 1; } .carousel-inner { overflow: hidden; width: 100%; position: relative; } .carousel-inner > .item { display: none; position: relative; -webkit-transition: .6s ease-in-out left; -moz-transition: .6s ease-in-out left; -o-transition: .6s ease-in-out left; transition: .6s ease-in-out left; } .carousel-inner > .item > img, .carousel-inner > .item > a > img { display: block; line-height: 1; } .carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev { display: block; } .carousel-inner > .active { left: 0; } .carousel-inner > .next, .carousel-inner > .prev { position: absolute; top: 0; width: 100%; } .carousel-inner > .next { left: 100%; } .carousel-inner > .prev { left: -100%; } .carousel-inner > .next.left, .carousel-inner > .prev.right { left: 0; } .carousel-inner > .active.left { left: -100%; } .carousel-inner > .active.right { left: 100%; } .carousel-control { position: absolute; top: 40%; left: 15px; width: 40px; height: 40px; margin-top: -20px; font-size: 60px; font-weight: 100; line-height: 30px; color: #fff; text-align: center; background: #222; border: 3px solid #fff; -webkit-border-radius: 23px; -moz-border-radius: 23px; border-radius: 23px; opacity: 0.5; filter: alpha(opacity=50); } .carousel-control.right { left: auto; right: 15px; } .carousel-control:hover, .carousel-control:focus { color: #fff; text-decoration: none; opacity: 0.9; filter: alpha(opacity=90); } .carousel-indicators { position: absolute; top: 15px; right: 15px; z-index: 5; margin: 0; list-style: none; } .carousel-indicators li { display: block; float: left; width: 10px; height: 10px; margin-left: 5px; text-indent: -999px; background-color: #ccc; background-color: rgba(255,255,255,0.25); border-radius: 5px; } .carousel-indicators .active { background-color: #fff; } .carousel-caption { position: absolute; left: 0; right: 0; bottom: 0; padding: 15px; background: #333; background: rgba(0,0,0,0.75); } .carousel-caption h4, .carousel-caption p { color: #fff; line-height: 18px; } .carousel-caption h4 { margin: 0 0 5px; } .carousel-caption p { margin-bottom: 0; } .hero-unit { padding: 60px; margin-bottom: 30px; font-size: 18px; font-weight: 200; line-height: 27px; color: inherit; background-color: #eee; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .hero-unit h1 { margin-bottom: 0; font-size: 60px; line-height: 1; color: inherit; letter-spacing: -1px; } .hero-unit li { line-height: 27px; } .pull-right { float: right; } .pull-left { float: left; } .hide { display: none; } .show { display: block; } .invisible { visibility: hidden; } .affix { position: fixed; } @-ms-viewport { width: device-width; } .hidden { display: none; visibility: hidden; } .visible-phone { display: none !important; } .visible-tablet { display: none !important; } .hidden-desktop { display: none !important; } .visible-desktop { display: inherit !important; } @media (min-width: 768px) and (max-width: 979px) { .hidden-desktop { display: inherit !important; } .visible-desktop { display: none !important; } .visible-tablet { display: inherit !important; } .hidden-tablet { display: none !important; } } @media (max-width: 767px) { .hidden-desktop { display: inherit !important; } .visible-desktop { display: none !important; } .visible-phone { display: inherit !important; } .hidden-phone { display: none !important; } } .visible-print { display: none !important; } @media print { .visible-print { display: inherit !important; } .hidden-print { display: none !important; } } @media (max-width: 767px) { body { padding-left: 20px; padding-right: 20px; } .navbar-fixed-top, .navbar-fixed-bottom, .navbar-static-top { margin-left: -20px; margin-right: -20px; } .container-fluid { padding: 0; } .dl-horizontal dt { float: none; clear: none; width: auto; text-align: left; } .dl-horizontal dd { margin-left: 0; } .dropdown-menu .menuitem-group { background-color: #10223e; color: #eee; } .container { width: auto; } .row-fluid { width: 100%; } .row, .thumbnails { margin-left: 0; } .thumbnails > li { float: none; margin-left: 0; } [class*="span"], .uneditable-input[class*="span"], .row-fluid [class*="span"] { float: none; display: block; width: 100%; margin-left: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .span12, .row-fluid .span12 { width: 100%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .row-fluid [class*="offset"]:first-child { margin-left: 0; } .input-large, .input-xlarge, .input-xxlarge, input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input { display: block; width: 100%; min-height: 28px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .input-prepend input, .input-append input, .input-prepend input[class*="span"], .input-append input[class*="span"] { display: inline-block; } .controls-row [class*="span"] + [class*="span"] { margin-left: 0; } } @media (max-width: 480px) { .nav-collapse { -webkit-transform: translate3d(0,0,0); } .page-header h1 small { display: block; line-height: 18px; } input[type="checkbox"], input[type="radio"] { border: 1px solid #ccc; } .form-horizontal .control-label { float: none; width: auto; padding-top: 0; text-align: left; } .form-horizontal .controls { margin-left: 0; } .form-horizontal .control-list { padding-top: 0; } .form-horizontal .form-actions { padding-left: 10px; padding-right: 10px; } .tag-category input#filter-search, .newsfeed-category input#filter-search { width: auto; margin-bottom: 9px; } .category-list input#filter-search { width: auto; } .media .pull-left, .media .pull-right { float: none; display: block; margin-bottom: 10px; } .media-object { margin-right: 0; margin-left: 0; } .modal-header .close { padding: 10px; margin: -10px; } .carousel-caption { position: static; } } @media (min-width: 768px) and (max-width: 979px) { .row { margin-left: -20px; *zoom: 1; } .row:before, .row:after { display: table; content: ""; line-height: 0; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 20px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 724px; } .span12 { width: 724px; } .span11 { width: 662px; } .span10 { width: 600px; } .span9 { width: 538px; } .span8 { width: 476px; } .span7 { width: 414px; } .span6 { width: 352px; } .span5 { width: 290px; } .span4 { width: 228px; } .span3 { width: 166px; } .span2 { width: 104px; } .span1 { width: 42px; } .offset12 { margin-left: 764px; } .offset11 { margin-left: 702px; } .offset10 { margin-left: 640px; } .offset9 { margin-left: 578px; } .offset8 { margin-left: 516px; } .offset7 { margin-left: 454px; } .offset6 { margin-left: 392px; } .offset5 { margin-left: 330px; } .offset4 { margin-left: 268px; } .offset3 { margin-left: 206px; } .offset2 { margin-left: 144px; } .offset1 { margin-left: 82px; } .row-fluid { width: 100%; *zoom: 1; } .row-fluid:before, .row-fluid:after { display: table; content: ""; line-height: 0; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; width: 100%; min-height: 28px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; float: left; margin-left: 2.76243094%; *margin-left: 2.70923945%; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.76243094%; } .row-fluid .span12 { width: 100%; *width: 99.94680851%; } .row-fluid .span11 { width: 91.43646409%; *width: 91.3832726%; } .row-fluid .span10 { width: 82.87292818%; *width: 82.81973669%; } .row-fluid .span9 { width: 74.30939227%; *width: 74.25620078%; } .row-fluid .span8 { width: 65.74585635%; *width: 65.69266486%; } .row-fluid .span7 { width: 57.18232044%; *width: 57.12912895%; } .row-fluid .span6 { width: 48.61878453%; *width: 48.56559304%; } .row-fluid .span5 { width: 40.05524862%; *width: 40.00205713%; } .row-fluid .span4 { width: 31.49171271%; *width: 31.43852122%; } .row-fluid .span3 { width: 22.9281768%; *width: 22.87498531%; } .row-fluid .span2 { width: 14.36464088%; *width: 14.31144939%; } .row-fluid .span1 { width: 5.80110497%; *width: 5.74791348%; } .row-fluid .offset12 { margin-left: 105.52486188%; *margin-left: 105.4184789%; } .row-fluid .offset12:first-child { margin-left: 102.76243094%; *margin-left: 102.65604796%; } .row-fluid .offset11 { margin-left: 96.96132597%; *margin-left: 96.85494299%; } .row-fluid .offset11:first-child { margin-left: 94.19889503%; *margin-left: 94.09251205%; } .row-fluid .offset10 { margin-left: 88.39779006%; *margin-left: 88.29140708%; } .row-fluid .offset10:first-child { margin-left: 85.63535912%; *margin-left: 85.52897614%; } .row-fluid .offset9 { margin-left: 79.83425414%; *margin-left: 79.72787116%; } .row-fluid .offset9:first-child { margin-left: 77.0718232%; *margin-left: 76.96544023%; } .row-fluid .offset8 { margin-left: 71.27071823%; *margin-left: 71.16433525%; } .row-fluid .offset8:first-child { margin-left: 68.50828729%; *margin-left: 68.40190431%; } .row-fluid .offset7 { margin-left: 62.70718232%; *margin-left: 62.60079934%; } .row-fluid .offset7:first-child { margin-left: 59.94475138%; *margin-left: 59.8383684%; } .row-fluid .offset6 { margin-left: 54.14364641%; *margin-left: 54.03726343%; } .row-fluid .offset6:first-child { margin-left: 51.38121547%; *margin-left: 51.27483249%; } .row-fluid .offset5 { margin-left: 45.5801105%; *margin-left: 45.47372752%; } .row-fluid .offset5:first-child { margin-left: 42.81767956%; *margin-left: 42.71129658%; } .row-fluid .offset4 { margin-left: 37.01657459%; *margin-left: 36.91019161%; } .row-fluid .offset4:first-child { margin-left: 34.25414365%; *margin-left: 34.14776067%; } .row-fluid .offset3 { margin-left: 28.45303867%; *margin-left: 28.3466557%; } .row-fluid .offset3:first-child { margin-left: 25.69060773%; *margin-left: 25.58422476%; } .row-fluid .offset2 { margin-left: 19.88950276%; *margin-left: 19.78311978%; } .row-fluid .offset2:first-child { margin-left: 17.12707182%; *margin-left: 17.02068884%; } .row-fluid .offset1 { margin-left: 11.32596685%; *margin-left: 11.21958387%; } .row-fluid .offset1:first-child { margin-left: 8.56353591%; *margin-left: 8.45715293%; } input, textarea, .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 20px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 710px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 648px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 586px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 524px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 462px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 400px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 338px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 276px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 214px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 152px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 90px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 28px; } } @media (min-width: 1200px) { .row { margin-left: -30px; *zoom: 1; } .row:before, .row:after { display: table; content: ""; line-height: 0; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 30px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 1170px; } .span12 { width: 1170px; } .span11 { width: 1070px; } .span10 { width: 970px; } .span9 { width: 870px; } .span8 { width: 770px; } .span7 { width: 670px; } .span6 { width: 570px; } .span5 { width: 470px; } .span4 { width: 370px; } .span3 { width: 270px; } .span2 { width: 170px; } .span1 { width: 70px; } .offset12 { margin-left: 1230px; } .offset11 { margin-left: 1130px; } .offset10 { margin-left: 1030px; } .offset9 { margin-left: 930px; } .offset8 { margin-left: 830px; } .offset7 { margin-left: 730px; } .offset6 { margin-left: 630px; } .offset5 { margin-left: 530px; } .offset4 { margin-left: 430px; } .offset3 { margin-left: 330px; } .offset2 { margin-left: 230px; } .offset1 { margin-left: 130px; } .row-fluid { width: 100%; *zoom: 1; } .row-fluid:before, .row-fluid:after { display: table; content: ""; line-height: 0; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; width: 100%; min-height: 28px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; float: left; margin-left: 2.76243094%; *margin-left: 2.70923945%; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.76243094%; } .row-fluid .span12 { width: 100%; *width: 99.94680851%; } .row-fluid .span11 { width: 91.43646409%; *width: 91.3832726%; } .row-fluid .span10 { width: 82.87292818%; *width: 82.81973669%; } .row-fluid .span9 { width: 74.30939227%; *width: 74.25620078%; } .row-fluid .span8 { width: 65.74585635%; *width: 65.69266486%; } .row-fluid .span7 { width: 57.18232044%; *width: 57.12912895%; } .row-fluid .span6 { width: 48.61878453%; *width: 48.56559304%; } .row-fluid .span5 { width: 40.05524862%; *width: 40.00205713%; } .row-fluid .span4 { width: 31.49171271%; *width: 31.43852122%; } .row-fluid .span3 { width: 22.9281768%; *width: 22.87498531%; } .row-fluid .span2 { width: 14.36464088%; *width: 14.31144939%; } .row-fluid .span1 { width: 5.80110497%; *width: 5.74791348%; } .row-fluid .offset12 { margin-left: 105.52486188%; *margin-left: 105.4184789%; } .row-fluid .offset12:first-child { margin-left: 102.76243094%; *margin-left: 102.65604796%; } .row-fluid .offset11 { margin-left: 96.96132597%; *margin-left: 96.85494299%; } .row-fluid .offset11:first-child { margin-left: 94.19889503%; *margin-left: 94.09251205%; } .row-fluid .offset10 { margin-left: 88.39779006%; *margin-left: 88.29140708%; } .row-fluid .offset10:first-child { margin-left: 85.63535912%; *margin-left: 85.52897614%; } .row-fluid .offset9 { margin-left: 79.83425414%; *margin-left: 79.72787116%; } .row-fluid .offset9:first-child { margin-left: 77.0718232%; *margin-left: 76.96544023%; } .row-fluid .offset8 { margin-left: 71.27071823%; *margin-left: 71.16433525%; } .row-fluid .offset8:first-child { margin-left: 68.50828729%; *margin-left: 68.40190431%; } .row-fluid .offset7 { margin-left: 62.70718232%; *margin-left: 62.60079934%; } .row-fluid .offset7:first-child { margin-left: 59.94475138%; *margin-left: 59.8383684%; } .row-fluid .offset6 { margin-left: 54.14364641%; *margin-left: 54.03726343%; } .row-fluid .offset6:first-child { margin-left: 51.38121547%; *margin-left: 51.27483249%; } .row-fluid .offset5 { margin-left: 45.5801105%; *margin-left: 45.47372752%; } .row-fluid .offset5:first-child { margin-left: 42.81767956%; *margin-left: 42.71129658%; } .row-fluid .offset4 { margin-left: 37.01657459%; *margin-left: 36.91019161%; } .row-fluid .offset4:first-child { margin-left: 34.25414365%; *margin-left: 34.14776067%; } .row-fluid .offset3 { margin-left: 28.45303867%; *margin-left: 28.3466557%; } .row-fluid .offset3:first-child { margin-left: 25.69060773%; *margin-left: 25.58422476%; } .row-fluid .offset2 { margin-left: 19.88950276%; *margin-left: 19.78311978%; } .row-fluid .offset2:first-child { margin-left: 17.12707182%; *margin-left: 17.02068884%; } .row-fluid .offset1 { margin-left: 11.32596685%; *margin-left: 11.21958387%; } .row-fluid .offset1:first-child { margin-left: 8.56353591%; *margin-left: 8.45715293%; } input, textarea, .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 30px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 1156px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 1056px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 956px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 856px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 756px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 656px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 556px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 456px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 356px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 256px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 156px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 56px; } .thumbnails { margin-left: -30px; } .thumbnails > li { margin-left: 30px; } .row-fluid .thumbnails { margin-left: 0; } } @media (max-width: 767px) { body { padding-top: 0; } .navbar-fixed-top, .navbar-fixed-bottom { position: static; } .navbar-fixed-top { margin-bottom: 18px; } .navbar-fixed-bottom { margin-top: 18px; } .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner { padding: 5px; } .navbar .container { width: auto; padding: 0; } .navbar .brand { padding-left: 10px; padding-right: 10px; margin: 0 0 0 -5px; } .nav-collapse { clear: both; } .nav-collapse .nav { float: none; margin: 0 0 9px; } .nav-collapse .nav > li { float: none; } .nav-collapse .nav > li > a { margin-bottom: 2px; } .nav-collapse .nav > .divider-vertical { display: none; } .nav-collapse .nav .nav-header { color: #555; text-shadow: none; } .nav-collapse .nav > li > a, .nav-collapse .dropdown-menu a { padding: 9px 15px; font-weight: bold; color: #555; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .nav-collapse .btn { padding: 4px 10px 4px; font-weight: normal; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .nav-collapse .dropdown-menu li + li a { margin-bottom: 2px; } .nav-collapse .nav > li > a:hover, .nav-collapse .nav > li > a:focus, .nav-collapse .dropdown-menu a:hover, .nav-collapse .dropdown-menu a:focus { background-color: #f2f2f2; } .navbar-inverse .nav-collapse .nav > li > a, .navbar-inverse .nav-collapse .dropdown-menu a { color: #d9d9d9; } .navbar-inverse .nav-collapse .nav > li > a:hover, .navbar-inverse .nav-collapse .nav > li > a:focus, .navbar-inverse .nav-collapse .dropdown-menu a:hover, .navbar-inverse .nav-collapse .dropdown-menu a:focus { background-color: #10223e; } .nav-collapse.in .btn-group { margin-top: 5px; padding: 0; } .nav-collapse .dropdown-menu { position: static; top: auto; left: auto; float: none; display: none; max-width: none; margin: 0 15px; padding: 0; background-color: transparent; border: none; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .nav-collapse .open > .dropdown-menu { display: block; } .nav-collapse .dropdown-menu:before, .nav-collapse .dropdown-menu:after { display: none; } .nav-collapse .dropdown-menu .divider { display: none; } .nav-collapse .nav > li > .dropdown-menu:before, .nav-collapse .nav > li > .dropdown-menu:after { display: none; } .nav-collapse .navbar-form, .nav-collapse .navbar-search { float: none; padding: 9px 15px; margin: 9px 0; border-top: 1px solid #f2f2f2; border-bottom: 1px solid #f2f2f2; -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); } .navbar-inverse .nav-collapse .navbar-form, .navbar-inverse .nav-collapse .navbar-search { border-top-color: #10223e; border-bottom-color: #10223e; } .navbar .nav-collapse .nav.pull-right { float: none; margin-left: 0; } .nav-collapse, .nav-collapse.collapse { overflow: hidden; height: 0; } .navbar .btn-navbar { display: block; } .navbar-static .navbar-inner { padding-left: 10px; padding-right: 10px; } } @media (min-width: 768px) { .nav-collapse.collapse { height: auto !important; overflow: visible !important; } } .small { font-size: 11px; } iframe, svg { max-width: 100%; } .nowrap { white-space: nowrap; } .center, .table td.center, .table th.center { text-align: center; } a.disabled, a.disabled:hover { color: #999999; background-color: transparent; cursor: default; text-decoration: none; } .hero-unit { text-align: center; } .hero-unit .lead { margin-bottom: 18px; font-size: 20px; font-weight: 200; line-height: 27px; } .btn .caret { margin-bottom: 7px; } .btn.btn-micro .caret { margin: 5px 0; } .blog-row-rule, .blog-item-rule { border: 0; } body.modal { padding-top: 0; } .row-even, .row-odd { padding: 5px; width: 99%; border-bottom: 1px solid #ddd; } .row-odd { background-color: transparent; } .row-even { background-color: #f9f9f9; } .blog-row-rule, .blog-item-rule { border: 0; } .row-fluid .row-reveal { visibility: hidden; } .row-fluid:hover .row-reveal { visibility: visible; } .btn-wide { width: 80%; } .nav-list > li.offset > a { padding-left: 30px; font-size: 12px; } .blog-row-rule, .blog-item-rule { border: 0; } .row-fluid .offset1 { margin-left: 8.382978723%; } .row-fluid .offset2 { margin-left: 16.89361702%; } .row-fluid .offset3 { margin-left: 25.404255317%; } .row-fluid .offset4 { margin-left: 33.914893614%; } .row-fluid .offset5 { margin-left: 42.425531911%; } .row-fluid .offset6 { margin-left: 50.93617020799999%; } .row-fluid .offset7 { margin-left: 59.446808505%; } .row-fluid .offset8 { margin-left: 67.95744680199999%; } .row-fluid .offset9 { margin-left: 76.468085099%; } .row-fluid .offset10 { margin-left: 84.97872339599999%; } .row-fluid .offset11 { margin-left: 91.489361693%; } .navbar .nav > li > a.btn { padding: 4px 10px; line-height: 18px; } .nav-tabs.nav-dark { border-bottom: 1px solid #333; text-shadow: 1px 1px 1px #000; } .nav-tabs.nav-dark > li > a { color: #F8F8F8; } .nav-tabs.nav-dark > li > a:hover { border-color: #333 #333 #111; background-color: #777777; } .nav-tabs.nav-dark > .active > a, .nav-tabs.nav-dark > .active > a:hover { color: #ffffff; background-color: #555555; border: 1px solid #222; border-bottom-color: transparent; } .thumbnail.pull-left { margin: 0 10px 10px 0; } .thumbnail.pull-right { margin: 0 0 10px 10px; } .width-10 { width: 10px; } .width-20 { width: 20px; } .width-30 { width: 30px; } .width-40 { width: 40px; } .width-50 { width: 50px; } .width-60 { width: 60px; } .width-70 { width: 70px; } .width-80 { width: 80px; } .width-90 { width: 90px; } .width-100 { width: 100px; } .height-10 { height: 10px; } .height-20 { height: 20px; } .height-30 { height: 30px; } .height-40 { height: 40px; } .height-50 { height: 50px; } .height-60 { height: 60px; } .height-70 { height: 70px; } .height-80 { height: 80px; } .height-90 { height: 90px; } .height-100 { height: 100px; } hr.hr-condensed { margin: 10px 0; } .list-striped, .row-striped { list-style: none; line-height: 18px; text-align: left; vertical-align: middle; border-top: 1px solid #ddd; margin-left: 0; } .list-striped li, .list-striped dd, .row-striped .row, .row-striped .row-fluid { border-bottom: 1px solid #ddd; padding: 8px; } .list-striped li:nth-child(odd), .list-striped dd:nth-child(odd), .row-striped .row:nth-child(odd), .row-striped .row-fluid:nth-child(odd) { background-color: #f9f9f9; } .list-striped li:hover, .list-striped dd:hover, .row-striped .row:hover, .row-striped .row-fluid:hover { background-color: #F0F0F0; } .row-striped .row-fluid { width: 100%; box-sizing: border-box; } .row-striped .row-fluid [class*="span"] { min-height: 10px; } .row-striped .row-fluid [class*="span"] { margin-left: 8px; } .row-striped .row-fluid [class*="span"]:first-child { margin-left: 0; } .list-condensed li { padding: 4px 5px; } .row-condensed .row, .row-condensed .row-fluid { padding: 4px 5px; } .list-bordered, .row-bordered { list-style: none; line-height: 18px; text-align: left; vertical-align: middle; margin-left: 0; border: 1px solid #ddd; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .radio.btn-group input[type=radio] { display: none; } .radio.btn-group > label { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .radio.btn-group > label:first-of-type { margin-left: 0; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-topleft: 4px; } fieldset.radio.btn-group { padding-left: 0; } .iframe-bordered { border: 1px solid #ddd; } .tab-content { overflow: visible; } .tabs-left .tab-content { overflow: auto; } .nav-tabs > li > span { display: block; margin-right: 2px; padding-right: 12px; padding-left: 12px; padding-top: 8px; padding-bottom: 8px; line-height: 18px; border: 1px solid transparent; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } .btn-micro { padding: 1px 4px; font-size: 10px; line-height: 8px; } .btn-group > .btn-micro { font-size: 10px; } .tip-wrap { max-width: 200px; padding: 3px 8px; color: #fff; text-align: center; text-decoration: none; background-color: #000; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; z-index: 100; } .page-header { margin: 2px 0px 10px 0px; padding-bottom: 5px; } .input-prepend > .add-on, .input-append > .add-on { vertical-align: top; } .input-prepend .chzn-container-single .chzn-single { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend .chzn-container-single .chzn-single-with-drop { -webkit-border-radius: 0 3px 0 0; -moz-border-radius: 0 3px 0 0; border-radius: 0 3px 0 0; } .input-append .chzn-container-single .chzn-single { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append .chzn-container-single .chzn-single-with-drop { -webkit-border-radius: 3px 0 0 0; -moz-border-radius: 3px 0 0 0; border-radius: 3px 0 0 0; } .input-prepend.input-append .chzn-container-single .chzn-single, .input-prepend.input-append .chzn-container-single .chzn-single-with-drop { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .element-invisible { position: absolute; padding: 0; margin: 0; border: 0; height: 1px; width: 1px; overflow: hidden; } .element-invisible:focus { width: auto; height: auto; overflow: auto; background: #eee; color: #000; padding: 1em; } .form-vertical .control-label { float: none; width: auto; padding-right: 0; padding-top: 0; text-align: left; } .form-vertical .controls { margin-left: 0; } .width-auto { width: auto; } .btn-group .chzn-results { white-space: normal; } .accordion-body.in:hover { overflow: visible; } .invalid { color: #9d261d; font-weight: bold; } input.invalid { border: 1px solid #9d261d; background: #f2dede; } select.chzn-done.invalid + .chzn-container.chzn-container-single > a.chzn-single, select.chzn-done.invalid + .chzn-container.chzn-container-multi > ul.chzn-choices { border-color: #9d261d; color: #9d261d; } .tooltip { max-width: 400px; } .tooltip-inner { max-width: none; text-align: left; text-shadow: none; } th .tooltip-inner { font-weight: normal; } .tooltip.hasimage { opacity: 1; } .tip-text { text-align: left; } .btn-group > .btn + .dropdown-backdrop + .btn { margin-left: -1px; } .btn-group > .btn + .dropdown-backdrop + .dropdown-toggle { padding-left: 8px; padding-right: 8px; -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); *padding-top: 5px; *padding-bottom: 5px; } .btn-group > .btn-mini + .dropdown-backdrop + .dropdown-toggle { padding-left: 5px; padding-right: 5px; *padding-top: 2px; *padding-bottom: 2px; } .btn-group > .btn-small + .dropdown-backdrop + .dropdown-toggle { *padding-top: 5px; *padding-bottom: 4px; } .btn-group > .btn-large + .dropdown-backdrop + .dropdown-toggle { padding-left: 12px; padding-right: 12px; *padding-top: 7px; *padding-bottom: 7px; } .dropdown-menu { text-align: left; } .alert-link { font-weight: bold; } .alert .alert-link { color: #66512c; } .alert-success .alert-link { color: #2b542c; } .alert-danger .alert-link, .alert-error .alert-link { color: #843534; } .alert-info .alert-link { color: #245269; } div.modal { position: fixed; top: 5%; left: 50%; z-index: 1050; width: 80%; margin-left: -40%; background-color: #fff; border: 1px solid #999; border: 1px solid rgba(0,0,0,0.3); *border: 1px solid #999; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3); -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3); box-shadow: 0 3px 7px rgba(0,0,0,0.3); -webkit-background-clip: padding-box; -moz-background-clip: padding-box; background-clip: padding-box; outline: none; } div.modal.fade { -webkit-transition: opacity .3s linear, top .3s ease-out; -moz-transition: opacity .3s linear, top .3s ease-out; -o-transition: opacity .3s linear, top .3s ease-out; transition: opacity .3s linear, top .3s ease-out; top: -25%; } div.modal.fade.in { top: 5%; } .modal-batch { overflow-y: visible; } .modal-body[class^="jviewport-height"], .modal-body[class*="jviewport-height"] { max-height: none; } .jviewport-height10 { height: 10vh; } .jviewport-height20 { height: 20vh; } .jviewport-height30 { height: 30vh; } .jviewport-height40 { height: 40vh; } .jviewport-height50 { height: 50vh; } .jviewport-height60 { height: 60vh; } .jviewport-height70 { height: 70vh; } .jviewport-height80 { height: 80vh; } .jviewport-height90 { height: 90vh; } .jviewport-height100 { height: 100vh; } div.modal.jviewport-width10 { width: 10vw; margin-left: -5vw; } div.modal.jviewport-width20 { width: 20vw; margin-left: -10vw; } div.modal.jviewport-width30 { width: 30vw; margin-left: -15vw; } div.modal.jviewport-width40 { width: 40vw; margin-left: -20vw; } div.modal.jviewport-width50 { width: 50vw; margin-left: -25vw; } div.modal.jviewport-width60 { width: 60vw; margin-left: -30vw; } div.modal.jviewport-width70 { width: 70vw; margin-left: -35vw; } div.modal.jviewport-width80 { width: 80vw; margin-left: -40vw; } div.modal.jviewport-width90 { width: 90vw; margin-left: -45vw; } div.modal.jviewport-width100 { width: 100vw; margin-left: -50vw; } @media (max-width: 767px) { div.modal { position: fixed; top: 20px; left: 20px; right: 20px; width: auto; margin: 0; } div.modal.fade { top: -100px; } div.modal.fade.in { top: 20px; } div.modal[class*="jviewport-width"] { width: auto; margin: 0; } } @media (max-width: 480px) { div.modal { top: 10px; left: 10px; right: 10px; } } @font-face { font-family: 'IcoMoon'; src: url('../../../../media/jui/fonts/IcoMoon.eot'); src: url('../../../../media/jui/fonts/IcoMoon.eot?#iefix') format('embedded-opentype'), url('../../../../media/jui/fonts/IcoMoon.woff') format('woff'), url('../../../../media/jui/fonts/IcoMoon.ttf') format('truetype'), url('../../../../media/jui/fonts/IcoMoon.svg#IcoMoon') format('svg'); font-weight: normal; font-style: normal; } [data-icon]:before { font-family: 'IcoMoon'; content: attr(data-icon); speak: none; } [class^="icon-"], [class*=" icon-"] { display: inline-block; width: 14px; height: 14px; margin-right: .25em; line-height: 14px; } [class^="icon-"]:before, [class*=" icon-"]:before { font-family: 'IcoMoon'; font-style: normal; speak: none; } [class^="icon-"].disabled, [class*=" icon-"].disabled { font-weight: normal; } .icon-joomla:before { content: "\e200"; } .icon-chevron-up:before, .icon-uparrow:before, .icon-arrow-up:before { content: "\e005"; } .icon-chevron-right:before, .icon-rightarrow:before, .icon-arrow-right:before { content: "\e006"; } .icon-chevron-down:before, .icon-downarrow:before, .icon-arrow-down:before { content: "\e007"; } .icon-chevron-left:before, .icon-leftarrow:before, .icon-arrow-left:before { content: "\e008"; } .icon-arrow-first:before { content: "\e003"; } .icon-arrow-last:before { content: "\e004"; } .icon-arrow-up-2:before { content: "\e009"; } .icon-arrow-right-2:before { content: "\e00a"; } .icon-arrow-down-2:before { content: "\e00b"; } .icon-arrow-left-2:before { content: "\e00c"; } .icon-arrow-up-3:before { content: "\e00f"; } .icon-arrow-right-3:before { content: "\e010"; } .icon-arrow-down-3:before { content: "\e011"; } .icon-arrow-left-3:before { content: "\e012"; } .icon-menu-2:before { content: "\e00e"; } .icon-arrow-up-4:before { content: "\e201"; } .icon-arrow-right-4:before { content: "\e202"; } .icon-arrow-down-4:before { content: "\e203"; } .icon-arrow-left-4:before { content: "\e204"; } .icon-share:before, .icon-redo:before { content: "\27"; } .icon-undo:before { content: "\28"; } .icon-forward-2:before { content: "\e205"; } .icon-backward-2:before, .icon-reply:before { content: "\e206"; } .icon-unblock:before, .icon-refresh:before, .icon-redo-2:before { content: "\6c"; } .icon-undo-2:before { content: "\e207"; } .icon-move:before { content: "\7a"; } .icon-expand:before { content: "\66"; } .icon-contract:before { content: "\67"; } .icon-expand-2:before { content: "\68"; } .icon-contract-2:before { content: "\69"; } .icon-play:before { content: "\e208"; } .icon-pause:before { content: "\e209"; } .icon-stop:before { content: "\e210"; } .icon-previous:before, .icon-backward:before { content: "\7c"; } .icon-next:before, .icon-forward:before { content: "\7b"; } .icon-first:before { content: "\7d"; } .icon-last:before { content: "\e000"; } .icon-play-circle:before { content: "\e00d"; } .icon-pause-circle:before { content: "\e211"; } .icon-stop-circle:before { content: "\e212"; } .icon-backward-circle:before { content: "\e213"; } .icon-forward-circle:before { content: "\e214"; } .icon-loop:before { content: "\e001"; } .icon-shuffle:before { content: "\e002"; } .icon-search:before { content: "\53"; } .icon-zoom-in:before { content: "\64"; } .icon-zoom-out:before { content: "\65"; } .icon-apply:before, .icon-edit:before, .icon-pencil:before { content: "\2b"; } .icon-pencil-2:before { content: "\2c"; } .icon-brush:before { content: "\3b"; } .icon-save-new:before, .icon-plus-2:before { content: "\5d"; } .icon-minus-sign:before, .icon-minus-2:before { content: "\5e"; } .icon-delete:before, .icon-remove:before, .icon-cancel-2:before { content: "\49"; } .icon-publish:before, .icon-save:before, .icon-ok:before, .icon-checkmark:before { content: "\47"; } .icon-new:before, .icon-plus:before { content: "\2a"; } .icon-plus-circle:before { content: "\e215"; } .icon-minus:before, .icon-not-ok:before { content: "\4b"; } .icon-ban-circle:before, .icon-minus-circle:before { content: "\e216"; } .icon-unpublish:before, .icon-cancel:before { content: "\4a"; } .icon-cancel-circle:before { content: "\e217"; } .icon-checkmark-2:before { content: "\e218"; } .icon-checkmark-circle:before { content: "\e219"; } .icon-info:before { content: "\e220"; } .icon-info-2:before, .icon-info-circle:before { content: "\e221"; } .icon-question:before, .icon-question-sign:before, .icon-help:before { content: "\45"; } .icon-question-2:before, .icon-question-circle:before { content: "\e222"; } .icon-notification:before { content: "\e223"; } .icon-notification-2:before, .icon-notification-circle:before { content: "\e224"; } .icon-pending:before, .icon-warning:before { content: "\48"; } .icon-warning-2:before, .icon-warning-circle:before { content: "\e225"; } .icon-checkbox-unchecked:before { content: "\3d"; } .icon-checkin:before, .icon-checkbox:before, .icon-checkbox-checked:before { content: "\3e"; } .icon-checkbox-partial:before { content: "\3f"; } .icon-square:before { content: "\e226"; } .icon-radio-unchecked:before { content: "\e227"; } .icon-radio-checked:before, .icon-generic:before { content: "\e228"; } .icon-circle:before { content: "\e229"; } .icon-signup:before { content: "\e230"; } .icon-grid:before, .icon-grid-view:before { content: "\58"; } .icon-grid-2:before, .icon-grid-view-2:before { content: "\59"; } .icon-menu:before { content: "\5a"; } .icon-list:before, .icon-list-view:before { content: "\31"; } .icon-list-2:before { content: "\e231"; } .icon-menu-3:before { content: "\e232"; } .icon-folder-open:before, .icon-folder:before { content: "\2d"; } .icon-folder-close:before, .icon-folder-2:before { content: "\2e"; } .icon-folder-plus:before { content: "\e234"; } .icon-folder-minus:before { content: "\e235"; } .icon-folder-3:before { content: "\e236"; } .icon-folder-plus-2:before { content: "\e237"; } .icon-folder-remove:before { content: "\e238"; } .icon-file:before { content: "\e016"; } .icon-file-2:before { content: "\e239"; } .icon-file-add:before, .icon-file-plus:before { content: "\29"; } .icon-file-minus:before { content: "\e017"; } .icon-file-check:before { content: "\e240"; } .icon-file-remove:before { content: "\e241"; } .icon-save-copy:before, .icon-copy:before { content: "\e018"; } .icon-stack:before { content: "\e242"; } .icon-tree:before { content: "\e243"; } .icon-tree-2:before { content: "\e244"; } .icon-paragraph-left:before { content: "\e246"; } .icon-paragraph-center:before { content: "\e247"; } .icon-paragraph-right:before { content: "\e248"; } .icon-paragraph-justify:before { content: "\e249"; } .icon-screen:before { content: "\e01c"; } .icon-tablet:before { content: "\e01d"; } .icon-mobile:before { content: "\e01e"; } .icon-box-add:before { content: "\51"; } .icon-box-remove:before { content: "\52"; } .icon-download:before { content: "\e021"; } .icon-upload:before { content: "\e022"; } .icon-home:before { content: "\21"; } .icon-home-2:before { content: "\e250"; } .icon-out-2:before, .icon-new-tab:before { content: "\e024"; } .icon-out-3:before, .icon-new-tab-2:before { content: "\e251"; } .icon-link:before { content: "\e252"; } .icon-picture:before, .icon-image:before { content: "\2f"; } .icon-pictures:before, .icon-images:before { content: "\30"; } .icon-palette:before, .icon-color-palette:before { content: "\e014"; } .icon-camera:before { content: "\55"; } .icon-camera-2:before, .icon-video:before { content: "\e015"; } .icon-play-2:before, .icon-video-2:before, .icon-youtube:before { content: "\56"; } .icon-music:before { content: "\57"; } .icon-user:before { content: "\22"; } .icon-users:before { content: "\e01f"; } .icon-vcard:before { content: "\6d"; } .icon-address:before { content: "\70"; } .icon-share-alt:before, .icon-out:before { content: "\26"; } .icon-enter:before { content: "\e257"; } .icon-exit:before { content: "\e258"; } .icon-comment:before, .icon-comments:before { content: "\24"; } .icon-comments-2:before { content: "\25"; } .icon-quote:before, .icon-quotes-left:before { content: "\60"; } .icon-quote-2:before, .icon-quotes-right:before { content: "\61"; } .icon-quote-3:before, .icon-bubble-quote:before { content: "\e259"; } .icon-phone:before { content: "\e260"; } .icon-phone-2:before { content: "\e261"; } .icon-envelope:before, .icon-mail:before { content: "\4d"; } .icon-envelope-opened:before, .icon-mail-2:before { content: "\4e"; } .icon-unarchive:before, .icon-drawer:before { content: "\4f"; } .icon-archive:before, .icon-drawer-2:before { content: "\50"; } .icon-briefcase:before { content: "\e020"; } .icon-tag:before { content: "\e262"; } .icon-tag-2:before { content: "\e263"; } .icon-tags:before { content: "\e264"; } .icon-tags-2:before { content: "\e265"; } .icon-options:before, .icon-cog:before { content: "\38"; } .icon-cogs:before { content: "\37"; } .icon-screwdriver:before, .icon-tools:before { content: "\36"; } .icon-wrench:before { content: "\3a"; } .icon-equalizer:before { content: "\39"; } .icon-dashboard:before { content: "\78"; } .icon-switch:before { content: "\e266"; } .icon-filter:before { content: "\54"; } .icon-purge:before, .icon-trash:before { content: "\4c"; } .icon-checkedout:before, .icon-lock:before, .icon-locked:before { content: "\23"; } .icon-unlock:before { content: "\e267"; } .icon-key:before { content: "\5f"; } .icon-support:before { content: "\46"; } .icon-database:before { content: "\62"; } .icon-scissors:before { content: "\e268"; } .icon-health:before { content: "\6a"; } .icon-wand:before { content: "\6b"; } .icon-eye-open:before, .icon-eye:before { content: "\3c"; } .icon-eye-close:before, .icon-eye-blocked:before, .icon-eye-2:before { content: "\e269"; } .icon-clock:before { content: "\6e"; } .icon-compass:before { content: "\6f"; } .icon-broadcast:before, .icon-connection:before, .icon-wifi:before { content: "\e01b"; } .icon-book:before { content: "\e271"; } .icon-lightning:before, .icon-flash:before { content: "\79"; } .icon-print:before, .icon-printer:before { content: "\e013"; } .icon-feed:before { content: "\71"; } .icon-calendar:before { content: "\43"; } .icon-calendar-2:before { content: "\44"; } .icon-calendar-3:before { content: "\e273"; } .icon-pie:before { content: "\77"; } .icon-bars:before { content: "\76"; } .icon-chart:before { content: "\75"; } .icon-power-cord:before { content: "\32"; } .icon-cube:before { content: "\33"; } .icon-puzzle:before { content: "\34"; } .icon-attachment:before, .icon-paperclip:before, .icon-flag-2:before { content: "\72"; } .icon-lamp:before { content: "\74"; } .icon-pin:before, .icon-pushpin:before { content: "\73"; } .icon-location:before { content: "\63"; } .icon-shield:before { content: "\e274"; } .icon-flag:before { content: "\35"; } .icon-flag-3:before { content: "\e275"; } .icon-bookmark:before { content: "\e023"; } .icon-bookmark-2:before { content: "\e276"; } .icon-heart:before { content: "\e277"; } .icon-heart-2:before { content: "\e278"; } .icon-thumbs-up:before { content: "\5b"; } .icon-thumbs-down:before { content: "\5c"; } .icon-unfeatured:before, .icon-asterisk:before, .icon-star-empty:before { content: "\40"; } .icon-star-2:before { content: "\41"; } .icon-featured:before, .icon-default:before, .icon-star:before { content: "\42"; } .icon-smiley:before, .icon-smiley-happy:before { content: "\e279"; } .icon-smiley-2:before, .icon-smiley-happy-2:before { content: "\e280"; } .icon-smiley-sad:before { content: "\e281"; } .icon-smiley-sad-2:before { content: "\e282"; } .icon-smiley-neutral:before { content: "\e283"; } .icon-smiley-neutral-2:before { content: "\e284"; } .icon-cart:before { content: "\e019"; } .icon-basket:before { content: "\e01a"; } .icon-credit:before { content: "\e286"; } .icon-credit-2:before { content: "\e287"; } .icon-expired:before { content: "\4b"; } .icon-edit:before { color: #24748c; } .icon-publish:before, .icon-save:before, .icon-ok:before, .icon-save-new:before, .icon-save-copy:before, .btn-toolbar .icon-copy:before { color: #378137; } .icon-unpublish:before, .icon-not-ok:before, .icon-eye-close:before, .icon-ban-circle:before, .icon-minus-sign:before, .btn-toolbar .icon-cancel:before { color: #942a25; } .icon-featured:before, .icon-default:before, .icon-expired:before, .icon-pending:before { color: #c67605; } .icon-back:before { content: "\e008"; } html { height: 100%; } body { height: 100%; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; box-sizing: border-box; } a:hover, a:active, a:focus { outline: none; } .small { font-size: 11px; } .row-even .small, .row-odd .small, .row-even .small a, .row-odd .small a { color: #888; } .content-title { font-size: 24px; font-weight: normal; line-height: 26px; margin-top: 0; } .well .page-header { margin: -10px 0 18px 0; padding-bottom: 5px; } .well .module-title.nav-header { padding: 0 0 7px; margin: 0; font-size: 13px; } .well .row-even p, .well .row-odd p { margin-bottom: 0; } h1, h2, h3, h4, h5, h6 { margin: 12px 0; } h1 { font-size: 26px; line-height: 28px; } h2 { font-size: 22px; line-height: 24px; } h3 { font-size: 18px; line-height: 20px; } h4 { font-size: 14px; line-height: 16px; } h5 { font-size: 13px; line-height: 15px; } h6 { font-size: 12px; line-height: 14px; } .truncate { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .chzn-container .chzn-drop { border-radius: 0 0 3px 3px; } .control-group .chzn-container { max-width: 100%; } .control-group .chzn-container .chzn-choices li.search-field, .control-group .chzn-container .chzn-choices li.search-field input { width: 100% !important; } .chzn-container-single .chzn-single { background-color: #fff; background-clip: inherit; background-image: none; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,0.2); border-radius: 3px; box-shadow: 0 1px 0 rgba(255,255,255,0.2) inset, 0 1px 2px rgba(0,0,0,0.05); height: auto; line-height: 26px; } .chzn-container-single .chzn-single div { background-color: #f3f3f3; border-left: 1px solid #ccc; bottom: 0; height: auto; text-align: center; width: 28px; } .chzn-container-single .chzn-single div b { background-image: none; display: inline-block; } .chzn-container-single .chzn-single div b:after { content: '\E011'; font-family: IcoMoon; } .chzn-container-single .chzn-single abbr { background: none; right: 36px; top: 0; } .chzn-container-single .chzn-single abbr:before { font-family: IcoMoon; content: '\0049'; font-size: 10px; line-height: 26px; } .chzn-container-single .chzn-single abbr:hover { color: #000; } .chzn-container-single .chzn-search:after { content: '\0053'; font-family: IcoMoon; position: relative; right: 20px; top: 2px; } .chzn-container-single .chzn-search input[type="text"] { background: none; border-radius: 3px; border: 1px solid #ccc; box-shadow: none; height: 25px; } .chzn-container-single .chzn-search input[type="text"]:focus { border-color: #3071A9; } .chzn-container-single .chzn-drop { background-clip: padding-box; border-color: #3071A9; border-radius: 0 0 3px 3px; } .chzn-container-active .chzn-single { color: #3071A9; } .chzn-container-active.chzn-with-drop .chzn-single { background-image: none; border: 1px solid #3071A9; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .chzn-container-active.chzn-with-drop .chzn-single div { background-color: #f3f3f3; border-bottom: 1px solid #ccc; border-bottom-left-radius: 3px; border-left: 1px solid #ccc; } .chzn-container-active.chzn-with-drop .chzn-single div b:after { content: '\E00F'; font-family: IcoMoon; } .chzn-container-active.chzn-container-multi .chzn-choices { border: 1px solid #3071A9; box-shadow: none; } .chzn-container .chzn-results { background-color: #fff; border-radius: 0 0 3px 3px; margin: 0; padding: 0; } .chzn-container .chzn-results li.highlighted { background-color: #3071A9; background-image: none; } .chzn-color[rel="value_"] div { background-color: #f3f3f3; border-left: 1px solid #ccc; } .chzn-color-state.chzn-single div, .chzn-color.chzn-single[rel="value_0"] div, .chzn-color.chzn-single[rel="value_1"] div, .chzn-color-state.chzn-single[rel="value_-1"] div, .chzn-color-state.chzn-single[rel="value_-2"] div, .chzn-color.chzn-single[rel="value_hide"] div, .chzn-color.chzn-single[rel="value_show_no_link"] div, .chzn-color.chzn-single[rel="value_show_with_link"] div { background-color: transparent !important; border: none !important; } .chzn-container-active .chzn-choices { border: 1px solid #3071A9; } .chzn-container-multi .chzn-choices { background-image: none; border-radius: 3px; border: 1px solid #ccc; } .chzn-container-multi .chzn-choices li.search-choice { background-color: #3071A9; background-image: none; border: 0; box-shadow: none; color: #fff; line-height: 20px; padding: 0 7px; } .chzn-container-multi .chzn-choices li.search-choice .search-choice-close { color: #f5f5f5; display: inline-block; margin-left: 5px; position: relative; top: 0; left: 0; background-image: none; font-size: inherit; } .chzn-container-multi .chzn-choices li.search-choice .search-choice-close:hover { text-decoration: none; } .chzn-container-multi .chzn-choices li.search-choice .search-choice-close:before { font-family: IcoMoon; content: '\004A'; position: relative; right: 1px; top: 0; } .js-stools .js-stools-container-bar .js-stools-field-filter .chzn-container { margin: 1px 0; padding: 0 !important; } .chzn-color.chzn-single[rel="value_1"], .chzn-color-reverse.chzn-single[rel="value_0"], .chzn-color-state.chzn-single[rel="value_1"], .chzn-color.chzn-single[rel="value_show_no_link"], .chzn-color.chzn-single[rel="value_show_with_link"] { background-color: #46a546; *background-color: #46a546; box-shadow: 0 1px 2px rgba(0,0,0,0.05); color: #ffffff; } .chzn-color.chzn-single[rel="value_1"]:hover, .chzn-color.chzn-single[rel="value_1"]:focus, .chzn-color.chzn-single[rel="value_1"]:active, .chzn-color.chzn-single[rel="value_1"].active, .chzn-color.chzn-single[rel="value_1"].disabled, .chzn-color.chzn-single[rel="value_1"][disabled], .chzn-color-reverse.chzn-single[rel="value_0"]:hover, .chzn-color-reverse.chzn-single[rel="value_0"]:focus, .chzn-color-reverse.chzn-single[rel="value_0"]:active, .chzn-color-reverse.chzn-single[rel="value_0"].active, .chzn-color-reverse.chzn-single[rel="value_0"].disabled, .chzn-color-reverse.chzn-single[rel="value_0"][disabled], .chzn-color-state.chzn-single[rel="value_1"]:hover, .chzn-color-state.chzn-single[rel="value_1"]:focus, .chzn-color-state.chzn-single[rel="value_1"]:active, .chzn-color-state.chzn-single[rel="value_1"].active, .chzn-color-state.chzn-single[rel="value_1"].disabled, .chzn-color-state.chzn-single[rel="value_1"][disabled], .chzn-color.chzn-single[rel="value_show_no_link"]:hover, .chzn-color.chzn-single[rel="value_show_no_link"]:focus, .chzn-color.chzn-single[rel="value_show_no_link"]:active, .chzn-color.chzn-single[rel="value_show_no_link"].active, .chzn-color.chzn-single[rel="value_show_no_link"].disabled, .chzn-color.chzn-single[rel="value_show_no_link"][disabled], .chzn-color.chzn-single[rel="value_show_with_link"]:hover, .chzn-color.chzn-single[rel="value_show_with_link"]:focus, .chzn-color.chzn-single[rel="value_show_with_link"]:active, .chzn-color.chzn-single[rel="value_show_with_link"].active, .chzn-color.chzn-single[rel="value_show_with_link"].disabled, .chzn-color.chzn-single[rel="value_show_with_link"][disabled] { color: #fff; background-color: #2f6f2f; *background-color: #2f6f2f; } .chzn-color.chzn-single[rel="value_1"]:active, .chzn-color.chzn-single[rel="value_1"].active, .chzn-color-reverse.chzn-single[rel="value_0"]:active, .chzn-color-reverse.chzn-single[rel="value_0"].active, .chzn-color-state.chzn-single[rel="value_1"]:active, .chzn-color-state.chzn-single[rel="value_1"].active, .chzn-color.chzn-single[rel="value_show_no_link"]:active, .chzn-color.chzn-single[rel="value_show_no_link"].active, .chzn-color.chzn-single[rel="value_show_with_link"]:active, .chzn-color.chzn-single[rel="value_show_with_link"].active { background-color: #46a546; } .chzn-color-state.chzn-single[rel="value_0"], .chzn-color-state.chzn-single[rel="value_-2"] { background-color: #bd362f; *background-color: #bd362f; box-shadow: 0 1px 2px rgba(0,0,0,0.05); color: #ffffff; } .chzn-color-state.chzn-single[rel="value_0"]:hover, .chzn-color-state.chzn-single[rel="value_0"]:focus, .chzn-color-state.chzn-single[rel="value_0"]:active, .chzn-color-state.chzn-single[rel="value_0"].active, .chzn-color-state.chzn-single[rel="value_0"].disabled, .chzn-color-state.chzn-single[rel="value_0"][disabled], .chzn-color-state.chzn-single[rel="value_-2"]:hover, .chzn-color-state.chzn-single[rel="value_-2"]:focus, .chzn-color-state.chzn-single[rel="value_-2"]:active, .chzn-color-state.chzn-single[rel="value_-2"].active, .chzn-color-state.chzn-single[rel="value_-2"].disabled, .chzn-color-state.chzn-single[rel="value_-2"][disabled] { color: #fff; background-color: #802420; *background-color: #802420; } .chzn-color-state.chzn-single[rel="value_0"]:active, .chzn-color-state.chzn-single[rel="value_0"].active, .chzn-color-state.chzn-single[rel="value_-2"]:active, .chzn-color-state.chzn-single[rel="value_-2"].active { background-color: #bd362f; } .CodeMirror { height: calc(100vh - 400px); min-height: 400px; max-height: 800px; } .form-horizontal .control-label { padding-right: 5px; text-align: left; } .form-horizontal .control-label .spacer hr { width: 380px; } @media (max-width: 420px) { .form-horizontal .control-label .spacer hr { width: 220px; } } .form-horizontal .field-spacer>.control-label { width: auto; } .form-horizontal #jform_catid_chzn { vertical-align: middle; } .form-vertical .control-label > label { display: inline-block; *display: inline; *zoom: 1; } .form-vertical .controls { margin-left: 0; } @media (max-width: 979px) { .form-horizontal-desktop .control-label { float: none; width: auto; padding-right: 0; padding-top: 0; text-align: left; } .form-horizontal-desktop .control-label > label { display: inline-block; *display: inline; *zoom: 1; } .form-horizontal-desktop .controls { margin-left: 0; } } @media (max-width: 1199px) { .row-fluid .row-fluid .form-horizontal-desktop .control-label { float: none; width: auto; padding-right: 0; padding-top: 0; text-align: left; } .row-fluid .row-fluid .form-horizontal-desktop .control-label > label { display: inline-block; *display: inline; *zoom: 1; } .row-fluid .row-fluid .form-horizontal-desktop .controls { margin-left: 0; } } .form-inline-header { margin: 5px 0; } .form-inline-header .control-group, .form-inline-header .control-label, .form-inline-header .controls { display: inline-block; *display: inline; *zoom: 1; } .form-inline-header .control-label { width: auto; padding-right: 10px; } .form-inline-header .controls { padding-right: 20px; } fieldset[class^="form-"] { min-width: 100%; } @-moz-document url-prefix() { fieldset[class^="form-"] { display: table-cell; } } fieldset.checkboxes input { float: left; } fieldset.checkboxes li { list-style: none; } .control-group, .controls, .controls input[type="text"], .controls input[type="number"], .controls input[type="email"], .controls select, .controls textarea { max-width: 100%; } .controls .btn-group > .btn { min-width: 50px; margin-left: -1px; } .controls .btn-group.btn-group-yesno { width: 220px; max-width: 100%; } .controls .btn-group.btn-group-yesno > .btn { width: 50%; min-width: 40px; padding: 2px 0; } input.input-large-text { font-size: 18px; line-height: 22px; height: auto; } textarea { resize: both; } textarea.vert { resize: vertical; } textarea.noResize { resize: none; } .subform-repeatable { padding-right: 10px; } .subform-repeatable > .btn-toolbar { margin: 0; } .subform-repeatable > .btn-toolbar .group-add { line-height: 26px; width: 56px; font-size: 13px; margin-left: 28px; } .subform-repeatable-group { margin-top: 20px; margin-left: 28px; border: 1px solid #ccc; padding: 8px 25px 15px; position: relative; border-radius: 3px; } .subform-repeatable-group > .btn-toolbar { margin: 0; } .subform-repeatable-group > .btn-toolbar .btn-group { margin-right: 0px; margin-top: -1px; position: static; } .subform-repeatable-group > .btn-toolbar .btn { font-size: 13px; line-height: 26px; background-color: #F3F3F3; position: absolute; } .subform-repeatable-group > .btn-toolbar .btn span { vertical-align: middle; line-height: 11px; } .subform-repeatable-group > .btn-toolbar .btn.btn-success { color: #378137; bottom: 0; right: 0; border-radius: 3px 0 0 0; border-width: 1px 0 0 1px; padding-top: 1px; } .subform-repeatable-group > .btn-toolbar .btn.btn-success .icon-plus:before { content: "]"; } .subform-repeatable-group > .btn-toolbar .btn.btn-danger { color: #942a25; top: 0; right: 0; border-radius: 0 0 0 3px; border-width: 0 0 1px 1px; } .subform-repeatable-group > .btn-toolbar .btn.btn-danger .icon-minus:before { content: "I"; } .subform-repeatable-group > .btn-toolbar .btn.btn-primary { color: #24748c; color: #333; right: 100%; top: 50%; margin-top: -27px; margin-right: 1px; border-radius: 3px 0 0 3px; border-width: 1px 0 1px 1px; line-height: 52px; } .subform-repeatable-group > .btn-toolbar .btn.btn-primary .icon-move:before { content: "Z"; } .subform-repeatable-group > .btn-toolbar .btn [class^="icon-"], .subform-repeatable-group > .btn-toolbar .btn [class*=" icon-"] { margin: 0; } .subform-repeatable-group > .btn-toolbar .btn:hover { background-color: #E6E6E6; } .subform-repeatable-group .control-group:last-of-type { margin-bottom: 10px; } @media (max-width: 979px) { .subform-repeatable-group > .btn-toolbar .btn-group { margin-bottom: 10px; } } .subform-table-layout .control-group { margin-bottom: 10px; } .subform-table-layout .control-group:last-of-type { margin-bottom: 0; } .subform-table-layout .controls { padding-right: 20px; } .subform-table-layout input { width: 100%; max-width: 206px; } .subform-table-layout table .btn-group { margin: 0 7px; } @media (max-width: 1024px) { .subform-table-layout .subform-repeatable { padding-right: 0; } .subform-table-layout .subform-repeatable tbody td:last-of-type { text-align: right; padding-bottom: 15px; } .subform-table-layout table, .subform-table-layout thead, .subform-table-layout tbody, .subform-table-layout th, .subform-table-layout td, .subform-table-layout tr { display: block; } .subform-table-layout table { border: 1px solid #ddd; } .subform-table-layout thead th { position: absolute; top: -9999px; left: -9999px; } .subform-table-layout thead th:last-of-type { position: static; width: 100% !important; text-align: right; box-sizing: border-box; border-left: 0; } .subform-table-layout tr { margin: 0; padding: 0; border: 0; } .subform-table-layout td { border: none; position: relative; padding-left: 50%; } .subform-table-layout tbody td:first-of-type { padding-top: 15px; border-top: 1px solid #ddd; } .subform-table-layout tbody td:first-of-type:before { top: 18px; } .subform-table-layout td:before { content: attr(data-column); position: absolute; top: 13px; left: 10px; padding-right: 10px; } } .controls > .radio:first-child, .controls > .checkbox:first-child { padding-top: 0; } .form-horizontal .controls > .radio:first-child, .form-horizontal .controls > .checkbox:first-child { padding-top: 5px; } .form-horizontal .controls > .radio.btn-group:first-child { padding-top: 0; } .form-horizontal .controls > .radio.btn-group-yesno:first-child { padding-top: 2px; } input.field-media-input { width: auto; } .header { background-color: #1a3867; border-top: 1px solid rgba(255,255,255,0.2); padding: 8px 25px; } @media (max-width: 767px) { .header { padding: 4px 18px; margin-left: -20px; margin-right: -20px; } } .header .navbar-search { margin-top: 0; } @media (max-width: 979px) { .header .navbar-search { border-top: 0; border-bottom: 0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } } .container-logo { float: right; text-align: right; } .logo { width: auto; max-width: 100%; max-height: 36px; height: auto; } .page-title { color: white; font-weight: normal; font-size: 20px; line-height: 36px; margin: 0; } .page-title [class^="icon-"], .page-title [class*=" icon-"] { margin-right: 16px; } @media (max-width: 767px) { .container-logo { display: none; } .page-title { font-size: 18px; line-height: 28px; } .page-title [class^="icon-"], .page-title [class*=" icon-"] { margin-right: 10px; } } .view-login { background-color: #17568c; padding-top: 0; } .view-login .container { width: 300px; position: absolute; top: 50%; left: 50%; margin-top: -206px; margin-left: -150px; } .view-login .navbar-fixed-bottom { padding-left: 20px; padding-right: 20px; text-align: center; } .view-login .navbar-fixed-bottom, .view-login .navbar-fixed-bottom a { color: #FCFCFC; } .view-login .navbar-inverse.navbar-fixed-bottom, .view-login .navbar-inverse.navbar-fixed-bottom a { color: #555; } .view-login .well { padding-bottom: 0; } .view-login .login-joomla { position: absolute; left: 50%; height: 24px; width: 24px; margin-left: -12px; font-size: 22px; } .view-login .navbar-fixed-bottom { position: absolute; } .view-login .input-medium { width: 176px; } .view-login #lang_chzn { width: 233px !important; max-width: none; } .view-login #lang_chzn .chzn-single div { width: 43px; } .view-login .input-prepend .add-on, .view-login .controls .btn-group > .btn { margin-left: 0; } .navbar-inverse { color: #333; } .login .btn-large { margin-top: 15px; } .login .form-inline .btn-group { display: block; } @media (max-width: 479px) { .login .chzn-single { width: 222px !important; } .login .chzn-container, .login .chzn-drop { width: 230px !important; } } @media (max-width: 319px) { .view-login .navbar-fixed-bottom { display: none; } } ul.manager .height-50 .icon-folder-2 { height: 35px; width: 35px; line-height: 35px; font-size: 30px; } #imageForm .well { margin-bottom: 5px; } .thumbnails-media .thumbnail { background-color: #f4f4f4; border-radius: 3px; border: 0; box-shadow: 0 0 0 1px rgba(0,0,0,0.05) inset; padding: 0px; height: 100px; width: 100px; margin: 8px; position: relative; text-align: center; overflow: hidden; } .thumbnails-media .thumbnail .close { background-color: #ccc; border-left: 1px solid rgba(0,0,0,0.1); height: 22px; line-height: 22px; opacity: 0.3; text-align: center; width: 22px; top: 0; right: 0; } .thumbnails-media .thumbnail .close:hover { background-color: #bbb; } .thumbnails-media .thumbnail *, .thumbnails-media .thumbnail *:before { -webkit-transition: all 0.2s ease; transition: all 0.2s ease; -webkit-box-sizing: border-box; box-sizing: border-box; } .thumbnails-media .thumbnail input[type="radio"], .thumbnails-media .thumbnail input[type="checkbox"] { margin: 0; opacity: 0.55; position: absolute; top: 5px; left: 5px; } .thumbnails-media .thumbnail .controls, .thumbnails-media .thumbnail .imginfoBorder { display: none; } .thumbnails-media .imgThumb { position: relative; z-index: 1; width: 100%; display: inline-block; } .thumbnails-media .imgThumb input { display: none; } .thumbnails-media .imgThumb label, .thumbnails-media .imgThumb .imgThumbInside { display: block; line-height: 100px; position: relative; width: 100%; border-radius: 3px; overflow: hidden; } .thumbnails-media .imgThumb label:before, .thumbnails-media .imgThumb .imgThumbInside:before { font-family: "IcoMoon"; font-style: normal; content: 'G'; position: absolute; top: 0; right: 0; background-color: #46a546; color: #fff; line-height: 26px; width: 26px; -webkit-transform: scale(0.5); transform: scale(0.5); opacity: 0; border-color: rgba(0,0,0,0.2); box-shadow: 0 1px 2px rgba(0,0,0,0.05); border-radius: 0 3px; } .thumbnails-media .imgThumb img { width: auto; } .thumbnails-media .selected :checked + label, .thumbnails-media .selected .imgThumbInside, .thumbnails-media .imgInput :checked + label, .thumbnails-media .imgInput .imgThumbInside { background-color: #ddd; } .thumbnails-media .selected :checked + label:before, .thumbnails-media .selected .imgThumbInside:before, .thumbnails-media .imgInput :checked + label:before, .thumbnails-media .imgInput .imgThumbInside:before { -webkit-transform: scale(1); transform: scale(1); opacity: 1; } .thumbnails-media .selected :checked + label:after, .thumbnails-media .selected .imgThumbInside:after, .thumbnails-media .imgInput :checked + label:after, .thumbnails-media .imgInput .imgThumbInside:after { position: absolute; top: 0; left: 0; right: 0; bottom: 0; content: ''; border: 3px solid #46a546; border-radius: 5px; } .thumbnails-media .imgDelete a.close, .thumbnails-media .imgPreview a { padding: 0; position: absolute; left: 0; z-index: 1; height: 26px; width: 26px; } .thumbnails-media .imgPreview a { width: 100%; } .thumbnails-media .imgDelete a.close { background-color: #bd362f; border-color: #bd362f rgba(0,0,0,0.2) rgba(0,0,0,0.2) #bd362f; top: 0; line-height: 28px; font-size: 12px; padding-left: 1px; color: #fff; border-bottom-right-radius: 3px; border-top-left-radius: 3px; z-index: 10; opacity: 0; -webkit-transform: scale(0.5); transform: scale(0.5); } .thumbnails-media .imgDelete a.close:hover { background-color: #802420; } .thumbnails-media .thumbnail:hover .imgDelete a.close { opacity: 1; -webkit-transform: scale(1); transform: scale(1); } .thumbnails-media .imgPreview a, .thumbnails-media .imgDetails { position: absolute; left: 0; text-align: left; background-color: #fff; border-color: rgba(0,0,0,0.2); bottom: 0; line-height: 26px; border: 1px solid rgba(0,0,0,0.1); border-width: 1px; border-radius: 0 3px 0 0; z-index: 1; } .thumbnails-media .imgPreview a:hover, .thumbnails-media .imgDetails:hover { background-color: #eee; } .thumbnails-media .imgDetails { padding: 0 5px; line-height: 20px; color: #555; } .thumbnails-media .imgFolder span { line-height: 90px; font-size: 38px; margin: 0; width: auto; } .thumbnails-media .imgFolder + .imgDetails { color: inherit; } .com_media .media a + a { margin-left: -1px; } .com_media .tree-holder { padding: 0 15px; } #folderframe.thumbnail { border: 0; box-shadow: none; padding: 0; } #mediamanager-form { margin: 0 -10px; overflow-x: hidden; } #mediamanager-form > .muted { padding: 0px; } #mediamanager-form .checkbox { padding-left: 30px; margin-bottom: 15px; } #mediamanager-form .checkbox input { margin-top: 3px; } #mediamanager-form .thumbnails { margin: 0 -8px; overflow-x: hidden; } #mediamanager-form .thumbnails .thumbnail { height: 120px; width: 120px; margin: 8px; } #mediamanager-form .thumbnails .imgThumb label, #mediamanager-form .thumbnails .imgTotal { line-height: 120px; } #mediamanager-form .icon-search::before { padding-right: 5px; padding-left: 1px; } #mediamanager-form .height-50 { background-color: #fafafa; height: 77px; position: relative; z-index: 1; width: 100%; display: inline-block; } #mediamanager-form .height-50 a, #mediamanager-form .height-50 .icon-folder-2 { display: inline-block; line-height: 75px; margin-top: -1px; } #mediamanager-form .height-50 a:after { bottom: 0; box-shadow: 0 0 0 1px rgba(0,0,0,0.08) inset; content: ""; display: block; left: 0; overflow: hidden; position: absolute; right: 0; top: 0; } #mediamanager-form .height-50 .icon-folder-2 { font-size: 40px; } .uploadform { margin-top: 20px; } body.modal-open { -ms-overflow-style: none; } .modal-header { padding: 0 20px; text-align: left; } .modal-header h3 { font-weight: normal; line-height: 50px; } .modal-header .close { width: 50px; margin-top: 0; margin-right: -15px; font-size: 2rem; line-height: 50px; border-left: 1px solid #ccc; } .modal-body { padding: 0; width: 100%; height: auto; max-height: none; } .modal-body .container-fluid { padding-top: 15px; padding-bottom: 15px; } .modal-footer { clear: both; } .contentpane { padding: 10px; height: auto; } @media (min-width: 768px) { .row-fluid .modal-batch [class*="span"] { margin-left: 0; } } .container-popup { padding: 10px; } .field-media-wrapper iframe { max-height: 75vh; } body .navbar, body .navbar-fixed-top { margin-bottom: 0; } .navbar-inner { min-height: 0; background: #f2f2f2; background-image: none; filter: none; } .navbar-inner .container-fluid { padding-left: 10px; padding-right: 10px; font-size: 15px; } .navbar-inverse .navbar-inner { background: #10223e; background-image: none; filter: none; } .navbar .navbar-text { line-height: 30px; } .navbar .admin-logo { float: left; padding: 7px 12px 0px 15px; font-size: 16px; color: #555; } .navbar .admin-logo:hover { color: #333; } .navbar-inverse.navbar .admin-logo { color: #d9d9d9; } .navbar-inverse.navbar .admin-logo:hover { color: #ffffff; } .navbar .brand { float: right; display: block; padding: 6px 10px; margin-left: -20px; font-size: inherit; font-weight: normal; } .navbar .brand:hover, .navbar .brand:focus { text-decoration: none; } .navbar .nav > li > a { padding: 6px 10px; } .navbar .nav > li > a:hover { color: white; } .navbar .nav > li > a:hover span.carot { border-bottom-color: #fff; border-top-color: #fff; } .navbar .dropdown-menu, .navbar .nav-user { font-size: 13px; } .navbar .nav-user .dropdown-menu li span { padding-left: 10px; } .navbar .nav > li ul { overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch; -moz-overflow-scrolling: touch; -ms-overflow-scrolling: touch; -o-overflow-scrolling: touch; overflow-scrolling: touch; height: auto; max-height: 500px; margin: 0; } .navbar .nav > li ul::-webkit-scrollbar { -webkit-appearance: none; width: 7px; } .navbar .nav > li ul::-webkit-scrollbar-thumb { border-radius: 4px; background-color: rgba(0,0,0,0.5); -webkit-box-shadow: 0 0 1px rgba(255,255,255,0.5); } .navbar .nav > li > .dropdown-menu:after { display: none; } .navbar .nav > .dropdown.open:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #fff; position: absolute; top: 25px; left: 10px; z-index: 1001; } .navbar .empty-nav { display: none; } .navbar-fixed-top .navbar-inner, .navbar-static-top .navbar-inner { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus, .dropdown-submenu:hover > a, .dropdown-submenu:focus > a { background-image: none; } .navbar-fixed-bottom { bottom: 0; } .navbar-fixed-bottom .navbar-inner { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .navbar .btn-navbar { background: #17568c; border: 1px solid #0D2242; margin-bottom: 2px; } @media (max-width: 767px) { .navbar .admin-logo { margin-left: 10px; padding: 9px 9px 0 9px; } } .navbar-search .search-query { background: rgba(255,255,255,0.3); } @media (max-width: 979px) { .navbar .nav { font-size: 13px; margin: 0 2px 0 0; } .navbar .nav > li > a { padding: 6px; } } @media (max-width: 767px) { .navbar-search.pull-right { float: none; text-align: center; } } @media (max-width: 738px) { .navbar .brand { font-size: 16px; } } .nav-collapse .nav li a, .dropdown-menu a { background-image: none; } .nav-collapse .dropdown-menu > li img { max-width: none; } @media (max-width: 767px) { .navbar-fixed-top .navbar-inner, .navbar-fixed-top .navbar-inner .container-fluid { padding: 0; } .navbar .brand { margin-top: 2px; float: none; text-align: center; } .navbar .btn-navbar { margin-top: 3px; margin-right: 3px; margin-bottom: 3px; } .nav-collapse .nav .nav-header { color: #fff; } .nav-collapse .nav, .navbar .nav-collapse .nav.pull-right { margin: 0; } .nav-collapse .dropdown-menu { margin: 0; } .nav-collapse .dropdown-menu > li > span { display: block; padding: 4px 15px; } .navbar-inverse .nav-collapse .dropdown-menu > li > span { color: #d9d9d9; } .nav-collapse .nav > li > a.dropdown-toggle { background-color: rgba(255,255,255,0.07); font-size: 12px; font-weight: bold; color: #eee; text-transform: uppercase; padding-left: 15px; } .nav-collapse .nav li a { margin-bottom: 0; border-top: 1px solid rgba(255,255,255,0.25); border-bottom: 1px solid rgba(0,0,0,0.5); } .nav-collapse .nav li ul li ul.dropdown-menu, .nav-collapse .nav li ul li:hover ul.dropdown-menu, .nav-collapse .caret { display: none !important; } .nav-collapse .nav > li > a, .nav-collapse .dropdown-menu a { font-size: 15px; font-weight: normal; color: #fff; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .navbar .nav-collapse .nav > li > .dropdown-menu::before, .navbar .nav-collapse .nav > li > .dropdown-menu::after, .navbar .nav-collapse .dropdown-submenu > a::after { display: none; } .nav-collapse .dropdown-menu li + li a { margin-bottom: 0; } } .quick-icons { font-size: 14px; margin-bottom: 20px; } .quick-icons .nav-header { margin: 12px 0 5px; font-size: 13px; } .quick-icons .nav-header:first-child { margin: 0 0 5px; } .quick-icons [class^="icon-"], .quick-icons [class*=" icon-"] { margin-right: 9px; } .quick-icons [class^="icon-"]:before, .quick-icons [class*=" icon-"]:before { font-size: 16px; margin-bottom: 20px; line-height: 18px; } html[dir=rtl] .quick-icons .nav-list [class^="icon-"], html[dir=rtl] .quick-icons .nav-list [class*=" icon-"] { margin-left: 9px; margin-right: 0; } .sidebar-nav .nav-list { padding-left: 25px; padding-right: 25px; } .sidebar-nav .nav-list > li > a { color: #555; padding: 3px 25px; margin-left: -26px; margin-right: -26px; } .sidebar-nav .nav-list > li.active > a { color: #fff; margin-right: -26px; } .sidebar-nav .nav-list > li > a:focus, .sidebar-nav .nav-list > li > a:hover { text-decoration: none; color: #fff; background-color: #2d6ca2; text-shadow: none; } .j-sidebar-container { position: absolute; display: block; left: -16.5%; width: 16.5%; margin: -18px 0 0 -1px; padding-top: 28px; padding-bottom: 40px; clear: both; background-color: #F0F0F0; border-bottom: 1px solid #dedede; border-right: 1px solid #dedede; -webkit-border-radius: 0 0 3px 0; -moz-border-radius: 0 0 3px 0; border-radius: 0 0 3px 0; } .j-sidebar-container.j-sidebar-hidden { left: -16.5%; } .j-sidebar-container.j-sidebar-visible { left: 0; } .j-sidebar-container .filter-select { padding: 0 14px; } .j-toggle-sidebar-header h3 { font-weight: normal; padding: 0 15px; } .j-toggle-button-wrapper { position: absolute; display: block; top: 7px; padding: 0; } .j-toggle-button-wrapper.j-toggle-hidden { right: -24px; } .j-toggle-button-wrapper.j-toggle-visible { right: 7px; } .j-toggle-sidebar-button { font-size: 16px; color: #3071a9; text-decoration: none; cursor: pointer; } .j-toggle-sidebar-button:hover { color: #1f496e; } #system-message-container, #j-main-container { padding: 0 0 0 5px; min-height: 0; } #system-message-container.j-toggle-main, #j-main-container.j-toggle-main, #system-debug.j-toggle-main { float: right; } @media (min-width: 768px) { .j-toggle-transition { -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease; } } @media (max-width: 979px) { .j-toggle-button-wrapper.j-toggle-hidden { right: -20px; } } @media (max-width: 767px) { .j-sidebar-container { position: relative; width: 100%; margin: 0 0 20px 0; padding: 0; background: transparent; border-right: 0; border-bottom: 0; } .j-sidebar-container.j-sidebar-hidden { margin-left: 16.5%; } .j-sidebar-container.j-sidebar-visible { margin-left: 0; } .j-toggle-sidebar-header, .j-toggle-button-wrapper { display: none; } .view-login select { width: 232px; } } @media (max-width: 420px) { .j-sidebar-container { margin: 0; } .view-login .input-medium { width: 180px; } .view-login select { width: 232px; } } #status { background: #ebebeb; border-top: 1px solid #dedede; padding: 4px 10px; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.08); -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.08); box-shadow: 0 0 3px rgba(0, 0, 0, 0.08); color: #626262; } #status .btn-group { margin: 0; } #status .btn-group.separator:after { content: ' '; display: block; float: left; background: #ADADAD; margin: 0 10px; height: 15px; width: 1px; } #status .btn-toolbar, #status p { margin: 0px; } #status .btn-toolbar, #status .btn-group { font-size: 12px; } #status a { color: #626262; } #status .badge { margin-right: .25em; } #status.status-top { background: #1a3867; -webkit-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.2) inset, 0px -1px 0px rgba(0, 0, 0, 0.3) inset, 0px -1px 0px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.2) inset, 0px -1px 0px rgba(0, 0, 0, 0.3) inset, 0px -1px 0px rgba(0, 0, 0, 0.3); box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.2) inset, 0px -1px 0px rgba(0, 0, 0, 0.3) inset, 0px -1px 0px rgba(0, 0, 0, 0.3); border-top: 0; color: #d9d9d9; padding: 2px 20px 6px 20px; } #status.status-top a { color: #d9d9d9; } @media (max-width: 479px) { .pagination a { padding: 5px; } .btn-group.divider, .header .row-fluid .span3, .header .row-fluid .span7 { display: none; } .navbar .btn { margin: 0; } .btn-subhead { display: block; margin: 10px 0; } .subhead-collapse.collapse { height: 0; overflow: hidden; } .btn-toolbar .btn-wrapper { display: block; margin: 0px 10px 5px 10px; } .btn-toolbar .btn-wrapper .btn { width: 100% !important; } .subhead { background: none repeat scroll 0 0 transparent; border-bottom: 0 solid #dedede; } .btn-group + .btn-group { margin-left: 10px; } .login .chzn-single { width: 222px !important; } .login .chzn-container, .login .chzn-drop { width: 230px !important; } #toolbar [class^="icon-"], #toolbar [class*=" icon-"] { background-color: transparent; border-right: medium none; width: 10px; } } table label { margin: 0; } td.has-context { height: 23px; } td.nowrap.has-context { width: 45%; } .subhead { background: #F0F0F0; border-bottom: 1px solid #dedede; color: #0C192E; text-shadow: 0 1px 0 #FFF; margin-bottom: 10px; min-height: 51px; } .subhead-collapse { margin-bottom: 19px; } .subhead-collapse.collapse { height: auto; overflow: visible; } .btn-toolbar { margin-bottom: 5px; } .btn-toolbar .btn-wrapper { display: inline-block; margin: 0 0 8px 5px; } .subhead-fixed { position: fixed; width: 100%; top: 30px; z-index: 100; } @media (max-width: 767px) { body { -webkit-overflow-scrolling: touch; } .subhead { margin-left: -20px; margin-right: -20px; padding-left: 10px; padding-right: 10px; } } .subhead h1 { font-size: 17px; font-weight: normal; margin-left: 10px; margin-top: 6px; } #toolbar { margin-bottom: 2px; margin-top: 12px; } #toolbar .btn { line-height: 24px; margin-right: 4px; padding: 0 10px; } #toolbar .btn-success { min-width: 148px; } #toolbar .btn-primary [class^="icon-"], #toolbar .btn-primary [class*=" icon-"], #toolbar .btn-warning [class^="icon-"], #toolbar .btn-warning [class*=" icon-"], #toolbar .btn-danger [class^="icon-"], #toolbar .btn-danger [class*=" icon-"], #toolbar .btn-success [class^="icon-"], #toolbar .btn-success [class*=" icon-"], #toolbar .btn-info [class^="icon-"], #toolbar .btn-info [class*=" icon-"], #toolbar .btn-inverse [class^="icon-"], #toolbar .btn-inverse [class*=" icon-"] { background-color: transparent; border-right: 0; border-left: 0; width: 16px; margin-left: 0; margin-right: 0; } #toolbar #toolbar-options, #toolbar #toolbar-help { float: right; } #toolbar [class^="icon-"], #toolbar [class*=" icon-"] { background-color: #e6e6e6; border-radius: 3px 0 0 3px; border-right: 1px solid #b3b3b3; height: auto; line-height: inherit; margin: 0 6px 0 -10px; opacity: 1; text-shadow: none; width: 28px; z-index: -1; } #toolbar iframe .btn-group .btn { margin-left: -1px !important; } html[dir=rtl] #toolbar #toolbar-options, html[dir=rtl] #toolbar #toolbar-help { float: left; } @media (max-width: 767px) { .subhead-fixed { position: static; width: auto; } } .btn-subhead { display: none; } @media (min-width: 480px) { #filter-bar { height: 29px; } } @media (max-width: 479px) { .navbar .btn { margin: 0; } .btn-subhead { display: block; margin: 10px 0; } .subhead-collapse.collapse { height: 0; overflow: hidden; } .btn-toolbar .btn-wrapper { display: block; margin: 0px 10px 5px 10px; } .btn-toolbar .btn-wrapper .btn { width: 100% !important; } .subhead { background: none repeat scroll 0 0 transparent; border-bottom: 0 solid #dedede; } #toolbar [class^="icon-"], #toolbar [class*=" icon-"] { background-color: transparent; border-right: medium none; width: 10px; } } @media (max-width: 319px) { .view-login .navbar-fixed-bottom { display: none; } } ul.treeselect, ul.treeselect li { margin: 0; padding: 0; } ul.treeselect { margin-top: 8px; } ul.treeselect li { padding: 2px 10px 2px; list-style: none; } ul.treeselect i.treeselect-toggle { line-height: 18px; } ul.treeselect label { font-size: 1em; margin-left: 8px; } ul.treeselect label.nav-header { padding: 0; } ul.treeselect input { margin: 2px 0 0 8px; } ul.treeselect .treeselect-menu { margin: 0 6px; } ul.treeselect ul.dropdown-menu { margin: 0; } ul.treeselect ul.dropdown-menu li { padding: 0 5px; border: none; } .tree-holder .folder-url, .tree-holder .file { position: relative; background-color: #fefefe; margin-bottom: 4px; padding: 0 10px; line-height: 32px; border: 1px solid rgba(0,0,0,0.08); } .tree-holder .folder-url, .tree-holder .folder-url:hover, .tree-holder .folder-url:focus { font-weight: bold; background-color: #f5f5f5; color: #3071a9; } .tree-holder .active { background-color: #3071a9; color: #fff; box-shadow: -3px 0 0 #36a2ff !important; } .tree-holder .active.folder-url { background-color: #f5f5f5; color: #3071a9; } .tree-holder .active.file:hover { background-color: #3071a9; } .tree-holder ul ul { box-shadow: -3px 0 0 rgba(0,0,0,0.08); padding-right: 0; } .tree-holder ul ul .folder-url, .tree-holder ul ul .file { box-shadow: -3px 0 0 #3071a9; border-left: 0; } .break-word { word-break: break-all; word-wrap: break-word; } .disabled { cursor: default; background-image: none; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .j-links-separator { margin: 20px 0px; width: 100%; height: 0px; border-top: 2px solid #DDDDDD; } .container-main, #system-debug { padding-bottom: 50px; } .pagination-toolbar { margin: 0; } .pagination-toolbar a { line-height: 26px; } .pull-right > .dropdown-menu, .dropdown-reverse { left: auto; right: 0; } .nav-filters hr { margin: 5px 0; } #assignment.tab-pane { min-height: 500px; } @media (max-width: 979px) { .container-fluid { padding-left: 10px; padding-right: 10px; } } @media (min-width: 768px) { body { padding-top: 30px; } .nav-collapse.collapse.in { height: auto !important; } } @media (max-width: 767px) { .container-fluid { padding-left: 0; padding-right: 0; } } @media (max-width: 479px) { .pagination a { padding: 5px; } .btn-group.divider, .header .row-fluid .span3, .header .row-fluid .span7 { display: none; } .btn-group + .btn-group { margin-left: 10px; } } .info-labels { margin-top: -5px; margin-bottom: 10px; } .sortable-handler.inactive { opacity: 0.3; filter: alpha(opacity=30); } .alert-joomlaupdate { text-align: center; } .alert-joomlaupdate button { vertical-align: baseline; } .j-jed-message { line-height: 2em; color: #333333; } .moor-box { z-index: 3; } .admin .chzn-container .chzn-drop { z-index: 1060; } .item-associations { margin: 0; } .item-associations li { list-style: none; display: inline-block; margin: 0 0 3px 0; } .item-associations li a { color: #ffffff; } #flag img { padding-top: 6px; vertical-align: top; } .tooltip { max-width: 400px; } .tooltip-inner { max-width: none; text-align: left; text-shadow: none; } th .tooltip-inner { font-weight: normal; } .tooltip.hasimage { opacity: 1; } #permissions-sliders .chzn-container { margin-top: -5px; position: absolute; } #permissions-sliders .table td { padding: 8px 8px 9px; } .img-preview > img { max-height: 100%; } .alert-no-items { margin-top: 20px; } @media (max-width: 767px) { html[dir=rtl] #toolbar #toolbar-options, html[dir=rtl] #toolbar #toolbar-help, #toolbar #toolbar-options, #toolbar #toolbar-help { float: none; } } #permissions-sliders .input-small { width: 120px; } .editor { overflow: hidden; position: relative; } .editor textarea.mce_editable { box-sizing: border-box; } a.grid_false { display: inline-block; height: 16px; width: 16px; background-image: url('../images/admin/publish_r.png'); } a.grid_true { display: inline-block; height: 16px; width: 16px; background-image: url('../images/admin/icon-16-allow.png'); } textarea, input, .uneditable-input { box-shadow: none !important; } textarea:focus, input:focus, .uneditable-input:focus { box-shadow: none; border: 1px solid #3071A9; } .js-pstats-data-details dd { margin-left: 240px; } .js-pstats-data-details dt { width: 220px; } #permissions table td, #page-permissions table td { vertical-align: middle; } #permissions table select, #page-permissions table select { margin-bottom: 0; } .js-stools-container-bar .btn-primary .caret { border-bottom: 4px solid #fff; } .input-append .add-on, .input-append .btn, .input-append .btn-group > .dropdown-toggle, .input-prepend .add-on, .input-prepend .btn, .input-prepend .btn-group > .dropdown-toggle { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .alert, .alert-options, .badge, .breadcrumb > li, .close, .input-append .add-on, .input-prepend .add-on, .label, .nav-header, .nav-list .nav-header, .nav-list > .active > a, .nav-list > .active > a:focus, .nav-list > .active > a:hover, .nav-list > li > a, .nav-tabs.nav-dark, .navbar .brand, .navbar .nav > li > a, .navbar-inverse .brand, .navbar-inverse .nav > li > a, .navbar-inverse .navbar-search .search-query.focused, .navbar-inverse .navbar-search .search-query:focus, .progress .bar, .subhead { text-shadow: none; } .popover-content { min-height: 33px; } .lead, .navbar .brand, .hero-unit, .hero-unit .lead { font-weight: 400; } @media (min-width: 1200px) { #permissions .tab-content { position: sticky; top: 90px; } } .com_cpanel .well { padding: 8px 14px; border: 1px solid rgba(0,0,0,0.05); } .com_cpanel .well .module-title.nav-header { color: #555; } .com_cpanel .well > .row-striped, .com_cpanel .well > .list-striped { margin: 0 -14px; } .com_cpanel .well > .row-striped > .row-fluid, .com_cpanel .well > .list-striped > .row-fluid { padding: 8px 14px; } .com_cpanel .well > .row-striped > .row-fluid [class*="span"], .com_cpanel .well > .list-striped > .row-fluid [class*="span"] { margin-left: 0; } .com_cpanel .well > .row-striped > li, .com_cpanel .well > .list-striped > li { padding-left: 15px; padding-right: 15px; } .com_postinstall fieldset { background-color: #fafafa; border: 1px solid #ccc; border-radius: 5px; margin: 0 0 18px; padding: 4px 18px 18px; } .com_postinstall fieldset .btn { margin-top: 10px; } .com_postinstall legend { border: 0 none; display: inline-block; padding: 0 5px; margin-bottom: 0; width: auto; } .com_privacy .well { padding: 8px 14px; border: 1px solid rgba(0,0,0,0.05); } .com_privacy .well .module-title.nav-header { color: #555; } .com_privacy .well > .row-striped, .com_privacy .well > .list-striped { margin: 0 -14px; } .com_privacy .well > .row-striped > .row-fluid, .com_privacy .well > .list-striped > .row-fluid { padding: 8px 14px; } .com_privacy .well > .row-striped > .row-fluid [class*="span"], .com_privacy .well > .list-striped > .row-fluid [class*="span"] { margin-left: 0; } .com_privacy .well > .row-striped > li, .com_privacy .well > .list-striped > li { padding-left: 15px; padding-right: 15px; } #menu-assignment { position: relative; } #menu-assignment .menu-links { margin-top: 15px; margin-left: 0; -webkit-column-count: 4; -moz-column-count: 4; column-count: 4; -moz-column-gap: 15px; -webkit-column-gap: 15px; column-gap: 15px; } #menu-assignment .menu-links > li { display: inline-block; vertical-align: top; margin-bottom: 15px; width: 100%; list-style: none; page-break-inside: avoid; break-inside: avoid; } #menu-assignment .menu-links-block { background-color: #fafafa; border: 1px solid #ddd; border-radius: 3px; padding: 15px; } @media (max-width: 1199px) { #menu-assignment .menu-links { -webkit-column-count: 3; -moz-column-count: 3; column-count: 3; } } @media (max-width: 767px) { #menu-assignment .menu-links { -webkit-column-count: auto; -moz-column-count: auto; column-count: auto; } } .pull-right { float: left; } .pull-left { float: right; } .table th, .table td { text-align: right; } .navbar .brand { float: right; padding: 8px 20px 8px 12px; margin-right: -20px; margin-left: 0; } .navbar .nav, .navbar .nav > li { float: left; } .navbar .nav.pull-right { margin-right: 10px; margin-left: 0px; } .pull-right > .dropdown-menu { left: 0; right: auto; } [class*="span"] { float: right; margin-right: 20px; margin-left: 0px; } .row-fluid [class*="span"] { float: right; margin-right: 2.127659574%; *margin-right: 2.0744680846382977%; margin-left: 0px !important; *margin-left: 0px !important; } .row-fluid [class*="span"]:first-child { margin-right: 0; } .form-horizontal .control-label { float: right; width: auto; padding-left: 5px; padding-right: 0; text-align: right; } .form-horizontal .controls { *display: inline-block; *padding-right: 20px; margin-right: 160px; *margin-right: 0; margin-left: 0; text-align: right; margin-top: 6px; } .form-horizontal .controls:first-child { *padding-right: 160px; } .form-vertical .controls { *display: inline-block; *padding-right: 20px; margin-right: 0; *margin-right: 0; margin-left: 0; text-align: right; margin-top: 6px; } .form-vertical .control-label { float: none; padding-right: 0; padding-top: 0; text-align: right; width: auto; } .chzn-container-single-nosearch .chzn-search input { position: absolute; left: -9000px; display: none; } .nav-tabs > li, .nav-pills > li { float: right; } .nav-stacked > li { float: none; } .btn-group > .btn { float: right; margin-right: -1px; margin-left: 0; } .btn-group > .btn:first-child { margin-right: 0; } .btn-group > .btn:first-child, .radio.btn-group > label:first-of-type { margin-left: 0; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-topleft: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -moz-border-radius-topright: 4px; } .btn-group > .btn:last-child, .btn-group > .dropdown-toggle { -webkit-border-top-right-radius: 0px; border-top-right-radius: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; -moz-border-radius-topright: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-topleft: 4px; -moz-border-radius-bottomleft: 4px; } .btn-group > .btn.large:first-child { -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; -webkit-border-top-left-radius: 0px; border-top-left-radius: 0px; -moz-border-radius-bottomleft: 0px; -moz-border-radius-topleft: 0px; margin-right: 0; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; -moz-border-radius-bottomright: 6px; -moz-border-radius-topright: 6px; } .btn-group > .btn.large:last-child, .btn-group > .large.dropdown-toggle { -webkit-border-top-right-radius: 0px; border-top-right-radius: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; -moz-border-radius-topright: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; -moz-border-radius-topleft: 6px; -moz-border-radius-bottomleft: 6px; } .btn-group > .btn:first-child:last-child { margin-left: 0; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-topleft: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -moz-border-radius-topright: 4px; } .input-prepend .add-on { float: right; } .input-append .add-on { float: none; } .input-prepend .add-on, .input-prepend .btn { margin-left: -1px; margin-right: 0; } .input-prepend .add-on:first-child, .input-prepend .btn:first-child { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-append input, .input-append select, .input-append .uneditable-input { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-append .uneditable-input { border-left-color: #ccc; border-right-color: #eee; } .input-append .add-on:last-child, .input-append .btn:last-child { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-prepend.input-append input, .input-prepend.input-append select, .input-prepend.input-append .uneditable-input { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-prepend.input-append .add-on:first-child, .input-prepend.input-append .btn:first-child { margin-left: -1px; margin-right: 0px; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; float: right; } .input-prepend.input-append .add-on:last-child, .input-prepend.input-append .btn:last-child { margin-right: -1px; margin-left: 0px; -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-prepend input, .input-prepend select, .input-prepend .uneditable-input { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } body { direction: rtl; } .pager .next a { float: left; } .pager .previous a { float: right; } .icon-arrow-right { background-position: -241px -94px; float: left; padding-right: 3px; } .icon-arrow-left { background-position: -264px -95px; } .icon-refresh { background-position: -240px -23px; } #refresh-status { background-position: right center; padding-left: 0; padding-right: 25px; } .radio input[type="radio"], .checkbox input[type="checkbox"] { float: right; margin-right: 2px; margin-left: 5px; } .list-striped, .row-striped { list-style: none; line-height: 18px; text-align: right; } .btn-group + .btn-group { margin-right: 5px; margin-left: 0px; } .tabs-left > .nav-tabs { float: right; margin-left: 19px; border-left: 1px solid #DDD; margin-right: 0px; border-right: 0px; } .tabs-left > .nav-tabs .active > a, .tabs-left > .nav-tabs .active > a:hover { border-color: #DDD #DDD #DDD transparent; } .tabs-left > .nav-tabs > li > a { margin-left: -1px; -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; margin-right: 0px; } .controls > .radio:first-child, .controls > .checkbox:first-child { padding-top: 0px; } .btn-toolbar { margin-top: 14px; margin-bottom: 3px; } .navbar .nav > li { float: right; } .icon-folder-2 { line-height: 25px; padding-left: 5px; } .navbar .nav > li > a { padding: 8px 10px; color: #FFFFFF; } .navigation .nav li li .nav-child { left: auto; right: 100%; } .navigation .nav li li .nav-child:before { left: auto; right: -7px; border-left: 7px solid rgba(0,0,0,0.2); border-right-width: 0; } .navigation .nav li li .nav-child:after { left: auto; right: -6px; border-left: 6px solid #ffffff; border-right-width: 0; } .container-logo { padding-top: 6px; float: left; text-align: left; } .modal-header .close { float: left; } .pagination a { float: right; } .pagination ul { display: inline-block; *display: inline; *zoom: 1; margin-right: 0; margin-bottom: 0; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.05); -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.05); box-shadow: 0 1px 2px rgba(0,0,0,0.05); } .pagination a { float: right; padding: 0 14px; line-height: 34px; text-decoration: none; border: 1px solid #ddd; border-right-width: 0; } .pagination li:first-child a { border-right-width: 1px; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .pagination li:last-child a { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .pagination-centered { text-align: center; } .pagination-right { text-align: right; } .icon-first:before { content: "\e000"; } .icon-previous:before { content: "\7d"; } .icon-last:before { content: "\7b"; } .icon-next:before { content: "\7c"; } .dl-horizontal dt { float: right; text-align: left; clear: right; } .dl-horizontal dd { margin-left: 0; margin-right: 180px; } .dl-horizontal dt, .profile> ul { margin: 9px 25px 0 0; } .dropdown-submenu > a:after { float: left; border-width: 5px 5px 5px 0; margin-left: -10px; border-left-color: transparent; border-right-color: #CCC; } .badge { margin-left: 10px; } .tip-text { text-align: right; } .icon-file-add:before { content: "("; } .icon-eye-open:before, .icon-eye:before { content: ">"; } .icon-checkin:before, .icon-checkbox:before { content: "<"; } .icon-save-new:before, .icon-plus-2:before { content: "["; } .btn-toolbar .btn + .btn, .btn-toolbar .btn-group + .btn, .btn-toolbar .btn + .btn-group { margin-left: 0; margin-right: 5px; } .btn-toolbar .btn-wrapper { display: inline-block; margin: 0 5px 5px 0; } .btn-group > .btn + .btn { margin-left: 0; margin-right: -1px; } .input-append .add-on, .input-append .btn, .input-prepend .add-on, .input-prepend .btn { margin-left: 0; margin-right: -1px; } .table-bordered { border-right-width: 0; border-left-width: 1px; border-right-style: none; border-left-style: solid; border-right-color: -moz-use-text-color; border-left-color: #DDDDDD; } .chzn-container-single .chzn-single { padding-right: 8px; padding-left: 0; } .chzn-container-single .chzn-single span { margin-left: 26px; margin-right: 0; } .chzn-container-single .chzn-single abbr { left: 26px; right: auto; } .chzn-container-single .chzn-single div { left: 0; right: auto; } .chzn-container-multi .chzn-choices li { float: right; } .chzn-container-multi .chzn-choices .search-choice { margin-right: 5px; margin-left: 0; padding-right: 5px; padding-left: 20px; } .chzn-container-multi .chzn-choices .search-choice .search-choice-close { left: 3px; right: auto; } .chzn-container.chzn-with-drop .chzn-drop { right: 0; left: auto; } .chzn-container-single.chzn-container-single-nosearch .chzn-search { position: absolute; right: -9999px; left: auto; } .chzn-container .chzn-drop { right: -9999px; left: auto; } .alert { padding-right: 14px; padding-left: 35px; } .alert .close { left: -21px; right: auto; } .close { float: left; } .form-search .radio, .form-search .checkbox, .form-inline .radio, .form-inline .checkbox { margin-bottom: 9px; } .form-search .radio input[type="radio"], .form-search .checkbox input[type="checkbox"], .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { float: right; margin-left: 3px; margin-right: 0; } .com_media .container-main .media { display: inline-block; } .thumbnails > li { float: right; margin-bottom: 18px; margin-right: 20px; } #mediamanager-form .description, #mediamanager-form .filesize, #mediamanager-form .dimensions { direction: ltr; } .popover, .tooltip-inner { text-align: right; } .popover.top .arrow, .popover.bottom .arrow { margin-right: -11px; } .popover.top .arrow:after, .popover.bottom .arrow:after { margin-right: -10px; } @media (max-width: 480px) { .btn-toolbar .btn-wrapper { display: block; margin: 0 0 5px 0; } .btn-toolbar .btn-wrapper .btn { margin-left: 0px; margin-right: 10px; } } #pop-print { float: left; margin: 10px; } #install_url, #install_directory, #jform_customurl, #jform_link, #jform_params_url, input[type="url"] { text-align: left; direction: ltr; } #aside .nav .nav-child { border-left: 0; border-right: 2px solid #ddd; padding-left: 0; padding-right: 5px; } .dropdown-menu { text-align: right; } [class^="icon-"], [class*=" icon-"] { margin-left: .25em; } .navbar .admin-logo { float: right; padding: 7px 15px 0px 12px; } .navbar .brand { float: left; padding: 6px 10px; } .navbar .nav { margin: 0 0 0 10px; } .navbar .nav > li > a { padding: 6px 10px; } .navbar .nav > li ul { overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch; -moz-overflow-scrolling: touch; -ms-overflow-scrolling: touch; -o-overflow-scrolling: touch; overflow-scrolling: touch; height: auto; max-height: 500px; margin: 0; } .navbar .nav > li ul::-webkit-scrollbar { -webkit-appearance: none; width: 7px; } .navbar .nav > li ul::-webkit-scrollbar-thumb { border-radius: 4px; background-color: rgba(0,0,0,0.5); -webkit-box-shadow: 0 0 1px rgba(255,255,255,0.5); } .navbar .nav-user .dropdown-menu li span { padding-left: 0; padding-right: 10px; } .navbar .nav > .dropdown.open:after { right: 10px; width: 0; } .navbar .empty-nav { display: none; } #toolbar .btn { padding: 0 10px; } #toolbar [class^="icon-"], #toolbar [class*=" icon-"] { border-radius: 0 3px 3px 0; border-right: 0; border-left: 1px solid #b3b3b3; margin: 0 -10px 0 6px; } .chzn-container-single .chzn-single { padding-left: 8px; } .chzn-container-single .chzn-single div { border-left: 0; border-right: 1px solid #cccccc; } .chzn-container-single .chzn-single abbr { left: 36px; } .chzn-container-active.chzn-with-drop .chzn-single div { background-color: #f3f3f3; border-bottom: 1px solid #cccccc; border-bottom-left-radius: 0px; border-bottom-right-radius: 3px; border-left: 1px solid #cccccc; } .chzn-container-multi .chzn-choices .search-choice { padding-left: 7px; } .chzn-container-multi .chzn-choices .search-choice .search-choice-close { margin-left: 0; margin-right: 3px; } .chzn-container .chzn-single.chzn-color[rel="value_0"] div, .chzn-container .chzn-single.chzn-color[rel="value_1"] div { border-right: none; } .chzn-container-single .chzn-search::after { left: 20px; right: auto; } .container-logo { padding-top: 0; float: left; text-align: left; } .page-title [class^="icon-"], .page-title [class*=" icon-"] { margin-right: 0; margin-left: 16px; } @media (max-width: 767px) { .navbar .admin-logo { margin-right: 10px; padding: 9px 9px 0 9px; } .navbar .btn-navbar { float: left; margin-right: 5px; margin-left: 3px; } .navbar .nav-collapse .nav.pull-left { float: none; margin-left: 0; margin-right: 0; } .nav-collapse .nav > li { float: none; } .page-title [class^="icon-"], .page-title [class*=" icon-"] { margin-left: 10px; } } #status { padding: 4px 10px; } #status .btn-group { margin: 0; } #status .btn-group.separator:after { content: ' '; display: block; float: left; background: #ADADAD; margin: 0 10px; height: 15px; width: 1px; } #status .badge { margin-left: .25em; margin-right: 0; } .dropdown-menu > li > a { text-align: right; } .btn-group.btn-group-yesno > .btn, .btn-group > .btn, .btn-group > .btn + .dropdown-toggle { float: none; } a.grid_false { display: inline-block; height: 16px; width: 16px; background-image: url('../images/admin/publish_r.png'); } a.grid_true { display: inline-block; height: 16px; width: 16px; background-image: url('../images/admin/icon-16-allow.png'); } .view-login .login-joomla { position: absolute; right: 50%; height: 24px; width: 24px; margin-right: -12px; font-size: 22px; } .view-login .input-medium { width: 169px; } .login .chzn-single { width: 219px !important; } .login .chzn-container, .login .chzn-drop { width: 227px !important; max-width: 227px !important; } .login .input-prepend .chzn-container-single .chzn-single { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; border-right: 0px; } .j-sidebar-container { position: absolute; display: block; left: auto; right: -16.5%; padding-top: 28px; padding-bottom: 40px; clear: both; margin: -10px -1px 0 0; border-right: 0; border-left: 1px solid #d3d3d3; } .j-sidebar-container.j-sidebar-hidden { left: auto; right: -16.5%; } .j-sidebar-container.j-sidebar-visible { left: auto; right: 0; } .j-toggle-sidebar-header { padding: 10px 19px 10px 0; } .sidebar { padding: 3px 4px 3px 3px; } .j-toggle-button-wrapper.j-toggle-hidden { right: auto; left: -24px; } .j-toggle-button-wrapper.j-toggle-visible { right: auto; left: 10px; } .j-sidebar-container .icon-folder-2 { line-height: 15px; padding-left: 0; } #system-message-container, #j-main-container { padding: 0 5px 0 0; } #system-message-container.j-toggle-main, #j-main-container.j-toggle-main, #system-debug.j-toggle-main { float: left; } @media (max-width: 979px) { .j-toggle-button-wrapper.j-toggle-hidden { right: auto; left: -20px; } } @media (max-width: 767px) { .j-sidebar-container { position: relative; padding: 0; border-right: 0; border-left: 0; } .j-sidebar-container.j-sidebar-hidden { margin-left: auto; margin-right: 16.5%; } .j-sidebar-container.j-sidebar-visible { margin-left: auto; margin-right: 0; } .view-login select { width: 229px; } } #j-main-container.expanded { margin-right: 0; } @media (min-width: 768px) { .row-fluid [class*="span"] { margin-right: 15px; margin-left: 0; } .row-fluid .modal-batch [class*="span"] { margin-right: 0; } } .row-fluid .modal-batch [class*="span"] { margin-right: 0; } @media (max-width: 479px) { .btn-toolbar .btn-wrapper .btn { width: 100% !important; margin-right: 0px; } .btn-toolbar .btn-wrapper { margin: 0 10px 5px 10px; } } @media (max-width: 420px) { .j-sidebar-container { margin: 0; } .view-login .input-medium { width: 173px; } .view-login select { width: 229px; } } .js-pstats-data-details dd { margin-right: 240px; } .modal-footer button { float: left; } .modal-header { text-align: right; } #mediamanager-form .thumbnails-media .thumbnail { margin-left: 18px !important; margin-right: 0; direction: ltr; text-align: center; } .thumbnails-media .imgThumb label::before, .thumbnails-media .imgThumb .imgThumbInside::before { left: 0; right: auto; border-radius: 3px 0; } .thumbnails-media .thumbnail input[type="radio"], .thumbnails-media .thumbnail input[type="checkbox"] { left: auto; right: 5px; } .thumbnails-media .imgDelete a.close { border-radius: 0 3px; } .thumbnails-media .imgPreview a, .thumbnails-media .imgDetails { border-radius: 3px 0; border-width: 1px; left: 0; right: 0; text-align: left; direction: ltr; } .thumbnails-media .imgPreview a { width: 100%; } .subform-table-layout td { padding-left: 10px; } .subform-table-layout td::before { content: attr(data-column); left: auto; right: 10px; padding-left: 10px; padding-right: 0; } .subform-table-layout .subform-repeatable tbody td:last-of-type { text-align: left; } .subform-table-layout .form-horizontal .controls { margin-top: 0; } .tree-holder ul ul { padding-right: 15px; box-shadow: 3px 0 0 rgba(0,0,0,0.08); padding-left: 0; } .tree-holder ul ul .folder-url, .tree-holder ul ul .file { box-shadow: 3px 0 0 #3071a9; border-right: 0; border-left: 1px solid rgba(0,0,0,0.08); } .dropdown-reverse { left: 0; right: auto; } .com_cpanel .well > .row-striped > .row-fluid [class*="span"], .com_cpanel .well > .list-striped > .row-fluid [class*="span"] { margin-right: 0; } PKb��\��";o;o#templates/isis/template_preview.pngnu�[����PNG IHDR���ja��PLTE"B(E)J #I*I(DHTm�����������������̾����������������־�ž�ƛ�z�nl�{r�����Y����w�������֜����뮣���������������Ĵ����ݙ�� ;�33ߡ��jf�GEۉQ���i��j���|���������������������������������RRRu�����������qsz������u|��JE�\W��y��ͤӀ���zzz�|}���rrr���������~�������㺸䆋ô����Ӻ������� 1��������JJJ[[[���������3��������fffqho�������������֘�����CJ_���挑�v��������b�Չ��e����Ó�ݥ��*R C!:2R7Ic4;VZn�K\z.I$9Y2A]gp�e|�Qd�7Mk0R9cBsDSt*;`�����`eu���:j|��]u�(\]��Lm�r�����Kr�:k'.T{��ѫ���ѭ��s��6]vx�������������.Z���� 11Z3?k:cI|S�BzBsP�R�J�J�CK�&S�[�0a�+Q�=8i]�iVI}Cz@m���Ar�4=7lH���,%�&���b��%a�:NJ9����m�Y�m�&{�???q��u��?lS�s<M4b*J(((������&��u��3��z��`��>��L��O��j��h�އ�����333L��0��'B 1S 2Z 9c���k�IDATx� n#�#��?�A�ƒg�^ڕ�d#����K�:L��<��8t쩫�8B��Izs�*͟����������f�] �x��kwuk`��9?x4m��'�1���Q�Ԋ�b��b5�^����4E����JME-mj�>����h���IJ�T�t���C�i���7B�X��`�M�6�1��&�u�6���l�ǖ,���9<t�*8��䚦������9� �:�*�W�90MqG��X V��_����.�ʭ옵d|-A4�:��w����9����؏�}��9�`&��j��i����qsvyf���T ����}�U/�+i4�歴�k�G���9������4�=� F)m*!7�מ�f@mL@ Ǵ�~%���1_���@� �u���V�XY�E�KO�����Y��O�3(Q���:��^��� �J�e����S��L#�O댼&��qLmcE�)�K�o��9i?w� �7����>�~�{9r��k��]V����0�'�:��r�H�uK�����CHs7n��a|�;�><W�@4 :�b�sG���S{{���?I�,����7GU��}�'�MP�ۀ��^컁e���7G�}v��٨����x��/�o�z����䛅��0���L`u�.�T������6��f�߶g�̠���+�2�s��?� �O#�RJ$�J�<�Ш���/ �:��%7O 0���~�F��b��IH{7�>&����&a\�EP*G�_��l�����eNw����2pw��_��i9�.�G�!ՀD��x����� ��|a��/>t��& &?&��qi�D2��N2l��0���F{��s����䀭��1x�i�{��K$u��u����1[3�Sy��A�hz{z�� Zށ�� 0��2��r�ªv�Z��rIWm��O����4���b3�<:>����/��j>��-�3��C�ڴ:�A�^ 7DM����܊r(���zX�Cܷڷ֣3Z_�`�����`��\�J.%K��m�;������t���XXJY���d�Om���V�V�΅&�+zbqa2#����a�z��"�P������@�D����3v>4�~N�#�S@)��=B�Px:���j��(����"bG�(mϲ�4 $�l�4�S?:��1�^B����R2P m7$#��I����B��3dd+A�|���6ݾRw�7P}}�(����zC����m�������Z�?;��ƭ���4�V��/�&�2e�E�+y]�!�0x�g� G�h!�%��|�8��C���C��b������G���a����/=��2[��mQ�3���֞��a�9�d橉�)��0(�u���Zp�E�bHj �?��R �^����HT"E�X�RR!4sBT�$Y�S*� ����Tb���\�'x�Up0ő7��=��~�$���%�W �oDׯ��}&8�U�:e0�w��(���Y���B�BE��`%�%����L�r�^J��ʴ�Ak�r�2��8ߊA�6;�D��k����]�I��ZF-�[�ٔ�~)��[ 9�2� U��(W �v08W]� .�w��p�&@�V}鶐Ed� 8 �1� �R��<X"� A5T緷O`�-��fX��7u��be�R��"�4P�)@���=������>�}KLș��o5�T�V����<-���~��K{�_��b"�K�����(b؇l�~2w�6���H�VD�H;=�ŵ�JY��`����B`NH����N�N�i�R,hq��xt����>((C�:m�\�i�z�)���kO�DH�_�ݿ^��˯��W�$-��#[�{���Z렢R^� 5�iK��f¶�L�O�O�4-�K�~d|����!�5^wf�=( yCZ��1��Siv�ս�ihǘ�K�UpE|+A����hE����jN�f@��X��c����:��tf��n��g������iGz&�����}������W����O�z����z�wu��2���|�52��X�n���m����0����82����pH��J5�!�����"\�ӎu��`̌���� !�'J@�R��)p̕���IH��l2����bV���hT��Z8�Y=�� T}J�R9�u�@רA)�+O�����������^�b�������zS�����R4a��!��Ubv�8�r�>lk詶�A��:j�f�m�}ěU��č��{�g���w'�5__X� *�L;�D��*T�3w9i�,��hr��YJ��������9�s�u���z���#��:�O���-��k�%����?����_���wk>6}��R���o%�M��0�ԛr�]�4k5�z��7Q���!jsX�} ij�x#����!�C��ѲW&����m��+2���y�̄g;�e�-S�#��9!�g��C\"� \�\^'���q��I, 3���i�u�[צ�s��6�k ��:��8Ke��q�y�{?i��>���]_�b��ˋ�:2 L��QّB�k��w�a��.4����4@\�es��2S��<�����^�D�^��j��swy�e�9��5m��]gK$H��"hI��qQ�+�PH#�FbRJ��R�K(�+{T���k�:�"MG����H7�v ^(���>���ޏ��Up`Vj�+��ەNz�1�Bl!�3�`u+OȤ��5?P\���v+/��;1��ξ�_�.��[xw ���/�ռ�>)�;^(f�%���N51`�UK�iy�>�_t1%�,e^���Hv&�[�����Kɾ�,b�����KQ���g����s�m]tfPV_K�J���L�m�2��ަ��V�9���7h�2$�0������낡��Bם��U�w�;Ë� K?sA����{_�q����_� �/�k��t ���E ��F/��cǀ��/�kyփ��s��1��cD$��X.�`l��H�X!"�ɘ =���L0A,�]�^FW�dف�v��n��(v.�{� �`����3 6d ��2�!�}Z$�%Lv*��@@"BY�)�;v��W0�\ҵ�9\�<h�� {\" rڭ��$�\(�y��:�-��G�WRBn`{� ������������l %1l�;ϷQ���@�!�/��iDJ��\G4"3����Țg��KU��"�(��I�и�zF�&��^"]�}�3[��L#= ���N�_�L�D3���$v�Źo�zb�-��&I�+�U#̸^��Y�R��냊n���Yd�1���F^F��ܜi;Ҽ��doF`�<�(l���jXKuW�.�#�Щ��i� ���"���F`#�>5�l�eϔ n��K\�'�k�g>o뇪�Ǧ��'��Y��߭��a�δ�H@����&kj\�)�X����QK�lQ���!^�zG_��{�,�����@��D��������R�(ɚҩŊ����q�˞_YH�Z��I%�H�q�ot����C���t[&ެ�(�V���t�ǵ�*I}���ӂ��l�iMY��-�R56k�k�� ��WSI�(�ڠ�" ��=`��r��eb�}���Ջ߭���O�f��_2Í�\I/�L˹��r��L�[���w����J����� �x�s�ѩ��͵5�� ]� FHXH�^r��2Bnnv��#∄����m��-G�O�y���CFzϚ;�j���n�{��z�}��)BL�(s��[��I�2�Bk<��� 6�=xX��I5T�"}_ݒ���D�鲢�5s.Y��ir�P�4�J����ve�%�'O8���Gg.'G�8Ӈ����I�.���<��#�O~pf��pXRi��m+���Uշ���2�rhoݲ-!�i�:=*�[�7d�G��pzI�'�<#۷��v�%��Dh�mG��ЉJ����L�i�+��ʖc\F��[�ãm�܍���ՃޚZ��O�j%�]���^��>�'�G<���v`:�oˑ���9� S0oM[�����Fd��\�w���X~��֭�;*)�� ��H��[1j"@� �W��'�f{��+���u��0\��Q�t��8�.O�Г��@�5��@�w�����9���)����90b�� �*[>�!�JČ�?�9&��(�����@�Sf&���p|a�;�9��t`�ly�p�Q����H���4�7�lG�3��V��gxK9��=y��^����_lN�H��ؿ�o��}\J0��]�R�s0\V��.׀w�܇é���<�`�׀}����N�4�Z�+��m��p���g��=��p� ���@=��x�]����T�q�8����Ro�Fi���n��-���.��٬y�ЬQ=Y���P����h��_����#�M��8pq6?bnXN��f�p�]����32��mm�C�9%�bd��D��QU!����+e@��{�^�t@:� �-X�eZ!VA9b��U|&��(�w,+��˗mQD�a��M�aJ)��C����P��3`9�A��N8�{���}"��)�!Y 1ME&TTL�1K�!�j!g��`�D�Xp#4�4!�}>_ĞBF��:�p29��!V<��& rf]�����Q"�Li�$��L��%��B)��Ke)�-U%UMi>#ȒQcj�$ӑ$s�ƇMSF��~���)���H��Ne�mՌz)�Y?�������A�wmc�?��j�`@�׆�A��~��K)���zo����L���Ή�y��V_��-��N;��)O06��������m���tӭ����H���8��j��ho3wj���5@f���T�L�2f�z�5U�M1XA} up�s,L�|�Ӕ�N��4��凙��N�y*���3.�����?��t����'��r���V*� Hw@з�ֱsg˽�4Dcj�Rc9I1F��B2e�3C1��Q�|-�a��>�h��s���ũM4>�����w06�Es�{�x���MW�~��W��z�0�/\��Z���#h+'vl߾c�{����-�qU]*�ƥ!u��D�?��V�D̂1P����?��/�#�؞����X�:T��S7}�]��u���c���6i�cCb��kϊ��Z��x�>���U�6[�>�v���ы'2;�B�`�Z.!0$j9&$I1,��̒b� ܡ�gޛ���M�\����}-o��cqA��3���[�H��oL7O� �^ʢ��@I�b��i#:���sPرs!�pWrr �hc�o=�Ӆ��Yc���;�1*�(���,r+�%���E��� :a<�������v+�9GG\>�Ḕ�p��Ue@p���P=�p`�\����� ^�pz��������ί��cAtЦ$ࡨ8�C�k� G��R�)� ���Ό?�;�6�-A�F�XU���B(�-Sd�/X)VY��������b/����wK�EX�'����>�`����f�������ŋ+�ֹEJ�t�4%S�Jv}]�{�zyۇ{�9��MH����`�����'�q�Cp��G����2L��|.`�=~s���:���\�: ���O�g�a�6��t���ؤ5r�!ر��`. �����ƹ����7#0��M��# �,���L���d��;��n �m�-.i�Q̄Qi�� �C@���[_��~� ��7�j/�)�<}ү*0B���@�you���a��4e0Q����7qxV�`fn&>�.��i�� O@^�i�s� �G]$2!@���ot�2���I�<=�f� �O@� w���oBD�$ �e H�o�=,\��x>�m��֣��� "l��d�^M��H�У��I���� $�4_y����37���0L"��� {���2L���hO���,�%`�n'���(���>�0?;��iav�xx�>g3B�,��']�a�����ٌ�a/�Cp���'�������x:^�? $��� ��MB؋}e����x�,��1����A�wȂ�ow�-�����r���l��} �ޟ��� x�x!��w�.n�'���NB��al�Q@O@��!Y��I��<t�=`�\?�������-�Q��+`���~I ���a 8F��{�뭁�}<����<>8d�1�nuй���#���H`�DU�G�"9��Oyz��X���{�XN\�Xΐb�1M�u)��%<�� X���S@^�vh�F�/�i]�4Iυ�h<���<�#w�.����$�%���� ��闥� O@od�ѽ<������cy��' �9�Yp���{���ds3e&����{�y��ln�9>��s䮽���~w�|M%A�O��BL��i�0X�χ�HU�t��ң�X:� ���b���iQ���eF~�=�� Z3�x`�u H���9�V¥�o^2|c��s��k�i3MtIW�H)w2"�7O��K�≡�}0u�V��W��A����~g���wO�{����PO��*�n�v���F�R�W<M�~{��V�i�8m�a�G�@,\���k%}<t,�0\�ne�zs��ߵ�a�]�S�[?|���~���|u}�?l�^�qcu�0�L)Q輟d²�����e�E"�ث���7m4����G�� ��A�h��6/�>x�p�?{uu�������˷�n�{zu�0�.>P�<����Y0�����LB��W�����_�_�z����`�ޝ{���Ρ���%D^( q5͂� ��:C0�����?�v��o���ݿg���lx�������g;�#;c�S@��D���wh"�=�Y0wk_��.�/V�`fx8n"�� �M� �GJ_��.I��C. ��;���WUD��hY��Rpvƞ��{ �wگ�(�U5��IВmSH��I��az������|��;����_��ǿ���3}��)�1�UQ�( ��a$0�p8H��c�o����\"xvi20Z���dy)6����d�9��_?�����տ�����p�;���۾����}���Γۛ�vYy�?�PR����5��\�冩��3�q��v��@ĥ��ڕ�D:���D.�.΅ �&e� t]��Xw��+�}1؍�L�_���� /�b��7�o^]ݺz�ۧ�?ܴ�o�}�}�1�M�EQ��t�r���g����tly!'���A9�r��8�H�"d�8<)V���c�\�7I���9-;��=���= �cc�2F�����( �9u��V�SL����W7���t���ի ���us����U�%QEIQ XV I��.�*嵼� �/���r��<ֿ��v��% ��dYQ�r#3�/���3ƹ�[q� x�\?���O�������:u��%6V�q�A�J��j4�E`#7˳�(�BMY6��,VCT@4<�,���8�@�_�@�R`cý!���,x����"�G��-��?�,�,Jٽ��[s�l�&�A�"@[x8u@D��e�F{���?�.LBς��) ����V�~�pH���G�b$o�����Cp���]~ ����<3�Zؓ[�`O���"�upL_^�R:����Be�x�z'!���u.�Fk�l����`+��T}U���i1��>�O�u�.!����� X���h��8L=^�n��{@~�,������0t�a�;��2��m��W����0<�t���� �q �<iϐ��e�e��{���!\�(R B �$�spB�)��2n�䐬9��u@�-.�[�\#A��Zw�$�IU�v�^V@�j�*���|B�x\���c���4�."ͪ�xm!�T��ki�^;�L/���-ם3����q��`@������+`,~R�k�9z-�4��d"S�A3;�ʀ������Ol@��� ���ݸ�>�00�9�TS����N㨰��<yzA#�K�����Ƃ� �vqq�r��rُ��f���(g��+�˥k�;W�[�����(�ޫX��]��Z���i���גi�Pˉ|r�HjI)�^�_\�խ'��n���[W�V���֎=_ű��O�WQT�%%�DD��na1n@C�q�21U̕#�ɵ����S�r�nF�R�P �g�bv<�������ZU`����L�ߣ{��z��|�q��� kg�J�1�9�By�U:��I�����+3�Ѥ�����f�9��� �����7�?����u��Ooo��ը���DQ��1]RD)0�Gb��t ܀��5C�jA�VV��'Ӣ����ɓS�y�է�Tx����ϒ+ha�O+Y�X�Q��q��mGq� �(�K�qk?��������k�q(��/�E����67]�dF�HT��>�\���;�7�l?�z�����铵'W<�w����>A�Š�f�ER���$�@N6۱.��Œ��8���#��!�x���eNd0�i�K�;����|��S�'�Z�Y0���7,{d�p=�,l@�����F����7z�`��)�>x�h.`�= ���I�a� X� �m�ͳ�;o���]% q1��0Mݜ��lƌlOB�f����鞄���MBl�l��[#_����\(�I��k쵯]'9p�zu1���U����e�h��a���/ ��?��Cp6[���^� ��%C�kXY1|_�=m�i9*f�Z ��<�7���)"��h.��ဟ�l����7�QU4�I5)�+w1�����ٜ&�빢:������/"�G��dZ��ܼhk Ԟ!e�q��y�������I�hD�$��EC54!�?�Q5�4�����Y5�k-}�W��K h9~���n��D�����M"%�.@*�|M�U�R�2P� �A@���$��[��Wqu�s7���� �L� �$! 8 ���b ���h5j�,�R{h�b�sD|���7��D+��>3���ͻշ������"Z��^^\G��'���te13��Y#SA�pn|4y����n�ēF�$�) C��2����c��j�i�:$��f�Ɲ�Fʞc�R�VO*�) X%�ʳ3����H)��s`}�>�%pA IA�W��g�z����I��&�1�d^���虩5,-���pqf�hOB��dӲmϲ]��e����{�� h�����[O�n։�x���y�dsk���f7��� #��)�V�� [�0���T4������ѹٕj\�eO�-����/~:�f!�yܘ]ɋo/�]H����/�����B9����g�@�cu����=p�:Ww�6�4�a��������#�J�I��X � I����}�C�.Y�qC����LG���� 9� �Ʀ��|� ���>]B��M+�gk�ɸ�]<��׆��X,G"�I�R��%7 �����[��o~a�`����y��=�Zۼ:�s�Ν�QNP),˲P�3�� 9�����!`H����Y��Tm�����a�����1�w��@����b3ٰ_�&lhݨ�R;x�e� �S����"��k�F��ck����j {��!!�����X�ރ�����q�� �CS��XM!AS5�R2Z�B�!���}����OB��^LFFU= C+H��^���iU��� ��$�Y��7��_&2�����d�e�2 ���4F�g�j_�(���3���0��at�;������RԌ�J<�) �J�n�����s!���{\B�Iȫ�����`g��3�z=^��G6/����K@ ����j7���v�v����T4 �*�J�y4D� J3'������%�:���h��(�s����Ed���)���ޕ�d"31�NL�S���lc���u�u����x����[KD,�i �\>�náW!�' *�8�/��L��4�j��F�����s��u]��Nь_ō�^HW�Ű:��"^Nʱ�Բ��r�H�����'��H�|����µ�|z�Rr���G�K�W���_�K�{^9۱:��L��1=��G&���9��C:�.�Չq!6�nF�s�2 �x`�$D�%�=fr��[�u`�7��I���щ\���{ ����Y�U]K&%����FS���h2�iC�B�����������X{��(R6GtS��`��x��|[x��hQ �$2J�*�eĪ4������Дk����q�����pͺ�{|�O�߿8�G�O��c��v+��#(D{88��Γ.l�������8Qv9��>/ �M�������8�� �?J���"`�2�M�$DODB������qi!�FSH�%"A� ������x���e/�8�3��`=��F��9_A��qt�D>.�����N�ἤ����W�>�B4�%�4��\M��]��ўw=�㼜�5Q�.(i��54&`.P�x?o$��@,�U*��ȹ*30q�Gqޏ��K�DD�dm�,M���=���9 �)��9@�������:��y=��±�V�� i�.*i=I�tME5!'��'�� ��@�9����ߖ���ɮdY��H��k��L��S�+�j��E�4#�/`w���z5�X�����@&���XҦ�d�RN&�������K����GjY�'f�Se��=f�Y0�蒆TO@yV��e4�gϨ�-%�3j\����{����*Kuff��dvn����tEC�F;���e ��Ź�2�x!9>��5-�QE�u�=JN��YM,� u��ƃ��{<@v������s0�<�Im��N��!��,�%z2::�[57�a:��:�� �}��w�}�z��u���LL�4a��M�$ �D��HH ��o���(α�qٺ��< 9 i,��H��s���2V�1���|ά�1M�HI �JN��7I@���IH��MFӣidƌD�X�1�7�3�h\��� �����Kz܋'�ze������h�[3���Xƌ�b���K�|b>���3RU�t)��WҊd,[��7.˂]�M!ERBȔ���LC!&1B�"�d��KB�� �X�. ����|&��_��m�䵢���d��)w��Y������H/Q��o�r$���`���|r�i�| �활p���.Gq.�v����o.�E�����O���HO��%�#�gW�}�/ߵ\ �Z7�F@��ЎW������8����˓P����,?[,�}�t�7�)5^���ϺI��>�5B.`�Ț�ڛP�x�� �Q0'|�ʳ�W�+�ք/;���gg҅dvN�YQO�I��.�0��s<*����O��O��Z6���5�7d/����+p���$ ���{b�)Z}���ê�/9vr ��ȥ����s�i#��xfo@c��LV_�L�1�@�� 6(d>���62є5g/U�` 2RL���{/�~s��mF��_��H�K��S��ic ?m�c�΅�t3�?MWUgf2��Ωs���@�:6 =C�ӎN��Ϛe��L�RY�ի���l���b|��2���eREHHO�v�MH"KHf#��P�~z_d��"�0�v�H�㓧a0�k2�9�aB�:C���f5!�67r{���F�ZR��5�vղ���y�MaQ��eMK��BI�sh���"\��F_�A�i��� e��*|Ӊh@;�l.�?6 6��Wr�_��4Ӷ�˹�,�)j��P�V)q;\x�e%u[+����6}�i���@��K�g9����I�ywW_���v�]��qҲ��ި��#�s?�l����d���w��T�-f���By!ӳe�P���b1��`P X��m=A�?1�!��G.�QO0�?g�o���8�Y٠��=��n���!L� za:7�G�����n���;���,�L�o�r���y��t���>Vx�]0M�p�ǵ�V�kq�=�a_�f��м���|��d#����~K����qU��験�:����2� ���/����5hZ(��� �0h������.�/��9|�h���O���G�"^�F�ћ0<}�ޕN��� �?�Z���8�(�i���G./�%�����X�|�&�����[�-��j��jêa��n���2�HÄS�gɗ���X���� �2 S���L:�bhH���QUr{O�Ex���L+��Z�}��9� v?1��?@!�|� X&�q�qX�����a��E��0���F������j�'D^Ԗ���D�H���2��p�J�P��l@��g����&;��4 8$F��Q�b��C:� �a��Ĭ!>���Y�� ��R����E��-���ۼym�`qX5̝�q�������;0 y�C�G�u�І�x�764�J��Z #-�f�j��BV-�j�UKȼ�7 @x��w��]��0O/t�/�[������~v|p��F����\e��3땍M"��xT��R�bv7�L�$6/��j5�'�m=.V sB����t��9|{�P� B�����<���yR�l0U�e�p����@�@�LU��m�<�c�� ��� � 'V3T��[y�S��$��!�2+�.tj�*Fh����:�;}��l�n5��4x�d�V1�Y��;V��BrGv�*��V3��y@�Wô|(�b�&e�a��>�01o�j��hĔ���0�h�+���?�|���������m��^螺26�eB����z@6����t�!�'�� p���MڬO=z��Á~������<||ul��ʛ@f����AH���b�4@��L����w��w#��3�F�����i���N�E�Q���n�r�N0o:ȿ�Z���LF�b��g�s�nBP�TÐaFLl0_�$����Ao��;91�R��8@�a�M�J�.Qr�^�� �H:M��jt��^lTr�?ݼ����k�u=���r4�'�;�TT�˨�J��F �n�x @h�m�i����5 Z�sچ;O^��k �B��{"�����=�Y�P��iۓHGT^X-�����e��A(ⷋzv{���j� @^ 3�3:��$�_}�\���ty��a���$d�NB��FXYlۛ���PT}�VS˻K����v˻�m�DQ�݉.Ɖ�t9>�o��=�h���P�\_G߸c������; �\�X�����\0��Y�A%�� ���+泱rt9�\�^�(�,�R���E"`S���lV���e?rD�_��v�1)~ur5���7��0�:G��B0 �BR�<Ddބ�S%��+���;[��j��Ք�13�, ��J&��.�$�Խ���r��_��D��ZfC|@�˗��0��8��1�&ȷ��,`zd���tݯ���.��4�����T�&\-Xsf��0��M�kn�����-��3�̌�F.~x�Jx��X��}��;8&�xx|"ڨ��P�G)����|��2�z!�s:�~u�6����lliҳ�|���PpYE���˴ ��0�$c�=7���+O&�`3�/�(��u� ��8��*�2͘]g! �}�r_���twf�sճ �n�Q��g|�9v#ק�`�z���X+[[+����X�I��L;������nD�a?�!)OG���݆�M�55��� ��0�~�4L��"�!$a���^@a�E��:�;�3�ַ�X��UYc�s�{��&+��ɋ�\n����^L_*9%�≤�ʨyR��ha)������TD|/�b�X�H�h"i ���é���]r��!� ��@���������t�� ��7��q�8���͕Fl(��7Lj$#�j��R�ZI/i����v^Ҵ�vQ/�ԥ��Zڎ�oUm�XZTU-���j�� ��) ct���ݺ&u����Y�կ����G�` �j�{�c]�1�aG2��7*@m����RY_�QTӴi���c��BY���[��f����骁��=� �j�A���#�~a�o~� �x|@�s+U_����j���d�q��Jeos��/X{�D�-�R���D9M�&��x(M����r<SN�R�x<QLƊ�K�xt���D�7̬���t���. ���%�8i5��;�q���¶��L�،]\�&� R?0�A%���WO�<#�q��bz|5�^3��[���P>�}�uAә����<x�(n���s ܭ��8"�U�p+x�]p-�� �6���4�$���o�~��X��+����M �۠�T��������\{i�n#|q�4�yh-Au������ ��_��\as�l����.��I;,v�e^�}��g8jp!�H�8��^��66N��c���_\��Y9�K>�$��ZB�ܿ�ߟb�1�3��!�ǯ���\���k�.�W����KW����Ǐ�<.GPi��F!������\_�<���ϵ���S�o����T����Ff����Cz|��x*8���#�>�s���"!q�����ן�����9HD��. �I�AC$$�D���T � ���y) ��K�u��z�������w��Ց����ģ�� ���a��R��7�#�G����'��F��d?SeO�QЋT/��DtA��<6 ~��nE�f��H�'����Cr���DݕC�]j�>���2lNG��p;vJB��'!�����k��[�K���6�ho�u(F�e5��l���h�s�Sd{w�M$�t/�Iw� ��91� Vz\�=����`8�q����,7N��8���[������WZ�>�'��ab#ю�1����{�v_�Œ��e��;e�(F[H���21 ���+B��s�24��=O{�=�eh���yv�Lo�s�!�w:0���.�{@ج��-��zn��ۋ��D�D�^(R�5�\\P�r�Ҹ���UWM��y�*��t[ 0B�a��>���Ov�� ��\0���?IW���Ұ���r����_��*����IKE���n\��I���d2���T<O&�#&q��D�ga��kևm!ط��"����`�H�U���Rӌ?>_I��a�,��}���#p}���(��a0�;yT�C"L�.6��$µX0�w�<.�r 5:=�0訣��5�U�Mm�\0/]��냐�e�<�+���L m�`�ĵ��LՋAat 3��y���'�7�W��} �����s�6���˙~��k��^��c^�!�]�FS�������^.��Ը)x)�/��O�}�:��>z�h��.��2`\ �+��a�*��_��É>{�դ�\{@���:\�= !�=`]St%�p}�8�0?���"5�{��Ņ�!`eC�P����E�J�1CMDP#|2B@5�@��`BJ �2�V5J��!�=��E�dB��[@60|9����6sbg��� �B*ɹ���kTY�,�S!��<�r ��mbT(R��azL_0:x�N�4�H Vt!�J/�=3`�=`�4z���@0,�x���/��Ȁ6�� &���: x��1=`Е�Q@sM_��': ��+�0�z�D�G�RR��8+�s���{@���(�!��I�q ���b�)d���6�k����y��laP�p{�yEmݮ(`�3����w�E�N�]�E�RDQM%^�IȽ���\�oɀ(�ς���l9��씻_��O���|�?������d����u�TJ�ϧw'>�%�xe%X�K�,x�->�U���6"�4C �W��?~�2r��O��f�� �j^�H�������y�F�a>5EUQ4=y�j�[�}B������� ���'��ث��~?�!�����K-�?T1�[q�@@R���P�ρ<#�OW75��|@��G�� �Ihm�N��{�F*�GRd���喴2��!k�M:�_� m~��Y^1�%��W��v���:"��討ń�!��R���,OI����ڣ$�J�&��lz���� ���`?x�`l��}0�N�8�T �����du �I�����÷rtfMn�➵y��:A��l��� ٲ�lj�;ݭ>�H�F��1�W���5��c�.�� ��*�5�'k�w�Ku�^ P`$�Y��L^k�5LK$G�YC'!��aΣ"�}�F���{��T�T��1�GF?�T{"�vpk���~���mN�G�l���(>s�,"[��䐟���C��:�F�� �\�>�@S5M����T�ks���Sxh�?Y��N�z�C�PAP��>_���. ��� p ���`�,z�m��e��\�u0�� 6�w��-4����W(�9�T�+��}�B���+BG�h>[<�Ud�l���Umm�=��� @q���63��}���3J��k�&���B��=�s'G�t jX?������'e��͝b7ǭ�����f����3䋾�q"�=�����20$�R��K� �Rɕy�W8GdJzɕ%�{Rՙ-\�3�RuRp)K�s㥞�/�D��5�Z����,�7Z��/��|�, *��R�$�`�_�}��ճl��aB⇖a&!����gT�ǕS�Z;u���=��J�h��:�ϳ����w���0�I��X6]d�CwB:=��I�6���>��$$�7�9�Y���0���_��q��Y0bH�;!CYq1΄Y[��gUf�=�7��o�j�7L;>697��5�������R����84� (�$B��S�a\�L.!�֍P3,��M� �P���ع���}{�ϙ��[^궮�����]*�;P"N��!&���Nl�wG)�:�w&�D�����R 0�I6H�\��`������/&mv>q��B -1� @O��sS�G#���� v�%�H�`�݇i,�F`*�]1*�Up�@�t���+U��x���Xmwu $m��� ;$I��[�9��QX�P�_��D�+:��B��Gq�2��ʙ�+P��u�>A]�R�N����Nԣ������m� ���?��*{[��p�A�?�!@�šX�#Q�ކ� <??�aV[�VF�ɢXݱ���aP��X��`��jl���gj�V��@k��#+��x쎧I����e�ypA��Cp�U0�z�-���Xv�����ؚ�?�y`�αi$�/���yc|���p�����p�����a�7���)��i��ӓ�ϔ�Uȑ�}|��s���h+ te�^)i��Q��Im��lz� _3�NӴ��/� X)쯈#��`�Q=���m�9��w�����hx��|��w�� Ь���.@�{0�$R]���/Bpeɑ=��T��@�A����0W��;['��ʘ��B]\5�9Q�N���ʜb�UwT�'���<��L����'��e�;-��ğ��gxHQ�"@��(����J0.!@(P���n7[��:\�cqĔ��PR`X�|jԱ#a84湲�xZ�����}P�A�-��jC�ƟI�)e>���o ��qw�EF\��X��(ǘ# ���f'�� �c�� �c���`�)�N��k����".-NY��H�(����� ( Z��TdQK���L*�h�-�I��-��io�{����.���Nf�@:�9jx��q��T7�� ]� �����<��`E a/�ܲ�3<\��1J�+fF�[���9�����U�������t����ù��}6��7�X24���$�;K����,�G]��)��WT��ݹ.2�Q�q)D���`��If�?;�2�ks��ڨ��z�H5�Y��=.���750;1�^^�u<fF��G#�NɄcWg�8#@��\�@f��v1�e�ࠋ6�R�@ĮEf��s<�?$J�WG]���3n��5m�+6�;�43l�b���4a1���7yD2m��QY0�<]}�d��� r��!���"��T.����(���of� ܢ�O�L6z�0R��}> ��鍽�0�ɱM[J۔ҭJ)���ǎm����k��1�M�ݟG��c�·�Z��k���Ň�IW����z�> �&u�h�!mv(���~ҿ �m�[�I��% �� �=���w�s���É,�=���V�T�m���僠��̣·W}B7��Խ՟'�t�G�SX��\Wfe�Ć�f�]���ڵ��JG'�]tis�"����8�J�RK�C�+^`xT�b�)�^��K)M'�Ki�JyNI(e��J��s<��3�Y |#�4��ȭ&'��(cO���(A7ӎ]���ʴ�E���!�Q�����1%:�L���@���8��?O\xO��ġ�"u}I�"�v�Rӧ�B� ��ѶMܤ�{}������f�� <�Șd����(HWx�b"L!�����!� �>��Ui(At(ڃ�P�B�!��U�m�=����(JB�P,V��AHņG���0��e^C�ܕ�hU�G-��B周k���������<NLw�r��QW���;� #痷� �T���x�+X��s@�D�.� !We|� �'S�و;� ธ��&$}9jB#��}����g�0־gSm����g�^Wh�5,BQ].;�ǒ�m��n���-w�ҌZ�6�&D�ރ��b��m��G�M��u5��� ��aJ%?,:l���)�?�=�$���)w��S�P�'�O�{v���� bR/օ�6�$/~ �`H'�B���z��fZu=�&�V �aN+��,-힞����#-��Q�Cjp������x�i�?��r+�Cz�d� ��J��Uvƨ��0��?��?1�x� �0�a�����0�l61��Nſ�9u�����p%�.tN��/���ǃ��y��[��c�=K��&���2�?��݇Ǐ#܋��fT��V�OB�F����&j�+�(<<��g]�EHN�2 Pj<� +�I0AC"�w�y��t^7��xNy�ɅoQ�i��� ��M,R��S>���Ȣ*ð^��(�k��,����6�K��?�5�H�� j�<�w7u>`xa1�o��!\d�ӎ�f_.yd� ی�Lv+ �t���zʗM�WS����uK����C�=q�P��f�\O�;I�+�ԏ<�s�64���+c��s3�q���X�gF�;�����U���k�T�f"�s�E>��� Ѽ��0�/����=�� /���ԉ��`��M ����ls�қ�_F�a������}��E@��0��C}�e���V����B�{|T}rR���j�-w�p�H�������|�V�0����Cm@z�0p��*�x���fh\.�Z�:� ݰ������@�٤��4�.QxK�:A��zc��S�7�L3� �x�![�P�cc%��ۇy��C��8(Z�� �君����C�ԧ�&���J���%<�|�π�)$��l>�~/�朿(�>( �~�O���"�!�>Y4�֍�$t�����������O���G�:I��(�i'#IJ�pb4����?ʃ���DX��-��v!�� ��4tG��K��K.�/�Q�#�TN�4�1>��䛏y�>�+�`�Ot#��c��)U+��/ �˔��U�Q(+r8�V@nj�N�`L��� V�S���ʑ���#���(��d{�ޥX}?tih�Hk��Y�@�����x��.�]��C�.�H�����9��d-�xTς��Ǒ�b���� ʔxR�K`弹Vp�wv�a�qX��Dñ~�q���V���8��P +�؇��� i�;�6.�����G�эF�!.��@t�|�r��B�;o�v`�����˔ꕋ%��L��7�+ ��W�\.��������OU$Q#�SE�Z����tUD��ۑ��u}�w�~�%����Z���r���<,� ����|B��G��Iu�x�Q��V�x~F`f�Ж|LĄ�O�y�e��ȣwM�to>��Oz�8k�j�穙� \O4�0%��(�%I����l$ڜ�p~��gɍ�"�*V�{�#�{�N2`����y,���>����X�7��7=�Cn����R8f��w�`f��!י]k��� ��?��Z���x�"�����,E��sآm�YH���p����a�ۀ/���dž�p��-���?�#G�?�Q��ձ:��lm�>�+P.E��w��٪�}����[n��Nx���2܂9�+w�t�g��7�G�Ћؒy�� bJ���gf��c穟Ȓ,����ܮI����88�\� �E������U'����b�ـ����L�\l,�������1f��g�gq�`҆頀�c?Ҟс>���v�`WU�Z�� E�^�R4����,V����9�o��@ਤ$�&v��=��3����|������u����w�G���!<��}n��/�z������� Ğ\$x5E�-o/,��/�渄/tN�5o�!{p�2�R�%���? �ܸ+D�8���[�/Z��Q�W����eA@Z#�o�?����; ����:��g�# r5���5� #�W���@j�6�ԳK%���˚1�u�d�b���o��V��D��{�Q-�cL��%T;�h����p ��38�R;�����>7��Qg�m><�}ݎ`?�ߊC h��h�oT�!N�����d�j�>�����1�0zs]�k����x��o�v|O���wx+G)�ҷ�C����HF�(�ֲ�$h�J�9�r�7ǡW(�l_�&˳u�����@��#D"q/���h�Y�!8�'����F@Z����7q' ���d�g��Rm�g���8��R���E�WU�k�yʣ�+�}���}�3e�`���)8����Pq� �\�+�D7χ�Q-6����h����$�b�e��m���;��qސ_Ӯ�iH�!}�p��p��1�Ԏ�J�@&�ugV�V�/r�ߪ6�@o&�K� ���J@Ł��R�+��t��)�8&͝�*~�|x��G�/�yi�i>�V$��d��cp���y����:!�@q��l�x�f����� �@�^�����B*(�i�O_��,sp���>���g�pP!�����p�!�]�2� Q�$j���>��<��R����x�n��$�`�tdb0ًF2�7�I��O��6�d��,�τ/��*��t[���j/��C�v=�dqH�O8����kp�+��C Hy���p�6����=�n�рv�]�T��1��%w��F73�p^p1ӱ&@Z�&��aU� ��,7p8&���㍸��p�l��As�����v�46 pHa���`k>�<1U"0���|�N�1��#����ƫL/�vjo������&����ڇ�L�u�����#�U�9u= �8b?�e�����IZր�<����5h<�)��Nq,�0�WX�(�Y/�>�1���<k������IB#��| ��+�p���Xt�6���B��!����M��t��?4N0��X/X[m�`g#�"�½f��Œ�|�W͡,,|�#�gpd����8V��p���|�MHu�pp>(�ˡ9�O�_�-8v�P��2���PGP��e ␔�g͎�G�9�E>�����u1<�6u�:�M�AC�f���l��j���ѭ!��B+�q� x��6p,������P�D)&���п���xk.wǥ�2y�m70�i��)���W;66G\6�9/��h�*GQ}�@���2�w�KCdf��Eѯ� {�y�$S��Q��|<s*����#}r�)n�Д�Kñ �{����NY�~V�1݈ԕ>u"}�"FRfk 8��G&>�\ ����4Do�p���1���.�$ ��9R�V^�G����p,�}*�UJ@�н�O��H��*������,��?]*�����̞m'�;ӥ�lVa�����?:��9�y'3;!��p .�Ʊ�uF�]q������KE�r .t��38��,�]���HH��7̷G���C4`��F��{310%���)�ES�c�� �M0@9Os���1L4'��{� ��ù�?]'�?��������p�����8�c����o?�Co@���������+��2yz� f ��� �]w�d�y����G��-`�L�o�|�NC\��K�:��>9!��[����m��h@7���V��/h�ܢ��xM@�(w*��% p�M�� �%�.����Ó��J:�N;n���А��� �n��y�|;�x�\��y����I8X �wY!���d�xűB@u[ %݈c]���xUz����>Ʊ���XK�!R?��<�\q|q�y^�?[���k[��0rJ�����{)��W �c�ȕFn�ߧa�$n?OF8t�� �T,+�a J@������X�}�n�A�֪��h�A0x88��ni>ı#�7��Z�֢$Y?s��@���� �fw��t�f�Dm� &���.�ы�����H��l���B?��ȅ>T���1.9 {6�_%�G���ZJ�e���Ɓ��9���|xD`��� N�� �s�C�M~"�~9=5�E���jҺ�o�Z'DkcX ��u��9Wq�#{"�K�,!T?�*Ⱦ�*N�������h���4�Ghwi �ee��7q��}>8����h�f�� ����� ���/)�3P�x ���Ld�,U�M�7����p�h� ���5��<�*;��XU���U���Jӎ���t���e� �p@qE� ��p�>hRzt`�0s�����EW��k��I �i�~ʛG�WS�U��8p 8RM;�HЧs3�$[��1��\����!O@���G���_�/����x��\rN'�N�g�:�.Q� Xg�3� ӽpͺ�5e���W����q`�l�E��\$������g�rt�E��M��}��F$L�p@~�x���.p(���J@�����G8�/v���$�<����i������2m�ĚD4o���;#�$�|`-�H��Q��QS\�n�uB*H�6��u�k8tlx!�3�(�Z}�z�m<}��X��6��A�R0��jp,)��G"��z7��*��Z���+8v��~A@�4 ;�X�S����b-����P�_5�k�b}���V��S ����{s̴��x��خ��_v]� �8�Z0d��cA�r����N����(F�g )>�(ߙIHMk>��[��IO��Ɲp��2�b��NN�q�s(>�]q�ぽ��4�]�9�wz?0;�|l>��:4��,W��a)Hሶ���C|�tӐ�� �ϔű���]�������Rw���{]8����i���z�0��g���+��њl� ���b�9ă<��b<�íߘ��1�.��h��8��:��o���� ��>Ȟ����ep/��8����+���ot�qt�Ά�㲀�5`��%��E��ÀQ"|e�~<�?{��˖ȁ[��#]p(Y�8,��0�#�(�>����x:��'�{&��������@�I���}p��a��2q��a'�V�?�J�[�{{+K1�!����h�p�w���K�P�#�e��" p� X� xg�N�b��_�i^����Lr��D�ze ������뿴� (�%���s g���tADo ٥s��%P7hp_��p�%�.�c�ؾ�e�O83���8�N���㕆�G�l�.7�iy�~}'D._Ⱋ�(��``����;��ܾ��/��%�a��c"��tBpe�%���s>��G�� ��,����a�V_��`�����_���#��G�(��S(����o� �=jk����t�%3$��J?��0����%إ[/�m�1S�p��*�K�� �$DW8&�~�cz��#g�����Ӊ�hqd�0>�~�w(���f����#a�ni����M�u��G��q�HX�]�%8tA����(���'J�u�#w_p��8�eE�lš�������| ?zHT��pt,J[�ȫoq�C� �,�A��3�?.!vN��J�������͖�Xڱ��L��c& ;#inC(%������|"`�M��,����Y��r�X̵b��G����;��#���o��Oe��[&+�n�4�d��E/,�+�w G#6��bp��Ǯ/��o��J�m'���"?J���,��X�8)�á���xkqh6q��烄9���8��?�t2aA�GnxRj��c����� ��\�����_OG�g+>؊xopPjP�� X{ɟ�{��, �]��GI�2�dX1zk�ۍ�yA��$�.�^+lo�38lk�;h���{��q|1t�=7���L�RU۰��8!��RT��S]��:!�B��)!k��χo��(����e�8�=!O�ӣ���X��� �t_�a�x�q��� ��y�0�J����=��VR�"�\@��c㞐V�� ��=!����v����@⩦ \Z7�1φ����Ps_v �g|u�w[�)!�~���o[�8�h�r��l'�R�|��0�c�7��=Y �����`�Zq�g�8uK�=o^?�p���=_�I�݄��#0�?���9�t�����,��$)#�{k�Fz\� ��(�N�>�r���7�{���U|Z�}76qb2��j@��g��8%���o�q������{rm!��0=y����Q������P\���\��r?���u�'iA@�I��K+T�/I�8VwBlޖ����~z/�?h��w�8K@n��DC�����o�`T���-uzBfU�� �����?F�±�ܚ�vBT\���˯���)�\۶�st#rrD��q��qz�p^V����+�۾/��@k�n��u�6@�~�ѻ~[&Q�x�W����ud���C;���8V���S�?�I����u±Æd퓊�mc$�|�ǝj�w�Y�k���E���J{���U~mT>����e?-p������+�v�~q�|y)e�����1x>��Z"���3*�|v�&����.8��)�*`.e'=�-]�dv��jR�V�����D� �϶�g�?��<��~ �w�pZ�k��A��!��O?F&��eೞ�2�9��cg�;�P�o뎛wr6�$�>��I�Sp`�˷����uM������CU}�����Q�0��}��p����K��]ѼPJ� �(�B�cp\? �ù��n�hG� :���+�}��s�gڝ&��u���q�|4�95$ɘ6�_x�tk��?~�Ǐ' m�X�(�_�m�3 Mҋ\+`>�Z��G\��Qj�~ G�}�8 �߃~�������x�q�a�-�g<z~#ȏNj3O�K[�w��)�w��ɪыNp�8�� ��;���U����[��?���|�8ɭ��WS�C�8 �}�Bh���f鲘�Z�x]sw��&p&�D2���/b��p��������|;��!�?���|���t'q1vQΒ>y^�f~0��R�~d�y]p��"���p7�F��\w�8�[�� �l�!C���t�1�ѱ�gm��m�X�*��^���ѻ��`F��8���Ŀ�)�S�w��ۥ�t`*�R4��47[s�Ϲ�qܸ ��uťו�?[z]���:���<4p~%ė�s�w����xN9Ъ]��8�[���u(tZHgP�>�3��x]�N�)�yE0�u�q1�=�#��H�g~z���"Yճ���pO�QU���u���]���[�x[��.p��^��K"��w��1�w̺�QZ�)��YP�ipE�r�ʏV�Cn���v_����?(�����?�57b*zX�)W똫Wۂu�����t��w���4����h��L�W�Ϡ�n7R�3 ��W[1����,`#w��Nv�jN/�����e�RA��́qUd�U�#��2�ޣv�js����c��p��q���}�l6�.m���ƥ��|y�"�[�x�w�_#쨦b<t� kst!B��J#��q���UP��<*�C� ���G�K�����lIEND�B`�PKb��\���!,!,templates/isis/index.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Templates.isis * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 3.0 */ defined('_JEXEC') or die; /** @var JDocumentHtml $this */ $app = JFactory::getApplication(); $lang = JFactory::getLanguage(); $input = $app->input; $user = JFactory::getUser(); // Output as HTML5 $this->setHtml5(true); // Gets the FrontEnd Main page Uri $frontEndUri = JUri::getInstance(JUri::root()); $frontEndUri->setScheme(((int) $app->get('force_ssl', 0) === 2) ? 'https' : 'http'); $mainPageUri = $frontEndUri->toString(); // Add JavaScript Frameworks JHtml::_('bootstrap.framework'); // Add filter polyfill for IE8 JHtml::_('behavior.polyfill', array('filter'), 'lte IE 9'); // Add template js JHtml::_('script', 'template.js', array('version' => 'auto', 'relative' => true)); // Add html5 shiv JHtml::_('script', 'jui/html5.js', array('version' => 'auto', 'relative' => true, 'conditional' => 'lt IE 9')); // Add Stylesheets JHtml::_('stylesheet', 'template' . ($this->direction === 'rtl' ? '-rtl' : '') . '.css', array('version' => 'auto', 'relative' => true)); // Load specific language related CSS JHtml::_('stylesheet', 'administrator/language/' . $lang->getTag() . '/' . $lang->getTag() . '.css', array('version' => 'auto')); // Load custom.css JHtml::_('stylesheet', 'custom.css', array('version' => 'auto', 'relative' => true)); JHtml::_('stylesheet', 'responsive.css', array('version' => 'auto', 'relative' => true)); // Detecting Active Variables $option = $input->get('option', ''); $view = $input->get('view', ''); $layout = $input->get('layout', ''); $task = $input->get('task', ''); $itemid = $input->get('Itemid', 0, 'int'); $sitename = htmlspecialchars($app->get('sitename', ''), ENT_QUOTES, 'UTF-8'); $cpanel = $option === 'com_cpanel'; $hidden = $app->input->get('hidemainmenu'); $showSubmenu = false; $this->submenumodules = JModuleHelper::getModules('submenu'); foreach ($this->submenumodules as $submenumodule) { $output = JModuleHelper::renderModule($submenumodule); if ($output !== '') { $showSubmenu = true; break; } } // Template Parameters $displayHeader = $this->params->get('displayHeader', '1'); $statusFixed = $this->params->get('statusFixed', '1'); $stickyToolbar = $this->params->get('stickyToolbar', '1'); // Header classes $navbar_color = $this->params->get('templateColor') ?: ''; $header_color = $displayHeader && $this->params->get('headerColor') ? $this->params->get('headerColor') : ''; $navbar_is_light = $navbar_color && colorIsLight($navbar_color); $header_is_light = $header_color && colorIsLight($header_color); if ($displayHeader) { // Logo file if ($this->params->get('logoFile')) { $logo = JUri::root() . $this->params->get('logoFile'); } else { $logo = $this->baseurl . '/templates/' . $this->template . '/images/logo' . ($header_is_light ? '-inverse' : '') . '.png'; } } function colorIsLight($color) { $r = hexdec(substr($color, 1, 2)); $g = hexdec(substr($color, 3, 2)); $b = hexdec(substr($color, 5, 2)); $yiq = (($r * 299) + ($g * 587) + ($b * 114)) / 1000; return $yiq >= 200; } // Pass some values to javascript $offset = 20; if ($displayHeader || !$statusFixed) { $offset = 30; } $stickyBar = 0; if ($stickyToolbar) { $stickyBar = 'true'; } // Template color if ($navbar_color) { $this->addStyleDeclaration(' .navbar-inner, .navbar-inverse .navbar-inner, .dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover, .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle, #status.status-top { background: ' . $navbar_color . '; }'); } // Template header color if ($header_color) { $this->addStyleDeclaration(' .header { background: ' . $header_color . '; }'); } // Sidebar background color if ($this->params->get('sidebarColor')) { $this->addStyleDeclaration(' .nav-list > .active > a, .nav-list > .active > a:hover { background: ' . $this->params->get('sidebarColor') . '; }'); } // Link color if ($this->params->get('linkColor')) { $this->addStyleDeclaration(' a, .j-toggle-sidebar-button { color: ' . $this->params->get('linkColor') . '; }'); } ?> <!DOCTYPE html> <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <jdoc:include type="head" /> </head> <body class="admin <?php echo $option . ' view-' . $view . ' layout-' . $layout . ' task-' . $task . ' itemid-' . $itemid; ?>" data-basepath="<?php echo JURI::root(true); ?>"> <!-- Top Navigation --> <nav class="navbar<?php echo $navbar_is_light ? '' : ' navbar-inverse'; ?> navbar-fixed-top"> <div class="navbar-inner"> <div class="container-fluid"> <?php if ($this->params->get('admin_menus') != '0') : ?> <a href="#" class="btn btn-navbar collapsed" data-toggle="collapse" data-target=".nav-collapse"> <span class="element-invisible"><?php echo JTEXT::_('TPL_ISIS_TOGGLE_MENU'); ?></span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <?php endif; ?> <!-- skip to content --> <a class="element-invisible" href="#skiptarget"><?php echo JText::_('TPL_ISIS_SKIP_TO_MAIN_CONTENT'); ?></a> <a class="admin-logo <?php echo ($hidden ? 'disabled' : ''); ?>" <?php echo ($hidden ? '' : 'href="' . $this->baseurl . '/index.php"'); ?>> <span class="icon-joomla"></span> <div class="element-invisible"> <?php echo JText::_('TPL_ISIS_CONTROL_PANEL'); ?> </div> </a> <a class="brand hidden-desktop hidden-tablet" href="<?php echo $mainPageUri; ?>" title="<?php echo JText::sprintf('TPL_ISIS_PREVIEW', $sitename); ?>" target="_blank"><?php echo JHtml::_('string.truncate', $sitename, 14, false, false); ?> <span class="icon-out-2 small"></span></a> <div<?php echo ($this->params->get('admin_menus') != '0') ? ' class="nav-collapse collapse"' : ''; ?>> <jdoc:include type="modules" name="menu" style="none" /> <ul class="nav nav-user<?php echo ($this->direction == 'rtl') ? ' pull-left' : ' pull-right'; ?>"> <li class="dropdown"> <a class="<?php echo ($hidden ? ' disabled' : 'dropdown-toggle'); ?>" data-toggle="<?php echo ($hidden ? '' : 'dropdown'); ?>" <?php echo ($hidden ? '' : 'href="#"'); ?>><span class="icon-user"></span> <span class="caret"></span> <div class="element-invisible"> <?php echo JText::_('TPL_ISIS_USERMENU'); ?> </div> </a> <ul class="dropdown-menu"> <?php if (!$hidden) : ?> <li> <span> <span class="icon-user"></span> <strong><?php echo htmlspecialchars($user->name, ENT_QUOTES, 'UTF-8'); ?></strong> </span> </li> <li class="divider"></li> <li> <a href="index.php?option=com_admin&task=profile.edit&id=<?php echo $user->id; ?>"><?php echo JText::_('TPL_ISIS_EDIT_ACCOUNT'); ?></a> </li> <li class="divider"></li> <li class=""> <a href="<?php echo JRoute::_('index.php?option=com_login&task=logout&' . JSession::getFormToken() . '=1'); ?>"><?php echo JText::_('TPL_ISIS_LOGOUT'); ?></a> </li> <?php endif; ?> </ul> </li> </ul> <a class="brand visible-desktop visible-tablet" href="<?php echo $mainPageUri; ?>" title="<?php echo JText::sprintf('TPL_ISIS_PREVIEW', $sitename); ?>" target="_blank"><?php echo JHtml::_('string.truncate', $sitename, 14, false, false); ?> <span class="icon-out-2 small"></span></a> </div> <!--/.nav-collapse --> </div> </div> </nav> <!-- Header --> <?php if ($displayHeader) : ?> <header class="header<?php echo $header_is_light ? ' header-inverse' : ''; ?>"> <div class="container-logo"> <img src="<?php echo $logo; ?>" class="logo" alt="<?php echo $sitename;?>" /> </div> <div class="container-title"> <jdoc:include type="modules" name="title" /> </div> </header> <?php endif; ?> <?php if (!$statusFixed && $this->countModules('status')) : ?> <!-- Begin Status Module --> <div id="status" class="navbar status-top hidden-phone"> <div class="btn-toolbar"> <jdoc:include type="modules" name="status" style="no" /> </div> <div class="clearfix"></div> </div> <!-- End Status Module --> <?php endif; ?> <?php if (!$cpanel) : ?> <!-- Subheader --> <a class="btn btn-subhead" data-toggle="collapse" data-target=".subhead-collapse"><?php echo JText::_('TPL_ISIS_TOOLBAR'); ?> <span class="icon-wrench"></span></a> <div class="subhead-collapse collapse" id="isisJsData" data-tmpl-sticky="<?php echo $stickyBar; ?>" data-tmpl-offset="<?php echo $offset; ?>"> <div class="subhead"> <div class="container-fluid"> <div id="container-collapse" class="container-collapse"></div> <div class="row-fluid"> <div class="span12"> <!-- target for skip to content link --> <a id="skiptarget" class="element-invisible"><?php echo JText::_('TPL_ISIS_SKIP_TO_MAIN_CONTENT_HERE'); ?></a> <jdoc:include type="modules" name="toolbar" style="no" /> </div> </div> </div> </div> </div> <?php else : ?> <div style="margin-bottom: 20px"> <!-- target for skip to content link --> <a id="skiptarget" class="element-invisible"><?php echo JText::_('TPL_ISIS_SKIP_TO_MAIN_CONTENT_HERE'); ?></a> </div> <?php endif; ?> <!-- container-fluid --> <div class="container-fluid container-main"> <section id="content"> <!-- Begin Content --> <jdoc:include type="modules" name="top" style="xhtml" /> <div class="row-fluid"> <?php if ($showSubmenu) : ?> <div class="span2"> <jdoc:include type="modules" name="submenu" style="none" /> </div> <div class="span10"> <?php else : ?> <div class="span12"> <?php endif; ?> <jdoc:include type="message" /> <jdoc:include type="component" /> </div> </div> <?php if ($this->countModules('bottom')) : ?> <jdoc:include type="modules" name="bottom" style="xhtml" /> <?php endif; ?> <!-- End Content --> </section> <?php if (!$this->countModules('status') || (!$statusFixed && $this->countModules('status'))) : ?> <footer class="footer"> <p class="text-center"> <jdoc:include type="modules" name="footer" style="no" /> © <?php echo $sitename; ?> <?php echo date('Y'); ?></p> </footer> <?php endif; ?> </div> <?php if ($statusFixed && $this->countModules('status')) : ?> <!-- Begin Status Module --> <div id="status" class="navbar navbar-fixed-bottom hidden-phone"> <div class="btn-toolbar"> <div class="btn-group pull-right"> <p> <jdoc:include type="modules" name="footer" style="no" /> © <?php echo date('Y'); ?> <?php echo $sitename; ?> </p> </div> <jdoc:include type="modules" name="status" style="no" /> </div> </div> <!-- End Status Module --> <?php endif; ?> <jdoc:include type="modules" name="debug" style="none" /> </body> </html> PKb��\" ����templates/isis/favicon.iconu�[����PNG IHDR�asRGB��� pHYs��$iTXtXML:com.adobe.xmp<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xmp="http://ns.adobe.com/xap/1.0/"> <tiff:ResolutionUnit>2</tiff:ResolutionUnit> <tiff:Compression>5</tiff:Compression> <tiff:XResolution>72</tiff:XResolution> <tiff:Orientation>1</tiff:Orientation> <tiff:YResolution>72</tiff:YResolution> <exif:PixelXDimension>16</exif:PixelXDimension> <exif:ColorSpace>1</exif:ColorSpace> <exif:PixelYDimension>16</exif:PixelYDimension> <dc:subject> <rdf:Seq/> </dc:subject> <xmp:ModifyDate>2015:03:15 13:03:46</xmp:ModifyDate> <xmp:CreatorTool>Pixelmator 3.3.1</xmp:CreatorTool> </rdf:Description> </rdf:RDF> </x:xmpmeta> >Iv]XIDAT8}�]h\E�ϙ�{wﺻI]m�XClK4�RE�w-E��(->�f|)y�~(Z�"ȢA�R�h�Z�B46M��-$ӆ6&-k41����c�xn��S��\����s��g;^��t}�Pc{���յ�� �uQ��{VJ�5"I"�:�����X���7���O))����:L;�j8�lQ�P ��%!��럒|2��qye��4��m�m<3�@�!��$�+c粒���J�ۤ-S�R��Hk�A8$��k��� )��[�O�/�ov,�6�˔�}�O0|� ��n�����N�ҀF�{Ӂ�{ǽLK�)��{�|�G�� ʭ�"W���?��X-����Y�W�~Rn�2�˰o.� x�*S߇�Kê: �4`DF�oԝ.(Y�&pKq��ѵX�n���9�bbn��|��cc�N��ݛZĴ�&��ܖۑ�t�B���Trj]ޱ*�Sxqd�w?�� p�|���n�)3^E8Y��⑷g"rU`Wn�A�O�5���?�H�lpY[��Q8��+��]��r�q�oޱe��t����j Z�G�O\}�����r���7�wَ�C����V6t�b70j�#Ū�!��_WH+��R����F&/������Ϗ��j.9W���xZA!�/�W> `[�X;���GP���w6�V���R�{4w�e��WD�0�Α�h�������Lȣ��%J�Л��z����=i ZϰŠ��Q����^"���O:58՛�k��~h���l`M��ǽS�qV1DZ���m���hb��w�yu�K����o��;�������DS(IEND�B`�PKb��\�����templates/isis/login.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Templates.isis * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** @var JDocumentHtml $this */ $app = JFactory::getApplication(); $lang = JFactory::getLanguage(); // Output as HTML5 $this->setHtml5(true); // Gets the FrontEnd Main page Uri $frontEndUri = JUri::getInstance(JUri::root()); $frontEndUri->setScheme(((int) $app->get('force_ssl', 0) === 2) ? 'https' : 'http'); // Color Params $background_color = $this->params->get('loginBackgroundColor') ?: ''; $color_is_light = $background_color && colorIsLight($background_color); // Add JavaScript Frameworks JHtml::_('bootstrap.framework'); JHtml::_('bootstrap.tooltip'); // Add html5 shiv JHtml::_('script', 'jui/html5.js', array('version' => 'auto', 'relative' => true, 'conditional' => 'lt IE 9')); // Add Stylesheets JHtml::_('stylesheet', 'template' . ($this->direction === 'rtl' ? '-rtl' : '') . '.css', array('version' => 'auto', 'relative' => true)); // Load optional RTL Bootstrap CSS JHtml::_('bootstrap.loadCss', false, $this->direction); // Load specific language related CSS JHtml::_('stylesheet', 'administrator/language/' . $lang->getTag() . '/' . $lang->getTag() . '.css', array('version' => 'auto')); // Load custom.css JHtml::_('stylesheet', 'custom.css', array('version' => 'auto', 'relative' => true)); // Detecting Active Variables $option = $app->input->getCmd('option', ''); $view = $app->input->getCmd('view', ''); $layout = $app->input->getCmd('layout', ''); $task = $app->input->getCmd('task', ''); $itemid = $app->input->getCmd('Itemid', ''); $sitename = htmlspecialchars($app->get('sitename', ''), ENT_QUOTES, 'UTF-8'); function colorIsLight($color) { $r = hexdec(substr($color, 1, 2)); $g = hexdec(substr($color, 3, 2)); $b = hexdec(substr($color, 5, 2)); $yiq = (($r * 299) + ($g * 587) + ($b * 114)) / 1000; return $yiq >= 200; } // Background color if ($background_color) { $this->addStyleDeclaration(' .view-login { background-color: ' . $background_color . '; }'); } // Responsive Styles $this->addStyleDeclaration(' @media (max-width: 480px) { .view-login .container { margin-top: -170px; } .btn { font-size: 13px; padding: 4px 10px 4px; } }'); // Check if debug is on if (JPluginHelper::isEnabled('system', 'debug') && ($app->get('debug_lang', 0) || $app->get('debug', 0))) { $this->addStyleDeclaration(' .view-login .container { position: static; margin-top: 20px; margin-left: auto; margin-right: auto; } .view-login .navbar-fixed-bottom { position: relative; }'); } ?> <!DOCTYPE html> <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <jdoc:include type="head" /> </head> <body class="site <?php echo $option . ' view-' . $view . ' layout-' . $layout . ' task-' . $task . ' itemid-' . $itemid . ' '; ?>"> <!-- Container --> <div class="container"> <div id="content"> <!-- Begin Content --> <div id="element-box" class="login well"> <?php if ($loginLogoFile = $this->params->get('loginLogoFile')) : ?> <img src="<?php echo JUri::root() . $loginLogoFile; ?>" alt="<?php echo $sitename; ?>" /> <?php else: ?> <img src="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/images/joomla.png" alt="<?php echo $sitename; ?>" /> <?php endif; ?> <hr /> <jdoc:include type="message" /> <jdoc:include type="component" /> </div> <noscript> <?php echo JText::_('JGLOBAL_WARNJAVASCRIPT'); ?> </noscript> <!-- End Content --> </div> </div> <div class="navbar<?php echo $color_is_light ? ' navbar-inverse' : ''; ?> navbar-fixed-bottom hidden-phone"> <p class="pull-right"> © <?php echo date('Y'); ?> <?php echo $sitename; ?> </p> <a class="login-joomla hasTooltip" href="https://www.joomla.org" target="_blank" rel="noopener noreferrer" title="<?php echo JHtml::_('tooltipText', 'TPL_ISIS_ISFREESOFTWARE'); ?>"><span class="icon-joomla"></span></a> <a href="<?php echo $frontEndUri->toString(); ?>" target="_blank" class="pull-left"><span class="icon-out-2"></span><?php echo JText::_('COM_LOGIN_RETURN_TO_SITE_HOME_PAGE'); ?></a> </div> <jdoc:include type="modules" name="debug" style="none" /> </body> </html> PKb��\v?C�� � 0templates/isis/language/en-GB/en-GB.tpl_isis.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 ISIS="Isis Administrator template" TPL_ISIS_CLEAR_CACHE="Clear Cache" TPL_ISIS_COLOR_DESC="Choose a colour for the navigation bar." TPL_ISIS_COLOR_HEADER_DESC="Choose a colour for the header." TPL_ISIS_COLOR_HEADER_LABEL="Header Colour" TPL_ISIS_COLOR_LABEL="Nav Bar Colour" TPL_ISIS_COLOR_LOGIN_BACKGROUND_DESC="Choose a colour for the background of the login screen." TPL_ISIS_COLOR_LOGIN_BACKGROUND_LABEL="Login Background Colour" TPL_ISIS_COLOR_SIDEBAR_DESC="Choose a colour for the Sidebar Background." TPL_ISIS_COLOR_SIDEBAR_LABEL="Sidebar Colour" TPL_ISIS_COLOR_LINK_DESC="Choose a colour for the Link." TPL_ISIS_COLOR_LINK_LABEL="Link Colour" TPL_ISIS_CONTROL_PANEL="Control Panel" TPL_ISIS_EDIT_ACCOUNT="Edit Account" TPL_ISIS_FIELD_ADMIN_MENUS_DESC="If you intend to use Joomla Administrator on a monitor, set this to 'No'. It will prevent the collapse of the Administrator menus when reducing the width of the window. Default is 'Yes'." TPL_ISIS_FIELD_ADMIN_MENUS_LABEL="Collapse Administrator Menu" TPL_ISIS_HEADER_DESC="Optional display of header." TPL_ISIS_HEADER_LABEL="Display Header" TPL_ISIS_INSTALLER="Installer" TPL_ISIS_ISFREESOFTWARE="Joomla is free software released under the GNU General Public License." TPL_ISIS_LOGIN_LOGO_DESC="Select or upload a custom logo for the login area of administrator template." TPL_ISIS_LOGIN_LOGO_LABEL="Login Logo" TPL_ISIS_LOGO_DESC="Upload a custom logo for the administrator template." TPL_ISIS_LOGO_LABEL="Logo" TPL_ISIS_LOGOUT="Logout" TPL_ISIS_PREVIEW="Preview %s" TPL_ISIS_SKIP_TO_MAIN_CONTENT="Skip to Main Content" TPL_ISIS_SKIP_TO_MAIN_CONTENT_HERE="Main content begins here" TPL_ISIS_STATUS_BOTTOM="Fixed bottom" TPL_ISIS_STATUS_DESC="Choose the location of the status module." TPL_ISIS_STATUS_LABEL="Status Module Position" TPL_ISIS_STATUS_TOP="Top" TPL_ISIS_STICKY_DESC="Optionally set the toolbar to a fixed (pinned) location." TPL_ISIS_STICKY_LABEL="Pinned Toolbar" TPL_ISIS_TOGGLE_MENU="Toggle Navigation" TPL_ISIS_TOOLBAR="Toolbar" TPL_ISIS_USERMENU="User Menu" TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." PKb��\ۄ2���4templates/isis/language/en-GB/en-GB.tpl_isis.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 ISIS="Isis Administrator template" TPL_ISIS_POSITION_BOTTOM="Bottom" TPL_ISIS_POSITION_CPANEL="Cpanel" TPL_ISIS_POSITION_CP_SHELL="Unused" TPL_ISIS_POSITION_DEBUG="Debug" TPL_ISIS_POSITION_FOOTER="Footer" TPL_ISIS_POSITION_ICON="Quick Icons" TPL_ISIS_POSITION_LOGIN="Login" TPL_ISIS_POSITION_MENU="Menu" TPL_ISIS_POSITION_POSTINSTALL="Postinstall" TPL_ISIS_POSITION_STATUS="Status" TPL_ISIS_POSITION_SUBMENU="Submenu" TPL_ISIS_POSITION_TITLE="Title" TPL_ISIS_POSITION_TOOLBAR="Toolbar" TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." PKb��\j|d�'"'"1templates/isis/img/glyphicons-halflings-white.pngnu�[����PNG IHDR���ӳ{�PLTE������������mmm�����������������������������������������������������ⰰ���������������������������������������ᒒ�������������ttt��������������������bbb�������������������������������������������������������eeeggg������������������������������xxx�����������������������������������������������������������Ƽ�������������������������������������������������������������������������������������������������������������������������������������������������������몪����������������֢���������UUU������������������������������������������������������������������鿿���������������@:4�tRNS���#�_ /�����oS��?��C� kD���OS_������6��>4!~a�@1�_'o�n�ҋ���M���3�BQj��p&%!l��"Xqr;�� A[�<`�am}4�3/0I��PCM!6(*gK&YQ�GDP,�`�{VP�-�x�)h�7�e1]��W��$��1�b�zSܕcO��]����U;Zi<N#�) 86pV��:h�#�0Z�Q�JN��EDT��܅uIDATx�c�H��]�ȶ�q�<��&���d�NC�i�yf��������p����e��?�]�G�V����E�z��}����g��7�r������7�|Yw}���š�>JN�S!�ױ��;G$�pA��f�3TJ1�Z�8�+ �6�1�� q:u�;:�,��W�z�7D�Ώ��1#�D�1iǑ'�F�� �C �c��'K� �af�ᱟ�+s�B�hM��"��.�i�f#c�]�p^G�CI��#|Pd��:�T�#�JZm[��m��VC���7�)c�d��� �~F��)��*!�:\�y�Y��K��L��� ��<ޅ��w�6���C^�e6�j�{"wZ%oO �Uج&)y�]*�}0y���Ӈ��r|\�V�7�٬a�� ����R&�U3W��!���<"��Tb�{9佩WS���ȯ��}��YU��*���k�R�;m''�`��N����w�'�JM�!���6�i��?($ZI�Tp���pڴ�hM�C>�!��*<��*�uIU�t��5�s���h���z���K��t� B�b|�yT���r��c�v�"y���m� �*Y���X�c7y�l��?<�� Jjr�fZR{b��������el��$�Iy�P����X��Z�~GH՜9M���E�[2WJ��F�﹟|p���c7� .��.S�[X���|)X/�ۅ�v\��`~q�����Q�y��N�uK��dw$X�ǿ�>�)5��b|����#�!�f�RJ�U}���1����jLc�V}p�Ш��R��m�Vq����y�l�/3y�;������&��:�H���ɐ?�ǐp���bA� ��[ݘOBy%+N{d�T�R-�L�Z!�Z�b��/��-�8`-�����U�z�U��d�+�j@m�^ŪT�i4� `t� &�Nsn i*J-�,E,u0$�>1�V��ZkuWV��L�<���x��{���鍅��{|���,�Ľ�����=��=3�7�j}-��K6g�Wa��y�aHQ�c���z�z��/ѕ��Of�yk~�>����*(N@0Q�{|���t3j�MOn����"����OiJ]�ͨ^���A{�m+@T3����㸟W�b�Qq���+3���+0Pj���*$���$���d��br�������[�ɭ�Vsr�9�՜�jNn5�ZF��1�Fyj�4UqH�zdh-宓5���uJ��eĶ��ˡ��D�5=d��>5�^�!"��$� HJƎ/�y蓍�����O�ߴ[�\Ǖ?�f�5���٬�2L ��^ @,{����G� E�����Vcjb�U��l�NN�6E��]�_MޕѪ��;_�J��Hu"2[N���x��Y���)_�?����)�0��h/���0�����Ol�*�2�3U�:�46�ဎӪ�CQ'���Dޡ��5�>`�<I2�\�L�Yłͪ���qz� �W��I�Gj{Xrv[^�B���Y����v��@��(�#�w��_} ��Y��qZ�u(��Kv�5����|���u?̇̃$å4��:ж���r���J}Y';,�ّ9v��F��|k"W��u5&Z9�ֿJ��s$���笿���V�f����s����O#�y�R�g�Yֹ��=w���*?����iO��m��4�V?�*?&.�RT�i����*:��U�f�j�$�U��!Š���O������b`�䗐�%Ҳ?ڬ��yBi�`>9������V[�e�2Z,��K��_�kN��s�t\V�=iU��*���G��#�n4Y�yM��I�9Iv�.I��[���:�_��?��6/�^�i�=��2yf@�xz�z��d^�{D�T�J��V]���$[J�H.;FEԩ�:U�uD}R�'ɷo%I��K���|���b��~�3[�-ѭG�Y���Sd{�R�m��ǡ��[�lU�'P�ps�:�j�ѿ�A�G���a)3;KYge%�#r�D����:�>��m�|�몕SC���fe�ChÒ_Xl��>�x��M��Ӫ��A����>���d�y�qꀑ=��jeehu� ��yە�/T�n�TP��*�8;;�UG�j�$���$YFE�q��j�:��)���m}G��{D��bh�ph[v���64� � ��4��V�f�`E?O�2�,u��:@�:��3"/�rܶ����~:���]J ��ZX�64C!y�����[�ɭ��Vsr��՜�jNn5'���[�[�7b/�m3��[;D���e#�c;C\�����&��� ?�V�V���x�\�7VU��V�t��e>"�Yr���$�K��HGk\ͪ�4��:#�)ӱ�BD؏�l� l�6�:�ZS�2Z�1ᝎ�d���ȅ��Ǎd���f�"���0D�cXm�d�}(V�E�>T �H�u�k�cY}-N��L�`p�#���y� Xx%_fF&�_�01�])TH�{�H3��k���j����'7mZG�J�d��X��������I���6�`�D䞡њr�+�<��عݛY�iY©��Zwh����cuY%,�W?}����U��U�Y�c��!�����6�?�};�k�����:F�R���Z�kݪ��{�"?�I��>�}��o�qW��x6���c[UCd�Z0�8�gy�1I�x�0��J���;�!�ĉ[a���W�_�e²EE����)������:�qVj�H���;J���հ�q&����3�y|��ɪ��b����}�|AOzJ�]�kS�s< �C|�HV�dy|���9o��V����b=���ɟZ���$�Rof�+����X^�ٳ��}��9>)�v� ��#Y%Idn����ù��^d�5oݟW��I�I>�*�֑ʽB����pQ��c��-���~�YK�R�. ��O3[��\����g�=�{`[�b{r�F.�j}R�^^�R�Vӹ� ��܋��BX;2EKf�,Հɒe������Gn�7�Q)g��NZm�kՎ�*�V�I^)f;U%R�`U�PA&V�����hҲ�E!:�{��EF���Ǟ�p� �:PȆ:��l����$.'���[�ɭ��Vs�9�՜�jNnu\r�ac���)r��_�Y&�]w��+�rn� �Kcr��KO�d��fl�ח���,��pc�$}�u]�O�c_�TC/R���^�R�ȑ�wq�a���;$��SM����-��U�����y�c�yj�,[���2�|�>�W�\�^f�ѥ�^��t=Z���T�VR�?]�\���,�3�����mQj����E֜�1���jg�̹^�3+��x�2�.I��k�?�O)�&�����O^)��z#�'���#�qQ��[��w�r�+'Y�oU�,�6dN�Y��E�'�VW��N�'��zG�'�2���o�5�Ь�����3"���6�b�;#\g� \[H��ԲȕS�wǶJ?���$�����"��[W���jrVЈG��e~]K`�s�<f���+��c�d�N#_ci]��}|�V�)��\�<e)ǵJ�bc�۬�~F�i�R�V喊9r�7E^����F� ����T_�?�;1M#]��w��}�ZG�T.�v�����ٶ粔=���/���j]i%�Un�x�}~R�j��u� &H�/�}���.T�f^]��T��C�H����H�T.�ӑ�}�/�jw:r�U�N�=&�ǰ����G�T,�Ps�m��$��u��>9��w����˼��S C+�̔ ���rQ��A�7[Ƶ�(�t��R�4����K�ޮ�G)U��ds�6?0Is~�9n�q)Z�a��=�D��W7Ec���rt�jO-�\y�Qkbaܻ%=�C��\���۪�*�B�.��n���Z��E���̤�����|:��{�=V�n[&��H�"WN�]��kU��P�%����"��ɦ�]ա�#��S]j=+����m_�Gd�B5o]nQӺ�5V�n[&��J�"�2o�o;z2��uz\C)5ɓ�O����O6��v'�pQ]Ԏ2���.N*U���4�[c�ζe����+��t�\��O�r`�� "�Z�l�R��6r��n+��?5�ɭ��Vsr�9���jNn5'���[�ܪ�����$p�Ǡ3_su�J���aZ }k{�w+ׄ��������cp�gÑ��8xI����{ׄ�脉U��s�<"�Q֧��^aL��X��'W��Gɧi�Ne��Fr{$�r���H�7��ucYտ|A�JI7Z�$���IN�r����=��-Z��3�2�o�nL��n�!�����i�,��Q�絆���1�� j�٭v�%���֭����XV_�`�,��R(%I@�&9iɣBP,�ȶ���i��ۺ�V�2�G�*�w7`�!�Ǭ��I#O��Ж�A�ֹy��F�AM���j���q���W�nWK�j{)b��hC�A*(e�|&�F���%so�Y~!9y�c!)s]������C���z�-9��ܖy"u���;�{N3����s6ۨ��c��)OC��mK�&w�B��K��-3'd~}a&��dN�M[�̩YX���C>�l;j��I����U#��۪�ƄR$�N��ۂ.����nJ�qR]��r�ߛ�%��L�R#3���R�:��{xY���H)���z]?1��t���}�F���j��8(�G�D���3l�$��z��˵��iU�F:l�*(<��\�&9i�0�C_��%{�����#�7��i<���Z,�V��u��z!�șH5�j�N�5o����~;5oo�c�Z�\X`�+ �.7�]�`oT�?8�)1"#�:P�xԈ�ޛ�%��Z���#$Td����u�~��,9�B����@�pZ��ɝ-#=����J��\yW<���}^�D.E�}P��^����^��x�⊵���/*K�hهwӣ�i��T��\�]�V� *Y��{�]��ߵ\�"<��$��,�{�uv�]���x|��P �P����b.�c�~0bG�R��.�FV��\���;&��M��՜�jn5'���[�ɭ��Vsr��՜�jx/����{ɜ~]�=��(���ň�3�dj V|�2���N�,����>�Bj�ϓ��������Q{e��+h���]��Z�������,tHf�b�gY�>%��n>�B^��`�Į��=O���|��GFK/'j�$9�E���?�)1E�:�Ck��N(^O�l���G��_�,/��j�>�r�D[�d��؟,��'Y�����H�E�;���&jM?�D#փx��:�~h�?��C���ਆ��*u�Ry5�h������/�F?�i��{��;\��2Z�ϓ,wh�i��f_�"��o'I��dti�ߓG��wH��¸�[$Y�1[�g����>@� I��U�V#�ͺ}D�^�0Z$O�&_��|�8��â���o���v����!��U$0�Jt2��C��<�]�Ҽx�m�ڤ(ӣ�&�o��Oz��O��x�"O����J�i��\��0�:�U9���Mp�h�)Β�x`�����f�]e)Y����B�$_�"9��7��v�hJc�|:����T�`��?hn?N6�����_R9Pf�7��h�lk�#K�TJ���\b����V�ԖK��\t���/p@���j�r�C��VOp��ٯ��A��E//Q�4wo���M�oƐ�&{_I6/��\I��?�8�#l��\�Q6BS��9C��X�i�gK5p=ɪ�Z_���!� ���j5b�"��wuy�O۬��5���_�}^8�ܽWl�������f��y��F~�zF�(���ca��8H)�|����Q)˱ʤU�wdZH�}"�I��ZLΥ�]%�E=f� �UH�Q�T ч�Y�<�!��܈Ԋ�z�������bBw>^�K��>���y��t^'�:���.��d23m7U��^ۺ0�K�m�+E)!����Q�IX�ڟo��4y�Z���,Ůiok�`6��Y>�����N����E���D3�[�^xR�L���_�����8��'^e̝}���+o����}<˱��U�ꤘӝ�I�+M&4+r���D%�6M/�f�Q���$�p����.��j��Kv+�'��gf�/"#�Q;�ט���U���{K��R��;�\�X�>E�>h+�ȩ�lV�r�<�d?��{[[��R!�I�1�D��TU#�����*��Y��R�s�6'���n�7ݕ/`R ��y��g6~p���[�ɭ��Vsr��՜�jNn5'���[]�_K����Bd%$�+���}x{,���c�l��D�������2ׄSd��>0�I�ըG� ��8lt��X�X�٦��}�#���K�O~JNj�l�Ur�lg�z��=>�Ň�~��%�ؚ]��?�f�hJђ�}���<AX���G#=g���{���0y,�Y��]�c�r�u��턀o��.,�l~M�yn���>2�y�����ѧ�E� �, ���`���L�����'��>���������0��5ZZ8��6j|�,V��������Kw�A���w��e�L�ſ�9e���Q3W����!�iͣk�"���U�^�|�ٖ�M�hI����fk� s[�zA�>s��}�r�� �:&R�� o���X3��s�+O�o#��z�?��{��⭲Y�_���b���A�O�o���M��6�>���9/����G�<�.��9�V��h�'9���ɓ0٦��9�$R�)JT� ��*x}�����>��Jc��Z&�V��>��c�"6��;w�b�G����y������0^NU�6���'����?��h\'��"9ﱞ���t�g�SJ��Y��9�[g�]����e{�n��L�U����lV�B�#�BA~+�y+�x���]L�+��c���3�����<�ǿi�����<��a���?�5����F�P:�p��ß RD�O�f��O? �|`O�s Pu#o���|2F-����LU^W��H��C�,@Z��5���O�؛����3���8�G�ԣK����W/���;�/Y��_k)�y�F�~�mV��~�p���[b�k�����}�Kr��R�y��y(���'�E�-R��6༮��|��ݡ��K��"9�����ό���;���+��c��6-����Oޕ��ָ�Ց���?���z^�[_�����5��T�O����w6ai]��W�c{X�F��0��S/8����-Ra ��r�άg�����T���G�?6'v/�V��R�o^���D��LK�?����5T���L��į�0�*��#aǟ��?�TXQE�.�qw8�y�e~��=�g�L�����ܣ�s���o����� �����{fg�� ��N��8�{_*VjE���SU��T��^�!~�C�n&G�R��Dpq� |�=>��?�΅T�jX��M(5J�ʹ6� ��� (�[��N����\������aF�T'�ˁ`fй��VC� �����[>�|��:�r#��R�%�lgl�C�V&&�n�&FaEos|T��w�w�gxr�r�㋲����!aɤ8��?�l.n⇒���?uMIEND�B`�PKb��\R��8181+templates/isis/img/glyphicons-halflings.pngnu�[����PNG IHDR����0�IDATx� l\�O��DI���DqF\�3"g˥��ɱi-)��ME���R��,�b1��cXNd'HTO��g �yz���^�D�(��Uy�$l�A�Ul��}=�\~��ͽ�;�Մts�39C�Ϝ9�{��_�s������I^���G��9 �Ia@��3X��g�U�KϪgb q�n�&yQ��l����c��T_���AGr�{��m%�2R��@�W�C�,gh�J����[t=l�����LA7����@V�jڞ:��l��3��U��~NJa@�丑�Z��x����U���[IN���IK}�0�IV�TE����c{�]���c:�Cx�@u3�?R�lj��Q� a=x kУ�a��Q!BY��**�;�bj���U�Lw�;uȦ������W��уnh[0i��+��)6z4�OrB�P��+��hZh�g� -=��C3dS��Yh}Y�T���)P����N��Z/�C�C���Ǻ� X�����z�)��<뺾>P�B�8��F�;�����8yz�*����- ��=�z�K��v&���v�MD��bH<+A�I��{σ���gP��7�[tr�Js��'�Uan���FooU�|�!�CJ��P��@������ �Ǻ��I4*�¢��*'o�Z����]�Rz��X���S{Ѭh�S{�o�c��EhE�����=��[�"/��B`��YȊ(�{�����{�f�x�ys��O��V�rتP�eV�s��=��2*�k�6_�л�W��-��ȚR�H���7��S�� q�'N��B�0A����l��^�]�w�̡Yeg�=���T\ͬ�y��U��펡�q�L���Q�}$ڪ����h���N,{���^w�(|���'��P����뉥��>��Σ�b�Z�g��Q�%-�L�����?��;�b��Rc_��~I����֟��ώA4\��?��U�N,�"��Y�ި��Zu�K,�*�a�ڀ�k�������-/�7��y*�Ȝ�H �;1�'f�����I�x����A*�Jݸ���l��Ǽ��Ue!�Ѝ+�$oTb�64�O�����x���-����#&��k��^��/�`�z��¿ߞ�.��W����]���/4#P���_�`�¢Y��W�5�5!��`�ddGVQe2c����#/^z�x��s �����=���x�B�J�Q�z��kՎs��dv��F_��~��O�|�Ǻ� ���1�P2]OX��4�"n��#��A���S�*KAJ{��PR9'�3sC7��F�֦��5*�f���S\W!p7�S�[�vuQ�������尼J��W����|� ka���~��F_�H펫u���O~ك����^�`�˓BO`R�9��W��9·-T��q���Y��d��qq�S�=���B|�F�Y�G4+~��ww�T���I������e��I��}�ș�q�C�V�o���HKGn=�U�b���Z��s /.* �bN�M���O�[�YiqV�Yzn�U��('fG�v\:����-�eE?�N�]l�d��n^���.�F���N�h=�o�M�7}�[�Bd����Q��;���\ն�q��k�#q��[��N�u�A��_o����'V�A(�>:272��(����*��9W���':�=������7�~PD(G����ٱ�k�c|WA���@un�R~`���F_/�"E4��q ��U�rc��d�wQ��^�e���:LM��V���45Mu��֪�F��;~�Y�U��A�Vч�}�柯ZA���s;ٷ՞��,�� h���r4u���s�d����c}Km����2-��xH�� �C�p��������p8�UgU����p8�UgU����p8�U����J$�c�!d@��b$V89)/b2��>iO �� P4�תN��ӏK1^��\WG���+�壾�Iy�H����N=u`R����k�-&����H�B����fVi|��S�j�jo5&9���҇g�g��킇j�b_K}������>+ҍ�����Q��`D�k��]�B����QE�z�ݐS`��\z��@� ��h|]pQ*G��FEȬ�V��:2�!�0xz������ �~����c�7�clU�X��2t(x�Og�����UK����v(������U��{�����І�T�ꟃ=���w��rze�Ɛ>i�On�F��4��L?�[5dT2��U ��Q��XEh�������=6*�@�4���A}���1�'���%�A��A�>!}�wJ��^��M���� ����ͦV�Z E�A^_��y���4,^#�������m8w ��w#���3Է-�&�.��I�8|��z+�*UcV�U�˾1g�����qA�;~�>g��� ��Y�����Ъ��|}H/�3��7��c�C$�<�~�[D�G��6��]�Ϸ? ^ԝ��t-y=%�g��x�׳�]]C�2v!�n�tJ�8�MnМ��1�$������~.�ç�ӝ���!�"�V%�Z�5Йl99�T=.g5��}�� ��2�f���A��0����mԷ�-�������X�7<�<'� 6-��x��*��Q��0%(�x�Z��zX�xH�� S�Ё�r�����=���B�O���� �tY���e�U!���я��[H��ꑭ�9��P�Z4b# �������#�P/��zH@?�_=�껕j��=b ;uw�Y�><�o�6��J���^��b�{V���&��6�׃���Ͱ>������1��b���Ws��"(C���>�B�V����>�Y����Y�c?�P!�?O�X����>x�����^R�1zT�@ҚgX�����c��S�>ȕ��ڑG�!\�ƣ�ʭ*�F�8r~�G��gzF��$�kS���Y}dGTYe��%����V�#��qIj3@Mp77ڞcZ��*��[nU���{t��`R/�{/nT�����F��)9��T�T�� �OM��Mrӵ�M��|����f�!P����p�-i���*$����1z��1z��}`Oş��-Т�ǧn�ލ�{ !}�_����W8����-0Ur˭j��*Nj���!��5M��8V6�L�)H��S=Ҵ�@�I��˷ϭ������)Σ�'�Q'������}��o,��N�ti�?{�#�������DԚ�#M~� �*X��Y�>�y���_q�� \�����h��{ê�A����_��)��*�R){9M���Zߠ�͜����; ����ez�Ï8���U�rV{nR��ώų�sL��}W��}���[u��� ��9^?v��w\2Ϲ�a4��{����,+"�������GU4�� D�h&#����Z>g�O@�ϛ� �*G>�J_������v}���1-߲���A�|a �~�Far���I��K��]��p8�UgU����p8�UgU����p8�UgU����p8�J �S�Q_Q�����Zi� i1�N`�m������[@=�����x�c�x����`Ѱ2[^�j}�x��>.���r�!�"�����컔F��o;v�#C��kh9p҃��nəl����iŊ, +8*i}�1�'���G������ѓ��9S���ܬy(A[��n�U1�$Pg�g� ��W�`ӍM�ÏfXw��A�o{�}��� ��C]����|<v�M#�� ��'��(h�=ј�>��9���Ga�K�3r)��74k��n�U� ��`ND^��&B�q�H懣��K '�ff]�Yf�~I�_:������.6kFc����)߂�x��>�(6�Ѱ�!�ʮ���=+B��E����R�Iϛ��VE�a�g�G/��]%�a��<>�K}&"����}��L" �:�B�(V�[�qw �u��w�������A�!��Uъ���Yၟt,�0�gѪc�R�Iϛ��V%u�e���M&TSӳc�cS���ߡ��1���t����� ��Oi Y��ň`��U�S5 ~�F&��ka��P�`3�D����{r�[ʨx��l�Y2vf�c�U�j���chD}�wl�'zqd�;q��?��ŭ��Z�Ѓ��Up���U��!?�=���Po�ڧj�W~��O���d@V�e�jO*�^$bh�-/0�ӿgB ��ǁZ_F�F���"�տ}T��j��c{������2)d!����D�_4@��l�O%�wʃm'� �U��a8�V&�h��Y�`��>��2��X{{����l�Ge����|^�Y�.h�C���-/DekU������U��~�]�yF�d�;4e�.��-���>���_����}'8VjU9�Z~S̼%l����4�NJ��k�,�&�ۘ��Yh}+ ���^�Yɨ�Yy��Ъ~N~�h�X��1y�; �J����fa��� ;.y���� $q���]?�K��)���J�ڱ��;����ܭ�5��*�*Sk��t�EĈ�w�m�K�DX��jjT2�ƨ�U��*HpC����G0D�3 ��+L�0q���'���_x����C���耒�ƒ̗���B��� ��0)Q���Q ���Wت>�U��8}ؓF$���Ԩ��$�ܪ:=��:$�f��0L>S���J�����IGx@�}h��v9��V�����i�e4RҦ�R2��V� *�� �m}X�Z�Y�̪Ɛ�2�27��T$����[+R���V�dm��ۏFe�%�Q�¤=iӃ��� �Jo����R�b�z�AШ�G'�'w���pVu8�U�����pVu8�U����p8�:gU��YU6Q�*s�t8B���D�?N�2��tQ}M���*�Uy]^$=�p7�q)VD��T�Q�U�6w�Q�^9��JtCN}u����J�UK�C��I�Iǫt�c�T��*a�9�d�䰁�"&X��v;jP/����A��V�e�����F��B��I�"8��i�J�F|�W�Օ�7bDM�2;64?�栈GNfC��T�B�,sŤJ�QZ�=H���*�ȣy�,B���#�7*�tA�l�m빡���N�U��"� �jO���}�S{�QV��+@��Š��c[兆-=�b�/B �Y�e �#�U(�ٴ�b��� ��\K`+fMjD`�����,����z�|Eij�ghT�w�ͺ�g�Dr2�k�+W��pzQ�a'���x������)�|i3��\���UNbVv�&����p� ���ńb(Ed�&V%�%�e�Lfl[0�3��.��l�LC����^�iO:���B��*=���7ޮ�-�T�ώSr�q����\ ����o�}S�)�����mT�AzLX�,,v�3m"�@?#��N����S^�M�jO*�� �JZ㣬� %H�bx��J]�3�F����N�iOC���>c%(=�0�`��W]�t9 ��}Uh�A����cOA�դd�P����:��>�TNiG��������˙汞� j�ߍ�Px@��̄��|�"��Q��J����l5�J]���z�V:��=���1��Q��/��ÐG��3��[�>^5�)6�l��Մ>�a��A�ͳ�wA/��SӐ�;��UKн�ܺ��s�`'� ifUҚ�v��3V�rA2u�j�5�́�H=_+�r��/��l3V��_��Q��{Q���b�ک{N�8�~]Y���E9��;<h�P�����o��2�Ĺ�Т�����S{��dT]��6\z;'�l귽�UIkzԥ�Z=c%�����*4�ݪ��3B"�|�l��F*D�_��*�%�W\Z�x�¨H�ĬĞ 4�k'��A�K�������[��I���i��x��4Ȋ�z�G���DL�(啎�=�ĸ73����(HX� jw��p���Vž�'�z�V6Z��%ퟵ1k%�� P����Q���-���V�24��I5 ���y�W�+����' �S )h���Tc@�Az�g ���|�Hmח֪~ڃ�%�:��QVz�8��"��V��j4�D�Z�j�^oV֨5�n� }<c?�8��������e����6��ɨ����l�f!�ap�8�Ïz���zHc���z��TeTzf��!��Q�z��2��A+du�J��Ĩ�gke��LPD��-?��:!B&q������spB8p홇��0tjzd��:pmǥ�i�e�i8������U�iԪ�=qG� y��#�n��y�2u.��КE*�$ ���h��u���]e��QI��o?^�cr����f��o�탶Zi�~�KaP�{�Rz �Gk��ެп,yw�*뉌¸��S�-�FzJ/^,�s�P~Ɵ@��:�f������'+8�:�X�Z����.-w8�U�����pVu8�U�����pVu8�U�����j��G���z���>IU��u�a��X����Y�9���[>���OO�Y�4�=�R��ׯ>�W��zE6Y�Z �����}v�I��3�x���[��'���^�dEz�� �ש|��ե��p�5��vj�{������Y�~j��?!��m��5f�A�ϊ��J_��7�g��d�%�K���B�y���-�|Yh[b�&��)���%=a�G����|m�мM���8��f��1z���鹉���SO�/赔{���mBq'�|��PN���F/]7���m�8e��5�3��u�è*��!J�̧�d��0B�'m�zf���V��Q�Y���/��ܱY�͵�^��9��'L�}�ڵw��f��jV>��{�"���N�h�7��Tp�GdS~ZP��z��F����=VgC�{֨��s����� �z�S�:="g6Bi�����2yk�*���)� b� G���,.�2�jY0r��~щ��Q�I#]X���%=a�/-��)1z���C�Aks�<Hȼ;�C6偯�]���S��p�бC���[�P�q�,da�>�ƖOz!�$�Z�팑���od�N�_�b� ���WJ����_I �iiJ�Y\�[m�:'f�x�V��T��m$a}� ��^�NM/��n2}N��>�(�~v�� �C�z����v����2�%���O��c|��{�^U����`� I}`�F�������van � N{��MD΅��~ =�/��3=#t�..t��v����A��z�@`�̯�����^�&������}U�����HFe��F�@o+���b�P~}��.��Ȋ�O�P�=.�#+>/i��١y��2�O.5�^��CX��U������c�����ج�'�ܱ���9 �_)� H����%��U�|z������-����9��'L�%?̿�P�[%NO��dT^O�s�ӄ��H�]��$�m�|�̓_?(��s��Q5p2�{c�K�����.���; 0*��F,9h!�$���v�7h��c_zLԍ9����i�{!��..a�K��m�'�طxdү�"+Br�B�rz����Kz�L���׳�U��z�[Jɸ|��KFO���;�Lp��$��v���[�g>QI��_գ�G���������VE`E�O�r�rʨ� �W�Z��..b�KL�q[���ob��|�`|����8���rzW��-��W]_��8 ���|�b�{,��AΠ>�z:����ڋ����ְ�*���:�Rɨ3����"ֻĄ��!�H],��t�%9�}|N����s�Qi�{�ϗ_=ш���Q��{b��5\�� �]\f�x5��Q��?Qn�_�}N���O�]��O�9��ؤH�%�6�������]Y�p8�UgU����p8�:gU����p8�:gU����p8���$I�p8�XY���ڕ��5���?�+�E ��l8> �<+�8��BX0G ,~nM���$��CL��V����\���|�f 䌜IA���|���ʜ�Λ�4�c�����y��O3�2Z�,�BxH��?�z x�dr`m���6�B�ͬ$蹰#�l̻v]B���:QC��O^������:�*�z���,�ܬ+���'��G �+��?����#�ou��{v\*�5o�M7<��˚ئ;��n�)�!E��H����(YK��پ�i h��� �Is�~��;�]+E�_���a�V�������V4Ab�SSWl� �1w%j�|{=�X�Y)��ʀ-s�����6����_y��:��ڔ\(.&�LM?x$�,�'t��v��w��~�?q�D�<b��j:MH���:N����%��+A��0�̪P�D�A�c<({�g빭��d�~҃���v�_�'N��&�/_� ���"(۽��@ʨ2�</��E�R.n�fQ(nr��A~���=�u.�E�=����c;��@n�4��Gy�Z��'y5NS�����֟Ě;��}���#��Q��}�{�Em̦I l�HDP�c��,n��(㫆̭�Z���+��}�6�~G�K0ڔ~5����{��>���a�?p��C��;�=������?=�����\\(a�j*1��Hت|zn�}n瞝�j�=��qy����0�nVD#�b`��=8{9u���;�|��'0hlOelP�1��]p`��:������g6.I-$�� ����S�Q�B�s� �f��9��S �=�0��|ԃ0��qX�|�rRB$w�̨�DP4+��H~1�E.��/�V��"��?�;�b p��r\�������@��=<������ƿ:��#sа�o<�(}����O{���N�S���P�v�6�_� \��z(�qo���a��/�-��:}p���b����H�nU2*�6�f-5vk�9�kjt`ă�^�� �Q���߉>f�s�E,fV���[^[���v)�\\-�{�xv�U�?�\�Q�h'M��k�[��a:CBqkQD��9/���T��˃j�T���+��AVP��;�1ˊF�����Cbǥ� ��cn�l�8ƫG\Wƛ� ���߭�7jǫmX�f��V ���f��"�rFEl� ���K��8"�m5��ZnB��ɡL��F�}���>hQ|�!���L� B�/^����ú%�"�˃C�iH>E(+��/����P�Uk��};4ˣY�>�4���G��|���%z�*�g��=O�&�"�QU���<���iw���G����OOV�,Ȋ��!����s�J�mp�!��Qͭ��EQ�1[Q0倾��_��X�� -"�A��+a�:&��]I���Z?��-��ym��͡���^Y�c�D��︔yU�(�v���{��p�\�w�V&Ӫ�x����l;#ΈP�qf[_5��n}IEC�����;�s�Kq��zT�_��7"��c����G�� �h�䝅�����STر��r�˒�r��Kb�N��o���鼭Ue�;戇zX��`B�^Y�'|b��ki�֗��8��q��*�he4��44w�n��}\��Q�X�e�#/;=\8'nW�{Ń]Ƕ��^S��W=(�� �4j3��W;D4ЃgWJl���D4��*Y�n��!��ˍ^!Z�q5X�0��E�O�����v��ӁLJ ������U;N�����'����ZZ�� �I�n�4�z�2w��R}����j0N�]��� tzYȃC��Ц_�kOO���fT5E�u�̍J���Y���,.V(/#cp:h�Ox>r�9�?͉b�����ó�\Yj���J����b�M�X��� | u#�5��F?�k�H�%}�7$,ۿG�N<�CG�y��;0��iF�����7��p��U������p8�U������p8�U������p8�UxU��Q8�C2;a�<gC�mQ��Xuޣ��a$�"d2�v���r��S��RV^U�E�1M�|�s�-��R�Mr���O��D8x���4�!4;a�eSx��&��T��d�I4en8I��,J��g�F*�u�uݮ�x ���&�r�Kf9�kR�~����:����Cyx��C��E���]^������+#O�����3/X�� ��۹�z��xH��z6wl9�j��Գ ��c��H>�[�F�A�ų������l�l,�W?��^^n|鱏�kyU�[�[>�I�Im����������T>�d ��3��'dS���f��.�#��Н�帄�Rp��}��������h8�V-��j�u6+XV��L�]������2��N��ah>�U��YHç��M�Edo=I������V� =��ƅÏBO��)���B������Y�dk~��T���6{Í�i 27�y�dЖ���9ϼ����'v�UM�d�������3��<4p������������zM_5 ˑ ]� ���Jςu b��L��`�����Fo���'�R���r�_٦���G�I�P���[$}��{�"9#!|֕�f�G���#sК���Y�NP}�����O}���!m�Ov���Y''k�HL���HM7 �^�ޭ�֯f�n<q��S'�K���?}�O���[����WF���6!��L@fj�7Ӧ�mѠ�75 :��#����n�G��-��[_�h؞��w̩�h;���{���� �y�ߊ~K����"��2���k@�ʵ��&n@ ��Iު��PE�+�x~T�iT8�G��h�Q��U��̳{0�?���U!�����]"��:K���w�ދ4�{���Z@�?Z�>���M4�������[���/=��Y$�_��9�@+������C-�Y%7��$N�#0��x}ت:}�}>z����S���șgzFDb�VE 1}�ʞ>xkS&�TF��Q�9�$��s�Q�#;��l ky�n��R���l�РO�d@�8GVB��+��=_��4���{>���ߗc�o%lPk�q���A�R�)�@x�B��J�;РSˣ#/�.E��ܨo����߾�Nl��j�������m���{��yt��'��։�B��>� �� G�՞�z4�}�'t�Q�.��w~�;J�t�Jpۓ�<1��O�B�� �3��ԗ������_DY5��n�akUy�&�Guw����k�Xɧ}˝�6��'�hP�噡y���<�Gem�_����x��}@Y�S�p<�e�Y���ݶ��[)�}�/�Jt�i���ه�l�=\����Ʌ�6��yL.Ɠ ������V��YF?�"�}�[�3��j�0�70*d�Q�ӱt�* �~T�߀�==_y�صo�>�H�xh�K�`�$S�c~nE��#�C�&V��i�B�5���� �q�@B�^K��;^|Z�Y:�'vn�C����Ĥ|��&J?����ϼ ��FU������O��S{O�8~}#�+��2����W"� %��(19Ͼ�JM��zz��.�+t����[iuĞ �_���ǝ.3�`�^�����m�D<������� ��x^��'�z��:pr�%�U�O892�t>2w�����E2� ���}�BV�V��g�"�h���w�x����W�X�T��P���a����S���*=�4�����z9S��[������N��A[vs9Ϥ'��^*���+%c=1�Ȩ�D���֨����4�9� #v�%�L�Sh�e�ߡ�,4@+�@Ğ� $�����;t���0Eh՝�ޮ�_/}N�'���q@Y�³m�w��d`O�$��l��z�aÛ*�N��+�v�������v��GH��B�I�ֻ��\m�s��P��®��;r\�}�w:�֨�Z�תE�뱽��~�å������&\�O�vC��f���!�qa�$L�E'fq01;!���(zYT7^���.z��MK�b(Z�����l�tD��36Wy��w\��A���맦5Fe֪�V%�3��"�a!Z�/��1hUj'$� �F�^皠��'f[��Ә)~γ�h����=���T���Y�%S�~��,�É��6��?�/���F�#�IEND�B`�PKb��\����templates/isis/component.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Templates.isis * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** @var JDocumentHtml $this */ $app = JFactory::getApplication(); $lang = JFactory::getLanguage(); // Output as HTML5 $this->setHtml5(true); // Add JavaScript Frameworks JHtml::_('bootstrap.framework'); // Add filter polyfill for IE8 JHtml::_('behavior.polyfill', array('filter'), 'lte IE 9'); // Add template js JHtml::_('script', 'template.js', array('version' => 'auto', 'relative' => true)); // Add html5 shiv JHtml::_('script', 'jui/html5.js', array('version' => 'auto', 'relative' => true, 'conditional' => 'lt IE 9')); // Add Stylesheets JHtml::_('stylesheet', 'template' . ($this->direction === 'rtl' ? '-rtl' : '') . '.css', array('version' => 'auto', 'relative' => true)); // Load optional RTL Bootstrap CSS JHtml::_('bootstrap.loadCss', false, $this->direction); // Load specific language related CSS JHtml::_('stylesheet', 'administrator/language/' . $lang->getTag() . '/' . $lang->getTag() . '.css', array('version' => 'auto')); // Load custom.css JHtml::_('stylesheet', 'custom.css', array('version' => 'auto', 'relative' => true)); // Link color if ($this->params->get('linkColor')) { $this->addStyleDeclaration('a { color: ' . $this->params->get('linkColor') . '; }'); } ?> <!DOCTYPE html> <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <jdoc:include type="head" /> </head> <body class="contentpane component"> <jdoc:include type="message" /> <jdoc:include type="component" /> </body> </html> PKb��\]y�YQYQ"templates/isis/js/bootstrap.min.jsnu�[���!function(a){a(function(){"use strict",a.support.transition=function(){var b=document.body||document.documentElement,c=b.style,d=c.transition!==undefined||c.WebkitTransition!==undefined||c.MozTransition!==undefined||c.MsTransition!==undefined||c.OTransition!==undefined;return d&&{end:function(){var b="TransitionEnd";return a.browser.webkit?b="webkitTransitionEnd":a.browser.mozilla?b="transitionend":a.browser.opera&&(b="oTransitionEnd"),b}()}}()})}(window.jQuery),!function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype={constructor:c,close:function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),e.trigger("close"),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger("close").removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()}},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype={constructor:b,setState:function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},toggle:function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")}},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.carousel.defaults,c),this.options.slide&&this.slide(this.options.slide)};b.prototype={cycle:function(){return this.interval=setInterval(a.proxy(this.next,this),this.options.interval),this},to:function(b){var c=this.$element.find(".active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(){return clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this;if(!e.length)return;return this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h](),!a.support.transition&&this.$element.hasClass("slide")?(this.$element.trigger("slide"),d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")):(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.trigger("slide"),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})),f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=typeof c=="object"&&c;e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):typeof c=="string"||(c=f.slide)?e[c]():e.cycle()})},a.fn.carousel.defaults={interval:5e3},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find(".in"),e;d&&d.length&&(e=d.data("collapse"),d.collapse("hide"),e||d.data("collapse",null)),this.$element[b](0),this.transition("addClass","show","shown"),this.$element[b](this.$element[0][c])},hide:function(){var a=this.dimension();this.reset(this.$element[a]()),this.transition("removeClass","hide","hidden"),this.$element[a](0)},reset:function(a){var b=this.dimension();this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element.addClass("collapse")},transition:function(b,c,d){var e=this,f=function(){c=="show"&&e.reset(),e.$element.trigger(d)};this.$element.trigger(c)[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();a(e).collapse(f)})})}(window.jQuery),!function(a){function d(){a(b).parent().removeClass("open")}"use strict";var b='[data-toggle="dropdown"]',c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),e=c.attr("data-target"),f,g;return e||(e=c.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,"")),f=a(e),f.length||(f=c.parent()),g=f.hasClass("open"),d(),!g&&f.toggleClass("open"),!1}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api",d),a("body").on("click.dropdown.data-api",b,c.prototype.toggle)})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,a.proxy(f,this)):f.call(this)):b&&b()}function f(){this.$backdrop.remove(),this.$backdrop=null}function g(){var b=this;this.isShown&&this.options.keyboard?a(document).on("keyup.dismiss.modal",function(a){a.which==27&&b.hide()}):this.isShown||a(document).off("keyup.dismiss.modal")}"use strict";var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this))};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this;if(this.isShown)return;a("body").addClass("modal-open"),this.isShown=!0,this.$element.trigger("show"),g.call(this),e.call(this,function(){var c=a.support.transition&&b.$element.hasClass("fade");!b.$element.parent().length&&b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in"),c?b.$element.one(a.support.transition.end,function(){b.$element.trigger("shown")}):b.$element.trigger("shown")})},hide:function(b){b&&b.preventDefault();if(!this.isShown)return;var e=this;this.isShown=!1,a("body").removeClass("modal-open"),g.call(this),this.$element.trigger("hide").removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?c.call(this):d.call(this)}},a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a(function(){a("body").on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({},e.data(),c.data());b.preventDefault(),e.modal(f)})})}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);!c.options.delay||!c.options.delay.show?c.show():(c.hoverState="in",setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show))},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);!c.options.delay||!c.options.delay.hide?c.hide():(c.hoverState="out",setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide))},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},setContent:function(){var a=this.tip();a.find(".tooltip-inner").html(this.getTitle()),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a=a.toString().replace(/(^\s*|\s*$)/,""),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,delay:0,selector:!1,placement:"top",trigger:"hover",title:"",template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'}}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var b=this.tip(),c=this.getTitle(),d=this.getContent();b.find(".popover-title")[a.type(c)=="object"?"append":"html"](c),b.find(".popover-content > *")[a.type(d)=="object"?"append":"html"](d),b.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-content")||(typeof c.content=="function"?c.content.call(b[0]):c.content),a=a.toString().replace(/(^\s*|\s*$)/,""),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip}}),a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body").on("click.scroll.data-api",this.selector,d),this.refresh(),this.process()}"use strict",b.prototype={constructor:b,refresh:function(){this.targets=this.$body.find(this.selector).map(function(){var b=a(this).attr("href");return/^#\w/.test(b)&&a(b).length?b:null}),this.offsets=a.map(this.targets,function(b){return a(b).position().top})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.offsets,c=this.targets,d=this.activeTarget,e;for(e=b.length;e--;)d!=c[e]&&a>=b[e]&&(!b[e+1]||a<=b[e+1])&&this.activate(c[e])},activate:function(a){var b;this.activeTarget=a,this.$body.find(this.selector).parent(".active").removeClass("active"),b=this.$body.find(this.selector+'[href="'+a+'"]').parent("li").addClass("active"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active")}},a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a(function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active a").last()[0],b.trigger({type:"show",relatedTarget:e}),f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}},a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a(function(){a("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.$menu=a(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(a),this.hide()},show:function(){var b=a.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:b.top+b.height,left:b.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c=this,d,e;return this.query=this.$element.val(),this.query?(d=a.grep(this.source,function(a){if(c.matcher(a))return a}),d=this.sorter(d),d.length?this.render(d.slice(0,this.options.items)).show():this.shown?this.hide():this):this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){return a.replace(new RegExp("("+this.query+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),(a.browser.webkit||a.browser.msie)&&this.$element.on("keydown",a.proxy(this.keypress,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this))},keyup:function(a){a.stopPropagation(),a.preventDefault();switch(a.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:this.hide();break;default:this.lookup()}},keypress:function(a){a.stopPropagation();if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:a.preventDefault(),this.prev();break;case 40:a.preventDefault(),this.next()}},blur:function(a){var b=this;a.stopPropagation(),a.preventDefault(),setTimeout(function(){b.hide()},150)},click:function(a){a.stopPropagation(),a.preventDefault(),this.select()},mouseenter:function(b){this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")}},a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>'},a.fn.typeahead.Constructor=b,a(function(){a("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;b.preventDefault(),c.typeahead(c.data())})})}(window.jQuery);PKb��\���1.1.templates/isis/js/template.jsnu�[���/** * @package Joomla.Administrator * @subpackage Templates.isis * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @since 3.0 */ jQuery(function($) { 'use strict'; var $w = $(window); $(document.body) // add color classes to chosen field based on value .on('liszt:ready', 'select[class^="chzn-color"], select[class*=" chzn-color"]', function() { var $select = $(this); var cls = this.className.replace(/^.(chzn-color[a-z0-9-_]*)$.*/, '$1'); var $container = $select.next('.chzn-container').find('.chzn-single'); $container.addClass(cls).attr('rel', 'value_' + $select.val()); $select.on('change click', function() { $container.attr('rel', 'value_' + $select.val()); }); }) // Handle changes to (radio) button groups .on('change', '.btn-group input:radio', function () { var $this = $(this); var $group = $this.closest('.btn-group'); var name = $this.prop('name'); var reversed = $group.hasClass('btn-group-reversed'); $group.find('input:radio[name="' + name + '"]').each(function () { var $input = $(this); // Get the enclosing label var $label = $input.closest('label'); var inputId = $input.attr('id'); var inputVal = $input.val(); var btnClass = 'primary'; // Include any additional labels for this control if (inputId) { $label = $label.add($('label[for="' + inputId + '"]')); } if ($input.prop('checked')) { if (inputVal != '') { btnClass = (inputVal == 0 ? !reversed : reversed) ? 'danger' : 'success'; } $label.addClass('active btn-' + btnClass); } else { $label.removeClass('active btn-success btn-danger btn-primary'); } }) }) .on('subform-row-add', initTemplate); initTemplate(); // Called once on domready, again when a subform row is added function initTemplate(event, container) { var $container = $(container || document); // Create tooltips $container.find('*[rel=tooltip]').tooltip(); // Turn radios into btn-group $container.find('.radio.btn-group label').addClass('btn'); // Handle disabled, prevent clicks on the container, and add disabled style to each button $container.find('fieldset.btn-group:disabled').each(function() { $(this).css('pointer-events', 'none').off('click').find('.btn').addClass('disabled'); }); // Setup coloring for buttons $container.find('.btn-group input:checked').each(function() { var $input = $(this); var $label = $('label[for=' + $input.attr('id') + ']'); var btnClass = 'primary'; if ($input.val() != '') { var reversed = $input.parent().hasClass('btn-group-reversed'); btnClass = ($input.val() == 0 ? !reversed : reversed) ? 'danger' : 'success'; } $label.addClass('active btn-' + btnClass); }); } /** * Append submenu items to empty UL on hover allowing a scrollable dropdown */ if ($w.width() > 767) { var menuScroll = $('#menu > li > ul'), emptyMenu = $('#nav-empty'), linkWidth, menuWidth, offsetLeft; $('#menu > li').on('click mouseenter', function() { // Set max-height (and width if scroll) for dropdown menu, depending of window height var $self = $(this), $dropdownMenu = $self.children('ul'), windowHeight = $w.height(), linkHeight = $self.outerHeight(true), statusHeight = $('#status').outerHeight(true), menuHeight = $dropdownMenu.height(), menuOuterHeight = $dropdownMenu.outerHeight(true), scrollMenuWidth = $dropdownMenu.width() + 15, maxHeight = windowHeight - (linkHeight + statusHeight + (menuOuterHeight - menuHeight) + 20), linkPaddingLeft = $self.children('a').css('padding-left'); if (maxHeight < menuHeight) { $dropdownMenu.css('width', scrollMenuWidth); } else if (maxHeight > menuHeight) { $dropdownMenu.css('width', 'auto'); } $dropdownMenu.css('max-height', maxHeight); // Get the submenu position linkWidth = $self.outerWidth(true); menuWidth = $dropdownMenu.width(); offsetLeft = Math.round($self.offset().left) - parseInt(linkPaddingLeft); emptyMenu.empty().hide(); }); menuScroll.find('.dropdown-submenu > a').on('mouseover', function() { var $self = $(this), dropdown = $self.next('ul'), submenuWidth = dropdown.outerWidth(), offsetTop = $self.offset().top, linkPaddingTop = parseInt(dropdown.css('padding-top')) + parseInt($self.css('padding-top')), scroll = $w.scrollTop() + linkPaddingTop; // Set the submenu position if ($('html').attr('dir') == 'rtl') { emptyMenu.css({ top : offsetTop - scroll, left: offsetLeft - (menuWidth - linkWidth) - submenuWidth }); } else { emptyMenu.css({ top : offsetTop - scroll, left: offsetLeft + menuWidth }); } // Append items to empty <ul> and show it dropdown.hide(); emptyMenu.show().html(dropdown.html()); // Check if the full element is visible. If not, adjust the position if (emptyMenu.Jvisible() !== true) { emptyMenu.css({ top : ($w.height() - emptyMenu.outerHeight()) - $('#status').height() }); } }); menuScroll.find('a.no-dropdown').on('mouseenter', function() { emptyMenu.empty().hide(); }); // obtain a reference to the original handler var _clearMenus = $._data(document, 'events').click.filter(function (el) { return el.namespace === 'data-api.dropdown' && el.selector === undefined })[0].handler; // disable the old listener $(document) .off('click.data-api.dropdown', _clearMenus) .on('click.data-api.dropdown', function(e) { e.button === 2 || _clearMenus(); if (!$('#menu').find('> li').hasClass('open')) { emptyMenu.empty().hide(); } }); $.fn.Jvisible = function(partial,hidden) { if (this.length < 1) { return; } var $t = this.length > 1 ? this.eq(0) : this, t = $t.get(0) var viewTop = $w.scrollTop(), viewBottom = (viewTop + $w.height()) - $('#status').height(), offset = $t.offset(), _top = offset.top, _bottom = _top + $t.height(), compareTop = partial === true ? _bottom : _top, compareBottom = partial === true ? _top : _bottom; return !!t.offsetWidth * t.offsetHeight && ((compareBottom <= viewBottom) && (compareTop >= viewTop)); }; } /** * USED IN: All views with toolbar and sticky bar enabled */ var navTop; var isFixed = false; if (document.getElementById('isisJsData') && document.getElementById('isisJsData').getAttribute('data-tmpl-sticky') == "true") { processScrollInit(); processScroll(); $(window).on('resize', processScrollInit); $(window).on('scroll', processScroll); } function processScrollInit() { if ($('.subhead').length) { navTop = $('.subhead').length && $('.subhead').offset().top - parseInt(document.getElementById('isisJsData').getAttribute('data-tmpl-offset')); // Fix the container top $(".container-main").css("top", $('.subhead').height() + $('nav.navbar').height()); // Only apply the scrollspy when the toolbar is not collapsed if (document.body.clientWidth > 480) { $('.subhead-collapse').height($('.subhead').height()); $('.subhead').scrollspy({offset: {top: $('.subhead').offset().top - $('nav.navbar').height()}}); } } } function processScroll() { if ($('.subhead').length) { var scrollTop = $(window).scrollTop(); if (scrollTop >= navTop && !isFixed) { isFixed = true; $('.subhead').addClass('subhead-fixed'); // Fix the container top $(".container-main").css("top", $('.subhead').height() + $('nav.navbar').height()); } else if (scrollTop <= navTop && isFixed) { isFixed = false; $('.subhead').removeClass('subhead-fixed'); } } } /** * USED IN: All list views to hide/show the sidebar */ window.toggleSidebar = function(force) { var context = 'jsidebar'; var $sidebar = $('#j-sidebar-container'), $main = $('#j-main-container'), $message = $('#system-message-container'), $debug = $('#system-debug'), $toggleSidebarIcon = $('#j-toggle-sidebar-icon'), $toggleButtonWrapper = $('#j-toggle-button-wrapper'), $toggleButton = $('#j-toggle-sidebar-button'), $sidebarToggle = $('#j-toggle-sidebar'); var openIcon = 'icon-arrow-left-2', closedIcon = 'icon-arrow-right-2'; var $visible = $sidebarToggle.is(":visible"); if (jQuery(document.querySelector("html")).attr('dir') == 'rtl') { openIcon = 'icon-arrow-right-2'; closedIcon = 'icon-arrow-left-2'; } var isComponent = $('body').hasClass('component'); $sidebar.removeClass('span2').addClass('j-sidebar-container'); $message.addClass('j-toggle-main'); $main.addClass('j-toggle-main'); if (!isComponent) { $debug.addClass('j-toggle-main'); } var mainHeight = $main.outerHeight()+30, sidebarHeight = $sidebar.outerHeight(), bodyWidth = $('body').outerWidth(), sidebarWidth = $sidebar.outerWidth(), contentWidth = $('#content').outerWidth(), contentWidthRelative = contentWidth / bodyWidth * 100, mainWidthRelative = (contentWidth - sidebarWidth) / bodyWidth * 100; if (force) { // Load the value from localStorage if (typeof(Storage) !== "undefined") { $visible = localStorage.getItem(context); } // Need to convert the value to a boolean $visible = ($visible == 'true'); } else { $message.addClass('j-toggle-transition'); $sidebar.addClass('j-toggle-transition'); $toggleButtonWrapper.addClass('j-toggle-transition'); $main.addClass('j-toggle-transition'); if (!isComponent) { $debug.addClass('j-toggle-transition'); } } if ($visible) { $sidebarToggle.hide(); $sidebar.removeClass('j-sidebar-visible').addClass('j-sidebar-hidden'); $toggleButtonWrapper.removeClass('j-toggle-visible').addClass('j-toggle-hidden'); $toggleSidebarIcon.removeClass('j-toggle-visible').addClass('j-toggle-hidden'); $message.removeClass('span10').addClass('span12'); $main.removeClass('span10').addClass('span12 expanded'); $toggleSidebarIcon.removeClass(openIcon).addClass(closedIcon); $toggleButton.attr( 'data-original-title', Joomla.JText._('JTOGGLE_SHOW_SIDEBAR') ); $sidebar.attr('aria-hidden', true); $sidebar.find('a').attr('tabindex', '-1'); $sidebar.find(':input').attr('tabindex', '-1'); if (!isComponent) { $debug.css( 'width', contentWidthRelative + '%' ); } if (typeof(Storage) !== "undefined") { // Set the last selection in localStorage localStorage.setItem(context, true); } } else { $sidebarToggle.show(); $sidebar.removeClass('j-sidebar-hidden').addClass('j-sidebar-visible'); $toggleButtonWrapper.removeClass('j-toggle-hidden').addClass('j-toggle-visible'); $toggleSidebarIcon.removeClass('j-toggle-hidden').addClass('j-toggle-visible'); $message.removeClass('span12').addClass('span10'); $main.removeClass('span12 expanded').addClass('span10'); $toggleSidebarIcon.removeClass(closedIcon).addClass(openIcon); $toggleButton.attr( 'data-original-title', Joomla.JText._('JTOGGLE_HIDE_SIDEBAR') ); $sidebar.removeAttr('aria-hidden'); $sidebar.find('a').removeAttr('tabindex'); $sidebar.find(':input').removeAttr('tabindex'); if (!isComponent && bodyWidth > 768 && mainHeight < sidebarHeight) { $debug.css( 'width', mainWidthRelative + '%' ); } else if (!isComponent) { $debug.css( 'width', contentWidthRelative + '%' ); } if (typeof(Storage) !== "undefined") { // Set the last selection in localStorage localStorage.setItem( context, false ); } } } }); PKb��\TE-�n�ntemplates/isis/js/jquery.jsnu�[���/*! jQuery v1.7.1 jquery.com | jquery.org/license */ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);PKb��\r�;�tttemplates/isis/js/classes.jsnu�[���// Add classes window.onload=function() { var input = document.getElementsByTagName("input"); for (var i = 0; i < input.length; i++) { if (input[i].className == 'button') { input[i].className = 'btn btn-primary'; } } var button = document.getElementsByTagName("button"); for (var i = 0; i < input.length; i++) { if (button[i].className == 'button') { button[i].className = 'btn btn-primary'; } } var p = document.getElementsByTagName("p"); for (var i = 0; i < p.length; i++) { if (p[i].className == 'readmore') { p[i].className = 'btn'; } } var table = document.getElementsByTagName("table"); for (var i = 0; i < table.length; i++) { if (table[i].className == 'category') { table[i].className = 'table table-striped'; } } var ul = document.getElementsByTagName("ul"); for (var i = 0; i < ul.length; i++) { if (ul[i].className == 'actions') { ul[i].className = 'nav nav-pills'; } } var ul = document.getElementsByTagName("ul"); for (var i = 0; i < ul.length; i++) { if (ul[i].className == 'pagenav') { ul[i].className = 'pagination'; } } }PKb��\D�;��� templates/isis/js/application.jsnu�[���$('.dropdown-toggle').dropdown() $('.collapse').collapse('show') $('#myModal').modal('hide') $('.typeahead').typeahead() $('.tabs').button() $('.tip').tooltip() $(".alert-message").alert()PKb��\۸��%templates/isis/template_thumbnail.pngnu�[����PNG IHDR���Gl�PLTE;�33PPP@l�������1@\3f��Azh�:���P�W��,P���bq�X������̿��-U�>l$G����p/`�=i�����d�E���F����8�� 2XBr̙����WdtLMM���(D{�� *II{~��z�P�����:clz�Yj� "@Gv���*I�/ 6\���fff}��|��0SHXt�ff���-Rw�oI幻n��R��������G���J�I{Fb�{�� 0R�����𗛦�0I'J������rw�Ez$9Zڇ@!B���ATq2[�Ң�3��JZk\���� x�Lm�p��㜚Raz������2eh�����Br2Ik��സ����������;~O������1:j0ST���ڧ��x���̫�۶�����@mAs�ʛ���\y�N�������GVc���W�?Z����c�ښ��V�����r���{����ϽS�I[z33f��������z�ެ���fb��l{�������t��_n����S]t���3Jw�����Ŭ����Gv������\j�-lo��B|;e�n��!4So����ȭ8Gc���'D���`~�������s���DW���J�dl�鯵s�Ğ�Ճ�������$Ht :��������ɛ������������J{�����쪦����旕 �ɡ��E�����Gq�Q�ct�k����趺�����ț��������ž�Iavcy*R9cRj�=l:e6]Pl�$DjRe�Qt�#����IDATx�R�0��dn�1�惙JZS��o ��ߥ~a�n����v�f����s��.v�6��������B<A���A�����j#Q�C�s娔�������,��0Ws9�O.��e��e@���UkUef���'I������&'�VhD�4u�>AA�ee�7�iN�5_��[Y� Cq|��=-����\�{�K�e�!Me��ߪ��� 'n���UϺ��c�'��{�-�b�ת�d#��w.,J-�&I�&\h���s9Z瑓�=��ʛ��a@�;颌v��ůP�u�/�Gr䆛mYs~���̆7@��DX��G2_��?t�g�R����.� U�����Ən�ZPݏP�`kl��c���+`���� �W�u��tG�� X:�*�Wa���Yϧ�Zk�f�&�C�Q��e�c"�I.��ha ܽw�:��(��/kN=�� ��f���HZ�99R9�-��pb6=�t�x���n)w㾁�2��6�w4K:F\�_�$s� F��%��1���֎�g##a���dH��'mNԞ�z&@���q<0��1E�Uss<Gf��_�z�ɑ����r��C��μ�J)>�&'�M�u�ҎI�wp���Ъ�r&-d���"�O%U�Q�xD*��)瓾���}�D�f��l�?Y�n,�a�N݆�1�;�p�s��m绠���Z�F8�t V�\n�t�$ �s�8+3k��UR�Āk� �0�(+D!����4Wa���9B>\WE'Y7X#���8v��8~:d��+�.N"w4\]姳<�'|bٮ��T{j'����ht�?͆�fV.���(_Y��wX��e�ь� C�>F5�j���`�ņ��Eb��翇__?<�������i,Og4;���z���jvH�.%OV谶�ܚg�c-%{��Pgk�K<��-�Q&�v�:^���hIW�[�훽��t5;�5��Y�e$����k<��`B�ʅ����t��VK��(P�@�p�����|���Ν��6����� . �C��c�l�<�V�9/����@z���A~@�- ��A@%�k�˜]z�z��g�� Rzһ�����z\;�Ny� "�T�K���`�/�b�l��V�}Ȑ�����v��s��ɽ���}��;��.٠E�O�h���h�����n��b�&��<��ND�NS��Е7�#�gܴX�g1I5z�`�����0��|^ؼ;��:j��v|悔t�{|�s�8�w�8XX�c0��pP5����χ�D�����+.�,�W���h��Շ�zI�C�.�g_IOX�R��(�.Wˠ��ޓ��ʦ������jmy��Ь�s�]me�?�3�������Q�T�2�Q?x`��2���;�� ιJgi�ƀm� ��7 ��u����u������b :��ng~ǕȆc9:j��zH�ɘ�qӱ��p�+�� �6-���$:�nhȦ[S�,Q�olT*�̺͝�ξ�с�+�P�9j�;K�Iul;ݷ��!ԇȡ!J�=�نP���X�X Y3R�N0��Ut���>����Ji+��~�@��#k�#��C~>� Қ�+'^y�+_��+O]��]+9�H�N<����+��Ś�Aеf�6�+A��u�\�s��'&6�ؼy�O��į�:��8�ۜ�MJ�|pY'���IO']w���N��T�����>���QrI3�~���i2D���H{:��퐿m��A~���u�˻.k7�;��h��Y�0/69��X�YwY1�<�V�s`���Ï}���|x���K�w��c=����+t��>��tHݍ|��TUa/���UN�U�����s�9�B�P1�f��zz]$�Z������Cf���� �M�%� �1�0��@24W=r����s�D�����谈{�fŢyt���x��H��M�M��YqT�Y���k�P������N'@�ȷ��N� �[������_��x@GL^;z��c;F���0DB\K'����n�Y��:�Q��P�������_F�P(l�H3�,��%o�2����r��ds�I0`B�;�^��HrH���Y>PWП;Yf��l�'u��?ɯ�g��֠N�Pd�0M��Q��L(�T7Q/�:���Mm�� 4�u�1��0�uaal�79W���Wm���q\�s�GP�>[�N�^ �g�-���#�M^bP�����s��%S�i���k9�����. ��&cf+DP���yg@��J+p�n�X�2÷�p�����Ρ���Lg�N�e!�ȱ��8d����HEq�Kw�,��M锨 \t��lIB<�l�l-�D��2B�iqu$Y/�R��E�~�Q�k�X��l��Y��1�}C�~t(M����$���9�dsG�u��"K�_w�-���=�Tqt ���=�un����X���;]�}��+��G��:V�L�:�s�y^���|f�[G ���lu7�����jݝ/ժ�������d�����K��pi�U��rK�����E�b�B�u#Xk@ҟ/;ʞ �sKy��1+9X��[ ׂ���`j7O?Q����Fr`Cw�e%���]���jM�<�ݍ�uc��љ;�Ė-S##0 F�"�E�f@�A�%h��iw!z��y��-|�5�~�??8�K.y��k�m�`��d��ݖ�p����,�\PN��a˙���n����Fc �N ��.�N:���S�P���1�5���ۆ�`pK^g�ъ���#����^"�϶!��l���Oj!Ph�o�it���w���<��gSS�L���0gm�q۱-�6�QSm�y��$������s�871�c~�am0������ u`i�b`(�lc�����xb�HJd6��\gۋ�4_&�n�%�Y�n�ރªH���'�fNX��Q�����/����6^�;�!(�n\֡&C�j�ZC�@�'M��T�|�k�?�ell��dc��BC�GmZs,ƅ�(x���Z1�Ȑ�u�u�s�>w�ч�����Ӱ��yR��m�A��B5w C�%��7w7&��X�l:ۆxF� �Q�����* I���rH�2��O`!�m��K�4���l���É!D�G�C) P�@Fqs}G��ժ�v�~���ܢ5��g�y��'_���_�d����]�<~�m�^F�݊U"��⪀Ja� �lIv+����=w�ɹ���ɱ��=��Ͻ^��'�Q�ȱb�s��dj�H�B 4���� �:Y����+�E�9`�gTd�5�"k���k��8:��㸁��� ~ï@i5wo)]�ܝ4�0�ZEB������9�J`N������"g�}�[R'lJG��N��k/��16zm�04�k���5�л�d[� �h�襂�3o8sr���ɭ�'���C4�k�;�1E:r(��`��M*:�QL �21����W�h��:0$���wJW��,^�u6O��F�d�ư~�R'���t�*O�s:�����չL�� �?*�eI�b�+�k����U}^�bIG%�M��6��-��a��*�W���BSl*��[Au����&���u��Y, ��j�����֙e(��У2�ô(ecQ�"˦vy�`1+2�1ؔ/r.;<�f�Ŝ��(�W��ZTz�~�'���iJ��3Jm���.KdNˉB�:-�D��ጴȹIU�����$�� ��s�8}c��W�"�7��.+�s��?�����g�{ս����s�u�G�x��*�A� �R)ᴕJ ����:�ξ9�装���r�D�e���=��d�w��ݑzl�1��=�}���V�=�kKWE�.��m���\����\��?�;���o�o���'�Kqd�$��Ű��}�!��j�������QhJ)�8���9���U�:�v�������?�s�4�_��Q춶̓$|v�y�+�� ��k��.Z1�VJH0%�GMa*�' ��� *����DF���}���H+j���п^M�R��z��}~ޥ\#�&�B]EG���j��Y=�j �T}\\mmr�#2u�¿� ���#8Up\���{��Cv��Fm/��X�ba�V4��T=i�>�M:�P��� ���u�'T��U8�5P6i]���tv���j��f�h�Q��2��@�u�h��t��(hpQ_Ů؝�"����t`�d��p(����蘮�Ϻ@[D˯�@"��{knVF���V��Q 1�hM �^�]Z���f#]l�Uq�Tn�<�4��y��}�bɒ�#�lK���m��(U~�����K��u�N7�C�t��✕Yg!��[�]��*hh��%*��މV�x���v�l��{y�GY�����AcS��q���@���R(#E7����u�e��k�G�LL������^oޞ�[��@#?` �P���WN�{ %�:F��U��r0x���tRڼ� �$M���kOkoub�X)D�]�Ξo�z���$55��Re SMq�M� V� p��E��R�P[,h�>J���lfM�������<��y����5�Y�N���8�>B((Gx�~�2�q�oh��"#��FG-�|H�lwN38LM����7E����Y�1t��B8�TQ@�ǡ���g�K�Hb�"�Mq��1|b�X�N s벸��.N�g�4�'.[ e�٪�fS!M#{-)����i �DF>DZs�PjtT?���\�~�m�,�v�㳌<�I`�cggG�*8!mw<:L�-s�<�����Ύ�u�MA��K���]=��u���⣇e��g��c��䋐��nS���k���p�ѱ��n��9 �y�����F��M���SfS���M�x4��QJhr��TG3����óCQ_�G��O��a?�K�5y64¨��'ggVgq<�x_2 �mQP�*'�A_�m����ڛ����V����x����JFb ook\��Ǐ�٪�.|�,��x|}�(NF�OO����Ӵ�I�|v�g�$�]x�P^[J�Q 2?;�P�����,#���TW������_I9?;�����l6���>�8��G`jo��5J����Ð��莣KR�Fk��x��N�c��i��e���5�A̱5ƴ�Ǎ8m����&�LR��/�>�~{�/�⋸l�[|~�.pe�ۓ4|���,C�H�3�"�� CKp8��D����02X� C�8�l(ᙸaE��Q�*Xn|g�̯���և���a���g�9�yCI�8}+���Ex���G�G��Z������.e��XEQ����\��$�����L�s��b� 3���|���L��">rb.���Ge~��7���p�l���ɮ�U 2$6;�h�5�G7�{M����r8/qz�Aь�3�^*5�x�]��k�fiQ�� �� �5�s��g���w��E;>D��>�A!�7�s��$8Uu��-J��J�D�t2z��o���)V[ >ì7��(�U�C�W�</�Gp�5����8�)�eE����(Q>��7$4(�-�g� }�o�4[PX���ͱD�];�u.���8; ߘw=> �Pl�|B���`��U���2��t������Jq�p@P�����ͧY��nדR�Ex��f3�����ӑ�ߖ��r��&1G���`^O�)͍�D7��G6�N�(�DJk�z�3k�.�~�����mu�|�ߗ�`����iZ�r�nıX�W�o�5�p}�-=Z����t�D��ht���Ū������ 8�ms��<� j8��d���-��4:�I�<��k(P?~~vf8bЉm�*,;X~(�[Y�9��)u��Y��>���-���Y��Mu�����tr>�x�l\K�#�����f@�����Į,I���D|�M�W������ ��T��{M�7���%<���69B^��~���2�<��+�T:�i���uZl� ����}{o�S��(s��XE\� �������5�A�y*0j��O�L%�e �wA-w�7۸餅v�?V7[WIx�.�q��1e��(,���� �ہ���OP��IgOw(,�9A%S2"2#J���6���z�4��#������6����A��H�`���i�rv��������yj���l�nyv�Fl����,:�F��Fg�H'�Mq�W��9$������xȄ��i:�ёtF�[�����it0r;��ze��T����M�vā��8-q�i¬�cm�[RS��W�x͋3ޠ��_� Dd��@i*г�La6�͘ bv���V���8:�9IoM�*h�|F�T�>�Ѱ�s��R�ʘ �C��8Ē�Nu��)$��gͻ�i��N�s�;��<����j�Ӎ8R�8�[>Au�Y�ʼn� ��ȟ#�>q�Q�'{3h�AӲ��n�{'��jq��]_�;��0�/�Q��H1��ߵY�uC1�(gn�-t�9�څ�DP%=?���H���7��r،p�!�L� ����X����Y7��D� V� �R@�(�F�:�\��;��^�^��whė��o�"��46� �L�euP�Κ^�| [t�� �б!�e��8Ɇ ��ct��� �l�l�J*P h�W�W��.�֒l�mv5U���*[�^6B��N��<�aj�z�<�^�ppB�P7�q�lMw���#��3�O�wn�y��������(���A���I:��p�*]yr�t����H�7�p ���h��wjك=ٚ��%�.ֶd�����of�+�9���h�7q��;9����O�sIEND�B`�PKb��\v�h�$$templates/isis/images/logo.pngnu�[����PNG IHDR9�D��IDATx��pT��/����p�lw��[�ݩauW�X��.uo%��;R.n�6���O'��3;������B�g�U�&$9�yr6��o�vk(��$bp�`<JB2[�KQ�������"t��L������.�EP.�C�L��'�\X����x��C�������2�JCL&S`�g����ѩ�[Pn،l��8��������3�A�)���y�P�������D.H�"��-��b2����H��q��|����Fh��'�7� ���3� &���P>�k�&��L�e(�����a2��9 �C�����|,� ��d2ó���e-Q�-�x�P~�� &�)p��o(_�eU���{&y�%�/�&AL&S`�'?��4:�֔�"��Yo���O�.�8$�(���K|�/�Ĕe���z����}|� x�!��8��_�t>������%:I~�����}� �,��[���z��!V��1T��H$��O:ID�7�[�T��N,A <��oĔeM����ᯡ,N�^�,A}�������2�C*T:�a ,h�'�v�I�۫�t��U�d�����C[<�_�z��h�fxLfx��o 8�c(�P�>0�h��P.Gu������:����3@�6��֓ ��u!:�]v̅J�\T�d*3<&3</c1��>�`��'8�O<A����2J������_oY�HZ|"�\��������F��=\Dkd�vg���g��jt�jK���l���٢�-��[�*y!���ʅo����ڈFY�E t�������s]�b(��� :�l!U7�,U��Zm�-�Z~�=��6P.l5�c fx�W�!(�"�+u�ס\X�$:c`�s��T#:���;��,P.�b�� ���؆/��,<à\8<u�5�+:���H���*�ٔvұ���;���f3<�@b�@Q����IPμi ��Β#i�_�^%A�k7�g�h�}{��[P�������ס\�(��'ʣ��*�0$�Bu4@�4 P���lȥ� q��i�C�A9d�௭���n��( �)�*��&��DT@>��v�l>�5�O.��rfj�5��_�nn�TT��t6���E��m:���lz0�q΄-2�=���G7<�-8�{H@2R��D�p�xC9�4�P,�A�$!5M�qG�#���8�8� i��"~� �i�C �Cxݐ�� �D$��!R��d�#;�&�#���SO�=D�:lHD�ݯ��a&����_����Q��cx�2ʕ"� s�c�z���U]�Nt������ec�=���o��c���3��nb:A2�0�#)��~�d���#�E�o��l/��8�?Ó�d�Axr� |����������d�k�ᩁx�Ŋ�U�=�a�a.^zU![p��eT�,��B�.�T���t�3 �IxZb����4v"Q8��p��#Ζ��؏m؊���D8�� �A��>W�w{�]�F�{Ԅ�V��Rp����gێ�^�h�\�.Nk��G���Ea� �]�9<a����Q��ӓ��H�9��{���� ��4->8��M�=&�yq��}l�H��rC49Qm1��&m) Bh�p�C������1��b:�ю"�`x�w��E ��h�g� ���c�-� @4�� ���w�3xі��p�;X��AY'_��������1���8e��÷]V�3N��)T�8CX��u�y�e]��t�<��Ɂ��5�DU��`0N�~;P��'���9!nʅv� ����������N!bPv�W���{x�V�1��&��U0w�/I`zTp��!��gv���� ��)�-!�I�0�AX���|q�L����@f <ٱ �[��/(��H��(q�;��$B!^b�9�G/�!�v8�~��x�N@\��q��E!^P�n�_�^yFT�9��n�sqcXN�Q�k�{h�d(>X���:����g�}�!v�����3d�p���b:� ɀ:���$4�d@軃Rn^��A_*�B�,7�lx����f�W����ю�O�2�l�C��bD���˾��z�;V��`�h��.��֩z.HK/<Ep��C|�%�KAc�f1�]A%����U��"<�Q�A��gH�9�k��E[��>>R.<}g��g֑�>������g��pfZd��᧙0�J�9�J�P��gb��\�$�S�W �h=r@Tz�}�P �c�o%$M9܃�q}q��$<g��A�@��m��L�� >� ��s�>�B��uH���ؼ�ި��紑� ��E� ��\�9ci3�|l4>� L��k���/�!�;���S��}}���w�d���"��@�$�m셾 ~�% �C�# J�����n0sG�����D�4~��u���S4������`xr�w��� ��tQ���%�O�C�[>�;>����&�h���u���Ӂ�(@3��||b-'��3w�?;m��'�U����H�g9�,mg���X���,�C_��!��B��-���<�[���S�v��U��AC�Bx��r�O�/��&<�u�@x�U�l�Cx~s����7����Xs����P�O%�9�����B_f��f��c�[���S�.<6T��AU�ejx���&�3}f�8`^T���uo8=���l���f}g�����,<?���ym��G,<p�zB��ڽ�/C�:��|}g��T���S� ��a���X�\H�~Okdzdh]�":�|kV�SR8����`�\&7�>(>{D³ �f+�M��A軂��S��b�}�Xx���=��}˼�IP.�CtD�)n@�������5b�k���w}ݏ.�g�\�`}�������!��~��_ i )Nb��/u�Tx�c��ҁ�w�\�q��������u����~��c��P.l ��w�335`����R��;D}���#�q��E�,�ְ߿!>6��Sm� mP�[�yʅ�G�M��Q!"j�E{}t:��=�>s�^sO�8�E�ʅ��N<H�{��G'���]�p�V�� ^�_B_�@�\x����*�A| ;f"���2�P.�83u[�ƃ�|ڼ�ǧ�9��{T���!�p!��raS�E��B_<j@4%q��0�E�q�bP�T�o �z�&�ϰ�THOe\��K��� �@O;�@��đ�v��ɑH#����)5����;�?��.����*�B0J�3��MU1Wa��*��� ��~������`<�C<T�"�{���4�5�K��!Zc�<Ou�����& !(�i8�T(b���{9ux]�n������/�hމg�.�[* ��AM�JG".�U��x@e"na7�b:��Y��0Oc�¯��Ѯ��E|���m�h�5�S.4�pD �;����>�w ���SPE��܆��13<@�b3�!rB\ȇv�]p��o.��H ��G''�����4,�m��t�����/�l�-9��MH8��X��Pn�Fw�����E��p&������� N �vo�� ��/�G�A6�3�O���p�T|����&?f�*-'� Vh_�����wGe�i <k�h��!h������3�����$���yp3x��%a�@ܐc����x!�kp�}lD($V�Rxރ�i/X}�In2�-�P��(��(L@a*⡁��}��QB�`�ߢ3���#:�ɡ��|�Pă�O5t���op�H�����@KH�%D���j���Cx}P�E�0�����"VcjB �Ms�K�y 6��,�M3��ik�f� ���c7b�WK�]l��ة����u!v�a/� w���?���+n$��Ыe�䐲q���}���,U�C]�@zb�����(��B?�8�?�f���?(�h��x��<�nh�Z(�@^TA�4� �AE�ǭ��/(�?�ݯ��ݿ+ɀ h�`�&�b����;'*��&���Gs���A� ��P����� *�D��� �CL&S`�p�ǒ�"�}�����P~p!&�)p��'�����|(�Aq��d ��\�����N_��7��H1O<&��� P��0���X��1�� b�L)��ۘ����w�<�� &�)p���?@��wv1��CL&S`�'��ܐ�~O=�B��D�}�e2���v]�ʠ����e�]���L�OZ|c���:� @���)܄r�8�@L&S��G�O>�E$.!7qs�dj|j��u��2va �BL&S`��G.����m�IEND�B`�PKb��\��V\��)templates/isis/images/system/sort_asc.pngnu�[����PNG IHDR�|�lGIDATx��G@!��^�Wp���';� �7�K��������U��6=ҢŎ4k�$�U��OT��A�x���H���IEND�B`�PKb��\J!G`��*templates/isis/images/system/sort_desc.pngnu�[����PNG IHDR�|�lNIDATx��1�`^��4 /�q�+�jo�!2�o|�u���\\�b�8�ڭ���ݙ��ZL`��0E�1��i���T�IEND�B`�PKb��\o��;.templates/isis/images/login-joomla-inverse.pngnu�[����PNG IHDRJ~�s�IDATxu��]QEj�f�u��V��fX�VT۶m۶��d2y�o_�=�\�HfߙD&")�T����V��r���"IO�Uh��ϗ1�1`JC 2'��Z���7>q� ��|� ���&p�ĶT���_{�3��I�����"-X�1�ۨLm��G�i����i�m� :�P�2�j��sғ���c'�ޓW~j8�نod���`���+���ԧ��c��sY�] ��`_iH@yni��M�"�@��q��@^�q�.3�͗p%7l�\b?�/����0_�1Fq��}9n�2�;zv�\M5zK^ sS_���dZ[5�F=&(�<o�%$5������%e9d���Cq����0!�~=mo�ڔ�P=-4�S��e,L5����g'�B��ShMh�رԡ�TD|�)*4Il�鑎ԔΧ�f��D:s�ޤ!��H��P����Q�n�mIEND�B`�PKb��\�*X}}%templates/isis/images/printButton.pngnu�[����PNG IHDR�aDIDATx���^A�ϝ���gk۶ݠ�Զ���Fˠ6�TQ��ڶw�{�w_�k}���99wU�y��&_c� �@ C,��/+C��;?}j@�¼s�Ko����5\xM�/ŭ��H�*. �������%(G� R �#����%�2?R���||��o�T�+p��@�RU���"�lV�S�Bz��: N�<����J� HA�Hr�|�5�� E�ƍ}U\�V�x5E��X��+a8CCp"oIII�+X�gw���E�� !a ����^%�n B(�ٳ�Y�/Ι3g69_��:t@pp0�¾}�����`�!C�,]�DC|�� �ڵs�Ç�(˲������Q\�����q����2M���`X�|���P͚5CZZZ�{^UYY���� KKKQ\+((�x�flP!0��S\\̏9 Gu��Æ �x�Z����\ѢE���CG�m�����d�=}s��Ebb"lۆrz�����Ɏ�p��C8�h K ����QfY���S&O��Ԯ8xp�� �� ��?XJ � t���`��}u�$�r�:2 ?cBIEND�B`�PKb��\S�IF//%templates/isis/images/emailButton.pngnu�[����PNG IHDR�a�IDATxՒ%�UKF�̹�_��]#����h�E_d" ��;���s��������ߗ�O�8r���#�ľZ���)�P���S���yz��3�B��=hײ��`*�Z:t`;i�JD��">\����t����<j�d��[�'�<(��Y�M�ӺG��ky�����W�.��Ǯi�M��Zސ}��da>ɝ?*�z63IAЀ�!��� ���ߗI�'�H���4�qg���B�k3�:�@*"htu���D���8B�A�G.���q�21.|��$�[��'�fI�b�/ĉ^m4B�c;D��i��Z!W���s�%�,r��!�@@``�(��J�.�3 B� �F��� ����Q�#�B��d&��!%t��\O�r�O%�F��`}:Ɗ�ī���L'�W;�QP� ��'���-FE<*��.B+���V2 �I�ku��B��U��?|+N���!0$H)��W�^+ױ�a�Y�>�>���9L��_rS��IEND�B`�PKb��\� ��&templates/isis/images/login-joomla.pngnu�[����PNG IHDRJ~�s�IDATxu�3�&v@��X�m�J�8Ml��٭m�Z۶�m�qn���on���5�.n�2�E?h�8"�X�����+ 5$�<�!9��y��ZIj��_|��*E�N�}�$�CC�T1C& �uJ~ӭ��B�E�����0ë\�Ѝ�7��n�p���U��|κ9��+p���l�i�_p��)x�O�����FZ6�KA�ɀ�`�b/9�h�Gi� �f�Nn�?x�n�)�ȏ�ܬ�������>�f���h;���F?� ��H<�*~��w��V�_4�,K���9�{�.L�`�b߂s�J�'�O`-`��o��nM���w��-,��}��\����&k%g��o!.�"Y��Q&#�I��= 9��<��2 �>4�����������A(2�� ��,LU U�Q]�E\����*����̑]SIEND�B`�PKb��\%Q���$templates/isis/images/admin/tick.pngnu�[����PNG IHDR��7��IDATx��� E� ���!��" ' '�$�߽W�?n.�7�7� �|��LL������J�֑���K�B��]�� $VL�3��K9t�g� ��9@]�v�L��JQ]y��M�_�\�)�����3q�÷Ì3IEND�B`�PKb��\U�M�(templates/isis/images/admin/filesave.pngnu�[����PNG IHDR ����IDATHǵ�KOW����g��Q#��V,Pc�"��`�H�t�,Zu��#�UR��Q�HWi[�* �t���<�pC1�1O{&��ئhIUu��+�9��=����G:k��h����EQ�c���ܿ�`1�u�k?�}��|������,�*cR�/W��,�w:����\���&���$���PO��.���p����5n�)loovw�@Qd@�}����۶4w�<��2�ւV�-,,�"8�@Qu-9:ha �R��dj��P�����H̕u#hC<'��*�QȊ�"���1�s9��s0���088������[Z�aT���BGGF`u�d.d�'�3�`�Q�-b���A'4 /�JB<��\�k�����?��S����#�t�'�O�����Ξ��cY�� P��Q@b�x� �O��Ez���F@Շ���D��'Ʊ�1��-0 ���ح�N z�9LMM�����K�H�P�)�~�حT��>�=x���4ꗎj��&&rp/M�4~�u��:NEf�Q:�)&3i��Mc�F��c�!0??�>,m7[���bs�B��a|� $l,��!��&��ZV˱m��2 ��i����T:�&�$S�8k+�Y�l���R�2�W��0yj���8Gs���ȃy�^�#Gy�iZ�,733s�x��������<p��u1=�@b'E݈w�omm������q ��ߙ���04�&B%P��r���C&������I1nnn��.YA���c٬�xty�J�έ;������ ���j&���ԍ�Y�6H��j��N<��^]I���e0M�ض(�����h�ժQ!T��*^���`B����,?-��̓��5��]F�~���y��z�N�y`�y ����X�?�� b��Gz �φ(3�$H�p_���}�"�IEND�B`�PKb��\�o3p$$-templates/isis/images/admin/icon-16-links.pngnu�[����PNG IHDR�a�IDATx���Q�O\��S������I�m>۶m�wgv϶;�wP'�F����0ESk{ �ᷓ7~Rn�L�3:�Z<@�ą��9��b�b�k"[C���ډ�Fd��VNL�6� r��S����n���/儞�H�'{�ag��3���RX$wS��1����v"����yp���..��s{V����� Ǎ��h#¾���].��{�c�����;� ��"�Kz�KYy9M&3M��<���;��-o��+�#��>vvt���A���g�5L6�y*��i���rOm�-=g|e�&�ɨ��}�k�<w��O��9�����<�a���:��0��K<���Ǎ�K�s�t/���tT�{��XM��������/x�@�����IHL�5�䒙orqٝ4�V�Ν,�Yq??�͍���q�Lm�����+�r2q;�x�G<�ש��i.�ō�B�J �e��N"n�j��{yt�+��i@IEND�B`�PKb��\���F��)templates/isis/images/admin/downarrow.pngnu�[����PNG IHDR�2j�IDATx����q�sP+�F�1�8��jۊjۊQ3�m��g��{��[~��%��߷�����@;�y�y�����u� �p����g#* N�����,�/G�����*Ny���AD��,+��!�O/T�tf\u�!������]`&�����^�8������b�}�C^K�,�����:;|xdr�s%Cfa��Ձ�B+m��*�=yH(��d/��_C��GH � ^Vj�ߨe�}�}�6�v��=T�K߿�#!������� �fs�Z f���R}}�5�����RSS��L�x�b�du)@�Ղ�*z ���=ݥ��Fy-e@�� BB�h�C�+���B�|!������ׇ�"^Qv�>�\C��GH � *ݥ�?֊B�Oy4�y~�IEND�B`�PKb��\�f�ʟ�+templates/isis/images/admin/note_add_16.pngnu�[����PNG IHDR��h6fIDATx��3��QE����o�J�v���Z۶m۶mdm�z{�ƞ�wFw�y��%� �E^Z(��u?(5�)m�=�?HV�(�>��q�6 ?��T���" �aΚϴ����m�SGٮ �6ұ��p�$��*X�5!T�f-ؽ����u���%|���x|�m�)<��"!Ap���&˂�.u���� r*`/��x:{��w�?���8�B�\T`W��r5{U�O�:r*��� "N�lhL}r��]�7�Gѫ�s��j8xv������{� .M��O�K�y�Џ��0|���/�e��S�6;;;��n�p<�w|g� ��i��V$IEND�B`�PKb��\_j�Ӭ�(templates/isis/images/admin/featured.pngnu�[����PNG IHDR��7�sIDATxc�O���x=^�����)�*��O�}����h �あ��!P,n����yTi _$�f?��D�|��`�r&�O�}P��A��"YT�g�7��T��d?L1� _�����VNIEND�B`�PKb��\�HD')templates/isis/images/admin/publish_r.pngnu�[����PNG IHDR�a�IDATx����q�o��ݳ�m�6���?d�v=��]S�����;��{�9ۥ�HjҔ����BK�@3�W�栾\�_Q >E9��ԕ�+��'����µ��$�6���=>X��k����9�si�N��q}����P�:ϸ�y��D}"]��w�^��=�.c)��(���=�&�vU�T��Y@�W���m�������s�M�����p����6R�̅���M��дwo�g��")6��q�g|��#ؽ�bą6�^ ĆUO8�/�+ۗf~��>�ZႮ�0'�"��EOm\b+�|f��$K-a.O6�M5/������:T���j�8���,��x7��gw���j�ՕW�uhC!�;B��P^g�Ԇ��N���Nܗ��!���e�����15m?�&��Nh�%}K��x���"{$�i��Zn�P�f E6�&0�}x��F��G�����h�0IEND�B`�PKb��\�И��+templates/isis/images/admin/collapseall.pngnu�[����PNG IHDR E5N$PLTE���E|���������������������� ��tRNS@��f<IDATx�U�I� A�d��I�(}�� �䢊�U3U7�i�C\�v��>���*��a�IEND�B`�PKb��\۳��jj(templates/isis/images/admin/sort_asc.pngnu�[����PNG IHDR �8��tRNS�[�"�#IDATxc����Ǚ��$�1�d1�L �d� ��"r�m�IEND�B`�PKb��\�+g_QQ%templates/isis/images/admin/blank.pngnu�[����PNG IHDR7n�$tRNS��� IDATxch��L��IEND�B`�PKb��\<l#���'templates/isis/images/admin/uparrow.pngnu�[����PNG IHDR�2j�IDATx���A�:���^\�zq^�ƪm+�m�qQm��ֳ}���'��5&��=}����X�N�5���}���WQ+�LMW;�NM�8A��@��S�����L�� ��m�c�9y7\7�?��J3o�!�� ����N����{�Y¨#Q4t�X,BJ:�F��Z�M��6���I�m膴����<¨��PyΡ�|���6('�o̓��xF��ˮ��M��� ����j����˧O���vz��E����ϟ���P���,}��e"� ��r ��%3K6��2A��ֆ��.8yיY����F�,���K�.n�%8�N�Y ����l�X,&�ܚ�� �#�^}>���v맥f��Ǐw ?��,��~�n�&N���Yz��m��^�W���bڿIEND�B`�PKb��\|�מ��)templates/isis/images/admin/uparrow-1.pngnu�[����PNG IHDR��h6tRNS���7X}lIDATxc�O" _è�G�O?�|�X o<8��v,4� ���W'��y{Ѷ��Oo��4��V�� �`j8^RS�@SRRpj��t)]X��ΛD{���9w� �84�ӝsKguIEND�B`�PKb��\w��WYY-templates/isis/images/admin/icon-16-allow.pngnu�[����PNG IHDR�a IDATx��%pA��߫�*^�W�&��#WTQefffffff��j����Q�;�,����/M�R��FRW>+��]Ç�3%SǕ�.�����k?M��̨!o}�l�>����(PHm�:�V��3jO.헲sNs}�s��ֿ���sFl/U��O��$u��u�T�����r�|&��ޛl��^*��Bө�μ����0B�UXx��^=��X�����DՁ�u`�B+�ѱ�w@#��m+��qD1B���Ա� w@�J4�Ǯ���'+���f&�,��IEND�B`�PKb��\x䪅��+templates/isis/images/admin/downarrow-1.pngnu�[����PNG IHDR��h6tRNS���7X}fIDATxc�O" Yè�����;:�hwK˖��� �jk���۷85�FC@ ��t��Y��~�~,) �zm\�K�ӟ_�<�7<��p(��w�'C%�k �y�j�IEND�B`�PKb��\w��aa4templates/isis/images/admin/icon-16-denyinactive.pngnu�[����PNG IHDR�a(IDATxc�����p߀��� `��"�M�(�σ==^f$4�ix�������~����": ⱅ6N�π�_��6<qs��6<� �����������GN�x�萆����y�e��ݶᡛmÓ�8����K�]Æ��a�*Lw�k���rbo������6\3�h��d���C�;�� /��p�h�Ec���fZ�\2Ѱ�e��p�\�ᨿ'V|�ڸᜑczᔡ�c���� D`�i☾��Q}��oB:��l�@܀�4{u�8���@���u���IEND�B`�PKb��\���F��%templates/isis/images/admin/trash.pngnu�[����PNG IHDR�a�IDATx���\A@�̲�m�����q��eP3Nj۶��ms��t�~���$<�ˡ~��h4��ͯ_�����6m�tv�ҥ3*d@Q �2�9r�ȁH$"�?��7oʎ;6���^93i8~���ˤ�e��2m�����={]��*���CnIѪs�)Z� �L-;��lܐ�����D0 �-�~�����aS�ƭ��s��!/��������~h��ƈ8�ī�>��/��ĕA�qӣM[��0��p��OA�z���8��h*��L�"'J����\��ee"�D��(�a� D��a[�3��8��c�n��f4��'od�e3x1o�����&=�̴��=� �A\�*��FQy2P�,�y�ɍΈE(//ϙ��_��FP*w $���Yq3}ԹƏ�O�k�bhBp���q�,����7�̜Y�b!�hqIEND�B`�PKb��\�PKK,templates/isis/images/admin/menu_divider.pngnu�[����PNG IHDR���IDAT[c<p���P�BI�u�:�IEND�B`�PKb��\Wdt���+templates/isis/images/admin/checked_out.pngnu�[����PNG IHDR�aMIDATxc� H�-�0u�����_�r���n�Dj.J�1w����F�����̂e+_�b�{ _����|����Y��� +֬�|��x5�lX�b� �.WQ�2���� �0y� ]������vN�������2m�y��7̜9���_�0c��/�����U�����d��G�����c����*��?o���G�� �%�m��t��V��:�6`O:A*ZqP\��P��߿����K�O�:����3�/_������96� PPQ3�IJ��cמ����9�߾�����_�i��Qq���s�BgI��IEND�B`�PKb��\���F��*templates/isis/images/admin/downarrow0.pngnu�[����PNG IHDR�2j�IDATx����q�sP+�F�1�8��jۊjۊQ3�m��g��{��[~��%��߷�����@;�y�y�����u� �p����g#* N�����,�/G�����*Ny���AD��,+��!�O/T�tf\u�!������]`&�����^�8������b�}�C^K�,�����:;|xdr�s%Cfa��Ձ�B+m��*�=yH(��d/��_C��GH � ^Vj�ߨe�}�}�6�v��=T�K߿�#!������� �fs�Z f���R}}�5�����RSS��L�x�b�du)@�Ղ�*z ���=ݥ��Fy-e@�� BB�h�C�+���B�|!������ׇ�"^Qv�>�\C��GH � *ݥ�?֊B�Oy4�y~�IEND�B`�PKb��\<l#���(templates/isis/images/admin/uparrow0.pngnu�[����PNG IHDR�2j�IDATx���A�:���^\�zq^�ƪm+�m�qQm��ֳ}���'��5&��=}����X�N�5���}���WQ+�LMW;�NM�8A��@��S�����L�� ��m�c�9y7\7�?��J3o�!�� ����N����{�Y¨#Q4t�X,BJ:�F��Z�M��6���I�m膴����<¨��PyΡ�|���6('�o̓��xF��ˮ��M��� ����j����˧O���vz��E����ϟ���P���,}��e"� ��r ��%3K6��2A��ֆ��.8yיY����F�,���K�.n�%8�N�Y ����l�X,&�ܚ�� �#�^}>���v맥f��Ǐw ?��,��~�n�&N���Yz��m��^�W���bڿIEND�B`�PKb��\]����3templates/isis/images/admin/icon-16-notice-note.pngnu�[����PNG IHDR�a�IDATx��3�XI�o�}~k۶m7k�F�:�/U��I�&���4���.g�7���7��L�1L:�?l O���N�y��X�ָR H��p��(�;��l������1:�/DU>w�����p�j���Q����G�b�G:�����M*wx$� X�W��ЧD�����*�a<$�����BA(Q�����f i�lN�)�畨PZڟw��O�/���� OC(�-""��"b��?�G���#�K�����O;䵴9d$���t�d^�۬�e���""Zd����P�&�B}� ���㚡��S)��6�W�K�����t_�����U�E��M��q��G4�\��5E�c����t""*E�z>���ʣ�&�K�? t�.�W�5��� H��xS�\���a�)2�$`0�������IEND�B`�PKb��\�}�<kk)templates/isis/images/admin/sort_desc.pngnu�[����PNG IHDR �8��tRNS�[�"�$IDATxc� � ��?���3�2A �$F"w��.IEND�B`�PKb��\TQM?��1templates/isis/images/admin/icon-16-protected.pngnu�[����PNG IHDR�aTIDATxݐ��a�7��醵�fnm۶wr��ضm3���za5�x��?���-�X|�����b�C(���O�����+�VX~{{d���?������?y-��I�XJ��u�������Z&�[.��H�L�� (���Q�������\���G�(�?��S�=���?����ɢ������bSF�']��8|��銀��v>74טp���x�\�����lی������c�������3��;SpilN]�g �:��7 �� ��d���ő�������4`��ۯ�}�ՎLq9���t�U�` �l�՛p��ʀV���I��HIEND�B`�PKb��\\�Y��)templates/isis/images/admin/publish_x.pngnu�[����PNG IHDR�anIDATx���Q��_mۍ����ncm����;{q�):�Z{Pqj�տc�&��y��������s£�{�R|gŻ��QlxJ��A��'� �z'S�5���G\�o?�8���-�Zl���I��E��1�O�1v��J?�n�K���)����P�4��Q誻�Ӎ���1�~��|`�4o�T.��¡Ք�@'��>�{EZOF�,���s�ݳ��T6�����H�uϳ�d�rt�����Ral��+>E�j پS~p)��C ��u�ܻ���^�@�|)��'6҃�nן����;�Z�Al�oH�ހm�~�/x5�z|�.7�7��n�Q��ov ��и$z$�{[H��Nli���OIEND�B`�PKb��\�%�~��)templates/isis/images/admin/expandall.pngnu�[����PNG IHDR E5N'PLTE���Fz�������������������������]|tRNS@��fJIDATx�E�A� A;$�B���,�=X���*�o�U)�I��I�w�Hc�HT��^���j�k-��o�sT�����\IEND�B`�PKb��\2�jη�(templates/isis/images/admin/disabled.pngnu�[����PNG IHDR��7�~IDATx���0D��I<A�X �P �c��4�������)�=������T���v�-�"�`�|��[����E�%I� ]/X����LJa7t�W�"ѻ���^�Ӡ4ꠐ0��9C�9��AIEND�B`�PKb��\�`�WW5templates/isis/images/admin/icon-16-allowinactive.pngnu�[����PNG IHDR�aIDATx�уn�Q�ƍ�x���>©��3���l�^g۶�:��h;��ڗ����R*p�g4��Fǭ|Va��8|��Қ�y���h�P��ڀ��fc�D��Æ���ǒ��_踹7��;{t\��y�g@�M.[�n6N=�0�P�S}(,�r��f_�?���H�;̿U[��:��&#�e9��"~�s��Q{$�#Vȍ{b��^�c�d�� �2O[�z �s��IP�W�m�n��qPү2o3m��(�v ,���E�.Bޟ�_�v�Y�^��IEND�B`�PKb��\�~ww)templates/isis/images/admin/publish_y.pngnu�[����PNG IHDR�a>IDATxc���?EC�UK��&��?'���?��?�`}���e��fy�|h`;�����'�&�k���,�X ���q����Z�Ϗ`�o�9\���ϑ/�Y�A�(<0`�;����(|���8�Y KGy��p �n6�w���<�D�_�yރ xB����N`5�S+Ā�����b��X xY� �$ ���I�Y��<,����s�0xs��P�@b$�WM�D%�_3���g����U�@2�(�?��}�����Q�l���������g`�z���f �\��"U���(r�IEND�B`�PKb��\��Rrr+templates/isis/images/admin/icon-16-add.pngnu�[����PNG IHDR�a9IDATx����F����}�m۶m�:�m{X[����߶U�e�=���d2j�h�=>NU����k����m�P�C��$�{>3�9*��{�o躻_�;Z��:)�V<#B�BX�R8a�W�����6�=]WmE���b��2�V��k�ߝj��*�Zx �W���Y��#�\� �%��>���X��"1����W�8#Yq�g���H�>��y����=�*Y����=3�N����A@������>�VÚ�Ӄ��@�t@ж�w8~�]((�l{>H�/�D�|3�W�А$�������P�{�A���R���,�"PKW��?�.�_�~���k���0{�a�Ϧ�,���s[OT�X ���e#@>�a�9���Ŀm�*��>��@�)�2U�Q"�U�lFz��b�sާ�-����E���%��%��?���I�FjH��6�I�'n���؞�٣<RET-�zdžD�[} ٮl�֣lH�9��bD&L���Vnd�gV'ש��W�� �G78��f:0x��Vf�I�hϯ��Qa�uuB�R�IEND�B`�PKb��\No����)templates/isis/images/admin/filter_16.pngnu�[����PNG IHDR�a�IDATxݏ5RCDs�1��%��� �qwww�O6� tg�|+�� 5��$��ɣR�"KAm�%����{�,,�ގ �n�D�l��m<��8z�cq�Mj\��D,��p<��qKU`i�a<>��7�f/>,�����;�ؼ����i\��J[+���=�Z5!����-�IEND�B`�PKb��\}�|ii,templates/isis/images/admin/icon-16-deny.pngnu�[����PNG IHDR�a0IDATxœ�a�/�&��m۶m���&w�˞��̳m��zg��/�<����������,}c9�o�]r��� �T ���臺�k�)/))v�#�еViޒB)I�X���QHC5HK�FT�}B�i��kN�,��o��Y�u%�ka:^ ����!�KYҢ��� F���H�� �YWWp����%�i��}r8t��8����@�%���ѷ��8H�Fe�(;��8� p ta7:�:� �v����,�4nF�umD�A��BZ����ف3�Jy!܇�C�a��^bw��m�3��w~IEND�B`�PKb��\�(�Κ�)templates/isis/images/admin/publish_g.pngnu�[����PNG IHDR��h6tRNS����6OIDATxc�����O����H���g�~�t� �~�����r����ON�y 4��{א�4�=�����xA�����(�۷�(*�p��)t0�m�^X�� E�{��ٻk�o�=�� ��WK��p@�4Э@��v4;�?n�����/��h����s�� ��s�����K睭*â�} ��C�@S��%�w [���n�Xâ�J�;G�� �D{8ҎK%oTz�� v Ժ+����@Tv�t۩e@Y�1 �ӿ�t�ò�����-i�<p! i�=�ꀚ!q$�"b�=0��+ �Z^v��N�IEND�B`�PKb��\bVzy&templates/isis/images/logo-inverse.pngnu�[����PNG IHDR���?��IDATx��xU�+���U� ��ڕ��B;3y�+���Rt}/*��D���⡲��A���uE m�[h�� . "�ڤM�t�&�6%��<���}�dr�̝ss�9�&��m� ���%�3�.�4W�4ԓ'Nq��e}Hw�z-�&�K�$��E!I�$7%l��O-��>�M�BW��Н+��w$�ijB8�Z.L�n]�M�?%IǒK,J�MR%�PR�-�L���NEgS�0UY)+8*�l�4���\�Ք��ݺF����i#I�2&n'&ʏ&��L��1��()=\�B�+���%>���,�<��6��++��H!ݭ��#�L,RA :?�Ԫ�ߥ��b�[ӊ�t�#K�r�X���wdE]��%�� ��V�t��ѰD͞Q�yڅ�����S���`�p'�9B@�TX��2�#�p:��y����aaa�9�����j�M���q횝9��c/�s��p��N)�� 6��[�JBa 0��. �եlj���b�'G<ڬ-M.yI;�/-Y�4���C9>�d���8���*9&�i��5���yӰa�o��=���d��dY�h��q�8Fx��)���\�v�^(�0>�giH��c�w9[Y�>;�m�}�F\�d?i1 A�p�+���1[\Ԙ��4�I��@�ýB�9����~(�_Û����'���8�c�N��k#"����=8��o�(\��>/L|J�q.���������H���g�8>?���l'קd�8G��Ǔ/59��3[�|���ׇ��/QR��@���3��P�9�\��`��x��ϡ���IV�=�w�,�= ����q���4�/��nx ��垶^������#ǁ������C|}�y=h|�����Wc���D�6p�v�>bi�<e��w�M�I�dQ�D�gl�H�9����������%'�Y�0�~�X) ���Z�u����s��#�� ϯ �asK�8@4$�@���lDS��m����٢]�)~Q�ybS�|v!�ͷ.Y��K:�ɢWB�7�Go�w�K�[��%�Aw�f<�4�o~�ï�12�!�A�*x�.�#+�a`Źp�+1QEл�υ�`d����_�х0�AJ�&�8NĹ70�OH]��?M�����0�q�$�oc�6���3�'h̝�����:���YN�&;�Xr�?�IGKV� /�^s��v� ���q��j-b�b�Fy��<q��#z��+�>x�I�®��^�-�X���@ ���/G�yޑ�� �� �|�ل��v#���� �b4� >�T@�B�����'�1q�GD���pљ0��'=.�.M�6�^�B���>�J��xL� �k� ?����ZLX�����}R�9�F|��ƽ�V��,i�L�|L��'��Rw�z ��.��.�N���@6"������ߎA@z�)�3�A�Fx�͖V�8���y�j%O��x�%8������cѵ�@X�v7����\��:g�Rr�6a?c��ǃ��j����Sm"**�22<�m�j�g����n�~+�]d\�4wSZL����ƛ�6O�D��1�-#�Hy$|W'c�G��_��}��S��M&�UB��W[�����9zj�gf�e�|�|<,k���ic����Ȉ�������b����$��9�8��3�2<�fU���3>��4�z�J�퉐��G�뗹���x�FI����_�D���<ӵ��2kH����0��4@<���Qt.2�t#�x�&��LAA�!#�̓[{c\Q�� n�7���<�6�;�Q|;i�c��n�7�5�=x�l����B���JB����j��c3��U�\"���M+�6OYk���J��=&�����L�[����A��);�{61��9V����Ȩ����gk���IE1ҋIX�=3�2L�7�c�0�*L��ϥZ �M�@���Gi2���ݟQ� 8a�ܗ�=�K��><1��o�I�V����Y�v����h�w�"�f���G�~~GLF�=f� ��hfM�8��yD�I�"�����#<Nq>Ӄ���d��nR��pv�e��P*z ��|@@c�4D�2�!=���^Ү{5xqT���?�-s��}�h힝��!B�C��Z>o�eLj��Q��e~�`�?������e��ǤU8b�+���(������)���ص訬y���8�>Ƨefeg���H�8�7n(;z����yx��4*�Q��������vA���L�h���tv�C��Y�?L��)����1�[7�fV�0�fnWF-؞0�Km�D�Vr��V���Vi��3&m�����s����.�~L�;�lU�s�<���$=I^»\�+��M�M�a��h���p���t�aߥ���u##H�$<�I�,i���}M�A�jF#���@x���0��TI���K�A0�2w̫��>#�.H.1���5:�����oLF�2:��e��.�'���9&��y�v�)��\�D�t�d5S ���D���Bo�#,�b�Ǽz��49եeN�ApS���<��v`����H��gA��m!�3�͖��H>48<�=Ǥ�W�fTj�Ve3��|������eK�ƤW�g���n�����:Y��cm�q���7)�|I{���hSN�Nd�&�A2�7RM1��\�:Hi�Xiv��L��it�v��x�����Y�� c��K� xSu�n�� ������lK��B� ��G���?�������C |b��1�+&�N��og�2ra�3!y�J�p�j�<p`luII�Q�c��?d�u���'�8%%���4y/ZLUQ*��?&4o�j<�^r�Z*�R۷G�o�>�D�|2��c1��<��?)^��:x��[ �>*��1ɨ�A��T!=$�L�ϋ��O��3��>x:�m�셇�߁X/����1���ƽ_�Y�����d���A1"�{dO�����u�>x�g(��� ��~����J+�`J�.� TpHZ�`9k�ͨ"`Z��Y�8yM��B��r�˕ ��8�z���~Չ�X��J�U~���"=�:GA-�����o1�;�ˀVMmּ�{�~�kiW��Ƶk4dL<�Y9`Ԯ�I�^V� ����~�T?��_G�-��H�e�,���1��C<ǨM�l��Z5\9��%�6"V���w��Z�-ql����� �%'n���}T�@EgT5ONY�F#?`�[�bפ�}!��O�� WT꧇�e��L#H(��IR"H�Vfe=�c�--�-p}˲Wv.�4����t���4 �Tin��g4��L&���[�Z�u�?<��W���pZ��s;�{���4;���Q����"���l��s�"�� @��]h(��8����E5���0���J�e}�5��Q�7Q\�Ci�w�T�W��ˡ�t��Ѱ$m�y;�R�����6[ ��� z�Vi���Fpl��B� 5��uy!ݭk���!Pn�I����Kv�q ����uNe�`z�Ƀ֫�~��~�2|P@��&�$��C�[�>ʞG,�D�A�% Aqq��OEߑ���,8*X��E�A&�����ݺ��f�M���OelZ�S�Kw�9}{���(�&�%}y��������֥������%IEND�B`�PKb��\�x z��$templates/isis/images/pdf_button.pngnu�[����PNG IHDR�a�IDATx���QFۆ��X�ʰa�Zam�v����6��6g�c�l��ݗ�9ə}�"�j8�h����V���\����8�� P�[�nݜ���Q�PU�kB�}�iBe��,#s�(�ضm[J�W'}`��s`�| ۶��:EA$�˲`v���%y�u!͟�~�i�F�y#Q&O�ƀ�b.�s���N���x'� ����?�_gJ��G</.p��0|B�G�~�6SB��NHT\ Λ�����}��IL�3���<�I��7,�ǐ�p�����#�N���;�G���=n�-�����Ma��e�o�b�W. z��w`�{a�*��:��G��|����j\o�!��J|A�� j���!��ίS�g��`l�Ӵ��ɣT8G�GJ�I���k[��Z��g�B��{�¶lҋJ��[������$!k�t�L����$IEND�B`�PKb��\��8��:�: templates/isis/images/joomla.pngnu�[����PNG IHDRf�J)�:KIDATx��xǶ�� s^�پ�|�WS�e��Pfff��܋ep8)s����m�T4��:�{�[��ZQ�ڧ�˙����33;�2_��QK�1G/ �3)?K\��ֻ�-&�O�tW�3�{5�*��`9>�n-1�O�z�a0��RJ)�� ����?B�ю�`;����_H�O�-�2lى�[8 C`�RJ��-��d�#�A�@j���n��'�z�O�#N}B����lRJ)�t��v ������s���i0] ��^o&&{DuBc�ܞ0�RJ)��'��E�z��q0] ��H�ɽ�d�V#v���RJ�l�%UU$��������݅&� ����=N4��0���RJ��%Y���z�²��.���&��=w9�nE�̲�0���RJ��C�>!��>Q�s�;����ɿ���܍���P�g�|RJ)���6o���:K����.0�R�z':��\G�����R*Ll[� ;������'���D��/C(��}��S��R*� �K6`��N#|JCy<���[?÷0b��4�x�(�<D�'��ġ0`;��da����#`�RJ�|�x(iX?�.�������g��r��������S��{�g8s�Ix5���7�]�E����}����)�xL>)����r��\)�E��m-ncyb���G�"�ڥ�l���¼�C0���RJa�p�� �s����G�C'8�2>�0�˓�IJp���|5� �|QJ)����_N��><����q&{&�m�x���8��'?vR�R�|RJ)� ����Gtt��:yt�=l#ܧ�'����e�z��t�y0���RJ7 9���L��� �$�c���垹%o/�+��08&_�RJ)CB�O�I99��>Ip9�eAo�����p夏�w��[����{�(��R��8��C�W �~OK<�!K�7�|�j��9��g�?�$�4�)'"U���x�`�E)��2�g��K��:A���z[�\&��~Ƣ����V���܋�O�=�t�{�|��0]]IiЧ�l���������� (�z���ϧ��ꯟ����K�߁DD�N�?����&I�?$���s9��>�ϭ��B���$�>a�>��z�Ҿ�IJ�m� �S�M��f�7���7-1��R���*�l���N�i�O����x)�}o� f�Y~�x>������Y���5�?$>�1�2�I�y��oB�� ��q��A�M����d盔��O�]�7�7��7� ��ڀ�-���o$N�QJ�r>��g(�'_`*L������(���a �o��6ܗ�����,W���X��U ��L��Ir��&�/��#��Q{��M�WN�r����������.x#^��~�X��rq*�RA��Kc �(IQF-�S`JN�նA�����0�?�6�^�oa���X�F��Q�"����L���J_��O����((���[�ʉ�;�����K ��S�a���7:l40F)UJ�Ϩ;� � �� ����ZH���l�My:va�]Y�v�<���@��$���N@&�F����鋪&~d��W&�=��Va��/�9��8��� xM��2�З6�*,�Q���t� ��m(&�z_����~o���1���!����>��há�����lbF �������8���e�����{Ծ�}�p�J�-���)x«a�sc���J��7�5��;�ؠ��*(���oc,��b L稌mēvtJ@��l�8\Bl!n�_p̭����Ћ�!��Q^!>)p?�#I�v�ry*v��?�鈽��+����$���O�w���o�3��b��^X��~w�V�P�>q&��龢9Vl$ ��R&:���d?��6r�)�4�%7X���=L��K�MĞ���.S@��b�뼟 �����|NLpm������s��- &����,�'�P��8�zg���&~��Y ��)�GѾ���*���J� u���������6���#cu������q,�E�T{�9�{��|+˭�o;l/$q�^b_�-Ɯ��j�P[u�2!�����g���~?C����l��#[�%a]�PJ��{�f�ڢ:�B/_+L��c]d�_�`��`��1���^*�����~���i\'駙i�F��0���g ^�8�3`]�b��R����F� �I��:j`�,�P�|;�~�[a�Kь�쿳�W�{����o` �|o��lw=LZm��o�Y��#��俰�,���fL�I�c���T�F�a����p'��J��2@ʰ�Sd@���i��UQ�=��-��5�fy�`�OG�Q���i�3a(��qgy=9���*\hc�`� y�1Ѧ���iA��05�3v�)/Z[�y�!0iq�;���cC�aT4 J�z� [Pꜟ��)���s�c�~��`?��&�����~�L�e�o��;�c@���/��0�,�s��m��?a�ߵ�bƗ5�Em�0ip��ɅB��0*>�^R��W(UhW�œ~\�{@9w�0������!�ϵ�́�=�]r��(�������w$�Ő�?�/����w��(��^<�?��~)G�����gaT����J�h@�3K�i��N���e\����g�7ڂ�Mdy�"�Ay�]��8<M��I�^�J1`/�[$'w)�&&��`j�f�L�"L�T��)���o����t����LD��T�*�����k����)#.���v�Pb���x>qL�����[!��1��M��I?�ֻɿHH��r+q_��{���zFѝ�(��R:�^��*U�q�hE O�_�~��q ��<�X+U`*�}{��v�AL� 9z�6�修l�N6�� �*�.���t����k���{{�a"z >�hc��R�6��#��N�"�e��_o L�~]�1 ��s����t�#��|��w`���N���4�F@��0I8���3�x:�B�s���F����*����f����@�F�Z�|�ސ�}�< ^xz:�0z��s���cM����d�P�Z�wB�7<���$D���=��]�0�.��saȌ��f��!�ݠW���P�x���R7�8�ؿ} �'%N��������&S��<�&۩,���}a��-�x���s�M���fS2��ב%�u*�����έ�� ͭ��� =��>��,� Ï�������.�[Py!�s�;d�e\�M������^��?���<λ�i w�U� 0*�k�Q�؈W�}y�oSޞ�1��J�n��Zob%ֱ��XǗI=۬�� ^ǣ��}��#�5����%�oc���� ��?�I�J�5�z�+b���?!��6����S��ӈ��G��E};�'�����]�#�^�����]W�Im�V��%�װ�ް�D�[� �<%۩؉�8��yxo��\by-˟P~�m��<�!�wF>n�q�`@���{�B��l,�=�wY���g��l���1�%,g�\���K��;�R�qO[����?������C�>���yoH�1ɼY� 0��C�����$��c�å8��]8�� Yb�B�F���{��Cv㞵�nt}��G#X܈C�Õ�ނ����Su�gr���?��TU������ԩsN�X3��J�L�?�ֈ��W����ۿF��!҇��'�쁣�`X�\w[>צ���4T��g��@�O��3^����S��B�j�P鯀9`��C�S �v���9�����h��Q�"Ao�H��/�Y�߂<��EP����W�W��l�3����c�AU�T��X.��sx�C�o���V��o����g��f����� x��K��5\`� �����ك�Oro���/�lű�8R���1<�y�c-.�\��<=�h* ��@sx�=�OΉ���Y;��fB�%�?�wۃs�X���5�{n��Q�JJ�u����~X#�l1(Rdž������yߑ�<skl�Q�y����%=��� [���.�����a�V���$� ��P��o�@��=�*�jq��B���R$�]0Z�CH� _��;c[�Ƀ=x����wHm�z 0�o���!�[��F�{��@Kv��{�f��Hs���Q�5�̈́�KιRߓ���;�@틂L�P��OR��@}� S��U}�;��Ϻϋ*�v�%�_�,d��c.����H����c!m��&K�4��?`�l�{�?����������a0V"!�f�2&��0��q ��^\ˍ�O��&}!to������!뛙�����)�2�wd۫?f�WJ2��ME� �l���K�os��[�f��� 6}���-�Hh!�uѮ�A��07���ߔ2ڔ�t#�S���1�L���y�W�a�cv��{�A�i��8�����z }�<�2�����^e��|0.P�Q�n��XPX#�0����x� _{~FӴ���-cX���U���@W "���CVӳ =�q��Ȏ����=�?|��(���J4�*S�E+a�YNWv�v����tr������f5����JX�υ~��>�s>S3=P3~�1�ov�י#���U) ����<�s ��߭�[�g�l�3J�2n\$dr�U��io�n1��� 8��0� ���O���S1�V!�F@���8L}���0ۥ�Ej�PP���]���P|�vBe{0a���@a1�}rit]X)��^�{���Qf�#���ql���i���g����=��>�? L�Df�˳(e���3̥�*�{�/�s���!��?��y��E��(co WZO��ƃ�ܸ��"�{�<Aaz&�^��0~�,�9��'�J�m�!��=j��U�� uf�����:<) �|������H)�2��!{mW���"��Q���c�$��e8�,���V��ח <��뾢�*�)���W8��#���p�C�#%H��>�a��(��q�K?�s�˵_�9(�`�K��M��d<�2��mQ��3��b��o�6�0I@iwBy�q �P}y��s�R��T0M�K������>ۙ�>�R������J���?�v�Z�~�jC@]���*h�#�A�y���ހ��{��[ԻL���t��*��x0К�o�<y���ȃL|�����y��{�� ����k$x��g�v[�����m����� o�K�Kl��pt���z�~��/����1�� ��*��'�r�: R�G<2�hO�Ki�δ[t�R/M�&��k�Ԛ�����<�� 2���Р���uJ�� �V�J�B����`��� �=G)���"���'�\ t,O"[��4�����o)��e��l���-ι��"���=�mږ��8�%>�}�|K��8��%r�1v�트�H��!�� �w����?83�]�ca��Bh�<f�S_,��r}�:�5�g|�2��3>��?�@���u���|��w*�Lg�'��1-��J��`�^&T����L0\��.�����R��=*�`��;#�ҮT�`�"0���s�)���~� �����1&����� ��1k?`� �sG�/��Ǝķ�sĭ��w=��~�@�Qn��L*4�~����i#ߋN�K���u��r�[�np���Tv��ȟ�o�.�]��+���{}zc{�)v�|���z ����Mj���u��-���Tjw�^��0~$l��u1z�D�:�}�\i���M�~^�jP䷀W�k�G�nS5����dF� et�x�)���b�p~#`T�i"n7���o�3��q݉U�.��y�U�:e$�A�k�����<���!��}Y)��I�>FGf�g�� �/�z�� �d|�N�* ?��$����;�l�� �W��k�{գ+�}��y��}�f`�8�;�LjPP ���c��@��9�B�O0�@���n����>"�1n#`F��(��( 5�#@+}�1���\گ�`���0���P�K0�ӄ���$H��v�5*�m>�}J��np��7"?��&!�*��z�s���)�D���{!ނm�Qj=�M��#�������#RM��g��a���@�Ts�QW����H�^���5��D�e���*�,���@�@-a��@=�o�QS������p`TvӐ����t{u�Z��� X� 8���D,�ࣛ���_8� �8�e���� ���a"�`���zِ�u�.�2(C~L���@>�v��O��6!kd������7!���띂�u��ck`���WL��j�gˡ~i�V+�{.&d�j����(K�z����~�)<P�����=l�-WWv|mI$�/Y�@-1�� 0M$B��?���ܭݪ!�:����>s��s�����A ����)U��=�_�W�cg������~�H ����Ҿ�[pM�3�BBg�qP� A q�I��k:;#l���L���l�02�Q��~hh�U�{�\�`���Xo����!���LC��7;����M��s�U��^gFS��������q�&ⱕA����g���B.�OtJ]i�5�5�,3+Jq�z��~�b;Y>��L�õ�볇��O�?�z�L6{���w�75�~� A�o�� ���v�����K4�{��c���2�+��5d�V�kC��Jk��nF������k�.��zB�� ̇�4\kWxs��=���Cz[O���7��X���&$@��֟��K:L�`s�c��^�ä�=���((y�~�*%1ʙ���A^W�v)xg��Se�k�)\�x�UC�:�tg��DZ�m�{`f�0���)6�8p�2�����</�=^�R�����X�]3�}�?s�Ծ�;kҾ�3��^����6p�V��f�� F������!�;`���#��=;�^���i�K8 P[Ю �m�G[ZI0�|�s��)d�%*������6áWG۷+�3`ʌ�<�\�5�g��5�̀��:��Q9�U�Z������Գ��'�Ͳ�P��;�_H�k�u.��)3nw��e�1ʰ(Q`ص3.ޠL!k�yoص3f�2��ϗ���Q��j�z_�F����ܻ#��D��S�� ~N[0M��Kw�y1�����3�[�V�쨠&{e�+�R�߾'��H�c�=��]>�q�I TC/]Hg?��F�&%_p�l9�tȄ='"��@WNj��bSzs��r�A`ʌ�̯��³�s .�D�E�V�7��vևC�~mW�F��������5���v1ڊ0Iv6�s�C+0�&���C��l�XЮaٗ�=0e��:�!���Å��r���A|�r�����~�H�w�����(�������VZtтo�+�z��M�]��Tʡ|��nQ��{0�i� ��� ,5JsX�S� �g~6#�F����*�`���u�W�צ ��o���q덀^�V����LT���&��Bm9�P�����#\�����/=�s&F�ߔ�� u�M�>T��2Zғ%��G Vi�2b���u���uꫪFfg�� �I�@[Iy��=��G��'��ޝ3+4Bż��M�稙���Y���� ����ʿ�V�^COF�����pp���WF�]0h)��M��,���X+G.�J/;�#�r�nƣ� r糑�[7�!W�f�^\X�bFhy#l=:WU�~ׇ�η���<�Z}�#��=pW��z�ؓsӦ?�)G�;~�߰���b�;Jf E�=��;�W�u֧C1 d@��~��B��ܰA��:��O�m>ܫ�*�)�{�/`��86��K�o��=��)�� ���*.2/��kxSu/�.s�>�^i7: ���Ę���9E�n� � �H�-�7vDV#�m��SvX�ܩ���`6��H`�@*�4@��څ� �F��f$�Z���s�7L������F��bP,(\��>DwԊ?w�d{09�������[��=�����!`ʘ�8��P����8J�f��k0e��HIߺ �5h���S ���t�˟�@� ����� t�c�^P9��`ʗ���s��4�`|FohU:��$[��(jF���5����棦TN�*��; :�7��ڧ5>�#�7G"��H��Ob��h�N?^ٿ�B�䷊�P%�OiR���<��r�����2�I����mh ��p�6�7`�y�����k�T@�(w��5U3�C��v�ީ2�%�F�]�K�P^�@�cd���_[����˒@�����%g� w�Z�P�6��尫�v8��0&*�~L�d��~Ϝ��A�~~�î����2��ά'�Q0�1� �Ы�Efq��Dh��֮#U���O��s\U�N+s��� �R~��]�Xo]v4�A^�Շ��734s���d�>�i��KY�� �H��Y~c @�)��kl�\�� c��)�8�+�T��/)����?i{f���j^;���P��)?��V<~����� ������(�dƉR��jj�� �a)`k��"q�k�P� �h �� �Vb�!ԭ�˲=�K�F�R��5e��)����ȹ�a�..�5��S�4Ռ�y�EwD����adc[�h���T������݊���e��_Bd���wu5�2��H�^��l0I�1��6/�:��^C�����.(�Vp[���S?�53����LhT#��^/�|G��Wj�%�%�&T! ) K��~�� ^׳�,O�)KlIX �D,d����Z�F���T�e��{J����Ю�ApA�D�!��;�I�l�r����j�)w}�%����H<WT|}�q0�Kpe䞄V�\���F��n�(�v(�w����Ju t� n����}ʿ���3�G�ώQ����5p(�s��P�R0Md���6}�Y�s��E���M8d �}�*�_GS�"��d�k��]qv��)C�T��͢��܇��,�B@�j�]1�m}�Y�W82T�f@������*�/�����+�h҆^>@d @fi��r�+b��o�&0>��� �CnFٙ�u���U����$��J����`�1�g�jWY�4awS{i��ly���t���`ʐ��Q� mz9�g(��2?�L�T�̀���Z�ۺڠ"K�������{��Kr�c�_ NV�*� �,��ԓ��@@0�q=����U���_��>�# .5p�̓�>��62�?�'���1`�@�ߗhO=6L�:��Y[V���0C#�;Kl�s.�_��5�r�����Z��}����V���5[��K�L�����=�!�3���֥�t���DϚKb @՜����������{� -k��/ ��i�Υ�ٱ�+)�U���}XC������7p�?�^�� L#E'���N$�o�E� �kj�& (�˝{ď�iR�ٝ�ˏ�3�z�<��<TǩYH�>��6�}�J��#�Rό�^u/ D�S&�䚟�?Uk����ב�4 K"���A�{@_���1i��GfT����ח�B�<�x+�R�AyE ��3���#rnj@��c������} [�I@k��]�|���n˖�a�V� f�~O��`��R�g�.��9`�����ER�Wy��w�*�6��^��eb\J鋄���� 4��y������Ry��R��J1���7`�C���A�O�P3i����u}^�%���{/�Zv���r��gʄm��W�ѩ�(m�V����b@�ho&)(�6p�V�?=b��� ��ݯ&O� Ё���[i����y�IU�����_ϲ�BvS�P�7��H':6�BzS%�χN%yV��K�1�p��RT��J�n�� n3 �oV{�ƭ?3�~��`J� ������� �n��%�|�\px�5��#��vصs: �v����d��` 0ֵ\n���+� ��H�J��:�q�>�}an���c����;���E��� �?@���B��u�ۗh�9�� ��㡧�U�EN����@�A����C}h)2�Б�> ��]O��e�ƨ�A^U�ߜ��Х�K�D' ���(�e� �c���YS��C���3���{��"t|��p�`��^v��(���Ua\S�k�RT�泝mE��u���j�Ep�R��M}��O5�z��<��P@�"�VyH ���Njcu �Z�������.T1���}3^ �*�Q�gTZTЩt�Sέq�)�eT�X��|Q��f��em���(�E�����+�'�|�=�����t;�?�/s����ϏS(�߫T?:v���A?�c�Z��k��&��5�q!Ý����C`QF=� qr�W)gI�p��=���$E��y��H:���N�}�L=�Tq$�vI,(�LI��v��S�f@���L�@���ʟ�u���/�Y���;��Np.ߩ:Ѽ�~�l|�V�푓�-�$�`?�3_OV�7&���G��M�{}����/�l����4�9��+�y?�H���3�:ȬAi����A/�UE�X��Ƀ_���Q��ɤ�� ��q�eS���ߧ�La!WA$�L\�������ߎ�=����q���-�w�U&��Q Ij(`�I�P�?P4O1��o؍��>���P�\1F�i�ަ��"��������~H*������{٪�,��eWЙ��ږ�2q�U*1(�� ��|��ά�%����Xh&�1�N;_o��?��T���i(�j������c��W��'jh/F��n����T�T�*���c�Z���%ھ��"[3ެ��-y��5����X�u�W��a���н+�,���ΰ�3W��s-V�@����s��J��@�o�V ���5RP�h%��Ch��H3����r-:�"Ǧ$��� �t5 J������M�/��R� � |��՟�c�����7)B\N+�n|���U���X⁼v�u>����@��x�F���U����q ��s�+�xh�9��{������3���ʿ�)������)�I�k�_D��[φ_4b��J�,���>�V���^��'�qx���l�`�U(�!��Π��F,`S v��?p��dL�ǿ�u�>��o`��,ޱ��*�%�g䋌�q�Y����i :d�m�g��!���(�O����콠�1�z�˼�Z�a&mA���?C[0 ��N#���^p�7&#�������=�J�Q� �@>�r0ɩ@!�.W�6��'!� ��IH���͐;�a�o�;n"k�o)���;��Ӿ<|��g'��� ��>��1(��8�L���d\m����0����K�3|�3��C�?^����d�kǾ�b�N0����J[yf��q���Tlo���%�_�:�g������� ,��!��?Va�@n�_ۊ����5��6�������+�����ȿ!���s�>管���f�����?$� ��H=���B�di<c7��{��Tf����.x��X�88��3���4����1:K�0dJ��,�hg��,����Ĉ'�Tڋu�范�b���<x�c��ߌ���-�(�U��z�T�H�F�'�t"��g0^��s �A�_��� �'L*jJ�=��x%�َ&��b�+y�?��� `�'��M�iO�9[%���]#�$<1�Rg ���C�e�*�iט��"=rBށw`Pד���o�({���=�E��E�W��lZW%~�ױ)�y�-�wVp�>�3�p� �:��&c�.d��NJ���� .@�< R�.�~u�F%|��CN�5�k�*-X?��UD�FG��C>J�!u�.$��@0Ϳ ��H�,��LϫܯH�������a�k���̓���O��y���l?n������Т5���{w x�z3A��JO+����]�Qܜ߁��px.4��b��B��3Ȳ�~@��d8���)�}o'p-/A�,G?x�qmL(��{��p�)�\h�P����ȒS ���0�Fz�I<��I��(����{�6 �3��G���p>ä]� � >V��:����_��9_+�<�p}�����[��@�ޘ���s���Hf���E���$���3r���z���"Rq^���7�����ڷ#g� ��r�zV�-�t�=�������w���vyj�D� n/��G�n�=V��#�E��)��9�ў�=�uՏ��9��Ye�Y���@SOm���+R^8H{�~�i.��^�����̀8�R�_�-�%]���1n]�6��zBmA��}Lq��g��3< ����=h�,�$�|�);W���E1P��v�?�r�g<�(��2�Wa���(��3q����W��7 ��/��`�F�ͷ��QIn����`u#�0�4� _A�{L��{\�k� �8�(dǔ+ϵ�@����r���f83 V"�#�Si��9-K�o�0���>��U�n��/�Qw� ��Ѿy �WQ�<�H�?�H���>�M��q��U[i�O�f���F��#�{`Ǿ�d��A^���^�} �ӾȺ���_��Z����Ki�7�y�ξ����^�{f,� & �\�n=ϛ�ਢ��@���������y�{�������T �n�1@�ߏNTJ8����㉶��<�t��0ib�=��G9y8XE�'�?%�ax��G��h���K8~��v�v`J�v 9���6�9�i���h/��u�T�=�?�=��A���S��w�u�{�<y�8�=D:�轀)�������^0��l �ȴ�]�ޅlgh��:�w��]7\�u!wE�L���$w�ˆ6��s��D�D�9�k-�qc���~ȓ���`,��`�U�LJfql��t��d�¿8�by��ːATx����'߱e��X���Ĺ��ڻXK� �㵶mu�ֶ��w��m۶m۶m{lϿ��R���o�{�%���s5��qN����q%NA�?c~X������� B�����V���� �~s;����*�3�!^!�_bh1��[&��0������jS�5�{!�E}�SWF�^o/�ُ|����ǭ~���&�0��Q6�ʖ���q��7 Bɍ��jXSDDD� }*����p��'�N��=�6j��l봷z~����g��������3 �Ú"""R�7�^�>����F��߮��� �&>� ��'G�y���{Z��1^�5EDD�ҁ��}���wLv >a�,���p�E�q�*��я!�^���Ni��;���._:�*��Z��7�S/e<,C���Wg���@�y/��xi �'���h@��H?��3��'���+�ڃ@����0��F>l����/j��|�ia"""M0����7��ߗ�E(�;���J���;�=�q�v��8���|��[? �&i��ތ�m'}��^��5a�G]�3�O�4l��`]�_�2���-1Q�P�1��>Ƈbs.[Ɨ�8���>�$�$���=�>+��s�b1����X����`���,F�.3h�ji�K3��ߜ�z��{��0���� aM-\�����υ߁��ycSXo�o�^QЃ1����w�������|�ȗ���>Č�ތ���?�a�� �-��#`Mi{ �'��G����X_@h��ܝ �VA��퉩_bvX�DDD�� �wtG���>�� ևv���� �Z�����:�������3���s�uVX_��Ղ��A��p���DDD�����贳!�ܰ��^5�7}�g��{'�Xw�O�0߅�����b,�`<#�/#���5ȏ�{�7�� �;����/��>�b����x�������{�\���W�'S�u7�� ܒ���;��R��� ��}�lJF�/�w�?M��qj��]܄YN� lr��P;��S��IEND�B`�PKb��\Iҙ��"templates/isis/templateDetails.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE install PUBLIC "-//Joomla! 2.5//DTD template 1.0//EN" "https://www.joomla.org/xml/dtd/2.5/template-install.dtd"> <extension version="3.1" type="template" client="administrator"> <name>isis</name> <version>1.0</version> <creationDate>3/30/2012</creationDate> <author>Kyle Ledbetter</author> <authorEmail>admin@joomla.org</authorEmail> <copyright>Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.</copyright> <description>TPL_ISIS_XML_DESCRIPTION</description> <files> <filename>component.php</filename> <filename>cpanel.php</filename> <filename>favicon.ico</filename> <filename>index.php</filename> <filename>login.php</filename> <filename>templateDetails.xml</filename> <filename>template_preview.png</filename> <filename>template_thumbnail.png</filename> <folder>css</folder> <folder>html</folder> <folder>images</folder> <folder>img</folder> <folder>js</folder> <folder>language</folder> <folder>less</folder> </files> <positions> <position>menu</position> <position>submenu</position> <position>toolbar</position> <position>title</position> <position>status</position> <position>icon</position> <position>cp_shell</position> <position>cpanel</position> <position>bottom</position> <position>footer</position> <position>login</position> <position>debug</position> </positions> <languages folder="language"> <language tag="en-GB">en-GB/en-GB.tpl_isis.ini</language> <language tag="en-GB">en-GB/en-GB.tpl_isis.sys.ini</language> </languages> <config> <fields name="params"> <fieldset name="advanced"> <field name="templateColor" type="color" label="TPL_ISIS_COLOR_LABEL" description="TPL_ISIS_COLOR_DESC" class="" default="#10223E" validate="color" /> <field name="headerColor" type="color" label="TPL_ISIS_COLOR_HEADER_LABEL" description="TPL_ISIS_COLOR_HEADER_DESC" class="" default="#1A3867" validate="color" /> <field name="sidebarColor" type="color" label="TPL_ISIS_COLOR_SIDEBAR_LABEL" description="TPL_ISIS_COLOR_SIDEBAR_DESC" class="" default="#3071a9" validate="color" /> <field name="linkColor" type="color" label="TPL_ISIS_COLOR_LINK_LABEL" description="TPL_ISIS_COLOR_LINK_DESC" class="" default="#3071a9" validate="color" /> <field name="loginBackgroundColor" type="color" label="TPL_ISIS_COLOR_LOGIN_BACKGROUND_LABEL" description="TPL_ISIS_COLOR_LOGIN_BACKGROUND_DESC" class="" default="#17568C" validate="color" /> <field name="logoFile" type="media" label="TPL_ISIS_LOGO_LABEL" description="TPL_ISIS_LOGO_DESC" class="" default="" /> <field name="loginLogoFile" type="media" label="TPL_ISIS_LOGIN_LOGO_LABEL" description="TPL_ISIS_LOGIN_LOGO_DESC" class="" default="" /> <field name="admin_menus" type="radio" label="TPL_ISIS_FIELD_ADMIN_MENUS_LABEL" description="TPL_ISIS_FIELD_ADMIN_MENUS_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="displayHeader" type="radio" label="TPL_ISIS_HEADER_LABEL" description="TPL_ISIS_HEADER_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="statusFixed" type="list" label="TPL_ISIS_STATUS_LABEL" description="TPL_ISIS_STATUS_DESC" default="1" filter="integer" > <option value="1">TPL_ISIS_STATUS_BOTTOM</option> <option value="0">TPL_ISIS_STATUS_TOP</option> </field> <field name="stickyToolbar" type="radio" label="TPL_ISIS_STICKY_LABEL" description="TPL_ISIS_STICKY_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> </fields> </config> </extension> PKb��\����includes/framework.phpnu�[���<?php /** * @package Joomla.Administrator * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Joomla system checks. @ini_set('magic_quotes_runtime', 0); // System includes require_once JPATH_LIBRARIES . '/import.legacy.php'; // Bootstrap the CMS libraries. require_once JPATH_LIBRARIES . '/cms.php'; // Set system error handling JError::setErrorHandling(E_NOTICE, 'message'); JError::setErrorHandling(E_WARNING, 'message'); JError::setErrorHandling(E_ERROR, 'message', array('JError', 'customErrorPage')); $version = new JVersion; // Installation check, and check on removal of the install directory. if (!file_exists(JPATH_CONFIGURATION . '/configuration.php') || (filesize(JPATH_CONFIGURATION . '/configuration.php') < 10) || (file_exists(JPATH_INSTALLATION . '/index.php') && (false === $version->isInDevelopmentState()))) { if (file_exists(JPATH_INSTALLATION . '/index.php')) { header('Location: ../installation/index.php'); exit(); } else { echo 'No configuration file found and no installation code available. Exiting...'; exit; } } // Pre-Load configuration. Don't remove the Output Buffering due to BOM issues, see JCode 26026 ob_start(); require_once JPATH_CONFIGURATION . '/configuration.php'; ob_end_clean(); // System configuration. $config = new JConfig; // Set the error_reporting switch ($config->error_reporting) { case 'default': case '-1': break; case 'none': case '0': error_reporting(0); break; case 'simple': error_reporting(E_ERROR | E_WARNING | E_PARSE); ini_set('display_errors', 1); break; case 'maximum': error_reporting(E_ALL); ini_set('display_errors', 1); break; case 'development': error_reporting(-1); ini_set('display_errors', 1); break; default: error_reporting($config->error_reporting); ini_set('display_errors', 1); break; } define('JDEBUG', $config->debug); unset($config); // System profiler if (JDEBUG) { // @deprecated 4.0 - The $_PROFILER global will be removed $_PROFILER = JProfiler::getInstance('Application'); } PKb��\��--includes/defines.phpnu�[���<?php /** * @package Joomla.Administrator * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Global definitions $parts = explode(DIRECTORY_SEPARATOR, JPATH_BASE); array_pop($parts); // Defines define('JPATH_ROOT', implode(DIRECTORY_SEPARATOR, $parts)); define('JPATH_SITE', JPATH_ROOT); define('JPATH_CONFIGURATION', JPATH_ROOT); define('JPATH_ADMINISTRATOR', JPATH_ROOT . DIRECTORY_SEPARATOR . 'administrator'); define('JPATH_LIBRARIES', JPATH_ROOT . DIRECTORY_SEPARATOR . 'libraries'); define('JPATH_PLUGINS', JPATH_ROOT . DIRECTORY_SEPARATOR . 'plugins'); define('JPATH_INSTALLATION', JPATH_ROOT . DIRECTORY_SEPARATOR . 'installation'); define('JPATH_THEMES', JPATH_BASE . DIRECTORY_SEPARATOR . 'templates'); define('JPATH_CACHE', JPATH_BASE . DIRECTORY_SEPARATOR . 'cache'); define('JPATH_MANIFESTS', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'manifests'); PKb��\�e��includes/subtoolbar.phpnu�[���<?php /** * @package Joomla.Administrator * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Utility class for the submenu. * * @package Joomla.Administrator * @since 1.5 * @deprecated 4.0 Use JHtmlSidebar instead. */ abstract class JSubMenuHelper { /** * Menu entries * * @var array * @since 3.0 * @deprecated 4.0 */ protected static $entries = array(); /** * Filters * * @var array * @since 3.0 * @deprecated 4.0 */ protected static $filters = array(); /** * Value for the action attribute of the form. * * @var string * @since 3.0 * @deprecated 4.0 */ protected static $action = ''; /** * Method to add a menu item to submenu. * * @param string $name Name of the menu item. * @param string $link URL of the menu item. * @param boolean $active True if the item is active, false otherwise. * * @return void * * @since 1.5 * @deprecated 4.0 Use JHtmlSidebar::addEntry() instead. */ public static function addEntry($name, $link = '', $active = false) { try { JLog::add( sprintf('%s() is deprecated. Use JHtmlSidebar::addEntry() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } self::$entries[] = array($name, $link, $active); } /** * Returns an array of all submenu entries * * @return array * * @since 3.0 * @deprecated 4.0 Use JHtmlSidebar::getEntries() instead. */ public static function getEntries() { try { JLog::add( sprintf('%s() is deprecated. Use JHtmlSidebar::getEntries() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } return self::$entries; } /** * Method to add a filter to the submenu * * @param string $label Label for the menu item. * @param string $name name for the filter. Also used as id. * @param string $options options for the select field. * @param boolean $noDefault Don't the label as the empty option * * @return void * * @since 3.0 * @deprecated 4.0 Use JHtmlSidebar::addFilter() instead. */ public static function addFilter($label, $name, $options, $noDefault = false) { try { JLog::add( sprintf('%s() is deprecated. Use JHtmlSidebar::addFilter() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } self::$filters[] = array('label' => $label, 'name' => $name, 'options' => $options, 'noDefault' => $noDefault); } /** * Returns an array of all filters * * @return array * * @since 3.0 * @deprecated 4.0 Use JHtmlSidebar::getFilters() instead. */ public static function getFilters() { try { JLog::add( sprintf('%s() is deprecated. Use JHtmlSidebar::getFilters() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } return self::$filters; } /** * Set value for the action attribute of the filter form * * @param string $action Value for the action attribute of the form * * @return void * * @since 3.0 * @deprecated 4.0 Use JHtmlSidebar::setAction() instead. */ public static function setAction($action) { try { JLog::add( sprintf('%s() is deprecated. Use JHtmlSidebar::setAction() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } self::$action = $action; } /** * Get value for the action attribute of the filter form * * @return string Value for the action attribute of the form * * @since 3.0 * @deprecated 4.0 Use JHtmlSidebar::getAction() instead. */ public static function getAction() { try { JLog::add( sprintf('%s() is deprecated. Use JHtmlSidebar::getAction() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } return self::$action; } } PKb��\H�6?��includes/helper.phpnu�[���<?php /** * @package Joomla.Administrator * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Joomla! Administrator Application helper class. * Provide many supporting API functions. * * @since 1.5 * * @deprecated 4.0 Deprecated without replacement */ class JAdministratorHelper { /** * Return the application option string [main component]. * * @return string The component to access. * * @since 1.5 */ public static function findOption() { $app = JFactory::getApplication(); $option = strtolower($app->input->get('option')); $app->loadIdentity(); $user = $app->getIdentity(); if ($user->get('guest') || !$user->authorise('core.login.admin')) { $option = 'com_login'; } if (empty($option)) { $option = 'com_cpanel'; } $app->input->set('option', $option); return $option; } } PKb��\1���oEoEincludes/toolbar.phpnu�[���<?php /** * @package Joomla.Administrator * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('JSubMenuHelper', JPATH_BASE . '/includes/subtoolbar.php'); /** * Utility class for the button bar. * * @since 1.5 */ abstract class JToolbarHelper { /** * Title cell. * For the title and toolbar to be rendered correctly, * this title fucntion must be called before the starttable function and the toolbars icons * this is due to the nature of how the css has been used to postion the title in respect to the toolbar. * * @param string $title The title. * @param string $icon The space-separated names of the image. * * @return void * * @since 1.5 */ public static function title($title, $icon = 'generic.png') { $layout = new JLayoutFile('joomla.toolbar.title'); $html = $layout->render(array('title' => $title, 'icon' => $icon)); $app = JFactory::getApplication(); $app->JComponentTitle = $html; JFactory::getDocument()->setTitle($app->get('sitename') . ' - ' . JText::_('JADMINISTRATION') . ' - ' . strip_tags($title)); } /** * Writes a spacer cell. * * @param string $width The width for the cell * * @return void * * @since 1.5 */ public static function spacer($width = '') { $bar = JToolbar::getInstance('toolbar'); // Add a spacer. $bar->appendButton('Separator', 'spacer', $width); } /** * Writes a divider between menu buttons * * @return void * * @since 1.5 */ public static function divider() { $bar = JToolbar::getInstance('toolbar'); // Add a divider. $bar->appendButton('Separator', 'divider'); } /** * Writes a custom option and task button for the button bar. * * @param string $task The task to perform (picked up by the switch($task) blocks. * @param string $icon The image to display. * @param string $iconOver The image to display when moused over. * @param string $alt The alt text for the icon image. * @param bool $listSelect True if required to check that a standard list item is checked. * * @return void * * @since 1.5 */ public static function custom($task = '', $icon = '', $iconOver = '', $alt = '', $listSelect = true) { $bar = JToolbar::getInstance('toolbar'); // Strip extension. $icon = preg_replace('#\.[^.]*$#', '', $icon); // Add a standard button. $bar->appendButton('Standard', $icon, $alt, $task, $listSelect); } /** * Writes a preview button for a given option (opens a popup window). * * @param string $url The name of the popup file (excluding the file extension) * @param bool $updateEditors Unused * * @return void * * @since 1.5 */ public static function preview($url = '', $updateEditors = false) { $bar = JToolbar::getInstance('toolbar'); // Add a preview button. $bar->appendButton('Popup', 'preview', 'Preview', $url . '&task=preview'); } /** * Writes a preview button for a given option (opens a popup window). * * @param string $ref The name of the popup file (excluding the file extension for an xml file). * @param bool $com Use the help file in the component directory. * @param string $override Use this URL instead of any other * @param string $component Name of component to get Help (null for current component) * * @return void * * @since 1.5 */ public static function help($ref, $com = false, $override = null, $component = null) { $bar = JToolbar::getInstance('toolbar'); // Add a help button. $bar->appendButton('Help', $ref, $com, $override, $component); } /** * Writes a cancel button that will go back to the previous page without doing * any other operation. * * @param string $alt Alternative text. * @param string $href URL of the href attribute. * * @return void * * @since 1.5 */ public static function back($alt = 'JTOOLBAR_BACK', $href = 'javascript:history.back();') { $bar = JToolbar::getInstance('toolbar'); // Add a back button. $bar->appendButton('Link', 'back', $alt, $href); } /** * Writes a media_manager button. * * @param string $directory The sub-directory to upload the media to. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function media_manager($directory = '', $alt = 'JTOOLBAR_UPLOAD') { $bar = JToolbar::getInstance('toolbar'); // Add an upload button. $bar->appendButton('Popup', 'upload', $alt, 'index.php?option=com_media&tmpl=component&task=popupUpload&folder=' . $directory, 800, 520); } /** * Writes a common 'default' button for a record. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function makeDefault($task = 'default', $alt = 'JTOOLBAR_DEFAULT') { $bar = JToolbar::getInstance('toolbar'); // Add a default button. $bar->appendButton('Standard', 'default', $alt, $task, true); } /** * Writes a common 'assign' button for a record. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function assign($task = 'assign', $alt = 'JTOOLBAR_ASSIGN') { $bar = JToolbar::getInstance('toolbar'); // Add an assign button. $bar->appendButton('Standard', 'assign', $alt, $task, true); } /** * Writes the common 'new' icon for the button bar. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * @param boolean $check True if required to check that a standard list item is checked. * * @return void * * @since 1.5 */ public static function addNew($task = 'add', $alt = 'JTOOLBAR_NEW', $check = false) { $bar = JToolbar::getInstance('toolbar'); // Add a new button. $bar->appendButton('Standard', 'new', $alt, $task, $check); } /** * Writes a common 'publish' button. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * @param boolean $check True if required to check that a standard list item is checked. * * @return void * * @since 1.5 */ public static function publish($task = 'publish', $alt = 'JTOOLBAR_PUBLISH', $check = false) { $bar = JToolbar::getInstance('toolbar'); // Add a publish button. $bar->appendButton('Standard', 'publish', $alt, $task, $check); } /** * Writes a common 'publish' button for a list of records. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function publishList($task = 'publish', $alt = 'JTOOLBAR_PUBLISH') { $bar = JToolbar::getInstance('toolbar'); // Add a publish button (list). $bar->appendButton('Standard', 'publish', $alt, $task, true); } /** * Writes a common 'unpublish' button. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * @param boolean $check True if required to check that a standard list item is checked. * * @return void * * @since 1.5 */ public static function unpublish($task = 'unpublish', $alt = 'JTOOLBAR_UNPUBLISH', $check = false) { $bar = JToolbar::getInstance('toolbar'); // Add an unpublish button $bar->appendButton('Standard', 'unpublish', $alt, $task, $check); } /** * Writes a common 'unpublish' button for a list of records. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function unpublishList($task = 'unpublish', $alt = 'JTOOLBAR_UNPUBLISH') { $bar = JToolbar::getInstance('toolbar'); // Add an unpublish button (list). $bar->appendButton('Standard', 'unpublish', $alt, $task, true); } /** * Writes a common 'archive' button for a list of records. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function archiveList($task = 'archive', $alt = 'JTOOLBAR_ARCHIVE') { $bar = JToolbar::getInstance('toolbar'); // Add an archive button. $bar->appendButton('Standard', 'archive', $alt, $task, true); } /** * Writes an unarchive button for a list of records. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function unarchiveList($task = 'unarchive', $alt = 'JTOOLBAR_UNARCHIVE') { $bar = JToolbar::getInstance('toolbar'); // Add an unarchive button (list). $bar->appendButton('Standard', 'unarchive', $alt, $task, true); } /** * Writes a common 'edit' button for a list of records. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function editList($task = 'edit', $alt = 'JTOOLBAR_EDIT') { $bar = JToolbar::getInstance('toolbar'); // Add an edit button. $bar->appendButton('Standard', 'edit', $alt, $task, true); } /** * Writes a common 'edit' button for a template html. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function editHtml($task = 'edit_source', $alt = 'JTOOLBAR_EDIT_HTML') { $bar = JToolbar::getInstance('toolbar'); // Add an edit html button. $bar->appendButton('Standard', 'edithtml', $alt, $task, true); } /** * Writes a common 'edit' button for a template css. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function editCss($task = 'edit_css', $alt = 'JTOOLBAR_EDIT_CSS') { $bar = JToolbar::getInstance('toolbar'); // Add an edit css button (hide). $bar->appendButton('Standard', 'editcss', $alt, $task, true); } /** * Writes a common 'delete' button for a list of records. * * @param string $msg Postscript for the 'are you sure' message. * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function deleteList($msg = '', $task = 'remove', $alt = 'JTOOLBAR_DELETE') { $bar = JToolbar::getInstance('toolbar'); // Add a delete button. if ($msg) { $bar->appendButton('Confirm', $msg, 'delete', $alt, $task, true); } else { $bar->appendButton('Standard', 'delete', $alt, $task, true); } } /** * Writes a common 'trash' button for a list of records. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * @param bool $check True to allow lists. * * @return void * * @since 1.5 */ public static function trash($task = 'remove', $alt = 'JTOOLBAR_TRASH', $check = true) { $bar = JToolbar::getInstance('toolbar'); // Add a trash button. $bar->appendButton('Standard', 'trash', $alt, $task, $check, false); } /** * Writes a save button for a given option. * Apply operation leads to a save action only (does not leave edit mode). * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function apply($task = 'apply', $alt = 'JTOOLBAR_APPLY') { $bar = JToolbar::getInstance('toolbar'); // Add an apply button $bar->appendButton('Standard', 'apply', $alt, $task, false); } /** * Writes a save button for a given option. * Save operation leads to a save and then close action. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function save($task = 'save', $alt = 'JTOOLBAR_SAVE') { $bar = JToolbar::getInstance('toolbar'); // Add a save button. $bar->appendButton('Standard', 'save', $alt, $task, false); } /** * Writes a save and create new button for a given option. * Save and create operation leads to a save and then add action. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.6 */ public static function save2new($task = 'save2new', $alt = 'JTOOLBAR_SAVE_AND_NEW') { $bar = JToolbar::getInstance('toolbar'); // Add a save and create new button. $bar->appendButton('Standard', 'save-new', $alt, $task, false); } /** * Writes a save as copy button for a given option. * Save as copy operation leads to a save after clearing the key, * then returns user to edit mode with new key. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.6 */ public static function save2copy($task = 'save2copy', $alt = 'JTOOLBAR_SAVE_AS_COPY') { $bar = JToolbar::getInstance('toolbar'); // Add a save and create new button. $bar->appendButton('Standard', 'save-copy', $alt, $task, false); } /** * Writes a checkin button for a given option. * * @param string $task An override for the task. * @param string $alt An override for the alt text. * @param boolean $check True if required to check that a standard list item is checked. * * @return void * * @since 1.7 */ public static function checkin($task = 'checkin', $alt = 'JTOOLBAR_CHECKIN', $check = true) { $bar = JToolbar::getInstance('toolbar'); // Add a save and create new button. $bar->appendButton('Standard', 'checkin', $alt, $task, $check); } /** * Writes a cancel button and invokes a cancel operation (eg a checkin). * * @param string $task An override for the task. * @param string $alt An override for the alt text. * * @return void * * @since 1.5 */ public static function cancel($task = 'cancel', $alt = 'JTOOLBAR_CANCEL') { $bar = JToolbar::getInstance('toolbar'); // Add a cancel button. $bar->appendButton('Standard', 'cancel', $alt, $task, false); } /** * Writes a configuration button and invokes a cancel operation (eg a checkin). * * @param string $component The name of the component, eg, com_content. * @param integer $height The height of the popup. [UNUSED] * @param integer $width The width of the popup. [UNUSED] * @param string $alt The name of the button. * @param string $path An alternative path for the configuation xml relative to JPATH_SITE. * * @return void * * @since 1.5 */ public static function preferences($component, $height = '550', $width = '875', $alt = 'JToolbar_Options', $path = '') { $component = urlencode($component); $path = urlencode($path); $bar = JToolBar::getInstance('toolbar'); $uri = (string) JUri::getInstance(); $return = urlencode(base64_encode($uri)); // Add a button linking to config for component. $bar->appendButton( 'Link', 'options', $alt, 'index.php?option=com_config&view=component&component=' . $component . '&path=' . $path . '&return=' . $return ); } /** * Writes a version history * * @param string $typeAlias The component and type, for example 'com_content.article' * @param integer $itemId The id of the item, for example the article id. * @param integer $height The height of the popup. * @param integer $width The width of the popup. * @param string $alt The name of the button. * * @return void * * @since 3.2 */ public static function versions($typeAlias, $itemId, $height = 800, $width = 500, $alt = 'JTOOLBAR_VERSIONS') { JHtml::_('behavior.modal', 'a.modal_jform_contenthistory'); $contentTypeTable = JTable::getInstance('Contenttype'); $typeId = $contentTypeTable->getTypeId($typeAlias); // Options array for JLayout $options = array(); $options['title'] = JText::_($alt); $options['height'] = $height; $options['width'] = $width; $options['itemId'] = $itemId; $options['typeId'] = $typeId; $options['typeAlias'] = $typeAlias; $bar = JToolbar::getInstance('toolbar'); $layout = new JLayoutFile('joomla.toolbar.versions'); $bar->appendButton('Custom', $layout->render($options), 'versions'); } /** * Displays a modal button * * @param string $targetModalId ID of the target modal box * @param string $icon Icon class to show on modal button * @param string $alt Title for the modal button * * @return void * * @since 3.2 */ public static function modal($targetModalId, $icon, $alt) { JHtml::_('bootstrap.framework'); $title = JText::_($alt); $dhtml = "<button data-toggle='modal' data-target='#" . $targetModalId . "' class='btn btn-small'> <span class='" . $icon . "' title='" . $title . "'></span> " . $title . "</button>"; $bar = JToolbar::getInstance('toolbar'); $bar->appendButton('Custom', $dhtml, $alt); } } PKb��\]�as index.phpnu�[���<?php /** * @package Joomla.Administrator * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ /** * Define the application's minimum supported PHP version as a constant so it can be referenced within the application. */ define('JOOMLA_MINIMUM_PHP', '5.3.10'); if (version_compare(PHP_VERSION, JOOMLA_MINIMUM_PHP, '<')) { die('Your host needs to use PHP ' . JOOMLA_MINIMUM_PHP . ' or higher to run this version of Joomla!'); } // Saves the start time and memory usage. $startTime = microtime(1); $startMem = memory_get_usage(); /** * Constant that is checked in included files to prevent direct access. * define() is used in the installation folder rather than "const" to not error for PHP 5.2 and lower */ define('_JEXEC', 1); if (file_exists(__DIR__ . '/defines.php')) { include_once __DIR__ . '/defines.php'; } if (!defined('_JDEFINES')) { define('JPATH_BASE', __DIR__); require_once JPATH_BASE . '/includes/defines.php'; } require_once JPATH_BASE . '/includes/framework.php'; require_once JPATH_BASE . '/includes/helper.php'; require_once JPATH_BASE . '/includes/subtoolbar.php'; // Set profiler start time and memory usage and mark afterLoad in the profiler. JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null; // Instantiate the application. $app = JFactory::getApplication('administrator'); // Execute the application. $app->execute(); PKb��\�V�language/overrides/index.htmlnu�[���<!DOCTYPE html><title></title> PKb��\�6��SS,language/en-GB/en-GB.com_postinstall.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_POSTINSTALL="Post-installation Messages" COM_POSTINSTALL_MESSAGES_VIEW_DEFAULT_DESC="Displays post-installation and post-upgrade messages for Joomla! and its extensions." COM_POSTINSTALL_MESSAGES_VIEW_DEFAULT_TITLE="Post-Installation Messages" COM_POSTINSTALL_XML_DESCRIPTION="Displays post-installation and post-upgrade messages for Joomla! and its extensions." PKb��\�I�0language/en-GB/en-GB.plg_finder_contacts.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_CONTACTS="Smart Search - Contacts" PLG_FINDER_CONTACTS_ERROR_ACTIVATING_PLUGIN="Could not automatically activate the "Smart Search - Contacts" plugin." PLG_FINDER_CONTACTS_XML_DESCRIPTION="This plugin indexes Joomla! Contacts." PLG_FINDER_STATISTICS_CONTACT="Contact" PKb��\�)+.+.,language/en-GB/en-GB.plg_editors_tinymce.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EDITORS_TINYMCE="Editor - TinyMCE" PLG_TINY_BUTTON_TOGGLE_EDITOR="Toggle editor" PLG_TINY_CONFIG_TEXTFILTER_ACL_DESC="If on, the text filter from the Joomla Global Configuration for every user group is applied. <br />If off, the filters as defined here are used for all user groups." PLG_TINY_CONFIG_TEXTFILTER_ACL_LABEL="Use Joomla Text Filter" PLG_TINY_ERR_CUSTOMCSSFILENOTPRESENT="The file name %s was entered in the TinyMCE Custom CSS field. This file could not be found in the default template folder. No styles are available." PLG_TINY_ERR_EDITORCSSFILENOTPRESENT="Could not find the file 'editor.css' in the template or templates/system folder. No styles are available." PLG_TINY_ERR_UNSUPPORTEDBROWSER="Drag and drop image upload is not available for your browser. Please consider using a fully HTML5 compatible browser." PLG_TINY_FIELD_ADVIMAGE_DESC="Turn on/off a more advanced image dialog." PLG_TINY_FIELD_ADVIMAGE_LABEL="Advanced Image" PLG_TINY_FIELD_ADVLIST_DESC="Turn on/off to enable to set number formats and bullet types in ordered and unordered lists." PLG_TINY_FIELD_ADVLIST_LABEL="Advanced List" PLG_TINY_FIELD_ALIGN_DESC="Turn on/off to enable the alignment of the text." PLG_TINY_FIELD_ALIGN_LABEL="Text Alignment" PLG_TINY_FIELD_BLOCKQUOTE_DESC="Turn on/off blockquotes." PLG_TINY_FIELD_BLOCKQUOTE_LABEL="Blockquote" PLG_TINY_FIELD_CODESAMPLE_DESC="Turn on/off code highlighting" PLG_TINY_FIELD_CODESAMPLE_LABEL="Code Sample" PLG_TINY_FIELD_COLORS_DESC="Show or hide the Colours control buttons." PLG_TINY_FIELD_COLORS_LABEL="Colours" PLG_TINY_FIELD_CONTEXTMENU_DESC="Turn on/off Context Menu." PLG_TINY_FIELD_CONTEXTMENU_LABEL="Context Menu" PLG_TINY_FIELD_CSS_DESC="By default the Plugin looks for an editor.css file. If it can't find one in the default template CSS folder, it loads the editor.css file from the system template." PLG_TINY_FIELD_CSS_LABEL="Template CSS Classes" PLG_TINY_FIELD_CUSTOMBUTTON_DESC="Add custom button(s)." PLG_TINY_FIELD_CUSTOMBUTTON_LABEL="Custom Button" PLG_TINY_FIELD_CUSTOMPLUGIN_DESC="Add custom plugin(s)." PLG_TINY_FIELD_CUSTOMPLUGIN_LABEL="Custom Plugin" PLG_TINY_FIELD_CUSTOM_CSS_DESC="Optional CSS file that will override the standard editor.css file. Enter a file name to point to a file in the CSS folder of the default template (for example, templates/beez3/css/). Or enter a full URL path to the custom CSS file. If you enter a value in this field, this file will be used instead of the editor.css file." PLG_TINY_FIELD_CUSTOM_CSS_LABEL="Custom CSS Classes" PLG_TINY_FIELD_CUSTOM_PATH_DESC="The directory with the image files to be listed relative to the default image folder (set in Media > Options)." PLG_TINY_FIELD_CUSTOM_PATH_LABEL="Images Directory" PLG_TINY_FIELD_DATE_DESC="Show or hide the Insert Date button." PLG_TINY_FIELD_DATE_LABEL="Insert Date" PLG_TINY_FIELD_DIRECTION_DESC="Choose default text direction." PLG_TINY_FIELD_DIRECTION_LABEL="Text Direction" PLG_TINY_FIELD_DRAG_DROP_DESC="Enable drag and drop for uploading images" PLG_TINY_FIELD_DRAG_DROP_LABEL="Images Drag and Drop" PLG_TINY_FIELD_ELEMENTS_DESC="Allows the addition of specific valid elements to the existing rule set." PLG_TINY_FIELD_ELEMENTS_LABEL="Extended Valid Elements" PLG_TINY_FIELD_ENCODING_DESC="Controls how HTML entities are encoded. Recommended setting is 'raw'. 'named' = used named entity encoding (for example, '<'). 'numeric' = use numeric HTML encoding (for example, '%03c'). raw = Do not encode HTML entities. Note that searching content may not work properly if setting is not 'raw'." PLG_TINY_FIELD_ENCODING_LABEL="Entity Encoding" PLG_TINY_FIELD_FONTS_DESC="Show or hide the Font control selectors." PLG_TINY_FIELD_FONTS_LABEL="Fonts" PLG_TINY_FIELD_FULLSCREEN_DESC="Show or hide the Fullscreen button." PLG_TINY_FIELD_FULLSCREEN_LABEL="Fullscreen" PLG_TINY_FIELD_FUNCTIONALITY_DESC="Select level of functionality." PLG_TINY_FIELD_FUNCTIONALITY_LABEL="Functionality" PLG_TINY_FIELD_HR_DESC="Show or hide the Horizontal Rule button." PLG_TINY_FIELD_HR_LABEL="Horizontal Rule" PLG_TINY_FIELD_HTMLHEIGHT_DESC="Height of HTML editor. Only applies in Advanced and Extended mode." PLG_TINY_FIELD_HTMLHEIGHT_LABEL="HTML Height" PLG_TINY_FIELD_HTMLWIDTH_DESC="Width of HTML editor. Should normally be left empty to let it flow. Only applies in Advanced and Extended mode." PLG_TINY_FIELD_HTMLWIDTH_LABEL="HTML Width" PLG_TINY_FIELD_INLINEPOPUPS_DESC="All dialogs to open as floating div layers instead of popup windows. This option can be very useful to get around popup blockers." PLG_TINY_FIELD_INLINEPOPUPS_LABEL="Inline Popups" PLG_TINY_FIELD_LABEL_ADVANCEDPARAMS="Advanced" PLG_TINY_FIELD_LANGCODE_DESC="Editor UI Language. The value will be used if Automatic language is not set." PLG_TINY_FIELD_LANGCODE_LABEL="Language Code" PLG_TINY_FIELD_LANGSELECT_DESC="If Yes, editor language will automatically match selected UI language. If the tiny language does not exist, the editor language will default to English." PLG_TINY_FIELD_LANGSELECT_LABEL="Automatic Language Selection" PLG_TINY_FIELD_LINK_DESC="Select to enable the Link icons." PLG_TINY_FIELD_LINK_LABEL="Links" PLG_TINY_FIELD_MEDIA_DESC="Show or hide the Media button." PLG_TINY_FIELD_MEDIA_LABEL="Media" PLG_TINY_FIELD_MOBILE_DESC="This mode puts any mobile devices into the simple functionality with enlarged buttons for easy access." PLG_TINY_FIELD_MOBILE_LABEL="Mobile Mode" PLG_TINY_FIELD_NAME_EXTENDED_LABEL="<strong>Extended Mode Options</strong><br />Below you can set the access level for each one of the fields individually.<br />Please keep in mind that these options will only have an effect in <strong>Extended</strong> mode." PLG_TINY_FIELD_NEWLINES_DESC="New lines will be created using the selected option." PLG_TINY_FIELD_NEWLINES_LABEL="New Lines" PLG_TINY_FIELD_NONBREAKING_DESC="Insert non-breaking space entities." PLG_TINY_FIELD_NONBREAKING_LABEL="Non-breaking" PLG_TINY_FIELD_NUMBER_OF_SETS_LABEL="Number of Sets" PLG_TINY_FIELD_NUMBER_OF_SETS_DESC="Number of sets that can be created. Minimum 3" PLG_TINY_FIELD_PASTE_DESC="Show or hide the Paste button." PLG_TINY_FIELD_PASTE_LABEL="Paste" PLG_TINY_FIELD_PATH_DESC="If set to ON, it displays the set classes for the marked text." PLG_TINY_FIELD_PATH_LABEL="Element Path" PLG_TINY_FIELD_PRINT_DESC="Turn on/off the print and print preview icons in the editor." PLG_TINY_FIELD_PRINT_LABEL="Print/Preview" PLG_TINY_FIELD_PROHIBITED_DESC="Elements that will be cleaned from the text. Do not leave empty - if you do not want to prohibit anything enter dummy text eg cms." PLG_TINY_FIELD_PROHIBITED_LABEL="Prohibited Elements" PLG_TINY_FIELD_RESIZE_HORIZONTAL_DESC="Enable/disable the horizontal resizing." PLG_TINY_FIELD_RESIZE_HORIZONTAL_LABEL="Horizontal Resizing" PLG_TINY_FIELD_RESIZING_DESC="Enable/disable the resizing of the editor area (vertically and also horizontally if 'Horizontal Resizing' is enabled)." PLG_TINY_FIELD_RESIZING_LABEL="Resizing" PLG_TINY_FIELD_RTL_DESC="Show or hide the RTL button." PLG_TINY_FIELD_RTL_LABEL="Directionality" ; The two following strings are deprecated PLG_TINY_FIELD_SAVEWARNING_DESC="Gives warning if you cancel without saving changes." PLG_TINY_FIELD_SAVEWARNING_LABEL="Save Warning" PLG_TINY_FIELD_SEARCH-REPLACE_DESC="Show or hide the Search & Replace button." PLG_TINY_FIELD_SEARCH-REPLACE_LABEL="Search & Replace" PLG_TINY_FIELD_SETACCESS_DESC="Restrict users that will use this set to those in the selected user groups.<br>If a user belongs to multiple groups, the set used will be the one which is assigned to a group higher in the hierarchy.<br>Example: if a set is assigned to Author and another set to Publishers, if the user belongs to both groups, the set assigned to Publishers will be used." PLG_TINY_FIELD_SETACCESS_LABEL="Assign this Set to" PLG_TINY_FIELD_SKIN_ADMIN_DESC="Select skin for the Administrator Backend interface." PLG_TINY_FIELD_SKIN_ADMIN_LABEL="Administrator Skin" PLG_TINY_FIELD_SKIN_DESC="Select skin for the Frontend interface." PLG_TINY_FIELD_SKIN_INFO_DESC="Copy your new skins to: /media/editors/tinymce/skins." PLG_TINY_FIELD_SKIN_INFO_LABEL="For customised skins go to: <a href="_QQ_"http://skin.tiny.cloud"_QQ_" target="_QQ_"_blank"_QQ_">Skin Creator</a>" PLG_TINY_FIELD_SKIN_LABEL="Site Skin" PLG_TINY_FIELD_SMILIES_DESC="Show or hide the Smilies buttons." PLG_TINY_FIELD_SMILIES_LABEL="Smilies" PLG_TINY_FIELD_TABLE_DESC="Show or hide the Table control buttons." PLG_TINY_FIELD_TABLE_LABEL="Table" PLG_TINY_FIELD_TEMPLATE_DESC="Show or hide the Insert predefined template content button." PLG_TINY_FIELD_TEMPLATE_LABEL="Template" PLG_TINY_FIELD_URLS_DESC="URL behaviour." PLG_TINY_FIELD_URLS_LABEL="URLs" PLG_TINY_FIELD_VALIDELEMENTS_DESC="Defines which elements will stay in the edited text when the editor saves (the default rule set for this option is a mixture of the full HTML5 and HTML4 specification)." PLG_TINY_FIELD_VALIDELEMENTS_LABEL="Valid Elements" PLG_TINY_FIELD_VALUE_ABSOLUTE="Absolute" PLG_TINY_FIELD_VALUE_ADVANCED="Advanced" PLG_TINY_FIELD_VALUE_ALWAYS="Always" PLG_TINY_FIELD_VALUE_BOTTOM="Bottom" PLG_TINY_FIELD_VALUE_BR="BR Elements" PLG_TINY_FIELD_VALUE_CENTER="Center" PLG_TINY_FIELD_VALUE_DEFAULT="Default" PLG_TINY_FIELD_VALUE_EXTENDED="Extended" PLG_TINY_FIELD_VALUE_FRONT="Front Only" PLG_TINY_FIELD_VALUE_LEFT="Left" PLG_TINY_FIELD_VALUE_LTR="Left to Right" PLG_TINY_FIELD_VALUE_NAMED="named" PLG_TINY_FIELD_VALUE_NEVER="Never" PLG_TINY_FIELD_VALUE_NUMERIC="numeric" PLG_TINY_FIELD_VALUE_P="P Elements" PLG_TINY_FIELD_VALUE_RAW="raw" PLG_TINY_FIELD_VALUE_RELATIVE="Relative" PLG_TINY_FIELD_VALUE_RIGHT="Right" PLG_TINY_FIELD_VALUE_RTL="Right to Left" PLG_TINY_FIELD_VALUE_SIMPLE="Simple" PLG_TINY_FIELD_VALUE_TOP="Top" PLG_TINY_FIELD_VISUALBLOCKS_DESC="See the outline of HTML block elements." PLG_TINY_FIELD_VISUALBLOCKS_LABEL="Visualblocks" PLG_TINY_FIELD_VISUALCHARS_DESC="See invisible characters, specifically non-breaking spaces." PLG_TINY_FIELD_VISUALCHARS_LABEL="Visualchars" PLG_TINY_FIELD_WORDCOUNT_DESC="Turn on/off word count." PLG_TINY_FIELD_WORDCOUNT_LABEL="Word Count" PLG_TINY_LEGACY_WARNING="The <a href="_QQ_"%s"_QQ_">TinyMCE Editor Plugin</a> has been updated. Currently it uses your existing configuration. By editing the plugin, you can now assign and customise various layouts to specific user groups. <br />Warning: when editing the plugin, you will lose all your previous settings!" PLG_TINY_SET_TARGET_PANEL_DESCRIPTION="<strong>Existing sets of the TinyMCE panel, and options for each set.</strong><br />In each set you can add or remove from <strong>the available menus and buttons</strong>." PLG_TINY_SET_TITLE="Set %s" PLG_TINY_SET_PRESET_BUTTON_ADVANCED="Use advanced preset" PLG_TINY_SET_PRESET_BUTTON_MEDIUM="Use medium preset" PLG_TINY_SET_PRESET_BUTTON_SIMPLE="Use simple preset" PLG_TINY_SET_SOURCE_PANEL_DESCRIPTION="<strong>All available menus and buttons.</strong><br />Use them (drag and drop) to edit or build your custom TinyMCE panel." PLG_TINY_TEMPLATE_LAYOUT1_DESC="HTML layout." PLG_TINY_TEMPLATE_LAYOUT1_TITLE="Layout" PLG_TINY_TEMPLATE_SNIPPET1_DESC="Simple HTML snippet." PLG_TINY_TEMPLATE_SNIPPET1_TITLE="Simple Snippet" ; TinyMCE toolbar buttons PLG_TINY_TOOLBAR_BUTTON_FONTSELECT="Font Select" PLG_TINY_TOOLBAR_BUTTON_FONTSIZESELECT="Font Size Select" PLG_TINY_TOOLBAR_BUTTON_FORMATSELECT="Format Select" PLG_TINY_TOOLBAR_BUTTON_STYLESELECT="Style Select" PLG_TINY_TOOLBAR_BUTTON_SEPARATOR="Separator" PLG_TINY_XML_DESCRIPTION="TinyMCE is a platform independent web based JavaScript HTML WYSIWYG Editor." PKb��\&�|<|<$language/en-GB/en-GB.com_banners.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_BANNERS="Banners" COM_BANNERS_BANNER_DETAILS="Details" COM_BANNERS_BANNER_SAVE_SUCCESS="Banner saved." COM_BANNERS_BANNERS_FILTER_SEARCH_DESC="Search in banner name and alias. Prefix with ID: to search for a banner ID." COM_BANNERS_BANNERS_FILTER_SEARCH_LABEL="Search Banners" COM_BANNERS_BANNERS_HTML_PIN_BANNER="Pinned banner" COM_BANNERS_BANNERS_HTML_UNPIN_BANNER="Unpinned banner" COM_BANNERS_BANNERS_N_ITEMS_ARCHIVED="%d banners archived." COM_BANNERS_BANNERS_N_ITEMS_ARCHIVED_1="%d banner archived." COM_BANNERS_BANNERS_N_ITEMS_CHECKED_IN_0="No banner checked in." COM_BANNERS_BANNERS_N_ITEMS_CHECKED_IN_1="%d banner checked in." COM_BANNERS_BANNERS_N_ITEMS_CHECKED_IN_MORE="%d banners checked in." COM_BANNERS_BANNERS_N_ITEMS_DELETED="%d banners deleted." COM_BANNERS_BANNERS_N_ITEMS_DELETED_1="%d banner deleted." COM_BANNERS_BANNERS_N_ITEMS_PUBLISHED="%d banners published." COM_BANNERS_BANNERS_N_ITEMS_PUBLISHED_1="%d banner published." COM_BANNERS_BANNERS_N_ITEMS_TRASHED="%d banners trashed." COM_BANNERS_BANNERS_N_ITEMS_TRASHED_1="%d banner trashed." COM_BANNERS_BANNERS_N_ITEMS_UNPUBLISHED="%d banners unpublished." COM_BANNERS_BANNERS_N_ITEMS_UNPUBLISHED_1="%d banner unpublished." COM_BANNERS_BANNERS_NO_ITEM_SELECTED="No Banners selected." COM_BANNERS_BANNERS_PINNED="Pinned Banner" COM_BANNERS_BANNERS_UNPINNED="Unpinned Banner" COM_BANNERS_BATCH_CLIENT_LABEL="Set Client" COM_BANNERS_BATCH_CLIENT_LABEL_DESC="Not making a selection will keep the original client when processing." COM_BANNERS_BATCH_CLIENT_NOCHANGE="- Keep original Client -" COM_BANNERS_BATCH_OPTIONS="Batch process the selected banners" COM_BANNERS_BATCH_TIP="If a category is selected for move/copy, any actions selected will be applied to the copied or moved banners. Otherwise, all actions are applied to the selected banners." COM_BANNERS_BEGIN_DESC="Banner begin date" COM_BANNERS_BEGIN_HINT="Begin date (yyyy-mm-dd)" COM_BANNERS_BEGIN_LABEL="Begin Date" COM_BANNERS_CANCEL="Cancel" COM_BANNERS_CLICK="Click" COM_BANNERS_CLIENT_SAVE_SUCCESS="Client saved." COM_BANNERS_CLIENTS_FILTER_SEARCH_DESC="Search in client name. Prefix with ID: to search for a client ID." COM_BANNERS_CLIENTS_FILTER_SEARCH_LABEL="Search Clients" COM_BANNERS_CLIENTS_N_ITEMS_ARCHIVED="%d clients archived." COM_BANNERS_CLIENTS_N_ITEMS_ARCHIVED_1="%d client archived." COM_BANNERS_CLIENTS_N_ITEMS_CHECKED_IN_0="No client checked in." COM_BANNERS_CLIENTS_N_ITEMS_CHECKED_IN_1="%d client checked in." COM_BANNERS_CLIENTS_N_ITEMS_CHECKED_IN_MORE="%d clients checked in." COM_BANNERS_CLIENTS_N_ITEMS_DELETED="%d clients deleted." COM_BANNERS_CLIENTS_N_ITEMS_DELETED_1="%d client deleted." COM_BANNERS_CLIENTS_N_ITEMS_PUBLISHED="%d clients published." COM_BANNERS_CLIENTS_N_ITEMS_PUBLISHED_1="%d client published." COM_BANNERS_CLIENTS_N_ITEMS_TRASHED="%d clients trashed." COM_BANNERS_CLIENTS_N_ITEMS_TRASHED_1="%d client trashed." COM_BANNERS_CLIENTS_N_ITEMS_UNPUBLISHED="%d clients unpublished." COM_BANNERS_CLIENTS_N_ITEMS_UNPUBLISHED_1="%d client unpublished." COM_BANNERS_CLIENTS_NO_ITEM_SELECTED="No clients selected." COM_BANNERS_CONFIGURATION="Banners: Options" COM_BANNERS_COUNT_ARCHIVED_ITEMS="Archived banners" COM_BANNERS_COUNT_PUBLISHED_ITEMS="Published banners" COM_BANNERS_COUNT_TRASHED_ITEMS="Trashed banners" COM_BANNERS_COUNT_UNPUBLISHED_ITEMS="Unpublished banners" COM_BANNERS_DEFAULT="Default (%s)" COM_BANNERS_DELETE_MSG="Are you sure you want to delete all these tracks?" COM_BANNERS_EDIT_BANNER="Edit Banner" COM_BANNERS_EDIT_CLIENT="Details" COM_BANNERS_END_DESC="Banner end date" COM_BANNERS_END_HINT="End date (yyyy-mm-dd)" COM_BANNERS_END_LABEL="End Date" COM_BANNERS_ERR_ZIP_ADAPTER_FAILURE="Zip adapter failure" COM_BANNERS_ERR_ZIP_CREATE_FAILURE="Zip create failure" COM_BANNERS_ERR_ZIP_DELETE_FAILURE="Zip delete failure" COM_BANNERS_ERROR_UNIQUE_ALIAS="Another Banner from this category has the same alias (remember it may be a trashed item)." COM_BANNERS_EXTRA="Additional Information" COM_BANNERS_FIELD_ALIAS_DESC="The alias is for internal use only. Leave this blank and Joomla will fill in a default value from the title. It has to be unique for each banner in the same category." COM_BANNERS_FIELD_ALT_DESC="Alternative text used for visitors without access to images." COM_BANNERS_FIELD_ALT_LABEL="Alt Text" COM_BANNERS_FIELD_BANNEROWNPREFIX_DESC="Use own prefix or the client prefix." COM_BANNERS_FIELD_BANNEROWNPREFIX_LABEL="Use Own Prefix" COM_BANNERS_FIELD_BASENAME_DESC="File name pattern which can have<br />__SITE__ for the site name<br />__CATID__ for the category ID<br />__CATNAME__ for the category name<br />__CLIENTID__ for the client ID<br />__CLIENTNAME__ for the client name<br />__TYPE__ for the type<br />__TYPENAME__ for the type name<br />__BEGIN__ for the begin date<br />__END__ for the end date." COM_BANNERS_FIELD_BASENAME_LABEL="File Name" COM_BANNERS_FIELD_CATEGORY_DESC="Choose a category for this banner." COM_BANNERS_FIELD_CLICKS_DESC="Displays the number of clicks on the banner. Select reset if desired." COM_BANNERS_FIELD_CLICKS_LABEL="Total Clicks" COM_BANNERS_FIELD_CLICKURL_DESC="The URL used when the banner is clicked on." COM_BANNERS_FIELD_CLICKURL_LABEL="Click URL" COM_BANNERS_FIELD_CLIENT_DESC="Choose a client for this banner." COM_BANNERS_FIELD_CLIENT_LABEL="Client" COM_BANNERS_FIELD_CLIENT_METAKEYWORDPREFIX_DESC="When matching Meta keywords, only search for Meta keywords with this prefix (improves performance)." COM_BANNERS_FIELD_CLIENT_METAKEYWORDPREFIX_LABEL="Meta Keyword Prefix" COM_BANNERS_FIELD_CLIENT_METAKEYWORDS_DESC="Enter the meta keywords for the clients' banners." COM_BANNERS_FIELD_CLIENT_NAME_DESC="Enter a name for the client." COM_BANNERS_FIELD_CLIENT_NAME_LABEL="Client Name" COM_BANNERS_FIELD_CLIENT_STATE_DESC="Defines the status of the client." COM_BANNERS_FIELD_CLIENTOWNPREFIX_DESC="Use own prefix or the component prefix." COM_BANNERS_FIELD_CLIENTOWNPREFIX_LABEL="Use Own Prefix" COM_BANNERS_FIELD_COMPRESSED_DESC="Option to compress file for export." COM_BANNERS_FIELD_COMPRESSED_LABEL="Compressed" COM_BANNERS_FIELD_CONTACT_DESC="Enter the name of a user as contact." COM_BANNERS_FIELD_CONTACT_LABEL="Contact Name" COM_BANNERS_FIELD_CREATED_BY_ALIAS_DESC="Enter an alias to be displayed instead of the name of the user who created the banner." COM_BANNERS_FIELD_CREATED_BY_ALIAS_LABEL="Created by Alias" COM_BANNERS_FIELD_CREATED_BY_DESC="Select the name of the user who created the banner." COM_BANNERS_FIELD_CREATED_BY_LABEL="Created By" COM_BANNERS_FIELD_CREATED_DESC="Banner created date." COM_BANNERS_FIELD_CREATED_LABEL="Created Date" COM_BANNERS_FIELD_CUSTOMCODE_DESC="Enter your custom code for the banner." COM_BANNERS_FIELD_CUSTOMCODE_LABEL="Custom Code" COM_BANNERS_FIELD_DESCRIPTION_DESC="Enter a description for the banner." COM_BANNERS_FIELD_EMAIL_DESC="Enter a valid Contact email." COM_BANNERS_FIELD_EMAIL_LABEL="Contact Email" COM_BANNERS_FIELD_EXTRAINFO_DESC="Enter extra information for this client." COM_BANNERS_FIELD_EXTRAINFO_LABEL="Additional Information" COM_BANNERS_FIELD_HEIGHT_DESC="The height of the banner." COM_BANNERS_FIELD_HEIGHT_LABEL="Height" COM_BANNERS_FIELD_IMAGE_DESC="Select or upload an image for this banner." COM_BANNERS_FIELD_IMAGE_LABEL="Image" COM_BANNERS_FIELD_IMPMADE_DESC="Displays the number of impressions made for the banner." COM_BANNERS_FIELD_IMPMADE_LABEL="Total Impressions" COM_BANNERS_FIELD_IMPTOTAL_DESC="Total limit of impressions defined for the banner." COM_BANNERS_FIELD_IMPTOTAL_LABEL="Max. Impressions" COM_BANNERS_FIELD_LANGUAGE_DESC="Assign a language to this banner." COM_BANNERS_FIELD_METAKEYWORDPREFIX_DESC="When matching Meta keywords, only search for Meta keywords with this prefix (improves performance)." COM_BANNERS_FIELD_METAKEYWORDPREFIX_LABEL="Meta Keyword Prefix" COM_BANNERS_FIELD_METAKEYWORDS_DESC="Enter the meta keywords for the banner." COM_BANNERS_FIELD_MODIFIED_BY_DESC="Name of the user who modified this banner." COM_BANNERS_FIELD_NAME_DESC="Enter a name for the banner." COM_BANNERS_FIELD_NAME_LABEL="Name" COM_BANNERS_FIELD_PUBLISH_DOWN_DESC="An optional date to Finish Publishing the banner." COM_BANNERS_FIELD_PUBLISH_DOWN_LABEL="Finish Publishing" COM_BANNERS_FIELD_PUBLISH_UP_DESC="An optional date to Start Publishing the banner." COM_BANNERS_FIELD_PUBLISH_UP_LABEL="Start Publishing" COM_BANNERS_FIELD_PURCHASETYPE_DESC="Select the type of purchase in the list." COM_BANNERS_FIELD_PURCHASETYPE_LABEL="Purchase Type" COM_BANNERS_FIELD_STATE_DESC="Defines the status of the banner." COM_BANNERS_FIELD_STICKY_DESC="Whether or not the Banner is 'pinned'. If one or more Banners in a Category are pinned, they will take priority over Banners that are not pinned. For example, if two Banners in a Category are pinned and a third Banner is not pinned, the third Banner will not display if the module setting is 'Pinned, Randomise'. Only the two pinned Banners will display." COM_BANNERS_FIELD_STICKY_LABEL="Pinned" COM_BANNERS_FIELD_TRACKCLICK_DESC="Record the number of clicks on the banners on a daily basis." COM_BANNERS_FIELD_TRACKCLICK_LABEL="Track Clicks" COM_BANNERS_FIELD_TRACKIMPRESSION_DESC="Record the impressions (views) of the banners on a daily basis." COM_BANNERS_FIELD_TRACKIMPRESSION_LABEL="Track Impressions" COM_BANNERS_FIELD_TRACKROBOTSIMPRESSION_DESC="Include search engines in the count of impressions." COM_BANNERS_FIELD_TRACKROBOTSIMPRESSION_LABEL="Impressions by Search Engines" COM_BANNERS_FIELD_TYPE_DESC="Choose the type of banner. Select Image to display an image. Select Custom to enter your custom code." COM_BANNERS_FIELD_TYPE_LABEL="Type" ; The following five strings are deprecated and will be removed with 4.0. They generate wrong plural detection in Crowdin. COM_BANNERS_FIELD_VALUE_1="Unlimited" COM_BANNERS_FIELD_VALUE_2="Yearly" COM_BANNERS_FIELD_VALUE_3="Monthly" COM_BANNERS_FIELD_VALUE_4="Weekly" COM_BANNERS_FIELD_VALUE_5="Daily" COM_BANNERS_FIELD_VALUE_UNLIMITED="Unlimited" COM_BANNERS_FIELD_VALUE_YEARLY="Yearly" COM_BANNERS_FIELD_VALUE_MONTHLY="Monthly" COM_BANNERS_FIELD_VALUE_WEEKLY="Weekly" COM_BANNERS_FIELD_VALUE_DAILY="Daily" COM_BANNERS_FIELD_VALUE_CUSTOM="Custom" COM_BANNERS_FIELD_VALUE_IMAGE="Image" COM_BANNERS_FIELD_VALUE_USECLIENTDEFAULT="-- Use Client Default --" COM_BANNERS_FIELD_VALUE_USECOMPONENTDEFAULT="-- Use Component Default --" COM_BANNERS_FIELD_VERSION_LABEL="Revision" COM_BANNERS_FIELD_VERSION_DESC="A count of the number of times this banner has been revised." COM_BANNERS_FIELD_WIDTH_LABEL="Width" COM_BANNERS_FIELD_WIDTH_DESC="The width of the banner." COM_BANNERS_FIELDSET_CONFIG_BANNER_OPTIONS_DESC="These settings apply to version history for Banners, Banner Categories and Banner Clients." COM_BANNERS_FIELDSET_CONFIG_BANNER_OPTIONS_LABEL="History" COM_BANNERS_FIELDSET_CONFIG_CLIENT_OPTIONS_LABEL="Client" COM_BANNERS_FIELDSET_CONFIG_CLIENT_OPTIONS_DESC="These settings apply for all clients unless they are changed for a specific client." COM_BANNERS_FILENAME="%1$s-banners-tracks-%2$s" COM_BANNERS_GROUP_LABEL_PUBLISHING_DETAILS="Publishing Options" COM_BANNERS_GROUP_LABEL_BANNER_DETAILS="Banner Details" COM_BANNERS_HEADING_ACTIVE="Active" COM_BANNERS_HEADING_ACTIVE_ASC="Active ascending" COM_BANNERS_HEADING_ACTIVE_DESC="Active descending" COM_BANNERS_HEADING_BANNERS="Banners" COM_BANNERS_HEADING_BANNERS_ASC="Banners ascending" COM_BANNERS_HEADING_BANNERS_DESC="Banners descending" COM_BANNERS_HEADING_CLICKS="Clicks" COM_BANNERS_HEADING_CLICKS_ASC="Clicks ascending" COM_BANNERS_HEADING_CLICKS_DESC="Clicks descending" COM_BANNERS_HEADING_CLIENT="Client" COM_BANNERS_HEADING_CLIENT_ASC="Client ascending" COM_BANNERS_HEADING_CLIENT_DESC="Client descending" COM_BANNERS_HEADING_CONTACT="Contact" COM_BANNERS_HEADING_CONTACT_ASC="Contact ascending" COM_BANNERS_HEADING_CONTACT_DESC="Contact descending" COM_BANNERS_HEADING_COUNT="Count" COM_BANNERS_HEADING_COUNT_ASC="Count ascending" COM_BANNERS_HEADING_COUNT_DESC="Count descending" COM_BANNERS_HEADING_IMPRESSIONS="Impressions" COM_BANNERS_HEADING_IMPRESSIONS_ASC="Impressions ascending" COM_BANNERS_HEADING_IMPRESSIONS_DESC="Impressions descending" COM_BANNERS_HEADING_METAKEYWORDS="Meta Keywords" COM_BANNERS_HEADING_NAME="Name" COM_BANNERS_HEADING_NAME_ASC="Name ascending" COM_BANNERS_HEADING_NAME_DESC="Name descending" COM_BANNERS_HEADING_PURCHASETYPE="Purchase Type" COM_BANNERS_HEADING_PURCHASETYPE_ASC="Purchase Type ascending" COM_BANNERS_HEADING_PURCHASETYPE_DESC="Purchase Type descending" COM_BANNERS_HEADING_STICKY="Pinned" COM_BANNERS_HEADING_STICKY_ASC="Pinned ascending" COM_BANNERS_HEADING_STICKY_DESC="Pinned descending" COM_BANNERS_HEADING_TYPE="Type" COM_BANNERS_HEADING_TYPE_ASC="Type ascending" COM_BANNERS_HEADING_TYPE_DESC="Type descending" COM_BANNERS_IMPRESSION="Impression" COM_BANNERS_IMPRESSIONS="%1$s of %2$s" COM_BANNERS_MANAGER="Banners" COM_BANNERS_MANAGER_BANNER_EDIT="Banners: Edit" COM_BANNERS_MANAGER_BANNER_NEW="Banners: New" COM_BANNERS_MANAGER_BANNERS="Banners" COM_BANNERS_MANAGER_CLIENT_EDIT="Banners: Edit Client" COM_BANNERS_MANAGER_CLIENT_NEW="Banners: New Client" COM_BANNERS_MANAGER_CLIENTS="Banners: Clients" COM_BANNERS_MANAGER_TRACKS="Banners: Tracks" COM_BANNERS_METADATA="Metadata" COM_BANNERS_FIELD_MODIFIED_DESC="The date and time that the banner was last modified." COM_BANNERS_N_BANNERS_STUCK="%d banners pinned." COM_BANNERS_N_BANNERS_STUCK_1="%d banner pinned." COM_BANNERS_N_BANNERS_UNSTUCK="%d banners unpinned." COM_BANNERS_N_BANNERS_UNSTUCK_1="%d banner unpinned." COM_BANNERS_NEW_BANNER="New Banner" COM_BANNERS_NEW_CLIENT="New Client" COM_BANNERS_NO_BANNERS_SELECTED="No banners selected." COM_BANNERS_NO_CLIENT="- No client -" COM_BANNERS_NO_CLIENTS_SELECTED="No clients selected." COM_BANNERS_NOCATEGORYNAME="No category" COM_BANNERS_NOCLIENTNAME="No client" COM_BANNERS_RESET_CLICKS="Reset clicks" COM_BANNERS_RESET_IMPMADE="Reset impressions" COM_BANNERS_SEARCH_IN_TITLE="Search in title" COM_BANNERS_SELECT_CLIENT="- Select Client -" COM_BANNERS_SELECT_TYPE="- Select Type -" COM_BANNERS_SUBMENU_BANNERS="Banners" COM_BANNERS_SUBMENU_CATEGORIES="Categories" COM_BANNERS_SUBMENU_CLIENTS="Clients" COM_BANNERS_SUBMENU_TRACKS="Tracks" COM_BANNERS_TRACKS_DELETE="Delete Tracks" COM_BANNERS_TRACKS_DOWNLOAD="Download tracks" COM_BANNERS_TRACKS_EXPORT="Export" COM_BANNERS_TRACKS_FILTER_SEARCH_DESC="Search in track name and track client name." COM_BANNERS_TRACKS_FILTER_SEARCH_LABEL="Search Tracks" COM_BANNERS_TRACKS_NO_ITEMS_DELETED="No Tracks to Delete." COM_BANNERS_TRACKS_N_ITEMS_DELETED="%d tracks deleted." COM_BANNERS_TRACKS_N_ITEMS_DELETED_1="%d track deleted." COM_BANNERS_TYPE1="Impressions" COM_BANNERS_TYPE2="Clicks" COM_BANNERS_UNLIMITED="Unlimited" COM_BANNERS_XML_DESCRIPTION="This component manages banners and banner clients." JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\����-language/en-GB/en-GB.plg_extension_joomla.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EXTENSION_JOOMLA="Extension - Joomla" PLG_EXTENSION_JOOMLA_XML_DESCRIPTION="Manage the update sites for extensions." PLG_EXTENSION_JOOMLA_UNKNOWN_SITE="Unknown Site" PKb��\ �0??-language/en-GB/en-GB.plg_system_cache.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CACHE_XML_DESCRIPTION="Provides page caching." PLG_SYSTEM_CACHE="System - Page Cache" PKb��\2�M��(language/en-GB/en-GB.mod_popular.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_POPULAR_XML_DESCRIPTION="This module shows a list of the most popular published Articles that are still current. Some that are shown may have expired even though they are the most recent." MOD_POPULAR="Popular Articles" MOD_POPULAR_LAYOUT_DEFAULT="Default" PKb��\5����'language/en-GB/en-GB.mod_latest.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_LATEST="Articles - Latest" MOD_LATEST_XML_DESCRIPTION="This module shows a list of the most recently created Articles." MOD_LATEST_LAYOUT_DEFAULT="Default" PKb��\�+� ��4language/en-GB/en-GB.plg_system_languagecode.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SYSTEM_LANGUAGECODE="System - Language Code" PLG_SYSTEM_LANGUAGECODE_XML_DESCRIPTION="Provides ability to change the language code in the generated HTML document to improve SEO." PKb��\����(language/en-GB/en-GB.com_checkin.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CHECKIN="Check-in" COM_CHECKIN_XML_DESCRIPTION="Check-in Component" COM_CHECKIN_CHECKIN_VIEW_DEFAULT_DESC="Shows a list of checked out items from all components/tables." COM_CHECKIN_CHECKIN_VIEW_DEFAULT_TITLE="Global Check-in" PKb��\��4�ee&language/en-GB/en-GB.mod_title.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_TITLE="Title" MOD_TITLE_XML_DESCRIPTION="This module shows the Toolbar Component Title." MOD_TITLE_LAYOUT_DEFAULT="Default" PKb��\L� ,language/en-GB/en-GB.plg_search_contacts.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_CONTACTS="Search - Contacts" PLG_SEARCH_CONTACTS_CONTACTS="Contacts" PLG_SEARCH_CONTACTS_FIELD_SEARCHLIMIT_DESC="Number of search items to return." PLG_SEARCH_CONTACTS_FIELD_SEARCHLIMIT_LABEL="Search Limit" PLG_SEARCH_CONTACTS_XML_DESCRIPTION="Enables searching of the Contact Component."PKb��\��[D��(language/en-GB/en-GB.com_banners.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_BANNERS="Banners" COM_BANNERS_BANNERS="Banners" COM_BANNERS_CATEGORY_ADD_TITLE="Banners: Add Category" COM_BANNERS_CATEGORY_EDIT_TITLE="Banners: Edit Category" COM_BANNERS_CATEGORIES="Categories" COM_BANNERS_CONTENT_TYPE_BANNER="Banner" COM_BANNERS_CONTENT_TYPE_CLIENT="Banner Client" COM_BANNERS_CONTENT_TYPE_CATEGORY="Banner Category" COM_BANNERS_CLIENTS="Clients" COM_BANNERS_TAGS_CATEGORY="Banner Category" COM_BANNERS_TRACKS="Tracks" COM_BANNERS_XML_DESCRIPTION="This component manages banners and banner clients." PKb��\��"YVV'language/en-GB/en-GB.com_categories.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 CATEGORIES_FIELDSET_OPTIONS="Options" COM_CATEGORIES="Categories" COM_CATEGORIES_ACCESS_CREATE_DESC="New setting for <strong>create actions</strong> in this category and the calculated setting based on the parent category and group permissions." COM_CATEGORIES_ACCESS_DELETE_DESC="New setting for <strong>delete actions</strong> on this category and the calculated setting based on the parent category and group permissions." COM_CATEGORIES_ACCESS_EDIT_DESC="New setting for <strong>edit actions</strong> on this category and the calculated setting based on the parent category and group permissions." COM_CATEGORIES_ACCESS_EDITOWN_DESC="New setting for <strong>edit own actions</strong> on this category and the calculated setting based on the parent category and group permissions." COM_CATEGORIES_ACCESS_EDITSTATE_DESC="New setting for <strong>edit state actions</strong> on this category and the calculated setting based on the parent category and group permissions." COM_CATEGORIES_BASIC_FIELDSET_LABEL="Options" COM_CATEGORIES_BATCH_CANNOT_CREATE="You are not allowed to create new categories in this category." COM_CATEGORIES_BATCH_CANNOT_EDIT="You are not allowed to edit one or more of these categories." ; COM_CATEGORIES_BATCH_CATEGORY_LABEL is deprecated, use JLIB_HTML_BATCH_MENU_LABEL instead. COM_CATEGORIES_BATCH_CATEGORY_LABEL="To Move or Copy your selection please select a Category." COM_CATEGORIES_BATCH_OPTIONS="Batch process the selected categories." COM_CATEGORIES_BATCH_TIP="If a category is selected for move/copy, any actions selected will be applied to the copied or moved categories. Otherwise, all actions are applied to the selected categories." COM_CATEGORIES_CATEGORIES_BASE_TITLE="Categories" COM_CATEGORIES_CATEGORIES_TITLE="%s: Categories" COM_CATEGORIES_CATEGORY_ADD_TITLE="%s: New Category" COM_CATEGORIES_CATEGORY_BASE_ADD_TITLE="Categories: New Category" COM_CATEGORIES_CATEGORY_BASE_EDIT_TITLE="Categories: Edit Category" COM_CATEGORIES_CATEGORY_EDIT_TITLE="%s: Edit Category" COM_CATEGORIES_CATEGORY_OPTIONS="Category" COM_CATEGORIES_CHANGE_CATEGORY="Select or Change Category" COM_CATEGORIES_DELETE_NOT_ALLOWED="Delete not allowed for category %s." COM_CATEGORIES_DESCRIPTION_DESC="Enter an optional category description in the text area." COM_CATEGORIES_EDIT_CATEGORY="Edit Category" COM_CATEGORIES_ERROR_ALL_LANGUAGE_ASSOCIATED="A category item set to All languages can't be associated. Associations have not been set." COM_CATEGORIES_FIELD_BASIC_LABEL="Options" COM_CATEGORIES_FIELD_HITS_DESC="Number of hits for this category." COM_CATEGORIES_FIELD_IMAGE_ALT_LABEL="Alt Text" COM_CATEGORIES_FIELD_IMAGE_ALT_DESC="Alternative text used for visitors without access to images." COM_CATEGORIES_FIELD_IMAGE_DESC="Select or upload an image for this category." COM_CATEGORIES_FIELD_IMAGE_LABEL="Image" COM_CATEGORIES_FIELD_LANGUAGE_DESC="Assign a language to this category." COM_CATEGORIES_FIELD_NOTE_DESC="An optional note to display in the category list." COM_CATEGORIES_FIELD_NOTE_LABEL="Note" COM_CATEGORIES_FIELD_PARENT_DESC="Select a parent category." COM_CATEGORIES_FIELD_PARENT_LABEL="Parent" COM_CATEGORIES_FIELDSET_DETAILS="Category Details" COM_CATEGORIES_FIELDSET_PUBLISHING="Publishing" COM_CATEGORIES_FIELDSET_RULES="Permissions" COM_CATEGORIES_FILTER_SEARCH_DESC="Search in title, alias and note. Prefix with ID: to search for a category ID." COM_CATEGORIES_FILTER_SEARCH_LABEL="Search Categories" COM_CATEGORIES_HAS_SUBCATEGORY_ITEMS="%d items are assigned to this category's subcategories." COM_CATEGORIES_HAS_SUBCATEGORY_ITEMS_1="%d item is assigned to one of this category's subcategories." ; The following 2 strings are deprecated and will be removed with 4.0. COM_CATEGORIES_ITEM_ASSOCIATIONS_FIELDSET_LABEL="Category Item Associations" COM_CATEGORIES_ITEM_ASSOCIATIONS_FIELDSET_DESC="Multilingual only! This choice will only display if the Language Filter parameter 'Item Associations' is set to 'Yes'. Choose a category item for the target language. This association will let the Language Switcher module redirect to the associated category item in another language. If used, make sure to display the Language switcher module on the relevant pages. A category item set to language 'All' can't be associated." COM_CATEGORIES_ITEMS_SEARCH_FILTER="Search" COM_CATEGORIES_N_ITEMS_ARCHIVED="%d categories archived." COM_CATEGORIES_N_ITEMS_ARCHIVED_1="%d category archived." COM_CATEGORIES_N_ITEMS_ASSIGNED="%d items are assigned to this category." COM_CATEGORIES_N_ITEMS_ASSIGNED_1="%d item is assigned to this category." COM_CATEGORIES_N_ITEMS_CHECKED_IN_0="No category checked in." COM_CATEGORIES_N_ITEMS_CHECKED_IN_1="%d category checked in." COM_CATEGORIES_N_ITEMS_CHECKED_IN_MORE="%d categories checked in." COM_CATEGORIES_N_ITEMS_DELETED="%d categories deleted." COM_CATEGORIES_N_ITEMS_DELETED_1="%d category deleted." COM_CATEGORIES_N_ITEMS_FAILED_PUBLISHING="Failed publishing %d categories as at least one of their parents is unpublished or one of their children is checked out." COM_CATEGORIES_N_ITEMS_FAILED_PUBLISHING_1="Failed publishing %d category as at least one of its parents is unpublished or one of its children is checked out." COM_CATEGORIES_N_ITEMS_PUBLISHED="%d categories published." COM_CATEGORIES_N_ITEMS_PUBLISHED_1="%d category published." COM_CATEGORIES_N_ITEMS_TRASHED="%d categories trashed." COM_CATEGORIES_N_ITEMS_TRASHED_1="%d category trashed." COM_CATEGORIES_N_ITEMS_UNPUBLISHED="%d categories unpublished." COM_CATEGORIES_N_ITEMS_UNPUBLISHED_1="%d category unpublished." COM_CATEGORIES_NEW_CATEGORY="New Category" COM_CATEGORIES_NO_ITEM_SELECTED="Please first make a selection from the list." COM_CATEGORIES_PATH_LABEL="Category Path" COM_CATEGORIES_REBUILD_FAILURE="Failed rebuilding Categories tree data." COM_CATEGORIES_REBUILD_SUCCESS="Categories tree data rebuilt." COM_CATEGORIES_SAVE_SUCCESS="Category saved." COM_CATEGORIES_SELECT_A_CATEGORY="Select a Category" COM_CATEGORIES_TIP_ASSOCIATION="Associated categories" COM_CATEGORIES_XML_DESCRIPTION="This component manages categories." COM_CATEGORY_COUNT_ARCHIVED_ITEMS="Archived items" COM_CATEGORY_COUNT_PUBLISHED_ITEMS="Published items" COM_CATEGORY_COUNT_TRASHED_ITEMS="Trashed items" COM_CATEGORY_COUNT_UNPUBLISHED_ITEMS="Unpublished items" COM_CATEGORY_HEADING_ASSOCIATION="Association" JGLOBAL_NO_ITEM_SELECTED="No categories selected." JLIB_HTML_ACCESS_SUMMARY_DESC="Shown below is an overview of the permission settings for this category. Select the tabs above to customise these settings by action." JLIB_RULES_SETTING_NOTES_ITEM="Changes apply to this category and all child categories.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\hݵ�#�#%language/en-GB/en-GB.com_weblinks.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_WEBLINKS="Web Links" COM_WEBLINKS_ACCESS_HEADING="Access" COM_WEBLINKS_BATCH_OPTIONS="Batch process the selected links" COM_WEBLINKS_BATCH_TIP="If a category is selected for move/copy, any actions selected will be applied to the copied or moved links. Otherwise, all actions are applied to the selected links." COM_WEBLINKS_CATEGORIES_DESC="These settings apply for Web Links Categories Options unless they are changed for a specific menu item." COM_WEBLINKS_CATEGORY_DESC="These settings apply for Web Links Category Options unless they are changed for a specific menu item." COM_WEBLINKS_COMPONENT_DESC="These settings apply for Web Links unless they are changed for a specific menu item or web link." COM_WEBLINKS_COMPONENT_LABEL="Web Link" COM_WEBLINKS_CONFIG_INTEGRATION_SETTINGS_DESC="These settings determine how the Web Links Component will integrate with other extensions." COM_WEBLINKS_CONFIGURATION="Web Links Manager Options" COM_WEBLINKS_EDIT_WEBLINK="Edit Web Link" COM_WEBLINKS_ERR_TABLES_NAME="There is already a Web Link with that name in this category. Please try again." COM_WEBLINKS_ERR_TABLES_PROVIDE_URL="Please provide a valid URL" COM_WEBLINKS_ERR_TABLES_TITLE="Your web link must have a title." COM_WEBLINKS_ERROR_UNIQUE_ALIAS="Another web link from this category has the same alias (remember it may be a trashed item)." COM_WEBLINKS_FIELD_ALIAS_DESC="The alias is for internal use only. Leave this blank and Joomla will fill in a default value from the title. It has to be unique for each web link in the same category." COM_WEBLINKS_FIELD_CATEGORY_DESC="Choose a category for this Web link." COM_WEBLINKS_FIELD_CATEGORYCHOOSE_DESC="Please choose a Web Links category to display." COM_WEBLINKS_FIELD_CAPTCHA_DESC="Select the captcha plugin that will be used in the web link submit form. You may need to enter required information for your captcha plugin in the Plugin Manager.<br />If 'Use Default' is selected, make sure a captcha plugin is selected in Global Configuration." COM_WEBLINKS_FIELD_CAPTCHA_LABEL="Allow Captcha on Web Link" COM_WEBLINKS_FIELD_CONFIG_CAT_SHOWNUMBERS_DESC="Show or hide the number of Web Links in each Category." COM_WEBLINKS_FIELD_CONFIG_CAT_SHOWNUMBERS_LABEL="# Web Links" COM_WEBLINKS_FIELD_CONFIG_COUNTCLICKS_DESC="If set to yes, the number of times the link has been clicked will be recorded." COM_WEBLINKS_FIELD_CONFIG_COUNTCLICKS_LABEL="Count Clicks" COM_WEBLINKS_FIELD_CONFIG_DESCRIPTION_DESC="Show or hide the description below." COM_WEBLINKS_FIELD_CONFIG_HITS_DESC="Show or hide hits." COM_WEBLINKS_FIELD_CONFIG_ICON_DESC="If Icon is chosen above, select an icon to display with the Web Links. If none is selected, the default icon will be used." COM_WEBLINKS_FIELD_CONFIG_ICON_LABEL="Select Icon" COM_WEBLINKS_FIELD_CONFIG_LINKDESCRIPTION_DESC="Show or hide the links description." COM_WEBLINKS_FIELD_CONFIG_LINKDESCRIPTION_LABEL="Links Description" COM_WEBLINKS_FIELD_CONFIG_OTHERCATS_DESC="Show or hide other categories." COM_WEBLINKS_FIELD_CONFIG_OTHERCATS_LABEL="Other Categories" COM_WEBLINKS_FIELD_CONFIG_SHOWREPORT_DESC="Show or hide the Report Bad Link option." COM_WEBLINKS_FIELD_CONFIG_SHOWREPORT_LABEL="Reports" COM_WEBLINKS_FIELD_COUNTCLICKS_DESC="If set to yes, the number of times the link has been clicked will be recorded." COM_WEBLINKS_FIELD_COUNTCLICKS_LABEL="Count Clicks" COM_WEBLINKS_FIELD_DESCRIPTION_DESC="Enter a description for the web link." COM_WEBLINKS_FIELD_DISPLAY_NUM_DESC="Default number of Web links to list on a page." COM_WEBLINKS_FIELD_DISPLAY_NUM_LABEL="# of Web links to List" COM_WEBLINKS_FIELD_FIRST_DESC="The image to be displayed." COM_WEBLINKS_FIELD_FIRST_LABEL="First Image" COM_WEBLINKS_FIELD_HEIGHT_DESC="Height of the target popup or modal window. Defaults to 600x500 if one field is left empty." COM_WEBLINKS_FIELD_HEIGHT_LABEL="Height" COM_WEBLINKS_FIELD_ICON_DESC="Displays a text, an icon or nothing with the Web links. Default is 'Icon'." COM_WEBLINKS_FIELD_ICON_LABEL="Text/Icon/Web Link Only" COM_WEBLINKS_FIELD_ICON_OPTION_ICON="Icon" COM_WEBLINKS_FIELD_ICON_OPTION_TEXT="Text" COM_WEBLINKS_FIELD_ICON_OPTION_WEBLINK="Web Link Only" COM_WEBLINKS_FIELD_IMAGE_ALT_DESC="Alternative text used for visitors without access to images. Replaced with caption text if it is present." COM_WEBLINKS_FIELD_IMAGE_ALT_LABEL="Alt Text" COM_WEBLINKS_FIELD_IMAGE_CAPTION_DESC="Caption attached to the image." COM_WEBLINKS_FIELD_IMAGE_CAPTION_LABEL="Caption" COM_WEBLINKS_FIELD_LANGUAGE_DESC="Assign a language to this web link." COM_WEBLINKS_FIELD_MODIFIED_DESC="The date and time the link was last modified." COM_WEBLINKS_FIELD_SECOND_DESC="The second image to be displayed." COM_WEBLINKS_FIELD_SECOND_LABEL="Second Image" COM_WEBLINKS_FIELD_SELECT_CATEGORY_DESC="Select a web links category to display." COM_WEBLINKS_FIELD_SELECT_CATEGORY_LABEL="Select a Category" COM_WEBLINKS_FIELD_SHOW_CAT_TAGS_DESC="Show the tags for a category." COM_WEBLINKS_FIELD_SHOW_CAT_TAGS_LABEL="Show Tags" COM_WEBLINKS_FIELD_SHOW_TAGS_DESC="Show the tags for a web link." COM_WEBLINKS_FIELD_SHOW_TAGS_LABEL="Show Tags" COM_WEBLINKS_FIELD_STATE_DESC="Set publication status." COM_WEBLINKS_FIELD_TARGET_DESC="Target browser window when the link is selected." COM_WEBLINKS_FIELD_TARGET_LABEL="Target" COM_WEBLINKS_FIELD_TITLE_DESC="Web Link must have a title." COM_WEBLINKS_FIELD_URL_DESC="You must enter a URL. IDN (International) Links are converted to punycode when they are saved." COM_WEBLINKS_FIELD_URL_LABEL="URL" COM_WEBLINKS_FIELD_VALUE_REPORTED="Reported" COM_WEBLINKS_FIELD_VERSION_DESC="A count of the number of times this web link has been revised." COM_WEBLINKS_FIELD_VERSION_LABEL="Revision" COM_WEBLINKS_FIELD_WIDTH_DESC="Width of the target popup or modal window. Defaults to 600x500 if one field is left empty." COM_WEBLINKS_FIELD_WIDTH_LABEL="Width" COM_WEBLINKS_FIELDSET_IMAGES="Images" COM_WEBLINKS_FIELDSET_OPTIONS="Options" COM_WEBLINKS_FILTER_CATEGORY="Filter Category" COM_WEBLINKS_FILTER_SEARCH_DESC="Search in web link title and alias. Prefix with ID: to search for a web link ID." COM_WEBLINKS_FILTER_SEARCH_LABEL="Search Web Links" COM_WEBLINKS_FILTER_STATE="Filter State" COM_WEBLINKS_FLOAT_DESC="Controls placement of the image." COM_WEBLINKS_FLOAT_LABEL="Image Float" COM_WEBLINKS_HITS_DESC="Number of hits for this web link." COM_WEBLINKS_LEFT="Left" COM_WEBLINKS_LIST_LAYOUT_DESC="These settings apply for Web Links List Layout Options unless they are changed for a specific menu item." COM_WEBLINKS_MANAGER_WEBLINK="Web Links" COM_WEBLINKS_MANAGER_WEBLINKS="Web Links" COM_WEBLINKS_MANAGER_WEBLINK_EDIT="Web Link: Edit" COM_WEBLINKS_MANAGER_WEBLINK_NEW="Web Link: New" COM_WEBLINKS_N_ITEMS_ARCHIVED="%d web links archived." COM_WEBLINKS_N_ITEMS_ARCHIVED_1="%d web link archived." COM_WEBLINKS_N_ITEMS_CHECKED_IN_0="No web link checked in." COM_WEBLINKS_N_ITEMS_CHECKED_IN_1="%d web link checked in." COM_WEBLINKS_N_ITEMS_CHECKED_IN_MORE="%d web links checked in." COM_WEBLINKS_N_ITEMS_DELETED="%d web links deleted." COM_WEBLINKS_N_ITEMS_DELETED_1="%d web link deleted." COM_WEBLINKS_N_ITEMS_PUBLISHED="%d web links published." COM_WEBLINKS_N_ITEMS_PUBLISHED_1="%d web link published." COM_WEBLINKS_N_ITEMS_TRASHED="%d web links trashed." COM_WEBLINKS_N_ITEMS_TRASHED_1="%d web link trashed." COM_WEBLINKS_N_ITEMS_UNPUBLISHED="%d web links unpublished." COM_WEBLINKS_N_ITEMS_UNPUBLISHED_1="%d web link unpublished." COM_WEBLINKS_NEW_WEBLINK="New Web Link" COM_WEBLINKS_NONE="None" COM_WEBLINKS_OPTION_FILTER_ACCESS="- Filter Access -" COM_WEBLINKS_OPTION_FILTER_CATEGORY="- Filter Category -" COM_WEBLINKS_OPTION_FILTER_PUBLISHED="- Filter State -" COM_WEBLINKS_OPTIONS="Options" COM_WEBLINKS_ORDER_HEADING="Order" COM_WEBLINKS_RIGHT="Right" COM_WEBLINKS_SAVE_SUCCESS="Web link saved" COM_WEBLINKS_SEARCH_IN_TITLE="Search in title" COM_WEBLINKS_SHOW_EMPTY_CATEGORIES_DESC="If Show, empty categories will display. A category is only empty if it has no Web links or subcategories." COM_WEBLINKS_SUBMENU_CATEGORIES="Categories" COM_WEBLINKS_SUBMENU_WEBLINKS="Web Links" COM_WEBLINKS_XML_DESCRIPTION="Component for web links management" JGLOBAL_NO_ITEM_SELECTED="No web links selected" JGLOBAL_NEWITEMSLAST_DESC="New Web links default to the last position. Ordering can be changed after this Web link is saved." JLIB_APPLICATION_ERROR_BATCH_CANNOT_CREATE="You are not allowed to create new web links in this category." JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT="You are not allowed to edit one or more of these web links." JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\��0language/en-GB/en-GB.plg_content_contact.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_CONTACT="Content - Contact" PLG_CONTENT_CONTACT_XML_DESCRIPTION="Provides a link between the content author and the contact item that can be used for an Author Profile." PKb��\�Y�#language/en-GB/en-GB.com_cpanel.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CPANEL="Control Panel" COM_CPANEL_HEADER_SUBMENU="Submenu" COM_CPANEL_HEADER_SYSTEM="System" COM_CPANEL_LINK_CHECKIN="Global Check-in" COM_CPANEL_LINK_CLEAR_CACHE="Clear Cache" COM_CPANEL_LINK_DASHBOARD="Dashboard" COM_CPANEL_LINK_EXTENSIONS="Install Extensions" COM_CPANEL_LINK_GLOBAL_CONFIG="Global Configuration" COM_CPANEL_LINK_SYSINFO="System Information" COM_CPANEL_MESSAGES_BODY_NOCLOSE="There are important post-installation messages that require your attention." COM_CPANEL_MESSAGES_BODYMORE_NOCLOSE="This information area won't appear when you have hidden all the messages." COM_CPANEL_MESSAGES_REVIEW="Read Messages" COM_CPANEL_MESSAGES_TITLE="You have post-installation messages" COM_CPANEL_MSG_ADDNOSNIFF_BODY="<p>Joomla is now shipped with additional security hardenings in the default htaccess.txt and web.config.txt files. These hardenings disable the so called MIME-type sniffing feature in web browsers. The sniffing leads to specific attack vectors, where scripts in normally harmless file formats (eg images) will be executed, leading to Cross-Site-Scripting vulnerabilities.</p><p>The security team recommends to manually apply the necessary changes to existing .htaccess or web.config files, as those files can not be updated automatically.</p><p><strong>Changes for .htaccess</strong><br />Add the following lines before \"## Mod_rewrite in use.\":</p><pre><IfModule mod_headers.c>\nHeader always set X-Content-Type-Options \"nosniff\"\n</IfModule></pre><p><strong>Changes for web.config</strong><br />Add the following lines right after \"</rewrite>\":</p><pre><httpProtocol>\n <customHeaders>\n <add name=\"X-Content-Type-Options\" value=\"nosniff\" />\n </customHeaders>\n</httpProtocol></pre>" COM_CPANEL_MSG_ADDNOSNIFF_TITLE=".htaccess & web.config Security Update" COM_CPANEL_MSG_EACCELERATOR_BODY="eAccelerator is not compatible with Joomla! By selecting the Change to File Caching button below we will change the cache handler to file. If you want to use a different cache handler, please change it in the Global Configuration page." COM_CPANEL_MSG_EACCELERATOR_BUTTON="Change to File." COM_CPANEL_MSG_EACCELERATOR_TITLE="eAccelerator is not compatible with Joomla!" COM_CPANEL_MSG_HTACCESS_BODY="A change to the default .htaccess and web.config files was made in Joomla! 3.4 to disallow folder listings by default. Users are recommended to implement this change in their files. Please see <a href="_QQ_"https://docs.joomla.org/Special:MyLanguage/Preconfigured_htaccess"_QQ_">this page</a> for more information." COM_CPANEL_MSG_HTACCESS_TITLE=".htaccess & web.config Update" COM_CPANEL_MSG_JOOMLA40_PRE_CHECKS_TITLE="Prepare for the next Major Release of Joomla" COM_CPANEL_MSG_JOOMLA40_PRE_CHECKS_BODY="<p>Beginning with Joomla! 4.0 we are raising the minimum server requirements. If you are seeing this message then your current configuration does not meet these new minimum requirements.</p><p>The <a href="_QQ_"https://developer.joomla.org/news/704-looking-forward-with-joomla-4.html"_QQ_"><strong>minimum</strong> requirements</a> are the following:</p><ul><li>PHP 7.0</li><li>MySQL 5.5.3</li><li>PostgreSQL 9.2</li><li>MS SQL will <strong>not</strong> be supported</li><li>MySQL using the legacy `ext/mysql` PHP extension will <strong>not</strong> be supported, either the MySQLi or \"MySQL (PDO)\" driver must be used instead</li><li>PostgreSQL using the `ext/pgsql` PHP extension will <strong>not</strong> be supported, the \"PostgreSQL (PDO)\" driver must be used instead</li></ul><p>Please contact your hosting provider to ask how you can meet these raised server requirements - it is usually a very simple change. When you meet these new requirements then this message will no longer be displayed.</p>" COM_CPANEL_MSG_LANGUAGEACCESS340_TITLE="You have possible issues with your multilingual settings" COM_CPANEL_MSG_LANGUAGEACCESS340_BODY="Since Joomla! 3.4.0 you may have issues with the System - Language Filter plugin on your website. To fix them please open the <a href="_QQ_"index.php?option=com_languages&view=languages"_QQ_">Language Manager</a> and save each content language manually to make sure an Access level is saved." ; The following two strings are deprecated and will be removed with 4.0 COM_CPANEL_MSG_PHPVERSION_BODY="Beginning with Joomla! 3.3, the version of PHP this site is using will no longer be supported. Joomla! 3.3 will require at least <a href="_QQ_"https://community.joomla.org/blogs/leadership/1798-raising-the-bar-on-security.html"_QQ_">PHP version 5.3.10 to provide enhanced security features to its users</a>." COM_CPANEL_MSG_PHPVERSION_TITLE="Your PHP Version Will Be Unsupported in Joomla! 3.3" COM_CPANEL_MSG_ROBOTS_TITLE="robots.txt Update" COM_CPANEL_MSG_ROBOTS_BODY="A change to the default robots.txt files was made in Joomla! 3.3 to allow Google to access templates and media files by default to improve SEO. This change is not applied automatically on upgrades and users are recommended to review the changes in the robots.txt.dist file and implement these changes in their own robots.txt file." COM_CPANEL_MSG_STATS_COLLECTION_BODY="<p>Since Joomla! 3.5 a statistics plugin will submit anonymous data to the Joomla Project. This will only submit the Joomla version, PHP version, database engine and version, and server operating system.</p><p>This data is collected to ensure that future versions of Joomla can take advantage of the latest database and PHP features without affecting significant numbers of users. The need for this became clear when a minimum of PHP 5.3.10 was required when Joomla! 3.3 implemented the more secure Bcrypt passwords.</p><p>In the interest of full transparency and to help developers <a href="_QQ_"https://developer.joomla.org/about/stats.html"_QQ_">this data is publicly available.</a> An API and graphs will show the Joomla version, PHP versions and database engines in use.</p><p>If you do not wish to provide the Joomla Project with this information you can disable the plugin called System - Joomla Statistics.</p>" COM_CPANEL_MSG_STATS_COLLECTION_TITLE="Stats Collection in Joomla" COM_CPANEL_MSG_UPDATEDEFAULTSETTINGS_BODY="<p>As part of our security team's review, we have made some changes to the default settings in a new Joomla installation. As these changes are only applied to new installations, we strongly recommend that you review these changes and update your site.</p><p>The changed settings are:</p><ul><li>Global Configuration > Text Filters: The default \"Administrator\" user group has changed from \"No Filtering\" to \"Default Blacklist\"</li><li>Users > Send Password: The option to send a user their password in plain text when an account is created is now disabled by default</li><li>Media Manager: Flash files (\"swf\" file extension and \"application/x-shockwave-flash\" MIME Type) are not allowed to be uploaded</li><li>Articles > Show Email: The option to show an email icon with articles is disabled by default</li></ul><p>We have created a <a href=\"https://docs.joomla.org/Special:MyLanguage/J3.x:Joomla_3.8.8_notes_about_the_changed_default_settings\">dedicated documentation page</a> explaining these changes.</p>" COM_CPANEL_MSG_UPDATEDEFAULTSETTINGS_TITLE="Updated site security recommendations" COM_CPANEL_WELCOME_BEGINNERS_MESSAGE="<p>Community resources are available for new users.</p><ul><li><a href="_QQ_"https://docs.joomla.org/Special:MyLanguage/Portal:Beginners"_QQ_">Joomla! Beginners Guide</a></li><li><a href="_QQ_"https://forum.joomla.org/viewforum.php?f=706"_QQ_">New to Joomla! Forum</a></li></ul>" COM_CPANEL_WELCOME_BEGINNERS_TITLE="Welcome to Joomla!" COM_CPANEL_XML_DESCRIPTION="Control Panel component" PKb��\D��ZZ(language/en-GB/en-GB.com_postinstall.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_POSTINSTALL="Post-installation Messages" COM_POSTINSTALL_BTN_HIDE="Hide this message" COM_POSTINSTALL_BTN_RESET="Reset Messages" COM_POSTINSTALL_CONFIGURATION="Post-installation Messages: Options" COM_POSTINSTALL_HIDE_ALL_MESSAGES="Hide all messages" COM_POSTINSTALL_LBL_MESSAGES="Post-installation and Upgrade Messages" COM_POSTINSTALL_LBL_NOMESSAGES_DESC="You have read all the messages." COM_POSTINSTALL_LBL_NOMESSAGES_TITLE="No Messages" COM_POSTINSTALL_LBL_RELEASENEWS="Release news <a href="_QQ_"https://www.joomla.org/announcements/release-news.html"_QQ_">from the Joomla! Project</a>" COM_POSTINSTALL_LBL_SINCEVERSION="Since version %s" COM_POSTINSTALL_MESSAGES_FOR="Showing messages for" COM_POSTINSTALL_MESSAGES_TITLE="Post-installation Messages for %s" COM_POSTINSTALL_XML_DESCRIPTION="Displays post-installation and post-upgrade messages for Joomla and its extensions." PKb��\��&fcfc#language/en-GB/en-GB.com_config.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CONFIG="Configuration Manager" COM_CONFIG_ACTION_ADMIN_DESC="Allows users in the group to perform any action over the whole site regardless of any other permission settings." COM_CONFIG_ACTION_CREATE_DESC="Allows users in the group to create any content in any extension." COM_CONFIG_ACTION_DELETE_DESC="Allows users in the group to delete any content in any extension." COM_CONFIG_ACTION_EDIT_DESC="Allows users in the group to edit any content in any extension." COM_CONFIG_ACTION_EDITOWN_DESC="Allows users in the group to edit any content they own in any extension." COM_CONFIG_ACTION_EDITVALUE_DESC="Allows users in the group to edit any value of custom fields submitted in any extension." COM_CONFIG_ACTION_EDITSTATE_DESC="Allows users in the group to edit the state of any content in any extension." COM_CONFIG_ACTION_LOGIN_ADMIN_DESC="Allows users in the group to login to the Backend Administrator site." COM_CONFIG_ACTION_LOGIN_OFFLINE_DESC="Allows users in the group to access the Frontend site when site is offline." COM_CONFIG_ACTION_LOGIN_SITE_DESC="Allows users in the group to login to the Frontend site." COM_CONFIG_ACTION_MANAGE_DESC="Allows users in the group to access all of the administration interface except Global Configuration." COM_CONFIG_ACTION_OPTIONS_DESC="Allows users in the group to edit the options except the permissions of any extension." COM_CONFIG_CACHE_SETTINGS="Cache Settings" COM_CONFIG_CACHE_WARNING="Failed to clear cache automatically, you may need to do so manually." COM_CONFIG_COMPONENT_FIELDSET_LABEL="Component" COM_CONFIG_COMPONENT_NO_CONFIG_FIELDS_MESSAGE="This component has no configuration options." COM_CONFIG_COOKIE_SETTINGS="Cookie Settings" COM_CONFIG_DATABASE_SETTINGS="Database Settings" COM_CONFIG_DEBUG_SETTINGS="Debug Settings" COM_CONFIG_ERROR_CACHE_PATH_NOTWRITABLE="The cache folder is not writable: %s" COM_CONFIG_ERROR_CACHE_CONNECTION_FAILED="Could not connect to the cache handler to clean the cache." COM_CONFIG_ERROR_CACHE_DRIVER_UNSUPPORTED="Could not clean the cache, the configured cache handler is not supported by this environment." COM_CONFIG_ERROR_COMPONENT_ASSET_NOT_FOUND="The asset for the component could not be found. Permissions have not been saved." COM_CONFIG_ERROR_CONFIG_EXTENSION_NOT_FOUND="The Global Configuration extension could not be found. Text filter settings have not been saved." COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTUNWRITABLE="Could not make configuration.php unwritable." COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTWRITABLE="Could not make configuration.php writable." COM_CONFIG_ERROR_CUSTOM_CACHE_PATH_NOTWRITABLE_USING_DEFAULT="The folder at %1$s is not writable and cannot be used for the cache, using the default %2$s instead." ; The following 2 strings are deprecated and will be removed with 4.0. COM_CONFIG_ERROR_HELPREFRESH_ERROR_STORE="The new Help Sites list could not be saved." COM_CONFIG_ERROR_HELPREFRESH_FETCH="The current Help Sites list could not be fetched from the remote server." COM_CONFIG_ERROR_ROOT_ASSET_NOT_FOUND="The asset for global configuration could not be found. Permissions have not been saved." COM_CONFIG_ERROR_SSL_NOT_AVAILABLE="HTTPS has not been enabled as it is not available on this server. HTTPS connection test failed with the following error: <em>%s</em>" COM_CONFIG_ERROR_SSL_NOT_AVAILABLE_HTTP_CODE="HTTPS version of the site returned an invalid HTTP status code." COM_CONFIG_ERROR_REMOVING_SUPER_ADMIN="You can't remove your own Super User permissions." COM_CONFIG_ERROR_UNKNOWN_BEFORE_SAVING="A plugin reported an unknown error before saving the configuration." COM_CONFIG_ERROR_WRITE_FAILED="Could not write to the configuration file" COM_CONFIG_FIELD_CACHE_HANDLER_DESC="Choose the cache handler. Native caching mechanism is file-based. Please make sure the cache folders are writable." COM_CONFIG_FIELD_CACHE_HANDLER_LABEL="Cache Handler" COM_CONFIG_FIELD_CACHE_PLATFORMPREFIX_LABEL="Platform Specific Caching" COM_CONFIG_FIELD_CACHE_PLATFORMPREFIX_DESC="Enable or disable platform specific caching. Enable when HTML output on mobile differs from other devices. (Default disabled.)" COM_CONFIG_FIELD_CACHE_LABEL="System Cache" COM_CONFIG_FIELD_CACHE_DESC="Enable or disable caching and set caching level. Conservative level: smaller system cache, Progressive level (default): faster, bigger system cache, includes module renderers cache. Not appropriate for extremely large sites." COM_CONFIG_FIELD_CACHE_PATH_DESC="Please specify a writable folder to store cache files if you do not wish to use the default folder." COM_CONFIG_FIELD_CACHE_PATH_LABEL="Path to Cache Folder" COM_CONFIG_FIELD_CACHE_TIME_DESC="The maximum length of time in minutes for a cache file to be stored before it is refreshed." COM_CONFIG_FIELD_CACHE_TIME_LABEL="Cache Time" COM_CONFIG_FIELD_COOKIE_DOMAIN_DESC="Domain to use when setting session cookies. Precede domain with '.' if cookie should be valid for all subdomains." COM_CONFIG_FIELD_COOKIE_DOMAIN_LABEL="Cookie Domain" COM_CONFIG_FIELD_COOKIE_PATH_DESC="Path the cookie should be valid for." COM_CONFIG_FIELD_COOKIE_PATH_LABEL="Cookie Path" COM_CONFIG_FIELD_DATABASE_HOST_DESC="The hostname for your database entered during the installation process. Do not edit this field unless absolutely necessary (eg the transfer of the database to a new hosting provider)." COM_CONFIG_FIELD_DATABASE_HOST_LABEL="Host" COM_CONFIG_FIELD_DATABASE_NAME_DESC="The name for your database entered during the installation process. Do not edit this field unless absolutely necessary (eg the transfer of the database to a new hosting provider)." COM_CONFIG_FIELD_DATABASE_NAME_LABEL="Database Name" COM_CONFIG_FIELD_DATABASE_PREFIX_DESC="The prefix used for your database tables, created during the installation process. Do not edit this field unless absolutely necessary (eg the transfer of the database to a new hosting provider)." COM_CONFIG_FIELD_DATABASE_PREFIX_LABEL="Database Tables Prefix" COM_CONFIG_FIELD_DATABASE_TYPE_DESC="The type of database in use, selected during the installation process. Do not edit this field unless you are migrating to a different type of database, perhaps due to changing your hosting provider." COM_CONFIG_FIELD_DATABASE_TYPE_LABEL="Database Type" COM_CONFIG_FIELD_DATABASE_USERNAME_DESC="The username for access to your database entered during the installation process. Do not edit this field unless absolutely necessary (eg the transfer of the database to a new hosting provider)." COM_CONFIG_FIELD_DATABASE_USERNAME_LABEL="Database Username" COM_CONFIG_FIELD_DEBUG_CONST="Constant" COM_CONFIG_FIELD_DEBUG_CONST_LANG_DESC="Select if you should display the language constant or the language value when debugging the language strings." COM_CONFIG_FIELD_DEBUG_CONST_LANG_LABEL="Language Display" COM_CONFIG_FIELD_DEBUG_LANG_DESC="Select if the debugging indicators (<strong>** ... **</strong>) or (<strong>?? ... ??</strong>) for the Joomla Language files will be displayed. Debug Language will work without Debug System being activated, but you will not get the additional detailed references that will help you correct any errors." COM_CONFIG_FIELD_DEBUG_LANG_LABEL="Debug Language" COM_CONFIG_FIELD_DEBUG_SYSTEM_DESC="If enabled, diagnostic information, language translation and SQL errors (if present) will be displayed. The information will be displayed at the foot of every page you view within the Joomla Backend and Frontend. It is not advisable to leave the debug mode activated when running a live website." COM_CONFIG_FIELD_DEBUG_SYSTEM_LABEL="Debug System" COM_CONFIG_FIELD_DEBUG_VALUE="Value" COM_CONFIG_FIELD_DEFAULT_ACCESS_LEVEL_DESC="Select the default access level for new content, menu items and other items created on your site." COM_CONFIG_FIELD_DEFAULT_ACCESS_LEVEL_LABEL="Default Access Level" COM_CONFIG_FIELD_DEFAULT_EDITOR_DESC="Select the default text editor for your site. Registered Users will be able to change their preference in their personal details if you allow that option." COM_CONFIG_FIELD_DEFAULT_EDITOR_LABEL="Default Editor" COM_CONFIG_FIELD_DEFAULT_CAPTCHA_DESC="Select the default captcha for your site. You may need to enter required information for your captcha plugin in the Plugin Manager." COM_CONFIG_FIELD_DEFAULT_CAPTCHA_LABEL="Default Captcha" COM_CONFIG_FIELD_DEFAULT_FEED_LIMIT_DESC="Select the number of content items to show in the feed(s)." COM_CONFIG_FIELD_DEFAULT_FEED_LIMIT_LABEL="Default Feed Limit" COM_CONFIG_FIELD_DEFAULT_LIST_LIMIT_DESC="Sets the default length of lists in the Control Panel for all users." COM_CONFIG_FIELD_DEFAULT_LIST_LIMIT_LABEL="Default List Limit" COM_CONFIG_FIELD_ERROR_REPORTING_DESC="Select the level of reporting. See the Help Screen for full details." COM_CONFIG_FIELD_ERROR_REPORTING_LABEL="Error Reporting" COM_CONFIG_FIELD_FEED_EMAIL_DESC="The RSS and Atom news feeds include the author's email address. Select Author Email Address to use each author's email address (from the User Manager) in the news feed. Select Site Email Address to include the site 'Mail from' email address for each article." COM_CONFIG_FIELD_FEED_EMAIL_LABEL="Feed Email Address" COM_CONFIG_FIELD_FILTERS_DEFAULT_BLACK_LIST="Default Blacklist" COM_CONFIG_FIELD_FILTERS_CUSTOM_BLACK_LIST="Custom Blacklist" COM_CONFIG_FIELD_FILTERS_NO_HTML="No HTML" COM_CONFIG_FIELD_FILTERS_NO_FILTER="No Filtering" COM_CONFIG_FIELD_FILTERS_WHITE_LIST="Whitelist" COM_CONFIG_FRONTEDITING_DESC="Select if you want inline editing for modules and menu items (support may depend on your template)." COM_CONFIG_FRONTEDITING_LABEL="Inline Editing" COM_CONFIG_FRONTEDITING_MENUSANDMODULES="Modules & Menus" COM_CONFIG_FRONTEDITING_MENUSANDMODULES_ADMIN_TOO="Modules & Menus (administrator too)" COM_CONFIG_FRONTEDITING_MODULES="Modules" COM_CONFIG_FIELD_FORCE_SSL_DESC="Force site access in the selected areas to occur only with HTTPS (encrypted HTTP connections with the https:// protocol prefix) and also force the use of secure cookies. Note, you must have HTTPS enabled on your server to utilise this option." COM_CONFIG_FIELD_FORCE_SSL_LABEL="Force HTTPS" COM_CONFIG_FIELD_FTP_ENABLE_DESC="Enable the built in FTP (File Transfer Protocol) functionality which is needed, in some server environments, instead of the normal upload functionality of Joomla." COM_CONFIG_FIELD_FTP_ENABLE_LABEL="Enable FTP" COM_CONFIG_FIELD_FTP_HOST_DESC="Enter the name of the host of your FTP server." COM_CONFIG_FIELD_FTP_HOST_LABEL="FTP Host" COM_CONFIG_FIELD_FTP_PASSWORD_DESC="Enter your FTP password." COM_CONFIG_FIELD_FTP_PASSWORD_LABEL="FTP Password" COM_CONFIG_FIELD_FTP_PORT_DESC="Enter the port that FTP should be accessed by. The default is port 21." COM_CONFIG_FIELD_FTP_PORT_LABEL="FTP Port" COM_CONFIG_FIELD_FTP_ROOT_DESC="The path to the root folder of the FTP server. The root folder is the base folder to which the FTP server is allowed access." COM_CONFIG_FIELD_FTP_ROOT_LABEL="FTP Root" COM_CONFIG_FIELD_FTP_USERNAME_DESC="The username used to access the FTP server." COM_CONFIG_FIELD_FTP_USERNAME_LABEL="FTP Username" COM_CONFIG_FIELD_GZIP_COMPRESSION_DESC="Compress buffered output if supported." COM_CONFIG_FIELD_GZIP_COMPRESSION_LABEL="Gzip Page Compression" ; The following two strings are deprecated and will be removed with 4.0. COM_CONFIG_FIELD_HELP_SERVER_DESC="Select the name of the help server from which your system will collect the help screen displays." COM_CONFIG_FIELD_HELP_SERVER_LABEL="Help Server" COM_CONFIG_FIELD_LOG_PATH_DESC="Please specify a folder to store log files." COM_CONFIG_FIELD_LOG_PATH_LABEL="Path to Log Folder" COM_CONFIG_FIELD_MAIL_FROM_EMAIL_DESC="The email address that will be used to send site email." COM_CONFIG_FIELD_MAIL_FROM_EMAIL_LABEL="From Email" COM_CONFIG_FIELD_MAIL_FROM_NAME_DESC="Text displayed in the header "From:" field when sending a site email. Usually the site name." COM_CONFIG_FIELD_MAIL_FROM_NAME_LABEL="From Name" COM_CONFIG_FIELD_MAIL_REPLY_TO_EMAIL_LABEL="Reply To Email" COM_CONFIG_FIELD_MAIL_REPLY_TO_EMAIL_DESC="The email address that will be used to receive end user(s) reply" COM_CONFIG_FIELD_MAIL_REPLY_TO_NAME_LABEL="Reply To Name" COM_CONFIG_FIELD_MAIL_REPLY_TO_NAME_DESC="Text displayed in the header "To:" field when end user(s) replying to received email" COM_CONFIG_FIELD_MAIL_MAILONLINE_DESC="Select Yes to turn on mail sending, select No to turn off mail sending. Warning: It is recommended to put the site offline when disabling the mail function!" COM_CONFIG_FIELD_MAIL_MAILONLINE_LABEL="Send Mail" COM_CONFIG_FIELD_MAIL_MASSMAILOFF_DESC="Select Yes to disable the Mass Mail Users function, select No to make it active." COM_CONFIG_FIELD_MAIL_MASSMAILOFF_LABEL="Disable Mass Mail" COM_CONFIG_FIELD_MAIL_MAILER_DESC="Select which mailer for the delivery of site email." COM_CONFIG_FIELD_MAIL_MAILER_LABEL="Mailer" COM_CONFIG_FIELD_MAIL_SENDMAIL_PATH_DESC="Enter the path to the sendmail program folder on the host server." COM_CONFIG_FIELD_MAIL_SENDMAIL_PATH_LABEL="Sendmail Path" COM_CONFIG_FIELD_MAIL_SMTP_AUTH_DESC="Select Yes if your SMTP Host requires SMTP Authentication." COM_CONFIG_FIELD_MAIL_SMTP_AUTH_LABEL="SMTP Authentication" COM_CONFIG_FIELD_MAIL_SMTP_HOST_DESC="Enter the name of the SMTP host." COM_CONFIG_FIELD_MAIL_SMTP_HOST_LABEL="SMTP Host" COM_CONFIG_FIELD_MAIL_SMTP_PASSWORD_DESC="Enter the password for the SMTP host." COM_CONFIG_FIELD_MAIL_SMTP_PASSWORD_LABEL="SMTP Password" COM_CONFIG_FIELD_MAIL_SMTP_PORT_DESC="Enter the port number of the SMTP server Joomla will use to send emails. Usually:<br />- 25 when using an unsecure mail server<br />- 465 when using a secure server with SMTPS<br />- 25 or 587 when using a secure server with SMTP with STARTTLS extension." COM_CONFIG_FIELD_MAIL_SMTP_PORT_LABEL="SMTP Port" COM_CONFIG_FIELD_MAIL_SMTP_SECURE_DESC="Select the security model of the SMTP server Joomla will use to send emails.<br />- None for no encryption<br />- SSL/TLS for SMTPS (usually on port 465)<br />- STARTTLS for SMTP with STARTTLS extension (usually on port 25 or port 587)" COM_CONFIG_FIELD_MAIL_SMTP_SECURE_LABEL="SMTP Security" COM_CONFIG_FIELD_MAIL_SMTP_USERNAME_DESC="Enter the username for access to the SMTP host." COM_CONFIG_FIELD_MAIL_SMTP_USERNAME_LABEL="SMTP Username" COM_CONFIG_FIELD_MEMCACHE_COMPRESSION_DESC="Memcache(d) compression." COM_CONFIG_FIELD_MEMCACHE_COMPRESSION_LABEL="Memcache(d) Compression" COM_CONFIG_FIELD_MEMCACHE_HOST_DESC="Memcache(d) server host." COM_CONFIG_FIELD_MEMCACHE_HOST_LABEL="Memcache(d) Server Host" COM_CONFIG_FIELD_MEMCACHE_PERSISTENT_DESC="Persistent Memcache(d)." COM_CONFIG_FIELD_MEMCACHE_PERSISTENT_LABEL="Persistent Memcache(d)" COM_CONFIG_FIELD_MEMCACHE_PORT_DESC="Memcache(d) server port." COM_CONFIG_FIELD_MEMCACHE_PORT_LABEL="Memcache(d) Server Port" COM_CONFIG_FIELD_REDIS_AUTH_DESC="Redis server authentication." COM_CONFIG_FIELD_REDIS_AUTH_LABEL="Redis Server Authentication" COM_CONFIG_FIELD_REDIS_DB_DESC="Redis database." COM_CONFIG_FIELD_REDIS_DB_LABEL="Redis Database" COM_CONFIG_FIELD_REDIS_HOST_DESC="Redis server host." COM_CONFIG_FIELD_REDIS_HOST_LABEL="Redis Server Host" COM_CONFIG_FIELD_REDIS_PERSISTENT_DESC="Persistent Redis." COM_CONFIG_FIELD_REDIS_PERSISTENT_LABEL="Persistent Redis" COM_CONFIG_FIELD_REDIS_PORT_DESC="Redis server port." COM_CONFIG_FIELD_REDIS_PORT_LABEL="Redis Server Port" COM_CONFIG_FIELD_METAAUTHOR_DESC="Show the author meta tag when viewing articles." COM_CONFIG_FIELD_METAAUTHOR_LABEL="Show Author Meta Tag" COM_CONFIG_FIELD_METADESC_DESC="Enter a description of the overall website that may be used by search engines. Generally, a maximum of 20 words is best." COM_CONFIG_FIELD_METADESC_LABEL="Site Meta Description" COM_CONFIG_FIELD_METAKEYS_DESC="Enter the keywords and phrases that best describe your website. Separate keywords and phrases with a comma." COM_CONFIG_FIELD_METAKEYS_LABEL="Site Meta Keywords" COM_CONFIG_FIELD_METALANGUAGE_DESC="Places the selected language in the metadata for the site." COM_CONFIG_FIELD_METALANGUAGE_LABEL="Site Meta Language" COM_CONFIG_FIELD_METAVERSION_LABEL="Show Joomla Version" COM_CONFIG_FIELD_METAVERSION_DESC="Show the Joomla version number in the generator meta tag." COM_CONFIG_FIELD_OFFLINE_IMAGE_DESC="Select or upload an optional image to be displayed on the default offline page. Make sure the image is less than 400px wide." COM_CONFIG_FIELD_OFFLINE_IMAGE_LABEL="Offline Image" COM_CONFIG_FIELD_OFFLINE_MESSAGE_DESC="The custom offline message will be used if the 'Offline Message' field is set to 'Use Custom Message'." COM_CONFIG_FIELD_OFFLINE_MESSAGE_LABEL="Custom Message" COM_CONFIG_FIELD_PROXY_ENABLE_DESC="Enable Joomla to use a proxy which is needed in some server environments to fetch URLs like in the Joomla Update component." COM_CONFIG_FIELD_PROXY_ENABLE_LABEL="Enable Proxy" COM_CONFIG_FIELD_PROXY_HOST_DESC="Enter the name of the host of your Proxy server." COM_CONFIG_FIELD_PROXY_HOST_LABEL="Proxy Host" COM_CONFIG_FIELD_PROXY_PASSWORD_DESC="Enter your Proxy password." COM_CONFIG_FIELD_PROXY_PASSWORD_LABEL="Proxy Password" COM_CONFIG_FIELD_PROXY_PORT_DESC="Enter the port that Proxy should be accessed by." COM_CONFIG_FIELD_PROXY_PORT_LABEL="Proxy Port" COM_CONFIG_FIELD_PROXY_USERNAME_DESC="The username used to access the Proxy server." COM_CONFIG_FIELD_PROXY_USERNAME_LABEL="Proxy Username" COM_CONFIG_FIELD_SECRET_DESC="This is an auto-generated, unique alphanumeric code for every Joomla installation. It is used for security functions." COM_CONFIG_FIELD_SECRET_LABEL="Secret" COM_CONFIG_FIELD_SEF_REWRITE_DESC="Select to use a server's rewrite engine to catch URLs that meet specific conditions and rewrite them as directed. Available for IIS 7 and Apache. <br /><strong>Apache users only!</strong><br />Rename htaccess.txt to .htaccess before activating.<br /><strong>IIS 7 users only!</strong><br />Rename web.config.txt to web.config and install IIS URL Rewrite Module before activating.<br />" COM_CONFIG_FIELD_SEF_REWRITE_LABEL="Use URL Rewriting" COM_CONFIG_FIELD_SEF_SUFFIX_DESC="If yes, the system will add a suffix to the URL based on the document type." COM_CONFIG_FIELD_SEF_SUFFIX_LABEL="Add Suffix to URL" COM_CONFIG_FIELD_SEF_URL_DESC="Select if the URLs are optimised for Search Engines." COM_CONFIG_FIELD_SEF_URL_LABEL="Search Engine Friendly URLs" COM_CONFIG_FIELD_SERVER_TIMEZONE_DESC="Choose a city in the list to configure the date and time for display." COM_CONFIG_FIELD_SERVER_TIMEZONE_LABEL="Website Time Zone" COM_CONFIG_FIELD_SESSION_HANDLER_DESC="The mechanism by which Joomla identifies a User once they are connected to the website using non-persistent cookies.<br />If 'PHP' is selected, the <em>session.save_handler</em> value from the PHP configuration will be used." COM_CONFIG_FIELD_SESSION_HANDLER_LABEL="Session Handler" COM_CONFIG_FIELD_SESSION_TIME_DESC="Auto log out a User after they have been inactive for the entered number of minutes. Do not set too high." COM_CONFIG_FIELD_SESSION_TIME_LABEL="Session Lifetime" COM_CONFIG_FIELD_SHARED_SESSION_DESC="When enabled, a user's session is shared between the frontend and administrator sections of the site. Note that changing this value will invalidate all existing sessions on the site. This is not available when the \"Force HTTPS\" option is set to \"Administrator Only\"." COM_CONFIG_FIELD_SHARED_SESSION_LABEL="Shared Sessions" COM_CONFIG_FIELD_SITE_DISPLAY_MESSAGE_DESC="Display or not a Frontend message when the site is offline. The custom offline message uses the value defined in the 'Custom message' field. The language offline message uses the value defined in the site language ini file." COM_CONFIG_FIELD_SITE_DISPLAY_MESSAGE_LABEL="Offline Message" COM_CONFIG_FIELD_SITE_NAME_DESC="Enter the name of your website. This will be used in various locations (eg the Backend browser title bar and <em>Site Offline</em> pages)." COM_CONFIG_FIELD_SITE_NAME_LABEL="Site Name" COM_CONFIG_FIELD_SITE_OFFLINE_DESC="Select if access to the Site Frontend is available. If Yes, the Frontend will display or not a message depending on the settings below." COM_CONFIG_FIELD_SITE_OFFLINE_LABEL="Site Offline" COM_CONFIG_FIELD_SITENAME_PAGETITLES_DESC="Begin or end all Page Titles with the site name (for example, My Site Name - My Article Name)." COM_CONFIG_FIELD_SITENAME_PAGETITLES_LABEL="Site Name in Page Titles" COM_CONFIG_FIELD_TEMP_PATH_DESC="Please specify a writable folder to store temporary files." COM_CONFIG_FIELD_TEMP_PATH_LABEL="Path to Temp Folder" COM_CONFIG_FIELD_UNICODESLUGS_DESC="Choose between transliteration and unicode aliases. Transliteration is the default." COM_CONFIG_FIELD_UNICODESLUGS_LABEL="Unicode Aliases" COM_CONFIG_FIELD_VALUE_ADMINISTRATOR_ONLY="Administrator Only" COM_CONFIG_FIELD_VALUE_AFTER="After" COM_CONFIG_FIELD_VALUE_AUTHOR_EMAIL="Author Email" COM_CONFIG_FIELD_VALUE_BEFORE="Before" COM_CONFIG_FIELD_VALUE_CACHE_OFF="OFF - Caching disabled" COM_CONFIG_FIELD_VALUE_CACHE_CONSERVATIVE="ON - Conservative caching" COM_CONFIG_FIELD_VALUE_CACHE_PROGRESSIVE="ON - Progressive caching" COM_CONFIG_FIELD_VALUE_DEVELOPMENT="Development" COM_CONFIG_FIELD_VALUE_DISPLAY_OFFLINE_MESSAGE_CUSTOM="Use Custom Message" COM_CONFIG_FIELD_VALUE_DISPLAY_OFFLINE_MESSAGE_LANGUAGE="Use Site Language Default Message" COM_CONFIG_FIELD_VALUE_ENTIRE_SITE="Entire Site" COM_CONFIG_FIELD_VALUE_MAXIMUM="Maximum" COM_CONFIG_FIELD_VALUE_NO_EMAIL="No Email" COM_CONFIG_FIELD_VALUE_NONE="None" COM_CONFIG_FIELD_VALUE_PHP_MAIL="PHP Mail" COM_CONFIG_FIELD_VALUE_SENDMAIL="Sendmail" COM_CONFIG_FIELD_VALUE_SIMPLE="Simple" COM_CONFIG_FIELD_VALUE_SITE_EMAIL="Site Email" COM_CONFIG_FIELD_VALUE_SMTP="SMTP" COM_CONFIG_FIELD_VALUE_SSL="SSL/TLS" COM_CONFIG_FIELD_VALUE_SYSTEM_DEFAULT="System Default" COM_CONFIG_FIELD_VALUE_TLS="STARTTLS" COM_CONFIG_FTP_DETAILS="FTP Login Details" COM_CONFIG_FTP_DETAILS_TIP="For updating your configuration.php file, Joomla will most likely need your FTP account details. Please enter them in the form fields below." COM_CONFIG_FTP_SETTINGS="FTP Settings" COM_CONFIG_GLOBAL_CONFIGURATION="Global Configuration" COM_CONFIG_HELPREFRESH_SUCCESS="The Help Sites list has been refreshed." COM_CONFIG_LOCATION_SETTINGS="Location Settings" COM_CONFIG_MAIL_SETTINGS="Mail Settings" COM_CONFIG_METADATA_SETTINGS="Metadata Settings" COM_CONFIG_PERMISSION_SETTINGS="Permission Settings" COM_CONFIG_PERMISSIONS="Permissions" COM_CONFIG_PROXY_SETTINGS="Proxy Settings" COM_CONFIG_SAVE_SUCCESS="Configuration saved." COM_CONFIG_SENDMAIL_ACTION_BUTTON="Send Test Mail" COM_CONFIG_SENDMAIL_BODY="This is a test mail sent using "_QQ_"%s"_QQ_". Your email settings are correct!" COM_CONFIG_SENDMAIL_ERROR="Test mail could not be sent." COM_CONFIG_SENDMAIL_METHOD_MAIL="PHP Mail" COM_CONFIG_SENDMAIL_METHOD_SENDMAIL="Sendmail" COM_CONFIG_SENDMAIL_METHOD_SMTP="SMTP" COM_CONFIG_SENDMAIL_SUBJECT="Test mail from %s" COM_CONFIG_SENDMAIL_SUCCESS="The email was sent to <strong>%s</strong> using <strong>%s</strong>. You should check that you've received the test email." COM_CONFIG_SENDMAIL_SUCCESS_FALLBACK="The email was sent to <strong>%s</strong> but using <strong>%s</strong> as fallback. You should check that you've received the test email." COM_CONFIG_SEO_SETTINGS="SEO Settings" COM_CONFIG_SERVER="Server" COM_CONFIG_SERVER_SETTINGS="Server Settings" COM_CONFIG_SESSION_SETTINGS="Session Settings" COM_CONFIG_SITE_SETTINGS="Site Settings" COM_CONFIG_SYSTEM="System" COM_CONFIG_SYSTEM_SETTINGS="System Settings" COM_CONFIG_TEXT_FILTER_SETTINGS="Text Filter Settings" COM_CONFIG_TEXT_FILTERS="Text Filters" COM_CONFIG_TEXT_FILTERS_DESC="These text filter settings will be applied to all text editor fields in the selected groups.<br />These filtering options give more control over the HTML your content providers submit. You can be as strict or as liberal as you require to suit your site's needs. The filtering is opt-in and the default settings provide good protection against markup commonly associated with website attacks." COM_CONFIG_TEXT_FILTERS_NOTE="WARNING: You have configured a parent group with the setting 'No Filtering' - this setting can't be overridden in child groups and any other configured filter will not be applied." COM_CONFIG_XML_DESCRIPTION="Configuration Manager" JLIB_RULES_SETTING_NOTES="If you change the setting, it will apply to this and all child groups, components and content. Note that:<br /><em><strong>Inherited</strong></em> means that the permissions from the parent group will be used.<br /><em><strong>Denied</strong></em> means that no matter what the parent group's setting is, the group being edited can't take this action.<br /><em><strong>Allowed</strong></em> means that the group being edited will be able to take this action (but if this is in conflict with the parent group it will have no impact; a conflict will be indicated by <em><strong>Not Allowed (Locked)</strong></em> under Calculated Settings).<br /><em><strong>Not Set</strong></em> is used only for the Public group in global configuration. The Public group is the parent of all other groups. If a permission is not set, it is treated as deny but can be changed for child groups, components, categories and items." PKb��\H�dd'language/en-GB/en-GB.tpl_hathor.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 HATHOR="Hathor Administrator template" TPL_HATHOR_POSITION_CP_SHELL="Unused" TPL_HATHOR_POSITION_CPANEL="Control Panel" TPL_HATHOR_POSITION_DEBUG="Debug" TPL_HATHOR_POSITION_FOOTER="Footer" TPL_HATHOR_POSITION_ICON="Quick Icons" TPL_HATHOR_POSITION_LOGIN="Login" TPL_HATHOR_POSITION_MENU="Menu" TPL_HATHOR_POSITION_POSTINSTALL="Postinstall" TPL_HATHOR_POSITION_STATUS="Status" TPL_HATHOR_POSITION_SUBMENU="Submenu" TPL_HATHOR_POSITION_TITLE="Title" TPL_HATHOR_POSITION_TOOLBAR="Toolbar" TPL_HATHOR_XML_DESCRIPTION="Hathor is an accessible Administrator template for Joomla! The Colour CSS files can also be used for custom colour branding."PKb��\�ozII/language/en-GB/en-GB.com_contenthistory.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CONTENTHISTORY="Content History" COM_CONTENTHISTORY_XML_DESCRIPTION="Content History Component." PKb��\�-NAMM+language/en-GB/en-GB.plg_system_log.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_LOG_XML_DESCRIPTION="Provides logging when the user login fails." PLG_SYSTEM_LOG="System - User Log" PKb��\Tv�S��+language/en-GB/en-GB.plg_search_content.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_CONTENT="Search - Content" PLG_SEARCH_CONTENT_FIELD_ARCHIVED_DESC="Enables searching of Archived Articles." PLG_SEARCH_CONTENT_FIELD_ARCHIVED_LABEL="Archived Articles" PLG_SEARCH_CONTENT_FIELD_CONTENT_DESC="Enables searching of all Articles." PLG_SEARCH_CONTENT_FIELD_CONTENT_LABEL="Articles" PLG_SEARCH_CONTENT_FIELD_SEARCHLIMIT_DESC="Number of search items to return." PLG_SEARCH_CONTENT_FIELD_SEARCHLIMIT_LABEL="Search Limit" PLG_SEARCH_CONTENT_XML_DESCRIPTION="Enables searching in Articles."PKb��\9��s��6language/en-GB/en-GB.plg_editors-xtd_pagebreak.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EDITORS-XTD_PAGEBREAK="Button - Page Break" PLG_EDITORSXTD_PAGEBREAK_XML_DESCRIPTION="Provides a button to enable a page break to be inserted into an Article. A popup allows you to configure the settings to be used." PKb��\��x���$language/en-GB/en-GB.com_wrapper.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_WRAPPER="Wrapper" COM_WRAPPER_FIELD_ADD_DESC="By default, http:// will be added unless it detects http:// or https:// in the URL you provide. This allows you to switch off this functionality." COM_WRAPPER_FIELD_ADD_LABEL="Auto Add" COM_WRAPPER_FIELD_FRAME_DESC="Show frame border which wrap the iframe." COM_WRAPPER_FIELD_FRAME_LABEL="Frame Border" COM_WRAPPER_FIELD_HEIGHT_DESC="Height of the iframe window in pixels." COM_WRAPPER_FIELD_HEIGHT_LABEL="Height" COM_WRAPPER_FIELD_HEIGHTAUTO_DESC="If height is set to auto, the height will automatically be set to the size of the external page. This will only work for pages on your own domain. If you see a JavaScript error, make sure this parameter is disabled. This will break XHTML compatibility for this page." COM_WRAPPER_FIELD_HEIGHTAUTO_LABEL="Auto Height" COM_WRAPPER_FIELD_LABEL_SCROLLBARSPARAMS="Scroll Bar Parameters" COM_WRAPPER_FIELD_SCROLLBARS_DESC="Show or hide the horizontal & vertical scrollbars. If you choose 'Auto', make sure the Auto advanced parameter is set." COM_WRAPPER_FIELD_SCROLLBARS_LABEL="Scroll Bars" COM_WRAPPER_FIELD_URL_DESC="URL to site/file you wish to display within the iframe." COM_WRAPPER_FIELD_URL_LABEL="URL" COM_WRAPPER_FIELD_VALUE_AUTO="Auto" COM_WRAPPER_FIELD_WIDTH_DESC="Width of the iframe window. You may enter an absolute figure in pixels or a relative figure by adding a %." COM_WRAPPER_XML_DESCRIPTION="Displays an iframe to wrap an external page or site into Joomla!" PKb��\��M��(language/en-GB/en-GB.plg_search_tags.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_TAGS="Search - Tags" PLG_SEARCH_TAGS_FIELD_SEARCHLIMIT_DESC="Number of search items to return." PLG_SEARCH_TAGS_FIELD_SEARCHLIMIT_LABEL="Search Limit" PLG_SEARCH_TAGS_FIELD_SHOW_TAGGED_ITEMS_DESC="Display or not the items that hold the tags related to the search." PLG_SEARCH_TAGS_FIELD_SHOW_TAGGED_ITEMS_LABEL="Show Tagged Items" PLG_SEARCH_TAGS_ITEM_TAGGED_WITH="%s tagged with: %s" PLG_SEARCH_TAGS_TAGS="Tags" PLG_SEARCH_TAGS_XML_DESCRIPTION="Enables searching in Tags." PKb��\��ع�2language/en-GB/en-GB.plg_editors-xtd_image.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EDITORS-XTD_IMAGE="Button - Image" PLG_IMAGE_XML_DESCRIPTION="Displays a button to insert images into an Article. Displays a popup allowing you to configure an image's properties and upload new image files." PKb��\N!c���,language/en-GB/en-GB.plg_finder_contacts.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_CONTACTS="Smart Search - Contacts" PLG_FINDER_CONTACTS_XML_DESCRIPTION="This plugin indexes Joomla! Contacts." PLG_FINDER_QUERY_FILTER_BRANCH_P_CONTACT="Contacts" PLG_FINDER_QUERY_FILTER_BRANCH_P_COUNTRY="Countries" PLG_FINDER_QUERY_FILTER_BRANCH_P_REGION="Regions" PLG_FINDER_QUERY_FILTER_BRANCH_S_CONTACT="Contact" PLG_FINDER_QUERY_FILTER_BRANCH_S_COUNTRY="Country" PLG_FINDER_QUERY_FILTER_BRANCH_S_REGION="Region" PKb��\�b�rr0language/en-GB/en-GB.mod_multilangstatus.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_MULTILANGSTATUS="Multilingual Status" MOD_MULTILANGSTATUS_XML_DESCRIPTION="This module shows the status of the multilingual parameters." PKb��\�L��CC%language/en-GB/en-GB.com_ajax.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_AJAX="Ajax Interface" COM_AJAX_XML_DESCRIPTION="An extendable Ajax interface for Joomla." PKb��\`5��|E|E"language/en-GB/en-GB.com_menus.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_MENUS="Menus" COM_MENUS_ACTION_COLLAPSE="Collapse" COM_MENUS_ACTION_DESELECT="Deselect" COM_MENUS_ACTION_EXPAND="Expand" COM_MENUS_ACTION_SELECT="Select" COM_MENUS_ADD_MENU_MODULE="Add a module for this menu" COM_MENUS_ADMIN_ACCESS_DESC="Filter by viewing access level." COM_MENUS_ADMIN_ACCESS_LABEL="Access" COM_MENUS_ADMIN_AUTHOR_DESC="Filter by author." COM_MENUS_ADMIN_AUTHOR_LABEL="Author" COM_MENUS_ADMIN_CATEGORY_DESC="Filter by category." COM_MENUS_ADMIN_CATEGORY_LABEL="Category" COM_MENUS_ADMIN_FILTER_DESC="Apply filters to the menu item." COM_MENUS_ADMIN_FILTER_LABEL="Filter" COM_MENUS_ADMIN_LANGUAGE_DESC="Filter by language." COM_MENUS_ADMIN_LANGUAGE_LABEL="Language" COM_MENUS_ADMIN_LEVEL_DESC="The number of subcategory levels to display." COM_MENUS_ADMIN_LEVEL_LABEL="Subcategory Levels" COM_MENUS_ADMIN_TAGS_DESC="Filter by tags." COM_MENUS_ADMIN_TAGS_LABEL="Tags" COM_MENUS_ADVANCED_FIELDSET_LABEL="Advanced" COM_MENUS_BASIC_FIELDSET_LABEL="Options" COM_MENUS_BATCH_MENU_ITEM_CANNOT_CREATE="You are not allowed to create new menu items." COM_MENUS_BATCH_MENU_ITEM_CANNOT_EDIT="You are not allowed to edit menu items." COM_MENUS_BATCH_MENU_LABEL="To Move or Copy your selection please select a Menu or parent item." COM_MENUS_BATCH_OPTIONS="Batch process the selected menu items" COM_MENUS_BATCH_TIP="If a menu or parent is selected for move/copy, any actions selected will be applied to the copied or moved menu items. Otherwise, all actions are applied to the selected menu items." COM_MENUS_CHANGE_MENUITEM="Select or Change Menu Item" COM_MENUS_CONFIGURATION="Menus: Options" COM_MENUS_EDIT_MENUITEM="Edit Menu Item" COM_MENUS_EDIT_MODULE_SETTINGS="Edit module settings" COM_MENUS_ERROR_ALL_LANGUAGE_ASSOCIATED="A menu item set to All languages can't be associated. Associations have not been set." COM_MENUS_ERROR_ALREADY_HOME="Menu item already set to home." COM_MENUS_ERROR_MENUTYPE="Please change the Menu type. The term 'main' is reserved for internal usage." COM_MENUS_ERROR_MENUTYPE_HOME="The term 'main' is reserved for internal usage." COM_MENUS_ERROR_MENUTYPE_NOT_FOUND="The Menu type doesn't exist." COM_MENUS_ERROR_ONE_HOME="Only one menu item can be a home link for each language." COM_MENUS_EXTENSION_PUBLISHED_DISABLED="Component disabled and menu item published." COM_MENUS_EXTENSION_PUBLISHED_ENABLED="Component enabled and menu item published." COM_MENUS_EXTENSION_UNPUBLISHED_DISABLED="Component disabled and menu item unpublished." COM_MENUS_EXTENSION_UNPUBLISHED_ENABLED="Component enabled and menu item unpublished." COM_MENUS_FIELD_FEEDLINK_DESC="Display a feed link for this menu item." COM_MENUS_FIELD_FEEDLINK_LABEL="Feed link" COM_MENUS_FIELD_PRESET_LABEL="Import a preset" COM_MENUS_FIELD_PRESET_DESC="Select a preset if you want to populate this menu with the menu items in that preset. Otherwise leave this empty." COM_MENUS_FIELD_VALUE_IGNORE="Ignore" COM_MENUS_FIELD_VALUE_NEW_WITH_NAV="New Window With Navigation" COM_MENUS_FIELD_VALUE_NEW_WITHOUT_NAV="New Without Navigation" COM_MENUS_FIELD_VALUE_PARENT="Parent" COM_MENUS_FIELDSET_RULES="Permissions" COM_MENUS_FILTER_PARENT_MENU_ITEM_DESC="Filters the menu items list where the parent is this selected menu item." COM_MENUS_FILTER_PARENT_MENU_ITEM_LABEL="Parent Menu Item" COM_MENUS_FILTER_SELECT_PARENT_MENU_ITEM="- Select Parent Menu Item -" COM_MENUS_GRID_UNSET_LANGUAGE="Unset %s Default" COM_MENUS_HEADING_ASSIGN_MODULE="Module" COM_MENUS_HEADING_ASSOCIATION="Association" COM_MENUS_HEADING_DISPLAY="Display" COM_MENUS_HEADING_HOME="Home" COM_MENUS_HEADING_HOME_ASC="Home ascending" COM_MENUS_HEADING_HOME_DESC="Home descending" COM_MENUS_HEADING_LEVELS="View Level" COM_MENUS_HEADING_LINKED_MODULES="Linked Modules" COM_MENUS_HEADING_MENU="Menu" COM_MENUS_HEADING_MENU_ASC="Menu ascending" COM_MENUS_HEADING_MENU_DESC="Menu descending" COM_MENUS_HEADING_NUMBER_MENU_ITEMS="Number of Menu Items" COM_MENUS_HEADING_POSITION="Position" COM_MENUS_HEADING_PUBLISHED_ITEMS="Published" COM_MENUS_HEADING_TRASHED_ITEMS="Trashed" COM_MENUS_HEADING_UNPUBLISHED_ITEMS="Unpublished" COM_MENUS_HTML_PUBLISH="Publish menu item" COM_MENUS_HTML_PUBLISH_ALIAS="Publish the menu item alias" COM_MENUS_HTML_PUBLISH_DISABLED="Publish menu item::Component disabled" COM_MENUS_HTML_PUBLISH_ENABLED="Publish menu item::Component enabled" COM_MENUS_HTML_PUBLISH_HEADING="Publish the heading menu item" COM_MENUS_HTML_PUBLISH_SEPARATOR="Publish the separator menu item" COM_MENUS_HTML_PUBLISH_URL="Publish the URL menu item" COM_MENUS_HTML_UNPUBLISH_ALIAS="Unpublish the menu item alias" COM_MENUS_HTML_UNPUBLISH_DISABLED="Unpublish menu item::Component disabled" COM_MENUS_HTML_UNPUBLISH_ENABLED="Unpublish menu item::Component enabled" COM_MENUS_HTML_UNPUBLISH_HEADING="Unpublish the heading menu item" COM_MENUS_HTML_UNPUBLISH_SEPARATOR="Unpublish the separator menu item" COM_MENUS_HTML_UNPUBLISH_URL="Unpublish the URL menu item" COM_MENUS_INTEGRATION_FIELDSET_LABEL="Integration" ; The following 2 strings are deprecated and will be removed with 4.0. COM_MENUS_ITEM_ASSOCIATIONS_FIELDSET_LABEL="Menu Item Associations" COM_MENUS_ITEM_ASSOCIATIONS_FIELDSET_DESC="Multilingual only! This choice will only display if the Language Filter parameter 'Item Associations' is set to 'Yes'. Choose a menu item for the target language. This association will let the Language Switcher module redirect to the associated menu item in another language. If used, make sure to display the Language switcher module on the relevant pages. A menu item set to language 'All' can't be associated." COM_MENUS_ITEM_DETAILS="Details" COM_MENUS_ITEM_FIELD_ALIAS_DESC="The alias is used in the URL when SEF is on." COM_MENUS_ITEM_FIELD_ALIAS_MENU_DESC="Menu Item to link to." COM_MENUS_ITEM_FIELD_ALIAS_MENU_LABEL="Menu Item" COM_MENUS_ITEM_FIELD_ALIAS_REDIRECT_DESC="If set to Yes then visitors will be redirected to the linked menu item." COM_MENUS_ITEM_FIELD_ALIAS_REDIRECT_LABEL="Use Redirection" COM_MENUS_ITEM_FIELD_ANCHOR_CSS_DESC="An optional class to apply to the menu hyperlink." COM_MENUS_ITEM_FIELD_ANCHOR_CSS_LABEL="Link Class" COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_DESC="An optional, custom description for the title attribute of the menu hyperlink." COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_LABEL="Link Title Attribute" COM_MENUS_ITEM_FIELD_ANCHOR_REL_DESC="An optional, custom rel attribute to get more information about the menu hyperlink (search engines purpose)." COM_MENUS_ITEM_FIELD_ANCHOR_REL_LABEL="Link Rel Attribute" COM_MENUS_ITEM_FIELD_ASSIGNED_DESC="Shows which menu the link will appear in." COM_MENUS_ITEM_FIELD_ASSIGNED_LABEL="Menu" COM_MENUS_ITEM_FIELD_ASSOCIATION_NO_VALUE="- No association -" COM_MENUS_ITEM_FIELD_BROWSERNAV_DESC="Target browser window when the menu item is selected." COM_MENUS_ITEM_FIELD_BROWSERNAV_LABEL="Target Window" COM_MENUS_ITEM_FIELD_COMPONENTS_CONTAINER_HIDE_ITEMS_DESC="Select the menu items that should or should not be shown under this container. If there are no items to show, then this container will also be hidden.<br>Please note that when you install a new component it will be displayed by default until you come back here and hide it too." COM_MENUS_ITEM_FIELD_COMPONENTS_CONTAINER_HIDE_ITEMS_LABEL="Show or Hide Menu Items" COM_MENUS_ITEM_FIELD_HIDE_UNASSIGNED="Hide Unassigned Modules" COM_MENUS_ITEM_FIELD_HIDE_UNASSIGNED_DESC="Show or hide modules unassigned to this menu item." COM_MENUS_ITEM_FIELD_HIDE_UNASSIGNED_LABEL="Unassigned Modules" COM_MENUS_ITEM_FIELD_HIDE_UNPUBLISHED="Hide Unpublished Modules" COM_MENUS_ITEM_FIELD_HIDE_UNPUBLISHED_DESC="Show or hide modules that are unpublished." COM_MENUS_ITEM_FIELD_HIDE_UNPUBLISHED_LABEL="Unpublished Modules" COM_MENUS_ITEM_FIELD_HOME_DESC="Sets this menu item as the default or home page of the site. You must have a default page set at all times." COM_MENUS_ITEM_FIELD_HOME_LABEL="Default Page" COM_MENUS_ITEM_FIELD_LANGUAGE_DESC="Assign a language to this menu item." COM_MENUS_ITEM_FIELD_LINK_DESC="Link for this menu." COM_MENUS_ITEM_FIELD_LINK_LABEL="Link" COM_MENUS_ITEM_FIELD_MENU_IMAGE_DESC="Select or upload an optional image to be used with the menu hyperlink." COM_MENUS_ITEM_FIELD_MENU_IMAGE_LABEL="Link Image" COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_DESC="An optional class to apply to the image." COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_LABEL="Image Class" COM_MENUS_ITEM_FIELD_MENU_SHOW_DESC="Select 'No' if you want to hide this menu item. Note any submenu items will also be hidden." COM_MENUS_ITEM_FIELD_MENU_SHOW_LABEL="Display in Menu" COM_MENUS_ITEM_FIELD_MENU_TEXT_DESC="If the optional image is added, adds the menu title next to the image. Default is 'Yes'." COM_MENUS_ITEM_FIELD_MENU_TEXT_LABEL="Add Menu Title" COM_MENUS_ITEM_FIELD_NOTE_DESC="An optional note to display in the Menu Manager." COM_MENUS_ITEM_FIELD_ORDERING_DESC="The menu item will be placed in the menu after the selected menu item." COM_MENUS_ITEM_FIELD_ORDERING_LABEL="Ordering" COM_MENUS_ITEM_FIELD_ORDERING_TEXT="Ordering will be available after saving." COM_MENUS_ITEM_FIELD_ORDERING_VALUE_FIRST="- First -" COM_MENUS_ITEM_FIELD_ORDERING_VALUE_LAST="- Last -" COM_MENUS_ITEM_FIELD_PAGE_CLASS_DESC="Optional CSS class to add to elements in this page. This allows CSS styling specific to this page." COM_MENUS_ITEM_FIELD_PAGE_CLASS_LABEL="Page Class" COM_MENUS_ITEM_FIELD_PAGE_HEADING_DESC="Optional alternative text for the Page heading." COM_MENUS_ITEM_FIELD_PAGE_HEADING_LABEL="Page Heading" COM_MENUS_ITEM_FIELD_PAGE_TITLE_DESC="Optional text for the "Browser page title" element. If blank, a default value is used based on the Menu Item Title." COM_MENUS_ITEM_FIELD_PAGE_TITLE_LABEL="Browser Page Title" COM_MENUS_ITEM_FIELD_PARENT_DESC="Select a parent item." COM_MENUS_ITEM_FIELD_PARENT_LABEL="Parent Item" COM_MENUS_ITEM_FIELD_SECURE_DESC="Selects if this link should use HTTPS (encrypted HTTP connections with the https:// protocol prefix). Note, you must have HTTPS enabled on your server to utilise this option." COM_MENUS_ITEM_FIELD_SECURE_LABEL="Secure" COM_MENUS_ITEM_FIELD_SHOW_PAGE_HEADING_DESC="Show or hide the Browser Page Title in the heading of the page ( If no optional text entered - will default to value based on the Menu Item Title ). The Page heading is usually displayed inside the "H1" tag." COM_MENUS_ITEM_FIELD_SHOW_PAGE_HEADING_LABEL="Show Page Heading" COM_MENUS_ITEM_FIELD_TEMPLATE_DESC="Select a specific template style for this menu item or use the default template." COM_MENUS_ITEM_FIELD_TEMPLATE_LABEL="Template Style" COM_MENUS_ITEM_FIELD_TEXT_SEPARATOR_DESC="Choose whether this separator will be displayed as a label. If the title has only dashes (-) and spaces, it will not be displayed as a label." COM_MENUS_ITEM_FIELD_TEXT_SEPARATOR_LABEL="Display as a label" COM_MENUS_ITEM_FIELD_TITLE_DESC="The title of the menu item that will display in the menu." COM_MENUS_ITEM_FIELD_TITLE_LABEL="Menu Title" COM_MENUS_ITEM_FIELD_TYPE_DESC="The type of link: Component, URL, Alias, Separator or Heading." COM_MENUS_ITEM_FIELD_TYPE_LABEL="Menu Item Type" COM_MENUS_ITEM_IS_DEFAULT="Is default" COM_MENUS_ITEM_MODULE_ASSIGNMENT="Module Assignment" COM_MENUS_ITEM_REQUIRED="Required" COM_MENUS_ITEM_ROOT="Menu Item Root" COM_MENUS_ITEMS_REBUILD_FAILED="Failed rebuilding Menu Items list." COM_MENUS_ITEMS_REBUILD_SUCCESS="Menu items list rebuilt." COM_MENUS_ITEMS_SEARCH_FILTER="Search in title, alias and notes. Prefix with ID: to search for a menu item ID." COM_MENUS_ITEMS_SEARCH_FILTER_LABEL="Search Menu Items" COM_MENUS_ITEMS_SET_HOME_0="No menu item set to home." COM_MENUS_ITEMS_SET_HOME_1="1 menu item set to home." COM_MENUS_ITEMS_SET_HOME_MORE="%d menu items set to home." COM_MENUS_ITEMS_UNSET_HOME="1 menu item unset to home." COM_MENUS_LABEL_HIDDEN="Hidden" COM_MENUS_LAYOUT_FEATURED_OPTIONS="Layout" COM_MENUS_LAYOUT_MENUTYPE_OPTIONS_LABEL="Menu Type" COM_MENUS_LINKTYPE_OPTIONS_LABEL="Link Type" COM_MENUS_MENU_CLIENT_ID_LABEL="Client" COM_MENUS_MENU_CLIENT_ID_DESC="Select if this Menu is to be used in the Site or the Administrator." COM_MENUS_MENU_CONFIRM_DELETE="Are you sure you want to delete these menus? Confirming will delete the selected menu types, all their menu items and the associated menu modules." COM_MENUS_MENU_DESCRIPTION_DESC="A description about the purpose of the menu." COM_MENUS_MENU_DETAILS="Menu Details" COM_MENUS_MENU_EXPORT_BUTTON="Download as Preset" COM_MENUS_MENU_ITEM_SAVE_SUCCESS="Menu item saved." COM_MENUS_MENU_MENUTYPE_DESC="The system name of the menu." COM_MENUS_MENU_MENUTYPE_LABEL="Menu Type" COM_MENUS_MENU_SAVE_SUCCESS="Menu saved" COM_MENUS_MENU_SEARCH_FILTER="Search in Title or Menu type" COM_MENUS_MENU_SPRINTF="Menu: %s" COM_MENUS_MENUS="Menu items" COM_MENUS_MENU_TYPE_PROTECTED_MAIN_LABEL="Main (Protected)" COM_MENUS_MENU_TITLE_DESC="The title of the menu to display in the Administrator Menubar and lists." COM_MENUS_MENUS_FILTER_SEARCH_DESC="Search in title and menu type." COM_MENUS_MENUS_FILTER_SEARCH_LABEL="Search Menus" ; in the following string ; %1$s is for module title, %2$s is for access-title, %3$s is for position COM_MENUS_MODULE_ACCESS_POSITION="%1$s <small>(%2$s in %3$s)</small>" COM_MENUS_MODULE_SHOW_VARIES="Varies" COM_MENUS_MODULES="Modules" COM_MENUS_N_ITEMS_CHECKED_IN_0="No menu item checked in." COM_MENUS_N_ITEMS_CHECKED_IN_1="%d menu item checked in." COM_MENUS_N_ITEMS_CHECKED_IN_MORE="%d menu items checked in." COM_MENUS_N_ITEMS_DELETED="%d menu items deleted." COM_MENUS_N_ITEMS_DELETED_1="%d menu item deleted." COM_MENUS_N_ITEMS_FAILED_PUBLISHING="Failed publishing %d menu items as at least one of their parents is unpublished or one of their children is checked out." COM_MENUS_N_ITEMS_FAILED_PUBLISHING_1="Failed publishing %d menu item as at least one of its parents is unpublished or one of its children is checked out." COM_MENUS_N_ITEMS_PUBLISHED="%d menu items published." COM_MENUS_N_ITEMS_PUBLISHED_1="%d menu item published." COM_MENUS_N_ITEMS_TRASHED="%d menu items trashed." COM_MENUS_N_ITEMS_TRASHED_1="%d menu item trashed." COM_MENUS_N_ITEMS_UNPUBLISHED="%d menu items unpublished." COM_MENUS_N_ITEMS_UNPUBLISHED_1="%d menu item unpublished." COM_MENUS_N_MENUS_DELETED="%d menu types deleted." COM_MENUS_N_MENUS_DELETED_1="Menu type deleted." COM_MENUS_NEW_MENUITEM="New Menu Item" COM_MENUS_NO_ITEM_SELECTED="No menu items selected." COM_MENUS_NO_MENUS_SELECTED="No menu selected." COM_MENUS_OPTION_SELECT_COMPONENT="- Select Component -" COM_MENUS_OPTION_SELECT_LEVEL="- Select Max Levels -" COM_MENUS_PAGE_OPTIONS_LABEL="Page Display" COM_MENUS_PRESET_IMPORT_SUCCESS="Menu was saved and the menu items were imported from the selected preset." COM_MENUS_PRESET_IMPORT_FAILED="Menu was saved but failed to import the preset: %s" COM_MENUS_PRESET_LOAD_FAILED="Failed to load the specified preset." COM_MENUS_REQUEST_FIELDSET_LABEL="Required Settings" COM_MENUS_SAVE_SUCCESS="Menu item saved." COM_MENUS_SELECT_A_MENUITEM="Select a Menu Item" COM_MENUS_SELECT_MENU="- Select Menu -" COM_MENUS_SELECT_MENU_FILTER_NOT_TRASHED="Filter the list by a state other than trashed or clear the filter." COM_MENUS_SELECT_MENU_FIRST="To use batch processing, please first select a Menu in the manager." COM_MENUS_SELECT_MENU_FIRST_EXPORT="To use export, please first select a valid Menu in the manager." COM_MENUS_SUBMENU_ITEMS="Menu Items" COM_MENUS_SUBMENU_MENUS="Menus" COM_MENUS_SUCCESS_REORDERED="Menu item reordered." COM_MENUS_TIP_ALIAS_LABEL="<strong>Warning!</strong><br />Leave the alias field empty if the menu item alias and the menu item linked to by the alias have the same parent." COM_MENUS_TIP_ASSOCIATION="Associated menu items" COM_MENUS_TITLE_EDIT_ITEM="Menu Manager: Title Edit Item" COM_MENUS_TITLE_TRANSLATION="Title (%s)" COM_MENUS_TOOLBAR_SET_HOME="Home" COM_MENUS_TYPE_ALIAS="Menu Item Alias" COM_MENUS_TYPE_ALIAS_DESC="Create an alias to another menu item." COM_MENUS_TYPE_CHOOSE="Select a Menu Item Type:" COM_MENUS_TYPE_CONTAINER="Components Menu Container" COM_MENUS_TYPE_CONTAINER_DESC="This will create a container menu which will show the items in the protected menu type 'main'. You can also selectively hide or show menu items." COM_MENUS_TYPE_EXTERNAL_URL="URL" COM_MENUS_TYPE_EXTERNAL_URL_DESC="An external or internal URL." COM_MENUS_TYPE_HEADING="Menu Heading" COM_MENUS_TYPE_HEADING_DESC="A heading for the parent of submenu items." COM_MENUS_TYPE_SEPARATOR="Separator" COM_MENUS_TYPE_SEPARATOR_DESC="A separator with or without a text label, useful to separate items within a menu." COM_MENUS_TYPE_SYSTEM="System Links" COM_MENUS_TYPE_UNEXISTING="Component '%s' does not exist." COM_MENUS_TYPE_UNKNOWN="Unknown" COM_MENUS_VIEW_EDIT_ITEM_TITLE="Menus: Edit Item" COM_MENUS_VIEW_EDIT_MENU_TITLE="Menus: Edit" COM_MENUS_VIEW_ITEMS_ALL_TITLE="Menus: All Menu Items" COM_MENUS_VIEW_ITEMS_MENU_TITLE="Menus: Items (%s)" COM_MENUS_VIEW_ITEMS_TITLE="Menus: Items" COM_MENUS_VIEW_MENUS_TITLE="Menus" COM_MENUS_VIEW_NEW_ITEM_TITLE="Menus: New Item" COM_MENUS_VIEW_NEW_MENU_TITLE="Menus: Add" COM_MENUS_XML_DESCRIPTION="Component for creating menus." JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\�Ջ]��&language/en-GB/en-GB.mod_login.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_LOGIN_XML_DESCRIPTION="This module displays a username and password login form. It can't be unpublished." MOD_LOGIN="Login Form" MOD_LOGIN_LAYOUT_DEFAULT="Default" PKb��\��Dt��)language/en-GB/en-GB.plg_content_vote.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_VOTE="Content - Vote" PLG_VOTE_BOTTOM="Bottom" PLG_VOTE_LABEL="Please Rate" PLG_VOTE_POSITION_DESC="Set where the voting is displayed." PLG_VOTE_POSITION_LABEL="Position" PLG_VOTE_RATE="Rate" PLG_VOTE_STAR_ACTIVE="Star Active" PLG_VOTE_STAR_INACTIVE="Star Inactive" PLG_VOTE_TOP="Top" PLG_VOTE_USER_RATING="User Rating: %1$s / %2$s" PLG_VOTE_VOTE="Vote %s" PLG_VOTE_XML_DESCRIPTION="Add Voting functionality to Articles." PKb��\2��%language/en-GB/en-GB.com_tags.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_TAGS="Tags" COM_TAGS_CONTENT_TYPE_ARTICLE="Article" COM_TAGS_CONTENT_TYPE_ARTICLE_CATEGORY="Article Category" COM_TAGS_CONTENT_TYPE_BANNER="Banner" COM_TAGS_CONTENT_TYPE_BANNER_CLIENT="Banner Client" COM_TAGS_CONTENT_TYPE_BANNERS_CATEGORY="Banner Category" COM_TAGS_CONTENT_TYPE_CONTACT="Contact" COM_TAGS_CONTENT_TYPE_CONTACT_CATEGORY="Contact Category" COM_TAGS_CONTENT_TYPE_NEWSFEED="News Feed" COM_TAGS_CONTENT_TYPE_NEWSFEEDS_CATEGORY="News Feed Category" COM_TAGS_CONTENT_TYPE_TAG="Tag" COM_TAGS_CONTENT_TYPE_USER="User" COM_TAGS_CONTENT_TYPE_USER_NOTES="User Notes" COM_TAGS_CONTENT_TYPE_USER_NOTES_CATEGORY="User Notes Category" COM_TAGS_CONTENT_TYPE_WEBLINK="Web Link" COM_TAGS_CONTENT_TYPE_WEBLINKS_CATEGORY="Web Links Category" COM_TAGS_TAG="Tag" COM_TAGS_TAG_VIEW_DEFAULT_DESC="This links to a list of items with specific tags." COM_TAGS_TAG_VIEW_DEFAULT_OPTION="Default" COM_TAGS_TAG_VIEW_DEFAULT_TITLE="Tagged Items" COM_TAGS_TAG_VIEW_LIST_COMPACT_OPTION="Compact layout" COM_TAGS_TAG_VIEW_LIST_COMPACT_TITLE="Compact list of tagged items" COM_TAGS_TAG_VIEW_LIST_DESC="List of items that have been tagged with the selected tags." COM_TAGS_TAG_VIEW_LIST_OPTION="List view options" COM_TAGS_TAG_VIEW_LIST_TITLE="Tagged items list" COM_TAGS_TAGS="Tags" COM_TAGS_TAGS_VIEW_COMPACT_DESC="Compact list of tags." COM_TAGS_TAGS_VIEW_COMPACT_TITLE="Compact Tags View" COM_TAGS_TAGS_VIEW_DEFAULT_DESC="This links to a detailed list of all tags." COM_TAGS_TAGS_VIEW_DEFAULT_TITLE="List of all tags" COM_TAGS_XML_DESCRIPTION="A component for tagging content items." PKb��\�d����)language/en-GB/en-GB.plg_system_cache.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CACHE_FIELD_BROWSERCACHE_DESC="If yes, use mechanism for storing page cache in the browser." PLG_CACHE_FIELD_BROWSERCACHE_LABEL="Use Browser Caching" PLG_CACHE_FIELD_EXCLUDE_DESC="Specify which URLs you want to exclude from caching, each on a separate line. Regular expressions are supported, eg. <br /><strong>about\-[a-z]+</strong> - will exclude all URLs that have 'about-', for example 'about-us', 'about-me', 'about-joomla' etc.<br /><strong>/component/users/</strong> - will exclude all URLs that have /component/users/.<br /><strong>com_users</strong> - will exclude all Users component pages." PLG_CACHE_FIELD_EXCLUDE_LABEL="Exclude URLs" PLG_CACHE_FIELD_EXCLUDE_MENU_ITEMS_DESC="Select which menu items you want to exclude from caching." PLG_CACHE_FIELD_EXCLUDE_MENU_ITEMS_LABEL="Exclude Menu Items" PLG_CACHE_FIELD_LIFETIME_DESC="Page cache lifetime in minutes." PLG_CACHE_FIELD_LIFETIME_LABEL="Cache Lifetime" PLG_CACHE_XML_DESCRIPTION="Provides page caching." PLG_SYSTEM_CACHE="System - Page Cache" PKb��\8��rr%language/en-GB/en-GB.mod_feed.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_FEED="Feed Display" MOD_FEED_XML_DESCRIPTION="This module allows the displaying of a syndicated feed." MOD_FEED_LAYOUT_DEFAULT="Default" PKb��\w�*c2language/en-GB/en-GB.plg_finder_categories.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_CATEGORIES="Smart Search - Categories" PLG_FINDER_CATEGORIES_ERROR_ACTIVATING_PLUGIN="Could not automatically activate the "Smart Search - Categories" plugin." PLG_FINDER_CATEGORIES_XML_DESCRIPTION="This plugin indexes Joomla! Categories." PLG_FINDER_STATISTICS_CATEGORY="Category" PKb��\�;����0language/en-GB/en-GB.plg_system_redirect.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SYSTEM_REDIRECT="System - Redirect" PLG_SYSTEM_REDIRECT_XML_DESCRIPTION="The system redirect plugin enables the Joomla Redirect system to catch missing pages and redirect users." PKb��\��J�Y�Y$language/en-GB/en-GB.com_contact.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CONTACT="Contacts" COM_CONTACT_BASIC_OPTIONS_FIELDSET_LABEL="Contact Display Options" ; COM_CONTACT_BATCH_MENU_LABEL is deprecated, use JLIB_HTML_BATCH_MENU_LABEL instead. COM_CONTACT_BATCH_MENU_LABEL="To Move or Copy your selection please select a Category." COM_CONTACT_BATCH_OPTIONS="Batch process the selected contacts" COM_CONTACT_BATCH_TIP="If a category is selected for move/copy, any actions selected will be applied to the copied or moved contacts. Otherwise, all actions are applied to the selected contacts." COM_CONTACT_CATEGORIES_VIEW_DEFAULT_DESC="Shows a list of contact categories within a category." COM_CONTACT_CATEGORY_VIEW_DEFAULT_DESC="This view lists the contacts in a category." COM_CONTACT_CHANGE_CONTACT="Select or Change Contact" ; COM_CONTACT_CHANGE_CONTACT_BUTTON deprecated, use COM_CONTACT_CHANGE_CONTACT instead. COM_CONTACT_CHANGE_CONTACT_BUTTON="Change Contact" COM_CONTACT_CONFIG_INTEGRATION_SETTINGS_DESC="These settings determine how the Contact Component will integrate with other extensions." COM_CONTACT_CONFIGURATION="Contacts: Options" COM_CONTACT_CONTACT_DETAILS="Details" COM_CONTACT_CONTACT_DISPLAY_DETAILS="Display options for the individual contact page." COM_CONTACT_CONTACT_SETTINGS_LABEL="Contact Options" COM_CONTACT_CONTACT_VIEW_DEFAULT_DESC="This links to the contact information for one contact." COM_CONTACT_CONTACTS="Contacts" COM_CONTACT_DETAILS="Contact Information" COM_CONTACT_EDIT_CONTACT="Edit Contact" COM_CONTACT_EDIT_DETAILS="Edit contact information displayed on an individual page." COM_CONTACT_ERROR_UNIQUE_ALIAS="Another Contact from this category has the same alias (remember it may be a trashed item)." COM_CONTACT_ERROR_ALL_LANGUAGE_ASSOCIATED="A contact item set to All languages can't be associated. Associations have not been set." COM_CONTACT_FIELD_ARTICLES_DISPLAY_NUM_DESC="Number of articles to list." COM_CONTACT_FIELD_ARTICLES_DISPLAY_NUM_LABEL="# Articles to List" COM_CONTACT_FIELD_ARTICLES_SHOW_DESC="If this contact is mapped to a user, and if this is set to Show, then a list of articles created by this user will show." COM_CONTACT_FIELD_ARTICLES_SHOW_LABEL="Show User Articles" COM_CONTACT_FIELD_BREADCRUMBS_DESC="Show or hide category breadcrumbs." COM_CONTACT_FIELD_BREADCRUMBS_LABEL="Show Category Breadcrumbs" COM_CONTACT_FIELD_CAPTCHA_DESC="Select the captcha plugin that will be used in the contact form. You may need to enter required information for your captcha plugin in the Plugin Manager.<br />If 'Use Global' is selected, make sure a captcha plugin is selected in Global Configuration." COM_CONTACT_FIELD_CAPTCHA_LABEL="Allow Captcha on Contact" COM_CONTACT_FIELD_CATEGORIES_DESC="Displays a list of contact categories within a category." COM_CONTACT_FIELD_CATEGORIES_LABEL="Choose a Parent Category" COM_CONTACT_FIELD_CATEGORY_DESC="Select a contact category to display." COM_CONTACT_FIELD_CATEGORY_LABEL="Select a Category" COM_CONTACT_FIELD_CONFIG_ALLOW_VCARD_DESC="Allow vCard to be displayed." COM_CONTACT_FIELD_CONFIG_ALLOW_VCARD_LABEL="Allow vCard" COM_CONTACT_FIELD_CONFIG_BANNED_EMAIL_DESC="Email addresses not allowed to submit contact form. Separate multiple email addresses with a semicolon." COM_CONTACT_FIELD_CONFIG_BANNED_EMAIL_LABEL="Banned Email" COM_CONTACT_FIELD_CONFIG_BANNED_SUBJECT_DESC="Subjects not allowed in contact form. Separate multiple subjects with a semicolon." COM_CONTACT_FIELD_CONFIG_BANNED_SUBJECT_LABEL="Banned Subject" COM_CONTACT_FIELD_CONFIG_BANNED_TEXT_DESC="Text not allowed in contact form body. Separate multiple words with a semicolon." COM_CONTACT_FIELD_CONFIG_BANNED_TEXT_LABEL="Banned Text" COM_CONTACT_FIELD_CONFIG_CATEGORIES_DESC="These settings apply for Contact Categories Options unless they are changed for a specific menu item." COM_CONTACT_FIELD_CONFIG_CATEGORY_DESC="These settings apply for Contact Category Options unless they are changed for a specific menu item." COM_CONTACT_FIELD_CONFIG_CONTACT_FORM="Form" COM_CONTACT_FIELD_CONFIG_COUNTRY_DESC="Show or hide a Country column in the list of Contacts." COM_CONTACT_FIELD_CONFIG_COUNTRY_LABEL="Country" COM_CONTACT_FIELD_CONFIG_CUSTOM_REPLY_DESC="Turns off the automated reply, allowing for Plugins to handle integration with other systems." COM_CONTACT_FIELD_CONFIG_CUSTOM_REPLY_LABEL="Custom Reply" COM_CONTACT_FIELD_CONFIG_EMAIL_DESC="Show or hide an Email column in the list of Contacts." COM_CONTACT_FIELD_CONFIG_FAX_DESC="Show or hide a Fax column in the list of Contacts." COM_CONTACT_FIELD_CONFIG_FAX_LABEL="Fax" COM_CONTACT_FIELD_CONFIG_INDIVIDUAL_CONTACT_DESC="These settings apply for single Contact unless they are changed for a specific menu item or Contact." COM_CONTACT_FIELD_CONFIG_INDIVIDUAL_CONTACT_DISPLAY="Contact" COM_CONTACT_FIELD_CONFIG_SHOW_IMAGE_LABEL="Image" COM_CONTACT_FIELD_CONFIG_SHOW_IMAGE_DESC="Show or hide an Image column in the list of Contacts." COM_CONTACT_FIELD_CONFIG_MOBILE_DESC="Show or hide show a Mobile column in the list of Contacts." COM_CONTACT_FIELD_CONFIG_MOBILE_LABEL="Mobile" COM_CONTACT_FIELD_CONFIG_PHONE_DESC="Show or hide a Phone column in the list of Contacts." COM_CONTACT_FIELD_CONFIG_PHONE_LABEL="Phone" COM_CONTACT_FIELD_CONFIG_POSITION_DESC="Show or hide a Position column in the list of Contacts." COM_CONTACT_FIELD_CONFIG_POSITION_LABEL="Position" COM_CONTACT_FIELD_CONFIG_REDIRECT_DESC="Enter an alternative URL where the user will be redirected to after mail is sent." COM_CONTACT_FIELD_CONFIG_REDIRECT_LABEL="Contact Redirect" COM_CONTACT_FIELD_CONFIG_SESSION_CHECK_DESC="Check for the existence of session cookie. This means that users without cookies enabled will not be able to send emails." COM_CONTACT_FIELD_CONFIG_SESSION_CHECK_LABEL="Session Check" COM_CONTACT_FIELD_CONFIG_STATE_LABEL="State or County" COM_CONTACT_FIELD_CONFIG_STATE_DESC="Show or hide a State or County column in the list of Contacts." COM_CONTACT_FIELD_CONFIG_SUBURB_DESC="Show or hide a City or Suburb column in the list of Contacts." COM_CONTACT_FIELD_CONFIG_SUBURB_LABEL="City or Suburb" COM_CONTACT_FIELD_CONFIG_TABLE_OF_CONTACTS_DESC="These settings apply for Contact List Options unless they are changed for a specific menu item." COM_CONTACT_FIELD_CONFIG_VCARD_DESC="Show or hide a vCard column in the list of Contacts." COM_CONTACT_FIELD_CONFIG_VCARD_LABEL="vCard" COM_CONTACT_FIELD_CONTACT_SHOW_CATEGORY_DESC="If "Hide", the Contact Category will not show. If "Show Without Link", Category will show as text. If "Show With Link", Category will show as a link to a Single Category Menu Item." COM_CONTACT_FIELD_CONTACT_SHOW_CATEGORY_LABEL="Contact Category" COM_CONTACT_FIELD_CONTACT_SHOW_LIST_DESC="If Show, the user will be able to change which contact is shown by selecting a contact from a dropdown list of all contacts in the current contact category." COM_CONTACT_FIELD_CONTACT_SHOW_LIST_LABEL="Show Contact List" COM_CONTACT_FIELD_CREATED_BY_ALIAS_DESC="Enter an alias to be displayed instead of the name of the user who created the contact." COM_CONTACT_FIELD_CREATED_BY_ALIAS_LABEL="Created By Alias" COM_CONTACT_FIELD_CREATED_BY_DESC="Select the name of the user who created the contact." COM_CONTACT_FIELD_CREATED_DESC="Date when the contact was created." COM_CONTACT_FIELD_CREATED_LABEL="Created Date" ; The following six strings are deprecated and will be removed in 4.0 COM_CONTACT_FIELD_EMAIL_BANNED_EMAIL_DESC="Email addresses not allowed to submit contact form. Separate multiple email addresses with a semicolon." COM_CONTACT_FIELD_EMAIL_BANNED_EMAIL_LABEL="Banned Email" COM_CONTACT_FIELD_EMAIL_BANNED_SUBJECT_DESC="Subjects not allowed in contact form. Separate multiple subjects with a semicolon." COM_CONTACT_FIELD_EMAIL_BANNED_SUBJECT_LABEL="Banned Subject" COM_CONTACT_FIELD_EMAIL_BANNED_TEXT_DESC="Text not allowed in contact form body. Separate multiple words with a semicolon." COM_CONTACT_FIELD_EMAIL_BANNED_TEXT_LABEL="Banned Text" COM_CONTACT_FIELD_EMAIL_EMAIL_COPY_DESC="Hide or Show checkbox to allow copy of email to be sent to submitter." COM_CONTACT_FIELD_EMAIL_EMAIL_COPY_LABEL="Send Copy to Submitter" COM_CONTACT_FIELD_EMAIL_SHOW_FORM_DESC="Show or hide the contact form." COM_CONTACT_FIELD_EMAIL_SHOW_FORM_LABEL="Contact Form" COM_CONTACT_FIELD_FEATURED_DESC="If marked yes, will be displayed in featured view." COM_CONTACT_FIELD_FEEDLINK_DESC="Show or hide a feed link for this contact category." COM_CONTACT_FIELD_FEEDLINK_LABEL="Feed Link" COM_CONTACT_FIELD_ICONS_ADDRESS_DESC="Select or upload an image for the Address icon. If none selected, the default icon will be displayed." COM_CONTACT_FIELD_ICONS_ADDRESS_LABEL="Address Icon" COM_CONTACT_FIELD_ICONS_EMAIL_DESC="Select or upload an image for the Email icon. If none selected, the default icon will be displayed." COM_CONTACT_FIELD_ICONS_EMAIL_LABEL="Email Icon" COM_CONTACT_FIELD_ICONS_FAX_DESC="Select or upload an image for the Fax icon. If none selected, the default icon will be displayed." COM_CONTACT_FIELD_ICONS_FAX_LABEL="Fax Icon" COM_CONTACT_FIELD_ICONS_MISC_DESC="Select or upload an image for the Misc icon. If none selected, the default icon will be displayed." COM_CONTACT_FIELD_ICONS_MISC_LABEL="Misc Icon" COM_CONTACT_FIELD_ICONS_MOBILE_DESC="Select or upload an image for the Mobile icon. If none selected, the default icon will be displayed." COM_CONTACT_FIELD_ICONS_MOBILE_LABEL="Mobile Icon" COM_CONTACT_FIELD_ICONS_SETTINGS_DESC="Show icons, text or nothing next to the information." COM_CONTACT_FIELD_ICONS_SETTINGS_LABEL="Settings" COM_CONTACT_FIELD_ICONS_TELEPHONE_DESC="Select or upload an image for the Telephone icon. If none selected, the default icon will be displayed." COM_CONTACT_FIELD_ICONS_TELEPHONE_LABEL="Telephone Icon" COM_CONTACT_FIELD_IMAGE_ALIGN_DESC="Alignment of the image." COM_CONTACT_FIELD_IMAGE_ALIGN_LABEL="Image Alignment" COM_CONTACT_FIELD_INFORMATION_ADDRESS_DESC="Contact's address." COM_CONTACT_FIELD_INFORMATION_ADDRESS_LABEL="Address" COM_CONTACT_FIELD_INFORMATION_COUNTRY_DESC="Contact's country." COM_CONTACT_FIELD_INFORMATION_COUNTRY_LABEL="Country" COM_CONTACT_FIELD_INFORMATION_EMAIL_DESC="Contact's email." COM_CONTACT_FIELD_INFORMATION_FAX_DESC="Contact's fax." COM_CONTACT_FIELD_INFORMATION_FAX_LABEL="Fax" COM_CONTACT_FIELD_INFORMATION_MISC_DESC="Contact's miscellaneous information." COM_CONTACT_FIELD_INFORMATION_MISC_LABEL="Miscellaneous Information" COM_CONTACT_FIELD_INFORMATION_MOBILE_DESC="Contact's mobile phone." COM_CONTACT_FIELD_INFORMATION_MOBILE_LABEL="Mobile" COM_CONTACT_FIELD_INFORMATION_POSITION_DESC="Contact's position." COM_CONTACT_FIELD_INFORMATION_POSITION_LABEL="Position" COM_CONTACT_FIELD_INFORMATION_POSTCODE_DESC="Contact's Postal/ZIP code." COM_CONTACT_FIELD_INFORMATION_POSTCODE_LABEL="Postal/ZIP Code" COM_CONTACT_FIELD_INFORMATION_STATE_DESC="Contact's state or county." COM_CONTACT_FIELD_INFORMATION_STATE_LABEL="State or County" COM_CONTACT_FIELD_INFORMATION_SUBURB_DESC="Contact's city or suburb." COM_CONTACT_FIELD_INFORMATION_SUBURB_LABEL="City or Suburb" COM_CONTACT_FIELD_INFORMATION_TELEPHONE_DESC="Contact's telephone." COM_CONTACT_FIELD_INFORMATION_TELEPHONE_LABEL="Telephone" COM_CONTACT_FIELD_INFORMATION_WEBPAGE_DESC="Contact's Website. IDN (International) Links are converted to punycode when they are saved." COM_CONTACT_FIELD_INFORMATION_WEBPAGE_LABEL="Website" COM_CONTACT_FIELD_INITIAL_SORT_DESC="Choose the field or fields by which contacts will be sorted." COM_CONTACT_FIELD_INITIAL_SORT_LABEL="Sort By" COM_CONTACT_FIELD_LANGUAGE_DESC="Assign a language for this contact." COM_CONTACT_FIELD_LIMIT_BOX_DESC="Show or hide limit box." COM_CONTACT_FIELD_LIMIT_BOX_LABEL="Limit box" COM_CONTACT_FIELD_LINK_NAME_DESC="An additional link for this contact." COM_CONTACT_FIELD_LINKA_DESC="Enter a URL for Link A." COM_CONTACT_FIELD_LINKA_LABEL="Link A URL" COM_CONTACT_FIELD_LINKA_NAME_LABEL="Link A Label" COM_CONTACT_FIELD_LINKB_DESC="Enter a URL for Link B." COM_CONTACT_FIELD_LINKB_LABEL="Link B URL" COM_CONTACT_FIELD_LINKB_NAME_LABEL="Link B Label" COM_CONTACT_FIELD_LINKC_DESC="Enter a URL for Link C." COM_CONTACT_FIELD_LINKC_LABEL="Link C URL" COM_CONTACT_FIELD_LINKC_NAME_LABEL="Link C Label" COM_CONTACT_FIELD_LINKD_DESC="Enter a URL for Link D." COM_CONTACT_FIELD_LINKD_LABEL="Link D URL" COM_CONTACT_FIELD_LINKD_NAME_LABEL="Link D Label" COM_CONTACT_FIELD_LINKE_DESC="Enter a URL for Link E." COM_CONTACT_FIELD_LINKE_LABEL="Link E URL" COM_CONTACT_FIELD_LINKE_NAME_LABEL="Link E Label" COM_CONTACT_FIELD_LINKED_USER_DESC="Linked Joomla User." COM_CONTACT_FIELD_LINKED_USER_LABEL="Linked User" COM_CONTACT_FIELD_LINKED_USER_LABEL_ASC="Linked User ascending" COM_CONTACT_FIELD_LINKED_USER_LABEL_DESC="Linked User descending" COM_CONTACT_FIELD_MODIFIED_BY_DESC="Name of the user who modified this contact." COM_CONTACT_FIELD_MODIFIED_DESC="The date and time that the contact was last modified." COM_CONTACT_FIELD_NAME_DESC="Contact name." COM_CONTACT_FIELD_NAME_LABEL="Name" COM_CONTACT_FIELD_NUM_CONTACTS_DESC="Number of Contacts to display as list." COM_CONTACT_FIELD_NUM_CONTACTS_LABEL="Number of Contacts" COM_CONTACT_FIELD_PARAMS_ADD_MAILTO_LINK_DESC="Adds a mailto: link to the displayed email address." COM_CONTACT_FIELD_PARAMS_ADD_MAILTO_LINK_LABEL="Add Mailto: Link" COM_CONTACT_FIELD_PARAMS_CONTACT_E_MAIL_DESC="Show or hide contact email." COM_CONTACT_FIELD_PARAMS_CONTACT_POSITION_DESC="Show or hide position." COM_CONTACT_FIELD_PARAMS_CONTACT_POSITION_LABEL="Contact's Position" COM_CONTACT_FIELD_PARAMS_COUNTRY_DESC="Show or hide country." COM_CONTACT_FIELD_PARAMS_COUNTRY_LABEL="Country" COM_CONTACT_FIELD_PARAMS_FAX_DESC="Show or hide fax number." COM_CONTACT_FIELD_PARAMS_FAX_LABEL="Fax" COM_CONTACT_FIELD_PARAMS_IMAGE_DESC="Select or upload the contact image." COM_CONTACT_FIELD_PARAMS_IMAGE_LABEL="Image" COM_CONTACT_FIELD_PARAMS_MISC_INFO_DESC="Show or hide miscellaneous information." COM_CONTACT_FIELD_PARAMS_MISC_INFO_LABEL="Miscellaneous Information" COM_CONTACT_FIELD_PARAMS_MOBILE_DESC="Show or hide mobile number." COM_CONTACT_FIELD_PARAMS_MOBILE_LABEL="Mobile Phone" COM_CONTACT_FIELD_PARAMS_NAME_DESC="Show or hide name of the contact." COM_CONTACT_FIELD_PARAMS_NAME_LABEL="Name" COM_CONTACT_FIELD_PARAMS_POST-ZIP_CODE_DESC="Show or hide the Postal/ZIP code." COM_CONTACT_FIELD_PARAMS_POST-ZIP_CODE_LABEL="Postal/ZIP Code" COM_CONTACT_FIELD_PARAMS_SHOW_IMAGE_DESC="Show or hide image." COM_CONTACT_FIELD_PARAMS_SHOW_IMAGE_LABEL="Image" COM_CONTACT_FIELD_PARAMS_STATE-COUNTY_DESC="Show or hide state or county." COM_CONTACT_FIELD_PARAMS_STATE-COUNTY_LABEL="State or County" COM_CONTACT_FIELD_PARAMS_STREET_ADDRESS_DESC="Show or hide street address." COM_CONTACT_FIELD_PARAMS_STREET_ADDRESS_LABEL="Street Address" COM_CONTACT_FIELD_PARAMS_TELEPHONE_DESC="Show or hide telephone number." COM_CONTACT_FIELD_PARAMS_TELEPHONE_LABEL="Telephone" COM_CONTACT_FIELD_PARAMS_TOWN-SUBURB_DESC="Show or hide city or suburb." COM_CONTACT_FIELD_PARAMS_TOWN-SUBURB_LABEL="City or Suburb" COM_CONTACT_FIELD_PARAMS_VCARD_DESC="Show or hide a link to allow export to vCard format." COM_CONTACT_FIELD_PARAMS_VCARD_LABEL="vCard" COM_CONTACT_FIELD_PARAMS_WEBPAGE_DESC="Show or hide webpage." COM_CONTACT_FIELD_PARAMS_WEBPAGE_LABEL="Webpage" COM_CONTACT_FIELD_PRESENTATION_DESC="Determines the style used to display sections of the contact form." COM_CONTACT_FIELD_PRESENTATION_LABEL="Display Format" COM_CONTACT_FIELD_PROFILE_SHOW_DESC="If the contact is mapped to a user and this option is set to Show, then the profile of the user will be shown in the contact details." COM_CONTACT_FIELD_PROFILE_SHOW_LABEL="User Profile" COM_CONTACT_FIELD_PUBLISH_DOWN_DESC="An optional date to Finish Publishing the contact." COM_CONTACT_FIELD_PUBLISH_DOWN_LABEL="Finish Publishing" COM_CONTACT_FIELD_PUBLISH_UP_DESC="An optional date to Start Publishing the contact." COM_CONTACT_FIELD_PUBLISH_UP_LABEL="Start Publishing" COM_CONTACT_FIELD_SHOW_CAT_ITEMS_DESC="Show or hide the number of contacts in category." COM_CONTACT_FIELD_SHOW_CAT_ITEMS_LABEL="# Contacts in Category" COM_CONTACT_FIELD_SHOW_CATEGORY_DESC="Displays the category." COM_CONTACT_FIELD_SHOW_LINKS_DESC="Show or hide the contact links." COM_CONTACT_FIELD_SHOW_LINKS_LABEL="Contact Links" COM_CONTACT_FIELD_SHOW_CAT_TAGS_DESC="Show or hide the tags for a contact category." COM_CONTACT_FIELD_SHOW_CAT_TAGS_LABEL="Category Tags" COM_CONTACT_FIELD_SHOW_TAGS_DESC="Show or hide the tags for a contact." COM_CONTACT_FIELD_SHOW_TAGS_LABEL="Tags" COM_CONTACT_FIELD_SHOW_INFO_LABEL="Contact Information" COM_CONTACT_FIELD_SHOW_INFO_DESC="Show or hide the contact information." COM_CONTACT_FIELD_SORTNAME1_DESC="The part of the name to use as the first sort field." COM_CONTACT_FIELD_SORTNAME1_LABEL="First Sort Field" COM_CONTACT_FIELD_SORTNAME2_DESC="The part of the name to use as the second sort field." COM_CONTACT_FIELD_SORTNAME2_LABEL="Second Sort Field" COM_CONTACT_FIELD_SORTNAME3_DESC="The part of the name to use as the third sort field." COM_CONTACT_FIELD_SORTNAME3_LABEL="Third Sort Field" COM_CONTACT_FIELD_USER_CUSTOM_FIELDS_SHOW_LABEL="Show User Custom Fields" COM_CONTACT_FIELD_USER_CUSTOM_FIELDS_SHOW_DESC="Show user custom fields which belong to all or only selected field groups." COM_CONTACT_FIELD_VALUE_ICONS="Icons" COM_CONTACT_FIELD_VALUE_NAME="Name" COM_CONTACT_FIELD_VALUE_NO_LINK="Show Without Link" COM_CONTACT_FIELD_VALUE_NONE="None" COM_CONTACT_FIELD_VALUE_ORDERING="Ordering" COM_CONTACT_FIELD_VALUE_PLAIN="Plain" COM_CONTACT_FIELD_VALUE_SLIDERS="Sliders" COM_CONTACT_FIELD_VALUE_SORT_NAME="Sort Name" COM_CONTACT_FIELD_VALUE_TABS="Tabs" COM_CONTACT_FIELD_VALUE_TEXT="Text" COM_CONTACT_FIELD_VALUE_USE_CONTACT_SETTINGS="Use Contact Settings" COM_CONTACT_FIELD_VALUE_WITH_LINK="Show With Link" COM_CONTACT_FIELD_VERSION_LABEL="Revision" COM_CONTACT_FIELD_VERSION_DESC="A count of the number of times this contact has been revised." COM_CONTACT_FIELDS_CONTACT_FIELDS_TITLE="Contacts: Fields" COM_CONTACT_FIELDS_CONTACT_FIELD_ADD_TITLE="Contacts: New Field" COM_CONTACT_FIELDS_CONTACT_FIELD_EDIT_TITLE="Contacts: Edit Field" COM_CONTACT_FIELDS_CONTEXT_CONTACT="Contact" COM_CONTACT_FIELDS_CONTEXT_MAIL="Mail" COM_CONTACT_FIELDSET_CONTACT_FORM="Contact form" COM_CONTACT_FIELDSET_CONTACT_LABEL="Form" COM_CONTACT_FIELDSET_CONTACTFORM_LABEL="Mail Options" COM_CONTACT_FIELDSET_OPTIONS="Display Options" COM_CONTACT_FILTER_DESC="Choose the type of filter to display per default." COM_CONTACT_FILTER_LABEL="Filter field" COM_CONTACT_FILTER_SEARCH_DESC="Search in contact name and alias. Prefix with ID: to search for a contact ID." COM_CONTACT_FILTER_SEARCH_LABEL="Search Contacts" COM_CONTACT_ICONS_SETTINGS="Icons" COM_CONTACT_HEADING_ASSOCIATION="Association" COM_CONTACT_HITS_DESC="Number of hits for this contact." COM_CONTACT_ID_LABEL="ID" ; The following 2 strings are deprecated and will be removed with 4.0. COM_CONTACT_ITEM_ASSOCIATIONS_FIELDSET_LABEL="Contact Item Associations" COM_CONTACT_ITEM_ASSOCIATIONS_FIELDSET_DESC="Multilingual only! This choice will only display if the Language Filter parameter 'Item Associations' is set to 'Yes'. Choose a contact item for the target language. This association will let the Language Switcher module redirect to the associated contact item in another language. If used, make sure to display the Language switcher module on the relevant pages. A contact item set to language 'All' can't be associated." COM_CONTACT_MAIL_FIELDSET_LABEL="Mail Options" COM_CONTACT_MANAGER_CONTACT="Contacts: New/Edit" COM_CONTACT_MANAGER_CONTACT_EDIT="Contacts: Edit" COM_CONTACT_MANAGER_CONTACT_NEW="Contacts: New" COM_CONTACT_MANAGER_CONTACTS="Contacts" COM_CONTACT_N_ITEMS_ARCHIVED="%d contacts archived." COM_CONTACT_N_ITEMS_ARCHIVED_1="%d contact archived." COM_CONTACT_N_ITEMS_CHECKED_IN_0="No contact checked in." COM_CONTACT_N_ITEMS_CHECKED_IN_1="%d contact checked in." COM_CONTACT_N_ITEMS_CHECKED_IN_MORE="%d contacts checked in." COM_CONTACT_N_ITEMS_DELETED="%d contacts deleted." COM_CONTACT_N_ITEMS_DELETED_1="%d contact deleted." COM_CONTACT_N_ITEMS_FEATURED="%d contacts featured." COM_CONTACT_N_ITEMS_FEATURED_1="%d contact featured." COM_CONTACT_N_ITEMS_PUBLISHED="%d contacts published." COM_CONTACT_N_ITEMS_PUBLISHED_1="%d contact published." COM_CONTACT_N_ITEMS_TRASHED="%d contacts trashed." COM_CONTACT_N_ITEMS_TRASHED_1="%d contact trashed." COM_CONTACT_N_ITEMS_UNFEATURED="%d contacts unfeatured." COM_CONTACT_N_ITEMS_UNFEATURED_1="%d contact unfeatured." COM_CONTACT_N_ITEMS_UNPUBLISHED="%d contacts unpublished." COM_CONTACT_N_ITEMS_UNPUBLISHED_1="%d contact unpublished." COM_CONTACT_NAME_DESC="Contact name." COM_CONTACT_NEW_CONTACT="New Contact" COM_CONTACT_NO_ITEM_SELECTED="No contacts selected." COM_CONTACT_OPTIONS="Options" COM_CONTACT_SAVE_SUCCESS="Contact saved." COM_CONTACT_SEARCH_IN_NAME="Search contacts by name" COM_CONTACT_SELECT_A_CONTACT="Select a Contact" COM_CONTACT_SELECT_CONTACT_DESC="Select or create a contact to be displayed." COM_CONTACT_SELECT_CONTACT_LABEL="Select Contact" COM_CONTACT_SELECT_USER="Select User" COM_CONTACT_SHOW_EMAIL_ADDRESS_DESC="Show email address." COM_CONTACT_SHOW_EMAIL_ADDRESS_LABEL="Email Address" COM_CONTACT_SHOW_EMPTY_CATEGORIES_DESC="If Show, empty categories will display. A category is only empty if it has no Contacts or subcategories." COM_CONTACT_SUBMENU_CATEGORIES="Categories" COM_CONTACT_SUBMENU_CONTACTS="Contacts" COM_CONTACT_TIP_ASSOCIATION="Associated contacts" COM_CONTACT_TOGGLE_TO_FEATURE="Toggle to change contact state to 'Featured'." COM_CONTACT_TOGGLE_TO_UNFEATURE="Toggle to change contact state to 'Unfeatured'." COM_CONTACT_UNFEATURED="Unfeatured contact" COM_CONTACT_WARNING_CATEGORY="This category is invalid." COM_CONTACT_WARNING_PROVIDE_VALID_NAME="Please provide a valid name." COM_CONTACT_WARNING_PROVIDE_VALID_URL="Please provide a valid URL." COM_CONTACT_WARNING_SELECT_CONTACT_TOPUBLISH="Please select a contact to publish." COM_CONTACT_XML_DESCRIPTION="This component shows a listing of contact information." JGLOBAL_FIELDSET_MISCELLANEOUS="Miscellaneous Information" JGLOBAL_NEWITEMSLAST_DESC="New Contacts default to the last position. Ordering can be changed after this Contact is saved." JLIB_HTML_BATCH_USER_LABEL="Set Linked User" JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\���/�/!language/en-GB/en-GB.com_tags.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_TAGS="Tags" COM_TAGS_ALL="All" COM_TAGS_ALL_TAGS_DESCRIPTION_DESC="Description to display at the heading of tags list." COM_TAGS_ALL_TAGS_DESCRIPTION_LABEL="Heading Description" COM_TAGS_ALL_TAGS_MEDIA_DESC="Select or upload the image to display in the heading of the tags list." COM_TAGS_ALL_TAGS_MEDIA_LABEL="Heading Image File" COM_TAGS_ANY="Any" COM_TAGS_BASE_ADD_TITLE="Tags: New" COM_TAGS_BASE_EDIT_TITLE="Tags: Edit" COM_TAGS_BASIC_FIELDSET_LABEL="Options" COM_TAGS_BATCH_CANNOT_CREATE="You are not allowed to create new tags." COM_TAGS_BATCH_CANNOT_EDIT="You are not allowed to edit tags." COM_TAGS_BATCH_OPTIONS="Batch process the selected tags" COM_TAGS_BATCH_TIP="Actions will apply to chosen Tags." COM_TAGS_COMPACT_COLUMNS_LABEL="Number of Columns" COM_TAGS_CONFIG_TAG_MIN_LENGTH_LABEL="Minimum Search Length" COM_TAGS_CONFIG_TAG_MIN_LENGTH_DESC="This setting controls the minimum character length for the search and adding tags using the tags field Ajax mode." COM_TAGS_CONFIG_ALL_TAGS_FIELD_LAYOUT_DESC="Choose a default layout for List of all tags." COM_TAGS_CONFIG_ALL_TAGS_FIELD_LAYOUT_LABEL="Default List All Tags Layout" COM_TAGS_CONFIG_ALL_TAGS_SETTINGS_DESC="These settings apply for a List of all Tags unless they are changed for a specific menu item." COM_TAGS_CONFIG_ALL_TAGS_SETTINGS_LABEL="List All Tags" COM_TAGS_CONFIG_DATA_ENTRY_SETTINGS_DESC="These settings control the way tags are entered." COM_TAGS_CONFIG_DATA_ENTRY_SETTINGS_LABEL="Data Entry" COM_TAGS_CONFIG_INTEGRATION_SETTINGS_DESC="These settings determine how the Tags Component will integrate with other extensions." COM_TAGS_CONFIG_NUMBER_OF_ITEMS="Number of Items Tagged" COM_TAGS_CONFIG_SELECTION_SETTINGS_DESC="These settings control which items get selected in the Tagged Items list layouts." COM_TAGS_CONFIG_SELECTION_SETTINGS_LABEL="Item Selection" COM_TAGS_CONFIG_SHARED_SETTINGS_DESC="These settings apply to all tag layouts unless they are changed for a specific menu item." COM_TAGS_CONFIG_SHARED_SETTINGS_LABEL="Shared Layout" COM_TAGS_CONFIG_TAG_SETTINGS_DESC="These settings apply for a Tagged Items List or Compact List of Tagged Items unless they are changed for a specific menu item." COM_TAGS_CONFIG_TAG_SETTINGS_LABEL="Tagged Items" COM_TAGS_CONFIG_TAGGED_ITEMS_FIELD_LAYOUT_DESC="Choose a default layout for tagged items. This layout will be used when a user selects a tag that doesn't have a menu item defined." COM_TAGS_CONFIG_TAGGED_ITEMS_FIELD_LAYOUT_LABEL="Default Tagged Items Layout" COM_TAGS_CONFIGURATION="Tags: Options" COM_TAGS_COUNT_ARCHIVED_ITEMS="Archived items" COM_TAGS_COUNT_PUBLISHED_ITEMS="Published items" COM_TAGS_COUNT_TRASHED_ITEMS="Trashed items" COM_TAGS_COUNT_UNPUBLISHED_ITEMS="Unpublished items" COM_TAGS_DELETE_NOT_ALLOWED="Delete not allowed for tag %s." COM_TAGS_DESCRIPTION_DESC="Enter an optional tag description in the text area." COM_TAGS_ERROR_UNIQUE_ALIAS="Another Tag has the same alias (remember it may be a trashed item)." COM_TAGS_EXCLUDE="Exclude" COM_TAGS_FIELD_CONFIG_HITS_DESC="Displays the number of hits." COM_TAGS_FIELD_CONFIG_TAGDESCRIPTION_DESC="Configure com_tags." COM_TAGS_FIELD_CONFIG_TAGDESCRIPTION_LABEL="Tags" COM_TAGS_FIELD_CONTENT_TYPE_DESC="Only tagged items of these types will be displayed." COM_TAGS_FIELD_CONTENT_TYPE_LABEL="Content types" COM_TAGS_FIELD_CREATED_DATE_DESC="The date and time that the tag was created." COM_TAGS_FIELD_FULL_DESC="Select or upload an image that will be displayed in the single tag view." COM_TAGS_FIELD_FULL_LABEL="Full Image" COM_TAGS_FIELD_HITS_DESC="Number of hits for this tag." COM_TAGS_FIELD_IMAGE_ALT_DESC="Alt text for the image." COM_TAGS_FIELD_IMAGE_ALT_LABEL="Alt" COM_TAGS_FIELD_IMAGE_CAPTION_DESC="Caption for the image." COM_TAGS_FIELD_IMAGE_CAPTION_LABEL="Caption" COM_TAGS_FIELD_IMAGE_DESC="Select or upload an image for this tag." COM_TAGS_FIELD_IMAGE_LABEL="Image" COM_TAGS_FIELD_INTRO_DESC="Select or upload an image that will be displayed as part of a list." COM_TAGS_FIELD_INTRO_LABEL="Teaser Image" COM_TAGS_FIELD_ITEM_BODY_DESC="Show the body for each item." COM_TAGS_FIELD_LANGUAGE_DESC="Assign a language to this tag." COM_TAGS_FIELD_LANGUAGE_FILTER_DESC="Optionally filter the list of tags based on language." COM_TAGS_FIELD_LANGUAGE_FILTER_LABEL="Language Filter" COM_TAGS_FIELD_MODIFIED_DESC="The date and time that the tag was last modified." COM_TAGS_FIELD_NOTE_DESC="An optional note to display in the tag list." COM_TAGS_FIELD_NOTE_LABEL="Note" COM_TAGS_FIELD_NUMBER_ITEMS_LIST_DESC="Default number of tagged items to list on a page." COM_TAGS_FIELD_NUMBER_ITEMS_LIST_LABEL="# Items to List" COM_TAGS_FIELD_PARENT_DESC="Select a parent tag." COM_TAGS_FIELD_PARENT_LABEL="Parent" COM_TAGS_FIELD_PARENT_TAG_DESC="If set only tags that are direct children of the selected tag will be displayed." COM_TAGS_FIELD_PARENT_TAG_LABEL="Parent Tag" COM_TAGS_FIELD_SELECT_TAG_DESC="Select one or more tags." COM_TAGS_FIELD_TAG_BODY_DESC="Show or hide the tag description." COM_TAGS_FIELD_TAG_BODY_LABEL="Description." COM_TAGS_FIELD_TAG_LABEL="Tag" COM_TAGS_FIELD_TAG_LINK_CLASS="CSS Class for tag link" COM_TAGS_FIELD_TAG_LINK_CLASS_DESC="Add specific CSS classes for the tag link. If left blank the default 'label label-info' is used." COM_TAGS_FIELD_TYPE_DESC="Only tags of the selected types will be displayed (optional)." COM_TAGS_FIELD_TYPE_LABEL="Content Type" COM_TAGS_FIELDSET_DETAILS="Tag Details" COM_TAGS_FIELDSET_OPTIONS="Options" COM_TAGS_FIELDSET_PUBLISHING="Publishing" COM_TAGS_FIELDSET_TAGGED_ITEMS="Tagged Items" COM_TAGS_FIELDSET_URLS_AND_IMAGES="Links and Images" COM_TAGS_FILTER_SEARCH_DESC="Search in tag title, alias and note. Prefix with ID: to search for a tag ID." COM_TAGS_FILTER_SEARCH_LABEL="Search Tags" COM_TAGS_FLOAT_DESC="Float attribute for the image." COM_TAGS_FLOAT_LABEL="Float" COM_TAGS_HAS_SUBCATEGORY_ITEMS="%d items are assigned to this tag's subtags." COM_TAGS_HAS_SUBCATEGORY_ITEMS_1="%d item is assigned to one of this tag's subtags." COM_TAGS_INCLUDE="Include" COM_TAGS_INCLUDE_CHILDREN_DESC="Include or exclude child tags from the result list for a tag." COM_TAGS_INCLUDE_CHILDREN_LABEL="Child Tags" COM_TAGS_ITEM_OPTIONS="Item Options" COM_TAGS_ITEMS_SEARCH_FILTER="Search" COM_TAGS_LEFT="Left" COM_TAGS_LIST_ALL_SELECTION_OPTIONS="Selection Options" COM_TAGS_LIST_MAX_CHARACTERS_DESC="The maximum number of characters to display from the description in each tag." COM_TAGS_LIST_MAX_CHARACTERS_LABEL="Maximum Characters" COM_TAGS_LIST_MAX_DESC="The maximum number of results to return." COM_TAGS_LIST_MAX_LABEL="Maximum Items" COM_TAGS_LIST_SELECTION_OPTIONS="Item Selection Options" COM_TAGS_MANAGER_TAGS="Tags" COM_TAGS_MATCH_COUNT="Number of matching tags" COM_TAGS_N_ITEMS_ARCHIVED="%d tags archived." COM_TAGS_N_ITEMS_ARCHIVED_1="%d tag archived." COM_TAGS_N_ITEMS_CHECKED_IN_0="No tag checked in." COM_TAGS_N_ITEMS_CHECKED_IN_1="%d tag checked in." COM_TAGS_N_ITEMS_CHECKED_IN_MORE="%d tags checked in." COM_TAGS_N_ITEMS_DELETED="%d tags deleted." COM_TAGS_N_ITEMS_DELETED_1="%d tag deleted." COM_TAGS_N_ITEMS_FAILED_PUBLISHING="Failed publishing %d tags as at least one of their parents is unpublished or one of their children is checked out." COM_TAGS_N_ITEMS_FAILED_PUBLISHING_1="Failed publishing %d tag as at least one of its parents is unpublished or one of its children is checked out." COM_TAGS_N_ITEMS_PUBLISHED="%d tags published." COM_TAGS_N_ITEMS_PUBLISHED_1="%d tag published." COM_TAGS_N_ITEMS_TRASHED="%d tags trashed." COM_TAGS_N_ITEMS_TRASHED_1="%d tag trashed." COM_TAGS_N_ITEMS_UNPUBLISHED="%d tags unpublished." COM_TAGS_N_ITEMS_UNPUBLISHED_1="%d tag unpublished." COM_TAGS_NONE="None" COM_TAGS_NUMBER_COLUMNS_DESC="Number of columns to arrange the tags in. Note that this may not be the number displayed if 12 does not divide evenly into it because display is based on a 12 column grid." COM_TAGS_NUMBER_TAG_ITEMS_DESC="Shows the number of items with a given tag." COM_TAGS_NUMBER_TAG_ITEMS_LABEL="Show Number of Items" COM_TAGS_OPTIONS="Tag Options" COM_TAGS_PAGINATION_OPTIONS="Pagination Options" COM_TAGS_REBUILD_FAILURE="Failed rebuilding Tags tree data." COM_TAGS_REBUILD_SUCCESS="Tags tree data rebuilt." COM_TAGS_RIGHT="Right" COM_TAGS_SAVE_SUCCESS="Tag saved." COM_TAGS_SEARCH_TYPE_DESC="All will return items that have all of the tags. Any will return items that have at least one of the tags." COM_TAGS_SEARCH_TYPE_LABEL="Match Type" COM_TAGS_SELECT_TAGTYPE="- Select Tag Type -" COM_TAGS_SHOW_ALL_TAGS_DESCRIPTION_DESC="Optional description to show at the top of the all tags list." COM_TAGS_SHOW_ALL_TAGS_DESCRIPTION_LABEL="Heading Description" COM_TAGS_SHOW_ALL_TAGS_IMAGE_DESC="Shows an image at the heading of the tags list." COM_TAGS_SHOW_ALL_TAGS_IMAGE_LABEL="Show Heading Image" COM_TAGS_SHOW_EMPTY_TAG_DESC="Show empty tags." COM_TAGS_SHOW_ITEM_BODY_DESC="Show or hide the body text for the tagged items." COM_TAGS_SHOW_ITEM_BODY_LABEL="Item Body" COM_TAGS_SHOW_ITEM_DESCRIPTION_DESC="Show or hide the description for each tag listed." COM_TAGS_SHOW_ITEM_DESCRIPTION_LABEL="Tag Descriptions" COM_TAGS_SHOW_ITEM_IMAGE_DESC="Shows the first image for each item in the list." COM_TAGS_SHOW_ITEM_IMAGE_LABEL="Item Images" COM_TAGS_SHOW_TAG_BODY_DESC="For a layout with one tag, show the tag description." COM_TAGS_SHOW_TAG_BODY_LABEL="Show Tag Description" COM_TAGS_SHOW_TAG_DESCRIPTION_DESC="Show or hide the description for the tag (only used when a single tag is selected)." COM_TAGS_SHOW_TAG_DESCRIPTION_LABEL="Tag Description" COM_TAGS_SHOW_TAG_IMAGE_DESC="For a layout with one tag, show the image for the tag." COM_TAGS_SHOW_TAG_IMAGE_LABEL="Tag Image" COM_TAGS_SHOW_TAG_LIST_DESCRIPTION_LABEL="Description" COM_TAGS_SHOW_TAG_TITLE_DESC="For a layout with one tag, show the tag name." COM_TAGS_SHOW_TAG_TITLE_LABEL="Show Tag Name" COM_TAGS_SUBSLIDER_DRILL_TAG_LIST_LABEL="Options for each item in the list." COM_TAGS_TAG_FIELD_MODE_AJAX="AJAX" COM_TAGS_TAG_FIELD_MODE_DESC="Ajax mode searches tags while typing and allows you on the fly tag creation. Nested tags show you a nested view with all the available tags." COM_TAGS_TAG_FIELD_MODE_LABEL="Tag Entry Mode" COM_TAGS_TAG_FIELD_MODE_NESTED="Nested" COM_TAGS_TAG_LIST_DESCRIPTION_DESC="Optional description to show at the top of the list. For example, this can be used when you have a layout that includes more than one tag." COM_TAGS_TAG_LIST_DESCRIPTION_LABEL="Layout Description" COM_TAGS_TAG_LIST_FIELD_ITEM_DESCRIPTION_LABEL="Item Body" COM_TAGS_TAG_LIST_ITEM_DESCRIPTION_DESC="Shows the body text for the individual items (depends on the source table)." COM_TAGS_TAG_LIST_ITEM_HITS_DESC="Shows the number of hits for each individual item." COM_TAGS_TAG_LIST_MEDIA_DESC="Select or upload the tag image (full image)." COM_TAGS_TAG_LIST_MEDIA_LABEL="Image" COM_TAGS_TAG_LIST_SHOW_DATE_DESC="Show Date" COM_TAGS_TAG_LIST_SHOW_DATE_LABEL="Show or hide a date column in the compact list layout. Select Hide to hide the date, or select which date you wish to show." COM_TAGS_TAG_LIST_SHOW_HEADINGS_DESC="Show or hide the headings in the compact list layout." COM_TAGS_TAG_LIST_SHOW_HEADINGS_LABEL="Table Headings" COM_TAGS_TAG_LIST_SHOW_ITEM_IMAGE_DESC="Shows the image for each item." COM_TAGS_TAG_LIST_SHOW_ITEM_IMAGE_LABEL="Item Image" COM_TAGS_TAG_LIST_SHOW_ITEM_DESCRIPTION_DESC="Show or hide the description for each item in the list. The length may be limited using the Maximum Characters option." COM_TAGS_TAG_LIST_SHOW_ITEM_DESCRIPTION_LABEL="Item Description" COM_TAGS_TAG_VIEW_LIST_DESC="Displays a compact list of items with the selected tags." COM_TAGS_TAG_VIEW_LIST_OPTION="List view options" COM_TAGS_TAG_VIEW_LIST_TITLE="Tagged items list" COM_TAGS_TAGGED_ITEMS_ACCESS="Access" COM_TAGS_TAGGED_ITEMS_AUTHOR="Author" COM_TAGS_TAGGED_ITEMS_DATE="Date" COM_TAGS_TAGGED_ITEMS_ID="ID" COM_TAGS_TAGGED_ITEMS_LANGUAGE="Language" COM_TAGS_TAGGED_ITEMS_TITLE="Title" COM_TAGS_XML_DESCRIPTION="This component manages tags." JGLOBAL_NO_ITEM_SELECTED="No tags selected" PKb��\t�lB��'language/en-GB/en-GB.plg_system_sef.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEF_XML_DESCRIPTION="Adds SEF support to links in the document. It operates directly on the HTML and does not require a special tag." PLG_SYSTEM_SEF="System - SEF" PLG_SEF_DOMAIN_LABEL="Site Domain" PLG_SEF_DOMAIN_DESCRIPTION="If your site can be accessed through more than one domain enter the preferred (sometimes referred to as canonical) domain here. <br /><strong>Note:</strong> https://example.com and https://www.example.com are different domains."PKb��\�z` ` (language/en-GB/en-GB.com_content.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CONTENT="Articles" COM_CONTENT_ARCHIVE_VIEW_DEFAULT_DESC="Display all archived articles." COM_CONTENT_ARCHIVE_VIEW_DEFAULT_OPTION="Default" COM_CONTENT_ARCHIVE_VIEW_DEFAULT_TITLE="Archived Articles" COM_CONTENT_ARTICLE_MANAGER="Articles" COM_CONTENT_ARTICLE_VIEW_DEFAULT_DESC="Display a single article." COM_CONTENT_ARTICLE_VIEW_DEFAULT_OPTION="Default" COM_CONTENT_ARTICLE_VIEW_DEFAULT_TITLE="Single Article" COM_CONTENT_ARTICLE_VIEW_EDIT_DESC="Shows a form to create a New Article." COM_CONTENT_ARTICLE_VIEW_EDIT_TITLE="Create an Article" COM_CONTENT_ARTICLES="Articles" COM_CONTENT_ARTICLES_VIEW_DEFAULT_DESC="Shows a list of all the articles." COM_CONTENT_ARTICLES_VIEW_DEFAULT_TITLE="List All Articles" COM_CONTENT_CATEGORIES="Categories" COM_CONTENT_CATEGORIES_VIEW_DEFAULT_DESC="Shows a list of all the article categories within a category." COM_CONTENT_CATEGORIES_VIEW_DEFAULT_OPTION="Default" COM_CONTENT_CATEGORIES_VIEW_DEFAULT_TITLE="List All Categories" COM_CONTENT_CATEGORY_ADD_TITLE="Articles: New Category" COM_CONTENT_CATEGORY_EDIT_TITLE="Articles: Edit Category" COM_CONTENT_CATEGORY_VIEW_BLOG_DESC="Displays article introductions in a single or multi-column layout." COM_CONTENT_CATEGORY_VIEW_BLOG_OPTION="Blog" COM_CONTENT_CATEGORY_VIEW_BLOG_TITLE="Category Blog" COM_CONTENT_CATEGORY_VIEW_DEFAULT_DESC="Displays a list of articles in a category." COM_CONTENT_CATEGORY_VIEW_DEFAULT_OPTION="List" COM_CONTENT_CATEGORY_VIEW_DEFAULT_TITLE="Category List" COM_CONTENT_CATEGORY_VIEW_FEATURED_DESC="Show all featured articles from one or multiple categories in a single or multi-column layout." COM_CONTENT_CATEGORY_VIEW_FEATURED_OPTION="Default" COM_CONTENT_CATEGORY_VIEW_FEATURED_TITLE="Featured Articles Single Category" COM_CONTENT_CONTENT_TYPE_ARTICLE="Article" COM_CONTENT_CONTENT_TYPE_CATEGORY="Article Category" COM_CONTENT_FEATURED="Featured" COM_CONTENT_FEATURED_VIEW_DEFAULT_DESC="Displays article introductions in a single or multi-column layout for featured articles from all categories." COM_CONTENT_FEATURED_VIEW_DEFAULT_OPTION="Default" COM_CONTENT_FEATURED_VIEW_DEFAULT_TITLE="Featured Articles" COM_CONTENT_FORM_VIEW_DEFAULT_DESC="Create a new article." COM_CONTENT_FORM_VIEW_DEFAULT_OPTION="Create" COM_CONTENT_FORM_VIEW_DEFAULT_TITLE="Create Article" COM_CONTENT_TAGS_ARTICLE="Article" COM_CONTENT_TAGS_CATEGORY="Article Category" COM_CONTENT_XML_DESCRIPTION="Article management component." PKb��\8l� G G#language/en-GB/en-GB.com_finder.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_FINDER="Smart Search" COM_FINDER_ALLOW_EMPTY_QUERY_DESC="Only if a filter is selected, allow an empty search string to initiate a search within the filter constraints." COM_FINDER_ALLOW_EMPTY_QUERY_LABEL="Allow Empty Search" COM_FINDER_AN_ERROR_HAS_OCCURRED="An Error Has Occurred" COM_FINDER_CONFIG_ALLOW_EMPTY_QUERY_DESCRIPTION="Only if a filter is selected, allow an empty search string to initiate a search within the filter restraints." COM_FINDER_CONFIG_ALLOW_EMPTY_QUERY_LABEL="Allow Empty Search" COM_FINDER_CONFIG_BATCH_SIZE_DESCRIPTION="The batch size controls how many items are processed per batch. Large batch sizes require lots of memory whereas small batch sizes require less memory but execute more requests which tends to take longer." COM_FINDER_CONFIG_BATCH_SIZE_LABEL="Indexer Batch Size" COM_FINDER_CONFIG_DESCRIPTION_LENGTH_DESC="Description text for search results will be truncated to the specified character length." COM_FINDER_CONFIG_DESCRIPTION_LENGTH_DESCRIPTION="Description text for search results will be truncated to the specified character length." COM_FINDER_CONFIG_DESCRIPTION_LENGTH_LABEL="Description Length" COM_FINDER_CONFIG_ENABLE_LOGGING_DESCRIPTION="Enable this option to create a log file in your site's logs folder during the index process. This file is useful for troubleshooting issues with the index process. It is recommended that logging be disabled unless necessary." COM_FINDER_CONFIG_ENABLE_LOGGING_LABEL="Enable Logging" COM_FINDER_CONFIG_EXPAND_ADVANCED_DESC="Toggle if the advanced search options should be expanded by default." COM_FINDER_CONFIG_EXPAND_ADVANCED_DESCRIPTION="Toggle if the advanced search options should be expanded by default." COM_FINDER_CONFIG_EXPAND_ADVANCED_LABEL="Expand Advanced Search" COM_FINDER_CONFIG_FIELD_OPENSEARCH_DESCRIPTON_DESCRIPTION="Description displayed for this site as a search provider." COM_FINDER_CONFIG_FIELD_OPENSEARCH_DESCRIPTON_LABEL="OpenSearch Description" COM_FINDER_CONFIG_FIELD_OPENSEARCH_NAME_DESCRIPTION="Name displayed for this site as a search provider." COM_FINDER_CONFIG_FIELD_OPENSEARCH_NAME_LABEL="OpenSearch Name" COM_FINDER_CONFIG_GATHER_SEARCH_STATISTICS_DESCRIPTION="Record the search phrases submitted by visitors." COM_FINDER_CONFIG_GATHER_SEARCH_STATISTICS_LABEL="Gather Search Statistics" COM_FINDER_CONFIG_HILIGHT_CONTENT_SEARCH_TERMS_DESCRIPTION="Toggle if search terms should be highlighted in search results." COM_FINDER_CONFIG_HILIGHT_CONTENT_SEARCH_TERMS_LABEL="Highlight Search Terms" COM_FINDER_CONFIG_IMPORT_EXPORT="Import/Export" COM_FINDER_CONFIG_IMPORT_EXPORT_HELP="Help" COM_FINDER_CONFIG_IMPORT_EXPORT_INSTRUCTIONS="To export your configuration options, select the Export button in the toolbar above.<br /><br />To import an existing configuration, select the browse button to choose a file from your hard drive or copy/paste the data into the text field below and then select the Import button in the toolbar above." COM_FINDER_CONFIG_IMPORT_FROM_FILE="Import From File:" COM_FINDER_CONFIG_IMPORT_FROM_STRING="Import From Text:" COM_FINDER_CONFIG_IMPORT_TOOLBAR_TITLE="Smart Search: Import/Export Configuration" COM_FINDER_CONFIG_MEMORY_TABLE_LIMIT_DESCRIPTION="The memory table limit should not be changed unless you are getting errors indicating that the finder_tokens or finder_tokens_aggregate tables are full. The default is 30,000." COM_FINDER_CONFIG_MEMORY_TABLE_LIMIT_LABEL="Memory Table Limit" COM_FINDER_CONFIG_META_MULTIPLIER_DESCRIPTION="The multiplier is used to control how much influence matching text has on the overall relevance score of a search result. A multiplier is considered in relationship to the other multipliers. The metadata comes from a number of sources including the meta keywords and meta description, author names, etc." COM_FINDER_CONFIG_META_MULTIPLIER_LABEL="Metadata Weight Multiplier" COM_FINDER_CONFIG_MISC_MULTIPLIER_DESCRIPTION="The multiplier is used to control how much influence matching text has on the overall relevance score of a search result. A multiplier is considered in relationship to the other multipliers. The miscellaneous text comes from a number of sources including comments and other associated data." COM_FINDER_CONFIG_MISC_MULTIPLIER_LABEL="Misc. Text Weight Multiplier" COM_FINDER_CONFIG_PATH_MULTIPLIER_DESCRIPTION="The multiplier is used to control how much influence matching text has on the overall relevance score of a search result. A multiplier is considered in relationship to the other multipliers. The path text comes from the SEF URL of the content." COM_FINDER_CONFIG_PATH_MULTIPLIER_LABEL="Path Text Weight Multiplier" COM_FINDER_CONFIG_SHOW_ADVANCED_DESC="Toggle if users should be able to see advanced search options." COM_FINDER_CONFIG_SHOW_ADVANCED_DESCRIPTION="Toggle if users should be able to see advanced search options." COM_FINDER_CONFIG_SHOW_ADVANCED_LABEL="Advanced Search" COM_FINDER_CONFIG_SHOW_ADVANCED_TIPS_DESCRIPTION="Toggle if users should be able to see advanced search tips." COM_FINDER_CONFIG_SHOW_ADVANCED_TIPS_LABEL="Advanced Tips" COM_FINDER_CONFIG_SHOW_AUTOSUGGEST_DESCRIPTION="Toggle if automatic search suggestions should be displayed." COM_FINDER_CONFIG_SHOW_AUTOSUGGEST_LABEL="Search Suggestions" COM_FINDER_CONFIG_SHOW_DATE_FILTERS_DESC="Show the start and end date filters in the advanced search." COM_FINDER_CONFIG_SHOW_DATE_FILTERS_DESCRIPTION="Show the start and end date filters in the advanced search." COM_FINDER_CONFIG_SHOW_DATE_FILTERS_LABEL="Date Filters" COM_FINDER_CONFIG_SHOW_DESCRIPTION_DESC="Toggle if the description should be displayed with search results." COM_FINDER_CONFIG_SHOW_DESCRIPTION_DESCRIPTION="Toggle if the description should be displayed with search results." COM_FINDER_CONFIG_SHOW_DESCRIPTION_LABEL="Result Description" COM_FINDER_CONFIG_SHOW_EXPLAINED_QUERY_DESC="Show or hide a detailed explanation of the search requested." COM_FINDER_CONFIG_SHOW_EXPLAINED_QUERY_LABEL="Query Explanation" ; The following 4 strings are deprecated and will be removed with 4.0. COM_FINDER_CONFIG_SHOW_FEED_DESC="Show the syndication feed link." COM_FINDER_CONFIG_SHOW_FEED_LABEL="Show Feed" COM_FINDER_CONFIG_SHOW_FEED_TEXT_DESC="Show the associated text with the feed, otherwise the title is shown in the feed." COM_FINDER_CONFIG_SHOW_FEED_TEXT_LABEL="Show Feed Text" COM_FINDER_CONFIG_SHOW_SUGGESTED_QUERY_DESC="Whether to suggest alternative search terms when a search produces no results." COM_FINDER_CONFIG_SHOW_SUGGESTED_QUERY_LABEL="Did You Mean" COM_FINDER_CONFIG_SHOW_URL_DESC="Show the associated URL that for the item." COM_FINDER_CONFIG_SHOW_URL_DESCRIPTION="Show the associated URL for the item." COM_FINDER_CONFIG_SHOW_URL_LABEL="Result URL" COM_FINDER_CONFIG_SORT_DIRECTION_DESC="The direction in which to sort the search results." COM_FINDER_CONFIG_SORT_DIRECTION_LABEL="Sort Direction" COM_FINDER_CONFIG_SORT_OPTION_ASCENDING="Ascending" COM_FINDER_CONFIG_SORT_OPTION_DESCENDING="Descending" COM_FINDER_CONFIG_SORT_OPTION_LIST_PRICE="List price" COM_FINDER_CONFIG_SORT_OPTION_RELEVANCE="Relevance" COM_FINDER_CONFIG_SORT_OPTION_START_DATE="Date" COM_FINDER_CONFIG_SORT_ORDER_DESC="The field on which to sort the search results." COM_FINDER_CONFIG_SORT_ORDER_LABEL="Sort Field" COM_FINDER_CONFIG_STEMMER_DESCRIPTION="The language stemmer to use. Choose snowball if a stemmer for your language is not available or you have multilingual content." COM_FINDER_CONFIG_STEMMER_ENABLE_DESCRIPTION="Enable language stemming if available." COM_FINDER_CONFIG_STEMMER_ENABLE_LABEL="Enable Stemmer" COM_FINDER_CONFIG_STEMMER_FR="French Only" COM_FINDER_CONFIG_STEMMER_LABEL="Stemmer" COM_FINDER_CONFIG_STEMMER_PORTER_EN="English Only" COM_FINDER_CONFIG_STEMMER_SNOWBALL="Snowball" COM_FINDER_CONFIG_TEXT_MULTIPLIER_DESCRIPTION="The multiplier is used to control how much influence matching text has on the overall relevance score of a search result. A multiplier is considered in relationship to the other multipliers. The body text comes from the summary and/or body of the content." COM_FINDER_CONFIG_TEXT_MULTIPLIER_LABEL="Body Text Weight Multiplier" COM_FINDER_CONFIG_TITLE_MULTIPLIER_DESCRIPTION="The multiplier is used to control how much influence matching text has on the overall relevance score of a search result. A multiplier is considered in relationship to the other multipliers. The title text comes from the title of the content." COM_FINDER_CONFIG_TITLE_MULTIPLIER_LABEL="Title Text Weight Multiplier" COM_FINDER_CONFIGURATION="Smart Search: Options" COM_FINDER_CREATE_FILTER="Create a filter." COM_FINDER_EDIT_FILTER="Edit Filter" COM_FINDER_EXPORT="Export" COM_FINDER_FIELD_CREATED_BY_ALIAS_DESC="Displayed name of the filter creator." COM_FINDER_FIELD_CREATED_BY_ALIAS_LABEL="Alias" COM_FINDER_FIELD_CREATED_BY_DESC="Creator of the filter." COM_FINDER_FIELD_CREATED_BY_LABEL="Created By" COM_FINDER_FIELD_MODIFIED_DESCRIPTION="The date and time that the filter was last modified." COM_FINDER_FIELDSET_INDEX_OPTIONS_DESCRIPTION="Indexing options" COM_FINDER_FIELDSET_INDEX_OPTIONS_LABEL="Index" COM_FINDER_FIELDSET_SEARCH_OPTIONS_DESCRIPTION="Smart Search options" COM_FINDER_FIELDSET_SEARCH_OPTIONS_LABEL="Smart Search" COM_FINDER_FILTER_BRANCH_LABEL="Search by %s" COM_FINDER_FILTER_BY="Show %s:" COM_FINDER_FILTER_CONTENT_MAP_DESC="Filter the indexed content by content map." COM_FINDER_FILTER_CONTENT_MAP_LABEL="Select the Content Map" COM_FINDER_FILTER_EDIT_TOOLBAR_TITLE="Smart Search: Edit Filter" COM_FINDER_FILTER_END_DATE_DESCRIPTION="Format YYYY-MM-DD" COM_FINDER_FILTER_END_DATE_LABEL="End Date" COM_FINDER_FILTER_FIELDSET_DETAILS="Filter Details" COM_FINDER_FILTER_FIELDSET_PARAMS="Filter Timeline" COM_FINDER_FILTER_HIDE_ALL="Collapse all" COM_FINDER_FILTER_MAP_COUNT="Map Count" COM_FINDER_FILTER_MAP_COUNT_DESCRIPTION="The number of maps included in the filter." COM_FINDER_FILTER_NEW_TOOLBAR_TITLE="Smart Search: New Filter" COM_FINDER_FILTER_SEARCH_DESCRIPTION="Filter the list by a title." COM_FINDER_FILTER_SELECT_CONTENT_MAP="- Select Content Map -" COM_FINDER_FILTER_SELECT_ALL_LABEL="Search All" COM_FINDER_FILTER_START_DATE_DESCRIPTION="Format YYYY-MM-DD" COM_FINDER_FILTER_START_DATE_LABEL="Start Date" COM_FINDER_FILTER_TIMESTAMP="Created On" COM_FINDER_FILTER_SHOW_ALL="Expand all" COM_FINDER_FILTER_TITLE_DESCRIPTION="The title of the filter." COM_FINDER_FILTER_WHEN_AFTER="After" COM_FINDER_FILTER_WHEN_BEFORE="Before" COM_FINDER_FILTER_WHEN_END_DATE_DESCRIPTION="When to search relative to the end date (before, after or exactly)" COM_FINDER_FILTER_WHEN_END_DATE_LABEL="When (End Date)" COM_FINDER_FILTER_WHEN_EXACTLY="Exactly" COM_FINDER_FILTER_WHEN_START_DATE_DESCRIPTION="When to search relative to the start date (before, after or exactly)" COM_FINDER_FILTER_WHEN_START_DATE_LABEL="When (Start Date)" COM_FINDER_FILTERS="Filters" COM_FINDER_FILTERS_DELETE_CONFIRMATION="Are you sure you want to delete the selected filters(s)?" COM_FINDER_FILTERS_TOOLBAR_TITLE="Smart Search: Search Filters" COM_FINDER_GO="Go" COM_FINDER_HEADING_CHILDREN="Maps" COM_FINDER_HEADING_CREATED_BY="Created By" COM_FINDER_HEADING_CREATED_BY_ASC="Created By ascending" COM_FINDER_HEADING_CREATED_BY_DESC="Created By descending" COM_FINDER_HEADING_CREATED_ON="Created On" COM_FINDER_HEADING_CREATED_ON_ASC="Created On ascending" COM_FINDER_HEADING_CREATED_ON_DESC="Created On descending" COM_FINDER_HEADING_INDEXER="Smart Search Indexer" COM_FINDER_HEADING_MAP_COUNT="Map Count" COM_FINDER_HEADING_MAP_COUNT_ASC="Map Count ascending" COM_FINDER_HEADING_MAP_COUNT_DESC="Map Count descending" COM_FINDER_HEADING_NODES="Items" COM_FINDER_IMPORT="Import" COM_FINDER_INDEX="Index" COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT="Are you sure you want to delete the selected item(s)?" COM_FINDER_INDEX_CONFIRM_PURGE_PROMPT="Are you sure you want to delete ALL items from the index? This can take a long time on large sites." COM_FINDER_INDEX_DATE_INFO="<strong>Published Start:</strong> %s<br /><strong>Published End:</strong> %s<br /><strong>Content Start:</strong> %s<br /><strong>Content End:</strong> %s" COM_FINDER_INDEX_DATE_INFO_TITLE="Link Date Information" COM_FINDER_INDEX_FILTER_BY_STATE="Any Published State" COM_FINDER_INDEX_HEADING_DETAILS="Details" COM_FINDER_INDEX_HEADING_INDEX_DATE="Last Updated" COM_FINDER_INDEX_HEADING_INDEX_DATE_ASC="Last Updated ascending" COM_FINDER_INDEX_HEADING_INDEX_DATE_DESC="Last Updated descending" COM_FINDER_INDEX_HEADING_INDEX_TYPE="Type" COM_FINDER_INDEX_HEADING_INDEX_TYPE_ASC="Type ascending" COM_FINDER_INDEX_HEADING_INDEX_TYPE_DESC="Type descending" COM_FINDER_INDEX_HEADING_LINK_URL="Raw URL" COM_FINDER_INDEX_HEADING_LINK_URL_ASC="Raw URL ascending" COM_FINDER_INDEX_HEADING_LINK_URL_DESC="Raw URL descending" COM_FINDER_INDEX_NO_CONTENT="No content matches your search criteria." COM_FINDER_INDEX_NO_DATA="No content has been indexed." COM_FINDER_INDEX_PLUGIN_CONTENT_NOT_ENABLED="The <a href="_QQ_"%s"_QQ_">Smart Search Content Plugin</a> is disabled. Changes to content will not update the Smart Search index if you do not enable this plugin." COM_FINDER_INDEX_PURGE_FAILED="Failed to delete selected items." COM_FINDER_INDEX_PURGE_SUCCESS="All items have been deleted." COM_FINDER_INDEX_SEARCH_DESC="Search in title, URL and last updated date." COM_FINDER_INDEX_SEARCH_LABEL="Search Indexed Content" COM_FINDER_INDEX_TIP="Start the indexer by pressing the Index button in the toolbar." COM_FINDER_INDEX_TOOLBAR_PURGE="Clear Index" COM_FINDER_INDEX_TOOLBAR_TITLE="Smart Search: Indexed Content" COM_FINDER_INDEX_TYPE_FILTER="Any Type of Content" COM_FINDER_INDEXER_HEADER_COMPLETE="Indexing Complete" COM_FINDER_INDEXER_HEADER_ERROR="An Error Has Occurred" COM_FINDER_INDEXER_HEADER_INIT="Starting Indexer" COM_FINDER_INDEXER_HEADER_OPTIMIZE="Optimising Index" COM_FINDER_INDEXER_HEADER_RUNNING="Indexer Running" COM_FINDER_INDEXER_INVALID_DRIVER="The indexer does not support processing on the %s database driver." COM_FINDER_INDEXER_INVALID_PARSER="Invalid parser type %s" COM_FINDER_INDEXER_INVALID_STEMMER="Invalid stemmer type %s" COM_FINDER_INDEXER_MESSAGE_COMPLETE="The indexing process is complete. It is now safe to close this window." COM_FINDER_INDEXER_MESSAGE_INIT="The indexer is starting. Do not close this window." COM_FINDER_INDEXER_MESSAGE_OPTIMIZE="The index tables are being optimised for the best possible performance. Do not close this window." COM_FINDER_INDEXER_MESSAGE_RUNNING="Your content is being indexed. Do not close this window." COM_FINDER_ITEM_X_ONLY="%s Only" COM_FINDER_ITEMS="Content" COM_FINDER_MAP_PUBLISH_FAILED="The selected map(s) could not be published. The returned error message is: %s." COM_FINDER_MAP_PUBLISH_SUCCESS="The selected map(s) were published." COM_FINDER_MAP_UNPUBLISH_FAILED="The selected map(s) could not be unpublished. The returned error message is: %s." COM_FINDER_MAP_UNPUBLISH_SUCCESS="The selected map(s) were unpublished." COM_FINDER_MAPS="Maps" COM_FINDER_MAPS_BRANCH_LINK="Select to show the children in this branch." COM_FINDER_MAPS_BRANCHES="Branches Only" COM_FINDER_MAPS_CONFIRM_DELETE_PROMPT="Are you sure you want to delete the selected map(s)?" COM_FINDER_MAPS_COUNT_PUBLISHED_ITEMS="Published Indexed Content" COM_FINDER_MAPS_COUNT_UNPUBLISHED_ITEMS="Unpublished Indexed Content" COM_FINDER_MAPS_MULTILANG="Note: Language filter system plugin has been enabled, so this branch will not be used." COM_FINDER_MAPS_NO_CONTENT="No results to display. Either no content has been indexed or no content meets your filter criteria." COM_FINDER_MAPS_RETURN_TO_BRANCHES="Return to Map Groups" COM_FINDER_MAPS_SELECT_BRANCH="- Select Map Group -" COM_FINDER_MAPS_SELECT_TYPE="- Select Type of Content -" COM_FINDER_MAPS_TOOLBAR_TITLE="Smart Search: Content Maps" COM_FINDER_MESSAGE_RETURNED="The following message was returned by the server:" COM_FINDER_N_ITEMS_CHECKED_IN_0="No item checked in." COM_FINDER_N_ITEMS_CHECKED_IN_1="%d item checked in." COM_FINDER_N_ITEMS_CHECKED_IN_MORE="%d items checked in." COM_FINDER_N_ITEMS_DELETED="%d items deleted." COM_FINDER_N_ITEMS_DELETED_1="%d item deleted." COM_FINDER_N_ITEMS_PUBLISHED="%d items published." COM_FINDER_N_ITEMS_PUBLISHED_1="%d item published." COM_FINDER_N_ITEMS_TRASHED="%d items trashed." COM_FINDER_N_ITEMS_TRASHED_1="%d item trashed." COM_FINDER_N_ITEMS_UNPUBLISHED="%d items unpublished." COM_FINDER_N_ITEMS_UNPUBLISHED_1="%d item unpublished." COM_FINDER_NO_ERROR_RETURNED="No error was returned. Make sure error reporting is enabled." COM_FINDER_NO_FILTERS="No filters have been created yet." COM_FINDER_NO_RESULTS="No results match your search criteria." COM_FINDER_NO_RESULTS_OR_FILTERS="No results match your search criteria or no filters have been created yet." COM_FINDER_QUERY_FILTER_TODAY="Today" COM_FINDER_QUERY_OPERATOR_AND="And" COM_FINDER_QUERY_OPERATOR_NOT="Not" COM_FINDER_QUERY_OPERATOR_OR="Or" COM_FINDER_SEARCH_FILTER_SEARCH_DESC="Search in filter title." COM_FINDER_SEARCH_FILTER_SEARCH_LABEL="Search Filters" COM_FINDER_SEARCH_LABEL="Search %s:" COM_FINDER_SEARCH_SEARCH_QUERY_DESC="Search in content map title." COM_FINDER_SEARCH_SEARCH_QUERY_LABEL="Search Content Maps" COM_FINDER_SELECT_SEARCH_FILTER="Select filter" COM_FINDER_STATISTICS="Statistics" COM_FINDER_STATISTICS_LINK_TYPE_COUNT="Count" COM_FINDER_STATISTICS_LINK_TYPE_HEADING="Link Type" COM_FINDER_STATISTICS_LINK_TYPE_TOTAL="Total" COM_FINDER_STATISTICS_STATS_DESCRIPTION="The indexed content on this site includes %s terms across %s links with %s attributes in %s branches." COM_FINDER_STATISTICS_TITLE="Smart Search Statistics" COM_FINDER_SUBMENU_FILTERS="Search Filters" COM_FINDER_SUBMENU_INDEX="Indexed Content" COM_FINDER_SUBMENU_MAPS="Content Maps" COM_FINDER_UPDATER_MESSAGE_COMPLETE="Smart Search is up to date." COM_FINDER_UPDATER_MESSAGE_OPTIMIZE="Smart Search is optimising." COM_FINDER_UPDATER_MESSAGE_PROCESS="Smart Search is updating." COM_FINDER_XML_DESCRIPTION="Smart Search." PKb��\�7t�(language/en-GB/en-GB.mod_submenu.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_SUBMENU="Administrator Sub-Menu" MOD_SUBMENU_XML_DESCRIPTION="This module shows the Sub-Menu Navigation Module." MOD_SUBMENU_LAYOUT_DEFAULT="Default" PKb��\�����6language/en-GB/en-GB.plg_system_languagefilter.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SYSTEM_LANGUAGEFILTER="System - Language Filter" PLG_SYSTEM_LANGUAGEFILTER_XML_DESCRIPTION="This plugin filters the displayed content depending on language." PKb��\u�Z�[[1language/en-GB/en-GB.plg_editors-xtd_readmore.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EDITORS-XTD_READMORE="Button - Readmore" PLG_READMORE_ALREADY_EXISTS="There is already a Read more ... link that has been inserted. Only one link is permitted. Use {pagebreak} to split the page up further." PLG_READMORE_BUTTON_READMORE="Read More" PLG_READMORE_XML_DESCRIPTION="Enables a button which allows you to insert the <em>Read more ...</em> link into an Article."PKb��\�̲� � .language/en-GB/en-GB.plg_content_pagebreak.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_PAGEBREAK="Content - Page Break" PLG_CONTENT_PAGEBREAK_ALL_PAGES="All Pages" PLG_CONTENT_PAGEBREAK_ARTICLE_INDEX="Article Index" PLG_CONTENT_PAGEBREAK_NO_TITLE="No title" PLG_CONTENT_PAGEBREAK_PAGES="Pages" PLG_CONTENT_PAGEBREAK_PAGE_NUM="Page %s" PLG_CONTENT_PAGEBREAK_SHOW_ALL_DESC="Displays the full article." PLG_CONTENT_PAGEBREAK_SHOW_ALL_LABEL="Show All" PLG_CONTENT_PAGEBREAK_SITE_ARTICLEINDEXTEXT="Custom Article Index Heading" PLG_CONTENT_PAGEBREAK_SITE_ARTICLEINDEXTEXT_DESC="Enter a custom text for the Article Index Heading. If empty, standard will be used." PLG_CONTENT_PAGEBREAK_SITE_ARTICLEINDEX_DESC="Show or hide Article Index Heading. The Heading displays on top of the Table of Contents." PLG_CONTENT_PAGEBREAK_SITE_ARTICLEINDEX_LABEL="Article Index Heading" PLG_CONTENT_PAGEBREAK_SITE_TITLE_DESC="Title and heading attributes from Plugin added to Site Title tag." PLG_CONTENT_PAGEBREAK_SITE_TITLE_LABEL="Show Site Title" PLG_CONTENT_PAGEBREAK_SLIDERS="Sliders" PLG_CONTENT_PAGEBREAK_STYLE_DESC="Display the article with separate pages, tabs or sliders." PLG_CONTENT_PAGEBREAK_STYLE_LABEL="Presentation Style" PLG_CONTENT_PAGEBREAK_TABS="Tabs" PLG_CONTENT_PAGEBREAK_TOC_DESC="Display a table of contents on multipage Articles." PLG_CONTENT_PAGEBREAK_TOC_LABEL="Table of Contents" PLG_CONTENT_PAGEBREAK_XML_DESCRIPTION="Allow the creation of a paginated article with an optional table of contents.<br /><br />Insert page breaks through the use of the page break button normally found in the WYSIWYG editor toolbar. The location of the page break in an article will be displayed in the editor as a simple horizontal line.<br /><br />The text displayed will depend on the options chosen and may be either the title, alternate text (if provided) or page numbers. <br /><br />The HTML usage is:<br /><hr class="system-pagebreak" /><br /><hr class="system-pagebreak" title="The page title" /> or <br /><hr class="system-pagebreak" alt="The first page" /> or <br /><hr class="system-pagebreak" title="The page title" alt="The first page" /> or <br /><hr class="system-pagebreak" alt="The first page" title="The page title" />" PKb��\��2(language/en-GB/en-GB.com_wrapper.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_WRAPPER="Wrapper" COM_WRAPPER_XML_DESCRIPTION="Displays an iframe to wrap an external page or site into Joomla!" COM_WRAPPER_WRAPPER_VIEW_DEFAULT_DESC="Displays a URL in an iframe." COM_WRAPPER_WRAPPER_VIEW_DEFAULT_OPTION="Default" COM_WRAPPER_WRAPPER_VIEW_DEFAULT_TITLE="Iframe Wrapper" PKb��\b��-,language/en-GB/en-GB.plg_content_contact.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_CONTACT="Content - Contact" PLG_CONTENT_CONTACT_XML_DESCRIPTION="Provides a link between the content author and the contact item that can be used for an Author Profile." PLG_CONTENT_CONTACT_PARAM_URL_LABEL="Redirection" PLG_CONTENT_CONTACT_PARAM_URL_DESCRIPTION="You can link the author name to:<ul><li>Associated contact page.<li>Webpage specified in the associated contact profile.<li>Email specified in the associated contact profile.</ul>" PLG_CONTENT_CONTACT_PARAM_URL_URL="Internal contact page" PLG_CONTENT_CONTACT_PARAM_URL_WEBPAGE="Webpage from contact" PLG_CONTENT_CONTACT_PARAM_URL_EMAIL="Email from contact" PLG_CONTENT_CONTACT_PARAM_ALIAS_LABEL="Apply link also to alias name" PLG_CONTENT_CONTACT_PARAM_ALIAS_DESCRIPTION="Link to the real user data even if an author alias is set in article options." PKb��\�����,language/en-GB/en-GB.plg_system_remember.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_REMEMBER_XML_DESCRIPTION="Provides remember me functionality. The cookie authentication plugin must be enabled for this plugin to function." PLG_SYSTEM_REMEMBER="System - Remember Me" PKb��\�Zo��(language/en-GB/en-GB.mod_toolbar.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_TOOLBAR="Toolbar" MOD_TOOLBAR_XML_DESCRIPTION="This module shows the toolbar icons used to control actions throughout the Administrator area." MOD_TOOLBAR_LAYOUT_DEFAULT="Default" PKb��\,�ydd6language/en-GB/en-GB.plg_twofactorauth_yubikey.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_TWOFACTORAUTH_YUBIKEY="Two Factor Authentication - YubiKey" PLG_TWOFACTORAUTH_YUBIKEY_XML_DESCRIPTION="Allows users on your site to use two factor authentication using a YubiKey secure hardware token. Users need their own Yubikey available from https://www.yubico.com/. To use two factor authentication users have to edit their user profile and enable two factor authentication." PKb��\�>�>>3language/en-GB/en-GB.plg_content_pagenavigation.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_PAGENAVIGATION="Content - Page Navigation" PLG_PAGENAVIGATION_FIELD_DISPLAY_DESC="Choose what to display as the link text." PLG_PAGENAVIGATION_FIELD_DISPLAY_LABEL="Link Text" PLG_PAGENAVIGATION_FIELD_POSITION_DESC="The position of the <em>Page Navigation</em> function on the viewed page in relation to the text." PLG_PAGENAVIGATION_FIELD_POSITION_LABEL="Position" PLG_PAGENAVIGATION_FIELD_RELATIVE_DESC="Assigns the relative location for the Position parameter. Text will place it directly above or below the article content. Full Article will place it above or below the full display including title and readmore." PLG_PAGENAVIGATION_FIELD_RELATIVE_LABEL="Relative To" PLG_PAGENAVIGATION_FIELD_VALUE_ABOVE="Above" PLG_PAGENAVIGATION_FIELD_VALUE_ARTICLE="Full Article" PLG_PAGENAVIGATION_FIELD_VALUE_BELOW="Below" PLG_PAGENAVIGATION_FIELD_VALUE_NEXTPREV="Next/Previous (static text)" PLG_PAGENAVIGATION_FIELD_VALUE_TEXT="Text" PLG_PAGENAVIGATION_FIELD_VALUE_TITLE="Title of the Article" PLG_PAGENAVIGATION_XML_DESCRIPTION="Enables you to add <em>Next & Previous</em> functionality to an Article." PKb��\ �p44#language/en-GB/en-GB.mod_logged.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_LOGGED="Logged-in Users" MOD_LOGGED_ADMINISTRATOR="Administrator" MOD_LOGGED_EDIT_USER="Edit user" MOD_LOGGED_FIELD_COUNT_DESC="The number of items to display (default 5)." MOD_LOGGED_FIELD_COUNT_LABEL="Count" MOD_LOGGED_FIELD_NAME_DESC="Displays name or username." MOD_LOGGED_LAST_ACTIVITY="Last Activity" MOD_LOGGED_LOGOUT="Logout" MOD_LOGGED_NAME="Name" MOD_LOGGED_SITE="Site" MOD_LOGGED_TITLE="Last Logged-in Users" MOD_LOGGED_TITLE_1="Last Logged-in User" MOD_LOGGED_TITLE_MORE="Last %s Logged-in Users" MOD_LOGGED_XML_DESCRIPTION="This module shows a list of the Logged-in Users." PKb��\c�����!language/en-GB/en-GB.mod_menu.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_MENU="Administrator Menu" MOD_MENU_CLEAR_CACHE="Clear Cache" MOD_MENU_COMPONENTS="Components" MOD_MENU_COM_ACTIONLOGS="User Actions Log" MOD_MENU_COM_CONTENT="Content" MOD_MENU_COM_CONTENT_ARTICLE_MANAGER="Articles" MOD_MENU_COM_CONTENT_CATEGORY_MANAGER="Categories" MOD_MENU_COM_CONTENT_FEATURED="Featured Articles" MOD_MENU_COM_CONTENT_NEW_ARTICLE="Add New Article" MOD_MENU_COM_CONTENT_NEW_CATEGORY="Add New Category" MOD_MENU_COM_LANGUAGES_SUBMENU_CONTENT="Content Languages" MOD_MENU_COM_LANGUAGES_SUBMENU_INSTALLED="Installed" MOD_MENU_COM_LANGUAGES_SUBMENU_OVERRIDES="Overrides" MOD_MENU_COM_PRIVACY="Privacy" MOD_MENU_COM_TEMPLATES_SUBMENU_STYLES="Styles" MOD_MENU_COM_TEMPLATES_SUBMENU_TEMPLATES="Templates" MOD_MENU_COM_USERS="Users" MOD_MENU_COM_USERS_ADD_GROUP="Add New Group" MOD_MENU_COM_USERS_ADD_LEVEL="Add New Access Level" MOD_MENU_COM_USERS_ADD_USER="Add New User" MOD_MENU_COM_USERS_GROUPS="Groups" MOD_MENU_COM_USERS_LEVELS="Access Levels" MOD_MENU_COM_USERS_USERS="Users" MOD_MENU_COM_USERS_USER_MANAGER="Manage" MOD_MENU_COM_USERS_ADD_NOTE="Add User Note" MOD_MENU_COM_USERS_NOTES="User Notes" MOD_MENU_COM_USERS_NOTE_CATEGORIES="User Note Categories" MOD_MENU_CONFIGURATION="Global Configuration" MOD_MENU_CONTROL_PANEL="Control Panel" MOD_MENU_EXTENSIONS_EXTENSIONS="Extensions" MOD_MENU_EXTENSIONS_EXTENSION_MANAGER="Manage" MOD_MENU_EXTENSIONS_LANGUAGE_MANAGER="Language(s)" MOD_MENU_EXTENSIONS_MODULE_MANAGER="Modules" MOD_MENU_EXTENSIONS_PLUGIN_MANAGER="Plugins" MOD_MENU_EXTENSIONS_TEMPLATE_MANAGER="Templates" MOD_MENU_FIELD_CHECK_DESC="Check for the presence of important menu items." MOD_MENU_FIELD_CHECK_LABEL="Check Menu" MOD_MENU_FIELD_FORUMURL_DESC="Enter the URL to a forum other than the default." MOD_MENU_FIELD_FORUMURL_LABEL="Custom Support Forum" MOD_MENU_FIELD_MENUTYPE_LABEL="Menu to Show" MOD_MENU_FIELD_MENUTYPE_DESC="Choose which menu should be rendered with this instance of module." MOD_MENU_FIELD_MENUTYPE_OPTION_PREDEFINED="Use a Preset" MOD_MENU_FIELD_PRESET_LABEL="Choose Preset" MOD_MENU_FIELD_PRESET_DESC="Choose a preset to use as the backend menu" MOD_MENU_FIELD_SHOWHELP="Help Menu" MOD_MENU_FIELD_SHOWHELP_DESC="Show or hide the Help menu which includes links to various joomla.org sites useful to users." MOD_MENU_FIELD_SHOWNEW="Add New Shortcuts" MOD_MENU_FIELD_SHOWNEW_DESC="Show or hide various 'Add New ...' shortcuts against users, groups, access levels, articles and categories." MOD_MENU_FIELDS="Fields" MOD_MENU_FIELDS_GROUP="Field Groups" MOD_MENU_GLOBAL_CHECKIN="Global Check-in" MOD_MENU_HELP="Help" MOD_MENU_HELP_COMMUNITY="Community Portal" MOD_MENU_HELP_CURRENT="Help with this page" MOD_MENU_HELP_DEVELOPER="Developer Resources" MOD_MENU_HELP_DOCUMENTATION="Documentation Wiki" MOD_MENU_HELP_EXTENSIONS="Joomla! Extensions" MOD_MENU_HELP_JOOMLA="Joomla! Help" MOD_MENU_HELP_LINKS="Useful Joomla! links" MOD_MENU_HELP_RESOURCES="Joomla! Resources" MOD_MENU_HELP_SECURITY="Security Centre" MOD_MENU_HELP_SHOP="Joomla! Shop" MOD_MENU_HELP_SUPPORT_OFFICIAL_FORUM="Official Support Forum" ; the string below will be used if the localised sample data has a URL for the desired community forum or if the 'Custom Support Forum' field parameter in the Administrator Menu module has a URL MOD_MENU_HELP_SUPPORT_CUSTOM_FORUM="Custom Support Forum" ; Enter in the string below the # of the specific language forum in https://forum.joomla.org/ (example: 19 for French). If left empty, it will use '511' which is the section for all languages forums. MOD_MENU_HELP_SUPPORT_OFFICIAL_LANGUAGE_FORUM_VALUE="511" ; If you have chosen to display in the string above the section for all languages, translate the string below. ; If you have displayed the specific language forum, use something like "Official French Forum" in your language. MOD_MENU_HELP_SUPPORT_OFFICIAL_LANGUAGE_FORUM="Official Language Forums" MOD_MENU_HELP_TRANSLATIONS="Joomla! Translations" MOD_MENU_HELP_XCHANGE="Stack Exchange" MOD_MENU_HOME_DEFAULT="Home" MOD_MENU_HOME_MULTIPLE="Warning! Multiple homes!" MOD_MENU_IMPORTANT_ITEM_MENU_MANAGER="Menu Manager" MOD_MENU_IMPORTANT_ITEM_MODULE_MANAGER="Module Manager" MOD_MENU_IMPORTANT_ITEM_COMPONENTS_CONTAINER="Components Container" MOD_MENU_IMPORTANT_ITEMS_INACCESSIBLE_LIST_WARNING="The administrator menu <strong>%1$s</strong> does not have - <strong>%2$s</strong>. Select to <strong><a href='%3$s'>turn on the menu recovery mode</a></strong>." MOD_MENU_INSTALLER_SUBMENU_DATABASE="Database" MOD_MENU_INSTALLER_SUBMENU_DISCOVER="Discover" MOD_MENU_INSTALLER_SUBMENU_INSTALL="Install" MOD_MENU_INSTALLER_SUBMENU_LANGUAGES="Install Languages" MOD_MENU_INSTALLER_SUBMENU_MANAGE="Manage" MOD_MENU_INSTALLER_SUBMENU_UPDATE="Update" MOD_MENU_INSTALLER_SUBMENU_UPDATESITES="Update Sites" MOD_MENU_INSTALLER_SUBMENU_WARNINGS="Warnings" MOD_MENU_LOGOUT="Logout" MOD_MENU_MASS_MAIL_USERS="Mass Mail Users" MOD_MENU_MEDIA_MANAGER="Media" MOD_MENU_MENUS="Menus" MOD_MENU_MENUS_ALL_ITEMS="All Menu Items" MOD_MENU_MENU_MANAGER="Manage" MOD_MENU_MENU_MANAGER_NEW_MENU="Add New Menu" MOD_MENU_MENU_MANAGER_NEW_MENU_ITEM="Add New Menu Item" MOD_MENU_NEW_PRIVATE_MESSAGE="New Private Message" MOD_MENU_PURGE_EXPIRED_CACHE="Clear Expired Cache" MOD_MENU_READ_PRIVATE_MESSAGES="Read Private Messages" MOD_MENU_RECOVERY_EXIT="Exit Recovery Mode" MOD_MENU_RECOVERY_MENU_ROOT="Menu Recovery" MOD_MENU_SETTINGS="Settings" MOD_MENU_MAINTENANCE="Maintenance" MOD_MENU_SYSTEM_INFORMATION="System Information" MOD_MENU_SYSTEM="System" MOD_MENU_TOOLS="Tools" MOD_MENU_USER_PROFILE="My Profile" MOD_MENU_XML_DESCRIPTION="This module displays an administrator menu module." PKb��\��9�A�A$language/en-GB/en-GB.com_content.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CONTENT="Articles" COM_CONTENT_ACCESS_DELETE_DESC="New setting for <strong>delete actions</strong> on this article and the calculated setting based on the parent category and group permissions." COM_CONTENT_ACCESS_EDIT_DESC="New setting for <strong>edit actions</strong> on this article and the calculated setting based on the parent category and group permissions." COM_CONTENT_ACCESS_EDITSTATE_DESC="New setting for <strong>edit state actions</strong> on this article and the calculated setting based on the parent category and group permissions." COM_CONTENT_ARTICLE_CONTENT="Content" COM_CONTENT_ARTICLE_DETAILS="Article Details" COM_CONTENT_ARTICLES_TITLE="Articles" COM_CONTENT_ATTRIBS_ARTICLE_SETTINGS_LABEL="Options" COM_CONTENT_ATTRIBS_FIELDSET_LABEL="Options" ; COM_CONTENT_BATCH_MENU_LABEL is deprecated, use JLIB_HTML_BATCH_MENU_LABEL instead. COM_CONTENT_BATCH_MENU_LABEL="To Move or Copy your selection please select a Category." COM_CONTENT_BATCH_OPTIONS="Batch process the selected articles" COM_CONTENT_BATCH_TIP="If a category is selected for move/copy, any actions selected will be applied to the copied or moved articles. Otherwise, all actions are applied to the selected articles." COM_CONTENT_CHANGE_ARTICLE="Select or Change article" COM_CONTENT_CHANGE_ARTICLE_BUTTON="Select/Change" COM_CONTENT_CHOOSE_CATEGORY_DESC="Select a parent category." COM_CONTENT_CONFIG_ARTICLE_SETTINGS_DESC="These settings apply for article layouts unless they are changed for a specific menu item." COM_CONTENT_CONFIG_BLOG_SETTINGS_DESC="These settings apply for blog or featured layouts unless they are changed for a specific menu item." COM_CONTENT_CONFIG_BLOG_SETTINGS_LABEL="Blog/Featured Layouts" COM_CONTENT_CONFIG_CATEGORIES_SETTINGS_DESC="These settings apply for Articles Categories Options, unless they are changed by the individual category or menu settings." COM_CONTENT_CONFIG_CATEGORY_SETTINGS_DESC="These settings apply for Articles Category Options unless they are changed by the individual category or menu settings." COM_CONTENT_CONFIG_EDITOR_LAYOUT="These options control the layout of the article editing page." COM_CONTENT_CONFIG_INTEGRATION_SETTINGS_DESC="These settings determine how the Article Component will integrate with other extensions." COM_CONTENT_CONFIG_LIST_SETTINGS_DESC="These settings apply for List Layouts Options unless they are changed for a specific menu item or category." COM_CONTENT_CONFIGURATION="Articles: Options" COM_CONTENT_CREATE_ARTICLE_CANCEL_REDIRECT_MENU_DESC="Select the page the user will be redirected to after Canceling article submission. The default is to redirect to the same article submission page (cleaning form)." COM_CONTENT_CREATE_ARTICLE_CANCEL_REDIRECT_MENU_LABEL="Cancel Redirect" COM_CONTENT_CREATE_ARTICLE_CATEGORY_LABEL="Default Category" COM_CONTENT_CREATE_ARTICLE_CATEGORY_DESC="If set to 'Yes', this page will only let you create articles in the category selected below." COM_CONTENT_CREATE_ARTICLE_CUSTOM_CANCEL_REDIRECT_DESC="If set to 'Yes', you can set a redirection page, distinct from above 'Submission/Cancel Redirect', to redirect to when user Cancels article submission.<br />If set to 'No', when user Cancels article submission, the user is redirected to the above 'Submission/Cancel Redirect' page." COM_CONTENT_CREATE_ARTICLE_CUSTOM_CANCEL_REDIRECT_LABEL="Custom Redirect on Cancel" COM_CONTENT_CREATE_ARTICLE_REDIRECTMENU_DESC="Select the page the user will be redirected to after a successful article submission and after cancel (if not set differently below). The default is to redirect to the home page." COM_CONTENT_CREATE_ARTICLE_REDIRECTMENU_LABEL="Submission/Cancel Redirect" COM_CONTENT_DRILL_CATEGORIES_LABEL="List or Blog: after choosing the display,<br />make sure you define the Options in the desired layout." COM_CONTENT_DRILL_DOWN_LAYOUT_DESC="When drilling down to a category, show articles in a list or blog layout." COM_CONTENT_DRILL_DOWN_LAYOUT_LABEL="List or Blog Layout" COM_CONTENT_EDIT_ARTICLE="Edit Article" COM_CONTENT_EDITORCONFIG_FIELDSET_LABEL="Configure Edit Screen" COM_CONTENT_EDITING_LAYOUT="Editing Layout" COM_CONTENT_ERROR_ALL_LANGUAGE_ASSOCIATED="A content item set to All languages can't be associated. Associations have not been set." COM_CONTENT_FEATURED="Featured Article" COM_CONTENT_FEATURED_ARTICLES="Featured Articles" COM_CONTENT_FEATURED_CATEGORIES_DESC="Optional list of categories. If selected, only featured articles from the selected categories will show." COM_CONTENT_FEATURED_CATEGORIES_LABEL="Select Categories" COM_CONTENT_FEATURED_ORDER="Featured Articles Order" COM_CONTENT_FEATURED_TITLE="Articles: Featured" COM_CONTENT_FIELD_BROWSER_PAGE_TITLE_DESC="Optional text for the "Browser page title" element to be used when the article is viewed with a non-article menu item. If blank, the article's title is used instead." COM_CONTENT_FIELD_BROWSER_PAGE_TITLE_LABEL="Browser Page Title" COM_CONTENT_FIELD_ARTICLETEXT_DESC="Enter the article content in the text area." COM_CONTENT_FIELD_ARTICLETEXT_LABEL="Article Text" COM_CONTENT_FIELD_CAPTCHA_DESC="Select the captcha plugin that will be used in the article submit form. You may need to enter required information for your captcha plugin in the Plugin Manager.<br />If 'Use Global' is selected, make sure a captcha plugin is selected in Global Configuration." COM_CONTENT_FIELD_CAPTCHA_LABEL="Allow Captcha on submit" COM_CONTENT_FIELD_CREATED_BY_ALIAS_DESC="Enter an alias to be displayed instead of the name of the user who created the article." COM_CONTENT_FIELD_CREATED_BY_ALIAS_LABEL="Created by Alias" COM_CONTENT_FIELD_CREATED_BY_DESC="Select the name of the user who created the article." COM_CONTENT_FIELD_CREATED_BY_LABEL="Created By" COM_CONTENT_FIELD_CREATED_DESC="Created date." COM_CONTENT_FIELD_CREATED_LABEL="Created Date" COM_CONTENT_FIELD_FEATURED_DESC="Assign the article to the featured blog layout." COM_CONTENT_FIELD_FULL_DESC="Select or upload an image for the single article display." COM_CONTENT_FIELD_FULL_LABEL="Full Article Image" COM_CONTENT_FIELD_FULLTEXT="Full text" COM_CONTENT_FIELD_HITS_DESC="Number of hits for this article." COM_CONTENT_FIELD_IMAGE_DESC="The image to be displayed." COM_CONTENT_FIELD_IMAGE_ALT_DESC="Alternative text used for visitors without access to images." COM_CONTENT_FIELD_IMAGE_ALT_LABEL="Alt Text" COM_CONTENT_FIELD_IMAGE_CAPTION_DESC="Caption attached to the image." COM_CONTENT_FIELD_IMAGE_CAPTION_LABEL="Caption" COM_CONTENT_FIELD_IMAGE_OPTIONS="Image Options" COM_CONTENT_FIELD_INFOBLOCK_POSITION_DESC="Puts the article information block above or below the text or splits it into two separate blocks, one above and the other below." COM_CONTENT_FIELD_INFOBLOCK_POSITION_LABEL="Position of Article Info" COM_CONTENT_FIELD_INFOBLOCK_TITLE_DESC="Displays the 'Article Info' title on top of the article information block." COM_CONTENT_FIELD_INFOBLOCK_TITLE_LABEL="Article Info Title" COM_CONTENT_FIELD_INTRO_DESC="Image for the intro text layouts such as blogs and featured." COM_CONTENT_FIELD_INTRO_LABEL="Intro Image" COM_CONTENT_FIELD_INTROTEXT="Intro Text" COM_CONTENT_FIELD_LANGUAGE_DESC="The language that the article is assigned to." COM_CONTENT_FIELD_MODIFIED_DESC="The date and time that the article was last modified." COM_CONTENT_FIELD_NOTE_DESC="An optional note to display in the article list." COM_CONTENT_FIELD_NOTE_LABEL="Note" COM_CONTENT_FIELD_OPTION_ABOVE="Above" COM_CONTENT_FIELD_OPTION_BELOW="Below" COM_CONTENT_FIELD_OPTION_SPLIT="Split" COM_CONTENT_FIELD_PUBLISH_DOWN_DESC="An optional date to Finish Publishing the article." COM_CONTENT_FIELD_PUBLISH_DOWN_LABEL="Finish Publishing" COM_CONTENT_FIELD_PUBLISH_UP_DESC="An optional date to Start Publishing the article." COM_CONTENT_FIELD_PUBLISH_UP_LABEL="Start Publishing" COM_CONTENT_FIELD_SELECT_ARTICLE_DESC="Select or create an article to be displayed." COM_CONTENT_FIELD_SELECT_ARTICLE_LABEL="Select Article" COM_CONTENT_FIELD_SHOW_CAT_TAGS_DESC="Show the tags for the category." COM_CONTENT_FIELD_SHOW_CAT_TAGS_LABEL="Show Tags" COM_CONTENT_FIELD_SHOW_TAGS_DESC="Show the tags for each article." COM_CONTENT_FIELD_SHOW_TAGS_LABEL="Show Tags" COM_CONTENT_FIELD_URL_DESC="The actual link to which users will be redirected." COM_CONTENT_FIELD_URL_LINK_TEXT_DESC="Text to display for the link." COM_CONTENT_FIELD_URL_LINK_TEXT_LABEL="Link Text" COM_CONTENT_FIELD_URLA_LABEL="Link A" COM_CONTENT_FIELD_URLA_LINK_TEXT_LABEL="Link A Text" COM_CONTENT_FIELD_URLB_LABEL="Link B" COM_CONTENT_FIELD_URLB_LINK_TEXT_LABEL="Link B Text" COM_CONTENT_FIELD_URLC_LABEL="Link C" COM_CONTENT_FIELD_URLC_LINK_TEXT_LABEL="Link C Text" COM_CONTENT_FIELD_URLS_OPTIONS="URL Options" COM_CONTENT_FIELD_URLSPOSITION_LABEL="Positioning of the Links" COM_CONTENT_FIELD_URLSPOSITION_DESC="Display the links above or below the content." COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS="Use Article Settings" COM_CONTENT_FIELD_VERSION_DESC="A count of the number of times this article has been revised." COM_CONTENT_FIELD_VERSION_LABEL="Revision" COM_CONTENT_FIELD_XREFERENCE_DESC="An optional reference used to link to external data sources." COM_CONTENT_FIELD_XREFERENCE_LABEL="External Reference" COM_CONTENT_FIELDS_ARTICLE_FIELDS_TITLE="Articles: Fields" COM_CONTENT_FIELDS_ARTICLE_FIELD_ADD_TITLE="Articles: New Field" COM_CONTENT_FIELDS_ARTICLE_FIELD_EDIT_TITLE="Articles: Edit Field" COM_CONTENT_FIELDS_TYPE_MODAL_ARTICLE="Article" COM_CONTENT_FIELDSET_PUBLISHING="Publishing" COM_CONTENT_FIELDSET_RULES="Permissions" COM_CONTENT_FIELDSET_URLS_AND_IMAGES="Images and Links" COM_CONTENT_FILTER_SEARCH_DESC="Search in title, alias and note. Prefix with ID: or AUTHOR: or CONTENT: to search for an article ID, article author or search in article content." COM_CONTENT_FILTER_SEARCH_LABEL="Search Articles" COM_CONTENT_FLOAT_DESC="Controls placement of the image." COM_CONTENT_FLOAT_FULLTEXT_LABEL="Full Text Image Float" COM_CONTENT_FLOAT_LABEL="Image Float" COM_CONTENT_FLOAT_INTRO_LABEL="Intro Image Float" COM_CONTENT_HEADING_ASSOCIATION="Association" COM_CONTENT_HEADING_DATE_CREATED="Date Created" COM_CONTENT_HEADING_DATE_MODIFIED="Date Modified" COM_CONTENT_HEADING_DATE_PUBLISH_UP="Start Publishing" COM_CONTENT_HEADING_DATE_PUBLISH_DOWN="Finish Publishing" COM_CONTENT_ID_LABEL="ID" ; The following 2 strings are deprecated and will be removed with 4.0. COM_CONTENT_ITEM_ASSOCIATIONS_FIELDSET_LABEL="Content Item Associations" COM_CONTENT_ITEM_ASSOCIATIONS_FIELDSET_DESC="Multilingual only! This choice will only display if the Language Filter parameter 'Item Associations' is set to 'Yes'. Choose a content item for the target language. This association will let the Language Switcher module redirect to the associated content item in another language. If used, make sure to display the Language switcher module on the relevant pages. A content item set to language 'All' can't be associated." COM_CONTENT_LEFT="Left" COM_CONTENT_MODIFIED_ASC="Date Modified ascending" COM_CONTENT_MODIFIED_DESC="Date Modified descending" COM_CONTENT_MONTH="Month" COM_CONTENT_N_ITEMS_ARCHIVED="%s articles archived." COM_CONTENT_N_ITEMS_ARCHIVED_1="%s article archived." COM_CONTENT_N_ITEMS_CHECKED_IN_0="No article checked in." COM_CONTENT_N_ITEMS_CHECKED_IN_1="%d article checked in." COM_CONTENT_N_ITEMS_CHECKED_IN_MORE="%d articles checked in." COM_CONTENT_N_ITEMS_DELETED="%s articles deleted." COM_CONTENT_N_ITEMS_DELETED_1="%s article deleted." COM_CONTENT_N_ITEMS_FEATURED="%s articles featured." COM_CONTENT_N_ITEMS_FEATURED_1="%s article featured." COM_CONTENT_N_ITEMS_PUBLISHED="%s articles published." COM_CONTENT_N_ITEMS_PUBLISHED_1="%s article published." COM_CONTENT_N_ITEMS_TRASHED="%s articles trashed." COM_CONTENT_N_ITEMS_TRASHED_1="%s article trashed." COM_CONTENT_N_ITEMS_UNFEATURED="%s articles unfeatured." COM_CONTENT_N_ITEMS_UNFEATURED_1="%s article unfeatured." COM_CONTENT_N_ITEMS_UNPUBLISHED="%s articles unpublished." COM_CONTENT_N_ITEMS_UNPUBLISHED_1="%s article unpublished." COM_CONTENT_NEW_ARTICLE="New Article" COM_CONTENT_NO_ARTICLES_DESC="If Show, the message 'There are no articles in this category' will display when there are no articles in the category or when 'Empty Categories' is set to show." COM_CONTENT_NO_ARTICLES_LABEL="No Articles Message" COM_CONTENT_NO_ITEM_SELECTED="Please first make a selection from the list." COM_CONTENT_NONE="None" COM_CONTENT_NUMBER_CATEGORY_ITEMS_DESC="If Show, the number of articles in the category will show." COM_CONTENT_NUMBER_CATEGORY_ITEMS_LABEL="# Articles in Category" COM_CONTENT_PAGE_ADD_ARTICLE="Articles: New" COM_CONTENT_PAGE_EDIT_ARTICLE="Articles: Edit" COM_CONTENT_PAGE_VIEW_ARTICLE="Articles: View" COM_CONTENT_PAGEBREAK_DOC_TITLE="Page Break" COM_CONTENT_PAGEBREAK_INSERT_BUTTON="Insert Page Break" COM_CONTENT_PAGEBREAK_TITLE="Page Title:" COM_CONTENT_PAGEBREAK_TOC="Table of Contents Alias:" COM_CONTENT_PUBLISH_DOWN_ASC="Finish Publishing ascending" COM_CONTENT_PUBLISH_DOWN_DESC="Finish Publishing descending" COM_CONTENT_PUBLISH_UP_ASC="Start Publishing ascending" COM_CONTENT_PUBLISH_UP_DESC="Start Publishing descending" COM_CONTENT_RIGHT="Right" COM_CONTENT_SAVE_SUCCESS="Article saved." COM_CONTENT_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the article to customise the alias." COM_CONTENT_SELECT_AN_ARTICLE="Select an Article" COM_CONTENT_SHARED_DESC="These settings apply for Shared Options in List, Blog and Featured unless they are changed by the menu settings." COM_CONTENT_SHARED_LABEL="Shared" COM_CONTENT_SHOW_ARTICLE_OPTIONS_DESC="Show or hide the article options tab in the Backend article edit view. These options allow overriding of the global options." COM_CONTENT_SHOW_ARTICLE_OPTIONS_LABEL="Show Article Options" COM_CONTENT_SHOW_EMPTY_CATEGORIES_DESC="If Show, empty categories will display. A category is only empty if it has no articles or subcategories." COM_CONTENT_SHOW_IMAGES_URLS_BACK_DESC="Show or hide fields to insert images and links in the Administrator." COM_CONTENT_SHOW_IMAGES_URLS_BACK_LABEL="Administrator Images and Links" COM_CONTENT_SHOW_IMAGES_URLS_FRONT_DESC="Show or hide fields to insert images and links when Frontend editing." COM_CONTENT_SHOW_IMAGES_URLS_FRONT_LABEL="Frontend Images and Links" COM_CONTENT_SHOW_PUBLISHING_OPTIONS_DESC="Show or hide the publishing options tab in the article edit view. These options allow changes in dates and author identities." COM_CONTENT_SHOW_PUBLISHING_OPTIONS_LABEL="Show Publishing Options" COM_CONTENT_SLIDER_EDITOR_CONFIG="Configure Edit Screen" COM_CONTENT_SUBMENU_CATEGORIES="Categories" COM_CONTENT_SUBMENU_FEATURED="Featured Articles" COM_CONTENT_TIP_ASSOCIATION="Associated articles" COM_CONTENT_TOGGLE_TO_FEATURE="Toggle to change article state to 'Featured'" COM_CONTENT_TOGGLE_TO_UNFEATURE="Toggle to change article state to 'Unfeatured'" COM_CONTENT_UNFEATURED="Unfeatured Article" COM_CONTENT_URL_FIELD_BROWSERNAV_LABEL="URL Target Window" COM_CONTENT_URL_FIELD_BROWSERNAV_DESC="Target browser window when the link is selected." COM_CONTENT_URL_FIELD_A_BROWSERNAV_LABEL="URL A Target Window" COM_CONTENT_URL_FIELD_B_BROWSERNAV_LABEL="URL B Target Window" COM_CONTENT_URL_FIELD_C_BROWSERNAV_LABEL="URL C Target Window" COM_CONTENT_WARNING_PROVIDE_VALID_NAME="Please provide a valid, non-blank title." COM_CONTENT_XML_DESCRIPTION="Article management component." JGLOBAL_NO_ITEM_SELECTED="No articles selected" JLIB_APPLICATION_ERROR_BATCH_CANNOT_CREATE="You are not allowed to create new articles in this category." JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT="You are not allowed to edit one or more of these articles." JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." JLIB_RULES_SETTING_NOTES_ITEM="Changes apply to this article only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\tu� ��language/en-GB/en-GB.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 ; Common boolean values ; Note: YES, NO, TRUE, FALSE are reserved words in INI format. ; Keep this string on top JERROR_PARSING_LANGUAGE_FILE=" : error(s) in line(s) %s" J1="1" J2="2" J3="3" J4="4" J5="5" J6="6" J7="7" J8="8" J9="9" J10="10" J15="15" J20="20" J25="25" J30="30" J50="50" J75="75" J100="100" J150="150" J200="200" J250="250" J300="300" J500="500" JH1="h1" JH2="h2" JH3="h3" JH4="h4" JH5="h5" JH6="h6" ERROR="Error" MESSAGE="Message" NOTICE="Notice" WARNING="Warning" JADMINISTRATION="Administration" JADMINISTRATOR="Administrator" JALL="All" JALL_LANGUAGE="All" JAPPLY="Save" JARCHIVED="Archived" JAUTHOR="Author" JAUTHOR_ASC="Author ascending" JAUTHOR_DESC="Author descending" JASSOCIATIONS_ASC="Associations ascending" JASSOCIATIONS_DESC="Associations descending" JCANCEL="Cancel" JCATEGORIES="Categories" JCATEGORY="Category" JCATEGORY_ASC="Category ascending" JCATEGORY_DESC="Category descending" JCATEGORY_SPRINTF="Category: %s" JCLEAR="Clear" JCLIENT="Location" JCONFIG_PERMISSIONS_DESC="Default permissions used for all content in this component." JCONFIG_PERMISSIONS_LABEL="Permissions" JCURRENT="Current" JDATE="Date" JDATE_ASC="Date ascending" JDATE_DESC="Date descending" JDAY="Day" JDEFAULT="Default" JDEFAULTLANGUAGE="Language - Default" JDETAILS="Details" JDISABLED="Disabled" JENABLED="Enabled" JFALSE="False" JFEATURED="Featured" JFEATURED_ASC="Featured ascending" JFEATURED_DESC="Featured descending" JUNFEATURED="Unfeatured" JFEATURE="Feature" JUNFEATURE="Unfeature" JHELP="Help" JHIDE="Hide" JINVALID_TOKEN="The most recent request was denied because it had an invalid security token. Please refresh the page and try again." JINVALID_TOKEN_NOTICE="The security token did not match. The request was aborted to prevent any security breach. Please try again." JLOGIN="Log in" JLOGOUT="Log out" JMENU_MULTILANG_WARNING_MISSING_MODULES="An administrator menu module for <strong>%s</strong> does not exist. <br>Create a custom administrator menu and module for each administrator language or publish a menu module set to All languages." JMODIFY="Modify" JMONTH="Month" JMONTH_PUBLISHED="Month (published)" JNEVER="Never" JNEXT="Next" JNEXT_TITLE="Next article: %s" JNO="No" JNONE="None" JOFF="Off" JON="On" JONLY="Only" JOPTIONS="Options" JPREV="Prev" JPREVIOUS="Previous" JPREVIOUS_TITLE="Previous article: %s" JPROTECTED="Protected" JPUBLISHED="Published" JRECORD_NUMBER="Record Number" JREGISTER="Register" JORDERINGDISABLED="Please sort by order to enable reordering" JSAVE="Save & Close" JSELECT="Select" JSTATUS="Status" JSTATUS_ASC="Status ascending" JSTATUS_DESC="Status descending" JSHOW="Show" JSITE="Site" JSUBMIT="Submit" JTAG="Tags" JTAG_DESC="Assign tags to content items. You may select a tag from the pre-defined list or enter a new tag by typing the name in the field and pressing enter." JTAG_FIELD_SELECT_DESC="Select the tag to use." JTOOLBAR="Toolbar" JTRASH="Trash" JTRASHED="Trashed" JTRUE="True" JUNARCHIVE="Remove from archive status" JUNDEFINED="Undefined" JUNPROTECTED="Unprotected" JUNPUBLISHED="Unpublished" JYEAR="Year" JVERSION="Version" JYES="Yes" JACTIONS="Actions for: %s" JACTION_ADMIN="Configure ACL & Options" JACTION_ADMIN_COMPONENT_DESC="Allows users in the group to edit the options and permissions of this extension." JACTION_ADMIN_GLOBAL="Super User" JACTION_ADMIN_GLOBAL_DESC="Allows users in the group to perform any action regardless of the settings." JACTION_COMPONENT_SETTINGS="Component Settings" JACTION_CREATE="Create" JACTION_CREATE_COMPONENT_DESC="Allows users in the group to create any content in this extension." JACTION_DELETE="Delete" JACTION_DELETE_COMPONENT_DESC="Allows users in the group to delete any content in this extension." JACTION_EDIT="Edit" JACTION_EDIT_COMPONENT_DESC="Allows users in the group to edit any content in this extension." JACTION_EDITOWN="Edit Own" JACTION_EDITOWN_COMPONENT_DESC="Allows users in the group to edit any content they submitted in this extension." JACTION_EDITVALUE="Edit Custom Field Value" JACTION_EDITVALUE_COMPONENT_DESC="Allows users in the group to edit any value of custom fields submitted in this extension." JACTION_EDITSTATE="Edit State" JACTION_EDITSTATE_COMPONENT_DESC="Allows users in the group to change the state of any content in this extension." JACTION_LOGIN_ADMIN="Administrator Login" JACTION_LOGIN_OFFLINE="Offline Access" JACTION_LOGIN_SITE="Site Login" JACTION_MANAGE="Access Administration Interface" JACTION_MANAGE_COMPONENT_DESC="Allows users in the group to access the administration interface for this extension." JACTION_OPTIONS="Configure Options Only" JACTION_OPTIONS_COMPONENT_DESC="Allows users in the group to edit the options except the permissions of this extension." JBROWSERTARGET_MODAL="Modal" JBROWSERTARGET_NEW="Open in new window" JBROWSERTARGET_PARENT="Open in parent window" JBROWSERTARGET_POPUP="Open in popup" JERROR_ALERTNOAUTHOR="You are not authorised to view this resource." JERROR_ALERTNOTEMPLATE="The template for this display is not available." JERROR_AN_ERROR_HAS_OCCURRED="An error has occurred." JERROR_CORE_CREATE_NOT_PERMITTED="Create not permitted." JERROR_CORE_DELETE_NOT_PERMITTED="Delete not permitted." JERROR_COULD_NOT_FIND_TEMPLATE="Could not find template "_QQ_"%s"_QQ_"." JERROR_INVALID_CONTROLLER="Invalid controller" JERROR_INVALID_CONTROLLER_CLASS="Invalid controller class" JERROR_LAYOUT_PREVIOUS_ERROR="Previous Error" JERROR_LOADFILE_FAILED="Error loading form file" JERROR_LOADING_MENUS="Error loading Menus: %s" JERROR_LOGIN_DENIED="You do not have access to the Administrator section of this site." JERROR_MAGIC_QUOTES="Your host needs to disable magic_quotes_gpc to run this version of Joomla!" JERROR_NO_ITEMS_SELECTED="No item(s) selected." JERROR_NOLOGIN_BLOCKED="Login denied! Your account has either been blocked or you have not activated it yet." JERROR_SENDING_EMAIL="Email could not be sent." JERROR_SESSION_STARTUP="Error starting the session." JERROR_SAVE_FAILED="Could not save data. Error: %s" JFIELD_ACCESS_DESC="The access level group that is allowed to view this item." JFIELD_ACCESS_LABEL="Access" JFIELD_ALIAS_DESC="The Alias will be used in the SEF URL. Leave this blank and Joomla will fill in a default value from the title. This value will depend on the SEO settings (Global Configuration->Site). <br />Using Unicode will produce UTF-8 aliases. You may also enter manually any UTF-8 character. Spaces and some forbidden characters will be changed to hyphens.<br />When using default transliteration it will produce an alias in lower case and with dashes instead of spaces. You may enter the Alias manually. Use lowercase letters and hyphens (-). No spaces or underscores are allowed. Default value will be a date and time if the title is typed in non-latin letters." JFIELD_ALIAS_LABEL="Alias" JFIELD_ALIAS_PLACEHOLDER="Auto-generate from title" JFIELD_ALT_COMPONENT_LAYOUT_DESC="Use a layout from the supplied component view or overrides in the templates." JFIELD_ALT_LAYOUT_LABEL="Layout" JFIELD_ALT_MODULE_LAYOUT_DESC="Use a layout from the supplied module or overrides in the templates." JFIELD_ALT_PAGE_TITLE_DESC="An optional alternative page title to set that will change the TITLE tag in the HTML output." JFIELD_ALT_PAGE_TITLE_LABEL="Alternative Page Title" JFIELD_ASSET_ID_DESC="Asset ID" JFIELD_ASSET_ID_LABEL="Asset ID" JFIELD_BASIS_LOGIN_DESCRIPTION_DESC="Text to display on login page." JFIELD_BASIS_LOGIN_DESCRIPTION_LABEL="Login Description Text" JFIELD_BASIS_LOGIN_DESCRIPTION_SHOW_DESC="Show or hide login description." JFIELD_BASIS_LOGIN_DESCRIPTION_SHOW_LABEL="Login Description" JFIELD_BASIS_LOGOUT_DESCRIPTION_DESC="Text for logout page." JFIELD_BASIS_LOGOUT_DESCRIPTION_LABEL="Logout Description Text" JFIELD_BASIS_LOGOUT_DESCRIPTION_SHOW_DESC="Show or hide logout description." JFIELD_BASIS_LOGOUT_DESCRIPTION_SHOW_LABEL="Logout Description" JFIELD_CATEGORY_DESC="The category that this item is assigned to. You may select an existing category or enter a new category by typing the name in the field and pressing enter." JFIELD_DISPLAY_READONLY_DESC="Whether to display the field on forms when read-only. Inherit defaults to value set in field group." JFIELD_DISPLAY_READONLY_LABEL="Display When Read-Only" JFIELD_ENABLED_DESC="The enabled status of this item." JFIELD_FIELDS_CATEGORY_DESC="Select the category that this field is assigned to." JFIELD_KEY_REFERENCE_DESC="Used to store information referring to an external resource." JFIELD_KEY_REFERENCE_LABEL="Key Reference" JFIELD_LANGUAGE_DESC="Assign a language to this article." JFIELD_LANGUAGE_LABEL="Language" JFIELD_LOGIN_IMAGE_DESC="Select or upload an image to display on login page." JFIELD_LOGIN_IMAGE_LABEL="Login Image" JFIELD_LOGIN_REDIRECT_URL_DESC="If a URL is entered here, users will be redirected to it after login.<br />The URL must be internal (eg: index.php?Itemid=999)." JFIELD_LOGIN_REDIRECT_URL_LABEL="Login Redirect" JFIELD_LOGOUT_IMAGE_DESC="Select or upload an image to display on logout page." JFIELD_LOGOUT_IMAGE_LABEL="Logout Image" JFIELD_LOGOUT_REDIRECT_URL_DESC="If a URL is entered here, users will be redirected to it after logout.<br />The URL must be internal (eg: index.php?Itemid=999)." JFIELD_LOGOUT_REDIRECT_URL_LABEL="Logout Redirect" JFIELD_LOGOUT_REDIRECT_PAGE_DESC="Select or create the page the user will be redirected to after ending their current session by logging out. The default is to stay on the same page." JFIELD_LOGOUT_REDIRECT_PAGE_LABEL="Logout Redirection Page" JFIELD_META_DESCRIPTION_DESC="An optional paragraph to be used as the description of the page in the HTML output. This will generally display in the results of search engines." JFIELD_META_DESCRIPTION_LABEL="Meta Description" JFIELD_META_KEYWORDS_DESC="An optional comma-separated list of keywords and/or phrases to be used in the HTML output." JFIELD_META_KEYWORDS_LABEL="Meta Keywords" JFIELD_META_RIGHTS_DESC="Describe what rights others have to use this content." JFIELD_META_RIGHTS_LABEL="Content Rights" JFIELD_METADATA_AUTHOR_DESC="The author of this content." JFIELD_METADATA_RIGHTS_DESC="Publication rights for the content." JFIELD_METADATA_RIGHTS_LABEL="Rights" JFIELD_METADATA_ROBOTS_DESC="Robots instructions." JFIELD_METADATA_ROBOTS_LABEL="Robots" JFIELD_METADATA_XREFERENCE_DESC="An optional reference used to link to external data sources." JFIELD_METADATA_XREFERENCE_LABEL="Cross Reference" JFIELD_MODULE_LANGUAGE_DESC="Assign a language to this module." JFIELD_NAME_DESC="The name will be used to identify the field. Leave this blank and Joomla will fill in a default value from the title." JFIELD_NAME_LABEL="Name" JFIELD_NAME_PLACEHOLDER="Auto-generate from title" JFIELD_NOTE_DESC="Note" JFIELD_NOTE_LABEL="Note" JFIELD_OPTION_NONE="None" JFIELD_ORDERING_DESC="Select the ordering." JFIELD_ORDERING_LABEL="Ordering" JFIELD_PARAMS_LABEL="Options" JFIELD_PLG_SEARCH_ALL_DESC="Include published items in the search." JFIELD_PLG_SEARCH_ALL_LABEL="Search Published" JFIELD_PLG_SEARCH_ARCHIVED_DESC="Include archived items in the search." JFIELD_PLG_SEARCH_ARCHIVED_LABEL="Search Archived" JFIELD_PLG_SEARCH_SEARCHLIMIT_DESC="Sets the maximum number of results to return." JFIELD_PLG_SEARCH_SEARCHLIMIT_LABEL="Search Limit" JFIELD_PUBLISHED_DESC="Set publication status." JFIELD_READMORE_DESC="Add a custom text instead of Read More." JFIELD_READMORE_LABEL="Read More Text" JFIELD_SPACER_LABEL="<span style="_QQ_"width:auto"_QQ_"><hr /></span>" JFIELD_TITLE_DESC="Title" JFIELD_VERSION_HISTORY_DESC="This button allows you to open a window to view older versions of this item." JFIELD_VERSION_HISTORY_LABEL="Prior Versions" JFIELD_VERSION_HISTORY_SELECT="View Prior Versions" JFIELD_XREFERENCE_DESC="An optional field to allow this record to be cross-referenced to an external data system if required." JFIELD_XREFERENCE_LABEL="External Reference" JGLOBAL_ACROSS="Across" JGLOBAL_ACTION_PERMISSIONS_LABEL="Permissions" JGLOBAL_ACTION_PERMISSIONS_DESCRIPTION="Set the action permissions for this asset" JGLOBAL_ADD_CUSTOM_CATEGORY="Add new Category" JGLOBAL_ALL_ARTICLE="Max Levels Articles" JGLOBAL_ALL_LIST="Max Levels as List" JGLOBAL_ALLOW_COMMENTS_DESC="If Yes, viewers will be able to add and view comments for the article." JGLOBAL_ALLOW_COMMENTS_LABEL="Allow Comments" JGLOBAL_ALLOW_RATINGS_DESC="If Yes, viewers will be able to add and view ratings for the article." JGLOBAL_ALLOW_RATINGS_LABEL="Allow Ratings" JGLOBAL_ARCHIVE_ARTICLES_FIELD_INTROTEXTLIMIT_DESC="Please enter in a numeric character limit value. The introtext will be trimmed to the number of characters you enter." JGLOBAL_ARCHIVE_ARTICLES_FIELD_INTROTEXTLIMIT_LABEL="Intro text Limit" JGLOBAL_ARCHIVE_OPTIONS="Archive" JGLOBAL_ARTICLE_COUNT_DESC="Show or hide a count of articles in each category." JGLOBAL_ARTICLE_COUNT_LABEL="Article Count" JGLOBAL_ARTICLE_MANAGER_ORDER="Ordering" JGLOBAL_ARTICLE_MANAGER_REVERSE_ORDER="Ordering Reverse" JGLOBAL_ARTICLE_ORDER_DESC="The order that articles will show in." JGLOBAL_ARTICLE_ORDER_LABEL="Article Order" JGLOBAL_ARTICLES="Articles" JGLOBAL_ASSOC_NOT_POSSIBLE="To define associations, please make sure the item language is not set to 'All'." JGLOBAL_ASSOCIATIONS_NEW_ITEM_WARNING="To create associations, first save the item." JGLOBAL_ASSOCIATIONS_PROPAGATE_BUTTON="Propagate" JGLOBAL_ASSOCIATIONS_PROPAGATE_FAILED="Failed propagating associations. You may have to select or create them manually." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_ALL="All existing associations have been set." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_NONE="No associations exist to propagate." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_SOME="Associations have been set for: %s" JGLOBAL_ASSOCIATIONS_PROPAGATE_TIP="Propagates this item's existing associations." JGLOBAL_ASSOCIATIONS_RESET_WARNING="The language has been changed. If you save this item again it will reset the available associations. If this was not intended, close the item." JGLOBAL_AUTH_ACCESS_DENIED="Access Denied" JGLOBAL_AUTH_ACCESS_GRANTED="Access Granted" JGLOBAL_AUTH_BIND_FAILED="Failed binding to LDAP server" JGLOBAL_AUTH_CANCEL="Authentication cancelled" JGLOBAL_AUTH_CURL_NOT_INSTALLED="Curl isn't installed" JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED="Empty password not allowed." JGLOBAL_AUTH_FAIL="Authentication failed" JGLOBAL_AUTH_FAILED="Failed to authenticate: %s" JGLOBAL_AUTH_INCORRECT="Incorrect username/password" JGLOBAL_AUTH_INVALID_PASS="Username and password do not match or you do not have an account yet." JGLOBAL_AUTH_INVALID_SECRETKEY="The two factor authentication Secret Key is invalid." ; The following 2 strings are deprecated and will be removed with 4.0. JGLOBAL_AUTH_NO_BIND="Unable to bind to LDAP" JGLOBAL_AUTH_NO_CONNECT="Unable to connect to LDAP server" JGLOBAL_AUTH_NO_REDIRECT="Could not redirect to server: %s" JGLOBAL_AUTH_NO_USER="Username and password do not match or you do not have an account yet." JGLOBAL_AUTH_NOT_CONNECT="Unable to connect to authentication service." JGLOBAL_AUTH_NOT_CREATE_DIR="Could not create the FileStore folder %s. Please check the effective permissions." JGLOBAL_AUTH_PASS_BLANK="LDAP can't have blank password" JGLOBAL_AUTH_UNKNOWN_ACCESS_DENIED="Result Unknown. Access Denied" JGLOBAL_AUTH_USER_BLACKLISTED="User is blacklisted." JGLOBAL_AUTH_USER_NOT_FOUND="Unable to find user." JGLOBAL_AUTHOR_ALPHABETICAL="Author Alphabetical" JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL="Author Reverse Alphabetical" JGLOBAL_AUTO="Auto" JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND="Can't find the destination parent for this move." JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND="Can't find the destination row for this move." JGLOBAL_BATCH_PROCESS="Process" JGLOBAL_BLOG="Blog" JGLOBAL_BLOG_LAYOUT_OPTIONS="Blog Layout" JGLOBAL_CATEGORIES_OPTIONS="Categories" JGLOBAL_CATEGORY_LAYOUT_DESC="Layout" JGLOBAL_CATEGORY_LAYOUT_LABEL="Choose a Layout" JGLOBAL_CATEGORY_MANAGER_ORDER="Category Order" JGLOBAL_CATEGORY_NOT_FOUND="Category not found" JGLOBAL_CATEGORY_OPTIONS="Category" JGLOBAL_CATEGORY_ORDER_DESC="The order that categories will show in." JGLOBAL_CATEGORY_ORDER_LABEL="Category Order" JGLOBAL_CENTER="Center" JGLOBAL_CHECK_ALL="Check All Items" JGLOBAL_CHOOSE_CATEGORY_DESC="Select or create a category to be displayed." JGLOBAL_CHOOSE_CATEGORY_LABEL="Choose a Category" JGLOBAL_CHOOSE_COMPONENT_DESC="Choose a component from the list." JGLOBAL_CHOOSE_COMPONENT_LABEL="Choose a component" JGLOBAL_CLICK_TO_SORT_THIS_COLUMN="Select to sort by this column" JGLOBAL_CLICK_TO_TOGGLE_STATE="Select icon to toggle state." JGLOBAL_CONFIRM_DELETE="Are you sure you want to delete? Confirming will permanently delete the selected item(s)!" JGLOBAL_COPY="(copy)" JGLOBAL_CREATED="Created" JGLOBAL_CREATED_DATE="Created Date" JGLOBAL_CUSTOM_CATEGORY="New Categories" JGLOBAL_CUSTOM_FIELDS_ENABLE_DESC="Enable the creation of custom fields." JGLOBAL_CUSTOM_FIELDS_ENABLE_LABEL="Enable Custom Fields" JGLOBAL_DATE_FORMAT_DESC="Optional format string for showing the date. For example, D M Y for day month year or you can use d-m-y for a short version eg. 28-12-16. See https://php.net/date. If left blank, it uses DATE_FORMAT_LC1 from your language file." JGLOBAL_DATE_FORMAT_LABEL="Date Format" JGLOBAL_DESCRIPTION="Description" JGLOBAL_DISPLAY_NUM="Display #" JGLOBAL_DISPLAY_SELECT_DESC="Show or hide the Display Select dropdown listbox." JGLOBAL_DISPLAY_SELECT_LABEL="Display Select" JGLOBAL_DOWN="Down" JGLOBAL_EDIT_ITEM="Edit item" JGLOBAL_EDIT_PREFERENCES="Edit Preferences" JGLOBAL_EMAIL="Email" JGLOBAL_EMAIL_DOMAIN_NOT_ALLOWED="The email domain <strong>%s</strong> is not allowed. Please enter another email address." JGLOBAL_EMPTY_CATEGORIES_DESC="Show or hide categories that have no articles and no subcategories." JGLOBAL_EMPTY_CATEGORIES_LABEL="Empty Categories" JGLOBAL_ERROR_INSUFFICIENT_BATCH_INFORMATION="Insufficient information to perform the batch operation" JGLOBAL_FEED_SHOW_READMORE_DESC="Displays a "Read More" link in the news feeds if Intro Text is set to Show." JGLOBAL_FEED_SHOW_READMORE_LABEL="Show "Read More"" JGLOBAL_FEED_SUMMARY_DESC="If set to Intro Text, only the Intro Text of each article will show in the news feed. If set to Full Text, the whole article will show in the news feed." JGLOBAL_FEED_SUMMARY_LABEL="Include in Feed" JGLOBAL_FEED_TITLE="News Feeds" JGLOBAL_FIELDS="Fields" JGLOBAL_FIELDS_TITLE="Custom Fields" JGLOBAL_FIELD_ADD="Add" JGLOBAL_FIELD_GROUPS="Field Groups" JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_DESC="Categories that are within this category will be displayed." JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_LABEL="Select a Top Level Category" JGLOBAL_FIELD_CATEGORIES_DESC_DESC="If you enter some text in this field, it will replace the Top Level Category Description, if it has one." JGLOBAL_FIELD_CATEGORIES_DESC_LABEL="Alternative Description" JGLOBAL_FIELD_CREATED_BY_ALIAS_DESC="Uses another name than the author's for display." JGLOBAL_FIELD_CREATED_BY_ALIAS_LABEL="Author's Alias" JGLOBAL_FIELD_CREATED_BY_DESC="The user who created this." JGLOBAL_FIELD_CREATED_BY_LABEL="Created By" JGLOBAL_FIELD_CREATED_DESC="Created Date." JGLOBAL_FIELD_CREATED_LABEL="Created Date" JGLOBAL_FIELD_FIELD_CACHETIME_DESC="The number of minutes before the cache is refreshed." JGLOBAL_FIELD_FIELD_ORDERING_LABEL="Order" JGLOBAL_FIELD_FIELD_ORDERING_DESC="Order items will be displayed in." JGLOBAL_FIELD_ID_DESC="Record number in the database." JGLOBAL_FIELD_ID_LABEL="ID" JGLOBAL_FIELD_LAYOUT_DESC="Default layout to use for items." JGLOBAL_FIELD_LAYOUT_LABEL="Choose a Layout" JGLOBAL_FIELD_MODIFIED_LABEL="Modified Date" JGLOBAL_FIELD_MODIFIED_BY_DESC="The user who did the last modification." JGLOBAL_FIELD_MODIFIED_BY_LABEL="Modified By" JGLOBAL_FIELD_MOVE="Move" JGLOBAL_FIELD_NUM_CATEGORY_ITEMS_DESC="Number of categories to display for each level." JGLOBAL_FIELD_NUM_CATEGORY_ITEMS_LABEL="Number of Categories" JGLOBAL_FIELD_PUBLISH_DOWN_DESC="An optional date to stop publishing." JGLOBAL_FIELD_PUBLISH_DOWN_LABEL="Finish Publishing" JGLOBAL_FIELD_PUBLISH_UP_DESC="An optional date to start publishing." JGLOBAL_FIELD_PUBLISH_UP_LABEL="Start Publishing" JGLOBAL_FIELD_REMOVE="Remove" JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_DESC="Show description of the top level category or alternatively replace with the text from the description field found in the menu item. If using Root as a top level category, the description field has to be filled." JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_LABEL="Top Level Category Description" JGLOBAL_FIELD_VERSION_NOTE_DESC="Enter an optional note for this version of the item." JGLOBAL_FIELD_VERSION_NOTE_LABEL="Version Note" JGLOBAL_FIELDSET_ASSOCIATIONS="Associations" JGLOBAL_FIELDSET_DISPLAY_OPTIONS="Display" JGLOBAL_FIELDSET_IMAGE_OPTIONS="Images" JGLOBAL_FIELDSET_INTEGRATION="Integration" JGLOBAL_FIELDSET_METADATA_OPTIONS="Metadata" JGLOBAL_FIELDSET_OPTIONS="Options" JGLOBAL_FIELDSET_CONTENT="Content" JGLOBAL_FIELDSET_PUBLISHING="Publishing" JGLOBAL_FIELDSET_DESCRIPTION="Description" JGLOBAL_FIELDSET_ADVANCED="Advanced" JGLOBAL_FIELDSET_BASIC="Options" JGLOBAL_FILTER_ATTRIBUTES_DESC="3. List additional attributes, separating each attribute name with a space or comma. For example: <i>class,title,id</i>." JGLOBAL_FILTER_ATTRIBUTES_LABEL="Filter Attributes<sup>3</sup>" JGLOBAL_FILTER_CLIENT="- Select Location -" JGLOBAL_FILTER_FIELD_DESC="Show or hide a filter field for the list." JGLOBAL_FILTER_FIELD_LABEL="Filter Field" JGLOBAL_FILTER_GROUPS_DESC="This sets the user groups that you want filters applied to. Other groups will have no filtering performed." JGLOBAL_FILTER_GROUPS_LABEL="Filter Groups" JGLOBAL_FILTER_TAGS_DESC="2. List additional tags, separating each tag name with a space or comma. For example: <i>p,div,span</i>." JGLOBAL_FILTER_TAGS_LABEL="Filter Tags<sup>2</sup>" JGLOBAL_FILTER_TYPE_DESC="1. Blacklist allows all tags and attributes except for those in the blacklist.<br /><strong>--</strong> Tags for the Default Blacklist include: 'applet', 'body', 'bgsound', 'base', 'basefont', 'canvas', 'embed', 'frame', 'frameset', 'head', 'html', 'id', 'iframe', 'ilayer', 'layer', 'link', 'meta', 'name', 'object', 'script', 'style', 'title', 'xml'<br /><strong>--</strong> Attributes for the Default Blacklist include: 'action', 'background', 'codebase', 'dynsrc', 'lowsrc', 'formaction'<br /><strong>--</strong> You can blacklist additional tags and attributes by adding to the Filter Tags and Filter Attributes fields, separating each tag or attribute name with a comma.<br /><strong>--</strong> Custom Blacklist allows you to override the Default Blacklist. Add the tags and attributes to be blacklisted in the Filter Tags and Filter Attributes fields.</p><p>Whitelist allows only the tags listed in the Filter Tags and Filter Attributes fields.</p><p>No HTML removes all HTML tags from the content when it is saved.</p><p>Please note that these settings work regardless of the editor that you are using. <br />Even if you are using a WYSIWYG editor, the filtering settings may strip additional tags and attributes prior to saving information in the database." JGLOBAL_FILTER_TYPE_LABEL="Filter Type<sup>1</sup>" JGLOBAL_FULL_TEXT="Full Text" JGLOBAL_GT=">" ; The following strings is deprecated and will be removed with 4.0. JGLOBAL_HELPREFRESH_BUTTON="Refresh" JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC="The maximum number of old versions of an item to save. If zero, all old versions will be saved." JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL="Maximum Versions" JGLOBAL_HITS="Hits" JGLOBAL_HITS_ASC="Hits ascending" JGLOBAL_HITS_DESC="Hits descending" JGLOBAL_INDEX_FOLLOW="Index, Follow" JGLOBAL_INDEX_NOFOLLOW="Index, No follow" JGLOBAL_INHERIT="Inherit" JGLOBAL_INTEGRATION_LABEL="Integration" JGLOBAL_INTRO_TEXT="Intro Text" JGLOBAL_ISFREESOFTWARE="%s is free software released under the <a href="_QQ_"https://www.gnu.org/licenses/gpl-2.0.html"_QQ_" target="_QQ_"_blank"_QQ_">GNU General Public License</a>." JGLOBAL_KEEP_TYPING="Keep typing ..." JGLOBAL_LANGUAGE_VERSION_NOT_PLATFORM="Language pack does not match this Joomla! version. Some strings may be missing and will be displayed in English." JGLOBAL_LEAST_HITS="Least Hits" JGLOBAL_LEFT="Left" JGLOBAL_LINK_AUTHOR_DESC="If set to Yes, the Name of the article's Author will be linked to its contact page. You must create a contact linked to the author's user record, <strong>and the "Content - Contact" plugin must be enabled</strong>, for this to be in effect." JGLOBAL_LINK_AUTHOR_LABEL="Link Author" JGLOBAL_LINK_CATEGORY_DESC="If set to Yes, and if Show Category is set to 'Show', the Category Title will link to a layout showing articles in that Category." JGLOBAL_LINK_CATEGORY_LABEL="Link Category" JGLOBAL_LINK_PARENT_CATEGORY_DESC="If set to Yes, and if Show Parent is set to 'Show', the Parent Category Title will link to a layout showing articles in that Category." JGLOBAL_LINK_PARENT_CATEGORY_LABEL="Link Parent" JGLOBAL_LINKED_TITLES_DESC="If set to Yes, the article title will be a link to the article." JGLOBAL_LINKED_TITLES_LABEL="Linked Titles" JGLOBAL_LIST="List" JGLOBAL_LIST_ALIAS="(<span>Alias</span>: %s)" JGLOBAL_LIST_ALIAS_NOTE="(<span>Alias</span>: %s, <span>Note</span>: %s)" JGLOBAL_LIST_AUTHOR_DESC="Show or hide the article author in the list of articles." JGLOBAL_LIST_AUTHOR_LABEL="Show Author in List" JGLOBAL_LIST_HITS_DESC="Show or hide article hits in the list of articles." JGLOBAL_LIST_HITS_LABEL="Show Hits in List" JGLOBAL_LIST_LAYOUT_OPTIONS="List Layouts" JGLOBAL_LIST_NAME="(<span>Name</span>: %s)" JGLOBAL_LIST_NAME_NOTE="(<span>Name</span>: %s, <span>Note</span>: %s)" JGLOBAL_LIST_NOTE="(<span>Note</span>: %s)" JGLOBAL_LIST_RATINGS_DESC="Whether to show article ratings in the list of articles." JGLOBAL_LIST_RATINGS_LABEL="Show Ratings in List" JGLOBAL_LIST_TITLE_DESC="If Show, Category Title will show in the list of categories." JGLOBAL_LIST_TITLE_LABEL="Category Title" JGLOBAL_LIST_VOTES_DESC="Whether to show article votes in the list of articles." JGLOBAL_LIST_VOTES_LABEL="Show Votes in List" JGLOBAL_LOOKING_FOR="Looking for" JGLOBAL_LT="<" JGLOBAL_MAXIMUM_CATEGORY_LEVELS_DESC="The number of subcategory levels to display." JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL="Subcategory Levels" JGLOBAL_MAXIMUM_UPLOAD_SIZE_LIMIT="Maximum upload size: <strong>%s</strong>" JGLOBAL_MAXLEVEL_DESC="Maximum number of levels of subcategories to show." JGLOBAL_MAXLEVEL_LABEL="Subcategory Levels" JGLOBAL_MENU_SELECTION="Menu Selection:" JGLOBAL_MODIFIED="Modified" JGLOBAL_MODIFIED_DATE="Modified Date" JGLOBAL_MOST_HITS="Most Hits" JGLOBAL_MOST_RECENT_FIRST="Most Recent First" JGLOBAL_MULTI_COLUMN_ORDER_DESC="Order articles down or across columns." JGLOBAL_MULTI_COLUMN_ORDER_LABEL="Multi Column Order" JGLOBAL_MULTI_LEVEL="Multi Level" JGLOBAL_NEWITEMSFIRST_DESC="New items default to the first position. The ordering can be changed after this item is saved." JGLOBAL_NEWITEMSLAST_DESC="New items default to the last position. The ordering can be changed after this item is saved." JGLOBAL_NO_ITEM_SELECTED="No items selected" JGLOBAL_NO_ORDER="No Order" JGLOBAL_NOINDEX_FOLLOW="No index, follow" JGLOBAL_NOINDEX_NOFOLLOW="No index, no follow" JGLOBAL_NONAPPLICABLE="N/A" JGLOBAL_NUM_COLUMNS_DESC="The number of columns in which to show Intro Articles. Normally 1, 2, or 3." JGLOBAL_NUM_COLUMNS_LABEL="# Columns" JGLOBAL_NUM_INTRO_ARTICLES_DESC="Number of articles to show after the leading article. Articles will be shown in columns." JGLOBAL_NUM_INTRO_ARTICLES_LABEL="# Intro Articles" JGLOBAL_NUM_LEADING_ARTICLES_DESC="Number of leading articles to display as full-width at the beginning of the page." JGLOBAL_NUM_LEADING_ARTICLES_LABEL="# Leading Articles" JGLOBAL_NUM_LINKS_DESC="Number of articles to display as links, normally below the Intro Articles." JGLOBAL_NUM_LINKS_LABEL="# Links" JGLOBAL_NUMBER_CATEGORY_ITEMS_DESC="If Show, the number of articles in the category will show." JGLOBAL_NUMBER_CATEGORY_ITEMS_LABEL="Show Article Count" JGLOBAL_NUMBER_ITEMS_LIST_DESC="Default number of articles to list on a page." JGLOBAL_NUMBER_ITEMS_LIST_LABEL="# Articles to List" JGLOBAL_NO_MATCHING_RESULTS="No Matching Results" JGLOBAL_OLDEST_FIRST="Oldest First" JGLOBAL_ORDER_ASCENDING="Ascending" JGLOBAL_ORDER_DESCENDING="Descending" JGLOBAL_ORDER_DIRECTION_LABEL="Direction" JGLOBAL_ORDER_DIRECTION_DESC="Sort order. Descending is highest to lowest. Ascending is lowest to highest." JGLOBAL_ORDERING="Article Order" JGLOBAL_ORDERING_DATE_DESC="If articles are ordered by date, which date to use." JGLOBAL_ORDERING_DATE_LABEL="Date for Ordering" JGLOBAL_OTPMETHOD_NONE="Disable Two Factor Authentication" JGLOBAL_PAGINATION_DESC="Show or hide Pagination support. Pagination provides page links at the bottom of the page that allow the User to navigate to additional pages. These are needed if the Information will not fit on one page." JGLOBAL_PAGINATION_LABEL="Pagination" JGLOBAL_PAGINATION_RESULTS_DESC="Show or hide pagination results information, for example, "Page 1 of 4"." JGLOBAL_PAGINATION_RESULTS_LABEL="Pagination Results" JGLOBAL_PASSWORD="Password" JGLOBAL_PASSWORD_RESET_REQUIRED="You are required to reset your password before proceeding." JGLOBAL_PERMISSIONS_ANCHOR="Set Permissions" JGLOBAL_PREVIEW="Preview" JGLOBAL_PUBLISHED_DATE="Published Date" JGLOBAL_RANDOM_ORDER="Random Order" JGLOBAL_RATINGS="Ratings" JGLOBAL_RATINGS_ASC="Ratings ascending" JGLOBAL_RATINGS_DESC="Ratings descending" JGLOBAL_RECORD_HITS_DESC="Record the number of hits." JGLOBAL_RECORD_HITS_LABEL="Record Hits" JGLOBAL_RECORD_NUMBER="Record ID: %d" JGLOBAL_REMEMBER_ME="Remember Me" JGLOBAL_REVERSE_ORDERING="Article Reverse Order" JGLOBAL_RIGHT="Right" JGLOBAL_ROOT="Root" JGLOBAL_ROOT_PARENT="- No parent -" JGLOBAL_SAVE_HISTORY_OPTIONS_DESC="Automatically save old versions of an item. If set to Yes, old versions of items are saved automatically. When editing, you may restore from a previous version of the item." JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL="Enable Versions" JGLOBAL_SECRETKEY="Secret Key" JGLOBAL_SECRETKEY_HELP="If you have enabled two factor authentication in your user account please enter your secret key. If you do not know what this means, you can leave this field blank." ; The following 4 strings are deprecated and will be removed with 4.0. JGLOBAL_SEF_ADVANCED_DESC="Modern routing enables advanced features but may change your URLs. Legacy routing ensures full compatibility for existing sites. This is configured per component." JGLOBAL_SEF_ADVANCED_LABEL="URL Routing" JGLOBAL_SEF_ADVANCED_LEGACY="Legacy" JGLOBAL_SEF_ADVANCED_MODERN="Modern" JGLOBAL_SEF_NOIDS_DESC="Remove the IDs from the URLs of this component." JGLOBAL_SEF_NOIDS_LABEL="Remove IDs from URLs" JGLOBAL_SEF_TITLE="Routing" JGLOBAL_SELECT_ALLOW_DENY_GROUP="Change %s permission for %s group." JGLOBAL_SELECT_AN_OPTION="Select an option" JGLOBAL_SELECT_NO_RESULTS_MATCH="No results match" JGLOBAL_SELECT_SOME_OPTIONS="Select some options" JGLOBAL_SELECTION_ALL="Select All" JGLOBAL_SELECTION_INVERT="Toggle Selection" JGLOBAL_SELECTION_INVERT_ALL="Toggle All Selections" JGLOBAL_SELECTION_NONE="Clear Selection" JGLOBAL_SHOW_ASSOCIATIONS_DESC="Multilingual only. If set to Show, the associated articles flags or URL Language Code will be displayed." JGLOBAL_SHOW_ASSOCIATIONS_LABEL="Show Associations" JGLOBAL_SHOW_AUTHOR_DESC="If set to Show, the Name of the article's Author will be displayed." JGLOBAL_SHOW_AUTHOR_LABEL="Show Author" JGLOBAL_SHOW_CATEGORY_DESC="If set to Show, the title of the article’s category will show." JGLOBAL_SHOW_CATEGORY_DESCRIPTION_DESC="Show or hide the description of the selected Category." JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL="Category Description" JGLOBAL_SHOW_CATEGORY_IMAGE_DESC="Show or hide the image of the selected Category." JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL="Category Image" JGLOBAL_SHOW_CATEGORY_HEADING_TITLE_TEXT_LABEL="Show Subcategories Text" JGLOBAL_SHOW_CATEGORY_HEADING_TITLE_TEXT_DESC="If Show, the "Subcategories" will show as a subheading on the page. The subheading is usually displayed inside the "H3" tag." JGLOBAL_SHOW_CATEGORY_LABEL="Show Category" JGLOBAL_SHOW_CATEGORY_TITLE="Category Title" JGLOBAL_SHOW_CATEGORY_TITLE_DESC="If Show, the Category Title will show as a subheading on the page. The subheading is usually displayed inside the "H2" tag." JGLOBAL_SHOW_CREATE_DATE_DESC="If set to Show, the date and time an Article was created will be displayed. This is a global setting but can be changed at Menu and Article levels." JGLOBAL_SHOW_CREATE_DATE_LABEL="Show Create Date" JGLOBAL_SHOW_DATE_DESC="Show or hide a date column in the list of articles, or select which date you wish to show." JGLOBAL_SHOW_DATE_LABEL="Show Date" JGLOBAL_SHOW_EMAIL_ICON_DESC="Show or hide the email link. This allows you to email an article." JGLOBAL_SHOW_EMAIL_ICON_LABEL="Show Email" JGLOBAL_SHOW_EMPTY_CATEGORIES_DESC="If Show, empty categories will display. A category is only empty if it has no items or subcategories." JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL="Empty Categories" JGLOBAL_SHOW_FEATURED_ARTICLES_DESC="Select to show, hide or only display featured articles." JGLOBAL_SHOW_FEATURED_ARTICLES_LABEL="Featured Articles" JGLOBAL_SHOW_FEED_LINK_DESC="Show or hide an RSS Feed Link. (A Feed Link will show up as a feed icon in the address bar of most modern browsers)." JGLOBAL_SHOW_FEED_LINK_LABEL="Show Feed Link" JGLOBAL_SHOW_FLAG_DESC="If set to 'Yes', will display language choice as image flags. Otherwise will use the content language URL Language Code." JGLOBAL_SHOW_FLAG_LABEL="Use Image Flags" JGLOBAL_SHOW_FULL_DESCRIPTION="Show full description ..." JGLOBAL_SHOW_HEADINGS_DESC="Show or hide the headings in list layouts." JGLOBAL_SHOW_HEADINGS_LABEL="Table Headings" JGLOBAL_SHOW_HITS_DESC="If set to Show, the number of Hits on a particular Article will be displayed." JGLOBAL_SHOW_HITS_LABEL="Show Hits" JGLOBAL_SHOW_ICONS_DESC="Print and email will utilise icons or text." JGLOBAL_SHOW_ICONS_LABEL="Show Icons" JGLOBAL_SHOW_INTRO_DESC="If set to Show, the Intro Text of the article will show when you drill down to the article. If set to Hide, only the part of the article after the "Read More" break will show." JGLOBAL_SHOW_INTRO_LABEL="Show Intro Text" JGLOBAL_SHOW_MODIFY_DATE_DESC="If set to Show, the date and time an Article was last modified will be displayed." JGLOBAL_SHOW_MODIFY_DATE_LABEL="Show Modify Date" JGLOBAL_SHOW_NAVIGATION_DESC="If set to Show, shows a navigation link (Next, Previous) between articles." JGLOBAL_SHOW_NAVIGATION_LABEL="Show Navigation" JGLOBAL_SHOW_PARENT_CATEGORY_DESC="If set to Show, the title of the article’s parent category will show." JGLOBAL_SHOW_PARENT_CATEGORY_LABEL="Show Parent" JGLOBAL_SHOW_PRINT_ICON_DESC="Show or hide the print. This allows you to print an article." JGLOBAL_SHOW_PRINT_ICON_LABEL="Show Print" JGLOBAL_SHOW_PUBLISH_DATE_DESC="If set to Show, the date and time an Article was published will be displayed. This is a global setting but can be changed at the Category, Menu and Article levels." JGLOBAL_SHOW_PUBLISH_DATE_LABEL="Show Publish Date" JGLOBAL_SHOW_READMORE_DESC="If set to Show, the Read more ...Link will show if Main text has been provided for the Article." JGLOBAL_SHOW_READMORE_LABEL="Show "Read More"" JGLOBAL_SHOW_READMORE_TITLE_DESC="If set to show the title of the Article will be shown on the Read More button." JGLOBAL_SHOW_READMORE_TITLE_LABEL="Show Title with Read More" JGLOBAL_SHOW_READMORE_LIMIT_DESC="Set a limit of number of characters in Article Title to show in Read More button." JGLOBAL_SHOW_READMORE_LIMIT_LABEL="Read More Limit" JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_DESC="Show or hide the subcategories descriptions." JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL="Subcategories Descriptions" JGLOBAL_SHOW_SUBCATEGORY_CONTENT_LABEL="Include Subcategories" JGLOBAL_SHOW_SUBCATEGORY_CONTENT_DESC="If None, only articles from this category will show. If a number, all articles from the category and the subcategories up to and including that level will show in the blog." JGLOBAL_SHOW_TAGS_DESC="Show the tags for this link." JGLOBAL_SHOW_TAGS_LABEL="Show Tags" JGLOBAL_SHOW_TITLE_DESC="If set to Show, the article title is shown." JGLOBAL_SHOW_TITLE_LABEL="Show Title" JGLOBAL_SHOW_UNAUTH_LINKS_DESC="If set to Yes, links to registered content will be shown even if you are not logged-in. You will need to log in to access the full item." JGLOBAL_SHOW_UNAUTH_LINKS_LABEL="Show Unauthorised Links" JGLOBAL_SHOW_VOTE_DESC="If set to show, a voting system will be enabled for Articles." JGLOBAL_SHOW_VOTE_LABEL="Show Voting" JGLOBAL_SINGLE_LEVEL="Single Level" JGLOBAL_SORT_BY="Sort Table By:" JGLOBAL_START_PUBLISH_AFTER_FINISH="Item start publishing date must be before finish publishing date" JGLOBAL_SUBHEADING_DESC="Optional text to show as a subheading." JGLOBAL_SUBHEADING_LABEL="Page Subheading" JGLOBAL_SUBMENU_CHECKIN="Check-in" JGLOBAL_SUBMENU_CLEAR_CACHE="Clear Cache" JGLOBAL_SUBMENU_PURGE_EXPIRED_CACHE="Clear Expired Cache" JGLOBAL_SUBSLIDER_BLOG_EXTENDED_LABEL="The option below gives the ability to include articles from subcategories in the Blog layout." JGLOBAL_SUBSLIDER_BLOG_LAYOUT_LABEL="If a field is left blank, global settings will be used." JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL="These options are also used when you select <br />one of the category links, on the first page and/or thereafter,<br />unless they are changed for a specific menu item." JGLOBAL_TITLE="Title" JGLOBAL_TITLE_ASC="Title ascending" JGLOBAL_TITLE_DESC="Title descending" JGLOBAL_TITLE_ALPHABETICAL="Title Alphabetical" JGLOBAL_TITLE_REVERSE_ALPHABETICAL="Title Reverse Alphabetical" JGLOBAL_TOGGLE_FEATURED="Toggle featured status." JGLOBAL_TOP="Top" JGLOBAL_TPL_CPANEL_LINK_TEXT="Return to Control Panel" JGLOBAL_TYPE_OR_SELECT_CATEGORY="Type or Select a Category" JGLOBAL_TYPE_OR_SELECT_SOME_OPTIONS="Type or select some options" JGLOBAL_TYPE_OR_SELECT_SOME_TAGS="Type or select some tags" JGLOBAL_USE_GLOBAL="Use Global" JGLOBAL_USE_GLOBAL_VALUE="Use Global (%s)" JGLOBAL_USERNAME="Username" JGLOBAL_VALIDATION_FORM_FAILED="Invalid form" JGLOBAL_VIEW_SITE="View Site" JGLOBAL_VOTES="Votes" JGLOBAL_VOTES_ASC="Votes ascending" JGLOBAL_VOTES_DESC="Votes descending" JGLOBAL_WARNJAVASCRIPT="Warning! JavaScript must be enabled for proper operation of the Administrator Backend." JGLOBAL_WIDTH="Width" JGRID_HEADING_ACCESS="Access" JGRID_HEADING_ACCESS_ASC="Access ascending" JGRID_HEADING_ACCESS_DESC="Access descending" JGRID_HEADING_CREATED_BY="Created by" JGRID_HEADING_ID="ID" JGRID_HEADING_ID_ASC="ID ascending" JGRID_HEADING_ID_DESC="ID descending" JGRID_HEADING_LANGUAGE="Language" JGRID_HEADING_LANGUAGE_ASC="Language ascending" JGRID_HEADING_LANGUAGE_DESC="Language descending" JGRID_HEADING_MENU_ITEM_TYPE="Menu Item Type" JGRID_HEADING_ORDERING="Ordering" JGRID_HEADING_ORDERING_ASC="Ordering ascending" JGRID_HEADING_ORDERING_DESC="Ordering descending" JHELP_COMPONENTS_ACTIONLOGS="Components_Actionlogs" JHELP_COMPONENTS_ASSOCIATIONS="Components_Associations" JHELP_COMPONENTS_ASSOCIATIONS_EDIT="Components_Associations_Edit" JHELP_COMPONENTS_BANNERS_BANNERS_EDIT="Components_Banners_Banners_Edit" JHELP_COMPONENTS_BANNERS_BANNERS="Components_Banners_Banners" JHELP_COMPONENTS_BANNERS_CATEGORIES="Components_Banners_Categories" JHELP_COMPONENTS_BANNERS_CATEGORY_ADD="Components_Banners_Categories_Edit" JHELP_COMPONENTS_BANNERS_CATEGORY_EDIT="Components_Banners_Categories_Edit" JHELP_COMPONENTS_BANNERS_CLIENTS_EDIT="Components_Banners_Clients_Edit" JHELP_COMPONENTS_BANNERS_CLIENTS="Components_Banners_Clients" JHELP_COMPONENTS_BANNERS_TRACKS="Components_Banners_Tracks" JHELP_COMPONENTS_CACHE_MANAGER_SETTINGS="Components_Cache_Manager_Settings" JHELP_COMPONENTS_CHECK-IN_CONFIGURATION="Components_Check-in_Configuration" JHELP_COMPONENTS_COM_ACTIONLOGS_OPTIONS="Components_Actionlogs" JHELP_COMPONENTS_COM_ASSOCIATIONS_OPTIONS="Components_Associations_Options" JHELP_COMPONENTS_COM_BANNERS_OPTIONS="Components_Banner_Manager_Options" JHELP_COMPONENTS_COM_CACHE_OPTIONS="Components_Cache_Manager_Settings" JHELP_COMPONENTS_COM_CHECKIN_OPTIONS="Components_Check_in_Configuration" JHELP_COMPONENTS_COM_CONTACT_OPTIONS="Components_Contact_Manager_Options" JHELP_COMPONENTS_COM_CONTENT_OPTIONS="Components_Article_Manager_Options" JHELP_COMPONENTS_COM_FINDER_OPTIONS="Components_Smart_Search_Configuration" JHELP_COMPONENTS_COM_INSTALLER_OPTIONS="Components_Installer_Configuration" JHELP_COMPONENTS_COM_JOOMLAUPDATE_OPTIONS="Components_Joomla_Update_Configuration" JHELP_COMPONENTS_COM_LANGUAGES_OPTIONS="Components_Language_Manager_Options" JHELP_COMPONENTS_COM_MEDIA_OPTIONS="Components_Media_Manager_Options" JHELP_COMPONENTS_COM_MENUS_OPTIONS="Components_Menus_Configuration" JHELP_COMPONENTS_COM_MESSAGES_OPTIONS="Components_Messages_Configuration" JHELP_COMPONENTS_COM_MODULES_OPTIONS="Components_Module_Manager_Options" JHELP_COMPONENTS_COM_NEWSFEEDS_OPTIONS="Components_News_Feed_Manager_Options" JHELP_COMPONENTS_COM_PLUGINS_OPTIONS="Components_Plugin_Manager_Options" JHELP_COMPONENTS_COM_PRIVACY_OPTIONS="Components_Privacy_Options" JHELP_COMPONENTS_COM_POSTINSTALL_OPTIONS="Components_Post_installation_Messages_Configuration" JHELP_COMPONENTS_COM_REDIRECT_OPTIONS="Components_Redirect_Manager_Options" JHELP_COMPONENTS_COM_SEARCH_OPTIONS="Components_Search_Manager_Options" JHELP_COMPONENTS_COM_TAGS_OPTIONS="Components_Tags_Manager_Options" JHELP_COMPONENTS_COM_TEMPLATES_OPTIONS="Components_Template_Manager_Options" JHELP_COMPONENTS_COM_USERS_OPTIONS="Components_Users_Configuration" JHELP_COMPONENTS_COM_WEBLINKS_OPTIONS="Components_Web_Links_Manager_Options" JHELP_COMPONENTS_CONTACT_CATEGORIES="Components_Contacts_Categories" JHELP_COMPONENTS_CONTACT_CATEGORY_ADD="Components_Contacts_Categories_Edit" JHELP_COMPONENTS_CONTACT_CATEGORY_EDIT="Components_Contacts_Categories_Edit" JHELP_COMPONENTS_CONTACTS_CONTACTS_EDIT="Components_Contacts_Contacts_Edit" JHELP_COMPONENTS_CONTACTS_CONTACTS="Components_Contacts_Contacts" JHELP_COMPONENTS_CONTENT_CATEGORIES="Components_Content_Categories" JHELP_COMPONENTS_CONTENT_CATEGORY_ADD="Components_Content_Categories_Edit" JHELP_COMPONENTS_CONTENT_CATEGORY_EDIT="Components_Content_Categories_Edit" JHELP_COMPONENTS_FIELDS_FIELDS="Components_Fields_Fields" JHELP_COMPONENTS_FIELDS_FIELDS_EDIT="Components_Fields_Fields_Edit" JHELP_COMPONENTS_FIELDS_FIELD_GROUPS="Components_Fields_Field_Groups" JHELP_COMPONENTS_FIELDS_FIELD_GROUPS_EDIT="Components_Fields_Field_Groups_Edit" JHELP_COMPONENTS_FINDER_MANAGE_CONTENT_MAPS="Components_Finder_Manage_Content_Maps" JHELP_COMPONENTS_FINDER_MANAGE_INDEXED_CONTENT="Components_Finder_Manage_Indexed_Content" JHELP_COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS_EDIT="Components_Finder_Manage_Search_Filters_Edit" JHELP_COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS="Components_Finder_Manage_Search_Filters" JHELP_COMPONENTS_INSTALLER_CONFIGURATION="Components_Installer_Configuration" JHELP_COMPONENTS_JOOMLA_UPDATE="Components_Joomla_Update" JHELP_COMPONENTS_JOOMLA_UPDATE_CONFIGURATION="Components_Joomla_Update_Configuration" JHELP_COMPONENTS_MENUS_CONFIGURATION="Components_Menus_Configuration" JHELP_COMPONENTS_MESSAGES_CONFIGURATION="Components_Messages_Configuration" JHELP_COMPONENTS_MESSAGING_INBOX="Components_Messaging_Inbox" JHELP_COMPONENTS_MESSAGING_READ="Components_Messaging_Read" JHELP_COMPONENTS_MESSAGING_WRITE="Components_Messaging_Write" JHELP_COMPONENTS_NEWSFEEDS_CATEGORIES="Components_Newsfeeds_Categories" JHELP_COMPONENTS_NEWSFEEDS_CATEGORY_ADD="Components_Newsfeeds_Categories_Edit" JHELP_COMPONENTS_NEWSFEEDS_CATEGORY_EDIT="Components_Newsfeeds_Categories_Edit" JHELP_COMPONENTS_NEWSFEEDS_FEEDS_EDIT="Components_Newsfeeds_Feeds_Edit" JHELP_COMPONENTS_NEWSFEEDS_FEEDS="Components_Newsfeeds_Feeds" JHELP_COMPONENTS_POST_INSTALLATION_MESSAGES="Components_Post_installation_Messages" JHELP_COMPONENTS_PRIVACY_CAPABILITIES="Components_Privacy_Capabilities" JHELP_COMPONENTS_PRIVACY_CONSENTS="Components_Privacy_Consents" JHELP_COMPONENTS_PRIVACY_DASHBOARD="Components_Privacy_Dashboard" JHELP_COMPONENTS_PRIVACY_REQUEST="Components_Privacy_Request" JHELP_COMPONENTS_PRIVACY_REQUEST_EDIT="Components_Privacy_Request_Edit" JHELP_COMPONENTS_PRIVACY_REQUESTS="Components_Privacy_Requests" JHELP_COMPONENTS_REDIRECT_MANAGER_EDIT="Components_Redirect_Manager_Edit" JHELP_COMPONENTS_REDIRECT_MANAGER="Components_Redirect_Manager" JHELP_COMPONENTS_SEARCH="Components_Search" JHELP_COMPONENTS_SMART_SEARCH_CONFIGURATION="Components_Smart_Search_Configuration" JHELP_COMPONENTS_TAGS_MANAGER="Components_Tags_Manager" JHELP_COMPONENTS_TAGS_MANAGER_EDIT="Components_Tags_Manager_Edit" JHELP_COMPONENTS_USERS_CATEGORIES="Users_User_Note_Categories" JHELP_COMPONENTS_USERS_CATEGORY_ADD="Users_User_Note_Category_Edit" JHELP_COMPONENTS_USERS_CATEGORY_EDIT="Users_User_Note_Category_Edit" JHELP_COMPONENTS_WEBLINKS_CATEGORIES="Components_Weblinks_Categories" JHELP_COMPONENTS_WEBLINKS_CATEGORY_ADD="Components_Weblinks_Categories_Edit" JHELP_COMPONENTS_WEBLINKS_CATEGORY_EDIT="Components_Weblinks_Categories_Edit" JHELP_COMPONENTS_WEBLINKS_LINKS_EDIT="Components_Weblinks_Links_Edit" JHELP_COMPONENTS_WEBLINKS_LINKS="Components_Weblinks_Links" JHELP_CONTENT_ARTICLE_MANAGER="Content_Article_Manager" JHELP_CONTENT_ARTICLE_MANAGER_EDIT="Content_Article_Manager_Edit" JHELP_CONTENT_FEATURED_ARTICLES="Content_Featured_Articles" JHELP_CONTENT_MEDIA_MANAGER="Content_Media_Manager" JHELP_EXTENSIONS_EXTENSION_MANAGER_DATABASE="Extensions_Extension_Manager_Database" JHELP_EXTENSIONS_EXTENSION_MANAGER_DISCOVER="Extensions_Extension_Manager_Discover" JHELP_EXTENSIONS_EXTENSION_MANAGER_INSTALL="Extensions_Extension_Manager_Install" JHELP_EXTENSIONS_EXTENSION_MANAGER_LANGUAGES="Extensions_Extension_Manager_languages" JHELP_EXTENSIONS_EXTENSION_MANAGER_MANAGE="Extensions_Extension_Manager_Manage" JHELP_EXTENSIONS_EXTENSION_MANAGER_UPDATE="Extensions_Extension_Manager_Update" JHELP_EXTENSIONS_EXTENSION_MANAGER_UPDATESITES="Extensions_Extension_Manager_Updatesites" JHELP_EXTENSIONS_EXTENSION_MANAGER_WARNINGS="Extensions_Extension_Manager_Warnings" JHELP_EXTENSIONS_LANGUAGE_MANAGER_CONTENT="Extensions_Language_Manager_Content" JHELP_EXTENSIONS_LANGUAGE_MANAGER_EDIT="Extensions_Language_Manager_Edit" JHELP_EXTENSIONS_LANGUAGE_MANAGER_INSTALLED="Extensions_Language_Manager_Installed" JHELP_EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES="Extensions_Language_Manager_Overrides" JHELP_EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES_EDIT="Extensions_Language_Manager_Overrides_Edit" JHELP_EXTENSIONS_MODULE_MANAGER="Extensions_Module_Manager" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_CUSTOM="Extensions_Module_Manager_Admin_Custom" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_FEED="Extensions_Module_Manager_Admin_Feed" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_LATEST="Extensions_Module_Manager_Admin_Latest" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_LATESTACTIONS="Extensions_Module_Manager_Admin_Latestactions" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_LOGGED="Extensions_Module_Manager_Admin_Logged" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_LOGIN="Extensions_Module_Manager_Admin_Login" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_MENU="Extensions_Module_Manager_Admin_Menu" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_MULTILANG="Extensions_Module_Manager_Admin_Multilang" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_ONLINE="Extensions_Module_Manager_Admin_Online" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_POPULAR="Extensions_Module_Manager_Admin_Popular" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_PRIVACY_DASHBOARD="Extensions_Module_Manager_Admin_Privacy_Dashboard" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_QUICKICON="Extensions_Module_Manager_Admin_Quickicon" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_STATUS="Extensions_Module_Manager_Admin_Status" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_SUBMENU="Extensions_Module_Manager_Admin_Submenu" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_TITLE="Extensions_Module_Manager_Admin_Title" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_TOOLBAR="Extensions_Module_Manager_Admin_Toolbar" JHELP_EXTENSIONS_MODULE_MANAGER_ADMIN_UNREAD="Extensions_Module_Manager_Admin_Unread" JHELP_EXTENSIONS_MODULE_MANAGER_ARTICLES_ARCHIVE="Extensions_Module_Manager_Articles_Archive" JHELP_EXTENSIONS_MODULE_MANAGER_ARTICLES_CATEGORIES="Extensions_Module_Manager_Articles_Categories" JHELP_EXTENSIONS_MODULE_MANAGER_ARTICLES_CATEGORY="Extensions_Module_Manager_Articles_Category" JHELP_EXTENSIONS_MODULE_MANAGER_ARTICLES_NEWSFLASH="Extensions_Module_Manager_Articles_Newsflash" JHELP_EXTENSIONS_MODULE_MANAGER_ARTICLES_RELATED="Extensions_Module_Manager_Articles_Related" JHELP_EXTENSIONS_MODULE_MANAGER_BANNERS="Extensions_Module_Manager_Banners" JHELP_EXTENSIONS_MODULE_MANAGER_BREADCRUMBS="Extensions_Module_Manager_Breadcrumbs" JHELP_EXTENSIONS_MODULE_MANAGER_CUSTOM_HTML="Extensions_Module_Manager_Custom_HTML" JHELP_EXTENSIONS_MODULE_MANAGER_EDIT="Extensions_Module_Manager_Edit" JHELP_EXTENSIONS_MODULE_MANAGER_FEED_DISPLAY="Extensions_Module_Manager_Feed_Display" JHELP_EXTENSIONS_MODULE_MANAGER_FOOTER="Extensions_Module_Manager_Footer" JHELP_EXTENSIONS_MODULE_MANAGER_LANGUAGE_SWITCHER="Extensions_Module_Manager_Language_Switcher" JHELP_EXTENSIONS_MODULE_MANAGER_LATEST_NEWS="Extensions_Module_Manager_Latest_News" JHELP_EXTENSIONS_MODULE_MANAGER_LATEST_USERS="Extensions_Module_Manager_Latest_Users" JHELP_EXTENSIONS_MODULE_MANAGER_LOGIN="Extensions_Module_Manager_Login" JHELP_EXTENSIONS_MODULE_MANAGER_MENU="Extensions_Module_Manager_Menu" JHELP_EXTENSIONS_MODULE_MANAGER_MOST_READ="Extensions_Module_Manager_Most_Read" JHELP_EXTENSIONS_MODULE_MANAGER_RANDOM_IMAGE="Extensions_Module_Manager_Random_Image" JHELP_EXTENSIONS_MODULE_MANAGER_SEARCH="Extensions_Module_Manager_Search" JHELP_EXTENSIONS_MODULE_MANAGER_SMART_SEARCH="Extensions_Module_Manager_Smart_Search" JHELP_EXTENSIONS_MODULE_MANAGER_STATISTICS="Extensions_Module_Manager_Statistics" JHELP_EXTENSIONS_MODULE_MANAGER_SYNDICATION_FEEDS="Extensions_Module_Manager_Syndication_Feeds" JHELP_EXTENSIONS_MODULE_MANAGER_TAGS_POPULAR="Extensions_Module_Manager_Tags_Popular" JHELP_EXTENSIONS_MODULE_MANAGER_TAGS_SIMILAR="Extensions_Module_Manager_Tags_Similar" JHELP_EXTENSIONS_MODULE_MANAGER_WEBLINKS="Extensions_Module_Manager_Weblinks" JHELP_EXTENSIONS_MODULE_MANAGER_WHO_ONLINE="Extensions_Module_Manager_Who_Online" JHELP_EXTENSIONS_MODULE_MANAGER_WRAPPER="Extensions_Module_Manager_Wrapper" JHELP_EXTENSIONS_PLUGIN_MANAGER="Extensions_Plugin_Manager" JHELP_EXTENSIONS_PLUGIN_MANAGER_EDIT="Extensions_Plugin_Manager_Edit" JHELP_EXTENSIONS_TEMPLATE_MANAGER_STYLES="Extensions_Template_Manager_Styles" JHELP_EXTENSIONS_TEMPLATE_MANAGER_STYLES_EDIT="Extensions_Template_Manager_Styles_Edit" JHELP_EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES="Extensions_Template_Manager_Templates" JHELP_EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES_EDIT="Extensions_Template_Manager_Templates_Edit" JHELP_EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES_EDIT_SOURCE="Extensions_Template_Manager_Templates_Edit_Source" JHELP_GLOSSARY="Glossary" JHELP_MENUS_MENU_ITEM_ARTICLE_ARCHIVED="Menus_Menu_Item_Article_Archived" JHELP_MENUS_MENU_ITEM_ARTICLE_CATEGORIES="Menus_Menu_Item_Article_Categories" JHELP_MENUS_MENU_ITEM_ARTICLE_CATEGORY_BLOG="Menus_Menu_Item_Article_Category_Blog" JHELP_MENUS_MENU_ITEM_ARTICLE_CATEGORY_LIST="Menus_Menu_Item_Article_Category_List" JHELP_MENUS_MENU_ITEM_ARTICLE_CREATE="Menus_Menu_Item_Article_Create" JHELP_MENUS_MENU_ITEM_ARTICLE_FEATURED="Menus_Menu_Item_Article_Featured" JHELP_MENUS_MENU_ITEM_ARTICLE_SINGLE_ARTICLE="Menus_Menu_Item_Article_Single_Article" JHELP_MENUS_MENU_ITEM_CONTACT_CATEGORIES="Menus_Menu_Item_Contact_Categories" JHELP_MENUS_MENU_ITEM_CONTACT_CATEGORY="Menus_Menu_Item_Contact_Category" JHELP_MENUS_MENU_ITEM_CONTACT_FEATURED="Menus_Menu_Item_Contact_Featured" JHELP_MENUS_MENU_ITEM_CONTACT_SINGLE_CONTACT="Menus_Menu_Item_Contact_Single_Contact" JHELP_MENUS_MENU_ITEM_DISPLAY_SITE_CONFIGURATION="Menus_Menu_Item_Display_Site_Configuration" JHELP_MENUS_MENU_ITEM_DISPLAY_TEMPLATE_OPTIONS="Menus_Menu_Item_Display_Template_Options" JHELP_MENUS_MENU_ITEM_EXTERNAL_URL="Menus_Menu_Item_External_URL" JHELP_MENUS_MENU_ITEM_FINDER_SEARCH="Menus_Menu_Item_Finder_Search" JHELP_MENUS_MENU_ITEM_MANAGER="Menus_Menu_Item_Manager" JHELP_MENUS_MENU_ITEM_MANAGER_EDIT="Menus_Menu_Item_Manager_Edit" JHELP_MENUS_MENU_ITEM_MENU_ITEM_ALIAS="Menus_Menu_Item_Menu_Item_Alias" JHELP_MENUS_MENU_ITEM_MENU_ITEM_HEADING="Menus_Menu_Item_Menu_Item_Heading" JHELP_MENUS_MENU_ITEM_NEWSFEED_CATEGORIES="Menus_Menu_Item_Newsfeed_Categories" JHELP_MENUS_MENU_ITEM_NEWSFEED_CATEGORY="Menus_Menu_Item_Newsfeed_Category" JHELP_MENUS_MENU_ITEM_NEWSFEED_SINGLE_NEWSFEED="Menus_Menu_Item_Newsfeed_Single_Newsfeed" JHELP_MENUS_MENU_ITEM_PRIVACY_CONFIRM_REQUEST="Menus_Menu_Item_Privacy_Confirm_Request" JHELP_MENUS_MENU_ITEM_PRIVACY_CREATE_REQUEST="Menus_Menu_Item_Privacy_Create_Request" JHELP_MENUS_MENU_ITEM_PRIVACY_REMIND_REQUEST="Menus_Menu_Item_Privacy_Remind_Request" JHELP_MENUS_MENU_ITEM_SEARCH_RESULTS="Menus_Menu_Item_Search_Results" JHELP_MENUS_MENU_ITEM_TAGS_ITEMS_COMPACT_LIST="Menus_Menu_Item_Tags_Items_Compact_List" JHELP_MENUS_MENU_ITEM_TAGS_ITEMS_LIST="Menus_Menu_Item_Tags_Items_List" JHELP_MENUS_MENU_ITEM_TAGS_ITEMS_LIST_ALL="Menus_Menu_Item_Tags_Items_List_All" JHELP_MENUS_MENU_ITEM_TEXT_SEPARATOR="Menus_Menu_Item_Text_Separator" JHELP_MENUS_MENU_ITEM_USER_LOGIN="Menus_Menu_Item_User_Login" JHELP_MENUS_MENU_ITEM_USER_LOGOUT="Menus_Menu_Item_User_Logout" JHELP_MENUS_MENU_ITEM_USER_PASSWORD_RESET="Menus_Menu_Item_User_Password_Reset" JHELP_MENUS_MENU_ITEM_USER_PROFILE="Menus_Menu_Item_User_Profile" JHELP_MENUS_MENU_ITEM_USER_PROFILE_EDIT="Menus_Menu_Item_User_Profile_Edit" JHELP_MENUS_MENU_ITEM_USER_REGISTRATION="Menus_Menu_Item_User_Registration" JHELP_MENUS_MENU_ITEM_USER_REMINDER="Menus_Menu_Item_User_Reminder" JHELP_MENUS_MENU_ITEM_WEBLINK_CATEGORIES="Menus_Menu_Item_Weblink_Categories" JHELP_MENUS_MENU_ITEM_WEBLINK_CATEGORY="Menus_Menu_Item_Weblink_Category" JHELP_MENUS_MENU_ITEM_WEBLINK_SUBMIT="Menus_Menu_Item_Weblink_Submit" JHELP_MENUS_MENU_ITEM_WRAPPER="Menus_Menu_Item_Wrapper" JHELP_MENUS_MENU_MANAGER="Menus_Menu_Manager" JHELP_MENUS_MENU_MANAGER_EDIT="Menus_Menu_Manager_Edit" JHELP_SITE_GLOBAL_CONFIGURATION="Site_Global_Configuration" JHELP_SITE_MAINTENANCE_CLEAR_CACHE="Site_Maintenance_Clear_Cache" JHELP_SITE_MAINTENANCE_GLOBAL_CHECK-IN="Site_Maintenance_Global_Check-in" JHELP_SITE_MAINTENANCE_PURGE_EXPIRED_CACHE="Site_Maintenance_Purge_Expired_Cache" JHELP_SITE_SYSTEM_INFORMATION="Site_System_Information" JHELP_ADMIN_USER_PROFILE_EDIT="Site_My_Profile" JHELP_START_HERE="Start_Here" JHELP_USERS_ACCESS_LEVELS="Users_Access_Levels" JHELP_USERS_ACCESS_LEVELS_EDIT="Users_Access_Levels_Edit" JHELP_USERS_DEBUG_GROUPS="Users_Debug_Groups" JHELP_USERS_DEBUG_USERS="Users_Debug_Users" JHELP_USERS_GROUPS="Users_Groups" JHELP_USERS_GROUPS_EDIT="Users_Groups_Edit" JHELP_USERS_MASS_MAIL_USERS="Users_Mass_Mail_Users" JHELP_USERS_USER_MANAGER="Users_User_Manager" JHELP_USERS_USER_MANAGER_EDIT="Users_User_Manager_Edit" JHELP_USERS_USER_NOTES="Users_User_Notes" JHELP_USERS_USER_NOTES_EDIT="Users_User_Notes_Edit" ; if there is an error connecting database before initialisation, en-GB.lib_joomla.ini can't be loaded ; we therefore have to load the strings from en-GB.ini JLIB_DATABASE_ERROR_ADAPTER_MYSQL="The MySQL adapter 'mysql' is not available." JLIB_DATABASE_ERROR_ADAPTER_MYSQLI="The MySQL adapter 'mysqli' is not available." JLIB_DATABASE_ERROR_CONNECT_DATABASE="Unable to connect to the Database: %s" JLIB_DATABASE_ERROR_CONNECT_MYSQL="Could not connect to MySQL." JLIB_DATABASE_ERROR_DATABASE_CONNECT="Could not connect to database" JLIB_DATABASE_ERROR_LOAD_DATABASE_DRIVER="Unable to load Database Driver: %s" JLIB_ERROR_INFINITE_LOOP="Infinite loop detected in JError" JOPTION_ACCESS_SHOW_ALL_ACCESS="Show All Access" JOPTION_ACCESS_SHOW_ALL_GROUPS="Show All Groups" JOPTION_ACCESS_SHOW_ALL_LEVELS="Show All Access Levels" JOPTION_ALL_CATEGORIES="- All Categories -" JOPTION_ANY_CATEGORY="Any Category" JOPTION_ANY="Any" JOPTION_DO_NOT_USE="- None Selected -" JOPTION_FROM_COMPONENT="---From Component---" JOPTION_FROM_MODULE="---From Module---" JOPTION_FROM_TEMPLATE="---From %s Template---" JOPTION_FROM_STANDARD="---From Global Options---" JOPTION_MENUS="Menus" JOPTION_NO_USER="- No User -" JOPTION_OPTIONAL="Optional" JOPTION_ORDER_FIRST="Order First" JOPTION_ORDER_LAST="Order Last" JOPTION_REQUIRED="Required" JOPTION_SELECT_ACCESS="- Select Access -" JOPTION_SELECT_AUTHOR_ALIAS="- Select Author Alias -" JOPTION_SELECT_AUTHOR_ALIASES="- Select Author Aliases -" JOPTION_SELECT_AUTHOR="- Select Author -" JOPTION_SELECT_AUTHORS="- Select Authors -" JOPTION_SELECT_CATEGORY="- Select Category -" JOPTION_SELECT_EDITOR="- Select Editor -" JOPTION_SELECT_IMAGE="- Select Image -" JOPTION_SELECT_LANGUAGE="- Select Language -" JOPTION_SELECT_MENU="- Select Menu -" JOPTION_SELECT_MENU_ITEM="- Select Menu Item -" JOPTION_SELECT_PUBLISHED="- Select Status -" JOPTION_SELECT_TEMPLATE="- Select Template -" JOPTION_SELECT_MAX_LEVELS="- Select Max Levels -" JOPTION_SELECT_TAG="- Select Tag -" JOPTION_UNASSIGNED="Unassigned" JOPTION_USE_DEFAULT_MODULE_SETTING="- Use Default Module Setting -" JOPTION_USE_DEFAULT="- Use Default -" JOPTION_USE_MENU_REQUEST_SETTING="- Use Menu or Request Setting -" JSEARCH_FILTER_LABEL="Filter:" JSEARCH_FILTER_CLEAR="Clear" JSEARCH_FILTER_SUBMIT="Search" JSEARCH_FILTER="Search" JSEARCH_TITLE="Search %s" JSEARCH_RESET="Reset" JTOGGLE_SIDEBAR_LABEL="Sidebar" JTOGGLE_HIDE_SIDEBAR="Hide the sidebar" JTOGGLE_SHOW_SIDEBAR="Show the sidebar" JTOOLBAR_APPLY="Save" JTOOLBAR_ARCHIVE="Archive" JTOOLBAR_ASSIGN="Assign" JTOOLBAR_ASSOCIATIONS="Associations" JTOOLBAR_BACK="Back" JTOOLBAR_BATCH="Batch" JTOOLBAR_BULK_IMPORT="Bulk Import" JTOOLBAR_CANCEL="Cancel" JTOOLBAR_CHECKIN="Check-in" JTOOLBAR_CLOSE="Close" JTOOLBAR_DEFAULT="Default" JTOOLBAR_DELETE="Delete" JTOOLBAR_DELETE_ALL="Delete All" JTOOLBAR_DISABLE="Disable" JTOOLBAR_DUPLICATE="Duplicate" JTOOLBAR_EDIT="Edit" JTOOLBAR_EDIT_CSS="Edit CSS" JTOOLBAR_EDIT_HTML="Edit HTML" JTOOLBAR_EMPTY_TRASH="Empty trash" JTOOLBAR_ENABLE="Enable" JTOOLBAR_EXPORT="Export" JTOOLBAR_HELP="Help" JTOOLBAR_INSTALL="Install" JTOOLBAR_NEW="New" JTOOLBAR_OPTIONS="Options" JTOOLBAR_PUBLISH="Publish" JTOOLBAR_PURGE_CACHE="Clear Cache" JTOOLBAR_REBUILD="Rebuild" JTOOLBAR_REBUILD_FAILED="Rebuild failed: %s" JTOOLBAR_REBUILD_SUCCESS="Successfully rebuilt" JTOOLBAR_REFRESH_CACHE="Refresh Cache" JTOOLBAR_REMOVE="Remove" JTOOLBAR_SAVE="Save & Close" JTOOLBAR_SAVE_AND_NEW="Save & New" JTOOLBAR_SAVE_AS_COPY="Save as Copy" JTOOLBAR_UNARCHIVE="Unarchive" JTOOLBAR_UNINSTALL="Uninstall" JTOOLBAR_UNPUBLISH="Unpublish" JTOOLBAR_UPLOAD="Upload" JTOOLBAR_TRASH="Trash" JTOOLBAR_UNTRASH="Untrash" JTOOLBAR_VERSIONS="Versions" JWARNING_PUBLISH_MUST_SELECT="You must select at least one item to publish." JWARNING_ARCHIVE_MUST_SELECT="You must select at least one item to archive." JWARNING_UNPUBLISH_MUST_SELECT="You must select at least one item to unpublish." JWARNING_TRASH_MUST_SELECT="You must select at least one item to remove." JWARNING_DELETE_MUST_SELECT="You must select at least one item to permanently delete." JWARNING_REMOVE_ROOT_USER="You are logged-in using the emergency Root User setting in configuration.php.<br />You should remove $root_user from the configuration.php as soon as you have restored control to your site to avoid future security breaches.<br /><a href='%s'>Select here to try to do it automatically.</a>" JWARNING_REMOVE_ROOT_USER_ADMIN="The emergency Root User setting is enabled for the user(id): %s.<br />You should remove $root_user from the configuration.php as soon as you have restored control to your site to avoid future security breaches.<br /><a href='%s'>Select here to try to do it automatically.</a>" ; Date format DATE_FORMAT_LC="l, d F Y" DATE_FORMAT_LC1="l, d F Y" DATE_FORMAT_LC2="l, d F Y H:i" DATE_FORMAT_LC3="d F Y" DATE_FORMAT_LC4="Y-m-d" DATE_FORMAT_LC5="Y-m-d H:i" DATE_FORMAT_LC6="Y-m-d H:i:s" DATE_FORMAT_JS1="y-m-d" DATE_FORMAT_CALENDAR_DATE="%Y-%m-%d" DATE_FORMAT_CALENDAR_DATETIME="%Y-%m-%d %H:%M:%S" DATE_FORMAT_FILTER_DATE="Y-m-d" DATE_FORMAT_FILTER_DATETIME="Y-m-d H:i:s" ; Months JANUARY_SHORT="Jan" JANUARY="January" FEBRUARY_SHORT="Feb" FEBRUARY="February" MARCH_SHORT="Mar" MARCH="March" APRIL_SHORT="Apr" APRIL="April" MAY_SHORT="May" MAY="May" JUNE_SHORT="Jun" JUNE="June" JULY_SHORT="Jul" JULY="July" AUGUST_SHORT="Aug" AUGUST="August" SEPTEMBER_SHORT="Sep" SEPTEMBER="September" OCTOBER_SHORT="Oct" OCTOBER="October" NOVEMBER_SHORT="Nov" NOVEMBER="November" DECEMBER_SHORT="Dec" DECEMBER="December" ; Days of the Week SAT="Sat" SATURDAY="Saturday" SUN="Sun" SUNDAY="Sunday" MON="Mon" MONDAY="Monday" TUE="Tue" TUESDAY="Tuesday" WED="Wed" WEDNESDAY="Wednesday" THU="Thu" THURSDAY="Thursday" FRI="Fri" FRIDAY="Friday" ; Localised number format DECIMALS_SEPARATOR="." THOUSANDS_SEPARATOR="," ; Time Zones - this data has been removed as it is no longer used by Joomla 3.x ; Mailer Codes PHPMAILER_PROVIDE_ADDRESS="You must provide at least one recipient email address." PHPMAILER_MAILER_IS_NOT_SUPPORTED="Mailer is not supported." PHPMAILER_EXECUTE="Could not execute: " PHPMAILER_EXTENSION_MISSING="Extension missing: " PHPMAILER_INSTANTIATE="Could not start mail function." PHPMAILER_AUTHENTICATE="SMTP Error! Could not authenticate." PHPMAILER_FROM_FAILED="The following from address failed: " PHPMAILER_RECIPIENTS_FAILED="SMTP Error! The following recipients failed: " PHPMAILER_DATA_NOT_ACCEPTED="SMTP Error! Data not accepted." PHPMAILER_CONNECT_HOST="SMTP Error! Could not connect to SMTP host." PHPMAILER_FILE_ACCESS="Could not access file: " PHPMAILER_FILE_OPEN="File Error: Could not open file: " PHPMAILER_ENCODING="Unknown encoding: " PHPMAILER_SIGNING_ERROR="Signing error: " PHPMAILER_SMTP_ERROR="SMTP server error: " PHPMAILER_EMPTY_MESSAGE="Empty message body" PHPMAILER_INVALID_ADDRESS="Invalid address" PHPMAILER_VARIABLE_SET="Can't set or reset variable: " PHPMAILER_SMTP_CONNECT_FAILED="SMTP connect failed" PHPMAILER_TLS="Could not start TLS" ; Database types (allows for a more descriptive label than the internal name) MYSQL="MySQL" MYSQLI="MySQLi" ORACLE="Oracle" PGSQL="PostgreSQL (PDO)" PDOMYSQL="MySQL (PDO)" POSTGRESQL="PostgreSQL" SQLAZURE="Microsoft SQL Azure" SQLITE="SQLite" SQLSRV="Microsoft SQL Server" ; Search tools JSEARCH_TOOLS="Search Tools" JSEARCH_TOOLS_DESC="Filter the list items." JSEARCH_TOOLS_ORDERING="Order by:" PKb��\"j�&language/en-GB/en-GB.com_cache.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CACHE="Cache" COM_CACHE_CACHE_VIEW_DEFAULT_DESC="Maintenance: Clear Cache" COM_CACHE_CACHE_VIEW_DEFAULT_TITLE="Clear Cache" COM_CACHE_PURGE_VIEW_DEFAULT_DESC="Maintenance: Clear Expired Cache" COM_CACHE_PURGE_VIEW_DEFAULT_TITLE="Clear Expired Cache" COM_CACHE_XML_DESCRIPTION="Component for cache management." PKb��\fkXX1language/en-GB/en-GB.plg_search_newsfeeds.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_NEWSFEEDS="Search - News Feeds" PLG_SEARCH_NEWSFEEDS_XML_DESCRIPTION="Enables searching of news feeds." PKb��\�H"�hh*language/en-GB/en-GB.com_languages.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_LANGUAGES="Languages" COM_LANGUAGES_INSTALLED_VIEW_DEFAULT_DESC="Displays language packs installed into your Joomla! website." COM_LANGUAGES_INSTALLED_VIEW_DEFAULT_TITLE="Installed Languages" COM_LANGUAGES_LANGUAGES_VIEW_DEFAULT_DESC="Create or manage content languages for your Joomla! website." COM_LANGUAGES_LANGUAGES_VIEW_DEFAULT_TITLE="Content Languages" COM_LANGUAGES_OVERRIDE_VIEW_DEFAULT_DESC="Here you assign custom text for a language key that you want to use instead of language pack default text." COM_LANGUAGES_OVERRIDE_VIEW_DEFAULT_TITLE="Language Overrides" COM_LANGUAGES_XML_DESCRIPTION="Component for language management." PKb��\�T�%��.language/en-GB/en-GB.plg_editors-xtd_image.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EDITORS-XTD_IMAGE="Button - Image" PLG_IMAGE_BUTTON_IMAGE="Image" PLG_IMAGE_XML_DESCRIPTION="Displays a button to insert images into an Article. Displays a popup allowing you to configure an image's properties and upload new image files." PKb��\��8��2language/en-GB/en-GB.plg_content_pagebreak.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_PAGEBREAK="Content - Page Break" PLG_CONTENT_PAGEBREAK_XML_DESCRIPTION="Allow the creation of a paginated article with an optional table of contents.<br /><br />Insert page breaks through the use of the page break button normally found in the WYSIWYG editor toolbar. The location of the page break in an article will be displayed in the editor as a simple horizontal line.<br /><br />The text displayed will depend on the options chosen and may be either the title, alternate text (if provided) or page numbers. <br /><br />The HTML usage is:<br /><hr class="system-pagebreak" /><br /><hr class="system-pagebreak" title="The page title" /> or <br /><hr class="system-pagebreak" alt="The first page" /> or <br /><hr class="system-pagebreak" title="The page title" alt="The first page" /> or <br /><hr class="system-pagebreak" alt="The first page" title="The page title" />" PKb��\�s<���'language/en-GB/en-GB.plg_system_log.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_LOG_XML_DESCRIPTION="Provides logging when the user login fails." PLG_SYSTEM_LOG="System - User Log" PLG_SYSTEM_LOG_FIELD_LOG_USERNAME_DESC="This option will log the username used when an authentication fails." PLG_SYSTEM_LOG_FIELD_LOG_USERNAME_LABEL="Log Usernames" PKb��\dT"��)language/en-GB/en-GB.com_joomlaupdate.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_JOOMLAUPDATE_CHECKED_UPDATES="Checked for updates." COM_JOOMLAUPDATE_CONFIG_CUSTOMURL_DESC="This is a custom XML update source URL, used only when the "Update Source" option is set to "Custom URL"." COM_JOOMLAUPDATE_CONFIG_CUSTOMURL_LABEL="Custom URL" COM_JOOMLAUPDATE_CONFIG_SOURCES_DESC="Configure where Joomla gets its update information from." COM_JOOMLAUPDATE_CONFIG_SOURCES_LABEL="Update Source" COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_CUSTOM="Custom URL" COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_CUSTOM_ERROR="The custom URL field is empty." COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_DEFAULT="Default" COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_DESC="The update channel Joomla will use to find out if there is an update available." COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_LABEL="Update Channel" COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_NEXT="Joomla Next" COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_TESTING="Testing" COM_JOOMLAUPDATE_CONFIGURATION="Joomla Update: Options" COM_JOOMLAUPDATE_FAILED_TO_CHECK_UPDATES="Failed to check for updates." COM_JOOMLAUPDATE_TOOLBAR_CHECK="Check for Updates" COM_JOOMLAUPDATE_OVERVIEW="Joomla Update" COM_JOOMLAUPDATE_UPDATE_LOG_CLEANUP="Cleaning up after installation." COM_JOOMLAUPDATE_UPDATE_LOG_COMPLETE="Update to version %s is complete." ; The following two strings are deprecated and will be removed with 4.0 COM_JOOMLAUPDATE_UPDATE_LOG_CONFIRM_FINALISE="The confirm for the finalise step has passed." COM_JOOMLAUPDATE_UPDATE_LOG_CONFIRM_FINALISE_FAIL="The confirm of the finalise step has failed" COM_JOOMLAUPDATE_UPDATE_LOG_DELETE_FILES="Deleting removed files and folders." COM_JOOMLAUPDATE_UPDATE_LOG_FILE="File %s downloaded." COM_JOOMLAUPDATE_UPDATE_LOG_FINALISE="Finalising installation." COM_JOOMLAUPDATE_UPDATE_LOG_INSTALL="Starting installation of new version." COM_JOOMLAUPDATE_UPDATE_LOG_START="Update started by user %2$s (%1$s). Old version is %3$s." COM_JOOMLAUPDATE_UPDATE_LOG_URL="Downloading update file from %s." COM_JOOMLAUPDATE_VIEW_COMPLETE_HEADING="Joomla Version Update Status" COM_JOOMLAUPDATE_VIEW_COMPLETE_MESSAGE="Your site has been updated. Your Joomla version is now %s." COM_JOOMLAUPDATE_VIEW_DEFAULT_DOWNLOAD_IN_PROGRESS="Downloading update file. Please wait ..." COM_JOOMLAUPDATE_VIEW_DEFAULT_NO_DOWNLOAD_URL="We can't find a download URL" COM_JOOMLAUPDATE_VIEW_DEFAULT_NO_DOWNLOAD_URL_DESC="An update to Joomla %1$s was found, but it wasn't possible to fetch the download URL for that update. There are two possibilities why this happens:<br>- Your host doesn't support <a href="_QQ_"https://downloads.joomla.org/technical-requirements"_QQ_">the minimum requirements for Joomla %1$s</a> and there is no alternative download for your configuration available.<br>- There is a problem with the Joomla Update Server.<br><br>Please try to download the update package from <a href="_QQ_"https://downloads.joomla.org/latest"_QQ_">the official Joomla download page</a> and use the Upload and Update tab." COM_JOOMLAUPDATE_VIEW_DEFAULT_NO_LIVE_UPDATE="Live Update is not available" COM_JOOMLAUPDATE_VIEW_DEFAULT_NO_LIVE_UPDATE_DESC="There is a new version of the Joomla Update Component that needs to be installed first. <a class=\"alert-link\" href="_QQ_"index.php?option=com_installer&view=update"_QQ_">Click here to update the component</a>." COM_JOOMLAUPDATE_VIEW_DEFAULT_FTP_DIRECTORY="FTP Root" COM_JOOMLAUPDATE_VIEW_DEFAULT_FTP_HOSTNAME="FTP Host" COM_JOOMLAUPDATE_VIEW_DEFAULT_FTP_PASSWORD="FTP Password" COM_JOOMLAUPDATE_VIEW_DEFAULT_FTP_PORT="FTP Port" COM_JOOMLAUPDATE_VIEW_DEFAULT_FTP_USERNAME="FTP Username" COM_JOOMLAUPDATE_VIEW_DEFAULT_INFOURL="Additional Information" COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALL_SELF_UPDATE_FIRST="You must update to the latest version of the Joomla Update Component before you can install the Joomla Core Update!" COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALLAGAIN="Reinstall Joomla core files" COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALLED="Installed Joomla version" COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALLUPDATE="Install the Update" COM_JOOMLAUPDATE_VIEW_DEFAULT_LATEST="Latest Joomla version" COM_JOOMLAUPDATE_VIEW_DEFAULT_METHOD_DIRECT="Write files directly" COM_JOOMLAUPDATE_VIEW_DEFAULT_METHOD_FTP="Write files using FTP" COM_JOOMLAUPDATE_VIEW_DEFAULT_METHOD_HYBRID="Hybrid (use FTP only if needed)" COM_JOOMLAUPDATE_VIEW_DEFAULT_METHOD="Installation method" COM_JOOMLAUPDATE_VIEW_DEFAULT_NOUPDATES="No updates available." COM_JOOMLAUPDATE_VIEW_DEFAULT_NOUPDATESNOTICE="You already have the latest Joomla version, %s." COM_JOOMLAUPDATE_VIEW_DEFAULT_PACKAGE="Update package URL" COM_JOOMLAUPDATE_VIEW_DEFAULT_PACKAGE_REINSTALL="Reinstall package URL" COM_JOOMLAUPDATE_VIEW_DEFAULT_TAB_ONLINE="Live Update" COM_JOOMLAUPDATE_VIEW_DEFAULT_TAB_UPLOAD="Upload & Update" COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATE_NOTICE="Before you update Joomla, ensure that the installed extensions are available for the new Joomla version. <br>You are strongly advised to make a <strong>backup</strong> of your installation before you start updating." COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATEFOUND="A Joomla update was found." COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_CUSTOM="You are on the "%s" update channel. This is not an official Joomla update channel." COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_DEFAULT="You are on the "%s" update channel. Through this channel you'll receive notifications for all updates of the current Joomla release (3.x)" COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_NEXT="You are on the "%s" update channel. Through this channel you'll receive notifications for all updates of the current Joomla release (3.x) and you will also be notified when the future major release (4.x) will be available. Before upgrading to 4.x you'll need to assess its compatibility with your environment." COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_TESTING="You are on the "%s" update channel. This channel is designed for testing new releases and fixes in Joomla.<br />It is only intended for JBS (Joomla Bug Squad™) members and others within the Joomla community who are testing. Do not use this setting on a production site." COM_JOOMLAUPDATE_VIEW_DEFAULT_UPLOAD_INTRO="You can use this feature to update Joomla if your server is behind a firewall or otherwise unable to contact the update servers. First download the Joomla <em>Upgrade Package</em> in ZIP format from <a class=\"alert-link\" href=\"%s\">the official Joomla download page</a>. Then use the fields below to upload and install it." COM_JOOMLAUPDATE_VIEW_PROGRESS="Update progress" COM_JOOMLAUPDATE_VIEW_UPDATE_BYTESEXTRACTED="Bytes extracted" COM_JOOMLAUPDATE_VIEW_UPDATE_BYTESREAD="Bytes read" COM_JOOMLAUPDATE_VIEW_UPDATE_CHECKSUM_WRONG="File Checksum Failed" COM_JOOMLAUPDATE_VIEW_UPDATE_DOWNLOADFAILED="Download of update package failed." COM_JOOMLAUPDATE_VIEW_UPDATE_FILESEXTRACTED="Files extracted" COM_JOOMLAUPDATE_VIEW_UPDATE_FINALISE_CONFIRM_AND_CONTINUE="Confirm & Continue" COM_JOOMLAUPDATE_VIEW_UPDATE_FINALISE_HEAD="Joomla Update is finishing and cleaning up" COM_JOOMLAUPDATE_VIEW_UPDATE_FINALISE_HEAD_DESC="To complete the update Process please confirm your identity by re-entering the login information for your site "%s" below." COM_JOOMLAUPDATE_VIEW_UPDATE_INPROGRESS="Updating your Joomla files. Please wait ..." COM_JOOMLAUPDATE_VIEW_UPDATE_PERCENT="Percent complete" COM_JOOMLAUPDATE_VIEW_UPLOAD_CAPTIVE_INTRO_BODY="Make sure that the update file you have uploaded comes from the official Joomla download page. Afterwards, please confirm that you want to install it by re-entering the login information for your site "%s" below." COM_JOOMLAUPDATE_VIEW_UPLOAD_CAPTIVE_INTRO_HEAD="Are you sure you want to install the file you uploaded?" COM_JOOMLAUPDATE_VIEW_UPLOAD_PACKAGE_FILE="Joomla package file" COM_JOOMLAUPDATE_XML_DESCRIPTION="Updates Joomla to the latest version with one click." PKb��\a&4AA"language/en-GB/en-GB.mod_title.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_TITLE="Title" MOD_TITLE_XML_DESCRIPTION="This module shows the Toolbar Component Title." PKb��\��B���,language/en-GB/en-GB.plg_finder_tags.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_STATISTICS_TAG="Tag" PLG_FINDER_TAGS="Smart Search - Tags" PLG_FINDER_TAGS_ERROR_ACTIVATING_PLUGIN="Could not automatically activate the "Smart Search - Tags" plugin." PLG_FINDER_TAGS_XML_DESCRIPTION="This plugin indexes Joomla! Tags." PKb��\ߓ����(language/en-GB/en-GB.com_plugins.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_PLUGINS="Plugins" COM_PLUGINS_PLUGINS_VIEW_DEFAULT_DESC="Shows a list of plugins to manage" COM_PLUGINS_PLUGINS_VIEW_DEFAULT_TITLE="Plugin Manager" COM_PLUGINS_XML_DESCRIPTION="This component manages Joomla plugins." PKb��\���!uu'language/en-GB/en-GB.mod_logged.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_LOGGED="Logged-in Users" MOD_LOGGED_XML_DESCRIPTION="This module shows a list of the Logged-in Users." MOD_LOGGED_LAYOUT_DEFAULT="Default" PKb��\�'"�EE-language/en-GB/en-GB.plg_editors_none.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EDITORS_NONE="Editor - None" PLG_NONE_XML_DESCRIPTION="This loads a basic text entry field." PKb��\d�+$TT+language/en-GB/en-GB.com_contenthistory.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CONTENTHISTORY_BUTTON_COMPARE_ALL_ROWS_DESC="Select to see all values for the item, including ones that haven't changed." COM_CONTENTHISTORY_BUTTON_COMPARE_ALL_ROWS="All Values" COM_CONTENTHISTORY_BUTTON_COMPARE_CHANGED_ROWS_DESC="Select to see only those values that have changed." COM_CONTENTHISTORY_BUTTON_COMPARE_CHANGED_ROWS="Changed Values" COM_CONTENTHISTORY_BUTTON_COMPARE_DESC="Choose two versions and select to compare them." COM_CONTENTHISTORY_BUTTON_COMPARE_HTML_DESC="Select to see the HTML source code for the changes." COM_CONTENTHISTORY_BUTTON_COMPARE_HTML="Show HTML Code" COM_CONTENTHISTORY_BUTTON_COMPARE_TEXT_DESC="Select to see the item changes as text." COM_CONTENTHISTORY_BUTTON_COMPARE_TEXT="Show Text" COM_CONTENTHISTORY_BUTTON_COMPARE="Compare" COM_CONTENTHISTORY_BUTTON_DELETE_DESC="Choose one or more versions and select to permanently delete them." COM_CONTENTHISTORY_BUTTON_DELETE="Delete" COM_CONTENTHISTORY_BUTTON_KEEP_DESC="Choose one or more versions and select to toggle the keep forever on or off." COM_CONTENTHISTORY_BUTTON_KEEP_TOGGLE_OFF="Select to allow this version to be deleted automatically according to the delete schedule." COM_CONTENTHISTORY_BUTTON_KEEP_TOGGLE_ON="Select to prevent this version being deleted automatically." COM_CONTENTHISTORY_BUTTON_KEEP="Keep On/Off" COM_CONTENTHISTORY_BUTTON_LOAD_DESC="This button loads the selected version into the edit form." COM_CONTENTHISTORY_BUTTON_LOAD="Restore" COM_CONTENTHISTORY_BUTTON_PREVIEW_DESC="This button allows you to see a preview of the selected version." COM_CONTENTHISTORY_BUTTON_PREVIEW="Preview" COM_CONTENTHISTORY_BUTTON_SELECT_ONE="Please select one version." COM_CONTENTHISTORY_BUTTON_SELECT_TWO="Please select two versions." COM_CONTENTHISTORY_CHARACTER_COUNT="Character Count" COM_CONTENTHISTORY_COMPARE_DIFF="Changes" COM_CONTENTHISTORY_COMPARE_TITLE="Compare View" COM_CONTENTHISTORY_COMPARE_VALUE1="Saved on %s %s" COM_CONTENTHISTORY_COMPARE_VALUE2="Saved on %s %s" COM_CONTENTHISTORY_ERROR_KEEP_NOT_PERMITTED="You are not permitted to change the keep forever status." COM_CONTENTHISTORY_KEEP_VERSION="Keep Forever" COM_CONTENTHISTORY_MODAL_TITLE="Item Version History" COM_CONTENTHISTORY_N_ITEMS_DELETED_1="%s history version deleted." COM_CONTENTHISTORY_N_ITEMS_DELETED="%s history versions deleted." COM_CONTENTHISTORY_N_ITEMS_KEEP_TOGGLE_1="Successfully changed the keep forever value for %s history version." COM_CONTENTHISTORY_N_ITEMS_KEEP_TOGGLE="Successfully changed the keep forever value for %s history versions." COM_CONTENTHISTORY_NO_ITEM_SELECTED="No history version selected." COM_CONTENTHISTORY_PREVIEW_FIELD="Field" COM_CONTENTHISTORY_PREVIEW_SUBTITLE_DATE="Preview of version from %s" COM_CONTENTHISTORY_PREVIEW_SUBTITLE="Version note: %s" COM_CONTENTHISTORY_PREVIEW_TITLE="Preview of Selected Item" COM_CONTENTHISTORY_PREVIEW_VALUE="Value" COM_CONTENTHISTORY_VERSION_NOTE="Version Note" PKb��\���h��7language/en-GB/en-GB.plg_installer_webinstaller.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_INSTALLER_WEBINSTALLER="Installer - Install from Web" PLG_INSTALLER_WEBINSTALLER_XML_DESCRIPTION="This plugin offers functionality for the 'Install from Web' tab." PKb��\QjU�RR0language/en-GB/en-GB.plg_system_remember.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_REMEMBER_XML_DESCRIPTION="Provides remember me functionality." PLG_SYSTEM_REMEMBER="System - Remember Me" PKb��\au�cc%language/en-GB/en-GB.com_redirect.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_REDIRECT="Redirects" COM_REDIRECT_ADVANCED_OPTIONS="Advanced" COM_REDIRECT_BATCH_OPTIONS="Bulk process to add new URLs" COM_REDIRECT_BATCH_TIP="Enter expired URL (mandatory) with a new URL (optional) separated with %1$s (eg old-url%1$snew-url). Each line one entry!" COM_REDIRECT_BULK_SEPARATOR_DESC="The separator used for bulk import, by default it is '|' but it can be ',' for a copy / paste from a CSV file for instance." COM_REDIRECT_BULK_SEPARATOR_LABEL="Bulk Import Separator" COM_REDIRECT_BUTTON_UPDATE_LINKS="Update Links" COM_REDIRECT_CLEAR_FAIL="Failed to delete disabled links." COM_REDIRECT_CLEAR_SUCCESS="All disabled links have been deleted." COM_REDIRECT_COLLECT_MODAL_URLS_DISABLED="%1$s The 'Collect URLs' option in the %2$s is disabled. Error page URLs will not be collected by this component." COM_REDIRECT_COLLECT_URLS_ENABLED="%1$s The option 'Collect URLs' is enabled." ; The following string is deprecated and will be removed with 4.0. COM_REDIRECT_COLLECT_URLS_DISABLED="The 'Collect URLs' option in the <a href="_QQ_"%s"_QQ_">Redirect System Plugin</a> is disabled. Error page URLs will not be collected by this component." COM_REDIRECT_CONFIGURATION="Redirect: Options" COM_REDIRECT_DEFAULT_IMPORT_STATE_DESC="When batch importing redirects, enable or disable by default." COM_REDIRECT_DEFAULT_IMPORT_STATE_LABEL="Import State" COM_REDIRECT_DISABLE_LINK="Disable Link" COM_REDIRECT_EDIT_LINK="Edit Link #%d" COM_REDIRECT_EDIT_PLUGIN_SETTINGS="Edit Plugin Settings" COM_REDIRECT_ENABLE_LINK="Enable Link" COM_REDIRECT_ERROR_DESTINATION_URL_REQUIRED="The redirect must have a destination URL" COM_REDIRECT_ERROR_DUPLICATE_OLD_URL="The source URL must be unique." COM_REDIRECT_ERROR_DUPLICATE_URLS="The source and destination URLs can't be the same." COM_REDIRECT_ERROR_SOURCE_URL_REQUIRED="The redirect must have a source URL." COM_REDIRECT_FILTER_SEARCH_DESC="Search in expired URL, new URL, referring page and comment. Prefix with ID: to search for a link ID." COM_REDIRECT_FILTER_SEARCH_LABEL="Search Links" COM_REDIRECT_FILTER_FILTER_HTTP_HEADER_LABEL="HTTP Status Code" COM_REDIRECT_FILTER_FILTER_HTTP_HEADER_DESC="Filter by the redirect HTTP Status Code." COM_REDIRECT_FILTER_SELECT_OPTION_HTTP_HEADER="- Select HTTP Status Code -" COM_REDIRECT_FIELD_COMMENT_DESC="Sometimes it is helpful to describe the URLs for redirect management later on." COM_REDIRECT_FIELD_COMMENT_LABEL="Comment" COM_REDIRECT_FIELD_CREATED_DATE_LABEL="Created Date" COM_REDIRECT_FIELD_NEW_URL_DESC="Enter the URL to be redirected to." COM_REDIRECT_BATCH_UPDATE_WITH_NEW_URL="Batch update new URL(s)" COM_REDIRECT_FIELD_NEW_URL_LABEL="New URL" COM_REDIRECT_FIELD_OLD_URL_DESC="Enter the URL that has to be redirected." COM_REDIRECT_FIELD_OLD_URL_LABEL="Expired URL" COM_REDIRECT_FIELD_REFERRER_LABEL="Link Referrer" COM_REDIRECT_FIELD_REDIRECT_STATUS_CODE_LABEL="Redirect Status Code" COM_REDIRECT_FIELD_REDIRECT_STATUS_CODE_DESC="Choose the HTTP 1.1 status code to associate with the redirect." COM_REDIRECT_FIELD_UPDATED_DATE_LABEL="Last Updated Date" COM_REDIRECT_HEADING_CREATED_DATE="Created Date" COM_REDIRECT_HEADING_CREATED_DATE_ASC="Created Date ascending" COM_REDIRECT_HEADING_CREATED_DATE_DESC="Created Date descending" COM_REDIRECT_HEADING_HITS="404 Hits" COM_REDIRECT_HEADING_HITS_ASC="404 Hits ascending" COM_REDIRECT_HEADING_HITS_DESC="404 Hits descending" COM_REDIRECT_HEADING_NEW_URL="New URL" COM_REDIRECT_HEADING_NEW_URL_ASC="New URL ascending" COM_REDIRECT_HEADING_NEW_URL_DESC="New URL descending" COM_REDIRECT_HEADING_OLD_URL="Expired URL" COM_REDIRECT_HEADING_OLD_URL_ASC="Expired URL ascending" COM_REDIRECT_HEADING_OLD_URL_DESC="Expired URL descending" COM_REDIRECT_HEADING_REFERRER="Referring Page" COM_REDIRECT_HEADING_REFERRER_ASC="Referring Page ascending" COM_REDIRECT_HEADING_REFERRER_DESC="Referring Page descending" COM_REDIRECT_HEADING_STATUS_CODE="Status Code" COM_REDIRECT_HEADING_STATUS_CODE_ASC="Status Code ascending" COM_REDIRECT_HEADING_STATUS_CODE_DESC="Status Code descending" COM_REDIRECT_HEADING_UPDATE_LINKS="Update selected links to the following new URL." COM_REDIRECT_MANAGER_LINK="Redirects: New/Edit" COM_REDIRECT_MANAGER_LINK_EDIT="Redirects: Edit" COM_REDIRECT_MANAGER_LINK_NEW="Redirects: New" COM_REDIRECT_MANAGER_LINKS="Redirects: Links" COM_REDIRECT_MODE_LABEL="Activate Advanced Mode" COM_REDIRECT_MODE_DESC="Enable more advanced functionality for the component. Only use this if you know what you're doing." COM_REDIRECT_N_ITEMS_ARCHIVED="%d links archived." COM_REDIRECT_N_ITEMS_ARCHIVED_1="Link archived." COM_REDIRECT_N_ITEMS_DELETED="%d links deleted." COM_REDIRECT_N_ITEMS_DELETED_1="Link deleted." COM_REDIRECT_N_ITEMS_PUBLISHED="%d links enabled." COM_REDIRECT_N_ITEMS_PUBLISHED_1="Link enabled." COM_REDIRECT_N_ITEMS_TRASHED="%d links trashed." COM_REDIRECT_N_ITEMS_TRASHED_1="Link trashed." COM_REDIRECT_N_ITEMS_UNPUBLISHED="%d links disabled." COM_REDIRECT_N_ITEMS_UNPUBLISHED_1="Link disabled." COM_REDIRECT_N_LINKS_ADDED="%d links added." COM_REDIRECT_N_LINKS_ADDED_1="1 link has been added." COM_REDIRECT_N_LINKS_UPDATED="%d links updated." COM_REDIRECT_N_LINKS_UPDATED_1="1 link has been updated." COM_REDIRECT_NEW_LINK="New Link" COM_REDIRECT_NO_ITEM_ADDED="No links added." COM_REDIRECT_NO_ITEM_SELECTED="No links selected." COM_REDIRECT_NO_SEPARATOR_FOUND="The separator %s was not found in your import." ; The following string is deprecated and will be removed with 4.0. COM_REDIRECT_PLUGIN_DISABLED="The <a href="_QQ_"%s"_QQ_">Redirect System Plugin</a> is disabled. It needs to be enabled for this component to work." COM_REDIRECT_PLUGIN_ENABLED="The Redirect Plugin is enabled." COM_REDIRECT_PLUGIN_MODAL_DISABLED="The %s is disabled. It needs to be enabled for this component to work." COM_REDIRECT_REDIRECTED_ON="Redirected on: %s." COM_REDIRECT_SAVE_SUCCESS="Link saved." COM_REDIRECT_SEARCH_LINKS="Search in link fields." COM_REDIRECT_SYSTEM_PLUGIN="Redirect System Plugin" COM_REDIRECT_TOOLBAR_PURGE="Purge Disabled" COM_REDIRECT_XML_DESCRIPTION="This component implements link redirection." JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\�*���6language/en-GB/en-GB.plg_authentication_joomla.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_AUTH_JOOMLA_XML_DESCRIPTION="Handles Joomla's default User authentication.<br /><strong> Warning! You must have at least one authentication plugin enabled or you will lose all access to your site.</strong>" PLG_AUTHENTICATION_JOOMLA="Authentication - Joomla"PKb��\�Hw��7language/en-GB/en-GB.plg_content_pagenavigation.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_PAGENAVIGATION="Content - Page Navigation" PLG_PAGENAVIGATION_XML_DESCRIPTION="Enables you to add <em>Next & Previous</em> functionality to an Article." PKb��\o�A /language/en-GB/en-GB.plg_content_loadmodule.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_LOADMODULE="Content - Load Modules" PLG_LOADMODULE_FIELD_STYLE_DESC="Code that will wrap Modules." PLG_LOADMODULE_FIELD_STYLE_LABEL="Style" PLG_LOADMODULE_FIELD_VALUE_DIVS="Wrapped by Divs" PLG_LOADMODULE_FIELD_VALUE_HORIZONTAL="Wrapped by table (horizontal)" PLG_LOADMODULE_FIELD_VALUE_MULTIPLEDIVS="Wrapped by Multiple Divs" PLG_LOADMODULE_FIELD_VALUE_RAW="No wrapping (raw output)" PLG_LOADMODULE_FIELD_VALUE_TABLE="Wrapped by table (column)" PLG_LOADMODULE_XML_DESCRIPTION="Within content this plugin loads a Module by ID, Syntax: {loadmoduleid 1} or a Module by position, Syntax: {loadposition user1} or a Module by name, Syntax: {loadmodule mod_login}. Optionally can specify module style and for loadmodule a specific module by title, Syntax: {loadmodule mod_login,module title,style}." PKb��\���vv$language/en-GB/en-GB.mod_toolbar.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_TOOLBAR="Toolbar" MOD_TOOLBAR_XML_DESCRIPTION="This module shows the toolbar icons used to control actions throughout the Administrator area."PKb��\v]}�77*language/en-GB/en-GB.com_newsfeeds.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_NEWSFEEDS="News Feeds" COM_NEWSFEEDS_CATEGORIES="Categories" COM_NEWSFEEDS_CATEGORIES_VIEW_DEFAULT_DESC="Show all the news feed categories within a category." COM_NEWSFEEDS_CATEGORIES_VIEW_DEFAULT_OPTION="Default" COM_NEWSFEEDS_CATEGORIES_VIEW_DEFAULT_TITLE="List All News Feed Categories" COM_NEWSFEEDS_CATEGORY_ADD_TITLE="News Feed: Add Category" COM_NEWSFEEDS_CATEGORY_EDIT_TITLE="News Feed: Edit Category" COM_NEWSFEEDS_CATEGORY_VIEW_DEFAULT_DESC="Show all news feeds within a category." COM_NEWSFEEDS_CATEGORY_VIEW_DEFAULT_OPTION="Default" COM_NEWSFEEDS_CATEGORY_VIEW_DEFAULT_TITLE="List News Feeds in a Category" COM_NEWSFEEDS_CONTENT_TYPE_NEWSFEED="News feed" COM_NEWSFEEDS_CONTENT_TYPE_CATEGORY="News Feed Category" COM_NEWSFEEDS_FEEDS="Feeds" COM_NEWSFEEDS_NEWSFEED_VIEW_DEFAULT_DESC="Show a single news feed." COM_NEWSFEEDS_NEWSFEED_VIEW_DEFAULT_OPTION="Default" COM_NEWSFEEDS_NEWSFEED_VIEW_DEFAULT_TITLE="Single News Feed" COM_NEWSFEEDS_TAGS_NEWSFEED="News Feed" COM_NEWSFEEDS_TAGS_CATEGORY="News Feed Category" COM_NEWSFEEDS_XML_DESCRIPTION="This component manages RSS and Atom news feeds." PKb��\HO�ucc&language/en-GB/en-GB.mod_quickicon.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_QUICKICON="Quick Icons" MOD_QUICKICON_ADD_NEW_ARTICLE="New Article" MOD_QUICKICON_ARTICLE_MANAGER="Articles" MOD_QUICKICON_CATEGORY_MANAGER="Categories" MOD_QUICKICON_CLEAR_CACHE="Clear Cache" MOD_QUICKICON_CONFIGURATION="Configuration" MOD_QUICKICON_CONTENT="Content" MOD_QUICKICON_EXTENSIONS="Extensions" MOD_QUICKICON_EXTENSION_MANAGER="Extension Manager" MOD_QUICKICON_FRONTPAGE_MANAGER="Front Page Manager" MOD_QUICKICON_GLOBAL_CHECKIN="Global Check-in" MOD_QUICKICON_GLOBAL_CONFIGURATION="Global" MOD_QUICKICON_GROUP_DESC="The group of this module (this value is compared with the group value used in <b>Quick Icons</b> plugins to inject icons). The 'mod_quickicon' group always displays the Joomla! core icons." MOD_QUICKICON_GROUP_LABEL="Group" MOD_QUICKICON_INSTALL_EXTENSIONS="Install Extensions" MOD_QUICKICON_LANGUAGE_MANAGER="Language(s)" MOD_QUICKICON_MAINTENANCE="Maintenance" MOD_QUICKICON_MEDIA_MANAGER="Media" MOD_QUICKICON_MENU_MANAGER="Menu(s)" MOD_QUICKICON_MODULE_MANAGER="Modules" MOD_QUICKICON_PROFILE="Edit Profile" MOD_QUICKICON_STRUCTURE="Structure" MOD_QUICKICON_SYSTEM_INFORMATION="System Information" MOD_QUICKICON_TEMPLATE_MANAGER="Templates" MOD_QUICKICON_TITLE="Quick Icons" MOD_QUICKICON_USER_MANAGER="Users" MOD_QUICKICON_USERS="Users" MOD_QUICKICON_XML_DESCRIPTION="This module shows Quick Icons that are visible on the Control Panel (administrator area home page)." PKb��\��`��$language/en-GB/en-GB.com_checkin.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CHECKIN="Check-in" COM_CHECKIN_CONFIGURATION="Check-in: Options" COM_CHECKIN_DATABASE_TABLE="Database Table" COM_CHECKIN_DATABASE_TABLE_ASC="Database Table ascending" COM_CHECKIN_DATABASE_TABLE_DESC="Database Table descending" COM_CHECKIN_FILTER_SEARCH_DESC="Search database tables with items to check-in." COM_CHECKIN_FILTER_SEARCH_LABEL="Search Database Tables" COM_CHECKIN_GLOBAL_CHECK_IN="Maintenance: Global Check-in" COM_CHECKIN_ITEMS_TO_CHECK_IN="Items to check-in" COM_CHECKIN_ITEMS_TO_CHECK_IN_ASC="Items to check-in ascending" COM_CHECKIN_ITEMS_TO_CHECK_IN_DESC="Items to check-in descending" COM_CHECKIN_N_ITEMS_CHECKED_IN_0="No item checked in." COM_CHECKIN_N_ITEMS_CHECKED_IN_1="1 item checked in." COM_CHECKIN_N_ITEMS_CHECKED_IN_MORE="%s items checked in." COM_CHECKIN_NO_ITEMS="There are no tables with checked out items or there are no tables with checked out items that match your search." COM_CHECKIN_TABLE="<em>%s</em> table" COM_CHECKIN_XML_DESCRIPTION="Check-in Component." JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting."PKb��\�4��language/en-GB/install.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension version="3.8" client="administrator" type="language" method="upgrade"> <name>English (en-GB)</name> <tag>en-GB</tag> <version>3.9.10</version> <creationDate>July 2019</creationDate> <author>Joomla! Project</author> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <description>en-GB administrator language</description> <files> <folder>/</folder> <filename file="meta">install.xml</filename> </files> <params /> </extension> PKb��\G�:���#language/en-GB/en-GB.mod_custom.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_CUSTOM="Custom" MOD_CUSTOM_FIELD_PREPARE_CONTENT_DESC="Optionally prepare the content with Joomla Content Plugins." MOD_CUSTOM_FIELD_PREPARE_CONTENT_LABEL="Prepare Content" MOD_CUSTOM_XML_DESCRIPTION="This module allows you to create your own Module using a WYSIWYG editor." PKb��\#j��[[3language/en-GB/en-GB.plg_editors_codemirror.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CODEMIRROR_XML_DESCRIPTION="This plugin loads the CodeMirror editor." PLG_EDITORS_CODEMIRROR="Editor - CodeMirror" PKb��\0�^rr/language/en-GB/en-GB.plg_content_emailcloak.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_EMAILCLOAK="Content - Email Cloaking" PLG_CONTENT_EMAILCLOAK_LINKABLE="As linkable mailto address" PLG_CONTENT_EMAILCLOAK_MODE_DESC="Select how email addresses will be displayed." PLG_CONTENT_EMAILCLOAK_MODE_LABEL="Mode" PLG_CONTENT_EMAILCLOAK_NONLINKABLE="Non-linkable Text" PLG_CONTENT_EMAILCLOAK_XML_DESCRIPTION="Cloaks all email addresses in content from spambots using JavaScript."PKb��\s?�rss%language/en-GB/en-GB.mod_menu.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_MENU="Administrator Menu" MOD_MENU_XML_DESCRIPTION="This module displays an administrator menu module." MOD_MENU_LAYOUT_DEFAULT="Default" PKb��\�?ښ�#language/en-GB/en-GB.mod_latest.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_LATEST="Articles - Latest" MOD_LATEST_CREATED="Created" MOD_LATEST_CREATED_BY="Created By" MOD_LATEST_FIELD_AUTHORS_DESC="A filter for the authors." MOD_LATEST_FIELD_AUTHORS_LABEL="Authors" MOD_LATEST_FIELD_CATEGORY_DESC="Select Articles from a specific Category or all Categories." MOD_LATEST_FIELD_COUNT_DESC="The number of items to display (default 5)." MOD_LATEST_FIELD_COUNT_LABEL="Count" MOD_LATEST_FIELD_ORDERING_DESC="Ordering options." MOD_LATEST_FIELD_ORDERING_LABEL="Order" MOD_LATEST_FIELD_VALUE_AUTHORS_ANYONE="Anyone" MOD_LATEST_FIELD_VALUE_AUTHORS_BY_ME="Added or modified by me" MOD_LATEST_FIELD_VALUE_AUTHORS_NOT_BY_ME="Not added or modified by me" MOD_LATEST_FIELD_VALUE_ORDERING_ADDED="Recently Added First" MOD_LATEST_FIELD_VALUE_ORDERING_MODIFIED="Recently Modified First" MOD_LATEST_LATEST_ITEMS="Latest Items" MOD_LATEST_NO_MATCHING_RESULTS="No Matching Results" MOD_LATEST_TITLE="Recently Created Articles" MOD_LATEST_TITLE_CREATED="Last Added Articles" MOD_LATEST_TITLE_CREATED_1="Last Added Article" MOD_LATEST_TITLE_CREATED_MORE="Last %1$s Added Articles" MOD_LATEST_TITLE_CREATED_NOT_ME="Last Added Articles Not By Me" MOD_LATEST_TITLE_CREATED_NOT_ME_1="Last Added Article Not By Me" MOD_LATEST_TITLE_CREATED_NOT_ME_MORE="Last %1$s Added Articles Not By Me" MOD_LATEST_TITLE_CREATED_BY_ME="Last Added Articles By Me" MOD_LATEST_TITLE_CREATED_BY_ME_1="Last Added Article By Me" MOD_LATEST_TITLE_CREATED_BY_ME_MORE="Last %1$s Added Articles By Me" MOD_LATEST_TITLE_CREATED_CATEGORY="Last Added Articles (%2$s category)" MOD_LATEST_TITLE_CREATED_CATEGORY_1="Last Added Article (%2$s category)" MOD_LATEST_TITLE_CREATED_CATEGORY_MORE="Last %1$s Added Articles (%2$s category)" MOD_LATEST_TITLE_CREATED_CATEGORY_BY_ME="Last Added Articles By Me (%2$s category)" MOD_LATEST_TITLE_CREATED_CATEGORY_BY_ME_1="Last Added Article By Me (%2$s category)" MOD_LATEST_TITLE_CREATED_CATEGORY_BY_ME_MORE="Last %1$s Added Articles By Me (%2$s category)" MOD_LATEST_TITLE_CREATED_CATEGORY_NOT_ME="Last Added Articles Not By Me (%2$s category)" MOD_LATEST_TITLE_CREATED_CATEGORY_NOT_ME_1="Last Added Article Not By Me (%2$s category)" MOD_LATEST_TITLE_CREATED_CATEGORY_NOT_ME_MORE="Last %1$s Added Articles Not By Me (%2$s category)" MOD_LATEST_TITLE_MODIFIED="Last Modified Articles" MOD_LATEST_TITLE_MODIFIED_1="Last Modified Article" MOD_LATEST_TITLE_MODIFIED_MORE="Last %1$s Modified Articles" MOD_LATEST_TITLE_MODIFIED_BY_ME="Last Modified Articles By Me" MOD_LATEST_TITLE_MODIFIED_BY_ME_1="Last Modified Article By Me" MOD_LATEST_TITLE_MODIFIED_BY_ME_MORE="Last %1$s Modified Articles By Me" MOD_LATEST_TITLE_MODIFIED_NOT_ME="Last Modified Articles Not By Me" MOD_LATEST_TITLE_MODIFIED_NOT_ME_1="Last Modified Article Not By Me" MOD_LATEST_TITLE_MODIFIED_NOT_ME_MORE="Last %1$s Modified Articles Not By Me" MOD_LATEST_TITLE_MODIFIED_CATEGORY="Last Modified Articles (%2$s category)" MOD_LATEST_TITLE_MODIFIED_CATEGORY_1="Last Modified Article (%2$s category)" MOD_LATEST_TITLE_MODIFIED_CATEGORY_MORE="Last %1$s Modified Articles (%2$s category)" MOD_LATEST_TITLE_MODIFIED_CATEGORY_BY_ME="Last Modified Articles By Me (%2$s category)" MOD_LATEST_TITLE_MODIFIED_CATEGORY_BY_ME_1="Last Modified Article By Me (%2$s category)" MOD_LATEST_TITLE_MODIFIED_CATEGORY_BY_ME_MORE="Last %1$s Modified Articles By Me (%2$s category)" MOD_LATEST_TITLE_MODIFIED_CATEGORY_NOT_ME="Last Modified Articles Not By Me (%2$s category)" MOD_LATEST_TITLE_MODIFIED_CATEGORY_NOT_ME_1="Last Modified Article Not By Me (%2$s category)" MOD_LATEST_TITLE_MODIFIED_CATEGORY_NOT_ME_MORE="Last %1$s Modified Articles Not By Me (%2$s category)" MOD_LATEST_UNEXISTING="<i>Non existent</i>" MOD_LATEST_XML_DESCRIPTION="This module shows a list of the most recently created Articles." PKb��\� ���'language/en-GB/en-GB.plg_system_p3p.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_P3P_XML_DESCRIPTION="The system P3P policy plugin allows Joomla! to send a customised string of P3P policy tags in the HTTP header. This is required for the sessions to work on certain browsers, ie Internet Explorer 6 and 7." PLG_SYSTEM_P3P="System - P3P Policy" PLG_P3P_HEADER_DESCRIPTION="Enter your P3P policy tags. For more information consult The Platform for Privacy Preferences specification, https://www.w3.org/TR/P3P/" PLG_P3P_HEADER_LABEL="P3P Tags"PKb��\ ���-�-$language/en-GB/en-GB.com_modules.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_MODULES="Modules Manager" COM_MODULES_ACTION_EDITFRONTEND="Frontend Editing" COM_MODULES_ACTION_EDITFRONTEND_COMPONENT_DESC="Allows users in the group to edit in Frontend." COM_MODULES_ADMIN_LANG_FILTER_FIELDSET_LABEL="Administrator Modules" COM_MODULES_ADMIN_LANG_FILTER_DESC="Allows filtering administrator modules per administrator language." COM_MODULES_ADMIN_LANG_FILTER_LABEL="Language Filtering" COM_MODULES_ADVANCED_FIELDSET_LABEL="Advanced" COM_MODULES_ASSIGNED_VARIES_EXCEPT="All except selected" COM_MODULES_ASSIGNED_VARIES_ONLY="Selected" COM_MODULES_BASIC_FIELDSET_LABEL="Options" COM_MODULES_BATCH_POSITION_LABEL="Set Position" COM_MODULES_BATCH_POSITION_NOCHANGE="Keep original Position" COM_MODULES_BATCH_POSITION_NOPOSITION="No Module Position" COM_MODULES_BATCH_OPTIONS="Batch process the selected modules" COM_MODULES_BATCH_TIP="If choosing to copy a module, any other actions selected will be applied to the copied module. Otherwise, all actions are applied to the selected module. When copying and not changing position, it is nevertheless necessary to select 'Keep Original Position' in the dropdown." COM_MODULES_CHANGE_POSITION_BUTTON="Select" COM_MODULES_CHANGE_POSITION_TITLE="Change" COM_MODULES_CONFIGURATION="Module: Options" COM_MODULES_CUSTOM_OUTPUT="Custom Output" COM_MODULES_ERR_XML="Module XML data not available" COM_MODULES_ERROR_CANNOT_FIND_MODULE="Can't find module" COM_MODULES_ERROR_CANNOT_GET_MODULE="Can't get module" COM_MODULES_ERROR_INVALID_EXTENSION="Invalid module" COM_MODULES_ERROR_NO_MODULES_SELECTED="No module selected." COM_MODULES_EXTENSION_PUBLISHED_DISABLED="Module disabled and published." COM_MODULES_EXTENSION_PUBLISHED_ENABLED="Module enabled and published." COM_MODULES_EXTENSION_UNPUBLISHED_DISABLED="Module disabled and unpublished." COM_MODULES_EXTENSION_UNPUBLISHED_ENABLED="Module enabled and unpublished." COM_MODULES_EXTRA_STYLE_DESC="Specify the style for the module or the modules in the position selected." COM_MODULES_EXTRA_STYLE_TITLE="Module(s) style" COM_MODULES_FIELD_AUTOMATIC_TITLE_LABEL="Automatic Title" COM_MODULES_FIELD_AUTOMATIC_TITLE_DESC="Set yes if you want an automatic translated title. Its use depends on the Administrator template." COM_MODULES_FIELD_CACHE_TIME_DESC="The time in seconds before the module is recached." COM_MODULES_FIELD_CACHE_TIME_LABEL="Cache Time" COM_MODULES_FIELD_CACHING_DESC="Use the global cache setting to cache the content of this module or disable caching for this module." COM_MODULES_FIELD_CACHING_LABEL="Caching" COM_MODULES_FIELD_CLIENT_ID_DESC="The location of the module, Frontend or Backend. You can't change this value." COM_MODULES_FIELD_CLIENT_ID_LABEL="Module Location" COM_MODULES_FIELD_CONTENT_DESC="Text" COM_MODULES_FIELD_CONTENT_LABEL="Text" COM_MODULES_FIELD_CONTENT_TOO_LARGE="The content exceeds allowed limits" COM_MODULES_FIELD_MODULE_DESC="Module type." COM_MODULES_FIELD_MODULE_LABEL="Module Type" COM_MODULES_FIELD_MODULECLASS_SFX_DESC="A suffix to be applied to the CSS class of the module. This allows for individual module styling." COM_MODULES_FIELD_MODULECLASS_SFX_LABEL="Module Class Suffix" COM_MODULES_FIELD_NOTE_DESC="An optional note to display in the Module Manager." COM_MODULES_FIELD_NOTE_LABEL="Note" COM_MODULES_FIELD_POSITION_DESC="You may select a module position from the list of pre-defined positions or enter your own module position by typing the name in the field and pressing enter." COM_MODULES_FIELD_POSITION_LABEL="Position" COM_MODULES_FIELD_PUBLISH_DOWN_DESC="An optional date to Finish Publishing the module." COM_MODULES_FIELD_PUBLISH_DOWN_LABEL="Finish Publishing" COM_MODULES_FIELD_PUBLISH_UP_DESC="An optional date to Start Publishing the module." COM_MODULES_FIELD_PUBLISH_UP_LABEL="Start Publishing" COM_MODULES_FIELD_PUBLISHED_DESC="If published, this module will display on your site Frontend or Backend depending on the module." COM_MODULES_FIELD_SHOWTITLE_DESC="Show or hide module title on display. Effect will depend on the chrome style in the template." COM_MODULES_FIELD_SHOWTITLE_LABEL="Show Title" COM_MODULES_FIELD_TITLE_DESC="Module must have a title." COM_MODULES_FIELD_VALUE_NOCACHING="No caching" COM_MODULES_FIELD_MODULE_TAG_LABEL="Module Tag" COM_MODULES_FIELD_MODULE_TAG_DESC="The HTML tag for module." COM_MODULES_FIELD_BOOTSTRAP_SIZE_LABEL="Bootstrap Size" COM_MODULES_FIELD_BOOTSTRAP_SIZE_DESC="An option to specify how many columns the module will use." COM_MODULES_FIELD_HEADER_TAG_LABEL="Header Tag" COM_MODULES_FIELD_HEADER_TAG_DESC="The HTML tag for module header/title." COM_MODULES_FIELD_HEADER_CLASS_LABEL="Header Class" COM_MODULES_FIELD_HEADER_CLASS_DESC="The CSS class for module header/title." COM_MODULES_FIELD_MODULE_STYLE_LABEL="Module Style" COM_MODULES_FIELD_MODULE_STYLE_DESC="Use this option to override the template style for its position." COM_MODULES_FIELDSET_RULES="Permissions" COM_MODULES_FILTER_SEARCH_DESC="Filter by position name." COM_MODULES_GENERAL_FIELDSET_DESC="Configure module edit interface settings." COM_MODULES_HEADING_MODULE="Type" COM_MODULES_HEADING_MODULE_ASC="Type ascending" COM_MODULES_HEADING_MODULE_DESC="Type descending" COM_MODULES_HEADING_PAGES="Pages" COM_MODULES_HEADING_PAGES_ASC="Pages ascending" COM_MODULES_HEADING_PAGES_DESC="Pages descending" COM_MODULES_HEADING_POSITION="Position" COM_MODULES_HEADING_POSITION_ASC="Position ascending" COM_MODULES_HEADING_POSITION_DESC="Position descending" COM_MODULES_HEADING_TEMPLATES="Templates" COM_MODULES_HTML_PUBLISH_DISABLED="Publish module::Extension disabled" COM_MODULES_HTML_PUBLISH_ENABLED="Publish module::Extension enabled" COM_MODULES_HTML_UNPUBLISH_DISABLED="Unpublish module::Extension disabled" COM_MODULES_HTML_UNPUBLISH_ENABLED="Unpublish module::Extension enabled" COM_MODULES_MANAGER_MODULE="Modules: %s" COM_MODULES_MANAGER_MODULE_ADD="Modules: Add New Module" COM_MODULES_MANAGER_MODULE_EDIT="Modules: Edit Module" COM_MODULES_MANAGER_MODULES="Modules" COM_MODULES_MANAGER_MODULES_ADMIN="Modules (Administrator)" COM_MODULES_MANAGER_MODULES_SITE="Modules (Site)" COM_MODULES_MENU_ASSIGNMENT="Menu Assignment" COM_MODULES_MENU_ITEM_SEPARATOR="Separator" COM_MODULES_MENU_ITEM_HEADING="Heading" COM_MODULES_MENU_ITEM_ALIAS="Alias" COM_MODULES_MENU_ITEM_URL="URL" COM_MODULES_MODULE_ASSIGN="Module Assignment" COM_MODULES_MODULE="Module" COM_MODULES_MODULE_DESCRIPTION="Module Description" COM_MODULES_MODULE_TEMPLATE_POSITION="%1$s (%2$s)" COM_MODULES_MODULES="Modules" COM_MODULES_MODULES_FILTER_SEARCH_DESC="Search in module title and note. Prefix with ID: to search for a module ID." COM_MODULES_MODULES_FILTER_SEARCH_LABEL="Search Modules" COM_MODULES_MSG_MANAGE_NO_MODULES="There are no modules matching your query" COM_MODULES_MSG_MANAGE_EXTENSION_DISABLED="This module is disabled. Use Extensions => Manage to enable it." COM_MODULES_N_ITEMS_ARCHIVED="%d modules archived." COM_MODULES_N_ITEMS_ARCHIVED_1="%d module archived." COM_MODULES_N_ITEMS_CHECKED_IN_0="No module checked in." COM_MODULES_N_ITEMS_CHECKED_IN_1="%d module checked in." COM_MODULES_N_ITEMS_CHECKED_IN_MORE="%d modules checked in." COM_MODULES_N_ITEMS_DELETED="%d modules deleted." COM_MODULES_N_ITEMS_DELETED_1="%d module deleted." COM_MODULES_N_ITEMS_PUBLISHED="%d modules published." COM_MODULES_N_ITEMS_PUBLISHED_1="%d module published." COM_MODULES_N_ITEMS_TRASHED="%d modules trashed." COM_MODULES_N_ITEMS_TRASHED_1="%d module trashed." COM_MODULES_N_ITEMS_UNPUBLISHED="%d modules unpublished." COM_MODULES_N_ITEMS_UNPUBLISHED_1="%d module unpublished." COM_MODULES_N_MODULES_DUPLICATED="%d modules duplicated." COM_MODULES_N_MODULES_DUPLICATED_1="%d module duplicated." COM_MODULES_NO_ITEM_SELECTED="No modules selected." COM_MODULES_NODESCRIPTION="No description available." COM_MODULES_NONE=":: None ::" COM_MODULES_OPTION_MENU_ALL="On all pages" COM_MODULES_OPTION_MENU_EXCLUDE="On all pages except those selected" COM_MODULES_OPTION_MENU_INCLUDE="Only on the pages selected" COM_MODULES_OPTION_MENU_NONE="No pages" COM_MODULES_OPTION_ORDER_POSITION="%d. %s" COM_MODULES_OPTION_POSITION_TEMPLATE_DEFINED="Template" COM_MODULES_OPTION_POSITION_USER_DEFINED="User" COM_MODULES_OPTION_SELECT_CLIENT="- Select Type -" COM_MODULES_OPTION_SELECT_MENU_ITEM="- Select Menu Item -" COM_MODULES_OPTION_SELECT_MODULE="- Select Type -" ; Deprecated 4.0 COM_MODULES_OPTION_SELECT_PAGE="- Select Page -" COM_MODULES_OPTION_SELECT_POSITION="- Select Position -" COM_MODULES_OPTION_SELECT_TYPE="- Select type -" COM_MODULES_POSITION_ANALYTICS="Analytics" COM_MODULES_POSITION_BANNER="Banner" COM_MODULES_POSITION_BOTTOM="Bottom" COM_MODULES_POSITION_BREADCRUMB="Breadcrumb" COM_MODULES_POSITION_BREADCRUMBS="Breadcrumbs" COM_MODULES_POSITION_DEBUG="Debug" COM_MODULES_POSITION_FOOTER="Footer" COM_MODULES_POSITION_HEADER="Header" COM_MODULES_POSITION_LEFT2="Left 2" COM_MODULES_POSITION_LEFT="Left" COM_MODULES_POSITION_MAINNAV="Main Navigation" COM_MODULES_POSITION_NAV="Navigation" COM_MODULES_POSITION_OFFLINE="Offline" COM_MODULES_POSITION_POSITION-0="Position 0" COM_MODULES_POSITION_POSITION-10="Position 10" COM_MODULES_POSITION_POSITION-11="Position 11" COM_MODULES_POSITION_POSITION-12="Position 12" COM_MODULES_POSITION_POSITION-13="Position 13" COM_MODULES_POSITION_POSITION-14="Position 14" COM_MODULES_POSITION_POSITION-15="Position 15" COM_MODULES_POSITION_POSITION-1="Position 1" COM_MODULES_POSITION_POSITION-2="Position 2" COM_MODULES_POSITION_POSITION-3="Position 3" COM_MODULES_POSITION_POSITION-4="Position 4" COM_MODULES_POSITION_POSITION-5="Position 5" COM_MODULES_POSITION_POSITION-6="Position 6" COM_MODULES_POSITION_POSITION-7="Position 7" COM_MODULES_POSITION_POSITION-8="Position 8" COM_MODULES_POSITION_POSITION-9="Position 9" COM_MODULES_POSITION_RIGHT2="Right 2" COM_MODULES_POSITION_RIGHT="Right" COM_MODULES_POSITION_SUB1="Sub 1" COM_MODULES_POSITION_SUB2="Sub 2" COM_MODULES_POSITION_SUB3="Sub 3" COM_MODULES_POSITION_SUB4="Sub 4" COM_MODULES_POSITION_SUB5="Sub 5" COM_MODULES_POSITION_SUB6="Sub 6" COM_MODULES_POSITION_SUB="Sub" COM_MODULES_POSITION_SUBNAV="Sub Navigation" COM_MODULES_POSITION_SYNDICATE="Syndicate" COM_MODULES_POSITION_TOP2="Top 2" COM_MODULES_POSITION_TOP3="Top 3" COM_MODULES_POSITION_TOP4="Top 4" COM_MODULES_POSITION_TOP="Top" COM_MODULES_POSITION_USER1="User 1" COM_MODULES_POSITION_USER2="User 2" COM_MODULES_POSITION_USER3="User 3" COM_MODULES_POSITION_USER4="User 4" COM_MODULES_POSITION_USER5="User 5" COM_MODULES_POSITION_USER6="User 6" COM_MODULES_POSITION_USER7="User 7" COM_MODULES_POSITION_USER8="User 8" COM_MODULES_SAVE_SUCCESS="Module saved" COM_MODULES_TYPE_CHOOSE="Select a Module Type:" COM_MODULES_XML_DESCRIPTION="Component for module management in Backend" COM_MODULES_ADD_CUSTOM_POSITION="Add custom position" COM_MODULES_CUSTOM_POSITION="Active Positions" COM_MODULES_TYPE_OR_SELECT_POSITION="Type or Select a Position" COM_MODULES_DESELECT="Deselect" COM_MODULES_EXPAND="Expand" COM_MODULES_COLLAPSE="Collapse" COM_MODULES_SUBITEMS="Sub-items:" JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\��W0language/en-GB/en-GB.plg_system_languagecode.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SYSTEM_LANGUAGECODE="System - Language Code" PLG_SYSTEM_LANGUAGECODE_FIELD_DESC="Changes the language code used for the <em>%s</em> language." PLG_SYSTEM_LANGUAGECODE_FIELDSET_DESC="Changes the language code for the generated HTML document. Example usage: You have installed the fr-FR language pack and want the Search Engines to recognise the page as aimed at French-speaking Canada. Add the tag 'fr-CA' to the corresponding field for 'fr-FR' to resolve this." PLG_SYSTEM_LANGUAGECODE_FIELDSET_LABEL="Language Codes" PLG_SYSTEM_LANGUAGECODE_XML_DESCRIPTION="Provides the ability to change the language code in the generated HTML document to improve SEO.<br />The fields will appear when the plugin is enabled and saved.<br />More information at <a href="_QQ_"https://www.w3.org/TR/xhtml1/#docconf"_QQ_">W3.org</a>." PKb��\y�zkWW"language/en-GB/en-GB.com_cache.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CACHE="Cache" COM_CACHE_BACK_CACHE_MANAGER="Return to Cache" COM_CACHE_CLEAR_CACHE_ADMIN="Clear Cache Administrator" COM_CACHE_CLEAR_CACHE="Maintenance: Clear Cache" COM_CACHE_CLEAR_CACHE_ADMIN_TITLE="Maintenance: Clear Cache (Administrator)" COM_CACHE_CLEAR_CACHE_SITE_TITLE="Maintenance: Clear Cache (Site)" COM_CACHE_PURGE_EXPIRED_CACHE="Maintenance: Clear Expired Cache" COM_CACHE_CONFIGURATION="Cache: Options" COM_CACHE_ERROR_CACHE_CONNECTION_FAILED="Could not connect to the cache store to fetch the cache data." COM_CACHE_ERROR_CACHE_DRIVER_UNSUPPORTED="Could not read the cache data, the configured cache handler is not supported by this environment." COM_CACHE_EXPIRED_ITEMS_HAVE_BEEN_DELETED="The selected cache group(s) have been cleared." COM_CACHE_EXPIRED_ITEMS_HAVE_BEEN_PURGED="Expired cached items have been cleared." COM_CACHE_EXPIRED_ITEMS_DELETE_ERROR="Error clearing cache group(s): %s." COM_CACHE_EXPIRED_ITEMS_PURGING_ERROR="Error clearing expired cached items." COM_CACHE_FILTER_SEARCH_DESC="Search in cache group." COM_CACHE_FILTER_SEARCH_LABEL="Search Cache" COM_CACHE_GROUP="Cache Group" COM_CACHE_HEADING_GROUP_ASC="Cache Group ascending" COM_CACHE_HEADING_GROUP_DESC="Cache Group descending" COM_CACHE_HEADING_COUNT_ASC="Number of Files ascending" COM_CACHE_HEADING_COUNT_DESC="Number of Files descending" COM_CACHE_HEADING_SIZE_ASC="Size ascending" COM_CACHE_HEADING_SIZE_DESC="Size descending" COM_CACHE_MANAGER="Cache" COM_CACHE_MSG_ALL_CACHE_GROUPS_CLEARED="All cache group(s) have been cleared." COM_CACHE_MSG_SOME_CACHE_GROUPS_CLEARED="Only some cache group(s) have been cleared." COM_CACHE_NUMBER_OF_FILES="Number of Files" COM_CACHE_PURGE_CACHE_ADMIN="Clear Cache Administrator" COM_CACHE_PURGE_EXPIRED="Clear Expired Cache" COM_CACHE_PURGE_EXPIRED_ITEMS="Clear expired items" COM_CACHE_PURGE_INSTRUCTIONS="Select the Clear Expired Cache icon in the toolbar to delete all expired cache files. Note: Cache files that are still current will not be deleted." COM_CACHE_RESOURCE_INTENSIVE_WARNING="This can be resource intensive on sites with a large number of items!" COM_CACHE_SIZE="Size" COM_CACHE_SELECT_CLIENT="- Select Location -" COM_CACHE_XML_DESCRIPTION="Component for cache management." JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\"?�\��(language/en-GB/en-GB.mod_stats_admin.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_STATS_ADMIN="Statistics" MOD_STATS_ARTICLES="Articles" MOD_STATS_ARTICLES_VIEW_HITS="Articles View Hits" MOD_STATS_CACHING="Caching" MOD_STATS_FIELD_COUNTER_DESC="Display hit counter." MOD_STATS_FIELD_COUNTER_LABEL="Hit Counter" MOD_STATS_FIELD_INCREASECOUNTER_DESC="Enter the number of hits to increase the counter by." MOD_STATS_FIELD_INCREASECOUNTER_LABEL="Increase Counter" MOD_STATS_FIELD_SERVERINFO_DESC="Display server information." MOD_STATS_FIELD_SERVERINFO_LABEL="Server Information" MOD_STATS_FIELD_SITEINFO_DESC="Display site information." MOD_STATS_FIELD_SITEINFO_LABEL="Site Information" MOD_STATS_GZIP="Gzip" MOD_STATS_MYSQL="MySQL" MOD_STATS_OS="OS" MOD_STATS_PHP="PHP" MOD_STATS_TIME="Time" MOD_STATS_USERS="Users" MOD_STATS_WEBLINKS="Web Links" MOD_STATS_XML_DESCRIPTION="The Statistics Module shows information about your server installation together with statistics on the website users and the number of Articles in your database." PKb��\���\"language/en-GB/en-GB.com_login.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_LOGIN="Login" COM_LOGIN_JOOMLA_ADMINISTRATION_LOGIN="Joomla! Administration Login" COM_LOGIN_RETURN_TO_SITE_HOME_PAGE="Go to site home page" COM_LOGIN_VALID="Use a valid username and password to gain access to the Administrator Backend." COM_LOGIN_XML_DESCRIPTION="This component lets users login to the site." PKb��\�#����+language/en-GB/en-GB.plg_finder_content.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_CONTENT="Smart Search - Content" PLG_FINDER_CONTENT_XML_DESCRIPTION="Updates the indexes of Joomla! Articles whenever an article is created, modified or deleted. NOTE the Content - Smart Search plugin must be enabled." PLG_FINDER_QUERY_FILTER_BRANCH_P_ARTICLE="Articles" PLG_FINDER_QUERY_FILTER_BRANCH_P_AUTHOR="Authors" PLG_FINDER_QUERY_FILTER_BRANCH_S_ARTICLE="Article" PLG_FINDER_QUERY_FILTER_BRANCH_S_AUTHOR="Author" PKb��\���qq$language/en-GB/en-GB.mod_version.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_VERSION="Joomla! Version Information" MOD_VERSION_FORMAT_DESC="The long version includes code name and date." MOD_VERSION_FORMAT_LABEL="Version Format" MOD_VERSION_FORMAT_LONG="Long" MOD_VERSION_FORMAT_SHORT="Short" MOD_VERSION_PRODUCT_DESC="Include the text "Joomla!"." MOD_VERSION_PRODUCT_LABEL="Show Joomla!" MOD_VERSION_XML_DESCRIPTION="This module displays the Joomla! version."PKb��\c�ުzz*language/en-GB/en-GB.com_installer.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_INSTALLER="Installer" COM_INSTALLER_DATABASE_VIEW_DEFAULT_DESC="Check and fix any database issues with your website." COM_INSTALLER_DATABASE_VIEW_DEFAULT_TITLE="Check Database" COM_INSTALLER_DISCOVER_VIEW_DEFAULT_DESC="Discover extensions that have not gone through the normal installation process." COM_INSTALLER_DISCOVER_VIEW_DEFAULT_TITLE="Discover Extensions" COM_INSTALLER_INSTALL_VIEW_DEFAULT_DESC="Install extensions into your Joomla! installation." COM_INSTALLER_INSTALL_VIEW_DEFAULT_TITLE="Install Extensions" COM_INSTALLER_LANGUAGES_VIEW_DEFAULT_DESC="Install Language packs into your Joomla! website." COM_INSTALLER_LANGUAGES_VIEW_DEFAULT_TITLE="Install Languages" COM_INSTALLER_MANAGE_VIEW_DEFAULT_DESC="Manage extensions that are already installed on your Joomla! website." COM_INSTALLER_MANAGE_VIEW_DEFAULT_TITLE="Manage Extensions" COM_INSTALLER_UPDATESITES_VIEW_DEFAULT_DESC="Manage "_QQ_"Update Sites"_QQ_" for various installed extensions." COM_INSTALLER_UPDATESITES_VIEW_DEFAULT_TITLE="Update Sites" COM_INSTALLER_UPDATE_VIEW_DEFAULT_DESC="Find and Install updates for the installed extensions." COM_INSTALLER_UPDATE_VIEW_DEFAULT_TITLE="Update Extensions" COM_INSTALLER_WARNINGS_VIEW_DEFAULT_DESC="Displays warnings related to your installed extensions." COM_INSTALLER_WARNINGS_VIEW_DEFAULT_TITLE="Warnings" COM_INSTALLER_XML_DESCRIPTION="Installer component for adding, removing and upgrading extensions." PKb��\�N�.language/en-GB/en-GB.plg_search_categories.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_CATEGORIES_CATEGORIES="Categories" PLG_SEARCH_CATEGORIES="Search - Categories" PLG_SEARCH_CATEGORIES_FIELD_SEARCHLIMIT_DESC="Number of search items to return." PLG_SEARCH_CATEGORIES_FIELD_SEARCHLIMIT_LABEL="Search Limit" PLG_SEARCH_CATEGORIES_XML_DESCRIPTION="Enables searching of Category information."PKb��\\��{{(language/en-GB/en-GB.mod_version.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_VERSION="Joomla! Version Information" MOD_VERSION_LAYOUT_DEFAULT="Default" MOD_VERSION_XML_DESCRIPTION="This module displays the Joomla! version." PKb��\Z�?��)language/en-GB/en-GB.com_messages.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_MESSAGES="Messaging" COM_MESSAGES_ADD="New Private Message" COM_MESSAGES_READ="Read Private Messages" COM_MESSAGES_XML_DESCRIPTION="Component for private messaging support in the Backend."PKb��\C��; ; #language/en-GB/en-GB.tpl_hathor.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 HATHOR="Hathor Administrator template" TPL_HATHOR_ALTERNATE_MENU_DESC="Use the alternative menu which integrates mouse and keyboard. JavaScript Required. The regular menu for Hathor is accessible with or without JavaScript, but leaves the mouse and keyboard independent." TPL_HATHOR_ALTERNATE_MENU_LABEL="Alternative Menu" TPL_HATHOR_BOLD_TEXT_DESC="Use bold text." TPL_HATHOR_BOLD_TEXT_LABEL="Bold Text" TPL_HATHOR_CHANGED_DEFAULT_TEMPLATE_TO_ISIS="We have set the default administrator template style to '%s'" TPL_HATHOR_CHECKMARK_ALL="Checkmark All" TPL_HATHOR_COLOUR_CHOICE_BLUE="Blue" TPL_HATHOR_COLOUR_CHOICE_DESC="Select the colour palette to use with the template. You can use this option to select a high contrast version or use it to create custom branding." TPL_HATHOR_COLOUR_CHOICE_LABEL="Select Colour" TPL_HATHOR_COLOUR_CHOICE_STANDARD="Standard" TPL_HATHOR_COLOUR_CHOICE_HIGH_CONTRAST="High Contrast" TPL_HATHOR_COLOUR_CHOICE_BROWN="Brown" TPL_HATHOR_COM_MENUS_MENU="Menu" TPL_HATHOR_COM_MODULES_CUSTOM_POSITION_LABEL="Select" TPL_HATHOR_CPANEL_LINK_TEXT="Return to Control Panel" TPL_HATHOR_GO="Go" TPL_HATHOR_LOGO_DESC="Select or upload a custom logo for the administrator template." TPL_HATHOR_LOGO_LABEL="Logo" TPL_HATHOR_MAIN_MENU="Main Menu" TPL_HATHOR_MESSAGE_POSTINSTALL_TITLE="Information about the Hathor administrator template" TPL_HATHOR_MESSAGE_POSTINSTALL_BODY="The Hathor administrator template style is set as your personal or global default administrator template. Please note - any new features for Joomla will only be available with the Isis template. We recommend that you switch your default backend template style to Isis. You can do this by selecting the button below. This will only change the default setting for the administrator template, if you have access to it, as well as your personal default style, if necessary. It does not change the frontend template or any other user's settings." TPL_HATHOR_MESSAGE_POSTINSTALL_ACTION="Set the default administrator template style to Isis" TPL_HATHOR_SHOW_SITE_NAME_DESC="Show the site name in the template header." TPL_HATHOR_SHOW_SITE_NAME_LABEL="Show Site Name" TPL_HATHOR_SKIP_TO_MAIN_CONTENT="Skip to Main Content" TPL_HATHOR_SUB_MENU="Sub Menu" TPL_HATHOR_XML_DESCRIPTION="Hathor is an accessible Administrator template for Joomla! The Colour CSS files can also be used for custom colour branding." PKb��\ҙ�+language/en-GB/en-GB.plg_system_sef.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEF_XML_DESCRIPTION="Adds SEF support to links in the document. It operates directly on the HTML and does not require a special tag." PLG_SYSTEM_SEF="System - SEF"PKb��\�����!language/en-GB/en-GB.mod_feed.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_FEED="Feed Display" MOD_FEED_ERR_CACHE="Please make cache folder writable." MOD_FEED_ERR_NO_URL="No feed URL specified." MOD_FEED_ERR_FEED_NOT_RETRIEVED="Feed not found." MOD_FEED_FIELD_DATE_DESC="Show the publication date of the feed." MOD_FEED_FIELD_DATE_LABEL="Feed Date" MOD_FEED_FIELD_DESCRIPTION_DESC="Show the description text for the whole Feed." MOD_FEED_FIELD_DESCRIPTION_LABEL="Feed Description" MOD_FEED_FIELD_IMAGE_DESC="Show the image associated with the whole feed." MOD_FEED_FIELD_IMAGE_LABEL="Feed Image" MOD_FEED_FIELD_ITEMDATE_DESC="Show the publication date of individual RSS Items." MOD_FEED_FIELD_ITEMDATE_LABEL="Publication Date" MOD_FEED_FIELD_ITEMDESCRIPTION_DESC="Show the Description or Intro text of individual RSS Items." MOD_FEED_FIELD_ITEMDESCRIPTION_LABEL="Item Description" MOD_FEED_FIELD_ITEMS_DESC="Enter number of RSS items to display." MOD_FEED_FIELD_ITEMS_LABEL="Items" MOD_FEED_FIELD_RSSTITLE_DESC="Display news feed title." MOD_FEED_FIELD_RSSTITLE_LABEL="Feed Title" MOD_FEED_FIELD_RSSURL_DESC="Enter the URL of the RSS/RDF/ATOM feed." MOD_FEED_FIELD_RSSURL_LABEL="Feed URL" MOD_FEED_FIELD_RTL_DESC="Display feed in RTL direction." MOD_FEED_FIELD_RTL_LABEL="RTL Feed" MOD_FEED_FIELD_WORDCOUNT_DESC="Allows you to limit the amount of visible Item description text. 0 will show all the text." MOD_FEED_FIELD_WORDCOUNT_LABEL="Word Count" MOD_FEED_XML_DESCRIPTION="This module allows the displaying of a syndicated feed." PKb��\��FF-language/en-GB/en-GB.plg_content_vote.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_VOTE="Content - Vote" PLG_VOTE_XML_DESCRIPTION="Add Voting functionality to Articles."PKb��\��|��-language/en-GB/en-GB.plg_system_debug.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_DEBUG_XML_DESCRIPTION="This plugin provides a variety of system information and help for the creation of translation files." PLG_SYSTEM_DEBUG="System - Debug" PKb��\��N�)language/en-GB/en-GB.plg_system_debug.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_DEBUG_BYTES="Bytes" PLG_DEBUG_CALL_STACK="Call Stack" PLG_DEBUG_CALL_STACK_CALLER="Caller" PLG_DEBUG_CALL_STACK_FILE_AND_LINE="File and line number" PLG_DEBUG_CALL_STACK_SAME_FILE="<em>Same as call in the line below.</em>" PLG_DEBUG_ERRORS="Errors" PLG_DEBUG_EXPLAIN="Explain" PLG_DEBUG_FIELD_ALLOWED_GROUPS_DESC="Optionally restrict users that can see debug information to those in the selected user groups. If none selected, all users will see the debug information." PLG_DEBUG_FIELD_ALLOWED_GROUPS_LABEL="Allowed Groups" PLG_DEBUG_FIELD_EXECUTEDSQL_DESC="If enabled, executed SQL queries will be logged. Only use this setting for short periods of time and for benchmarking purposes." PLG_DEBUG_FIELD_EXECUTEDSQL_LABEL="Log Executed Queries" PLG_DEBUG_FIELD_LANGUAGE_ERRORFILES_DESC="Display a list of the language files that are in error according to the Joomla ini specification." PLG_DEBUG_FIELD_LANGUAGE_ERRORFILES_LABEL="Show Errors When Parsing Language Files" PLG_DEBUG_FIELD_LANGUAGE_FILES_DESC="Display a list of the language files that Joomla has tried to load." PLG_DEBUG_FIELD_LANGUAGE_FILES_LABEL="Show Language Files" PLG_DEBUG_FIELD_LANGUAGE_STRING_DESC="Display a list of the untranslated language strings." PLG_DEBUG_FIELD_LANGUAGE_STRING_LABEL="Show Language String" PLG_DEBUG_FIELD_LOGS_DESC="Display a list of logged messages." PLG_DEBUG_FIELD_LOGS_LABEL="Show Log Entries" PLG_DEBUG_FIELD_LOG_CATEGORIES_DESC="A comma separated list of log categories to include. Common log categories include but are not limited to: database, databasequery, database-error, deprecated and jerror. If empty, all categories will be shown." PLG_DEBUG_FIELD_LOG_CATEGORIES_LABEL="Log Categories" PLG_DEBUG_FIELD_LOG_CATEGORY_MODE_DESC="Select if the listed categories should be included or excluded." PLG_DEBUG_FIELD_LOG_CATEGORY_MODE_EXCLUDE="Exclude" PLG_DEBUG_FIELD_LOG_CATEGORY_MODE_INCLUDE="Include" PLG_DEBUG_FIELD_LOG_CATEGORY_MODE_LABEL="Log Category Mode" PLG_DEBUG_FIELD_LOG_DEPRECATED_DESC="If enabled, API marked as deprecated will be logged. Only use this setting for short periods of time for refactoring purposes." PLG_DEBUG_FIELD_LOG_DEPRECATED_LABEL="Log Deprecated API" PLG_DEBUG_FIELD_LOG_EVERYTHING_DESC="If enabled, all log messages produced by Joomla! will be logged except for deprecated API and database queries. Only use this setting for short periods of time for site debugging purposes." PLG_DEBUG_FIELD_LOG_EVERYTHING_LABEL="Log Almost Everything" PLG_DEBUG_FIELD_LOG_PRIORITIES_ALERT="Alert" PLG_DEBUG_FIELD_LOG_PRIORITIES_ALL="All" PLG_DEBUG_FIELD_LOG_PRIORITIES_CRITICAL="Critical" PLG_DEBUG_FIELD_LOG_PRIORITIES_DEBUG="Debug" PLG_DEBUG_FIELD_LOG_PRIORITIES_DESC="Select which log priority levels to display." PLG_DEBUG_FIELD_LOG_PRIORITIES_EMERGENCY="Emergency" PLG_DEBUG_FIELD_LOG_PRIORITIES_ERROR="Error" PLG_DEBUG_FIELD_LOG_PRIORITIES_INFO="Info" PLG_DEBUG_FIELD_LOG_PRIORITIES_LABEL="Log Priorities" PLG_DEBUG_FIELD_LOG_PRIORITIES_NOTICE="Notice" PLG_DEBUG_FIELD_LOG_PRIORITIES_WARNING="Warning" PLG_DEBUG_FIELD_MEMORY_DESC="Display the total memory usage." PLG_DEBUG_FIELD_MEMORY_LABEL="Show Memory Usage" PLG_DEBUG_FIELD_PROFILING_DESC="Display the profiling waypoints." PLG_DEBUG_FIELD_PROFILING_LABEL="Show Profiling" PLG_DEBUG_FIELD_QUERIES_DESC="Display a list of the queries executed while displaying the page." PLG_DEBUG_FIELD_QUERIES_LABEL="Show Queries" PLG_DEBUG_FIELD_QUERY_TYPES_DESC="Display a list of unique query types and their number of occurrences for the current page. Useful for finding out about repeated queries that are either redundant or which can be grouped into a single, more efficient query." PLG_DEBUG_FIELD_QUERY_TYPES_LABEL="Show Query Types" PLG_DEBUG_FIELD_REFRESH_ASSETS_DESC="If enabled will, on each page reload, add a different hash to every script/stylesheet file with auto version so that they never use the browser cache." PLG_DEBUG_FIELD_REFRESH_ASSETS_LABEL="Refresh Assets" PLG_DEBUG_FIELD_SESSION_DESC="Display the session data." PLG_DEBUG_FIELD_SESSION_LABEL="Show Session Data" PLG_DEBUG_FIELD_STRIP_FIRST_DESC="In multi-word strings, always strip the first word." PLG_DEBUG_FIELD_STRIP_FIRST_LABEL="Strip First Word" PLG_DEBUG_FIELD_STRIP_PREFIX_DESC="Strip words from the beginning of the string. For multiple words, use the format: (word1|word2)." PLG_DEBUG_FIELD_STRIP_PREFIX_LABEL="Strip From Start" PLG_DEBUG_FIELD_STRIP_SUFFIX_DESC="Strip words from the end of the string. For multiple words, use the format: (word1|word2)." PLG_DEBUG_FIELD_STRIP_SUFFIX_LABEL="Strip From End" PLG_DEBUG_LANGUAGE_FIELDSET_LABEL="Language" PLG_DEBUG_LANGUAGE_FILES_IN_ERROR="Parsing errors in language files" PLG_DEBUG_LANGUAGE_FILES_LOADED="Language Files Loaded" PLG_DEBUG_LANG_LOADED="Loaded" PLG_DEBUG_LANG_NOT_LOADED="Not loaded" PLG_DEBUG_LINK_FORMAT="Add xdebug.file_link_format directive to your php.ini file to have links for files." PLG_DEBUG_LOGGING_FIELDSET_LABEL="Logging" PLG_DEBUG_LOGS="Log Messages" PLG_DEBUG_LOGS_DEPRECATED_FOUND_TEXT="The code that is marked as deprecated will not work in upcoming Joomla versions, please review it." PLG_DEBUG_LOGS_DEPRECATED_FOUND_TITLE="%s deprecated messages logged!" PLG_DEBUG_LOGS_LOGGED="%s messages logged" PLG_DEBUG_MEMORY="Memory" PLG_DEBUG_MEMORY_USED_FOR_QUERY="Query memory: %s Memory before query: %s" PLG_DEBUG_MEMORY_USAGE="Memory Usage" PLG_DEBUG_NO_PROFILE="No SHOW PROFILE (maybe because there are more than 100 queries)" PLG_DEBUG_OTHER_QUERIES="OTHER Tables:" PLG_DEBUG_PROFILE="Profile" PLG_DEBUG_PROFILE_INFORMATION="Profile Information" PLG_DEBUG_QUERIES="Database Queries" PLG_DEBUG_QUERIES_LOGGED="%d Queries Logged" PLG_DEBUG_QUERIES_TIME="Database queries total: %s" PLG_DEBUG_QUERY_AFTER_LAST="After last query: %s" PLG_DEBUG_QUERY_DUPLICATES="Duplicate queries" PLG_DEBUG_QUERY_DUPLICATES_FOUND="Duplicate found!" PLG_DEBUG_QUERY_DUPLICATES_NUMBER="%s duplicates" PLG_DEBUG_QUERY_DUPLICATES_TOTAL_NUMBER="%s duplicate found!" PLG_DEBUG_QUERY_EXPLAIN_NOT_POSSIBLE="EXPLAIN not possible on query: %s" PLG_DEBUG_QUERY_TIME="Query Time: %s" PLG_DEBUG_QUERY_TYPES_LOGGED="%d Query Types Logged, Sorted by Occurrences." PLG_DEBUG_QUERY_TYPE_AND_OCCURRENCES="%2$d × %1$s" PLG_DEBUG_ROWS_RETURNED_BY_QUERY="Rows returned: %s" PLG_DEBUG_SELECT_QUERIES="SELECT Tables:" PLG_DEBUG_SESSION="Session" PLG_DEBUG_TIME="Time" PLG_DEBUG_TITLE="Joomla! Debug Console" PLG_DEBUG_UNKNOWN_FILE="Unknown file" PLG_DEBUG_UNTRANSLATED_STRINGS="Untranslated Strings" PLG_DEBUG_WARNING_NO_INDEX="NO INDEX KEY COULD BE USED" PLG_DEBUG_WARNING_NO_INDEX_DESC="This table probably has a missing index on WHERE equalities and/or JOIN ON column(s) or is written in a way that no index can be used, causing a time-consuming full table scan." PLG_DEBUG_WARNING_USING_FILESORT="Using filesort" PLG_DEBUG_WARNING_USING_FILESORT_DESC="This table probably has a missing index on WHERE/ON equality column(s) ending by the ORDER BY column(s) or is written in a way that no index can be used, causing a time-consuming filesort." PLG_DEBUG_XML_DESCRIPTION="This plugin provides a variety of system information as well as help for the creation of translation files." PLG_SYSTEM_DEBUG="System - Debug" PKb��\��"�ff.language/en-GB/en-GB.plg_finder_categories.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_CATEGORIES="Smart Search - Categories" PLG_FINDER_CATEGORIES_XML_DESCRIPTION="This plugin indexes Joomla! Categories." PKb��\o��ˣ�4language/en-GB/en-GB.plg_editors-xtd_article.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_ARTICLE_XML_DESCRIPTION="Displays a button to insert links to articles into an Article. Displays a popup allowing you to choose the article." PLG_EDITORS-XTD_ARTICLE="Button - Article" PKb��\j�h� � !language/en-GB/en-GB.tpl_isis.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 ISIS="Isis Administrator template" TPL_ISIS_CLEAR_CACHE="Clear Cache" TPL_ISIS_COLOR_DESC="Choose a colour for the navigation bar. If left blank, the default value will be used." TPL_ISIS_COLOR_HEADER_DESC="Choose a colour for the header. If left blank, the default value will be used." TPL_ISIS_COLOR_HEADER_LABEL="Header Colour" TPL_ISIS_COLOR_LABEL="Nav Bar Colour" TPL_ISIS_COLOR_LOGIN_BACKGROUND_DESC="Choose a colour for the background of the login screen. If left blank, the default value will be used." TPL_ISIS_COLOR_LOGIN_BACKGROUND_LABEL="Login Background Colour" TPL_ISIS_COLOR_SIDEBAR_DESC="Choose a colour for the Sidebar Background. If left blank, the default value will be used." TPL_ISIS_COLOR_SIDEBAR_LABEL="Sidebar Colour" TPL_ISIS_COLOR_LINK_DESC="Choose a colour for the Link. If left blank, the default value will be used." TPL_ISIS_COLOR_LINK_LABEL="Link Colour" TPL_ISIS_CONTROL_PANEL="Control Panel" TPL_ISIS_EDIT_ACCOUNT="Edit Account" TPL_ISIS_FIELD_ADMIN_MENUS_DESC="If you intend to use Joomla Administrator on a monitor, set this to 'No'. It will prevent the collapse of the Administrator menus when reducing the width of the window. Default is 'Yes'." TPL_ISIS_FIELD_ADMIN_MENUS_LABEL="Collapse Administrator Menu" TPL_ISIS_HEADER_DESC="Optional display of header." TPL_ISIS_HEADER_LABEL="Display Header" TPL_ISIS_INSTALLER="Installer" TPL_ISIS_ISFREESOFTWARE="Joomla is free software released under the GNU General Public License." TPL_ISIS_LOGIN_LOGO_DESC="Select or upload a custom logo for the login area of administrator template." TPL_ISIS_LOGIN_LOGO_LABEL="Login Logo" TPL_ISIS_LOGO_DESC="Upload a custom logo for the administrator template." TPL_ISIS_LOGO_LABEL="Logo" TPL_ISIS_LOGOUT="Logout" TPL_ISIS_PREVIEW="Preview %s" TPL_ISIS_SKIP_TO_MAIN_CONTENT="Skip to Main Content" TPL_ISIS_SKIP_TO_MAIN_CONTENT_HERE="Main content begins here" TPL_ISIS_STATUS_BOTTOM="Fixed bottom" TPL_ISIS_STATUS_DESC="Choose the location of the status module." TPL_ISIS_STATUS_LABEL="Status Module Position" TPL_ISIS_STATUS_TOP="Top" TPL_ISIS_STICKY_DESC="Optionally set the toolbar to a fixed (pinned) location." TPL_ISIS_STICKY_LABEL="Pinned Toolbar" TPL_ISIS_TOGGLE_MENU="Toggle Navigation" TPL_ISIS_TOOLBAR="Toolbar" TPL_ISIS_USERMENU="User Menu" TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." PKb��\��� � 0language/en-GB/en-GB.plg_authentication_ldap.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_AUTHENTICATION_LDAP="Authentication - LDAP" PLG_LDAP_FIELD_AUTHMETHOD_DESC="The authorisation method to validate the credentials." PLG_LDAP_FIELD_AUTHMETHOD_LABEL="Authorisation Method" PLG_LDAP_FIELD_BASEDN_DESC="The base DN of your LDAP server, eg o=example.com." PLG_LDAP_FIELD_BASEDN_LABEL="Base DN" PLG_LDAP_FIELD_EMAIL_DESC="LDAP attribute which has the User's email address." PLG_LDAP_FIELD_EMAIL_LABEL="Map: Email" PLG_LDAP_FIELD_FULLNAME_DESC="LDAP attribute which has the User's full name." PLG_LDAP_FIELD_FULLNAME_LABEL="Map: Full Name" PLG_LDAP_FIELD_IGNORE_REQCERT_TLS_DESC="When enabled ignore the server certificate, this is useful when running for example Samba 4 with a self-signed certificate." PLG_LDAP_FIELD_IGNORE_REQCERT_TLS_LABEL="Ignore Certificate" PLG_LDAP_FIELD_HOST_DESC="Eg: openldap.example.com." PLG_LDAP_FIELD_HOST_LABEL="Host" PLG_LDAP_FIELD_LDAPDEBUG_DESC="Enables debug hardcoded to level 7" PLG_LDAP_FIELD_LDAPDEBUG_LABEL="Debug" PLG_LDAP_FIELD_NEGOCIATE_DESC="Negotiate TLS encryption with the LDAP server. This requires all traffic to and from the LDAP server to be encrypted." PLG_LDAP_FIELD_NEGOCIATE_LABEL="Negotiate TLS" PLG_LDAP_FIELD_PASSWORD_DESC="The Connect Password is the password of an administrative account. This is used in Authenticate then Bind and Authenticated Compare authorisation methods." PLG_LDAP_FIELD_PASSWORD_LABEL="Connect Password" PLG_LDAP_FIELD_PORT_DESC="Default port is 389." PLG_LDAP_FIELD_PORT_LABEL="Port" PLG_LDAP_FIELD_REFERRALS_DESC="This option sets the value of the LDAP_OPT_REFERRALS flag. You will need to set it to No for Windows 2003 servers." PLG_LDAP_FIELD_REFERRALS_LABEL="Follow Referrals" PLG_LDAP_FIELD_SEARCHSTRING_DESC="A query string used to search for a given User. The [search] keyword is dynamically replaced by the User-provided login. An example string is: uid=[search]. Several strings can be used separated by semicolons. Only used when searching." PLG_LDAP_FIELD_SEARCHSTRING_LABEL="Search String" PLG_LDAP_FIELD_UID_DESC="LDAP Attribute which has the User's Login ID. For Active Directory this is sAMAccountName." PLG_LDAP_FIELD_UID_LABEL="Map: User ID" PLG_LDAP_FIELD_USERNAME_DESC="The Connect Username and Connect Password define connection parameters for the DN lookup phase. Two options are available:- Anonymous DN lookup (leave both fields blank); Administrative connection: Connect Username is the username of an administrative account, for example Administrator. Connect password is the actual password of your administrative account." PLG_LDAP_FIELD_USERNAME_LABEL="Connect Username" PLG_LDAP_FIELD_USERSDN_DESC="The [username] keyword is dynamically replaced by the User-provided login. An example string is: uid=[username], dc=my-domain, dc=com. Several strings can be used, separated by semicolons. Only used for direct binds." PLG_LDAP_FIELD_USERSDN_LABEL="User's DN" PLG_LDAP_FIELD_V3_DESC="Default is LDAP2, but the latest versions of OpenLdap require clients to use LDAPV3." PLG_LDAP_FIELD_V3_LABEL="LDAP V3" PLG_LDAP_FIELD_VALUE_BINDSEARCH="Bind and Search" PLG_LDAP_FIELD_VALUE_BINDUSER="Bind Directly as User" PLG_LDAP_XML_DESCRIPTION="Handles User Authentication against an LDAP server.<br /><strong> Warning! You must have at least one authentication plugin enabled or you will lose all access to your site.</strong>" PKb��\=� ��.language/en-GB/en-GB.plg_captcha_recaptcha.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CAPTCHA_RECAPTCHA="CAPTCHA - reCAPTCHA" PLG_CAPTCHA_RECAPTCHA_XML_DESCRIPTION="This CAPTCHA plugin uses the reCAPTCHA service to prevent spammers while it helps to digitize books, newspapers and old radio shows. To get a site and secret key for your domain, go to <a href="_QQ_"https://www.google.com/recaptcha"_QQ_" target="_QQ_"_blank"_QQ_">https://www.google.com/recaptcha</a>. To use this for new account registration, go to Options in the User Manager and select CAPTCHA - reCAPTCHA as the CAPTCHA." PLG_PLG_RECAPTCHA_VERSION_1_POSTINSTALL_ACTION="Update reCAPTCHA settings" PLG_PLG_RECAPTCHA_VERSION_1_POSTINSTALL_BODY="Support for reCAPTCHA v1 will be turned off by Google on March 31, 2018. Please update the settings in the reCAPTCHA plugin to use Version 2.0." PLG_PLG_RECAPTCHA_VERSION_1_POSTINSTALL_TITLE="reCAPTCHA v1 - discontinued" ; Params PLG_RECAPTCHA_VERSION_1_WARNING_LABEL="You have selected Version 1.0. As of March 31, 2018 this will no longer work and you should use Version 2.0." PLG_RECAPTCHA_VERSION_DESC="Version 2.0 is the recommended version." PLG_RECAPTCHA_VERSION_LABEL="Version" PLG_RECAPTCHA_CALLBACK_DESC="(Optional) JavaScript callback, executed after successful reCAPTCHA response." PLG_RECAPTCHA_CALLBACK_LABEL="Callback" PLG_RECAPTCHA_ERROR_CALLBACK_DESC="(Optional) JavaScript callback, executed when the reCAPTCHA encounters an error." PLG_RECAPTCHA_ERROR_CALLBACK_LABEL="Error Callback" PLG_RECAPTCHA_EXPIRED_CALLBACK_DESC="(Optional) JavaScript callback, executed when the reCAPTCHA expired." PLG_RECAPTCHA_EXPIRED_CALLBACK_LABEL="Expired Callback" PLG_RECAPTCHA_LANG_DESC="Select the language for the reCAPTCHA. If default is set and the language file has a custom translation, it will be used." PLG_RECAPTCHA_LANG_LABEL="Language" PLG_RECAPTCHA_PRIVATE_KEY_DESC="Used in the communication between your server and the reCAPTCHA server. Be sure to keep it a secret. See the plugin description for instructions on getting a secret key." PLG_RECAPTCHA_PRIVATE_KEY_LABEL="Secret Key" PLG_RECAPTCHA_PUBLIC_KEY_DESC="Used in the JavaScript code that is served to your users. See the plugin description for instructions on getting a site key." PLG_RECAPTCHA_PUBLIC_KEY_LABEL="Site Key" PLG_RECAPTCHA_SIZE_DESC="Select the size for the reCAPTCHA field." PLG_RECAPTCHA_SIZE_LABEL="Size" PLG_RECAPTCHA_TABINDEX_DESC="The tabindex of the reCAPTCHA widget." PLG_RECAPTCHA_TABINDEX_LABEL="Tabindex" PLG_RECAPTCHA_THEME_BLACKGLASS="BlackGlass" PLG_RECAPTCHA_THEME_CLEAN="Clean" PLG_RECAPTCHA_THEME_COMPACT="Compact" PLG_RECAPTCHA_THEME_DARK="Dark" PLG_RECAPTCHA_THEME_DESC="Defines which theme to use for reCAPTCHA." PLG_RECAPTCHA_THEME_LABEL="Theme" PLG_RECAPTCHA_THEME_LIGHT="Light" PLG_RECAPTCHA_THEME_NORMAL="Normal" PLG_RECAPTCHA_THEME_RED="Red" PLG_RECAPTCHA_THEME_WHITE="White" ; The following two strings are deprecated and will be removed with 4.0. They generate wrong plural detection in Crowdin. PLG_RECAPTCHA_VERSION_1="1.0" PLG_RECAPTCHA_VERSION_2="2.0" PLG_RECAPTCHA_VERSION_V1="1.0" PLG_RECAPTCHA_VERSION_V2="2.0" ; Error messages PLG_RECAPTCHA_ERROR_EMPTY_SOLUTION="Please complete the CAPTCHA." PLG_RECAPTCHA_ERROR_INCORRECT_CAPTCHA_SOL="The CAPTCHA was incorrect." PLG_RECAPTCHA_ERROR_INVALID_REFERRER="reCAPTCHA API keys are tied to a specific domain name for security reasons." PLG_RECAPTCHA_ERROR_INVALID_REQUEST_COOKIE="The challenge parameter of the verify script was incorrect." PLG_RECAPTCHA_ERROR_INVALID_SITE_PRIVATE_KEY="We weren't able to verify the secret key." PLG_RECAPTCHA_ERROR_INVALID_SITE_PUBLIC_KEY="We weren't able to verify the site key." PLG_RECAPTCHA_ERROR_NO_IP="For security reasons, you must pass the remote IP address to reCAPTCHA." PLG_RECAPTCHA_ERROR_NO_PRIVATE_KEY="reCAPTCHA plugin needs a secret key to be set in its parameters. Please contact a site administrator." PLG_RECAPTCHA_ERROR_NO_PUBLIC_KEY="reCAPTCHA plugin needs a site key to be set in its parameters. Please contact a site administrator." PLG_RECAPTCHA_ERROR_RECAPTCHA_NOT_REACHABLE="Unable to contact the reCAPTCHA verify server." PLG_RECAPTCHA_ERROR_UNKNOWN="Unknown error." PLG_RECAPTCHA_ERROR_VERIFY_PARAMS_INCORRECT="The parameters to verify were incorrect, make sure you are passing all the required parameters." ; Privacy notice PLG_RECAPTCHA_PRIVACY_CAPABILITY_IP_ADDRESS="The reCAPTCHA plugin integrates with Google's reCAPTCHA system as a spam protection service. As part of this service, the IP address of the user answering the captcha challenge is transmitted to Google." ; Uncomment(remove the ";" from the beginning of the line) the following lines if reCAPTCHA is not available in your language ; When uncommenting, do NOT translate PLG_RECAPTCHA_CUSTOM_LANG ; As of 01/01/2012, the following languages do not need translation: en, nl, fr, de, pt, ru, es, tr ;PLG_RECAPTCHA_AUDIO_CHALLENGE="Get an audio challenge" ;PLG_RECAPTCHA_CANT_HEAR_THIS="Download sound as MP3" ;PLG_RECAPTCHA_CUSTOM_LANG="true" ;PLG_RECAPTCHA_HELP_BTN="Help" ;PLG_RECAPTCHA_INCORRECT_TRY_AGAIN="Incorrect. Try again." ;PLG_RECAPTCHA_INSTRUCTIONS_AUDIO="Type what you hear:" ;PLG_RECAPTCHA_INSTRUCTIONS_VISUAL="Type the two words:" ;PLG_RECAPTCHA_PLAY_AGAIN="Play sound again" ;PLG_RECAPTCHA_REFRESH_BTN="Get a new challenge" ;PLG_RECAPTCHA_VISUAL_CHALLENGE="Get a visual challenge" PKb��\�ϋ%�@�@&language/en-GB/en-GB.com_templates.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_TEMPLATES="Templates" COM_TEMPLATES_ADVANCED_FIELDSET_LABEL="Advanced" COM_TEMPLATES_ARE_YOU_SURE="Are you sure?" COM_TEMPLATES_ASSIGNED_1="Assigned to one menu item." COM_TEMPLATES_ASSIGNED_MORE="Assigned to %d menu items." COM_TEMPLATES_BASIC_FIELDSET_LABEL="Options" COM_TEMPLATES_BUTTON_CLOSE_FILE="Close File" COM_TEMPLATES_BUTTON_COPY_TEMPLATE="Copy Template" COM_TEMPLATES_BUTTON_COPY_FILE="Copy File" COM_TEMPLATES_BUTTON_CREATE="Create" COM_TEMPLATES_BUTTON_CROP="Crop" COM_TEMPLATES_BUTTON_DELETE="Delete" COM_TEMPLATES_BUTTON_DELETE_FILE="Delete File" COM_TEMPLATES_BUTTON_EXTRACT_ARCHIVE="Extract Here" COM_TEMPLATES_BUTTON_FILE="New File" COM_TEMPLATES_BUTTON_FOLDERS="Manage Folders" COM_TEMPLATES_BUTTON_LESS="Compile LESS" COM_TEMPLATES_BUTTON_PREVIEW="Template Preview" COM_TEMPLATES_BUTTON_RENAME="Rename" COM_TEMPLATES_BUTTON_RENAME_FILE="Rename File" COM_TEMPLATES_BUTTON_RESIZE="Resize" COM_TEMPLATES_BUTTON_UPLOAD="Upload" COM_TEMPLATES_CHECK_FILE_OWNERSHIP="Check file ownership" COM_TEMPLATES_CLICK_TO_ENLARGE="Select to enlarge." COM_TEMPLATES_COMPILE_ERROR="An error occurred. Failed to compile." COM_TEMPLATES_COMPILE_LESS="You should compile %s to generate a CSS file." COM_TEMPLATES_COMPILE_SUCCESS="Successfully compiled LESS." COM_TEMPLATES_CONFIG_FIELDSET_DESC="Global configuration for templates." COM_TEMPLATES_CONFIG_POSITIONS_DESC="Enable the preview of the module positions in the template by appending tp=1 to the web address. Also enables the Preview button in the list of templates." COM_TEMPLATES_CONFIG_POSITIONS_LABEL="Preview Module Positions" COM_TEMPLATES_CONFIG_FONT_DESC="These file types will be available for font preview." COM_TEMPLATES_CONFIG_FONT_LABEL="Valid Font Formats" COM_TEMPLATES_CONFIG_IMAGE_DESC="These file types will be available for cropping and resizing." COM_TEMPLATES_CONFIG_IMAGE_LABEL="Valid Image Formats" COM_TEMPLATES_CONFIG_SOURCE_DESC="These file types will be available for editing." COM_TEMPLATES_CONFIG_SOURCE_LABEL="Valid Source Formats" COM_TEMPLATES_CONFIG_SUPPORTED_DESC="Be careful before changing the file types. Read the tool tips before editing." COM_TEMPLATES_CONFIG_SUPPORTED_LABEL="Supported File Formats" COM_TEMPLATES_CONFIG_UPLOAD_DESC="The maximum upload size for files inside Template Manager." COM_TEMPLATES_CONFIG_UPLOAD_LABEL="Upload Size (MB)" COM_TEMPLATES_CONFIGURATION="Template: Options" COM_TEMPLATES_COPY_SUCCESS="New template called %s was installed." COM_TEMPLATES_CROP_AREA_ERROR="Crop area not selected." COM_TEMPLATES_DIRECTORY_NOT_WRITABLE="The template folder is not writable. Some features may not work." COM_TEMPLATES_ERR_XML="Template XML data not available" COM_TEMPLATES_ERROR_CANNOT_DELETE_LAST_STYLE="Can't delete the last style of a template. To uninstall/delete a template go to: Extensions-> Manage-> Manage-> Select template to be deleted-> Select 'Uninstall'." COM_TEMPLATES_ERROR_CANNOT_UNSET_DEFAULT_STYLE="Can't unset default style." COM_TEMPLATES_ERROR_COULD_NOT_COPY="Unable to copy template files to temporary folder." COM_TEMPLATES_ERROR_COULD_NOT_INSTALL="Unable to install new template from temporary folder." COM_TEMPLATES_ERROR_COULD_NOT_WRITE="Unable to delete temporary folder." COM_TEMPLATES_ERROR_CREATE_NOT_PERMITTED="Unable to create temporary folder." COM_TEMPLATES_ERROR_DUPLICATE_TEMPLATE_NAME="A template with this name already is installed." COM_TEMPLATES_ERROR_EDITOR_DISABLED="Either the CodeMirror or the None editor plugin should be enabled to edit template files." COM_TEMPLATES_ERROR_EXECUTABLE="Can't upload executable files." COM_TEMPLATES_ERROR_EXTENSION_RECORD_NOT_FOUND="Extension record not found in database." COM_TEMPLATES_ERROR_FAILED_TO_SAVE_FILENAME="An error occurred. The file %s could not be saved." COM_TEMPLATES_ERROR_FILE_CREATE="Failed to create file." COM_TEMPLATES_ERROR_FILE_DELETE="An error occurred. Failed to delete the file." COM_TEMPLATES_ERROR_FILE_FORMAT="File format not supported." COM_TEMPLATES_ERROR_FILE_RENAME="An error occurred. Failed to rename file." COM_TEMPLATES_ERROR_FILE_UPLOAD="Failed to upload file." COM_TEMPLATES_ERROR_FOLDER_CREATE="Failed to create folder." COM_TEMPLATES_ERROR_FONT_FILE_NOT_FOUND="Font file not found." COM_TEMPLATES_ERROR_IMAGE_FILE_NOT_FOUND="Image file not found." COM_TEMPLATES_ERROR_INDEX_DELETE="The file index.php can't be deleted. Make changes in the editor if you want to change the file." COM_TEMPLATES_ERROR_INVALID_FROM_NAME="Template to copy from can't be found." COM_TEMPLATES_ERROR_INVALID_TEMPLATE_NAME="Invalid template name. Please use only letters, numbers, dashes and underscores." COM_TEMPLATES_ERROR_RENAME_INDEX="The file index.php can't be renamed." COM_TEMPLATES_ERROR_ROOT_DELETE="The root folder can't be deleted." COM_TEMPLATES_ERROR_SAVE_DISABLED_TEMPLATE="Unable to save a style associated to a disabled template." COM_TEMPLATES_ERROR_SOURCE_FILE_NOT_FOUND="Source file not found." COM_TEMPLATES_ERROR_SOURCE_FILE_NOT_UNWRITABLE="Source file can't be returned to unwritable status." COM_TEMPLATES_ERROR_SOURCE_FILE_NOT_WRITABLE="Source file not writable." COM_TEMPLATES_ERROR_SOURCE_ID_FILENAME_MISMATCH="Stored ID does not match the submitted one." COM_TEMPLATES_ERROR_STYLE_NOT_FOUND="Style not found." COM_TEMPLATES_ERROR_STYLE_REQUIRES_TITLE="The style requires a title." COM_TEMPLATES_ERROR_TEMPLATE_FOLDER_NOT_FOUND="Template folder not found." COM_TEMPLATES_ERROR_UPLOAD_INPUT="No file was found." COM_TEMPLATES_ERROR_WARNFILENAME="Invalid file name. Please correct the name of the file and upload again." COM_TEMPLATES_ERROR_WARNFILETOOLARGE="File bigger than 2 MB can't be uploaded." COM_TEMPLATES_ERROR_WARNFILETYPE="File format not supported." COM_TEMPLATES_ERROR_WARNIEXSS="Can't be uploaded. Has XSS." COM_TEMPLATES_FIELD_CLIENT_DESC="Whether this template is used for the Frontend (0) or the Backend (1)." COM_TEMPLATES_FIELD_CLIENT_LABEL="Location" COM_TEMPLATES_FIELD_HOME_ADMINISTRATOR_DESC="This template style is defined as the default." COM_TEMPLATES_FIELD_HOME_LABEL="Default" COM_TEMPLATES_FIELD_HOME_SITE_DESC="If the multilingual functionality is not implemented, please limit your choice between <b>No</b> and <b>All</b>. This template style will be defined as the global default template style.<br />If the <b>System - Language Filter</b> plugin is enabled and you use different template styles depending on your content languages please assign a language to this style." COM_TEMPLATES_FIELD_SOURCE_DESC="Source code." COM_TEMPLATES_FIELD_SOURCE_LABEL="Source Code" COM_TEMPLATES_FIELD_TEMPLATE_DESC="Template name." COM_TEMPLATES_FIELD_TEMPLATE_LABEL="Template" COM_TEMPLATES_FIELD_TITLE_DESC="Style name." COM_TEMPLATES_FIELD_TITLE_LABEL="Style Name" COM_TEMPLATES_FILE_ARCHIVE_OPEN_FAIL="Failed to open the archive file." COM_TEMPLATES_FILE_ARCHIVE_EXISTS="Some files with the same name already exist." COM_TEMPLATES_FILE_ARCHIVE_NOT_FOUND="Archive file not found." COM_TEMPLATES_FILE_ARCHIVE_EXTRACT_SUCCESS="Successfully extracted the archive file." COM_TEMPLATES_FILE_ARCHIVE_EXTRACT_FAIL="Failed to extract the archive file." COM_TEMPLATES_FILE_CREATE_ERROR="An error occurred creating the file." COM_TEMPLATES_FILE_CREATE_SUCCESS="File created." COM_TEMPLATES_FILE_CONTENT_PREVIEW="File Content Preview" COM_TEMPLATES_FILE_COPY_FAIL="Failed to copy the file." COM_TEMPLATES_FILE_COPY_SUCCESS="The current file was copied as %s." COM_TEMPLATES_FILE_CROP_ERROR="Failed to crop image." COM_TEMPLATES_FILE_CROP_SUCCESS="Image cropped." COM_TEMPLATES_FILE_DELETE_ERROR="Not able to delete the file." COM_TEMPLATES_FILE_DELETE_FAIL="Not able to delete the file." COM_TEMPLATES_FILE_DELETE_SUCCESS="File deleted." COM_TEMPLATES_FILE_NEW_NAME_DESC="Enter the name of the new copied file." COM_TEMPLATES_FILE_NEW_NAME_LABEL="Copied File Name" COM_TEMPLATES_FILE_EXISTS="File with the same name already exists." COM_TEMPLATES_FILE_INFO="File Information" COM_TEMPLATES_FILE_NAME="File Name" COM_TEMPLATES_FILE_PERMISSIONS="The File Permissions are %s" COM_TEMPLATES_FILE_RENAME_ERROR="An error occurred renaming the file." COM_TEMPLATES_FILE_RENAME_SUCCESS="File renamed." COM_TEMPLATES_FILE_RESIZE_ERROR="Failed to resize image." COM_TEMPLATES_FILE_RESIZE_SUCCESS="Image resized." COM_TEMPLATES_FILE_SAVE_SUCCESS="File saved." COM_TEMPLATES_FILE_UNSUPPORTED_ARCHIVE="Unsupported files present inside the zip file." COM_TEMPLATES_FILE_UPLOAD_ERROR="There was an error uploading the file." COM_TEMPLATES_FILE_UPLOAD_SUCCESS="Successfully uploaded file." COM_TEMPLATES_FILTER_TEMPLATE="- Select Template -" COM_TEMPLATES_FOLDER_CREATE_ERROR="There was an error creating the folder." COM_TEMPLATES_FOLDER_CREATE_SUCCESS="Folder created." COM_TEMPLATES_FOLDER_DELETE_ERROR="An error occurred. Failed to delete folder." COM_TEMPLATES_FOLDER_DELETE_SUCCESS="Folder deleted." COM_TEMPLATES_FOLDER_ERROR="Not able to create folder." COM_TEMPLATES_FOLDER_EXISTS="Folder with the same name already exists." COM_TEMPLATES_FOLDER_NAME="Folder Name" COM_TEMPLATES_FOLDER_NOT_EXISTS="The folder does not exist." COM_TEMPLATES_FTP_DESC="For updating the template source files, Joomla will most likely need your FTP account details. Please enter them in the form fields below." COM_TEMPLATES_FTP_TITLE="FTP Login Details" COM_TEMPLATES_GRID_UNSET_LANGUAGE="Unset %s Default" COM_TEMPLATES_HOME_BUTTON="Documentation" COM_TEMPLATES_HOME_HEADING="Select a File" COM_TEMPLATES_HOME_TEXT="You can select from a number of options for customising the look of your templates. The Template Manager supports Source files, Image files, Font files, Zip archives and most of the operations that can be performed on those files. Select a file and you are good to go. Check the documentation if you want to know more." COM_TEMPLATES_HEADING_ASSIGNED="Assigned" COM_TEMPLATES_HEADING_DEFAULT="Default" COM_TEMPLATES_HEADING_DEFAULT_ASC="Default ascending" COM_TEMPLATES_HEADING_DEFAULT_DESC="Default descending" COM_TEMPLATES_HEADING_IMAGE="Image" COM_TEMPLATES_HEADING_LOCATION_ASC="Location ascending" COM_TEMPLATES_HEADING_LOCATION_DESC="Location descending" COM_TEMPLATES_HEADING_PAGES="Pages" COM_TEMPLATES_HEADING_STYLE="Style" COM_TEMPLATES_HEADING_STYLE_ASC="Style ascending" COM_TEMPLATES_HEADING_STYLE_DESC="Style descending" COM_TEMPLATES_HEADING_TEMPLATE="Template" COM_TEMPLATES_HEADING_TEMPLATE_ASC="Template ascending" COM_TEMPLATES_HEADING_TEMPLATE_DESC="Template descending" COM_TEMPLATES_IMAGE_HEIGHT="Height" COM_TEMPLATES_IMAGE_WIDTH="Width" COM_TEMPLATES_INVALID_FILE_NAME="Invalid file name. Please choose a file name with a-z, A-Z, 0-9, - and _." COM_TEMPLATES_INVALID_FILE_TYPE="File type not selected." COM_TEMPLATES_INVALID_FOLDER_NAME="Invalid folder name. Please choose a folder name with a-z, A-Z, 0-9, - and _." COM_TEMPLATES_MANAGER="Templates" COM_TEMPLATES_MANAGER_ADD_STYLE="Templates: Add Style" COM_TEMPLATES_MANAGER_EDIT_FILE="Templates: Edit File" COM_TEMPLATES_MANAGER_EDIT_STYLE="Templates: Edit Style" COM_TEMPLATES_MANAGE_FOLDERS="Manage Folders" COM_TEMPLATES_MANAGER_STYLES="Templates: Styles" COM_TEMPLATES_MANAGER_STYLES_ADMIN="Templates: Styles (Administrator)" COM_TEMPLATES_MANAGER_STYLES_SITE="Templates: Styles (Site)" COM_TEMPLATES_MANAGER_TEMPLATES="Templates" COM_TEMPLATES_MANAGER_TEMPLATES_ADMIN="Templates: Templates (Administrator)" COM_TEMPLATES_MANAGER_TEMPLATES_SITE="Templates: Templates (Site)" COM_TEMPLATES_MANAGER_VIEW_TEMPLATE="Templates: Customise (%s)" COM_TEMPLATES_MENU_CHANGED_1="1 menu item has been assigned or unassigned to this style." COM_TEMPLATES_MENU_CHANGED_MORE="%d menu items have been assigned or unassigned to this style." COM_TEMPLATES_MENUS_ASSIGNMENT="Menu Assignment" COM_TEMPLATES_MODAL_FILE_DELETE="The file %s will be deleted." COM_TEMPLATES_MSG_MANAGE_NO_STYLES="There are no styles installed matching your query." COM_TEMPLATES_MSG_MANAGE_NO_TEMPLATES="There are no templates installed matching your query." COM_TEMPLATES_N_ITEMS_DELETED="%d template styles deleted." COM_TEMPLATES_N_ITEMS_DELETED_1="Template style deleted." COM_TEMPLATES_NEW_FILE_HEADER="Create or Upload a new file." COM_TEMPLATES_NEW_FILE_NAME="New File Name" COM_TEMPLATES_NEW_FILE_SELECT="Select a file type" COM_TEMPLATES_NEW_FILE_TYPE="File Type" COM_TEMPLATES_NO_TEMPLATE_SELECTED="No template selected." COM_TEMPLATES_OPTION_NONE=":: None ::" ; Deprecated 4.0 COM_TEMPLATES_OPTION_SELECT_PAGE="- Select Page -" COM_TEMPLATES_OPTION_SELECT_MENU_ITEM="- Select Menu Item -" COM_TEMPLATES_OVERRIDE_CREATED="Override created in " COM_TEMPLATES_OVERRIDE_EXISTS="Override already exists." COM_TEMPLATES_OVERRIDE_FAILED="Failed to create override." COM_TEMPLATES_OVERRIDE_SUCCESS="Successfully created the override." COM_TEMPLATES_OVERRIDES_COMPONENTS="Components" COM_TEMPLATES_OVERRIDES_LAYOUTS="Layouts" COM_TEMPLATES_OVERRIDES_MODULES="Modules" COM_TEMPLATES_OVERRIDES_PLUGINS="Plugins" COM_TEMPLATES_PREVIEW="Preview" COM_TEMPLATES_RENAME_FILE="Rename file %s" COM_TEMPLATES_RESIZE_IMAGE="Resize Image" COM_TEMPLATES_SOURCE_CODE="Source" COM_TEMPLATES_SITE_PREVIEW="Site Preview" COM_TEMPLATES_STYLE_CANNOT_DELETE_DEFAULT_STYLE="Can't delete default style." COM_TEMPLATES_STYLE_SAVE_SUCCESS="Style saved." COM_TEMPLATES_STYLES_FILTER_SEARCH_DESC="Search in style description." COM_TEMPLATES_STYLES_PAGES_ALL="Default for all pages" COM_TEMPLATES_STYLES_PAGES_ALL_LANGUAGE="Default for %s pages" COM_TEMPLATES_STYLES_PAGES_SELECTED="Assigned on %s pages" COM_TEMPLATES_STYLES_PAGES_NONE="Not assigned" COM_TEMPLATES_SUBMENU_STYLES="Styles" COM_TEMPLATES_SUBMENU_TEMPLATES="Templates" COM_TEMPLATES_SUCCESS_DUPLICATED="Style duplicated." COM_TEMPLATES_SUCCESS_HOME_SET="Default style set." COM_TEMPLATES_SUCCESS_HOME_UNSET="Default style unset." COM_TEMPLATES_TAB_DESCRIPTION="Template Description" COM_TEMPLATES_TAB_EDITOR="Editor" COM_TEMPLATES_TAB_OVERRIDES="Create Overrides" COM_TEMPLATES_TEMPLATE_ADD_CSS="Add new stylesheet" COM_TEMPLATES_TEMPLATE_ADD_ERROR="Add custom error page template (optional)." COM_TEMPLATES_TEMPLATE_CLOSE="Close" COM_TEMPLATES_TEMPLATE_COPY="Copy Template" COM_TEMPLATES_TEMPLATE_CSS="Stylesheets" COM_TEMPLATES_TEMPLATE_DESCRIPTION="Template description." COM_TEMPLATES_TEMPLATE_DETAILS="%s Details and Files" COM_TEMPLATES_TEMPLATE_EDIT_CSS="Edit %s" COM_TEMPLATES_TEMPLATE_EDIT_ERROR="Edit error page template" COM_TEMPLATES_TEMPLATE_EDIT_MAIN="Edit main page template" COM_TEMPLATES_TEMPLATE_EDIT_OFFLINEVIEW="Edit offline page template" COM_TEMPLATES_TEMPLATE_EDIT_PRINTVIEW="Edit print view template" COM_TEMPLATES_TEMPLATE_FILENAME="Editing file "%s" in template "%s"." COM_TEMPLATES_TEMPLATE_FILES="Template Files" COM_TEMPLATES_TEMPLATE_HTML="HTML files" COM_TEMPLATES_TEMPLATE_MASTER_FILES="Template Master Files" COM_TEMPLATES_TEMPLATE_NEW_NAME_DESC="Enter the name of the new template. Please use letters, numbers and underscore only." COM_TEMPLATES_TEMPLATE_NEW_NAME_LABEL="New Template Name" COM_TEMPLATES_TEMPLATE_NO_PREVIEW="No preview available. You can enable preview in the options." COM_TEMPLATES_TEMPLATE_NO_PREVIEW_ADMIN="No preview available for Administrator templates" COM_TEMPLATES_TEMPLATE_NO_PREVIEW_DESC="To enable template previews, enable the Preview Module Positions option in Template Options." COM_TEMPLATES_TEMPLATE_NOT_SPECIFIED="Template not specified." COM_TEMPLATES_TEMPLATE_PREVIEW="Preview" COM_TEMPLATES_TEMPLATES_FILTER_SEARCH_DESC="Search in template name or folder name." COM_TEMPLATES_TOGGLE_FULL_SCREEN="Press Ctrl-Q to toggle Full Screen editing." COM_TEMPLATES_TOOLBAR_SET_HOME="Default" COM_TEMPLATES_WARNING_FORMAT_WILL_NOT_BE_VISIBLE="You have created a new file with the extension '%s'. This is supported but as you did not have that file extension in the list of supported formats this can't be displayed. Please double check the options for Templates and add the format if needed." COM_TEMPLATES_XML_DESCRIPTION="This component manages templates" JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\�e>��&language/en-GB/en-GB.com_media.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_MEDIA="Media" COM_MEDIA_MEDIA_VIEW_DEFAULT_DESC="Upload or manage images and other media files on you Joomla! website." COM_MEDIA_MEDIA_VIEW_DEFAULT_TITLE="Media Manager" COM_MEDIA_XML_DESCRIPTION="Component for managing site media." PKb��\��ɞ(language/en-GB/en-GB.com_modules.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_MODULES="Modules" COM_MODULES_ACTION_EDITFRONTEND="Frontend Editing" COM_MODULES_ACTION_EDITFRONTEND_COMPONENT_DESC="Allows users in the group to edit in Frontend." COM_MODULES_GENERAL="General" COM_MODULES_MODULES_VIEW_DEFAULT_DESC="Shows a list of modules to manage" COM_MODULES_MODULES_VIEW_DEFAULT_TITLE="Module Manager" COM_MODULES_REDIRECT_EDIT_DESC="Select if module editing should be opened in the site or administration interface." COM_MODULES_REDIRECT_EDIT_LABEL="Edit Module" COM_MODULES_XML_DESCRIPTION="Component for module management on the Backend." PKb��\BN�R-language/en-GB/en-GB.plg_search_newsfeeds.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_NEWSFEEDS="Search - News Feeds" PLG_SEARCH_NEWSFEEDS_FIELD_SEARCHLIMIT_DESC="Number of search items to return." PLG_SEARCH_NEWSFEEDS_FIELD_SEARCHLIMIT_LABEL="Search Limit" PLG_SEARCH_NEWSFEEDS_NEWSFEEDS="News Feeds" PLG_SEARCH_NEWSFEEDS_XML_DESCRIPTION="Enables searching of News feeds." PKb��\%��1==-language/en-GB/en-GB.plg_user_profile.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_USER_PROFILE="User - Profile" PLG_USER_PROFILE_XML_DESCRIPTION="User Profile Plugin" PKb��\e��PHH)language/en-GB/en-GB.com_redirect.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_REDIRECT="Redirects" COM_REDIRECT_XML_DESCRIPTION="This component implements link redirection." PKb��\�hv��2language/en-GB/en-GB.plg_system_languagefilter.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SYSTEM_LANGUAGEFILTER="System - Language Filter" PLG_SYSTEM_LANGUAGEFILTER_BROWSER_SETTINGS="Browser Settings" PLG_SYSTEM_LANGUAGEFILTER_FIELD_ALTERNATE_META_DESC="Add alternative meta tags for items with associated items in other languages." PLG_SYSTEM_LANGUAGEFILTER_FIELD_ALTERNATE_META_LABEL="Add Alternate Meta Tags" PLG_SYSTEM_LANGUAGEFILTER_FIELD_AUTOMATIC_CHANGE_DESC="This option will automatically change the content language used in the Frontend when a user site language is changed." PLG_SYSTEM_LANGUAGEFILTER_FIELD_AUTOMATIC_CHANGE_LABEL="Automatic Language Change" PLG_SYSTEM_LANGUAGEFILTER_FIELD_COOKIE_DESC="Language cookies can be set to expire at the end of the session or after a year. Default is session." PLG_SYSTEM_LANGUAGEFILTER_FIELD_COOKIE_LABEL="Cookie Lifetime" PLG_SYSTEM_LANGUAGEFILTER_FIELD_DETECT_BROWSER_DESC="Choose site default language or try to detect the browser settings language. It will default to site language if browser settings can't be found." PLG_SYSTEM_LANGUAGEFILTER_FIELD_DETECT_BROWSER_LABEL="Language Selection for new Visitors" PLG_SYSTEM_LANGUAGEFILTER_FIELD_ITEM_ASSOCIATIONS_DESC="This option will allow item associations when switching from one language to another. Default home menu items are always associated." PLG_SYSTEM_LANGUAGEFILTER_FIELD_ITEM_ASSOCIATIONS_LABEL="Associations" PLG_SYSTEM_LANGUAGEFILTER_FIELD_XDEFAULT_DESC="This option will add the x-default meta tag to improve SEO." PLG_SYSTEM_LANGUAGEFILTER_FIELD_XDEFAULT_LABEL="Add x-default Meta Tag" PLG_SYSTEM_LANGUAGEFILTER_FIELD_XDEFAULT_LANGUAGE_DESC="Choose the x-default language." PLG_SYSTEM_LANGUAGEFILTER_FIELD_XDEFAULT_LANGUAGE_LABEL="x-default Language" PLG_SYSTEM_LANGUAGEFILTER_OPTION_DEFAULT_LANGUAGE="Default frontend language" PLG_SYSTEM_LANGUAGEFILTER_FIELD_REMOVE_DEFAULT_PREFIX_DESC="Remove the defined URL Language Code of the Content Language that corresponds to the default site language when Search Engine Friendly URLs is set to 'Yes'." PLG_SYSTEM_LANGUAGEFILTER_FIELD_REMOVE_DEFAULT_PREFIX_LABEL="Remove URL Language Code" PLG_SYSTEM_LANGUAGEFILTER_OPTION_SESSION="Session" PLG_SYSTEM_LANGUAGEFILTER_OPTION_YEAR="Year" PLG_SYSTEM_LANGUAGEFILTER_PRIVACY_CAPABILITY_LANGUAGE_COOKIE="On a site which supports multiple languages, this plugin can be configured to set a cookie on the user's browser which remembers their language preference. This cookie is used to redirect users to their preferred language when visiting the site and creating a new session. The cookie's name is based on a randomly generated hash and therefore does not have a constant identifier." PLG_SYSTEM_LANGUAGEFILTER_SITE_LANGUAGE="Site Language" PLG_SYSTEM_LANGUAGEFILTER_XML_DESCRIPTION="This plugin filters the displayed content depending on language.<br /><strong>This plugin is to be enabled only when the Language Switcher module is published.</strong><br />If this plugin is activated, it is recommended to also publish the Administrator multilingual status module." PKb��\�*) 0language/en-GB/en-GB.plg_finder_weblinks.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_STATISTICS_WEB_LINK="Web Link" PLG_FINDER_WEBLINKS="Smart Search - Web Links" PLG_FINDER_WEBLINKS_ERROR_ACTIVATING_PLUGIN="Could not automatically activate the "Smart Search - Web Links" plugin." PLG_FINDER_WEBLINKS_XML_DESCRIPTION="This plugin indexes Joomla! Web Links." PKb��\#�}r $language/en-GB/en-GB.mod_popular.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_POPULAR="Popular Articles" MOD_POPULAR_CREATED="Created" MOD_POPULAR_FIELD_AUTHORS_DESC="A filter for the Authors." MOD_POPULAR_FIELD_AUTHORS_LABEL="Authors" MOD_POPULAR_FIELD_CATEGORY_DESC="Select Articles from a specific Category or all Categories." MOD_POPULAR_FIELD_COUNT_DESC="The number of items to display (default 5)." MOD_POPULAR_FIELD_COUNT_LABEL="Count" MOD_POPULAR_FIELD_VALUE_ADDED_OR_MODIFIED_BY_ME="Added or modified by me" MOD_POPULAR_FIELD_VALUE_ANYONE="Anyone" MOD_POPULAR_FIELD_VALUE_NOT_ADDED_OR_MODIFIED_BY_ME="Not added or modified by me" MOD_POPULAR_ITEMS="Popular Items" MOD_POPULAR_NO_MATCHING_RESULTS="No Matching Results" MOD_POPULAR_TITLE="Popular Articles" MOD_POPULAR_TITLE_1="Top Popular Article" MOD_POPULAR_TITLE_MORE="Top %1$s Popular Articles" MOD_POPULAR_TITLE_BY_ME="Top Popular Articles By Me" MOD_POPULAR_TITLE_BY_ME_1="Top Popular Article By Me" MOD_POPULAR_TITLE_BY_ME_MORE="Top %1$s Popular Articles By Me" MOD_POPULAR_TITLE_NOT_ME="Top Popular Articles Not By Me" MOD_POPULAR_TITLE_NOT_ME_1="Top Popular Article Not By Me" MOD_POPULAR_TITLE_NOT_ME_MORE="Top %1$s Popular Articles Not By Me" MOD_POPULAR_TITLE_CATEGORY="Top Popular Articles (%2$s category)" MOD_POPULAR_TITLE_CATEGORY_1="Top Popular Article (%2$s category)" MOD_POPULAR_TITLE_CATEGORY_MORE="Top %1$s Popular Articles (%2$s category)" MOD_POPULAR_TITLE_CATEGORY_BY_ME="Top Popular Articles By Me (%2$s category)" MOD_POPULAR_TITLE_CATEGORY_BY_ME_1="Top Popular Article By Me (%2$s category)" MOD_POPULAR_TITLE_CATEGORY_BY_ME_MORE="Top %1$s Popular Articles By Me (%2$s category)" MOD_POPULAR_TITLE_CATEGORY_NOT_ME="Top Popular Articles Not By Me (%2$s category)" MOD_POPULAR_TITLE_CATEGORY_NOT_ME_1="Top Popular Article Not By Me (%2$s category)" MOD_POPULAR_TITLE_CATEGORY_NOT_ME_MORE="Top %1$s Popular Articles Not By Me (%2$s category)" MOD_POPULAR_UNEXISTING="<i>Non existent</i>" MOD_POPULAR_XML_DESCRIPTION="This module shows a list of the most popular published Articles that are still current. Some that are shown may have expired even though they are the most recent." PKb��\A)fx� � $language/en-GB/en-GB.com_plugins.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_PLUGINS="Plugins" COM_PLUGINS_ADVANCED_FIELDSET_LABEL="Advanced" COM_PLUGINS_BASIC_FIELDSET_LABEL="Basic" COM_PLUGINS_CONFIGURATION="Plugin: Options" COM_PLUGINS_ELEMENT_HEADING="Element" COM_PLUGINS_ERROR_FILE_NOT_FOUND="The file %s could not be found." COM_PLUGINS_FIELD_ELEMENT_DESC="Plugin main file name." COM_PLUGINS_FIELD_ELEMENT_LABEL="Plugin File" COM_PLUGINS_FIELD_ENABLED_DESC="The enabled status of this plugin." COM_PLUGINS_FIELD_FOLDER_DESC="Category/folder of plugins this plugin belongs to." COM_PLUGINS_FIELD_FOLDER_LABEL="Plugin Type" COM_PLUGINS_FIELD_NAME_DESC="The name of the plugin as defined in its xml." COM_PLUGINS_FIELD_NAME_LABEL="Plugin Name" COM_PLUGINS_FILTER_SEARCH_LABEL="Search Plugins" COM_PLUGINS_FOLDER_HEADING="Type" COM_PLUGINS_HEADING_ELEMENT_ASC="Element ascending" COM_PLUGINS_HEADING_ELEMENT_DESC="Element descending" COM_PLUGINS_HEADING_FOLDER_ASC="Type ascending" COM_PLUGINS_HEADING_FOLDER_DESC="Type descending" COM_PLUGINS_MANAGER_PLUGIN="Plugins: %s" COM_PLUGINS_MANAGER_PLUGINS="Plugins" COM_PLUGINS_MSG_MANAGE_NO_PLUGINS="There are no plugins installed matching your query." COM_PLUGINS_N_ITEMS_CHECKED_IN_0="No plugin checked in." COM_PLUGINS_N_ITEMS_CHECKED_IN_1="%d plugin checked in." COM_PLUGINS_N_ITEMS_CHECKED_IN_MORE="%d plugins checked in." COM_PLUGINS_N_ITEMS_PUBLISHED="%d plugins enabled." COM_PLUGINS_N_ITEMS_PUBLISHED_1="Plugin enabled." COM_PLUGINS_N_ITEMS_UNPUBLISHED="%d plugins disabled." COM_PLUGINS_N_ITEMS_UNPUBLISHED_1="Plugin disabled." COM_PLUGINS_NAME_HEADING="Plugin Name" COM_PLUGINS_NO_ITEM_SELECTED="No plugins selected." COM_PLUGINS_OPTION_ELEMENT="- Select Element -" COM_PLUGINS_OPTION_FOLDER="- Select Type -" COM_PLUGINS_PLUGIN="Plugin" COM_PLUGINS_PLUGINS="Plugins" COM_PLUGINS_SAVE_SUCCESS="Plugin saved." COM_PLUGINS_SEARCH_IN_TITLE="Search in plugin name. Prefix with ID: to search for a plugin ID." COM_PLUGINS_XML_DESCRIPTION="This component manages Joomla plugins." COM_PLUGINS_XML_ERR="Plugins XML data not available." JLIB_HTML_PUBLISH_ITEM="Enable plugin" JLIB_HTML_UNPUBLISH_ITEM="Disable plugin" JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\�8��m�m"language/en-GB/en-GB.com_users.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_USERS="Users" COM_USERS_ACTIONS_AVAILABLE="Actions Permitted" COM_USERS_ACTIVATED="Activated" COM_USERS_ADD_NOTE="Add a Note" COM_USERS_ASSIGNED_GROUPS="Assigned User Groups" COM_USERS_BATCH_ADD="Add To Group" COM_USERS_BATCH_DELETE="Delete From Group" COM_USERS_BATCH_GROUP="Select Group" COM_USERS_BATCH_OPTIONS="Batch process the selected users" COM_USERS_BATCH_SET="Set To Group" COM_USERS_CATEGORIES_TITLE="User Notes: Categories" COM_USERS_CATEGORY_HEADING="Category" COM_USERS_CONFIG_DOMAIN_OPTIONS="Email Domain Options" COM_USERS_CONFIG_FIELD_ALLOWREGISTRATION_DESC="If set to Yes, new Users are allowed to self-register." COM_USERS_CONFIG_FIELD_ALLOWREGISTRATION_LABEL="Allow User Registration" COM_USERS_CONFIG_FIELD_CAPTCHA_DESC="Select the captcha plugin that will be used in the registration, password and username reminder forms. You may need to enter required information for your captcha plugin in the Plugin Manager.<br />If 'Use Global' is selected, make sure a captcha plugin is selected in Global Configuration." COM_USERS_CONFIG_FIELD_CAPTCHA_LABEL="Captcha" COM_USERS_CONFIG_FIELD_CHANGEUSERNAME_DESC="Allow users to change their Username when editing their profile." COM_USERS_CONFIG_FIELD_CHANGEUSERNAME_LABEL="Change Username" COM_USERS_CONFIG_FIELD_DOMAIN_NAME_DESC="Enter a domain name. Wildcards (*) are supported. For example:<br /><strong>*</strong> allows or disallows all domains;<br /><strong>*.com</strong> allows or disallows all .com domains;<br /><strong>*.joomla.org</strong> allows or disallows all joomla.org subdomains." COM_USERS_CONFIG_FIELD_DOMAIN_NAME_LABEL="Domain Name" COM_USERS_CONFIG_FIELD_DOMAIN_RULE_DESC="Select whether to allow or disallow the domain." COM_USERS_CONFIG_FIELD_DOMAIN_RULE_LABEL="Rule" COM_USERS_CONFIG_FIELD_DOMAIN_RULE_OPTION_ALLOW="Allow" COM_USERS_CONFIG_FIELD_DOMAIN_RULE_OPTION_DISALLOW="Disallow" COM_USERS_CONFIG_FIELD_DOMAINS_DESC="Enter a list of allowed and disallowed email domains. By default, all domains are allowed." COM_USERS_CONFIG_FIELD_DOMAINS_LABEL="Email Domains" COM_USERS_CONFIG_FIELD_FRONTEND_LANG_DESC="If 'Frontend User Parameters' is set to 'Show', users will be able to select their Frontend language preference when registering." COM_USERS_CONFIG_FIELD_FRONTEND_LANG_LABEL="Frontend Language" COM_USERS_CONFIG_FIELD_FRONTEND_RESET_COUNT_DESC="The maximum number of password resets allowed within the time period. Zero indicates no limit." COM_USERS_CONFIG_FIELD_FRONTEND_RESET_COUNT_LABEL="Maximum Reset Count" COM_USERS_CONFIG_FIELD_FRONTEND_RESET_TIME_DESC="The time period, in hours, for the reset counter." COM_USERS_CONFIG_FIELD_FRONTEND_RESET_TIME_LABEL="Reset Time" COM_USERS_CONFIG_FIELD_FRONTEND_USERPARAMS_DESC="If set to Show, Users will be able to select their language, editor and Help Site preferences on their details screen when logged-in to the Frontend." COM_USERS_CONFIG_FIELD_FRONTEND_USERPARAMS_LABEL="Frontend User Parameters" COM_USERS_CONFIG_FIELD_GUEST_USER_GROUP_DESC="The default Group that will be applied to Guest (not logged-in) Users." COM_USERS_CONFIG_FIELD_GUEST_USER_GROUP_LABEL="Guest User Group" COM_USERS_CONFIG_FIELD_MAILBODY_SUFFIX_DESC="This is added after the mail text." COM_USERS_CONFIG_FIELD_MAILBODY_SUFFIX_LABEL="Mailbody Suffix" COM_USERS_CONFIG_FIELD_MAILTOADMIN_DESC="If set to Yes then a notification mail will be sent to administrators if 'New User Account Activation' is set to 'None' or 'Self'." COM_USERS_CONFIG_FIELD_MAILTOADMIN_LABEL="Send Mail to Administrators" COM_USERS_CONFIG_FIELD_MINIMUM_INTEGERS="Minimum Integers" COM_USERS_CONFIG_FIELD_MINIMUM_INTEGERS_DESC="Set the minimum number of integers that must be included in a password." COM_USERS_CONFIG_FIELD_MINIMUM_LOWERCASE="Minimum Lower Case" COM_USERS_CONFIG_FIELD_MINIMUM_LOWERCASE_DESC="Set the minimum number of lower case alphabetical characters required for a password." COM_USERS_CONFIG_FIELD_MINIMUM_PASSWORD_LENGTH="Minimum Length" COM_USERS_CONFIG_FIELD_MINIMUM_PASSWORD_LENGTH_DESC="Set the minimum length for a password." COM_USERS_CONFIG_FIELD_MINIMUM_SYMBOLS="Minimum Symbols" COM_USERS_CONFIG_FIELD_MINIMUM_SYMBOLS_DESC="Set the minimum number of symbols (such as !@#$) required in a password." COM_USERS_CONFIG_FIELD_MINIMUM_UPPERCASE="Minimum Upper Case" COM_USERS_CONFIG_FIELD_MINIMUM_UPPERCASE_DESC="Set the minimum number of upper case alphabetical characters required for a password." COM_USERS_CONFIG_FIELD_NEW_USER_TYPE_DESC="The default group that will be applied to New Users Registering via the Frontend." COM_USERS_CONFIG_FIELD_NEW_USER_TYPE_LABEL="New User Registration Group" COM_USERS_CONFIG_FIELD_NOTES_HISTORY="User Notes History" COM_USERS_CONFIG_FIELD_SENDPASSWORD_LABEL="Send Password" COM_USERS_CONFIG_FIELD_SENDPASSWORD_DESC="If set to Yes the user's first password will be emailed to the user as part of the registration mail." COM_USERS_CONFIG_FIELD_SUBJECT_PREFIX_DESC="This is added in front of each mail subject." COM_USERS_CONFIG_FIELD_SUBJECT_PREFIX_LABEL="Subject Prefix" COM_USERS_CONFIG_FIELD_USERACTIVATION_DESC="If set to None the user will be registered immediately. If set to Self the User will be emailed a link to activate their account before they can log in. If set to Administrator the user will be emailed a link to verify their email address and then all users set to receive system emails and who have the permission to create users will be notified to activate the user's account." COM_USERS_CONFIG_FIELD_USERACTIVATION_LABEL="New User Account Activation" COM_USERS_CONFIG_FIELD_USERACTIVATION_OPTION_ADMINACTIVATION="Administrator" COM_USERS_CONFIG_FIELD_USERACTIVATION_OPTION_SELFACTIVATION="Self" COM_USERS_CONFIG_IMPORT_FAILED="An error was encountered while importing the configuration: %s." COM_USERS_CONFIG_INTEGRATION_SETTINGS_DESC="These settings determine how the Users Component will integrate with other extensions." COM_USERS_CONFIG_PASSWORD_OPTIONS="Password Options" COM_USERS_CONFIG_SAVE_FAILED="An error was encountered while saving the configuration: %s." COM_USERS_CONFIG_USER_OPTIONS="User Options" COM_USERS_CONFIGURATION="Users: Options" COM_USERS_COUNT_ENABLED_USERS="Enabled Users" COM_USERS_COUNT_DISABLED_USERS="Disabled Users" COM_USERS_DEBUG_DESC="Display the Advanced Permission Reports." COM_USERS_DEBUG_EXPLICIT_ALLOW="Allowed" COM_USERS_DEBUG_EXPLICIT_DENY="Forbidden" COM_USERS_DEBUG_GROUP="Advanced Permissions Report" COM_USERS_DEBUG_GROUPS_LABEL="Advanced Groups Permissions" COM_USERS_DEBUG_GROUPS_DESC="Display the Advanced Groups Permissions Reports." COM_USERS_DEBUG_IMPLICIT_DENY="Not Allowed" COM_USERS_DEBUG_LABEL="Advanced" COM_USERS_DEBUG_LEGEND="Legend:" COM_USERS_DEBUG_USER="Advanced Permissions Report" COM_USERS_DEBUG_USERS_LABEL="Advanced Users Permissions" COM_USERS_DEBUG_USERS_DESC="Display the Advanced Users Permissions Reports." COM_USERS_DELETE_ERROR_INVALID_GROUP="You can't delete user groups to which you belong." COM_USERS_DESIRED_PASSWORD="Enter your desired password." COM_USERS_EDIT_NOTE="Edit Note" COM_USERS_EDIT_NOTE_N="Editing note with ID #%d" COM_USERS_EDIT_USER="Edit User %s" COM_USERS_EMPTY_REVIEW="-" COM_USERS_EMPTY_SUBJECT="- No subject -" COM_USERS_ERROR_CANNOT_BATCH_SUPERUSER="A non-Super User can't perform batch operations on Super Users." COM_USERS_ERROR_INVALID_GROUP="Invalid Group" COM_USERS_ERROR_LEVELS_NOLEVELS_SELECTED="No View Permission Level(s) selected." COM_USERS_ERROR_NO_ADDITIONS="The selected user(s) are already assigned to the selected group." COM_USERS_ERROR_VIEW_LEVEL_IN_USE="You can't delete the view access level '%d:%s' because it is being used by content." COM_USERS_ERROR_SECRET_CODE_WITHOUT_TFA="You have entered a Secret Code but two factor authentication is not enabled in your user account. If you want to use a secret code to secure your login please edit your user profile and enable two factor authentication." COM_USERS_FIELD_CATEGORY_ID_LABEL="Category" COM_USERS_FIELD_ID_LABEL="ID" COM_USERS_FIELD_LOGIN_MENUITEM="Menu Item" COM_USERS_FIELD_LOGIN_REDIRECT_PLACEHOLDER="index.php?Itemid=999&lang=en-GB" COM_USERS_FIELD_LOGIN_REDIRECT_CHOICE_DESC="'Internal URL' lets you manually enter any internal URL in the Redirect field. 'Menu Item' lets you directly select an existing menu item.<br />For a multilingual site, it is recommended to use 'Menu Item'." COM_USERS_FIELD_LOGIN_REDIRECT_CHOICE_LABEL="Choose Login Redirect Type" COM_USERS_FIELD_LOGIN_REDIRECT_ERROR="Only one of the login redirect fields should have a value." COM_USERS_FIELD_LOGIN_REDIRECTMENU_DESC="Select or create the page the user will be redirected to after a successful login. The default is to stay on the same page." COM_USERS_FIELD_LOGIN_REDIRECTMENU_LABEL="Menu Item Login Redirect" COM_USERS_FIELD_LOGIN_URL="Internal URL" COM_USERS_FIELD_LOGOUT_REDIRECT_CHOICE_DESC="'Internal URL' lets you manually enter any internal URL in the Redirect field. 'Menu Item' lets you directly select an existing menu item.<br />For a multilingual site, it is recommended to use 'Menu Item'." COM_USERS_FIELD_LOGOUT_REDIRECT_CHOICE_LABEL="Choose Logout Redirect Type" COM_USERS_FIELD_LOGOUT_REDIRECT_ERROR="Only one of the logout redirect fields should have a value." COM_USERS_FIELD_LOGOUT_REDIRECTMENU_DESC="Select or create the page the user will be redirected to after ending their current session by logging out. The default is to stay on the same page." COM_USERS_FIELD_LOGOUT_REDIRECTMENU_LABEL="Menu Item Logout Redirect" COM_USERS_FIELD_NOTEBODY_DESC="Note" COM_USERS_FIELD_NOTEBODY_LABEL="Note" COM_USERS_FIELD_REVIEW_TIME_DESC="Review Date is a manually entered date you can use as fits in your workflow. Examples would be to put in a date when you want to review a user or the last date you reviewed the user." COM_USERS_FIELD_REVIEW_TIME_LABEL="Review Date" COM_USERS_FIELD_STATE_DESC="Set publication status." COM_USERS_FIELD_SUBJECT_DESC="The subject line for the note." COM_USERS_FIELD_SUBJECT_LABEL="Subject" COM_USERS_FIELD_USER_ID_LABEL="User" COM_USERS_FIELDS_USER_FIELDS_TITLE="Users: Fields" COM_USERS_FIELDS_USER_FIELD_ADD_TITLE="Users: New Field" COM_USERS_FIELDS_USER_FIELD_EDIT_TITLE="Users: Edit Field" COM_USERS_FILTER_ACTIVE="- Select Active State -" COM_USERS_FILTER_COMPONENT_LABEL="Component" COM_USERS_FILTER_COMPONENT_DESC="Component to debug." COM_USERS_FILTER_LABEL="Filter Users by: " COM_USERS_FILTER_LEVEL_END_LABEL="Level End" COM_USERS_FILTER_LEVEL_END_DESC="Asset end level." COM_USERS_FILTER_LEVEL_START_LABEL="Level Start" COM_USERS_FILTER_LEVEL_START_DESC="Asset start level." COM_USERS_FILTER_NOTES="Show notes list for this user" COM_USERS_FILTER_STATE="- Select State -" COM_USERS_FILTER_USER_GROUP="Filter User Group" COM_USERS_FILTER_USERGROUP="- Select Group -" COM_USERS_GROUP_FIELD_PARENT_DESC="Choose a Parent for this Group." COM_USERS_GROUP_FIELD_PARENT_LABEL="Group Parent" COM_USERS_GROUP_FIELD_TITLE_DESC="Enter a Title for the Group." COM_USERS_GROUP_FIELD_TITLE_LABEL="Group Title" COM_USERS_GROUP_SAVE_SUCCESS="Group saved." COM_USERS_GROUPS_CONFIRM_DELETE="Are you sure you wish to delete groups that have users?" COM_USERS_GROUPS_N_ITEMS_DELETED="%d User Groups deleted." COM_USERS_GROUPS_N_ITEMS_DELETED_1="1 User Group deleted." COM_USERS_GROUPS_NO_ITEM_SELECTED="No User Groups selected." COM_USERS_HEADING_ACTIVATED="Activated" COM_USERS_HEADING_ACTIVATED_ASC="Activated ascending" COM_USERS_HEADING_ACTIVATED_DESC="Activated descending" COM_USERS_HEADING_ASSET_NAME="Asset Name" COM_USERS_HEADING_ASSET_NAME_ASC="Asset Name ascending" COM_USERS_HEADING_ASSET_NAME_DESC="Asset Name descending" COM_USERS_HEADING_ASSET_TITLE="Asset Title" COM_USERS_HEADING_ASSET_TITLE_ASC="Asset Title ascending" COM_USERS_HEADING_ASSET_TITLE_DESC="Asset Title descending" COM_USERS_HEADING_CATEGORY="Category" COM_USERS_HEADING_CATEGORY_ASC="Category ascending" COM_USERS_HEADING_CATEGORY_DESC="Category descending" COM_USERS_HEADING_EMAIL_ASC="Email ascending" COM_USERS_HEADING_EMAIL_DESC="Email descending" COM_USERS_HEADING_ENABLED="Enabled" COM_USERS_HEADING_ENABLED_ASC="Enabled ascending" COM_USERS_HEADING_ENABLED_DESC="Enabled descending" COM_USERS_HEADING_GROUP_TITLE="Group Title" COM_USERS_HEADING_GROUP_TITLE_ASC="Group Title ascending" COM_USERS_HEADING_GROUP_TITLE_DESC="Group Title descending" COM_USERS_HEADING_GROUPS="User Groups" COM_USERS_HEADING_LAST_VISIT_DATE="Last Visit Date" COM_USERS_HEADING_LAST_VISIT_DATE_ASC="Last visit date ascending" COM_USERS_HEADING_LAST_VISIT_DATE_DESC="Last visit date descending" COM_USERS_HEADING_LEVEL_NAME="Level Name" COM_USERS_HEADING_LEVEL_NAME_ASC="Level Name ascending" COM_USERS_HEADING_LEVEL_NAME_DESC="Level Name descending" COM_USERS_HEADING_LFT="LFT" COM_USERS_HEADING_LFT_ASC="LFT ascending" COM_USERS_HEADING_LFT_DESC="LFT descending" COM_USERS_HEADING_NAME="Name" COM_USERS_HEADING_NAME_ASC="Name ascending" COM_USERS_HEADING_NAME_DESC="Name descending" COM_USERS_HEADING_REGISTRATION_DATE="Registration Date" COM_USERS_HEADING_REGISTRATION_DATE_ASC="Registration date ascending" COM_USERS_HEADING_REGISTRATION_DATE_DESC="Registration date descending" COM_USERS_HEADING_REVIEW="Review Date" COM_USERS_HEADING_REVIEW_ASC="Review Date ascending" COM_USERS_HEADING_REVIEW_DESC="Review Date descending" COM_USERS_HEADING_SUBJECT="Subject" COM_USERS_HEADING_SUBJECT_ASC="Subject ascending" COM_USERS_HEADING_SUBJECT_DESC="Subject descending" COM_USERS_HEADING_USER="User" COM_USERS_HEADING_USER_ASC="User ascending" COM_USERS_HEADING_USER_DESC="User descending" COM_USERS_HEADING_USERNAME_ASC="Username ascending" COM_USERS_HEADING_USERNAME_DESC="Username descending" COM_USERS_HEADING_USERS_IN_GROUP="Users in group" COM_USERS_LEVEL_DETAILS="Level Details" COM_USERS_LEVEL_FIELD_TITLE_DESC="Enter a Title for this Access level." COM_USERS_LEVEL_FIELD_TITLE_LABEL="Level Title" COM_USERS_LEVEL_HEADER_ERROR="User header access level error." COM_USERS_LEVEL_SAVE_SUCCESS="Access level saved." COM_USERS_LEVELS_N_ITEMS_DELETED="%d View Permission Level deleted." COM_USERS_LEVELS_N_ITEMS_DELETED_1="1 View Permission Level deleted." COM_USERS_MAIL_DETAILS="Details" COM_USERS_MAIL_EMAIL_SENT_TO_N_USERS="Email sent to %s users." COM_USERS_MAIL_EMAIL_SENT_TO_N_USERS_1="Email sent to one user." COM_USERS_MAIL_FIELD_EMAIL_DISABLED_USERS_DESC="If checked, disabled users will be included when sending mail." COM_USERS_MAIL_FIELD_EMAIL_DISABLED_USERS_LABEL="Send to Disabled Users" COM_USERS_MAIL_FIELD_GROUP_DESC="Choose a group to send the mail to." COM_USERS_MAIL_FIELD_GROUP_LABEL="Group:" COM_USERS_MAIL_FIELD_MESSAGE_DESC="Enter a default message." COM_USERS_MAIL_FIELD_MESSAGE_LABEL="Message" COM_USERS_MAIL_FIELD_RECURSE_DESC="If checked, the email will also be sent to users who are members of any child groups of the selected groups." COM_USERS_MAIL_FIELD_RECURSE_LABEL="Mail to Child User Groups" COM_USERS_MAIL_FIELD_SEND_AS_BLIND_CARBON_COPY_DESC="Hide the recipient list and use the site email address for the To: field." COM_USERS_MAIL_FIELD_SEND_AS_BLIND_CARBON_COPY_LABEL="Recipients as BCC" COM_USERS_MAIL_FIELD_SEND_IN_HTML_MODE_DESC="If checked, the email will be sent with HTML tags. If not checked, email will be sent in plain text." COM_USERS_MAIL_FIELD_SEND_IN_HTML_MODE_LABEL="Send in HTML Mode" COM_USERS_MAIL_FIELD_SUBJECT_DESC="Enter the subject of the mail." COM_USERS_MAIL_FIELD_SUBJECT_LABEL="Subject" COM_USERS_MAIL_FIELD_VALUE_ALL_USERS_GROUPS="All Users Groups" COM_USERS_MAIL_MESSAGE="Message" COM_USERS_MAIL_NO_USERS_COULD_BE_FOUND_IN_THIS_GROUP="No users could be found in this group." COM_USERS_MAIL_ONLY_YOU_COULD_BE_FOUND_IN_THIS_GROUP="You are the only user in this group." COM_USERS_MAIL_PLEASE_FILL_IN_THE_FORM_CORRECTLY="Please fill in the form correctly." COM_USERS_MAIL_PLEASE_FILL_IN_THE_MESSAGE="Please enter a message" COM_USERS_MAIL_PLEASE_FILL_IN_THE_SUBJECT="Please enter a subject" COM_USERS_MAIL_PLEASE_SELECT_A_GROUP="Please select a Group" COM_USERS_MAIL_THE_MAIL_COULD_NOT_BE_SENT="The mail could not be sent." COM_USERS_MASS_MAIL="Mass Mail Users" COM_USERS_MASS_MAIL_DESC="Mass Mail options." COM_USERS_MSG_NOT_ENOUGH_INTEGERS_N="Password does not have enough digits. At least %s digits are required." COM_USERS_MSG_NOT_ENOUGH_INTEGERS_N_1="Password does not have enough digits. At least 1 digit is required." COM_USERS_MSG_NOT_ENOUGH_LOWERCASE_LETTERS_N="Password does not have enough lower case characters. At least %s lower case characters are required." COM_USERS_MSG_NOT_ENOUGH_LOWERCASE_LETTERS_N_1="Password does not have enough lower case characters. At least 1 lower case character is required." COM_USERS_MSG_NOT_ENOUGH_SYMBOLS_N="Password does not have enough symbols. At least %s symbols are required." COM_USERS_MSG_NOT_ENOUGH_SYMBOLS_N_1="Password does not have enough symbols. At least 1 symbol is required." COM_USERS_MSG_NOT_ENOUGH_UPPERCASE_LETTERS_N="Password does not have enough upper case characters. At least %s upper case characters are required." COM_USERS_MSG_NOT_ENOUGH_UPPERCASE_LETTERS_N_1="Password does not have enough upper case characters. At least 1 upper case character is required." COM_USERS_MSG_PASSWORD_TOO_LONG="Password is too long. Passwords must be less than 100 characters." COM_USERS_MSG_PASSWORD_TOO_SHORT_N="Password is too short. Passwords must have at least %s characters." COM_USERS_MSG_SPACES_IN_PASSWORD="Password must not have spaces at the beginning or end." COM_USERS_N_LEVELS_DELETED="%d View Access Levels removed." COM_USERS_N_LEVELS_DELETED_0="No View Access Levels removed." COM_USERS_N_LEVELS_DELETED_1="%d View Access Level removed." COM_USERS_N_USER_NOTES="Display %d notes" COM_USERS_N_USER_NOTES_1="Display %d note" COM_USERS_N_USER_NOTES_0="No notes to display" COM_USERS_N_USERS_ACTIVATED="%s Users activated." COM_USERS_N_USERS_ACTIVATED_0="No user activated." COM_USERS_N_USERS_ACTIVATED_1="User activated." COM_USERS_N_USERS_BLOCKED="%s Users blocked." COM_USERS_N_USERS_BLOCKED_0="No User blocked." COM_USERS_N_USERS_BLOCKED_1="User blocked." COM_USERS_N_USERS_UNBLOCKED="%s Users enabled." COM_USERS_N_USERS_UNBLOCKED_0="No User enabled." COM_USERS_N_USERS_UNBLOCKED_1="User enabled." COM_USERS_NEW_NOTE="New Note" COM_USERS_NO_ACTION="No Action" COM_USERS_NO_NOTES="No notes available for this user." COM_USERS_NO_LEVELS_SELECTED="No Viewing Access Levels selected." COM_USERS_NOTE_N_SUBJECT="#%d %s" COM_USERS_NOTES="User Notes: New/Edit" COM_USERS_NOTES_FOR_USER="Notes for user %s (ID #%d)" COM_USERS_NOTES_N_ITEMS_ARCHIVED="%d User Notes archived." COM_USERS_NOTES_N_ITEMS_ARCHIVED_1="%d User Note archived." COM_USERS_NOTES_N_ITEMS_CHECKED_IN="%d User Notes checked in." COM_USERS_NOTES_N_ITEMS_CHECKED_IN_1="%d User Note checked in." COM_USERS_NOTES_N_ITEMS_DELETED="%d User Notes deleted." COM_USERS_NOTES_N_ITEMS_DELETED_1="%d User Note deleted." COM_USERS_NOTES_N_ITEMS_PUBLISHED="%d User Notes published." COM_USERS_NOTES_N_ITEMS_PUBLISHED_1="%d User Note published." COM_USERS_NOTES_N_ITEMS_TRASHED="%d User Notes trashed." COM_USERS_NOTES_N_ITEMS_TRASHED_1="%d User Note trashed." COM_USERS_NOTES_N_ITEMS_UNPUBLISHED="%d User Notes unpublished." COM_USERS_NOTES_N_ITEMS_UNPUBLISHED_1="%d User Note unpublished." COM_USERS_OPTION_FILTER_DATE="- Select Registration Date -" COM_USERS_OPTION_FILTER_LAST_VISIT_DATE="- Select Last Visit Date -" COM_USERS_OPTION_RANGE_NEVER="never" COM_USERS_OPTION_RANGE_PAST_1MONTH="in the last month" COM_USERS_OPTION_RANGE_PAST_3MONTH="in the last 3 months" COM_USERS_OPTION_RANGE_PAST_6MONTH="in the last 6 months" COM_USERS_OPTION_RANGE_PAST_WEEK="in the last week" COM_USERS_OPTION_RANGE_PAST_YEAR="in the last year" COM_USERS_OPTION_RANGE_POST_YEAR="more than a year ago" COM_USERS_OPTION_RANGE_TODAY="today" COM_USERS_OPTION_LEVEL_CATEGORY="%d (top category)" COM_USERS_OPTION_LEVEL_COMPONENT="%d (component)" COM_USERS_OPTION_LEVEL_DEEPER="%d (deeper)" COM_USERS_OPTION_SELECT_COMPONENT="- Select Component -" COM_USERS_OPTION_SELECT_LEVEL_END="- Select End Level -" COM_USERS_OPTION_SELECT_LEVEL_START="- Select Start Level -" COM_USERS_PASSWORD_RESET_REQUIRED="Password Reset Required" COM_USERS_REQUIRE_PASSWORD_RESET="Require Password Reset" COM_USERS_REVIEW_HEADING="Review Date" COM_USERS_SEARCH_ACCESS_LEVELS="Search Viewing Access Levels" COM_USERS_SEARCH_ASSETS="Search Assets" COM_USERS_SEARCH_GROUPS_LABEL="Search User Groups" COM_USERS_SEARCH_IN_GROUPS="Search in group title. Prefix with ID: to search for a group ID." COM_USERS_SEARCH_IN_NAME="Search in name, username or email. Prefix with ID: to search for a user ID." COM_USERS_SEARCH_IN_NOTE_TITLE="Search in subject, name or username. Prefix with ID: or UID: to search for a note ID or user ID." COM_USERS_SEARCH_IN_LEVEL_NAME="Search in level name. Prefix with ID: to search for an access level ID." COM_USERS_SEARCH_IN_ASSETS="Search in asset name or title." COM_USERS_SEARCH_TITLE_LEVELS="Search Access Levels" COM_USERS_SEARCH_USER_NOTES="Search User Notes" COM_USERS_SEARCH_USERS="Search Users" COM_USERS_SETTINGS_FIELDSET_LABEL="Basic Settings" COM_USERS_SUBMENU_GROUPS="User Groups" COM_USERS_SUBMENU_LEVELS="Viewing Access Levels" COM_USERS_SUBMENU_NOTES="User Notes" COM_USERS_SUBMENU_NOTE_CATEGORIES="User Note Categories" COM_USERS_SUBMENU_USERS="Users" COM_USERS_SUBJECT_HEADING="Subject" COM_USERS_TOOLBAR_ACTIVATE="Activate" COM_USERS_TOOLBAR_BLOCK="Block" COM_USERS_TOOLBAR_MAIL_SEND_MAIL="Send email" COM_USERS_TOOLBAR_UNBLOCK="Unblock" COM_USERS_UNACTIVATED="Unactivated" COM_USERS_USER_ACCOUNT_DETAILS="Account Details" COM_USERS_USER_BATCH_FAILED="An error was encountered while performing the batch operation: %s." COM_USERS_USER_BATCH_SUCCESS="Batch operation completed." COM_USERS_USER_FIELD_BACKEND_LANGUAGE_DESC="Select the Language for the Administrator Backend interface. This will only affect this User." COM_USERS_USER_FIELD_BACKEND_LANGUAGE_LABEL="Backend Language" COM_USERS_USER_FIELD_BACKEND_TEMPLATE_DESC="Select the template style for the Administrator Backend interface. This will only affect this User." COM_USERS_USER_FIELD_BACKEND_TEMPLATE_LABEL="Backend Template Style" COM_USERS_USER_FIELD_BLOCK="Blocked" COM_USERS_USER_FIELD_BLOCK_DESC="Enable or Block this user." COM_USERS_USER_FIELD_BLOCK_LABEL="User Status" COM_USERS_USER_FIELD_EDITOR_DESC="Editor for this user." COM_USERS_USER_FIELD_EDITOR_LABEL="Editor" COM_USERS_USER_FIELD_EMAIL_DESC="Enter an email address for the user." COM_USERS_USER_FIELD_ENABLE="Enabled" COM_USERS_USER_FIELD_FRONTEND_LANGUAGE_DESC="Select the Language for the Frontend interface. This will only affect this User." COM_USERS_USER_FIELD_FRONTEND_LANGUAGE_LABEL="Frontend Language" ; The following two strings are deprecated and will be removed with 4.0. COM_USERS_USER_FIELD_HELPSITE_DESC="Help site for this user." COM_USERS_USER_FIELD_HELPSITE_LABEL="Help Site" COM_USERS_USER_FIELD_LASTRESET_DESC="Date and time of last password reset." COM_USERS_USER_FIELD_LASTRESET_LABEL="Last Reset Date" COM_USERS_USER_FIELD_LASTVISIT_DESC="Last visit date." COM_USERS_USER_FIELD_LASTVISIT_LABEL="Last Visit Date" COM_USERS_USER_FIELD_NAME_DESC="Enter the name of the user." COM_USERS_USER_FIELD_NAME_LABEL="Name" COM_USERS_USER_FIELD_PASSWORD1_MESSAGE="The passwords you entered do not match. Please enter your desired password in the password field and confirm your entry by entering it in the confirm password field." COM_USERS_USER_FIELD_PASSWORD2_DESC="Confirm the user's password." COM_USERS_USER_FIELD_PASSWORD2_LABEL="Confirm Password" COM_USERS_USER_FIELD_PASSWORD_DESC="Enter the password for the user." COM_USERS_USER_FIELD_REGISTERDATE_DESC="Registration date." COM_USERS_USER_FIELD_REGISTERDATE_LABEL="Registration Date" COM_USERS_USER_FIELD_REQUIRERESET_DESC="Setting this option to yes requires the user to reset their password the next time they log into the site." COM_USERS_USER_FIELD_REQUIRERESET_LABEL="Require Password Reset" COM_USERS_USER_FIELD_RESETCOUNT_DESC="Number of password resets since last reset date." COM_USERS_USER_FIELD_RESETCOUNT_LABEL="Password Reset Count" COM_USERS_USER_FIELD_SENDEMAIL_DESC="If set to yes, the user will receive system emails." COM_USERS_USER_FIELD_SENDEMAIL_LABEL="Receive System Emails" COM_USERS_USER_FIELD_TIMEZONE_DESC="Time zone for this user." COM_USERS_USER_FIELD_TIMEZONE_LABEL="Time Zone" COM_USERS_USER_FIELD_TWOFACTOR_LABEL="Authentication Method" COM_USERS_USER_FIELD_TWOFACTOR_DESC="Which two factor authentication method you want to activate on the user account." COM_USERS_USER_FIELD_USERNAME_DESC="Enter the login name (Username) for the user." COM_USERS_USER_FIELD_USERNAME_LABEL="Login Name" COM_USERS_USER_GROUPS_HAVING_ACCESS="User Groups Having Viewing Access" COM_USERS_USER_HEADING="User" COM_USERS_USER_OTEPS="One time emergency passwords" COM_USERS_USER_OTEPS_DESC="If you do not have access to your two factor authentication device you can use any of the following passwords instead of a regular security code. Each one of these emergency passwords is immediately destroyed upon use. We recommend printing these passwords out and keeping the printout in a safe and accessible location, eg your wallet or a safety deposit box." COM_USERS_USER_OTEPS_WAIT_DESC="There are no emergency one time passwords generated in your account. The passwords will be generated automatically and displayed here as soon as you activate two factor authentication." COM_USERS_USER_SAVE_FAILED="An error was encountered while saving the member: %s." COM_USERS_USER_SAVE_SUCCESS="User saved." COM_USERS_USER_TWO_FACTOR_AUTH="Two Factor Authentication" COM_USERS_USERGROUP_DETAILS="User Group Details" COM_USERS_USERS_ERROR_CANNOT_BLOCK_SELF="You can't block yourself." COM_USERS_USERS_ERROR_CANNOT_EDIT_OWN_GROUP="You can't edit your own user groups. User groups saving was skipped." COM_USERS_USERS_ERROR_CANNOT_DELETE_SELF="You can't delete yourself." COM_USERS_USERS_ERROR_CANNOT_DEMOTE_SELF="You can't remove your own Super User permissions." COM_USERS_USERS_ERROR_CANNOT_REQUIRERESET_SELF="You can't require a Password reset for yourself." COM_USERS_USERS_ERROR_CANNOT_SAVE_ACCOUNT_WITHOUT_GROUPS="You can't save a user account without selecting at least one user group." COM_USERS_USERS_MULTIPLE_GROUPS="Multiple groups" COM_USERS_USERS_N_ITEMS_DELETED="%d users deleted." COM_USERS_USERS_N_ITEMS_DELETED_1="1 user deleted." COM_USERS_USERS_NO_ITEM_SELECTED="No Users selected." COM_USERS_VIEW_DEBUG_GROUP_TITLE="Advanced Permissions Report for Group #%d, %s" COM_USERS_VIEW_DEBUG_USER_TITLE="Advanced Permissions Report for User #%d, %s" COM_USERS_VIEW_EDIT_GROUP_TITLE="Users: Edit Group" COM_USERS_VIEW_EDIT_LEVEL_TITLE="Users: Edit Viewing Access Level" COM_USERS_VIEW_EDIT_PROFILE_TITLE="Users: Edit Profile" COM_USERS_VIEW_EDIT_USER_TITLE="Users: Edit" COM_USERS_VIEW_GROUPS_TITLE="Users: Groups" COM_USERS_VIEW_LEVELS_TITLE="Users: Viewing Access Levels" COM_USERS_VIEW_NEW_GROUP_TITLE="Users: New Group" COM_USERS_VIEW_NEW_LEVEL_TITLE="Users: New Viewing Access Level" COM_USERS_VIEW_NEW_USER_TITLE="Users: New" COM_USERS_VIEW_NOTES_TITLE="User Notes" COM_USERS_VIEW_USERS_TITLE="Users" COM_USERS_XML_DESCRIPTION="Component for managing users" JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." ; Categories overrides COM_CATEGORIES_CATEGORY_ADD_TITLE="User Notes: New Category" COM_CATEGORIES_CATEGORY_EDIT_TITLE="User Notes: Edit Category" PKb��\tȲ�++6language/en-GB/en-GB.plg_authentication_cookie.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_AUTH_COOKIE_XML_DESCRIPTION="Handles Joomla's cookie User authentication.<br /><strong> Warning! You must have at least one other authentication plugin enabled.</strong><br />You will also need a plugin such as the System - Remember Me plugin to implement cookie login." PLG_AUTHENTICATION_COOKIE="Authentication - Cookie" PKb��\p��/ZZ$language/en-GB/en-GB.mod_submenu.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_SUBMENU="Administrator Sub-Menu" MOD_SUBMENU_XML_DESCRIPTION="This module shows the Sub-Menu Navigation Module." PKb��\F=??&language/en-GB/en-GB.com_login.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_LOGIN="Login" COM_LOGIN_XML_DESCRIPTION="This component lets users login to the site." PKb��\��@+��"language/en-GB/en-GB.mod_login.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_LOGIN="Login Form" MOD_LOGIN_FIELD_USESECURE_DESC="Submit encrypted login data using HTTPS (encrypted HTTP connections with the https:// protocol prefix). Note, you must have HTTPS enabled on your server to utilise this option." MOD_LOGIN_FIELD_USESECURE_LABEL="Encrypt Login Form" MOD_LOGIN_LANGUAGE="Language" MOD_LOGIN_LOGIN="Log in" MOD_LOGIN_XML_DESCRIPTION="This module displays a username and password login form. It should not be unpublished." MOD_LOGIN_REMIND="Forgot your username?" MOD_LOGIN_RESET="Forgot your password?" PKb��\��(��&language/en-GB/en-GB.com_menus.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_MENUS="Menus" COM_MENUS_ITEMS_CHOOSE_MENU_DESC="Choose a Menutype for the target page.<br><br>Not to be confused with the <strong>Menu</strong> under which this menu item will be assigned." COM_MENUS_ITEMS_CHOOSE_MENU_LABEL="Choose a Menutype" COM_MENUS_ITEMS_VIEW_DEFAULT_DESC="Shows a list of menu items" COM_MENUS_ITEMS_VIEW_DEFAULT_TITLE="Menu Items" COM_MENUS_ITEM_VIEW_EDIT_DESC="Shows a form to create a new menu item" COM_MENUS_ITEM_VIEW_EDIT_TITLE="New Menu Item" COM_MENUS_MENUS_VIEW_DEFAULT_DESC="Shows a list of Menu Types" COM_MENUS_MENUS_VIEW_DEFAULT_TITLE="Menus" COM_MENUS_MENU_VIEW_EDIT_DESC="Shows a form to create a new menu" COM_MENUS_MENU_VIEW_EDIT_TITLE="New Menu" COM_MENUS_XML_DESCRIPTION="Component for creating menus." PKb��\ۄ2���%language/en-GB/en-GB.tpl_isis.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 ISIS="Isis Administrator template" TPL_ISIS_POSITION_BOTTOM="Bottom" TPL_ISIS_POSITION_CPANEL="Cpanel" TPL_ISIS_POSITION_CP_SHELL="Unused" TPL_ISIS_POSITION_DEBUG="Debug" TPL_ISIS_POSITION_FOOTER="Footer" TPL_ISIS_POSITION_ICON="Quick Icons" TPL_ISIS_POSITION_LOGIN="Login" TPL_ISIS_POSITION_MENU="Menu" TPL_ISIS_POSITION_POSTINSTALL="Postinstall" TPL_ISIS_POSITION_STATUS="Status" TPL_ISIS_POSITION_SUBMENU="Submenu" TPL_ISIS_POSITION_TITLE="Title" TPL_ISIS_POSITION_TOOLBAR="Toolbar" TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." PKb��\P��4��0language/en-GB/en-GB.plg_user_contactcreator.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTACTCREATOR_ERR_FAILED_CREATING_CONTACT="Automatic contact creation failed. Please contact a site administrator." PLG_CONTACTCREATOR_ERR_NO_CATEGORY="Contact automatic creation failed because contact category is not set!" PLG_CONTACTCREATOR_FIELD_AUTOMATIC_WEBPAGE_DESC="A formatted string to automatically generate a contact's web page. [name] is replaced with the name, [username] is replaced with the username, [userid] is replaced with the user ID and [email] is replaced with the email." PLG_CONTACTCREATOR_FIELD_AUTOMATIC_WEBPAGE_LABEL="Automatic Webpage" PLG_CONTACTCREATOR_FIELD_AUTOPUBLISH_DESC="Optionally have the contact default to published or unpublished." PLG_CONTACTCREATOR_FIELD_AUTOPUBLISH_LABEL="Automatically Publish the Contact" PLG_CONTACTCREATOR_FIELD_CATEGORY_DESC="Category to assign contacts to by default." PLG_CONTACTCREATOR_XML_DESCRIPTION="Plugin to automatically create contact information for new users." PLG_USER_CONTACTCREATOR="User - Contact Creator" PKb��\���2��+language/en-GB/en-GB.com_categories.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CATEGORIES="Categories" COM_CATEGORIES_CATEGORIES_VIEW_DEFAULT_DESC="Shows a List of All categories in the selected component." COM_CATEGORIES_CATEGORIES_VIEW_DEFAULT_TITLE="List All Categories" COM_CATEGORIES_CATEGORY_VIEW_EDIT_DESC="Create a new Category in the selected component." COM_CATEGORIES_CATEGORY_VIEW_EDIT_TITLE="Create New Category" COM_CATEGORIES_CHOOSE_COMPONENT_DESC="Select a component to which this category should be linked. <br />If a component using categories is not shown in the list, please create at least one category for it using the default regular menu." COM_CATEGORIES_CHOOSE_COMPONENT_LABEL="Choose a Component" COM_CATEGORIES_XML_DESCRIPTION="This component manages categories." PKb��\춅�//+language/en-GB/en-GB.plg_content_joomla.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_JOOMLA="Content - Joomla" PLG_CONTENT_JOOMLA_FIELD_CHECK_CATEGORIES_DESC="Check that categories are fully empty before they are deleted." PLG_CONTENT_JOOMLA_FIELD_CHECK_CATEGORIES_LABEL="Check Category Deletion" PLG_CONTENT_JOOMLA_FIELD_EMAIL_NEW_FE_DESC="Email users if 'Send email' is on when there is a new article submitted via the Frontend." PLG_CONTENT_JOOMLA_FIELD_EMAIL_NEW_FE_LABEL="Email on New Site Article" PLG_CONTENT_JOOMLA_XML_DESCRIPTION="This plugin does category processing for core extensions; sends an email when new article is submitted in the Frontend."PKb��\�B��3language/en-GB/en-GB.plg_twofactorauth_totp.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_TWOFACTORAUTH_TOTP="Two Factor Authentication - Google Authenticator" PLG_TWOFACTORAUTH_TOTP_XML_DESCRIPTION="Allows users on your site to use two factor authentication using <a href="_QQ_"https://en.wikipedia.org/wiki/Google_Authenticator"_QQ_" target="_QQ_"_blank"_QQ_">Google Authenticator</a> or other compatible time-based One Time Password generators such as <a href="_QQ_"https://freeotp.github.io/"_QQ_" target="_QQ_"_blank"_QQ_">FreeOTP</a>. To use two factor authentication please edit the user profile and enable two factor authentication."PKb��\N�Ӛ��(language/en-GB/en-GB.plg_finder_tags.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_QUERY_FILTER_BRANCH_P_TAG="Tags" PLG_FINDER_QUERY_FILTER_BRANCH_S_TAG="Tag" PLG_FINDER_TAGS="Smart Search - Tags" PLG_FINDER_TAGS_XML_DESCRIPTION="This plugin indexes Joomla! Tags." PKb��\y��--'language/en-GB/en-GB.com_config.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CONFIG="Configuration Manager" COM_CONFIG_XML_DESCRIPTION="Configuration Manager" COM_CONFIG_COMPONENT_VIEW_DEFAULT_DESC="Display the configuration options for the selected component." COM_CONFIG_COMPONENT_VIEW_DEFAULT_TITLE="Component Configuration Options" COM_CONFIG_CONFIG_VIEW_DEFAULT_DESC="Displays global site configuration options." COM_CONFIG_CONFIG_VIEW_DEFAULT_TITLE="Site Configuration Options" COM_CONFIG_TEMPLATES_VIEW_DEFAULT_DESC="Displays template parameter options if the template allows this." COM_CONFIG_TEMPLATES_VIEW_DEFAULT_TITLE="Display Template Options" PKb��\��E��,language/en-GB/en-GB.plg_system_redirect.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SYSTEM_REDIRECT="System - Redirect" PLG_SYSTEM_REDIRECT_ERROR_UPDATING_DATABASE="An error occurred while updating the database." PLG_SYSTEM_REDIRECT_FIELD_COLLECT_URLS_DESC="This option controls the collection of URLs. This is useful to avoid unnecessary load on the database." PLG_SYSTEM_REDIRECT_FIELD_COLLECT_URLS_LABEL="Collect URLs" PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_DESC="Define regular expressions or terms which should be excluded in saving." PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_LABEL="Exclude URLs" PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_REGEXP_DESC="Should the term be handled as regular expression." PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_REGEXP_LABEL="Regular Expression" PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_TERM_DESC="A regular expression or a term which should be excluded." PLG_SYSTEM_REDIRECT_FIELD_EXCLUDE_URLS_TERM_LABEL="Term" PLG_SYSTEM_REDIRECT_FIELD_STORE_FULL_URL_DESC="Save the expired URL as absolute (include domain) or relative (exclude domain)." PLG_SYSTEM_REDIRECT_FIELD_STORE_FULL_URL_LABEL="Include Domain Name in Expired URL" PLG_SYSTEM_REDIRECT_XML_DESCRIPTION="The system redirect plugin enables the Joomla Redirect system to catch missing pages and redirect users." PKb��\4���qq,language/en-GB/en-GB.mod_multilangstatus.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_MULTILANGSTATUS="Multilingual Status" MOD_MULTILANGSTATUS_XML_DESCRIPTION="This module shows the status of the multilingual parameters." PKb��\�>��/language/en-GB/en-GB.plg_editors_codemirror.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CODEMIRROR_FIELD_ACTIVELINE_COLOR_DESC="The colour to use for highlighting the active line. Will be displayed at 50% opacity." PLG_CODEMIRROR_FIELD_ACTIVELINE_COLOR_LABEL="Active Line Colour" PLG_CODEMIRROR_FIELD_ACTIVELINE_DESC="Adds a highlight to the line the cursor is on." PLG_CODEMIRROR_FIELD_ACTIVELINE_LABEL="Highlight Active Line" PLG_CODEMIRROR_FIELD_AUTOCLOSEBRACKET_DESC="Automatic bracket completion." PLG_CODEMIRROR_FIELD_AUTOCLOSEBRACKET_LABEL="Bracket Completion" PLG_CODEMIRROR_FIELD_AUTOCLOSETAGS_DESC="Automatic tag completion." PLG_CODEMIRROR_FIELD_AUTOCLOSETAGS_LABEL="Tag Completion" ; The following two strings are deprecated and will be removed in J4 PLG_CODEMIRROR_FIELD_AUTOFOCUS_DESC="Auto focus." PLG_CODEMIRROR_FIELD_AUTOFOCUS_LABEL="Auto Focus" PLG_CODEMIRROR_FIELD_CODEFOLDING_DESC="Allow blocks of code to be folded." PLG_CODEMIRROR_FIELD_CODEFOLDING_LABEL="Code Folding" PLG_CODEMIRROR_FIELD_FONT_FAMILY_DESC="The font to use in the editor. If not installed, will be loaded from https://www.google.com/fonts/." PLG_CODEMIRROR_FIELD_FONT_FAMILY_LABEL="Font" PLG_CODEMIRROR_FIELD_FONT_SIZE_DESC="The size of the font in the editor." PLG_CODEMIRROR_FIELD_FONT_SIZE_LABEL="Font Size (px)" PLG_CODEMIRROR_FIELD_FULLSCREEN_DESC="Select the function key to use to toggle fullscreen mode." PLG_CODEMIRROR_FIELD_FULLSCREEN_LABEL="Toggle Fullscreen" PLG_CODEMIRROR_FIELD_FULLSCREEN_MOD_DESC="Select any modifier keys to use with the fullscreen toggle key." PLG_CODEMIRROR_FIELD_FULLSCREEN_MOD_LABEL="Use Modifiers" PLG_CODEMIRROR_FIELD_HIGHLIGHT_MATCH_COLOR_DESC="The background colour to use for highlighting matching tags. Will be displayed at 50% opacity." PLG_CODEMIRROR_FIELD_HIGHLIGHT_MATCH_COLOR_LABEL="Matching Tag Colour" PLG_CODEMIRROR_FIELD_KEYMAP_DESC="Make CodeMirror work like other popular editors." PLG_CODEMIRROR_FIELD_KEYMAP_EMACS="Emacs" PLG_CODEMIRROR_FIELD_KEYMAP_LABEL="Key Map" PLG_CODEMIRROR_FIELD_KEYMAP_SUBLIME="Sublime Text" PLG_CODEMIRROR_FIELD_KEYMAP_VIM="Vim" PLG_CODEMIRROR_FIELD_LINE_HEIGHT_DESC="The height of one line of text. This is in ems, meaning that 1.0 is equal to the font size and 2.0 is equal to 2x the font size." PLG_CODEMIRROR_FIELD_LINE_HEIGHT_LABEL="Line Height (em)" PLG_CODEMIRROR_FIELD_LINENUMBERS_DESC="Display line numbers." PLG_CODEMIRROR_FIELD_LINENUMBERS_LABEL="Line Numbers" PLG_CODEMIRROR_FIELD_LINEWRAPPING_DESC="Enable/Disable line wrapping." PLG_CODEMIRROR_FIELD_LINEWRAPPING_LABEL="Line Wrapping" PLG_CODEMIRROR_FIELD_MARKERGUTTER_DESC="Code Marker and Code Folding." PLG_CODEMIRROR_FIELD_MARKERGUTTER_LABEL="Gutters" PLG_CODEMIRROR_FIELD_MATCHBRACKETS_DESC="Highlight matching brackets." PLG_CODEMIRROR_FIELD_MATCHBRACKETS_LABEL="Match Brackets" PLG_CODEMIRROR_FIELD_MATCHTAGS_DESC="Highlight matching tags." PLG_CODEMIRROR_FIELD_MATCHTAGS_LABEL="Match Tags" PLG_CODEMIRROR_FIELD_PREVIEW_DESC="An example of what your CodeMirror editor fields will look like with the current settings (save to update)." PLG_CODEMIRROR_FIELD_PREVIEW_LABEL="Preview" PLG_CODEMIRROR_FIELD_SELECTIONMATCHES_DESC="Highlight instances of the selected word throughout the document." PLG_CODEMIRROR_FIELD_SELECTIONMATCHES_LABEL="Highlight Selection Matches" PLG_CODEMIRROR_FIELD_THEME_DESC="Sets the colours for the editor." PLG_CODEMIRROR_FIELD_THEME_LABEL="Theme" PLG_CODEMIRROR_FIELD_VALUE_FONT_FAMILY_DEFAULT="Browser Default" PLG_CODEMIRROR_FIELD_VALUE_FULLSCREEN_MOD_ALT="Alt" PLG_CODEMIRROR_FIELD_VALUE_FULLSCREEN_MOD_CMD="Command" PLG_CODEMIRROR_FIELD_VALUE_FULLSCREEN_MOD_CTRL="Control" PLG_CODEMIRROR_FIELD_VALUE_FULLSCREEN_MOD_SHIFT="Shift" PLG_CODEMIRROR_FIELD_VALUE_SCROLLBARSTYLE_DEFAULT="Default" PLG_CODEMIRROR_FIELD_VALUE_SCROLLBARSTYLE_DESC="Select the scrollbar style you'd like CodeMirror to use." PLG_CODEMIRROR_FIELD_VALUE_SCROLLBARSTYLE_LABEL="Scrollbar Style" PLG_CODEMIRROR_FIELD_VALUE_SCROLLBARSTYLE_OVERLAY="Overlay" PLG_CODEMIRROR_FIELD_VALUE_SCROLLBARSTYLE_SIMPLE="Simple" PLG_CODEMIRROR_FIELD_VALUE_THEME_DARK="Dark" PLG_CODEMIRROR_FIELD_VALUE_THEME_LIGHT="Light" PLG_CODEMIRROR_FIELD_VIM_KEYBINDING_DESC="Select this option to make CodeMirror work in Vim mode." PLG_CODEMIRROR_FIELD_VIM_KEYBINDING_LABEL="Vim Keybinding" PLG_CODEMIRROR_FIELDSET_APPEARANCE_OPTIONS_LABEL="Appearance Options" PLG_CODEMIRROR_FIELDSET_TOOLBAR_OPTIONS_LABEL="Toolbar Options" PLG_CODEMIRROR_TOGGLE_FULL_SCREEN="Press %1$s %2$s to toggle Full Screen editing." PLG_CODEMIRROR_XML_DESCRIPTION="This plugin loads the CodeMirror editor." PLG_EDITORS_CODEMIRROR="Editor - CodeMirror" PKb��\��J��+language/en-GB/en-GB.plg_content_finder.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_FINDER="Content - Smart Search" PLG_CONTENT_FINDER_XML_DESCRIPTION="Changes to content will not update the Smart Search index if you do not enable this plugin." PLG_FINDER_QUERY_FILTER_BRANCH_P__="All" PLG_FINDER_QUERY_FILTER_BRANCH_S_TYPE="Type" PLG_FINDER_QUERY_FILTER_BRANCH_S_LANGUAGE="Language" PLG_FINDER_QUERY_FILTER_BRANCH_S_CATEGORY="Category" PLG_FINDER_QUERY_FILTER_BRANCH_P_TYPE="Types" PLG_FINDER_QUERY_FILTER_BRANCH_P_LANGUAGE="Languages" PLG_FINDER_QUERY_FILTER_BRANCH_P_CATEGORY="Categories" PKb��\�U���5language/en-GB/en-GB.plg_editors-xtd_readmore.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EDITORS-XTD_READMORE="Button - Readmore" PLG_READMORE_XML_DESCRIPTION="Enables a button which allows you to insert the <em>Read more ...</em> link into an Article."PKb��\S����0language/en-GB/en-GB.plg_editors-xtd_article.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_ARTICLE_BUTTON_ARTICLE="Article" PLG_ARTICLE_XML_DESCRIPTION="Displays a button to insert links to articles into an Article. Displays a popup allowing you to choose the article." PLG_EDITORS-XTD_ARTICLE="Button - Article" PKb��\q��||4language/en-GB/en-GB.plg_user_contactcreator.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTACTCREATOR_XML_DESCRIPTION="Plugin to automatically create contact information for new users." PLG_USER_CONTACTCREATOR="User - Contact Creator" PKb��\}�;���2language/en-GB/en-GB.plg_captcha_recaptcha.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CAPTCHA_RECAPTCHA_XML_DESCRIPTION="This CAPTCHA plugin uses the reCAPTCHA service to prevent spammers while it helps to digitize books, newspapers and old radio shows. To get a site and secret key for your domain, go to <a href="_QQ_"https://www.google.com/recaptcha"_QQ_" target="_QQ_"_blank"_QQ_">https://www.google.com/recaptcha</a>. To use this for new account registration, go to Options in the User Manager and select CAPTCHA - reCAPTCHA as the CAPTCHA." PLG_CAPTCHA_RECAPTCHA="CAPTCHA - reCAPTCHA" PKb��\�MnHH*language/en-GB/en-GB.com_templates.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_TEMPLATES="Templates" COM_TEMPLATES_STYLE_VIEW_DEFAULT_DESC="Shows a List of Template styles" COM_TEMPLATES_STYLE_VIEW_DEFAULT_TITLE="Template Styles" COM_TEMPLATES_TEMPLATES_VIEW_DEFAULT_DESC="Shows a List of Installed Templates" COM_TEMPLATES_TEMPLATES_VIEW_DEFAULT_TITLE="Templates" COM_TEMPLATES_XML_DESCRIPTION="This component manages templates." PKb��\UY8-language/en-GB/en-GB.com_joomlaupdate.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_JOOMLAUPDATE="Joomla! Update" COM_JOOMLAUPDATE_XML_DESCRIPTION="One-click update to the latest Joomla release." COM_JOOMLAUPDATE_DEFAULT_VIEW_DEFAULT_DESC="Check for Joomla! updates and update your website with the latest available release." COM_JOOMLAUPDATE_DEFAULT_VIEW_DEFAULT_TITLE="View Joomla! Updates" PKb��\�ې���#language/en-GB/en-GB.mod_status.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_STATUS="User Status" MOD_STATUS_BACKEND_USERS_0="Administrators" MOD_STATUS_BACKEND_USERS_1="Administrator" MOD_STATUS_BACKEND_USERS_MORE="Administrators" MOD_STATUS_FIELD_SHOW_VIEWSITE_LABEL="View Site" MOD_STATUS_FIELD_SHOW_VIEWSITE_DESC="Show a link to the website home page." MOD_STATUS_FIELD_LINK_VIEWADMIN_LABEL="Show Admin" MOD_STATUS_FIELD_SHOW_VIEWADMIN_LABEL="View Administrator" MOD_STATUS_FIELD_SHOW_VIEWADMIN_DESC="Show a link to open a new Administrator window." MOD_STATUS_FIELD_SHOW_LOGGEDIN_USERS_ADMIN_DESC="Show the number of users logged-in to the Backend." MOD_STATUS_FIELD_SHOW_LOGGEDIN_USERS_ADMIN_LABEL="Logged-in Backend Users" MOD_STATUS_FIELD_SHOW_LOGGEDIN_USERS_DESC="Show the number of users logged-in to the Frontend." MOD_STATUS_FIELD_SHOW_LOGGEDIN_USERS_LABEL="Logged-in Users" MOD_STATUS_FIELD_SHOW_MESSAGES_DESC="Show the messages count for the current user's inbox." MOD_STATUS_FIELD_SHOW_MESSAGES_LABEL="Messages" MOD_STATUS_LOG_OUT="Log out" MOD_STATUS_MESSAGES_0="%d Messages" MOD_STATUS_MESSAGES_1="%d Message" MOD_STATUS_MESSAGES_LABEL_0="Messages" MOD_STATUS_MESSAGES_LABEL_1="Message" MOD_STATUS_MESSAGES_LABEL_MORE="Messages" MOD_STATUS_MESSAGES_MORE="%d Messages" MOD_STATUS_TOTAL_USERS_0="Users" MOD_STATUS_TOTAL_USERS_1="User" MOD_STATUS_TOTAL_USERS_MORE="Users" MOD_STATUS_USERS_0="Visitors" MOD_STATUS_USERS_1="Visitor" MOD_STATUS_USERS_MORE="Visitors" MOD_STATUS_XML_DESCRIPTION="This module shows the status of the logged-in users and various shortcut links." PKb��\����2language/en-GB/en-GB.plg_editors-xtd_pagebreak.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EDITORS-XTD_PAGEBREAK="Button - Page Break" PLG_EDITORSXTD_PAGEBREAK_BUTTON_PAGEBREAK="Page Break" PLG_EDITORSXTD_PAGEBREAK_XML_DESCRIPTION="Provides a button to enable a page break to be inserted into an Article. A popup allows you to configure the settings to be used." PKb��\]�pp3language/en-GB/en-GB.plg_content_loadmodule.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_LOADMODULE="Content - Load Modules" PLG_LOADMODULE_XML_DESCRIPTION="Within content this plugin loads a Module by ID, Syntax: {loadmoduleid 1} or a Module by position, Syntax: {loadposition user1} or a Module by name, Syntax: {loadmodule mod_login}. Optionally can specify module style and for loadmodule a specific module by title, Syntax: {loadmodule mod_login,module title,style}." PKb��\��L)language/en-GB/en-GB.plg_user_profile.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CONTENT_CHANGE_ARTICLE="Select or Change article" COM_CONTENT_CHANGE_ARTICLE_BUTTON="Select/Change" COM_CONTENT_SELECT_AN_ARTICLE="Select an Article" PLG_USER_PROFILE="User - Profile" PLG_USER_PROFILE_ERROR_INVALID_DOB="The date of birth you entered is invalid. Please enter a valid date." PLG_USER_PROFILE_ERROR_INVALID_DOB_FUTURE_DATE="The date of birth you entered is in the future." PLG_USER_PROFILE_FIELD_ABOUT_ME_DESC="Choose an option for the field About Me." PLG_USER_PROFILE_FIELD_ABOUT_ME_LABEL="About Me" PLG_USER_PROFILE_FIELD_ADDRESS1_DESC="Choose an option for the field Address1." PLG_USER_PROFILE_FIELD_ADDRESS1_LABEL="Address 1" PLG_USER_PROFILE_FIELD_ADDRESS2_DESC="Choose an option for the field Address2." PLG_USER_PROFILE_FIELD_ADDRESS2_LABEL="Address 2" PLG_USER_PROFILE_FIELD_CITY_DESC="Choose an option for the field City." PLG_USER_PROFILE_FIELD_CITY_LABEL="City" PLG_USER_PROFILE_FIELD_COUNTRY_DESC="Choose an option for the field Country." PLG_USER_PROFILE_FIELD_COUNTRY_LABEL="Country" PLG_USER_PROFILE_FIELD_DOB_DESC="Choose an option for the field Date of Birth." PLG_USER_PROFILE_FIELD_DOB_LABEL="Date of Birth" PLG_USER_PROFILE_FIELD_FAVORITE_BOOK_DESC="Choose an option for the field Favourite Book." PLG_USER_PROFILE_FIELD_FAVORITE_BOOK_LABEL="Favourite Book" PLG_USER_PROFILE_FIELD_NAME_PROFILE_REQUIRE_USER="User profile fields for profile edit form" PLG_USER_PROFILE_FIELD_NAME_REGISTER_REQUIRE_USER="User profile fields for registration and administrator user forms" PLG_USER_PROFILE_FIELD_PHONE_DESC="Choose an option for the field Phone." PLG_USER_PROFILE_FIELD_PHONE_LABEL="Phone" PLG_USER_PROFILE_FIELD_POSTAL_CODE_DESC="Choose an option for the field Postal/ZIP Code." PLG_USER_PROFILE_FIELD_POSTAL_CODE_LABEL="Postal/ZIP Code" PLG_USER_PROFILE_FIELD_REGION_DESC="Choose an option for the field Region." PLG_USER_PROFILE_FIELD_REGION_LABEL="Region" PLG_USER_PROFILE_FIELD_TOS_ARTICLE_DESC="Select the desired Terms of Service article from the list." PLG_USER_PROFILE_FIELD_TOS_ARTICLE_LABEL="Select TOS Article" PLG_USER_PROFILE_FIELD_TOS_DESC="Agree to terms of service." PLG_USER_PROFILE_FIELD_TOS_DESC_SITE="Please read the Terms of Service. You will not be able to register if you do not agree with them." PLG_USER_PROFILE_FIELD_TOS_LABEL="Terms of Service" PLG_USER_PROFILE_FIELD_WEB_SITE_DESC="Choose an option for the field website." PLG_USER_PROFILE_FIELD_WEB_SITE_LABEL="Website" PLG_USER_PROFILE_FILL_FIELD_DESC_SITE="If required, please fill this field." PLG_USER_PROFILE_OPTION_AGREE="Agree" PLG_USER_PROFILE_SLIDER_LABEL="User Profile" ; Adapt the following string to the format you entered in the 'DATE_FORMAT_CALENDAR_DATE' PLG_USER_PROFILE_SPACER_DOB="The date of birth entered should use the format Year-Month-Day, ie 0000-00-00" PLG_USER_PROFILE_XML_DESCRIPTION="User Profile Plugin" PKb��\~:J���'language/en-GB/en-GB.mod_custom.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_CUSTOM="Custom" MOD_CUSTOM_XML_DESCRIPTION="This module allows you to create your own Module using a WYSIWYG editor." MOD_CUSTOM_LAYOUT_DEFAULT="Default" PKb��\�>W�;�;&language/en-GB/en-GB.com_languages.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_LANGUAGES="Languages" COM_LANGUAGES_CONFIGURATION="Languages: Options" COM_LANGUAGES_ERR_DELETE="Select a language to delete" COM_LANGUAGES_ERR_NO_LANGUAGE_SELECTED="No language selected." COM_LANGUAGES_ERROR_LANG_TAG="<br />The Language Tag should have 2 or 3 lowercase letters corresponding to the ISO language, a dash and 2 uppercase letters corresponding to the ISO country code. <br />This should be the exact prefix used for the language installed or to be installed. Example: en-GB, srp-ME." COM_LANGUAGES_ERROR_LANGUAGE_METAFILE_MISSING="Could not load %s language meta XML file from %s." COM_LANGUAGES_ERR_PUBLISH="Select a language to publish." COM_LANGUAGES_FIELD_DESCRIPTION_DESC="Enter a description for the language." COM_LANGUAGES_FIELD_IMAGE_DESC="Name of the image file for this language when using the "Use image flags" Language Switcher basic option. Example: if 'en' is chosen, then the image will be en.gif. Images and CSS for this module are in media/mod_languages/." COM_LANGUAGES_FIELD_IMAGE_LABEL="Image" COM_LANGUAGES_FIELD_LANG_TAG_DESC="Enter the language tag – example: en-GB for English (en-GB). This should be the exact prefix used for the language installed or to be installed." COM_LANGUAGES_FIELD_LANG_TAG_LABEL="Language Tag" COM_LANGUAGES_INSTALL="Install Languages" COM_LANGUAGES_INSTALLED_FILTER_SEARCH_DESC="Search in title and language tag." COM_LANGUAGES_INSTALLED_FILTER_SEARCH_LABEL="Search Installed Languages" COM_LANGUAGES_OVERRIDE_ERROR_RESERVED_WORDS="YES, NO, NULL, FALSE, ON, OFF, NONE, TRUE are reserved words and can't be used as language constants." COM_LANGUAGES_OVERRIDE_FIELD_BOTH_LABEL="For Both Locations" COM_LANGUAGES_OVERRIDE_FIELD_BOTH_DESC="If this box is checked the override will be stored for both administrator (Backend) and site (Frontend). This is essential for creating language overrides for some plugins because their language files, while stored in backend, are also used in frontend (example: plg_content_vote).<br />Please note that the two overrides will be completely independent from each other after storing them." COM_LANGUAGES_OVERRIDE_FIELD_CLIENT_LABEL="Location" COM_LANGUAGES_OVERRIDE_FIELD_CLIENT_DESC="Indicates if the override is created for the site (Frontend) or Administrator (Backend) client." COM_LANGUAGES_OVERRIDE_FIELD_FILE_LABEL="File" COM_LANGUAGES_OVERRIDE_FIELD_FILE_DESC="Language overrides are stored in a specific INI file (as it's the case for the original texts, too). Here you can see in which file the current override is stored." COM_LANGUAGES_OVERRIDE_FIELD_LANGUAGE_LABEL="Language" COM_LANGUAGES_OVERRIDE_FIELD_LANGUAGE_DESC="Language for which the constant is overridden." COM_LANGUAGES_OVERRIDE_FIELD_KEY_LABEL="Language Constant" COM_LANGUAGES_OVERRIDE_FIELD_KEY_DESC="The language constant of the string you want to override." COM_LANGUAGES_OVERRIDE_FIELD_OVERRIDE_LABEL="Text" COM_LANGUAGES_OVERRIDE_FIELD_OVERRIDE_DESC="Enter the text that you want to be displayed instead of the original one.<br /><strong>Please note</strong> that there may be placeholders (eg %s, %d or %1$s) in the text which could be important (they will be replaced by other texts before displaying), so you should leave them in there." COM_LANGUAGES_OVERRIDE_FIELD_SEARCHSTRING_LABEL="Search Text" COM_LANGUAGES_OVERRIDE_FIELD_SEARCHSTRING_DESC="Please enter the text to search for here. It may be in any of the language files." COM_LANGUAGES_OVERRIDE_FIELD_SEARCHTYPE_LABEL="Search For" COM_LANGUAGES_OVERRIDE_FIELD_SEARCHTYPE_DESC="Select if you want to search for constant names or the values (the actual text)." COM_LANGUAGES_OVERRIDE_FIELD_SEARCHTYPE_CONSTANT="Constant" COM_LANGUAGES_OVERRIDE_FIELD_SEARCHTYPE_TEXT="Value" COM_LANGUAGES_OVERRIDE_FIRST_SELECT_MESSAGE="To create a new override, please first select a language and client." COM_LANGUAGES_OVERRIDE_SELECT_LANGUAGE="- Select Language & Client -" COM_LANGUAGES_FIELD_PUBLISHED_DESC="Whether this content language is published or not. If published, it will display as a choice in the Language Switcher module in Frontend." COM_LANGUAGES_FIELD_LANG_CODE_DESC="This Language Code will be appended to the site URL. When SEF is enabled, you will get https://example.com/en/. If SEF is disabled the suffix &lang=en will be appended at the end of the URL. Note <em>the Language Code must be unique among all the languages</em>." COM_LANGUAGES_FIELD_LANG_CODE_LABEL="URL Language Code" COM_LANGUAGES_FIELD_SITE_NAME_DESC="Enter a custom site name for this content language. If the site name is set to display, this custom site name will be used instead of the Global Configuration setting." COM_LANGUAGES_FIELD_SITE_NAME_LABEL="Custom Site Name" COM_LANGUAGES_FIELDSET_SITE_NAME_LABEL="Site Name" COM_LANGUAGES_FIELD_TITLE_DESC="The name of the language as it will appear in the lists." COM_LANGUAGES_FIELD_TITLE_NATIVE_DESC="Title in native language." COM_LANGUAGES_FIELD_TITLE_NATIVE_LABEL="Title Native" COM_LANGUAGES_FILTER_CLIENT_LABEL="Filter Location:" COM_LANGUAGES_FTP_DESC="For setting Languages as default, Joomla will most likely need your FTP account details. Please enter them in the form fields below." COM_LANGUAGES_FTP_TITLE="FTP Login Details" COM_LANGUAGES_HEADING_AUTHOR="Author" COM_LANGUAGES_HEADING_AUTHOR_ASC="Author ascending" COM_LANGUAGES_HEADING_AUTHOR_DESC="Author descending" COM_LANGUAGES_HEADING_AUTHOR_EMAIL="Author Email" COM_LANGUAGES_HEADING_AUTHOR_EMAIL_ASC="Author Email ascending" COM_LANGUAGES_HEADING_AUTHOR_EMAIL_DESC="Author Email descending" COM_LANGUAGES_HEADING_DATE="Date" COM_LANGUAGES_HEADING_DATE_ASC="Date ascending" COM_LANGUAGES_HEADING_DATE_DESC="Date descending" COM_LANGUAGES_HEADING_DEFAULT="Default" COM_LANGUAGES_HEADING_DEFAULT_ASC="Default ascending" COM_LANGUAGES_HEADING_DEFAULT_DESC="Default descending" COM_LANGUAGES_HEADING_HOMEPAGE="Home" COM_LANGUAGES_HEADING_HOMEPAGE_ASC="Home ascending" COM_LANGUAGES_HEADING_HOMEPAGE_DESC="Home descending" COM_LANGUAGES_HEADING_LANGUAGE="Language" COM_LANGUAGES_HEADING_LANGUAGE_ASC="Language ascending" COM_LANGUAGES_HEADING_LANGUAGE_DESC="Language descending" COM_LANGUAGES_HEADING_LANG_CODE="URL Language Code" COM_LANGUAGES_HEADING_LANG_CODE_ASC="URL Language Code ascending" COM_LANGUAGES_HEADING_LANG_CODE_DESC="URL Language Code descending" COM_LANGUAGES_HEADING_LANG_IMAGE="Image" COM_LANGUAGES_HEADING_LANG_IMAGE_ASC="Image ascending" COM_LANGUAGES_HEADING_LANG_IMAGE_DESC="Image descending" COM_LANGUAGES_HEADING_LANG_TAG="Language Tag" COM_LANGUAGES_HEADING_LANG_TAG_ASC="Language Tag ascending" COM_LANGUAGES_HEADING_LANG_TAG_DESC="Language Tag descending" COM_LANGUAGES_HEADING_VERSION="Version" COM_LANGUAGES_HEADING_VERSION_ASC="Version ascending" COM_LANGUAGES_HEADING_VERSION_DESC="Version descending" COM_LANGUAGES_HEADING_TITLE_NATIVE="Native Title" COM_LANGUAGES_HEADING_TITLE_NATIVE_ASC="Native Title ascending" COM_LANGUAGES_HEADING_TITLE_NATIVE_DESC="Native Title descending" COM_LANGUAGES_HOMEPAGE="Home" COM_LANGUAGES_MSG_DEFAULT_LANGUAGE_SAVED="Default Language Saved. This does not affect users that have chosen a specific language on their profile or on the login page.<br /><strong class="_QQ_"red"_QQ_">Warning!</strong> When using the multilingual functionality (ie when the plugin System - Language Filter is enabled) the Site Default Language also has to be a published Content language." COM_LANGUAGES_MSG_SWITCH_ADMIN_LANGUAGE_SUCCESS="The Administrator Language has been switched to "<strong>%s</strong>"." COM_LANGUAGES_MULTILANGSTATUS_CONTACTS_ERROR="Some of the contacts linked to the user <strong>%s</strong> are incorrect." COM_LANGUAGES_MULTILANGSTATUS_CONTACTS_ERROR_TIP="Warning! A user/author should have only one contact to which is assigned language 'All' OR one contact for each published Content Language." COM_LANGUAGES_MULTILANGSTATUS_CONTENT_LANGUAGE_PUBLISHED="Published Content Languages" COM_LANGUAGES_MULTILANGSTATUS_DEFAULT_HOME_MODULE_PUBLISHED="This site is set as a multilingual site. The menu module displaying the Home menu item set to language "All" should not be published." COM_LANGUAGES_MULTILANGSTATUS_ERROR_CONTENT_LANGUAGE="A Default Home page is assigned to the <strong>%s</strong> Content Language although a Site Language for this Content Language is not installed or published AND/OR the Content Language is not published." COM_LANGUAGES_MULTILANGSTATUS_ERROR_CONTENT_LANGUAGE_TRASHED="The Content Language <strong>%s</strong> is trashed." COM_LANGUAGES_MULTILANGSTATUS_ERROR_LANGUAGE_TAG="The Content Language tag <strong>%s</strong> does not match the Site Language tag. Check that the Site Language is installed and published and the correct language tag is used for the Content Language. Example: for English (en-GB) both tags should be 'en-GB'." COM_LANGUAGES_MULTILANGSTATUS_HOMES_MISSING="This site is set as a multilingual site. One or more of the Default Home pages for the published Content languages are missing although the Language Filter plugin is enabled AND/OR one or more Language Switcher modules are published." COM_LANGUAGES_MULTILANGSTATUS_HOMES_PUBLISHED="Published Default Home pages" COM_LANGUAGES_MULTILANGSTATUS_HOMES_PUBLISHED_ALL="1 assigned to language 'All'." COM_LANGUAGES_MULTILANGSTATUS_HOMES_PUBLISHED_INCLUDING_ALL="Published Default Home pages (including 1 assigned to language "All")." COM_LANGUAGES_MULTILANGSTATUS_LANGSWITCHER_PUBLISHED="Published Language Switcher Modules." COM_LANGUAGES_MULTILANGSTATUS_LANGSWITCHER_UNPUBLISHED="This site is set as a multilingual site, at least one Language Switcher module set to language "All" has to be published. Disregard this message if you do not use a language switcher module but direct links." COM_LANGUAGES_MULTILANGSTATUS_LANGUAGEFILTER="Language Filter Plugin" COM_LANGUAGES_MULTILANGSTATUS_LANGUAGEFILTER_DISABLED="This site is set as a multilingual site. The Language Filter plugin is not enabled although one or more Language Switcher modules AND/OR one or more specific Content language Default Home pages are published." COM_LANGUAGES_MULTILANGSTATUS_NONE="This site is not set as a multilingual site." COM_LANGUAGES_MULTILANGSTATUS_SITE_LANG_PUBLISHED="Published Site Languages" COM_LANGUAGES_MULTILANGSTATUS_USELESS_HOMES="This site is not set as a multilingual site.<br /><strong>Note</strong>: at least one Default Home page is assigned to a Content Language. This will not break a monolingual site but is useless." COM_LANGUAGES_N_ITEMS_DELETED="%d Content Languages deleted." COM_LANGUAGES_N_ITEMS_DELETED_1="%d Content Language deleted." COM_LANGUAGES_N_ITEMS_PUBLISHED="%d Content Languages published." COM_LANGUAGES_N_ITEMS_PUBLISHED_1="%d Content Language published." COM_LANGUAGES_N_ITEMS_TRASHED="%d Content Languages trashed." COM_LANGUAGES_N_ITEMS_TRASHED_1="%d Content Language trashed." COM_LANGUAGES_N_ITEMS_UNPUBLISHED="%d Content Languages unpublished. <br /><strong class="_QQ_"red"_QQ_">Warning!</strong> When using the multilingual functionality (ie when the plugin System - Language Filter is enabled) the Site Default Language also has to be a published Content language." COM_LANGUAGES_N_ITEMS_UNPUBLISHED_1="%d Content Language unpublished. <br /><strong class="_QQ_"red"_QQ_">Warning!</strong> When using the multilingual functionality (ie when the plugin System - Language Filter is enabled) the Site Default Language also has to be a published Content language." COM_LANGUAGES_NO_ITEM_SELECTED="No languages selected." COM_LANGUAGES_SAVE_SUCCESS="Content Language saved." COM_LANGUAGES_SEARCH_IN_TITLE="Search in title." COM_LANGUAGES_SUBMENU_CONTENT="Content Languages" COM_LANGUAGES_SUBMENU_INSTALLED="Installed" COM_LANGUAGES_SUBMENU_INSTALLED_ADMINISTRATOR="Installed - Administrator" COM_LANGUAGES_SUBMENU_INSTALLED_SITE="Installed - Site" COM_LANGUAGES_SUBMENU_OVERRIDES="Overrides" COM_LANGUAGES_SWITCH_ADMIN="Switch Language" COM_LANGUAGES_VIEW_INSTALLED_ADMIN_TITLE="Languages: Installed (Administrator)" COM_LANGUAGES_VIEW_INSTALLED_SITE_TITLE="Languages: Installed (Site)" COM_LANGUAGES_VIEW_INSTALLED_TITLE="Languages: Installed" COM_LANGUAGES_VIEW_LANGUAGE_EDIT_EDIT_TITLE="Languages: Edit Content Language" COM_LANGUAGES_VIEW_LANGUAGE_EDIT_NEW_TITLE="Languages: New Content Language" COM_LANGUAGES_VIEW_LANGUAGES_TITLE="Languages: Content" COM_LANGUAGES_VIEW_OVERRIDE_CLIENT_SITE="Site" COM_LANGUAGES_VIEW_OVERRIDE_CLIENT_ADMINISTRATOR="Administrator" COM_LANGUAGES_VIEW_OVERRIDE_EDIT_TITLE="Languages: Edit Override" COM_LANGUAGES_VIEW_OVERRIDE_EDIT_NEW_OVERRIDE_LEGEND="Create a New Override" COM_LANGUAGES_VIEW_OVERRIDE_EDIT_EDIT_OVERRIDE_LEGEND="Edit this Override" COM_LANGUAGES_VIEW_OVERRIDE_LANGUAGE="%1$s [%2$s]" COM_LANGUAGES_VIEW_OVERRIDE_MORE_RESULTS="More Results" COM_LANGUAGES_VIEW_OVERRIDE_NO_RESULTS="No matching texts found." COM_LANGUAGES_VIEW_OVERRIDE_REFRESHING="Please wait while the cache is recreated." COM_LANGUAGES_VIEW_OVERRIDE_REQUEST_ERROR="Error while performing an Ajax request." COM_LANGUAGES_VIEW_OVERRIDE_RESULTS_LEGEND="Search Results" COM_LANGUAGES_VIEW_OVERRIDE_SAVE_SUCCESS="Language Override was saved." COM_LANGUAGES_VIEW_OVERRIDE_SEARCH_BUTTON="Search" COM_LANGUAGES_VIEW_OVERRIDE_SEARCH_LEGEND="Search text you want to change." COM_LANGUAGES_VIEW_OVERRIDE_SEARCH_TIP="A language string is composed of two parts: a specific language constant and its value.<br />For example, in the string: COM_CONTENT_READ_MORE="Read more: "<br />'<u>COM_CONTENT_READ_MORE</u>' is the constant and '<u>Read more: </u>' is the value.<br />You have to use the specific language constant to create an override of the value.<br />Therefore, you can search for the constant or the value you want to change with the search field below.<br />By selecting the desired result the correct constant will automatically be inserted into the form." COM_LANGUAGES_VIEW_OVERRIDES_FILTER_SEARCH_DESC="Search constant or text." COM_LANGUAGES_VIEW_OVERRIDES_KEY="Constant" COM_LANGUAGES_VIEW_OVERRIDES_LANGUAGES_BOX_ITEM="%1$s - %2$s" COM_LANGUAGES_VIEW_OVERRIDES_N_ITEMS_DELETED="%d language overrides were deleted." COM_LANGUAGES_VIEW_OVERRIDES_N_ITEMS_DELETED_1="%d language override was deleted." COM_LANGUAGES_VIEW_OVERRIDES_NO_ITEM_SELECTED="You haven't selected any overrides." COM_LANGUAGES_VIEW_OVERRIDES_PURGE="Clear Cache" COM_LANGUAGES_VIEW_OVERRIDES_PURGE_SUCCESS="Overrider cache table cleared." COM_LANGUAGES_VIEW_OVERRIDES_TEXT="Text" COM_LANGUAGES_VIEW_OVERRIDES_TITLE="Languages: Overrides" COM_LANGUAGES_XML_DESCRIPTION="Component for language management" JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\!�={��.language/en-GB/en-GB.plg_system_logout.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SYSTEM_LOGOUT_XML_DESCRIPTION="The system logout plugin enables Joomla to redirect the user to the home page if they choose to logout while they are on a protected access page." PLG_SYSTEM_LOGOUT="System - Logout" PKb��\�1ބ�3language/en-GB/en-GB.plg_content_emailcloak.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_EMAILCLOAK="Content - Email Cloaking" PLG_CONTENT_EMAILCLOAK_XML_DESCRIPTION="Cloaks all email addresses in content from spambots using JavaScript."PKb��\�U=�;;'language/en-GB/en-GB.com_mailto.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_MAILTO="Mail to" COM_MAILTO_XML_DESCRIPTION="A generic mail to friend component." PKb��\�n#���-language/en-GB/en-GB.plg_finder_newsfeeds.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_NEWSFEEDS="Smart Search - News Feeds" PLG_FINDER_NEWSFEEDS_XML_DESCRIPTION="This plugin indexes Joomla! News feeds." PLG_FINDER_QUERY_FILTER_BRANCH_P_NEWS_FEED="News feeds" PLG_FINDER_QUERY_FILTER_BRANCH_S_NEWS_FEED="News feed" PKb��\{��bb2language/en-GB/en-GB.plg_search_categories.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_CATEGORIES="Search - Categories" PLG_SEARCH_CATEGORIES_XML_DESCRIPTION="Enables searching of Category information."PKb��\`h�DD/language/en-GB/en-GB.plg_twofactorauth_totp.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_TWOFACTORAUTH_TOTP="Two Factor Authentication - Google Authenticator" PLG_TWOFACTORAUTH_TOTP_ERR_VALIDATIONFAILED="You did not enter a valid security code. Please check your Google Authenticator setup and make sure that the time on your device matches the time on the site." PLG_TWOFACTORAUTH_TOTP_INTRO="This feature allows you to use Google Authenticator, or a compatible application such as FreeOTP, for two factor authentication. In addition to your username and password you will also need to provide a six digit security code to be able to login to this site. The security code is rotated every 30 seconds. This provides extra protection against hackers logging in to your account even if they were able to get hold of your password." PLG_TWOFACTORAUTH_TOTP_METHOD_TITLE="Google Authenticator" PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_TITLE="Two Factor Authentication is Available" PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_BODY="<p>Joomla! comes with a built-in two factor authentication system. It secures your site login with a secondary secret code that's changing every 30 seconds. You can use your mobile device and the <a href="_QQ_"https://en.wikipedia.org/wiki/Google_Authenticator"_QQ_" target="_QQ_"_blank"_QQ_">Google Authenticator</a> app to produce that code.</p><p>By selecting the button below:</p><ul><li>Joomla! will enable the two factor authentication plugins</li><li>Two Factor Authentication is going to be available for all users.</li><li>Each user can configure Two Factor Authentication in User Details.</li><li>You can always disable Two Factor Authentication plugin, or configure it for Backend usage only.</li><li>You will be taken to your user profile page where you can find more information on two factor authentication and enable it for your user account.</li></ul>" PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_ACTION="Enable two factor authentication" PLG_TWOFACTORAUTH_TOTP_SECTION_ADMIN="Administrator (Backend)" PLG_TWOFACTORAUTH_TOTP_SECTION_BOTH="Both" PLG_TWOFACTORAUTH_TOTP_SECTION_DESC="In which sections of your site do you want to enable two factor authentication?" PLG_TWOFACTORAUTH_TOTP_SECTION_LABEL="Site Section" PLG_TWOFACTORAUTH_TOTP_SECTION_SITE="Site (Frontend)" PLG_TWOFACTORAUTH_TOTP_STEP1_HEAD="Step 1 - Get Google Authenticator" PLG_TWOFACTORAUTH_TOTP_STEP1_ITEM1="Official Google Authenticator app for Android, iOS and BlackBerry" ; Check the URL and change the part hl=en to your language tag if this is available (example hl=de; hl=zh-cn; hl=zh-tw) PLG_TWOFACTORAUTH_TOTP_STEP1_ITEM1_LINK="https://support.google.com/accounts/bin/answer.py?hl=en&answer=1066447" PLG_TWOFACTORAUTH_TOTP_STEP1_ITEM2="Compatible clients for other devices and operating system (listed in Wikipedia)." ; Change and check this link if there is a translation in your language available. (current: German, Spanish, French, Japanese, Polish) PLG_TWOFACTORAUTH_TOTP_STEP1_ITEM2_LINK="https://en.wikipedia.org/wiki/Google_Authenticator#Implementation" PLG_TWOFACTORAUTH_TOTP_STEP1_TEXT="Download and install <a href="_QQ_"https://en.wikipedia.org/wiki/Google_Authenticator"_QQ_" target="_QQ_"_blank"_QQ_">Google Authenticator</a>, or a compatible application such as <a href="_QQ_"https://freeotp.github.io/"_QQ_" target="_QQ_"_blank"_QQ_">FreeOTP</a>, on your smartphone or desktop. Use one of the following:" PLG_TWOFACTORAUTH_TOTP_STEP1_WARN="Please remember to sync your device's clock with a time-server. Time drift in your device may cause an inability to log in to your site." PLG_TWOFACTORAUTH_TOTP_STEP2_ACCOUNT="Account" PLG_TWOFACTORAUTH_TOTP_STEP2_ALTTEXT="Alternatively, you can scan the following QR code in Google Authenticator." PLG_TWOFACTORAUTH_TOTP_STEP2_HEAD="Step 2 - Set up" PLG_TWOFACTORAUTH_TOTP_STEP2_KEY="Key" PLG_TWOFACTORAUTH_TOTP_STEP2_RESET="If you want to change the key, disable the two factor authentication. When you try enabling it again it will generate a new key." PLG_TWOFACTORAUTH_TOTP_STEP2_TEXT="You will need to enter the following information to Google Authenticator or a compatible app." PLG_TWOFACTORAUTH_TOTP_STEP3_HEAD="Step 3 - Activate Two Factor Authentication" PLG_TWOFACTORAUTH_TOTP_STEP3_SECURITYCODE="Security Code" PLG_TWOFACTORAUTH_TOTP_STEP3_TEXT="To verify that everything is set up properly, please enter the security code displayed in Google Authenticator in the field below. Afterwards, please save your user profile. If the code is correct, the Two Factor Authentication feature will be enabled." PLG_TWOFACTORAUTH_TOTP_XML_DESCRIPTION="Allows users on your site to use two factor authentication using <a href="_QQ_"https://en.wikipedia.org/wiki/Google_Authenticator"_QQ_" target="_QQ_"_blank"_QQ_">Google Authenticator</a> or other compatible time-based One Time Password generators such as <a href="_QQ_"https://freeotp.github.io/"_QQ_" target="_QQ_"_blank"_QQ_">FreeOTP</a>. To use two factor authentication please edit the user profile and enable two factor authentication." PKb��\�eaa-language/en-GB/en-GB.plg_system_highlight.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SYSTEM_HIGHLIGHT="System - Highlight" PLG_SYSTEM_HIGHLIGHT_XML_DESCRIPTION="System plugin to highlight specified terms." PKb��\� Ŕ��'language/en-GB/en-GB.com_cpanel.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CPANEL="Control Panel" COM_CPANEL_XML_DESCRIPTION="Control Panel component." COM_CPANEL_CPANEL_VIEW_DEFAULT_TITLE="Control Panel" COM_CPANEL_CPANEL_VIEW_DEFAULT_TITLE_DESC="Shows the Joomla! Administration Dashboard page." PKb��\?J�U��(language/en-GB/en-GB.com_contact.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_CONTACT="Contacts" COM_CONTACT_CATEGORIES="Categories" COM_CONTACT_CATEGORIES_VIEW_DEFAULT_DESC="Shows a list of contact categories within a category." COM_CONTACT_CATEGORIES_VIEW_DEFAULT_OPTION="Default" COM_CONTACT_CATEGORIES_VIEW_DEFAULT_TITLE="List All Contact Categories" COM_CONTACT_CATEGORY_ADD_TITLE="Contacts: New Category" COM_CONTACT_CATEGORY_EDIT_TITLE="Contacts: Edit Category" COM_CONTACT_CATEGORY_VIEW_DEFAULT_DESC="This view lists the contacts in a category." COM_CONTACT_CATEGORY_VIEW_DEFAULT_OPTION="Default" COM_CONTACT_CATEGORY_VIEW_DEFAULT_TITLE="List Contacts in a Category" COM_CONTACT_CONTACT_VIEW_DEFAULT_DESC="This links to the contact information for one contact." COM_CONTACT_CONTACT_VIEW_DEFAULT_OPTION="Default" COM_CONTACT_CONTACT_VIEW_DEFAULT_TITLE="Single Contact" COM_CONTACT_CONTENT_TYPE_CONTACT="Contact" COM_CONTACT_CONTENT_TYPE_CATEGORY="Contact Category" COM_CONTACT_FEATURED_VIEW_DEFAULT_DESC="This view lists the featured contacts." COM_CONTACT_FEATURED_VIEW_DEFAULT_OPTION="Default" COM_CONTACT_FEATURED_VIEW_DEFAULT_TITLE="Featured Contacts" COM_CONTACT_CONTACTS="Contacts" COM_CONTACT_TAGS_CONTACT="Contact" COM_CONTACT_TAGS_CATEGORY="Contact Category" COM_CONTACT_XML_DESCRIPTION="This component shows a listing of Contact Information." PKb��\Q��X� � &language/en-GB/en-GB.com_users.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_USERS="Users" COM_USERS_CONTENT_TYPE_CATEGORY="User Notes Category" COM_USERS_CONTENT_TYPE_NOTE="User Notes" COM_USERS_CONTENT_TYPE_USER="User" COM_USERS_GROUPS_VIEW_DEFAULT_DESC="Shows a List of User Groups" COM_USERS_GROUPS_VIEW_DEFAULT_TITLE="User Groups" COM_USERS_GROUP_VIEW_EDIT_DESC="Shows a form to create a new User Group" COM_USERS_GROUP_VIEW_EDIT_TITLE="Create User Group" COM_USERS_LEVELS_VIEW_DEFAULT_DESC="Shows a List of Access Levels" COM_USERS_LEVELS_VIEW_DEFAULT_TITLE="Access Levels" COM_USERS_LEVEL_VIEW_EDIT_DESC="Shows a form to create a new Access Level" COM_USERS_LEVEL_VIEW_EDIT_TITLE="Create Access Level" COM_USERS_MAIL_VIEW_DEFAULT_DESC="Shows a form to send mass email to multiple users." COM_USERS_MAIL_VIEW_DEFAULT_TITLE="Mass Mail Users" COM_USERS_NOTES_VIEW_DEFAULT_DESC="Shows a List of User Notes" COM_USERS_NOTES_VIEW_DEFAULT_TITLE="User Notes" COM_USERS_NOTE_VIEW_EDIT_DESC="Shows a form to create a new User Note" COM_USERS_NOTE_VIEW_EDIT_TITLE="Create User Note" COM_USERS_TAGS_CATEGORY="User Note Category" COM_USERS_USERS_VIEW_DEFAULT_DESC="Shows a List of Users" COM_USERS_USERS_VIEW_DEFAULT_TITLE="Users" COM_USERS_USER_VIEW_EDIT_DESC="Shows a form to create a new User Account" COM_USERS_USER_VIEW_EDIT_TITLE="Create User" COM_USER_LOGIN_VIEW_DEFAULT_DESC="Displays a login form." COM_USER_LOGIN_VIEW_DEFAULT_OPTION="Login Form" COM_USER_LOGIN_VIEW_DEFAULT_TITLE="Login Form" COM_USER_LOGOUT_VIEW_DEFAULT_DESC="Direct logout and redirect to page." COM_USER_LOGOUT_VIEW_DEFAULT_OPTION="Logout" COM_USER_LOGOUT_VIEW_DEFAULT_TITLE="Logout" COM_USER_PROFILE_EDIT_DEFAULT_DESC="Edit a user profile." COM_USER_PROFILE_EDIT_DEFAULT_OPTION="Edit User Profile" COM_USER_PROFILE_EDIT_DEFAULT_TITLE="Edit User Profile" COM_USER_PROFILE_VIEW_DEFAULT_DESC="Displays a user profile." COM_USER_PROFILE_VIEW_DEFAULT_OPTION="User Profile" COM_USER_PROFILE_VIEW_DEFAULT_TITLE="User Profile" COM_USER_REGISTRATION_VIEW_DEFAULT_DESC="Displays a registration form." COM_USER_REGISTRATION_VIEW_DEFAULT_OPTION="Default" COM_USER_REGISTRATION_VIEW_DEFAULT_TITLE="Registration Form" COM_USER_REMIND_VIEW_DEFAULT_DESC="Displays a username reminder request." COM_USER_REMIND_VIEW_DEFAULT_OPTION="Default" COM_USER_REMIND_VIEW_DEFAULT_TITLE="Username Reminder Request" COM_USER_RESET_VIEW_DEFAULT_DESC="Displays a request to reset password." COM_USER_RESET_VIEW_DEFAULT_OPTION="Default" COM_USER_RESET_VIEW_DEFAULT_TITLE="Password Reset" COM_USERS_XML_DESCRIPTION="Component for managing users." PKb��\�'"�EE)language/en-GB/en-GB.plg_editors_none.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EDITORS_NONE="Editor - None" PLG_NONE_XML_DESCRIPTION="This loads a basic text entry field." PKb��\k߯�]]0language/en-GB/en-GB.plg_search_contacts.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_CONTACTS="Search - Contacts" PLG_SEARCH_CONTACTS_XML_DESCRIPTION="Enables searching of the Contact Component."PKb��\�;��6language/en-GB/en-GB.plg_quickicon_extensionupdate.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_QUICKICON_EXTENSIONUPDATE="Quick Icon - Joomla! Extensions Updates Notification" PLG_QUICKICON_EXTENSIONUPDATE_CHECKING="Checking extensions ..." PLG_QUICKICON_EXTENSIONUPDATE_ERROR="Unknown extensions ..." PLG_QUICKICON_EXTENSIONUPDATE_GROUP_DESC="The group of this plugin (this value is compared with the group value used in <strong>Quick Icons</strong> modules to inject icons)." PLG_QUICKICON_EXTENSIONUPDATE_GROUP_LABEL="Group" PLG_QUICKICON_EXTENSIONUPDATE_UPDATEFOUND="Updates are available! <span class='label label-important'>%s</span>" PLG_QUICKICON_EXTENSIONUPDATE_UPDATEFOUND_BUTTON="View Updates" PLG_QUICKICON_EXTENSIONUPDATE_UPDATEFOUND_MESSAGE="<span class='label label-important'>%s</span> Extension Update(s) are available:" PLG_QUICKICON_EXTENSIONUPDATE_UPTODATE="All extensions are up to date." PLG_QUICKICON_EXTENSIONUPDATE_XML_DESCRIPTION="Checks for updates of your installed third-party extensions and notifies you when you visit the Control Panel page." PKb��\�pg��2language/en-GB/en-GB.plg_authentication_cookie.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_AUTH_COOKIE_ERROR_LOG_INVALIDATED_COOKIES="The authentication tokens were invalidated for user %u because there was no matching record." PLG_AUTH_COOKIE_ERROR_LOG_LOGIN_FAILED="Cookie login failed for user %u." PLG_AUTH_COOKIE_FIELD_COOKIE_LIFETIME_DESC="The number of days until the authentication cookie will expire. Other factors may cause it to expire before this. Longer lengths are less secure." PLG_AUTH_COOKIE_FIELD_COOKIE_LIFETIME_LABEL="Cookie Lifetime" PLG_AUTH_COOKIE_FIELD_KEY_LENGTH_DESC="The length of the key to use to encrypt the cookie. Longer lengths are more secure, but they will slow performance." PLG_AUTH_COOKIE_FIELD_KEY_LENGTH_LABEL="Key Length" PLG_AUTH_COOKIE_PRIVACY_CAPABILITY_COOKIE="In conjunction with a plugin which supports a \"Remember Me\" feature, such as the \"System - Remember Me\" plugin, this plugin creates a cookie on the user's client if a \"Remember Me\" checkbox is selected when logging into the website. This cookie can be identified with the prefix `joomla_remember_me` and is used to automatically log users into the website when they visit and are not already logged in." PLG_AUTH_COOKIE_XML_DESCRIPTION="Handles Joomla's cookie User authentication.<br /><strong> Warning! You must have at least one other authentication plugin enabled.</strong> <br />You will also need a plugin such as the System - Remember Me plugin to implement cookie login." PLG_AUTHENTICATION_COOKIE="Authentication - Cookie" PKb��\�R*language/en-GB/en-GB.plg_system_logout.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SYSTEM_LOGOUT_XML_DESCRIPTION="The system logout plugin enables Joomla to redirect the user to the home page if they choose to logout while they are on a protected access page." PLG_SYSTEM_LOGOUT="System - Logout" PLG_SYSTEM_LOGOUT_REDIRECT="You have been redirected to the home page following logout." PKb��\��K%,language/en-GB/en-GB.plg_search_weblinks.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_WEBLINKS="Search - Web Links" PLG_SEARCH_WEBLINKS_FIELD_SEARCHLIMIT_DESC="Number of search items to return." PLG_SEARCH_WEBLINKS_FIELD_SEARCHLIMIT_LABEL="Search Limit" PLG_SEARCH_WEBLINKS_WEBLINKS="Web Links" PLG_SEARCH_WEBLINKS_XML_DESCRIPTION="Enables searching of Web Links Component." PKb��\��4��&language/en-GB/en-GB.com_admin.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_ADMIN="System Information" COM_ADMIN_XML_DESCRIPTION="Administration system information component." COM_ADMIN_HELP_VIEW_DEFAULT_DESC="Get help on various pages in your Joomla administrator interface." COM_ADMIN_HELP_VIEW_DEFAULT_TITLE="Joomla! Help" COM_ADMIN_SYSINFO_VIEW_DEFAULT_DESC="View detailed information about your Joomla site and server configuration settings." COM_ADMIN_SYSINFO_VIEW_DEFAULT_TITLE="System Information" PKb��\6��]]0language/en-GB/en-GB.plg_search_weblinks.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_WEBLINKS="Search - Web Links" PLG_SEARCH_WEBLINKS_XML_DESCRIPTION="Enables searching of Web Links Component." PKb��\���(�(&language/en-GB/en-GB.com_newsfeeds.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_NEWSFEEDS="News Feeds" ; COM_NEWSFEEDS_BATCH_MENU_LABEL is deprecated, use JLIB_HTML_BATCH_MENU_LABEL instead. COM_NEWSFEEDS_BATCH_MENU_LABEL="To Move or Copy your selection please select a Category." COM_NEWSFEEDS_BATCH_OPTIONS="Batch process the selected news feeds" COM_NEWSFEEDS_BATCH_TIP="If a category is selected for move/copy, any actions selected will be applied to the copied or moved news feeds. Otherwise, all actions are applied to the selected news feeds." COM_NEWSFEEDS_CACHE_TIME_HEADING="Cache Time" COM_NEWSFEEDS_CACHE_TIME_HEADING_ASC="Cache Time ascending" COM_NEWSFEEDS_CACHE_TIME_HEADING_DESC="Cache Time descending" COM_NEWSFEEDS_CATEGORIES_DESC="These settings apply for News Feeds Categories Options unless they are changed for a specific menu item." COM_NEWSFEEDS_CHANGE_FEED="Select or Change News Feed" ; COM_NEWSFEEDS_CHANGE_FEED_BUTTON is deprecated, use COM_NEWSFEEDS_CHANGE_FEED instead; COM_NEWSFEEDS_CHANGE_FEED_BUTTON="Select Feed" COM_NEWSFEEDS_CONFIG_INTEGRATION_SETTINGS_DESC="These settings determine how the Newsfeeds Component will integrate with other extensions." COM_NEWSFEEDS_CONFIGURATION="News Feed: Options" COM_NEWSFEEDS_EDIT_NEWSFEED="Edit News Feed" COM_NEWSFEEDS_ERROR_UNIQUE_ALIAS="Another News feed from this category has the same alias (remember it may be a trashed item)." COM_NEWSFEEDS_ERROR_ALL_LANGUAGE_ASSOCIATED="A news feed item set to All languages can't be associated. Associations have not been set." COM_NEWSFEEDS_FEED_CATEGORY_OPTIONS_LABEL="Feeds Category Display Options" COM_NEWSFEEDS_FIELD_CACHETIME_DESC="The number of minutes before the news feed cache is refreshed." COM_NEWSFEEDS_FIELD_CACHETIME_LABEL="Cache Time" COM_NEWSFEEDS_FIELD_CATEGORIES_OPTIONS_LABEL="Feeds Categories Display Options" COM_NEWSFEEDS_FIELD_CATEGORY_DESC="The category that this feed is assigned to." COM_NEWSFEEDS_FIELD_CHARACTER_COUNT_DESC="Number of characters to display per feed. 0 will show all the text." COM_NEWSFEEDS_FIELD_CHARACTER_COUNT_LABEL="Characters Count" COM_NEWSFEEDS_FIELD_CHARACTERS_COUNT_DESC="Number of characters to include in the feed. 0 will show all the text." COM_NEWSFEEDS_FIELD_CHARACTERS_COUNT_LABEL="Characters Count" COM_NEWSFEEDS_FIELD_CONFIG_CATEGORY_SETTINGS_DESC="These settings apply for News Feeds Category Options unless they are changed for a specific menu item." COM_NEWSFEEDS_FIELD_CONFIG_LIST_SETTINGS_DESC="These settings apply for List Layout Options unless they are changed for a specific menu item." COM_NEWSFEEDS_FIELD_CONFIG_NEWSFEED_SETTINGS_DESC="These settings apply for single news feeds unless they are changed for a specific menu item or news feed." COM_NEWSFEEDS_FIELD_CONFIG_NEWSFEED_SETTINGS_LABEL="News Feed" COM_NEWSFEEDS_FIELD_DESCRIPTION_DESC="Enter a description for the feed." COM_NEWSFEEDS_FIELD_FEED_DISPLAY_ORDER_DESC="The order used to display the feed." COM_NEWSFEEDS_FIELD_FEED_DISPLAY_ORDER_LABEL="Feed Display Order" COM_NEWSFEEDS_FIELD_FEED_OPTIONS_DESC="Feeds display options." COM_NEWSFEEDS_FIELD_FEED_OPTIONS_LABEL="Feeds Display Options" COM_NEWSFEEDS_FIELD_FIRST_DESC="Select or upload the image to be displayed." COM_NEWSFEEDS_FIELD_FIRST_LABEL="First Image" COM_NEWSFEEDS_FIELD_IMAGE_ALT_DESC="Alternative text used for visitors without access to images. Replaced with caption text if it is present." COM_NEWSFEEDS_FIELD_IMAGE_ALT_LABEL="Alt Text" COM_NEWSFEEDS_FIELD_IMAGE_CAPTION_DESC="Caption attached to the image." COM_NEWSFEEDS_FIELD_IMAGE_CAPTION_LABEL="Caption" COM_NEWSFEEDS_FIELD_LANGUAGE_DESC="Assign a language to this news feed." COM_NEWSFEEDS_FIELD_LINK_DESC="Link to the news feed. IDN (International) Links are converted to punycode when they are saved." COM_NEWSFEEDS_FIELD_LINK_LABEL="Link" COM_NEWSFEEDS_FIELD_MODIFIED_BY_DESC="Name of the user who modified this news feed." COM_NEWSFEEDS_FIELD_MODIFIED_DESC="The date and time the news feed was last modified." COM_NEWSFEEDS_FIELD_NUM_ARTICLES_COLUMN_DESC="Show or hide the Number of Articles in each Feed (You can set this value in each News feed)." COM_NEWSFEEDS_FIELD_NUM_ARTICLES_COLUMN_LABEL="# Articles" COM_NEWSFEEDS_FIELD_NUM_ARTICLES_DESC="Number of articles from the feed to display." COM_NEWSFEEDS_FIELD_NUM_ARTICLES_LABEL="Number of Articles" COM_NEWSFEEDS_FIELD_NUMBER_ITEMS_LIST_DESC="Default number of feeds to list on a page." COM_NEWSFEEDS_FIELD_NUMBER_ITEMS_LIST_LABEL="# Feeds to List" COM_NEWSFEEDS_FIELD_NUMFEEDS_DESC="Number of feeds to display." COM_NEWSFEEDS_FIELD_NUMFEEDS_LABEL="Number of Feeds" COM_NEWSFEEDS_FIELD_OPTIONS="Feed" COM_NEWSFEEDS_FIELD_RTL_DESC="Select the language direction of the feed." COM_NEWSFEEDS_FIELD_RTL_LABEL="Language Direction" COM_NEWSFEEDS_FIELD_SECOND_DESC="Select or upload the second image to be displayed." COM_NEWSFEEDS_FIELD_SECOND_LABEL="Second Image" COM_NEWSFEEDS_FIELD_SELECT_CATEGORY_DESC="Choose a feed category to display." COM_NEWSFEEDS_FIELD_SELECT_FEED_DESC="Select a feed to display." COM_NEWSFEEDS_FIELD_SELECT_FEED_LABEL="Feed" COM_NEWSFEEDS_FIELD_SHOW_CAT_ITEMS_DESC="Show or hide the number of news feeds in category." COM_NEWSFEEDS_FIELD_SHOW_CAT_ITEMS_LABEL="# Feeds in Category" COM_NEWSFEEDS_FIELD_SHOW_CAT_TAGS_DESC="Show the tags for a category." COM_NEWSFEEDS_FIELD_SHOW_CAT_TAGS_LABEL="Show Tags" COM_NEWSFEEDS_FIELD_SHOW_FEED_DESCRIPTION_DESC="Show or hide feed description." COM_NEWSFEEDS_FIELD_SHOW_FEED_DESCRIPTION_LABEL="Feed Description" COM_NEWSFEEDS_FIELD_SHOW_FEED_IMAGE_DESC="Show or hide feed images." COM_NEWSFEEDS_FIELD_SHOW_FEED_IMAGE_LABEL="Feed Image" COM_NEWSFEEDS_FIELD_SHOW_ITEM_DESCRIPTION_DESC="Show or hide feed content." COM_NEWSFEEDS_FIELD_SHOW_ITEM_DESCRIPTION_LABEL="Feed Content" COM_NEWSFEEDS_FIELD_SHOW_LINKS_DESC="Show or hide feed links URL." COM_NEWSFEEDS_FIELD_SHOW_LINKS_LABEL="Feed Links" COM_NEWSFEEDS_FIELD_SHOW_TAGS_DESC="Show the tags for a news feed." COM_NEWSFEEDS_FIELD_SHOW_TAGS_LABEL="Show Tags" COM_NEWSFEEDS_FIELD_VALUE_LTR="Left to Right Direction" COM_NEWSFEEDS_FIELD_VALUE_NONE="None" COM_NEWSFEEDS_FIELD_VALUE_RTL="Right to Left Direction" COM_NEWSFEEDS_FIELD_VALUE_SITE="Site Language Direction" COM_NEWSFEEDS_FIELD_VERSION_LABEL="Revision" COM_NEWSFEEDS_FIELD_VERSION_DESC="A count of the number of times this news feed has been revised." COM_NEWSFEEDS_FIELDSET_IMAGES="Images" COM_NEWSFEEDS_FIELDSET_MORE_OPTIONS_LABEL="Feed Display Options" COM_NEWSFEEDS_FILTER_SEARCH_DESC="Search in news feed title and alias. Prefix with ID: to search for a news feed ID." COM_NEWSFEEDS_FILTER_SEARCH_LABEL="Search News Feeds" COM_NEWSFEEDS_FLOAT_DESC="Controls placement of the image." COM_NEWSFEEDS_FLOAT_FIRST_LABEL="First Image Float" COM_NEWSFEEDS_FLOAT_LABEL="Image Float" COM_NEWSFEEDS_FLOAT_SECOND_LABEL="Second Image Float" COM_NEWSFEEDS_HEADING_ASSOCIATION="Association" COM_NEWSFEEDS_HITS_DESC="Number of hits for this news feed." ; The following 2 strings are deprecated and will be removed with 4.0. COM_NEWSFEEDS_ITEM_ASSOCIATIONS_FIELDSET_LABEL="News Feed Item Association" COM_NEWSFEEDS_ITEM_ASSOCIATIONS_FIELDSET_DESC="Multilingual only! This choice will only display if the Language Filter parameter 'Item Associations' is set to 'Yes'. Choose a news feed item for the target language. This association will let the Language Switcher module redirect to the associated news feed item in another language. If used, make sure to display the Language switcher module on the relevant pages. A news feed item set to language 'All' can't be associated." COM_NEWSFEEDS_LEFT="Left" COM_NEWSFEEDS_MANAGER_NEWSFEED="News Feeds: New/Edit" COM_NEWSFEEDS_MANAGER_NEWSFEED_NEW="News Feeds: New" COM_NEWSFEEDS_MANAGER_NEWSFEED_EDIT="News Feeds: Edit" COM_NEWSFEEDS_MANAGER_NEWSFEEDS="News Feeds" COM_NEWSFEEDS_N_ITEMS_ARCHIVED="%d news feeds archived." COM_NEWSFEEDS_N_ITEMS_ARCHIVED_1="News feed archived." COM_NEWSFEEDS_N_ITEMS_CHECKED_IN_0="No news feed checked in." COM_NEWSFEEDS_N_ITEMS_CHECKED_IN_1="News feed checked in." COM_NEWSFEEDS_N_ITEMS_CHECKED_IN_MORE="%d news feeds checked in." COM_NEWSFEEDS_N_ITEMS_DELETED="%d news feeds deleted." COM_NEWSFEEDS_N_ITEMS_DELETED_1="News feed deleted." COM_NEWSFEEDS_N_ITEMS_PUBLISHED="%d news feeds published." COM_NEWSFEEDS_N_ITEMS_PUBLISHED_1="News feed published." COM_NEWSFEEDS_N_ITEMS_TRASHED="%d news feeds trashed." COM_NEWSFEEDS_N_ITEMS_TRASHED_1="News feed trashed." COM_NEWSFEEDS_N_ITEMS_UNPUBLISHED="%d news feeds unpublished." COM_NEWSFEEDS_N_ITEMS_UNPUBLISHED_1="News feed unpublished." COM_NEWSFEEDS_NEW_NEWSFEED="New News Feed" COM_NEWSFEEDS_NEWSFEEDS="Newsfeeds" COM_NEWSFEEDS_NO_ITEM_SELECTED="No news feeds selected." COM_NEWSFEEDS_NONE="None" COM_NEWSFEEDS_NUM_ARTICLES_HEADING="# Articles" COM_NEWSFEEDS_NUM_ARTICLES_HEADING_ASC="# Articles ascending" COM_NEWSFEEDS_NUM_ARTICLES_HEADING_DESC="# Articles descending" COM_NEWSFEEDS_PUBLISH_ITEM="Publish News Feed" COM_NEWSFEEDS_RIGHT="Right" COM_NEWSFEEDS_SAVE_SUCCESS="News feed saved." COM_NEWSFEEDS_SEARCH_IN_TITLE="Search" COM_NEWSFEEDS_SELECT_A_FEED="Select a News Feed" COM_NEWSFEEDS_SELECT_FEED="Select feed" COM_NEWSFEEDS_SHOW_EMPTY_CATEGORIES_DESC="If Show, empty categories will display. A category is only empty if it has no news feeds or subcategories." COM_NEWSFEEDS_SUBMENU_CATEGORIES="Categories" COM_NEWSFEEDS_SUBMENU_NEWSFEEDS="News Feeds" COM_NEWSFEEDS_TIP_ASSOCIATION="Associated news feeds" COM_NEWSFEEDS_UNPUBLISH_ITEM="Unpublish News Feed" COM_NEWSFEEDS_WARNING_PROVIDE_VALID_NAME="Please provide a valid name." COM_NEWSFEEDS_XML_DESCRIPTION="This component manages RSS and Atom news feeds." JGLOBAL_NEWITEMSLAST_DESC="New news feeds default to the last position. The ordering can be changed after this news feed has been saved." JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\�&~uMM/language/en-GB/en-GB.plg_search_content.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_CONTENT="Search - Content" PLG_SEARCH_CONTENT_XML_DESCRIPTION="Enables searching in Articles."PKb��\�4ު�7language/en-GB/en-GB.plg_quickicon_joomlaupdate.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_QUICKICON_JOOMLAUPDATE="Quick Icon - Joomla! Update Notification" PLG_QUICKICON_JOOMLAUPDATE_XML_DESCRIPTION="Checks for Joomla! updates and notifies you when you visit the Control Panel page." PKb��\�����'language/en-GB/en-GB.com_search.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_SEARCH="Search" COM_SEARCH_SEARCH_VIEW_DEFAULT_DESC="Display search results." COM_SEARCH_SEARCH_VIEW_DEFAULT_OPTION="Default" COM_SEARCH_SEARCH_VIEW_DEFAULT_TITLE="Search Form or Search Results" COM_SEARCH_XML_DESCRIPTION="Component for search functions." PKb��\�z���]�]&language/en-GB/en-GB.com_installer.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_INSTALLER="Installer" COM_INSTALLER_AUTHOR_INFORMATION="Author Information" COM_INSTALLER_CACHETIMEOUT_DESC="For how many hours should Joomla cache update information. This is also the cache time for the Update Notification Plugin, if enabled" COM_INSTALLER_CACHETIMEOUT_LABEL="Updates Caching (in hours)" COM_INSTALLER_CONFIGURATION="Installer: Options" COM_INSTALLER_CONFIRM_UNINSTALL="Are you sure you want to uninstall? Confirming will permanently delete the selected item(s)!" COM_INSTALLER_CURRENT_VERSION="Installed" COM_INSTALLER_DISCOVER_FILTER_SEARCH_DESC="Search in discovered extension name. Prefix with ID: to search for an extension ID." COM_INSTALLER_DISCOVER_FILTER_SEARCH_LABEL="Search Discovered Extensions" COM_INSTALLER_ENABLED_UPDATES_1=", 1 disabled site was enabled." COM_INSTALLER_ENABLED_UPDATES_MORE=", %s disabled sites were enabled." COM_INSTALLER_ERROR_DISABLE_DEFAULT_TEMPLATE_NOT_PERMITTED="Disable default template is not permitted." COM_INSTALLER_ERROR_METHOD="Method Not Implemented" COM_INSTALLER_ERROR_NO_EXTENSIONS_SELECTED="No extensions selected." COM_INSTALLER_ERROR_NO_UPDATESITES_SELECTED="No update sites selected." COM_INSTALLER_EXTENSION_DISABLE="Disable extension" COM_INSTALLER_EXTENSION_DISABLED="Disabled extension" COM_INSTALLER_EXTENSION_ENABLE="Enable extension" COM_INSTALLER_EXTENSION_ENABLED="Enabled extension" COM_INSTALLER_EXTENSION_PACKAGE_FILE="Extension package file" COM_INSTALLER_EXTENSION_PROTECTED="Protected extension" COM_INSTALLER_EXTENSION_PUBLISHED="Extension enabled." COM_INSTALLER_EXTENSION_UNPUBLISHED="Extension disabled." COM_INSTALLER_FAILED_TO_ENABLE_UPDATES=", failed to enable updates" COM_INSTALLER_FILTER_LABEL="Search by Extension Name" COM_INSTALLER_HEADER_DATABASE="Extensions: Database" COM_INSTALLER_HEADER_DISCOVER="Extensions: Discover" COM_INSTALLER_HEADER_INSTALL="Extensions: Install" COM_INSTALLER_HEADER_LANGUAGES="Extensions: Install Languages" COM_INSTALLER_HEADER_MANAGE="Extensions: Manage" COM_INSTALLER_HEADER_UPDATE="Extensions: Update" COM_INSTALLER_HEADER_UPDATESITES="Extensions: Update Sites" COM_INSTALLER_HEADER_WARNINGS="Extensions: Warnings" COM_INSTALLER_HEADING_CLIENT="Client" COM_INSTALLER_HEADING_DETAILS_URL="Details URL" COM_INSTALLER_HEADING_DETAILSURL="URL Details" COM_INSTALLER_HEADING_FOLDER="Folder" COM_INSTALLER_HEADING_FOLDER_ASC="Folder ascending" COM_INSTALLER_HEADING_FOLDER_DESC="Folder descending" COM_INSTALLER_HEADING_ID="ID" COM_INSTALLER_HEADING_INSTALLTYPE="Install Type" COM_INSTALLER_HEADING_LANGUAGE_TAG="Language Tag" COM_INSTALLER_HEADING_LANGUAGE_TAG_ASC="Language Tag ascending" COM_INSTALLER_HEADING_LANGUAGE_TAG_DESC="Language Tag descending" COM_INSTALLER_HEADING_LOCATION="Location" COM_INSTALLER_HEADING_LOCATION_ASC="Location ascending" COM_INSTALLER_HEADING_LOCATION_DESC="Location descending" COM_INSTALLER_HEADING_NAME="Name" COM_INSTALLER_HEADING_NAME_ASC="Name ascending" COM_INSTALLER_HEADING_NAME_DESC="Name descending" COM_INSTALLER_HEADING_PACKAGE_ID="Package ID" COM_INSTALLER_HEADING_PACKAGE_ID_ASC="Package ID ascending" COM_INSTALLER_HEADING_PACKAGE_ID_DESC="Package ID descending" COM_INSTALLER_HEADING_TYPE="Type" COM_INSTALLER_HEADING_TYPE_ASC="Type ascending" COM_INSTALLER_HEADING_TYPE_DESC="Type descending" COM_INSTALLER_HEADING_UPDATESITE_NAME="Update Site" COM_INSTALLER_HEADING_UPDATESITE_NAME_ASC="Update Site ascending" COM_INSTALLER_HEADING_UPDATESITE_NAME_DESC="Update Site descending" COM_INSTALLER_HEADING_UPDATESITEID="ID" COM_INSTALLER_INSTALL_BUTTON="Install" COM_INSTALLER_INSTALL_CHECKSUM_WRONG="The checksum verification failed. Please make sure you are using the correct update server!" COM_INSTALLER_INSTALL_DIRECTORY="Install Folder" COM_INSTALLER_INSTALL_ERROR="Error installing %s" COM_INSTALLER_INSTALL_FROM_DIRECTORY="Install from Folder" COM_INSTALLER_INSTALL_FROM_URL="Install from URL" COM_INSTALLER_INSTALL_FROM_WEB="Install from Web" COM_INSTALLER_INSTALL_FROM_WEB_ADD_TAB="Add "Install from Web" tab" COM_INSTALLER_INSTALL_FROM_WEB_INFO="<a class="_QQ_"alert-link"_QQ_" href="_QQ_"https://extensions.joomla.org"_QQ_" target="_QQ_"_blank"_QQ_">Joomla! Extensions Directory™ (JED)</a> now available with <a class="_QQ_"alert-link"_QQ_" href="_QQ_"https://docs.joomla.org/Special:MyLanguage/Install_from_Web"_QQ_" target="_QQ_"_blank"_QQ_">Install from Web</a> on this page." COM_INSTALLER_INSTALL_FROM_WEB_TOS="By selecting "_QQ_"Add Install from Web tab"_QQ_" below, you agree to the JED <a class="_QQ_"alert-link"_QQ_" href="_QQ_"https://extensions.joomla.org/tos"_QQ_" target="_QQ_"_blank"_QQ_">Terms of Service</a> and all applicable third party license terms." COM_INSTALLER_INSTALL_LANGUAGE_SUCCESS="Installation of the <strong>%s</strong> language was successful." COM_INSTALLER_INSTALL_SUCCESS="Installation of the %s was successful." COM_INSTALLER_INSTALL_URL="Install URL" COM_INSTALLER_INVALID_EXTENSION_UPDATE="Invalid extension update" COM_INSTALLER_LABEL_HIDEPROTECTED_DESC="Hide protected extensions. Protected extensions can't be uninstalled." COM_INSTALLER_LABEL_HIDEPROTECTED_LABEL="Hide Protected Extensions" COM_INSTALLER_LANGUAGES_AVAILABLE_LANGUAGES="Available Languages" COM_INSTALLER_LANGUAGES_FILTER_SEARCH_DESC="Search in language name and language tag." COM_INSTALLER_LANGUAGES_FILTER_SEARCH_LABEL="Search Languages" COM_INSTALLER_MANAGE_FILTER_SEARCH_DESC="Search in extension name. Prefix with ID: to search for an extension ID." COM_INSTALLER_MANAGE_FILTER_SEARCH_LABEL="Search Extensions" COM_INSTALLER_MINIMUM_STABILITY_ALPHA="Alpha" COM_INSTALLER_MINIMUM_STABILITY_BETA="Beta" COM_INSTALLER_MINIMUM_STABILITY_DESC="The minimum stability of the extension updates you would like to see. Development is the least stable, Stable is production quality. If an extension doesn't specify a level it is assumed to be Stable." COM_INSTALLER_MINIMUM_STABILITY_DEV="Development" COM_INSTALLER_MINIMUM_STABILITY_LABEL="Minimum Stability" COM_INSTALLER_MINIMUM_STABILITY_STABLE="Stable" COM_INSTALLER_MINIMUM_STABILITY_RC="Release Candidate" COM_INSTALLER_MSG_DATABASE="This screen allows to you check that your database table structure is up to date with changes from the previous versions." COM_INSTALLER_MSG_DATABASE_ADD_COLUMN="Table %2$s does not have column %3$s. (From file %1$s.)" COM_INSTALLER_MSG_DATABASE_ADD_INDEX="Table %2$s does not have index %3$s. (From file %1$s.)" COM_INSTALLER_MSG_DATABASE_CHANGE_COLUMN_TYPE="Table %2$s has the wrong type or attributes for column %3$s with type %4$s. (From file %1$s.)" COM_INSTALLER_MSG_DATABASE_CHECKED_OK="%s database changes were checked." COM_INSTALLER_MSG_DATABASE_CREATE_TABLE="Table %2$s does not exist. (From file %1$s.)" COM_INSTALLER_MSG_DATABASE_DRIVER="Database driver: %s." COM_INSTALLER_MSG_DATABASE_DROP_COLUMN="Table %2$s should not have column %3$s. (From file %1$s.)" COM_INSTALLER_MSG_DATABASE_DROP_INDEX="Table %2$s should not have index %3$s. (From file %1$s.)" COM_INSTALLER_MSG_DATABASE_ERRORS="Warning: Database is not up to date!" COM_INSTALLER_MSG_DATABASE_FILTER_ERROR="No default text filters found." COM_INSTALLER_MSG_DATABASE_INFO="Other Information" COM_INSTALLER_MSG_DATABASE_OK="Database table structure is up to date." COM_INSTALLER_MSG_DATABASE_SCHEMA_ERROR="Database schema version (%s) does not match CMS version (%s)." COM_INSTALLER_MSG_DATABASE_SCHEMA_VERSION="Database schema version (in #__schemas): %s." COM_INSTALLER_MSG_DATABASE_SKIPPED="%s database changes did not alter table structure and were skipped." COM_INSTALLER_MSG_DATABASE_UPDATE_VERSION="Update version (in #__extensions): %s." COM_INSTALLER_MSG_DATABASE_UPDATEVERSION_ERROR="Database update version (%s) does not match CMS version (%s)." COM_INSTALLER_MSG_DATABASE_UTF8_CONVERSION_UTF8="The Joomla! Core database tables have not been converted yet to UTF-8." COM_INSTALLER_MSG_DATABASE_UTF8_CONVERSION_UTF8MB4="The Joomla! Core database tables have not been converted yet to UTF-8 Multibyte (utf8mb4)." COM_INSTALLER_MSG_DESCFTP="For installing or uninstalling Extensions, Joomla will most likely need your FTP account details. Please enter them in the form fields below." COM_INSTALLER_MSG_DESCFTPTITLE="FTP Login Details" COM_INSTALLER_MSG_DISCOVER_DESCRIPTION="Discover extensions that have not gone through the normal installation process." COM_INSTALLER_MSG_DISCOVER_FAILEDTOPURGEEXTENSIONS="Failed to clear discovered extensions" COM_INSTALLER_MSG_DISCOVER_INSTALLFAILED="Discover install failed." COM_INSTALLER_MSG_DISCOVER_INSTALLSUCCESSFUL="Discover install successful." COM_INSTALLER_MSG_DISCOVER_NOEXTENSION="<strong>No extensions have been discovered.</strong> Select Discover to find new extensions that might be available for install." COM_INSTALLER_MSG_DISCOVER_NOEXTENSIONSELECTED="No extension selected." COM_INSTALLER_MSG_DISCOVER_PURGEDDISCOVEREDEXTENSIONS="Cleared discovered extensions." COM_INSTALLER_MSG_INSTALL_ENTER_A_URL="Please enter a URL" COM_INSTALLER_MSG_INSTALL_INVALID_URL="Invalid URL" COM_INSTALLER_MSG_INSTALL_NO_FILE_SELECTED="No file selected." COM_INSTALLER_MSG_INSTALL_PATH_DOES_NOT_HAVE_A_VALID_PACKAGE="Path does not have a valid package." COM_INSTALLER_MSG_INSTALL_PLEASE_ENTER_A_PACKAGE_DIRECTORY="Please enter a package folder." COM_INSTALLER_MSG_INSTALL_PLEASE_SELECT_A_DIRECTORY="Please select a folder." COM_INSTALLER_MSG_INSTALL_PLEASE_SELECT_A_PACKAGE="Please select a package location." COM_INSTALLER_MSG_INSTALL_WARNINSTALLFILE="The installer can't continue until file uploads are enabled for the server." COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR="There was an error uploading this file to the server." COM_INSTALLER_MSG_INSTALL_WARNINSTALLZLIB="The installer can't continue until Zlib is installed." COM_INSTALLER_MSG_LANGUAGES_CANT_FIND_REMOTE_MANIFEST="The installer can't get the URL to the XML manifest file of the %s language." COM_INSTALLER_MSG_LANGUAGES_CANT_FIND_REMOTE_PACKAGE="The installer can't get the URL to the remote %s language." COM_INSTALLER_MSG_LANGUAGES_NOLANGUAGES="There are no available languages to install at the moment. Please select the "Find languages" button to check for updates on the Joomla! Languages server. You will need an internet connection for this to work." COM_INSTALLER_MSG_LANGUAGES_TRY_LATER="Try again later or <a href="_QQ_"https://community.joomla.org/translations/joomla-3-translations.html"_QQ_">contact the language team coordinator</a>." COM_INSTALLER_MSG_MANAGE_NOEXTENSION="There are no extensions installed matching your query." COM_INSTALLER_MSG_MANAGE_NOUPDATESITE="There are no update sites matching your query." COM_INSTALLER_MSG_N_DATABASE_ERROR_PANEL="%d Database Problems Found." COM_INSTALLER_MSG_N_DATABASE_ERROR_PANEL_1="1 Database Problem Found." COM_INSTALLER_MSG_UPDATE_ERROR="Error updating %s." COM_INSTALLER_MSG_UPDATE_NODESC="No description available for this item." COM_INSTALLER_MSG_UPDATE_NOUPDATES="There are no updates available at the moment. Please check again later." COM_INSTALLER_MSG_UPDATE_SITES_COUNT_CHECK="Some update sites are disabled. You may want to check the <a href="_QQ_"%s"_QQ_">Update Sites Manager</a>." COM_INSTALLER_MSG_UPDATE_SUCCESS="Updating %s was successful." COM_INSTALLER_MSG_UPDATE_UPDATE="Update" COM_INSTALLER_MSG_UPDATESITES_DELETE_ERROR="An error has occurred while trying to delete "_QQ_"%s"_QQ_" update site: %s." COM_INSTALLER_MSG_UPDATESITES_DELETE_CANNOT_DELETE="%s update site cannot be deleted." COM_INSTALLER_MSG_UPDATESITES_N_DELETE_UPDATESITES_DELETED="%s update sites have been deleted." COM_INSTALLER_MSG_UPDATESITES_N_DELETE_UPDATESITES_DELETED_1="1 update site has been deleted." COM_INSTALLER_MSG_UPDATESITES_REBUILD_EXTENSION_PLUGIN_NOT_ENABLED="The <a href="_QQ_"%s"_QQ_">Joomla Extension Plugin</a> is disabled. This plugin must be enabled to rebuild the update sites." COM_INSTALLER_MSG_UPDATESITES_REBUILD_MESSAGE="Update sites have been rebuilt. No extension with an update site has been discovered." COM_INSTALLER_MSG_UPDATESITES_REBUILD_NOT_PERMITTED="Rebuilding update sites is not permitted." COM_INSTALLER_MSG_UPDATESITES_REBUILD_WARNING="Update sites have been rebuilt. No extension with updates sites discovered." COM_INSTALLER_MSG_UPDATESITES_REBUILD_SUCCESS="Update sites have been rebuilt from manifest files." COM_INSTALLER_MSG_WARNING_NO_LANGUAGES_UPDATESERVER="The update table is not up to date. Please <a href="_QQ_"index.php?option=com_installer&view=updatesites"_QQ_" target="_QQ_"_blank"_QQ_">rebuild your update server table</a>" COM_INSTALLER_MSG_WARNINGFURTHERINFO="Further information on warnings" COM_INSTALLER_MSG_WARNINGFURTHERINFODESC="For more information on warnings, see the <a href="_QQ_"https://docs.joomla.org"_QQ_" target="_QQ_"_blank"_QQ_">Joomla! Documentation Site</a>." COM_INSTALLER_MSG_WARNINGS_FILEUPLOADISDISABLEDDESC="File uploads are required to upload extensions into the installer." COM_INSTALLER_MSG_WARNINGS_FILEUPLOADSDISABLED="File uploads disabled." COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSET="The Joomla temporary folder is not set." COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSETDESC="The Joomla temporary folder is where Joomla copies an extension, extracts the extension and the files are copied into the correct directories. If this configuration is not set in configuration.php ($tmp_path) then you won't be able to upload extensions. Create a folder to enable Joomla to write to the folder to fix the issue." COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLE="The Joomla temporary folder is not writable or does not exist." COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLEDESC="The Joomla temporary folder is not writeable by the Joomla instance, or may not exist, which may cause issues when trying to upload extensions to Joomla. If you are having issues uploading extensions, make sure the folder defined in your configuration.php exists or check the '%s' and set it to be writeable and see if this fixes the issue." COM_INSTALLER_MSG_WARNINGS_LOWMEMORYDESC="Low PHP memory limit." COM_INSTALLER_MSG_WARNINGS_LOWMEMORYWARN="Your PHP memory limit is set below 8MB which may cause some issues when installing large extensions. Please set your memory limit to at least 16MB." COM_INSTALLER_MSG_WARNINGS_MEDMEMORYDESC="Potentially low PHP memory limit." COM_INSTALLER_MSG_WARNINGS_MEDMEMORYWARN="Your PHP memory limit is set below 16MB which may cause some issues when installing large extensions. Please set your memory limit to at least 16MB." COM_INSTALLER_MSG_WARNINGS_NONE="No warnings detected." COM_INSTALLER_MSG_WARNINGS_NOTCOMPLETE="<h1>Warning: Update Not Complete!</h1><p>The update is only partially complete. Please do the second update to complete the process.</p>" COM_INSTALLER_MSG_WARNINGS_NOTICE="There are some warnings detected." COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSET="The PHP temporary folder is not set." COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSETDESC="The PHP temporary folder is the folder that PHP uses to store an uploaded file before Joomla can access this file. Whilst the folder not being set isn't always a problem, if you are having issues with manifest files not being detected or uploaded files not being detected, setting this in your php.ini file might fix the issue." COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLE="The PHP temporary folder is not writeable." COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLEDESC="The PHP temporary folder is not writeable by the Joomla! instance, which may cause issues when trying to upload extensions to Joomla. If you are having issues uploading extensions, check the '%s' and set it to be writeable and see if this fixes the issue." COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZE="Small PHP maximum POST size." COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZEDESC="The maximum POST size sets the most amount of data that can be sent via POST to the server. This includes form submissions for articles, media (images, videos) and packages. This value is less than 8MB which may impact on uploading large packages. This is set in the php.ini under post_max_size." COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZE="Maximum PHP file upload size is too small: This is set in php.ini in both upload_max_filesize and post_max_size settings of your PHP settings (located in php.ini and/or .htaccess file)." COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZEDESC="The maximum file size for uploads is set to less than 8MB which may impact on uploading large packages." COM_INSTALLER_MSG_WARNINGS_UPDATE_NOTICE="Before updating ensure that the update is compatible with your Joomla! installation. <br>You are strongly advised to make a <strong>backup</strong> of your installation before you start updating." COM_INSTALLER_MSG_WARNINGS_UPLOADBIGGERTHANPOST="PHP Upload Size bigger than POST size." COM_INSTALLER_MSG_WARNINGS_UPLOADBIGGERTHANPOSTDESC="The value of the upload_max_filesize in the php.ini file is greater than the post_max_size variable. The post_max_size variable will take precedence and block requests larger than it. This is generally a server misconfiguration when trying to increase upload sizes. Please increase the upload_max_filesize to at least match the post_max_size variable or vice versa." COM_INSTALLER_N_EXTENSIONS_PUBLISHED="%d extensions enabled." COM_INSTALLER_N_EXTENSIONS_PUBLISHED_1="%d extension enabled." COM_INSTALLER_N_EXTENSIONS_UNPUBLISHED="%d extensions disabled." COM_INSTALLER_N_EXTENSIONS_UNPUBLISHED_1="%d extension disabled." COM_INSTALLER_N_UPDATESITES_PUBLISHED="%d update sites enabled." COM_INSTALLER_N_UPDATESITES_PUBLISHED_1="%d update site enabled." COM_INSTALLER_N_UPDATESITES_UNPUBLISHED="%d update sites disabled." COM_INSTALLER_N_UPDATESITES_UNPUBLISHED_1="%d update site disabled." COM_INSTALLER_NEW_INSTALL="New Install" COM_INSTALLER_NEW_VERSION="Available" COM_INSTALLER_NO_INSTALL_TYPE_FOUND="No Install Type Found" COM_INSTALLER_NO_INSTALLATION_PLUGINS_FOUND="No installation plugin has been enabled. At least one must be enabled to be able to use the installer. Go to the <a href='index.php?option=com_plugins&view=plugins&filter[folder]=installer' title='Plugin Manager'>Plugin Manager</a> to enable the plugins." COM_INSTALLER_PACKAGE_DOWNLOAD_FAILED="Failed to download package. Download it and install manually from <a href='%1$s'>%1$s</a>." COM_INSTALLER_PACKAGE_FILE="Package File" COM_INSTALLER_PREFERENCES_DESCRIPTION="Fine tune how extensions installation and updates work." COM_INSTALLER_PREFERENCES_LABEL="Preferences" COM_INSTALLER_REINSTALL_BUTTON="Reinstall" COM_INSTALLER_SHOW_JED_INFORMATION_DESC="Show or hide the information at the top of the installer page about the Joomla! Extensions Directory™." COM_INSTALLER_SHOW_JED_INFORMATION_HIDE_MESSAGE="Hide message" COM_INSTALLER_SHOW_JED_INFORMATION_LABEL="Joomla! Extensions Directory" COM_INSTALLER_SHOW_JED_INFORMATION_SHOW_MESSAGE="Show message" COM_INSTALLER_SHOW_JED_INFORMATION_TOOLTIP="Opens Installer Options for setting to hide this Joomla! Extensions Directory™ message." COM_INSTALLER_SUBMENU_DATABASE="Database" COM_INSTALLER_SUBMENU_DISCOVER="Discover" COM_INSTALLER_SUBMENU_INSTALL="Install" COM_INSTALLER_SUBMENU_LANGUAGES="Install Languages" COM_INSTALLER_SUBMENU_MANAGE="Manage" COM_INSTALLER_SUBMENU_UPDATE="Update" COM_INSTALLER_SUBMENU_UPDATESITES="Update Sites" COM_INSTALLER_SUBMENU_WARNINGS="Warnings" COM_INSTALLER_TITLE_DATABASE="Extensions: Database" COM_INSTALLER_TITLE_DISCOVER="Extensions: Discover" COM_INSTALLER_TITLE_INSTALL="Extensions: Install" COM_INSTALLER_TITLE_LANGUAGES="Extensions: Install Languages" COM_INSTALLER_TITLE_MANAGE="Extension: Manage" COM_INSTALLER_TITLE_UPDATE="Extension: Update" COM_INSTALLER_TITLE_UPDATESITES="Extensions: Update Sites" COM_INSTALLER_TITLE_WARNINGS="Extensions: Warnings" COM_INSTALLER_TOOLBAR_DATABASE_FIX="Fix" COM_INSTALLER_TOOLBAR_DISCOVER="Discover" COM_INSTALLER_TOOLBAR_FIND_LANGUAGES="Find languages" COM_INSTALLER_TOOLBAR_FIND_UPDATES="Find Updates" COM_INSTALLER_TOOLBAR_INSTALL="Install" COM_INSTALLER_TOOLBAR_PURGE="Clear Cache" COM_INSTALLER_TOOLBAR_UPDATE="Update" COM_INSTALLER_TYPE_CLIENT="Location" COM_INSTALLER_TYPE_COMPONENT="Component" COM_INSTALLER_TYPE_FILE="File" COM_INSTALLER_TYPE_LANGUAGE="Language" COM_INSTALLER_TYPE_LIBRARY="Library" COM_INSTALLER_TYPE_MODULE="Module" COM_INSTALLER_TYPE_NONAPPLICABLE="N/A" COM_INSTALLER_TYPE_PACKAGE="Package" COM_INSTALLER_TYPE_PLUGIN="Plugin" COM_INSTALLER_TYPE_TEMPLATE="Template" COM_INSTALLER_TYPE_TYPE_COMPONENT="component" COM_INSTALLER_TYPE_TYPE_FILE="file" COM_INSTALLER_TYPE_TYPE_LANGUAGE="language" COM_INSTALLER_TYPE_TYPE_LIBRARY="library" COM_INSTALLER_TYPE_TYPE_MODULE="module" COM_INSTALLER_TYPE_TYPE_PACKAGE="package" COM_INSTALLER_TYPE_TYPE_PLUGIN="plugin" COM_INSTALLER_TYPE_TYPE_TEMPLATE="template" COM_INSTALLER_UNABLE_TO_FIND_INSTALL_PACKAGE="Unable to find install package" COM_INSTALLER_UNABLE_TO_INSTALL_JOOMLA_PACKAGE="The Joomla package cannot be installed through the Extension Manager. Please use the <a href='%s'>Joomla! Update</a> component to update Joomla." COM_INSTALLER_UNINSTALL_ERROR="Error uninstalling %s." ; This string is deprecated and will be removed with 4.0. COM_INSTALLER_UNINSTALL_LANGUAGE="A language should always have been installed as a package. <br />To uninstall a language, filter type by package and uninstall the package." COM_INSTALLER_UNINSTALL_SUCCESS="Uninstalling the %s was successful." COM_INSTALLER_UPDATE_FILTER_SEARCH_DESC="Search in extension name. Prefix with ID:, UID: or EID: to search for an update ID, update site ID or extension ID." COM_INSTALLER_UPDATE_FILTER_SEARCH_LABEL="Search Extensions with Updates" COM_INSTALLER_UPDATESITE_DISABLE="Disable update site" COM_INSTALLER_UPDATESITE_DISABLED="Disabled update site" COM_INSTALLER_UPDATESITE_ENABLE="Enable update site" COM_INSTALLER_UPDATESITE_ENABLED="Enabled update site" COM_INSTALLER_UPDATESITES_FILTER_SEARCH_DESC="Search in extension name. Prefix with ID: to search for an update site ID." COM_INSTALLER_UPDATESITES_FILTER_SEARCH_LABEL="Search Update Sites" COM_INSTALLER_UPLOAD_AND_INSTALL="Upload & Install" COM_INSTALLER_UPLOAD_INSTALL_JOOMLA_EXTENSION="Upload & Install Joomla Extension" COM_INSTALLER_UPLOAD_PACKAGE_FILE="Upload Package File" COM_INSTALLER_VALUE_CLIENT_SELECT="- Select Location -" COM_INSTALLER_VALUE_FOLDER_NONAPPLICABLE="N/A" COM_INSTALLER_VALUE_FOLDER_SELECT="- Select Folder -" COM_INSTALLER_VALUE_STATE_SELECT="- Select Status -" COM_INSTALLER_VALUE_TYPE_SELECT="- Select Type -" COM_INSTALLER_WEBINSTALLER_INSTALL_OBSOLETE="The Install from Web plugin needs to be updated." COM_INSTALLER_WEBINSTALLER_INSTALL_UPDATE_AVAILABLE="There is a new update available for the Install from Web plugin. It is advisable that you update as soon as possible." COM_INSTALLER_WEBINSTALLER_INSTALL_WEB_CONFIRM="Please confirm the installation by selecting the Install button" COM_INSTALLER_WEBINSTALLER_INSTALL_WEB_CONFIRM_NAME="Extension Name" COM_INSTALLER_WEBINSTALLER_INSTALL_WEB_CONFIRM_URL="Install from" COM_INSTALLER_WEBINSTALLER_INSTALL_WEB_LOADING="Loading ..." COM_INSTALLER_WEBINSTALLER_INSTALL_WEB_LOADING_ERROR="Can't connect to the Joomla! server. Please try again later." COM_INSTALLER_WEBINSTALLER_LOAD_APPS="Select to load extensions browser" COM_INSTALLER_XML_DESCRIPTION="Installer component for adding, removing and upgrading extensions" JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\MP$�\\1language/en-GB/en-GB.plg_extension_joomla.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EXTENSION_JOOMLA="Extension - Joomla" PLG_EXTENSION_JOOMLA_XML_DESCRIPTION="Manage the update sites for extensions."PKb��\�o��/language/en-GB/en-GB.plg_content_joomla.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_JOOMLA="Content - Joomla" PLG_CONTENT_JOOMLA_XML_DESCRIPTION="This plugin does category processing for core extensions; sends an email when new article is submitted in the Frontend."PKb��\��i!� � #language/en-GB/en-GB.com_search.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_SEARCH="Search" COM_SEARCH_ALL_WORDS="All Words" COM_SEARCH_ALPHABETICAL="Alphabetical" COM_SEARCH_ANY_WORDS="Any Words" COM_SEARCH_CONFIG_FIELD_CREATED_DATE_DESC="Show created date." COM_SEARCH_CONFIG_FIELD_CREATED_DATE_LABEL="Created Date" COM_SEARCH_CONFIG_GATHER_SEARCH_STATISTICS_DESC="Record the search phrases submitted by visitors." COM_SEARCH_CONFIG_GATHER_SEARCH_STATISTICS_LABEL="Gather Search Statistics" COM_SEARCH_CONFIG_FIELD_OPENSEARCH_NAME_LABEL="OpenSearch Name" COM_SEARCH_CONFIG_FIELD_OPENSEARCH_NAME_DESC="Name displayed for this site as a search provider." COM_SEARCH_CONFIG_FIELD_OPENSEARCH_DESCRIPTON_LABEL="OpenSearch Description" COM_SEARCH_CONFIG_FIELD_OPENSEARCH_DESCRIPTON_DESC="Description displayed for this site as a search provider." COM_SEARCH_CONFIGURATION="Search: Options" COM_SEARCH_EXACT_PHRASE="Exact phrase" COM_SEARCH_FIELD_DESC="Word, words or phrase to search for." COM_SEARCH_FIELD_LABEL="Search Term (Optional)" COM_SEARCH_FIELD_SEARCH_PHRASES_DESC="Show the search options." COM_SEARCH_FIELD_SEARCH_PHRASES_LABEL="Use Search Options" COM_SEARCH_FIELD_SEARCH_AREAS_DESC="Show the search areas checkboxes." COM_SEARCH_FIELD_SEARCH_AREAS_LABEL="Use Search Areas" COM_SEARCH_FIELDSET_OPTIONAL_LABEL="Optional Search Term" COM_SEARCH_FIELDSET_SEARCH_OPTIONS_LABEL="Search" COM_SEARCH_FOR_DESC="The type of search." COM_SEARCH_FOR_LABEL="Search For" COM_SEARCH_HEADING_PHRASE="Search Phrase" COM_SEARCH_HEADING_SEARCH_TERM_ASC="Search Phrase ascending" COM_SEARCH_HEADING_SEARCH_TERM_DESC="Search Phrase descending" COM_SEARCH_HEADING_RESULTS="Results" COM_SEARCH_HIDE_SEARCH_RESULTS="Hide Search Results" COM_SEARCH_LOGGING_DISABLED="Gathering statistics disabled. Enable it in the Options." COM_SEARCH_LOGGING_ENABLED="Gathering statistics enabled" COM_SEARCH_MANAGER_SEARCHES="Search Term Analysis" COM_SEARCH_MOST_POPULAR="Popularity" COM_SEARCH_NEWEST_FIRST="Newest First" COM_SEARCH_NO_RESULTS="Off" COM_SEARCH_OLDEST_FIRST="Oldest First" COM_SEARCH_ORDERING_DESC="Defines what ordering results are listed in." COM_SEARCH_ORDERING_LABEL="Results Ordering" COM_SEARCH_SAVED_SEARCH_OPTIONS="Default Search Options" COM_SEARCH_SEARCH_IN_PHRASE="Search in phrases." COM_SEARCH_SHOW_SEARCH_RESULTS="Show Search Results" COM_SEARCH_XML_DESCRIPTION="Component for search functions." PKb��\H�ԕAA,language/en-GB/en-GB.plg_search_tags.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SEARCH_TAGS="Search - Tags" PLG_SEARCH_TAGS_XML_DESCRIPTION="Enables searching in Tags." PKb��\����1language/en-GB/en-GB.plg_finder_newsfeeds.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_NEWSFEEDS="Smart Search - News Feeds" PLG_FINDER_NEWSFEEDS_ERROR_ACTIVATING_PLUGIN="Could not automatically activate the "Smart Search - Joomla! News Feeds" plugin." PLG_FINDER_NEWSFEEDS_XML_DESCRIPTION="This plugin indexes Joomla! News feeds." PLG_FINDER_STATISTICS_NEWS_FEED="News Feed" PKb��\�B�HH3language/en-GB/en-GB.plg_quickicon_joomlaupdate.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_QUICKICON_JOOMLAUPDATE="Quick Icon - Joomla Update Notification" PLG_QUICKICON_JOOMLAUPDATE_CHECKING="Checking Joomla..." PLG_QUICKICON_JOOMLAUPDATE_ERROR="Unknown Joomla..." PLG_QUICKICON_JOOMLAUPDATE_GROUP_DESC="The group of this plugin (this value is compared with the group value used in <strong>Quick Icons</strong> modules to inject icons)." PLG_QUICKICON_JOOMLAUPDATE_GROUP_LABEL="Group" PLG_QUICKICON_JOOMLAUPDATE_UPDATEFOUND="Joomla <span class='label label-important'>%s</span>, Update now!" PLG_QUICKICON_JOOMLAUPDATE_UPDATEFOUND_BUTTON="Update Now" PLG_QUICKICON_JOOMLAUPDATE_UPDATEFOUND_MESSAGE="Joomla <span class='label label-important'>%s</span> is available:" PLG_QUICKICON_JOOMLAUPDATE_UPTODATE="Joomla is up to date." PLG_QUICKICON_JOOMLAUPDATE_XML_DESCRIPTION="Checks for Joomla updates and notifies you when you visit the Control Panel page." PKb��\]?�O��%language/en-GB/en-GB.com_messages.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_MESSAGES="Messaging" COM_MESSAGES_ADD="New Private Message" COM_MESSAGES_CONFIG_SAVED="Configuration saved." COM_MESSAGES_CONFIGURATION="Messages: Options" COM_MESSAGES_ERR_INVALID_USER="Invalid user" COM_MESSAGES_ERR_SEND_FAILED="The user has locked their mailbox. Message failed." COM_MESSAGES_ERROR_COULD_NOT_SEND_INVALID_RECIPIENT="The email message cannot be sent due to an invalid recipient address." COM_MESSAGES_ERROR_COULD_NOT_SEND_INVALID_REPLYTO="The email message cannot be sent due to an invalid reply-to address." COM_MESSAGES_ERROR_INVALID_FROM_USER="Invalid sender" COM_MESSAGES_ERROR_INVALID_MESSAGE="Invalid message content" COM_MESSAGES_ERROR_INVALID_SUBJECT="Invalid subject" COM_MESSAGES_ERROR_INVALID_TO_USER="Invalid recipient" COM_MESSAGES_ERROR_MISSING_ROOT_ASSET_GROUPS="Missing root asset groups to send notification." COM_MESSAGES_ERROR_NO_GROUPS_SET_AS_SUPER_USER="There are no groups set with super user permissions." COM_MESSAGES_ERROR_NO_USERS_SET_AS_SUPER_USER="There are no users set with super user permissions." COM_MESSAGES_FIELD_AUTO_PURGE_DESC="Automatically delete private messages after the given number of days." COM_MESSAGES_FIELD_AUTO_PURGE_LABEL="Auto-delete Messages (days)" COM_MESSAGES_FIELD_DATE_TIME_LABEL="Posted" COM_MESSAGES_FIELD_LOCK_DESC="Lock your private message inbox." COM_MESSAGES_FIELD_LOCK_LABEL="Lock Inbox" COM_MESSAGES_FIELD_MAIL_ON_NEW_DESC="Email me when a new private message arrives." COM_MESSAGES_FIELD_MAIL_ON_NEW_LABEL="Email New Messages" COM_MESSAGES_FIELD_MESSAGE_DESC="You must enter a message." COM_MESSAGES_FIELD_MESSAGE_LABEL="Message" COM_MESSAGES_FIELD_SUBJECT_DESC="You must enter a subject." COM_MESSAGES_FIELD_SUBJECT_LABEL="Subject" COM_MESSAGES_FIELD_USER_ID_FROM_LABEL="From" COM_MESSAGES_FIELD_USER_ID_TO_DESC="You must select a recipient." COM_MESSAGES_FIELD_USER_ID_TO_LABEL="Recipient" COM_MESSAGES_FILTER_SEARCH_LABEL="Search Messages" COM_MESSAGES_FILTER_STATES_DESC="Filter by message state." COM_MESSAGES_FILTER_STATES_LABEL="State" COM_MESSAGES_HEADING_FROM="From" COM_MESSAGES_HEADING_FROM_ASC="From ascending" COM_MESSAGES_HEADING_FROM_DESC="From descending" COM_MESSAGES_HEADING_READ="Read" COM_MESSAGES_HEADING_READ_ASC="Read ascending" COM_MESSAGES_HEADING_READ_DESC="Read descending" COM_MESSAGES_HEADING_SUBJECT="Subject" COM_MESSAGES_HEADING_SUBJECT_ASC="Subject ascending" COM_MESSAGES_HEADING_SUBJECT_DESC="Subject descending" COM_MESSAGES_INVALID_REPLY_ID="Invalid recipient" COM_MESSAGES_MANAGER_MESSAGES="Private Messages" COM_MESSAGES_MARK_AS_READ="Mark as Read" COM_MESSAGES_MARK_AS_UNREAD="Mark as Unread" COM_MESSAGES_MY_SETTINGS="My Settings" COM_MESSAGES_N_ITEMS_DELETED="%d messages deleted." COM_MESSAGES_N_ITEMS_DELETED_1="Message deleted." COM_MESSAGES_N_ITEMS_PUBLISHED="%d messages marked as read." COM_MESSAGES_N_ITEMS_PUBLISHED_1="Message marked as read." COM_MESSAGES_N_ITEMS_TRASHED="%d messages trashed." COM_MESSAGES_N_ITEMS_TRASHED_1="Message trashed." COM_MESSAGES_N_ITEMS_UNPUBLISHED="%d messages marked as unread." COM_MESSAGES_N_ITEMS_UNPUBLISHED_1="Message marked as unread." COM_MESSAGES_NEW_MESSAGE="New Message from %1$s at %2$s" ; The following string is deprecated and will be removed in Joomla 4.0 COM_MESSAGES_NEW_MESSAGE_ARRIVED="A new private message has arrived from %s" COM_MESSAGES_NO_ITEM_SELECTED="No messages selected." COM_MESSAGES_OPTION_READ="Read" COM_MESSAGES_OPTION_UNREAD="Unread" COM_MESSAGES_PLEASE_LOGIN="Please log in to %s to read your message." COM_MESSAGES_RE="Re:" COM_MESSAGES_READ="Messages" COM_MESSAGES_READ_PRIVATE_MESSAGE="Read Private Message" COM_MESSAGES_SEARCH_IN_SUBJECT="Search in message subject and description." COM_MESSAGES_TOOLBAR_MARK_AS_READ="Mark as Read" COM_MESSAGES_TOOLBAR_MARK_AS_UNREAD="Mark as Unread" COM_MESSAGES_TOOLBAR_MY_SETTINGS="My Settings" COM_MESSAGES_TOOLBAR_REPLY="Reply" COM_MESSAGES_TOOLBAR_SEND="Send" COM_MESSAGES_VIEW_PRIVATE_MESSAGE="Private Messages: View" COM_MESSAGES_WRITE_PRIVATE_MESSAGE="Private Messages: Write" COM_MESSAGES_XML_DESCRIPTION="Component for private messaging support in Backend." JLIB_APPLICATION_SAVE_SUCCESS="Message sent." JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\����"language/en-GB/en-GB.com_media.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_MEDIA="Media" COM_MEDIA_ALIGN="Image Float" COM_MEDIA_ALIGN_DESC="This will apply the classes 'pull-left', 'pull-center' or 'pull-right' to the '<figure>' or '<img>' element." COM_MEDIA_BROWSE_FILES="Browse files" COM_MEDIA_CAPTION="Caption" COM_MEDIA_CAPTION_CLASS_LABEL="Caption Class" COM_MEDIA_CAPTION_CLASS_DESC="This will apply the entered class to the '<figcaption>' element. For example: 'text-left', 'text-right', 'text-center'." COM_MEDIA_CLEAR_LIST="Clear List" COM_MEDIA_CONFIGURATION="Media: Options" COM_MEDIA_CREATE_COMPLETE="Create Complete: %s" COM_MEDIA_CREATE_FOLDER="Create Folder" COM_MEDIA_CREATE_NEW_FOLDER="Create New Folder" COM_MEDIA_CURRENT_PROGRESS="Current progress" COM_MEDIA_DELETE_COMPLETE="Delete Complete: %s" COM_MEDIA_DESCFTPTITLE="FTP Login Details" COM_MEDIA_DESCFTP="To upload, change and delete media files, Joomla will most likely need your FTP account details. Please enter them in the form fields below." COM_MEDIA_DETAIL_VIEW="Detail View" COM_MEDIA_DIRECTORY="Folder" COM_MEDIA_DIRECTORY_UP="Folder Up" COM_MEDIA_ERROR_BAD_REQUEST="Bad Request" COM_MEDIA_ERROR_BEFORE_DELETE_0="No error occurred before deleting the media." COM_MEDIA_ERROR_BEFORE_DELETE_1="An error occurred before deleting the media: %2$s" COM_MEDIA_ERROR_BEFORE_DELETE_MORE="Some errors occurred before deleting the media: %2$s" COM_MEDIA_ERROR_BEFORE_SAVE_0="No error occurred before saving the media." COM_MEDIA_ERROR_BEFORE_SAVE_1="An error occurred before saving the media: %2$s" COM_MEDIA_ERROR_BEFORE_SAVE_MORE="Some errors occurred before saving the media: %2$s" COM_MEDIA_ERROR_CREATE_NOT_PERMITTED="Create not permitted." COM_MEDIA_ERROR_FILE_EXISTS="File already exists." COM_MEDIA_ERROR_UNABLE_TO_CREATE_FOLDER_WARNDIRNAME="Unable to create folder. Folder name must only have alphanumeric characters and no spaces." COM_MEDIA_ERROR_UNABLE_TO_BROWSE_FOLDER_WARNDIRNAME="Unable to browse: %s. Folder name must only have alphanumeric characters and no spaces." COM_MEDIA_ERROR_UNABLE_TO_DELETE_FILE_WARNFILENAME="Unable to delete: %s. File name must only have alphanumeric characters and no spaces." COM_MEDIA_ERROR_UNABLE_TO_DELETE_FOLDER_NOT_EMPTY="Unable to delete: %s. Folder is not empty!" COM_MEDIA_ERROR_UNABLE_TO_DELETE_FOLDER_WARNDIRNAME="Unable to delete: %s." COM_MEDIA_ERROR_UNABLE_TO_DELETE="Unable to delete: " COM_MEDIA_ERROR_UNABLE_TO_UPLOAD_FILE="Unable to upload file." COM_MEDIA_ERROR_UPLOAD_INPUT="Please input a file to upload" COM_MEDIA_ERROR_WARNFILENAME="File name must only have alphanumeric characters and no spaces." COM_MEDIA_ERROR_WARNFILENOTSAFE="You have tried to upload file(s) that are not safe." COM_MEDIA_ERROR_WARNFILETOOLARGE="This file is too large to upload." COM_MEDIA_ERROR_WARNFILETYPE="This file type is not supported." COM_MEDIA_ERROR_WARNIEXSS="Possible IE XSS Attack found." COM_MEDIA_ERROR_WARNINVALID_IMG="Not a valid image." COM_MEDIA_ERROR_WARNINVALID_FOLDER="Invalid folder provided." COM_MEDIA_ERROR_WARNINVALID_MIME="Illegal or invalid mime type detected." COM_MEDIA_ERROR_WARNNOTADMIN="Uploaded file is not an image file and you are not a manager or higher." COM_MEDIA_ERROR_WARNNOTEMPTY="Not empty!" COM_MEDIA_ERROR_WARNUPLOADTOOLARGE="Total size of upload exceeds the limit." COM_MEDIA_FIELD_CHECK_MIME_DESC="Use MIME Magic or Fileinfo to try to verify files. Try disabling this if you get invalid mime type errors." COM_MEDIA_FIELD_CHECK_MIME_LABEL="Check MIME Types" COM_MEDIA_FIELD_IGNORED_EXTENSIONS_DESC="Ignored file extensions for MIME type checking and restricted uploads." COM_MEDIA_FIELD_IGNORED_EXTENSIONS_LABEL="Ignored Extensions" COM_MEDIA_FIELD_ILLEGAL_MIME_TYPES_DESC="A comma separated list of illegal MIME types to upload (blacklist)." COM_MEDIA_FIELD_ILLEGAL_MIME_TYPES_LABEL="Illegal MIME Types" COM_MEDIA_FIELD_LEGAL_EXTENSIONS_DESC="Extensions (file types) you are allowed to upload (comma separated)." COM_MEDIA_FIELD_LEGAL_EXTENSIONS_LABEL="Legal Extensions (File Types)" COM_MEDIA_FIELD_LEGAL_IMAGE_EXTENSIONS_DESC="Image extensions (file types) you are allowed to upload (comma separated). These are used to check for valid image headers." COM_MEDIA_FIELD_LEGAL_IMAGE_EXTENSIONS_LABEL="Legal Image Extensions (File Types)" COM_MEDIA_FIELD_LEGAL_MIME_TYPES_DESC="A comma separated list of legal MIME types to upload." COM_MEDIA_FIELD_LEGAL_MIME_TYPES_LABEL="Legal MIME Types" COM_MEDIA_FIELD_MAXIMUM_SIZE_DESC="The maximum size for an upload (in megabytes). Use zero for no limit. Note: your server has a maximum limit." COM_MEDIA_FIELD_MAXIMUM_SIZE_LABEL="Maximum Size (in MB)" COM_MEDIA_FIELD_PATH_FILE_FOLDER_DESC="Enter the path to the files folder relative to the root of your webspace. Warning! Changing to another path than the default 'images' may break your links. Note: Do not start the path with a slash!" COM_MEDIA_FIELD_PATH_FILE_FOLDER_LABEL="Path to Files Folder" COM_MEDIA_FIELD_PATH_IMAGE_FOLDER_DESC="Enter the path to the images folder relative to the root of your webspace. This path <strong>has to be the same as path to files (default) or to a subfolder of the path to file folder.</strong>. Note: Do not start the path with a slash!" COM_MEDIA_FIELD_PATH_IMAGE_FOLDER_LABEL="Path to Images Folder" COM_MEDIA_FIELD_RESTRICT_UPLOADS_DESC="Restrict uploads for lower than manager users to images if Fileinfo or MIME Magic isn't installed." COM_MEDIA_FIELD_RESTRICT_UPLOADS_LABEL="Restrict Uploads" COM_MEDIA_FIELDSET_OPTIONS_LABEL="Media" COM_MEDIA_FILES="Files" COM_MEDIA_FILESIZE="File size" COM_MEDIA_FOLDER="Folder" COM_MEDIA_FOLDERS="Media Folders" COM_MEDIA_FOLDERS_PATH_LABEL="<strong>Warning! Path Folder</strong><br />Changing the 'Path to files folder' from the default of 'images' may break your links.<br />The 'Path to images' folder has to be the same or a subfolder of 'Path to files'." COM_MEDIA_IMAGE_DESCRIPTION="Image Description" COM_MEDIA_IMAGE_DIMENSIONS="%1$s x %2$s" COM_MEDIA_IMAGE_TITLE="%1$s - %2$s" COM_MEDIA_IMAGE_URL="Image URL" COM_MEDIA_INSERT_IMAGE="Insert Image" COM_MEDIA_INSERT="Insert" COM_MEDIA_INVALID_REQUEST="Invalid Request" COM_MEDIA_MEDIA="Media" COM_MEDIA_NAME="Image Name" COM_MEDIA_NO_IMAGES_FOUND="No Images Found" COM_MEDIA_NOT_SET="Not Set" COM_MEDIA_OVERALL_PROGRESS="Overall Progress" COM_MEDIA_PIXEL_DIMENSIONS="Dimensions (px)" COM_MEDIA_PREVIEW="Preview" COM_MEDIA_START_UPLOAD="Start Upload" COM_MEDIA_THUMBNAIL_VIEW="Thumbnail View" COM_MEDIA_TITLE="Image Title" COM_MEDIA_UPLOAD_COMPLETE="Upload Complete: %s" COM_MEDIA_UPLOAD_FILE="Upload file" ; The following two strings are deprecated with 3.7.0 and will be removed in 4.0 COM_MEDIA_UPLOAD_FILES="Upload files (Maximum Size: %s MB)" COM_MEDIA_UPLOAD_FILES_NOLIMIT="Upload files (No maximum size)" COM_MEDIA_UPLOAD_SUCCESSFUL="Upload Successful" COM_MEDIA_UPLOAD="Upload" COM_MEDIA_UP="Up" COM_MEDIA_XML_DESCRIPTION="Component for managing site media" JLIB_RULES_SETTING_NOTES="Changes apply to this component only.<br /><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br /><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br /><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." PKb��\X�ܜ[[!language/en-GB/en-GB.localise.phpnu�[���<?php /** * @package Joomla.Language * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * en-GB localise class. * * @since 1.6 */ abstract class En_GBLocalise { /** * Returns the potential suffixes for a specific number of items * * @param integer $count The number of items. * * @return array An array of potential suffixes. * * @since 1.6 */ public static function getPluralSuffixes($count) { if ($count == 0) { return array('0'); } elseif ($count == 1) { return array('1'); } else { return array('MORE'); } } /** * Returns the ignored search words * * @return array An array of ignored search words. * * @since 1.6 */ public static function getIgnoredSearchWords() { return array('and', 'in', 'on'); } /** * Returns the lower length limit of search words * * @return integer The lower length limit of search words. * * @since 1.6 */ public static function getLowerLimitSearchWord() { return 3; } /** * Returns the upper length limit of search words * * @return integer The upper length limit of search words. * * @since 1.6 */ public static function getUpperLimitSearchWord() { return 20; } /** * Returns the number of chars to display when searching * * @return integer The number of chars to display when searching. * * @since 1.6 */ public static function getSearchDisplayedCharactersNumber() { return 200; } } PKb��\my���,language/en-GB/en-GB.mod_stats_admin.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_STATS_ADMIN="Statistics" MOD_STATS_LAYOUT_DEFAULT="Default" MOD_STATS_XML_DESCRIPTION="The Statistics Module shows information about your server installation together with statistics on the website users and the number of Articles in your database." PKb��\mc�5language/en-GB/en-GB.plg_authentication_gmail.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_AUTHENTICATION_GMAIL="Authentication - Gmail" PLG_GMAIL_XML_DESCRIPTION="Handles User Authentication with a Gmail or Googlemail account (Requires cURL).<br />Users may need to enable <em>Access for less secure apps</em> at <a href="_QQ_"https://www.google.com/settings/security/lesssecureapps"_QQ_" target="_QQ_"_blank"_QQ_">https://www.google.com/settings/security/lesssecureapps</a> to be able to log in using this method.<br /><strong> Warning! You must have at least one authentication plugin enabled or you will lose all access to your site.</strong>" PKb��\R�Q��*language/en-GB/en-GB.mod_quickicon.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_QUICKICON="Quick Icons" MOD_QUICKICON_XML_DESCRIPTION="This module shows Quick Icons that are visible on the Control Panel (administrator area home page)" MOD_QUICKICON_LAYOUT_DEFAULT="Default" PKb��\ "H� � �#language/en-GB/en-GB.lib_joomla.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 ; Common boolean values ; Note: YES, NO, TRUE, FALSE are reserved words in INI format. ; Keep this string on top JERROR_PARSING_LANGUAGE_FILE=" : error(s) in line(s) %s" JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN="Access forbidden." JLIB_APPLICATION_ERROR_APPLICATION_GET_NAME="JApplication: :getName() : Can't get or parse class name." JLIB_APPLICATION_ERROR_APPLICATION_LOAD="Unable to load application: %s" JLIB_APPLICATION_ERROR_BATCH_CANNOT_CREATE="You are not allowed to create new items in this category." JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT="You are not allowed to edit one or more of these items." JLIB_APPLICATION_ERROR_BATCH_FAILED="Batch process failed with following error: %s" JLIB_APPLICATION_ERROR_BATCH_MOVE_CATEGORY_NOT_FOUND="Can't find the destination category for this move." JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND="Can't find the item being moved." JLIB_APPLICATION_ERROR_CHECKIN_FAILED="Check-in failed with the following error: %s" JLIB_APPLICATION_ERROR_CHECKIN_NOT_CHECKED="Item is not checked out." JLIB_APPLICATION_ERROR_CHECKIN_USER_MISMATCH="The user checking in does not match the user who checked out the item." JLIB_APPLICATION_ERROR_CHECKOUT_FAILED="Check-out failed with the following error: %s" JLIB_APPLICATION_ERROR_CHECKOUT_USER_MISMATCH="The user checking out does not match the user who checked out the item." JLIB_APPLICATION_ERROR_COMPONENT_NOT_FOUND="Component not found." JLIB_APPLICATION_ERROR_COMPONENT_NOT_LOADING="Error loading component: %1$s, %2$s" JLIB_APPLICATION_ERROR_CONTROLLER_GET_NAME="JController: :getName() : Can't get or parse class name." JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED="Create record not permitted." JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED="Delete not permitted." JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED="Edit state is not permitted." JLIB_APPLICATION_ERROR_EDIT_ITEM_NOT_PERMITTED="Edit is not permitted." JLIB_APPLICATION_ERROR_EDIT_NOT_PERMITTED="Edit not permitted." JLIB_APPLICATION_ERROR_HISTORY_ID_MISMATCH="Error restoring item version from history." JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION="Insufficient information to perform the batch operation." JLIB_APPLICATION_ERROR_INVALID_CONTROLLER_CLASS="Invalid controller class: %s" JLIB_APPLICATION_ERROR_INVALID_CONTROLLER="Invalid controller: name='%s', format='%s'" JLIB_APPLICATION_ERROR_LAYOUTFILE_NOT_FOUND="Layout %s not found." JLIB_APPLICATION_ERROR_LIBRARY_NOT_FOUND="Library not found." JLIB_APPLICATION_ERROR_LIBRARY_NOT_LOADING="Error loading library: %1$s, %2$s" JLIB_APPLICATION_ERROR_MENU_LOAD="Error loading menu: %s" JLIB_APPLICATION_ERROR_MODEL_GET_NAME="JModel: :getName() : Can't get or parse class name." JLIB_APPLICATION_ERROR_MODULE_LOAD="Error loading module %s" JLIB_APPLICATION_ERROR_PATHWAY_LOAD="Unable to load pathway: %s" JLIB_APPLICATION_ERROR_REORDER_FAILED="Reorder failed. Error: %s" JLIB_APPLICATION_ERROR_ROUTER_LOAD="Unable to load router: %s" JLIB_APPLICATION_ERROR_MODELCLASS_NOT_FOUND="Model class %s not found in file." JLIB_APPLICATION_ERROR_SAVE_FAILED="Save failed with the following error: %s" JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED="Save not permitted." JLIB_APPLICATION_ERROR_TABLE_NAME_NOT_SUPPORTED="Table %s not supported. File not found." JLIB_APPLICATION_ERROR_TASK_NOT_FOUND="Task [%s] not found." JLIB_APPLICATION_ERROR_UNHELD_ID="You are not permitted to use that link to directly access that page (#%d)." JLIB_APPLICATION_ERROR_VIEW_CLASS_NOT_FOUND="View class not found [class, file]: %1$s, %2$s" JLIB_APPLICATION_ERROR_VIEW_GET_NAME_SUBSTRING="JView: :getName() : Your classname has the substring 'view'. This causes problems when extracting the classname from the name of your objects view. Avoid Object names with the substring 'view'." JLIB_APPLICATION_ERROR_VIEW_GET_NAME="JView: :getName() : Can't get or parse class name." JLIB_APPLICATION_ERROR_VIEW_NOT_FOUND="View not found [name, type, prefix]: %1$s, %2$s, %3$s" JLIB_APPLICATION_SAVE_SUCCESS="Item saved." JLIB_APPLICATION_SUBMIT_SAVE_SUCCESS="Item submitted." JLIB_APPLICATION_SUCCESS_BATCH="Batch process completed." JLIB_APPLICATION_SUCCESS_ITEM_REORDERED="Ordering saved." JLIB_APPLICATION_SUCCESS_ORDERING_SAVED="Ordering saved." JLIB_APPLICATION_SUCCESS_LOAD_HISTORY="Prior version restored. Saved on %s %s." JLIB_LOGIN_AUTHENTICATE="Username and password do not match or you do not have an account yet." JLIB_CACHE_ERROR_CACHE_HANDLER_LOAD="Unable to load Cache Handler: %s" JLIB_CACHE_ERROR_CACHE_STORAGE_LOAD="Unable to load Cache Storage: %s" JLIB_CAPTCHA_ERROR_PLUGIN_NOT_FOUND="Captcha plugin not set or not found. Please contact a site administrator." JLIB_CLIENT_ERROR_JFTP_NO_CONNECT="JFTP: :connect: Could not connect to host ' %1$s ' on port ' %2$s '" JLIB_CLIENT_ERROR_JFTP_NO_CONNECT_SOCKET="JFTP: :connect: Could not connect to host ' %1$s ' on port ' %2$s '. Socket error number: %3$s and error message: %4$s" JLIB_CLIENT_ERROR_JFTP_BAD_RESPONSE="JFTP: :connect: Bad response. Server response: %s [Expected: 220]" JLIB_CLIENT_ERROR_JFTP_BAD_USERNAME="JFTP: :login: Bad Username. Server response: %1$s [Expected: 331]. Username sent: %2$s" JLIB_CLIENT_ERROR_JFTP_BAD_PASSWORD="JFTP: :login: Bad Password. Server response: %1$s [Expected: 230]. Password sent: %2$s" JLIB_CLIENT_ERROR_JFTP_PWD_BAD_RESPONSE_NATIVE="FTP: :pwd: Bad response." JLIB_CLIENT_ERROR_JFTP_PWD_BAD_RESPONSE="JFTP: :pwd: Bad response. Server response: %s [Expected: 257]" JLIB_CLIENT_ERROR_JFTP_SYST_BAD_RESPONSE_NATIVE="JFTP: :syst: Bad response." JLIB_CLIENT_ERROR_JFTP_SYST_BAD_RESPONSE="JFTP: :syst: Bad response. Server response: %s [Expected: 215]" JLIB_CLIENT_ERROR_JFTP_CHDIR_BAD_RESPONSE_NATIVE="JFTP: :chdir: Bad response." JLIB_CLIENT_ERROR_JFTP_CHDIR_BAD_RESPONSE="JFTP: :chdir: Bad response. Server response: %1$s [Expected: 250]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_REINIT_BAD_RESPONSE_NATIVE="JFTP: :reinit: Bad response." JLIB_CLIENT_ERROR_JFTP_REINIT_BAD_RESPONSE="JFTP: :reinit: Bad response. Server response: %s [Expected: 220]" JLIB_CLIENT_ERROR_JFTP_RENAME_BAD_RESPONSE_NATIVE="JFTP: :rename: Bad response." JLIB_CLIENT_ERROR_JFTP_RENAME_BAD_RESPONSE_FROM="JFTP: :rename: Bad response. Server response: %1$s [Expected: 350]. From path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_RENAME_BAD_RESPONSE_TO="JFTP: :rename: Bad response. Server response: %1$s [Expected: 250]. To path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_CHMOD_BAD_RESPONSE_NATIVE="JFTP: :chmod: Bad response." JLIB_CLIENT_ERROR_JFTP_CHMOD_BAD_RESPONSE="JFTP: :chmod: Bad response. Server response: %1$s [Expected: 250]. Path sent: %2$s. Mode sent: %3$s" JLIB_CLIENT_ERROR_JFTP_DELETE_BAD_RESPONSE_NATIVE="JFTP: :delete: Bad response." JLIB_CLIENT_ERROR_JFTP_DELETE_BAD_RESPONSE="JFTP: :delete: Bad response. Server response: %1$s [Expected: 250]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_MKDIR_BAD_RESPONSE_NATIVE="JFTP: :mkdir: Bad response." JLIB_CLIENT_ERROR_JFTP_MKDIR_BAD_RESPONSE="JFTP: :mkdir: Bad response. Server response: %1$s [Expected: 257]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_RESTART_BAD_RESPONSE_NATIVE="JFTP: :restart: Bad response." JLIB_CLIENT_ERROR_JFTP_RESTART_BAD_RESPONSE="JFTP: :restart: Bad response. Server response: %1$s [Expected: 350]. Restart point sent: %2$s" JLIB_CLIENT_ERROR_JFTP_CREATE_BAD_RESPONSE_BUFFER="JFTP: :create: Bad response." JLIB_CLIENT_ERROR_JFTP_CREATE_BAD_RESPONSE_PASSIVE="JFTP: :create: Unable to use passive mode." JLIB_CLIENT_ERROR_JFTP_CREATE_BAD_RESPONSE="JFTP: :create: Bad response. Server response: %1$s [Expected: 150 or 125]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_CREATE_BAD_RESPONSE_TRANSFER="JFTP: :create: Transfer Failed. Server response: %1$s [Expected: 226]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_READ_BAD_RESPONSE_BUFFER="JFTP: :read: Bad response." JLIB_CLIENT_ERROR_JFTP_READ_BAD_RESPONSE_PASSIVE="JFTP: :read: Unable to use passive mode." JLIB_CLIENT_ERROR_JFTP_READ_BAD_RESPONSE="JFTP: :read: Bad response. Server response: %1$s [Expected: 150 or 125]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_READ_BAD_RESPONSE_TRANSFER="JFTP: :read: Transfer Failed. Server response: %1$s [Expected: 226]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_GET_BAD_RESPONSE="JFTP: :get: Bad response." JLIB_CLIENT_ERROR_JFTP_GET_PASSIVE="JFTP: :get: Unable to use passive mode." JLIB_CLIENT_ERROR_JFTP_GET_WRITING_LOCAL="JFTP: :get: Unable to open local file for writing. Local path: %s" JLIB_CLIENT_ERROR_JFTP_GET_BAD_RESPONSE_RETR="JFTP: :get: Bad response. Server response: %1$s [Expected: 150 or 125]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_GET_BAD_RESPONSE_TRANSFER="JFTP: :get: Transfer Failed. Server response: %1$s [Expected: 226]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_STORE_PASSIVE="JFTP: :store: Unable to use passive mode." JLIB_CLIENT_ERROR_JFTP_STORE_BAD_RESPONSE="JFTP: :store: Bad response." JLIB_CLIENT_ERROR_JFTP_STORE_READING_LOCAL="JFTP: :store: Unable to open local file for reading. Local path: %s" JLIB_CLIENT_ERROR_JFTP_STORE_FIND_LOCAL="JFTP: :store: Unable to find local file. Local path: %s" JLIB_CLIENT_ERROR_JFTP_STORE_BAD_RESPONSE_STOR="JFTP: :store: Bad response. Server response: %1$s [Expected: 150 or 125]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_STORE_DATA_PORT="JFTP: :store: Unable to write to data port socket." JLIB_CLIENT_ERROR_JFTP_STORE_BAD_RESPONSE_TRANSFER="JFTP: :store: Transfer Failed. Server response: %1$s [Expected: 226]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_WRITE_PASSIVE="JFTP: :write: Unable to use passive mode." JLIB_CLIENT_ERROR_JFTP_WRITE_BAD_RESPONSE="JFTP: :write: Bad response." JLIB_CLIENT_ERROR_JFTP_WRITE_BAD_RESPONSE_STOR="JFTP: :write: Bad response. Server response: %1$s [Expected: 150 or 125]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_WRITE_DATA_PORT="JFTP: :write: Unable to write to data port socket." JLIB_CLIENT_ERROR_JFTP_WRITE_BAD_RESPONSE_TRANSFER="JFTP: :write: Transfer Failed. Server response: %1$s [Expected: 226]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_APPEND_PASSIVE="JFTP: :append: Unable to use passive mode" JLIB_CLIENT_ERROR_JFTP_APPEND_BAD_RESPONSE="JFTP: :append: Bad response" JLIB_CLIENT_ERROR_JFTP_APPEND_BAD_RESPONSE_APPE="JFTP: :append: Bad response. Server response: %1$s [Expected: 150 or 125]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_APPEND_DATA_PORT="JFTP: :append: Unable to write to data port socket" JLIB_CLIENT_ERROR_JFTP_APPEND_BAD_RESPONSE_TRANSFER="JFTP: :append: Transfer Failed. Server response: %1$s [Expected: 226]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_SIZE_BAD_RESPONSE="JFTP: :size: Bad response" JLIB_CLIENT_ERROR_JFTP_SIZE_PASSIVE="JFTP: :size: Unable to use passive mode" JLIB_CLIENT_ERROR_JFTP_LISTNAMES_PASSIVE="JFTP: :listNames: Unable to use passive mode" JLIB_CLIENT_ERROR_JFTP_LISTNAMES_BAD_RESPONSE="JFTP: :listNames: Bad response" JLIB_CLIENT_ERROR_JFTP_LISTNAMES_BAD_RESPONSE_NLST="JFTP: :listNames: Bad response. Server response: %1$s [Expected: 150 or 125]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_LISTNAMES_BAD_RESPONSE_TRANSFER="JFTP: :listNames: Transfer Failed. Server response: %1$s [Expected: 226]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_LISTDETAILS_BAD_RESPONSE="JFTP: :listDetails: Bad response." JLIB_CLIENT_ERROR_JFTP_LISTDETAILS_PASSIVE="JFTP: :listDetails: Unable to use passive mode." JLIB_CLIENT_ERROR_JFTP_LISTDETAILS_BAD_RESPONSE_LIST="JFTP: :listDetails: Bad response. Server response: %1$s [Expected: 150 or 125]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_LISTDETAILS_BAD_RESPONSE_TRANSFER="JFTP: :listDetails: Transfer Failed. Server response: %1$s [Expected: 226]. Path sent: %2$s" JLIB_CLIENT_ERROR_JFTP_LISTDETAILS_UNRECOGNISED="JFTP: :listDetails: Unrecognised folder listing format." JLIB_CLIENT_ERROR_JFTP_PUTCMD_UNCONNECTED="JFTP: :_putCmd: Not connected to the control port." JLIB_CLIENT_ERROR_JFTP_PUTCMD_SEND="JFTP: :_putCmd: Unable to send command: %s" JLIB_CLIENT_ERROR_JFTP_VERIFYRESPONSE="JFTP: :_verifyResponse: Timeout or unrecognised response while waiting for a response from the server. Server response: %s" JLIB_CLIENT_ERROR_JFTP_PASSIVE_CONNECT_PORT="JFTP: :_passive: Not connected to the control port." JLIB_CLIENT_ERROR_JFTP_PASSIVE_RESPONSE="JFTP: :_passive: Timeout or unrecognised response while waiting for a response from the server. Server response: %s" JLIB_CLIENT_ERROR_JFTP_PASSIVE_IP_OBTAIN="JFTP: :_passive: Unable to obtain IP and port for data transfer. Server response: %s" JLIB_CLIENT_ERROR_JFTP_PASSIVE_IP_VALID="JFTP: :_passive: IP and port for data transfer not valid. Server response: %s" JLIB_CLIENT_ERROR_JFTP_PASSIVE_CONNECT="JFTP: :_passive: Could not connect to host %1$s on port %2$s. Socket error number: %3$s and error message: %4$s" JLIB_CLIENT_ERROR_JFTP_MODE_BINARY="JFTP: :_mode: Bad response. Server response: %s [Expected: 200]. Mode sent: Binary." JLIB_CLIENT_ERROR_JFTP_MODE_ASCII="JFTP: :_mode: Bad response. Server response: %s [Expected: 200]. Mode sent: Ascii." JLIB_CLIENT_ERROR_HELPER_SETCREDENTIALSFROMREQUEST_FAILED="Looks like User's credentials are no good." JLIB_CLIENT_ERROR_LDAP_ADDRESS_NOT_AVAILABLE="Address not available." JLIB_CMS_WARNING_PROVIDE_VALID_NAME="Please provide a valid, non-blank title." JLIB_DATABASE_ERROR_ADAPTER_MYSQL="The MySQL adapter 'mysql' is not available." JLIB_DATABASE_ERROR_ADAPTER_MYSQLI="The MySQL adapter 'mysqli' is not available." JLIB_DATABASE_ERROR_BIND_FAILED_INVALID_SOURCE_ARGUMENT="%s: :bind failed. Invalid source argument." JLIB_DATABASE_ERROR_ARTICLE_UNIQUE_ALIAS="Another article from this category has the same alias (remember it may be a trashed item)." JLIB_DATABASE_ERROR_CATEGORY_UNIQUE_ALIAS="Another category with the same parent category has the same alias (remember it may be a trashed item)." JLIB_DATABASE_ERROR_CHECK_FAILED="%s: :check Failed - %s" JLIB_DATABASE_ERROR_CHECKIN_FAILED="%s: :check-in failed - %s" JLIB_DATABASE_ERROR_CHECKOUT_FAILED="%s: :check-out failed - %s" JLIB_DATABASE_ERROR_CHILD_ROWS_CHECKED_OUT="Child rows checked out." JLIB_DATABASE_ERROR_CLASS_DOES_NOT_SUPPORT_ORDERING="%s does not support ordering." JLIB_DATABASE_ERROR_CLASS_IS_MISSING_FIELD="Missing field in the database: %s   %s." JLIB_DATABASE_ERROR_CLASS_NOT_FOUND_IN_FILE="Table class %s not found in file." JLIB_DATABASE_ERROR_CONNECT_DATABASE="Unable to connect to the Database: %s" JLIB_DATABASE_ERROR_CONNECT_MYSQL="Could not connect to MySQL." JLIB_DATABASE_ERROR_DATABASE_CONNECT="Could not connect to database." JLIB_DATABASE_ERROR_DATABASE_UPGRADE_FAILED="MySQL Database Upgrade failed. Please check the <a href="_QQ_"index.php?option=com_installer&view=database"_QQ_">Database Fixer</a>." JLIB_DATABASE_ERROR_DELETE_CATEGORY="Left-Right data inconsistency. Can't delete category." JLIB_DATABASE_ERROR_DELETE_FAILED="%s: :delete failed - %s" JLIB_DATABASE_ERROR_DELETE_ROOT_CATEGORIES="Root categories can't be deleted." JLIB_DATABASE_ERROR_EMAIL_INUSE="The email address you entered is already in use. Please enter another email address." JLIB_DATABASE_ERROR_EMPTY_ROW_RETURNED="The database row is empty." JLIB_DATABASE_ERROR_FUNCTION_FAILED="DB function failed with error number %s <br /><span style="_QQ_"color: red;"_QQ_">%s</span>" JLIB_DATABASE_ERROR_GET_NEXT_ORDER_FAILED="%s: :getNextOrder failed - %s" JLIB_DATABASE_ERROR_GET_TREE_FAILED="%s: :getTree Failed - %s" JLIB_DATABASE_ERROR_GETNODE_FAILED="%s: :_getNode Failed - %s" JLIB_DATABASE_ERROR_GETROOTID_FAILED="%s: :getRootId Failed - %s" JLIB_DATABASE_ERROR_HIT_FAILED="%s: :hit failed - %s" JLIB_DATABASE_ERROR_INVALID_LOCATION="%s: :setLocation - Invalid location." JLIB_DATABASE_ERROR_INVALID_NODE_RECURSION="%s: :move Failed - Can't move the node to be a child of itself." JLIB_DATABASE_ERROR_INVALID_PARENT_ID="Invalid parent ID." JLIB_DATABASE_ERROR_LANGUAGE_NO_TITLE="The language should have a title." JLIB_DATABASE_ERROR_LANGUAGE_UNIQUE_IMAGE="A content language already exists with this Image." JLIB_DATABASE_ERROR_LANGUAGE_UNIQUE_LANG_CODE="A content language already exists with this Language Tag." JLIB_DATABASE_ERROR_LANGUAGE_UNIQUE_SEF="A content language already exists with this URL Language Code." JLIB_DATABASE_ERROR_LOAD_DATABASE_DRIVER="Unable to load Database Driver: %s" JLIB_DATABASE_ERROR_MENUTYPE="Some menu items or some menu modules related to this menutype are checked out by another user or the default menu item is in this menu." JLIB_DATABASE_ERROR_MENUTYPE_CHECKOUT="The user checking out does not match the user who checked out this menu and/or its linked menu module." JLIB_DATABASE_ERROR_MENUTYPE_EMPTY="Menu type empty." JLIB_DATABASE_ERROR_MENUTYPE_EXISTS="Menu type exists: %s" JLIB_DATABASE_ERROR_MENU_CANNOT_UNSET_DEFAULT="The Language parameter for this menu item must be set to 'All'. At least one Default menu item must have Language set to All, even if the site is multilingual." JLIB_DATABASE_ERROR_MENU_CANNOT_UNSET_DEFAULT_DEFAULT="At least one menu item has to be set as Default." JLIB_DATABASE_ERROR_MENU_UNPUBLISH_DEFAULT_HOME="Can't unpublish default home." JLIB_DATABASE_ERROR_MENU_DEFAULT_CHECKIN_USER_MISMATCH="The current home menu for this language is checked out." JLIB_DATABASE_ERROR_MENU_UNIQUE_ALIAS="The alias <strong>%1$s</strong> is already being used by <strong>%2$s</strong> menu item in the <strong>%3$s</strong> menu (remember it may be a trashed item)." JLIB_DATABASE_ERROR_MENU_UNIQUE_ALIAS_ROOT="Another menu item has the same alias in Root (remember it may be a trashed item). Root is the top level parent." JLIB_DATABASE_ERROR_MENU_HOME_NOT_COMPONENT="The home menu item must be a component." JLIB_DATABASE_ERROR_MENU_HOME_NOT_UNIQUE_IN_MENU="A menu should have only one Default home." JLIB_DATABASE_ERROR_MENU_ROOT_ALIAS_COMPONENT="A first level menu item alias can't be 'component'." JLIB_DATABASE_ERROR_MENU_ROOT_ALIAS_FOLDER="A first level menu item alias can't be '%s' because '%s' is a sub-folder of your joomla installation folder." JLIB_DATABASE_ERROR_MOVE_FAILED="%s: :move failed - %s" JLIB_DATABASE_ERROR_MUSTCONTAIN_A_TITLE_CATEGORY="Category must have a title." JLIB_DATABASE_ERROR_MUSTCONTAIN_A_TITLE_EXTENSION="Extension must have a title." JLIB_DATABASE_ERROR_MUSTCONTAIN_A_TITLE_MENUITEM="Menu Item must have a title." JLIB_DATABASE_ERROR_MUSTCONTAIN_A_TITLE_MODULE="Module must have a title." JLIB_DATABASE_ERROR_MUSTCONTAIN_A_TITLE_UPDATESITE="Update site must have a title." JLIB_DATABASE_ERROR_NEGATIVE_NOT_PERMITTED="%s can't be negative." JLIB_DATABASE_ERROR_NO_ROWS_SELECTED="No rows selected." JLIB_DATABASE_ERROR_NOT_SUPPORTED_FILE_NOT_FOUND="Table %s not supported. File not found." JLIB_DATABASE_ERROR_NULL_PRIMARY_KEY="Null primary key not allowed." JLIB_DATABASE_ERROR_ORDERDOWN_FAILED="%s: :orderDown Failed - %s" JLIB_DATABASE_ERROR_ORDERUP_FAILED="%s: :orderUp Failed - %s" JLIB_DATABASE_ERROR_PLEASE_ENTER_A_USER_NAME="Please enter a username." JLIB_DATABASE_ERROR_PLEASE_ENTER_YOUR_NAME="Please enter your name." JLIB_DATABASE_ERROR_PUBLISH_FAILED="%s: :publish failed - %s" JLIB_DATABASE_ERROR_REBUILD_FAILED="%s: :rebuild Failed - %s" JLIB_DATABASE_ERROR_REBUILDPATH_FAILED="%s: :rebuildPath Failed - %s" JLIB_DATABASE_ERROR_REORDER_FAILED="%s: :reorder failed - %s" JLIB_DATABASE_ERROR_REORDER_UPDATE_ROW_FAILED="%s: :reorder update the row %s failed - %s" JLIB_DATABASE_ERROR_ROOT_NODE_NOT_FOUND="Root node not found." JLIB_DATABASE_ERROR_STORE_FAILED_UPDATE_ASSET_ID="The asset_id field could not be updated." JLIB_DATABASE_ERROR_STORE_FAILED="%1$s: :store failed<br />%2$s" JLIB_DATABASE_ERROR_USERGROUP_TITLE="User group must have a title." JLIB_DATABASE_ERROR_USERGROUP_TITLE_EXISTS="User group title already exists. Title must be unique with the same parent." JLIB_DATABASE_ERROR_USERLEVEL_NAME_EXISTS="Level with the name "%s" already exists." JLIB_DATABASE_ERROR_USERNAME_CANNOT_CHANGE="Can't use this username." JLIB_DATABASE_ERROR_USERNAME_INUSE="Username in use." JLIB_DATABASE_ERROR_VALID_AZ09="Please enter a valid username. No space at beginning or end, at least %d characters and must <strong>not</strong> have the following characters: < > \ " ' % ; ( ) &." JLIB_DATABASE_ERROR_VALID_MAIL="The email address you entered is invalid. Please enter another email address." JLIB_DATABASE_ERROR_VIEWLEVEL="Viewlevel must have a title." JLIB_DATABASE_FUNCTION_NOERROR="DB function reports no errors." JLIB_DATABASE_QUERY_FAILED="Database query failed (error # %s): %s" JLIB_DOCUMENT_ERROR_UNABLE_LOAD_DOC_CLASS="Unable to load document class." JLIB_ENVIRONMENT_SESSION_EXPIRED="Your session has expired. Please log in again." JLIB_ENVIRONMENT_SESSION_INVALID="Invalid session cookie. Please check that you have cookies enabled in your web browser." JLIB_ERROR_COMPONENTS_ACL_CONFIGURATION_FILE_MISSING_OR_IMPROPERLY_STRUCTURED="The %s component's ACL configuration file is either missing or improperly structured." JLIB_ERROR_INFINITE_LOOP="Infinite loop detected in JError." JLIB_EVENT_ERROR_DISPATCHER="JEventDispatcher: :register: Event handler not recognised. Handler: %s" JLIB_FILESYSTEM_BZIP_NOT_SUPPORTED="BZip2 Not Supported." JLIB_FILESYSTEM_BZIP_UNABLE_TO_READ="Unable to read archive (bz2)." JLIB_FILESYSTEM_BZIP_UNABLE_TO_WRITE="Unable to write archive (bz2)." JLIB_FILESYSTEM_BZIP_UNABLE_TO_WRITE_FILE="Unable to write file (bz2)." JLIB_FILESYSTEM_GZIP_NOT_SUPPORTED="GZlib Not Supported." JLIB_FILESYSTEM_GZIP_UNABLE_TO_READ="Unable to read archive (gz)." JLIB_FILESYSTEM_GZIP_UNABLE_TO_WRITE="Unable to write archive (gz)." JLIB_FILESYSTEM_GZIP_UNABLE_TO_WRITE_FILE="Unable to write file (gz)." JLIB_FILESYSTEM_GZIP_UNABLE_TO_DECOMPRESS="Unable to decompress data." JLIB_FILESYSTEM_TAR_UNABLE_TO_READ="Unable to read archive (tar)." JLIB_FILESYSTEM_TAR_UNABLE_TO_DECOMPRESS="Unable to decompress data." JLIB_FILESYSTEM_TAR_UNABLE_TO_CREATE_DESTINATION="Unable to create destination." JLIB_FILESYSTEM_TAR_UNABLE_TO_WRITE_ENTRY="Unable to write entry." JLIB_FILESYSTEM_ZIP_NOT_SUPPORTED="Zlib Not Supported." JLIB_FILESYSTEM_ZIP_UNABLE_TO_READ="Unable to read archive (zip)." JLIB_FILESYSTEM_ZIP_INFO_FAILED="Get ZIP Information failed." JLIB_FILESYSTEM_ZIP_UNABLE_TO_CREATE_DESTINATION="Unable to create destination." JLIB_FILESYSTEM_ZIP_UNABLE_TO_WRITE_ENTRY="Unable to write entry." JLIB_FILESYSTEM_ZIP_UNABLE_TO_READ_ENTRY="Unable to read entry." JLIB_FILESYSTEM_ZIP_UNABLE_TO_OPEN_ARCHIVE="Unable to open archive." JLIB_FILESYSTEM_ZIP_INVALID_ZIP_DATA="Invalid ZIP data." JLIB_FILESYSTEM_STREAM_FAILED="Failed to register string stream." JLIB_FILESYSTEM_UNKNOWNARCHIVETYPE="Unknown Archive type." JLIB_FILESYSTEM_UNABLE_TO_LOAD_ARCHIVE="Unable to load archive." JLIB_FILESYSTEM_ERROR_JFILE_FIND_COPY="JFile: :copy: Can't find or read file: %s" JLIB_FILESYSTEM_ERROR_JFILE_STREAMS="JFile: :copy(%1$s, %2$s): %3$s" JLIB_FILESYSTEM_ERROR_COPY_FAILED="Copy failed." JLIB_FILESYSTEM_ERROR_COPY_FAILED_ERR01="Copy failed: %1$s to %2$s" JLIB_FILESYSTEM_DELETE_FAILED="Failed deleting %s" JLIB_FILESYSTEM_CANNOT_FIND_SOURCE_FILE="Can't find source file." JLIB_FILESYSTEM_ERROR_JFILE_MOVE_STREAMS="JFile: :move: %s" JLIB_FILESYSTEM_ERROR_RENAME_FILE="Rename failed." JLIB_FILESYSTEM_ERROR_READ_UNABLE_TO_OPEN_FILE="JFile: :read: Unable to open file: %s" JLIB_FILESYSTEM_ERROR_WRITE_STREAMS="JFile: :write(%1$s): %2$s" JLIB_FILESYSTEM_ERROR_UPLOAD="JFile: :upload: %s" JLIB_FILESYSTEM_ERROR_WARNFS_ERR01="Warning: Failed to change file permissions!" JLIB_FILESYSTEM_ERROR_WARNFS_ERR02="Warning: Failed to move file!" JLIB_FILESYSTEM_ERROR_WARNFS_ERR03="Warning: File %s not uploaded for security reasons!" JLIB_FILESYSTEM_ERROR_WARNFS_ERR04="Warning: Failed to move file: %1$s to %2$s" JLIB_FILESYSTEM_ERROR_FIND_SOURCE_FOLDER="Can't find source folder." JLIB_FILESYSTEM_ERROR_FOLDER_EXISTS="Folder already exists." JLIB_FILESYSTEM_ERROR_FOLDER_CREATE="Unable to create target folder." JLIB_FILESYSTEM_ERROR_FOLDER_OPEN="Unable to open source folder." JLIB_FILESYSTEM_ERROR_FOLDER_LOOP="Infinite loop detected." JLIB_FILESYSTEM_ERROR_FOLDER_PATH="Path not in open_basedir paths." JLIB_FILESYSTEM_ERROR_COULD_NOT_CREATE_DIRECTORY="Could not create folder." JLIB_FILESYSTEM_ERROR_DELETE_BASE_DIRECTORY="You can't delete a base folder." JLIB_FILESYSTEM_ERROR_PATH_IS_NOT_A_FOLDER="JFolder: :delete: Path is not a folder. Path: %s" JLIB_FILESYSTEM_ERROR_FOLDER_DELETE="JFolder: :delete: Could not delete folder. Path: %s" JLIB_FILESYSTEM_ERROR_FOLDER_RENAME="Rename failed: %s" JLIB_FILESYSTEM_ERROR_PATH_IS_NOT_A_FOLDER_FILES="JFolder: :files: Path is not a folder. Path: %s" JLIB_FILESYSTEM_ERROR_PATH_IS_NOT_A_FOLDER_FOLDER="JFolder: :folder: Path is not a folder. Path: %s" JLIB_FILESYSTEM_ERROR_STREAMS_FILE_SIZE="Failed to get file size. This may not work for all streams!" JLIB_FILESYSTEM_ERROR_STREAMS_FILE_NOT_OPEN="File not open." JLIB_FILESYSTEM_ERROR_STREAMS_FILENAME="File name not set." JLIB_FILESYSTEM_ERROR_NO_DATA_WRITTEN="Warning: No data written." JLIB_FILESYSTEM_ERROR_STREAMS_FAILED_TO_OPEN_WRITER="Failed to open writer: %s" JLIB_FILESYSTEM_ERROR_STREAMS_FAILED_TO_OPEN_READER="Failed to open reader: %s" JLIB_FILESYSTEM_ERROR_STREAMS_NOT_UPLOADED_FILE="Not an uploaded file!" JLIB_FILTER_PARAMS_ALNUM="Alpha Numeric" JLIB_FILTER_PARAMS_FLOAT="Float" JLIB_FILTER_PARAMS_INTEGER="Integer" JLIB_FILTER_PARAMS_RAW="Raw" JLIB_FILTER_PARAMS_SAFEHTML="Safe HTML" JLIB_FILTER_PARAMS_TEL="Telephone" JLIB_FILTER_PARAMS_TEXT="Text" JLIB_FORM_BUTTON_CLEAR="Clear" JLIB_FORM_BUTTON_SELECT="Select" JLIB_FORM_CHANGE_IMAGE="Change Image" JLIB_FORM_CHANGE_IMAGE_BUTTON="Change Image Button" JLIB_FORM_CHANGE_USER="Select User" JLIB_FORM_ERROR_FIELDS_CATEGORY_ERROR_EXTENSION_EMPTY="Extension attribute is empty in the category field." JLIB_FORM_ERROR_FIELDS_GROUPEDLIST_ELEMENT_NAME="Unknown element type: %s" JLIB_FORM_ERROR_NO_DATA="No data." JLIB_FORM_ERROR_VALIDATE_FIELD="Invalid xml field." JLIB_FORM_ERROR_XML_FILE_DID_NOT_LOAD="XML file did not load." JLIB_FORM_FIELD_INVALID="Invalid field: " JLIB_FORM_INPUTMODE="latin" JLIB_FORM_INVALID_FORM_OBJECT="Invalid Form Object: :%s" JLIB_FORM_INVALID_FORM_RULE="Invalid Form Rule: :%s" JLIB_FORM_MEDIA_PREVIEW_ALT="Selected image." JLIB_FORM_MEDIA_PREVIEW_EMPTY="No image selected." JLIB_FORM_MEDIA_PREVIEW_SELECTED_IMAGE="Selected image." JLIB_FORM_MEDIA_PREVIEW_TIP_TITLE="Preview" JLIB_FORM_SELECT_USER="Select a User" JLIB_FORM_VALIDATE_FIELD_INVALID="Invalid field: %s" JLIB_FORM_VALIDATE_FIELD_REQUIRED="Field required: %s" JLIB_FORM_VALIDATE_FIELD_RULE_MISSING="Validation Rule missing: %s" JLIB_FORM_VALIDATE_FIELD_URL_SCHEMA_MISSING="Invalid URL: URL schema is missing in %1$s. Please add one of the following at the beginning: %2$s." JLIB_FORM_VALUE_CACHE_APC="Alternative PHP Cache" JLIB_FORM_VALUE_CACHE_APCU="APC User Cache" JLIB_FORM_VALUE_CACHE_CACHELITE="Cache_Lite" JLIB_FORM_VALUE_CACHE_EACCELERATOR="eAccelerator" JLIB_FORM_VALUE_CACHE_FILE="File" JLIB_FORM_VALUE_CACHE_MEMCACHE="Memcache" JLIB_FORM_VALUE_CACHE_MEMCACHED="Memcached (Experimental)" JLIB_FORM_VALUE_CACHE_REDIS="Redis" JLIB_FORM_VALUE_CACHE_WINCACHE="Windows Cache" JLIB_FORM_VALUE_CACHE_XCACHE="XCache" JLIB_FORM_VALUE_SESSION_APC="Alternative PHP Cache" JLIB_FORM_VALUE_SESSION_APCU="APC User Cache" JLIB_FORM_VALUE_SESSION_DATABASE="Database" JLIB_FORM_VALUE_SESSION_EACCELERATOR="eAccelerator" JLIB_FORM_VALUE_SESSION_MEMCACHE="Memcache" JLIB_FORM_VALUE_SESSION_MEMCACHED="Memcached (Experimental)" JLIB_FORM_VALUE_SESSION_NONE="PHP" JLIB_FORM_VALUE_SESSION_REDIS="Redis" JLIB_FORM_VALUE_SESSION_WINCACHE="Windows Cache" JLIB_FORM_VALUE_SESSION_XCACHE="XCache" JLIB_FORM_VALUE_TIMEZONE_UTC="Universal Time, Coordinated (UTC)" JLIB_FORM_VALUE_FROM_TEMPLATE="From Template" JLIB_FORM_VALUE_INHERITED="Inherited" JLIB_HTML_ACCESS_MODIFY_DESC_CAPTION_ACL="ACL" JLIB_HTML_ACCESS_MODIFY_DESC_CAPTION_TABLE="Table" JLIB_HTML_ACCESS_SUMMARY_DESC_CAPTION="ACL Summary Table" JLIB_HTML_ACCESS_SUMMARY_DESC="Shown below is an overview of the permission settings for this article. Select the tabs above to customise these settings by action." JLIB_HTML_ACCESS_SUMMARY="Summary." JLIB_HTML_ADD_TO_ROOT="Add to root." JLIB_HTML_ADD_TO_THIS_MENU="Add to this menu." JLIB_HTML_BATCH_ACCESS_LABEL="Set Access Level" JLIB_HTML_BATCH_ACCESS_LABEL_DESC="Not making a selection will keep the original access levels when processing." JLIB_HTML_BATCH_COPY="Copy" JLIB_HTML_BATCH_FLIPORDERING_LABEL="Reverse the ordering of all articles in the selected categories" JLIB_HTML_BATCH_LANGUAGE_LABEL="Set Language" JLIB_HTML_BATCH_LANGUAGE_LABEL_DESC="Not making a selection will keep the original language when processing." JLIB_HTML_BATCH_LANGUAGE_NOCHANGE="- Keep original Language -" JLIB_HTML_BATCH_MENU_LABEL="To Move or Copy your selection please select a Category." JLIB_HTML_BATCH_MOVE="Move" JLIB_HTML_BATCH_MOVE_QUESTION="Do you want to move the items or make a copy of them?" JLIB_HTML_BATCH_NO_CATEGORY="- Don't move or copy -" JLIB_HTML_BATCH_NOCHANGE="- Keep original Access Levels -" JLIB_HTML_BATCH_TAG_LABEL="Add Tag" JLIB_HTML_BATCH_TAG_LABEL_DESC="Add a tag to selected items." JLIB_HTML_BATCH_TAG_NOCHANGE="- Keep original Tags -" JLIB_HTML_BATCH_USER_LABEL="Set User." JLIB_HTML_BATCH_USER_LABEL_DESC="Not making a selection will keep the original user when processing." JLIB_HTML_BATCH_USER_NOCHANGE="- Keep original User -" JLIB_HTML_BATCH_USER_NOUSER="No User." JLIB_HTML_BEHAVIOR_ABOUT_THE_CALENDAR="About the Calendar" JLIB_HTML_BEHAVIOR_CLOSE="Close" JLIB_HTML_BEHAVIOR_DATE_SELECTION="Date selection:\n" JLIB_HTML_BEHAVIOR_DISPLAY_S_FIRST="Display %s first" JLIB_HTML_BEHAVIOR_DRAG_TO_MOVE="Drag to move." JLIB_HTML_BEHAVIOR_GO_TODAY="Go to today" JLIB_HTML_BEHAVIOR_GREEN="Green" JLIB_HTML_BEHAVIOR_HOLD_MOUSE="- Hold mouse button on any of the buttons above for faster selection." JLIB_HTML_BEHAVIOR_MONTH_SELECT="- Use the < and > buttons to select month\n" JLIB_HTML_BEHAVIOR_NEXT_MONTH_HOLD_FOR_MENU="Select to move to the next month. Select and hold for a list of the months." JLIB_HTML_BEHAVIOR_NEXT_YEAR_HOLD_FOR_MENU="Select to move to the next year. Select and hold for a list of years." JLIB_HTML_BEHAVIOR_OPEN_CALENDAR="Open the calendar" JLIB_HTML_BEHAVIOR_PREV_MONTH_HOLD_FOR_MENU="Select to move to the previous month. Select and hold for a list of the months." JLIB_HTML_BEHAVIOR_PREV_YEAR_HOLD_FOR_MENU="Select to move to the previous year. Select and hold for a list of years." JLIB_HTML_BEHAVIOR_SELECT_DATE="Select a date." JLIB_HTML_BEHAVIOR_SHIFT_CLICK_OR_DRAG_TO_CHANGE_VALUE="(Shift-)Select or Drag to change the value." JLIB_HTML_BEHAVIOR_TIME="Time:" JLIB_HTML_BEHAVIOR_TODAY="Today" JLIB_HTML_BEHAVIOR_TT_DATE_FORMAT="%a, %b %e" JLIB_HTML_BEHAVIOR_WK="wk" JLIB_HTML_BEHAVIOR_YEAR_SELECT="- Use the « and » buttons to select year\n" JLIB_HTML_BUTTON_BASE_CLASS="Could not load button base class." JLIB_HTML_BUTTON_NO_LOAD="Could not load button %s (%s);" JLIB_HTML_BUTTON_NOT_DEFINED="Button not defined for type = %s" JLIB_HTML_CALENDAR="Calendar" JLIB_HTML_CHECKED_OUT="Checked out" JLIB_HTML_CHECKIN="Check-in" JLIB_HTML_CLOAKING="This email address is being protected from spambots. You need JavaScript enabled to view it." JLIB_HTML_DATE_RELATIVE_DAYS="%s days ago." JLIB_HTML_DATE_RELATIVE_DAYS_1="%s day ago." JLIB_HTML_DATE_RELATIVE_DAYS_0="%s days ago." JLIB_HTML_DATE_RELATIVE_HOURS="%s hours ago." JLIB_HTML_DATE_RELATIVE_HOURS_1="%s hour ago." JLIB_HTML_DATE_RELATIVE_HOURS_0="%s hours ago." JLIB_HTML_DATE_RELATIVE_LESSTHANAMINUTE="Less than a minute ago." JLIB_HTML_DATE_RELATIVE_MINUTES="%s minutes ago." JLIB_HTML_DATE_RELATIVE_MINUTES_1="%s minute ago." JLIB_HTML_DATE_RELATIVE_MINUTES_0="%s minutes ago." JLIB_HTML_DATE_RELATIVE_WEEKS="%s weeks ago." JLIB_HTML_DATE_RELATIVE_WEEKS_1="%s week ago." JLIB_HTML_DATE_RELATIVE_WEEKS_0="%s weeks ago." JLIB_HTML_EDIT_MENU_ITEM="Edit menu item." JLIB_HTML_EDIT_MENU_ITEM_ID="Item ID: %s" JLIB_HTML_EDIT_MODULE="Edit module" JLIB_HTML_EDIT_MODULE_IN_POSITION="Position: %s" JLIB_HTML_EDITOR_CANNOT_LOAD="Can't load the editor." JLIB_HTML_END="End" JLIB_HTML_ERROR_FUNCTION_NOT_SUPPORTED="Function not supported." JLIB_HTML_ERROR_NOTFOUNDINFILE="%s: :%s not found in file." JLIB_HTML_ERROR_NOTSUPPORTED_NOFILE="%s: :%s not supported. File not found." JLIB_HTML_ERROR_NOTSUPPORTED="%s: :%s not supported." JLIB_HTML_GOTO_PAGE="Go to page %s" JLIB_HTML_GOTO_POSITION="Go to %s page" JLIB_HTML_MOVE_DOWN="Move Down" JLIB_HTML_MOVE_UP="Move Up" JLIB_HTML_NO_PARAMETERS_FOR_THIS_ITEM="There are no parameters for this item." JLIB_HTML_NO_RECORDS_FOUND="No records found." JLIB_HTML_PAGE_CURRENT="Page %s" JLIB_HTML_PAGE_CURRENT_OF_TOTAL="Page %s of %s" JLIB_HTML_PAGINATION="Pagination" JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST="Please first make a selection from the list." JLIB_HTML_PUBLISH_ITEM="Publish Item" JLIB_HTML_PUBLISHED_EXPIRED_ITEM="Published, but has Expired." JLIB_HTML_PUBLISHED_FINISHED="Finish: %s" JLIB_HTML_PUBLISHED_ITEM="Published and is Current." JLIB_HTML_PUBLISHED_PENDING_ITEM="Published, but is Pending." JLIB_HTML_PUBLISHED_START="Start: %s" JLIB_HTML_RESULTS_OF="Results %s - %s of %s" JLIB_HTML_SAVE_ORDER="Save Order" JLIB_HTML_SELECT_STATE="Select State" JLIB_HTML_START="Start" JLIB_HTML_UNPUBLISH_ITEM="Unpublish Item" JLIB_HTML_VIEW_ALL="View All" JLIB_HTML_SETDEFAULT_ITEM="Set default" JLIB_HTML_UNSETDEFAULT_ITEM="Unset default" JLIB_INSTALLER_ABORT="Aborting language installation: %s" JLIB_INSTALLER_ABORT_ALREADYINSTALLED="Extension is already installed." JLIB_INSTALLER_ABORT_ALREADY_EXISTS="Extension %1$s: Extension %2$s already exists." JLIB_INSTALLER_ABORT_COMP_BUILDADMINMENUS_FAILED="Error building Administrator Menus." JLIB_INSTALLER_ABORT_COMP_COPY_MANIFEST="Component %1$s: Could not copy PHP manifest file." JLIB_INSTALLER_ABORT_COMP_COPY_SETUP="Component %1$s: Could not copy setup file." JLIB_INSTALLER_ABORT_COMP_FAIL_ADMIN_FILES="Component %s: Failed to copy administrator files." JLIB_INSTALLER_ABORT_COMP_FAIL_SITE_FILES="Component %s: Failed to copy site files." JLIB_INSTALLER_ABORT_COMP_INSTALL_COPY_SETUP="Component Install: Could not copy setup file." JLIB_INSTALLER_ABORT_COMP_INSTALL_CUSTOM_INSTALL_FAILURE="Component Install: Custom install routine failure." JLIB_INSTALLER_ABORT_COMP_INSTALL_MANIFEST="Component Install: Could not copy PHP manifest file." JLIB_INSTALLER_ABORT_COMP_INSTALL_PHP_INSTALL="Component Install: Could not copy PHP install file." JLIB_INSTALLER_ABORT_COMP_INSTALL_PHP_UNINSTALL="Component Install: Could not copy PHP uninstall file." JLIB_INSTALLER_ABORT_COMP_INSTALL_ROLLBACK="Component Install: %s" JLIB_INSTALLER_ABORT_COMP_INSTALL_SQL_ERROR="Component Install: SQL error file %s" JLIB_INSTALLER_ABORT_COMP_UPDATESITEMENUS_FAILED="Component Install: Failed to update menu items." JLIB_INSTALLER_ABORT_COMP_UPDATE_ADMIN_ELEMENT="Component Update: The XML file did not have an administration element." JLIB_INSTALLER_ABORT_COMP_UPDATE_COPY_SETUP="Component Update: Could not copy setup file." JLIB_INSTALLER_ABORT_COMP_UPDATE_MANIFEST="Component Update: Could not copy PHP manifest file." JLIB_INSTALLER_ABORT_COMP_UPDATE_PHP_INSTALL="Component Update: Could not copy PHP install file." JLIB_INSTALLER_ABORT_COMP_UPDATE_PHP_UNINSTALL="Component Update: Could not copy PHP uninstall file." JLIB_INSTALLER_ABORT_COMP_UPDATE_ROLLBACK="Component Update: %s" JLIB_INSTALLER_ABORT_COMP_UPDATE_SQL_ERROR="Component Update: SQL error file %s" JLIB_INSTALLER_ABORT_CREATE_DIRECTORY="Extension %1$s: Failed to create folder: %2$s" JLIB_INSTALLER_ABORT_DEBUG="Installation unexpectedly stopped:" JLIB_INSTALLER_ABORT_DETECTMANIFEST="Unable to detect manifest file." JLIB_INSTALLER_ABORT_DIRECTORY="Extension %1$s: Another %2$s is already using the named folder: %3$s. Are you trying to install the same extension again?" JLIB_INSTALLER_ABORT_ERROR_DELETING_EXTENSIONS_RECORD="Could not delete the extension's record from the database." JLIB_INSTALLER_ABORT_EXTENSIONNOTVALID="Extension is not valid." JLIB_INSTALLER_ABORT_FILE_INSTALL_COPY_SETUP="Files Install: Could not copy setup file." JLIB_INSTALLER_ABORT_FILE_INSTALL_CUSTOM_INSTALL_FAILURE="Files Install: Custom install routine failure." JLIB_INSTALLER_ABORT_FILE_INSTALL_FAIL_SOURCE_DIRECTORY="Files Install: Failed to find source folder: %s" JLIB_INSTALLER_ABORT_FILE_INSTALL_ROLLBACK="Files Install: %s" JLIB_INSTALLER_ABORT_FILE_INSTALL_SQL_ERROR="Files %1$s: SQL error file %2$s" JLIB_INSTALLER_ABORT_FILE_ROLLBACK="Files Install: %s" JLIB_INSTALLER_ABORT_FILE_SAME_NAME="Files Install: Another extension with same name already exists." JLIB_INSTALLER_ABORT_FILE_UPDATE_SQL_ERROR="Files Update: SQL error file %s" JLIB_INSTALLER_ABORT_INSTALL_CUSTOM_INSTALL_FAILURE="Extension %s: Custom install routine failure." JLIB_INSTALLER_ABORT_LIB_COPY_FILES="Library %s: Could not copy files from the source." JLIB_INSTALLER_ABORT_LIB_INSTALL_ALREADY_INSTALLED="Library Install: Library already installed." JLIB_INSTALLER_ABORT_LIB_INSTALL_COPY_SETUP="Library Install: Could not copy setup file." JLIB_INSTALLER_ABORT_LIB_INSTALL_FAILED_TO_CREATE_DIRECTORY="Library Install: Failed to create folder: %s" JLIB_INSTALLER_ABORT_LIB_INSTALL_NOFILE="Library Install: No library file specified." JLIB_INSTALLER_ABORT_LIB_INSTALL_ROLLBACK="Library Install: %s" JLIB_INSTALLER_ABORT_LOAD_DETAILS="Failed to load extension details." JLIB_INSTALLER_ABORT_MANIFEST="Extension %1$s: Could not copy PHP manifest file." JLIB_INSTALLER_ABORT_METHODNOTSUPPORTED="Method not supported for this extension type." JLIB_INSTALLER_ABORT_METHODNOTSUPPORTED_TYPE="Method not supported for this extension type: %s" JLIB_INSTALLER_ABORT_MOD_COPY_FILES="Module %s: Could not copy files from the source." JLIB_INSTALLER_ABORT_MOD_INSTALL_COPY_SETUP="Module Install: Could not copy setup file." JLIB_INSTALLER_ABORT_MOD_INSTALL_CREATE_DIRECTORY="Module %1$s: Failed to create folder: %2$s" JLIB_INSTALLER_ABORT_MOD_INSTALL_CUSTOM_INSTALL_FAILURE="Module Install: Custom install routine failure." JLIB_INSTALLER_ABORT_MOD_INSTALL_DIRECTORY="Module %1$s: Another module is already using folder: %2$s" JLIB_INSTALLER_ABORT_MOD_INSTALL_MANIFEST="Module Install: Could not copy PHP manifest file." JLIB_INSTALLER_ABORT_MOD_INSTALL_NOFILE="Module %s: No module file specified." JLIB_INSTALLER_ABORT_MOD_INSTALL_SQL_ERROR="Module %1$s: SQL error file %2$s" JLIB_INSTALLER_ABORT_MOD_ROLLBACK="Module %1$s: %2$s" JLIB_INSTALLER_ABORT_MOD_UNINSTALL_UNKNOWN_CLIENT="Module Uninstall: Unknown client type [%s]" JLIB_INSTALLER_ABORT_MOD_UNKNOWN_CLIENT="Module %1$s: Unknown client type [%2$s]" JLIB_INSTALLER_ABORT_NOINSTALLPATH="Install path does not exist." JLIB_INSTALLER_ABORT_NOUPDATEPATH="Update path does not exist." JLIB_INSTALLER_ABORT_PACK_INSTALL_COPY_SETUP="Package Install: Could not copy setup file." JLIB_INSTALLER_ABORT_PACK_INSTALL_CREATE_DIRECTORY="Package Install: Failed to create folder: %s." JLIB_INSTALLER_ABORT_PACKAGE_INSTALL_CUSTOM_INSTALL_FAILURE="Package Install: Custom install routine failure." JLIB_INSTALLER_ABORT_PACKAGE_INSTALL_MANIFEST="Installation failed: Could not copy PHP manifest file." JLIB_INSTALLER_ABORT_PACK_INSTALL_ERROR_EXTENSION="Package %1$s: There was an error installing an extension: %2$s" JLIB_INSTALLER_ABORT_PACK_INSTALL_NO_FILES="Package %s: There were no files to install!" JLIB_INSTALLER_ABORT_PACK_INSTALL_NO_PACK="Package %s: No package file specified." JLIB_INSTALLER_ABORT_PACK_INSTALL_ROLLBACK="Package Install: %s" JLIB_INSTALLER_ABORT_PLG_COPY_FILES="Plugin %s: Could not copy files from the source." JLIB_INSTALLER_ABORT_PLG_INSTALL_ALLREADY_EXISTS="Plugin %1$s: Plugin %2$s already exists." JLIB_INSTALLER_ABORT_PLG_INSTALL_COPY_SETUP="Plugin %s: Could not copy setup file." JLIB_INSTALLER_ABORT_PLG_INSTALL_CREATE_DIRECTORY="Plugin %1$s: Failed to create folder: %2$s" JLIB_INSTALLER_ABORT_PLG_INSTALL_CUSTOM_INSTALL_FAILURE="Plugin Install: Custom install routine failure." JLIB_INSTALLER_ABORT_PLG_INSTALL_DIRECTORY="Plugin %1$s: Another plugin is already using folder: %2$s" JLIB_INSTALLER_ABORT_PLG_INSTALL_MANIFEST="Plugin %s: Could not copy PHP manifest file." JLIB_INSTALLER_ABORT_PLG_INSTALL_NO_FILE="Plugin %s: No plugin file specified." JLIB_INSTALLER_ABORT_PLG_INSTALL_ROLLBACK="Plugin %1$s: %2$s" JLIB_INSTALLER_ABORT_PLG_INSTALL_SQL_ERROR="Plugin %1$s: SQL error file %2$s" JLIB_INSTALLER_ABORT_PLG_UNINSTALL_SQL_ERROR="Plugin Uninstall: SQL error file %s" JLIB_INSTALLER_ABORT_REFRESH_MANIFEST_CACHE="Refresh Manifest Cache failed: %s Extension is not currently installed." JLIB_INSTALLER_ABORT_REFRESH_MANIFEST_CACHE_VALID="Refresh Manifest Cache failed: Extension is not valid." JLIB_INSTALLER_ABORT_ROLLBACK="Extension %1$s: %2$s" JLIB_INSTALLER_ABORT_SQL_ERROR="Extension %1$s: SQL error processing query: %2$s" JLIB_INSTALLER_ABORT_TPL_INSTALL_ALREADY_INSTALLED="Template Install: Template already installed." JLIB_INSTALLER_ABORT_TPL_INSTALL_ANOTHER_TEMPLATE_USING_DIRECTORY="Template Install: There is already a Template using the named folder: %s. Are you trying to install the same template again?" JLIB_INSTALLER_ABORT_TPL_INSTALL_COPY_FILES="Template Install: Could not copy files from the %s source." JLIB_INSTALLER_ABORT_TPL_INSTALL_COPY_SETUP="Template Install: Could not copy setup file." JLIB_INSTALLER_ABORT_TPL_INSTALL_FAILED_CREATE_DIRECTORY="Template Install: Failed to create folder: %s" JLIB_INSTALLER_ABORT_TPL_INSTALL_ROLLBACK="Template Install: %s" JLIB_INSTALLER_ABORT_TPL_INSTALL_UNKNOWN_CLIENT="Template Install: Unknown client type [%s]" JLIB_INSTALLER_AVAILABLE_UPDATE_PHP_VERSION="For the extension %1$s version %2$s is available, but it requires at least PHP version %3$s while your system only has %4$s" JLIB_INSTALLER_AVAILABLE_UPDATE_DB_MINIMUM="For the extension %1$s version %2$s is available, but your current database %3$s is version %4$s and is not supported. Please contact your web host to update your Database version to at least version %5$s." JLIB_INSTALLER_AVAILABLE_UPDATE_DB_TYPE="For the extension %1$s version %2$s is available, but your current database %3$s is not supported anymore." JLIB_INSTALLER_PURGED_UPDATES="Cleared updates" JLIB_INSTALLER_FAILED_TO_PURGE_UPDATES="Failed to clear updates." JLIB_INSTALLER_DEFAULT_STYLE="%s - Default" JLIB_INSTALLER_DISCOVER="Discover" JLIB_INSTALLER_ERROR_CANNOT_UNINSTALL_CHILD_OF_PACKAGE="The %s extension is part of a package which does not allow individual extensions to be uninstalled." JLIB_INSTALLER_ERROR_COMP_DISCOVER_STORE_DETAILS="Component Discover install: Failed to store component details." JLIB_INSTALLER_ERROR_COMP_FAILED_TO_CREATE_DIRECTORY="Component %1$s: Failed to create folder: %2$s." JLIB_INSTALLER_ERROR_COMP_INSTALL_ADMIN_ELEMENT="Component Install: The XML file did not have an administration element." JLIB_INSTALLER_ERROR_COMP_INSTALL_DIR_ADMIN="Component Install: Another component is already using folder: %s" JLIB_INSTALLER_ERROR_COMP_INSTALL_DIR_SITE="Component Install: Another component is already using folder: %s" JLIB_INSTALLER_ERROR_COMP_INSTALL_FAILED_TO_CREATE_DIRECTORY_ADMIN="Component Install: Failed to create administrator folder: %s" JLIB_INSTALLER_ERROR_COMP_INSTALL_FAILED_TO_CREATE_DIRECTORY_SITE="Component Install: Failed to create site folder: %s" JLIB_INSTALLER_ERROR_COMP_REFRESH_MANIFEST_CACHE="Component Refresh manifest cache: Failed to store component details." JLIB_INSTALLER_ERROR_COMP_REMOVING_ADMIN_MENUS_FAILED="Could not delete the Administrator menus." JLIB_INSTALLER_ERROR_COMP_UNINSTALL_CUSTOM="Component Uninstall: Custom Uninstall script unsuccessful." JLIB_INSTALLER_ERROR_COMP_UNINSTALL_FAILED_DELETE_CATEGORIES="Component Uninstall: Unable to delete the component categories." JLIB_INSTALLER_ERROR_COMP_UNINSTALL_ERRORREMOVEMANUALLY="Component Uninstall: Can't uninstall. Please remove manually." JLIB_INSTALLER_ERROR_COMP_UNINSTALL_ERRORUNKOWNEXTENSION="Component Uninstall: Unknown Extension." JLIB_INSTALLER_ERROR_COMP_UNINSTALL_FAILED_REMOVE_DIRECTORY_ADMIN="Component Uninstall: Unable to remove the component administrator folder." JLIB_INSTALLER_ERROR_COMP_UNINSTALL_FAILED_REMOVE_DIRECTORY_SITE="Component Uninstall: Unable to remove the component site folder." JLIB_INSTALLER_ERROR_COMP_UNINSTALL_NO_OPTION="Component Uninstall: Option field empty, can't remove files." JLIB_INSTALLER_ERROR_COMP_UNINSTALL_SQL_ERROR="Component Uninstall: SQL error file %s" JLIB_INSTALLER_ERROR_COMP_UNINSTALL_WARNCORECOMPONENT="Component Uninstall: Trying to uninstall a core component." JLIB_INSTALLER_ERROR_COMP_UPDATE_FAILED_TO_CREATE_DIRECTORY_ADMIN="Component Update: Failed to create administrator folder: %s" JLIB_INSTALLER_ERROR_COMP_UPDATE_FAILED_TO_CREATE_DIRECTORY_SITE="Component Update: Failed to create site folder: %s" JLIB_INSTALLER_ERROR_CREATE_DIRECTORY="JInstaller: :Install: Failed to create folder: %s" JLIB_INSTALLER_ERROR_CREATE_FOLDER_FAILED="Failed to create folder [%s]" JLIB_INSTALLER_ERROR_DEPRECATED_FORMAT="Deprecated install format (client="_QQ_"both"_QQ_"), use package installer in future." JLIB_INSTALLER_ERROR_DISCOVER_INSTALL_UNSUPPORTED="A %s extension can not be installed using the discover method. Please install this extension from Extension Manager: Install." JLIB_INSTALLER_ERROR_DOWNGRADE="Sorry! You cannot downgrade from version %s to %s" JLIB_INSTALLER_ERROR_DOWNLOAD_SERVER_CONNECT="Error connecting to the server: %s" JLIB_INSTALLER_ERROR_FAIL_COPY_FILE="JInstaller: :Install: Failed to copy file %1$s to %2$s" JLIB_INSTALLER_ERROR_FAIL_COPY_FOLDER="JInstaller: :Install: Failed to copy folder %1$s to %2$s" JLIB_INSTALLER_ERROR_FAILED_READING_NETWORK_RESOURCES="Failed reading network resource: %s" JLIB_INSTALLER_ERROR_FILE_EXISTS="JInstaller: :Install: File already exists %s" JLIB_INSTALLER_ERROR_FILE_FOLDER="Error on deleting file or folder %s" JLIB_INSTALLER_ERROR_FILE_UNINSTALL_INVALID_MANIFEST="Files Uninstall: Invalid manifest file." JLIB_INSTALLER_ERROR_FILE_UNINSTALL_INVALID_NOTFOUND_MANIFEST="Files Uninstall: Manifest file invalid or not found." JLIB_INSTALLER_ERROR_FILE_UNINSTALL_LOAD_ENTRY="Files Uninstall: Could not load extension entry." JLIB_INSTALLER_ERROR_FILE_UNINSTALL_LOAD_MANIFEST="Files Uninstall: Could not load manifest file." JLIB_INSTALLER_ERROR_FILE_UNINSTALL_SQL_ERROR="Files Uninstall: SQL error file %s" JLIB_INSTALLER_ERROR_FILE_UNINSTALL_WARNCOREFILE="File Uninstall: Trying to uninstall core files." JLIB_INSTALLER_ERROR_FOLDER_IN_USE="Another extension is already using folder [%s]" JLIB_INSTALLER_ERROR_LANG_DISCOVER_STORE_DETAILS="Language Discover install: Failed to store language details." JLIB_INSTALLER_ERROR_LANG_UNINSTALL_DEFAULT="This language can't be uninstalled as long as it is defined as a default language." JLIB_INSTALLER_ERROR_LANG_UNINSTALL_DIRECTORY="Language Uninstall: Unable to remove the specified Language folder." JLIB_INSTALLER_ERROR_LANG_UNINSTALL_ELEMENT_EMPTY="Language Uninstall: Element is empty, can't uninstall files." JLIB_INSTALLER_ERROR_LANG_UNINSTALL_PATH_EMPTY="Language Uninstall: Language path is empty, can't uninstall files." JLIB_INSTALLER_ERROR_LANG_UNINSTALL_PROTECTED="This language can't be uninstalled. It is protected in the database (usually en-GB)." JLIB_INSTALLER_ERROR_LIB_DISCOVER_STORE_DETAILS="Library Discover install: Failed to store library details." JLIB_INSTALLER_ERROR_LIB_REFRESH_MANIFEST_CACHE="Library Refresh manifest cache: Failed to store library details." JLIB_INSTALLER_ERROR_LIB_UNINSTALL_INVALID_MANIFEST="Library Uninstall: Invalid manifest file." JLIB_INSTALLER_ERROR_LIB_UNINSTALL_INVALID_NOTFOUND_MANIFEST="Library Uninstall: Manifest file invalid or not found." JLIB_INSTALLER_ERROR_LIB_UNINSTALL_LOAD_MANIFEST="Library Uninstall: Could not load manifest file." JLIB_INSTALLER_ERROR_LIB_UNINSTALL_WARNCORELIBRARY="Library Uninstall: Trying to uninstall a core library." JLIB_INSTALLER_ERROR_LOAD_XML="JInstaller: :Install: Failed to load XML File: %s" JLIB_INSTALLER_ERROR_MOD_DISCOVER_STORE_DETAILS="Module Discover install: Failed to store module details." JLIB_INSTALLER_ERROR_MOD_REFRESH_MANIFEST_CACHE="Module Refresh manifest cache: Failed to store module details." JLIB_INSTALLER_ERROR_MOD_UNINSTALL_ERRORUNKOWNEXTENSION="Module Uninstall: Unknown Extension." JLIB_INSTALLER_ERROR_MOD_UNINSTALL_EXCEPTION="Module Uninstall: %s" JLIB_INSTALLER_ERROR_MOD_UNINSTALL_INVALID_NOTFOUND_MANIFEST="Module Uninstall: Manifest file invalid or not found." JLIB_INSTALLER_ERROR_MOD_UNINSTALL_SQL_ERROR="Module Uninstall: SQL error file %s" JLIB_INSTALLER_ERROR_MOD_UNINSTALL_WARNCOREMODULE="Module Uninstall: Trying to uninstall a core module: %s" JLIB_INSTALLER_ERROR_NO_CORE_LANGUAGE="No core pack exists for the language [%s]" JLIB_INSTALLER_ERROR_NO_FILE="JInstaller: :Install: File does not exist %s" JLIB_INSTALLER_ERROR_NO_LANGUAGE_TAG="The package did not specify a language tag. Are you trying to install an old language package?" JLIB_INSTALLER_ERROR_NOTFINDJOOMLAXMLSETUPFILE="JInstaller: :Install: Can't find Joomla XML setup file." JLIB_INSTALLER_ERROR_NOTFINDXMLSETUPFILE="JInstaller: :Install: Can't find XML setup file." JLIB_INSTALLER_ERROR_PACK_REFRESH_MANIFEST_CACHE="Package Refresh manifest cache: Failed to store package details." JLIB_INSTALLER_ERROR_PACK_SETTING_PACKAGE_ID="Could not record the package ID for this package's extensions." JLIB_INSTALLER_ERROR_PACK_UNINSTALL_INVALID_MANIFEST="Package Uninstall: Invalid manifest file." JLIB_INSTALLER_ERROR_PACK_UNINSTALL_INVALID_NOTFOUND_MANIFEST="Package Uninstall: Manifest file invalid or not found: %s" JLIB_INSTALLER_ERROR_PACK_UNINSTALL_LOAD_MANIFEST="Package Uninstall: Could not load manifest file." JLIB_INSTALLER_ERROR_PACK_UNINSTALL_MANIFEST_NOT_REMOVED="Package Uninstall: Errors were detected, manifest file not removed!" JLIB_INSTALLER_ERROR_PACK_UNINSTALL_MISSINGMANIFEST="Package Uninstall: Missing manifest file." JLIB_INSTALLER_ERROR_PACK_UNINSTALL_NOT_PROPER="Package Uninstall: This extension may have already been uninstalled or might not have been uninstall properly: %s" JLIB_INSTALLER_ERROR_PACK_UNINSTALL_WARNCOREPACK="Package Uninstall: Trying to uninstall core package." JLIB_INSTALLER_ERROR_PLG_DISCOVER_STORE_DETAILS="Plugin Discover install: Failed to store plugin details." JLIB_INSTALLER_ERROR_PLG_REFRESH_MANIFEST_CACHE="Plugin Refresh manifest cache: Failed to store plugin details." JLIB_INSTALLER_ERROR_PLG_UNINSTALL_ERRORUNKOWNEXTENSION="Plugin Uninstall: Unknown Extension." JLIB_INSTALLER_ERROR_PLG_UNINSTALL_FOLDER_FIELD_EMPTY="Plugin Uninstall: Folder field empty, can't remove files." JLIB_INSTALLER_ERROR_PLG_UNINSTALL_INVALID_MANIFEST="Plugin Uninstall: Invalid manifest file." JLIB_INSTALLER_ERROR_PLG_UNINSTALL_INVALID_NOTFOUND_MANIFEST="Plugin Uninstall: Manifest file invalid or not found." JLIB_INSTALLER_ERROR_PLG_UNINSTALL_LOAD_MANIFEST="Plugin Uninstall: Could not load manifest file." JLIB_INSTALLER_ERROR_PLG_UNINSTALL_WARNCOREPLUGIN="Plugin Uninstall: Trying to uninstall a core plugin: %s" JLIB_INSTALLER_ERROR_SQL_ERROR="JInstaller: :Install: Error SQL %s" JLIB_INSTALLER_ERROR_SQL_FILENOTFOUND="JInstaller: :Install: SQL File not found %s" JLIB_INSTALLER_ERROR_SQL_READBUFFER="JInstaller: :Install: SQL File Buffer Read Error." JLIB_INSTALLER_ERROR_TPL_DISCOVER_STORE_DETAILS="Template Discover install: Failed to store template details." JLIB_INSTALLER_ERROR_TPL_REFRESH_MANIFEST_CACHE="Template Refresh manifest cache: Failed to store template details." JLIB_INSTALLER_ERROR_TPL_UNINSTALL_ERRORUNKOWNEXTENSION="Template Uninstall: Unknown Extension." JLIB_INSTALLER_ERROR_TPL_UNINSTALL_INVALID_CLIENT="Template Uninstall: Invalid client." JLIB_INSTALLER_ERROR_TPL_UNINSTALL_INVALID_NOTFOUND_MANIFEST="Template Uninstall: Manifest file invalid or not found." JLIB_INSTALLER_ERROR_TPL_UNINSTALL_TEMPLATE_DEFAULT="Template Uninstall: Can't remove default template." JLIB_INSTALLER_ERROR_TPL_UNINSTALL_TEMPLATE_DIRECTORY="Template Uninstall: Folder does not exist, can't remove files." JLIB_INSTALLER_ERROR_TPL_UNINSTALL_TEMPLATE_ID_EMPTY="Template Uninstall: Template ID is empty, can't uninstall files." JLIB_INSTALLER_ERROR_TPL_UNINSTALL_WARNCORETEMPLATE="Template Uninstall: Trying to uninstall a core template: %s" JLIB_INSTALLER_ERROR_UNKNOWN_CLIENT_TYPE="Unknown Client Type [%s]" JLIB_INSTALLER_FILE_ERROR_MOVE="Error on moving file %s" JLIB_INSTALLER_INCORRECT_SEQUENCE="Downgrading from version %1$s to version %2$s is not allowed." JLIB_INSTALLER_INSTALL="Install" JLIB_INSTALLER_MINIMUM_JOOMLA="You don't have the minimum Joomla version requirement of J%s" JLIB_INSTALLER_MINIMUM_PHP="Your server doesn't meet the minimum PHP version requirement of %s" JLIB_INSTALLER_NOTICE_LANG_RESET_USERS="Language set to Default for %d users." JLIB_INSTALLER_NOTICE_LANG_RESET_USERS_1="Language set to Default for %d user." JLIB_INSTALLER_UNINSTALL="Uninstall" JLIB_INSTALLER_UPDATE="Update" JLIB_INSTALLER_ERROR_EXTENSION_INVALID_CLIENT_IDENTIFIER="Invalid client identifier specified in extension manifest." JLIB_INSTALLER_ERROR_PACK_UNINSTALL_UNKNOWN_EXTENSION="Trying to uninstall unknown extension from package. This extension may have already been removed earlier." JLIB_INSTALLER_NOT_ERROR="If the error is related to the installation of TinyMCE language files it has no effect on the installation of the language(s). Some language packs created prior to Joomla! 3.2.0 may try to install separate TinyMCE language files. As these are now included in the core they no longer need to be installed." JLIB_INSTALLER_UPDATE_LOG_QUERY="Ran query from file %1$s. Query text: %2$s." JLIB_INSTALLER_WARNING_UNABLE_TO_INSTALL_CONTENT_LANGUAGE="Unable to create a content language for %s language: %s" JLIB_JS_AJAX_ERROR_CONNECTION_ABORT="A connection abort has occurred while fetching the JSON data." JLIB_JS_AJAX_ERROR_NO_CONTENT="No content was returned." JLIB_JS_AJAX_ERROR_OTHER="An error has occurred while fetching the JSON data: HTTP %s status code." JLIB_JS_AJAX_ERROR_PARSE="A parse error has occurred while processing the following JSON data:<br/><code style="_QQ_"color:inherit;white-space:pre-wrap;padding:0;margin:0;border:0;background:inherit;"_QQ_">%s</code>" JLIB_JS_AJAX_ERROR_TIMEOUT="A timeout has occurred while fetching the JSON data." JLIB_LANGUAGE_ERROR_CANNOT_LOAD_METAFILE="Could not load %s language XML file from %s." JLIB_LANGUAGE_ERROR_CANNOT_LOAD_METADATA="Could not load %s metadata from %s." JLIB_MAIL_FUNCTION_DISABLED="The mail() function has been disabled and the mail can't be sent." JLIB_MAIL_FUNCTION_OFFLINE="The mail function has been disabled by an administrator." JLIB_MAIL_INVALID_EMAIL_SENDER="JMail: : Invalid email Sender: %s, JMail: :setSender(%s)." JLIB_MEDIA_ERROR_UPLOAD_INPUT="Unable to upload file." JLIB_MEDIA_ERROR_WARNFILENAME="File name must only have alphanumeric characters and no spaces." JLIB_MEDIA_ERROR_WARNFILETOOLARGE="This file is too large to upload." JLIB_MEDIA_ERROR_WARNFILETYPE="This file type is not supported." JLIB_MEDIA_ERROR_WARNIEXSS="Possible IE XSS Attack found." JLIB_MEDIA_ERROR_WARNINVALID_IMG="Not a valid image." JLIB_MEDIA_ERROR_WARNINVALID_MIME="Invalid mime type detected." JLIB_MEDIA_ERROR_WARNINVALID_MIMETYPE="Illegal mime type detected: %s" JLIB_MEDIA_ERROR_WARNNOTADMIN="Uploaded file is not an image file and you do not have permission." JLIB_MENUS_PRESET_JOOMLA="Preset - Joomla" JLIB_MENUS_PRESET_MODERN="Preset - Modern" JLIB_NO_EDITOR_PLUGIN_PUBLISHED="Unable to display an editor because no editor plugin is published." JLIB_PLUGIN_ERROR_LOADING_PLUGINS="Error loading Plugins: %s" JLIB_REGISTRY_EXCEPTION_LOAD_FORMAT_CLASS="Unable to load format class." JLIB_RULES_ACTION="Action" JLIB_RULES_ALLOWED="Allowed" JLIB_RULES_ALLOWED_ADMIN="Allowed (Super User)" JLIB_RULES_ALLOWED_INHERITED="Allowed (Inherited)" JLIB_RULES_CALCULATED_SETTING="Calculated Setting" JLIB_RULES_CONFLICT="Conflict" JLIB_RULES_DATABASE_FAILURE="Failed storing the data to the database." JLIB_RULES_DENIED="Denied" JLIB_RULES_GROUP="%s" JLIB_RULES_GROUPS="Groups" JLIB_RULES_INHERIT="Inherit" JLIB_RULES_INHERITED="Inherited" JLIB_RULES_NOT_ALLOWED="Not Allowed" JLIB_RULES_NOT_ALLOWED_ADMIN_CONFLICT="Conflict" JLIB_RULES_NOT_ALLOWED_DEFAULT="Not Allowed (Default)" JLIB_RULES_NOT_ALLOWED_INHERITED="Not Allowed (Inherited)" JLIB_RULES_NOT_ALLOWED_LOCKED="Not Allowed (Locked)" JLIB_RULES_NOT_SET="Not Set" JLIB_RULES_NOTICE_RECALCULATE_GROUP_PERMISSIONS="Super User permissions changed. Save or reload to recalculate this group permissions." JLIB_RULES_NOTICE_RECALCULATE_GROUP_CHILDS_PERMISSIONS="Permissions changed in a group with child groups. Save or reload to recalculate the child groups permissions." JLIB_RULES_REQUEST_FAILURE="Failed sending the data to server." JLIB_RULES_SAVE_BEFORE_CHANGE_PERMISSIONS="Please save before changing permissions." JLIB_RULES_SELECT_ALLOW_DENY_GROUP="Allow or deny %s for users in the %s group." JLIB_RULES_SELECT_SETTING="Select New Setting" JLIB_RULES_SETTING_NOTES="If you change the setting, it will apply to this and all child groups, components and content. Note that <em><strong>Denied</strong></em> will overrule any inherited setting and also the setting in any child group, component or content. In the case of a setting conflict, <em><strong>Deny</strong></em> will take precedence. <em><strong>Not Set</strong></em> is equivalent to <em><strong>Denied</strong></em> but can be changed in child groups, components and content." JLIB_RULES_SETTING_NOTES_ITEM="If you change the setting, it will apply to this item. Note that:<br /><em><strong>Inherited</strong></em> means that the permissions from global configuration, parent group and category will be used.<br /><em><strong>Denied</strong></em> means that no matter what the global configuration, parent group or category settings are, the group being edited can't take this action on this item.<br /><em><strong>Allowed</strong></em> means that the group being edited will be able to take this action for this item (but if this is in conflict with the global configuration, parent group or category it will have no impact; a conflict will be indicated by <em><strong>Not Allowed (Inherited)</strong></em> under Calculated Settings)." JLIB_RULES_SETTINGS_DESC="Manage the permission settings for the user groups below. See notes at the bottom." JLIB_STEMMER_INVALID_STEMMER="Invalid stemmer type %s" JLIB_UNKNOWN="Unknown" JLIB_UPDATER_ERROR_COLLECTION_FOPEN="The PHP allow_url_fopen setting is disabled. This setting must be enabled for the updater to work." JLIB_UPDATER_ERROR_COLLECTION_OPEN_URL="Update: :Collection: Could not open %s" JLIB_UPDATER_ERROR_COLLECTION_PARSE_URL="Update: :Collection: Could not parse %s" JLIB_UPDATER_ERROR_EXTENSION_OPEN_URL="Update: :Extension: Could not open %s" JLIB_UPDATER_ERROR_EXTENSION_PARSE_URL="Update: :Extension: Could not parse %s" JLIB_UPDATER_ERROR_OPEN_UPDATE_SITE="Update: Could not open update site #%d "%s", URL: %s" JLIB_USER_ERROR_AUTHENTICATION_FAILED_LOAD_PLUGIN="JAuthentication: :authenticate: Failed to load plugin: %s" JLIB_USER_ERROR_AUTHENTICATION_LIBRARIES="JAuthentication: :__construct: Could not load authentication libraries." JLIB_USER_ERROR_BIND_ARRAY="Unable to bind array to user object." JLIB_USER_ERROR_CANNOT_CHANGE_SUPER_USER="A user is not allowed to change permissions of a Super User group." JLIB_USER_ERROR_CANNOT_CHANGE_OWN_GROUPS="A user is not allowed to change permissions of their own group(s)." JLIB_USER_ERROR_CANNOT_CHANGE_OWN_PARENT_GROUPS="A user is not allowed to change permissions of their own group(s) parent group(s)." JLIB_USER_ERROR_CANNOT_DEMOTE_SELF="You can't remove your own Super User permissions." JLIB_USER_ERROR_CANNOT_REUSE_PASSWORD="You can't reuse your current password, please enter a new password." JLIB_USER_ERROR_ID_NOT_EXISTS="JUser: :_load: User %s does not exist." JLIB_USER_ERROR_NOT_SUPERADMIN="Only users with Super User permissions can change other Super User user accounts." JLIB_USER_ERROR_PASSWORD_NOT_MATCH="Passwords do not match. Please re-enter password." JLIB_USER_ERROR_UNABLE_TO_FIND_USER="Unable to find a user with given activation string." JLIB_USER_ERROR_UNABLE_TO_LOAD_USER="JUser: :_load: Unable to load user with ID: %s" JLIB_USER_EXCEPTION_ACCESS_USERGROUP_INVALID="User group does not exist." JLIB_UTIL_ERROR_APP_INSTANTIATION="Application Startup Error." JLIB_UTIL_ERROR_CONNECT_DATABASE="JDatabase: :getInstance: Could not connect to database <br />joomla.library: %1$s - %2$s" JLIB_UTIL_ERROR_DOMIT="DommitDocument is deprecated. Use DomDocument instead." JLIB_UTIL_ERROR_LOADING_FEED_DATA="Error loading feed data." JLIB_UTIL_ERROR_XML_LOAD="Failed loading XML file." PKb��\��Ǡ�(language/en-GB/en-GB.plg_user_joomla.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_USER_JOOMLA="User - Joomla!" PLG_USER_JOOMLA_FIELD_AUTOREGISTER_DESC="Automatically create Registered Users where possible." PLG_USER_JOOMLA_FIELD_AUTOREGISTER_LABEL="Auto-create Users" PLG_USER_JOOMLA_FIELD_FORCELOGOUT_DESC="Set to No to disable this." PLG_USER_JOOMLA_FIELD_FORCELOGOUT_LABEL="Force Logout for all Sessions?" PLG_USER_JOOMLA_FIELD_MAILTOUSER_DESC="When an administrator creates a user account, this determines if an email, which has their username and password, is sent to the user." PLG_USER_JOOMLA_FIELD_MAILTOUSER_LABEL="Notification Mail to User" PLG_USER_JOOMLA_FIELD_STRONG_PASSWORDS_DESC="If set to yes, use the bcrypt encryption method if available in this version of PHP." PLG_USER_JOOMLA_FIELD_STRONG_PASSWORDS_LABEL="Strong Passwords" PLG_USER_JOOMLA_NEW_USER_EMAIL_BODY="Hello %s,\n\n\nYou have been added as a User to %s by an Administrator.\n\nThis email has your username and password to log in to %s\n\nUsername: %s\nPassword: %s\n\n\nPlease do not respond to this message as it is automatically generated and is for information purposes only." PLG_USER_JOOMLA_NEW_USER_EMAIL_SUBJECT="New User Details" PLG_USER_JOOMLA_POSTINSTALL_STRONGPW_BTN="Enable Strong Password Encryption" PLG_USER_JOOMLA_POSTINSTALL_STRONGPW_TEXT="As a security feature, Joomla allows you to switch to strong password encryption.<br />To turn strong passwords on select the button below. Alternatively you can edit the User - Joomla plugin and change the strong password setting to On.<br />Before enabling you should verify that all third party registration/login, user management or bridge extensions installed on your site support this strong password encryption." PLG_USER_JOOMLA_POSTINSTALL_STRONGPW_TITLE="Strong passwords" PLG_USER_JOOMLA_XML_DESCRIPTION="Handles Joomla's default User synchronisation.<br /><strong>Warning! You must have enabled at least one plugin that handles the user session management or you will lose all access to your site.</strong>" PKb��\�+5^��4language/en-GB/en-GB.plg_authentication_ldap.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_AUTHENTICATION_LDAP="Authentication - LDAP" PLG_LDAP_XML_DESCRIPTION="Handles User Authentication against an LDAP server.<br /><strong> Warning! You must have at least one authentication plugin enabled or you will lose all access to your site.</strong>" PKb��\j�P993language/en-GB/en-GB.plg_installer_webinstaller.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_INSTALLER_WEBINSTALLER="Installer - Install from Web" PLG_INSTALLER_WEBINSTALLER_CANNOT_INSTALL_EXTENSION_IN_PLUGIN="This extension cannot be installed using the install from web system. Please visit the developer's website to purchase/download." PLG_INSTALLER_WEBINSTALLER_ERROR_PLUGIN_INCLUDED_IN_CORE="Plugin installation has been aborted. The Install from Web plugin is included in core as of Joomla! 4.0." ; This string is not used. PLG_INSTALLER_WEBINSTALLER_LOAD_APPS="Display the extensions" ; The [SITEURL] placeholder should not be translated as it is used in the JavaScript API to insert the correct URL PLG_INSTALLER_WEBINSTALLER_REDIRECT_TO_EXTERNAL_SITE_TO_INSTALL="You will be redirected to the following link to complete the registration/purchase: [SITEURL]" ; This string is deprecated and not used in version 2.0 of the plugin but is required for compatibility with 1.x releases due to the language files being bundled in the CMS package. PLG_INSTALLER_WEBINSTALLER_TAB_POSITION_DESC="Place the Install from Web tab first or last." ; This string is deprecated and not used in version 2.0 of the plugin but is required for compatibility with 1.x releases due to the language files being bundled in the CMS package. PLG_INSTALLER_WEBINSTALLER_TAB_POSITION_LABEL="Tab Position" ; This string is deprecated and not used in version 2.0 of the plugin but is required for compatibility with 1.x releases due to the language files being bundled in the CMS package. PLG_INSTALLER_WEBINSTALLER_TAB_POSITION_FIRST="First" ; This string is deprecated and not used in version 2.0 of the plugin but is required for compatibility with 1.x releases due to the language files being bundled in the CMS package. PLG_INSTALLER_WEBINSTALLER_TAB_POSITION_LAST="Last" PLG_INSTALLER_WEBINSTALLER_XML_DESCRIPTION="This plugin offers functionality for the 'Install from Web' tab." PKb��\�oQ�xx2language/en-GB/en-GB.plg_authentication_joomla.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_AUTH_JOOMLA_ERR_SECRET_CODE_WITHOUT_TFA="You need to enable two factor authentication in your user profile to use the secret code field." PLG_AUTH_JOOMLA_XML_DESCRIPTION="Handles Joomla's default User authentication.<br /><strong> Warning! You must have at least one authentication plugin enabled or you will lose all access to your site.</strong>" PLG_AUTHENTICATION_JOOMLA="Authentication - Joomla"PKb��\*B~���/language/en-GB/en-GB.plg_content_finder.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_FINDER="Content - Smart Search" PLG_CONTENT_FINDER_XML_DESCRIPTION="Changes to content will not update the Smart Search index if you do not enable this plugin." PKb��\}�����+language/en-GB/en-GB.plg_system_p3p.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_P3P_XML_DESCRIPTION="The system P3P policy plugin allows Joomla! to send a customised string of P3P policy tags in the HTTP header. This is required for the sessions to work on certain browsers, ie Internet Explorer 6 and 7." PLG_SYSTEM_P3P="System - P3P Policy" PKb��\�����:language/en-GB/en-GB.plg_quickicon_extensionupdate.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_QUICKICON_EXTENSIONUPDATE="Quick Icon - Joomla! Extensions Updates Notification" PLG_QUICKICON_EXTENSIONUPDATE_XML_DESCRIPTION="Checks for updates of your installed third-party extensions and notifies you when you visit the Control Panel page." PKb��\N�D%QQ)language/en-GB/en-GB.com_weblinks.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_WEBLINKS="Web Links" COM_WEBLINKS_CATEGORIES="Categories" COM_WEBLINKS_CATEGORIES_VIEW_DEFAULT_DESC="Show all the web link categories within a category." COM_WEBLINKS_CATEGORIES_VIEW_DEFAULT_OPTION="Default" COM_WEBLINKS_CATEGORIES_VIEW_DEFAULT_TITLE="List All Web Link Categories" COM_WEBLINKS_CATEGORY_ADD_TITLE="Category Manager: Add A New Web Links Category" COM_WEBLINKS_CATEGORY_EDIT_TITLE="Category Manager: Edit A Web Links Category" COM_WEBLINKS_CATEGORY_VIEW_DEFAULT_DESC="Displays a list of Web Links for a category." COM_WEBLINKS_CATEGORY_VIEW_DEFAULT_OPTION="Default" COM_WEBLINKS_CATEGORY_VIEW_DEFAULT_TITLE="List Web Links in a Category" COM_WEBLINKS_CONTENT_TYPE_WEBLINK="Web Link" COM_WEBLINKS_CONTENT_TYPE_CATEGORY="Web Links Category" COM_WEBLINKS_FORM_VIEW_DEFAULT_DESC="Display a form to submit a web link in the Frontend." COM_WEBLINKS_FORM_VIEW_DEFAULT_OPTION="Default" COM_WEBLINKS_FORM_VIEW_DEFAULT_TITLE="Submit a Web Link" COM_WEBLINKS_LINKS="Links" COM_WEBLINKS_TAGS_WEBLINK="Web Link" COM_WEBLINKS_TAGS_CATEGORY="Web Link Category" COM_WEBLINKS_XML_DESCRIPTION="Component for web links management." PKb��\��!language/en-GB/en-GB.com_ajax.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_AJAX="Ajax Interface" COM_AJAX_XML_DESCRIPTION="An extendable Ajax interface for Joomla." COM_AJAX_SPECIFY_FORMAT="Please specify a valid response format, other than that of HTML, such as json, raw, debug, etc." COM_AJAX_METHOD_NOT_EXISTS="Method %s does not exist." COM_AJAX_FILE_NOT_EXISTS="The file at %s does not exist." COM_AJAX_MODULE_NOT_ACCESSIBLE="Module %s is not published, you do not have access to it, or it's not assigned to the current menu item." COM_AJAX_TEMPLATE_NOT_ACCESSIBLE="Template %s is not assigned to the current menu item." PKb��\�$����language/en-GB/en-GB.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <metafile version="3.8" client="administrator"> <name>English (en-GB)</name> <version>3.9.10</version> <creationDate>July 2019</creationDate> <author>Joomla! Project</author> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <description><![CDATA[en-GB administrator language]]></description> <metadata> <name>English (en-GB)</name> <nativeName>English (United Kingdom)</nativeName> <tag>en-GB</tag> <rtl>0</rtl> <locale>en_GB.utf8, en_GB.UTF-8, en_GB, eng_GB, en, english, english-uk, uk, gbr, britain, england, great britain, uk, united kingdom, united-kingdom</locale> <firstDay>0</firstDay> <weekEnd>0,6</weekEnd> <calendar>gregorian</calendar> </metadata> <params /> </metafile> PKb��\)�w rr0language/en-GB/en-GB.plg_editors_tinymce.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_EDITORS_TINYMCE="Editor - TinyMCE" PLG_TINY_XML_DESCRIPTION="TinyMCE is a platform independent web based JavaScript HTML WYSIWYG Editor." PKb��\���v��,language/en-GB/en-GB.plg_finder_weblinks.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_WEBLINKS="Smart Search - Web Links" PLG_FINDER_WEBLINKS_XML_DESCRIPTION="This plugin indexes Joomla! Web Links." PLG_FINDER_QUERY_FILTER_BRANCH_P_WEB_LINK="Web links" PLG_FINDER_QUERY_FILTER_BRANCH_S_WEB_LINK="Web link" PKb��\�Z44 4 1language/en-GB/en-GB.plg_authentication_gmail.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_AUTHENTICATION_GMAIL="Authentication - Gmail" PLG_GMAIL_ERROR_ACCOUNT_DISABLED_OR_NOT_ACTIVATED="Your local account is disabled or not activated." PLG_GMAIL_ERROR_LOCAL_USERNAME_CONFLICT="A local username conflicts with your Gmail username." PLG_GMAIL_FIELD_APPLYSUFFIX_DESC="Options for applying the suffix: Don't apply the suffix, only apply the suffix if missing (any user supplied suffix will be used) or always apply the suffix replacing any user supplied suffix." PLG_GMAIL_FIELD_APPLYSUFFIX_LABEL="Apply Username Suffix" PLG_GMAIL_FIELD_BACKEND_LOGIN_DESC="Allow Backend login via Gmail account?" PLG_GMAIL_FIELD_BACKEND_LOGIN_LABEL="Backend Login" PLG_GMAIL_FIELD_SUFFIX_DESC="A suffix to use for the username, typically gmail.com (or googlemail.com) is the suffix but you may wish to use a Google Apps for Your Domain suffix, this doesn't include the @ symbol. If left blank username suffix will be ignored." PLG_GMAIL_FIELD_SUFFIX_LABEL="Username Suffix" PLG_GMAIL_FIELD_USER_BLACKLIST_DESC="A list of usernames not permitted to log in via the Gmail plugin. The usernames should be separated by a comma." PLG_GMAIL_FIELD_USER_BLACKLIST_LABEL="User Blacklist" PLG_GMAIL_FIELD_VALUE_APPLYSUFFIXALWAYS="Always use suffix" PLG_GMAIL_FIELD_VALUE_APPLYSUFFIXMISSING="Apply suffix if missing" PLG_GMAIL_FIELD_VALUE_NOAPPLYSUFFIX="Don't Apply Suffix" PLG_GMAIL_FIELD_VERIFYPEER_DESC="Verify the peer connection using a CA certificate. In some situations authentication will fail due to certificate issues, disabling this should resolve the situation in that case." PLG_GMAIL_FIELD_VERIFYPEER_LABEL="Verify Peer" PLG_GMAIL_XML_DESCRIPTION="Handles User Authentication with a Gmail or Googlemail account (Requires cURL).<br />Users may need to enable <em>Access for less secure apps</em> at <a href="_QQ_"https://www.google.com/settings/security/lesssecureapps"_QQ_" target="_QQ_"_blank"_QQ_">https://www.google.com/settings/security/lesssecureapps</a> to be able to log in using this method.<br /><strong> Warning! You must have at least one authentication plugin enabled or you will lose all access to your site.</strong>"PKb��\����oo/language/en-GB/en-GB.plg_finder_content.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_FINDER_CONTENT="Smart Search - Content" PLG_FINDER_CONTENT_ERROR_ACTIVATING_PLUGIN="Could not automatically activate the "Smart Search - Content" plugin." PLG_FINDER_CONTENT_XML_DESCRIPTION="Updates the indexes of Joomla! Articles whenever an article is created, modified or deleted. NOTE the Content - Smart Search plugin must be enabled." PLG_FINDER_STATISTICS_ARTICLE="Article" PKb��\5��t t 2language/en-GB/en-GB.plg_twofactorauth_yubikey.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_TWOFACTORAUTH_YUBIKEY="Two Factor Authentication - YubiKey" PLG_TWOFACTORAUTH_YUBIKEY_ERR_VALIDATIONFAILED="You did not enter a valid YubiKey secret code or the YubiCloud servers are unreachable at this time." PLG_TWOFACTORAUTH_YUBIKEY_INTRO="This feature allows you to use a YubiKey secure hardware token for two factor authentication. In addition to your username and password you will also need to insert your YubiKey into your computer's USB port, select inside the Secret Key area of the site's login area and touch YubiKey's gold disk. The secret code generated by your YubiKey is unique to your device and changes constantly. This provides extra protection against hackers logging in to your account even if they were able to get hold of your password." PLG_TWOFACTORAUTH_YUBIKEY_METHOD_TITLE="YubiKey" PLG_TWOFACTORAUTH_TOTP_RESET_HEAD="Your YubiKey is already linked to your user account." PLG_TWOFACTORAUTH_TOTP_RESET_TEXT="Your YubiKey is already linked to your user account. If you want to unlink your YubiKey from your user account or use another YubiKey, please first disable two factor authentication and save your user profile. Then come back to this user profile page and re-activate two factor authentication with the YubiKey method." PLG_TWOFACTORAUTH_YUBIKEY_SECTION_ADMIN="Administrator (Backend)" PLG_TWOFACTORAUTH_YUBIKEY_SECTION_BOTH="Both" PLG_TWOFACTORAUTH_YUBIKEY_SECTION_DESC="In which sections of your site do you want to enable two factor authentication?" PLG_TWOFACTORAUTH_YUBIKEY_SECTION_LABEL="Site Section" PLG_TWOFACTORAUTH_YUBIKEY_SECTION_SITE="Site (Frontend)" PLG_TWOFACTORAUTH_YUBIKEY_SECURITYCODE="Security Code" PLG_TWOFACTORAUTH_YUBIKEY_STEP1_HEAD="Set up" PLG_TWOFACTORAUTH_YUBIKEY_STEP1_TEXT="Please insert your YubiKey device into your computer's USB port. Select the Security Code field below. Then touch the gold disk on your YubiKey device for one second. Afterwards, please save your user profile. If the code generated by your YubiKey is validated by YubiCloud the Two Factor Authentication feature will be enabled and this YubiKey will be linked with your user account." PLG_TWOFACTORAUTH_YUBIKEY_XML_DESCRIPTION="Allows users on your site to use two factor authentication using a YubiKey secure hardware token. Users need their own Yubikey available from https://www.yubico.com/. To use two factor authentication users have to edit their user profile and enable two factor authentication." PKb��\m@���1language/en-GB/en-GB.plg_system_highlight.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_SYSTEM_HIGHLIGHT="System - Highlight" PLG_SYSTEM_HIGHLIGHT_ERROR_ACTIVATING_PLUGIN="Could not automatically activate the "System - Highlight" plugin" PLG_SYSTEM_HIGHLIGHT_XML_DESCRIPTION="System plugin to highlight specified terms." PKb��\);\;��,language/en-GB/en-GB.plg_user_joomla.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 PLG_USER_JOOMLA="User - Joomla!" PLG_USER_JOOMLA_XML_DESCRIPTION="Handles Joomla's default User synchronisation.<br /><strong>Warning! You must have enabled at least one plugin that handles the user session management or you will lose all access to your site.</strong>" PKb��\X�O��1�1"language/en-GB/en-GB.com_admin.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_ADMIN="System Information" COM_ADMIN_ALPHABETICAL_INDEX="Alphabetical Index" COM_ADMIN_CACHE_DIRECTORY="(Cache Folder)" COM_ADMIN_CLEAR_RESULTS="Clear results" COM_ADMIN_CONFIGURATION_FILE="Configuration File" COM_ADMIN_DATABASE_COLLATION="Database Collation" COM_ADMIN_DATABASE_CONNECTION_COLLATION="Database Connection Collation" COM_ADMIN_DATABASE_TYPE="Database Type" COM_ADMIN_DATABASE_VERSION="Database Version" COM_ADMIN_DIRECTORY="Folder" COM_ADMIN_DIRECTORY_PERMISSIONS="Folder Permissions" COM_ADMIN_DISABLED_FUNCTIONS="Disabled Functions" COM_ADMIN_DISPLAY_ERRORS="Display Errors" COM_ADMIN_DOWNLOAD_SYSTEM_INFORMATION_TEXT="Download as text" COM_ADMIN_DOWNLOAD_SYSTEM_INFORMATION_JSON="Download as JSON" COM_ADMIN_EXTENSIONS="Extensions" COM_ADMIN_FILE_UPLOADS="File Uploads" COM_ADMIN_GLOSSARY="Glossary" COM_ADMIN_GO="Go" COM_ADMIN_HELP="Joomla! Help" COM_ADMIN_HELP_COMPONENTS_ACTIONLOGS="Action Logs" COM_ADMIN_HELP_COMPONENTS_ASSOCIATIONS="Multilingual Associations" COM_ADMIN_HELP_COMPONENTS_ASSOCIATIONS_EDIT="Multilingual Associations: Select" COM_ADMIN_HELP_COMPONENTS_BANNERS_BANNERS="Banners" COM_ADMIN_HELP_COMPONENTS_BANNERS_BANNERS_EDIT="Banners: New/Edit" COM_ADMIN_HELP_COMPONENTS_BANNERS_CATEGORIES="Banners: Categories" COM_ADMIN_HELP_COMPONENTS_BANNERS_CATEGORIES_EDIT="Banners: Categories - New/Edit" COM_ADMIN_HELP_COMPONENTS_BANNERS_CLIENTS="Banners: Clients" COM_ADMIN_HELP_COMPONENTS_BANNERS_CLIENTS_EDIT="Banners: Clients - New/Edit" COM_ADMIN_HELP_COMPONENTS_BANNERS_TRACKS="Banners: Tracks" COM_ADMIN_HELP_COMPONENTS_CONTACTS_CONTACTS="Contacts" COM_ADMIN_HELP_COMPONENTS_CONTACTS_CONTACTS_EDIT="Contacts: New/Edit" COM_ADMIN_HELP_COMPONENTS_CONTACT_CATEGORIES="Contacts: Categories" COM_ADMIN_HELP_COMPONENTS_CONTACT_CATEGORIES_EDIT="Contacts: Categories - New/Edit" COM_ADMIN_HELP_COMPONENTS_CONTENT_CATEGORIES="Articles: Categories" COM_ADMIN_HELP_COMPONENTS_CONTENT_CATEGORIES_EDIT="Articles: Categories - New/Edit" COM_ADMIN_HELP_COMPONENTS_FIELDS_FIELDS="Fields" COM_ADMIN_HELP_COMPONENTS_FIELDS_FIELDS_EDIT="Fields: New/Edit" COM_ADMIN_HELP_COMPONENTS_FIELDS_FIELD_GROUPS="Field Groups" COM_ADMIN_HELP_COMPONENTS_FIELDS_FIELD_GROUPS_EDIT="Field Groups: New/Edit" COM_ADMIN_HELP_COMPONENTS_FINDER_MANAGE_CONTENT_MAPS="Smart Search: Content Maps" COM_ADMIN_HELP_COMPONENTS_FINDER_MANAGE_INDEXED_CONTENT="Smart Search: Indexed Content" COM_ADMIN_HELP_COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS_EDIT="Smart Search: Filters - New/Edit" COM_ADMIN_HELP_COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS="Smart Search: Search Filters" COM_ADMIN_HELP_COMPONENTS_JOOMLA_UPDATE="Joomla Update" COM_ADMIN_HELP_COMPONENTS_MESSAGING_INBOX="Private Messages: Inbox" COM_ADMIN_HELP_COMPONENTS_MESSAGING_READ="Private Messages: Read" COM_ADMIN_HELP_COMPONENTS_MESSAGING_WRITE="Private Messages: Write" COM_ADMIN_HELP_COMPONENTS_NEWSFEEDS_CATEGORIES="News Feeds: Categories" COM_ADMIN_HELP_COMPONENTS_NEWSFEEDS_CATEGORIES_EDIT="News Feeds: Categories - New/Edit" COM_ADMIN_HELP_COMPONENTS_NEWSFEEDS_FEEDS="News Feeds" COM_ADMIN_HELP_COMPONENTS_NEWSFEEDS_FEEDS_EDIT="News Feeds: New/Edit" COM_ADMIN_HELP_COMPONENTS_POST_INSTALLATION_MESSAGES="Post-Installation Messages" COM_ADMIN_HELP_COMPONENTS_PRIVACY_CAPABILITIES="Privacy: Extension Capabilities" COM_ADMIN_HELP_COMPONENTS_PRIVACY_CONSENTS="Privacy: Consents" COM_ADMIN_HELP_COMPONENTS_PRIVACY_DASHBOARD="Privacy: Dashboard" COM_ADMIN_HELP_COMPONENTS_PRIVACY_REQUEST="Privacy: Review Information Request" COM_ADMIN_HELP_COMPONENTS_PRIVACY_REQUEST_EDIT="Privacy: New Information Request" COM_ADMIN_HELP_COMPONENTS_PRIVACY_REQUESTS="Privacy: Information Requests" COM_ADMIN_HELP_COMPONENTS_REDIRECT_MANAGER="Redirect: Links" COM_ADMIN_HELP_COMPONENTS_REDIRECT_MANAGER_EDIT="Redirect: Links - New/Edit" COM_ADMIN_HELP_COMPONENTS_SEARCH="Search" COM_ADMIN_HELP_COMPONENTS_TAGS_MANAGER="Tags" COM_ADMIN_HELP_COMPONENTS_TAGS_MANAGER_EDIT="Tags: New/Edit" COM_ADMIN_HELP_COMPONENTS_WEBLINKS_CATEGORIES="Web Links: Categories" COM_ADMIN_HELP_COMPONENTS_WEBLINKS_CATEGORIES_EDIT="Web Links: Categories - New/Edit" COM_ADMIN_HELP_COMPONENTS_WEBLINKS_LINKS="Web Links" COM_ADMIN_HELP_COMPONENTS_WEBLINKS_LINKS_EDIT="Web Links: New/Edit" COM_ADMIN_HELP_CONTENT_ARTICLE_MANAGER="Articles" COM_ADMIN_HELP_CONTENT_ARTICLE_MANAGER_EDIT="Articles: New/Edit" COM_ADMIN_HELP_CONTENT_FEATURED_ARTICLES="Articles: Featured " COM_ADMIN_HELP_CONTENT_MEDIA_MANAGER="Media" COM_ADMIN_HELP_EXTENSIONS_EXTENSION_MANAGER_DATABASE="Extensions: Check Database" COM_ADMIN_HELP_EXTENSIONS_EXTENSION_MANAGER_DISCOVER="Extensions: Discover" COM_ADMIN_HELP_EXTENSIONS_EXTENSION_MANAGER_INSTALL="Extensions: Install" COM_ADMIN_HELP_EXTENSIONS_EXTENSION_MANAGER_LANGUAGES="Extensions: Install Accredited Language Translations" COM_ADMIN_HELP_EXTENSIONS_EXTENSION_MANAGER_MANAGE="Extensions: Manage" COM_ADMIN_HELP_EXTENSIONS_EXTENSION_MANAGER_UPDATE="Extensions: Update" COM_ADMIN_HELP_EXTENSIONS_EXTENSION_MANAGER_WARNINGS="Extensions: Warnings" COM_ADMIN_HELP_EXTENSIONS_LANGUAGE_MANAGER_CONTENT="Languages: Content" COM_ADMIN_HELP_EXTENSIONS_LANGUAGE_MANAGER_EDIT="Languages: New/Edit" COM_ADMIN_HELP_EXTENSIONS_LANGUAGE_MANAGER_INSTALLED="Languages: Installed" COM_ADMIN_HELP_EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES="Languages: Overrides" COM_ADMIN_HELP_EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES_EDIT="Languages: Overrides - New/Edit" COM_ADMIN_HELP_EXTENSIONS_MODULE_MANAGER="Modules" COM_ADMIN_HELP_EXTENSIONS_MODULE_MANAGER_EDIT="Modules: Edit" COM_ADMIN_HELP_EXTENSIONS_PLUGIN_MANAGER="Plugins" COM_ADMIN_HELP_EXTENSIONS_PLUGIN_MANAGER_EDIT="Plugins: New/Edit" COM_ADMIN_HELP_EXTENSIONS_TEMPLATE_MANAGER_STYLES="Templates: Styles" COM_ADMIN_HELP_EXTENSIONS_TEMPLATE_MANAGER_STYLES_EDIT="Templates: Styles - Edit" COM_ADMIN_HELP_EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES="Templates" COM_ADMIN_HELP_EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES_EDIT="Templates: Edit" COM_ADMIN_HELP_EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES_EDIT_SOURCE="Templates: Source - Edit" COM_ADMIN_HELP_GLOSSARY="Glossary" COM_ADMIN_HELP_MENUS_MENU_ITEM_MANAGER="Menu: Items" COM_ADMIN_HELP_MENUS_MENU_ITEM_MANAGER_EDIT="Menu: Items New/Edit" COM_ADMIN_HELP_MENUS_MENU_MANAGER="Menus" COM_ADMIN_HELP_MENUS_MENU_MANAGER_EDIT="Menus: New/Edit" COM_ADMIN_HELP_SITE_GLOBAL_CONFIGURATION="Global Configuration" COM_ADMIN_HELP_SITE_MAINTENANCE_CLEAR_CACHE="Cache: Clear Cache" COM_ADMIN_HELP_SITE_MAINTENANCE_GLOBAL_CHECK-IN="Global Check-in" COM_ADMIN_HELP_SITE_MAINTENANCE_PURGE_EXPIRED_CACHE="Cache: Clear Expired Cache" COM_ADMIN_HELP_SITE_SYSTEM_INFORMATION="System Information" COM_ADMIN_HELP_START_HERE="Start Here" COM_ADMIN_HELP_USERS_ACCESS_LEVELS="Users: Access Levels" COM_ADMIN_HELP_USERS_ACCESS_LEVELS_EDIT="Users: Access Levels - New/Edit" COM_ADMIN_HELP_USERS_DEBUG_USER="Users: Debug Users Permissions" COM_ADMIN_HELP_USERS_GROUPS="Users: Groups" COM_ADMIN_HELP_USERS_GROUPS_EDIT="Users: Groups - New/Edit" COM_ADMIN_HELP_USERS_MASS_MAIL_USERS="Mass Mail Users" COM_ADMIN_HELP_USERS_USER_NOTES="Users: User Notes" COM_ADMIN_HELP_USERS_USER_NOTES_EDIT="Users: User Notes - New/Edit" COM_ADMIN_HELP_USERS_USER_MANAGER="Users" COM_ADMIN_HELP_USERS_USER_MANAGER_EDIT="Users: New/Edit" COM_ADMIN_ICONV_AVAILABLE="Iconv Available" COM_ADMIN_INFORMATION="System Information" COM_ADMIN_JOOMLA_VERSION="Joomla! Version" COM_ADMIN_LATEST_VERSION_CHECK="Latest Version Check" COM_ADMIN_LICENSE="License" COM_ADMIN_LOG_DIRECTORY="(Log folder)" COM_ADMIN_MAGIC_QUOTES="Magic Quotes" COM_ADMIN_MAX_INPUT_VARS="Maximum Input Variables" COM_ADMIN_MBSTRING_ENABLED="Multibyte String (mbstring) Enabled" COM_ADMIN_MCRYPT_ENABLED="Mcrypt Enabled" COM_ADMIN_NA="n/a" COM_ADMIN_OPEN_BASEDIR="Open basedir" COM_ADMIN_OUTPUT_BUFFERING="Output Buffering" COM_ADMIN_PHP_BUILT_ON="PHP Built On" COM_ADMIN_PHP_INFORMATION="PHP Information" COM_ADMIN_PHP_SETTINGS="PHP Settings" COM_ADMIN_PHP_VERSION="PHP Version" COM_ADMIN_PHPINFO_DISABLED="The built in phpinfo() function has been disabled by your host." COM_ADMIN_PLATFORM_VERSION="Joomla! Platform Version" COM_ADMIN_REGISTER_GLOBALS="Register Globals" COM_ADMIN_RELEVANT_PHP_SETTINGS="Relevant PHP Settings" COM_ADMIN_SAFE_MODE="Safe Mode" COM_ADMIN_SEARCH="Search" COM_ADMIN_SESSION_AUTO_START="Session Auto Start" COM_ADMIN_SESSION_SAVE_PATH="Session Save Path" COM_ADMIN_SETTING="Setting" COM_ADMIN_SHORT_OPEN_TAGS="Short Open Tags" COM_ADMIN_START_HERE="Start here" COM_ADMIN_STATUS="Status" COM_ADMIN_SYSTEM_INFO="System Info" COM_ADMIN_SYSTEM_INFORMATION="System Information" COM_ADMIN_TEMP_DIRECTORY="(Temp folder)" COM_ADMIN_UNWRITABLE="Unwritable" COM_ADMIN_USER_ACCOUNT_DETAILS="My Profile Details" COM_ADMIN_USER_AGENT="User Agent" COM_ADMIN_USER_FIELD_BACKEND_LANGUAGE_DESC="Select the Language for the Administrator Backend interface. This will only affect this User." COM_ADMIN_USER_FIELD_BACKEND_LANGUAGE_LABEL="Backend Language" COM_ADMIN_USER_FIELD_BACKEND_TEMPLATE_DESC="Select the template style for the Administrator Backend interface. This will only affect this User." COM_ADMIN_USER_FIELD_BACKEND_TEMPLATE_LABEL="Backend Template Style" COM_ADMIN_USER_FIELD_EDITOR_DESC="Editor for this user." COM_ADMIN_USER_FIELD_EDITOR_LABEL="Editor" COM_ADMIN_USER_FIELD_EMAIL_DESC="Enter an email address for the user." COM_ADMIN_USER_FIELD_FRONTEND_LANGUAGE_DESC="Select the Language for the Frontend interface. This will only affect this User." COM_ADMIN_USER_FIELD_FRONTEND_LANGUAGE_LABEL="Frontend Language" ; The following two strings are deprecated and will be removed with 4.0. COM_ADMIN_USER_FIELD_HELPSITE_DESC="Help site for this user." COM_ADMIN_USER_FIELD_HELPSITE_LABEL="Help Site" COM_ADMIN_USER_FIELD_LASTVISIT_DESC="Last visit date." COM_ADMIN_USER_FIELD_LASTVISIT_LABEL="Last Visit Date" COM_ADMIN_USER_FIELD_NAME_DESC="Enter the name of the user." COM_ADMIN_USER_FIELD_NOCHANGE_USERNAME_DESC="If you want to change your Username, please contact a site administrator." COM_ADMIN_USER_FIELD_PASSWORD1_MESSAGE="The passwords you entered do not match. Please enter your desired password in the password field and confirm your entry by entering it in the confirm password field." COM_ADMIN_USER_FIELD_PASSWORD2_DESC="Confirm the user's password." COM_ADMIN_USER_FIELD_PASSWORD2_LABEL="Confirm Password" COM_ADMIN_USER_FIELD_PASSWORD_DESC="Enter the password for the user." COM_ADMIN_USER_FIELD_REGISTERDATE_DESC="Registration date." COM_ADMIN_USER_FIELD_REGISTERDATE_LABEL="Registration Date" COM_ADMIN_USER_FIELD_TIMEZONE_DESC="Time zone for this user." COM_ADMIN_USER_FIELD_TIMEZONE_LABEL="Time Zone" COM_ADMIN_USER_FIELD_USERNAME_DESC="Enter the login name (Username) for the user." COM_ADMIN_USER_FIELD_USERNAME_LABEL="Login Name" COM_ADMIN_USER_HEADING_NAME="Name" COM_ADMIN_USER_SETTINGS_FIELDSET_LABEL="Basic Settings" COM_ADMIN_VALUE="Value" COM_ADMIN_VIEW="View" COM_ADMIN_VIEW_PROFILE_TITLE="My Profile" COM_ADMIN_WEBSERVER_TO_PHP_INTERFACE="WebServer to PHP Interface" COM_ADMIN_WEB_SERVER="Web Server" COM_ADMIN_WRITABLE="Writable" COM_ADMIN_XML_DESCRIPTION="Administration system information component." COM_ADMIN_XML_ENABLED="XML Enabled" COM_ADMIN_ZIP_ENABLED="Native ZIP Enabled" COM_ADMIN_ZLIB_ENABLED="Zlib Enabled" ; Messages COM_USERS_MSG_NOT_ENOUGH_INTEGERS_N="Password does not have enough digits. At least %s digits are required." COM_USERS_MSG_NOT_ENOUGH_INTEGERS_N_1="Password does not have enough digits. At least 1 digit is required." COM_USERS_MSG_NOT_ENOUGH_LOWERCASE_LETTERS_N="Password does not have enough lower case characters. At least %s lower case characters are required." COM_USERS_MSG_NOT_ENOUGH_LOWERCASE_LETTERS_N_1="Password does not have enough lower case characters. At least 1 lower case character is required." COM_USERS_MSG_NOT_ENOUGH_SYMBOLS_N="Password does not have enough symbols. At least %s symbols are required." COM_USERS_MSG_NOT_ENOUGH_SYMBOLS_N_1="Password does not have enough symbols. At least 1 symbol is required." COM_USERS_MSG_NOT_ENOUGH_UPPERCASE_LETTERS_N="Password does not have enough upper case characters. At least %s upper case characters are required." COM_USERS_MSG_NOT_ENOUGH_UPPERCASE_LETTERS_N_1="Password does not have enough upper case characters. At least 1 upper case character is required." COM_USERS_MSG_PASSWORD_TOO_LONG="Password is too long. Passwords must be less than 100 characters." COM_USERS_MSG_PASSWORD_TOO_SHORT_N="Password is too short. Passwords must have at least %s characters." COM_USERS_MSG_SPACES_IN_PASSWORD="Password must not have spaces at the beginning or end." PKb��\㪁���'language/en-GB/en-GB.com_finder.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 COM_FINDER="Smart Search" COM_FINDER_MENU_SEARCH_VIEW_DEFAULT_TEXT="The default search layout." COM_FINDER_MENU_SEARCH_VIEW_DEFAULT_TITLE="Search" COM_FINDER_XML_DESCRIPTION="Smart Search" PKb��\�Kq��'language/en-GB/en-GB.mod_status.sys.ininu�[���; Joomla! Project ; Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved. ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 MOD_STATUS="User Status" MOD_STATUS_XML_DESCRIPTION="This module shows the status of the logged-in users and various shortcut links." MOD_STATUS_LAYOUT_DEFAULT="Default" PKb��\Q����manifests/libraries/fof.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?> <extension type="library" version="2.5" method="upgrade"> <name>FOF</name> <libraryname>fof</libraryname> <description>LIB_FOF_XML_DESCRIPTION</description> <creationDate>2015-04-22 13:15:32</creationDate> <author>Nicholas K. Dionysopoulos / Akeeba Ltd</author> <authorEmail>nicholas@akeebabackup.com</authorEmail> <authorUrl>https://www.akeebabackup.com</authorUrl> <copyright>(C)2011-2015 Nicholas K. Dionysopoulos</copyright> <license>GNU GPLv2 or later</license> <version>2.4.3</version> <packager>Akeeba Ltd</packager> <packagerurl>https://www.AkeebaBackup.com/download.html</packagerurl> <languages folder="_lang"> <language tag="en-GB">en-GB/en-GB.lib_fof.ini</language> </languages> <files folder="fof"> <folder>autoloader</folder> <folder>config</folder> <folder>controller</folder> <folder>database</folder> <folder>dispatcher</folder> <folder>download</folder> <folder>encrypt</folder> <folder>form</folder> <folder>hal</folder> <folder>inflector</folder> <folder>integration</folder> <folder>input</folder> <folder>layout</folder> <folder>less</folder> <folder>model</folder> <folder>platform</folder> <folder>query</folder> <folder>render</folder> <folder>string</folder> <folder>table</folder> <folder>template</folder> <folder>toolbar</folder> <folder>utils</folder> <folder>view</folder> <file>LICENSE.txt</file> <file>include.php</file> <file>version.txt</file> </files> </extension> PKb��\��r��manifests/libraries/phputf8.xmlnu�[���<?xml version="1.0" encoding="UTF-8" ?> <extension type="library" version="3.1"> <name>LIB_PHPUTF8</name> <libraryname>phputf8</libraryname> <version>0.5</version> <description>LIB_PHPUTF8_XML_DESCRIPTION</description> <creationDate>2006</creationDate> <copyright>Copyright various authors</copyright> <license>https://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license> <author>Harry Fuecks</author> <authorEmail>hfuecks@gmail.com</authorEmail> <authorUrl>http://sourceforge.net/projects/phputf8</authorUrl> <packager>Joomla!</packager> <packagerurl>https://www.joomla.org</packagerurl> <files folder="libraries"> <folder>phputf8</folder> </files> </extension> PKb��\��}appmanifests/libraries/joomla.xmlnu�[���<?xml version="1.0" encoding="UTF-8" ?> <extension type="library" version="3.1"> <name>LIB_JOOMLA</name> <libraryname>joomla</libraryname> <version>13.1</version> <description>LIB_JOOMLA_XML_DESCRIPTION</description> <creationDate>2008</creationDate> <copyright>Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <author>Joomla! Project</author> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>https://www.joomla.org</authorUrl> <packager>Joomla!</packager> <packagerurl>https://www.joomla.org</packagerurl> <files folder="libraries"> <folder>compat</folder> <folder>joomla</folder> <folder>legacy</folder> <file>import.legacy.php</file> <file>import.php</file> <file>loader.php</file> <file>platform.php</file> </files> </extension> PKb��\X�f��!manifests/libraries/simplepie.xmlnu�[���<?xml version="1.0" encoding="UTF-8" ?> <extension type="library" version="3.1"> <name>SimplePie</name> <libraryname>simplepie</libraryname> <version>1.2</version> <description>LIB_SIMPLEPIE_XML_DESCRIPTION</description> <creationDate>2004</creationDate> <copyright>Copyright (c) 2004-2009, Ryan Parman and Geoffrey Sneddon</copyright> <license>http://www.opensource.org/licenses/bsd-license.php BSD License</license> <author>SimplePie</author> <authorEmail></authorEmail> <authorUrl>http://simplepie.org/</authorUrl> <packager>Joomla!</packager> <packagerurl>http://www.joomla.org</packagerurl> <files folder="libraries"> <folder>simplepie</folder> </files> </extension> PKb��\ �S��$manifests/libraries/idna_convert.xmlnu�[���<?xml version="1.0" encoding="UTF-8" ?> <extension type="library" version="3.1"> <name>LIB_IDNA</name> <libraryname>idna_convert</libraryname> <version>0.8.0</version> <description>LIB_IDNA_XML_DESCRIPTION</description> <creationDate>2004</creationDate> <copyright>2004-2011 phlyLabs Berlin, http://phlylabs.de</copyright> <license>https://www.gnu.org/licenses/lgpl-2.1.html GNU/LGPL</license> <author>phlyLabs</author> <authorEmail>phlymail@phlylabs.de</authorEmail> <authorUrl>http://phlylabs.de</authorUrl> <packager>Joomla!</packager> <packagerurl>https://www.joomla.org</packagerurl> <files folder="libraries"> <folder>idna_convert</folder> </files> </extension> PKb��\ْ�TFFmanifests/libraries/phpass.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?> <extension type="library" version="3.2" method="upgrade"> <name>LIB_PHPASS</name> <libraryname>phpass</libraryname> <description>LIB_PHPASS_XML_DESCRIPTION</description> <creationDate>2004-2006</creationDate> <author>Solar Designer</author> <authorEmail>solar@openwall.com</authorEmail> <authorUrl>http://www.openwall.com/phpass/</authorUrl> <license>PD / GWC</license> <version>0.3</version> <packagerurl>http://www.openwall.com/phpass/</packagerurl> <files folder="phpass"> <file>PasswordHash.php</file> </files> </extension> PKb��\�V�manifests/packages/index.htmlnu�[���<!DOCTYPE html><title></title> PKb��\m��Umanifests/files/joomla.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?> <extension version="3.6" type="file" method="upgrade"> <name>files_joomla</name> <author>Joomla! Project</author> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <version>3.9.10</version> <creationDate>July 2019</creationDate> <description>FILES_JOOMLA_XML_DESCRIPTION</description> <scriptfile>administrator/components/com_admin/script.php</scriptfile> <update> <schemas> <schemapath type="mysql">administrator/components/com_admin/sql/updates/mysql</schemapath> <schemapath type="sqlsrv">administrator/components/com_admin/sql/updates/sqlazure</schemapath> <schemapath type="sqlazure">administrator/components/com_admin/sql/updates/sqlazure</schemapath> <schemapath type="postgresql">administrator/components/com_admin/sql/updates/postgresql</schemapath> </schemas> </update> <fileset> <files> <folder>administrator</folder> <folder>bin</folder> <folder>cache</folder> <folder>cli</folder> <folder>components</folder> <folder>images</folder> <folder>includes</folder> <folder>language</folder> <folder>layouts</folder> <folder>libraries</folder> <folder>media</folder> <folder>modules</folder> <folder>plugins</folder> <folder>templates</folder> <folder>tmp</folder> <file>htaccess.txt</file> <file>web.config.txt</file> <file>LICENSE.txt</file> <file>README.txt</file> <file>index.php</file> </files> </fileset> <updateservers> <server name="Joomla! Core" type="collection">https://update.joomla.org/core/list.xml</server> </updateservers> </extension> PKb��\(O�h(("components/com_tags/tables/tag.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\String\StringHelper; /** * Tags table * * @since 3.1 */ class TagsTableTag extends JTableNested { /** * Constructor * * @param JDatabaseDriver $db A database connector object */ public function __construct($db) { parent::__construct('#__tags', 'id', $db); JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_tags.tag')); } /** * Overloaded bind function * * @param array $array Named array * @param mixed $ignore An optional array or space separated list of properties * to ignore while binding. * * @return mixed Null if operation was satisfactory, otherwise returns an error string * * @see JTable::bind * @since 3.1 */ public function bind($array, $ignore = '') { if (isset($array['params']) && is_array($array['params'])) { $registry = new Registry($array['params']); $array['params'] = (string) $registry; } if (isset($array['metadata']) && is_array($array['metadata'])) { $registry = new Registry($array['metadata']); $array['metadata'] = (string) $registry; } if (isset($array['urls']) && is_array($array['urls'])) { $registry = new Registry($array['urls']); $array['urls'] = (string) $registry; } if (isset($array['images']) && is_array($array['images'])) { $registry = new Registry($array['images']); $array['images'] = (string) $registry; } return parent::bind($array, $ignore); } /** * Overloaded check method to ensure data integrity. * * @return boolean True on success. * * @since 3.1 * @throws UnexpectedValueException */ public function check() { // Check for valid name. if (trim($this->title) == '') { throw new UnexpectedValueException(sprintf('The title is empty')); } if (empty($this->alias)) { $this->alias = $this->title; } $this->alias = JApplicationHelper::stringURLSafe($this->alias, $this->language); if (trim(str_replace('-', '', $this->alias)) == '') { $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); } // Check the publish down date is not earlier than publish up. if ((int) $this->publish_down > 0 && $this->publish_down < $this->publish_up) { throw new UnexpectedValueException(sprintf('End publish date is before start publish date.')); } // Clean up keywords -- eliminate extra spaces between phrases // and cr (\r) and lf (\n) characters from string if (!empty($this->metakey)) { // Only process if not empty // Define array of characters to remove $bad_characters = array("\n", "\r", "\"", '<', '>'); // Remove bad characters $after_clean = StringHelper::str_ireplace($bad_characters, '', $this->metakey); // Create array using commas as delimiter $keys = explode(',', $after_clean); $clean_keys = array(); foreach ($keys as $key) { if (trim($key)) { // Ignore blank keywords $clean_keys[] = trim($key); } } // Put array back together delimited by ", " $this->metakey = implode(', ', $clean_keys); } // Clean up description -- eliminate quotes and <> brackets if (!empty($this->metadesc)) { // Only process if not empty $bad_characters = array("\"", '<', '>'); $this->metadesc = StringHelper::str_ireplace($bad_characters, '', $this->metadesc); } // Not Null sanity check $date = JFactory::getDate(); if (empty($this->params)) { $this->params = '{}'; } if (empty($this->metadesc)) { $this->metadesc = ''; } if (empty($this->metakey)) { $this->metakey = ''; } if (empty($this->metadata)) { $this->metadata = '{}'; } if (empty($this->urls)) { $this->urls = '{}'; } if (empty($this->images)) { $this->images = '{}'; } if (!(int) $this->checked_out_time) { $this->checked_out_time = $date->toSql(); } if (!(int) $this->modified_time) { $this->modified_time = $date->toSql(); } if (!(int) $this->modified_time) { $this->modified_time = $date->toSql(); } if (!(int) $this->publish_up) { $this->publish_up = $date->toSql(); } if (!(int) $this->publish_down) { $this->publish_down = $date->toSql(); } return true; } /** * Overriden JTable::store to set modified data and user id. * * @param boolean $updateNulls True to update fields even if they are null. * * @return boolean True on success. * * @since 3.1 */ public function store($updateNulls = false) { $date = JFactory::getDate(); $user = JFactory::getUser(); $this->modified_time = $date->toSql(); if ($this->id) { // Existing item $this->modified_user_id = $user->get('id'); } else { // New tag. A tag created and created_by field can be set by the user, // so we don't touch either of these if they are set. if (!(int) $this->created_time) { $this->created_time = $date->toSql(); } if (empty($this->created_user_id)) { $this->created_user_id = $user->get('id'); } } // Verify that the alias is unique $table = JTable::getInstance('Tag', 'TagsTable', array('dbo' => $this->_db)); if ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) { $this->setError(JText::_('COM_TAGS_ERROR_UNIQUE_ALIAS')); return false; } return parent::store($updateNulls); } /** * Method to delete a node and, optionally, its child nodes from the table. * * @param integer $pk The primary key of the node to delete. * @param boolean $children True to delete child nodes, false to move them up a level. * * @return boolean True on success. * * @since 3.1 */ public function delete($pk = null, $children = false) { $return = parent::delete($pk, $children); if ($return) { $helper = new JHelperTags; $helper->tagDeleteInstances($pk); } return $return; } } PKb��\���� 'components/com_tags/controllers/tag.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * The Tag Controller * * @since 3.1 */ class TagsControllerTag extends JControllerForm { /** * Method to check if you can add a new record. * * @param array $data An array of input data. * * @return boolean * * @since 3.1 */ protected function allowAdd($data = array()) { $user = JFactory::getUser(); return $user->authorise('core.create', 'com_tags'); } /** * Method to check if you can edit a record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 3.1 */ protected function allowEdit($data = array(), $key = 'id') { // Since there is no asset tracking and no categories, revert to the component permissions. return parent::allowEdit($data, $key); } /** * Method to run batch operations. * * @param object $model The model. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 3.1 */ public function batch($model = null) { $this->checkToken(); // Set the model $model = $this->getModel('Tag'); // Preset the redirect $this->setRedirect('index.php?option=com_tags&view=tags'); return parent::batch($model); } } PKb��\�~I#zz(components/com_tags/controllers/tags.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * The Tags List Controller * * @since 3.1 */ class TagsControllerTags extends JControllerAdmin { /** * Proxy for getModel * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config An optional associative array of configuration settings. * * @return JModelLegacy The model. * * @since 3.1 */ public function getModel($name = 'Tag', $prefix = 'TagsModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } /** * Rebuild the nested set tree. * * @return boolean False on failure or error, true on success. * * @since 3.1 */ public function rebuild() { $this->checkToken(); $this->setRedirect(JRoute::_('index.php?option=com_tags&view=tags', false)); $model = $this->getModel(); if ($model->rebuild()) { // Rebuild succeeded. $this->setMessage(JText::_('COM_TAGS_REBUILD_SUCCESS')); return true; } else { // Rebuild failed. $this->setMessage(JText::_('COM_TAGS_REBUILD_FAILURE')); return false; } } } PKb��\y6���components/com_tags/tags.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_tags</name> <author>Joomla! Project</author> <creationDate>December 2013</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.1.0</version> <description>COM_TAGS_XML_DESCRIPTION</description> <files folder="site"> <filename>controller.php</filename> <filename>metadata.xml</filename> <filename>newsfeeds.php</filename> <filename>router.php</filename> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="site"> <language tag="en-GB">language/en-GB.com_tags.ini</language> </languages> <administration> <files folder="admin"> <filename>tags.php</filename> <filename>config.xml</filename> <filename>controller.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_tags.ini</language> <language tag="en-GB">language/en-GB.com_tags.sys.ini</language> </languages> <menu link="option=com_tags" img="class:tags">com_tags</menu> </administration> </extension> PKb��\S�te)e)components/com_tags/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="taglist" label="COM_TAGS_CONFIG_TAG_SETTINGS_LABEL" description="COM_TAGS_CONFIG_TAG_SETTINGS_DESC"> <field name="tag_layout" type="componentlayout" label="COM_TAGS_CONFIG_TAGGED_ITEMS_FIELD_LAYOUT_LABEL" description="COM_TAGS_CONFIG_TAGGED_ITEMS_FIELD_LAYOUT_DESC" menuitems="true" extension="com_tags" view="tag" /> <field name="save_history" type="radio" label="JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL" description="JGLOBAL_SAVE_HISTORY_OPTIONS_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="history_limit" type="number" label="JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL" description="JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC" filter="integer" default="5" showon="save_history:1" /> <field name="show_tag_title" type="radio" label="COM_TAGS_SHOW_TAG_TITLE_LABEL" description="COM_TAGS_SHOW_TAG_TITLE_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_show_tag_image" type="radio" label="COM_TAGS_SHOW_TAG_IMAGE_LABEL" description="COM_TAGS_SHOW_TAG_IMAGE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_show_tag_description" type="radio" label="COM_TAGS_SHOW_TAG_DESCRIPTION_LABEL" description="COM_TAGS_SHOW_TAG_DESCRIPTION_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_image" type="media" label="COM_TAGS_TAG_LIST_MEDIA_LABEL" description="COM_TAGS_TAG_LIST_MEDIA_DESC" /> <field name="tag_list_orderby" type="list" label="JGLOBAL_FIELD_FIELD_ORDERING_LABEL" description="JGLOBAL_FIELD_FIELD_ORDERING_DESC" default="title" > <option value="c.core_title">JGLOBAL_TITLE</option> <option value="match_count">COM_TAGS_MATCH_COUNT</option> <option value="c.core_created_time">JGLOBAL_CREATED_DATE</option> <option value="c.core_modified_time">JGLOBAL_MODIFIED_DATE</option> <option value="c.core_publish_up">JGLOBAL_PUBLISHED_DATE</option> </field> <field name="tag_list_orderby_direction" type="radio" label="JGLOBAL_ORDER_DIRECTION_LABEL" description="JGLOBAL_ORDER_DIRECTION_DESC" class="btn-group btn-group-yesno" default="ASC" > <option value="ASC">JGLOBAL_ORDER_ASCENDING</option> <option value="DESC">JGLOBAL_ORDER_DESCENDING</option> </field> <field name="show_headings" type="radio" label="COM_TAGS_TAG_LIST_SHOW_HEADINGS_LABEL" description="COM_TAGS_TAG_LIST_SHOW_HEADINGS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_show_date" type="list" label="COM_TAGS_TAG_LIST_SHOW_DATE_DESC" description="COM_TAGS_TAG_LIST_SHOW_DATE_LABEL" default="0" > <option value="0">JHIDE</option> <option value="created">JGLOBAL_CREATED</option> <option value="modified">JGLOBAL_MODIFIED</option> <option value="published">JPUBLISHED</option> </field> <field name="tag_list_show_item_image" type="radio" label="COM_TAGS_SHOW_ITEM_IMAGE_LABEL" description="COM_TAGS_SHOW_ITEM_IMAGE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_show_item_description" type="radio" label="COM_TAGS_TAG_LIST_SHOW_ITEM_DESCRIPTION_LABEL" description="COM_TAGS_TAG_LIST_SHOW_ITEM_DESCRIPTION_DESC" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_item_maximum_characters" type="number" label="COM_TAGS_LIST_MAX_CHARACTERS_LABEL" description="COM_TAGS_LIST_MAX_CHARACTERS_DESC" filter="integer" showon="tag_list_show_item_description:1" /> </fieldset> <fieldset name="tagselection" label="COM_TAGS_CONFIG_SELECTION_SETTINGS_LABEL" description="COM_TAGS_CONFIG_SELECTION_SETTINGS_DESC"> <field name="min_term_length" type="integer" label="COM_TAGS_CONFIG_TAG_MIN_LENGTH_LABEL" description="COM_TAGS_CONFIG_TAG_MIN_LENGTH_DESC" first="1" last="3" step="1" default="3" /> <field name="return_any_or_all" type="radio" label="COM_TAGS_SEARCH_TYPE_LABEL" description="COM_TAGS_SEARCH_TYPE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">COM_TAGS_ANY</option> <option value="0">COM_TAGS_ALL</option> </field> <field name="include_children" type="radio" label="COM_TAGS_INCLUDE_CHILDREN_LABEL" description="COM_TAGS_INCLUDE_CHILDREN_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">COM_TAGS_INCLUDE</option> <option value="0">COM_TAGS_EXCLUDE</option> </field> <field name="maximum" type="number" label="COM_TAGS_LIST_MAX_LABEL" description="COM_TAGS_LIST_MAX_DESC" default="200" filter="integer" /> <field name="tag_list_language_filter" type="contentlanguage" label="COM_TAGS_FIELD_LANGUAGE_FILTER_LABEL" description="COM_TAGS_FIELD_LANGUAGE_FILTER_DESC" default="all" > <option value="all">JALL</option> <option value="current_language">JCURRENT</option> </field> </fieldset> <fieldset name="alltags" label="COM_TAGS_CONFIG_ALL_TAGS_SETTINGS_LABEL" description="COM_TAGS_CONFIG_ALL_TAGS_SETTINGS_DESC"> <field name="tags_layout" type="componentlayout" label="COM_TAGS_CONFIG_ALL_TAGS_FIELD_LAYOUT_LABEL" description="COM_TAGS_CONFIG_ALL_TAGS_FIELD_LAYOUT_DESC" menuitems="true" extension="com_tags" view="tags" /> <field name="all_tags_orderby" type="list" label="JGLOBAL_FIELD_FIELD_ORDERING_LABEL" description="JGLOBAL_FIELD_FIELD_ORDERING_DESC" default="title" > <option value="title">JGLOBAL_TITLE</option> <option value="hits">JGLOBAL_HITS</option> <option value="created_time">JGLOBAL_CREATED_DATE</option> <option value="modified_time">JGLOBAL_MODIFIED_DATE</option> <option value="publish_up">JGLOBAL_PUBLISHED_DATE</option> </field> <field name="all_tags_orderby_direction" type="radio" label="JGLOBAL_ORDER_DIRECTION_LABEL" description="JGLOBAL_ORDER_DIRECTION_DESC" class="btn-group btn-group-yesno" default="ASC" > <option value="ASC">JGLOBAL_ORDER_ASCENDING</option> <option value="DESC">JGLOBAL_ORDER_DESCENDING</option> </field> <field name="all_tags_show_tag_image" type="radio" label="COM_TAGS_SHOW_ITEM_IMAGE_LABEL" description="COM_TAGS_SHOW_ITEM_IMAGE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="all_tags_show_tag_description" type="radio" label="COM_TAGS_SHOW_ITEM_DESCRIPTION_LABEL" description="COM_TAGS_SHOW_ITEM_DESCRIPTION_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="all_tags_tag_maximum_characters" type="number" label="COM_TAGS_LIST_MAX_CHARACTERS_LABEL" description="COM_TAGS_LIST_MAX_CHARACTERS_DESC" filter="integer" showon="all_tags_show_tag_description:1" /> <field name="all_tags_show_tag_hits" type="radio" label="JGLOBAL_HITS" description="COM_TAGS_FIELD_CONFIG_HITS_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="shared" label="COM_TAGS_CONFIG_SHARED_SETTINGS_LABEL" description="COM_TAGS_CONFIG_SHARED_SETTINGS_DESC"> <field name="filter_field" type="radio" label="JGLOBAL_FILTER_FIELD_LABEL" description="JGLOBAL_FILTER_FIELD_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_pagination_limit" type="radio" label="JGLOBAL_DISPLAY_SELECT_LABEL" description="JGLOBAL_DISPLAY_SELECT_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_pagination" type="list" label="JGLOBAL_PAGINATION_LABEL" description="JGLOBAL_PAGINATION_DESC" default="2" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> <option value="2">JGLOBAL_AUTO</option> </field> <field name="show_pagination_results" type="radio" label="JGLOBAL_PAGINATION_RESULTS_LABEL" description="JGLOBAL_PAGINATION_RESULTS_DESC" class="btn-group btn-group-yesno" default="1" showon="show_pagination:1,2" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="data_entry" label="COM_TAGS_CONFIG_DATA_ENTRY_SETTINGS_LABEL" description="COM_TAGS_CONFIG_DATA_ENTRY_SETTINGS_DESC"> <field name="tag_field_ajax_mode" type="radio" label="COM_TAGS_TAG_FIELD_MODE_LABEL" description="COM_TAGS_TAG_FIELD_MODE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">COM_TAGS_TAG_FIELD_MODE_AJAX</option> <option value="0">COM_TAGS_TAG_FIELD_MODE_NESTED</option> </field> </fieldset> <fieldset name="integration" label="JGLOBAL_INTEGRATION_LABEL" description="COM_TAGS_CONFIG_INTEGRATION_SETTINGS_DESC" > <field name="integration_newsfeeds" type="note" label="JGLOBAL_FEED_TITLE" /> <field name="show_feed_link" type="radio" label="JGLOBAL_SHOW_FEED_LINK_LABEL" description="JGLOBAL_SHOW_FEED_LINK_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_tags" section="component" /> </fieldset> </config> PKb��\(��11components/com_tags/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_tags"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKb��\<�VZZcomponents/com_tags/tags.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); if (!JFactory::getUser()->authorise('core.manage', 'com_tags')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Tags'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\w�H��:components/com_tags/views/tags/tmpl/default_batch_body.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $published = $this->state->get('filter.published'); ?> <div class="container-fluid"> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> </div>PKb��\۫�Ĵ�<components/com_tags/views/tags/tmpl/default_batch_footer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <button type="button" class="btn" onclick="document.getElementById('batch-tag-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button type="submit" class="btn btn-success" onclick="Joomla.submitbutton('tag.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> PKb��\KC:�0�0/components/com_tags/views/tags/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\String\Inflector; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $app = JFactory::getApplication(); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = ($listOrder == 'a.lft' && strtolower($listDirn) == 'asc'); $extension = $this->escape($this->state->get('filter.extension')); $parts = explode('.', $extension); $component = $parts[0]; $section = null; $mode = false; $columns = 7; if (count($parts) > 1) { $section = $parts[1]; $inflector = Inflector::getInstance(); if (!$inflector->isPlural($section)) { $section = $inflector->toPlural($section); } } if ($section === 'categories') { $mode = true; $section = $component; $component = 'com_categories'; } if ($saveOrder) { $saveOrderingUrl = 'index.php?option=com_tags&task=tags.saveOrderAjax'; JHtml::_('sortablelist.sortable', 'categoryList', 'adminForm', strtolower($listDirn), $saveOrderingUrl, false, true); } ?> <form action="<?php echo JRoute::_('index.php?option=com_tags&view=tags'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty($this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php // Search tools bar echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="categoryList"> <thead> <tr> <th width="1%" class="nowrap hidden-phone center"> <?php echo JHtml::_('searchtools.sort', '', 'a.lft', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?> </th> <th width="1%"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_published')) : ?> <th width="1%" class="nowrap center hidden-phone"> <span class="icon-publish hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_TAGS_COUNT_PUBLISHED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_TAGS_COUNT_PUBLISHED_ITEMS'); ?></span></span> </th> <?php $columns++; ?> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_unpublished')) : ?> <th width="1%" class="nowrap center hidden-phone"> <span class="icon-unpublish hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_TAGS_COUNT_UNPUBLISHED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_TAGS_COUNT_UNPUBLISHED_ITEMS'); ?></span></span> </th> <?php $columns++; ?> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_archived')) : ?> <th width="1%" class="nowrap center hidden-phone"> <span class="icon-archive hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_TAGS_COUNT_ARCHIVED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_TAGS_COUNT_ARCHIVED_ITEMS'); ?></span></span> </th> <?php $columns++; ?> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_trashed')) : ?> <th width="1%" class="nowrap center hidden-phone"> <span class="icon-trash hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_TAGS_COUNT_TRASHED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_TAGS_COUNT_TRASHED_ITEMS'); ?></span></span> </th> <?php $columns++; ?> <?php endif; ?> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'a.access', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'a.language', $this->state->get('list.direction'), $this->state->get('list.ordering')); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="<?php echo $columns; ?>"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $orderkey = array_search($item->id, $this->ordering[$item->parent_id]); $canCreate = $user->authorise('core.create', 'com_tags'); $canEdit = $user->authorise('core.edit', 'com_tags'); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id')|| $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_tags') && $canCheckin; // Get the parents of item for sorting if ($item->level > 1) { $parentsStr = ''; $_currentParentId = $item->parent_id; $parentsStr = ' ' . $_currentParentId; for ($j = 0; $j < $item->level; $j++) { foreach ($this->ordering as $k => $v) { $v = implode('-', $v); $v = '-' . $v . '-'; if (strpos($v, '-' . $_currentParentId . '-') !== false) { $parentsStr .= ' ' . $k; $_currentParentId = $k; break; } } } } else { $parentsStr = ''; } ?> <tr class="row<?php echo $i % 2; ?>" sortable-group-id="<?php echo $item->parent_id; ?>" item-id="<?php echo $item->id; ?>" parents="<?php echo $parentsStr; ?>" level="<?php echo $item->level; ?>"> <td class="order nowrap center hidden-phone"> <?php $iconClass = ''; if (!$canChange) { $iconClass = ' inactive'; } elseif (!$saveOrder) { $iconClass = ' inactive tip-top hasTooltip" title="' . JHtml::_('tooltipText', 'JORDERINGDISABLED'); } ?> <span class="sortable-handler<?php echo $iconClass ?>"> <span class="icon-menu"></span> </span> <?php if ($canChange && $saveOrder) : ?> <input type="text" style="display:none" name="order[]" size="5" value="<?php echo $orderkey + 1; ?>" /> <?php endif; ?> </td> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td class="center"> <div class="btn-group"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'tags.', $canChange); ?> <?php // Create dropdown items and render the dropdown list. if ($canChange) { JHtml::_('actionsdropdown.' . ((int) $item->published === 2 ? 'un' : '') . 'archive', 'cb' . $i, 'tags'); JHtml::_('actionsdropdown.' . ((int) $item->published === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'tags'); echo JHtml::_('actionsdropdown.render', $this->escape($item->title)); } ?> </div> </td> <td> <?php echo JLayoutHelper::render('joomla.html.treeprefix', array('level' => $item->level)); ?> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'tags.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_tags&task=tag.edit&id=' . $item->id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <span class="small" title="<?php echo $this->escape($item->path); ?>"> <?php if (empty($item->note)) : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?> <?php else : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS_NOTE', $this->escape($item->alias), $this->escape($item->note)); ?> <?php endif; ?> </span> </td> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_published')) : ?> <td class="center btns hidden-phone"> <a class="badge <?php if ($item->count_published > 0) echo 'badge-success'; ?>" title="<?php echo JText::_('COM_TAGS_COUNT_PUBLISHED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . ($mode ? '&extension=' . $section : '&view=' . $section) . '&filter[tag]=' . (int) $item->id . '&filter[published]=1'); ?>"> <?php echo $item->count_published; ?></a> </td> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_unpublished')) : ?> <td class="center btns hidden-phone"> <a class="badge <?php if ($item->count_unpublished > 0) echo 'badge-important'; ?>" title="<?php echo JText::_('COM_TAGS_COUNT_UNPUBLISHED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . ($mode ? '&extension=' . $section : '&view=' . $section) . '&filter[tag]=' . (int) $item->id . '&filter[published]=0'); ?>"> <?php echo $item->count_unpublished; ?></a> </td> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_archived')) : ?> <td class="center btns hidden-phone"> <a class="badge <?php if ($item->count_archived > 0) echo 'badge-info'; ?>" title="<?php echo JText::_('COM_TAGS_COUNT_ARCHIVED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . ($mode ? '&extension=' . $section : '&view=' . $section) . '&filter[tag]=' . (int) $item->id . '&filter[published]=2'); ?>"> <?php echo $item->count_archived; ?></a> </td> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_trashed')) : ?> <td class="center btns hidden-phone"> <a class="badge <?php if ($item->count_trashed > 0) echo 'badge-inverse'; ?>" title="<?php echo JText::_('COM_TAGS_COUNT_TRASHED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . ($mode ? '&extension=' . $section : '&view=' . $section) . '&filter[tag]=' . (int) $item->id . '&filter[published]=-2'); ?>"> <?php echo $item->count_trashed; ?></a> </td> <?php endif; ?> <td class="small hidden-phone"> <?php echo $this->escape($item->access_title); ?> </td> <td class="small nowrap hidden-phone"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="hidden-phone"> <span title="<?php echo sprintf('%d-%d', $item->lft, $item->rgt); ?>"> <?php echo (int) $item->id; ?></span> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php // Load the batch processing form if user is allowed ?> <?php if ($user->authorise('core.create', 'com_tags') && $user->authorise('core.edit', 'com_tags') && $user->authorise('core.edit.state', 'com_tags')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_TAGS_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\���4��5components/com_tags/views/tags/tmpl/default_batch.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * @deprecated 3.4 Use default_batch_body and default_batch_footer */ defined('_JEXEC') or die; $published = $this->state->get('filter.published'); ?> <div class="modal hide fade" id="collapseModal"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3><?php echo JText::_('COM_TAGS_BATCH_OPTIONS'); ?></h3> </div> <div class="modal-body modal-batch"> <p><?php echo JText::_('COM_TAGS_BATCH_TIP'); ?></p> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> </div> <div class="modal-footer"> <button class="btn" type="button" onclick="document.getElementById('batch-tag-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button class="btn btn-primary" type="submit" onclick="Joomla.submitbutton('tag.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> </div> </div> PKb��\���||,components/com_tags/views/tags/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Tags view class for the Tags package. * * @since 3.1 */ class TagsViewTags extends JViewLegacy { protected $items; protected $pagination; protected $state; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Preprocess the list of items to find ordering divisions. foreach ($this->items as &$item) { $this->ordering[$item->parent_id][] = $item->id; } // Levels filter. $options = array(); $options[] = JHtml::_('select.option', '1', JText::_('J1')); $options[] = JHtml::_('select.option', '2', JText::_('J2')); $options[] = JHtml::_('select.option', '3', JText::_('J3')); $options[] = JHtml::_('select.option', '4', JText::_('J4')); $options[] = JHtml::_('select.option', '5', JText::_('J5')); $options[] = JHtml::_('select.option', '6', JText::_('J6')); $options[] = JHtml::_('select.option', '7', JText::_('J7')); $options[] = JHtml::_('select.option', '8', JText::_('J8')); $options[] = JHtml::_('select.option', '9', JText::_('J9')); $options[] = JHtml::_('select.option', '10', JText::_('J10')); $this->f_levels = $options; // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); } parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 3.1 */ protected function addToolbar() { $state = $this->get('State'); $canDo = JHelperContent::getActions('com_tags'); $user = JFactory::getUser(); // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); JToolbarHelper::title(JText::_('COM_TAGS_MANAGER_TAGS'), 'tags'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('tag.add'); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('tag.edit'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::publish('tags.publish', 'JTOOLBAR_PUBLISH', true); JToolbarHelper::unpublish('tags.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolbarHelper::archiveList('tags.archive'); } if ($canDo->get('core.admin')) { JToolbarHelper::checkin('tags.checkin'); } // Add a batch button if ($user->authorise('core.create', 'com_tags') && $user->authorise('core.edit', 'com_tags') && $user->authorise('core.edit.state', 'com_tags')) { $title = JText::_('JTOOLBAR_BATCH'); // Instantiate a new JLayoutFile instance and render the batch button $layout = new JLayoutFile('joomla.toolbar.batch'); $dhtml = $layout->render(array('title' => $title)); $bar->appendButton('Custom', $dhtml, 'batch'); } if ($state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'tags.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::trash('tags.trash'); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_tags'); } JToolbarHelper::help('JHELP_COMPONENTS_TAGS_MANAGER'); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { return array( 'a.lft' => JText::_('JGRID_HEADING_ORDERING'), 'a.state' => JText::_('JSTATUS'), 'a.title' => JText::_('JGLOBAL_TITLE'), 'a.access' => JText::_('JGRID_HEADING_ACCESS'), 'a.language' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.id' => JText::_('JGRID_HEADING_ID') ); } } PKb��\�V��3components/com_tags/views/tag/tmpl/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <?php echo JHtml::_('bootstrap.startAccordion', 'categoryOptions', array('active' => 'collapse0')); $fieldSets = $this->form->getFieldsets('params'); $i = 0; foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_TAGS_' . $name . '_FIELDSET_LABEL'; echo JHtml::_('bootstrap.addSlide', 'categoryOptions', JText::_($label), 'collapse' . ($i++)); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">' . $this->escape(JText::_($fieldSet->description)) . '</p>'; endif; ?> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <div class="control-group"> <div class="control-label"> <?php echo $field->label; ?> </div> <div class="controls"> <?php echo $field->input; ?> </div> </div> <?php endforeach; ?> <?php if ($name == 'basic') : ?> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('note'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('note'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('tag_layout'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('tag_layout'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('tag_link_class'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('tag_link_class'); ?> </div> </div> <?php endif; echo JHtml::_('bootstrap.endSlide'); endforeach; echo JHtml::_('bootstrap.endAccordion'); PKb��\fi���+components/com_tags/views/tag/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', 'select'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'tag.cancel' || document.formvalidator.isValid(document.getElementById('item-form'))) { " . $this->form->getField('description')->save() . " Joomla.submitform(task, document.getElementById('item-form')); } }; "); // Fieldsets to not automatically render by /layouts/joomla/edit/params.php $this->ignore_fieldsets = array('jmetadata'); ?> <form action="<?php echo JRoute::_('index.php?option=com_tags&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="item-form" class="form-validate"> <?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?> <div class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'details')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'details', JText::_('COM_TAGS_FIELDSET_DETAILS')); ?> <div class="row-fluid"> <div class="span9"> <div class="form-vertical"> <?php echo $this->form->renderField('description'); ?> </div> </div> <div class="span3"> <?php echo JLayoutHelper::render('joomla.edit.global', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'publishing', JText::_('JGLOBAL_FIELDSET_PUBLISHING')); ?> <div class="row-fluid form-horizontal-desktop"> <div class="span6"> <?php echo JLayoutHelper::render('joomla.edit.publishingdata', $this); ?> </div> <div class="span6"> <?php echo JLayoutHelper::render('joomla.edit.metadata', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> </div> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\Ǟ&�ll4components/com_tags/views/tag/tmpl/edit_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="control-group"> <?php echo $this->form->getLabel('metadesc'); ?> <div class="controls"> <?php echo $this->form->getInput('metadesc'); ?> </div> </div> <div class="control-group"> <?php echo $this->form->getLabel('metakey'); ?> <div class="controls"> <?php echo $this->form->getInput('metakey'); ?> </div> </div> <?php foreach ($this->form->getGroup('metadata') as $field) : ?> <div class="control-group"> <?php if (!$field->hidden) : ?> <?php echo $field->label; ?> <?php endif; ?> <div class="controls"> <?php echo $field->input; ?> </div> </div> <?php endforeach; ?> PKb��\� �� � +components/com_tags/views/tag/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Tags component * * @since 3.1 */ class TagsViewTag extends JViewLegacy { protected $form; protected $item; protected $state; protected $assoc; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); $this->canDo = JHelperContent::getActions('com_tags'); $this->assoc = $this->get('Assoc'); $input = JFactory::getApplication()->input; // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $input->set('hidemainmenu', true); $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 3.1 * * @return void */ protected function addToolbar() { $user = JFactory::getUser(); $userId = $user->get('id'); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $userId); // Need to load the menu language file as mod_menu hasn't been loaded yet. $lang = JFactory::getLanguage(); $lang->load('com_tags', JPATH_BASE, null, false, true) || $lang->load('com_tags', JPATH_ADMINISTRATOR . '/components/com_tags', null, false, true); // Get the results for each action. $canDo = $this->canDo; $title = JText::_('COM_TAGS_BASE_' . ($isNew ? 'ADD' : 'EDIT') . '_TITLE'); /** * Prepare the toolbar. * If it is new we get: `tag tag-add add` * else we get `tag tag-edit edit` */ JToolbarHelper::title($title, 'tag tag-' . ($isNew ? 'add add' : 'edit edit')); // For new records, check the create permission. if ($isNew) { JToolbarHelper::apply('tag.apply'); JToolbarHelper::save('tag.save'); JToolbarHelper::save2new('tag.save2new'); JToolbarHelper::cancel('tag.cancel'); } // If not checked out, can save the item. else { // Since it's an existing record, check the edit permission, or fall back to edit own if the owner. $itemEditable = $canDo->get('core.edit') || ($canDo->get('core.edit.own') && $this->item->created_user_id == $userId); // Can't save the record if it's checked out and editable if (!$checkedOut && $itemEditable) { JToolbarHelper::apply('tag.apply'); JToolbarHelper::save('tag.save'); if ($canDo->get('core.create')) { JToolbarHelper::save2new('tag.save2new'); } } // If an existing item, can save to a copy. if ($canDo->get('core.create')) { JToolbarHelper::save2copy('tag.save2copy'); } if (JComponentHelper::isEnabled('com_contenthistory') && $this->state->params->get('save_history', 0) && $itemEditable) { JToolbarHelper::versions('com_tags.tag', $this->item->id); } JToolbarHelper::cancel('tag.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_COMPONENTS_TAGS_MANAGER_EDIT'); JToolbarHelper::divider(); } } PKb��\���,��$components/com_tags/helpers/tags.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Tags helper. * * @since 3.1 * @deprecated 4.0 */ class TagsHelper extends JHelperContent { /** * Configure the Submenu links. * * @param string $extension The extension. * * @return void * * @since 3.1 * @deprecated 4.0 */ public static function addSubmenu($extension) { $parts = explode('.', $extension); $component = $parts[0]; // Avoid nonsense situation. if ($component == 'tags') { return; } // Try to find the component helper. $file = JPath::clean(JPATH_ADMINISTRATOR . '/components/com_tags/helpers/tags.php'); if (file_exists($file)) { $cName = 'TagsHelper'; JLoader::register($cName, $file); if (class_exists($cName)) { if (is_callable(array($cName, 'addSubmenu'))) { $lang = JFactory::getLanguage(); // Loading language file from administrator/language directory then administrator/components/<extension>/language $lang->load($component, JPATH_BASE, null, false, true) || $lang->load($component, JPath::clean(JPATH_ADMINISTRATOR . '/components/' . $component), null, false, true); } } } } } PKb��\°0���(components/com_tags/models/forms/tag.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <field name="id" type="number" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" default="0" class="readonly" readonly="true" /> <field name="hits" type="number" label="JGLOBAL_HITS" description="COM_TAGS_FIELD_HITS_DESC" class="readonly" default="0" readonly="true" /> <field name="parent_id" type="tag" label="COM_TAGS_FIELD_PARENT_LABEL" description="COM_TAGS_FIELD_PARENT_DESC" mode="nested" validate="notequals" field="id" parent="parent" > <option value="1">JNONE</option> </field> <field name="lft" type="hidden" filter="unset" /> <field name="rgt" type="hidden" filter="unset" /> <field name="level" type="hidden" filter="unset" /> <field name="path" type="text" label="CATEGORIES_PATH_LABEL" description="CATEGORIES_PATH_DESC" class="readonly" size="40" readonly="true" /> <field name="title" type="text" label="JGLOBAL_TITLE" description="JFIELD_TITLE_DESC" class="input-xxlarge input-large-text" size="40" required="true" /> <field name="note" type="text" label="COM_TAGS_FIELD_NOTE_LABEL" description="COM_TAGS_FIELD_NOTE_DESC" maxlength="255" class="span12" size="40" /> <field name="description" type="editor" label="JGLOBAL_DESCRIPTION" description="COM_TAGS_DESCRIPTION_DESC" filter="JComponentHelper::filterText" buttons="true" hide="readmore,pagebreak" /> <field name="published" type="list" label="JSTATUS" description="JFIELD_PUBLISHED_DESC" class="chzn-color-state" default="1" size="1" > <option value="1">JPUBLISHED</option> <option value="0">JUNPUBLISHED</option> <option value="2">JARCHIVED</option> <option value="-2">JTRASHED</option> </field> <field name="checked_out" type="hidden" filter="unset" /> <field name="checked_out_time" type="hidden" filter="unset" /> <field name="access" type="accesslevel" label="JFIELD_ACCESS_LABEL" description="JFIELD_ACCESS_DESC" /> <field name="metadesc" type="textarea" label="JFIELD_META_DESCRIPTION_LABEL" description="JFIELD_META_DESCRIPTION_DESC" rows="3" cols="40" /> <field name="metakey" type="textarea" label="JFIELD_META_KEYWORDS_LABEL" description="JFIELD_META_KEYWORDS_DESC" rows="3" cols="40" /> <field name="alias" type="text" label="JFIELD_ALIAS_LABEL" description="JFIELD_ALIAS_DESC" hint="JFIELD_ALIAS_PLACEHOLDER" size="40" /> <field name="created_user_id" type="user" label="JGLOBAL_FIELD_CREATED_BY_LABEL" description="JGLOBAL_FIELD_CREATED_BY_DESC" /> <field name="created_by_alias" type="text" label="JGLOBAL_FIELD_CREATED_BY_ALIAS_LABEL" description="JGLOBAL_FIELD_CREATED_BY_ALIAS_DESC" labelclass="control-label" size="20" /> <field name="created_time" type="calendar" label="JGLOBAL_CREATED_DATE" description="COM_TAGS_FIELD_CREATED_DATE_DESC" class="readonly" translateformat="true" showtime="true" filter="user_utc" readonly="true" /> <field name="modified_user_id" type="user" label="JGLOBAL_FIELD_MODIFIED_BY_LABEL" class="readonly" readonly="true" filter="unset" /> <field name="modified_time" type="calendar" label="JGLOBAL_FIELD_MODIFIED_LABEL" description="COM_TAGS_FIELD_MODIFIED_DESC" class="readonly" translateformat="true" showtime="true" filter="user_utc" readonly="true" /> <field name="language" type="contentlanguage" label="JFIELD_LANGUAGE_LABEL" description="COM_TAGS_FIELD_LANGUAGE_DESC" > <option value="*">JALL</option> </field> <field name="version_note" type="text" label="JGLOBAL_FIELD_VERSION_NOTE_LABEL" description="JGLOBAL_FIELD_VERSION_NOTE_DESC" maxlength="255" class="span12" size="45" labelclass="control-label" /> <fields name="params" label="JGLOBAL_FIELDSET_DISPLAY_OPTIONS"> <fieldset name="basic" label="COM_TAGS_BASIC_FIELDSET_LABEL" > <field name="tag_layout" type="componentlayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_COMPONENT_LAYOUT_DESC" labelclass="control-label" useglobal="true" extension="com_tags" view="tag" /> <field name="tag_link_class" type="text" label="COM_TAGS_FIELD_TAG_LINK_CLASS" description="COM_TAGS_FIELD_TAG_LINK_CLASS_DESC" labelclass="control-label" size="20" default="label label-info" /> </fieldset> </fields> <fields name="images"> <fieldset name="images" label="JGLOBAL_FIELDSET_IMAGE_OPTIONS"> <field name="image_intro" type="media" label="COM_TAGS_FIELD_INTRO_LABEL" description="COM_TAGS_FIELD_INTRO_DESC" labelclass="control-label" /> <field name="float_intro" type="list" label="COM_TAGS_FLOAT_LABEL" description="COM_TAGS_FLOAT_DESC" labelclass="control-label" > <option value="">JGLOBAL_SELECT_AN_OPTION</option> <option value="right">COM_TAGS_RIGHT</option> <option value="left">COM_TAGS_LEFT</option> <option value="none">COM_TAGS_NONE</option> </field> <field name="image_intro_alt" type="text" label="COM_TAGS_FIELD_IMAGE_ALT_LABEL" description="COM_TAGS_FIELD_IMAGE_ALT_DESC" labelclass="control-label" size="20" /> <field name="image_intro_caption" type="text" label="COM_TAGS_FIELD_IMAGE_CAPTION_LABEL" description="COM_TAGS_FIELD_IMAGE_CAPTION_DESC" size="20" labelclass="control-label" /> <field name="spacer1" type="spacer" hr="true" /> <field name="image_fulltext" type="media" label="COM_TAGS_FIELD_FULL_LABEL" description="COM_TAGS_FIELD_FULL_DESC" labelclass="control-label" /> <field name="float_fulltext" type="list" label="COM_TAGS_FLOAT_LABEL" description="COM_TAGS_FLOAT_DESC" labelclass="control-label" > <option value="">JGLOBAL_SELECT_AN_OPTION</option> <option value="right">COM_TAGS_RIGHT</option> <option value="left">COM_TAGS_LEFT</option> <option value="none">COM_TAGS_NONE</option> </field> <field name="image_fulltext_alt" type="text" label="COM_TAGS_FIELD_IMAGE_ALT_LABEL" description="COM_TAGS_FIELD_IMAGE_ALT_DESC" labelclass="control-label" size="20" /> <field name="image_fulltext_caption" type="text" label="COM_TAGS_FIELD_IMAGE_CAPTION_LABEL" description="COM_TAGS_FIELD_IMAGE_CAPTION_DESC" labelclass="control-label" size="20" /> </fieldset> </fields> <fields name="metadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS"> <fieldset name="jmetadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS"> <field name="author" type="text" label="JAUTHOR" description="JFIELD_METADATA_AUTHOR_DESC" size="30" /> <field name="robots" type="list" label="JFIELD_METADATA_ROBOTS_LABEL" description="JFIELD_METADATA_ROBOTS_DESC" > <option value="">JGLOBAL_USE_GLOBAL</option> <option value="index, follow">JGLOBAL_INDEX_FOLLOW</option> <option value="noindex, follow">JGLOBAL_NOINDEX_FOLLOW</option> <option value="index, nofollow">JGLOBAL_INDEX_NOFOLLOW</option> <option value="noindex, nofollow">JGLOBAL_NOINDEX_NOFOLLOW</option> </field> </fieldset> </fields> </form> PKb��\6q�u�&�&"components/com_tags/models/tag.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\String\StringHelper; /** * Tags Component Tag Model * * @since 3.1 */ class TagsModelTag extends JModelAdmin { /** * @var string The prefix to use with controller messages. * @since 3.1 */ protected $text_prefix = 'COM_TAGS'; /** * @var string The type alias for this content type. * @since 3.2 */ public $typeAlias = 'com_tags.tag'; /** * Allowed batch commands * * @var array * @since 3.7.0 */ protected $batch_commands = array( 'assetgroup_id' => 'batchAccess', 'language_id' => 'batchLanguage', ); /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. * * @since 3.1 */ protected function canDelete($record) { if (empty($record->id) || $record->published != -2) { return false; } return parent::canDelete($record); } /** * Method to get a table object, load it if necessary. * * @param string $type The table name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A JTable object * * @since 3.1 */ public function getTable($type = 'Tag', $prefix = 'TagsTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Auto-populate the model state. * * @note Calling getState in this method will result in recursion. * * @return void * * @since 3.1 */ protected function populateState() { $app = JFactory::getApplication('administrator'); $parentId = $app->input->getInt('parent_id'); $this->setState('tag.parent_id', $parentId); // Load the User state. $pk = $app->input->getInt('id'); $this->setState($this->getName() . '.id', $pk); // Load the parameters. $params = JComponentHelper::getParams('com_tags'); $this->setState('params', $params); } /** * Method to get a tag. * * @param integer $pk An optional id of the object to get, otherwise the id from the model state is used. * * @return mixed Tag data object on success, false on failure. * * @since 3.1 */ public function getItem($pk = null) { if ($result = parent::getItem($pk)) { // Prime required properties. if (empty($result->id)) { $result->parent_id = $this->getState('tag.parent_id'); } // Convert the metadata field to an array. $registry = new Registry($result->metadata); $result->metadata = $registry->toArray(); // Convert the images field to an array. $registry = new Registry($result->images); $result->images = $registry->toArray(); // Convert the urls field to an array. $registry = new Registry($result->urls); $result->urls = $registry->toArray(); // Convert the created and modified dates to local user time for display in the form. $tz = new DateTimeZone(JFactory::getApplication()->get('offset')); if ((int) $result->created_time) { $date = new JDate($result->created_time); $date->setTimezone($tz); $result->created_time = $date->toSql(true); } else { $result->created_time = null; } if ((int) $result->modified_time) { $date = new JDate($result->modified_time); $date->setTimezone($tz); $result->modified_time = $date->toSql(true); } else { $result->modified_time = null; } } return $result; } /** * Method to get the row form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure * * @since 3.1 */ public function getForm($data = array(), $loadData = true) { $jinput = JFactory::getApplication()->input; // Get the form. $form = $this->loadForm('com_tags.tag', 'tag', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } $user = JFactory::getUser(); if (!$user->authorise('core.edit.state', 'com_tags' . $jinput->get('id'))) { // Disable fields for display. $form->setFieldAttribute('ordering', 'disabled', 'true'); $form->setFieldAttribute('published', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is a record you can edit. $form->setFieldAttribute('ordering', 'filter', 'unset'); $form->setFieldAttribute('published', 'filter', 'unset'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 3.1 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_tags.edit.tag.data', array()); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_tags.tag', $data); return $data; } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 3.1 */ public function save($data) { $dispatcher = JEventDispatcher::getInstance(); $table = $this->getTable(); $input = JFactory::getApplication()->input; $pk = (!empty($data['id'])) ? $data['id'] : (int) $this->getState($this->getName() . '.id'); $isNew = true; $context = $this->option . '.' . $this->name; // Include the plugins for the save events. JPluginHelper::importPlugin($this->events_map['save']); // Load the row if saving an existing tag. if ($pk > 0) { $table->load($pk); $isNew = false; } // Set the new parent id if parent id not matched OR while New/Save as Copy . if ($table->parent_id != $data['parent_id'] || $data['id'] == 0) { $table->setLocation($data['parent_id'], 'last-child'); } if (isset($data['images']) && is_array($data['images'])) { $registry = new Registry($data['images']); $data['images'] = (string) $registry; } if (isset($data['urls']) && is_array($data['urls'])) { $registry = new Registry($data['urls']); $data['urls'] = (string) $registry; } // Alter the title for save as copy if ($input->get('task') == 'save2copy') { list($title, $alias) = $this->generateNewTitle($data['parent_id'], $data['alias'], $data['title']); $data['title'] = $title; $data['alias'] = $alias; } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Bind the rules. if (isset($data['rules'])) { $rules = new JAccessRules($data['rules']); $table->setRules($rules); } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the before save event. $result = $dispatcher->trigger($this->event_before_save, array($context, &$table, $isNew)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } // Trigger the after save event. $dispatcher->trigger($this->event_after_save, array($context, &$table, $isNew)); // Rebuild the path for the tag: if (!$table->rebuildPath($table->id)) { $this->setError($table->getError()); return false; } // Rebuild the paths of the tag's children: if (!$table->rebuild($table->id, $table->lft, $table->level, $table->path)) { $this->setError($table->getError()); return false; } $this->setState($this->getName() . '.id', $table->id); // Clear the cache $this->cleanCache(); return true; } /** * Method rebuild the entire nested set tree. * * @return boolean False on failure or error, true otherwise. * * @since 3.1 */ public function rebuild() { // Get an instance of the table object. $table = $this->getTable(); if (!$table->rebuild()) { $this->setError($table->getError()); return false; } // Clear the cache $this->cleanCache(); return true; } /** * Method to save the reordered nested set tree. * First we save the new order values in the lft values of the changed ids. * Then we invoke the table rebuild to implement the new ordering. * * @param array $idArray An array of primary key ids. * @param integer $lft_array The lft value * * @return boolean False on failure or error, True otherwise * * @since 3.1 */ public function saveorder($idArray = null, $lft_array = null) { // Get an instance of the table object. $table = $this->getTable(); if (!$table->saveorder($idArray, $lft_array)) { $this->setError($table->getError()); return false; } // Clear the cache $this->cleanCache(); return true; } /** * Method to change the title & alias. * * @param integer $parent_id The id of the parent. * @param string $alias The alias. * @param string $title The title. * * @return array Contains the modified title and alias. * * @since 3.1 */ protected function generateNewTitle($parent_id, $alias, $title) { // Alter the title & alias $table = $this->getTable(); while ($table->load(array('alias' => $alias, 'parent_id' => $parent_id))) { $title = ($table->title != $title) ? $title : StringHelper::increment($title); $alias = StringHelper::increment($alias, 'dash'); } return array($title, $alias); } } PKb��\A�~�&�&#components/com_tags/models/tags.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Tags Component Tags Model * * @since 3.1 */ class TagsModelTags extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 3.0.3 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'title', 'a.title', 'alias', 'a.alias', 'published', 'a.published', 'access', 'a.access', 'access_level', 'language', 'a.language', 'checked_out', 'a.checked_out', 'checked_out_time', 'a.checked_out_time', 'created_time', 'a.created_time', 'created_user_id', 'a.created_user_id', 'lft', 'a.lft', 'rgt', 'a.rgt', 'level', 'a.level', 'path', 'a.path', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 3.1 */ protected function populateState($ordering = 'a.lft', $direction = 'asc') { $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); $this->setState('filter.search', $search); $level = $this->getUserStateFromRequest($this->context . '.filter.level', 'filter_level', ''); $this->setState('filter.level', $level); $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', ''); $this->setState('filter.access', $access); $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); $this->setState('filter.published', $published); $language = $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', ''); $this->setState('filter.language', $language); $extension = $this->getUserStateFromRequest($this->context . '.filter.extension', 'extension', 'com_content', 'cmd'); $this->setState('filter.extension', $extension); $parts = explode('.', $extension); // Extract the component name $this->setState('filter.component', $parts[0]); // Extract the optional section name $this->setState('filter.section', (count($parts) > 1) ? $parts[1] : null); // Load the parameters. $params = JComponentHelper::getParams('com_tags'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 3.1 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.extension'); $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.level'); $id .= ':' . $this->getState('filter.access'); $id .= ':' . $this->getState('filter.published'); $id .= ':' . $this->getState('filter.language'); return parent::getStoreId($id); } /** * Method to create a query for a list of items. * * @return string * * @since 3.1 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.title, a.alias, a.note, a.published, a.access, a.description' . ', a.checked_out, a.checked_out_time, a.created_user_id' . ', a.path, a.parent_id, a.level, a.lft, a.rgt' . ', a.language' ) ); $query->from('#__tags AS a') ->where('a.alias <> ' . $db->quote('root')); // Join over the language $query->select('l.title AS language_title, l.image AS language_image') ->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = a.language'); // Join over the users for the checked out user. $query->select('uc.name AS editor') ->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Join over the users for the author. $query->select('ua.name AS author_name') ->join('LEFT', '#__users AS ua ON ua.id = a.created_user_id') ->select('ug.title AS access_title') ->join('LEFT', '#__viewlevels AS ug on ug.id = a.access'); // Filter on the level. if ($level = $this->getState('filter.level')) { $query->where('a.level <= ' . (int) $level); } // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = ' . (int) $access); } // Implement View Level Access if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN (' . $groups . ')'); } // Filter by published state $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.published = ' . (int) $published); } elseif ($published === '') { $query->where('(a.published IN (0, 1))'); } // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = ' . (int) substr($search, 3)); } else { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('(a.title LIKE ' . $search . ' OR a.alias LIKE ' . $search . ' OR a.note LIKE ' . $search . ')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where('a.language = ' . $db->quote($language)); } // Add the list ordering clause $listOrdering = $this->getState('list.ordering', 'a.lft'); $listDirn = $db->escape($this->getState('list.direction', 'ASC')); if ($listOrdering == 'a.access') { $query->order('a.access ' . $listDirn . ', a.lft ' . $listDirn); } else { $query->order($db->escape($listOrdering) . ' ' . $listDirn); } return $query; } /** * Method override to check-in a record or an array of record * * @param mixed $pks The ID of the primary key or an array of IDs * * @return mixed Boolean false if there is an error, otherwise the count of records checked in. * * @since 3.0.1 */ public function checkin($pks = array()) { $pks = (array) $pks; $table = $this->getTable(); $count = 0; if (empty($pks)) { $pks = array((int) $this->getState($this->getName() . '.id')); } // Check in all items. foreach ($pks as $pk) { if ($table->load($pk)) { if ($table->checked_out > 0) { // Only attempt to check the row in if it exists. if ($pk) { $user = JFactory::getUser(); // Get an instance of the row to checkin. $table = $this->getTable(); if (!$table->load($pk)) { $this->setError($table->getError()); return false; } // Check if this is the user having previously checked out the row. if ($table->checked_out > 0 && $table->checked_out != $user->get('id') && !$user->authorise('core.admin', 'com_checkin')) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_CHECKIN_USER_MISMATCH')); return false; } // Attempt to check the row in. if (!$table->checkin($pk)) { $this->setError($table->getError()); return false; } } $count++; } } else { $this->setError($table->getError()); return false; } } return $count; } /** * Method to get a table object, load it if necessary. * * @param string $type The table name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A JTable object * * @since 3.1 */ public function getTable($type = 'Tag', $prefix = 'TagsTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to get an array of data items. * * @return mixed An array of data items on success, false on failure. * * @since 3.0.1 */ public function getItems() { $items = parent::getItems(); if ($items != false) { $extension = $this->getState('filter.extension'); $this->countItems($items, $extension); } return $items; } /** * Method to load the countItems method from the extensions * * @param stdClass[] &$items The category items * @param string $extension The category extension * * @return void * * @since 3.5 */ public function countItems(&$items, $extension) { $parts = explode('.', $extension); $component = $parts[0]; $section = null; if (count($parts) < 2) { return; } // Try to find the component helper. $eName = str_replace('com_', '', $component); $file = JPath::clean(JPATH_ADMINISTRATOR . '/components/' . $component . '/helpers/' . $eName . '.php'); if (file_exists($file)) { $prefix = ucfirst(str_replace('com_', '', $component)); $cName = $prefix . 'Helper'; JLoader::register($cName, $file); if (class_exists($cName) && is_callable(array($cName, 'countTagItems'))) { $cName::countTagItems($items, $extension); } } } } PKb��\�����"components/com_tags/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_tags * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Tags view class for the Tags package. * * @since 3.1 */ class TagsController extends JControllerLegacy { /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JControllerLegacy This object to support chaining. * * @since 3.1 */ public function display($cachable = false, $urlparams = false) { $view = $this->input->get('view', 'tags'); $layout = $this->input->get('layout', 'default'); $id = $this->input->getInt('id'); // Check for edit form. if ($view == 'tag' && $layout == 'edit' && !$this->checkEditId('com_tags.edit.tag', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_tags&view=tags', false)); return false; } parent::display(); return $this; } } PKb��\n}�__components/com_cache/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_cache" section="component" /> </fieldset> </config> PKb��\�p� 1components/com_cache/views/cache/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cache * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_cache'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty($this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if ($this->total > 0) : ?> <table class="table table-striped"> <thead> <tr> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th class="title nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_CACHE_GROUP', 'group', $listDirn, $listOrder); ?> </th> <th width="5%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_CACHE_NUMBER_OF_FILES', 'count', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_CACHE_SIZE', 'size', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="4"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $i = 0; foreach ($this->data as $folder => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td> <input type="checkbox" id="cb<?php echo $i; ?>" name="cid[]" value="<?php echo $this->escape($item->group); ?>" onclick="Joomla.isChecked(this.checked);" /> </td> <td> <label for="cb<?php echo $i; ?>"> <strong><?php echo $this->escape($item->group); ?></strong> </label> </td> <td> <?php echo $item->count; ?> </td> <td> <?php echo JHtml::_('number.bytes', $item->size); ?> </td> </tr> <?php $i++; endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\ӆ���.components/com_cache/views/cache/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cache * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Cache component * * @since 1.6 */ class CacheViewCache extends JViewLegacy { /** * @var object client object. * @deprecated 4.0 */ protected $client; protected $data; protected $pagination; protected $state; /** * Display a view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { $this->data = $this->get('Data'); $this->pagination = $this->get('Pagination'); $this->total = $this->get('Total'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); if ($state->get('client_id') == 1) { JToolbarHelper::title(JText::_('COM_CACHE_CLEAR_CACHE_ADMIN_TITLE'), 'lightning clear'); } else { JToolbarHelper::title(JText::_('COM_CACHE_CLEAR_CACHE_SITE_TITLE'), 'lightning clear'); } JToolbarHelper::custom('delete', 'delete.png', 'delete_f2.png', 'JTOOLBAR_DELETE', true); JToolbarHelper::custom('deleteAll', 'remove.png', 'delete_f2.png', 'JTOOLBAR_DELETE_ALL', false); JToolbarHelper::divider(); if (JFactory::getUser()->authorise('core.admin', 'com_cache')) { JToolbarHelper::preferences('com_cache'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_SITE_MAINTENANCE_CLEAR_CACHE'); JHtmlSidebar::setAction('index.php?option=com_cache'); } } PKb��\��Z��1components/com_cache/views/purge/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cache * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <form action="<?php echo JRoute::_('index.php?option=com_cache&view=purge'); ?>" method="post" name="adminForm" id="adminForm"> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <p><?php echo JText::_('COM_CACHE_PURGE_INSTRUCTIONS'); ?></p> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\1!ܒ�.components/com_cache/views/purge/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cache * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Cache component * * @since 1.6 */ class CacheViewPurge extends JViewLegacy { /** * Display a view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { JFactory::getApplication()->enqueueMessage(JText::_('COM_CACHE_RESOURCE_INTENSIVE_WARNING'), 'warning'); $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JToolbarHelper::title(JText::_('COM_CACHE_PURGE_EXPIRED_CACHE'), 'lightning purge'); JToolbarHelper::custom('purge', 'delete.png', 'delete_f2.png', 'COM_CACHE_PURGE_EXPIRED', false); JToolbarHelper::divider(); if (JFactory::getUser()->authorise('core.admin', 'com_cache')) { JToolbarHelper::preferences('com_cache'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_SITE_MAINTENANCE_PURGE_EXPIRED_CACHE'); } } PKb��\z<��>>components/com_cache/cache.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cache * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; if (!JFactory::getUser()->authorise('core.manage', 'com_cache')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Cache'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\b�oo&components/com_cache/helpers/cache.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cache * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Cache component helper. * * @since 1.6 */ class CacheHelper { /** * Get a list of filter options for the application clients. * * @return array An array of JHtmlOption elements. * * @deprecated 4.0 No replacement. */ public static function getClientOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '0', JText::_('JSITE')); $options[] = JHtml::_('select.option', '1', JText::_('JADMINISTRATOR')); return $options; } /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void * * @since 1.6 */ public static function addSubmenu($vName) { JHtmlSidebar::addEntry( JText::_('JGLOBAL_SUBMENU_CHECKIN'), 'index.php?option=com_checkin', $vName == 'com_checkin' ); JHtmlSidebar::addEntry( JText::_('JGLOBAL_SUBMENU_CLEAR_CACHE'), 'index.php?option=com_cache', $vName == 'cache' ); JHtmlSidebar::addEntry( JText::_('JGLOBAL_SUBMENU_PURGE_EXPIRED_CACHE'), 'index.php?option=com_cache&view=purge', $vName == 'purge' ); } } PKb��\�z�qq%components/com_cache/models/cache.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cache * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\CMS\Factory; use Joomla\Utilities\ArrayHelper; /** * Cache Model * * @since 1.6 */ class CacheModelCache extends JModelList { /** * An Array of CacheItems indexed by cache group ID * * @var Array */ protected $_data = array(); /** * Group total * * @var integer */ protected $_total = null; /** * Pagination object * * @var object */ protected $_pagination = null; /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @since 3.5 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'group', 'count', 'size', 'client_id', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering Field for ordering. * @param string $direction Direction of ordering. * * @return void * * @since 1.6 */ protected function populateState($ordering = 'group', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); // Special case for client id. $clientId = (int) $this->getUserStateFromRequest($this->context . '.client_id', 'client_id', 0, 'int'); $clientId = (!in_array($clientId, array (0, 1))) ? 0 : $clientId; $this->setState('client_id', $clientId); parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 3.5 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('client_id'); $id .= ':' . $this->getState('filter.search'); return parent::getStoreId($id); } /** * Method to get cache data * * @return array */ public function getData() { if (empty($this->_data)) { try { $cache = $this->getCache(); $data = $cache->getAll(); if ($data && count($data) > 0) { // Process filter by search term. if ($search = $this->getState('filter.search')) { foreach ($data as $key => $cacheItem) { if (stripos($cacheItem->group, $search) === false) { unset($data[$key]); continue; } } } // Process ordering. $listOrder = $this->getState('list.ordering', 'group'); $listDirn = $this->getState('list.direction', 'ASC'); $this->_data = ArrayHelper::sortObjects($data, $listOrder, strtolower($listDirn) === 'desc' ? -1 : 1, true, true); // Process pagination. $limit = (int) $this->getState('list.limit', 25); if ($limit !== 0) { $start = (int) $this->getState('list.start', 0); return array_slice($this->_data, $start, $limit); } } else { $this->_data = array(); } } catch (JCacheExceptionConnecting $exception) { $this->setError(JText::_('COM_CACHE_ERROR_CACHE_CONNECTION_FAILED')); $this->_data = array(); } catch (JCacheExceptionUnsupported $exception) { $this->setError(JText::_('COM_CACHE_ERROR_CACHE_DRIVER_UNSUPPORTED')); $this->_data = array(); } } return $this->_data; } /** * Method to get cache instance. * * @return JCacheController */ public function getCache($clientId = null) { $conf = JFactory::getConfig(); if (is_null($clientId)) { $clientId = $this->getState('client_id'); } $options = array( 'defaultgroup' => '', 'storage' => $conf->get('cache_handler', ''), 'caching' => true, 'cachebase' => (int) $clientId === 1 ? JPATH_ADMINISTRATOR . '/cache' : $conf->get('cache_path', JPATH_SITE . '/cache') ); return JCache::getInstance('', $options); } /** * Method to get client data. * * @return array * * @deprecated 4.0 No replacement. */ public function getClient() { return JApplicationHelper::getClientInfo($this->getState('client_id', 0)); } /** * Get the number of current Cache Groups. * * @return integer */ public function getTotal() { if (empty($this->_total)) { $this->_total = count($this->getData()); } return $this->_total; } /** * Method to get a pagination object for the cache. * * @return JPagination */ public function getPagination() { if (empty($this->_pagination)) { $this->_pagination = new JPagination($this->getTotal(), $this->getState('list.start'), $this->getState('list.limit')); } return $this->_pagination; } /** * Clean out a cache group as named by param. * If no param is passed clean all cache groups. * * @param string $group Cache group name. * * @return boolean True on success, false otherwise */ public function clean($group = '') { try { $this->getCache()->clean($group); } catch (JCacheExceptionConnecting $exception) { return false; } catch (JCacheExceptionUnsupported $exception) { return false; } Factory::getApplication()->triggerEvent('onAfterPurge', array($group)); return true; } /** * Purge an array of cache groups. * * @param array $array Array of cache group names. * * @return array Array with errors, if they exist. */ public function cleanlist($array) { $errors = array(); foreach ($array as $group) { if (!$this->clean($group)) { $errors[] = $group; } } return $errors; } /** * Purge all cache items. * * @return boolean True if successful; false otherwise. */ public function purge() { try { JFactory::getCache('')->gc(); } catch (JCacheExceptionConnecting $exception) { return false; } catch (JCacheExceptionUnsupported $exception) { return false; } Factory::getApplication()->triggerEvent('onAfterPurge', array()); return true; } } PKb��\7O⒋�#components/com_cache/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cache * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Cache Controller * * @since 1.6 */ class CacheController extends JControllerLegacy { /** * Display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { JLoader::register('CacheHelper', JPATH_ADMINISTRATOR . '/components/com_cache/helpers/cache.php'); // Get the document object. $document = JFactory::getDocument(); // Set the default view name and format from the Request. $vName = $this->input->get('view', 'cache'); $vFormat = $document->getType(); $lName = $this->input->get('layout', 'default', 'string'); // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { switch ($vName) { case 'purge': break; case 'cache': default: $model = $this->getModel($vName); $view->setModel($model, true); break; } $view->setLayout($lName); // Push document object into the view. $view->document = $document; // Load the submenu. CacheHelper::addSubmenu($this->input->get('view', 'cache')); $view->display(); } } /** * Method to delete a list of cache groups. * * @return void */ public function delete() { // Check for request forgeries $this->checkToken(); $cid = $this->input->post->get('cid', array(), 'array'); if (empty($cid)) { JFactory::getApplication()->enqueueMessage(JText::_('JERROR_NO_ITEMS_SELECTED'), 'warning'); } else { $result = $this->getModel('cache')->cleanlist($cid); if ($result !== array()) { JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_CACHE_EXPIRED_ITEMS_DELETE_ERROR', implode(', ', $result)), 'error'); } else { JFactory::getApplication()->enqueueMessage(JText::_('COM_CACHE_EXPIRED_ITEMS_HAVE_BEEN_DELETED'), 'message'); } } $this->setRedirect('index.php?option=com_cache'); } /** * Method to delete all cache groups. * * @return void * * @since 3.6.0 */ public function deleteAll() { // Check for request forgeries $this->checkToken(); $app = JFactory::getApplication(); $model = $this->getModel('cache'); $allCleared = true; $clients = array(1, 0); foreach ($clients as $client) { $mCache = $model->getCache($client); $clientStr = JText::_($client ? 'JADMINISTRATOR' : 'JSITE') .' > '; foreach ($mCache->getAll() as $cache) { if ($mCache->clean($cache->group) === false) { $app->enqueueMessage(JText::sprintf('COM_CACHE_EXPIRED_ITEMS_DELETE_ERROR', $clientStr . $cache->group), 'error'); $allCleared = false; } } } if ($allCleared) { $app->enqueueMessage(JText::_('COM_CACHE_MSG_ALL_CACHE_GROUPS_CLEARED'), 'message'); } else { $app->enqueueMessage(JText::_('COM_CACHE_MSG_SOME_CACHE_GROUPS_CLEARED'), 'warning'); } $app->triggerEvent('onAfterPurge', array()); $this->setRedirect('index.php?option=com_cache&view=cache'); } /** * Purge the cache. * * @return void */ public function purge() { // Check for request forgeries $this->checkToken(); if (!$this->getModel('cache')->purge()) { JFactory::getApplication()->enqueueMessage(JText::_('COM_CACHE_EXPIRED_ITEMS_PURGING_ERROR'), 'error'); } else { JFactory::getApplication()->enqueueMessage(JText::_('COM_CACHE_EXPIRED_ITEMS_HAVE_BEEN_PURGED'), 'message'); } $this->setRedirect('index.php?option=com_cache&view=purge'); } } PKb��\��ѳ��components/com_cache/cache.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_cache</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_CACHE_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>cache.php</filename> <filename>config.xml</filename> <filename>controller.php</filename> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_cache.ini</language> <language tag="en-GB">language/en-GB.com_cache.sys.ini</language> </languages> </administration> </extension> PKb��\m���"components/com_content/content.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); if (!JFactory::getUser()->authorise('core.manage', 'com_content')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } JLoader::register('ContentHelper', __DIR__ . '/helpers/content.php'); $controller = JControllerLegacy::getInstance('Content'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\O3�>RR*components/com_content/tables/featured.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Featured Table class. * * @since 1.6 */ class ContentTableFeatured extends JTable { /** * Constructor * * @param JDatabaseDriver $db Database connector object * * @since 1.6 */ public function __construct(&$db) { parent::__construct('#__content_frontpage', 'content_id', $db); } } PKb��\�G3��.components/com_content/controllers/article.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * The article controller * * @since 1.6 */ class ContentControllerArticle extends JControllerForm { /** * Class constructor. * * @param array $config A named array of configuration variables. * * @since 1.6 */ public function __construct($config = array()) { parent::__construct($config); // An article edit form can come from the articles or featured view. // Adjust the redirect view on the value of 'return' in the request. if ($this->input->get('return') == 'featured') { $this->view_list = 'featured'; $this->view_item = 'article&return=featured'; } } /** * Method override to check if you can add a new record. * * @param array $data An array of input data. * * @return boolean * * @since 1.6 */ protected function allowAdd($data = array()) { $categoryId = ArrayHelper::getValue($data, 'catid', $this->input->getInt('filter_category_id'), 'int'); $allow = null; if ($categoryId) { // If the category has been passed in the data or URL check it. $allow = JFactory::getUser()->authorise('core.create', 'com_content.category.' . $categoryId); } if ($allow === null) { // In the absense of better information, revert to the component permissions. return parent::allowAdd(); } return $allow; } /** * Method override to check if you can edit an existing record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowEdit($data = array(), $key = 'id') { $recordId = (int) isset($data[$key]) ? $data[$key] : 0; $user = JFactory::getUser(); // Zero record (id:0), return component edit permission by calling parent controller method if (!$recordId) { return parent::allowEdit($data, $key); } // Check edit on the record asset (explicit or inherited) if ($user->authorise('core.edit', 'com_content.article.' . $recordId)) { return true; } // Check edit own on the record asset (explicit or inherited) if ($user->authorise('core.edit.own', 'com_content.article.' . $recordId)) { // Existing record already has an owner, get it $record = $this->getModel()->getItem($recordId); if (empty($record)) { return false; } // Grant if current user is owner of the record return $user->id == $record->created_by; } return false; } /** * Method to run batch operations. * * @param object $model The model. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 1.6 */ public function batch($model = null) { $this->checkToken(); // Set the model /** @var ContentModelArticle $model */ $model = $this->getModel('Article', '', array()); // Preset the redirect $this->setRedirect(JRoute::_('index.php?option=com_content&view=articles' . $this->getRedirectToListAppend(), false)); return parent::batch($model); } } PKb��\�X��PP/components/com_content/controllers/featured.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('ContentControllerArticles', __DIR__ . '/articles.php'); /** * Featured content controller class. * * @since 1.6 */ class ContentControllerFeatured extends ContentControllerArticles { /** * Removes an item. * * @return void * * @since 1.6 */ public function delete() { // Check for request forgeries $this->checkToken(); $user = JFactory::getUser(); $ids = $this->input->get('cid', array(), 'array'); // Access checks. foreach ($ids as $i => $id) { if (!$user->authorise('core.delete', 'com_content.article.' . (int) $id)) { // Prune items that you can't delete. unset($ids[$i]); JError::raiseNotice(403, JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); } } if (empty($ids)) { JError::raiseWarning(500, JText::_('JERROR_NO_ITEMS_SELECTED')); } else { // Get the model. /** @var ContentModelFeature $model */ $model = $this->getModel(); // Remove the items. if (!$model->featured($ids, 0)) { JError::raiseWarning(500, $model->getError()); } } $this->setRedirect('index.php?option=com_content&view=featured'); } /** * Method to publish a list of articles. * * @return void * * @since 1.0 */ public function publish() { parent::publish(); $this->setRedirect('index.php?option=com_content&view=featured'); } /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return JModelLegacy The model. * * @since 1.6 */ public function getModel($name = 'Feature', $prefix = 'ContentModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } } PKb��\��#��/components/com_content/controllers/articles.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Articles list controller class. * * @since 1.6 */ class ContentControllerArticles extends JControllerAdmin { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JControllerLegacy * @since 1.6 */ public function __construct($config = array()) { parent::__construct($config); // Articles default form can come from the articles or featured view. // Adjust the redirect view on the value of 'view' in the request. if ($this->input->get('view') == 'featured') { $this->view_list = 'featured'; } $this->registerTask('unfeatured', 'featured'); } /** * Method to toggle the featured setting of a list of articles. * * @return void * * @since 1.6 */ public function featured() { // Check for request forgeries $this->checkToken(); $user = JFactory::getUser(); $ids = $this->input->get('cid', array(), 'array'); $values = array('featured' => 1, 'unfeatured' => 0); $task = $this->getTask(); $value = ArrayHelper::getValue($values, $task, 0, 'int'); // Access checks. foreach ($ids as $i => $id) { if (!$user->authorise('core.edit.state', 'com_content.article.' . (int) $id)) { // Prune items that you can't change. unset($ids[$i]); JError::raiseNotice(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } } if (empty($ids)) { JError::raiseWarning(500, JText::_('JERROR_NO_ITEMS_SELECTED')); } else { // Get the model. /** @var ContentModelArticle $model */ $model = $this->getModel(); // Publish the items. if (!$model->featured($ids, $value)) { JError::raiseWarning(500, $model->getError()); } if ($value == 1) { $message = JText::plural('COM_CONTENT_N_ITEMS_FEATURED', count($ids)); } else { $message = JText::plural('COM_CONTENT_N_ITEMS_UNFEATURED', count($ids)); } } $view = $this->input->get('view', ''); if ($view == 'featured') { $this->setRedirect(JRoute::_('index.php?option=com_content&view=featured', false), $message); } else { $this->setRedirect(JRoute::_('index.php?option=com_content&view=articles', false), $message); } } /** * Proxy for getModel. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config The array of possible config values. Optional. * * @return JModelLegacy * * @since 1.6 */ public function getModel($name = 'Article', $prefix = 'ContentModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } } PKb��\jd��o�o!components/com_content/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="articles" label="JGLOBAL_ARTICLES" description="COM_CONTENT_CONFIG_ARTICLE_SETTINGS_DESC" > <field name="article_layout" type="componentlayout" label="JGLOBAL_FIELD_LAYOUT_LABEL" description="JGLOBAL_FIELD_LAYOUT_DESC" menuitems="true" extension="com_content" view="article" /> <field name="show_title" type="radio" label="JGLOBAL_SHOW_TITLE_LABEL" description="JGLOBAL_SHOW_TITLE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="link_titles" type="radio" label="JGLOBAL_LINKED_TITLES_LABEL" description="JGLOBAL_LINKED_TITLES_DESC" class="btn-group btn-group-yesno" default="1" showon="show_title:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="show_intro" type="radio" label="JGLOBAL_SHOW_INTRO_LABEL" description="JGLOBAL_SHOW_INTRO_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="info_block_position" type="list" label="COM_CONTENT_FIELD_INFOBLOCK_POSITION_LABEL" description="COM_CONTENT_FIELD_INFOBLOCK_POSITION_DESC" default="0" > <option value="0">COM_CONTENT_FIELD_OPTION_ABOVE</option> <option value="1">COM_CONTENT_FIELD_OPTION_BELOW</option> <option value="2">COM_CONTENT_FIELD_OPTION_SPLIT</option> </field> <field name="info_block_show_title" type="radio" label="COM_CONTENT_FIELD_INFOBLOCK_TITLE_LABEL" description="COM_CONTENT_FIELD_INFOBLOCK_TITLE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_category" type="radio" label="JGLOBAL_SHOW_CATEGORY_LABEL" description="JGLOBAL_SHOW_CATEGORY_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="link_category" type="radio" label="JGLOBAL_LINK_CATEGORY_LABEL" description="JGLOBAL_LINK_CATEGORY_DESC" class="btn-group btn-group-yesno" default="1" showon="show_category:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="show_parent_category" type="radio" label="JGLOBAL_SHOW_PARENT_CATEGORY_LABEL" description="JGLOBAL_SHOW_PARENT_CATEGORY_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="link_parent_category" type="radio" label="JGLOBAL_LINK_PARENT_CATEGORY_LABEL" description="JGLOBAL_LINK_PARENT_CATEGORY_DESC" class="btn-group btn-group-yesno" default="1" showon="show_parent_category:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="spacer1" type="spacer" hr="true" /> <field name="show_associations" type="radio" label="JGLOBAL_SHOW_ASSOCIATIONS_LABEL" description="JGLOBAL_SHOW_ASSOCIATIONS_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="flags" type="radio" label="JGLOBAL_SHOW_FLAG_LABEL" description="JGLOBAL_SHOW_FLAG_DESC" class="btn-group btn-group-yesno" default="1" showon="show_associations:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="spacer3" type="spacer" hr="true" /> <field name="show_author" type="radio" label="JGLOBAL_SHOW_AUTHOR_LABEL" description="JGLOBAL_SHOW_AUTHOR_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="link_author" type="radio" label="JGLOBAL_LINK_AUTHOR_LABEL" description="JGLOBAL_LINK_AUTHOR_DESC" class="btn-group btn-group-yesno" default="0" showon="show_author:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="show_create_date" type="radio" label="JGLOBAL_SHOW_CREATE_DATE_LABEL" description="JGLOBAL_SHOW_CREATE_DATE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_modify_date" type="radio" label="JGLOBAL_SHOW_MODIFY_DATE_LABEL" description="JGLOBAL_SHOW_MODIFY_DATE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_publish_date" type="radio" label="JGLOBAL_SHOW_PUBLISH_DATE_LABEL" description="JGLOBAL_SHOW_PUBLISH_DATE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_item_navigation" type="radio" label="JGLOBAL_SHOW_NAVIGATION_LABEL" description="JGLOBAL_SHOW_NAVIGATION_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_vote" type="radio" label="JGLOBAL_SHOW_VOTE_LABEL" description="JGLOBAL_SHOW_VOTE_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_readmore" type="radio" label="JGLOBAL_SHOW_READMORE_LABEL" description="JGLOBAL_SHOW_READMORE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_readmore_title" type="radio" label="JGLOBAL_SHOW_READMORE_TITLE_LABEL" description="JGLOBAL_SHOW_READMORE_TITLE_DESC" class="btn-group btn-group-yesno" default="1" showon="show_readmore:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="readmore_limit" type="number" label="JGLOBAL_SHOW_READMORE_LIMIT_LABEL" description="JGLOBAL_SHOW_READMORE_LIMIT_DESC" default="100" showon="show_readmore:1[AND]show_readmore_title:1" /> <field name="show_tags" type="radio" label="COM_CONTENT_FIELD_SHOW_TAGS_LABEL" description="COM_CONTENT_FIELD_SHOW_TAGS_DESC" id="show_tags" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="spacer2" type="spacer" hr="true" /> <field name="show_icons" type="radio" label="JGLOBAL_SHOW_ICONS_LABEL" description="JGLOBAL_SHOW_ICONS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_print_icon" type="radio" label="JGLOBAL_SHOW_PRINT_ICON_LABEL" description="JGLOBAL_SHOW_PRINT_ICON_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_email_icon" type="radio" label="JGLOBAL_SHOW_EMAIL_ICON_LABEL" description="JGLOBAL_SHOW_EMAIL_ICON_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_hits" type="radio" label="JGLOBAL_SHOW_HITS_LABEL" description="JGLOBAL_SHOW_HITS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="record_hits" type="radio" label="JGLOBAL_RECORD_HITS_LABEL" description="JGLOBAL_RECORD_HITS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="show_noauth" type="radio" label="JGLOBAL_SHOW_UNAUTH_LINKS_LABEL" description="JGLOBAL_SHOW_UNAUTH_LINKS_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="urls_position" type="radio" label="COM_CONTENT_FIELD_URLSPOSITION_LABEL" description="COM_CONTENT_FIELD_URLSPOSITION_DESC" class="btn-group btn-group-yesno" default="0" > <option value="0">COM_CONTENT_FIELD_OPTION_ABOVE</option> <option value="1">COM_CONTENT_FIELD_OPTION_BELOW</option> </field> </fieldset> <fieldset name="editinglayout" label="COM_CONTENT_EDITING_LAYOUT" description="COM_CONTENT_CONFIG_EDITOR_LAYOUT" > <field name="captcha" type="plugins" label="COM_CONTENT_FIELD_CAPTCHA_LABEL" description="COM_CONTENT_FIELD_CAPTCHA_DESC" folder="captcha" filter="cmd" useglobal="true" > <option value="0">JOPTION_DO_NOT_USE</option> </field> <field name="show_publishing_options" type="radio" label="COM_CONTENT_SHOW_PUBLISHING_OPTIONS_LABEL" description="COM_CONTENT_SHOW_PUBLISHING_OPTIONS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_article_options" type="radio" label="COM_CONTENT_SHOW_ARTICLE_OPTIONS_LABEL" description="COM_CONTENT_SHOW_ARTICLE_OPTIONS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="save_history" type="radio" label="JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL" description="JGLOBAL_SAVE_HISTORY_OPTIONS_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="history_limit" type="number" label="JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL" description="JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC" filter="integer" default="10" showon="save_history:1" /> <field name="show_urls_images_frontend" type="radio" label="COM_CONTENT_SHOW_IMAGES_URLS_FRONT_LABEL" description="COM_CONTENT_SHOW_IMAGES_URLS_FRONT_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_urls_images_backend" type="radio" label="COM_CONTENT_SHOW_IMAGES_URLS_BACK_LABEL" description="COM_CONTENT_SHOW_IMAGES_URLS_BACK_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="spacer3" type="spacer" hr="true" showon="show_urls_images_backend:1[OR]show_urls_images_frontend:1" /> <field name="targeta" type="list" label="COM_CONTENT_URL_FIELD_A_BROWSERNAV_LABEL" description="COM_CONTENT_URL_FIELD_BROWSERNAV_DESC" default="Parent" filter="int" showon="show_urls_images_backend:1[OR]show_urls_images_frontend:1" > <option value="0">JBROWSERTARGET_PARENT</option> <option value="1">JBROWSERTARGET_NEW</option> <option value="2">JBROWSERTARGET_POPUP</option> <option value="3">JBROWSERTARGET_MODAL</option> </field> <field name="targetb" type="list" label="COM_CONTENT_URL_FIELD_B_BROWSERNAV_LABEL" description="COM_CONTENT_URL_FIELD_BROWSERNAV_DESC" default="Parent" filter="int" showon="show_urls_images_backend:1[OR]show_urls_images_frontend:1" > <option value="0">JBROWSERTARGET_PARENT</option> <option value="1">JBROWSERTARGET_NEW</option> <option value="2">JBROWSERTARGET_POPUP</option> <option value="3">JBROWSERTARGET_MODAL</option> </field> <field name="targetc" type="list" label="COM_CONTENT_URL_FIELD_C_BROWSERNAV_LABEL" description="COM_CONTENT_URL_FIELD_BROWSERNAV_DESC" default="Parent" filter="int" showon="show_urls_images_backend:1[OR]show_urls_images_frontend:1" > <option value="0">JBROWSERTARGET_PARENT</option> <option value="1">JBROWSERTARGET_NEW</option> <option value="2">JBROWSERTARGET_POPUP</option> <option value="3">JBROWSERTARGET_MODAL</option> </field> <field name="spacer4" type="spacer" hr="true" showon="show_urls_images_backend:1[OR]show_urls_images_frontend:1" /> <field name="float_intro" type="list" label="COM_CONTENT_FLOAT_INTRO_LABEL" description="COM_CONTENT_FLOAT_DESC" showon="show_urls_images_backend:1[OR]show_urls_images_frontend:1" > <option value="right">COM_CONTENT_RIGHT</option> <option value="left">COM_CONTENT_LEFT</option> <option value="none">COM_CONTENT_NONE</option> </field> <field name="float_fulltext" type="list" label="COM_CONTENT_FLOAT_FULLTEXT_LABEL" description="COM_CONTENT_FLOAT_DESC" showon="show_urls_images_backend:1[OR]show_urls_images_frontend:1" > <option value="right">COM_CONTENT_RIGHT</option> <option value="left">COM_CONTENT_LEFT</option> <option value="none">COM_CONTENT_NONE</option> </field> </fieldset> <fieldset name="category" label="JCATEGORY" description="COM_CONTENT_CONFIG_CATEGORY_SETTINGS_DESC" > <field name="category_layout" type="componentlayout" label="JGLOBAL_FIELD_LAYOUT_LABEL" description="JGLOBAL_FIELD_LAYOUT_DESC" menuitems="true" extension="com_content" view="category" /> <field name="show_category_heading_title_text" type="radio" label="JGLOBAL_SHOW_CATEGORY_HEADING_TITLE_TEXT_LABEL" description="JGLOBAL_SHOW_CATEGORY_HEADING_TITLE_TEXT_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_category_title" type="radio" label="JGLOBAL_SHOW_CATEGORY_TITLE" description="JGLOBAL_SHOW_CATEGORY_TITLE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_description" type="radio" label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL" description="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_description_image" type="radio" label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL" description="JGLOBAL_SHOW_CATEGORY_IMAGE_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="maxLevel" type="list" label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL" description="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_DESC" default="-1" > <option value="0">JNONE</option> <option value="-1">JALL</option> <option value="1">J1</option> <option value="2">J2</option> <option value="3">J3</option> <option value="4">J4</option> <option value="5">J5</option> </field> <field name="show_empty_categories" type="radio" label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL" description="COM_CONTENT_SHOW_EMPTY_CATEGORIES_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_no_articles" type="radio" label="COM_CONTENT_NO_ARTICLES_LABEL" description="COM_CONTENT_NO_ARTICLES_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_subcat_desc" type="radio" label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL" description="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_cat_num_articles" type="radio" label="COM_CONTENT_NUMBER_CATEGORY_ITEMS_LABEL" description="COM_CONTENT_NUMBER_CATEGORY_ITEMS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_cat_tags" type="radio" label="COM_CONTENT_FIELD_SHOW_CAT_TAGS_LABEL" description="COM_CONTENT_FIELD_SHOW_CAT_TAGS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="categories" label="JCATEGORIES" description="COM_CONTENT_CONFIG_CATEGORIES_SETTINGS_DESC" > <field name="show_base_description" type="radio" label="JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_LABEL" description="JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="maxLevelcat" type="list" label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL" description="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_DESC" default="-1" > <option value="0">JNONE</option> <option value="-1">JALL</option> <option value="1">J1</option> <option value="2">J2</option> <option value="3">J3</option> <option value="4">J4</option> <option value="5">J5</option> </field> <field name="show_empty_categories_cat" type="radio" label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL" description="COM_CONTENT_SHOW_EMPTY_CATEGORIES_DESC" class="btn-group btn-group-yesno" default="0" showon="maxLevelcat:-1,1,2,3,4,5" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_subcat_desc_cat" type="radio" label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL" description="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_DESC" class="btn-group btn-group-yesno" default="1" showon="maxLevelcat:-1,1,2,3,4,5" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_cat_num_articles_cat" type="radio" label="COM_CONTENT_NUMBER_CATEGORY_ITEMS_LABEL" description="COM_CONTENT_NUMBER_CATEGORY_ITEMS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="blog_default_parameters" label="COM_CONTENT_CONFIG_BLOG_SETTINGS_LABEL" description="COM_CONTENT_CONFIG_BLOG_SETTINGS_DESC" > <field name="num_leading_articles" type="number" label="JGLOBAL_NUM_LEADING_ARTICLES_LABEL" description="JGLOBAL_NUM_LEADING_ARTICLES_DESC" default="1" /> <field name="num_intro_articles" type="number" label="JGLOBAL_NUM_INTRO_ARTICLES_LABEL" description="JGLOBAL_NUM_INTRO_ARTICLES_DESC" default="4" /> <field name="num_columns" type="number" label="JGLOBAL_NUM_COLUMNS_LABEL" description="JGLOBAL_NUM_COLUMNS_DESC" default="2" /> <field name="num_links" type="number" label="JGLOBAL_NUM_LINKS_LABEL" description="JGLOBAL_NUM_LINKS_DESC" default="4" /> <field name="multi_column_order" type="list" label="JGLOBAL_MULTI_COLUMN_ORDER_LABEL" description="JGLOBAL_MULTI_COLUMN_ORDER_DESC" default="0" showon="num_columns!:,0,1" > <option value="0">JGLOBAL_DOWN</option> <option value="1">JGLOBAL_ACROSS</option> </field> <field name="spacer1" type="spacer" hr="true" /> <field name="show_subcategory_content" type="list" label="JGLOBAL_SHOW_SUBCATEGORY_CONTENT_LABEL" description="JGLOBAL_SHOW_SUBCATEGORY_CONTENT_DESC" default="0" > <option value="0">JNONE</option> <option value="-1">JALL</option> <option value="1">J1</option> <option value="2">J2</option> <option value="3">J3</option> <option value="4">J4</option> <option value="5">J5</option> </field> </fieldset> <fieldset name="list_default_parameters" label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="COM_CONTENT_CONFIG_LIST_SETTINGS_DESC" addfieldpath="/administrator/components/com_content/models/fields" > <field name="show_pagination_limit" type="radio" label="JGLOBAL_DISPLAY_SELECT_LABEL" description="JGLOBAL_DISPLAY_SELECT_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="filter_field" type="list" label="JGLOBAL_FILTER_FIELD_LABEL" description="JGLOBAL_FILTER_FIELD_DESC" default="hide" > <option value="hide">JHIDE</option> <option value="title">JGLOBAL_TITLE</option> <option value="author">JAUTHOR</option> <option value="hits">JGLOBAL_HITS</option> <option value="tag">JTAG</option> <option value="month">JMONTH_PUBLISHED</option> </field> <field name="show_headings" type="radio" label="JGLOBAL_SHOW_HEADINGS_LABEL" description="JGLOBAL_SHOW_HEADINGS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="list_show_date" type="list" label="JGLOBAL_SHOW_DATE_LABEL" description="JGLOBAL_SHOW_DATE_DESC" default="0" > <option value="0">JHIDE</option> <option value="created">JGLOBAL_CREATED</option> <option value="modified">JGLOBAL_MODIFIED</option> <option value="published">JPUBLISHED</option> </field> <field name="date_format" type="text" label="JGLOBAL_DATE_FORMAT_LABEL" description="JGLOBAL_DATE_FORMAT_DESC" size="15" showon="list_show_date:created,modified,published" /> <field name="list_show_hits" type="radio" label="JGLOBAL_LIST_HITS_LABEL" description="JGLOBAL_LIST_HITS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="list_show_author" type="radio" label="JGLOBAL_LIST_AUTHOR_LABEL" description="JGLOBAL_LIST_AUTHOR_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="list_show_votes" type="voteradio" label="JGLOBAL_LIST_VOTES_LABEL" description="JGLOBAL_LIST_VOTES_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="list_show_ratings" type="voteradio" label="JGLOBAL_LIST_RATINGS_LABEL" description="JGLOBAL_LIST_RATINGS_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="shared" label="COM_CONTENT_SHARED_LABEL" description="COM_CONTENT_SHARED_DESC" > <field name="orderby_pri" type="list" label="JGLOBAL_CATEGORY_ORDER_LABEL" description="JGLOBAL_CATEGORY_ORDER_DESC" default="none" > <option value="none">JGLOBAL_NO_ORDER</option> <option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option> <option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option> <option value="order">JGLOBAL_CATEGORY_MANAGER_ORDER</option> </field> <field name="orderby_sec" type="list" label="JGLOBAL_ARTICLE_ORDER_LABEL" description="JGLOBAL_ARTICLE_ORDER_DESC" default="rdate" > <option value="rdate">JGLOBAL_MOST_RECENT_FIRST</option> <option value="date">JGLOBAL_OLDEST_FIRST</option> <option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option> <option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option> <option value="author">JGLOBAL_AUTHOR_ALPHABETICAL</option> <option value="rauthor">JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL</option> <option value="hits">JGLOBAL_MOST_HITS</option> <option value="rhits">JGLOBAL_LEAST_HITS</option> <option value="order">JGLOBAL_ARTICLE_MANAGER_ORDER</option> <option value="rorder">JGLOBAL_ARTICLE_MANAGER_REVERSE_ORDER</option> <option value="vote" requires="vote">JGLOBAL_VOTES_DESC</option> <option value="rvote" requires="vote">JGLOBAL_VOTES_ASC</option> <option value="rank" requires="vote">JGLOBAL_RATINGS_DESC</option> <option value="rrank" requires="vote">JGLOBAL_RATINGS_ASC</option> </field> <field name="order_date" type="list" label="JGLOBAL_ORDERING_DATE_LABEL" description="JGLOBAL_ORDERING_DATE_DESC" showon="orderby_sec:rdate,date" default="published" > <option value="created">JGLOBAL_CREATED</option> <option value="modified">JGLOBAL_MODIFIED</option> <option value="published">JPUBLISHED</option> </field> <field name="show_pagination" type="list" label="JGLOBAL_PAGINATION_LABEL" description="JGLOBAL_PAGINATION_DESC" default="2" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> <option value="2">JGLOBAL_AUTO</option> </field> <field name="show_pagination_results" type="radio" label="JGLOBAL_PAGINATION_RESULTS_LABEL" description="JGLOBAL_PAGINATION_RESULTS_DESC" class="btn-group btn-group-yesno" default="1" showon="show_pagination:1,2" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_featured" type="list" label="JGLOBAL_SHOW_FEATURED_ARTICLES_LABEL" description="JGLOBAL_SHOW_FEATURED_ARTICLES_DESC" default="show" > <option value="show">JSHOW</option> <option value="hide">JHIDE</option> <option value="only">JONLY</option> </field> </fieldset> <fieldset name="integration" label="JGLOBAL_INTEGRATION_LABEL" description="COM_CONTENT_CONFIG_INTEGRATION_SETTINGS_DESC" > <field name="integration_newsfeeds" type="note" label="JGLOBAL_FEED_TITLE" /> <field name="show_feed_link" type="radio" label="JGLOBAL_SHOW_FEED_LINK_LABEL" description="JGLOBAL_SHOW_FEED_LINK_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="feed_summary" type="list" label="JGLOBAL_FEED_SUMMARY_LABEL" description="JGLOBAL_FEED_SUMMARY_DESC" default="0" showon="show_feed_link:1" > <option value="0">JGLOBAL_INTRO_TEXT</option> <option value="1">JGLOBAL_FULL_TEXT</option> </field> <field name="feed_show_readmore" type="radio" label="JGLOBAL_FEED_SHOW_READMORE_LABEL" description="JGLOBAL_FEED_SHOW_READMORE_DESC" class="btn-group btn-group-yesno" default="0" showon="show_feed_link:1[AND]feed_summary:0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="integration_sef" type="note" label="JGLOBAL_SEF_TITLE" /> <field name="sef_advanced" type="radio" class="btn-group btn-group-yesno btn-group-reversed" default="0" label="JGLOBAL_SEF_ADVANCED_LABEL" description="JGLOBAL_SEF_ADVANCED_DESC" filter="integer" > <option value="0">JGLOBAL_SEF_ADVANCED_LEGACY</option> <option value="1">JGLOBAL_SEF_ADVANCED_MODERN</option> </field> <field name="sef_ids" type="radio" class="btn-group btn-group-yesno" default="0" label="JGLOBAL_SEF_NOIDS_LABEL" description="JGLOBAL_SEF_NOIDS_DESC" showon="sef_advanced:1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="integration_customfields" type="note" label="JGLOBAL_FIELDS_TITLE" /> <field name="custom_fields_enable" type="radio" label="JGLOBAL_CUSTOM_FIELDS_ENABLE_LABEL" description="JGLOBAL_CUSTOM_FIELDS_ENABLE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" validate="rules" filter="rules" component="com_content" section="component" /> </fieldset> </config> PKb��\��N-??!components/com_content/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_content"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> <action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_COMPONENT_DESC" /> <action name="core.edit.value" title="JACTION_EDITVALUE" description="JACTION_EDITVALUE_COMPONENT_DESC" /> </section> <section name="category"> <action name="core.create" title="JACTION_CREATE" description="COM_CATEGORIES_ACCESS_CREATE_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="COM_CATEGORIES_ACCESS_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_CATEGORIES_ACCESS_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_CATEGORIES_ACCESS_EDITSTATE_DESC" /> <action name="core.edit.own" title="JACTION_EDITOWN" description="COM_CATEGORIES_ACCESS_EDITOWN_DESC" /> </section> <section name="article"> <action name="core.delete" title="JACTION_DELETE" description="COM_CONTENT_ACCESS_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_CONTENT_ACCESS_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_CONTENT_ACCESS_EDITSTATE_DESC" /> </section> <section name="fieldgroup"> <action name="core.create" title="JACTION_CREATE" description="COM_FIELDS_GROUP_PERMISSION_CREATE_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="COM_FIELDS_GROUP_PERMISSION_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_FIELDS_GROUP_PERMISSION_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_FIELDS_GROUP_PERMISSION_EDITSTATE_DESC" /> <action name="core.edit.own" title="JACTION_EDITOWN" description="COM_FIELDS_GROUP_PERMISSION_EDITOWN_DESC" /> <action name="core.edit.value" title="JACTION_EDITVALUE" description="COM_FIELDS_GROUP_PERMISSION_EDITVALUE_DESC" /> </section> <section name="field"> <action name="core.delete" title="JACTION_DELETE" description="COM_FIELDS_FIELD_PERMISSION_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_FIELDS_FIELD_PERMISSION_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_FIELDS_FIELD_PERMISSION_EDITSTATE_DESC" /> <action name="core.edit.value" title="JACTION_EDITVALUE" description="COM_FIELDS_FIELD_PERMISSION_EDITVALUE_DESC" /> </section> </access> PKb��\��c�4�46components/com_content/views/featured/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', '.multipleAccessLevels', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_ACCESS'))); JHtml::_('formbehavior.chosen', '.multipleAuthors', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_AUTHOR'))); JHtml::_('formbehavior.chosen', '.multipleCategories', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_CATEGORY'))); JHtml::_('formbehavior.chosen', '.multipleTags', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_TAG'))); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = $listOrder == 'fp.ordering'; $columns = 10; if (strpos($listOrder, 'publish_up') !== false) { $orderingColumn = 'publish_up'; } elseif (strpos($listOrder, 'publish_down') !== false) { $orderingColumn = 'publish_down'; } else { $orderingColumn = 'created'; } if ($saveOrder) { $saveOrderingUrl = 'index.php?option=com_content&task=featured.saveOrderAjax&tmpl=component'; JHtml::_('sortablelist.sortable', 'articleList', 'adminForm', strtolower($listDirn), $saveOrderingUrl); } ?> <form action="<?php echo JRoute::_('index.php?option=com_content&view=featured'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php // Search tools bar echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="articleList"> <thead> <tr> <th width="1%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', '', 'fp.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?> </th> <th width="1%" class="center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" style="min-width:55px" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'a.access', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JAUTHOR', 'a.created_by', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'language', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_CONTENT_HEADING_DATE_' . strtoupper($orderingColumn), 'a.' . $orderingColumn, $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?> </th> <?php if ($this->vote) : ?> <?php $columns++; ?> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_VOTES', 'rating_count', $listDirn, $listOrder); ?> </th> <?php $columns++; ?> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_RATINGS', 'rating', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="<?php echo $columns; ?>"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $count = count($this->items); ?> <?php foreach ($this->items as $i => $item) : $item->max_ordering = 0; $ordering = ($listOrder == 'fp.ordering'); $assetId = 'com_content.article.' . $item->id; $canCreate = $user->authorise('core.create', 'com_content.category.' . $item->catid); $canEdit = $user->authorise('core.edit', 'com_content.article.' . $item->id); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_content.article.' . $item->id) && $canCheckin; $canEditCat = $user->authorise('core.edit', 'com_content.category.' . $item->catid); $canEditOwnCat = $user->authorise('core.edit.own', 'com_content.category.' . $item->catid) && $item->category_uid == $userId; $canEditParCat = $user->authorise('core.edit', 'com_content.category.' . $item->parent_category_id); $canEditOwnParCat = $user->authorise('core.edit.own', 'com_content.category.' . $item->parent_category_id) && $item->parent_category_uid == $userId; ?> <tr class="row<?php echo $i % 2; ?>"> <td class="order nowrap center hidden-phone"> <?php $iconClass = ''; if (!$canChange) { $iconClass = ' inactive'; } elseif (!$saveOrder) { $iconClass = ' inactive tip-top hasTooltip" title="' . JHtml::_('tooltipText', 'JORDERINGDISABLED'); } ?> <span class="sortable-handler<?php echo $iconClass ?>"> <span class="icon-menu" aria-hidden="true"></span> </span> <?php if ($canChange && $saveOrder) : ?> <input type="text" style="display:none" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order" /> <?php endif; ?> </td> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td class="center"> <div class="btn-group"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'articles.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> <?php echo JHtml::_('contentadministrator.featured', $item->featured, $i, $canChange); ?> <?php // Create dropdown items and render the dropdown list. if ($canChange) { JHtml::_('actionsdropdown.' . ((int) $item->state === 2 ? 'un' : '') . 'archive', 'cb' . $i, 'articles'); JHtml::_('actionsdropdown.' . ((int) $item->state === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'articles'); echo JHtml::_('actionsdropdown.render', $this->escape($item->title)); } ?> </div> </td> <td class="has-context"> <div class="pull-left break-word"> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'articles.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a class="hasTooltip" href="<?php echo JRoute::_('index.php?option=com_content&task=article.edit&return=featured&id=' . $item->id); ?>" title="<?php echo JText::_('JACTION_EDIT'); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <span title="<?php echo JText::sprintf('JFIELD_ALIAS_LABEL', $this->escape($item->alias)); ?>"><?php echo $this->escape($item->title); ?></span> <?php endif; ?> <span class="small break-word"> <?php if (empty($item->note)) : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?> <?php else : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS_NOTE', $this->escape($item->alias), $this->escape($item->note)); ?> <?php endif; ?> </span> <div class="small"> <?php $ParentCatUrl = JRoute::_('index.php?option=com_categories&task=category.edit&id=' . $item->parent_category_id . '&extension=com_content'); $CurrentCatUrl = JRoute::_('index.php?option=com_categories&task=category.edit&id=' . $item->catid . '&extension=com_content'); $EditCatTxt = JText::_('JACTION_EDIT') . ' ' . JText::_('JCATEGORY'); echo JText::_('JCATEGORY') . ': '; if ($item->category_level != '1') : if ($item->parent_category_level != '1') : echo ' » '; endif; endif; if (JFactory::getLanguage()->isRtl()) { if ($canEditCat || $canEditOwnCat) : echo '<a class="hasTooltip" href="' . $CurrentCatUrl . '" title="' . $EditCatTxt . '">'; endif; echo $this->escape($item->category_title); if ($canEditCat || $canEditOwnCat) : echo '</a>'; endif; if ($item->category_level != '1') : echo ' « '; if ($canEditParCat || $canEditOwnParCat) : echo '<a class="hasTooltip" href="' . $ParentCatUrl . '" title="' . $EditCatTxt . '">'; endif; echo $this->escape($item->parent_category_title); if ($canEditParCat || $canEditOwnParCat) : echo '</a>'; endif; endif; } else { if ($item->category_level != '1') : if ($canEditParCat || $canEditOwnParCat) : echo '<a class="hasTooltip" href="' . $ParentCatUrl . '" title="' . $EditCatTxt . '">'; endif; echo $this->escape($item->parent_category_title); if ($canEditParCat || $canEditOwnParCat) : echo '</a>'; endif; echo ' » '; endif; if ($canEditCat || $canEditOwnCat) : echo '<a class="hasTooltip" href="' . $CurrentCatUrl . '" title="' . $EditCatTxt . '">'; endif; echo $this->escape($item->category_title); if ($canEditCat || $canEditOwnCat) : echo '</a>'; endif; } ?> </div> </div> </td> <td class="small hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <td class="small hidden-phone"> <?php if ((int) $item->created_by != 0) : ?> <?php if ($item->created_by_alias) : ?> <a class="hasTooltip" href="<?php echo JRoute::_('index.php?option=com_users&task=user.edit&id=' . (int) $item->created_by); ?>" title="<?php echo JText::_('JAUTHOR'); ?>"> <?php echo $this->escape($item->author_name); ?></a> <div class="smallsub"><?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->created_by_alias)); ?></div> <?php else : ?> <a class="hasTooltip" href="<?php echo JRoute::_('index.php?option=com_users&task=user.edit&id=' . (int) $item->created_by); ?>" title="<?php echo JText::_('JAUTHOR'); ?>"> <?php echo $this->escape($item->author_name); ?></a> <?php endif; ?> <?php else : ?> <?php if ($item->created_by_alias) : ?> <?php echo JText::_('JNONE'); ?> <div class="smallsub"><?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->created_by_alias)); ?></div> <?php else : ?> <?php echo JText::_('JNONE'); ?> <?php endif; ?> <?php endif; ?> </td> <td class="small hidden-phone"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="nowrap small hidden-phone"> <?php $date = $item->{$orderingColumn}; echo $date > 0 ? JHtml::_('date', $date, JText::_('DATE_FORMAT_LC4')) : '-'; ?> </td> <td class="center hidden-phone"> <span class="badge badge-info"> <?php echo (int) $item->hits; ?> </span> </td> <?php if ($this->vote) : ?> <td class="hidden-phone"> <span class="badge badge-success" > <?php echo (int) $item->rating_count; ?> </span> </td> <td class="hidden-phone"> <span class="badge badge-warning" > <?php echo (int) $item->rating; ?> </span> </td> <?php endif; ?> <td class="center hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="featured" value="1" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�5~z&&3components/com_content/views/featured/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of featured articles. * * @since 1.6 */ class ContentViewFeatured extends JViewLegacy { /** * The item authors * * @var stdClass * * @deprecated 4.0 To be removed with Hathor */ protected $authors; /** * An array of items * * @var array */ protected $items; /** * The pagination object * * @var JPagination */ protected $pagination; /** * The model state * * @var object */ protected $state; /** * Form object for search filters * * @var JForm */ public $filterForm; /** * The active search filters * * @var array */ public $activeFilters; /** * The sidebar markup * * @var string */ protected $sidebar; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { ContentHelper::addSubmenu('featured'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->authors = $this->get('Authors'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); $this->vote = JPluginHelper::isEnabled('content', 'vote'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Levels filter - Used in Hathor. // @deprecated 4.0 To be removed with Hathor $this->f_levels = array( JHtml::_('select.option', '1', JText::_('J1')), JHtml::_('select.option', '2', JText::_('J2')), JHtml::_('select.option', '3', JText::_('J3')), JHtml::_('select.option', '4', JText::_('J4')), JHtml::_('select.option', '5', JText::_('J5')), JHtml::_('select.option', '6', JText::_('J6')), JHtml::_('select.option', '7', JText::_('J7')), JHtml::_('select.option', '8', JText::_('J8')), JHtml::_('select.option', '9', JText::_('J9')), JHtml::_('select.option', '10', JText::_('J10')), ); $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); $canDo = JHelperContent::getActions('com_content', 'category', $this->state->get('filter.category_id')); JToolbarHelper::title(JText::_('COM_CONTENT_FEATURED_TITLE'), 'star featured'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('article.add'); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('article.edit'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::publish('articles.publish', 'JTOOLBAR_PUBLISH', true); JToolbarHelper::unpublish('articles.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolbarHelper::custom('articles.unfeatured', 'unfeatured.png', 'featured_f2.png', 'JUNFEATURE', true); JToolbarHelper::archiveList('articles.archive'); JToolbarHelper::checkin('articles.checkin'); } if ($state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'articles.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::trash('articles.trash'); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_content'); } JToolbarHelper::help('JHELP_CONTENT_FEATURED_ARTICLES'); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { return array( 'fp.ordering' => JText::_('JGRID_HEADING_ORDERING'), 'a.state' => JText::_('JSTATUS'), 'a.title' => JText::_('JGLOBAL_TITLE'), 'category_title' => JText::_('JCATEGORY'), 'access_level' => JText::_('JGRID_HEADING_ACCESS'), 'a.created_by' => JText::_('JAUTHOR'), 'language' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.created' => JText::_('JDATE'), 'a.id' => JText::_('JGRID_HEADING_ID'), ); } } PKb��\{m�S��Acomponents/com_content/views/articles/tmpl/default_batch_body.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $published = $this->state->get('filter.published'); ?> <div class="container-fluid"> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.item', 'com_content'); ?> </div> </div> <?php endif; ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.tag'); ?> </div> </div> </div> </div> PKb��\Q�}%##Ccomponents/com_content/views/articles/tmpl/default_batch_footer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <button type="button" class="btn" onclick="document.getElementById('batch-category-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value='';document.getElementById('batch-user-id').value='';document.getElementById('batch-tag-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button type="submit" class="btn btn-success" onclick="Joomla.submitbutton('article.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> PKb��\1mMx��4components/com_content/views/articles/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $app = JFactory::getApplication(); if ($app->isClient('site')) { JSession::checkToken('get') or die(JText::_('JINVALID_TOKEN')); } JLoader::register('ContentHelperRoute', JPATH_ROOT . '/components/com_content/helpers/route.php'); // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.core'); JHtml::_('behavior.polyfill', array('event'), 'lt IE 9'); JHtml::_('script', 'com_content/admin-articles-modal.min.js', array('version' => 'auto', 'relative' => true)); JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); JHtml::_('bootstrap.popover', '.hasPopover', array('placement' => 'bottom')); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', '.multipleTags', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_TAG'))); JHtml::_('formbehavior.chosen', '.multipleCategories', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_CATEGORY'))); JHtml::_('formbehavior.chosen', '.multipleAccessLevels', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_ACCESS'))); JHtml::_('formbehavior.chosen', '.multipleAuthors', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_AUTHOR'))); JHtml::_('formbehavior.chosen', 'select'); // Special case for the search field tooltip. $searchFilterDesc = $this->filterForm->getFieldAttribute('search', 'description', null, 'filter'); JHtml::_('bootstrap.tooltip', '#filter_search', array('title' => JText::_($searchFilterDesc), 'placement' => 'bottom')); $function = $app->input->getCmd('function', 'jSelectArticle'); $editor = $app->input->getCmd('editor', ''); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $onclick = $this->escape($function); if (!empty($editor)) { // This view is used also in com_menus. Load the xtd script only if the editor is set! JFactory::getDocument()->addScriptOptions('xtd-articles', array('editor' => $editor)); $onclick = "jSelectArticle"; } ?> <div class="container-popup"> <form action="<?php echo JRoute::_('index.php?option=com_content&view=articles&layout=modal&tmpl=component&function=' . $function . '&' . JSession::getFormToken() . '=1&editor=' . $editor); ?>" method="post" name="adminForm" id="adminForm" class="form-inline"> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"></div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped table-condensed"> <thead> <tr> <th width="1%" class="center nowrap"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th class="title"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'a.access', $listDirn, $listOrder); ?> </th> <th width="15%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'language', $listDirn, $listOrder); ?> </th> <th width="5%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JDATE', 'a.created', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="6"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $iconStates = array( -2 => 'icon-trash', 0 => 'icon-unpublish', 1 => 'icon-publish', 2 => 'icon-archive', ); ?> <?php foreach ($this->items as $i => $item) : ?> <?php if ($item->language && JLanguageMultilang::isEnabled()) { $tag = strlen($item->language); if ($tag == 5) { $lang = substr($item->language, 0, 2); } elseif ($tag == 6) { $lang = substr($item->language, 0, 3); } else { $lang = ''; } } elseif (!JLanguageMultilang::isEnabled()) { $lang = ''; } ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <span class="<?php echo $iconStates[$this->escape($item->state)]; ?>" aria-hidden="true"></span> </td> <td> <?php $attribs = 'data-function="' . $this->escape($onclick) . '"' . ' data-id="' . $item->id . '"' . ' data-title="' . $this->escape($item->title) . '"' . ' data-cat-id="' . $this->escape($item->catid) . '"' . ' data-uri="' . $this->escape(ContentHelperRoute::getArticleRoute($item->id, $item->catid, $item->language)) . '"' . ' data-language="' . $this->escape($lang) . '"'; ?> <a class="select-link" href="javascript:void(0)" <?php echo $attribs; ?>> <?php echo $this->escape($item->title); ?></a> <span class="small break-word"> <?php if (empty($item->note)) : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?> <?php else : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS_NOTE', $this->escape($item->alias), $this->escape($item->note)); ?> <?php endif; ?> </span> <div class="small"> <?php echo JText::_('JCATEGORY') . ': ' . $this->escape($item->category_title); ?> </div> </td> <td class="small hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <td class="small"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="nowrap small hidden-phone"> <?php echo JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC4')); ?> </td> <td class="nowrap small hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="forcedLanguage" value="<?php echo $app->input->get('forcedLanguage', '', 'CMD'); ?>" /> <?php echo JHtml::_('form.token'); ?> </form> </div> PKb��\�����8�86components/com_content/views/articles/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', '.multipleTags', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_TAG'))); JHtml::_('formbehavior.chosen', '.multipleCategories', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_CATEGORY'))); JHtml::_('formbehavior.chosen', '.multipleAccessLevels', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_ACCESS'))); JHtml::_('formbehavior.chosen', '.multipleAuthors', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_AUTHOR'))); JHtml::_('formbehavior.chosen', 'select'); $app = JFactory::getApplication(); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = $listOrder == 'a.ordering'; $columns = 10; if (strpos($listOrder, 'publish_up') !== false) { $orderingColumn = 'publish_up'; } elseif (strpos($listOrder, 'publish_down') !== false) { $orderingColumn = 'publish_down'; } elseif (strpos($listOrder, 'modified') !== false) { $orderingColumn = 'modified'; } else { $orderingColumn = 'created'; } if ($saveOrder) { $saveOrderingUrl = 'index.php?option=com_content&task=articles.saveOrderAjax&tmpl=component'; JHtml::_('sortablelist.sortable', 'articleList', 'adminForm', strtolower($listDirn), $saveOrderingUrl); } $assoc = JLanguageAssociations::isEnabled(); ?> <form action="<?php echo JRoute::_('index.php?option=com_content&view=articles'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php // Search tools bar echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="articleList"> <thead> <tr> <th width="1%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', '', 'a.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?> </th> <th width="1%" class="center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th style="min-width:100px" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'a.access', $listDirn, $listOrder); ?> </th> <?php if ($assoc) : ?> <?php $columns++; ?> <th width="5%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_CONTENT_HEADING_ASSOCIATION', 'association', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JAUTHOR', 'a.created_by', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'language', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_CONTENT_HEADING_DATE_' . strtoupper($orderingColumn), 'a.' . $orderingColumn, $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?> </th> <?php if ($this->vote) : ?> <?php $columns++; ?> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_VOTES', 'rating_count', $listDirn, $listOrder); ?> </th> <?php $columns++; ?> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_RATINGS', 'rating', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="<?php echo $columns; ?>"> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $item->max_ordering = 0; $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_content.category.' . $item->catid); $canEdit = $user->authorise('core.edit', 'com_content.article.' . $item->id); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canEditOwn = $user->authorise('core.edit.own', 'com_content.article.' . $item->id) && $item->created_by == $userId; $canChange = $user->authorise('core.edit.state', 'com_content.article.' . $item->id) && $canCheckin; $canEditCat = $user->authorise('core.edit', 'com_content.category.' . $item->catid); $canEditOwnCat = $user->authorise('core.edit.own', 'com_content.category.' . $item->catid) && $item->category_uid == $userId; $canEditParCat = $user->authorise('core.edit', 'com_content.category.' . $item->parent_category_id); $canEditOwnParCat = $user->authorise('core.edit.own', 'com_content.category.' . $item->parent_category_id) && $item->parent_category_uid == $userId; ?> <tr class="row<?php echo $i % 2; ?>" sortable-group-id="<?php echo $item->catid; ?>"> <td class="order nowrap center hidden-phone"> <?php $iconClass = ''; if (!$canChange) { $iconClass = ' inactive'; } elseif (!$saveOrder) { $iconClass = ' inactive tip-top hasTooltip" title="' . JHtml::_('tooltipText', 'JORDERINGDISABLED'); } ?> <span class="sortable-handler<?php echo $iconClass ?>"> <span class="icon-menu" aria-hidden="true"></span> </span> <?php if ($canChange && $saveOrder) : ?> <input type="text" style="display:none" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order" /> <?php endif; ?> </td> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td class="center"> <div class="btn-group"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'articles.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> <?php echo JHtml::_('contentadministrator.featured', $item->featured, $i, $canChange); ?> <?php // Create dropdown items and render the dropdown list. if ($canChange) { JHtml::_('actionsdropdown.' . ((int) $item->state === 2 ? 'un' : '') . 'archive', 'cb' . $i, 'articles'); JHtml::_('actionsdropdown.' . ((int) $item->state === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'articles'); echo JHtml::_('actionsdropdown.render', $this->escape($item->title)); } ?> </div> </td> <td class="has-context"> <div class="pull-left break-word"> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'articles.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit || $canEditOwn) : ?> <a class="hasTooltip" href="<?php echo JRoute::_('index.php?option=com_content&task=article.edit&id=' . $item->id); ?>" title="<?php echo JText::_('JACTION_EDIT'); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <span title="<?php echo JText::sprintf('JFIELD_ALIAS_LABEL', $this->escape($item->alias)); ?>"><?php echo $this->escape($item->title); ?></span> <?php endif; ?> <span class="small break-word"> <?php if (empty($item->note)) : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?> <?php else : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS_NOTE', $this->escape($item->alias), $this->escape($item->note)); ?> <?php endif; ?> </span> <div class="small"> <?php $ParentCatUrl = JRoute::_('index.php?option=com_categories&task=category.edit&id=' . $item->parent_category_id . '&extension=com_content'); $CurrentCatUrl = JRoute::_('index.php?option=com_categories&task=category.edit&id=' . $item->catid . '&extension=com_content'); $EditCatTxt = JText::_('JACTION_EDIT') . ' ' . JText::_('JCATEGORY'); echo JText::_('JCATEGORY') . ': '; if ($item->category_level != '1') : if ($item->parent_category_level != '1') : echo ' » '; endif; endif; if (JFactory::getLanguage()->isRtl()) { if ($canEditCat || $canEditOwnCat) : echo '<a class="hasTooltip" href="' . $CurrentCatUrl . '" title="' . $EditCatTxt . '">'; endif; echo $this->escape($item->category_title); if ($canEditCat || $canEditOwnCat) : echo '</a>'; endif; if ($item->category_level != '1') : echo ' « '; if ($canEditParCat || $canEditOwnParCat) : echo '<a class="hasTooltip" href="' . $ParentCatUrl . '" title="' . $EditCatTxt . '">'; endif; echo $this->escape($item->parent_category_title); if ($canEditParCat || $canEditOwnParCat) : echo '</a>'; endif; endif; } else { if ($item->category_level != '1') : if ($canEditParCat || $canEditOwnParCat) : echo '<a class="hasTooltip" href="' . $ParentCatUrl . '" title="' . $EditCatTxt . '">'; endif; echo $this->escape($item->parent_category_title); if ($canEditParCat || $canEditOwnParCat) : echo '</a>'; endif; echo ' » '; endif; if ($canEditCat || $canEditOwnCat) : echo '<a class="hasTooltip" href="' . $CurrentCatUrl . '" title="' . $EditCatTxt . '">'; endif; echo $this->escape($item->category_title); if ($canEditCat || $canEditOwnCat) : echo '</a>'; endif; } ?> </div> </div> </td> <td class="small hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <?php if ($assoc) : ?> <td class="hidden-phone"> <?php if ($item->association) : ?> <?php echo JHtml::_('contentadministrator.association', $item->id); ?> <?php endif; ?> </td> <?php endif; ?> <td class="small hidden-phone"> <?php if ((int) $item->created_by != 0) : ?> <?php if ($item->created_by_alias) : ?> <a class="hasTooltip" href="<?php echo JRoute::_('index.php?option=com_users&task=user.edit&id=' . (int) $item->created_by); ?>" title="<?php echo JText::_('JAUTHOR'); ?>"> <?php echo $this->escape($item->author_name); ?></a> <div class="smallsub"><?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->created_by_alias)); ?></div> <?php else : ?> <a class="hasTooltip" href="<?php echo JRoute::_('index.php?option=com_users&task=user.edit&id=' . (int) $item->created_by); ?>" title="<?php echo JText::_('JAUTHOR'); ?>"> <?php echo $this->escape($item->author_name); ?></a> <?php endif; ?> <?php else : ?> <?php if ($item->created_by_alias) : ?> <?php echo JText::_('JNONE'); ?> <div class="smallsub"><?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->created_by_alias)); ?></div> <?php else : ?> <?php echo JText::_('JNONE'); ?> <?php endif; ?> <?php endif; ?> </td> <td class="small hidden-phone"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="nowrap small hidden-phone"> <?php $date = $item->{$orderingColumn}; echo $date > 0 ? JHtml::_('date', $date, JText::_('DATE_FORMAT_LC4')) : '-'; ?> </td> <td class="hidden-phone center"> <span class="badge badge-info"> <?php echo (int) $item->hits; ?> </span> </td> <?php if ($this->vote) : ?> <td class="hidden-phone center"> <span class="badge badge-success" > <?php echo (int) $item->rating_count; ?> </span> </td> <td class="hidden-phone center"> <span class="badge badge-warning" > <?php echo (int) $item->rating; ?> </span> </td> <?php endif; ?> <td class="hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php // Load the batch processing form. ?> <?php if ($user->authorise('core.create', 'com_content') && $user->authorise('core.edit', 'com_content') && $user->authorise('core.edit.state', 'com_content')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_CONTENT_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <?php endif; ?> <?php echo $this->pagination->getListFooter(); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\ss���<components/com_content/views/articles/tmpl/default_batch.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * @deprecated 3.4 Use default_batch_body and default_batch_footer */ defined('_JEXEC') or die; $published = $this->state->get('filter.published'); ?> <div class="modal hide fade" id="collapseModal"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3><?php echo JText::_('COM_CONTENT_BATCH_OPTIONS'); ?></h3> </div> <div class="modal-body modal-batch"> <p><?php echo JText::_('COM_CONTENT_BATCH_TIP'); ?></p> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.item', 'com_content'); ?> </div> </div> <?php endif; ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.tag'); ?> </div> </div> </div> </div> <div class="modal-footer"> <button class="btn" type="button" onclick="document.getElementById('batch-category-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value='';document.getElementById('batch-tag-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button class="btn btn-primary" type="submit" onclick="Joomla.submitbutton('article.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> </div> </div> PKb��\�*��3components/com_content/views/articles/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of articles. * * @since 1.6 */ class ContentViewArticles extends JViewLegacy { /** * The item authors * * @var stdClass * * @deprecated 4.0 To be removed with Hathor */ protected $authors; /** * An array of items * * @var array */ protected $items; /** * The pagination object * * @var JPagination */ protected $pagination; /** * The model state * * @var object */ protected $state; /** * Form object for search filters * * @var JForm */ public $filterForm; /** * The active search filters * * @var array */ public $activeFilters; /** * The sidebar markup * * @var string */ protected $sidebar; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { if ($this->getLayout() !== 'modal') { ContentHelper::addSubmenu('articles'); } $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->authors = $this->get('Authors'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); $this->vote = JPluginHelper::isEnabled('content', 'vote'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Levels filter - Used in Hathor. // @deprecated 4.0 To be removed with Hathor $this->f_levels = array( JHtml::_('select.option', '1', JText::_('J1')), JHtml::_('select.option', '2', JText::_('J2')), JHtml::_('select.option', '3', JText::_('J3')), JHtml::_('select.option', '4', JText::_('J4')), JHtml::_('select.option', '5', JText::_('J5')), JHtml::_('select.option', '6', JText::_('J6')), JHtml::_('select.option', '7', JText::_('J7')), JHtml::_('select.option', '8', JText::_('J8')), JHtml::_('select.option', '9', JText::_('J9')), JHtml::_('select.option', '10', JText::_('J10')), ); // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); } else { // In article associations modal we need to remove language filter if forcing a language. // We also need to change the category filter to show show categories with All or the forced language. if ($forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'CMD')) { // If the language is forced we can't allow to select the language, so transform the language selector filter into a hidden field. $languageXml = new SimpleXMLElement('<field name="language" type="hidden" default="' . $forcedLanguage . '" />'); $this->filterForm->setField($languageXml, 'filter', true); // Also, unset the active language filter so the search tools is not open by default with this filter. unset($this->activeFilters['language']); // One last changes needed is to change the category filter to just show categories with All language or with the forced language. $this->filterForm->setFieldAttribute('category_id', 'language', '*,' . $forcedLanguage, 'filter'); } } return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_content', 'category', $this->state->get('filter.category_id')); $user = JFactory::getUser(); // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); JToolbarHelper::title(JText::_('COM_CONTENT_ARTICLES_TITLE'), 'stack article'); if ($canDo->get('core.create') || count($user->getAuthorisedCategories('com_content', 'core.create')) > 0) { JToolbarHelper::addNew('article.add'); } if ($canDo->get('core.edit') || $canDo->get('core.edit.own')) { JToolbarHelper::editList('article.edit'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::publish('articles.publish', 'JTOOLBAR_PUBLISH', true); JToolbarHelper::unpublish('articles.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolbarHelper::custom('articles.featured', 'featured.png', 'featured_f2.png', 'JFEATURE', true); JToolbarHelper::custom('articles.unfeatured', 'unfeatured.png', 'featured_f2.png', 'JUNFEATURE', true); JToolbarHelper::archiveList('articles.archive'); JToolbarHelper::checkin('articles.checkin'); } // Add a batch button if ($user->authorise('core.create', 'com_content') && $user->authorise('core.edit', 'com_content') && $user->authorise('core.edit.state', 'com_content')) { $title = JText::_('JTOOLBAR_BATCH'); // Instantiate a new JLayoutFile instance and render the batch button $layout = new JLayoutFile('joomla.toolbar.batch'); $dhtml = $layout->render(array('title' => $title)); $bar->appendButton('Custom', $dhtml, 'batch'); } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'articles.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::trash('articles.trash'); } if ($user->authorise('core.admin', 'com_content') || $user->authorise('core.options', 'com_content')) { JToolbarHelper::preferences('com_content'); } JToolbarHelper::help('JHELP_CONTENT_ARTICLE_MANAGER'); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { return array( 'a.ordering' => JText::_('JGRID_HEADING_ORDERING'), 'a.state' => JText::_('JSTATUS'), 'a.title' => JText::_('JGLOBAL_TITLE'), 'category_title' => JText::_('JCATEGORY'), 'access_level' => JText::_('JGRID_HEADING_ACCESS'), 'a.created_by' => JText::_('JAUTHOR'), 'language' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.created' => JText::_('JDATE'), 'a.id' => JText::_('JGRID_HEADING_ID'), 'a.featured' => JText::_('JFEATURED') ); } } PKb��\y��UU?components/com_content/views/article/tmpl/edit_associations.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.associations', $this); PKb��\f�P�332components/com_content/views/article/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', '#jform_catid', null, array('disable_search_threshold' => 0 )); JHtml::_('formbehavior.chosen', '#jform_tags', null, array('placeholder_text_multiple' => JText::_('JGLOBAL_TYPE_OR_SELECT_SOME_TAGS'))); JHtml::_('formbehavior.chosen', 'select'); $this->configFieldsets = array('editorConfig'); $this->hiddenFieldsets = array('basic-limited'); $this->ignore_fieldsets = array('jmetadata', 'item_associations'); // Create shortcut to parameters. $params = clone $this->state->get('params'); $params->merge(new Registry($this->item->attribs)); $app = JFactory::getApplication(); $input = $app->input; $assoc = JLanguageAssociations::isEnabled(); JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(task) { if (task == "article.cancel" || document.formvalidator.isValid(document.getElementById("item-form"))) { jQuery("#permissions-sliders select").attr("disabled", "disabled"); ' . $this->form->getField('articletext')->save() . ' Joomla.submitform(task, document.getElementById("item-form")); // @deprecated 4.0 The following js is not needed since 3.7.0. if (task !== "article.apply") { window.parent.jQuery("#articleEdit' . (int) $this->item->id . 'Modal").modal("hide"); } } }; '); // In case of modal $isModal = $input->get('layout') == 'modal' ? true : false; $layout = $isModal ? 'modal' : 'edit'; $tmpl = $isModal || $input->get('tmpl', '', 'cmd') === 'component' ? '&tmpl=component' : ''; ?> <form action="<?php echo JRoute::_('index.php?option=com_content&layout=' . $layout . $tmpl . '&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="item-form" class="form-validate"> <?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?> <div class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'general')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'general', JText::_('COM_CONTENT_ARTICLE_CONTENT')); ?> <div class="row-fluid"> <div class="span9"> <fieldset class="adminform"> <?php echo $this->form->getInput('articletext'); ?> </fieldset> </div> <div class="span3"> <?php echo JLayoutHelper::render('joomla.edit.global', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php // Do not show the images and links options if the edit form is configured not to. ?> <?php if ($params->get('show_urls_images_backend') == 1) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'images', JText::_('COM_CONTENT_FIELDSET_URLS_AND_IMAGES')); ?> <div class="row-fluid form-horizontal-desktop"> <div class="span6"> <?php echo $this->form->renderField('images'); ?> <?php foreach ($this->form->getGroup('images') as $field) : ?> <?php echo $field->renderField(); ?> <?php endforeach; ?> </div> <div class="span6"> <?php foreach ($this->form->getGroup('urls') as $field) : ?> <?php echo $field->renderField(); ?> <?php endforeach; ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php $this->show_options = $params->get('show_article_options', 1); ?> <?php echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php // Do not show the publishing options if the edit form is configured not to. ?> <?php if ($params->get('show_publishing_options', 1) == 1) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'publishing', JText::_('COM_CONTENT_FIELDSET_PUBLISHING')); ?> <div class="row-fluid form-horizontal-desktop"> <div class="span6"> <?php echo JLayoutHelper::render('joomla.edit.publishingdata', $this); ?> </div> <div class="span6"> <?php echo JLayoutHelper::render('joomla.edit.metadata', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php if ( ! $isModal && $assoc) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'associations', JText::_('JGLOBAL_FIELDSET_ASSOCIATIONS')); ?> <?php echo $this->loadTemplate('associations'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php elseif ($isModal && $assoc) : ?> <div class="hidden"><?php echo $this->loadTemplate('associations'); ?></div> <?php endif; ?> <?php if ($this->canDo->get('core.admin')) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'editor', JText::_('COM_CONTENT_SLIDER_EDITOR_CONFIG')); ?> <?php echo $this->form->renderFieldset('editorConfig'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php if ($this->canDo->get('core.admin')) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'permissions', JText::_('COM_CONTENT_FIELDSET_RULES')); ?> <?php echo $this->form->getInput('rules'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="return" value="<?php echo $input->getCmd('return'); ?>" /> <input type="hidden" name="forcedLanguage" value="<?php echo $input->get('forcedLanguage', '', 'cmd'); ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\y��UU@components/com_content/views/article/tmpl/modal_associations.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.associations', $this); PKb��\>�S�ll3components/com_content/views/article/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); // @deprecated 4.0 the function parameter, the inline js and the buttons are not needed since 3.7.0. $function = JFactory::getApplication()->input->getCmd('function', 'jEditArticle_' . (int) $this->item->id); // Function to update input title when changed JFactory::getDocument()->addScriptDeclaration(' function jEditArticleModal() { if (window.parent && document.formvalidator.isValid(document.getElementById("item-form"))) { return window.parent.' . $this->escape($function) . '(document.getElementById("jform_title").value); } } '); ?> <button id="applyBtn" type="button" class="hidden" onclick="Joomla.submitbutton('article.apply'); jEditArticleModal();"></button> <button id="saveBtn" type="button" class="hidden" onclick="Joomla.submitbutton('article.save'); jEditArticleModal();"></button> <button id="closeBtn" type="button" class="hidden" onclick="Joomla.submitbutton('article.cancel');"></button> <div class="container-popup"> <?php $this->setLayout('edit'); ?> <?php echo $this->loadTemplate(); ?> </div> PKb��\]�QQ;components/com_content/views/article/tmpl/edit_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.metadata', $this); PKb��\]�QQ<components/com_content/views/article/tmpl/modal_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.metadata', $this); PKb��\D�T���7components/com_content/views/article/tmpl/pagebreak.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.core'); JHtml::_('behavior.polyfill', array('event'), 'lt IE 9'); JHtml::_('script', 'com_content/admin-article-pagebreak.min.js', array('version' => 'auto', 'relative' => true)); $document = JFactory::getDocument(); $this->eName = JFactory::getApplication()->input->getCmd('e_name', ''); $this->eName = preg_replace('#[^A-Z0-9\-\_\[\]]#i', '', $this->eName); $document->setTitle(JText::_('COM_CONTENT_PAGEBREAK_DOC_TITLE')); ?> <div class="container-popup"> <form class="form-horizontal"> <div class="control-group"> <label for="title" class="control-label"><?php echo JText::_('COM_CONTENT_PAGEBREAK_TITLE'); ?></label> <div class="controls"><input type="text" id="title" name="title" /></div> </div> <div class="control-group"> <label for="alias" class="control-label"><?php echo JText::_('COM_CONTENT_PAGEBREAK_TOC'); ?></label> <div class="controls"><input type="text" id="alt" name="alt" /></div> </div> <button onclick="insertPagebreak('<?php echo $this->eName; ?>');" class="btn btn-success pull-right"> <?php echo JText::_('COM_CONTENT_PAGEBREAK_INSERT_BUTTON'); ?> </button> </form> </div> PKb��\���˶�2components/com_content/views/article/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit an article. * * @since 1.6 */ class ContentViewArticle extends JViewLegacy { /** * The JForm object * * @var JForm */ protected $form; /** * The active item * * @var object */ protected $item; /** * The model state * * @var object */ protected $state; /** * The actions the user is authorised to perform * * @var JObject */ protected $canDo; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { if ($this->getLayout() == 'pagebreak') { return parent::display($tpl); } $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); $this->canDo = JHelperContent::getActions('com_content', 'article', $this->item->id); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // If we are forcing a language in modal (used for associations). if ($this->getLayout() === 'modal' && $forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'cmd')) { // Set the language field to the forcedLanguage and disable changing it. $this->form->setValue('language', null, $forcedLanguage); $this->form->setFieldAttribute('language', 'readonly', 'true'); // Only allow to select categories with All language or with the forced language. $this->form->setFieldAttribute('catid', 'language', '*,' . $forcedLanguage); // Only allow to select tags with All language or with the forced language. $this->form->setFieldAttribute('tags', 'language', '*,' . $forcedLanguage); } $this->addToolbar(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $user = JFactory::getUser(); $userId = $user->id; $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $userId); // Built the actions for new and existing records. $canDo = $this->canDo; JToolbarHelper::title( JText::_('COM_CONTENT_PAGE_' . ($checkedOut ? 'VIEW_ARTICLE' : ($isNew ? 'ADD_ARTICLE' : 'EDIT_ARTICLE'))), 'pencil-2 article-add' ); // For new records, check the create permission. if ($isNew && (count($user->getAuthorisedCategories('com_content', 'core.create')) > 0)) { JToolbarHelper::apply('article.apply'); JToolbarHelper::save('article.save'); JToolbarHelper::save2new('article.save2new'); JToolbarHelper::cancel('article.cancel'); } else { // Since it's an existing record, check the edit permission, or fall back to edit own if the owner. $itemEditable = $canDo->get('core.edit') || ($canDo->get('core.edit.own') && $this->item->created_by == $userId); // Can't save the record if it's checked out and editable if (!$checkedOut && $itemEditable) { JToolbarHelper::apply('article.apply'); JToolbarHelper::save('article.save'); // We can save this record, but check the create permission to see if we can return to make a new one. if ($canDo->get('core.create')) { JToolbarHelper::save2new('article.save2new'); } } // If checked out, we can still save if ($canDo->get('core.create')) { JToolbarHelper::save2copy('article.save2copy'); } if (JComponentHelper::isEnabled('com_contenthistory') && $this->state->params->get('save_history', 0) && $itemEditable) { JToolbarHelper::versions('com_content.article', $this->item->id); } if (JLanguageAssociations::isEnabled() && JComponentHelper::isEnabled('com_associations')) { JToolbarHelper::custom('article.editAssociations', 'contract', 'contract', 'JTOOLBAR_ASSOCIATIONS', false, false); } JToolbarHelper::cancel('article.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_CONTENT_ARTICLE_MANAGER_EDIT'); } } PKb��\C�b��*components/com_content/helpers/content.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Content component helper. * * @since 1.6 */ class ContentHelper extends JHelperContent { public static $extension = 'com_content'; /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void * * @since 1.6 */ public static function addSubmenu($vName) { JHtmlSidebar::addEntry( JText::_('JGLOBAL_ARTICLES'), 'index.php?option=com_content&view=articles', $vName == 'articles' ); JHtmlSidebar::addEntry( JText::_('COM_CONTENT_SUBMENU_CATEGORIES'), 'index.php?option=com_categories&extension=com_content', $vName == 'categories' ); JHtmlSidebar::addEntry( JText::_('COM_CONTENT_SUBMENU_FEATURED'), 'index.php?option=com_content&view=featured', $vName == 'featured' ); if (JComponentHelper::isEnabled('com_fields') && JComponentHelper::getParams('com_content')->get('custom_fields_enable', '1')) { JHtmlSidebar::addEntry( JText::_('JGLOBAL_FIELDS'), 'index.php?option=com_fields&context=com_content.article', $vName == 'fields.fields' ); JHtmlSidebar::addEntry( JText::_('JGLOBAL_FIELD_GROUPS'), 'index.php?option=com_fields&view=groups&context=com_content.article', $vName == 'fields.groups' ); } } /** * Applies the content tag filters to arbitrary text as per settings for current user group * * @param text $text The string to filter * * @return string The filtered string * * @deprecated 4.0 Use JComponentHelper::filterText() instead. */ public static function filterText($text) { try { JLog::add( sprintf('%s() is deprecated. Use JComponentHelper::filterText() instead', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } return JComponentHelper::filterText($text); } /** * Adds Count Items for Category Manager. * * @param stdClass[] &$items The category objects * * @return stdClass[] * * @since 3.5 */ public static function countItems(&$items) { $config = (object) array( 'related_tbl' => 'content', 'state_col' => 'state', 'group_col' => 'catid', 'relation_type' => 'category_or_group', ); return parent::countRelations($items, $config); } /** * Adds Count Items for Tag Manager. * * @param stdClass[] &$items The tag objects * @param string $extension The name of the active view. * * @return stdClass[] * * @since 3.6 */ public static function countTagItems(&$items, $extension) { $parts = explode('.', $extension); $section = count($parts) > 1 ? $parts[1] : null; $config = (object) array( 'related_tbl' => ($section === 'category' ? 'categories' : 'content'), 'state_col' => ($section === 'category' ? 'published' : 'state'), 'group_col' => 'tag_id', 'extension' => $extension, 'relation_type' => 'tag_assigments', ); return parent::countRelations($items, $config); } /** * Returns a valid section for articles. If it is not valid then null * is returned. * * @param string $section The section to get the mapping for * * @return string|null The new section * * @since 3.7.0 */ public static function validateSection($section) { if (JFactory::getApplication()->isClient('site')) { // On the front end we need to map some sections switch ($section) { // Editing an article case 'form': // Category list view case 'featured': case 'category': $section = 'article'; } } if ($section != 'article') { // We don't know other sections return null; } return $section; } /** * Returns valid contexts * * @return array * * @since 3.7.0 */ public static function getContexts() { JFactory::getLanguage()->load('com_content', JPATH_ADMINISTRATOR); $contexts = array( 'com_content.article' => JText::_('COM_CONTENT'), 'com_content.categories' => JText::_('JCATEGORY') ); return $contexts; } } PKb��\�KA��<components/com_content/helpers/html/contentadministrator.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; JLoader::register('ContentHelper', JPATH_ADMINISTRATOR . '/components/com_content/helpers/content.php'); /** * Content HTML helper * * @since 3.0 */ abstract class JHtmlContentAdministrator { /** * Render the list of associated items * * @param integer $articleid The article item id * * @return string The language HTML * * @throws Exception */ public static function association($articleid) { // Defaults $html = ''; // Get the associations if ($associations = JLanguageAssociations::getAssociations('com_content', '#__content', 'com_content.item', $articleid)) { foreach ($associations as $tag => $associated) { $associations[$tag] = (int) $associated->id; } // Get the associated menu items $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('c.*') ->select('l.sef as lang_sef') ->select('l.lang_code') ->from('#__content as c') ->select('cat.title as category_title') ->join('LEFT', '#__categories as cat ON cat.id=c.catid') ->where('c.id IN (' . implode(',', array_values($associations)) . ')') ->where('c.id != ' . $articleid) ->join('LEFT', '#__languages as l ON c.language=l.lang_code') ->select('l.image') ->select('l.title as language_title'); $db->setQuery($query); try { $items = $db->loadObjectList('id'); } catch (RuntimeException $e) { throw new Exception($e->getMessage(), 500, $e); } if ($items) { foreach ($items as &$item) { $text = $item->lang_sef ? strtoupper($item->lang_sef) : 'XX'; $url = JRoute::_('index.php?option=com_content&task=article.edit&id=' . (int) $item->id); $tooltip = htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8') . '<br />' . JText::sprintf('JCATEGORY_SPRINTF', $item->category_title); $classes = 'hasPopover label label-association label-' . $item->lang_sef; $item->link = '<a href="' . $url . '" title="' . $item->language_title . '" class="' . $classes . '" data-content="' . $tooltip . '" data-placement="top">' . $text . '</a>'; } } JHtml::_('bootstrap.popover'); $html = JLayoutHelper::render('joomla.content.associations', $items); } return $html; } /** * Show the feature/unfeature links * * @param integer $value The state value * @param integer $i Row number * @param boolean $canChange Is user allowed to change? * * @return string HTML code */ public static function featured($value = 0, $i, $canChange = true) { JHtml::_('bootstrap.tooltip'); // Array of image, task, title, action $states = array( 0 => array('unfeatured', 'articles.featured', 'COM_CONTENT_UNFEATURED', 'JGLOBAL_TOGGLE_FEATURED'), 1 => array('featured', 'articles.unfeatured', 'COM_CONTENT_FEATURED', 'JGLOBAL_TOGGLE_FEATURED'), ); $state = ArrayHelper::getValue($states, (int) $value, $states[1]); $icon = $state[0]; if ($canChange) { $html = '<a href="#" onclick="return listItemTask(\'cb' . $i . '\',\'' . $state[1] . '\')" class="btn btn-micro hasTooltip' . ($value == 1 ? ' active' : '') . '" title="' . JHtml::_('tooltipText', $state[3]) . '"><span class="icon-' . $icon . '" aria-hidden="true"></span></a>'; } else { $html = '<a class="btn btn-micro hasTooltip disabled' . ($value == 1 ? ' active' : '') . '" title="' . JHtml::_('tooltipText', $state[2]) . '"><span class="icon-' . $icon . '" aria-hidden="true"></span></a>'; } return $html; } } PKb��\Ǽ����"components/com_content/content.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_content</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_CONTENT_XML_DESCRIPTION</description> <files folder="site"> <filename>content.php</filename> <filename>controller.php</filename> <filename>router.php</filename> <folder>helpers</folder> <folder>models</folder> </files> <languages folder="site"> <language tag="en-GB">language/en-GB.com_content.ini</language> </languages> <administration> <files folder="admin"> <filename>access.xml</filename> <filename>config.xml</filename> <filename>content.php</filename> <filename>controller.php</filename> <folder>controllers</folder> <folder>elements</folder> <folder>helpers</folder> <folder>models</folder> <folder>tables</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_content.ini</language> <language tag="en-GB">language/en-GB.com_content.sys.ini</language> </languages> </administration> </extension> PKb��\��:o&o&6components/com_content/models/fields/modal/article.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; use Joomla\CMS\Language\LanguageHelper; /** * Supports a modal article picker. * * @since 1.6 */ class JFormFieldModal_Article extends JFormField { /** * The form field type. * * @var string * @since 1.6 */ protected $type = 'Modal_Article'; /** * Method to get the field input markup. * * @return string The field input markup. * * @since 1.6 */ protected function getInput() { $allowNew = ((string) $this->element['new'] == 'true'); $allowEdit = ((string) $this->element['edit'] == 'true'); $allowClear = ((string) $this->element['clear'] != 'false'); $allowSelect = ((string) $this->element['select'] != 'false'); $allowPropagate = ((string) $this->element['propagate'] == 'true'); $languages = LanguageHelper::getContentLanguages(array(0, 1)); // Load language JFactory::getLanguage()->load('com_content', JPATH_ADMINISTRATOR); // The active article id field. $value = (int) $this->value > 0 ? (int) $this->value : ''; // Create the modal id. $modalId = 'Article_' . $this->id; // Add the modal field script to the document head. JHtml::_('jquery.framework'); JHtml::_('script', 'system/modal-fields.js', array('version' => 'auto', 'relative' => true)); // Script to proxy the select modal function to the modal-fields.js file. if ($allowSelect) { static $scriptSelect = null; if (is_null($scriptSelect)) { $scriptSelect = array(); } if (!isset($scriptSelect[$this->id])) { JFactory::getDocument()->addScriptDeclaration(" function jSelectArticle_" . $this->id . "(id, title, catid, object, url, language) { window.processModalSelect('Article', '" . $this->id . "', id, title, catid, object, url, language); } "); JText::script('JGLOBAL_ASSOCIATIONS_PROPAGATE_FAILED'); $scriptSelect[$this->id] = true; } } // Setup variables for display. $linkArticles = 'index.php?option=com_content&view=articles&layout=modal&tmpl=component&' . JSession::getFormToken() . '=1'; $linkArticle = 'index.php?option=com_content&view=article&layout=modal&tmpl=component&' . JSession::getFormToken() . '=1'; if (isset($this->element['language'])) { $linkArticles .= '&forcedLanguage=' . $this->element['language']; $linkArticle .= '&forcedLanguage=' . $this->element['language']; $modalTitle = JText::_('COM_CONTENT_CHANGE_ARTICLE') . ' — ' . $this->element['label']; } else { $modalTitle = JText::_('COM_CONTENT_CHANGE_ARTICLE'); } $urlSelect = $linkArticles . '&function=jSelectArticle_' . $this->id; $urlEdit = $linkArticle . '&task=article.edit&id=\' + document.getElementById("' . $this->id . '_id").value + \''; $urlNew = $linkArticle . '&task=article.add'; if ($value) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('title')) ->from($db->quoteName('#__content')) ->where($db->quoteName('id') . ' = ' . (int) $value); $db->setQuery($query); try { $title = $db->loadResult(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } } $title = empty($title) ? JText::_('COM_CONTENT_SELECT_AN_ARTICLE') : htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); // The current article display field. $html = '<span class="input-append">'; $html .= '<input class="input-medium" id="' . $this->id . '_name" type="text" value="' . $title . '" disabled="disabled" size="35" />'; // Select article button if ($allowSelect) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? ' hidden' : '') . '"' . ' id="' . $this->id . '_select"' . ' data-toggle="modal"' . ' data-target="#ModalSelect' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_CONTENT_CHANGE_ARTICLE') . '">' . '<span class="icon-file" aria-hidden="true"></span> ' . JText::_('JSELECT') . '</button>'; } // New article button if ($allowNew) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? ' hidden' : '') . '"' . ' id="' . $this->id . '_new"' . ' data-toggle="modal"' . ' data-target="#ModalNew' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_CONTENT_NEW_ARTICLE') . '">' . '<span class="icon-new" aria-hidden="true"></span> ' . JText::_('JACTION_CREATE') . '</button>'; } // Edit article button if ($allowEdit) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_edit"' . ' data-toggle="modal"' . ' data-target="#ModalEdit' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_CONTENT_EDIT_ARTICLE') . '">' . '<span class="icon-edit" aria-hidden="true"></span> ' . JText::_('JACTION_EDIT') . '</button>'; } // Clear article button if ($allowClear) { $html .= '<button' . ' type="button"' . ' class="btn' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_clear"' . ' onclick="window.processModalParent(\'' . $this->id . '\'); return false;">' . '<span class="icon-remove" aria-hidden="true"></span>' . JText::_('JCLEAR') . '</button>'; } // Propagate article button if ($allowPropagate && count($languages) > 2) { // Strip off language tag at the end $tagLength = (int) strlen($this->element['language']); $callbackFunctionStem = substr("jSelectArticle_" . $this->id, 0, -$tagLength); $html .= '<a' . ' class="btn hasTooltip' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_propagate"' . ' href="#"' . ' title="' . JHtml::tooltipText('JGLOBAL_ASSOCIATIONS_PROPAGATE_TIP') . '"' . ' onclick="Joomla.propagateAssociation(\'' . $this->id . '\', \'' . $callbackFunctionStem . '\');">' . '<span class="icon-refresh" aria-hidden="true"></span>' . JText::_('JGLOBAL_ASSOCIATIONS_PROPAGATE_BUTTON') . '</a>'; } $html .= '</span>'; // Select article modal if ($allowSelect) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalSelect' . $modalId, array( 'title' => $modalTitle, 'url' => $urlSelect, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>', ) ); } // New article modal if ($allowNew) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalNew' . $modalId, array( 'title' => JText::_('COM_CONTENT_NEW_ARTICLE'), 'backdrop' => 'static', 'keyboard' => false, 'closeButton' => false, 'url' => $urlNew, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'article\', \'cancel\', \'item-form\'); return false;">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'article\', \'save\', \'item-form\'); return false;">' . JText::_('JSAVE') . '</button>' . '<button type="button" class="btn btn-success"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'article\', \'apply\', \'item-form\'); return false;">' . JText::_('JAPPLY') . '</button>', ) ); } // Edit article modal if ($allowEdit) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalEdit' . $modalId, array( 'title' => JText::_('COM_CONTENT_EDIT_ARTICLE'), 'backdrop' => 'static', 'keyboard' => false, 'closeButton' => false, 'url' => $urlEdit, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'article\', \'cancel\', \'item-form\'); return false;">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'article\', \'save\', \'item-form\'); return false;">' . JText::_('JSAVE') . '</button>' . '<button type="button" class="btn btn-success"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'article\', \'apply\', \'item-form\'); return false;">' . JText::_('JAPPLY') . '</button>', ) ); } // Note: class='required' for client side validation. $class = $this->required ? ' class="required modal-value"' : ''; $html .= '<input type="hidden" id="' . $this->id . '_id" ' . $class . ' data-required="' . (int) $this->required . '" name="' . $this->name . '" data-text="' . htmlspecialchars(JText::_('COM_CONTENT_SELECT_AN_ARTICLE', true), ENT_COMPAT, 'UTF-8') . '" value="' . $value . '" />'; return $html; } /** * Method to get the field label markup. * * @return string The field label markup. * * @since 3.4 */ protected function getLabel() { return str_replace($this->id, $this->id . '_id', parent::getLabel()); } } PKb��\X_��[�[/components/com_content/models/forms/article.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset addfieldpath="/administrator/components/com_categories/models/fields" > <field name="id" type="number" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" class="readonly" size="10" default="0" readonly="true" /> <field name="asset_id" type="hidden" filter="unset" /> <field name="title" type="text" label="JGLOBAL_TITLE" description="JFIELD_TITLE_DESC" class="input-xxlarge input-large-text" size="40" required="true" /> <field name="alias" type="text" label="JFIELD_ALIAS_LABEL" description="JFIELD_ALIAS_DESC" hint="JFIELD_ALIAS_PLACEHOLDER" size="40" /> <field name="note" type="text" label="COM_CONTENT_FIELD_NOTE_LABEL" description="COM_CONTENT_FIELD_NOTE_DESC" class="span12" size="40" maxlength="255" /> <field name="version_note" type="text" label="JGLOBAL_FIELD_VERSION_NOTE_LABEL" description="JGLOBAL_FIELD_VERSION_NOTE_DESC" class="span12" maxlength="255" size="45" /> <field name="articletext" type="editor" label="COM_CONTENT_FIELD_ARTICLETEXT_LABEL" description="COM_CONTENT_FIELD_ARTICLETEXT_DESC" filter="JComponentHelper::filterText" buttons="true" /> <field name="state" type="list" label="JSTATUS" description="JFIELD_PUBLISHED_DESC" class="chzn-color-state" filter="intval" size="1" default="1" > <option value="1">JPUBLISHED</option> <option value="0">JUNPUBLISHED</option> <option value="2">JARCHIVED</option> <option value="-2">JTRASHED</option> </field> <field name="catid" type="categoryedit" label="JCATEGORY" description="JFIELD_CATEGORY_DESC" required="true" default="" /> <field name="tags" type="tag" label="JTAG" description="JTAG_DESC" class="span12" multiple="true" /> <field name="buttonspacer" type="spacer" description="JGLOBAL_ACTION_PERMISSIONS_DESCRIPTION" /> <field name="created" type="calendar" label="COM_CONTENT_FIELD_CREATED_LABEL" description="COM_CONTENT_FIELD_CREATED_DESC" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="created_by" type="user" label="COM_CONTENT_FIELD_CREATED_BY_LABEL" description="COM_CONTENT_FIELD_CREATED_BY_DESC" /> <field name="created_by_alias" type="text" label="COM_CONTENT_FIELD_CREATED_BY_ALIAS_LABEL" description="COM_CONTENT_FIELD_CREATED_BY_ALIAS_DESC" size="20" /> <field name="modified" type="calendar" label="JGLOBAL_FIELD_MODIFIED_LABEL" description="COM_CONTENT_FIELD_MODIFIED_DESC" class="readonly" translateformat="true" showtime="true" size="22" readonly="true" filter="user_utc" /> <field name="modified_by" type="user" label="JGLOBAL_FIELD_MODIFIED_BY_LABEL" class="readonly" readonly="true" filter="unset" /> <field name="checked_out" type="hidden" filter="unset" /> <field name="checked_out_time" type="hidden" filter="unset" /> <field name="publish_up" type="calendar" label="COM_CONTENT_FIELD_PUBLISH_UP_LABEL" description="COM_CONTENT_FIELD_PUBLISH_UP_DESC" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="publish_down" type="calendar" label="COM_CONTENT_FIELD_PUBLISH_DOWN_LABEL" description="COM_CONTENT_FIELD_PUBLISH_DOWN_DESC" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="version" type="text" label="COM_CONTENT_FIELD_VERSION_LABEL" description="COM_CONTENT_FIELD_VERSION_DESC" size="6" class="readonly" readonly="true" filter="unset" /> <field name="ordering" type="text" label="JFIELD_ORDERING_LABEL" description="JFIELD_ORDERING_DESC" size="6" default="0" /> <field name="metakey" type="textarea" label="JFIELD_META_KEYWORDS_LABEL" description="JFIELD_META_KEYWORDS_DESC" rows="3" cols="30" /> <field name="metadesc" type="textarea" label="JFIELD_META_DESCRIPTION_LABEL" description="JFIELD_META_DESCRIPTION_DESC" rows="3" cols="30" /> <field name="access" type="accesslevel" label="JFIELD_ACCESS_LABEL" description="JFIELD_ACCESS_DESC" size="1" /> <field name="hits" type="number" label="JGLOBAL_HITS" description="COM_CONTENT_FIELD_HITS_DESC" class="readonly" size="6" readonly="true" filter="unset" /> <field name="language" type="contentlanguage" label="JFIELD_LANGUAGE_LABEL" description="COM_CONTENT_FIELD_LANGUAGE_DESC" > <option value="*">JALL</option> </field> <field name="featured" type="radio" label="JFEATURED" description="COM_CONTENT_FIELD_FEATURED_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="rules" type="rules" label="JFIELD_RULES_LABEL" translate_label="false" filter="rules" component="com_content" section="article" validate="rules" /> </fieldset> <fields name="attribs" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL"> <fieldset name="basic" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL"> <field name="article_layout" type="componentlayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_COMPONENT_LAYOUT_DESC" useglobal="true" extension="com_content" view="article" /> <field name="show_title" type="list" label="JGLOBAL_SHOW_TITLE_LABEL" description="JGLOBAL_SHOW_TITLE_DESC" class="chzn-color" useglobal="true" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="link_titles" type="list" label="JGLOBAL_LINKED_TITLES_LABEL" description="JGLOBAL_LINKED_TITLES_DESC" class="chzn-color" useglobal="true" > <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="show_tags" type="list" label="COM_CONTENT_FIELD_SHOW_TAGS_LABEL" description="COM_CONTENT_FIELD_SHOW_TAGS_DESC" class="chzn-color" useglobal="true" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_intro" type="list" label="JGLOBAL_SHOW_INTRO_LABEL" description="JGLOBAL_SHOW_INTRO_DESC" class="chzn-color" useglobal="true" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="info_block_position" type="list" label="COM_CONTENT_FIELD_INFOBLOCK_POSITION_LABEL" description="COM_CONTENT_FIELD_INFOBLOCK_POSITION_DESC" useglobal="true" > <option value="0">COM_CONTENT_FIELD_OPTION_ABOVE</option> <option value="1">COM_CONTENT_FIELD_OPTION_BELOW</option> <option value="2">COM_CONTENT_FIELD_OPTION_SPLIT</option> </field> <field name="info_block_show_title" type="list" label="COM_CONTENT_FIELD_INFOBLOCK_TITLE_LABEL" description="COM_CONTENT_FIELD_INFOBLOCK_TITLE_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_category" type="list" label="JGLOBAL_SHOW_CATEGORY_LABEL" description="JGLOBAL_SHOW_CATEGORY_DESC" useglobal="true" class="chzn-color" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="link_category" type="list" label="JGLOBAL_LINK_CATEGORY_LABEL" description="JGLOBAL_LINK_CATEGORY_DESC" useglobal="true" class="chzn-color" > <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="show_parent_category" type="list" label="JGLOBAL_SHOW_PARENT_CATEGORY_LABEL" description="JGLOBAL_SHOW_PARENT_CATEGORY_DESC" useglobal="true" class="chzn-color" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="link_parent_category" type="list" label="JGLOBAL_LINK_PARENT_CATEGORY_LABEL" description="JGLOBAL_LINK_PARENT_CATEGORY_DESC" useglobal="true" class="chzn-color" > <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="show_associations" type="list" label="JGLOBAL_SHOW_ASSOCIATIONS_LABEL" description="JGLOBAL_SHOW_ASSOCIATIONS_DESC" class="chzn-color" useglobal="true" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_author" type="list" label="JGLOBAL_SHOW_AUTHOR_LABEL" description="JGLOBAL_SHOW_AUTHOR_DESC" useglobal="true" class="chzn-color" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="link_author" type="list" label="JGLOBAL_LINK_AUTHOR_LABEL" description="JGLOBAL_LINK_AUTHOR_DESC" useglobal="true" class="chzn-color" > <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="show_create_date" type="list" label="JGLOBAL_SHOW_CREATE_DATE_LABEL" description="JGLOBAL_SHOW_CREATE_DATE_DESC" useglobal="true" class="chzn-color" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_modify_date" type="list" label="JGLOBAL_SHOW_MODIFY_DATE_LABEL" description="JGLOBAL_SHOW_MODIFY_DATE_DESC" useglobal="true" class="chzn-color" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_publish_date" type="list" label="JGLOBAL_SHOW_PUBLISH_DATE_LABEL" description="JGLOBAL_SHOW_PUBLISH_DATE_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_item_navigation" type="list" label="JGLOBAL_SHOW_NAVIGATION_LABEL" description="JGLOBAL_SHOW_NAVIGATION_DESC" useglobal="true" class="chzn-color" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_icons" type="list" label="JGLOBAL_SHOW_ICONS_LABEL" description="JGLOBAL_SHOW_ICONS_DESC" useglobal="true" class="chzn-color" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_print_icon" type="list" label="JGLOBAL_SHOW_PRINT_ICON_LABEL" description="JGLOBAL_SHOW_PRINT_ICON_DESC" useglobal="true" class="chzn-color" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_email_icon" type="list" label="JGLOBAL_SHOW_EMAIL_ICON_LABEL" description="JGLOBAL_SHOW_EMAIL_ICON_DESC" useglobal="true" class="chzn-color" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_vote" type="list" label="JGLOBAL_SHOW_VOTE_LABEL" description="JGLOBAL_SHOW_VOTE_DESC" useglobal="true" class="chzn-color" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_hits" type="list" label="JGLOBAL_SHOW_HITS_LABEL" description="JGLOBAL_SHOW_HITS_DESC" useglobal="true" class="chzn-color" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_noauth" type="list" label="JGLOBAL_SHOW_UNAUTH_LINKS_LABEL" description="JGLOBAL_SHOW_UNAUTH_LINKS_DESC" useglobal="true" class="chzn-color" > <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="urls_position" type="list" label="COM_CONTENT_FIELD_URLSPOSITION_LABEL" description="COM_CONTENT_FIELD_URLSPOSITION_DESC" useglobal="true" class="chzn-color" > <option value="0">COM_CONTENT_FIELD_OPTION_ABOVE</option> <option value="1">COM_CONTENT_FIELD_OPTION_BELOW</option> </field> <field name="spacer2" type="spacer" hr="true" /> <field name="alternative_readmore" type="text" label="JFIELD_READMORE_LABEL" description="JFIELD_READMORE_DESC" size="25" /> <field name="article_page_title" type="text" label="COM_CONTENT_FIELD_BROWSER_PAGE_TITLE_LABEL" description="COM_CONTENT_FIELD_BROWSER_PAGE_TITLE_DESC" size="25" /> </fieldset> <fieldset name="editorConfig" label="COM_CONTENT_EDITORCONFIG_FIELDSET_LABEL"> <field name="show_publishing_options" type="list" label="COM_CONTENT_SHOW_PUBLISHING_OPTIONS_LABEL" description="COM_CONTENT_SHOW_PUBLISHING_OPTIONS_DESC" default="" useglobal="true" class="chzn-color" > <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="show_article_options" type="list" label="COM_CONTENT_SHOW_ARTICLE_OPTIONS_LABEL" description="COM_CONTENT_SHOW_ARTICLE_OPTIONS_DESC" default="" useglobal="true" class="chzn-color" > <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="show_urls_images_backend" type="list" label="COM_CONTENT_SHOW_IMAGES_URLS_BACK_LABEL" description="COM_CONTENT_SHOW_IMAGES_URLS_BACK_DESC" useglobal="true" class="chzn-color" default="" > <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="show_urls_images_frontend" type="list" label="COM_CONTENT_SHOW_IMAGES_URLS_FRONT_LABEL" description="COM_CONTENT_SHOW_IMAGES_URLS_FRONT_DESC" useglobal="true" class="chzn-color" default="" > <option value="0">JNO</option> <option value="1">JYES</option> </field> </fieldset> <fieldset name="basic-limited" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL"> <field name="show_title" type="hidden" label="JGLOBAL_SHOW_TITLE_LABEL" description="JGLOBAL_SHOW_TITLE_DESC" /> <field name="link_titles" type="hidden" label="JGLOBAL_LINKED_TITLES_LABEL" description="JGLOBAL_LINKED_TITLES_DESC" /> <field name="show_intro" type="hidden" label="JGLOBAL_SHOW_INTRO_LABEL" description="JGLOBAL_SHOW_INTRO_DESC" /> <field name="show_category" type="hidden" label="JGLOBAL_SHOW_CATEGORY_LABEL" description="JGLOBAL_SHOW_CATEGORY_DESC" /> <field name="link_category" type="hidden" label="JGLOBAL_LINK_CATEGORY_LABEL" description="JGLOBAL_LINK_CATEGORY_DESC" /> <field name="show_parent_category" type="hidden" label="JGLOBAL_SHOW_PARENT_CATEGORY_LABEL" description="JGLOBAL_SHOW_PARENT_CATEGORY_DESC" /> <field name="link_parent_category" type="hidden" label="JGLOBAL_LINK_PARENT_CATEGORY_LABEL" description="JGLOBAL_LINK_PARENT_CATEGORY_DESC" /> <field name="show_author" type="hidden" label="JGLOBAL_SHOW_AUTHOR_LABEL" description="JGLOBAL_SHOW_AUTHOR_DESC" /> <field name="link_author" type="hidden" label="JGLOBAL_LINK_AUTHOR_LABEL" description="JGLOBAL_LINK_AUTHOR_DESC" /> <field name="show_create_date" type="hidden" label="JGLOBAL_SHOW_CREATE_DATE_LABEL" description="JGLOBAL_SHOW_CREATE_DATE_DESC" /> <field name="show_modify_date" type="hidden" label="JGLOBAL_SHOW_MODIFY_DATE_LABEL" description="JGLOBAL_SHOW_MODIFY_DATE_DESC" /> <field name="show_publish_date" type="hidden" label="JGLOBAL_SHOW_PUBLISH_DATE_LABEL" description="JGLOBAL_SHOW_PUBLISH_DATE_DESC" /> <field name="show_item_navigation" type="hidden" label="JGLOBAL_SHOW_NAVIGATION_LABEL" description="JGLOBAL_SHOW_NAVIGATION_DESC" /> <field name="show_icons" type="hidden" label="JGLOBAL_SHOW_ICONS_LABEL" description="JGLOBAL_SHOW_ICONS_DESC" /> <field name="show_print_icon" type="hidden" label="JGLOBAL_SHOW_PRINT_ICON_LABEL" description="JGLOBAL_SHOW_PRINT_ICON_DESC" /> <field name="show_email_icon" type="hidden" label="JGLOBAL_SHOW_EMAIL_ICON_LABEL" description="JGLOBAL_SHOW_EMAIL_ICON_DESC" /> <field name="show_vote" type="hidden" label="JGLOBAL_SHOW_VOTE_LABEL" description="JGLOBAL_SHOW_VOTE_DESC" /> <field name="show_hits" type="hidden" label="JGLOBAL_SHOW_HITS_LABEL" description="JGLOBAL_SHOW_HITS_DESC" /> <field name="show_noauth" type="hidden" label="JGLOBAL_SHOW_UNAUTH_LINKS_LABEL" description="JGLOBAL_SHOW_UNAUTH_LINKS_DESC" /> <field name="alternative_readmore" type="hidden" label="JFIELD_READMORE_LABEL" description="JFIELD_READMORE_DESC" size="25" /> <field name="article_layout" type="hidden" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_COMPONENT_LAYOUT_DESC" useglobal="true" extension="com_content" view="article" /> </fieldset> </fields> <field name="xreference" type="text" label="JFIELD_KEY_REFERENCE_LABEL" description="JFIELD_KEY_REFERENCE_DESC" size="20" /> <fields name="images" label="COM_CONTENT_FIELD_IMAGE_OPTIONS"> <field name="image_intro" type="media" label="COM_CONTENT_FIELD_INTRO_LABEL" description="COM_CONTENT_FIELD_INTRO_DESC" /> <field name="float_intro" type="list" label="COM_CONTENT_FLOAT_LABEL" description="COM_CONTENT_FLOAT_DESC" useglobal="true" > <option value="right">COM_CONTENT_RIGHT</option> <option value="left">COM_CONTENT_LEFT</option> <option value="none">COM_CONTENT_NONE</option> </field> <field name="image_intro_alt" type="text" label="COM_CONTENT_FIELD_IMAGE_ALT_LABEL" description="COM_CONTENT_FIELD_IMAGE_ALT_DESC" size="20" /> <field name="image_intro_caption" type="text" label="COM_CONTENT_FIELD_IMAGE_CAPTION_LABEL" description="COM_CONTENT_FIELD_IMAGE_CAPTION_DESC" size="20" /> <field name="spacer1" type="spacer" hr="true" /> <field name="image_fulltext" type="media" label="COM_CONTENT_FIELD_FULL_LABEL" description="COM_CONTENT_FIELD_FULL_DESC" /> <field name="float_fulltext" type="list" label="COM_CONTENT_FLOAT_LABEL" description="COM_CONTENT_FLOAT_DESC" useglobal="true" > <option value="right">COM_CONTENT_RIGHT</option> <option value="left">COM_CONTENT_LEFT</option> <option value="none">COM_CONTENT_NONE</option> </field> <field name="image_fulltext_alt" type="text" label="COM_CONTENT_FIELD_IMAGE_ALT_LABEL" description="COM_CONTENT_FIELD_IMAGE_ALT_DESC" size="20" /> <field name="image_fulltext_caption" type="text" label="COM_CONTENT_FIELD_IMAGE_CAPTION_LABEL" description="COM_CONTENT_FIELD_IMAGE_CAPTION_DESC" size="20" /> </fields> <fields name="urls" label="COM_CONTENT_FIELD_URLS_OPTIONS"> <field name="urla" type="url" label="COM_CONTENT_FIELD_URLA_LABEL" description="COM_CONTENT_FIELD_URL_DESC" validate="url" filter="url" relative="true" /> <field name="urlatext" type="text" label="COM_CONTENT_FIELD_URLA_LINK_TEXT_LABEL" description="COM_CONTENT_FIELD_URL_LINK_TEXT_DESC" size="20" /> <field name="targeta" type="list" label="COM_CONTENT_URL_FIELD_BROWSERNAV_LABEL" description="COM_CONTENT_URL_FIELD_BROWSERNAV_DESC" default="" filter="options" useglobal="true" > <option value="0">JBROWSERTARGET_PARENT</option> <option value="1">JBROWSERTARGET_NEW</option> <option value="2">JBROWSERTARGET_POPUP</option> <option value="3">JBROWSERTARGET_MODAL</option> </field> <field name="spacer3" type="spacer" hr="true" /> <field name="urlb" type="url" label="COM_CONTENT_FIELD_URLB_LABEL" description="COM_CONTENT_FIELD_URL_DESC" validate="url" filter="url" relative="true" /> <field name="urlbtext" type="text" label="COM_CONTENT_FIELD_URLB_LINK_TEXT_LABEL" description="COM_CONTENT_FIELD_URL_LINK_TEXT_DESC" size="20" /> <field name="targetb" type="list" label="COM_CONTENT_URL_FIELD_BROWSERNAV_LABEL" description="COM_CONTENT_URL_FIELD_BROWSERNAV_DESC" default="" filter="options" useglobal="true" > <option value="0">JBROWSERTARGET_PARENT</option> <option value="1">JBROWSERTARGET_NEW</option> <option value="2">JBROWSERTARGET_POPUP</option> <option value="3">JBROWSERTARGET_MODAL</option> </field> <field name="spacer4" type="spacer" hr="true" /> <field name="urlc" type="url" label="COM_CONTENT_FIELD_URLC_LABEL" description="COM_CONTENT_FIELD_URL_DESC" validate="url" filter="url" relative="true" /> <field name="urlctext" type="text" label="COM_CONTENT_FIELD_URLC_LINK_TEXT_LABEL" description="COM_CONTENT_FIELD_URL_LINK_TEXT_DESC" size="20" /> <field name="targetc" type="list" label="COM_CONTENT_URL_FIELD_BROWSERNAV_LABEL" description="COM_CONTENT_URL_FIELD_BROWSERNAV_DESC" default="" filter="options" useglobal="true" > <option value="0">JBROWSERTARGET_PARENT</option> <option value="1">JBROWSERTARGET_NEW</option> <option value="2">JBROWSERTARGET_POPUP</option> <option value="3">JBROWSERTARGET_MODAL</option> </field> </fields> <fields name="metadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS"> <fieldset name="jmetadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS"> <field name="robots" type="list" label="JFIELD_METADATA_ROBOTS_LABEL" description="JFIELD_METADATA_ROBOTS_DESC" > <option value="">JGLOBAL_USE_GLOBAL</option> <option value="index, follow">JGLOBAL_INDEX_FOLLOW</option> <option value="noindex, follow">JGLOBAL_NOINDEX_FOLLOW</option> <option value="index, nofollow">JGLOBAL_INDEX_NOFOLLOW</option> <option value="noindex, nofollow">JGLOBAL_NOINDEX_NOFOLLOW</option> </field> <field name="author" type="text" label="JAUTHOR" description="JFIELD_METADATA_AUTHOR_DESC" size="20" /> <field name="rights" type="textarea" label="JFIELD_META_RIGHTS_LABEL" description="JFIELD_META_RIGHTS_DESC" filter="string" cols="30" rows="2" /> <field name="xreference" type="text" label="COM_CONTENT_FIELD_XREFERENCE_LABEL" description="COM_CONTENT_FIELD_XREFERENCE_DESC" size="20" /> </fieldset> </fields> <!-- These fields are used to get labels for the Content History Preview and Compare Views --> <fields> <field name="introtext" label="COM_CONTENT_FIELD_INTROTEXT" /> <field name="fulltext" label="COM_CONTENT_FIELD_FULLTEXT" /> </fields> </form> PKb��\.����7components/com_content/models/forms/filter_articles.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fields name="filter"> <field name="search" type="text" label="COM_CONTENT_FILTER_SEARCH_LABEL" description="COM_CONTENT_FILTER_SEARCH_DESC" hint="JSEARCH_FILTER" /> <field name="published" type="status" label="COM_CONTENT_FILTER_PUBLISHED" description="COM_CONTENT_FILTER_PUBLISHED_DESC" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_PUBLISHED</option> </field> <field name="category_id" type="category" label="JOPTION_FILTER_CATEGORY" description="JOPTION_FILTER_CATEGORY_DESC" multiple="true" class="multipleCategories" extension="com_content" onchange="this.form.submit();" published="0,1,2" /> <field name="access" type="accesslevel" label="JOPTION_FILTER_ACCESS" description="JOPTION_FILTER_ACCESS_DESC" multiple="true" class="multipleAccessLevels" onchange="this.form.submit();" /> <field name="author_id" type="author" label="COM_CONTENT_FILTER_AUTHOR" description="COM_CONTENT_FILTER_AUTHOR_DESC" multiple="true" class="multipleAuthors" onchange="this.form.submit();" > <option value="0">JNONE</option> </field> <field name="language" type="contentlanguage" label="JOPTION_FILTER_LANGUAGE" description="JOPTION_FILTER_LANGUAGE_DESC" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_LANGUAGE</option> <option value="*">JALL</option> </field> <field name="tag" type="tag" label="JOPTION_FILTER_TAG" description="JOPTION_FILTER_TAG_DESC" multiple="true" class="multipleTags" mode="nested" onchange="this.form.submit();" /> <field name="level" type="integer" label="JOPTION_FILTER_LEVEL" description="JOPTION_FILTER_LEVEL_DESC" first="1" last="10" step="1" languages="*" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_MAX_LEVELS</option> </field> <input type="hidden" name="form_submited" value="1"/> </fields> <fields name="list"> <field name="fullordering" type="list" label="COM_CONTENT_LIST_FULL_ORDERING" description="COM_CONTENT_LIST_FULL_ORDERING_DESC" onchange="this.form.submit();" default="a.id DESC" > <option value="">JGLOBAL_SORT_BY</option> <option value="a.ordering ASC">JGRID_HEADING_ORDERING_ASC</option> <option value="a.ordering DESC">JGRID_HEADING_ORDERING_DESC</option> <option value="a.state ASC">JSTATUS_ASC</option> <option value="a.state DESC">JSTATUS_DESC</option> <option value="a.featured ASC">JFEATURED_ASC</option> <option value="a.featured DESC">JFEATURED_DESC</option> <option value="a.title ASC">JGLOBAL_TITLE_ASC</option> <option value="a.title DESC">JGLOBAL_TITLE_DESC</option> <option value="category_title ASC">JCATEGORY_ASC</option> <option value="category_title DESC">JCATEGORY_DESC</option> <option value="a.access ASC">JGRID_HEADING_ACCESS_ASC</option> <option value="a.access DESC">JGRID_HEADING_ACCESS_DESC</option> <option value="association ASC" requires="associations">JASSOCIATIONS_ASC</option> <option value="association DESC" requires="associations">JASSOCIATIONS_DESC</option> <option value="a.created_by ASC">JAUTHOR_ASC</option> <option value="a.created_by DESC">JAUTHOR_DESC</option> <option value="language ASC">JGRID_HEADING_LANGUAGE_ASC</option> <option value="language DESC">JGRID_HEADING_LANGUAGE_DESC</option> <option value="a.created ASC">JDATE_ASC</option> <option value="a.created DESC">JDATE_DESC</option> <option value="a.modified ASC">COM_CONTENT_MODIFIED_ASC</option> <option value="a.modified DESC">COM_CONTENT_MODIFIED_DESC</option> <option value="a.publish_up ASC">COM_CONTENT_PUBLISH_UP_ASC</option> <option value="a.publish_up DESC">COM_CONTENT_PUBLISH_UP_DESC</option> <option value="a.publish_down ASC">COM_CONTENT_PUBLISH_DOWN_ASC</option> <option value="a.publish_down DESC">COM_CONTENT_PUBLISH_DOWN_DESC</option> <option value="a.hits ASC">JGLOBAL_HITS_ASC</option> <option value="a.hits DESC">JGLOBAL_HITS_DESC</option> <option value="rating_count ASC" requires="vote">JGLOBAL_VOTES_ASC</option> <option value="rating_count DESC" requires="vote">JGLOBAL_VOTES_DESC</option> <option value="rating ASC" requires="vote">JGLOBAL_RATINGS_ASC</option> <option value="rating DESC" requires="vote">JGLOBAL_RATINGS_DESC</option> <option value="a.id ASC">JGRID_HEADING_ID_ASC</option> <option value="a.id DESC">JGRID_HEADING_ID_DESC</option> </field> <field name="limit" type="limitbox" label="COM_CONTENT_LIST_LIMIT" description="COM_CONTENT_LIST_LIMIT_DESC" class="input-mini" default="25" onchange="this.form.submit();" /> </fields> </form> PKb��\tp�h��7components/com_content/models/forms/filter_featured.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fields name="filter"> <field name="search" type="text" label="COM_CONTENT_FILTER_SEARCH_LABEL" description="COM_CONTENT_FILTER_SEARCH_DESC" hint="JSEARCH_FILTER" /> <field name="published" type="status" label="COM_CONTENT_FILTER_PUBLISHED" description="COM_CONTENT_FILTER_PUBLISHED_DESC" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_PUBLISHED</option> </field> <field name="category_id" type="category" label="JOPTION_FILTER_CATEGORY" description="JOPTION_FILTER_CATEGORY_DESC" multiple="true" class="multipleCategories" extension="com_content" onchange="this.form.submit();" /> <field name="level" type="integer" label="JOPTION_FILTER_LEVEL" description="JOPTION_FILTER_LEVEL_DESC" first="1" last="10" step="1" languages="*" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_MAX_LEVELS</option> </field> <field name="access" type="accesslevel" label="JOPTION_FILTER_ACCESS" description="JOPTION_FILTER_ACCESS_DESC" multiple="true" class="multipleAccessLevels" onchange="this.form.submit();" /> <field name="author_id" type="author" label="COM_CONTENT_FILTER_AUTHOR" description="COM_CONTENT_FILTER_AUTHOR_DESC" multiple="true" class="multipleAuthors" onchange="this.form.submit();" > <option value="0">JNONE</option> </field> <field name="language" type="contentlanguage" label="JOPTION_FILTER_LANGUAGE" description="JOPTION_FILTER_LANGUAGE_DESC" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_LANGUAGE</option> <option value="*">JALL</option> </field> <field name="tag" type="tag" label="JOPTION_FILTER_TAG" description="JOPTION_FILTER_TAG_DESC" multiple="true" class="multipleTags" mode="nested" onchange="this.form.submit();" /> </fields> <fields name="list"> <field name="fullordering" type="list" label="COM_CONTENT_LIST_FULL_ORDERING" description="COM_CONTENT_LIST_FULL_ORDERING_DESC" onchange="this.form.submit();" default="a.title ASC" > <option value="">JGLOBAL_SORT_BY</option> <option value="fp.ordering ASC">JGRID_HEADING_ORDERING_ASC</option> <option value="fp.ordering DESC">JGRID_HEADING_ORDERING_DESC</option> <option value="a.state ASC">JSTATUS_ASC</option> <option value="a.state DESC">JSTATUS_DESC</option> <option value="a.title ASC">JGLOBAL_TITLE_ASC</option> <option value="a.title DESC">JGLOBAL_TITLE_DESC</option> <option value="category_title ASC">JCATEGORY_ASC</option> <option value="category_title DESC">JCATEGORY_DESC</option> <option value="a.access ASC">JGRID_HEADING_ACCESS_ASC</option> <option value="a.access DESC">JGRID_HEADING_ACCESS_DESC</option> <option value="a.created_by ASC">JAUTHOR_ASC</option> <option value="a.created_by DESC">JAUTHOR_DESC</option> <option value="a.publish_up ASC">COM_CONTENT_PUBLISH_UP_ASC</option> <option value="a.publish_up DESC">COM_CONTENT_PUBLISH_UP_DESC</option> <option value="a.publish_down ASC">COM_CONTENT_PUBLISH_DOWN_ASC</option> <option value="a.publish_down DESC">COM_CONTENT_PUBLISH_DOWN_DESC</option> <option value="language ASC">JGRID_HEADING_LANGUAGE_ASC</option> <option value="language DESC">JGRID_HEADING_LANGUAGE_DESC</option> <option value="a.created ASC">JDATE_ASC</option> <option value="a.created DESC">JDATE_DESC</option> <option value="a.hits ASC">JGLOBAL_HITS_ASC</option> <option value="a.hits DESC">JGLOBAL_HITS_DESC</option> <option value="rating_count ASC" requires="vote">JGLOBAL_VOTES_ASC</option> <option value="rating_count DESC" requires="vote">JGLOBAL_VOTES_DESC</option> <option value="rating ASC" requires="vote">JGLOBAL_RATINGS_ASC</option> <option value="rating DESC" requires="vote">JGLOBAL_RATINGS_DESC</option> <option value="a.id ASC">JGRID_HEADING_ID_ASC</option> <option value="a.id DESC">JGRID_HEADING_ID_DESC</option> </field> <field name="limit" type="limitbox" label="COM_CONTENT_LIST_LIMIT" description="COM_CONTENT_LIST_LIMIT_DESC" class="input-mini" default="25" onchange="this.form.submit();" /> </fields> </form> PKb��\u�;�^�^)components/com_content/models/article.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; JLoader::register('ContentHelper', JPATH_ADMINISTRATOR . '/components/com_content/helpers/content.php'); /** * Item Model for an Article. * * @since 1.6 */ class ContentModelArticle extends JModelAdmin { /** * The prefix to use with controller messages. * * @var string * @since 1.6 */ protected $text_prefix = 'COM_CONTENT'; /** * The type alias for this content type (for example, 'com_content.article'). * * @var string * @since 3.2 */ public $typeAlias = 'com_content.article'; /** * The context used for the associations table * * @var string * @since 3.4.4 */ protected $associationsContext = 'com_content.item'; /** * Function that can be overriden to do any data cleanup after batch copying data * * @param \JTableInterface $table The table object containing the newly created item * @param integer $newId The id of the new item * @param integer $oldId The original item id * * @return void * * @since 3.8.12 */ protected function cleanupPostBatchCopy(\JTableInterface $table, $newId, $oldId) { // Check if the article was featured and update the #__content_frontpage table if ($table->featured == 1) { $db = $this->getDbo(); $query = $db->getQuery(true) ->insert($db->quoteName('#__content_frontpage')) ->values($newId . ', 0'); $db->setQuery($query); $db->execute(); } // Register FieldsHelper JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php'); $oldItem = $this->getTable(); $oldItem->load($oldId); $fields = FieldsHelper::getFields('com_content.article', $oldItem, true); $fieldsData = array(); if (!empty($fields)) { $fieldsData['com_fields'] = array(); foreach ($fields as $field) { $fieldsData['com_fields'][$field->name] = $field->rawvalue; } } JEventDispatcher::getInstance()->trigger('onContentAfterSave', array('com_content.article', &$this->table, true, $fieldsData)); } /** * Batch move categories to a new category. * * @param integer $value The new category ID. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return boolean True on success. * * @since 3.8.6 */ protected function batchMove($value, $pks, $contexts) { if (empty($this->batchSet)) { // Set some needed variables. $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); $this->contentType = new JUcmType; $this->type = $this->contentType->getTypeByTable($this->tableClassName); } $categoryId = (int) $value; if (!$this->checkCategoryId($categoryId)) { return false; } JPluginHelper::importPlugin('system'); $dispatcher = JEventDispatcher::getInstance(); // Register FieldsHelper JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php'); // Parent exists so we proceed foreach ($pks as $pk) { if (!$this->user->authorise('core.edit', $contexts[$pk])) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); return false; } // Check that the row actually exists if (!$this->table->load($pk)) { if ($error = $this->table->getError()) { // Fatal error $this->setError($error); return false; } else { // Not fatal error $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); continue; } } $fields = FieldsHelper::getFields('com_content.article', $this->table, true); $fieldsData = array(); if (!empty($fields)) { $fieldsData['com_fields'] = array(); foreach ($fields as $field) { $fieldsData['com_fields'][$field->name] = $field->rawvalue; } } // Set the new category ID $this->table->catid = $categoryId; // Check the row. if (!$this->table->check()) { $this->setError($this->table->getError()); return false; } if (!empty($this->type)) { $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); } // Store the row. if (!$this->table->store()) { $this->setError($this->table->getError()); return false; } // Run event for moved article $dispatcher->trigger('onContentAfterSave', array('com_content.article', &$this->table, false, $fieldsData)); } // Clean the cache $this->cleanCache(); return true; } /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canDelete($record) { if (empty($record->id) || $record->state != -2) { return false; } return JFactory::getUser()->authorise('core.delete', 'com_content.article.' . (int) $record->id); } /** * Method to test whether a record can have its state edited. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canEditState($record) { $user = JFactory::getUser(); // Check for existing article. if (!empty($record->id)) { return $user->authorise('core.edit.state', 'com_content.article.' . (int) $record->id); } // New article, so check against the category. if (!empty($record->catid)) { return $user->authorise('core.edit.state', 'com_content.category.' . (int) $record->catid); } // Default to component settings if neither article nor category known. return parent::canEditState($record); } /** * Prepare and sanitise the table data prior to saving. * * @param JTable $table A JTable object. * * @return void * * @since 1.6 */ protected function prepareTable($table) { // Set the publish date to now if ($table->state == 1 && (int) $table->publish_up == 0) { $table->publish_up = JFactory::getDate()->toSql(); } if ($table->state == 1 && intval($table->publish_down) == 0) { $table->publish_down = $this->getDbo()->getNullDate(); } // Increment the content version number. $table->version++; // Reorder the articles within the category so the new article is first if (empty($table->id)) { $table->reorder('catid = ' . (int) $table->catid . ' AND state >= 0'); } } /** * Returns a Table object, always creating it. * * @param string $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object */ public function getTable($type = 'Content', $prefix = 'JTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. */ public function getItem($pk = null) { if ($item = parent::getItem($pk)) { // Convert the params field to an array. $registry = new Registry($item->attribs); $item->attribs = $registry->toArray(); // Convert the metadata field to an array. $registry = new Registry($item->metadata); $item->metadata = $registry->toArray(); // Convert the images field to an array. $registry = new Registry($item->images); $item->images = $registry->toArray(); // Convert the urls field to an array. $registry = new Registry($item->urls); $item->urls = $registry->toArray(); $item->articletext = trim($item->fulltext) != '' ? $item->introtext . "<hr id=\"system-readmore\" />" . $item->fulltext : $item->introtext; if (!empty($item->id)) { $item->tags = new JHelperTags; $item->tags->getTagIds($item->id, 'com_content.article'); } } // Load associated content items $assoc = JLanguageAssociations::isEnabled(); if ($assoc) { $item->associations = array(); if ($item->id != null) { $associations = JLanguageAssociations::getAssociations('com_content', '#__content', 'com_content.item', $item->id); foreach ($associations as $tag => $association) { $item->associations[$tag] = $association->id; } } } return $item; } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm|boolean A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { $app = JFactory::getApplication(); $user = JFactory::getUser(); // Get the form. $form = $this->loadForm('com_content.article', 'article', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } $jinput = JFactory::getApplication()->input; /* * The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. * The back end uses id so we use that the rest of the time and set it to 0 by default. */ $id = $jinput->get('a_id', $jinput->get('id', 0)); // Determine correct permissions to check. if ($this->getState('article.id')) { $id = $this->getState('article.id'); // Existing record. Can only edit in selected categories. $form->setFieldAttribute('catid', 'action', 'core.edit'); // Existing record. Can only edit own articles in selected categories. if ($app->isClient('administrator')) { $form->setFieldAttribute('catid', 'action', 'core.edit.own'); } else // Existing record. We can't edit the category in frontend if not edit.state. { if ($id != 0 && (!$user->authorise('core.edit.state', 'com_content.article.' . (int) $id)) || ($id == 0 && !$user->authorise('core.edit.state', 'com_content'))) { $form->setFieldAttribute('catid', 'readonly', 'true'); $form->setFieldAttribute('catid', 'filter', 'unset'); } } } else { // New record. Can only create in selected categories. $form->setFieldAttribute('catid', 'action', 'core.create'); } // Check for existing article. // Modify the form based on Edit State access controls. if ($id != 0 && (!$user->authorise('core.edit.state', 'com_content.article.' . (int) $id)) || ($id == 0 && !$user->authorise('core.edit.state', 'com_content'))) { // Disable fields for display. $form->setFieldAttribute('featured', 'disabled', 'true'); $form->setFieldAttribute('ordering', 'disabled', 'true'); $form->setFieldAttribute('publish_up', 'disabled', 'true'); $form->setFieldAttribute('publish_down', 'disabled', 'true'); $form->setFieldAttribute('state', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is an article you can edit. $form->setFieldAttribute('featured', 'filter', 'unset'); $form->setFieldAttribute('ordering', 'filter', 'unset'); $form->setFieldAttribute('publish_up', 'filter', 'unset'); $form->setFieldAttribute('publish_down', 'filter', 'unset'); $form->setFieldAttribute('state', 'filter', 'unset'); } // Prevent messing with article language and category when editing existing article with associations $assoc = JLanguageAssociations::isEnabled(); // Check if article is associated if ($this->getState('article.id') && $app->isClient('site') && $assoc) { $associations = JLanguageAssociations::getAssociations('com_content', '#__content', 'com_content.item', $id); // Make fields read only if (!empty($associations)) { $form->setFieldAttribute('language', 'readonly', 'true'); $form->setFieldAttribute('catid', 'readonly', 'true'); $form->setFieldAttribute('language', 'filter', 'unset'); $form->setFieldAttribute('catid', 'filter', 'unset'); } } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $app = JFactory::getApplication(); $data = $app->getUserState('com_content.edit.article.data', array()); if (empty($data)) { $data = $this->getItem(); // Pre-select some filters (Status, Category, Language, Access) in edit form if those have been selected in Article Manager: Articles if ($this->getState('article.id') == 0) { $filters = (array) $app->getUserState('com_content.articles.filter'); $data->set( 'state', $app->input->getInt( 'state', ((isset($filters['published']) && $filters['published'] !== '') ? $filters['published'] : null) ) ); $data->set('catid', $app->input->getInt('catid', (!empty($filters['category_id']) ? $filters['category_id'] : null))); $data->set('language', $app->input->getString('language', (!empty($filters['language']) ? $filters['language'] : null))); $data->set('access', $app->input->getInt('access', (!empty($filters['access']) ? $filters['access'] : JFactory::getConfig()->get('access'))) ); } } // If there are params fieldsets in the form it will fail with a registry object if (isset($data->params) && $data->params instanceof Registry) { $data->params = $data->params->toArray(); } $this->preprocessData('com_content.article', $data); return $data; } /** * Method to validate the form data. * * @param JForm $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * * @return array|boolean Array of filtered data if valid, false otherwise. * * @see JFormRule * @see JFilterInput * @since 3.7.0 */ public function validate($form, $data, $group = null) { // Don't allow to change the users if not allowed to access com_users. if (JFactory::getApplication()->isClient('administrator') && !JFactory::getUser()->authorise('core.manage', 'com_users')) { if (isset($data['created_by'])) { unset($data['created_by']); } if (isset($data['modified_by'])) { unset($data['modified_by']); } } return parent::validate($form, $data, $group); } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { $input = JFactory::getApplication()->input; $filter = JFilterInput::getInstance(); if (isset($data['metadata']) && isset($data['metadata']['author'])) { $data['metadata']['author'] = $filter->clean($data['metadata']['author'], 'TRIM'); } if (isset($data['created_by_alias'])) { $data['created_by_alias'] = $filter->clean($data['created_by_alias'], 'TRIM'); } if (isset($data['images']) && is_array($data['images'])) { $registry = new Registry($data['images']); $data['images'] = (string) $registry; } JLoader::register('CategoriesHelper', JPATH_ADMINISTRATOR . '/components/com_categories/helpers/categories.php'); // Cast catid to integer for comparison $catid = (int) $data['catid']; // Check if New Category exists if ($catid > 0) { $catid = CategoriesHelper::validateCategoryId($data['catid'], 'com_content'); } // Save New Category if ($catid == 0 && $this->canCreateCategory()) { $table = array(); $table['title'] = $data['catid']; $table['parent_id'] = 1; $table['extension'] = 'com_content'; $table['language'] = $data['language']; $table['published'] = 1; // Create new category and get catid back $data['catid'] = CategoriesHelper::createCategory($table); } if (isset($data['urls']) && is_array($data['urls'])) { $check = $input->post->get('jform', array(), 'array'); foreach ($data['urls'] as $i => $url) { if ($url != false && ($i == 'urla' || $i == 'urlb' || $i == 'urlc')) { if (preg_match('~^#[a-zA-Z]{1}[a-zA-Z0-9-_:.]*$~', $check['urls'][$i]) == 1) { $data['urls'][$i] = $check['urls'][$i]; } else { $data['urls'][$i] = JStringPunycode::urlToPunycode($url); } } } unset($check); $registry = new Registry($data['urls']); $data['urls'] = (string) $registry; } // Alter the title for save as copy if ($input->get('task') == 'save2copy') { $origTable = clone $this->getTable(); $origTable->load($input->getInt('id')); if ($data['title'] == $origTable->title) { list($title, $alias) = $this->generateNewTitle($data['catid'], $data['alias'], $data['title']); $data['title'] = $title; $data['alias'] = $alias; } else { if ($data['alias'] == $origTable->alias) { $data['alias'] = ''; } } $data['state'] = 0; } // Automatic handling of alias for empty fields if (in_array($input->get('task'), array('apply', 'save', 'save2new')) && (!isset($data['id']) || (int) $data['id'] == 0)) { if ($data['alias'] == null) { if (JFactory::getConfig()->get('unicodeslugs') == 1) { $data['alias'] = JFilterOutput::stringURLUnicodeSlug($data['title']); } else { $data['alias'] = JFilterOutput::stringURLSafe($data['title']); } $table = JTable::getInstance('Content', 'JTable'); if ($table->load(array('alias' => $data['alias'], 'catid' => $data['catid']))) { $msg = JText::_('COM_CONTENT_SAVE_WARNING'); } list($title, $alias) = $this->generateNewTitle($data['catid'], $data['alias'], $data['title']); $data['alias'] = $alias; if (isset($msg)) { JFactory::getApplication()->enqueueMessage($msg, 'warning'); } } } if (parent::save($data)) { if (isset($data['featured'])) { $this->featured($this->getState($this->getName() . '.id'), $data['featured']); } return true; } return false; } /** * Method to toggle the featured setting of articles. * * @param array $pks The ids of the items to toggle. * @param integer $value The value to toggle to. * * @return boolean True on success. */ public function featured($pks, $value = 0) { // Sanitize the ids. $pks = (array) $pks; $pks = ArrayHelper::toInteger($pks); if (empty($pks)) { $this->setError(JText::_('COM_CONTENT_NO_ITEM_SELECTED')); return false; } $table = $this->getTable('Featured', 'ContentTable'); try { $db = $this->getDbo(); $query = $db->getQuery(true) ->update($db->quoteName('#__content')) ->set('featured = ' . (int) $value) ->where('id IN (' . implode(',', $pks) . ')'); $db->setQuery($query); $db->execute(); if ((int) $value == 0) { // Adjust the mapping table. // Clear the existing features settings. $query = $db->getQuery(true) ->delete($db->quoteName('#__content_frontpage')) ->where('content_id IN (' . implode(',', $pks) . ')'); $db->setQuery($query); $db->execute(); } else { // First, we find out which of our new featured articles are already featured. $query = $db->getQuery(true) ->select('f.content_id') ->from('#__content_frontpage AS f') ->where('content_id IN (' . implode(',', $pks) . ')'); $db->setQuery($query); $oldFeatured = $db->loadColumn(); // We diff the arrays to get a list of the articles that are newly featured $newFeatured = array_diff($pks, $oldFeatured); // Featuring. $tuples = array(); foreach ($newFeatured as $pk) { $tuples[] = $pk . ', 0'; } if (count($tuples)) { $columns = array('content_id', 'ordering'); $query = $db->getQuery(true) ->insert($db->quoteName('#__content_frontpage')) ->columns($db->quoteName($columns)) ->values($tuples); $db->setQuery($query); $db->execute(); } } } catch (Exception $e) { $this->setError($e->getMessage()); return false; } $table->reorder(); $this->cleanCache(); return true; } /** * A protected method to get a set of ordering conditions. * * @param object $table A record object. * * @return array An array of conditions to add to add to ordering queries. * * @since 1.6 */ protected function getReorderConditions($table) { return array('catid = ' . (int) $table->catid); } /** * Allows preprocessing of the JForm object. * * @param JForm $form The form object * @param array $data The data to be merged into the form object * @param string $group The plugin group to be executed * * @return void * * @since 3.0 */ protected function preprocessForm(JForm $form, $data, $group = 'content') { if ($this->canCreateCategory()) { $form->setFieldAttribute('catid', 'allowAdd', 'true'); } // Association content items if (JLanguageAssociations::isEnabled()) { $languages = JLanguageHelper::getContentLanguages(false, true, null, 'ordering', 'asc'); if (count($languages) > 1) { $addform = new SimpleXMLElement('<form />'); $fields = $addform->addChild('fields'); $fields->addAttribute('name', 'associations'); $fieldset = $fields->addChild('fieldset'); $fieldset->addAttribute('name', 'item_associations'); foreach ($languages as $language) { $field = $fieldset->addChild('field'); $field->addAttribute('name', $language->lang_code); $field->addAttribute('type', 'modal_article'); $field->addAttribute('language', $language->lang_code); $field->addAttribute('label', $language->title); $field->addAttribute('translate_label', 'false'); $field->addAttribute('select', 'true'); $field->addAttribute('new', 'true'); $field->addAttribute('edit', 'true'); $field->addAttribute('clear', 'true'); $field->addAttribute('propagate', 'true'); } $form->load($addform, false); } } parent::preprocessForm($form, $data, $group); } /** * Custom clean the cache of com_content and content modules * * @param string $group The cache group * @param integer $client_id The ID of the client * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('com_content'); parent::cleanCache('mod_articles_archive'); parent::cleanCache('mod_articles_categories'); parent::cleanCache('mod_articles_category'); parent::cleanCache('mod_articles_latest'); parent::cleanCache('mod_articles_news'); parent::cleanCache('mod_articles_popular'); } /** * Void hit function for pagebreak when editing content from frontend * * @return void * * @since 3.6.0 */ public function hit() { return; } /** * Is the user allowed to create an on the fly category? * * @return boolean * * @since 3.6.1 */ private function canCreateCategory() { return JFactory::getUser()->authorise('core.create', 'com_content'); } /** * Delete #__content_frontpage items if the deleted articles was featured * * @param object $pks The primary key related to the contents that was deleted. * * @return boolean * * @since 3.7.0 */ public function delete(&$pks) { $return = parent::delete($pks); if ($return) { // Now check to see if this articles was featured if so delete it from the #__content_frontpage table $db = $this->getDbo(); $query = $db->getQuery(true) ->delete($db->quoteName('#__content_frontpage')) ->where('content_id IN (' . implode(',', $pks) . ')'); $db->setQuery($query); $db->execute(); } return $return; } } PKb��\"W)!!*components/com_content/models/featured.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; JLoader::register('ContentModelArticles', __DIR__ . '/articles.php'); /** * Methods supporting a list of featured article records. * * @since 1.6 */ class ContentModelFeatured extends ContentModelArticles { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JControllerLegacy * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'title', 'a.title', 'alias', 'a.alias', 'checked_out', 'a.checked_out', 'checked_out_time', 'a.checked_out_time', 'catid', 'a.catid', 'category_title', 'state', 'a.state', 'access', 'a.access', 'access_level', 'created', 'a.created', 'created_by', 'a.created_by', 'created_by_alias', 'a.created_by_alias', 'ordering', 'a.ordering', 'featured', 'a.featured', 'language', 'a.language', 'hits', 'a.hits', 'publish_up', 'a.publish_up', 'publish_down', 'a.publish_down', 'fp.ordering', 'published', 'a.published', 'author_id', 'category_id', 'level', 'tag', 'rating_count', 'rating', ); } parent::__construct($config); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.title, a.alias, a.checked_out, a.checked_out_time, a.catid, a.state, a.access, a.created, a.hits,' . 'a.created_by, a.featured, a.language, a.created_by_alias, a.publish_up, a.publish_down, a.note' ) ); $query->from('#__content AS a'); // Join over the language $query->select('l.title AS language_title, l.image AS language_image') ->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = a.language'); // Join over the content table. $query->select('fp.ordering') ->join('INNER', '#__content_frontpage AS fp ON fp.content_id = a.id'); // Join over the users for the checked out user. $query->select('uc.name AS editor') ->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Join over the asset groups. $query->select('ag.title AS access_level') ->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Join over the categories. $query->select('c.title AS category_title, c.created_user_id AS category_uid, c.level AS category_level') ->join('LEFT', '#__categories AS c ON c.id = a.catid'); // Join over the parent categories. $query->select('parent.title AS parent_category_title, parent.id AS parent_category_id, parent.created_user_id AS parent_category_uid, parent.level AS parent_category_level') ->join('LEFT', '#__categories AS parent ON parent.id = c.parent_id'); // Join over the users for the author. $query->select('ua.name AS author_name') ->join('LEFT', '#__users AS ua ON ua.id = a.created_by'); // Join on voting table if (JPluginHelper::isEnabled('content', 'vote')) { $query->select('COALESCE(NULLIF(ROUND(v.rating_sum / v.rating_count, 0), 0), 0) AS rating, COALESCE(NULLIF(v.rating_count, 0), 0) as rating_count') ->join('LEFT', '#__content_rating AS v ON a.id = v.content_id'); } // Filter by access level. $access = $this->getState('filter.access'); if (is_numeric($access)) { $query->where('a.access = ' . (int) $access); } elseif (is_array($access)) { $access = ArrayHelper::toInteger($access); $access = implode(',', $access); $query->where('a.access IN (' . $access . ')'); } // Filter by access level on categories. if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN (' . $groups . ')'); $query->where('c.access IN (' . $groups . ')'); } // Filter by published state $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.state = ' . (int) $published); } elseif ($published === '') { $query->where('(a.state = 0 OR a.state = 1)'); } // Filter by a single or group of categories. $baselevel = 1; $categoryId = $this->getState('filter.category_id'); if (is_array($categoryId) && count($categoryId) === 1) { $cat_tbl = JTable::getInstance('Category', 'JTable'); $cat_tbl->load($categoryId[0]); $rgt = $cat_tbl->rgt; $lft = $cat_tbl->lft; $baselevel = (int) $cat_tbl->level; $query->where('c.lft >= ' . (int) $lft) ->where('c.rgt <= ' . (int) $rgt); } elseif (is_array($categoryId)) { $categoryId = implode(',', ArrayHelper::toInteger($categoryId)); $query->where('a.catid IN (' . $categoryId . ')'); } // Filter on the level. if ($level = $this->getState('filter.level')) { $query->where('c.level <= ' . ((int) $level + (int) $baselevel - 1)); } // Filter by author $authorId = $this->getState('filter.author_id'); if (is_numeric($authorId)) { $type = $this->getState('filter.author_id.include', true) ? '= ' : '<>'; $query->where('a.created_by ' . $type . (int) $authorId); } elseif (is_array($authorId)) { $authorId = ArrayHelper::toInteger($authorId); $authorId = implode(',', $authorId); $query->where('a.created_by IN (' . $authorId . ')'); } // Filter by search in title. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = ' . (int) substr($search, 3)); } elseif (stripos($search, 'author:') === 0) { $search = $db->quote('%' . $db->escape(substr($search, 7), true) . '%'); $query->where('(ua.name LIKE ' . $search . ' OR ua.username LIKE ' . $search . ')'); } elseif (stripos($search, 'content:') === 0) { $search = $db->quote('%' . $db->escape(substr($search, 8), true) . '%'); $query->where('(a.introtext LIKE ' . $search . ' OR a.fulltext LIKE ' . $search . ')'); } else { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('(a.title LIKE ' . $search . ' OR a.alias LIKE ' . $search . ' OR a.note LIKE ' . $search . ')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where('a.language = ' . $db->quote($language)); } // Filter by a single or group of tags. $tagId = $this->getState('filter.tag'); if (is_array($tagId) && count($tagId) === 1) { $tagId = current($tagId); } if (is_array($tagId)) { $tagId = implode(',', ArrayHelper::toInteger($tagId)); if ($tagId) { $subQuery = $db->getQuery(true) ->select('DISTINCT content_item_id') ->from($db->quoteName('#__contentitem_tag_map')) ->where('tag_id IN (' . $tagId . ')') ->where('type_alias = ' . $db->quote('com_content.article')); $query->join('INNER', '(' . (string) $subQuery . ') AS tagmap ON tagmap.content_item_id = a.id'); } } elseif ($tagId) { $query->join( 'INNER', $db->quoteName('#__contentitem_tag_map', 'tagmap') . ' ON tagmap.tag_id = ' . (int) $tagId . ' AND tagmap.content_item_id = a.id' . ' AND tagmap.type_alias = ' . $db->quote('com_content.article') ); } // Add the list ordering clause. $orderCol = $this->state->get('list.ordering', 'a.title'); $orderDirn = $this->state->get('list.direction', 'ASC'); $query->order($db->escape($orderCol) . ' ' . $db->escape($orderDirn)); return $query; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 3.5 */ protected function populateState($ordering = 'a.title', $direction = 'asc') { parent::populateState($ordering, $direction); } } PKb��\��y���)components/com_content/models/feature.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('ContentModelArticle', __DIR__ . '/article.php'); /** * Feature model. * * @since 1.6 */ class ContentModelFeature extends ContentModelArticle { /** * Returns a Table object, always creating it. * * @param string $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object * * @since 1.6 */ public function getTable($type = 'Featured', $prefix = 'ContentTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * A protected method to get a set of ordering conditions. * * @param object $table A record object. * * @return array An array of conditions to add to add to ordering queries. * * @since 1.6 */ protected function getReorderConditions($table) { return array(); } } PKb��\�i��1�1*components/com_content/models/articles.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Methods supporting a list of article records. * * @since 1.6 */ class ContentModelArticles extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @since 1.6 * @see JControllerLegacy */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'title', 'a.title', 'alias', 'a.alias', 'checked_out', 'a.checked_out', 'checked_out_time', 'a.checked_out_time', 'catid', 'a.catid', 'category_title', 'state', 'a.state', 'access', 'a.access', 'access_level', 'created', 'a.created', 'modified', 'a.modified', 'created_by', 'a.created_by', 'created_by_alias', 'a.created_by_alias', 'ordering', 'a.ordering', 'featured', 'a.featured', 'language', 'a.language', 'hits', 'a.hits', 'publish_up', 'a.publish_up', 'publish_down', 'a.publish_down', 'published', 'a.published', 'author_id', 'category_id', 'level', 'tag', 'rating_count', 'rating', ); if (JLanguageAssociations::isEnabled()) { $config['filter_fields'][] = 'association'; } } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.id', $direction = 'desc') { $app = JFactory::getApplication(); $forcedLanguage = $app->input->get('forcedLanguage', '', 'cmd'); // Adjust the context to support modal layouts. if ($layout = $app->input->get('layout')) { $this->context .= '.' . $layout; } // Adjust the context to support forced languages. if ($forcedLanguage) { $this->context .= '.' . $forcedLanguage; } $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); $this->setState('filter.search', $search); $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); $this->setState('filter.published', $published); $level = $this->getUserStateFromRequest($this->context . '.filter.level', 'filter_level'); $this->setState('filter.level', $level); $language = $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', ''); $this->setState('filter.language', $language); $formSubmited = $app->input->post->get('form_submited'); $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access'); $authorId = $this->getUserStateFromRequest($this->context . '.filter.author_id', 'filter_author_id'); $categoryId = $this->getUserStateFromRequest($this->context . '.filter.category_id', 'filter_category_id'); $tag = $this->getUserStateFromRequest($this->context . '.filter.tag', 'filter_tag', ''); if ($formSubmited) { $access = $app->input->post->get('access'); $this->setState('filter.access', $access); $authorId = $app->input->post->get('author_id'); $this->setState('filter.author_id', $authorId); $categoryId = $app->input->post->get('category_id'); $this->setState('filter.category_id', $categoryId); $tag = $app->input->post->get('tag'); $this->setState('filter.tag', $tag); } // List state information. parent::populateState($ordering, $direction); // Force a language if (!empty($forcedLanguage)) { $this->setState('filter.language', $forcedLanguage); $this->setState('filter.forcedLanguage', $forcedLanguage); } } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . serialize($this->getState('filter.access')); $id .= ':' . $this->getState('filter.published'); $id .= ':' . serialize($this->getState('filter.category_id')); $id .= ':' . serialize($this->getState('filter.author_id')); $id .= ':' . $this->getState('filter.language'); $id .= ':' . serialize($this->getState('filter.tag')); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'DISTINCT a.id, a.title, a.alias, a.checked_out, a.checked_out_time, a.catid' . ', a.state, a.access, a.created, a.created_by, a.created_by_alias, a.modified, a.ordering, a.featured, a.language, a.hits' . ', a.publish_up, a.publish_down, a.note' ) ); $query->from('#__content AS a'); // Join over the language $query->select('l.title AS language_title, l.image AS language_image') ->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = a.language'); // Join over the users for the checked out user. $query->select('uc.name AS editor') ->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Join over the asset groups. $query->select('ag.title AS access_level') ->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Join over the categories. $query->select('c.title AS category_title, c.created_user_id AS category_uid, c.level AS category_level') ->join('LEFT', '#__categories AS c ON c.id = a.catid'); // Join over the parent categories. $query->select('parent.title AS parent_category_title, parent.id AS parent_category_id, parent.created_user_id AS parent_category_uid, parent.level AS parent_category_level') ->join('LEFT', '#__categories AS parent ON parent.id = c.parent_id'); // Join over the users for the author. $query->select('ua.name AS author_name') ->join('LEFT', '#__users AS ua ON ua.id = a.created_by'); // Join on voting table $assogroup = 'a.id, l.title, l.image, uc.name, ag.title, c.title, ua.name, c.created_user_id, c.level, parent.id'; if (JPluginHelper::isEnabled('content', 'vote')) { $assogroup .= ', v.rating_sum, v.rating_count'; $query->select('COALESCE(NULLIF(ROUND(v.rating_sum / v.rating_count, 0), 0), 0) AS rating, COALESCE(NULLIF(v.rating_count, 0), 0) as rating_count') ->join('LEFT', '#__content_rating AS v ON a.id = v.content_id'); } // Join over the associations. if (JLanguageAssociations::isEnabled()) { $query->select('CASE WHEN COUNT(asso2.id)>1 THEN 1 ELSE 0 END as association') ->join('LEFT', '#__associations AS asso ON asso.id = a.id AND asso.context=' . $db->quote('com_content.item')) ->join('LEFT', '#__associations AS asso2 ON ' . $db->quoteName('asso2.key') . ' = ' . $db->quoteName('asso.key')) ->group($assogroup); } // Filter by access level. $access = $this->getState('filter.access'); if (is_numeric($access)) { $query->where('a.access = ' . (int) $access); } elseif (is_array($access)) { $access = ArrayHelper::toInteger($access); $access = implode(',', $access); $query->where('a.access IN (' . $access . ')'); } // Filter by access level on categories. if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN (' . $groups . ')'); $query->where('c.access IN (' . $groups . ')'); } // Filter by published state $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.state = ' . (int) $published); } elseif ($published === '') { $query->where('(a.state = 0 OR a.state = 1)'); } // Filter by categories and by level $categoryId = $this->getState('filter.category_id', array()); $level = $this->getState('filter.level'); if (!is_array($categoryId)) { $categoryId = $categoryId ? array($categoryId) : array(); } // Case: Using both categories filter and by level filter if (count($categoryId)) { $categoryId = ArrayHelper::toInteger($categoryId); $categoryTable = JTable::getInstance('Category', 'JTable'); $subCatItemsWhere = array(); foreach ($categoryId as $filter_catid) { $categoryTable->load($filter_catid); $subCatItemsWhere[] = '(' . ($level ? 'c.level <= ' . ((int) $level + (int) $categoryTable->level - 1) . ' AND ' : '') . 'c.lft >= ' . (int) $categoryTable->lft . ' AND ' . 'c.rgt <= ' . (int) $categoryTable->rgt . ')'; } $query->where('(' . implode(' OR ', $subCatItemsWhere) . ')'); } // Case: Using only the by level filter elseif ($level) { $query->where('c.level <= ' . (int) $level); } // Filter by author $authorId = $this->getState('filter.author_id'); if (is_numeric($authorId)) { $type = $this->getState('filter.author_id.include', true) ? '= ' : '<>'; $query->where('a.created_by ' . $type . (int) $authorId); } elseif (is_array($authorId)) { $authorId = ArrayHelper::toInteger($authorId); $authorId = implode(',', $authorId); $query->where('a.created_by IN (' . $authorId . ')'); } // Filter by search in title. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = ' . (int) substr($search, 3)); } elseif (stripos($search, 'author:') === 0) { $search = $db->quote('%' . $db->escape(substr($search, 7), true) . '%'); $query->where('(ua.name LIKE ' . $search . ' OR ua.username LIKE ' . $search . ')'); } elseif (stripos($search, 'content:') === 0) { $search = $db->quote('%' . $db->escape(substr($search, 8), true) . '%'); $query->where('(a.introtext LIKE ' . $search . ' OR a.fulltext LIKE ' . $search . ')'); } else { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('(a.title LIKE ' . $search . ' OR a.alias LIKE ' . $search . ' OR a.note LIKE ' . $search . ')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where('a.language = ' . $db->quote($language)); } // Filter by a single or group of tags. $hasTag = false; $tagId = $this->getState('filter.tag'); if (is_numeric($tagId)) { $hasTag = true; $query->where($db->quoteName('tagmap.tag_id') . ' = ' . (int) $tagId); } elseif (is_array($tagId)) { $tagId = ArrayHelper::toInteger($tagId); $tagId = implode(',', $tagId); if (!empty($tagId)) { $hasTag = true; $query->where($db->quoteName('tagmap.tag_id') . ' IN (' . $tagId . ')'); } } if ($hasTag) { $query->join('LEFT', $db->quoteName('#__contentitem_tag_map', 'tagmap') . ' ON ' . $db->quoteName('tagmap.content_item_id') . ' = ' . $db->quoteName('a.id') . ' AND ' . $db->quoteName('tagmap.type_alias') . ' = ' . $db->quote('com_content.article') ); } // Add the list ordering clause. $orderCol = $this->state->get('list.ordering', 'a.id'); $orderDirn = $this->state->get('list.direction', 'DESC'); if ($orderCol == 'a.ordering' || $orderCol == 'category_title') { $orderCol = $db->quoteName('c.title') . ' ' . $orderDirn . ', ' . $db->quoteName('a.ordering'); } $query->order($db->escape($orderCol) . ' ' . $db->escape($orderDirn)); return $query; } /** * Build a list of authors * * @return stdClass * * @since 1.6 * * @deprecated 4.0 To be removed with Hathor */ public function getAuthors() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Construct the query $query->select('u.id AS value, u.name AS text') ->from('#__users AS u') ->join('INNER', '#__content AS c ON c.created_by = u.id') ->group('u.id, u.name') ->order('u.name'); // Setup the query $db->setQuery($query); // Return the result return $db->loadObjectList(); } } PKb��\� ���%components/com_content/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_content * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Component Controller * * @since 1.5 */ class ContentController extends JControllerLegacy { /** * The default view. * * @var string * @since 1.6 */ protected $default_view = 'articles'; /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return ContentController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = array()) { $view = $this->input->get('view', 'articles'); $layout = $this->input->get('layout', 'articles'); $id = $this->input->getInt('id'); // Check for edit form. if ($view == 'article' && $layout == 'edit' && !$this->checkEditId('com_content.edit.article', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_content&view=articles', false)); return false; } return parent::display(); } } PKb��\��tfii&components/com_languages/languages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); if (!JFactory::getUser()->authorise('core.manage', 'com_languages')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Languages'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\u�_ 2components/com_languages/controllers/languages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Languages controller Class. * * @since 1.6 */ class LanguagesControllerLanguages extends JControllerAdmin { /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'Language', $prefix = 'LanguagesModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } /** * Method to save the submitted ordering values for records via AJAX. * * @return void * * @since 3.1 */ public function saveOrderAjax() { $pks = $this->input->post->get('cid', array(), 'array'); $order = $this->input->post->get('order', array(), 'array'); // Sanitize the input. $pks = ArrayHelper::toInteger($pks); $order = ArrayHelper::toInteger($order); // Get the model. $model = $this->getModel(); // Save the ordering. $return = $model->saveorder($pks, $order); if ($return) { echo '1'; } // Close the application. JFactory::getApplication()->close(); } } PKb��\5�~ ~ 2components/com_languages/controllers/installed.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Languages Controller. * * @since 1.5 */ class LanguagesControllerInstalled extends JControllerLegacy { /** * Task to set the default language. * * @return void */ public function setDefault() { // Check for request forgeries. $this->checkToken(); $cid = $this->input->get('cid', ''); $model = $this->getModel('installed'); if ($model->publish($cid)) { // Switching to the new administrator language for the message if ($model->getState('client_id') == 1) { $language = JFactory::getLanguage(); $newLang = JLanguage::getInstance($cid); JFactory::$language = $newLang; JFactory::getApplication()->loadLanguage($language = $newLang); $newLang->load('com_languages', JPATH_ADMINISTRATOR); } $msg = JText::_('COM_LANGUAGES_MSG_DEFAULT_LANGUAGE_SAVED'); $type = 'message'; } else { $msg = $this->getError(); $type = 'error'; } $clientId = $model->getState('client_id'); $this->setredirect('index.php?option=com_languages&view=installed&client=' . $clientId, $msg, $type); } /** * Task to switch the administrator language. * * @return void */ public function switchAdminLanguage() { // Check for request forgeries. $this->checkToken(); $cid = $this->input->get('cid', ''); $model = $this->getModel('installed'); // Fetching the language name from the xx-XX.xml $file = JPATH_ADMINISTRATOR . '/language/' . $cid . '/' . $cid . '.xml'; $info = JInstaller::parseXMLInstallFile($file); $languageName = $info['name']; if ($model->switchAdminLanguage($cid)) { // Switching to the new language for the message $language = JFactory::getLanguage(); $newLang = JLanguage::getInstance($cid); JFactory::$language = $newLang; JFactory::getApplication()->loadLanguage($language = $newLang); $newLang->load('com_languages', JPATH_ADMINISTRATOR); $msg = JText::sprintf('COM_LANGUAGES_MSG_SWITCH_ADMIN_LANGUAGE_SUCCESS', $languageName); $type = 'message'; } else { $msg = $this->getError(); $type = 'error'; } $this->setredirect('index.php?option=com_languages&view=installed', $msg, $type); } } PKb��\ ��zz2components/com_languages/controllers/overrides.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Languages Overrides Controller. * * @since 2.5 */ class LanguagesControllerOverrides extends JControllerAdmin { /** * The prefix to use with controller messages. * * @var string * @since 2.5 */ protected $text_prefix = 'COM_LANGUAGES_VIEW_OVERRIDES'; /** * Method for deleting one or more overrides. * * @return void * * @since 2.5 */ public function delete() { // Check for request forgeries. $this->checkToken(); // Get items to dlete from the request. $cid = $this->input->get('cid', array(), 'array'); if (!is_array($cid) || count($cid) < 1) { $this->setMessage(JText::_($this->text_prefix . '_NO_ITEM_SELECTED'), 'warning'); } else { // Get the model. $model = $this->getModel('overrides'); // Remove the items. if ($model->delete($cid)) { $this->setMessage(JText::plural($this->text_prefix . '_N_ITEMS_DELETED', count($cid))); } else { $this->setMessage($model->getError()); } } $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list, false)); } /** * Method to purge the overrider table. * * @return void * * @since 3.4.2 */ public function purge() { $model = $this->getModel('overrides'); $model->purge(); $this->setRedirect(JRoute::_('index.php?option=com_languages&view=overrides', false)); } } PKb��\��.jQQ1components/com_languages/controllers/language.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Languages list actions controller. * * @since 1.6 */ class LanguagesControllerLanguage extends JControllerForm { /** * Gets the URL arguments to append to an item redirect. * * @param int $recordId The primary key id for the item. * @param string $key The name of the primary key variable. * * @return string The arguments to append to the redirect URL. * * @since 1.6 */ protected function getRedirectToItemAppend($recordId = null, $key = 'lang_id') { return parent::getRedirectToItemAppend($recordId, $key); } } PKb��\�f ?��1components/com_languages/controllers/override.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Languages Override Controller * * @since 2.5 */ class LanguagesControllerOverride extends JControllerForm { /** * Method to edit an existing override. * * @param string $key The name of the primary key of the URL variable (not used here). * @param string $urlVar The name of the URL variable if different from the primary key (not used here). * * @return void * * @since 2.5 */ public function edit($key = null, $urlVar = null) { // Do not cache the response to this, its a redirect JFactory::getApplication()->allowCache(false); $app = JFactory::getApplication(); $cid = $this->input->post->get('cid', array(), 'array'); $context = "$this->option.edit.$this->context"; // Get the constant name. $recordId = (count($cid) ? $cid[0] : $this->input->get('id')); // Access check. if (!$this->allowEdit()) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDIT_NOT_PERMITTED')); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false)); return; } $app->setUserState($context . '.data', null); $this->setRedirect('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, 'id')); } /** * Method to save an override. * * @param string $key The name of the primary key of the URL variable (not used here). * @param string $urlVar The name of the URL variable if different from the primary key (not used here). * * @return void * * @since 2.5 */ public function save($key = null, $urlVar = null) { // Check for request forgeries. $this->checkToken(); $app = JFactory::getApplication(); $model = $this->getModel(); $data = $this->input->post->get('jform', array(), 'array'); $context = "$this->option.edit.$this->context"; $task = $this->getTask(); $recordId = $this->input->get('id'); $data['id'] = $recordId; // Access check. if (!$this->allowSave($data, 'id')) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED')); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false)); return; } // Validate the posted data. $form = $model->getForm($data, false); if (!$form) { $app->enqueueMessage($model->getError(), 'error'); return; } // Require helper for filter functions called by JForm. JLoader::register('LanguagesHelper', JPATH_ADMINISTRATOR . '/components/com_languages/helpers/languages.php'); // Test whether the data is valid. $validData = $model->validate($form, $data); // Check for validation errors. if ($validData === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState($context . '.data', $data); // Redirect back to the edit screen. $this->setRedirect( JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, 'id'), false) ); return; } // Attempt to save the data. if (!$model->save($validData)) { // Save the data in the session. $app->setUserState($context . '.data', $validData); // Redirect back to the edit screen. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError())); $this->setMessage($this->getError(), 'error'); $this->setRedirect( JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, 'id'), false) ); return; } // Add message of success. $this->setMessage(JText::_('COM_LANGUAGES_VIEW_OVERRIDE_SAVE_SUCCESS')); // Redirect the user and adjust session state based on the chosen task. switch ($task) { case 'apply': // Set the record data in the session. $app->setUserState($context . '.data', null); // Redirect back to the edit screen $this->setRedirect( JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($validData['key'], 'id'), false) ); break; case 'save2new': // Clear the record id and data from the session. $app->setUserState($context . '.data', null); // Redirect back to the edit screen $this->setRedirect( JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend(null, 'id'), false) ); break; default: // Clear the record id and data from the session. $app->setUserState($context . '.data', null); // Redirect to the list screen. $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false)); break; } } /** * Method to cancel an edit. * * @param string $key The name of the primary key of the URL variable (not used here). * * @return void * * @since 2.5 */ public function cancel($key = null) { $this->checkToken(); $app = JFactory::getApplication(); $context = "$this->option.edit.$this->context"; $app->setUserState($context . '.data', null); $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false)); } } PKb��\�Iʟ>>5components/com_languages/controllers/strings.json.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Languages Strings JSON Controller * * @since 2.5 */ class LanguagesControllerStrings extends JControllerAdmin { /** * Method for refreshing the cache in the database with the known language strings * * @return void * * @since 2.5 */ public function refresh() { echo new JResponseJson($this->getModel('strings')->refresh()); } /** * Method for searching language strings * * @return void * * @since 2.5 */ public function search() { echo new JResponseJson($this->getModel('strings')->search()); } } PKb��\��N��#components/com_languages/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_languages" section="component" /> <field type="hidden" name="site" /> <field type="hidden" name="administrator" /> </fieldset> </config> PKb��\[�zn��#components/com_languages/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_languages"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKb��\�q��u'u'?components/com_languages/views/multilangstatus/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $notice_homes = $this->homes == 2 || $this->homes == 1 || $this->homes - 1 != count($this->contentlangs) && ($this->language_filter || $this->switchers != 0); $notice_disabled = !$this->language_filter && ($this->homes > 1 || $this->switchers != 0); $notice_switchers = !$this->switchers && ($this->homes > 1 || $this->language_filter); ?> <div class="mod-multilangstatus"> <?php if (!$this->language_filter && $this->switchers == 0) : ?> <?php if ($this->homes == 1) : ?> <div class="alert alert-info"><?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_NONE'); ?></div> <?php else : ?> <div class="alert alert-info"><?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_USELESS_HOMES'); ?></div> <?php endif; ?> <?php else : ?> <table class="table table-striped table-condensed"> <tbody> <?php if ($this->defaultHome == true) : ?> <tr class="warning"> <td> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> </td> <td> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_DEFAULT_HOME_MODULE_PUBLISHED'); ?> </td> </tr> <?php endif; ?> <?php if ($notice_homes) : ?> <tr class="warning"> <td> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> </td> <td> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_HOMES_MISSING'); ?> </td> </tr> <?php endif; ?> <?php if ($notice_disabled) : ?> <tr class="warning"> <td> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> </td> <td> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_LANGUAGEFILTER_DISABLED'); ?> </td> </tr> <?php endif; ?> <?php if ($notice_switchers) : ?> <tr class="warning"> <td> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> </td> <td> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_LANGSWITCHER_UNPUBLISHED'); ?> </td> </tr> <?php endif; ?> <?php foreach ($this->contentlangs as $contentlang) : ?> <?php if (array_key_exists($contentlang->lang_code, $this->homepages) && (!array_key_exists($contentlang->lang_code, $this->site_langs) || !$contentlang->published)) : ?> <tr class="warning"> <td> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> </td> <td> <?php echo JText::sprintf('COM_LANGUAGES_MULTILANGSTATUS_ERROR_CONTENT_LANGUAGE', $contentlang->lang_code); ?> </td> </tr> <?php endif; ?> <?php if (!array_key_exists($contentlang->lang_code, $this->site_langs)) : ?> <tr class="warning"> <td> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> </td> <td> <?php echo JText::sprintf('COM_LANGUAGES_MULTILANGSTATUS_ERROR_LANGUAGE_TAG', $contentlang->lang_code); ?> </td> </tr> <?php endif; ?> <?php if ($contentlang->published == -2) : ?> <tr class="warning"> <td> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> </td> <td> <?php echo JText::sprintf('COM_LANGUAGES_MULTILANGSTATUS_ERROR_CONTENT_LANGUAGE_TRASHED', $contentlang->lang_code); ?> </td> </tr> <?php endif; ?> <?php endforeach; ?> <?php if ($this->listUsersError) : ?> <tr class="info"> <td> <span class="icon-help" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('JHELP'); ?></span> </td> <td> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_CONTACTS_ERROR_TIP'); ?> <ul> <?php foreach ($this->listUsersError as $user) : ?> <li> <?php echo JText::sprintf('COM_LANGUAGES_MULTILANGSTATUS_CONTACTS_ERROR', $user->name); ?> </li> <?php endforeach; ?> </ul> </td> </tr> <?php endif; ?> </tbody> </table> <table class="table table-striped table-condensed" style="border-top: 1px solid #CCCCCC;"> <thead> <tr> <th> <?php echo JText::_('JDETAILS'); ?> </th> <th class="center"> <?php echo JText::_('JSTATUS'); ?> </th> </tr> </thead> <tbody> <tr> <th scope="row"> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_LANGUAGEFILTER'); ?> </th> <td class="center"> <?php if ($this->language_filter) : ?> <?php echo JText::_('JENABLED'); ?> <?php else : ?> <?php echo JText::_('JDISABLED'); ?> <?php endif; ?> </td> </tr> <tr> <th scope="row"> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_LANGSWITCHER_PUBLISHED'); ?> </th> <td class="center"> <?php if ($this->switchers != 0) : ?> <?php echo $this->switchers; ?> <?php else : ?> <?php echo JText::_('JNONE'); ?> <?php endif; ?> </td> </tr> <tr> <th scope="row"> <?php if ($this->homes > 1) : ?> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_HOMES_PUBLISHED_INCLUDING_ALL'); ?> <?php else : ?> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_HOMES_PUBLISHED'); ?> <?php endif; ?> </th> <td class="center"> <?php if ($this->homes > 1) : ?> <?php echo $this->homes; ?> <?php else : ?> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_HOMES_PUBLISHED_ALL'); ?> <?php endif; ?> </td> </tr> </tbody> </table> <table class="table table-striped table-condensed" style="border-top: 1px solid #CCCCCC;"> <thead> <tr> <th> <?php echo JText::_('JGRID_HEADING_LANGUAGE'); ?> </th> <th class="center"> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_SITE_LANG_PUBLISHED'); ?> </th> <th class="center"> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_CONTENT_LANGUAGE_PUBLISHED'); ?> </th> <th class="center"> <?php echo JText::_('COM_LANGUAGES_MULTILANGSTATUS_HOMES_PUBLISHED'); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->statuses as $status) : ?> <?php if ($status->element) : ?> <tr> <td> <?php echo $status->element; ?> </td> <?php endif; ?> <?php // Published Site languages ?> <?php if ($status->element) : ?> <td class="center"> <span class="icon-ok" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('JYES'); ?></span> </td> <?php else : ?> <td class="center"> <?php echo JText::_('JNO'); ?> </td> <?php endif; ?> <?php // Published Content languages ?> <?php if ($status->lang_code && $status->published == 1) : ?> <td class="center"> <span class="icon-ok" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('JYES'); ?></span> </td> <?php elseif ($status->lang_code && $status->published == 0) : ?> <td class="center"> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> </td> <?php elseif ($status->lang_code && $status->published == -2) : ?> <td class="center"> <span class="icon-trash" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> </td> <?php else : ?> <td class="center"> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> </td> <?php endif; ?> <?php // Published Home pages ?> <?php if ($status->home_language) : ?> <td class="center"> <span class="icon-ok" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('JYES'); ?></span> </td> <?php else : ?> <td class="center"> <span class="icon-not-ok" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('JNO'); ?></span> </td> <?php endif; ?> </tr> <?php endforeach; ?> <?php foreach ($this->contentlangs as $contentlang) : ?> <?php if (!array_key_exists($contentlang->lang_code, $this->site_langs)) : ?> <tr> <td> <?php echo $contentlang->lang_code; ?> </td> <td class="center"> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> </td> <td class="center"> <?php if ($contentlang->published) : ?> <span class="icon-ok" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('JYES'); ?></span> <?php elseif (!$contentlang->published && array_key_exists($contentlang->lang_code, $this->homepages)) : ?> <span class="icon-not-ok" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('JNO'); ?></span> <?php elseif (!$contentlang->published) : ?> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> <?php endif; ?> </td> <td class="center"> <?php if (!array_key_exists($contentlang->lang_code, $this->homepages)) : ?> <span class="icon-pending" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('WARNING'); ?></span> <?php else : ?> <span class="icon-ok" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('JYES'); ?></span> <?php endif; ?> </td> </tr> <?php endif; ?> <?php endforeach; ?> </tbody> </table> <?php endif; ?> </div> PKb��\���**<components/com_languages/views/multilangstatus/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Displays the multilang status. * * @since 1.7.1 */ class LanguagesViewMultilangstatus extends JViewLegacy { /** * Display the view. * * @param string $tpl The name of the template file to parse. * * @return void */ public function display($tpl = null) { JLoader::register('MultilangstatusHelper', JPATH_ADMINISTRATOR . '/components/com_languages/helpers/multilangstatus.php'); $this->homes = MultilangstatusHelper::getHomes(); $this->language_filter = JLanguageMultilang::isEnabled(); $this->switchers = MultilangstatusHelper::getLangswitchers(); $this->listUsersError = MultilangstatusHelper::getContacts(); $this->contentlangs = MultilangstatusHelper::getContentlangs(); $this->site_langs = JLanguageHelper::getInstalledLanguages(0); $this->statuses = MultilangstatusHelper::getStatus(); $this->homepages = JLanguageMultilang::getSiteHomePages(); $this->defaultHome = MultilangstatusHelper::getDefaultHomeModule(); parent::display($tpl); } } PKb��\P09components/com_languages/views/languages/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.tooltip'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = $listOrder == 'a.ordering'; if ($saveOrder) { $saveOrderingUrl = 'index.php?option=com_languages&task=languages.saveOrderAjax&tmpl=component'; JHtml::_('sortablelist.sortable', 'contentList', 'adminForm', strtolower($listDirn), $saveOrderingUrl); } ?> <form action="<?php echo JRoute::_('index.php?option=com_languages&view=languages'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"></div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="contentList"> <thead> <tr> <th width="1%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', '', 'a.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="title nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="title nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_TITLE_NATIVE', 'a.title_native', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_LANG_TAG', 'a.lang_code', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_LANG_CODE', 'a.sef', $listDirn, $listOrder); ?> </th> <th width="8%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_LANG_IMAGE', 'a.image', $listDirn, $listOrder); ?> </th> <th width="5%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'a.access', $listDirn, $listOrder); ?> </th> <th width="5%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_HOMEPAGE', 'l.home', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.lang_id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="11"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_languages'); $canEdit = $user->authorise('core.edit', 'com_languages'); $canChange = $user->authorise('core.edit.state', 'com_languages'); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="order nowrap center hidden-phone"> <?php if ($canChange) : $disableClassName = ''; $disabledLabel = ''; if (!$saveOrder) : $disabledLabel = JText::_('JORDERINGDISABLED'); $disableClassName = 'inactive tip-top'; endif; ?> <span class="sortable-handler hasTooltip <?php echo $disableClassName; ?>" title="<?php echo $disabledLabel; ?>"> <span class="icon-menu" aria-hidden="true"></span> </span> <input type="text" style="display:none" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order" /> <?php else : ?> <span class="sortable-handler inactive"> <span class="icon-menu" aria-hidden="true"></span> </span> <?php endif; ?> </td> <td> <?php echo JHtml::_('grid.id', $i, $item->lang_id); ?> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'languages.', $canChange); ?> </td> <td> <span class="editlinktip hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('JGLOBAL_EDIT_ITEM'), $item->title, 0); ?>"> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_languages&task=language.edit&lang_id=' . (int) $item->lang_id); ?>"><?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> </span> </td> <td class="hidden-phone hidden-tablet"> <?php echo $this->escape($item->title_native); ?> </td> <td> <?php echo $this->escape($item->lang_code); ?> </td> <td> <?php echo $this->escape($item->sef); ?> </td> <td class="hidden-phone"> <?php if ($item->image) : ?> <?php echo JHtml::_('image', 'mod_languages/' . $item->image . '.gif', $item->image, null, true); ?> <?php echo $this->escape($item->image); ?> <?php else : ?> <?php echo JText::_('JNONE'); ?> <?php endif; ?> </td> <td class="hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <td class="hidden-phone"> <?php echo ($item->home == '1') ? JText::_('JYES') : JText::_('JNO'); ?> </td> <td class="hidden-phone hidden-tablet"> <?php echo $this->escape($item->lang_id); ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\URh� � 6components/com_languages/views/languages/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML Languages View class for the Languages component. * * @since 1.6 */ class LanguagesViewLanguages extends JViewLegacy { protected $items; protected $pagination; protected $state; /** * Display the view. * * @param string $tpl The name of the template file to parse. * * @return void */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); LanguagesHelper::addSubmenu('languages'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_languages'); JToolbarHelper::title(JText::_('COM_LANGUAGES_VIEW_LANGUAGES_TITLE'), 'comments-2 langmanager'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('language.add'); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('language.edit'); JToolbarHelper::divider(); } if ($canDo->get('core.edit.state')) { if ($this->state->get('filter.published') != 2) { JToolbarHelper::publishList('languages.publish'); JToolbarHelper::unpublishList('languages.unpublish'); } } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'languages.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolbarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::trash('languages.trash'); JToolbarHelper::divider(); } if ($canDo->get('core.admin')) { // Add install languages link to the lang installer component. $bar = JToolbar::getInstance('toolbar'); $bar->appendButton('Link', 'upload', 'COM_LANGUAGES_INSTALL', 'index.php?option=com_installer&view=languages'); JToolbarHelper::divider(); JToolbarHelper::preferences('com_languages'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_EXTENSIONS_LANGUAGE_MANAGER_CONTENT'); JHtmlSidebar::setAction('index.php?option=com_languages&view=languages'); } /** * Returns an array of fields the table can be sorted by. * * @return array Array containing the field name to sort by as the key and display text as value. * * @since 3.0 */ protected function getSortFields() { return array( 'a.ordering' => JText::_('JGRID_HEADING_ORDERING'), 'a.published' => JText::_('JSTATUS'), 'a.title' => JText::_('JGLOBAL_TITLE'), 'a.title_native' => JText::_('COM_LANGUAGES_HEADING_TITLE_NATIVE'), 'a.lang_code' => JText::_('COM_LANGUAGES_FIELD_LANG_TAG_LABEL'), 'a.sef' => JText::_('COM_LANGUAGES_FIELD_LANG_CODE_LABEL'), 'a.image' => JText::_('COM_LANGUAGES_HEADING_LANG_IMAGE'), 'a.access' => JText::_('JGRID_HEADING_ACCESS'), 'a.lang_id' => JText::_('JGRID_HEADING_ID'), ); } } PKb��\N��[��9components/com_languages/views/overrides/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.tooltip'); JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); $client = $this->state->get('filter.client') == 'site' ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); $language = $this->state->get('filter.language'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $oppositeClient = $this->state->get('filter.client') == 'administrator' ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); $oppositeFileName = constant('JPATH_' . strtoupper($this->state->get('filter.client') === 'site' ? 'administrator' : 'site')) . '/language/overrides/' . $this->state->get('filter.language', 'en-GB') . '.override.ini'; $oppositeStrings = JLanguageHelper::parseIniFile($oppositeFileName); ?> <form action="<?php echo JRoute::_('index.php?option=com_languages&view=overrides'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"></div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="overrideList"> <thead> <tr> <th width="1%" class="center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="30%" class="left"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_VIEW_OVERRIDES_KEY', 'key', $listDirn, $listOrder); ?> </th> <th class="left hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_VIEW_OVERRIDES_TEXT', 'text', $listDirn, $listOrder); ?> </th> <th class="nowrap hidden-phone"> <?php echo JText::_('COM_LANGUAGES_FIELD_LANG_TAG_LABEL'); ?> </th> <th class="hidden-phone"> <?php echo JText::_('JCLIENT'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="5"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $canEdit = JFactory::getUser()->authorise('core.edit', 'com_languages'); ?> <?php $i = 0; ?> <?php foreach ($this->items as $key => $text) : ?> <tr class="row<?php echo $i % 2; ?>" id="overriderrow<?php echo $i; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $key); ?> </td> <td> <?php if ($canEdit) : ?> <a id="key[<?php echo $this->escape($key); ?>]" href="<?php echo JRoute::_('index.php?option=com_languages&task=override.edit&id=' . $key); ?>"><?php echo $this->escape($key); ?></a> <?php else : ?> <?php echo $this->escape($key); ?> <?php endif; ?> </td> <td class="hidden-phone"> <span id="string[<?php echo $this->escape($key); ?>]"><?php echo $this->escape($text); ?></span> </td> <td class="hidden-phone"> <?php echo $language; ?> </td> <td class="hidden-phone"> <?php echo $client; ?><?php if (isset($oppositeStrings[$key]) && $oppositeStrings[$key] === $text) { echo '/' . $oppositeClient; } ?> </td> </tr> <?php $i++; ?> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\��� 6components/com_languages/views/overrides/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View for language overrides list. * * @since 2.5 */ class LanguagesViewOverrides extends JViewLegacy { /** * The items to list. * * @var array * @since 2.5 */ protected $items; /** * The pagination object. * * @var object * @since 2.5 */ protected $pagination; /** * The model state. * * @var object * @since 2.5 */ protected $state; /** * Displays the view. * * @param string $tpl The name of the template file to parse. * * @return void * * @since 2.5 */ public function display($tpl = null) { $this->state = $this->get('State'); $this->items = $this->get('Overrides'); $this->languages = $this->get('Languages'); $this->pagination = $this->get('Pagination'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); LanguagesHelper::addSubmenu('overrides'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors)); } $this->addToolbar(); parent::display($tpl); } /** * Adds the page title and toolbar. * * @return void * * @since 2.5 */ protected function addToolbar() { // Get the results for each action $canDo = JHelperContent::getActions('com_languages'); JToolbarHelper::title(JText::_('COM_LANGUAGES_VIEW_OVERRIDES_TITLE'), 'comments-2 langmanager'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('override.add'); } if ($canDo->get('core.edit') && $this->pagination->total) { JToolbarHelper::editList('override.edit'); } if ($canDo->get('core.delete') && $this->pagination->total) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'overrides.delete', 'JTOOLBAR_DELETE'); } if (JFactory::getUser()->authorise('core.admin')) { JToolbarHelper::custom('overrides.purge', 'refresh.png', 'refresh_f2.png', 'COM_LANGUAGES_VIEW_OVERRIDES_PURGE', false); } if ($canDo->get('core.admin')) { JToolbarHelper::preferences('com_languages'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES'); JHtmlSidebar::setAction('index.php?option=com_languages&view=overrides'); $this->sidebar = JHtmlSidebar::render(); } } PKb��\Q�c�$$5components/com_languages/views/override/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', 'select'); $expired = ($this->state->get('cache_expired') == 1 ) ? '1' : ''; JHtml::_('stylesheet', 'overrider/overrider.css', array('version' => 'auto', 'relative' => true)); JHtml::_('behavior.core'); JHtml::_('jquery.framework'); JHtml::_('script', 'overrider/overrider.min.js', array('version' => 'auto', 'relative' => true)); JFactory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function($) { $("#jform_searchstring").on("focus", function() { if (!Joomla.overrider.states.refreshed) { var expired = "' . $expired . '"; if (expired) { Joomla.overrider.refreshCache(); Joomla.overrider.states.refreshed = true; } } $(this).removeClass("invalid"); }); }); Joomla.submitbutton = function(task) { if (task == "override.cancel" || document.formvalidator.isValid(document.getElementById("override-form"))) { Joomla.submitform(task, document.getElementById("override-form")); } }; '); ?> <form action="<?php echo JRoute::_('index.php?option=com_languages&id=' . $this->item->key); ?>" method="post" name="adminForm" id="override-form" class="form-validate form-horizontal"> <div class="row-fluid"> <div class="span6"> <fieldset> <legend><?php echo empty($this->item->key) ? JText::_('COM_LANGUAGES_VIEW_OVERRIDE_EDIT_NEW_OVERRIDE_LEGEND') : JText::_('COM_LANGUAGES_VIEW_OVERRIDE_EDIT_EDIT_OVERRIDE_LEGEND'); ?></legend> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('language'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('language'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('client'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('client'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('key'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('key'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('override'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('override'); ?> </div> </div> <?php if ($this->state->get('filter.client') == 'administrator') : ?> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('both'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('both'); ?> </div> </div> <?php endif; ?> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('file'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('file'); ?> </div> </div> </fieldset> </div> <div class="span6"> <fieldset> <legend><?php echo JText::_('COM_LANGUAGES_VIEW_OVERRIDE_SEARCH_LEGEND'); ?></legend> <div class="alert alert-info"><p><?php echo JText::_('COM_LANGUAGES_VIEW_OVERRIDE_SEARCH_TIP'); ?></p></div> <div class="control-group"> <?php echo $this->form->getInput('searchstring'); ?> <button type="submit" class="btn btn-primary" onclick="Joomla.overrider.searchStrings();return false;" formnovalidate> <?php echo JText::_('COM_LANGUAGES_VIEW_OVERRIDE_SEARCH_BUTTON'); ?> </button> <span id="refresh-status" class="overrider-spinner help-block"> <?php echo JText::_('COM_LANGUAGES_VIEW_OVERRIDE_REFRESHING'); ?> </span> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('searchtype'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('searchtype'); ?> </div> </div> </fieldset> <fieldset id="results-container" class="adminform"> <legend><?php echo JText::_('COM_LANGUAGES_VIEW_OVERRIDE_RESULTS_LEGEND'); ?></legend> <span id="more-results"> <a href="javascript:Joomla.overrider.searchStrings(Joomla.overrider.states.more);"> <?php echo JText::_('COM_LANGUAGES_VIEW_OVERRIDE_MORE_RESULTS'); ?></a> </span> </fieldset> <input type="hidden" name="task" value="" /> <input type="hidden" name="id" value="<?php echo $this->item->key; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> PKb��\�O��nn5components/com_languages/views/override/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a language override * * @since 2.5 */ class LanguagesViewOverride extends JViewLegacy { /** * The form to use for the view. * * @var object * @since 2.5 */ protected $form; /** * The item to edit. * * @var object * @since 2.5 */ protected $item; /** * The model state. * * @var object * @since 2.5 */ protected $state; /** * Displays the view. * * @param string $tpl The name of the template file to parse * * @return void * * @since 2.5 */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); $app = JFactory::getApplication(); $languageClient = $app->getUserStateFromRequest('com_languages.overrides.language_client', 'language_client'); if ($languageClient == null) { $app->enqueueMessage(JText::_('COM_LANGUAGES_OVERRIDE_FIRST_SELECT_MESSAGE'), 'warning'); $app->redirect('index.php?option=com_languages&view=overrides'); } // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors)); } // Check whether the cache has to be refreshed. $cached_time = JFactory::getApplication()->getUserState( 'com_languages.overrides.cachedtime.' . $this->state->get('filter.client') . '.' . $this->state->get('filter.language'), 0 ); if (time() - $cached_time > 60 * 5) { $this->state->set('cache_expired', true); } // Add strings for translations in Javascript. JText::script('COM_LANGUAGES_VIEW_OVERRIDE_NO_RESULTS'); JText::script('COM_LANGUAGES_VIEW_OVERRIDE_REQUEST_ERROR'); $this->addToolbar(); parent::display($tpl); } /** * Adds the page title and toolbar. * * @return void * * @since 2.5 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $canDo = JHelperContent::getActions('com_languages'); JToolbarHelper::title(JText::_('COM_LANGUAGES_VIEW_OVERRIDE_EDIT_TITLE'), 'comments-2 langmanager'); if ($canDo->get('core.edit')) { JToolbarHelper::apply('override.apply'); JToolbarHelper::save('override.save'); } // This component does not support Save as Copy. if ($canDo->get('core.edit') && $canDo->get('core.create')) { JToolbarHelper::save2new('override.save2new'); } if (empty($this->item->key)) { JToolbarHelper::cancel('override.cancel'); } else { JToolbarHelper::cancel('override.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_EXTENSIONS_LANGUAGE_MANAGER_OVERRIDES_EDIT'); } } PKb��\`�f��9components/com_languages/views/installed/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Add specific helper files for html generation JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.tooltip'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_languages&view=installed'); ?>" method="post" id="adminForm" name="adminForm"> <?php if (!empty($this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if ($this->total > 0) : ?> <table class="table table-striped"> <thead> <tr> <th width="1%">   </th> <th width="15%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'name', $listDirn, $listOrder); ?> </th> <th width="15%" class="hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_TITLE_NATIVE', 'nativeName', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_LANG_TAG', 'language', $listDirn, $listOrder); ?> </th> <th class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_DEFAULT', 'published', $listDirn, $listOrder); ?> </th> <th class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_VERSION', 'version', $listDirn, $listOrder); ?> </th> <th class="hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_DATE', 'creationDate', $listDirn, $listOrder); ?> </th> <th class="hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_AUTHOR', 'author', $listDirn, $listOrder); ?> </th> <th class="hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_LANGUAGES_HEADING_AUTHOR_EMAIL', 'authorEmail', $listDirn, $listOrder); ?> </th> <th class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'extension_id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="10"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $version = new JVersion; $currentShortVersion = preg_replace('#^([0-9\.]+)(|.*)$#', '$1', $version->getShortVersion()); foreach ($this->rows as $i => $row) : $canCreate = $user->authorise('core.create', 'com_languages'); $canEdit = $user->authorise('core.edit', 'com_languages'); $canChange = $user->authorise('core.edit.state', 'com_languages'); ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php echo JHtml::_('languages.id', $i, $row->language); ?> </td> <td> <label for="cb<?php echo $i; ?>"> <?php echo $this->escape($row->name); ?> </label> </td> <td class="hidden-phone"> <?php echo $this->escape($row->nativeName); ?> </td> <td> <?php echo $this->escape($row->language); ?> </td> <td class="center"> <?php echo JHtml::_('jgrid.isdefault', $row->published, $i, 'installed.', !$row->published && $canChange); ?> </td> <td class="center small"> <?php $minorVersion = $version::MAJOR_VERSION . '.' . $version::MINOR_VERSION; ?> <?php // Display a Note if language pack version is not equal to Joomla version ?> <?php if (strpos($row->version, $minorVersion) !== 0 || strpos($row->version, $currentShortVersion) !== 0) : ?> <span class="label label-warning hasTooltip" title="<?php echo JText::_('JGLOBAL_LANGUAGE_VERSION_NOT_PLATFORM'); ?>"><?php echo $row->version; ?></span> <?php else : ?> <span class="label label-success"><?php echo $row->version; ?></span> <?php endif; ?> </td> <td class="hidden-phone"> <?php echo $this->escape($row->creationDate); ?> </td> <td class="hidden-phone"> <?php echo $this->escape($row->author); ?> </td> <td class="hidden-phone hidden-tablet"> <?php echo JStringPunycode::emailToUTF8($this->escape($row->authorEmail)); ?> </td> <td class="hidden-phone"> <?php echo $this->escape($row->extension_id); ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\8S ���6components/com_languages/views/installed/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Displays a list of the installed languages. * * @since 1.6 */ class LanguagesViewInstalled extends JViewLegacy { /** * @var object client object. * @deprecated 4.0 */ protected $client = null; /** * @var boolean|JException True, if FTP settings should be shown, or an exception. */ protected $ftp = null; /** * @var string option name. */ protected $option = null; /** * @var object pagination information. */ protected $pagination = null; /** * @var array languages information. */ protected $rows = null; /** * @var object user object */ protected $user = null; /** * Display the view. * * @param string $tpl The name of the template file to parse. * * @return void */ public function display($tpl = null) { $this->ftp = $this->get('Ftp'); $this->option = $this->get('Option'); $this->pagination = $this->get('Pagination'); $this->rows = $this->get('Data'); $this->total = $this->get('Total'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); LanguagesHelper::addSubmenu('installed'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_languages'); if ((int) $this->state->get('client_id') === 1) { JToolbarHelper::title(JText::_('COM_LANGUAGES_VIEW_INSTALLED_ADMIN_TITLE'), 'comments-2 langmanager'); } else { JToolbarHelper::title(JText::_('COM_LANGUAGES_VIEW_INSTALLED_SITE_TITLE'), 'comments-2 langmanager'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::makeDefault('installed.setDefault'); JToolbarHelper::divider(); } if ($canDo->get('core.admin')) { // Add install languages link to the lang installer component. $bar = JToolbar::getInstance('toolbar'); // Switch administrator language if ($this->state->get('client_id', 0) == 1) { JToolbarHelper::custom('installed.switchadminlanguage', 'refresh', 'refresh', 'COM_LANGUAGES_SWITCH_ADMIN', false); JToolbarHelper::divider(); } $bar->appendButton('Link', 'upload', 'COM_LANGUAGES_INSTALL', 'index.php?option=com_installer&view=languages'); JToolbarHelper::divider(); JToolbarHelper::preferences('com_languages'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_EXTENSIONS_LANGUAGE_MANAGER_INSTALLED'); $this->sidebar = JHtmlSidebar::render(); } } PKb��\ ��445components/com_languages/views/language/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('formbehavior.chosen', 'select'); JFactory::getDocument()->addScriptDeclaration( ' Joomla.submitbutton = function(task) { if (task == "language.cancel" || document.formvalidator.isValid(document.getElementById("language-form"))) { Joomla.submitform(task, document.getElementById("language-form")); } }; jQuery(document).ready(function() { jQuery("#jform_image").on("change", function() { var flag = this.value; if (flag) { jQuery("#flag img").attr("src", "' . JUri::root(true) . '" + "/media/mod_languages/images/" + flag + ".gif").attr("alt", flag); } else { jQuery("#flag img").removeAttr("src").removeAttr("alt"); } }); });' ); ?> <form action="<?php echo JRoute::_('index.php?option=com_languages&view=language&layout=edit&lang_id=' . (int) $this->item->lang_id); ?>" method="post" name="adminForm" id="language-form" class="form-validate form-horizontal"> <?php echo JLayoutHelper::render('joomla.edit.item_title', $this); ?> <fieldset> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'details')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'details', JText::_('JDETAILS')); ?> <?php echo $this->form->renderField('title'); ?> <?php echo $this->form->renderField('title_native'); ?> <?php echo $this->form->renderField('lang_code'); ?> <?php echo $this->form->renderField('sef'); ?> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('image'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('image'); ?> <span id="flag"> <?php echo JHtml::_('image', 'mod_languages/' . $this->form->getValue('image') . '.gif', $this->form->getValue('image'), null, true); ?> </span> </div> </div> <?php if ($this->canDo->get('core.edit.state')) : ?> <?php echo $this->form->renderField('published'); ?> <?php endif; ?> <?php echo $this->form->renderField('access'); ?> <?php echo $this->form->renderField('description'); ?> <?php echo $this->form->renderField('lang_id'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'metadata', JText::_('JGLOBAL_FIELDSET_METADATA_OPTIONS')); ?> <?php echo $this->form->renderFieldset('metadata'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'site_name', JText::_('COM_LANGUAGES_FIELDSET_SITE_NAME_LABEL')); ?> <?php echo $this->form->renderFieldset('site_name'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> </fieldset> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\gA�AA5components/com_languages/views/language/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Languages component. * * @since 1.5 */ class LanguagesViewLanguage extends JViewLegacy { public $item; public $form; public $state; /** * Display the view. * * @param string $tpl The name of the template file to parse. * * @return void */ public function display($tpl = null) { $this->item = $this->get('Item'); $this->form = $this->get('Form'); $this->state = $this->get('State'); $this->canDo = JHelperContent::getActions('com_languages'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JLoader::register('LanguagesHelper', JPATH_ADMINISTRATOR . '/components/com_languages/helpers/languages.php'); JFactory::getApplication()->input->set('hidemainmenu', 1); $isNew = empty($this->item->lang_id); $canDo = $this->canDo; JToolbarHelper::title( JText::_($isNew ? 'COM_LANGUAGES_VIEW_LANGUAGE_EDIT_NEW_TITLE' : 'COM_LANGUAGES_VIEW_LANGUAGE_EDIT_EDIT_TITLE'), 'comments-2 langmanager' ); if (($isNew && $canDo->get('core.create')) || (!$isNew && $canDo->get('core.edit'))) { JToolbarHelper::apply('language.apply'); JToolbarHelper::save('language.save'); } // If an existing item, can save to a copy only if we have create rights. if ($canDo->get('core.create')) { JToolbarHelper::save2new('language.save2new'); } if ($isNew) { JToolbarHelper::cancel('language.cancel'); } else { JToolbarHelper::cancel('language.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_EXTENSIONS_LANGUAGE_MANAGER_EDIT'); } } PKb��\/�����.components/com_languages/helpers/languages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Languages component helper. * * @since 1.6 */ class LanguagesHelper { /** * Configure the Linkbar. * * @param string $vName The name of the active view. * @param int $client The client id of the active view. Maybe be 0 or 1. * * @return void * * @deprecated 4.0 $client parameter is not needed anymore. */ public static function addSubmenu($vName, $client = 0) { JHtmlSidebar::addEntry( JText::_('COM_LANGUAGES_SUBMENU_INSTALLED'), 'index.php?option=com_languages&view=installed', $vName == 'installed' ); JHtmlSidebar::addEntry( JText::_('COM_LANGUAGES_SUBMENU_CONTENT'), 'index.php?option=com_languages&view=languages', $vName == 'languages' ); JHtmlSidebar::addEntry( JText::_('COM_LANGUAGES_SUBMENU_OVERRIDES'), 'index.php?option=com_languages&view=overrides', $vName == 'overrides' ); } /** * Gets a list of the actions that can be performed. * * @return JObject * * @deprecated 3.2 Use JHelperContent::getActions() instead. */ public static function getActions() { // Log usage of deprecated function. try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions. return JHelperContent::getActions('com_languages'); } /** * Method for parsing ini files. * * @param string $fileName Path and name of the ini file to parse. * * @return array Array of strings found in the file, the array indices will be the keys. On failure an empty array will be returned. * * @since 2.5 * @deprecated 3.9.0 Use JLanguageHelper::parseIniFile() instead. */ public static function parseFile($fileName) { return JLanguageHelper::parseIniFile($fileName); } /** * Filter method for language keys. * This method will be called by JForm while filtering the form data. * * @param string $value The language key to filter. * * @return string The filtered language key. * * @since 2.5 */ public static function filterKey($value) { $filter = JFilterInput::getInstance(null, null, 1, 1); return strtoupper($filter->clean($value, 'cmd')); } /** * Filter method for language strings. * This method will be called by JForm while filtering the form data. * * @param string $value The language string to filter. * * @return string The filtered language string. * * @since 2.5 */ public static function filterText($value) { $filter = JFilterInput::getInstance(null, null, 1, 1); return $filter->clean($value); } } PKb��\F�-3components/com_languages/helpers/html/languages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Utility class working with languages * * @since 1.6 */ abstract class JHtmlLanguages { /** * Method to generate an information about the default language. * * @param boolean $published True if the language is the default. * * @return string HTML code. */ public static function published($published) { if (!$published) { return ' '; } return JHtml::_('image', 'menu/icon-16-default.png', JText::_('COM_LANGUAGES_HEADING_DEFAULT'), null, true); } /** * Method to generate an input radio button. * * @param integer $rowNum The row number. * @param string $language Language tag. * * @return string HTML code. */ public static function id($rowNum, $language) { return '<input' . ' type="radio"' . ' id="cb' . $rowNum . '"' . ' name="cid"' . ' value="' . htmlspecialchars($language, ENT_COMPAT, 'UTF-8') . '"' . ' onclick="Joomla.isChecked(this.checked);"' . ' title="' . ($rowNum + 1) . '"' . '/>'; } /** * Method to generate an array of clients. * * @return array of client objects. */ public static function clients() { return array( JHtml::_('select.option', 0, JText::_('JSITE')), JHtml::_('select.option', 1, JText::_('JADMINISTRATOR')) ); } /** * Returns an array of published state filter options. * * @return string The HTML code for the select tag. * * @since 1.6 */ public static function publishedOptions() { // Build the active state filter options. $options = array(); $options[] = JHtml::_('select.option', '1', 'JPUBLISHED'); $options[] = JHtml::_('select.option', '0', 'JUNPUBLISHED'); $options[] = JHtml::_('select.option', '-2', 'JTRASHED'); $options[] = JHtml::_('select.option', '*', 'JALL'); return $options; } } PKb��\B�j� � 1components/com_languages/helpers/jsonresponse.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * JSON Response class. * * @since 2.5 * @deprecated 4.0 */ class JJsonResponse { /** * Determines whether the request was successful. * * @var boolean * @since 2.5 */ public $success = true; /** * Determines whether the request wasn't successful. * This is always the negation of $this->success, * so you can use both flags equivalently. * * @var boolean * @since 2.5 */ public $error = false; /** * The main response message. * * @var string * @since 2.5 */ public $message = null; /** * Array of messages gathered in the JApplication object. * * @var array * @since 2.5 */ public $messages = null; /** * The response data. * * @var mixed * @since 2.5 */ public $data = null; /** * Constructor * * @param mixed $response The Response data. * @param string $message The main response message. * @param boolean $error True, if the success flag shall be set to false, defaults to false. * * @since 2.5 * @deprecated 4.0 Use JResponseJson instead. */ public function __construct($response = null, $message = null, $error = false) { try { JLog::add(sprintf('%s is deprecated, use JResponseJson instead.', __CLASS__), JLog::WARNING, 'deprecated'); } catch (RuntimeException $exception) { // Informational log only } $this->message = $message; // Get the message queue. $messages = JFactory::getApplication()->getMessageQueue(); // Build the sorted messages list. if (is_array($messages) && count($messages)) { foreach ($messages as $message) { if (isset($message['type']) && isset($message['message'])) { $lists[$message['type']][] = $message['message']; } } } // If messages exist add them to the output. if (isset($lists) && is_array($lists)) { $this->messages = $lists; } // Check if we are dealing with an error. if ($response instanceof Exception) { // Prepare the error response. $this->success = false; $this->error = true; $this->message = $response->getMessage(); } else { // Prepare the response data. $this->success = !$error; $this->error = $error; $this->data = $response; } } /** * Magic toString method for sending the response in JSON format. * * @return string The response in JSON format. * * @since 2.5 */ public function __toString() { return json_encode($this); } } PKb��\8���4components/com_languages/helpers/multilangstatus.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; /** * Multilang status helper. * * @since 1.7.1 */ abstract class MultilangstatusHelper { /** * Method to get the number of published home pages. * * @return integer */ public static function getHomes() { // Check for multiple Home pages. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('COUNT(*)') ->from($db->quoteName('#__menu')) ->where('home = 1') ->where('published = 1') ->where('client_id = 0'); $db->setQuery($query); return $db->loadResult(); } /** * Method to get the number of published language switcher modules. * * @return integer */ public static function getLangswitchers() { // Check if switcher is published. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('COUNT(*)') ->from($db->quoteName('#__modules')) ->where('module = ' . $db->quote('mod_languages')) ->where('published = 1') ->where('client_id = 0'); $db->setQuery($query); return $db->loadResult(); } /** * Method to return a list of published content languages. * * @return array of language objects. */ public static function getContentlangs() { // Check for published Content Languages. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('a.lang_code AS lang_code') ->select('a.published AS published') ->from('#__languages AS a'); $db->setQuery($query); return $db->loadObjectList(); } /** * Method to return a list of published site languages. * * @return array of language extension objects. * * @deprecated 4.0 Use JLanguageHelper::getInstalledLanguages(0) instead. */ public static function getSitelangs() { try { JLog::add( sprintf('%s() is deprecated, use JLanguageHelper::getInstalledLanguages(0) instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } return JLanguageHelper::getInstalledLanguages(0); } /** * Method to return a list of language home page menu items. * * @return array of menu objects. * * @deprecated 4.0 Use JLanguageMultilang::getSiteHomePages() instead. */ public static function getHomepages() { try { JLog::add( sprintf('%s() is deprecated, use JLanguageHelper::getSiteHomePages() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } return JLanguageMultilang::getSiteHomePages(); } /** * Method to return combined language status. * * @return array of language objects. */ public static function getStatus() { // Check for combined status. $db = JFactory::getDbo(); $query = $db->getQuery(true); // Select all fields from the languages table. $query->select('a.*', 'l.home') ->select('a.published AS published') ->select('a.lang_code AS lang_code') ->from('#__languages AS a'); // Select the language home pages. $query->select('l.home AS home') ->select('l.language AS home_language') ->join('LEFT', '#__menu AS l ON l.language = a.lang_code AND l.home=1 AND l.published=1 AND l.language <> \'*\'') ->select('e.enabled AS enabled') ->select('e.element AS element') ->join('LEFT', '#__extensions AS e ON e.element = a.lang_code') ->where('e.client_id = 0') ->where('e.enabled = 1') ->where('e.state = 0'); $db->setQuery($query); return $db->loadObjectList(); } /** * Method to return a list of contact objects. * * @return array of contact objects. */ public static function getContacts() { $db = JFactory::getDbo(); $languages = count(JLanguageHelper::getLanguages()); // Get the number of contact with all as language $alang = $db->getQuery(true) ->select('count(*)') ->from('#__contact_details AS cd') ->where('cd.user_id=u.id') ->where('cd.published=1') ->where('cd.language=' . $db->quote('*')); // Get the number of languages for the contact $slang = $db->getQuery(true) ->select('count(distinct(l.lang_code))') ->from('#__languages as l') ->join('LEFT', '#__contact_details AS cd ON cd.language=l.lang_code') ->where('cd.user_id=u.id') ->where('cd.published=1') ->where('l.published=1'); // Get the number of multiple contact/language $mlang = $db->getQuery(true) ->select('count(*)') ->from('#__languages as l') ->join('LEFT', '#__contact_details AS cd ON cd.language=l.lang_code') ->where('cd.user_id=u.id') ->where('cd.published=1') ->where('l.published=1') ->group('l.lang_code') ->having('count(*) > 1'); // Get the contacts $query = $db->getQuery(true) ->select('u.name, (' . $alang . ') as alang, (' . $slang . ') as slang, (' . $mlang . ') as mlang') ->from('#__users AS u') ->join('LEFT', '#__contact_details AS cd ON cd.user_id=u.id') ->where('EXISTS (SELECT 1 from #__content as c where c.created_by=u.id)') ->group('u.id'); $db->setQuery($query); $warnings = $db->loadObjectList(); foreach ($warnings as $index => $warn) { if ($warn->alang == 1 && $warn->slang == 0) { unset($warnings[$index]); } if ($warn->alang == 0 && $warn->slang == 0 && empty($warn->mlang)) { unset($warnings[$index]); } if ($warn->alang == 0 && $warn->slang == $languages && empty($warn->mlang)) { unset($warnings[$index]); } } return $warnings; } /** * Method to get the status of the module displaying the menutype of the default Home page set to All languages. * * @return boolean True if the module is published, false otherwise. * * @since 3.7.0 */ public static function getDefaultHomeModule() { // Find Default Home menutype. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->qn('menutype')) ->from($db->qn('#__menu')) ->where($db->qn('home') . ' = ' . $db->q('1')) ->where($db->qn('published') . ' = ' . $db->q('1')) ->where($db->qn('client_id') . ' = ' . $db->q('0')) ->where($db->qn('language') . ' = ' . $db->q('*')); $db->setQuery($query); $menutype = $db->loadResult(); // Get published site menu modules titles. $query->clear() ->select($db->qn('title')) ->from($db->qn('#__modules')) ->where($db->qn('module') . ' = ' . $db->q('mod_menu')) ->where($db->qn('published') . ' = ' . $db->q('1')) ->where($db->qn('client_id') . ' = ' . $db->q('0')); $db->setQuery($query); $menutitles = $db->loadColumn(); // Do we have a published menu module displaying the default Home menu item set to all languages? foreach ($menutitles as $menutitle) { $module = self::getModule('mod_menu', $menutitle); $moduleParams = new JRegistry($module->params); $param = $moduleParams->get('menutype', ''); if ($param && $param != $menutype) { continue; } return true; } } /** * Get module by name * * @param string $moduleName The name of the module * @param string $instanceTitle The title of the module, optional * * @return stdClass The Module object * * @since 3.7.0 */ public static function getModule($moduleName, $instanceTitle = null) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('id, title, module, position, content, showtitle, params') ->from($db->qn('#__modules')) ->where($db->qn('module') . ' = ' . $db->q($moduleName)) ->where($db->qn('published') . ' = ' . $db->q('1')) ->where($db->qn('client_id') . ' = ' . $db->q('0')); if ($instanceTitle) { $query->where($db->qn('title') . ' = ' . $db->q($instanceTitle)); } $db->setQuery($query); try { $modules = $db->loadObject(); } catch (RuntimeException $e) { JLog::add(JText::sprintf('JLIB_APPLICATION_ERROR_MODULE_LOAD', $e->getMessage()), JLog::WARNING, 'jerror'); } return $modules; } } PKb��\���-components/com_languages/models/languages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Languages Model Class * * @since 1.6 */ class LanguagesModelLanguages extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'lang_id', 'a.lang_id', 'lang_code', 'a.lang_code', 'title', 'a.title', 'title_native', 'a.title_native', 'sef', 'a.sef', 'image', 'a.image', 'published', 'a.published', 'ordering', 'a.ordering', 'access', 'a.access', 'access_level', 'home', 'l.home', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.ordering', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.access', $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', '', 'cmd')); $this->setState('filter.published', $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', '', 'string')); // Load the parameters. $params = JComponentHelper::getParams('com_languages'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.access'); $id .= ':' . $this->getState('filter.published'); return parent::getStoreId($id); } /** * Method to build an SQL query to load the list data. * * @return string An SQL query * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select all fields from the languages table. $query->select($this->getState('list.select', 'a.*', 'l.home')) ->from($db->quoteName('#__languages') . ' AS a'); // Join over the asset groups. $query->select('ag.title AS access_level') ->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Select the language home pages. $query->select('l.home AS home') ->join('LEFT', $db->quoteName('#__menu') . ' AS l ON l.language = a.lang_code AND l.home=1 AND l.language <> ' . $db->quote('*')); // Filter on the published state. $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.published = ' . (int) $published); } elseif ($published === '') { $query->where('(a.published IN (0, 1))'); } // Filter by search in title. $search = $this->getState('filter.search'); if (!empty($search)) { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('(a.title LIKE ' . $search . ')'); } // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = ' . (int) $access); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.ordering')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Set the published language(s). * * @param array $cid An array of language IDs. * @param integer $value The value of the published state. * * @return boolean True on success, false otherwise. * * @since 1.6 */ public function setPublished($cid, $value = 0) { return JTable::getInstance('Language')->publish($cid, $value); } /** * Method to delete records. * * @param array $pks An array of item primary keys. * * @return boolean Returns true on success, false on failure. * * @since 1.6 */ public function delete($pks) { // Sanitize the array. $pks = (array) $pks; // Get a row instance. $table = JTable::getInstance('Language'); // Iterate the items to delete each one. foreach ($pks as $itemId) { if (!$table->delete((int) $itemId)) { $this->setError($table->getError()); return false; } } // Clean the cache. $this->cleanCache(); return true; } /** * Custom clean cache method, 2 places for 2 clients. * * @param string $group Optional cache group name. * @param integer $client_id Application client id. * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('_system'); parent::cleanCache('com_languages'); } } PKb��\99��)�)-components/com_languages/models/installed.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Languages Component Languages Model * * @since 1.6 */ class LanguagesModelInstalled extends JModelList { /** * @var object client object * @deprecated 4.0 */ protected $client = null; /** * @var object user object */ protected $user = null; /** * @var boolean|JExeption True, if FTP settings should be shown, or an exeption */ protected $ftp = null; /** * @var string option name */ protected $option = null; /** * @var array languages description */ protected $data = null; /** * @var int total number of languages */ protected $total = null; /** * @var int total number of languages installed * @deprecated 4.0 */ protected $langlist = null; /** * @var string language path */ protected $path = null; /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 3.5 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'name', 'nativeName', 'language', 'author', 'published', 'version', 'creationDate', 'author', 'authorEmail', 'extension_id', 'client_id', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'name', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); // Special case for client id. $clientId = (int) $this->getUserStateFromRequest($this->context . '.client_id', 'client_id', 0, 'int'); $clientId = (!in_array($clientId, array (0, 1))) ? 0 : $clientId; $this->setState('client_id', $clientId); // Load the parameters. $params = JComponentHelper::getParams('com_languages'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('client_id'); $id .= ':' . $this->getState('filter.search'); return parent::getStoreId($id); } /** * Method to get the client object. * * @return object * * @since 1.6 */ public function getClient() { return JApplicationHelper::getClientInfo($this->getState('client_id', 0)); } /** * Method to get the ftp credentials. * * @return object * * @since 1.6 */ public function getFtp() { if (is_null($this->ftp)) { $this->ftp = JClientHelper::setCredentialsFromRequest('ftp'); } return $this->ftp; } /** * Method to get the option. * * @return object * * @since 1.6 */ public function getOption() { $option = $this->getState('option'); return $option; } /** * Method to get Languages item data. * * @return array * * @since 1.6 */ public function getData() { // Fetch language data if not fetched yet. if (is_null($this->data)) { $this->data = array(); $isCurrentLanguageRtl = JFactory::getLanguage()->isRtl(); $params = JComponentHelper::getParams('com_languages'); $installedLanguages = JLanguageHelper::getInstalledLanguages(null, true, true, null, null, null); // Compute all the languages. foreach ($installedLanguages as $clientId => $languages) { $defaultLanguage = $params->get(JApplicationHelper::getClientInfo($clientId)->name, 'en-GB'); foreach ($languages as $lang) { $row = new stdClass; $row->language = $lang->element; $row->name = $lang->metadata['name']; $row->nativeName = isset($lang->metadata['nativeName']) ? $lang->metadata['nativeName'] : '-'; $row->client_id = (int) $lang->client_id; $row->extension_id = (int) $lang->extension_id; $row->author = $lang->manifest['author']; $row->creationDate = $lang->manifest['creationDate']; $row->authorEmail = $lang->manifest['authorEmail']; $row->version = $lang->manifest['version']; $row->published = $defaultLanguage === $row->language ? 1 : 0; $row->checked_out = 0; // Fix wrongly set parentheses in RTL languages if ($isCurrentLanguageRtl) { $row->name = html_entity_decode($row->name . '‎', ENT_QUOTES, 'UTF-8'); $row->nativeName = html_entity_decode($row->nativeName . '‎', ENT_QUOTES, 'UTF-8'); } $this->data[] = $row; } } } $installedLanguages = array_merge($this->data); // Process filters. $clientId = (int) $this->getState('client_id'); $search = $this->getState('filter.search'); foreach ($installedLanguages as $key => $installedLanguage) { // Filter by client id. if (in_array($clientId, array(0, 1))) { if ($installedLanguage->client_id !== $clientId) { unset($installedLanguages[$key]); continue; } } // Filter by search term. if (!empty($search)) { if (stripos($installedLanguage->name, $search) === false && stripos($installedLanguage->nativeName, $search) === false && stripos($installedLanguage->language, $search) === false) { unset($installedLanguages[$key]); continue; } } } // Process ordering. $listOrder = $this->getState('list.ordering', 'name'); $listDirn = $this->getState('list.direction', 'ASC'); $installedLanguages = ArrayHelper::sortObjects($installedLanguages, $listOrder, strtolower($listDirn) === 'desc' ? -1 : 1, true, true); // Process pagination. $limit = (int) $this->getState('list.limit', 25); // Sets the total for pagination. $this->total = count($installedLanguages); if ($limit !== 0) { $start = (int) $this->getState('list.start', 0); return array_slice($installedLanguages, $start, $limit); } return $installedLanguages; } /** * Method to get installed languages data. * * @return string An SQL query. * * @since 1.6 * * @deprecated 4.0 */ protected function getLanguageList() { // Create a new db object. $db = $this->getDbo(); $query = $db->getQuery(true); $client = $this->getState('client_id'); $type = 'language'; // Select field element from the extensions table. $query->select($this->getState('list.select', 'a.element')) ->from('#__extensions AS a'); $type = $db->quote($type); $query->where('(a.type = ' . $type . ')') ->where('state = 0') ->where('enabled = 1') ->where('client_id=' . (int) $client); // For client_id = 1 do we need to check language table also? $db->setQuery($query); $this->langlist = $db->loadColumn(); return $this->langlist; } /** * Method to get the total number of Languages items. * * @return integer * * @since 1.6 */ public function getTotal() { if (is_null($this->total)) { $this->getData(); } return $this->total; } /** * Method to set the default language. * * @param integer $cid Id of the language to publish. * * @return boolean * * @since 1.6 */ public function publish($cid) { if ($cid) { $client = $this->getClient(); $params = JComponentHelper::getParams('com_languages'); $params->set($client->name, $cid); $table = JTable::getInstance('extension'); $id = $table->find(array('element' => 'com_languages')); // Load. if (!$table->load($id)) { $this->setError($table->getError()); return false; } $table->params = (string) $params; // Pre-save checks. if (!$table->check()) { $this->setError($table->getError()); return false; } // Save the changes. if (!$table->store()) { $this->setError($table->getError()); return false; } } else { $this->setError(JText::_('COM_LANGUAGES_ERR_NO_LANGUAGE_SELECTED')); return false; } // Clean the cache of com_languages and component cache. $this->cleanCache(); $this->cleanCache('_system', 0); $this->cleanCache('_system', 1); return true; } /** * Method to get the folders. * * @return array Languages folders. * * @since 1.6 */ protected function getFolders() { if (is_null($this->folders)) { $path = $this->getPath(); jimport('joomla.filesystem.folder'); $this->folders = JFolder::folders($path, '.', false, false, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'pdf_fonts', 'overrides')); } return $this->folders; } /** * Method to get the path. * * @return string The path to the languages folders. * * @since 1.6 */ protected function getPath() { if (is_null($this->path)) { $client = $this->getClient(); $this->path = JLanguageHelper::getLanguagePath($client->path); } return $this->path; } /** * Method to compare two languages in order to sort them. * * @param object $lang1 The first language. * @param object $lang2 The second language. * * @return integer * * @since 1.6 * * @deprecated 4.0 */ protected function compareLanguages($lang1, $lang2) { return strcmp($lang1->name, $lang2->name); } /** * Method to switch the administrator language. * * @param string $cid The language tag. * * @return boolean * * @since 3.5 */ public function switchAdminLanguage($cid) { if ($cid) { $client = $this->getClient(); if ($client->name == 'administrator') { JFactory::getApplication()->setUserState('application.lang', $cid); } } else { JError::raiseWarning(500, JText::_('COM_LANGUAGES_ERR_NO_LANGUAGE_SELECTED')); return false; } return true; } } PKb��\^�����2components/com_languages/models/forms/override.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="key" type="text" label="COM_LANGUAGES_OVERRIDE_FIELD_KEY_LABEL" description="COM_LANGUAGES_OVERRIDE_FIELD_KEY_DESC" size="60" required="true" filter="LanguagesHelper::filterKey" /> <field name="override" type="textarea" label="COM_LANGUAGES_OVERRIDE_FIELD_OVERRIDE_LABEL" description="COM_LANGUAGES_OVERRIDE_FIELD_OVERRIDE_DESC" cols="50" rows="5" filter="LanguagesHelper::filterText" /> <field name="both" type="checkbox" label="COM_LANGUAGES_OVERRIDE_FIELD_BOTH_LABEL" description="COM_LANGUAGES_OVERRIDE_FIELD_BOTH_DESC" value="true" filter="boolean" /> <field name="searchstring" type="text" label="COM_LANGUAGES_OVERRIDE_FIELD_SEARCHSTRING_LABEL" description="COM_LANGUAGES_OVERRIDE_FIELD_SEARCHSTRING_DESC" size="50" /> <field name="searchtype" type="list" label="COM_LANGUAGES_OVERRIDE_FIELD_SEARCHTYPE_LABEL" description="COM_LANGUAGES_OVERRIDE_FIELD_SEARCHTYPE_DESC" default="value" > <option value="constant">COM_LANGUAGES_OVERRIDE_FIELD_SEARCHTYPE_CONSTANT</option> <option value="value">COM_LANGUAGES_OVERRIDE_FIELD_SEARCHTYPE_TEXT</option> </field> <field name="language" type="text" label="COM_LANGUAGES_OVERRIDE_FIELD_LANGUAGE_LABEL" description="COM_LANGUAGES_OVERRIDE_FIELD_LANGUAGE_DESC" filter="unset" readonly="true" class="readonly" size="50" /> <field name="client" type="text" label="COM_LANGUAGES_OVERRIDE_FIELD_CLIENT_LABEL" description="COM_LANGUAGES_OVERRIDE_FIELD_CLIENT_DESC" filter="unset" readonly="true" class="readonly" size="50" /> <field name="file" type="text" label="COM_LANGUAGES_OVERRIDE_FIELD_FILE_LABEL" description="COM_LANGUAGES_OVERRIDE_FIELD_FILE_DESC" filter="unset" readonly="true" class="readonly" size="80" /> <field name="id" type="hidden" /> </fieldset> </form> PKb��\Ϫ��3 3 2components/com_languages/models/forms/language.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="lang_id" type="text" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" class="readonly" default="0" readonly="true" /> <field name="lang_code" type="text" label="COM_LANGUAGES_FIELD_LANG_TAG_LABEL" description="COM_LANGUAGES_FIELD_LANG_TAG_DESC" maxlength="7" required="true" size="10" /> <field name="title" type="text" label="JGLOBAL_TITLE" description="COM_LANGUAGES_FIELD_TITLE_DESC" maxlength="50" required="true" size="40" /> <field name="title_native" type="text" label="COM_LANGUAGES_FIELD_TITLE_NATIVE_LABEL" description="COM_LANGUAGES_FIELD_TITLE_NATIVE_DESC" maxlength="50" required="true" size="40" /> <field name="sef" type="text" label="COM_LANGUAGES_FIELD_LANG_CODE_LABEL" description="COM_LANGUAGES_FIELD_LANG_CODE_DESC" maxlength="50" required="true" size="10" /> <field name="image" type="filelist" label="COM_LANGUAGES_FIELD_IMAGE_LABEL" description="COM_LANGUAGES_FIELD_IMAGE_DESC" stripext="1" directory="media/mod_languages/images/" hide_none="1" hide_default="1" filter="\.gif$" size="10" > <option value="">JNONE</option> </field> <field name="description" type="textarea" label="JGLOBAL_DESCRIPTION" description="COM_LANGUAGES_FIELD_DESCRIPTION_DESC" cols="80" rows="5" /> <field name="published" type="list" label="JSTATUS" description="COM_LANGUAGES_FIELD_PUBLISHED_DESC" default="1" size="1" > <option value="1">JPUBLISHED</option> <option value="0">JUNPUBLISHED</option> <option value="-2">JTRASHED</option> </field> <field name="access" type="accesslevel" label="JFIELD_ACCESS_LABEL" description="JFIELD_ACCESS_DESC" size="1" /> </fieldset> <fieldset name="metadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS"> <field name="metakey" type="textarea" label="JFIELD_META_KEYWORDS_LABEL" description="JFIELD_META_KEYWORDS_DESC" rows="3" cols="30" /> <field name="metadesc" type="textarea" label="JFIELD_META_DESCRIPTION_LABEL" description="JFIELD_META_DESCRIPTION_DESC" rows="3" cols="30" /> </fieldset> <fieldset name="site_name" label="COM_LANGUAGES_FIELDSET_SITE_NAME_LABEL"> <field name="sitename" type="text" label="COM_LANGUAGES_FIELD_SITE_NAME_LABEL" description="COM_LANGUAGES_FIELD_SITE_NAME_DESC" filter="string" size="50" /> </fieldset> </form> PKb��\AD���-components/com_languages/models/overrides.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Languages Overrides Model * * @since 2.5 */ class LanguagesModelOverrides extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @since 2.5 */ public function __construct($config = array()) { parent::__construct($config); $this->filter_fields = array('key', 'text'); } /** * Retrieves the overrides data * * @param boolean $all True if all overrides shall be returned without considering pagination, defaults to false * * @return array Array of objects containing the overrides of the override.ini file * * @since 2.5 */ public function getOverrides($all = false) { // Get a storage key. $store = $this->getStoreId(); // Try to load the data from internal storage. if (!empty($this->cache[$store])) { return $this->cache[$store]; } $client = strtoupper($this->getState('filter.client')); // Parse the override.ini file in order to get the keys and strings. $fileName = constant('JPATH_' . $client) . '/language/overrides/' . $this->getState('filter.language') . '.override.ini'; $strings = JLanguageHelper::parseIniFile($fileName); // Delete the override.ini file if empty. if (file_exists($fileName) && $strings === array()) { JFile::delete($fileName); } // Filter the loaded strings according to the search box. $search = $this->getState('filter.search'); if ($search != '') { $search = preg_quote($search, '~'); $matchvals = preg_grep('~' . $search . '~i', $strings); $matchkeys = array_intersect_key($strings, array_flip(preg_grep('~' . $search . '~i', array_keys($strings)))); $strings = array_merge($matchvals, $matchkeys); } // Consider the ordering if ($this->getState('list.ordering') == 'text') { if (strtoupper($this->getState('list.direction')) == 'DESC') { arsort($strings); } else { asort($strings); } } else { if (strtoupper($this->getState('list.direction')) == 'DESC') { krsort($strings); } else { ksort($strings); } } // Consider the pagination. if (!$all && $this->getState('list.limit') && $this->getTotal() > $this->getState('list.limit')) { $strings = array_slice($strings, $this->getStart(), $this->getState('list.limit'), true); } // Add the items to the internal cache. $this->cache[$store] = $strings; return $this->cache[$store]; } /** * Method to get the total number of overrides. * * @return integer The total number of overrides. * * @since 2.5 */ public function getTotal() { // Get a storage key. $store = $this->getStoreId('getTotal'); // Try to load the data from internal storage if (!empty($this->cache[$store])) { return $this->cache[$store]; } // Add the total to the internal cache. $this->cache[$store] = count($this->getOverrides(true)); return $this->cache[$store]; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 2.5 */ protected function populateState($ordering = 'key', $direction = 'asc') { // We call populate state first so that we can then set the filter.client and filter.language properties in afterwards parent::populateState($ordering, $direction); $app = JFactory::getApplication(); $language_client = $this->getUserStateFromRequest('com_languages.overrides.language_client', 'language_client', '', 'cmd'); $client = substr($language_client, -1); $language = substr($language_client, 0, -1); // Sets the search filter. $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); $this->setState('filter.search', $search); $this->setState('language_client', $language . $client); $this->setState('filter.client', $client ? 'administrator' : 'site'); $this->setState('filter.language', $language); // Add the 'language_client' value to the session to display a message if none selected $app->setUserState('com_languages.overrides.language_client', $language . $client); // Add filters to the session because they won't be stored there by 'getUserStateFromRequest' if they aren't in the current request. $app->setUserState('com_languages.overrides.filter.client', $client); $app->setUserState('com_languages.overrides.filter.language', $language); } /** * Method to delete one or more overrides. * * @param array $cids Array of keys to delete. * * @return integer Number of successfully deleted overrides, boolean false if an error occurred. * * @since 2.5 */ public function delete($cids) { // Check permissions first. if (!JFactory::getUser()->authorise('core.delete', 'com_languages')) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED')); return false; } jimport('joomla.filesystem.file'); $filterclient = JFactory::getApplication()->getUserState('com_languages.overrides.filter.client'); $client = $filterclient == 0 ? 'SITE' : 'ADMINISTRATOR'; // Parse the override.ini file in oder to get the keys and strings. $fileName = constant('JPATH_' . $client) . '/language/overrides/' . $this->getState('filter.language') . '.override.ini'; $strings = JLanguageHelper::parseIniFile($fileName); // Unset strings that shall be deleted foreach ($cids as $key) { if (isset($strings[$key])) { unset($strings[$key]); } } // Write override.ini file with the strings. if (JLanguageHelper::saveToIniFile($fileName, $strings) === false) { return false; } $this->cleanCache(); return count($cids); } /** * Removes all of the cached strings from the table. * * @return boolean result of operation * * @since 3.4.2 */ public function purge() { $db = JFactory::getDbo(); // Note: TRUNCATE is a DDL operation // This may or may not mean depending on your database try { $db->truncateTable('#__overrider'); } catch (RuntimeException $e) { return $e; } JFactory::getApplication()->enqueueMessage(JText::_('COM_LANGUAGES_VIEW_OVERRIDES_PURGE_SUCCESS')); } } PKb��\zM����,components/com_languages/models/language.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Languages Component Language Model * * @since 1.5 */ class LanguagesModelLanguage extends JModelAdmin { /** * Constructor. * * @param array $config An optional associative array of configuration settings. */ public function __construct($config = array()) { $config = array_merge( array( 'event_after_save' => 'onExtensionAfterSave', 'event_before_save' => 'onExtensionBeforeSave', 'events_map' => array( 'save' => 'extension' ) ), $config ); parent::__construct($config); } /** * Override to get the table. * * @param string $name Name of the table. * @param string $prefix Table name prefix. * @param array $options Array of options. * * @return JTable * * @since 1.6 */ public function getTable($name = '', $prefix = '', $options = array()) { return JTable::getInstance('Language'); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { $app = JFactory::getApplication('administrator'); $params = JComponentHelper::getParams('com_languages'); // Load the User state. $langId = $app->input->getInt('lang_id'); $this->setState('language.id', $langId); // Load the parameters. $this->setState('params', $params); } /** * Method to get a member item. * * @param integer $langId The id of the member to get. * * @return mixed User data object on success, false on failure. * * @since 1.0 */ public function getItem($langId = null) { $langId = (!empty($langId)) ? $langId : (int) $this->getState('language.id'); // Get a member row instance. $table = $this->getTable(); // Attempt to load the row. $return = $table->load($langId); // Check for a table object error. if ($return === false && $table->getError()) { $this->setError($table->getError()); return false; } // Set a valid accesslevel in case '0' is stored due to a bug in the installation SQL (was fixed with PR 2714). if ($table->access == '0') { $table->access = (int) JFactory::getConfig()->get('access'); } $properties = $table->getProperties(1); $value = ArrayHelper::toObject($properties, 'JObject'); return $value; } /** * Method to get the group form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure. * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_languages.language', 'language', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_languages.edit.language.data', array()); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_languages.language', $data); return $data; } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { $langId = (!empty($data['lang_id'])) ? $data['lang_id'] : (int) $this->getState('language.id'); $isNew = true; $dispatcher = JEventDispatcher::getInstance(); JPluginHelper::importPlugin($this->events_map['save']); $table = $this->getTable(); $context = $this->option . '.' . $this->name; // Load the row if saving an existing item. if ($langId > 0) { $table->load($langId); $isNew = false; } // Prevent white spaces, including East Asian double bytes. $spaces = array('/\xE3\x80\x80/', ' '); $data['lang_code'] = str_replace($spaces, '', $data['lang_code']); // Prevent saving an incorrect language tag if (!preg_match('#\b([a-z]{2,3})[-]([A-Z]{2})\b#', $data['lang_code'])) { $this->setError(JText::_('COM_LANGUAGES_ERROR_LANG_TAG')); return false; } $data['sef'] = str_replace($spaces, '', $data['sef']); $data['sef'] = JApplicationHelper::stringURLSafe($data['sef']); // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the before save event. $result = $dispatcher->trigger($this->event_before_save, array($context, &$table, $isNew)); // Check the event responses. if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } // Trigger the after save event. $dispatcher->trigger($this->event_after_save, array($context, &$table, $isNew)); $this->setState('language.id', $table->lang_id); // Clean the cache. $this->cleanCache(); return true; } /** * Custom clean cache method. * * @param string $group Optional cache group name. * @param integer $client_id Application client id. * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('_system'); parent::cleanCache('com_languages'); } } PKb��\��999,components/com_languages/models/override.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Languages Override Model * * @since 2.5 */ class LanguagesModelOverride extends JModelAdmin { /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure. * * @since 2.5 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_languages.override', 'override', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } $client = $this->getState('filter.client', 'site'); $language = $this->getState('filter.language', 'en-GB'); $langName = JLanguage::getInstance($language)->getName(); if (!$langName) { // If a language only exists in frontend, its metadata cannot be // loaded in backend at the moment, so fall back to the language tag. $langName = $language; } $form->setValue('client', null, JText::_('COM_LANGUAGES_VIEW_OVERRIDE_CLIENT_' . strtoupper($client))); $form->setValue('language', null, JText::sprintf('COM_LANGUAGES_VIEW_OVERRIDE_LANGUAGE', $langName, $language)); $form->setValue('file', null, JPath::clean(constant('JPATH_' . strtoupper($client)) . '/language/overrides/' . $language . '.override.ini')); return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 2.5 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_languages.edit.override.data', array()); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_languages.override', $data); return $data; } /** * Method to get a single record. * * @param string $pk The key name. * * @return mixed Object on success, false otherwise. * * @since 2.5 */ public function getItem($pk = null) { $input = JFactory::getApplication()->input; $pk = !empty($pk) ? $pk : $input->get('id'); $fileName = constant('JPATH_' . strtoupper($this->getState('filter.client'))) . '/language/overrides/' . $this->getState('filter.language', 'en-GB') . '.override.ini'; $strings = JLanguageHelper::parseIniFile($fileName); $result = new stdClass; $result->key = ''; $result->override = ''; if (isset($strings[$pk])) { $result->key = $pk; $result->override = $strings[$pk]; } $oppositeFileName = constant('JPATH_' . strtoupper($this->getState('filter.client') == 'site' ? 'administrator' : 'site')) . '/language/overrides/' . $this->getState('filter.language', 'en-GB') . '.override.ini'; $oppositeStrings = JLanguageHelper::parseIniFile($oppositeFileName); $result->both = isset($oppositeStrings[$pk]) && ($oppositeStrings[$pk] == $strings[$pk]); return $result; } /** * Method to save the form data. * * @param array $data The form data. * @param boolean $opposite_client Indicates whether the override should not be created for the current client. * * @return boolean True on success, false otherwise. * * @since 2.5 */ public function save($data, $opposite_client = false) { jimport('joomla.filesystem.file'); $app = JFactory::getApplication(); $client = $app->getUserState('com_languages.overrides.filter.client', 0); $language = $app->getUserState('com_languages.overrides.filter.language', 'en-GB'); // If the override should be created for both. if ($opposite_client) { $client = 1 - $client; } // Return false if the constant is a reserved word, i.e. YES, NO, NULL, FALSE, ON, OFF, NONE, TRUE $blacklist = array('YES', 'NO', 'NULL', 'FALSE', 'ON', 'OFF', 'NONE', 'TRUE'); if (in_array($data['key'], $blacklist)) { $this->setError(JText::_('COM_LANGUAGES_OVERRIDE_ERROR_RESERVED_WORDS')); return false; } $client = $client ? 'administrator' : 'site'; // Parse the override.ini file in oder to get the keys and strings. $fileName = constant('JPATH_' . strtoupper($client)) . '/language/overrides/' . $language . '.override.ini'; $strings = JLanguageHelper::parseIniFile($fileName); if (isset($strings[$data['id']])) { // If an existent string was edited check whether // the name of the constant is still the same. if ($data['key'] == $data['id']) { // If yes, simply override it. $strings[$data['key']] = $data['override']; } else { // If no, delete the old string and prepend the new one. unset($strings[$data['id']]); $strings = array($data['key'] => $data['override']) + $strings; } } else { // If it is a new override simply prepend it. $strings = array($data['key'] => $data['override']) + $strings; } // Write override.ini file with the strings. if (JLanguageHelper::saveToIniFile($fileName, $strings) === false) { return false; } // If the override should be stored for both clients save // it also for the other one and prevent endless recursion. if (isset($data['both']) && $data['both'] && !$opposite_client) { return $this->save($data, true); } return true; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 2.5 */ protected function populateState() { $app = JFactory::getApplication(); $client = $app->getUserStateFromRequest('com_languages.overrides.filter.client', 'filter_client', 0, 'int') ? 'administrator' : 'site'; $this->setState('filter.client', $client); $language = $app->getUserStateFromRequest('com_languages.overrides.filter.language', 'filter_language', 'en-GB', 'cmd'); $this->setState('filter.language', $language); } } PKb��\-ff+components/com_languages/models/strings.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Languages Strings Model * * @since 2.5 */ class LanguagesModelStrings extends JModelLegacy { /** * Method for refreshing the cache in the database with the known language strings. * * @return boolean True on success, Exception object otherwise. * * @since 2.5 */ public function refresh() { JLoader::register('LanguagesHelper', JPATH_ADMINISTRATOR . '/components/com_languages/helpers/languages.php'); $app = JFactory::getApplication(); $app->setUserState('com_languages.overrides.cachedtime', null); // Empty the database cache first. try { $this->_db->setQuery('TRUNCATE TABLE ' . $this->_db->quoteName('#__overrider')); $this->_db->execute(); } catch (RuntimeException $e) { return $e; } // Create the insert query. $query = $this->_db->getQuery(true) ->insert($this->_db->quoteName('#__overrider')) ->columns('constant, string, file'); // Initialize some variables. $client = $app->getUserState('com_languages.overrides.filter.client', 'site') ? 'administrator' : 'site'; $language = $app->getUserState('com_languages.overrides.filter.language', 'en-GB'); $base = constant('JPATH_' . strtoupper($client)); $path = $base . '/language/' . $language; $files = array(); // Parse common language directory. jimport('joomla.filesystem.folder'); if (is_dir($path)) { $files = JFolder::files($path, $language . '.*ini$', false, true); } // Parse language directories of components. $files = array_merge($files, JFolder::files($base . '/components', $language . '.*ini$', 3, true)); // Parse language directories of modules. $files = array_merge($files, JFolder::files($base . '/modules', $language . '.*ini$', 3, true)); // Parse language directories of templates. $files = array_merge($files, JFolder::files($base . '/templates', $language . '.*ini$', 3, true)); // Parse language directories of plugins. $files = array_merge($files, JFolder::files(JPATH_PLUGINS, $language . '.*ini$', 4, true)); // Parse all found ini files and add the strings to the database cache. foreach ($files as $file) { $strings = LanguagesHelper::parseFile($file); if ($strings && count($strings)) { $query->clear('values'); foreach ($strings as $key => $string) { $query->values($this->_db->quote($key) . ',' . $this->_db->quote($string) . ',' . $this->_db->quote(JPath::clean($file))); } try { $this->_db->setQuery($query); $this->_db->execute(); } catch (RuntimeException $e) { return $e; } } } // Update the cached time. $app->setUserState('com_languages.overrides.cachedtime.' . $client . '.' . $language, time()); return true; } /** * Method for searching language strings. * * @return array Array of resuls on success, Exception object otherwise. * * @since 2.5 */ public function search() { $results = array(); $input = JFactory::getApplication()->input; $filter = JFilterInput::getInstance(); $searchTerm = $input->getString('searchstring'); $limitstart = $input->getInt('more'); try { $searchstring = $this->_db->quote('%' . $filter->clean($searchTerm, 'TRIM') . '%'); // Create the search query. $query = $this->_db->getQuery(true) ->select('constant, string, file') ->from($this->_db->quoteName('#__overrider')); if ($input->get('searchtype') == 'constant') { $query->where('constant LIKE ' . $searchstring); } else { $query->where('string LIKE ' . $searchstring); } // Consider the limitstart according to the 'more' parameter and load the results. $this->_db->setQuery($query, $limitstart, 10); $results['results'] = $this->_db->loadObjectList(); // Check whether there are more results than already loaded. $query->clear('select')->clear('limit') ->select('COUNT(id)'); $this->_db->setQuery($query); if ($this->_db->loadResult() > $limitstart + 10) { // If this is set a 'More Results' link will be displayed in the view. $results['more'] = $limitstart + 10; } } catch (RuntimeException $e) { return $e; } return $results; } } PKb��\��qq'components/com_languages/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_languages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Languages Controller. * * @since 1.5 */ class LanguagesController extends JControllerLegacy { /** * @var string The default view. * @since 1.6 */ protected $default_view = 'installed'; /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached. * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return LanguagesController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { JLoader::register('LanguagesHelper', JPATH_ADMINISTRATOR . '/components/com_languages/helpers/languages.php'); $view = $this->input->get('view', 'languages'); $layout = $this->input->get('layout', 'default'); $id = $this->input->getInt('id'); // Check for edit form. if ($view == 'language' && $layout == 'edit' && !$this->checkEditId('com_languages.edit.language', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_languages&view=languages', false)); return false; } return parent::display(); } } PKb��\��$$&components/com_languages/languages.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_languages</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_LANGUAGES_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>config.xml</filename> <filename>controller.php</filename> <filename>languages.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>tables</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_languages.ini</language> <language tag="en-GB">language/en-GB.com_languages.sys.ini</language> </languages> </administration> </extension> PKb��\>�7##-components/com_categories/tables/category.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Category table * * @since 1.6 */ class CategoriesTableCategory extends JTableCategory { /** * Method to delete a node and, optionally, its child nodes from the table. * * @param integer $pk The primary key of the node to delete. * @param boolean $children True to delete child nodes, false to move them up a level. * * @return boolean True on success. * * @since 2.5 */ public function delete($pk = null, $children = false) { return parent::delete($pk, $children); } } PKb��\И�xx2components/com_categories/controllers/category.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; /** * The Category Controller * * @since 1.6 */ class CategoriesControllerCategory extends JControllerForm { /** * The extension for which the categories apply. * * @var string * @since 1.6 */ protected $extension; /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @since 1.6 * @see JControllerLegacy */ public function __construct($config = array()) { parent::__construct($config); // Guess the JText message prefix. Defaults to the option. if (empty($this->extension)) { $this->extension = $this->input->get('extension', 'com_content'); } } /** * Method to check if you can add a new record. * * @param array $data An array of input data. * * @return boolean * * @since 1.6 */ protected function allowAdd($data = array()) { $user = JFactory::getUser(); return ($user->authorise('core.create', $this->extension) || count($user->getAuthorisedCategories($this->extension, 'core.create'))); } /** * Method to check if you can edit a record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowEdit($data = array(), $key = 'parent_id') { $recordId = (int) isset($data[$key]) ? $data[$key] : 0; $user = JFactory::getUser(); // Check "edit" permission on record asset (explicit or inherited) if ($user->authorise('core.edit', $this->extension . '.category.' . $recordId)) { return true; } // Check "edit own" permission on record asset (explicit or inherited) if ($user->authorise('core.edit.own', $this->extension . '.category.' . $recordId)) { // Need to do a lookup from the model to get the owner $record = $this->getModel()->getItem($recordId); if (empty($record)) { return false; } $ownerId = $record->created_user_id; // If the owner matches 'me' then do the test. if ($ownerId == $user->id) { return true; } } return false; } /** * Method to run batch operations. * * @param object $model The model. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 1.6 */ public function batch($model = null) { $this->checkToken(); // Set the model /** @var CategoriesModelCategory $model */ $model = $this->getModel('Category'); // Preset the redirect $this->setRedirect('index.php?option=com_categories&view=categories&extension=' . $this->extension); return parent::batch($model); } /** * Gets the URL arguments to append to an item redirect. * * @param integer $recordId The primary key id for the item. * @param string $urlVar The name of the URL variable for the id. * * @return string The arguments to append to the redirect URL. * * @since 1.6 */ protected function getRedirectToItemAppend($recordId = null, $urlVar = 'id') { $append = parent::getRedirectToItemAppend($recordId); $append .= '&extension=' . $this->extension; return $append; } /** * Gets the URL arguments to append to a list redirect. * * @return string The arguments to append to the redirect URL. * * @since 1.6 */ protected function getRedirectToListAppend() { $append = parent::getRedirectToListAppend(); $append .= '&extension=' . $this->extension; return $append; } /** * Function that allows child controller access to model data after the data has been saved. * * @param JModelLegacy $model The data model object. * @param array $validData The validated data. * * @return void * * @since 3.1 */ protected function postSaveHook(JModelLegacy $model, $validData = array()) { $item = $model->getItem(); if (isset($item->params) && is_array($item->params)) { $registry = new Registry($item->params); $item->params = (string) $registry; } if (isset($item->metadata) && is_array($item->metadata)) { $registry = new Registry($item->metadata); $item->metadata = (string) $registry; } } } PKb��\�+�W��4components/com_categories/controllers/categories.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * The Categories List Controller * * @since 1.6 */ class CategoriesControllerCategories extends JControllerAdmin { /** * Proxy for getModel * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config The array of possible config values. Optional. * * @return JModelLegacy The model. * * @since 1.6 */ public function getModel($name = 'Category', $prefix = 'CategoriesModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } /** * Rebuild the nested set tree. * * @return boolean False on failure or error, true on success. * * @since 1.6 */ public function rebuild() { $this->checkToken(); $extension = $this->input->get('extension'); $this->setRedirect(JRoute::_('index.php?option=com_categories&view=categories&extension=' . $extension, false)); /** @var CategoriesModelCategory $model */ $model = $this->getModel(); if ($model->rebuild()) { // Rebuild succeeded. $this->setMessage(JText::_('COM_CATEGORIES_REBUILD_SUCCESS')); return true; } // Rebuild failed. $this->setMessage(JText::_('COM_CATEGORIES_REBUILD_FAILURE')); return false; } /** * Save the manual order inputs from the categories list page. * * @return boolean True on success * * @since 1.6 * @see JControllerAdmin::saveorder() * @deprecated 4.0 */ public function saveorder() { $this->checkToken(); try { JLog::add(sprintf('%s() is deprecated. Function will be removed in 4.0.', __METHOD__), JLog::WARNING, 'deprecated'); } catch (RuntimeException $exception) { // Informational log only } // Get the arrays from the Request $order = $this->input->post->get('order', null, 'array'); $originalOrder = explode(',', $this->input->getString('original_order_values')); // Make sure something has changed if (!($order === $originalOrder)) { parent::saveorder(); } else { // Nothing to reorder $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list, false)); return true; } } /** * Deletes and returns correctly. * * @return void * * @since 3.1.2 */ public function delete() { $this->checkToken(); // Get items to remove from the request. $cid = $this->input->get('cid', array(), 'array'); $extension = $this->input->getCmd('extension', null); if (!is_array($cid) || count($cid) < 1) { JError::raiseWarning(500, JText::_($this->text_prefix . '_NO_ITEM_SELECTED')); } else { // Get the model. /** @var CategoriesModelCategory $model */ $model = $this->getModel(); // Make sure the item ids are integers $cid = ArrayHelper::toInteger($cid); // Remove the items. if ($model->delete($cid)) { $this->setMessage(JText::plural($this->text_prefix . '_N_ITEMS_DELETED', count($cid))); } else { $this->setMessage($model->getError()); } } $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&extension=' . $extension, false)); } /** * Check in of one or more records. * * Overrides JControllerAdmin::checkin to redirect to URL with extension. * * @return boolean True on success * * @since 3.6.0 */ public function checkin() { // Process parent checkin method. $result = parent::checkin(); // Override the redirect Uri. $redirectUri = 'index.php?option=' . $this->option . '&view=' . $this->view_list . '&extension=' . $this->input->get('extension', '', 'CMD'); $this->setRedirect(JRoute::_($redirectUri, false), $this->message, $this->messageType); return $result; } } PKb��\ً�(components/com_categories/categories.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_categories</name> <author>Joomla! Project</author> <creationDate>December 2007</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_CATEGORIES_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>categories.php</filename> <filename>config.xml</filename> <filename>controller.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_categories.ini</language> <language tag="en-GB">language/en-GB.com_categories.sys.ini</language> </languages> </administration> </extension> PKb��\� �*��(components/com_categories/categories.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); $input = JFactory::getApplication()->input; // If you have a URL like this: com_categories&view=categories&extension=com_example.example_cat $parts = explode('.', $input->get('extension')); $component = $parts[0]; if (!JFactory::getUser()->authorise('core.manage', $component)) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } JLoader::register('JHtmlCategoriesAdministrator', JPATH_ADMINISTRATOR . '/components/com_categories/helpers/html/categoriesadministrator.php'); $controller = JControllerLegacy::getInstance('Categories'); $controller->execute($input->get('task')); $controller->redirect(); PKb��\C�\� Fcomponents/com_categories/views/categories/tmpl/default_batch_body.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $options = array( JHtml::_('select.option', 'c', JText::_('JLIB_HTML_BATCH_COPY')), JHtml::_('select.option', 'm', JText::_('JLIB_HTML_BATCH_MOVE')) ); $published = $this->state->get('filter.published'); $extension = $this->escape($this->state->get('filter.extension')); ?> <div class="container-fluid"> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div class="span6"> <div class="control-group"> <label id="batch-choose-action-lbl" for="batch-category-id" class="control-label"> <?php echo JText::_('JLIB_HTML_BATCH_MENU_LABEL'); ?> </label> <div id="batch-choose-action" class="combo controls"> <select name="batch[category_id]" id="batch-category-id"> <option value=""><?php echo JText::_('JLIB_HTML_BATCH_NO_CATEGORY') ?></option> <?php echo JHtml::_('select.options', JHtml::_('category.categories', $extension, array('filter.published' => $published))); ?> </select> </div> </div> <div id="batch-copy-move" class="control-group radio"> <?php echo JText::_('JLIB_HTML_BATCH_MOVE_QUESTION'); ?> <?php echo JHtml::_('select.radiolist', $options, 'batch[move_copy]', '', 'value', 'text', 'm'); ?> </div> </div> <?php endif; ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.tag'); ?> </div> </div> </div> <div class="row-fluid"> <div class="span6"> <div class="control-group"> <label id="flip-ordering-id-lbl" for="flip-ordering-id" class="control-label"> <?php echo JText::_('JLIB_HTML_BATCH_FLIPORDERING_LABEL'); ?> </label> <?php echo JHtml::_('select.booleanlist', 'batch[flip_ordering]', array(), 0, 'JYES', 'JNO', 'flip-ordering-id'); ?> </div> </div> </div> </div> PKb��\*-J���Hcomponents/com_categories/views/categories/tmpl/default_batch_footer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <button type="button" class="btn" onclick="document.getElementById('batch-category-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button type="submit" class="btn btn-success" onclick="Joomla.submitbutton('category.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> PKb��\��Fk��9components/com_categories/views/categories/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $app = JFactory::getApplication(); if ($app->isClient('site')) { JSession::checkToken('get') or die(JText::_('JINVALID_TOKEN')); } JLoader::register('ContentHelperRoute', JPATH_ROOT . '/components/com_content/helpers/route.php'); // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.core'); JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); JHtml::_('bootstrap.popover', '.hasPopover', array('placement' => 'bottom')); JHtml::_('formbehavior.chosen', 'select'); // Special case for the search field tooltip. $searchFilterDesc = $this->filterForm->getFieldAttribute('search', 'description', null, 'filter'); JHtml::_('bootstrap.tooltip', '#filter_search', array('title' => JText::_($searchFilterDesc), 'placement' => 'bottom')); $extension = $this->escape($this->state->get('filter.extension')); $function = $app->input->getCmd('function', 'jSelectCategory'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <div class="container-popup"> <form action="<?php echo JRoute::_('index.php?option=com_categories&view=categories&layout=modal&tmpl=component&function=' . $function . '&' . JSession::getFormToken() . '=1'); ?>" method="post" name="adminForm" id="adminForm"> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"></div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="categoryList"> <thead> <tr> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <th width="15%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'language_title', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="5"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $iconStates = array( -2 => 'icon-trash', 0 => 'icon-unpublish', 1 => 'icon-publish', 2 => 'icon-archive', ); ?> <?php foreach ($this->items as $i => $item) : ?> <?php if ($item->language && JLanguageMultilang::isEnabled()) { $tag = strlen($item->language); if ($tag == 5) { $lang = substr($item->language, 0, 2); } elseif ($tag == 6) { $lang = substr($item->language, 0, 3); } else { $lang = ''; } } elseif (!JLanguageMultilang::isEnabled()) { $lang = ''; } ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <span class="<?php echo $iconStates[$this->escape($item->published)]; ?>" aria-hidden="true"></span> </td> <td> <?php echo JLayoutHelper::render('joomla.html.treeprefix', array('level' => $item->level)); ?> <a href="javascript:void(0)" onclick="if (window.parent) window.parent.<?php echo $this->escape($function); ?>('<?php echo $item->id; ?>', '<?php echo $this->escape(addslashes($item->title)); ?>', null, '<?php echo $this->escape(ContentHelperRoute::getCategoryRoute($item->id, $item->language)); ?>', '<?php echo $this->escape($lang); ?>', null);"> <?php echo $this->escape($item->title); ?></a> <span class="small" title="<?php echo $this->escape($item->path); ?>"> <?php if (empty($item->note)) : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?> <?php else : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS_NOTE', $this->escape($item->alias), $this->escape($item->note)); ?> <?php endif; ?> </span> </td> <td class="small hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <td class="small hidden-phone"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="extension" value="<?php echo $extension; ?>" /> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="forcedLanguage" value="<?php echo $app->input->get('forcedLanguage', '', 'CMD'); ?>" /> <?php echo JHtml::_('form.token'); ?> </form> </div> PKb��\h_/H4H4;components/com_categories/views/categories/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\String\Inflector; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $app = JFactory::getApplication(); $user = JFactory::getUser(); $userId = $user->get('id'); $extension = $this->escape($this->state->get('filter.extension')); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = ($listOrder == 'a.lft' && strtolower($listDirn) == 'asc'); $parts = explode('.', $extension, 2); $component = $parts[0]; $section = null; $columns = 7; if (count($parts) > 1) { $section = $parts[1]; $inflector = Inflector::getInstance(); if (!$inflector->isPlural($section)) { $section = $inflector->toPlural($section); } } if ($saveOrder) { $saveOrderingUrl = 'index.php?option=com_categories&task=categories.saveOrderAjax&tmpl=component'; JHtml::_('sortablelist.sortable', 'categoryList', 'adminForm', strtolower($listDirn), $saveOrderingUrl, false, true); } ?> <form action="<?php echo JRoute::_('index.php?option=com_categories&view=categories'); ?>" method="post" name="adminForm" id="adminForm"> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php // Search tools bar echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="categoryList"> <thead> <tr> <th width="1%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', '', 'a.lft', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?> </th> <th width="1%" class="center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_published')) : $columns++; ?> <th width="1%" class="nowrap center hidden-phone hidden-tablet"> <span class="icon-publish hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_CATEGORY_COUNT_PUBLISHED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_CATEGORY_COUNT_PUBLISHED_ITEMS'); ?></span></span> </th> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_unpublished')) : $columns++; ?> <th width="1%" class="nowrap center hidden-phone hidden-tablet"> <span class="icon-unpublish hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_CATEGORY_COUNT_UNPUBLISHED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_CATEGORY_COUNT_UNPUBLISHED_ITEMS'); ?></span></span> </th> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_archived')) : $columns++; ?> <th width="1%" class="nowrap center hidden-phone hidden-tablet"> <span class="icon-archive hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_CATEGORY_COUNT_ARCHIVED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_CATEGORY_COUNT_ARCHIVED_ITEMS'); ?></span></span> </th> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_trashed')) : $columns++; ?> <th width="1%" class="nowrap center hidden-phone hidden-tablet"> <span class="icon-trash hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_CATEGORY_COUNT_TRASHED_ITEMS'); ?>"><span class="element-invisible"><?php echo JText::_('COM_CATEGORY_COUNT_TRASHED_ITEMS'); ?></span></span> </th> <?php endif; ?> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <?php if ($this->assoc) : $columns++; ?> <th width="5%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_CATEGORY_HEADING_ASSOCIATION', 'association', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'language_title', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="<?php echo $columns; ?>"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : ?> <?php $canEdit = $user->authorise('core.edit', $extension . '.category.' . $item->id); $canCheckin = $user->authorise('core.admin', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canEditOwn = $user->authorise('core.edit.own', $extension . '.category.' . $item->id) && $item->created_user_id == $userId; $canChange = $user->authorise('core.edit.state', $extension . '.category.' . $item->id) && $canCheckin; // Get the parents of item for sorting if ($item->level > 1) { $parentsStr = ''; $_currentParentId = $item->parent_id; $parentsStr = ' ' . $_currentParentId; for ($i2 = 0; $i2 < $item->level; $i2++) { foreach ($this->ordering as $k => $v) { $v = implode('-', $v); $v = '-' . $v . '-'; if (strpos($v, '-' . $_currentParentId . '-') !== false) { $parentsStr .= ' ' . $k; $_currentParentId = $k; break; } } } } else { $parentsStr = ''; } ?> <tr class="row<?php echo $i % 2; ?>" sortable-group-id="<?php echo $item->parent_id; ?>" item-id="<?php echo $item->id ?>" parents="<?php echo $parentsStr ?>" level="<?php echo $item->level ?>"> <td class="order nowrap center hidden-phone"> <?php $iconClass = ''; if (!$canChange) { $iconClass = ' inactive'; } elseif (!$saveOrder) { $iconClass = ' inactive tip-top hasTooltip" title="' . JHtml::_('tooltipText', 'JORDERINGDISABLED'); } ?> <span class="sortable-handler<?php echo $iconClass ?>"> <span class="icon-menu"></span> </span> <?php if ($canChange && $saveOrder) : ?> <input type="text" style="display:none" name="order[]" size="5" value="<?php echo $item->lft; ?>" /> <?php endif; ?> </td> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td class="center"> <div class="btn-group"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'categories.', $canChange); ?> <?php if ($canChange) { // Create dropdown items JHtml::_('actionsdropdown.' . ((int) $item->published === 2 ? 'un' : '') . 'archive', 'cb' . $i, 'categories'); JHtml::_('actionsdropdown.' . ((int) $item->published === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'categories'); // Render dropdown list echo JHtml::_('actionsdropdown.render', $this->escape($item->title)); } ?> </div> </td> <td> <?php echo JLayoutHelper::render('joomla.html.treeprefix', array('level' => $item->level)); ?> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'categories.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit || $canEditOwn) : ?> <a class="hasTooltip" href="<?php echo JRoute::_('index.php?option=com_categories&task=category.edit&id=' . $item->id . '&extension=' . $extension); ?>" title="<?php echo JText::_('JACTION_EDIT'); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <span class="small" title="<?php echo $this->escape($item->path); ?>"> <?php if (empty($item->note)) : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?> <?php else : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS_NOTE', $this->escape($item->alias), $this->escape($item->note)); ?> <?php endif; ?> </span> </td> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_published')) : ?> <td class="center btns hidden-phone hidden-tablet"> <a class="badge <?php if ($item->count_published > 0) echo 'badge-success'; ?>" title="<?php echo JText::_('COM_CATEGORY_COUNT_PUBLISHED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . ($section ? '&view=' . $section : '') . '&filter[category_id]=' . (int) $item->id . '&filter[published]=1' . '&filter[level]=1'); ?>"> <?php echo $item->count_published; ?></a> </td> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_unpublished')) : ?> <td class="center btns hidden-phone hidden-tablet"> <a class="badge <?php if ($item->count_unpublished > 0) echo 'badge-important'; ?>" title="<?php echo JText::_('COM_CATEGORY_COUNT_UNPUBLISHED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . ($section ? '&view=' . $section : '') . '&filter[category_id]=' . (int) $item->id . '&filter[published]=0' . '&filter[level]=1'); ?>"> <?php echo $item->count_unpublished; ?></a> </td> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_archived')) : ?> <td class="center btns hidden-phone hidden-tablet"> <a class="badge <?php if ($item->count_archived > 0) echo 'badge-info'; ?>" title="<?php echo JText::_('COM_CATEGORY_COUNT_ARCHIVED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . ($section ? '&view=' . $section : '') . '&filter[category_id]=' . (int) $item->id . '&filter[published]=2' . '&filter[level]=1'); ?>"> <?php echo $item->count_archived; ?></a> </td> <?php endif; ?> <?php if (isset($this->items[0]) && property_exists($this->items[0], 'count_trashed')) : ?> <td class="center btns hidden-phone hidden-tablet"> <a class="badge <?php if ($item->count_trashed > 0) echo 'badge-inverse'; ?>" title="<?php echo JText::_('COM_CATEGORY_COUNT_TRASHED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=' . $component . ($section ? '&view=' . $section : '') . '&filter[category_id]=' . (int) $item->id . '&filter[published]=-2' . '&filter[level]=1'); ?>"> <?php echo $item->count_trashed; ?></a> </td> <?php endif; ?> <td class="small hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <?php if ($this->assoc) : ?> <td class="hidden-phone hidden-tablet"> <?php if ($item->association) : ?> <?php echo JHtml::_('CategoriesAdministrator.association', $item->id, $extension); ?> <?php endif; ?> </td> <?php endif; ?> <td class="small nowrap hidden-phone"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="hidden-phone"> <span title="<?php echo sprintf('%d-%d', $item->lft, $item->rgt); ?>"> <?php echo (int) $item->id; ?></span> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php // Load the batch processing form. ?> <?php if ($user->authorise('core.create', $extension) && $user->authorise('core.edit', $extension) && $user->authorise('core.edit.state', $extension)) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_CATEGORIES_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <?php endif; ?> <input type="hidden" name="extension" value="<?php echo $extension; ?>" /> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�&� � � Acomponents/com_categories/views/categories/tmpl/default_batch.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * @deprecated 3.4 Use default_batch_body and default_batch_footer */ defined('_JEXEC') or die; JHtml::_('formbehavior.chosen', 'select'); $options = array( JHtml::_('select.option', 'c', JText::_('JLIB_HTML_BATCH_COPY')), JHtml::_('select.option', 'm', JText::_('JLIB_HTML_BATCH_MOVE')) ); $published = $this->state->get('filter.published'); $extension = $this->escape($this->state->get('filter.extension')); ?> <div class="modal hide fade" id="collapseModal"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3><?php echo JText::_('COM_CATEGORIES_BATCH_OPTIONS'); ?></h3> </div> <div class="modal-body modal-batch"> <p><?php echo JText::_('COM_CATEGORIES_BATCH_TIP'); ?></p> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div class="span6"> <div class="control-group"> <label id="batch-choose-action-lbl" for="batch-category-id" class="control-label"> <?php echo JText::_('JLIB_HTML_BATCH_MENU_LABEL'); ?> </label> <div id="batch-choose-action" class="combo controls"> <select name="batch[category_id]" id="batch-category-id"> <option value=""><?php echo JText::_('JSELECT') ?></option> <?php echo JHtml::_('select.options', JHtml::_('category.categories', $extension, array('filter.published' => $published))); ?> </select> </div> </div> <div id="batch-copy-move" class="control-group radio"> <?php echo JHtml::_('select.radiolist', $options, 'batch[move_copy]', '', 'value', 'text', 'm'); ?> </div> </div> <?php endif; ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.tag'); ?> </div> </div> </div> </div> <div class="modal-footer"> <button class="btn" type="button" onclick="document.getElementById('batch-category-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button class="btn btn-primary" type="submit" onclick="Joomla.submitbutton('category.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> </div> </div> PKb��\���>� � 8components/com_categories/views/categories/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Categories view class for the Category package. * * @since 1.6 */ class CategoriesViewCategories extends JViewLegacy { /** * An array of items * * @var array */ protected $items; /** * The pagination object * * @var JPagination */ protected $pagination; /** * The model state * * @var object */ protected $state; /** * Flag if an association exists * * @var boolean */ protected $assoc; /** * Form object for search filters * * @var JForm */ public $filterForm; /** * The active search filters * * @var array */ public $activeFilters; /** * The sidebar markup * * @var string */ protected $string; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { $this->state = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->assoc = $this->get('Assoc'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Preprocess the list of items to find ordering divisions. foreach ($this->items as &$item) { $this->ordering[$item->parent_id][] = $item->id; } // Levels filter - Used in Hathor. $this->f_levels = array( JHtml::_('select.option', '1', JText::_('J1')), JHtml::_('select.option', '2', JText::_('J2')), JHtml::_('select.option', '3', JText::_('J3')), JHtml::_('select.option', '4', JText::_('J4')), JHtml::_('select.option', '5', JText::_('J5')), JHtml::_('select.option', '6', JText::_('J6')), JHtml::_('select.option', '7', JText::_('J7')), JHtml::_('select.option', '8', JText::_('J8')), JHtml::_('select.option', '9', JText::_('J9')), JHtml::_('select.option', '10', JText::_('J10')), ); // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); } else { // In article associations modal we need to remove language filter if forcing a language. if ($forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'CMD')) { // If the language is forced we can't allow to select the language, so transform the language selector filter into a hidden field. $languageXml = new SimpleXMLElement('<field name="language" type="hidden" default="' . $forcedLanguage . '" />'); $this->filterForm->setField($languageXml, 'filter', true); // Also, unset the active language filter so the search tools is not open by default with this filter. unset($this->activeFilters['language']); } } return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $categoryId = $this->state->get('filter.category_id'); $component = $this->state->get('filter.component'); $section = $this->state->get('filter.section'); $canDo = JHelperContent::getActions($component, 'category', $categoryId); $user = JFactory::getUser(); // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); // Avoid nonsense situation. if ($component == 'com_categories') { return; } // Need to load the menu language file as mod_menu hasn't been loaded yet. $lang = JFactory::getLanguage(); $lang->load($component, JPATH_BASE, null, false, true) || $lang->load($component, JPATH_ADMINISTRATOR . '/components/' . $component, null, false, true); // Load the category helper. JLoader::register('CategoriesHelper', JPATH_ADMINISTRATOR . '/components/com_categories/helpers/categories.php'); // If a component categories title string is present, let's use it. if ($lang->hasKey($component_title_key = strtoupper($component . ($section ? "_$section" : '')) . '_CATEGORIES_TITLE')) { $title = JText::_($component_title_key); } elseif ($lang->hasKey($component_section_key = strtoupper($component . ($section ? "_$section" : '')))) // Else if the component section string exits, let's use it { $title = JText::sprintf('COM_CATEGORIES_CATEGORIES_TITLE', $this->escape(JText::_($component_section_key))); } else // Else use the base title { $title = JText::_('COM_CATEGORIES_CATEGORIES_BASE_TITLE'); } // Load specific css component JHtml::_('stylesheet', $component . '/administrator/categories.css', array('version' => 'auto', 'relative' => true)); // Prepare the toolbar. JToolbarHelper::title($title, 'folder categories ' . substr($component, 4) . ($section ? "-$section" : '') . '-categories'); if ($canDo->get('core.create') || count($user->getAuthorisedCategories($component, 'core.create')) > 0) { JToolbarHelper::addNew('category.add'); } if ($canDo->get('core.edit') || $canDo->get('core.edit.own')) { JToolbarHelper::editList('category.edit'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::publish('categories.publish', 'JTOOLBAR_PUBLISH', true); JToolbarHelper::unpublish('categories.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolbarHelper::archiveList('categories.archive'); } if (JFactory::getUser()->authorise('core.admin')) { JToolbarHelper::checkin('categories.checkin'); } // Add a batch button if ($canDo->get('core.create') && $canDo->get('core.edit') && $canDo->get('core.edit.state')) { $title = JText::_('JTOOLBAR_BATCH'); // Instantiate a new JLayoutFile instance and render the batch button $layout = new JLayoutFile('joomla.toolbar.batch'); $dhtml = $layout->render(array('title' => $title)); $bar->appendButton('Custom', $dhtml, 'batch'); } if ($canDo->get('core.admin')) { JToolbarHelper::custom('categories.rebuild', 'refresh.png', 'refresh_f2.png', 'JTOOLBAR_REBUILD', false); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences($component); } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete', $component)) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'categories.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::trash('categories.trash'); } // Compute the ref_key if it does exist in the component if (!$lang->hasKey($ref_key = strtoupper($component . ($section ? "_$section" : '')) . '_CATEGORIES_HELP_KEY')) { $ref_key = 'JHELP_COMPONENTS_' . strtoupper(substr($component, 4) . ($section ? "_$section" : '')) . '_CATEGORIES'; } /* * Get help for the categories view for the component by * -remotely searching in a language defined dedicated URL: *component*_HELP_URL * -locally searching in a component help file if helpURL param exists in the component and is set to '' * -remotely searching in a component URL if helpURL param exists in the component and is NOT set to '' */ if ($lang->hasKey($lang_help_url = strtoupper($component) . '_HELP_URL')) { $debug = $lang->setDebug(false); $url = JText::_($lang_help_url); $lang->setDebug($debug); } else { $url = null; } JToolbarHelper::help($ref_key, JComponentHelper::getParams($component)->exists('helpURL'), $url); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { return array( 'a.lft' => JText::_('JGRID_HEADING_ORDERING'), 'a.published' => JText::_('JSTATUS'), 'a.title' => JText::_('JGLOBAL_TITLE'), 'a.access' => JText::_('JGRID_HEADING_ACCESS'), 'language' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.id' => JText::_('JGRID_HEADING_ID'), ); } } PKb��\ۍ��//Bcomponents/com_categories/views/category/tmpl/edit_extrafields.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * @deprecated 3.2 */ defined('_JEXEC') or die; PKb��\Ʊ��XXCcomponents/com_categories/views/category/tmpl/edit_associations.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.associations', $this); PKb��\ۍ��//>components/com_categories/views/category/tmpl/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * @deprecated 3.2 */ defined('_JEXEC') or die; PKb��\��v6��?components/com_categories/views/category/tmpl/modal_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JHtml::_('bootstrap.startAccordion', 'categoryOptions', array('active' => 'collapse0')); $fieldSets = $this->form->getFieldsets('params'); $i = 0; ?> <?php foreach ($fieldSets as $name => $fieldSet) : ?> <?php $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_CATEGORIES_' . $name . '_FIELDSET_LABEL'; echo JHtml::_('bootstrap.addSlide', 'categoryOptions', JText::_($label), 'collapse' . ($i++)); if (isset($fieldSet->description) && trim($fieldSet->description)) { echo '<p class="tip">' . $this->escape(JText::_($fieldSet->description)) . '</p>'; } ?> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <div class="control-group"> <div class="control-label"> <?php echo $field->label; ?> </div> <div class="controls"> <?php echo $field->input; ?> </div> </div> <?php endforeach; ?> <?php if ($name == 'basic') : ?> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('note'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('note'); ?> </div> </div> <?php endif; ?> <?php echo JHtml::_('bootstrap.endSlide'); ?> <?php endforeach; ?> <?php echo JHtml::_('bootstrap.endAccordion'); ?> PKb��\��oCcomponents/com_categories/views/category/tmpl/modal_extrafields.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; PKb��\�����6components/com_categories/views/category/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', '#jform_tags', null, array('placeholder_text_multiple' => JText::_('JGLOBAL_TYPE_OR_SELECT_SOME_TAGS'))); JHtml::_('formbehavior.chosen', 'select'); $app = JFactory::getApplication(); $input = $app->input; $assoc = JLanguageAssociations::isEnabled(); // Are associations implemented for this extension? $extensionassoc = array_key_exists('item_associations', $this->form->getFieldsets()); JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(task) { if (task == "category.cancel" || document.formvalidator.isValid(document.getElementById("item-form"))) { jQuery("#permissions-sliders select").attr("disabled", "disabled"); ' . $this->form->getField('description')->save() . ' Joomla.submitform(task, document.getElementById("item-form")); // @deprecated 4.0 The following js is not needed since 3.7.0. if (task !== "category.apply") { window.parent.jQuery("#categoryEdit' . $this->item->id . 'Modal").modal("hide"); } } }; '); // Fieldsets to not automatically render by /layouts/joomla/edit/params.php $this->ignore_fieldsets = array('jmetadata', 'item_associations'); // In case of modal $isModal = $input->get('layout') == 'modal' ? true : false; $layout = $isModal ? 'modal' : 'edit'; $tmpl = $isModal || $input->get('tmpl', '', 'cmd') === 'component' ? '&tmpl=component' : ''; ?> <form action="<?php echo JRoute::_('index.php?option=com_categories&extension=' . $input->getCmd('extension', 'com_content') . '&layout=' . $layout . $tmpl . '&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="item-form" class="form-validate"> <?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?> <div class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'general')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'general', JText::_('JCATEGORY')); ?> <div class="row-fluid"> <div class="span9"> <?php echo $this->form->getLabel('description'); ?> <?php echo $this->form->getInput('description'); ?> </div> <div class="span3"> <?php echo JLayoutHelper::render('joomla.edit.global', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'publishing', JText::_('COM_CATEGORIES_FIELDSET_PUBLISHING')); ?> <div class="row-fluid form-horizontal-desktop"> <div class="span6"> <?php echo JLayoutHelper::render('joomla.edit.publishingdata', $this); ?> </div> <div class="span6"> <?php echo JLayoutHelper::render('joomla.edit.metadata', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php if ( ! $isModal && $assoc && $extensionassoc) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'associations', JText::_('JGLOBAL_FIELDSET_ASSOCIATIONS')); ?> <?php echo $this->loadTemplate('associations'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php elseif ($isModal && $assoc && $extensionassoc) : ?> <div class="hidden"><?php echo $this->loadTemplate('associations'); ?></div> <?php endif; ?> <?php if ($this->canDo->get('core.admin')) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'rules', JText::_('COM_CATEGORIES_FIELDSET_RULES')); ?> <?php echo $this->form->getInput('rules'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> <?php echo $this->form->getInput('extension'); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="forcedLanguage" value="<?php echo $input->get('forcedLanguage', '', 'cmd'); ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\Ʊ��XXDcomponents/com_categories/views/category/tmpl/modal_associations.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.associations', $this); PKb��\�q��vv7components/com_categories/views/category/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); // @deprecated 4.0 the function parameter, the inline js and the buttons are not needed since 3.7.0. $function = JFactory::getApplication()->input->getCmd('function', 'jEditCategory_' . (int) $this->item->id); // Function to update input title when changed JFactory::getDocument()->addScriptDeclaration(' function jEditCategoryModal() { if (window.parent && document.formvalidator.isValid(document.getElementById("item-form"))) { return window.parent.' . $this->escape($function) . '(document.getElementById("jform_title").value); } } '); ?> <button id="applyBtn" type="button" class="hidden" onclick="Joomla.submitbutton('category.apply'); jEditCategoryModal();"></button> <button id="saveBtn" type="button" class="hidden" onclick="Joomla.submitbutton('category.save'); jEditCategoryModal();"></button> <button id="closeBtn" type="button" class="hidden" onclick="Joomla.submitbutton('category.cancel');"></button> <div class="container-popup"> <?php $this->setLayout('edit'); ?> <?php echo $this->loadTemplate(); ?> </div> PKb��\/�qrTT?components/com_categories/views/category/tmpl/edit_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.metadata', $this); PKb��\/�qrTT@components/com_categories/views/category/tmpl/modal_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.metadata', $this); PKb��\�KJ�##6components/com_categories/views/category/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Categories component * * @since 1.6 */ class CategoriesViewCategory extends JViewLegacy { /** * The JForm object * * @var JForm */ protected $form; /** * The active item * * @var object */ protected $item; /** * The model state * * @var object */ protected $state; /** * Flag if an association exists * * @var boolean */ protected $assoc; /** * The actions the user is authorised to perform * * @var JObject */ protected $canDo; /** * Display the view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); $section = $this->state->get('category.section') ? $this->state->get('category.section') . '.' : ''; $this->canDo = JHelperContent::getActions($this->state->get('category.component'), $section . 'category', $this->item->id); $this->assoc = $this->get('Assoc'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Check for tag type $this->checkTags = JHelperTags::getTypes('objectList', array($this->state->get('category.extension') . '.category'), true); JFactory::getApplication()->input->set('hidemainmenu', true); // If we are forcing a language in modal (used for associations). if ($this->getLayout() === 'modal' && $forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'cmd')) { // Set the language field to the forcedLanguage and disable changing it. $this->form->setValue('language', null, $forcedLanguage); $this->form->setFieldAttribute('language', 'readonly', 'true'); // Only allow to select categories with All language or with the forced language. $this->form->setFieldAttribute('parent_id', 'language', '*,' . $forcedLanguage); // Only allow to select tags with All language or with the forced language. $this->form->setFieldAttribute('tags', 'language', '*,' . $forcedLanguage); } $this->addToolbar(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $extension = JFactory::getApplication()->input->get('extension'); $user = JFactory::getUser(); $userId = $user->id; $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $userId); // Check to see if the type exists $ucmType = new JUcmType; $this->typeId = $ucmType->getTypeId($extension . '.category'); // Avoid nonsense situation. if ($extension == 'com_categories') { return; } // The extension can be in the form com_foo.section $parts = explode('.', $extension); $component = $parts[0]; $section = (count($parts) > 1) ? $parts[1] : null; $componentParams = JComponentHelper::getParams($component); // Need to load the menu language file as mod_menu hasn't been loaded yet. $lang = JFactory::getLanguage(); $lang->load($component, JPATH_BASE, null, false, true) || $lang->load($component, JPATH_ADMINISTRATOR . '/components/' . $component, null, false, true); // Load the category helper. JLoader::register('CategoriesHelper', JPATH_ADMINISTRATOR . '/components/com_categories/helpers/categories.php'); // Get the results for each action. $canDo = $this->canDo; // If a component categories title string is present, let's use it. if ($lang->hasKey($component_title_key = $component . ($section ? "_$section" : '') . '_CATEGORY_' . ($isNew ? 'ADD' : 'EDIT') . '_TITLE')) { $title = JText::_($component_title_key); } // Else if the component section string exits, let's use it elseif ($lang->hasKey($component_section_key = $component . ($section ? "_$section" : ''))) { $title = JText::sprintf('COM_CATEGORIES_CATEGORY_' . ($isNew ? 'ADD' : 'EDIT') . '_TITLE', $this->escape(JText::_($component_section_key)) ); } // Else use the base title else { $title = JText::_('COM_CATEGORIES_CATEGORY_BASE_' . ($isNew ? 'ADD' : 'EDIT') . '_TITLE'); } // Load specific css component JHtml::_('stylesheet', $component . '/administrator/categories.css', array('version' => 'auto', 'relative' => true)); // Prepare the toolbar. JToolbarHelper::title( $title, 'folder category-' . ($isNew ? 'add' : 'edit') . ' ' . substr($component, 4) . ($section ? "-$section" : '') . '-category-' . ($isNew ? 'add' : 'edit') ); // For new records, check the create permission. if ($isNew && (count($user->getAuthorisedCategories($component, 'core.create')) > 0)) { JToolbarHelper::apply('category.apply'); JToolbarHelper::save('category.save'); JToolbarHelper::save2new('category.save2new'); JToolbarHelper::cancel('category.cancel'); } // If not checked out, can save the item. else { // Since it's an existing record, check the edit permission, or fall back to edit own if the owner. $itemEditable = $canDo->get('core.edit') || ($canDo->get('core.edit.own') && $this->item->created_user_id == $userId); // Can't save the record if it's checked out and editable if (!$checkedOut && $itemEditable) { JToolbarHelper::apply('category.apply'); JToolbarHelper::save('category.save'); if ($canDo->get('core.create')) { JToolbarHelper::save2new('category.save2new'); } } // If an existing item, can save to a copy. if ($canDo->get('core.create')) { JToolbarHelper::save2copy('category.save2copy'); } if (JComponentHelper::isEnabled('com_contenthistory') && $componentParams->get('save_history', 0) && $itemEditable) { $typeAlias = $extension . '.category'; JToolbarHelper::versions($typeAlias, $this->item->id); } if (JLanguageAssociations::isEnabled() && JComponentHelper::isEnabled('com_associations')) { JToolbarHelper::custom('category.editAssociations', 'contract', 'contract', 'JTOOLBAR_ASSOCIATIONS', false, false); } JToolbarHelper::cancel('category.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); // Compute the ref_key $ref_key = strtoupper($component . ($section ? "_$section" : '')) . '_CATEGORY_' . ($isNew ? 'ADD' : 'EDIT') . '_HELP_KEY'; // Check if thr computed ref_key does exist in the component if (!$lang->hasKey($ref_key)) { $ref_key = 'JHELP_COMPONENTS_' . strtoupper(substr($component, 4) . ($section ? "_$section" : '')) . '_CATEGORY_' . ($isNew ? 'ADD' : 'EDIT'); } /* * Get help for the category/section view for the component by * -remotely searching in a language defined dedicated URL: *component*_HELP_URL * -locally searching in a component help file if helpURL param exists in the component and is set to '' * -remotely searching in a component URL if helpURL param exists in the component and is NOT set to '' */ if ($lang->hasKey($lang_help_url = strtoupper($component) . '_HELP_URL')) { $debug = $lang->setDebug(false); $url = JText::_($lang_help_url); $lang->setDebug($debug); } else { $url = null; } JToolbarHelper::help($ref_key, $componentParams->exists('helpURL'), $url, $component); } } PKb��\��U܈ � Bcomponents/com_categories/helpers/html/categoriesadministrator.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; JLoader::register('CategoriesHelper', JPATH_ADMINISTRATOR . '/components/com_categories/helpers/categories.php'); /** * Administrator category HTML * * @since 3.2 */ abstract class JHtmlCategoriesAdministrator { /** * Render the list of associated items * * @param integer $catid Category identifier to search its associations * @param string $extension Category Extension * * @return string The language HTML * * @since 3.2 * @throws Exception */ public static function association($catid, $extension = 'com_content') { // Defaults $html = ''; // Get the associations if ($associations = CategoriesHelper::getAssociations($catid, $extension)) { $associations = ArrayHelper::toInteger($associations); // Get the associated categories $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('c.id, c.title') ->select('l.sef as lang_sef') ->select('l.lang_code') ->from('#__categories as c') ->where('c.id IN (' . implode(',', array_values($associations)) . ')') ->where('c.id != ' . $catid) ->join('LEFT', '#__languages as l ON c.language=l.lang_code') ->select('l.image') ->select('l.title as language_title'); $db->setQuery($query); try { $items = $db->loadObjectList('id'); } catch (RuntimeException $e) { throw new Exception($e->getMessage(), 500, $e); } if ($items) { foreach ($items as &$item) { $text = $item->lang_sef ? strtoupper($item->lang_sef) : 'XX'; $url = JRoute::_('index.php?option=com_categories&task=category.edit&id=' . (int) $item->id . '&extension=' . $extension); $classes = 'hasPopover label label-association label-' . $item->lang_sef; $item->link = '<a href="' . $url . '" title="' . $item->language_title . '" class="' . $classes . '" data-content="' . htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8') . '" data-placement="top">' . $text . '</a>'; } } JHtml::_('bootstrap.popover'); $html = JLayoutHelper::render('joomla.content.associations', $items); } return $html; } } PKb��\��� 0components/com_categories/helpers/categories.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Categories helper. * * @since 1.6 */ class CategoriesHelper { /** * Configure the Submenu links. * * @param string $extension The extension being used for the categories. * * @return void * * @since 1.6 */ public static function addSubmenu($extension) { // Avoid nonsense situation. if ($extension == 'com_categories') { return; } $parts = explode('.', $extension); $component = $parts[0]; if (count($parts) > 1) { $section = $parts[1]; } // Try to find the component helper. $eName = str_replace('com_', '', $component); $file = JPath::clean(JPATH_ADMINISTRATOR . '/components/' . $component . '/helpers/' . $eName . '.php'); if (file_exists($file)) { $prefix = ucfirst(str_replace('com_', '', $component)); $cName = $prefix . 'Helper'; JLoader::register($cName, $file); if (class_exists($cName)) { if (is_callable(array($cName, 'addSubmenu'))) { $lang = JFactory::getLanguage(); // Loading language file from the administrator/language directory then // loading language file from the administrator/components/*extension*/language directory $lang->load($component, JPATH_BASE, null, false, true) || $lang->load($component, JPath::clean(JPATH_ADMINISTRATOR . '/components/' . $component), null, false, true); call_user_func(array($cName, 'addSubmenu'), 'categories' . (isset($section) ? '.' . $section : '')); } } } } /** * Gets a list of the actions that can be performed. * * @param string $extension The extension. * @param integer $categoryId The category ID. * * @return JObject * * @since 1.6 * @deprecated 3.2 Use JHelperContent::getActions() instead */ public static function getActions($extension, $categoryId = 0) { // Log usage of deprecated function try { JLog::add( sprintf('%s() is deprecated, use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions return JHelperContent::getActions($extension, 'category', $categoryId); } /** * Gets a list of associations for a given item. * * @param integer $pk Content item key. * @param string $extension Optional extension name. * * @return array of associations. */ public static function getAssociations($pk, $extension = 'com_content') { $langAssociations = JLanguageAssociations::getAssociations($extension, '#__categories', 'com_categories.item', $pk, 'id', 'alias', ''); $associations = array(); $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); foreach ($langAssociations as $langAssociation) { // Include only published categories with user access $arrId = explode(':', $langAssociation->id); $assocId = $arrId[0]; $db = \JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->qn('published')) ->from($db->qn('#__categories')) ->where('access IN (' . $groups . ')') ->where($db->qn('id') . ' = ' . (int) $assocId); $result = (int) $db->setQuery($query)->loadResult(); if ($result === 1) { $associations[$langAssociation->language] = $langAssociation->id; } } return $associations; } /** * Check if Category ID exists otherwise assign to ROOT category. * * @param mixed $catid Name or ID of category. * @param string $extension Extension that triggers this function * * @return integer $catid Category ID. */ public static function validateCategoryId($catid, $extension) { JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_categories/tables'); $categoryTable = JTable::getInstance('Category'); $data = array(); $data['id'] = $catid; $data['extension'] = $extension; if (!$categoryTable->load($data)) { $catid = 0; } return (int) $catid; } /** * Create new Category from within item view. * * @param array $data Array of data for new category. * * @return integer */ public static function createCategory($data) { JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_categories/models'); JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_categories/tables'); $categoryModel = JModelLegacy::getInstance('Category', 'CategoriesModel', array('ignore_request' => true)); $categoryModel->save($data); $catid = $categoryModel->getState('category.id'); return $catid; } } PKb��\�4���1components/com_categories/helpers/association.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('CategoriesHelper', JPATH_ADMINISTRATOR . '/components/com_categories/helpers/categories.php'); /** * Category Component Association Helper * * @since 3.0 */ abstract class CategoryHelperAssociation { public static $category_association = true; /** * Method to get the associations for a given category * * @param integer $id Id of the item * @param string $extension Name of the component * @param string $layout Category layout * * @return array Array of associations for the component categories * * @since 3.0 */ public static function getCategoryAssociations($id = 0, $extension = 'com_content', $layout = null) { $return = array(); if ($id) { // Load route helper jimport('helper.route', JPATH_COMPONENT_SITE); $helperClassname = ucfirst(substr($extension, 4)) . 'HelperRoute'; $associations = CategoriesHelper::getAssociations($id, $extension); foreach ($associations as $tag => $item) { if (class_exists($helperClassname) && is_callable(array($helperClassname, 'getCategoryRoute'))) { $return[$tag] = $helperClassname::getCategoryRoute($item, $tag, $layout); } else { $viewLayout = $layout ? '&layout=' . $layout : ''; $return[$tag] = 'index.php?option=' . $extension . '&view=category&id=' . $item . $viewLayout; } } } return $return; } } PKb��\C����1�18components/com_categories/models/fields/categoryedit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; use Joomla\Utilities\ArrayHelper; JFormHelper::loadFieldClass('list'); /** * Category Edit field.. * * @since 1.6 */ class JFormFieldCategoryEdit extends JFormFieldList { /** * To allow creation of new categories. * * @var integer * @since 3.6 */ protected $allowAdd; /** * A flexible category list that respects access controls * * @var string * @since 1.6 */ public $type = 'CategoryEdit'; /** * Method to attach a JForm object to the field. * * @param SimpleXMLElement $element The SimpleXMLElement object representing the <field /> tag for the form field object. * @param mixed $value The form field value to validate. * @param string $group The field name group control value. This acts as an array container for the field. * For example if the field has name="foo" and the group value is set to "bar" then the * full field name would end up being "bar[foo]". * * @return boolean True on success. * * @see JFormField::setup() * @since 3.2 */ public function setup(SimpleXMLElement $element, $value, $group = null) { $return = parent::setup($element, $value, $group); if ($return) { $this->allowAdd = isset($this->element['allowAdd']) ? $this->element['allowAdd'] : ''; } return $return; } /** * Method to get certain otherwise inaccessible properties from the form field object. * * @param string $name The property name for which to get the value. * * @return mixed The property value or null. * * @since 3.6 */ public function __get($name) { switch ($name) { case 'allowAdd': return $this->$name; } return parent::__get($name); } /** * Method to set certain otherwise inaccessible properties of the form field object. * * @param string $name The property name for which to set the value. * @param mixed $value The value of the property. * * @return void * * @since 3.6 */ public function __set($name, $value) { $value = (string) $value; switch ($name) { case 'allowAdd': $value = (string) $value; $this->$name = ($value === 'true' || $value === $name || $value === '1'); break; default: parent::__set($name, $value); } } /** * Method to get a list of categories that respects access controls and can be used for * either category assignment or parent category assignment in edit screens. * Use the parent element to indicate that the field will be used for assigning parent categories. * * @return array The field option objects. * * @since 1.6 */ protected function getOptions() { $options = array(); $published = $this->element['published'] ? explode(',', (string) $this->element['published']) : array(0, 1); $name = (string) $this->element['name']; // Let's get the id for the current item, either category or content item. $jinput = JFactory::getApplication()->input; // Load the category options for a given extension. // For categories the old category is the category id or 0 for new category. if ($this->element['parent'] || $jinput->get('option') == 'com_categories') { $oldCat = $jinput->get('id', 0); $oldParent = $this->form->getValue($name, 0); $extension = $this->element['extension'] ? (string) $this->element['extension'] : (string) $jinput->get('extension', 'com_content'); } else // For items the old category is the category they are in when opened or 0 if new. { $oldCat = $this->form->getValue($name, 0); $extension = $this->element['extension'] ? (string) $this->element['extension'] : (string) $jinput->get('option', 'com_content'); } // Account for case that a submitted form has a multi-value category id field (e.g. a filtering form), just use the first category $oldCat = is_array($oldCat) ? (int) reset($oldCat) : (int) $oldCat; $db = JFactory::getDbo(); $user = JFactory::getUser(); $query = $db->getQuery(true) ->select('a.id AS value, a.title AS text, a.level, a.published, a.lft, a.language') ->from('#__categories AS a'); // Filter by the extension type if ($this->element['parent'] == true || $jinput->get('option') == 'com_categories') { $query->where('(a.extension = ' . $db->quote($extension) . ' OR a.parent_id = 0)'); } else { $query->where('(a.extension = ' . $db->quote($extension) . ')'); } // Filter language if (!empty($this->element['language'])) { if (strpos($this->element['language'], ',') !== false) { $language = implode(',', $db->quote(explode(',', $this->element['language']))); } else { $language = $db->quote($this->element['language']); } $query->where($db->quoteName('a.language') . ' IN (' . $language . ')'); } // Filter on the published state $query->where('a.published IN (' . implode(',', ArrayHelper::toInteger($published)) . ')'); // Filter categories on User Access Level // Filter by access level on categories. if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN (' . $groups . ')'); } $query->order('a.lft ASC'); // If parent isn't explicitly stated but we are in com_categories assume we want parents if ($oldCat != 0 && ($this->element['parent'] == true || $jinput->get('option') == 'com_categories')) { // Prevent parenting to children of this item. // To rearrange parents and children move the children up, not the parents down. $query->join('LEFT', $db->quoteName('#__categories') . ' AS p ON p.id = ' . (int) $oldCat) ->where('NOT(a.lft >= p.lft AND a.rgt <= p.rgt)'); $rowQuery = $db->getQuery(true); $rowQuery->select('a.id AS value, a.title AS text, a.level, a.parent_id') ->from('#__categories AS a') ->where('a.id = ' . (int) $oldCat); $db->setQuery($rowQuery); $row = $db->loadObject(); } // Get the options. $db->setQuery($query); try { $options = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } // Pad the option text with spaces using depth level as a multiplier. for ($i = 0, $n = count($options); $i < $n; $i++) { // Translate ROOT if ($this->element['parent'] == true || $jinput->get('option') == 'com_categories') { if ($options[$i]->level == 0) { $options[$i]->text = JText::_('JGLOBAL_ROOT_PARENT'); } } if ($options[$i]->published == 1) { $options[$i]->text = str_repeat('- ', !$options[$i]->level ? 0 : $options[$i]->level - 1) . $options[$i]->text; } else { $options[$i]->text = str_repeat('- ', !$options[$i]->level ? 0 : $options[$i]->level - 1) . '[' . $options[$i]->text . ']'; } // Displays language code if not set to All if ($options[$i]->language !== '*') { $options[$i]->text = $options[$i]->text . ' (' . $options[$i]->language . ')'; } } // For new items we want a list of categories you are allowed to create in. if ($oldCat == 0) { foreach ($options as $i => $option) { /* * To take save or create in a category you need to have create rights for that category unless the item is already in that category. * Unset the option if the user isn't authorised for it. In this field assets are always categories. */ if ($option->level != 0 && !$user->authorise('core.create', $extension . '.category.' . $option->value)) { unset($options[$i]); } } } // If you have an existing category id things are more complex. else { /* * If you are only allowed to edit in this category but not edit.state, you should not get any * option to change the category parent for a category or the category for a content item, * but you should be able to save in that category. */ foreach ($options as $i => $option) { $assetKey = $extension . '.category.' . $oldCat; if ($option->level != 0 && !isset($oldParent) && $option->value != $oldCat && !$user->authorise('core.edit.state', $assetKey)) { unset($options[$i]); continue; } if ($option->level != 0 && isset($oldParent) && $option->value != $oldParent && !$user->authorise('core.edit.state', $assetKey)) { unset($options[$i]); continue; } /* * However, if you can edit.state you can also move this to another category for which you have * create permission and you should also still be able to save in the current category. */ $assetKey = $extension . '.category.' . $option->value; if ($option->level != 0 && !isset($oldParent) && $option->value != $oldCat && !$user->authorise('core.create', $assetKey)) { unset($options[$i]); continue; } if ($option->level != 0 && isset($oldParent) && $option->value != $oldParent && !$user->authorise('core.create', $assetKey)) { unset($options[$i]); continue; } } } if (($this->element['parent'] == true || $jinput->get('option') == 'com_categories') && (isset($row) && !isset($options[0])) && isset($this->element['show_root'])) { if ($row->parent_id == '1') { $parent = new stdClass; $parent->text = JText::_('JGLOBAL_ROOT_PARENT'); array_unshift($options, $parent); } array_unshift($options, JHtml::_('select.option', '0', JText::_('JGLOBAL_ROOT'))); } // Merge any additional options in the XML definition. return array_merge(parent::getOptions(), $options); } /** * Method to get the field input markup for a generic list. * Use the multiple attribute to enable multiselect. * * @return string The field input markup. * * @since 3.6 */ protected function getInput() { $html = array(); $class = array(); $attr = ''; // Initialize some field attributes. $class[] = !empty($this->class) ? $this->class : ''; if ($this->allowAdd) { $customGroupText = JText::_('JGLOBAL_CUSTOM_CATEGORY'); $class[] = 'chzn-custom-value'; $attr .= ' data-custom_group_text="' . $customGroupText . '" ' . 'data-no_results_text="' . JText::_('JGLOBAL_ADD_CUSTOM_CATEGORY') . '" ' . 'data-placeholder="' . JText::_('JGLOBAL_TYPE_OR_SELECT_CATEGORY') . '" '; } if ($class) { $attr .= 'class="' . implode(' ', $class) . '"'; } $attr .= !empty($this->size) ? ' size="' . $this->size . '"' : ''; $attr .= $this->multiple ? ' multiple' : ''; $attr .= $this->required ? ' required aria-required="true"' : ''; $attr .= $this->autofocus ? ' autofocus' : ''; // To avoid user's confusion, readonly="true" should imply disabled="true". if ((string) $this->readonly == '1' || (string) $this->readonly == 'true' || (string) $this->disabled == '1' || (string) $this->disabled == 'true') { $attr .= ' disabled="disabled"'; } // Initialize JavaScript field attributes. $attr .= $this->onchange ? ' onchange="' . $this->onchange . '"' : ''; // Get the field options. $options = (array) $this->getOptions(); // Create a read-only list (no name) with hidden input(s) to store the value(s). if ((string) $this->readonly == '1' || (string) $this->readonly == 'true') { $html[] = JHtml::_('select.genericlist', $options, '', trim($attr), 'value', 'text', $this->value, $this->id); // E.g. form field type tag sends $this->value as array if ($this->multiple && is_array($this->value)) { if (!count($this->value)) { $this->value[] = ''; } foreach ($this->value as $value) { $html[] = '<input type="hidden" name="' . $this->name . '" value="' . htmlspecialchars($value, ENT_COMPAT, 'UTF-8') . '"/>'; } } else { $html[] = '<input type="hidden" name="' . $this->name . '" value="' . htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') . '"/>'; } } else { // Create a regular list. if (count($options) === 0) { // All Categories have been deleted, so we need a new category (This will create on save if selected). $options[0] = new stdClass; $options[0]->value = 'Uncategorised'; $options[0]->text = 'Uncategorised'; $options[0]->level = '1'; $options[0]->published = '1'; $options[0]->lft = '1'; } $html[] = JHtml::_('select.genericlist', $options, $this->name, trim($attr), 'value', 'text', $this->value, $this->id); } return implode($html); } } PKb��\�ڰ�~~:components/com_categories/models/fields/categoryparent.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; JFormHelper::loadFieldClass('list'); /** * Category Parent field. * * @since 1.6 * @deprecated 4.0 Use categoryedit instead. */ class JFormFieldCategoryParent extends JFormFieldList { /** * The form field type. * * @var string * @since 1.6 */ protected $type = 'CategoryParent'; /** * Method to get the field options. * * @return array The field option objects. * * @since 1.6 */ protected function getOptions() { // Initialise variables. $options = array(); $name = (string) $this->element['name']; // Let's get the id for the current item, either category or content item. $jinput = JFactory::getApplication()->input; // For categories the old category is the category id 0 for new category. if ($this->element['parent']) { $oldCat = $jinput->get('id', 0); } else // For items the old category is the category they are in when opened or 0 if new. { $oldCat = $this->form->getValue($name); } $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('a.id AS value, a.title AS text, a.level') ->from('#__categories AS a') ->join('LEFT', $db->quoteName('#__categories') . ' AS b ON a.lft > b.lft AND a.rgt < b.rgt'); // Filter by the type if ($extension = $this->form->getValue('extension')) { $query->where('(a.extension = ' . $db->quote($extension) . ' OR a.parent_id = 0)'); } if ($this->element['parent']) { // Prevent parenting to children of this item. if ($id = $this->form->getValue('id')) { $query->join('LEFT', $db->quoteName('#__categories') . ' AS p ON p.id = ' . (int) $id) ->where('NOT(a.lft >= p.lft AND a.rgt <= p.rgt)'); $rowQuery = $db->getQuery(true); $rowQuery->select('a.id AS value, a.title AS text, a.level, a.parent_id') ->from('#__categories AS a') ->where('a.id = ' . (int) $id); $db->setQuery($rowQuery); $row = $db->loadObject(); } } $query->where('a.published IN (0,1)') ->group('a.id, a.title, a.level, a.lft, a.rgt, a.extension, a.parent_id') ->order('a.lft ASC'); // Get the options. $db->setQuery($query); try { $options = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } // Pad the option text with spaces using depth level as a multiplier. for ($i = 0, $n = count($options); $i < $n; $i++) { // Translate ROOT if ($options[$i]->level == 0) { $options[$i]->text = JText::_('JGLOBAL_ROOT_PARENT'); } // Displays language code if not set to All $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('language')) ->where($db->quoteName('id') . '=' . (int) $options[$i]->value) ->from($db->quoteName('#__categories')); $db->setQuery($query); $language = $db->loadResult(); $options[$i]->text = str_repeat('- ', $options[$i]->level) . $options[$i]->text; if ($language !== '*') { $options[$i]->text = $options[$i]->text . ' (' . $language . ')'; } } // Get the current user object. $user = JFactory::getUser(); // For new items we want a list of categories you are allowed to create in. if ($oldCat == 0) { foreach ($options as $i => $option) { /* * To take save or create in a category you need to have create rights for that category unless the item is already in that category. * Unset the option if the user isn't authorised for it. In this field assets are always categories. */ if ($user->authorise('core.create', $extension . '.category.' . $option->value) != true) { unset($options[$i]); } } } // If you have an existing category id things are more complex. else { foreach ($options as $i => $option) { /* * If you are only allowed to edit in this category but not edit.state, you should not get any * option to change the category parent for a category or the category for a content item, * but you should be able to save in that category. */ if ($user->authorise('core.edit.state', $extension . '.category.' . $oldCat) != true) { if ($option->value != $oldCat) { echo 'y'; unset($options[$i]); } } /* * However, if you can edit.state you can also move this to another category for which you have * create permission and you should also still be able to save in the current category. */ elseif (($user->authorise('core.create', $extension . '.category.' . $option->value) != true) && $option->value != $oldCat ) { echo 'x'; unset($options[$i]); } } } if (isset($row) && !isset($options[0])) { if ($row->parent_id == '1') { $parent = new stdClass; $parent->text = JText::_('JGLOBAL_ROOT_PARENT'); array_unshift($options, $parent); } } // Merge any additional options in the XML definition. return array_merge(parent::getOptions(), $options); } } PKb��\�����'�':components/com_categories/models/fields/modal/category.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; use Joomla\CMS\Language\LanguageHelper; /** * Supports a modal category picker. * * @since 3.1 */ class JFormFieldModal_Category extends JFormField { /** * The form field type. * * @var string * @since 1.6 */ protected $type = 'Modal_Category'; /** * Method to get the field input markup. * * @return string The field input markup. * * @since 1.6 */ protected function getInput() { if ($this->element['extension']) { $extension = (string) $this->element['extension']; } else { $extension = (string) JFactory::getApplication()->input->get('extension', 'com_content'); } $allowNew = ((string) $this->element['new'] == 'true'); $allowEdit = ((string) $this->element['edit'] == 'true'); $allowClear = ((string) $this->element['clear'] != 'false'); $allowSelect = ((string) $this->element['select'] != 'false'); $allowPropagate = ((string) $this->element['propagate'] == 'true'); $languages = LanguageHelper::getContentLanguages(array(0, 1)); // Load language. JFactory::getLanguage()->load('com_categories', JPATH_ADMINISTRATOR); // The active category id field. $value = (int) $this->value > 0 ? (int) $this->value : ''; // Create the modal id. $modalId = 'Category_' . $this->id; // Add the modal field script to the document head. JHtml::_('jquery.framework'); JHtml::_('script', 'system/modal-fields.js', array('version' => 'auto', 'relative' => true)); // Script to proxy the select modal function to the modal-fields.js file. if ($allowSelect) { static $scriptSelect = null; if (is_null($scriptSelect)) { $scriptSelect = array(); } if (!isset($scriptSelect[$this->id])) { JFactory::getDocument()->addScriptDeclaration(" function jSelectCategory_" . $this->id . "(id, title, object) { window.processModalSelect('Category', '" . $this->id . "', id, title, '', object); } "); JText::script('JGLOBAL_ASSOCIATIONS_PROPAGATE_FAILED'); $scriptSelect[$this->id] = true; } } // Setup variables for display. $linkCategories = 'index.php?option=com_categories&view=categories&layout=modal&tmpl=component&' . JSession::getFormToken() . '=1' . '&extension=' . $extension; $linkCategory = 'index.php?option=com_categories&view=category&layout=modal&tmpl=component&' . JSession::getFormToken() . '=1' . '&extension=' . $extension; $modalTitle = JText::_('COM_CATEGORIES_CHANGE_CATEGORY'); if (isset($this->element['language'])) { $linkCategories .= '&forcedLanguage=' . $this->element['language']; $linkCategory .= '&forcedLanguage=' . $this->element['language']; $modalTitle .= ' — ' . $this->element['label']; } $urlSelect = $linkCategories . '&function=jSelectCategory_' . $this->id; $urlEdit = $linkCategory . '&task=category.edit&id=\' + document.getElementById("' . $this->id . '_id").value + \''; $urlNew = $linkCategory . '&task=category.add'; if ($value) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('title')) ->from($db->quoteName('#__categories')) ->where($db->quoteName('id') . ' = ' . (int) $value); $db->setQuery($query); try { $title = $db->loadResult(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } } $title = empty($title) ? JText::_('COM_CATEGORIES_SELECT_A_CATEGORY') : htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); // The current category display field. $html = '<span class="input-append">'; $html .= '<input class="input-medium" id="' . $this->id . '_name" type="text" value="' . $title . '" disabled="disabled" size="35" />'; // Select category button. if ($allowSelect) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? ' hidden' : '') . '"' . ' id="' . $this->id . '_select"' . ' data-toggle="modal"' . ' data-target="#ModalSelect' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_CATEGORIES_CHANGE_CATEGORY') . '">' . '<span class="icon-file" aria-hidden="true"></span> ' . JText::_('JSELECT') . '</button>'; } // New category button. if ($allowNew) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? ' hidden' : '') . '"' . ' id="' . $this->id . '_new"' . ' data-toggle="modal"' . ' data-target="#ModalNew' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_CATEGORIES_NEW_CATEGORY') . '">' . '<span class="icon-new" aria-hidden="true"></span> ' . JText::_('JACTION_CREATE') . '</button>'; } // Edit category button. if ($allowEdit) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_edit"' . ' data-toggle="modal"' . ' data-target="#ModalEdit' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_CATEGORIES_EDIT_CATEGORY') . '">' . '<span class="icon-edit" aria-hidden="true"></span> ' . JText::_('JACTION_EDIT') . '</button>'; } // Clear category button. if ($allowClear) { $html .= '<button' . ' type="button"' . ' class="btn' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_clear"' . ' onclick="window.processModalParent(\'' . $this->id . '\'); return false;">' . '<span class="icon-remove" aria-hidden="true"></span>' . JText::_('JCLEAR') . '</button>'; } // Propagate category button if ($allowPropagate && count($languages) > 2) { // Strip off language tag at the end $tagLength = (int) strlen($this->element['language']); $callbackFunctionStem = substr("jSelectCategory_" . $this->id, 0, -$tagLength); $html .= '<a' . ' class="btn hasTooltip' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_propagate"' . ' href="#"' . ' title="' . JHtml::tooltipText('JGLOBAL_ASSOCIATIONS_PROPAGATE_TIP') . '"' . ' onclick="Joomla.propagateAssociation(\'' . $this->id . '\', \'' . $callbackFunctionStem . '\');">' . '<span class="icon-refresh" aria-hidden="true"></span>' . JText::_('JGLOBAL_ASSOCIATIONS_PROPAGATE_BUTTON') . '</a>'; } $html .= '</span>'; // Select category modal. if ($allowSelect) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalSelect' . $modalId, array( 'title' => $modalTitle, 'url' => $urlSelect, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>', ) ); } // New category modal. if ($allowNew) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalNew' . $modalId, array( 'title' => JText::_('COM_CATEGORIES_NEW_CATEGORY'), 'backdrop' => 'static', 'keyboard' => false, 'closeButton' => false, 'url' => $urlNew, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'category\', \'cancel\', \'item-form\'); return false;">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'category\', \'save\', \'item-form\'); return false;">' . JText::_('JSAVE') . '</button>' . '<button type="button" class="btn btn-success"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'category\', \'apply\', \'item-form\'); return false;">' . JText::_('JAPPLY') . '</button>', ) ); } // Edit category modal. if ($allowEdit) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalEdit' . $modalId, array( 'title' => JText::_('COM_CATEGORIES_EDIT_CATEGORY'), 'backdrop' => 'static', 'keyboard' => false, 'closeButton' => false, 'url' => $urlEdit, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'category\', \'cancel\', \'item-form\'); return false;">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'category\', \'save\', \'item-form\'); return false;">' . JText::_('JSAVE') . '</button>' . '<button type="button" class="btn btn-success"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'category\', \'apply\', \'item-form\'); return false;">' . JText::_('JAPPLY') . '</button>', ) ); } // Note: class='required' for client side validation $class = $this->required ? ' class="required modal-value"' : ''; $html .= '<input type="hidden" id="' . $this->id . '_id"' . $class . ' data-required="' . (int) $this->required . '" name="' . $this->name . '" data-text="' . htmlspecialchars(JText::_('COM_CATEGORIES_SELECT_A_CATEGORY', true), ENT_COMPAT, 'UTF-8') . '" value="' . $value . '" />'; return $html; } /** * Method to get the field label markup. * * @return string The field label markup. * * @since 3.7.0 */ protected function getLabel() { return str_replace($this->id, $this->id . '_id', parent::getLabel()); } } PKb��\wWcʙ�3components/com_categories/models/forms/category.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <field name="id" type="number" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" default="0" class="readonly" readonly="true" /> <field name="hits" type="number" label="JGLOBAL_HITS" description="COM_CATEGORIES_FIELD_HITS_DESC" default="0" class="readonly" readonly="true" /> <field name="asset_id" type="hidden" filter="unset" label="JFIELD_ASSET_ID_LABEL" description="JFIELD_ASSET_ID_DESC" /> <field name="parent_id" type="categoryedit" label="COM_CATEGORIES_FIELD_PARENT_LABEL" description="COM_CATEGORIES_FIELD_PARENT_DESC" /> <field name="lft" type="hidden" filter="unset" /> <field name="rgt" type="hidden" filter="unset" /> <field name="level" type="hidden" filter="unset" /> <field name="path" type="text" label="COM_CATEGORIES_PATH_LABEL" description="COM_CATEGORIES_PATH_DESC" class="readonly" size="40" readonly="true" /> <field name="extension" type="hidden" /> <field name="title" type="text" label="JGLOBAL_TITLE" description="JFIELD_TITLE_DESC" class="input-xxlarge input-large-text" size="40" required="true" /> <field name="alias" type="text" label="JFIELD_ALIAS_LABEL" description="JFIELD_ALIAS_DESC" size="45" hint="JFIELD_ALIAS_PLACEHOLDER" /> <field name="version_note" type="text" label="JGLOBAL_FIELD_VERSION_NOTE_LABEL" description="JGLOBAL_FIELD_VERSION_NOTE_DESC" class="span12" size="45" maxlength="255" /> <field name="note" type="text" label="COM_CATEGORIES_FIELD_NOTE_LABEL" description="COM_CATEGORIES_FIELD_NOTE_DESC" class="span12" size="40" maxlength="255" /> <field name="description" type="editor" label="JGLOBAL_DESCRIPTION" description="COM_CATEGORIES_DESCRIPTION_DESC" filter="JComponentHelper::filterText" buttons="true" hide="readmore,pagebreak" /> <field name="published" type="list" label="JSTATUS" description="JFIELD_PUBLISHED_DESC" default="1" class="chzn-color-state" size="1" > <option value="1">JPUBLISHED</option> <option value="0">JUNPUBLISHED</option> <option value="2">JARCHIVED</option> <option value="-2">JTRASHED</option> </field> <field name="buttonspacer" type="spacer" label="JGLOBAL_ACTION_PERMISSIONS_LABEL" description="JGLOBAL_ACTION_PERMISSIONS_DESCRIPTION" /> <field name="checked_out" type="hidden" filter="unset" /> <field name="checked_out_time" type="hidden" filter="unset" /> <field name="access" type="accesslevel" label="JFIELD_ACCESS_LABEL" description="JFIELD_ACCESS_DESC" /> <field name="metadesc" type="textarea" label="JFIELD_META_DESCRIPTION_LABEL" description="JFIELD_META_DESCRIPTION_DESC" rows="3" cols="40" /> <field name="metakey" type="textarea" label="JFIELD_META_KEYWORDS_LABEL" description="JFIELD_META_KEYWORDS_DESC" rows="3" cols="40" /> <field name="created_user_id" type="user" label="JGLOBAL_FIELD_CREATED_BY_LABEL" desc="JGLOBAL_FIELD_CREATED_BY_DESC" /> <field name="created_time" type="calendar" label="JGLOBAL_CREATED_DATE" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="modified_user_id" type="user" label="JGLOBAL_FIELD_MODIFIED_BY_LABEL" class="readonly" readonly="true" filter="unset" /> <field name="modified_time" type="calendar" label="JGLOBAL_FIELD_MODIFIED_LABEL" class="readonly" translateformat="true" showtime="true" size="22" readonly="true" filter="user_utc" /> <field name="language" type="contentlanguage" label="JFIELD_LANGUAGE_LABEL" description="COM_CATEGORIES_FIELD_LANGUAGE_DESC" > <option value="*">JALL</option> </field> <field name="tags" type="tag" label="JTAG" description="JTAG_DESC" class="span12" multiple="true" /> <field name="rules" type="rules" label="JFIELD_RULES_LABEL" id="rules" translate_label="false" filter="rules" validate="rules" component="com_content" section="category" /> <fields name="params" label="COM_CATEGORIES_FIELD_BASIC_LABEL"> <fieldset name="basic"> <field name="category_layout" type="componentlayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_COMPONENT_LAYOUT_DESC" view="category" useglobal="true" /> <field name="image" type="media" label="COM_CATEGORIES_FIELD_IMAGE_LABEL" description="COM_CATEGORIES_FIELD_IMAGE_DESC" /> <field name="image_alt" type="text" label="COM_CATEGORIES_FIELD_IMAGE_ALT_LABEL" description="COM_CATEGORIES_FIELD_IMAGE_ALT_DESC" size="20" /> </fieldset> </fields> <fields name="metadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS"> <fieldset name="jmetadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS"> <field name="author" type="text" label="JAUTHOR" description="JFIELD_METADATA_AUTHOR_DESC" size="30" /> <field name="robots" type="list" label="JFIELD_METADATA_ROBOTS_LABEL" description="JFIELD_METADATA_ROBOTS_DESC" > <option value="">JGLOBAL_USE_GLOBAL</option> <option value="index, follow">JGLOBAL_INDEX_FOLLOW</option> <option value="noindex, follow">JGLOBAL_NOINDEX_FOLLOW</option> <option value="index, nofollow">JGLOBAL_INDEX_NOFOLLOW</option> <option value="noindex, nofollow">JGLOBAL_NOINDEX_NOFOLLOW</option> </field> </fieldset> </fields> </form> PKb��\��A��<components/com_categories/models/forms/filter_categories.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fields name="filter"> <field name="search" type="text" label="COM_CATEGORIES_FILTER_SEARCH_LABEL" description="COM_CATEGORIES_FILTER_SEARCH_DESC" hint="JSEARCH_FILTER" /> <field name="published" type="status" label="COM_CATEGORIES_FILTER_PUBLISHED" description="COM_CATEGORIES_FILTER_PUBLISHED_DESC" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_PUBLISHED</option> </field> <field name="access" type="accesslevel" label="JOPTION_FILTER_ACCESS" description="JOPTION_FILTER_ACCESS_DESC" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_ACCESS</option> </field> <field name="language" type="contentlanguage" label="JOPTION_FILTER_LANGUAGE" description="JOPTION_FILTER_LANGUAGE_DESC" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_LANGUAGE</option> <option value="*">JALL</option> </field> <field name="tag" type="tag" label="JOPTION_FILTER_TAG" description="JOPTION_FILTER_TAG_DESC" mode="nested" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_TAG</option> </field> <field name="level" type="integer" label="JOPTION_FILTER_LEVEL" description="JOPTION_FILTER_LEVEL_DESC" first="1" last="10" step="1" languages="*" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_MAX_LEVELS</option> </field> </fields> <fields name="list"> <field name="fullordering" type="list" label="JGLOBAL_SORT_BY" description="JGLOBAL_SORT_BY" default="a.lft ASC" statuses="*,0,1,2,-2" onchange="this.form.submit();" > <option value="">JGLOBAL_SORT_BY</option> <option value="a.lft ASC">JGRID_HEADING_ORDERING_ASC</option> <option value="a.lft DESC">JGRID_HEADING_ORDERING_DESC</option> <option value="a.published ASC">JSTATUS_ASC</option> <option value="a.published DESC">JSTATUS_DESC</option> <option value="a.title ASC">JGLOBAL_TITLE_ASC</option> <option value="a.title DESC">JGLOBAL_TITLE_DESC</option> <option value="access_level ASC">JGRID_HEADING_ACCESS_ASC</option> <option value="access_level DESC">JGRID_HEADING_ACCESS_DESC</option> <option value="association ASC" requires="associations">JASSOCIATIONS_ASC</option> <option value="association DESC" requires="associations">JASSOCIATIONS_DESC</option> <option value="language_title ASC">JGRID_HEADING_LANGUAGE_ASC</option> <option value="language_title DESC">JGRID_HEADING_LANGUAGE_DESC</option> <option value="a.id ASC">JGRID_HEADING_ID_ASC</option> <option value="a.id DESC">JGRID_HEADING_ID_DESC</option> </field> <field name="limit" type="limitbox" label="COM_CATEGORIES_LIST_LIMIT" description="COM_CATEGORIES_LIST_LIMIT_DESC" default="25" class="input-mini" onchange="this.form.submit();" /> </fields> </form> PKb��\5��P����-components/com_categories/models/category.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\String\StringHelper; use Joomla\Utilities\ArrayHelper; /** * Categories Component Category Model * * @since 1.6 */ class CategoriesModelCategory extends JModelAdmin { /** * The prefix to use with controller messages. * * @var string * @since 1.6 */ protected $text_prefix = 'COM_CATEGORIES'; /** * The type alias for this content type. Used for content version history. * * @var string * @since 3.2 */ public $typeAlias = null; /** * The context used for the associations table * * @var string * @since 3.4.4 */ protected $associationsContext = 'com_categories.item'; /** * Override parent constructor. * * @param array $config An optional associative array of configuration settings. * * @see JModelLegacy * @since 3.2 */ public function __construct($config = array()) { parent::__construct($config); $extension = JFactory::getApplication()->input->get('extension', 'com_content'); $this->typeAlias = $extension . '.category'; // Add a new batch command $this->batch_commands['flip_ordering'] = 'batchFlipordering'; } /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canDelete($record) { if (empty($record->id) || $record->published != -2) { return false; } return JFactory::getUser()->authorise('core.delete', $record->extension . '.category.' . (int) $record->id); } /** * Method to test whether a record can have its state changed. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canEditState($record) { $user = JFactory::getUser(); // Check for existing category. if (!empty($record->id)) { return $user->authorise('core.edit.state', $record->extension . '.category.' . (int) $record->id); } // New category, so check against the parent. if (!empty($record->parent_id)) { return $user->authorise('core.edit.state', $record->extension . '.category.' . (int) $record->parent_id); } // Default to component settings if neither category nor parent known. return $user->authorise('core.edit.state', $record->extension); } /** * Method to get a table object, load it if necessary. * * @param string $type The table name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A JTable object * * @since 1.6 */ public function getTable($type = 'Category', $prefix = 'CategoriesTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { $app = JFactory::getApplication('administrator'); $parentId = $app->input->getInt('parent_id'); $this->setState('category.parent_id', $parentId); // Load the User state. $pk = $app->input->getInt('id'); $this->setState($this->getName() . '.id', $pk); $extension = $app->input->get('extension', 'com_content'); $this->setState('category.extension', $extension); $parts = explode('.', $extension); // Extract the component name $this->setState('category.component', $parts[0]); // Extract the optional section name $this->setState('category.section', (count($parts) > 1) ? $parts[1] : null); // Load the parameters. $params = JComponentHelper::getParams('com_categories'); $this->setState('params', $params); } /** * Method to get a category. * * @param integer $pk An optional id of the object to get, otherwise the id from the model state is used. * * @return mixed Category data object on success, false on failure. * * @since 1.6 */ public function getItem($pk = null) { if ($result = parent::getItem($pk)) { // Prime required properties. if (empty($result->id)) { $result->parent_id = $this->getState('category.parent_id'); $result->extension = $this->getState('category.extension'); } // Convert the metadata field to an array. $registry = new Registry($result->metadata); $result->metadata = $registry->toArray(); // Convert the created and modified dates to local user time for display in the form. $tz = new DateTimeZone(JFactory::getApplication()->get('offset')); if ((int) $result->created_time) { $date = new JDate($result->created_time); $date->setTimezone($tz); $result->created_time = $date->toSql(true); } else { $result->created_time = null; } if ((int) $result->modified_time) { $date = new JDate($result->modified_time); $date->setTimezone($tz); $result->modified_time = $date->toSql(true); } else { $result->modified_time = null; } if (!empty($result->id)) { $result->tags = new JHelperTags; $result->tags->getTagIds($result->id, $result->extension . '.category'); } } $assoc = $this->getAssoc(); if ($assoc) { if ($result->id != null) { $result->associations = ArrayHelper::toInteger(CategoriesHelper::getAssociations($result->id, $result->extension)); } else { $result->associations = array(); } } return $result; } /** * Method to get the row form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm|boolean A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { $extension = $this->getState('category.extension'); $jinput = JFactory::getApplication()->input; // A workaround to get the extension into the model for save requests. if (empty($extension) && isset($data['extension'])) { $extension = $data['extension']; $parts = explode('.', $extension); $this->setState('category.extension', $extension); $this->setState('category.component', $parts[0]); $this->setState('category.section', @$parts[1]); } // Get the form. $form = $this->loadForm('com_categories.category' . $extension, 'category', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } // Modify the form based on Edit State access controls. if (empty($data['extension'])) { $data['extension'] = $extension; } $categoryId = $jinput->get('id'); $parts = explode('.', $extension); $assetKey = $categoryId ? $extension . '.category.' . $categoryId : $parts[0]; if (!JFactory::getUser()->authorise('core.edit.state', $assetKey)) { // Disable fields for display. $form->setFieldAttribute('ordering', 'disabled', 'true'); $form->setFieldAttribute('published', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is a record you can edit. $form->setFieldAttribute('ordering', 'filter', 'unset'); $form->setFieldAttribute('published', 'filter', 'unset'); } return $form; } /** * A protected method to get the where clause for the reorder * This ensures that the row will be moved relative to a row with the same extension * * @param JTableCategory $table Current table instance * * @return array An array of conditions to add to add to ordering queries. * * @since 1.6 */ protected function getReorderConditions($table) { return 'extension = ' . $this->_db->quote($table->extension); } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $app = JFactory::getApplication(); $data = $app->getUserState('com_categories.edit.' . $this->getName() . '.data', array()); if (empty($data)) { $data = $this->getItem(); // Pre-select some filters (Status, Language, Access) in edit form if those have been selected in Category Manager if (!$data->id) { // Check for which extension the Category Manager is used and get selected fields $extension = substr($app->getUserState('com_categories.categories.filter.extension'), 4); $filters = (array) $app->getUserState('com_categories.categories.' . $extension . '.filter'); $data->set( 'published', $app->input->getInt( 'published', ((isset($filters['published']) && $filters['published'] !== '') ? $filters['published'] : null) ) ); $data->set('language', $app->input->getString('language', (!empty($filters['language']) ? $filters['language'] : null))); $data->set( 'access', $app->input->getInt('access', (!empty($filters['access']) ? $filters['access'] : JFactory::getConfig()->get('access'))) ); } } $this->preprocessData('com_categories.category', $data); return $data; } /** * Method to preprocess the form. * * @param JForm $form A JForm object. * @param mixed $data The data expected for the form. * @param string $group The name of the plugin group to import. * * @return mixed * * @see JFormField * @since 1.6 * @throws Exception if there is an error in the form event. */ protected function preprocessForm(JForm $form, $data, $group = 'content') { jimport('joomla.filesystem.path'); $lang = JFactory::getLanguage(); $component = $this->getState('category.component'); $section = $this->getState('category.section'); $extension = JFactory::getApplication()->input->get('extension', null); // Get the component form if it exists $name = 'category' . ($section ? ('.' . $section) : ''); // Looking first in the component models/forms folder $path = JPath::clean(JPATH_ADMINISTRATOR . "/components/$component/models/forms/$name.xml"); // Old way: looking in the component folder if (!file_exists($path)) { $path = JPath::clean(JPATH_ADMINISTRATOR . "/components/$component/$name.xml"); } if (file_exists($path)) { $lang->load($component, JPATH_BASE, null, false, true); $lang->load($component, JPATH_BASE . '/components/' . $component, null, false, true); if (!$form->loadFile($path, false)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } } // Try to find the component helper. $eName = str_replace('com_', '', $component); $path = JPath::clean(JPATH_ADMINISTRATOR . "/components/$component/helpers/category.php"); if (file_exists($path)) { $cName = ucfirst($eName) . ucfirst($section) . 'HelperCategory'; JLoader::register($cName, $path); if (class_exists($cName) && is_callable(array($cName, 'onPrepareForm'))) { $lang->load($component, JPATH_BASE, null, false, false) || $lang->load($component, JPATH_BASE . '/components/' . $component, null, false, false) || $lang->load($component, JPATH_BASE, $lang->getDefault(), false, false) || $lang->load($component, JPATH_BASE . '/components/' . $component, $lang->getDefault(), false, false); call_user_func_array(array($cName, 'onPrepareForm'), array(&$form)); // Check for an error. if ($form instanceof Exception) { $this->setError($form->getMessage()); return false; } } } // Set the access control rules field component value. $form->setFieldAttribute('rules', 'component', $component); $form->setFieldAttribute('rules', 'section', $name); // Association category items if ($this->getAssoc()) { $languages = JLanguageHelper::getContentLanguages(false, true, null, 'ordering', 'asc'); if (count($languages) > 1) { $addform = new SimpleXMLElement('<form />'); $fields = $addform->addChild('fields'); $fields->addAttribute('name', 'associations'); $fieldset = $fields->addChild('fieldset'); $fieldset->addAttribute('name', 'item_associations'); foreach ($languages as $language) { $field = $fieldset->addChild('field'); $field->addAttribute('name', $language->lang_code); $field->addAttribute('type', 'modal_category'); $field->addAttribute('language', $language->lang_code); $field->addAttribute('label', $language->title); $field->addAttribute('translate_label', 'false'); $field->addAttribute('extension', $extension); $field->addAttribute('select', 'true'); $field->addAttribute('new', 'true'); $field->addAttribute('edit', 'true'); $field->addAttribute('clear', 'true'); $field->addAttribute('propagate', 'true'); } $form->load($addform, false); } } // Trigger the default form events. parent::preprocessForm($form, $data, $group); } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { $dispatcher = JEventDispatcher::getInstance(); $table = $this->getTable(); $input = JFactory::getApplication()->input; $pk = (!empty($data['id'])) ? $data['id'] : (int) $this->getState($this->getName() . '.id'); $isNew = true; $context = $this->option . '.' . $this->name; if (!empty($data['tags']) && $data['tags'][0] != '') { $table->newTags = $data['tags']; } // Include the plugins for the save events. JPluginHelper::importPlugin($this->events_map['save']); // Load the row if saving an existing category. if ($pk > 0) { $table->load($pk); $isNew = false; } // Set the new parent id if parent id not matched OR while New/Save as Copy . if ($table->parent_id != $data['parent_id'] || $data['id'] == 0) { $table->setLocation($data['parent_id'], 'last-child'); } // Alter the title for save as copy if ($input->get('task') == 'save2copy') { $origTable = clone $this->getTable(); $origTable->load($input->getInt('id')); if ($data['title'] == $origTable->title) { list($title, $alias) = $this->generateNewTitle($data['parent_id'], $data['alias'], $data['title']); $data['title'] = $title; $data['alias'] = $alias; } else { if ($data['alias'] == $origTable->alias) { $data['alias'] = ''; } } $data['published'] = 0; } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Bind the rules. if (isset($data['rules'])) { $rules = new JAccessRules($data['rules']); $table->setRules($rules); } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the before save event. $result = $dispatcher->trigger($this->event_before_save, array($context, &$table, $isNew, $data)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } $assoc = $this->getAssoc(); if ($assoc) { // Adding self to the association $associations = isset($data['associations']) ? $data['associations'] : array(); // Unset any invalid associations $associations = Joomla\Utilities\ArrayHelper::toInteger($associations); foreach ($associations as $tag => $id) { if (!$id) { unset($associations[$tag]); } } // Detecting all item menus $allLanguage = $table->language == '*'; if ($allLanguage && !empty($associations)) { JError::raiseNotice(403, JText::_('COM_CATEGORIES_ERROR_ALL_LANGUAGE_ASSOCIATED')); } // Get associationskey for edited item $db = $this->getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('key')) ->from($db->quoteName('#__associations')) ->where($db->quoteName('context') . ' = ' . $db->quote($this->associationsContext)) ->where($db->quoteName('id') . ' = ' . (int) $table->id); $db->setQuery($query); $oldKey = $db->loadResult(); // Deleting old associations for the associated items $query = $db->getQuery(true) ->delete($db->quoteName('#__associations')) ->where($db->quoteName('context') . ' = ' . $db->quote($this->associationsContext)); if ($associations) { $query->where('(' . $db->quoteName('id') . ' IN (' . implode(',', $associations) . ') OR ' . $db->quoteName('key') . ' = ' . $db->quote($oldKey) . ')'); } else { $query->where($db->quoteName('key') . ' = ' . $db->quote($oldKey)); } $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // Adding self to the association if (!$allLanguage) { $associations[$table->language] = (int) $table->id; } if (count($associations) > 1) { // Adding new association for these items $key = md5(json_encode($associations)); $query->clear() ->insert('#__associations'); foreach ($associations as $id) { $query->values(((int) $id) . ',' . $db->quote($this->associationsContext) . ',' . $db->quote($key)); } $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } } } // Trigger the after save event. $dispatcher->trigger($this->event_after_save, array($context, &$table, $isNew, $data)); // Rebuild the path for the category: if (!$table->rebuildPath($table->id)) { $this->setError($table->getError()); return false; } // Rebuild the paths of the category's children: if (!$table->rebuild($table->id, $table->lft, $table->level, $table->path)) { $this->setError($table->getError()); return false; } $this->setState($this->getName() . '.id', $table->id); // Clear the cache $this->cleanCache(); return true; } /** * Method to change the published state of one or more records. * * @param array $pks A list of the primary keys to change. * @param integer $value The value of the published state. * * @return boolean True on success. * * @since 2.5 */ public function publish(&$pks, $value = 1) { if (parent::publish($pks, $value)) { $dispatcher = JEventDispatcher::getInstance(); $extension = JFactory::getApplication()->input->get('extension'); // Include the content plugins for the change of category state event. JPluginHelper::importPlugin('content'); // Trigger the onCategoryChangeState event. $dispatcher->trigger('onCategoryChangeState', array($extension, $pks, $value)); return true; } } /** * Method rebuild the entire nested set tree. * * @return boolean False on failure or error, true otherwise. * * @since 1.6 */ public function rebuild() { // Get an instance of the table object. $table = $this->getTable(); if (!$table->rebuild()) { $this->setError($table->getError()); return false; } // Clear the cache $this->cleanCache(); return true; } /** * Method to save the reordered nested set tree. * First we save the new order values in the lft values of the changed ids. * Then we invoke the table rebuild to implement the new ordering. * * @param array $idArray An array of primary key ids. * @param integer $lft_array The lft value * * @return boolean False on failure or error, True otherwise * * @since 1.6 */ public function saveorder($idArray = null, $lft_array = null) { // Get an instance of the table object. $table = $this->getTable(); if (!$table->saveorder($idArray, $lft_array)) { $this->setError($table->getError()); return false; } // Clear the cache $this->cleanCache(); return true; } /** * Batch tag a list of categories. * * @param integer $value The value of the new tag. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return boolean true if successful; false otherwise. */ protected function batchTag($value, $pks, $contexts) { // Set the variables $user = JFactory::getUser(); $table = $this->getTable(); foreach ($pks as $pk) { if ($user->authorise('core.edit', $contexts[$pk])) { $table->reset(); $table->load($pk); $tags = array($value); /** @var JTableObserverTags $tagsObserver */ $tagsObserver = $table->getObserverOfClass('JTableObserverTags'); $result = $tagsObserver->setNewTags($tags, false); if (!$result) { $this->setError($table->getError()); return false; } } else { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); return false; } } // Clean the cache $this->cleanCache(); return true; } /** * Batch flip category ordering. * * @param integer $value The new category. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return mixed An array of new IDs on success, boolean false on failure. * * @since 3.6.3 */ protected function batchFlipordering($value, $pks, $contexts) { $successful = array(); $db = $this->getDbo(); $query = $db->getQuery(true); /** * For each category get the max ordering value * Re-order with max - ordering */ foreach ($pks as $id) { $query->select('MAX(ordering)') ->from('#__content') ->where($db->qn('catid') . ' = ' . $db->q($id)); $db->setQuery($query); $max = (int) $db->loadresult(); $max++; $query->clear(); $query->update('#__content') ->set($db->qn('ordering') . ' = ' . $max . ' - ' . $db->qn('ordering')) ->where($db->qn('catid') . ' = ' . $db->q($id)); $db->setQuery($query); if ($db->execute()) { $successful[] = $id; } } return empty($successful) ? false : $successful; } /** * Batch copy categories to a new category. * * @param integer $value The new category. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return mixed An array of new IDs on success, boolean false on failure. * * @since 1.6 */ protected function batchCopy($value, $pks, $contexts) { $type = new JUcmType; $this->type = $type->getTypeByAlias($this->typeAlias); // $value comes as {parent_id}.{extension} $parts = explode('.', $value); $parentId = (int) ArrayHelper::getValue($parts, 0, 1); $db = $this->getDbo(); $extension = JFactory::getApplication()->input->get('extension', '', 'word'); $newIds = array(); // Check that the parent exists if ($parentId) { if (!$this->table->load($parentId)) { if ($error = $this->table->getError()) { // Fatal error $this->setError($error); return false; } else { // Non-fatal error $this->setError(JText::_('JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND')); $parentId = 0; } } // Check that user has create permission for parent category if ($parentId == $this->table->getRootId()) { $canCreate = $this->user->authorise('core.create', $extension); } else { $canCreate = $this->user->authorise('core.create', $extension . '.category.' . $parentId); } if (!$canCreate) { // Error since user cannot create in parent category $this->setError(JText::_('COM_CATEGORIES_BATCH_CANNOT_CREATE')); return false; } } // If the parent is 0, set it to the ID of the root item in the tree if (empty($parentId)) { if (!$parentId = $this->table->getRootId()) { $this->setError($db->getErrorMsg()); return false; } // Make sure we can create in root elseif (!$this->user->authorise('core.create', $extension)) { $this->setError(JText::_('COM_CATEGORIES_BATCH_CANNOT_CREATE')); return false; } } // We need to log the parent ID $parents = array(); // Calculate the emergency stop count as a precaution against a runaway loop bug $query = $db->getQuery(true) ->select('COUNT(id)') ->from($db->quoteName('#__categories')); $db->setQuery($query); try { $count = $db->loadResult(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // Parent exists so let's proceed while (!empty($pks) && $count > 0) { // Pop the first id off the stack $pk = array_shift($pks); $this->table->reset(); // Check that the row actually exists if (!$this->table->load($pk)) { if ($error = $this->table->getError()) { // Fatal error $this->setError($error); return false; } else { // Not fatal error $this->setError(JText::sprintf('JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND', $pk)); continue; } } // Copy is a bit tricky, because we also need to copy the children $query->clear() ->select('id') ->from($db->quoteName('#__categories')) ->where('lft > ' . (int) $this->table->lft) ->where('rgt < ' . (int) $this->table->rgt); $db->setQuery($query); $childIds = $db->loadColumn(); // Add child ID's to the array only if they aren't already there. foreach ($childIds as $childId) { if (!in_array($childId, $pks)) { $pks[] = $childId; } } // Make a copy of the old ID, Parent ID and Asset ID $oldId = $this->table->id; $oldParentId = $this->table->parent_id; $oldAssetId = $this->table->asset_id; // Reset the id because we are making a copy. $this->table->id = 0; // If we a copying children, the Old ID will turn up in the parents list // otherwise it's a new top level item $this->table->parent_id = isset($parents[$oldParentId]) ? $parents[$oldParentId] : $parentId; // Set the new location in the tree for the node. $this->table->setLocation($this->table->parent_id, 'last-child'); // @TODO: Deal with ordering? // $this->table->ordering = 1; $this->table->level = null; $this->table->asset_id = null; $this->table->lft = null; $this->table->rgt = null; // Alter the title & alias list($title, $alias) = $this->generateNewTitle($this->table->parent_id, $this->table->alias, $this->table->title); $this->table->title = $title; $this->table->alias = $alias; // Unpublish because we are making a copy $this->table->published = 0; $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); // Store the row. if (!$this->table->store()) { $this->setError($this->table->getError()); return false; } // Get the new item ID $newId = $this->table->get('id'); // Add the new ID to the array $newIds[$pk] = $newId; // Copy rules $query->clear() ->update($db->quoteName('#__assets', 't')) ->join('INNER', $db->quoteName('#__assets', 's') . ' ON ' . $db->quoteName('s.id') . ' = ' . $oldAssetId ) ->set($db->quoteName('t.rules') . ' = ' . $db->quoteName('s.rules')) ->where($db->quoteName('t.id') . ' = ' . $this->table->asset_id); $db->setQuery($query)->execute(); // Now we log the old 'parent' to the new 'parent' $parents[$oldId] = $this->table->id; $count--; } // Rebuild the hierarchy. if (!$this->table->rebuild()) { $this->setError($this->table->getError()); return false; } // Rebuild the tree path. if (!$this->table->rebuildPath($this->table->id)) { $this->setError($this->table->getError()); return false; } return $newIds; } /** * Batch move categories to a new category. * * @param integer $value The new category ID. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return boolean True on success. * * @since 1.6 */ protected function batchMove($value, $pks, $contexts) { $parentId = (int) $value; $type = new JUcmType; $this->type = $type->getTypeByAlias($this->typeAlias); $db = $this->getDbo(); $query = $db->getQuery(true); $extension = JFactory::getApplication()->input->get('extension', '', 'word'); // Check that the parent exists. if ($parentId) { if (!$this->table->load($parentId)) { if ($error = $this->table->getError()) { // Fatal error. $this->setError($error); return false; } else { // Non-fatal error. $this->setError(JText::_('JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND')); $parentId = 0; } } // Check that user has create permission for parent category. if ($parentId == $this->table->getRootId()) { $canCreate = $this->user->authorise('core.create', $extension); } else { $canCreate = $this->user->authorise('core.create', $extension . '.category.' . $parentId); } if (!$canCreate) { // Error since user cannot create in parent category $this->setError(JText::_('COM_CATEGORIES_BATCH_CANNOT_CREATE')); return false; } // Check that user has edit permission for every category being moved // Note that the entire batch operation fails if any category lacks edit permission foreach ($pks as $pk) { if (!$this->user->authorise('core.edit', $extension . '.category.' . $pk)) { // Error since user cannot edit this category $this->setError(JText::_('COM_CATEGORIES_BATCH_CANNOT_EDIT')); return false; } } } // We are going to store all the children and just move the category $children = array(); // Parent exists so let's proceed foreach ($pks as $pk) { // Check that the row actually exists if (!$this->table->load($pk)) { if ($error = $this->table->getError()) { // Fatal error $this->setError($error); return false; } else { // Not fatal error $this->setError(JText::sprintf('JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND', $pk)); continue; } } // Set the new location in the tree for the node. $this->table->setLocation($parentId, 'last-child'); // Check if we are moving to a different parent if ($parentId != $this->table->parent_id) { // Add the child node ids to the children array. $query->clear() ->select('id') ->from($db->quoteName('#__categories')) ->where($db->quoteName('lft') . ' BETWEEN ' . (int) $this->table->lft . ' AND ' . (int) $this->table->rgt); $db->setQuery($query); try { $children = array_merge($children, (array) $db->loadColumn()); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } } $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); // Store the row. if (!$this->table->store()) { $this->setError($this->table->getError()); return false; } // Rebuild the tree path. if (!$this->table->rebuildPath()) { $this->setError($this->table->getError()); return false; } } // Process the child rows if (!empty($children)) { // Remove any duplicates and sanitize ids. $children = array_unique($children); $children = ArrayHelper::toInteger($children); } return true; } /** * Custom clean the cache of com_content and content modules * * @param string $group Cache group name. * @param integer $client_id Application client id. * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { $extension = JFactory::getApplication()->input->get('extension'); switch ($extension) { case 'com_content': parent::cleanCache('com_content'); parent::cleanCache('mod_articles_archive'); parent::cleanCache('mod_articles_categories'); parent::cleanCache('mod_articles_category'); parent::cleanCache('mod_articles_latest'); parent::cleanCache('mod_articles_news'); parent::cleanCache('mod_articles_popular'); break; default: parent::cleanCache($extension); break; } } /** * Method to change the title & alias. * * @param integer $parent_id The id of the parent. * @param string $alias The alias. * @param string $title The title. * * @return array Contains the modified title and alias. * * @since 1.7 */ protected function generateNewTitle($parent_id, $alias, $title) { // Alter the title & alias $table = $this->getTable(); while ($table->load(array('alias' => $alias, 'parent_id' => $parent_id))) { $title = StringHelper::increment($title); $alias = StringHelper::increment($alias, 'dash'); } return array($title, $alias); } /** * Method to determine if a category association is available. * * @return boolean True if a category association is available; false otherwise. */ public function getAssoc() { static $assoc = null; if (!is_null($assoc)) { return $assoc; } $extension = $this->getState('category.extension'); $assoc = JLanguageAssociations::isEnabled(); $extension = explode('.', $extension); $component = array_shift($extension); $cname = str_replace('com_', '', $component); if (!$assoc || !$component || !$cname) { $assoc = false; } else { $hname = $cname . 'HelperAssociation'; JLoader::register($hname, JPATH_SITE . '/components/' . $component . '/helpers/association.php'); $assoc = class_exists($hname) && !empty($hname::$category_association); } return $assoc; } } PKb��\��4��)�)/components/com_categories/models/categories.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Categories Component Categories Model * * @since 1.6 */ class CategoriesModelCategories extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JControllerLegacy * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'title', 'a.title', 'alias', 'a.alias', 'published', 'a.published', 'access', 'a.access', 'access_level', 'language', 'a.language', 'language_title', 'checked_out', 'a.checked_out', 'checked_out_time', 'a.checked_out_time', 'created_time', 'a.created_time', 'created_user_id', 'a.created_user_id', 'lft', 'a.lft', 'rgt', 'a.rgt', 'level', 'a.level', 'path', 'a.path', 'tag', ); } if (JLanguageAssociations::isEnabled()) { $config['filter_fields'][] = 'association'; } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.lft', $direction = 'asc') { $app = JFactory::getApplication(); $forcedLanguage = $app->input->get('forcedLanguage', '', 'cmd'); // Adjust the context to support modal layouts. if ($layout = $app->input->get('layout')) { $this->context .= '.' . $layout; } // Adjust the context to support forced languages. if ($forcedLanguage) { $this->context .= '.' . $forcedLanguage; } $extension = $app->getUserStateFromRequest($this->context . '.filter.extension', 'extension', 'com_content', 'cmd'); $this->setState('filter.extension', $extension); $parts = explode('.', $extension); // Extract the component name $this->setState('filter.component', $parts[0]); // Extract the optional section name $this->setState('filter.section', (count($parts) > 1) ? $parts[1] : null); $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.search', 'filter_search', '', 'string')); $this->setState('filter.published', $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', '', 'string')); $this->setState('filter.access', $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', '', 'cmd')); $this->setState('filter.language', $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', '', 'string')); $this->setState('filter.tag', $this->getUserStateFromRequest($this->context . '.filter.tag', 'filter_tag', '', 'string')); $this->setState('filter.level', $this->getUserStateFromRequest($this->context . '.filter.level', 'filter_level', '', 'string')); // List state information. parent::populateState($ordering, $direction); // Force a language. if (!empty($forcedLanguage)) { $this->setState('filter.language', $forcedLanguage); } } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.extension'); $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.published'); $id .= ':' . $this->getState('filter.access'); $id .= ':' . $this->getState('filter.language'); $id .= ':' . $this->getState('filter.level'); $id .= ':' . $this->getState('filter.tag'); return parent::getStoreId($id); } /** * Method to get a database query to list categories. * * @return JDatabaseQuery object. * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.title, a.alias, a.note, a.published, a.access' . ', a.checked_out, a.checked_out_time, a.created_user_id' . ', a.path, a.parent_id, a.level, a.lft, a.rgt' . ', a.language' ) ); $query->from('#__categories AS a'); // Join over the language $query->select('l.title AS language_title, l.image AS language_image') ->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = a.language'); // Join over the users for the checked out user. $query->select('uc.name AS editor') ->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Join over the asset groups. $query->select('ag.title AS access_level') ->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Join over the users for the author. $query->select('ua.name AS author_name') ->join('LEFT', '#__users AS ua ON ua.id = a.created_user_id'); // Join over the associations. $assoc = $this->getAssoc(); if ($assoc) { $query->select('COUNT(asso2.id)>1 as association') ->join('LEFT', '#__associations AS asso ON asso.id = a.id AND asso.context=' . $db->quote('com_categories.item')) ->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key') ->group('a.id, l.title, uc.name, ag.title, ua.name'); } // Filter by extension if ($extension = $this->getState('filter.extension')) { $query->where('a.extension = ' . $db->quote($extension)); } // Filter on the level. if ($level = $this->getState('filter.level')) { $query->where('a.level <= ' . (int) $level); } // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = ' . (int) $access); } // Implement View Level Access if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN (' . $groups . ')'); } // Filter by published state $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.published = ' . (int) $published); } elseif ($published === '') { $query->where('(a.published IN (0, 1))'); } // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = ' . (int) substr($search, 3)); } else { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('(a.title LIKE ' . $search . ' OR a.alias LIKE ' . $search . ' OR a.note LIKE ' . $search . ')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where('a.language = ' . $db->quote($language)); } // Filter by a single tag. $tagId = $this->getState('filter.tag'); if (is_numeric($tagId)) { $query->where($db->quoteName('tagmap.tag_id') . ' = ' . (int) $tagId) ->join( 'LEFT', $db->quoteName('#__contentitem_tag_map', 'tagmap') . ' ON ' . $db->quoteName('tagmap.content_item_id') . ' = ' . $db->quoteName('a.id') . ' AND ' . $db->quoteName('tagmap.type_alias') . ' = ' . $db->quote($extension . '.category') ); } // Add the list ordering clause $listOrdering = $this->getState('list.ordering', 'a.lft'); $listDirn = $db->escape($this->getState('list.direction', 'ASC')); if ($listOrdering == 'a.access') { $query->order('a.access ' . $listDirn . ', a.lft ' . $listDirn); } else { $query->order($db->escape($listOrdering) . ' ' . $listDirn); } // Group by on Categories for JOIN with component tables to count items $query->group('a.id, a.title, a.alias, a.note, a.published, a.access, a.checked_out, a.checked_out_time, a.created_user_id, a.path, a.parent_id, a.level, a.lft, a.rgt, a.language, l.title, l.image, uc.name, ag.title, ua.name' ); return $query; } /** * Method to determine if an association exists * * @return boolean True if the association exists * * @since 3.0 */ public function getAssoc() { static $assoc = null; if (!is_null($assoc)) { return $assoc; } $extension = $this->getState('filter.extension'); $assoc = JLanguageAssociations::isEnabled(); $extension = explode('.', $extension); $component = array_shift($extension); $cname = str_replace('com_', '', $component); if (!$assoc || !$component || !$cname) { $assoc = false; } else { $hname = $cname . 'HelperAssociation'; JLoader::register($hname, JPATH_SITE . '/components/' . $component . '/helpers/association.php'); $assoc = class_exists($hname) && !empty($hname::$category_association); } return $assoc; } /** * Method to get an array of data items. * * @return mixed An array of data items on success, false on failure. * * @since 3.0.1 */ public function getItems() { $items = parent::getItems(); if ($items != false) { $extension = $this->getState('filter.extension'); $this->countItems($items, $extension); } return $items; } /** * Method to load the countItems method from the extensions * * @param stdClass[] $items The category items * @param string $extension The category extension * * @return void * * @since 3.5 */ public function countItems(&$items, $extension) { $parts = explode('.', $extension, 2); $component = $parts[0]; $section = null; if (count($parts) > 1) { $section = $parts[1]; } // Try to find the component helper. $eName = str_replace('com_', '', $component); $file = JPath::clean(JPATH_ADMINISTRATOR . '/components/' . $component . '/helpers/' . $eName . '.php'); if (file_exists($file)) { $prefix = ucfirst($eName); $cName = $prefix . 'Helper'; JLoader::register($cName, $file); if (class_exists($cName) && is_callable(array($cName, 'countItems'))) { $cName::countItems($items, $section); } } } } PKb��\���88(components/com_categories/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_categories * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Categories view class for the Category package. * * @since 1.6 */ class CategoriesController extends JControllerLegacy { /** * The extension for which the categories apply. * * @var string * @since 1.6 */ protected $extension; /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JControllerLegacy * @since 1.6 */ public function __construct($config = array()) { parent::__construct($config); // Guess the JText message prefix. Defaults to the option. if (empty($this->extension)) { $this->extension = $this->input->get('extension', 'com_content'); } } /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return CategoriesController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = array()) { // Get the document object. $document = JFactory::getDocument(); // Set the default view name and format from the Request. $vName = $this->input->get('view', 'categories'); $vFormat = $document->getType(); $lName = $this->input->get('layout', 'default', 'string'); $id = $this->input->getInt('id'); // Check for edit form. if ($vName == 'category' && $lName == 'edit' && !$this->checkEditId('com_categories.edit.category', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_categories&view=categories&extension=' . $this->extension, false)); return false; } // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { // Get the model for the view. $model = $this->getModel($vName, 'CategoriesModel', array('name' => $vName . '.' . substr($this->extension, 4))); // Push the model into the view (as default). $view->setModel($model, true); $view->setLayout($lName); // Push document object into the view. $view->document = $document; // Load the submenu. JLoader::register('CategoriesHelper', JPATH_ADMINISTRATOR . '/components/com_categories/helpers/categories.php'); CategoriesHelper::addSubmenu($model->getState('filter.extension')); $view->display(); } return $this; } } PKb��\��ǜ��)components/com_templates/tables/style.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; /** * Template style table class. * * @since 1.6 */ class TemplatesTableStyle extends JTable { /** * Constructor * * @param JDatabaseDriver &$db A database connector object * * @since 1.6 */ public function __construct(&$db) { parent::__construct('#__template_styles', 'id', $db); } /** * Overloaded bind function to pre-process the params. * * @param array $array Named array * @param mixed $ignore An optional array or space separated list of properties to ignore while binding. * * @return null|string null if operation was satisfactory, otherwise returns an error * * @since 1.6 */ public function bind($array, $ignore = '') { if (isset($array['params']) && is_array($array['params'])) { $registry = new Registry($array['params']); $array['params'] = (string) $registry; } // Verify that the default style is not unset if ($array['home'] == '0' && $this->home == '1') { $this->setError(JText::_('COM_TEMPLATES_ERROR_CANNOT_UNSET_DEFAULT_STYLE')); return false; } return parent::bind($array, $ignore); } /** * Overloaded check method to ensure data integrity. * * @return boolean True on success. * * @since 1.6 */ public function check() { if (empty($this->title)) { $this->setError(JText::_('COM_TEMPLATES_ERROR_STYLE_REQUIRES_TITLE')); return false; } return true; } /** * Overloaded store method to ensure unicity of default style. * * @param boolean $updateNulls True to update fields even if they are null. * * @return boolean True on success. * * @since 1.6 */ public function store($updateNulls = false) { if ($this->home != '0') { $query = $this->_db->getQuery(true) ->update('#__template_styles') ->set('home=\'0\'') ->where('client_id=' . (int) $this->client_id) ->where('home=' . $this->_db->quote($this->home)); $this->_db->setQuery($query); $this->_db->execute(); } return parent::store($updateNulls); } /** * Overloaded store method to unsure existence of a default style for a template. * * @param mixed $pk An optional primary key value to delete. If not set the instance property value is used. * * @return boolean True on success. * * @since 1.6 */ public function delete($pk = null) { $k = $this->_tbl_key; $pk = is_null($pk) ? $this->$k : $pk; if (!is_null($pk)) { $query = $this->_db->getQuery(true) ->from('#__template_styles') ->select('id') ->where('client_id=' . (int) $this->client_id) ->where('template=' . $this->_db->quote($this->template)); $this->_db->setQuery($query); $results = $this->_db->loadColumn(); if (count($results) == 1 && $results[0] == $pk) { $this->setError(JText::_('COM_TEMPLATES_ERROR_CANNOT_DELETE_LAST_STYLE')); return false; } } return parent::delete($pk); } } PKb��\�z����.components/com_templates/controllers/style.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Template style controller class. * * @since 1.6 */ class TemplatesControllerStyle extends JControllerForm { /** * The prefix to use with controller messages. * * @var string * @since 1.6 */ protected $text_prefix = 'COM_TEMPLATES_STYLE'; /** * Method to save a template style. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). * * @return boolean True if successful, false otherwise. * * @since 1.6 */ public function save($key = null, $urlVar = null) { $this->checkToken(); $document = JFactory::getDocument(); if ($document->getType() === 'json') { $app = JFactory::getApplication(); $lang = JFactory::getLanguage(); $model = $this->getModel(); $table = $model->getTable(); $data = $this->input->post->get('params', array(), 'array'); $checkin = property_exists($table, 'checked_out'); $context = $this->option . '.edit.' . $this->context; $task = $this->getTask(); $item = $model->getItem($app->getTemplate(true)->id); // Setting received params $item->set('params', $data); $data = $item->getProperties(); unset($data['xml']); $key = $table->getKeyName(); // Access check. if (!$this->allowSave($data, $key)) { $app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'), 'error'); return false; } JForm::addFormPath(JPATH_ADMINISTRATOR . '/components/com_templates/models/forms'); // Validate the posted data. // Sometimes the form needs some posted data, such as for plugins and modules. $form = $model->getForm($data, false); if (!$form) { $app->enqueueMessage($model->getError(), 'error'); return false; } // Test whether the data is valid. $validData = $model->validate($form, $data); if ($validData === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState($context . '.data', $data); return false; } if (!isset($validData['tags'])) { $validData['tags'] = null; } // Attempt to save the data. if (!$model->save($validData)) { // Save the data in the session. $app->setUserState($context . '.data', $validData); $app->enqueueMessage(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError()), 'error'); return false; } // Save succeeded, so check-in the record. if ($checkin && $model->checkin($validData[$key]) === false) { // Save the data in the session. $app->setUserState($context . '.data', $validData); // Check-in failed, so go back to the record and display a notice. $app->enqueueMessage(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError()), 'error'); return false; } // Redirect the user and adjust session state // Set the record data in the session. $recordId = $model->getState($this->context . '.id'); $this->holdEditId($context, $recordId); $app->setUserState($context . '.data', null); $model->checkout($recordId); // Invoke the postSave method to allow for the child class to access the model. $this->postSaveHook($model, $validData); return true; } else { parent::save($key, $urlVar); } } } PKb��\�F�9�Q�Q1components/com_templates/controllers/template.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('InstallerModelInstall', JPATH_ADMINISTRATOR . '/components/com_installer/models/install.php'); /** * Template style controller class. * * @since 1.6 */ class TemplatesControllerTemplate extends JControllerLegacy { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JControllerLegacy * @since 3.2 */ public function __construct($config = array()) { parent::__construct($config); // Apply, Save & New, and Save As copy should be standard on forms. $this->registerTask('apply', 'save'); } /** * Method for closing the template. * * @return void * * @since 3.2 */ public function cancel() { $this->setRedirect(JRoute::_('index.php?option=com_templates&view=templates', false)); } /** * Method for closing a file. * * @return void * * @since 3.2 */ public function close() { $app = JFactory::getApplication(); $file = base64_encode('home'); $id = $app->input->get('id'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } /** * Method for copying the template. * * @return boolean true on success, false otherwise * * @since 3.2 */ public function copy() { // Check for request forgeries $this->checkToken(); $app = JFactory::getApplication(); $this->input->set('installtype', 'folder'); $newName = $this->input->get('new_name'); $newNameRaw = $this->input->get('new_name', null, 'string'); $templateID = $this->input->getInt('id', 0); $file = $this->input->get('file'); $this->setRedirect('index.php?option=com_templates&view=template&id=' . $templateID . '&file=' . $file); $model = $this->getModel('Template', 'TemplatesModel'); $model->setState('new_name', $newName); $model->setState('tmp_prefix', uniqid('template_copy_')); $model->setState('to_path', JFactory::getConfig()->get('tmp_path') . '/' . $model->getState('tmp_prefix')); // Process only if we have a new name entered if (strlen($newName) > 0) { if (!JFactory::getUser()->authorise('core.create', 'com_templates')) { // User is not authorised to delete $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_CREATE_NOT_PERMITTED'), 'error'); return false; } // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); // Check that new name is valid if (($newNameRaw !== null) && ($newName !== $newNameRaw)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_INVALID_TEMPLATE_NAME'), 'error'); return false; } // Check that new name doesn't already exist if (!$model->checkNewName()) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_DUPLICATE_TEMPLATE_NAME'), 'error'); return false; } // Check that from name does exist and get the folder name $fromName = $model->getFromName(); if (!$fromName) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_INVALID_FROM_NAME'), 'error'); return false; } // Call model's copy method if (!$model->copy()) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_COULD_NOT_COPY'), 'error'); return false; } // Call installation model $this->input->set('install_directory', JFactory::getConfig()->get('tmp_path') . '/' . $model->getState('tmp_prefix')); $installModel = $this->getModel('Install', 'InstallerModel'); JFactory::getLanguage()->load('com_installer'); if (!$installModel->install()) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_COULD_NOT_INSTALL'), 'error'); return false; } $this->setMessage(JText::sprintf('COM_TEMPLATES_COPY_SUCCESS', $newName)); $model->cleanup(); return true; } } /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional (note, the empty array is atypical compared to other models). * * @return JModelLegacy The model. * * @since 3.2 */ public function getModel($name = 'Template', $prefix = 'TemplatesModel', $config = array()) { return parent::getModel($name, $prefix, $config); } /** * Method to check if you can add a new record. * * @return boolean * * @since 3.2 */ protected function allowEdit() { return JFactory::getUser()->authorise('core.edit', 'com_templates'); } /** * Method to check if you can save a new or existing record. * * @return boolean * * @since 3.2 */ protected function allowSave() { return $this->allowEdit(); } /** * Saves a template source file. * * @return void * * @since 3.2 */ public function save() { // Check for request forgeries. $this->checkToken(); $app = JFactory::getApplication(); $data = $this->input->post->get('jform', array(), 'array'); $task = $this->getTask(); $model = $this->getModel(); $fileName = $app->input->get('file'); $explodeArray = explode(':', base64_decode($fileName)); // Access check. if (!$this->allowSave()) { $app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'), 'error'); return false; } // Match the stored id's with the submitted. if (empty($data['extension_id']) || empty($data['filename'])) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_ID_FILENAME_MISMATCH'), 'error'); return false; } elseif ($data['extension_id'] != $model->getState('extension.id')) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_ID_FILENAME_MISMATCH'), 'error'); return false; } elseif ($data['filename'] != end($explodeArray)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_ID_FILENAME_MISMATCH'), 'error'); return false; } // Validate the posted data. $form = $model->getForm(); if (!$form) { $app->enqueueMessage($model->getError(), 'error'); return false; } $data = $model->validate($form, $data); // Check for validation errors. if ($data === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Redirect back to the edit screen. $url = 'index.php?option=com_templates&view=template&id=' . $model->getState('extension.id') . '&file=' . $fileName; $this->setRedirect(JRoute::_($url, false)); return false; } // Attempt to save the data. if (!$model->save($data)) { // Redirect back to the edit screen. $this->setMessage(JText::sprintf('JERROR_SAVE_FAILED', $model->getError()), 'warning'); $url = 'index.php?option=com_templates&view=template&id=' . $model->getState('extension.id') . '&file=' . $fileName; $this->setRedirect(JRoute::_($url, false)); return false; } $this->setMessage(JText::_('COM_TEMPLATES_FILE_SAVE_SUCCESS')); // Redirect the user based on the chosen task. switch ($task) { case 'apply': // Redirect back to the edit screen. $url = 'index.php?option=com_templates&view=template&id=' . $model->getState('extension.id') . '&file=' . $fileName; $this->setRedirect(JRoute::_($url, false)); break; default: // Redirect to the list screen. $file = base64_encode('home'); $id = $app->input->get('id'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); break; } } /** * Method for creating override. * * @return void * * @since 3.2 */ public function overrides() { $app = JFactory::getApplication(); $model = $this->getModel(); $file = $app->input->get('file'); $override = base64_decode($app->input->get('folder')); $id = $app->input->get('id'); if ($model->createOverride($override)) { $this->setMessage(JText::_('COM_TEMPLATES_OVERRIDE_SUCCESS')); } // Redirect back to the edit screen. $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } /** * Method for compiling LESS. * * @return void * * @since 3.2 */ public function less() { $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); $file = $app->input->get('file'); if ($model->compileLess($file)) { $this->setMessage(JText::_('COM_TEMPLATES_COMPILE_SUCCESS')); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_COMPILE_ERROR'), 'error'); } $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } /** * Method for deleting a file. * * @return void * * @since 3.2 */ public function delete() { // Check for request forgeries $this->checkToken(); $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); $file = $app->input->get('file'); if (base64_decode(urldecode($file)) == '/index.php') { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_INDEX_DELETE'), 'warning'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } elseif ($model->deleteFile($file)) { $this->setMessage(JText::_('COM_TEMPLATES_FILE_DELETE_SUCCESS')); $file = base64_encode('home'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FILE_DELETE'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } } /** * Method for creating a new file. * * @return void * * @since 3.2 */ public function createFile() { // Check for request forgeries $this->checkToken(); $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); $file = $app->input->get('file'); $name = $app->input->get('name'); $location = base64_decode($app->input->get('address')); $type = $app->input->get('type'); if ($type == 'null') { $app->enqueueMessage(JText::_('COM_TEMPLATES_INVALID_FILE_TYPE'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } elseif (!preg_match('/^[a-zA-Z0-9-_]+$/', $name)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_INVALID_FILE_NAME'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } elseif ($model->createFile($name, $type, $location)) { $this->setMessage(JText::_('COM_TEMPLATES_FILE_CREATE_SUCCESS')); $file = urlencode(base64_encode($location . '/' . $name . '.' . $type)); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FILE_CREATE'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } } /** * Method for uploading a file. * * @return void * * @since 3.2 */ public function uploadFile() { // Check for request forgeries $this->checkToken(); $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); $file = $app->input->get('file'); $upload = $app->input->files->get('files'); $location = base64_decode($app->input->get('address')); if ($return = $model->uploadFile($upload, $location)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_UPLOAD_SUCCESS') . $upload['name']); $redirect = base64_encode($return); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $redirect; $this->setRedirect(JRoute::_($url, false)); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FILE_UPLOAD'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } } /** * Method for creating a new folder. * * @return void * * @since 3.2 */ public function createFolder() { // Check for request forgeries $this->checkToken(); $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); $file = $app->input->get('file'); $name = $app->input->get('name'); $location = base64_decode($app->input->get('address')); if (!preg_match('/^[a-zA-Z0-9-_.]+$/', $name)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_INVALID_FOLDER_NAME'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } elseif ($model->createFolder($name, $location)) { $this->setMessage(JText::_('COM_TEMPLATES_FOLDER_CREATE_SUCCESS')); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FOLDER_CREATE'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } } /** * Method for deleting a folder. * * @return void * * @since 3.2 */ public function deleteFolder() { // Check for request forgeries $this->checkToken(); $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); $file = $app->input->get('file'); $location = base64_decode($app->input->get('address')); if (empty($location)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_ROOT_DELETE'), 'warning'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } elseif ($model->deleteFolder($location)) { $this->setMessage(JText::_('COM_TEMPLATES_FOLDER_DELETE_SUCCESS')); if (stristr(base64_decode($file), $location) != false) { $file = base64_encode('home'); } $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_FOLDER_DELETE_ERROR'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } } /** * Method for renaming a file. * * @return void * * @since 3.2 */ public function renameFile() { // Check for request forgeries $this->checkToken(); $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); $file = $app->input->get('file'); $newName = $app->input->get('new_name'); if (base64_decode(urldecode($file)) == '/index.php') { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_RENAME_INDEX'), 'warning'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } elseif (!preg_match('/^[a-zA-Z0-9-_]+$/', $newName)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_INVALID_FILE_NAME'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } elseif ($rename = $model->renameFile($file, $newName)) { $this->setMessage(JText::_('COM_TEMPLATES_FILE_RENAME_SUCCESS')); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $rename; $this->setRedirect(JRoute::_($url, false)); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FILE_RENAME'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } } /** * Method for cropping an image. * * @return void * * @since 3.2 */ public function cropImage() { $app = JFactory::getApplication(); $id = $app->input->get('id'); $file = $app->input->get('file'); $x = $app->input->get('x'); $y = $app->input->get('y'); $w = $app->input->get('w'); $h = $app->input->get('h'); $model = $this->getModel(); if (empty($w) && empty($h) && empty($x) && empty($y)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_CROP_AREA_ERROR'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } elseif ($model->cropImage($file, $w, $h, $x, $y)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_CROP_SUCCESS')); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_CROP_ERROR'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } } /** * Method for resizing an image. * * @return void * * @since 3.2 */ public function resizeImage() { $app = JFactory::getApplication(); $id = $app->input->get('id'); $file = $app->input->get('file'); $width = $app->input->get('width'); $height = $app->input->get('height'); $model = $this->getModel(); if ($model->resizeImage($file, $width, $height)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_RESIZE_SUCCESS')); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_RESIZE_ERROR'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } } /** * Method for copying a file. * * @return void * * @since 3.2 */ public function copyFile() { // Check for request forgeries $this->checkToken(); $app = JFactory::getApplication(); $id = $app->input->get('id'); $file = $app->input->get('file'); $newName = $app->input->get('new_name'); $location = base64_decode($app->input->get('address')); $model = $this->getModel(); if (!preg_match('/^[a-zA-Z0-9-_]+$/', $newName)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_INVALID_FILE_NAME'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } elseif ($model->copyFile($newName, $location, $file)) { $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_COPY_FAIL'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } } /** * Method for extracting an archive file. * * @return void * * @since 3.2 */ public function extractArchive() { // Check for request forgeries $this->checkToken(); $app = JFactory::getApplication(); $id = $app->input->get('id'); $file = $app->input->get('file'); $model = $this->getModel(); if ($model->extractArchive($file)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_EXTRACT_SUCCESS')); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_EXTRACT_FAIL'), 'error'); $url = 'index.php?option=com_templates&view=template&id=' . $id . '&file=' . $file; $this->setRedirect(JRoute::_($url, false)); } } } PKb��\;���/components/com_templates/controllers/styles.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Template styles list controller class. * * @since 1.6 */ class TemplatesControllerStyles extends JControllerAdmin { /** * Method to clone and existing template style. * * @return void */ public function duplicate() { // Check for request forgeries $this->checkToken(); $pks = $this->input->post->get('cid', array(), 'array'); try { if (empty($pks)) { throw new Exception(JText::_('COM_TEMPLATES_NO_TEMPLATE_SELECTED')); } $pks = ArrayHelper::toInteger($pks); $model = $this->getModel(); $model->duplicate($pks); $this->setMessage(JText::_('COM_TEMPLATES_SUCCESS_DUPLICATED')); } catch (Exception $e) { JError::raiseWarning(500, $e->getMessage()); } $this->setRedirect('index.php?option=com_templates&view=styles'); } /** * Proxy for getModel. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return JModelLegacy * * @since 1.6 */ public function getModel($name = 'Style', $prefix = 'TemplatesModel', $config = array()) { return parent::getModel($name, $prefix, array('ignore_request' => true)); } /** * Method to set the home template for a client. * * @return void * * @since 1.6 */ public function setDefault() { // Check for request forgeries $this->checkToken(); $pks = $this->input->post->get('cid', array(), 'array'); try { if (empty($pks)) { throw new Exception(JText::_('COM_TEMPLATES_NO_TEMPLATE_SELECTED')); } $pks = ArrayHelper::toInteger($pks); // Pop off the first element. $id = array_shift($pks); $model = $this->getModel(); $model->setHome($id); $this->setMessage(JText::_('COM_TEMPLATES_SUCCESS_HOME_SET')); } catch (Exception $e) { JError::raiseWarning(500, $e->getMessage()); } $this->setRedirect('index.php?option=com_templates&view=styles'); } /** * Method to unset the default template for a client and for a language * * @return void * * @since 1.6 */ public function unsetDefault() { // Check for request forgeries $this->checkToken('request'); $pks = $this->input->get->get('cid', array(), 'array'); $pks = ArrayHelper::toInteger($pks); try { if (empty($pks)) { throw new Exception(JText::_('COM_TEMPLATES_NO_TEMPLATE_SELECTED')); } // Pop off the first element. $id = array_shift($pks); $model = $this->getModel(); $model->unsetHome($id); $this->setMessage(JText::_('COM_TEMPLATES_SUCCESS_HOME_UNSET')); } catch (Exception $e) { JError::raiseWarning(500, $e->getMessage()); } $this->setRedirect('index.php?option=com_templates&view=styles'); } } PKb��\�G�[jj#components/com_templates/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="templates" label="COM_TEMPLATES_SUBMENU_TEMPLATES" description="COM_TEMPLATES_CONFIG_FIELDSET_DESC"> <field name="template_positions_display" type="radio" label="COM_TEMPLATES_CONFIG_POSITIONS_LABEL" description="COM_TEMPLATES_CONFIG_POSITIONS_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JENABLED</option> <option value="0">JDISABLED</option> </field> <field name="upload_limit" type="number" label="COM_TEMPLATES_CONFIG_UPLOAD_LABEL" description="COM_TEMPLATES_CONFIG_UPLOAD_DESC" default="10" extension="com_templates" /> <field name="warning" type="note" label="COM_TEMPLATES_CONFIG_SUPPORTED_LABEL" description="COM_TEMPLATES_CONFIG_SUPPORTED_DESC" /> <field name="image_formats" type="text" label="COM_TEMPLATES_CONFIG_IMAGE_LABEL" description="COM_TEMPLATES_CONFIG_IMAGE_DESC" default="gif,bmp,jpg,jpeg" extension="com_templates" /> <field name="source_formats" type="text" label="COM_TEMPLATES_CONFIG_SOURCE_LABEL" description="COM_TEMPLATES_CONFIG_SOURCE_DESC" default="txt,less,ini,xml,js,php,css,sass,scss" extension="com_templates" /> <field name="font_formats" type="text" label="COM_TEMPLATES_CONFIG_FONT_LABEL" description="COM_TEMPLATES_CONFIG_FONT_DESC" default="woff,ttf,otf" extension="com_templates" /> <field name="compressed_formats" type="hidden" default="zip" extension="com_templates" /> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_templates" section="component" /> </fieldset> </config> PKb��\>�jc66#components/com_templates/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_templates"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKb��\,���&components/com_templates/templates.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); if (!JFactory::getUser()->authorise('core.manage', 'com_templates')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } JLoader::register('TemplatesHelper', __DIR__ . '/helpers/templates.php'); $controller = JControllerLegacy::getInstance('Templates'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\�k/��9components/com_templates/views/templates/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=templates'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty($this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this, 'options' => array('selectorFieldName' => 'client_id'))); ?> <?php if ($this->total > 0) : ?> <table class="table table-striped" id="template-mgr"> <thead> <tr> <th class="col1template hidden-phone" width="20%"> <?php echo JText::_('COM_TEMPLATES_HEADING_IMAGE'); ?> </th> <th width="30%"> <?php echo JHtml::_('searchtools.sort', 'COM_TEMPLATES_HEADING_TEMPLATE', 'a.element', $listDirn, $listOrder); ?> </th> <th width="10%" class="hidden-phone"> <?php echo JText::_('JVERSION'); ?> </th> <th width="15%" class="hidden-phone"> <?php echo JText::_('JDATE'); ?> </th> <th width="25%" class="hidden-phone"> <?php echo JText::_('JAUTHOR'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="5"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center hidden-phone"> <?php echo JHtml::_('templates.thumb', $item->element, $item->client_id); ?> <?php echo JHtml::_('templates.thumbModal', $item->element, $item->client_id); ?> </td> <td class="template-name"> <a href="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . (int) $item->extension_id . '&file=' . $this->file); ?>"> <?php echo JText::sprintf('COM_TEMPLATES_TEMPLATE_DETAILS', ucfirst($item->name)); ?></a> <div> <?php if ($this->preview && $item->client_id == '0') : ?> <a href="<?php echo JRoute::_(JUri::root() . 'index.php?tp=1&template=' . $item->element); ?>" target="_blank"> <?php echo JText::_('COM_TEMPLATES_TEMPLATE_PREVIEW'); ?> </a> <?php elseif ($item->client_id == '1') : ?> <?php echo JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW_ADMIN'); ?> <?php else : ?> <span class="hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_TEMPLATES_TEMPLATE_NO_PREVIEW_DESC'); ?>"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW'); ?></span> <?php endif; ?> </div> </td> <td class="small hidden-phone"> <?php echo $this->escape($item->xmldata->get('version')); ?> </td> <td class="small hidden-phone"> <?php echo $this->escape($item->xmldata->get('creationDate')); ?> </td> <td class="hidden-phone"> <?php if ($author = $item->xmldata->get('author')) : ?> <div><?php echo $this->escape($author); ?></div> <?php else : ?> — <?php endif; ?> <?php if ($email = $item->xmldata->get('authorEmail')) : ?> <div><?php echo $this->escape($email); ?></div> <?php endif; ?> <?php if ($url = $item->xmldata->get('authorUrl')) : ?> <div><a href="<?php echo $this->escape($url); ?>"><?php echo $this->escape($url); ?></a></div> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�{� � 6components/com_templates/views/templates/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of template styles. * * @since 1.6 */ class TemplatesViewTemplates extends JViewLegacy { /** * @var array * @since 1.6 */ protected $items; /** * @var object * @since 1.6 */ protected $pagination; /** * @var object * @since 1.6 */ protected $state; /** * @var string * @since 3.2 */ protected $file; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->total = $this->get('Total'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); $this->preview = JComponentHelper::getParams('com_templates')->get('template_positions_display'); $this->file = base64_encode('home'); TemplatesHelper::addSubmenu('templates'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_templates'); // Set the title. if ((int) $this->get('State')->get('client_id') === 1) { JToolbarHelper::title(JText::_('COM_TEMPLATES_MANAGER_TEMPLATES_ADMIN'), 'eye thememanager'); } else { JToolbarHelper::title(JText::_('COM_TEMPLATES_MANAGER_TEMPLATES_SITE'), 'eye thememanager'); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_templates'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES'); JHtmlSidebar::setAction('index.php?option=com_templates&view=templates'); $this->sidebar = JHtmlSidebar::render(); } } PKb��\A�>(2components/com_templates/views/style/view.json.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a template style. * * @since 1.6 */ class TemplatesViewStyle extends JViewLegacy { /** * The JObject (on success, false on failure) * * @var JObject */ protected $item; /** * The form object * * @var JForm */ protected $form; /** * The model state * * @var JObject */ protected $state; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { try { $this->item = $this->get('Item'); } catch (Exception $e) { $app = JFactory::getApplication(); $app->enqueueMessage($e->getMessage(), 'error'); return false; } $paramsList = $this->item->getProperties(); unset($paramsList['xml']); $paramsList = json_encode($paramsList); return $paramsList; } } PKb��\1��=components/com_templates/views/style/tmpl/edit_assignment.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Initiasile related data. JLoader::register('MenusHelper', JPATH_ADMINISTRATOR . '/components/com_menus/helpers/menus.php'); $menuTypes = MenusHelper::getMenuLinks(); $user = JFactory::getUser(); ?> <label id="jform_menuselect-lbl" for="jform_menuselect"><?php echo JText::_('JGLOBAL_MENU_SELECTION'); ?></label> <div class="btn-toolbar"> <button class="btn jform-rightbtn" type="button" onclick="jQuery('.chk-menulink').attr('checked', !jQuery('.chk-menulink').attr('checked'));"> <span class="icon-checkbox-partial" aria-hidden="true"></span> <?php echo JText::_('JGLOBAL_SELECTION_INVERT_ALL'); ?> </button> </div> <div id="menu-assignment"> <ul class="menu-links"> <?php foreach ($menuTypes as &$type) : ?> <li> <div class="menu-links-block"> <button class="btn jform-rightbtn" type="button" onclick="jQuery('.<?php echo $type->menutype; ?>').attr('checked', !jQuery('.<?php echo $type->menutype; ?>').attr('checked'));"> <span class="icon-checkbox-partial" aria-hidden="true"></span> <?php echo JText::_('JGLOBAL_SELECTION_INVERT'); ?> </button> <h5><?php echo $type->title ?: $type->menutype; ?></h5> <?php foreach ($type->links as $link) : ?> <label class="checkbox small" for="link<?php echo (int) $link->value; ?>" > <input type="checkbox" name="jform[assigned][]" value="<?php echo (int) $link->value; ?>" id="link<?php echo (int) $link->value; ?>"<?php if ($link->template_style_id == $this->item->id) : ?> checked="checked"<?php endif; ?><?php if ($link->checked_out && $link->checked_out != $user->id) : ?> disabled="disabled"<?php else : ?> class="chk-menulink <?php echo $type->menutype; ?>"<?php endif; ?> /> <?php echo JLayoutHelper::render('joomla.html.treeprefix', array('level' => $link->level)) . $link->text; ?> </label> <?php endforeach; ?> </div> </li> <?php endforeach; ?> </ul> </div> PKb��\����//:components/com_templates/views/style/tmpl/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Load chosen.css JHtml::_('formbehavior.chosen', 'select'); ?> <?php echo JHtml::_('bootstrap.startAccordion', 'templatestyleOptions', array('active' => 'collapse0')); $fieldSets = $this->form->getFieldsets('params'); $i = 0; foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_TEMPLATES_' . $name . '_FIELDSET_LABEL'; echo JHtml::_('bootstrap.addSlide', 'templatestyleOptions', JText::_($label), 'collapse' . ($i++)); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">' . $this->escape(JText::_($fieldSet->description)) . '</p>'; endif; ?> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <div class="control-group"> <div class="control-label"> <?php echo $field->label; ?> </div> <div class="controls"> <?php echo $field->input; ?> </div> </div> <?php endforeach; echo JHtml::_('bootstrap.endSlide'); endforeach; echo JHtml::_('bootstrap.endAccordion'); PKb��\�mGn� � 2components/com_templates/views/style/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'style.cancel' || document.formvalidator.isValid(document.getElementById('style-form'))) { Joomla.submitform(task, document.getElementById('style-form')); } }; "); ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="style-form" class="form-validate"> <?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?> <div class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'details')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'details', JText::_('JDETAILS')); ?> <div class="row-fluid"> <div class="span9"> <h2> <?php echo JText::_($this->item->template); ?> </h2> <div class="info-labels"> <span class="label hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_TEMPLATES_FIELD_CLIENT_LABEL'); ?>"> <?php echo $this->item->client_id == 0 ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); ?> </span> </div> <div> <p><?php echo JText::_($this->item->xml->description); ?></p> <?php $this->fieldset = 'description'; $description = JLayoutHelper::render('joomla.edit.fieldset', $this); ?> <?php if ($description) : ?> <p class="readmore"> <a href="#" onclick="jQuery('.nav-tabs a[href=\'#description\']').tab('show');"> <?php echo JText::_('JGLOBAL_SHOW_FULL_DESCRIPTION'); ?> </a> </p> <?php endif; ?> </div> <?php $this->fieldset = 'basic'; $html = JLayoutHelper::render('joomla.edit.fieldset', $this); echo $html ? '<hr />' . $html : ''; ?> </div> <div class="span3"> <?php // Set main fields. $this->fields = array( 'home', 'client_id', 'template' ); ?> <?php echo JLayoutHelper::render('joomla.edit.global', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php if ($description) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'description', JText::_('JGLOBAL_FIELDSET_DESCRIPTION')); ?> <?php echo $description; ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php $this->fieldsets = array(); $this->ignore_fieldsets = array('basic', 'description'); echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php if ($user->authorise('core.edit', 'com_menus') && $this->item->client_id == 0 && $this->canDo->get('core.edit.state')) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'assignment', JText::_('COM_TEMPLATES_MENUS_ASSIGNMENT')); ?> <?php echo $this->loadTemplate('assignment'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\X�@� � 2components/com_templates/views/style/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a template style. * * @since 1.6 */ class TemplatesViewStyle extends JViewLegacy { /** * The JObject (on success, false on failure) * * @var JObject */ protected $item; /** * The form object * * @var JForm */ protected $form; /** * The model state * * @var JObject */ protected $state; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { $this->item = $this->get('Item'); $this->state = $this->get('State'); $this->form = $this->get('Form'); $this->canDo = JHelperContent::getActions('com_templates'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $isNew = ($this->item->id == 0); $canDo = $this->canDo; JToolbarHelper::title( $isNew ? JText::_('COM_TEMPLATES_MANAGER_ADD_STYLE') : JText::_('COM_TEMPLATES_MANAGER_EDIT_STYLE'), 'eye thememanager' ); // If not checked out, can save the item. if ($canDo->get('core.edit')) { JToolbarHelper::apply('style.apply'); JToolbarHelper::save('style.save'); } // If an existing item, can save to a copy. if (!$isNew && $canDo->get('core.create')) { JToolbarHelper::save2copy('style.save2copy'); } if (empty($this->item->id)) { JToolbarHelper::cancel('style.cancel'); } else { JToolbarHelper::cancel('style.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); // Get the help information for the template item. $lang = JFactory::getLanguage(); $help = $this->get('Help'); if ($lang->hasKey($help->url)) { $debug = $lang->setDebug(false); $url = JText::_($help->url); $lang->setDebug($debug); } else { $url = null; } JToolbarHelper::help($help->key, false, $url); } } PKb��\� ���6components/com_templates/views/styles/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $clientId = (int) $this->state->get('client_id', 0); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $colSpan = $clientId === 1 ? 5 : 6; ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=styles'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty($this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this, 'options' => array('selectorFieldName' => 'client_id'))); ?> <?php if ($this->total > 0) : ?> <table class="table table-striped" id="styleList"> <thead> <tr> <th width="1%" class="nowrap center">   </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_TEMPLATES_HEADING_STYLE', 'a.title', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'COM_TEMPLATES_HEADING_DEFAULT', 'a.home', $listDirn, $listOrder); ?> </th> <?php if ($clientId === 0) : ?> <th width="20%" class="nowrap hidden-phone"> <?php echo JText::_('COM_TEMPLATES_HEADING_PAGES'); ?> </th> <?php endif; ?> <th width="30%" class="hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_TEMPLATES_HEADING_TEMPLATE', 'a.template', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="<?php echo $colSpan; ?>"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_templates'); $canEdit = $user->authorise('core.edit', 'com_templates'); $canChange = $user->authorise('core.edit.state', 'com_templates'); ?> <tr class="row<?php echo $i % 2; ?>"> <td width="1%" class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($this->preview && $item->client_id == '0') : ?> <a target="_blank" href="<?php echo JUri::root() . 'index.php?tp=1&templateStyle=' . (int) $item->id ?>" class="jgrid"> <span class="icon-eye-open hasTooltip" aria-hidden="true" title="<?php echo JHtml::_('tooltipText', JText::_('COM_TEMPLATES_TEMPLATE_PREVIEW'), $item->title, 0); ?>"></span> <span class="element-invisible"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_PREVIEW'); ?></span> </a> <?php elseif ($item->client_id == '1') : ?> <span class="icon-eye-close disabled hasTooltip" aria-hidden="true" title="<?php echo JHtml::_('tooltipText', 'COM_TEMPLATES_TEMPLATE_NO_PREVIEW_ADMIN'); ?>"></span> <span class="element-invisible"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW_ADMIN'); ?></span> <?php else: ?> <span class="icon-eye-close disabled hasTooltip" aria-hidden="true" title="<?php echo JHtml::_('tooltipText', 'COM_TEMPLATES_TEMPLATE_NO_PREVIEW'); ?>"></span> <span class="element-invisible"><?php echo JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW'); ?></span> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_templates&task=style.edit&id=' . (int) $item->id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> </td> <td class="center"> <?php if ($item->home == '0' || $item->home == '1') : ?> <?php echo JHtml::_('jgrid.isdefault', $item->home != '0', $i, 'styles.', $canChange && $item->home != '1'); ?> <?php elseif ($canChange) : ?> <a href="<?php echo JRoute::_('index.php?option=com_templates&task=styles.unsetDefault&cid[]=' . $item->id . '&' . JSession::getFormToken() . '=1'); ?>"> <?php if ($item->image) : ?> <?php echo JHtml::_('image', 'mod_languages/' . $item->image . '.gif', $item->language_title, array('title' => JText::sprintf('COM_TEMPLATES_GRID_UNSET_LANGUAGE', $item->language_title)), true); ?> <?php else : ?> <span class="label" title="<?php echo JText::sprintf('COM_TEMPLATES_GRID_UNSET_LANGUAGE', $item->language_title); ?>"><?php echo $item->language_sef; ?></span> <?php endif; ?> </a> <?php else : ?> <?php if ($item->image) : ?> <?php echo JHtml::_('image', 'mod_languages/' . $item->image . '.gif', $item->language_title, array('title' => $item->language_title), true); ?> <?php else : ?> <span class="label" title="<?php echo $item->language_title; ?>"><?php echo $item->language_sef; ?></span> <?php endif; ?> <?php endif; ?> </td> <?php if ($clientId === 0) : ?> <td class="small hidden-phone"> <?php if ($item->home == '1') : ?> <?php echo JText::_('COM_TEMPLATES_STYLES_PAGES_ALL'); ?> <?php elseif ($item->home != '0' && $item->home != '1') : ?> <?php echo JText::sprintf('COM_TEMPLATES_STYLES_PAGES_ALL_LANGUAGE', $this->escape($item->language_title)); ?> <?php elseif ($item->assigned > 0) : ?> <?php echo JText::sprintf('COM_TEMPLATES_STYLES_PAGES_SELECTED', $this->escape($item->assigned)); ?> <?php else : ?> <?php echo JText::_('COM_TEMPLATES_STYLES_PAGES_NONE'); ?> <?php endif; ?> </td> <?php endif; ?> <td class="hidden-phone hidden-tablet"> <label for="cb<?php echo $i; ?>" class="small"> <a href="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . (int) $item->e_id); ?> "> <?php echo ucfirst($this->escape($item->template)); ?> </a> </label> </td> <td class="hidden-phone hidden-tablet"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\t<�C� � 3components/com_templates/views/styles/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of template styles. * * @since 1.6 */ class TemplatesViewStyles extends JViewLegacy { protected $items; protected $pagination; protected $state; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->total = $this->get('Total'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); $this->preview = JComponentHelper::getParams('com_templates')->get('template_positions_display'); TemplatesHelper::addSubmenu('styles'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_templates'); // Set the title. if ((int) $this->get('State')->get('client_id') === 1) { JToolbarHelper::title(JText::_('COM_TEMPLATES_MANAGER_STYLES_ADMIN'), 'eye thememanager'); } else { JToolbarHelper::title(JText::_('COM_TEMPLATES_MANAGER_STYLES_SITE'), 'eye thememanager'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::makeDefault('styles.setDefault', 'COM_TEMPLATES_TOOLBAR_SET_HOME'); JToolbarHelper::divider(); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('style.edit'); } if ($canDo->get('core.create')) { JToolbarHelper::custom('styles.duplicate', 'copy.png', 'copy_f2.png', 'JTOOLBAR_DUPLICATE', true); JToolbarHelper::divider(); } if ($canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'styles.delete', 'JTOOLBAR_DELETE'); JToolbarHelper::divider(); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_templates'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_EXTENSIONS_TEMPLATE_MANAGER_STYLES'); JHtmlSidebar::setAction('index.php?option=com_templates&view=styles'); } } PKb��\���%OODcomponents/com_templates/views/template/tmpl/default_description.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="pull-left"> <?php echo JHtml::_('templates.thumb', $this->template->element, $this->template->client_id); ?> <?php echo JHtml::_('templates.thumbModal', $this->template->element, $this->template->client_id); ?> </div> <h2><?php echo ucfirst($this->template->element); ?></h2> <?php $client = JApplicationHelper::getClientInfo($this->template->client_id); ?> <p><?php $this->template->xmldata = TemplatesHelper::parseXMLTemplateFile($client->path, $this->template->element); ?></p> <p><?php echo JText::_($this->template->xmldata->description); ?></p>PKb��\�9��ZZ9components/com_templates/views/template/tmpl/readonly.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); $input = JFactory::getApplication()->input; ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'description')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'description', JText::_('COM_TEMPLATES_TAB_DESCRIPTION')); ?> <?php echo $this->loadTemplate('description'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\҈r�//=components/com_templates/views/template/tmpl/default_tree.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ksort($this->files, SORT_STRING); ?> <ul class='nav nav-list directory-tree'> <?php foreach ($this->files as $key => $value) : ?> <?php if (is_array($value)) : ?> <?php $keyArray = explode('/', $key); $fileArray = explode('/', $this->fileName); $count = 0; $keyArrayCount = count($keyArray); if (count($fileArray) >= $keyArrayCount) { for ($i = 0; $i < $keyArrayCount; $i++) { if ($keyArray[$i] === $fileArray[$i]) { $count++; } } if ($count === $keyArrayCount) { $class = 'folder show'; } else { $class = 'folder'; } } else { $class = 'folder'; } ?> <li class="<?php echo $class; ?>"> <a class='folder-url nowrap' href=''> <span class='icon-folder'> <?php $explodeArray = explode('/', $key); echo $this->escape(end($explodeArray)); ?></span> </a> <?php echo $this->directoryTree($value); ?> </li> <?php endif; ?> <?php if (is_object($value)) : ?> <li> <a class="file nowrap" href='<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $this->id . '&file=' . $value->id) ?>'> <span class='icon-file'> <?php echo $this->escape($value->name); ?></span> </a> </li> <?php endif; ?> <?php endforeach; ?> </ul> PKb��\��j�H�H8components/com_templates/views/template/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('behavior.tabstate'); $input = JFactory::getApplication()->input; // No access if not global SuperUser if (!JFactory::getUser()->authorise('core.admin')) { JFactory::getApplication()->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'error'); } if ($this->type == 'image') { JHtml::_('script', 'system/jquery.Jcrop.min.js', array('version' => 'auto', 'relative' => true)); JHtml::_('stylesheet', 'system/jquery.Jcrop.min.css', array('version' => 'auto', 'relative' => true)); } JFactory::getDocument()->addScriptDeclaration(" jQuery(document).ready(function($){ // Hide all the folder when the page loads $('.folder ul, .component-folder ul, .plugin-folder ul, .layout-folder ul').hide(); // Display the tree after loading $('.directory-tree').removeClass('directory-tree'); // Show all the lists in the path of an open file $('.show > ul').show(); // Stop the default action of anchor tag on a click event $('.folder-url, .component-folder-url, .plugin-folder-url, .layout-folder-url').click(function(event){ event.preventDefault(); }); // Prevent the click event from proliferating $('.file, .component-file-url, .plugin-file-url').bind('click',function(e){ e.stopPropagation(); }); // Toggle the child indented list on a click event $('.folder, .component-folder, .plugin-folder, .layout-folder').bind('click',function(e){ $(this).children('ul').toggle(); e.stopPropagation(); }); // New file tree $('#fileModal .folder-url').bind('click',function(e){ $('.folder-url').removeClass('selected'); e.stopPropagation(); $('#fileModal input.address').val($(this).attr('data-id')); $(this).addClass('selected'); }); // Folder manager tree $('#folderModal .folder-url').bind('click',function(e){ $('.folder-url').removeClass('selected'); e.stopPropagation(); $('#folderModal input.address').val($(this).attr('data-id')); $(this).addClass('selected'); }); var containerDiv = document.querySelector('.span3.tree-holder'), treeContainer = containerDiv.querySelector('.nav.nav-list'), liEls = treeContainer.querySelectorAll('.folder.show'), filePathEl = document.querySelector('p.lead.hidden.path'); if(filePathEl) var filePathTmp = document.querySelector('p.lead.hidden.path').innerText; if(filePathTmp && filePathTmp.charAt( 0 ) === '/' ) { filePathTmp = filePathTmp.slice( 1 ); filePathTmp = filePathTmp.split('/'); filePathTmp = filePathTmp[filePathTmp.length - 1]; for (var i = 0, l = liEls.length; i < l; i++) { liEls[i].querySelector('a').classList.add('active'); if (i === liEls.length - 1) { var parentUl = liEls[i].querySelector('ul'), allLi = parentUl.querySelectorAll('li'); for (var i = 0, l = allLi.length; i < l; i++) { aEl = allLi[i].querySelector('a'), spanEl = aEl.querySelector('span'); if (spanEl && filePathTmp === $.trim(spanEl.innerText)) { aEl.classList.add('active'); } } } } } });"); if ($this->type == 'image') { JFactory::getDocument()->addScriptDeclaration(" jQuery(document).ready(function($) { var jcrop_api; // Configuration for image cropping $('#image-crop').Jcrop({ onChange: showCoords, onSelect: showCoords, onRelease: clearCoords, trueSize: [" . $this->image['width'] . ',' . $this->image['height'] . "] },function(){ jcrop_api = this; }); // Function for calculating the crop coordinates function showCoords(c) { $('#x').val(c.x); $('#y').val(c.y); $('#w').val(c.w); $('#h').val(c.h); }; // Function for clearing the coordinates function clearCoords() { $('#adminForm input').val(''); }; });"); } JFactory::getDocument()->addStyleDeclaration(' /* Styles for modals */ .selected{ background: #08c; color: #fff; } .selected:hover{ background: #08c !important; color: #fff; } .modal-body .column-left { float: left; max-height: 70vh; overflow-y: auto; } .modal-body .column-right { float: right; } @media (max-width: 767px) { .modal-body .column-right { float: left; } } #deleteFolder{ margin: 0; } #image-crop{ max-width: 100% !important; width: auto; height: auto; } .directory-tree{ display: none; } .tree-holder{ overflow-x: auto; } '); if ($this->type == 'font') { JFactory::getDocument()->addStyleDeclaration( "/* Styles for font preview */ @font-face { font-family: previewFont; src: url('" . $this->font['address'] . "') } .font-preview{ font-family: previewFont !important; }" ); } ?> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'editor')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'editor', JText::_('COM_TEMPLATES_TAB_EDITOR')); ?> <div class="row-fluid"> <div class="span12"> <?php if ($this->type == 'file') : ?> <p class="lead"><?php echo JText::sprintf('COM_TEMPLATES_TEMPLATE_FILENAME', $this->source->filename, $this->template->element); ?></p> <p class="lead path hidden"><?php echo $this->source->filename; ?></p> <?php endif; ?> <?php if ($this->type == 'image') : ?> <p class="lead"><?php echo JText::sprintf('COM_TEMPLATES_TEMPLATE_FILENAME', $this->image['path'], $this->template->element); ?></p> <p class="lead path hidden"><?php echo $this->image['path']; ?></p> <?php endif; ?> <?php if ($this->type == 'font') : ?> <p class="lead"><?php echo JText::sprintf('COM_TEMPLATES_TEMPLATE_FILENAME', $this->font['rel_path'], $this->template->element); ?></p> <p class="lead path hidden"><?php echo $this->font['rel_path']; ?></p> <?php endif; ?> </div> </div> <div class="row-fluid"> <div class="span3 tree-holder"> <?php echo $this->loadTemplate('tree'); ?> </div> <div class="span9"> <?php if ($this->type == 'home') : ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> <div class="hero-unit" style="text-align: justify;"> <h2><?php echo JText::_('COM_TEMPLATES_HOME_HEADING'); ?></h2> <p><?php echo JText::_('COM_TEMPLATES_HOME_TEXT'); ?></p> <p> <a href="https://docs.joomla.org/Special:MyLanguage/J3.x:How_to_use_the_Template_Manager" target="_blank" class="btn btn-primary btn-large"> <?php echo JText::_('COM_TEMPLATES_HOME_BUTTON'); ?> </a> </p> </div> </form> <?php endif; ?> <?php if ($this->type == 'file') : ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <div class="editor-border"> <?php echo $this->form->getInput('source'); ?> </div> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> <?php echo $this->form->getInput('extension_id'); ?> <?php echo $this->form->getInput('filename'); ?> </form> <?php endif; ?> <?php if ($this->type == 'archive') : ?> <legend><?php echo JText::_('COM_TEMPLATES_FILE_CONTENT_PREVIEW'); ?></legend> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <ul class="nav nav-stacked nav-list well"> <?php foreach ($this->archive as $file) : ?> <li> <?php if (substr($file, -1) === DIRECTORY_SEPARATOR) : ?> <span class="icon-folder" aria-hidden="true"></span> <?php echo $file; ?> <?php endif; ?> <?php if (substr($file, -1) != DIRECTORY_SEPARATOR) : ?> <span class="icon-file" aria-hidden="true"></span> <?php echo $file; ?> <?php endif; ?> </li> <?php endforeach; ?> </ul> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> <?php endif; ?> <?php if ($this->type == 'image') : ?> <img id="image-crop" src="<?php echo $this->image['address'] . '?' . time(); ?>" /> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <fieldset class="adminform"> <input type ="hidden" id="x" name="x" /> <input type ="hidden" id="y" name="y" /> <input type ="hidden" id="h" name="h" /> <input type ="hidden" id="w" name="w" /> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </fieldset> </form> <?php endif; ?> <?php if ($this->type == 'font') : ?> <div class="font-preview"> <form action="<?php echo JRoute::_('index.php?option=com_templates&view=template&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <fieldset class="adminform"> <p class="lead">H1</p><h1>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h1> <p class="lead">H2</p><h2>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h2> <p class="lead">H3</p><h3>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h3> <p class="lead">H4</p><h4>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h4> <p class="lead">H5</p><h5>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h5> <p class="lead">H6</p> <h6>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </h6> <p class="lead">Bold</p><b>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </b> <p class="lead">Italics</p><i>Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML </i> <p class="lead">Unordered List</p> <ul> <li>Item</li> <li>Item</li> <li>Item<br /> <ul> <li>Item</li> <li>Item</li> <li>Item<br /> <ul> <li>Item</li> <li>Item</li> <li>Item</li> </ul> </li> </ul> </li> </ul> <p class="lead">Ordered List</p> <ol> <li>Item</li> <li>Item</li> <li>Item<br /> <ul> <li>Item</li> <li>Item</li> <li>Item<br /> <ul> <li>Item</li> <li>Item</li> <li>Item</li> </ul> </li> </ul> </li> </ol> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </fieldset> </form> </div> <?php endif; ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'overrides', JText::_('COM_TEMPLATES_TAB_OVERRIDES')); ?> <div class="row-fluid"> <div class="span3"> <legend><?php echo JText::_('COM_TEMPLATES_OVERRIDES_MODULES'); ?></legend> <ul class="nav nav-list"> <?php $token = JSession::getFormToken() . '=' . 1; ?> <?php foreach ($this->overridesList['modules'] as $module) : ?> <li> <?php $overrideLinkUrl = 'index.php?option=com_templates&view=template&task=template.overrides&folder=' . $module->path . '&id=' . $input->getInt('id') . '&file=' . $this->file . '&' . $token; ?> <a href="<?php echo JRoute::_($overrideLinkUrl); ?>"> <span class="icon-copy" aria-hidden="true"></span> <?php echo $module->name; ?> </a> </li> <?php endforeach; ?> </ul> </div> <div class="span3"> <legend><?php echo JText::_('COM_TEMPLATES_OVERRIDES_COMPONENTS'); ?></legend> <ul class="nav nav-list"> <?php $token = JSession::getFormToken() . '=' . 1; ?> <?php foreach ($this->overridesList['components'] as $key => $value) : ?> <li class="component-folder"> <a href="#" class="component-folder-url"> <span class="icon-folder" aria-hidden="true"></span> <?php echo $key; ?> </a> <ul class="nav nav-list"> <?php foreach ($value as $view) : ?> <li> <?php $overrideLinkUrl = 'index.php?option=com_templates&view=template&task=template.overrides&folder=' . $view->path . '&id=' . $input->getInt('id') . '&file=' . $this->file . '&' . $token; ?> <a class="component-file-url" href="<?php echo JRoute::_($overrideLinkUrl); ?>"> <span class="icon-copy" aria-hidden="true"></span> <?php echo $view->name; ?> </a> </li> <?php endforeach; ?> </ul> </li> <?php endforeach; ?> </ul> </div> <div class="span3"> <legend><?php echo JText::_('COM_TEMPLATES_OVERRIDES_PLUGINS'); ?></legend> <ul class="nav nav-list"> <?php $token = JSession::getFormToken() . '=' . 1; ?> <?php foreach ($this->overridesList['plugins'] as $key => $group) : ?> <li class="plugin-folder"> <a href="#" class="plugin-folder-url"> <span class="icon-folder" aria-hidden="true"></span> <?php echo $key; ?> </a> <ul class="nav nav-list"> <?php foreach ($group as $plugin) : ?> <li> <?php $overrideLinkUrl = 'index.php?option=com_templates&view=template&task=template.overrides&folder=' . $plugin->path . '&id=' . $input->getInt('id') . '&file=' . $this->file . '&' . $token; ?> <a class="plugin-file-url" href="<?php echo JRoute::_($overrideLinkUrl); ?>"> <span class="icon-copy" aria-hidden="true"></span> <?php echo $plugin->name; ?> </a> </li> <?php endforeach; ?> </ul> </li> <?php endforeach; ?> </ul> </div> <div class="span3"> <legend><?php echo JText::_('COM_TEMPLATES_OVERRIDES_LAYOUTS'); ?></legend> <ul class="nav nav-list"> <?php $token = JSession::getFormToken() . '=' . 1; ?> <?php foreach ($this->overridesList['layouts'] as $key => $value) : ?> <li class="layout-folder"> <a href="#" class="layout-folder-url"> <span class="icon-folder" aria-hidden="true"></span> <?php echo $key; ?> </a> <ul class="nav nav-list"> <?php foreach ($value as $layout) : ?> <li> <?php $overrideLinkUrl = 'index.php?option=com_templates&view=template&task=template.overrides&folder=' . $layout->path . '&id=' . $input->getInt('id') . '&file=' . $this->file . '&' . $token; ?> <a href="<?php echo JRoute::_($overrideLinkUrl); ?>"> <span class="icon-copy" aria-hidden="true"></span> <?php echo $layout->name; ?> </a> </li> <?php endforeach; ?> </ul> </li> <?php endforeach; ?> </ul> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'description', JText::_('COM_TEMPLATES_TAB_DESCRIPTION')); ?> <?php echo $this->loadTemplate('description'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> <?php // Collapse Modal $copyModalData = array( 'selector' => 'copyModal', 'params' => array( 'title' => JText::_('COM_TEMPLATES_TEMPLATE_COPY'), 'footer' => $this->loadTemplate('modal_copy_footer'), ), 'body' => $this->loadTemplate('modal_copy_body'), ); ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&task=template.copy&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post" name="adminForm" id="adminForm"> <?php echo JLayoutHelper::render('joomla.modal.main', $copyModalData); ?> <?php echo JHtml::_('form.token'); ?> </form> <?php if ($this->type != 'home') : ?> <?php // Rename Modal $renameModalData = array( 'selector' => 'renameModal', 'params' => array( 'title' => JText::sprintf('COM_TEMPLATES_RENAME_FILE', $this->fileName), 'footer' => $this->loadTemplate('modal_rename_footer'), ), 'body' => $this->loadTemplate('modal_rename_body'), ); ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&task=template.renameFile&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post"> <?php echo JLayoutHelper::render('joomla.modal.main', $renameModalData); ?> <?php echo JHtml::_('form.token'); ?> </form> <?php endif; ?> <?php if ($this->type != 'home') : ?> <?php // Delete Modal $deleteModalData = array( 'selector' => 'deleteModal', 'params' => array( 'title' => JText::_('COM_TEMPLATES_ARE_YOU_SURE'), 'footer' => $this->loadTemplate('modal_delete_footer'), ), 'body' => $this->loadTemplate('modal_delete_body'), ); ?> <?php echo JLayoutHelper::render('joomla.modal.main', $deleteModalData); ?> <?php endif; ?> <?php // File Modal $fileModalData = array( 'selector' => 'fileModal', 'params' => array( 'title' => JText::_('COM_TEMPLATES_NEW_FILE_HEADER'), 'footer' => $this->loadTemplate('modal_file_footer'), ), 'body' => $this->loadTemplate('modal_file_body'), ); ?> <?php echo JLayoutHelper::render('joomla.modal.main', $fileModalData); ?> <?php // Folder Modal $folderModalData = array( 'selector' => 'folderModal', 'params' => array( 'title' => JText::_('COM_TEMPLATES_MANAGE_FOLDERS'), 'footer' => $this->loadTemplate('modal_folder_footer'), ), 'body' => $this->loadTemplate('modal_folder_body'), ); ?> <?php echo JLayoutHelper::render('joomla.modal.main', $folderModalData); ?> <?php if ($this->type != 'home') : ?> <?php // Resize Modal $resizeModalData = array( 'selector' => 'resizeModal', 'params' => array( 'title' => JText::_('COM_TEMPLATES_RESIZE_IMAGE'), 'footer' => $this->loadTemplate('modal_resize_footer'), ), 'body' => $this->loadTemplate('modal_resize_body'), ); ?> <form action="<?php echo JRoute::_('index.php?option=com_templates&task=template.resizeImage&id=' . $input->getInt('id') . '&file=' . $this->file); ?>" method="post"> <?php echo JLayoutHelper::render('joomla.modal.main', $resizeModalData); ?> <?php echo JHtml::_('form.token'); ?> </form> <?php endif; ?>PKb��\I�$!!@components/com_templates/views/template/tmpl/default_folders.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ksort($this->files, SORT_STRING); ?> <ul class='nav nav-list directory-tree'> <?php foreach ($this->files as $key => $value) : ?> <?php if (is_array($value)) : ?> <li class="folder-select"> <a class='folder-url nowrap' data-id='<?php echo base64_encode($key); ?>' href=''> <span class='icon-folder'> <?php $explodeArray = explode('/', $key); echo $this->escape(end($explodeArray)); ?></span> </a> <?php echo $this->folderTree($value); ?> </li> <?php endif; ?> <?php endforeach; ?> </ul> PKb��\���*5components/com_templates/views/template/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a template style. * * @since 1.6 */ class TemplatesViewTemplate extends JViewLegacy { /** * For loading extension state */ protected $state; /** * For loading template details */ protected $template; /** * For loading the source form */ protected $form; /** * For loading source file contents */ protected $source; /** * Extension id */ protected $id; /** * Encrypted file path */ protected $file; /** * List of available overrides */ protected $overridesList; /** * Name of the present file */ protected $fileName; /** * Type of the file - image, source, font */ protected $type; /** * For loading image information */ protected $image; /** * Template id for showing preview button */ protected $preview; /** * For loading font information */ protected $font; /** * A nested array containing lst of files and folders */ protected $files; /** * An array containing a list of compressed files */ protected $archive; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { $app = JFactory::getApplication(); $this->file = $app->input->get('file'); $this->fileName = JFilterInput::getInstance()->clean(base64_decode($this->file), 'string'); $explodeArray = explode('.', $this->fileName); $ext = end($explodeArray); $this->files = $this->get('Files'); $this->state = $this->get('State'); $this->template = $this->get('Template'); $this->preview = $this->get('Preview'); $params = JComponentHelper::getParams('com_templates'); $imageTypes = explode(',', $params->get('image_formats')); $sourceTypes = explode(',', $params->get('source_formats')); $fontTypes = explode(',', $params->get('font_formats')); $archiveTypes = explode(',', $params->get('compressed_formats')); if (in_array($ext, $sourceTypes)) { $this->form = $this->get('Form'); $this->form->setFieldAttribute('source', 'syntax', $ext); $this->source = $this->get('Source'); $this->type = 'file'; } elseif (in_array($ext, $imageTypes)) { $this->image = $this->get('Image'); $this->type = 'image'; } elseif (in_array($ext, $fontTypes)) { $this->font = $this->get('Font'); $this->type = 'font'; } elseif (in_array($ext, $archiveTypes)) { $this->archive = $this->get('Archive'); $this->type = 'archive'; } else { $this->type = 'home'; } $this->overridesList = $this->get('OverridesList'); $this->id = $this->state->get('extension.id'); // Check for errors. if (count($errors = $this->get('Errors'))) { $app->enqueueMessage(implode("\n", $errors)); return false; } $this->addToolbar(); if (!JFactory::getUser()->authorise('core.admin')) { $this->setLayout('readonly'); } return parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 * * @return void */ protected function addToolbar() { $app = JFactory::getApplication(); $user = JFactory::getUser(); $app->input->set('hidemainmenu', true); // User is global SuperUser $isSuperUser = $user->authorise('core.admin'); // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); $explodeArray = explode('.', $this->fileName); $ext = end($explodeArray); JToolbarHelper::title(JText::sprintf('COM_TEMPLATES_MANAGER_VIEW_TEMPLATE', ucfirst($this->template->name)), 'eye thememanager'); // Only show file edit buttons for global SuperUser if ($isSuperUser) { // Add an Apply and save button if ($this->type == 'file') { JToolbarHelper::apply('template.apply'); JToolbarHelper::save('template.save'); } // Add a Crop and Resize button elseif ($this->type == 'image') { JToolbarHelper::custom('template.cropImage', 'move', 'move', 'COM_TEMPLATES_BUTTON_CROP', false); JToolbarHelper::modal('resizeModal', 'icon-refresh', 'COM_TEMPLATES_BUTTON_RESIZE'); } // Add an extract button elseif ($this->type == 'archive') { JToolbarHelper::custom('template.extractArchive', 'arrow-down', 'arrow-down', 'COM_TEMPLATES_BUTTON_EXTRACT_ARCHIVE', false); } // Add a copy template button (Hathor override doesn't need the button) if ($app->getTemplate() != 'hathor') { JToolbarHelper::modal('copyModal', 'icon-copy', 'COM_TEMPLATES_BUTTON_COPY_TEMPLATE'); } } // Add a Template preview button if ($this->preview->client_id == 0) { $bar->appendButton('Popup', 'picture', 'COM_TEMPLATES_BUTTON_PREVIEW', JUri::root() . 'index.php?tp=1&templateStyle=' . $this->preview->id, 800, 520); } // Only show file manage buttons for global SuperUser if ($isSuperUser) { // Add Manage folders button JToolbarHelper::modal('folderModal', 'icon-folder icon white', 'COM_TEMPLATES_BUTTON_FOLDERS'); // Add a new file button JToolbarHelper::modal('fileModal', 'icon-file', 'COM_TEMPLATES_BUTTON_FILE'); // Add a Rename file Button (Hathor override doesn't need the button) if ($app->getTemplate() != 'hathor' && $this->type != 'home') { JToolbarHelper::modal('renameModal', 'icon-refresh', 'COM_TEMPLATES_BUTTON_RENAME_FILE'); } // Add a Delete file Button if ($this->type != 'home') { JToolbarHelper::modal('deleteModal', 'icon-remove', 'COM_TEMPLATES_BUTTON_DELETE_FILE'); } // Add a Compile Button if ($ext == 'less') { JToolbarHelper::custom('template.less', 'play', 'play', 'COM_TEMPLATES_BUTTON_LESS', false); } } if ($this->type == 'home') { JToolbarHelper::cancel('template.cancel', 'JTOOLBAR_CLOSE'); } else { JToolbarHelper::cancel('template.close', 'COM_TEMPLATES_BUTTON_CLOSE_FILE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES_EDIT'); } /** * Method for creating the collapsible tree. * * @param array $array The value of the present node for recursion * * @return string * * @note Uses recursion * @since 3.2 */ protected function directoryTree($array) { $temp = $this->files; $this->files = $array; $txt = $this->loadTemplate('tree'); $this->files = $temp; return $txt; } /** * Method for listing the folder tree in modals. * * @param array $array The value of the present node for recursion * * @return string * * @note Uses recursion * @since 3.2 */ protected function folderTree($array) { $temp = $this->files; $this->files = $array; $txt = $this->loadTemplate('folders'); $this->files = $temp; return $txt; } } PKb��\���$$&components/com_templates/templates.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_templates</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_TEMPLATES_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>config.xml</filename> <filename>controller.php</filename> <filename>templates.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>tables</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_templates.ini</language> <language tag="en-GB">language/en-GB.com_templates.sys.ini</language> </languages> </administration> </extension> PKb��\g-$-components/com_templates/helpers/template.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Template Helper class. * * @since 3.2 */ abstract class TemplateHelper { /** * Checks if the file is an image * * @param string $fileName The filename * * @return boolean * * @since 3.2 */ public static function getTypeIcon($fileName) { // Get file extension return strtolower(substr($fileName, strrpos($fileName, '.') + 1)); } /** * Checks if the file can be uploaded * * @param array $file File information * @param string $err An error message to be returned * * @return boolean * * @since 3.2 */ public static function canUpload($file, $err = '') { $params = JComponentHelper::getParams('com_templates'); if (empty($file['name'])) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_UPLOAD_INPUT'), 'error'); return false; } // Media file names should never have executable extensions buried in them. $executable = array( 'exe', 'phtml','java', 'perl', 'py', 'asp','dll', 'go', 'jar', 'ade', 'adp', 'bat', 'chm', 'cmd', 'com', 'cpl', 'hta', 'ins', 'isp', 'jse', 'lib', 'mde', 'msc', 'msp', 'mst', 'pif', 'scr', 'sct', 'shb', 'sys', 'vb', 'vbe', 'vbs', 'vxd', 'wsc', 'wsf', 'wsh' ); $explodedFileName = explode('.', $file['name']); if (count($explodedFileName) > 2) { foreach ($executable as $extensionName) { if (in_array($extensionName, $explodedFileName)) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_EXECUTABLE'), 'error'); return false; } } } jimport('joomla.filesystem.file'); if ($file['name'] !== JFile::makeSafe($file['name']) || preg_match('/\s/', JFile::makeSafe($file['name']))) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_WARNFILENAME'), 'error'); return false; } $format = strtolower(JFile::getExt($file['name'])); $imageTypes = explode(',', $params->get('image_formats')); $sourceTypes = explode(',', $params->get('source_formats')); $fontTypes = explode(',', $params->get('font_formats')); $archiveTypes = explode(',', $params->get('compressed_formats')); $allowable = array_merge($imageTypes, $sourceTypes, $fontTypes, $archiveTypes); if ($format == '' || $format == false || (!in_array($format, $allowable))) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_WARNFILETYPE'), 'error'); return false; } if (in_array($format, $archiveTypes)) { $zip = new ZipArchive; if ($zip->open($file['tmp_name']) === true) { for ($i = 0; $i < $zip->numFiles; $i++) { $entry = $zip->getNameIndex($i); $endString = substr($entry, -1); if ($endString != DIRECTORY_SEPARATOR) { $explodeArray = explode('.', $entry); $ext = end($explodeArray); if (!in_array($ext, $allowable)) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_UNSUPPORTED_ARCHIVE'), 'error'); return false; } } } } else { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_OPEN_FAIL'), 'error'); return false; } } // Max upload size set to 2 MB for Template Manager $maxSize = (int) ($params->get('upload_limit') * 1024 * 1024); if ($maxSize > 0 && (int) $file['size'] > $maxSize) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_WARNFILETOOLARGE'), 'error'); return false; } $xss_check = file_get_contents($file['tmp_name'], false, null, -1, 256); $html_tags = array( 'abbr', 'acronym', 'address', 'applet', 'area', 'audioscope', 'base', 'basefont', 'bdo', 'bgsound', 'big', 'blackface', 'blink', 'blockquote', 'body', 'bq', 'br', 'button', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'comment', 'custom', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'fn', 'font', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html', 'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'keygen', 'kbd', 'label', 'layer', 'legend', 'li', 'limittext', 'link', 'listing', 'map', 'marquee', 'menu', 'meta', 'multicol', 'nobr', 'noembed', 'noframes', 'noscript', 'nosmartquotes', 'object', 'ol', 'optgroup', 'option', 'param', 'plaintext', 'pre', 'rt', 'ruby', 's', 'samp', 'script', 'select', 'server', 'shadow', 'sidebar', 'small', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'tt', 'ul', 'var', 'wbr', 'xml', 'xmp', '!DOCTYPE', '!--' ); foreach ($html_tags as $tag) { // A tag is '<tagname ', so we need to add < and a space or '<tagname>' if (stristr($xss_check, '<' . $tag . ' ') || stristr($xss_check, '<' . $tag . '>')) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_WARNIEXSS'), 'error'); return false; } } return true; } } PKb��\��� � 3components/com_templates/helpers/html/templates.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * JHtml helper class. * * @since 1.6 */ class JHtmlTemplates { /** * Display the thumb for the template. * * @param string $template The name of the template. * @param integer $clientId The application client ID the template applies to * * @return string The html string * * @since 1.6 */ public static function thumb($template, $clientId = 0) { $client = JApplicationHelper::getClientInfo($clientId); $basePath = $client->path . '/templates/' . $template; $thumb = $basePath . '/template_thumbnail.png'; $preview = $basePath . '/template_preview.png'; $html = ''; if (file_exists($thumb)) { JHtml::_('bootstrap.tooltip'); $clientPath = ($clientId == 0) ? '' : 'administrator/'; $thumb = $clientPath . 'templates/' . $template . '/template_thumbnail.png'; $html = JHtml::_('image', $thumb, JText::_('COM_TEMPLATES_PREVIEW')); if (file_exists($preview)) { $html = '<button type="button" data-target="#' . $template . '-Modal" class="thumbnail pull-left hasTooltip" data-toggle="modal"' . ' title="' . JHtml::_('tooltipText', 'COM_TEMPLATES_CLICK_TO_ENLARGE') . '">' . $html . '</button>'; } } return $html; } /** * Renders the html for the modal linked to thumb. * * @param string $template The name of the template. * @param integer $clientId The application client ID the template applies to * * @return string The html string * * @since 3.4 */ public static function thumbModal($template, $clientId = 0) { $client = JApplicationHelper::getClientInfo($clientId); $basePath = $client->path . '/templates/' . $template; $baseUrl = ($clientId == 0) ? JUri::root(true) : JUri::root(true) . '/administrator'; $thumb = $basePath . '/template_thumbnail.png'; $preview = $basePath . '/template_preview.png'; $html = ''; if (file_exists($thumb)) { if (file_exists($preview)) { $preview = $baseUrl . '/templates/' . $template . '/template_preview.png'; $footer = '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JTOOLBAR_CLOSE') . '</button>'; $html .= JHtml::_( 'bootstrap.renderModal', $template . '-Modal', array( 'title' => JText::_('COM_TEMPLATES_BUTTON_PREVIEW'), 'height' => '500px', 'width' => '800px', 'footer' => $footer, ), $body = '<div><img src="' . $preview . '" style="max-width:100%" alt="' . $template . '"></div>' ); } } return $html; } } PKb��\7%�vv.components/com_templates/helpers/templates.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Templates component helper. * * @since 1.6 */ class TemplatesHelper { /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void */ public static function addSubmenu($vName) { JHtmlSidebar::addEntry( JText::_('COM_TEMPLATES_SUBMENU_STYLES'), 'index.php?option=com_templates&view=styles', $vName == 'styles' ); JHtmlSidebar::addEntry( JText::_('COM_TEMPLATES_SUBMENU_TEMPLATES'), 'index.php?option=com_templates&view=templates', $vName == 'templates' ); } /** * Gets a list of the actions that can be performed. * * @return JObject * * @deprecated 3.2 Use JHelperContent::getActions() instead */ public static function getActions() { // Log usage of deprecated function try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions return JHelperContent::getActions('com_templates'); } /** * Get a list of filter options for the application clients. * * @return array An array of JHtmlOption elements. */ public static function getClientOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '0', JText::_('JSITE')); $options[] = JHtml::_('select.option', '1', JText::_('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 An array of JHtmlOption elements. */ public static function getTemplateOptions($clientId = '*') { // Build the filter options. $db = JFactory::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 != '*') { $query->where($db->quoteName('client_id') . ' = ' . (int) $clientId); } $db->setQuery($query); $options = $db->loadObjectList(); return $options; } /** * TODO * * @param string $templateBaseDir TODO * @param string $templateDir TODO * * @return boolean|JObject */ public static function parseXMLTemplateFile($templateBaseDir, $templateDir) { $data = new JObject; // Check of the xml file exists $filePath = JPath::clean($templateBaseDir . '/templates/' . $templateDir . '/templateDetails.xml'); if (is_file($filePath)) { $xml = JInstaller::parseXMLInstallFile($filePath); if ($xml['type'] != 'template') { return false; } foreach ($xml as $key => $value) { $data->set($key, $value); } } return $data; } /** * TODO * * @param integer $clientId TODO * @param string $templateDir TODO * * @return boolean|array * * @since 3.0 */ public static function getPositions($clientId, $templateDir) { $positions = array(); $templateBaseDir = $clientId ? JPATH_ADMINISTRATOR : JPATH_SITE; $filePath = JPath::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; } } PKb��\P��GG)components/com_templates/models/style.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\String\StringHelper; use Joomla\Utilities\ArrayHelper; /** * Template style model. * * @since 1.6 */ class TemplatesModelStyle extends JModelAdmin { /** * The help screen key for the module. * * @var string * @since 1.6 */ protected $helpKey = 'JHELP_EXTENSIONS_TEMPLATE_MANAGER_STYLES_EDIT'; /** * The help screen base URL for the module. * * @var string * @since 1.6 */ protected $helpURL; /** * Item cache. * * @var array * @since 1.6 */ private $_cache = array(); /** * Constructor. * * @param array $config An optional associative array of configuration settings. */ public function __construct($config = array()) { $config = array_merge( array( 'event_before_delete' => 'onExtensionBeforeDelete', 'event_after_delete' => 'onExtensionAfterDelete', 'event_before_save' => 'onExtensionBeforeSave', 'event_after_save' => 'onExtensionAfterSave', 'events_map' => array('delete' => 'extension', 'save' => 'extension') ), $config ); parent::__construct($config); } /** * Method to auto-populate the model state. * * @note Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { $app = JFactory::getApplication('administrator'); // Load the User state. $pk = $app->input->getInt('id'); $this->setState('style.id', $pk); // Load the parameters. $params = JComponentHelper::getParams('com_templates'); $this->setState('params', $params); } /** * Method to delete rows. * * @param array &$pks An array of item ids. * * @return boolean Returns true on success, false on failure. * * @since 1.6 * @throws Exception */ public function delete(&$pks) { $pks = (array) $pks; $user = JFactory::getUser(); $table = $this->getTable(); $dispatcher = JEventDispatcher::getInstance(); $context = $this->option . '.' . $this->name; JPluginHelper::importPlugin($this->events_map['delete']); // Iterate the items to delete each one. foreach ($pks as $pk) { if ($table->load($pk)) { // Access checks. if (!$user->authorise('core.delete', 'com_templates')) { throw new Exception(JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); } // You should not delete a default style if ($table->home != '0') { JError::raiseWarning(500, JText::_('COM_TEMPLATES_STYLE_CANNOT_DELETE_DEFAULT_STYLE')); return false; } // Trigger the before delete event. $result = $dispatcher->trigger($this->event_before_delete, array($context, $table)); if (in_array(false, $result, true) || !$table->delete($pk)) { $this->setError($table->getError()); return false; } // Trigger the after delete event. $dispatcher->trigger($this->event_after_delete, array($context, $table)); } else { $this->setError($table->getError()); return false; } } // Clean cache $this->cleanCache(); return true; } /** * Method to duplicate styles. * * @param array &$pks An array of primary key IDs. * * @return boolean True if successful. * * @throws Exception */ public function duplicate(&$pks) { $user = JFactory::getUser(); // Access checks. if (!$user->authorise('core.create', 'com_templates')) { throw new Exception(JText::_('JERROR_CORE_CREATE_NOT_PERMITTED')); } $dispatcher = JEventDispatcher::getInstance(); $context = $this->option . '.' . $this->name; // Include the plugins for the save events. JPluginHelper::importPlugin($this->events_map['save']); $table = $this->getTable(); foreach ($pks as $pk) { if ($table->load($pk, true)) { // Reset the id to create a new record. $table->id = 0; // Reset the home (don't want dupes of that field). $table->home = 0; // Alter the title. $m = null; $table->title = $this->generateNewTitle(null, null, $table->title); if (!$table->check()) { throw new Exception($table->getError()); } // Trigger the before save event. $result = $dispatcher->trigger($this->event_before_save, array($context, &$table, true)); if (in_array(false, $result, true) || !$table->store()) { throw new Exception($table->getError()); } // Trigger the after save event. $dispatcher->trigger($this->event_after_save, array($context, &$table, true)); } else { throw new Exception($table->getError()); } } // Clean cache $this->cleanCache(); return true; } /** * Method to change the title. * * @param integer $category_id The id of the category. * @param string $alias The alias. * @param string $title The title. * * @return string New title. * * @since 1.7.1 */ protected function generateNewTitle($category_id, $alias, $title) { // Alter the title $table = $this->getTable(); while ($table->load(array('title' => $title))) { $title = StringHelper::increment($title); } return $title; } /** * Method to get the record form. * * @param array $data An optional array of data for the form to interogate. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // The folder and element vars are passed when saving the form. if (empty($data)) { $item = $this->getItem(); $clientId = $item->client_id; $template = $item->template; } else { $clientId = ArrayHelper::getValue($data, 'client_id'); $template = ArrayHelper::getValue($data, 'template'); } // Add the default fields directory $baseFolder = $clientId ? JPATH_ADMINISTRATOR : JPATH_SITE; JForm::addFieldPath($baseFolder . '/templates/' . $template . '/field'); // These variables are used to add data from the plugin XML files. $this->setState('item.client_id', $clientId); $this->setState('item.template', $template); // Get the form. $form = $this->loadForm('com_templates.style', 'style', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } // Modify the form based on access controls. if (!$this->canEditState((object) $data)) { // Disable fields for display. $form->setFieldAttribute('home', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is a record you can edit. $form->setFieldAttribute('home', 'filter', 'unset'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_templates.edit.style.data', array()); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_templates.style', $data); return $data; } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. */ public function getItem($pk = null) { $pk = (!empty($pk)) ? $pk : (int) $this->getState('style.id'); if (!isset($this->_cache[$pk])) { // Get a row instance. $table = $this->getTable(); // Attempt to load the row. $return = $table->load($pk); // Check for a table object error. if ($return === false && $table->getError()) { $this->setError($table->getError()); return false; } // Convert to the JObject before adding other data. $properties = $table->getProperties(1); $this->_cache[$pk] = ArrayHelper::toObject($properties, 'JObject'); // Convert the params field to an array. $registry = new Registry($table->params); $this->_cache[$pk]->params = $registry->toArray(); // Get the template XML. $client = JApplicationHelper::getClientInfo($table->client_id); $path = JPath::clean($client->path . '/templates/' . $table->template . '/templateDetails.xml'); if (file_exists($path)) { $this->_cache[$pk]->xml = simplexml_load_file($path); } else { $this->_cache[$pk]->xml = null; } } return $this->_cache[$pk]; } /** * Returns a reference to the a Table object, always creating it. * * @param type $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object */ public function getTable($type = 'Style', $prefix = 'TemplatesTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to allow derived classes to preprocess the form. * * @param JForm $form A JForm object. * @param mixed $data The data expected for the form. * @param string $group The name of the plugin group to import (defaults to "content"). * * @return void * * @since 1.6 * @throws Exception if there is an error in the form event. */ protected function preprocessForm(JForm $form, $data, $group = 'content') { $clientId = $this->getState('item.client_id'); $template = $this->getState('item.template'); $lang = JFactory::getLanguage(); $client = JApplicationHelper::getClientInfo($clientId); if (!$form->loadFile('style_' . $client->name, true)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } jimport('joomla.filesystem.path'); $formFile = JPath::clean($client->path . '/templates/' . $template . '/templateDetails.xml'); // Load the core and/or local language file(s). $lang->load('tpl_' . $template, $client->path, null, false, true) || $lang->load('tpl_' . $template, $client->path . '/templates/' . $template, null, false, true); if (file_exists($formFile)) { // Get the template form. if (!$form->loadFile($formFile, false, '//config')) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } } // Disable home field if it is default style if ((is_array($data) && array_key_exists('home', $data) && $data['home'] == '1') || (is_object($data) && isset($data->home) && $data->home == '1')) { $form->setFieldAttribute('home', 'readonly', 'true'); } // Attempt to load the xml file. if (!$xml = simplexml_load_file($formFile)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Get the help data from the XML file if present. $help = $xml->xpath('/extension/help'); if (!empty($help)) { $helpKey = trim((string) $help[0]['key']); $helpURL = trim((string) $help[0]['url']); $this->helpKey = $helpKey ?: $this->helpKey; $this->helpURL = $helpURL ?: $this->helpURL; } // Trigger the default form events. parent::preprocessForm($form, $data, $group); } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. */ public function save($data) { // Detect disabled extension $extension = JTable::getInstance('Extension'); if ($extension->load(array('enabled' => 0, 'type' => 'template', 'element' => $data['template'], 'client_id' => $data['client_id']))) { $this->setError(JText::_('COM_TEMPLATES_ERROR_SAVE_DISABLED_TEMPLATE')); return false; } $app = JFactory::getApplication(); $dispatcher = JEventDispatcher::getInstance(); $table = $this->getTable(); $pk = (!empty($data['id'])) ? $data['id'] : (int) $this->getState('style.id'); $isNew = true; // Include the extension plugins for the save events. JPluginHelper::importPlugin($this->events_map['save']); // Load the row if saving an existing record. if ($pk > 0) { $table->load($pk); $isNew = false; } if ($app->input->get('task') == 'save2copy') { $data['title'] = $this->generateNewTitle(null, null, $data['title']); $data['home'] = 0; $data['assigned'] = ''; } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Prepare the row for saving $this->prepareTable($table); // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the before save event. $result = $dispatcher->trigger($this->event_before_save, array('com_templates.style', &$table, $isNew)); // Store the data. if (in_array(false, $result, true) || !$table->store()) { $this->setError($table->getError()); return false; } $user = JFactory::getUser(); if ($user->authorise('core.edit', 'com_menus') && $table->client_id == 0) { $n = 0; $db = $this->getDbo(); $user = JFactory::getUser(); if (!empty($data['assigned']) && is_array($data['assigned'])) { $data['assigned'] = ArrayHelper::toInteger($data['assigned']); // Update the mapping for menu items that this style IS assigned to. $query = $db->getQuery(true) ->update('#__menu') ->set('template_style_id = ' . (int) $table->id) ->where('id IN (' . implode(',', $data['assigned']) . ')') ->where('template_style_id != ' . (int) $table->id) ->where('checked_out IN (0,' . (int) $user->id . ')'); $db->setQuery($query); $db->execute(); $n += $db->getAffectedRows(); } // Remove style mappings for menu items this style is NOT assigned to. // If unassigned then all existing maps will be removed. $query = $db->getQuery(true) ->update('#__menu') ->set('template_style_id = 0'); if (!empty($data['assigned'])) { $query->where('id NOT IN (' . implode(',', $data['assigned']) . ')'); } $query->where('template_style_id = ' . (int) $table->id) ->where('checked_out IN (0,' . (int) $user->id . ')'); $db->setQuery($query); $db->execute(); $n += $db->getAffectedRows(); if ($n > 0) { $app->enqueueMessage(JText::plural('COM_TEMPLATES_MENU_CHANGED', $n)); } } // Clean the cache. $this->cleanCache(); // Trigger the after save event. $dispatcher->trigger($this->event_after_save, array('com_templates.style', &$table, $isNew)); $this->setState('style.id', $table->id); return true; } /** * Method to set a template style as home. * * @param integer $id The primary key ID for the style. * * @return boolean True if successful. * * @throws Exception */ public function setHome($id = 0) { $user = JFactory::getUser(); $db = $this->getDbo(); // Access checks. if (!$user->authorise('core.edit.state', 'com_templates')) { throw new Exception(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } $style = JTable::getInstance('Style', 'TemplatesTable'); if (!$style->load((int) $id)) { throw new Exception(JText::_('COM_TEMPLATES_ERROR_STYLE_NOT_FOUND')); } // Detect disabled extension $extension = JTable::getInstance('Extension'); if ($extension->load(array('enabled' => 0, 'type' => 'template', 'element' => $style->template, 'client_id' => $style->client_id))) { throw new Exception(JText::_('COM_TEMPLATES_ERROR_SAVE_DISABLED_TEMPLATE')); } // Reset the home fields for the client_id. $query = $db->getQuery(true) ->update('#__template_styles') ->set('home = ' . $db->q('0')) ->where('client_id = ' . (int) $style->client_id) ->where('home = ' . $db->q('1')); $db->setQuery($query); $db->execute(); // Set the new home style. $query = $db->getQuery(true) ->update('#__template_styles') ->set('home = ' . $db->q('1')) ->where('id = ' . (int) $id); $db->setQuery($query); $db->execute(); // Clean the cache. $this->cleanCache(); return true; } /** * Method to unset a template style as default for a language. * * @param integer $id The primary key ID for the style. * * @return boolean True if successful. * * @throws Exception */ public function unsetHome($id = 0) { $user = JFactory::getUser(); $db = $this->getDbo(); // Access checks. if (!$user->authorise('core.edit.state', 'com_templates')) { throw new Exception(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } // Lookup the client_id. $query = $db->getQuery(true) ->select('client_id, home') ->from('#__template_styles') ->where('id = ' . (int) $id); $db->setQuery($query); $style = $db->loadObject(); if (!is_numeric($style->client_id)) { throw new Exception(JText::_('COM_TEMPLATES_ERROR_STYLE_NOT_FOUND')); } elseif ($style->home == '1') { throw new Exception(JText::_('COM_TEMPLATES_ERROR_CANNOT_UNSET_DEFAULT_STYLE')); } // Set the new home style. $query = $db->getQuery(true) ->update('#__template_styles') ->set('home = ' . $db->q('0')) ->where('id = ' . (int) $id); $db->setQuery($query); $db->execute(); // Clean the cache. $this->cleanCache(); return true; } /** * Get the necessary data to load an item help screen. * * @return object An object with key, url, and local properties for loading the item help screen. * * @since 1.6 */ public function getHelp() { return (object) array('key' => $this->helpKey, 'url' => $this->helpURL); } /** * Custom clean cache method * * @param string $group The cache group * @param integer $client_id The ID of the client * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('com_templates'); parent::cleanCache('_system'); } } PKb��\k�à����,components/com_templates/models/template.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Template model class. * * @since 1.6 */ class TemplatesModelTemplate extends JModelForm { /** * The information in a template * * @var stdClass * @since 1.6 */ protected $template = null; /** * The path to the template * * @var stdClass * @since 3.2 */ protected $element = null; /** * Internal method to get file properties. * * @param string $path The base path. * @param string $name The file name. * * @return object * * @since 1.6 */ protected function getFile($path, $name) { $temp = new stdClass; if ($template = $this->getTemplate()) { $temp->name = $name; $temp->id = urlencode(base64_encode($path . $name)); return $temp; } } /** * Method to get a list of all the files to edit in a template. * * @return array A nested array of relevant files. * * @since 1.6 */ public function getFiles() { $result = array(); if ($template = $this->getTemplate()) { jimport('joomla.filesystem.folder'); $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $path = JPath::clean($client->path . '/templates/' . $template->element . '/'); $lang = JFactory::getLanguage(); // Load the core and/or local language file(s). $lang->load('tpl_' . $template->element, $client->path, null, false, true) || $lang->load('tpl_' . $template->element, $client->path . '/templates/' . $template->element, null, false, true); $this->element = $path; if (!is_writable($path)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_DIRECTORY_NOT_WRITABLE'), 'error'); } if (is_dir($path)) { $result = $this->getDirectoryTree($path); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_TEMPLATE_FOLDER_NOT_FOUND'), 'error'); return false; } } return $result; } /** * Get the directory tree. * * @param string $dir The path of the directory to scan * * @return array * * @since 3.2 */ public function getDirectoryTree($dir) { $result = array(); $dirFiles = scandir($dir); foreach ($dirFiles as $key => $value) { if (!in_array($value, array('.', '..'))) { if (is_dir($dir . $value)) { $relativePath = str_replace($this->element, '', $dir . $value); $result['/' . $relativePath] = $this->getDirectoryTree($dir . $value . '/'); } else { $ext = pathinfo($dir . $value, PATHINFO_EXTENSION); $allowedFormat = $this->checkFormat($ext); if ($allowedFormat == true) { $relativePath = str_replace($this->element, '', $dir); $info = $this->getFile('/' . $relativePath, $value); $result[] = $info; } } } } return $result; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { jimport('joomla.filesystem.file'); $app = JFactory::getApplication('administrator'); // Load the User state. $pk = $app->input->getInt('id'); $this->setState('extension.id', $pk); // Load the parameters. $params = JComponentHelper::getParams('com_templates'); $this->setState('params', $params); } /** * Method to get the template information. * * @return mixed Object if successful, false if not and internal error is set. * * @since 1.6 */ public function &getTemplate() { if (empty($this->template)) { $pk = $this->getState('extension.id'); $db = $this->getDbo(); $app = JFactory::getApplication(); // Get the template information. $query = $db->getQuery(true) ->select('extension_id, client_id, element, name, manifest_cache') ->from('#__extensions') ->where($db->quoteName('extension_id') . ' = ' . (int) $pk) ->where($db->quoteName('type') . ' = ' . $db->quote('template')); $db->setQuery($query); try { $result = $db->loadObject(); } catch (RuntimeException $e) { $app->enqueueMessage($e->getMessage(), 'warning'); $this->template = false; return false; } if (empty($result)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_EXTENSION_RECORD_NOT_FOUND'), 'error'); $this->template = false; } else { $this->template = $result; } } return $this->template; } /** * Method to check if new template name already exists * * @return boolean true if name is not used, false otherwise * * @since 2.5 */ public function checkNewName() { $db = $this->getDbo(); $query = $db->getQuery(true) ->select('COUNT(*)') ->from('#__extensions') ->where('name = ' . $db->quote($this->getState('new_name'))); $db->setQuery($query); return ($db->loadResult() == 0); } /** * Method to check if new template name already exists * * @return string name of current template * * @since 2.5 */ public function getFromName() { return $this->getTemplate()->element; } /** * Method to check if new template name already exists * * @return boolean true if name is not used, false otherwise * * @since 2.5 */ public function copy() { $app = JFactory::getApplication(); if ($template = $this->getTemplate()) { jimport('joomla.filesystem.folder'); $client = JApplicationHelper::getClientInfo($template->client_id); $fromPath = JPath::clean($client->path . '/templates/' . $template->element . '/'); // Delete new folder if it exists $toPath = $this->getState('to_path'); if (JFolder::exists($toPath)) { if (!JFolder::delete($toPath)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_COULD_NOT_WRITE'), 'error'); return false; } } // Copy all files from $fromName template to $newName folder if (!JFolder::copy($fromPath, $toPath) || !$this->fixTemplateName()) { return false; } return true; } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_INVALID_FROM_NAME'), 'error'); return false; } } /** * Method to delete tmp folder * * @return boolean true if delete successful, false otherwise * * @since 2.5 */ public function cleanup() { // Clear installation messages $app = JFactory::getApplication(); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); // Delete temporary directory return JFolder::delete($this->getState('to_path')); } /** * Method to rename the template in the XML files and rename the language files * * @return boolean true if successful, false otherwise * * @since 2.5 */ protected function fixTemplateName() { // Rename Language files // Get list of language files $result = true; $files = JFolder::files($this->getState('to_path'), '.ini', true, true); $newName = strtolower($this->getState('new_name')); $template = $this->getTemplate(); $oldName = $template->element; $manifest = json_decode($template->manifest_cache); jimport('joomla.filesystem.file'); foreach ($files as $file) { $newFile = '/' . str_replace($oldName, $newName, basename($file)); $result = JFile::move($file, dirname($file) . $newFile) && $result; } // Edit XML file $xmlFile = $this->getState('to_path') . '/templateDetails.xml'; if (JFile::exists($xmlFile)) { $contents = file_get_contents($xmlFile); $pattern[] = '#<name>\s*' . $manifest->name . '\s*</name>#i'; $replace[] = '<name>' . $newName . '</name>'; $pattern[] = '#<language(.*)' . $oldName . '(.*)</language>#'; $replace[] = '<language${1}' . $newName . '${2}</language>'; $contents = preg_replace($pattern, $replace, $contents); $result = JFile::write($xmlFile, $contents) && $result; } return $result; } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { $app = JFactory::getApplication(); // Codemirror or Editor None should be enabled $db = $this->getDbo(); $query = $db->getQuery(true) ->select('COUNT(*)') ->from('#__extensions as a') ->where( '(a.name =' . $db->quote('plg_editors_codemirror') . ' AND a.enabled = 1) OR (a.name =' . $db->quote('plg_editors_none') . ' AND a.enabled = 1)' ); $db->setQuery($query); $state = $db->loadResult(); if ((int) $state < 1) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_EDITOR_DISABLED'), 'warning'); } // Get the form. $form = $this->loadForm('com_templates.source', 'source', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { $data = $this->getSource(); $this->preprocessData('com_templates.source', $data); return $data; } /** * Method to get a single record. * * @return mixed Object on success, false on failure. * * @since 1.6 */ public function &getSource() { $app = JFactory::getApplication(); $item = new stdClass; if (!$this->template) { $this->getTemplate(); } if ($this->template) { $input = JFactory::getApplication()->input; $fileName = base64_decode($input->get('file')); $client = JApplicationHelper::getClientInfo($this->template->client_id); try { $filePath = JPath::check($client->path . '/templates/' . $this->template->element . '/' . $fileName); } catch (Exception $e) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_FILE_NOT_FOUND'), 'error'); return; } if (file_exists($filePath)) { $item->extension_id = $this->getState('extension.id'); $item->filename = $fileName; $item->source = file_get_contents($filePath); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_FILE_NOT_FOUND'), 'error'); } } return $item; } /** * Method to store the source file contents. * * @param array $data The source data to save. * * @return boolean True on success, false otherwise and internal error set. * * @since 1.6 */ public function save($data) { jimport('joomla.filesystem.file'); // Get the template. $template = $this->getTemplate(); if (empty($template)) { return false; } $app = JFactory::getApplication(); $fileName = base64_decode($app->input->get('file')); $client = JApplicationHelper::getClientInfo($template->client_id); $filePath = JPath::clean($client->path . '/templates/' . $template->element . '/' . $fileName); // Include the extension plugins for the save events. JPluginHelper::importPlugin('extension'); $user = get_current_user(); chown($filePath, $user); JPath::setPermissions($filePath, '0644'); // Try to make the template file writable. if (!is_writable($filePath)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_FILE_NOT_WRITABLE'), 'warning'); $app->enqueueMessage(JText::sprintf('COM_TEMPLATES_FILE_PERMISSIONS', JPath::getPermissions($filePath)), 'warning'); if (!JPath::isOwner($filePath)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_CHECK_FILE_OWNERSHIP'), 'warning'); } return false; } // Make sure EOL is Unix $data['source'] = str_replace(array("\r\n", "\r"), "\n", $data['source']); $return = JFile::write($filePath, $data['source']); if (!$return) { $app->enqueueMessage(JText::sprintf('COM_TEMPLATES_ERROR_FAILED_TO_SAVE_FILENAME', $fileName), 'error'); return false; } // Get the extension of the changed file. $explodeArray = explode('.', $fileName); $ext = end($explodeArray); if ($ext == 'less') { $app->enqueueMessage(JText::sprintf('COM_TEMPLATES_COMPILE_LESS', $fileName)); } return true; } /** * Get overrides folder. * * @param string $name The name of override. * @param string $path Location of override. * * @return object containing override name and path. * * @since 3.2 */ public function getOverridesFolder($name,$path) { $folder = new stdClass; $folder->name = $name; $folder->path = base64_encode($path . $name); return $folder; } /** * Get a list of overrides. * * @return array containing overrides. * * @since 3.2 */ public function getOverridesList() { if ($template = $this->getTemplate()) { $client = JApplicationHelper::getClientInfo($template->client_id); $componentPath = JPath::clean($client->path . '/components/'); $modulePath = JPath::clean($client->path . '/modules/'); $pluginPath = JPath::clean(JPATH_ROOT . '/plugins/'); $layoutPath = JPath::clean(JPATH_ROOT . '/layouts/'); $components = JFolder::folders($componentPath); foreach ($components as $component) { if (file_exists($componentPath . '/' . $component . '/views/')) { $viewPath = JPath::clean($componentPath . '/' . $component . '/views/'); } elseif (file_exists($componentPath . '/' . $component . '/view/')) { $viewPath = JPath::clean($componentPath . '/' . $component . '/view/'); } else { $viewPath = ''; } if ($viewPath) { $views = JFolder::folders($viewPath); foreach ($views as $view) { // Only show the view has layout inside it if (file_exists($viewPath . $view . '/tmpl')) { $result['components'][$component][] = $this->getOverridesFolder($view, $viewPath); } } } } foreach (JFolder::folders($pluginPath) as $pluginGroup) { foreach (JFolder::folders($pluginPath . '/' . $pluginGroup) as $plugin) { if (file_exists($pluginPath . '/' . $pluginGroup . '/' . $plugin . '/tmpl/')) { $pluginLayoutPath = JPath::clean($pluginPath . '/' . $pluginGroup . '/'); $result['plugins'][$pluginGroup][] = $this->getOverridesFolder($plugin, $pluginLayoutPath); } } } $modules = JFolder::folders($modulePath); foreach ($modules as $module) { $result['modules'][] = $this->getOverridesFolder($module, $modulePath); } $layoutFolders = JFolder::folders($layoutPath); foreach ($layoutFolders as $layoutFolder) { $layoutFolderPath = JPath::clean($layoutPath . '/' . $layoutFolder . '/'); $layouts = JFolder::folders($layoutFolderPath); foreach ($layouts as $layout) { $result['layouts'][$layoutFolder][] = $this->getOverridesFolder($layout, $layoutFolderPath); } } // Check for layouts in component folders foreach ($components as $component) { if (file_exists($componentPath . '/' . $component . '/layouts/')) { $componentLayoutPath = JPath::clean($componentPath . '/' . $component . '/layouts/'); if ($componentLayoutPath) { $layouts = JFolder::folders($componentLayoutPath); foreach ($layouts as $layout) { $result['layouts'][$component][] = $this->getOverridesFolder($layout, $componentLayoutPath); } } } } } if (!empty($result)) { return $result; } } /** * Create overrides. * * @param string $override The override location. * * @return boolean true if override creation is successful, false otherwise * * @since 3.2 */ public function createOverride($override) { jimport('joomla.filesystem.folder'); if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $explodeArray = explode(DIRECTORY_SEPARATOR, $override); $name = end($explodeArray); $client = JApplicationHelper::getClientInfo($template->client_id); if (stristr($name, 'mod_') != false) { $htmlPath = JPath::clean($client->path . '/templates/' . $template->element . '/html/' . $name); } elseif (stristr($override, 'com_') != false) { $size = count($explodeArray); $url = JPath::clean($explodeArray[$size - 3] . '/' . $explodeArray[$size - 1]); if ($explodeArray[$size - 2] == 'layouts') { $htmlPath = JPath::clean($client->path . '/templates/' . $template->element . '/html/layouts/' . $url); } else { $htmlPath = JPath::clean($client->path . '/templates/' . $template->element . '/html/' . $url); } } elseif (stripos($override, JPath::clean(JPATH_ROOT . '/plugins/')) === 0) { $size = count($explodeArray); $layoutPath = JPath::clean('plg_' . $explodeArray[$size - 2] . '_' . $explodeArray[$size - 1]); $htmlPath = JPath::clean($client->path . '/templates/' . $template->element . '/html/' . $layoutPath); } else { $layoutPath = implode('/', array_slice($explodeArray, -2)); $htmlPath = JPath::clean($client->path . '/templates/' . $template->element . '/html/layouts/' . $layoutPath); } // Check Html folder, create if not exist if (!JFolder::exists($htmlPath)) { if (!JFolder::create($htmlPath)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FOLDER_ERROR'), 'error'); return false; } } if (stristr($name, 'mod_') != false) { $return = $this->createTemplateOverride(JPath::clean($override . '/tmpl'), $htmlPath); } elseif (stristr($override, 'com_') != false && stristr($override, 'layouts') == false) { $return = $this->createTemplateOverride(JPath::clean($override . '/tmpl'), $htmlPath); } elseif (stripos($override, JPath::clean(JPATH_ROOT . '/plugins/')) === 0) { $return = $this->createTemplateOverride(JPath::clean($override . '/tmpl'), $htmlPath); } else { $return = $this->createTemplateOverride($override, $htmlPath); } if ($return) { $app->enqueueMessage(JText::_('COM_TEMPLATES_OVERRIDE_CREATED') . str_replace(JPATH_ROOT, '', $htmlPath)); return true; } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_OVERRIDE_FAILED'), 'error'); return false; } } } /** * Create override folder & file * * @param string $overridePath The override location * @param string $htmlPath The html location * * @return boolean True on success. False otherwise. */ public function createTemplateOverride($overridePath, $htmlPath) { $return = false; if (empty($overridePath) || empty($htmlPath)) { return $return; } // Get list of template folders $folders = JFolder::folders($overridePath, null, true, true); if (!empty($folders)) { foreach ($folders as $folder) { $htmlFolder = $htmlPath . str_replace($overridePath, '', $folder); if (!JFolder::exists($htmlFolder)) { JFolder::create($htmlFolder); } } } // Get list of template files (Only get *.php file for template file) $files = JFolder::files($overridePath, '.php', true, true); if (empty($files)) { return true; } foreach ($files as $file) { $overrideFilePath = str_replace($overridePath, '', $file); $htmlFilePath = $htmlPath . $overrideFilePath; if (JFile::exists($htmlFilePath)) { // Generate new unique file name base on current time $today = JFactory::getDate(); $htmlFilePath = JFile::stripExt($htmlFilePath) . '-' . $today->format('Ymd-His') . '.' . JFile::getExt($htmlFilePath); } $return = JFile::copy($file, $htmlFilePath, '', true); } return $return; } /** * Compile less using the less compiler under /build. * * @param string $input The relative location of the less file. * * @return boolean true if compilation is successful, false otherwise * * @since 3.2 */ public function compileLess($input) { if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $path = JPath::clean($client->path . '/templates/' . $template->element . '/'); $inFile = urldecode(base64_decode($input)); $explodeArray = explode('/', $inFile); $fileName = end($explodeArray); $outFile = reset(explode('.', $fileName)); $less = new JLess; $less->setFormatter(new JLessFormatterJoomla); try { $less->compileFile($path . $inFile, $path . 'css/' . $outFile . '.css'); return true; } catch (Exception $e) { $app->enqueueMessage($e->getMessage(), 'error'); } } } /** * Delete a particular file. * * @param string $file The relative location of the file. * * @return boolean True if file deletion is successful, false otherwise * * @since 3.2 */ public function deleteFile($file) { if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $path = JPath::clean($client->path . '/templates/' . $template->element . '/'); $filePath = $path . urldecode(base64_decode($file)); $return = JFile::delete($filePath); if (!$return) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_DELETE_FAIL'), 'error'); return false; } return true; } } /** * Create new file. * * @param string $name The name of file. * @param string $type The extension of the file. * @param string $location Location for the new file. * * @return boolean true if file created successfully, false otherwise * * @since 3.2 */ public function createFile($name, $type, $location) { if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $path = JPath::clean($client->path . '/templates/' . $template->element . '/'); if (file_exists(JPath::clean($path . '/' . $location . '/' . $name . '.' . $type))) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_EXISTS'), 'error'); return false; } if (!fopen(JPath::clean($path . '/' . $location . '/' . $name . '.' . $type), 'x')) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_CREATE_ERROR'), 'error'); return false; } // Check if the format is allowed and will be showed in the backend $check = $this->checkFormat($type); // Add a message if we are not allowed to show this file in the backend. if (!$check) { $app->enqueueMessage(JText::sprintf('COM_TEMPLATES_WARNING_FORMAT_WILL_NOT_BE_VISIBLE', $type), 'warning'); } return true; } } /** * Upload new file. * * @param string $file The name of the file. * @param string $location Location for the new file. * * @return boolean True if file uploaded successfully, false otherwise * * @since 3.2 */ public function uploadFile($file, $location) { jimport('joomla.filesystem.folder'); if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $path = JPath::clean($client->path . '/templates/' . $template->element . '/'); $fileName = JFile::makeSafe($file['name']); $err = null; JLoader::register('TemplateHelper', JPATH_ADMINISTRATOR . '/components/com_templates/helpers/template.php'); if (!TemplateHelper::canUpload($file, $err)) { // Can't upload the file return false; } if (file_exists(JPath::clean($path . '/' . $location . '/' . $file['name']))) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_EXISTS'), 'error'); return false; } if (!JFile::upload($file['tmp_name'], JPath::clean($path . '/' . $location . '/' . $fileName))) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_UPLOAD_ERROR'), 'error'); return false; } $url = JPath::clean($location . '/' . $fileName); return $url; } } /** * Create new folder. * * @param string $name The name of the new folder. * @param string $location Location for the new folder. * * @return boolean True if override folder is created successfully, false otherwise * * @since 3.2 */ public function createFolder($name, $location) { jimport('joomla.filesystem.folder'); if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $path = JPath::clean($client->path . '/templates/' . $template->element . '/'); if (file_exists(JPath::clean($path . '/' . $location . '/' . $name . '/'))) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FOLDER_EXISTS'), 'error'); return false; } if (!JFolder::create(JPath::clean($path . '/' . $location . '/' . $name))) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FOLDER_CREATE_ERROR'), 'error'); return false; } return true; } } /** * Delete a folder. * * @param string $location The name and location of the folder. * * @return boolean True if override folder is deleted successfully, false otherwise * * @since 3.2 */ public function deleteFolder($location) { jimport('joomla.filesystem.folder'); if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $path = JPath::clean($client->path . '/templates/' . $template->element . '/' . $location); if (!file_exists($path)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FOLDER_NOT_EXISTS'), 'error'); return false; } $return = JFolder::delete($path); if (!$return) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_DELETE_ERROR'), 'error'); return false; } return true; } } /** * Rename a file. * * @param string $file The name and location of the old file * @param string $name The new name of the file. * * @return string Encoded string containing the new file location. * * @since 3.2 */ public function renameFile($file, $name) { if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $path = JPath::clean($client->path . '/templates/' . $template->element . '/'); $fileName = base64_decode($file); $explodeArray = explode('.', $fileName); $type = end($explodeArray); $explodeArray = explode('/', $fileName); $newName = str_replace(end($explodeArray), $name . '.' . $type, $fileName); if (file_exists($path . $newName)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_EXISTS'), 'error'); return false; } if (!rename($path . $fileName, $path . $newName)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_RENAME_ERROR'), 'error'); return false; } return base64_encode($newName); } } /** * Get an image address, height and width. * * @return array an associative array containing image address, height and width. * * @since 3.2 */ public function getImage() { if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $fileName = base64_decode($app->input->get('file')); $path = JPath::clean($client->path . '/templates/' . $template->element . '/'); if (stristr($client->path, 'administrator') == false) { $folder = '/templates/'; } else { $folder = '/administrator/templates/'; } $uri = JUri::root(true) . $folder . $template->element; if (file_exists(JPath::clean($path . $fileName))) { $JImage = new JImage(JPath::clean($path . $fileName)); $image['address'] = $uri . $fileName; $image['path'] = $fileName; $image['height'] = $JImage->getHeight(); $image['width'] = $JImage->getWidth(); } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_IMAGE_FILE_NOT_FOUND'), 'error'); return false; } return $image; } } /** * Crop an image. * * @param string $file The name and location of the file * @param string $w width. * @param string $h height. * @param string $x x-coordinate. * @param string $y y-coordinate. * * @return boolean true if image cropped successfully, false otherwise. * * @since 3.2 */ public function cropImage($file, $w, $h, $x, $y) { if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $relPath = base64_decode($file); $path = JPath::clean($client->path . '/templates/' . $template->element . '/' . $relPath); $JImage = new JImage($path); try { $image = $JImage->crop($w, $h, $x, $y, true); $image->toFile($path); return true; } catch (Exception $e) { $app->enqueueMessage($e->getMessage(), 'error'); } } } /** * Resize an image. * * @param string $file The name and location of the file * @param string $width The new width of the image. * @param string $height The new height of the image. * * @return boolean true if image resize successful, false otherwise. * * @since 3.2 */ public function resizeImage($file, $width, $height) { if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $relPath = base64_decode($file); $path = JPath::clean($client->path . '/templates/' . $template->element . '/' . $relPath); $JImage = new JImage($path); try { $image = $JImage->resize($width, $height, true, 1); $image->toFile($path); return true; } catch (Exception $e) { $app->enqueueMessage($e->getMessage(), 'error'); } } } /** * Template preview. * * @return object object containing the id of the template. * * @since 3.2 */ public function getPreview() { $app = JFactory::getApplication(); $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('id, client_id'); $query->from('#__template_styles'); $query->where($db->quoteName('template') . ' = ' . $db->quote($this->template->element)); $db->setQuery($query); try { $result = $db->loadObject(); } catch (RuntimeException $e) { $app->enqueueMessage($e->getMessage(), 'warning'); } if (empty($result)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_EXTENSION_RECORD_NOT_FOUND'), 'warning'); } else { return $result; } } /** * Rename a file. * * @return mixed array on success, false on failure * * @since 3.2 */ public function getFont() { if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $relPath = base64_decode($app->input->get('file')); $explodeArray = explode('/', $relPath); $fileName = end($explodeArray); $path = JPath::clean($client->path . '/templates/' . $template->element . '/' . $relPath); if (stristr($client->path, 'administrator') == false) { $folder = '/templates/'; } else { $folder = '/administrator/templates/'; } $uri = JUri::root(true) . $folder . $template->element; if (file_exists(JPath::clean($path))) { $font['address'] = $uri . $relPath; $font['rel_path'] = $relPath; $font['name'] = $fileName; } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FONT_FILE_NOT_FOUND'), 'error'); return false; } return $font; } } /** * Copy a file. * * @param string $newName The name of the copied file * @param string $location The final location where the file is to be copied * @param string $file The name and location of the file * * @return boolean true if image resize successful, false otherwise. * * @since 3.2 */ public function copyFile($newName, $location, $file) { if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $relPath = base64_decode($file); $explodeArray = explode('.', $relPath); $ext = end($explodeArray); $path = JPath::clean($client->path . '/templates/' . $template->element . '/'); $newPath = JPath::clean($path . '/' . $location . '/' . $newName . '.' . $ext); if (file_exists($newPath)) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_EXISTS'), 'error'); return false; } if (JFile::copy($path . $relPath, $newPath)) { $app->enqueueMessage(JText::sprintf('COM_TEMPLATES_FILE_COPY_SUCCESS', $newName . '.' . $ext)); return true; } else { return false; } } } /** * Get the compressed files. * * @return array if file exists, false otherwise * * @since 3.2 */ public function getArchive() { if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $relPath = base64_decode($app->input->get('file')); $path = JPath::clean($client->path . '/templates/' . $template->element . '/' . $relPath); if (file_exists(JPath::clean($path))) { $files = array(); $zip = new ZipArchive; if ($zip->open($path) === true) { for ($i = 0; $i < $zip->numFiles; $i++) { $entry = $zip->getNameIndex($i); $files[] = $entry; } } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_OPEN_FAIL'), 'error'); return false; } } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FONT_FILE_NOT_FOUND'), 'error'); return false; } return $files; } } /** * Extract contents of an archive file. * * @param string $file The name and location of the file * * @return boolean true if image extraction is successful, false otherwise. * * @since 3.2 */ public function extractArchive($file) { if ($template = $this->getTemplate()) { $app = JFactory::getApplication(); $client = JApplicationHelper::getClientInfo($template->client_id); $relPath = base64_decode($file); $explodeArray = explode('/', $relPath); $fileName = end($explodeArray); $folderPath = stristr($relPath, $fileName, true); $path = JPath::clean($client->path . '/templates/' . $template->element . '/' . $folderPath . '/'); if (file_exists(JPath::clean($path . '/' . $fileName))) { $zip = new ZipArchive; if ($zip->open(JPath::clean($path . '/' . $fileName)) === true) { for ($i = 0; $i < $zip->numFiles; $i++) { $entry = $zip->getNameIndex($i); if (file_exists(JPath::clean($path . '/' . $entry))) { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_EXISTS'), 'error'); return false; } } $zip->extractTo($path); return true; } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_OPEN_FAIL'), 'error'); return false; } } else { $app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_NOT_FOUND'), 'error'); return false; } } } /** * Check if the extension is allowed and will be shown in the template manager * * @param string $ext The extension to check if it is allowed * * @return boolean true if the extension is allowed false otherwise * * @since 3.6.0 */ protected function checkFormat($ext) { if (!isset($this->allowedFormats)) { $params = JComponentHelper::getParams('com_templates'); $imageTypes = explode(',', $params->get('image_formats')); $sourceTypes = explode(',', $params->get('source_formats')); $fontTypes = explode(',', $params->get('font_formats')); $archiveTypes = explode(',', $params->get('compressed_formats')); $this->allowedFormats = array_merge($imageTypes, $sourceTypes, $fontTypes, $archiveTypes); } return in_array($ext, $this->allowedFormats); } } PKb��\�nxx*components/com_templates/models/styles.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Methods supporting a list of template style records. * * @since 1.6 */ class TemplatesModelStyles extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JControllerLegacy * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'title', 'a.title', 'template', 'a.template', 'home', 'a.home', 'menuitem', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.template', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.template', $this->getUserStateFromRequest($this->context . '.filter.template', 'filter_template', '', 'string')); $this->setState('filter.menuitem', $this->getUserStateFromRequest($this->context . '.filter.menuitem', 'filter_menuitem', '', 'cmd')); // Special case for the client id. $clientId = (int) $this->getUserStateFromRequest($this->context . '.client_id', 'client_id', 0, 'int'); $clientId = (!in_array($clientId, array (0, 1))) ? 0 : $clientId; $this->setState('client_id', $clientId); // Load the parameters. $params = JComponentHelper::getParams('com_templates'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('client_id'); $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.template'); $id .= ':' . $this->getState('filter.menuitem'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { $clientId = (int) $this->getState('client_id'); // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.template, a.title, a.home, a.client_id, l.title AS language_title, l.image as image, l.sef AS language_sef' ) ); $query->from($db->quoteName('#__template_styles', 'a')) ->where($db->quoteName('a.client_id') . ' = ' . $clientId); // Join on menus. $query->select('COUNT(m.template_style_id) AS assigned') ->join('LEFT', $db->quoteName('#__menu', 'm') . ' ON ' . $db->quoteName('m.template_style_id') . ' = ' . $db->quoteName('a.id')) ->group('a.id, a.template, a.title, a.home, a.client_id, l.title, l.image, e.extension_id, l.sef'); // Join over the language. $query->join('LEFT', $db->quoteName('#__languages', 'l') . ' ON ' . $db->quoteName('l.lang_code') . ' = ' . $db->quoteName('a.home')); // Filter by extension enabled. $query->select($db->quoteName('extension_id', 'e_id')) ->join('LEFT', $db->quoteName('#__extensions', 'e') . ' ON e.element = a.template AND e.client_id = a.client_id') ->where($db->quoteName('e.enabled') . ' = 1') ->where($db->quoteName('e.type') . ' = ' . $db->quote('template')); // Filter by template. if ($template = $this->getState('filter.template')) { $query->where($db->quoteName('a.template') . ' = ' . $db->quote($template)); } // Filter by menuitem. $menuItemId = $this->getState('filter.menuitem'); if ($clientId === 0 && is_numeric($menuItemId)) { // If user selected the templates styles that are not assigned to any page. if ((int) $menuItemId === -1) { // Only custom template styles overrides not assigned to any menu item. $query->where($db->quoteName('a.home') . ' = ' . $db->quote(0)) ->where($db->quoteName('m.id') . ' IS NULL'); } // If user selected the templates styles assigned to particular pages. else { // Subquery to get the language of the selected menu item. $menuItemLanguageSubQuery = $db->getQuery(true); $menuItemLanguageSubQuery->select($db->quoteName('language')) ->from($db->quoteName('#__menu')) ->where($db->quoteName('id') . ' = ' . $menuItemId); // Subquery to get the language of the selected menu item. $templateStylesMenuItemsSubQuery = $db->getQuery(true); $templateStylesMenuItemsSubQuery->select($db->quoteName('id')) ->from($db->quoteName('#__menu')) ->where($db->quoteName('template_style_id') . ' = ' . $db->quoteName('a.id')); // Main query where clause. $query->where('(' . // Default template style (fallback template style to all menu items). $db->quoteName('a.home') . ' = ' . $db->quote(1) . ' OR ' . // Default template style for specific language (fallback template style to the selected menu item language). $db->quoteName('a.home') . ' IN (' . $menuItemLanguageSubQuery . ') OR ' . // Custom template styles override (only if assigned to the selected menu item). '(' . $db->quoteName('a.home') . ' = ' . $db->quote(0) . ' AND ' . $menuItemId . ' IN (' . $templateStylesMenuItemsSubQuery . '))' . ')' ); } } // Filter by search in title. if ($search = $this->getState('filter.search')) { if (stripos($search, 'id:') === 0) { $query->where($db->quoteName('a.id') . ' = ' . (int) substr($search, 3)); } else { $search = $db->quote('%' . strtolower($search) . '%'); $query->where('(' . ' LOWER(a.template) LIKE ' . $search . ' OR LOWER(a.title) LIKE ' . $search . ')'); } } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.template')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } } PKb��\���CC4components/com_templates/models/forms/style_site.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="home" type="contentlanguage" label="COM_TEMPLATES_FIELD_HOME_LABEL" description="COM_TEMPLATES_FIELD_HOME_SITE_DESC" default="0" > <option value="0">JNO</option> <option value="1">JALL</option> </field> </fieldset> </form> PKb��\�_��0components/com_templates/models/forms/source.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="extension_id" type="hidden" /> <field name="filename" type="hidden" /> <field name="source" type="editor" label="COM_TEMPLATES_FIELD_SOURCE_LABEL" description="COM_TEMPLATES_FIELD_SOURCE_DESC" editor="codemirror|none" buttons="no" height="500px" rows="20" cols="80" syntax="php" filter="raw" /> </fieldset> </form> PKb��\���gg=components/com_templates/models/forms/style_administrator.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="home" type="radio" label="COM_TEMPLATES_FIELD_HOME_LABEL" description="COM_TEMPLATES_FIELD_HOME_ADMINISTRATOR_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> </form> PKb��\[U�r��/components/com_templates/models/forms/style.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="id" type="number" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" id="id" default="0" readonly="true" class="readonly" /> <field name="template" type="text" label="COM_TEMPLATES_FIELD_TEMPLATE_LABEL" description="COM_TEMPLATES_FIELD_TEMPLATE_DESC" class="readonly" size="30" readonly="true" /> <field name="client_id" type="hidden" label="COM_TEMPLATES_FIELD_CLIENT_LABEL" description="COM_TEMPLATES_FIELD_CLIENT_DESC" class="readonly" default="0" readonly="true" /> <field name="title" type="text" label="COM_TEMPLATES_FIELD_TITLE_LABEL" description="COM_TEMPLATES_FIELD_TITLE_DESC" class="input-xxlarge input-large-text" size="50" required="true" /> <field name="assigned" type="hidden" /> </fieldset> </form> PKb��\��t��-components/com_templates/models/templates.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Methods supporting a list of template extension records. * * @since 1.6 */ class TemplatesModelTemplates extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JControllerLegacy * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'name', 'a.name', 'folder', 'a.folder', 'element', 'a.element', 'checked_out', 'a.checked_out', 'checked_out_time', 'a.checked_out_time', 'state', 'a.state', 'enabled', 'a.enabled', 'ordering', 'a.ordering', ); } parent::__construct($config); } /** * Override parent getItems to add extra XML metadata. * * @return array * * @since 1.6 */ public function getItems() { $items = parent::getItems(); foreach ($items as &$item) { $client = JApplicationHelper::getClientInfo($item->client_id); $item->xmldata = TemplatesHelper::parseXMLTemplateFile($client->path, $item->element); } return $items; } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.extension_id, a.name, a.element, a.client_id' ) ); $query->from($db->quoteName('#__extensions', 'a')) ->where($db->quoteName('a.client_id') . ' = ' . (int) $this->getState('client_id')) ->where($db->quoteName('a.enabled') . ' = 1') ->where($db->quoteName('a.type') . ' = ' . $db->quote('template')); // Filter by search in title. if ($search = $this->getState('filter.search')) { if (stripos($search, 'id:') === 0) { $query->where($db->quoteName('a.id') . ' = ' . (int) substr($search, 3)); } else { $search = $db->quote('%' . strtolower($search) . '%'); $query->where('(' . ' LOWER(a.element) LIKE ' . $search . ' OR LOWER(a.name) LIKE ' . $search . ')'); } } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.element')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('client_id'); $id .= ':' . $this->getState('filter.search'); return parent::getStoreId($id); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.element', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); // Special case for the client id. $clientId = (int) $this->getUserStateFromRequest($this->context . '.client_id', 'client_id', 0, 'int'); $clientId = (!in_array($clientId, array (0, 1))) ? 0 : $clientId; $this->setState('client_id', $clientId); // Load the parameters. $params = JComponentHelper::getParams('com_templates'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } } PKb��\�f���'components/com_templates/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_templates * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Templates manager master display controller. * * @since 1.6 */ class TemplatesController extends JControllerLegacy { /** * @var string The default view. * @since 1.6 */ protected $default_view = 'styles'; /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param boolean $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return TemplatesController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { $view = $this->input->get('view', 'styles'); $layout = $this->input->get('layout', 'default'); $id = $this->input->getInt('id'); $document = JFactory::getDocument(); // For JSON requests if ($document->getType() == 'json') { $view = new TemplatesViewStyle; // Get/Create the model if ($model = new TemplatesModelStyle) { $model->addTablePath(JPATH_ADMINISTRATOR . '/components/com_templates/tables'); // Push the model into the view (as default) $view->setModel($model, true); } $view->document = $document; return $view->display(); } // Check for edit form. if ($view == 'style' && $layout == 'edit' && !$this->checkEditId('com_templates.edit.style', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_templates&view=styles', false)); return false; } return parent::display(); } } PKb��\�^�ss*components/com_postinstall/postinstall.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_postinstall * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Dispatch the component. FOFDispatcher::getTmpInstance('com_postinstall')->dispatch(); PKb��\���&&2components/com_postinstall/controllers/message.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_postinstall * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Postinstall message controller. * * @since 3.2 */ class PostinstallControllerMessage extends FOFController { /** * Resets all post-installation messages of the specified extension. * * @return void * * @since 3.2 */ public function reset() { /** @var PostinstallModelMessages $model */ $model = $this->getThisModel(); $eid = (int) $model->getState('eid', '700', 'int'); if (empty($eid)) { $eid = 700; } $model->resetMessages($eid); $this->setRedirect('index.php?option=com_postinstall&eid=' . $eid); } /** * Hides all post-installation messages of the specified extension. * * @return void * * @since 3.8.7 */ public function hideAll() { /** @var PostinstallModelMessages $model */ $model = $this->getThisModel(); $eid = (int) $model->getState('eid', '700', 'int'); if (empty($eid)) { $eid = 700; } $model->hideMessages($eid); $this->setRedirect('index.php?option=com_postinstall&eid=' . $eid); } /** * Executes the action associated with an item. * * @return void * * @since 3.2 */ public function action() { // CSRF prevention. if ($this->csrfProtection) { $this->_csrfProtection(); } $model = $this->getThisModel(); if (!$model->getId()) { $model->setIDsFromRequest(); } $item = $model->getItem(); switch ($item->type) { case 'link': $this->setRedirect($item->action); return; break; case 'action': jimport('joomla.filesystem.file'); $file = FOFTemplateUtils::parsePath($item->action_file, true); if (JFile::exists($file)) { require_once $file; call_user_func($item->action); } break; case 'message': default: break; } $this->setRedirect('index.php?option=com_postinstall'); } } PKb��\9�����"components/com_postinstall/fof.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?> <fof> <backend> <dispatcher> <option name="default_view">messages</option> </dispatcher> <view name="messages"> <acl> <task name="reset">core.edit.state</task> </acl> <taskmap> <task name="read">browse</task> <task name="add">browse</task> <task name="edit">browse</task> </taskmap> </view> </backend> </fof> PKb��\9x��UU%components/com_postinstall/config.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?> <config> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" component="com_postinstall" section="component" /> </fieldset> </config>PKb��\?�6�NN%components/com_postinstall/access.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <access component="com_postinstall"> <section name="component"> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKb��\�S�B��&components/com_postinstall/toolbar.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_postinstall * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * The Toolbar class renders the component title area and the toolbar. * * @since 3.2 */ class PostinstallToolbar extends FOFToolbar { /** * Setup the toolbar and title * * @return void * * @since 3.2 */ public function onMessages() { JToolBarHelper::preferences($this->config['option'], 550, 875); JToolbarHelper::help('JHELP_COMPONENTS_POST_INSTALLATION_MESSAGES'); } } PKb��\�W�ט�:components/com_postinstall/views/messages/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_postinstall * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $renderer = JFactory::getDocument()->loadRenderer('module'); $options = array('style' => 'raw'); $mod = JModuleHelper::getModule('mod_feed'); $param = array( 'rssurl' => 'https://www.joomla.org/announcements/release-news.feed?type=rss', 'rsstitle' => 0, 'rssdesc' => 0, 'rssimage' => 1, 'rssitems' => 5, 'rssitemdesc' => 1, 'word_count' => 200, 'cache' => 0, ); $params = array('params' => json_encode($param)); JHtml::_('formbehavior.chosen', 'select'); ?> <form action="index.php" method="post" name="adminForm" class="form-inline" id="adminForm"> <input type="hidden" name="option" value="com_postinstall"> <input type="hidden" name="task" value=""> <label for="eid"><?php echo JText::_('COM_POSTINSTALL_MESSAGES_FOR'); ?></label> <?php echo JHtml::_('select.genericlist', $this->extension_options, 'eid', array('onchange' => 'this.form.submit()', 'class' => 'input-xlarge'), 'value', 'text', $this->eid, 'eid'); ?> </form> <?php if ($this->eid == 700) : ?> <div class="row-fluid"> <div class="span8"> <?php endif; ?> <?php if (empty($this->items)) : ?> <div class="hero-unit"> <h2><?php echo JText::_('COM_POSTINSTALL_LBL_NOMESSAGES_TITLE'); ?></h2> <p><?php echo JText::_('COM_POSTINSTALL_LBL_NOMESSAGES_DESC'); ?></p> <a href="index.php?option=com_postinstall&view=messages&task=reset&eid=<?php echo $this->eid; ?>&<?php echo $this->token; ?>=1" class="btn btn-warning btn-large"> <span class="icon icon-eye-open" aria-hidden="true"></span> <?php echo JText::_('COM_POSTINSTALL_BTN_RESET'); ?> </a> </div> <?php else : ?> <?php foreach ($this->items as $item) : ?> <fieldset> <legend><?php echo JText::_($item->title_key); ?></legend> <p class="small"> <?php echo JText::sprintf('COM_POSTINSTALL_LBL_SINCEVERSION', $item->version_introduced); ?> </p> <div> <?php echo JText::_($item->description_key); ?> <?php if ($item->type !== 'message') : ?> <a href="index.php?option=com_postinstall&view=messages&task=action&id=<?php echo $item->postinstall_message_id; ?>&<?php echo $this->token; ?>=1" class="btn btn-primary"> <?php echo JText::_($item->action_key); ?> </a> <?php endif; ?> <?php if (JFactory::getUser()->authorise('core.edit.state', 'com_postinstall')) : ?> <a href="index.php?option=com_postinstall&view=message&task=unpublish&id=<?php echo $item->postinstall_message_id; ?>&<?php echo $this->token; ?>=1" class="btn btn-inverse btn-small"> <?php echo JText::_('COM_POSTINSTALL_BTN_HIDE'); ?> </a> <?php endif; ?> </div> </fieldset> <?php endforeach; ?> <?php endif; ?> <?php if ($this->eid == 700) : ?> </div> <div class="span4"> <h2><?php echo JText::_('COM_POSTINSTALL_LBL_RELEASENEWS'); ?></h2> <?php echo $renderer->render($mod, $params, $options); ?> </div> </div> <?php endif; ?> PKb��\��s''7components/com_postinstall/views/messages/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_postinstall * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Model class to display postinstall messages * * @since 3.2 */ class PostinstallViewMessages extends FOFViewHtml { /** * Executes before rendering the page for the Browse task. * * @param string $tpl Subtemplate to use * * @return boolean Return true to allow rendering of the page * * @since 3.2 */ protected function onBrowse($tpl = null) { /** @var PostinstallModelMessages $model */ $model = $this->getModel(); $this->eid = (int) $model->getState('eid', '700', 'int'); if (empty($this->eid)) { $this->eid = 700; } $this->token = JFactory::getSession()->getFormToken(); $this->extension_options = $model->getComponentOptions(); JToolBarHelper::title(JText::sprintf('COM_POSTINSTALL_MESSAGES_TITLE', $model->getExtensionName($this->eid))); return parent::onBrowse($tpl); } /** * Executes on display of the page * * @param string $tpl Subtemplate to use * * @return boolean Return true to allow rendering of the page * * @since 3.8.7 */ protected function onDisplay($tpl = null) { $return = parent::onDisplay($tpl); if (!empty($this->items)) { JToolbarHelper::custom('hideAll', 'unpublish.png', 'unpublish_f2.png', 'COM_POSTINSTALL_HIDE_ALL_MESSAGES', false); } return $return; } } PKb��\��1t::*components/com_postinstall/postinstall.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.2" method="upgrade"> <name>com_postinstall</name> <author>Joomla! Project</author> <creationDate>September 2013</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.2.0</version> <description>COM_POSTINSTALL_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>access.xml</filename> <filename>config.xml</filename> <filename>fof.xml</filename> <filename>postinstall.php</filename> <filename>toolbar.php</filename> <folder>controllers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_postinstall.ini</language> <language tag="en-GB">language/en-GB.com_postinstall.sys.ini</language> </languages> </administration> </extension> PKb��\Yi�p�;�;.components/com_postinstall/models/messages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_postinstall * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Model class to manage postinstall messages * * @since 3.2 */ class PostinstallModelMessages extends FOFModel { /** * Builds the SELECT query * * @param boolean $overrideLimits Are we requested to override the set limits? * * @return JDatabaseQuery * * @since 3.2 */ public function buildQuery($overrideLimits = false) { $query = parent::buildQuery($overrideLimits); $db = $this->getDbo(); // Add a forced extension filtering to the list $eid = $this->getState('eid', 700); $query->where($db->qn('extension_id') . ' = ' . $db->q($eid)); // Force filter only enabled messages $published = $this->getState('published', 1, 'int'); $query->where($db->qn('enabled') . ' = ' . (int) $published); return $query; } /** * Returns the name of an extension, as registered in the #__extensions table * * @param integer $eid The extension ID * * @return string The extension name * * @since 3.2 */ public function getExtensionName($eid) { // Load the extension's information from the database $db = $this->getDbo(); $query = $db->getQuery(true) ->select(array('name', 'element', 'client_id')) ->from($db->qn('#__extensions')) ->where($db->qn('extension_id') . ' = ' . (int) $eid); $db->setQuery($query, 0, 1); $extension = $db->loadObject(); if (!is_object($extension)) { return ''; } // Load language files $basePath = JPATH_ADMINISTRATOR; if ($extension->client_id == 0) { $basePath = JPATH_SITE; } $lang = JFactory::getLanguage(); $lang->load($extension->element, $basePath); // Return the localised name return JText::_(strtoupper($extension->name)); } /** * Resets all messages for an extension * * @param integer $eid The extension ID whose messages we'll reset * * @return mixed False if we fail, a db cursor otherwise * * @since 3.2 */ public function resetMessages($eid) { $db = $this->getDbo(); $query = $db->getQuery(true) ->update($db->qn('#__postinstall_messages')) ->set($db->qn('enabled') . ' = 1') ->where($db->qn('extension_id') . ' = ' . (int) $eid); $db->setQuery($query); return $db->execute(); } /** * Hides all messages for an extension * * @param integer $eid The extension ID whose messages we'll hide * * @return mixed False if we fail, a db cursor otherwise * * @since 3.8.7 */ public function hideMessages($eid) { $db = $this->getDbo(); $query = $db->getQuery(true) ->update($db->qn('#__postinstall_messages')) ->set($db->qn('enabled') . ' = 0') ->where($db->qn('extension_id') . ' = ' . (int) $eid); $db->setQuery($query); return $db->execute(); } /** * List post-processing. This is used to run the programmatic display * conditions against each list item and decide if we have to show it or * not. * * Do note that this a core method of the RAD Layer which operates directly * on the list it's being fed. A little touch of modern magic. * * @param array &$resultArray A list of items to process * * @return void * * @since 3.2 */ protected function onProcessList(&$resultArray) { $unset_keys = array(); $language_extensions = array(); // Order the results DESC so the newest is on the top. $resultArray = array_reverse($resultArray); foreach ($resultArray as $key => $item) { // Filter out messages based on dynamically loaded programmatic conditions. if (!empty($item->condition_file) && !empty($item->condition_method)) { jimport('joomla.filesystem.file'); $file = FOFTemplateUtils::parsePath($item->condition_file, true); if (JFile::exists($file)) { require_once $file; $result = call_user_func($item->condition_method); if ($result === false) { $unset_keys[] = $key; } } } // Load the necessary language files. if (!empty($item->language_extension)) { $hash = $item->language_client_id . '-' . $item->language_extension; if (!in_array($hash, $language_extensions)) { $language_extensions[] = $hash; JFactory::getLanguage()->load($item->language_extension, $item->language_client_id == 0 ? JPATH_SITE : JPATH_ADMINISTRATOR); } } } if (!empty($unset_keys)) { foreach ($unset_keys as $key) { unset($resultArray[$key]); } } } /** * Get the dropdown options for the list of component with post-installation messages * * @since 3.4 * * @return array Compatible with JHtmlSelect::genericList */ public function getComponentOptions() { $db = $this->getDbo(); $query = $db->getQuery(true) ->select('extension_id') ->from($db->qn('#__postinstall_messages')) ->group(array($db->qn('extension_id'))); $db->setQuery($query); $extension_ids = $db->loadColumn(); $options = array(); JFactory::getLanguage()->load('files_joomla.sys', JPATH_SITE, null, false, false); foreach ($extension_ids as $eid) { $options[] = JHtml::_('select.option', $eid, $this->getExtensionName($eid)); } return $options; } /** * Adds or updates a post-installation message (PIM) definition. You can use this in your post-installation script using this code: * * require_once JPATH_LIBRARIES . '/fof/include.php'; * FOFModel::getTmpInstance('Messages', 'PostinstallModel')->addPostInstallationMessage($options); * * The $options array contains the following mandatory keys: * * extension_id The numeric ID of the extension this message is for (see the #__extensions table) * * type One of message, link or action. Their meaning is: * message Informative message. The user can dismiss it. * link The action button links to a URL. The URL is defined in the action parameter. * action A PHP action takes place when the action button is clicked. You need to specify the action_file * (RAD path to the PHP file) and action (PHP function name) keys. See below for more information. * * title_key The JText language key for the title of this PIM. * Example: COM_FOOBAR_POSTINSTALL_MESSAGEONE_TITLE * * description_key The JText language key for the main body (description) of this PIM * Example: COM_FOOBAR_POSTINSTALL_MESSAGEONE_DESCRIPTION * * action_key The JText language key for the action button. Ignored and not required when type=message * Example: COM_FOOBAR_POSTINSTALL_MESSAGEONE_ACTION * * language_extension The extension name which holds the language keys used above. * For example, com_foobar, mod_something, plg_system_whatever, tpl_mytemplate * * language_client_id Should we load the frontend (0) or backend (1) language keys? * * version_introduced Which was the version of your extension where this message appeared for the first time? * Example: 3.2.1 * * enabled Must be 1 for this message to be enabled. If you omit it, it defaults to 1. * * condition_file The RAD path to a PHP file containing a PHP function which determines whether this message should be shown to * the user. @see FOFTemplateUtils::parsePath() for RAD path format. Joomla! will include this file before calling * the condition_method. * Example: admin://components/com_foobar/helpers/postinstall.php * * condition_method The name of a PHP function which will be used to determine whether to show this message to the user. This must be * a simple PHP user function (not a class method, static method etc) which returns true to show the message and false * to hide it. This function is defined in the condition_file. * Example: com_foobar_postinstall_messageone_condition * * When type=message no additional keys are required. * * When type=link the following additional keys are required: * * action The URL which will open when the user clicks on the PIM's action button * Example: index.php?option=com_foobar&view=tools&task=installSampleData * * When type=action the following additional keys are required: * * action_file The RAD path to a PHP file containing a PHP function which performs the action of this PIM. @see FOFTemplateUtils::parsePath() * for RAD path format. Joomla! will include this file before calling the function defined in the action key below. * Example: admin://components/com_foobar/helpers/postinstall.php * * action The name of a PHP function which will be used to run the action of this PIM. This must be a simple PHP user function * (not a class method, static method etc) which returns no result. * Example: com_foobar_postinstall_messageone_action * * @param array $options See description * * @return $this * * @throws Exception */ public function addPostInstallationMessage(array $options) { // Make sure there are options set if (!is_array($options)) { throw new Exception('Post-installation message definitions must be of type array', 500); } // Initialise array keys $defaultOptions = array( 'extension_id' => '', 'type' => '', 'title_key' => '', 'description_key' => '', 'action_key' => '', 'language_extension' => '', 'language_client_id' => '', 'action_file' => '', 'action' => '', 'condition_file' => '', 'condition_method' => '', 'version_introduced' => '', 'enabled' => '1', ); $options = array_merge($defaultOptions, $options); // Array normalisation. Removes array keys not belonging to a definition. $defaultKeys = array_keys($defaultOptions); $allKeys = array_keys($options); $extraKeys = array_diff($allKeys, $defaultKeys); if (!empty($extraKeys)) { foreach ($extraKeys as $key) { unset($options[$key]); } } // Normalisation of integer values $options['extension_id'] = (int) $options['extension_id']; $options['language_client_id'] = (int) $options['language_client_id']; $options['enabled'] = (int) $options['enabled']; // Normalisation of 0/1 values foreach (array('language_client_id', 'enabled') as $key) { $options[$key] = $options[$key] ? 1 : 0; } // Make sure there's an extension_id if (!(int) $options['extension_id']) { throw new Exception('Post-installation message definitions need an extension_id', 500); } // Make sure there's a valid type if (!in_array($options['type'], array('message', 'link', 'action'))) { throw new Exception('Post-installation message definitions need to declare a type of message, link or action', 500); } // Make sure there's a title key if (empty($options['title_key'])) { throw new Exception('Post-installation message definitions need a title key', 500); } // Make sure there's a description key if (empty($options['description_key'])) { throw new Exception('Post-installation message definitions need a description key', 500); } // If the type is anything other than message you need an action key if (($options['type'] != 'message') && empty($options['action_key'])) { throw new Exception('Post-installation message definitions need an action key when they are of type "' . $options['type'] . '"', 500); } // You must specify the language extension if (empty($options['language_extension'])) { throw new Exception('Post-installation message definitions need to specify which extension contains their language keys', 500); } // The action file and method are only required for the "action" type if ($options['type'] == 'action') { if (empty($options['action_file'])) { throw new Exception('Post-installation message definitions need an action file when they are of type "action"', 500); } $file_path = FOFTemplateUtils::parsePath($options['action_file'], true); if (!@is_file($file_path)) { throw new Exception('The action file ' . $options['action_file'] . ' of your post-installation message definition does not exist', 500); } if (empty($options['action'])) { throw new Exception('Post-installation message definitions need an action (function name) when they are of type "action"', 500); } } if ($options['type'] == 'link') { if (empty($options['link'])) { throw new Exception('Post-installation message definitions need an action (URL) when they are of type "link"', 500); } } // The condition file and method are only required when the type is not "message" if ($options['type'] != 'message') { if (empty($options['condition_file'])) { throw new Exception('Post-installation message definitions need a condition file when they are of type "' . $options['type'] . '"', 500); } $file_path = FOFTemplateUtils::parsePath($options['condition_file'], true); if (!@is_file($file_path)) { throw new Exception('The condition file ' . $options['condition_file'] . ' of your post-installation message definition does not exist', 500); } if (empty($options['condition_method'])) { throw new Exception( 'Post-installation message definitions need a condition method (function name) when they are of type "' . $options['type'] . '"', 500 ); } } // Check if the definition exists $table = $this->getTable(); $tableName = $table->getTableName(); $db = $this->getDbo(); $query = $db->getQuery(true) ->select('*') ->from($db->qn($tableName)) ->where($db->qn('extension_id') . ' = ' . (int) $options['extension_id']) ->where($db->qn('type') . ' = ' . $db->q($options['type'])) ->where($db->qn('title_key') . ' = ' . $db->q($options['title_key'])); $existingRow = $db->setQuery($query)->loadAssoc(); // Is the existing definition the same as the one we're trying to save? if (!empty($existingRow)) { $same = true; foreach ($options as $k => $v) { if ($existingRow[$k] != $v) { $same = false; break; } } // Trying to add the same row as the existing one; quit if ($same) { return $this; } // Otherwise it's not the same row. Remove the old row before insert a new one. $query = $db->getQuery(true) ->delete($db->qn($tableName)) ->where($db->q('extension_id') . ' = ' . (int) $options['extension_id']) ->where($db->q('type') . ' = ' . $db->q($options['type'])) ->where($db->q('title_key') . ' = ' . $db->q($options['title_key'])); $db->setQuery($query)->execute(); } // Insert the new row $options = (object) $options; $db->insertObject($tableName, $options); return $this; } } PKb��\c��ߠ�components/com_users/users.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); if (!JFactory::getUser()->authorise('core.manage', 'com_users')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } JLoader::register('UsersHelper', __DIR__ . '/helpers/users.php'); $controller = JControllerLegacy::getInstance('Users'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\�?/$components/com_users/tables/note.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * User notes table class * * @since 2.5 */ class UsersTableNote extends JTable { /** * Constructor * * @param JDatabaseDriver &$db Database object * * @since 2.5 */ public function __construct(&$db) { parent::__construct('#__user_notes', 'id', $db); $this->setColumnAlias('published', 'state'); JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_users.note')); } /** * Overloaded store method for the notes table. * * @param boolean $updateNulls Toggle whether null values should be updated. * * @return boolean True on success, false on failure. * * @since 2.5 */ public function store($updateNulls = false) { $date = JFactory::getDate()->toSql(); $userId = JFactory::getUser()->get('id'); $this->modified_time = $date; $this->modified_user_id = $userId; if (!((int) $this->review_time)) { // Null date. $this->review_time = $this->_db->getNullDate(); } if (empty($this->id)) { // New record. $this->created_time = $date; $this->created_user_id = $userId; } // Attempt to store the data. return parent::store($updateNulls); } /** * Method to set the publishing state for a row or list of rows in the database * table. The method respects checked out rows by other users and will attempt * to check-in rows that it can after adjustments are made. * * @param mixed $pks An optional array of primary key values to update. If not set the instance property value is used. * @param integer $state The publishing state. eg. [0 = unpublished, 1 = published] * @param integer $userId The user id of the user performing the operation. * * @return boolean True on success. * * @since 2.5 */ public function publish($pks = null, $state = 1, $userId = 0) { $k = $this->_tbl_key; // Sanitize input. $pks = ArrayHelper::toInteger($pks); $userId = (int) $userId; $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED')); return false; } } $query = $this->_db->getQuery(true) ->update($this->_db->quoteName($this->_tbl)) ->set($this->_db->quoteName('state') . ' = ' . (int) $state); // Build the WHERE clause for the primary keys. $query->where($k . '=' . implode(' OR ' . $k . '=', $pks)); // Determine if there is checkin support for the table. if (!property_exists($this, 'checked_out') || !property_exists($this, 'checked_out_time')) { $checkin = false; } else { $query->where('(checked_out = 0 OR checked_out = ' . (int) $userId . ')'); $checkin = true; } // Update the publishing state for rows with the given primary keys. $this->_db->setQuery($query); try { $this->_db->execute(); } catch (RuntimeException $e) { $this->setError($this->_db->getMessage()); return false; } // If checkin is supported and all rows were adjusted, check them in. if ($checkin && (count($pks) == $this->_db->getAffectedRows())) { // Checkin the rows. foreach ($pks as $pk) { $this->checkin($pk); } } // If the JTable instance value is in the list of primary keys that were set, set the instance. if (in_array($this->$k, $pks)) { $this->state = $state; } $this->setError(''); return true; } } PKb��\�K��*components/com_users/controllers/users.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Users list controller class. * * @since 1.6 */ class UsersControllerUsers extends JControllerAdmin { /** * @var string The prefix to use with controller messages. * @since 1.6 */ protected $text_prefix = 'COM_USERS_USERS'; /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @since 1.6 * @see JController */ public function __construct($config = array()) { parent::__construct($config); $this->registerTask('block', 'changeBlock'); $this->registerTask('unblock', 'changeBlock'); } /** * Proxy for getModel. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'User', $prefix = 'UsersModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } /** * Method to change the block status on a record. * * @return void * * @since 1.6 */ public function changeBlock() { // Check for request forgeries. $this->checkToken(); $ids = $this->input->get('cid', array(), 'array'); $values = array('block' => 1, 'unblock' => 0); $task = $this->getTask(); $value = ArrayHelper::getValue($values, $task, 0, 'int'); if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_USERS_USERS_NO_ITEM_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Change the state of the records. if (!$model->block($ids, $value)) { JError::raiseWarning(500, $model->getError()); } else { if ($value == 1) { $this->setMessage(JText::plural('COM_USERS_N_USERS_BLOCKED', count($ids))); } elseif ($value == 0) { $this->setMessage(JText::plural('COM_USERS_N_USERS_UNBLOCKED', count($ids))); } } } $this->setRedirect('index.php?option=com_users&view=users'); } /** * Method to activate a record. * * @return void * * @since 1.6 */ public function activate() { // Check for request forgeries. $this->checkToken(); $ids = $this->input->get('cid', array(), 'array'); if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_USERS_USERS_NO_ITEM_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Change the state of the records. if (!$model->activate($ids)) { JError::raiseWarning(500, $model->getError()); } else { $this->setMessage(JText::plural('COM_USERS_N_USERS_ACTIVATED', count($ids))); } } $this->setRedirect('index.php?option=com_users&view=users'); } } PKb��\u�0���)components/com_users/controllers/user.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * User controller class. * * @since 1.6 */ class UsersControllerUser extends JControllerForm { /** * @var string The prefix to use with controller messages. * @since 1.6 */ protected $text_prefix = 'COM_USERS_USER'; /** * Overrides JControllerForm::allowEdit * * Checks that non-Super Admins are not editing Super Admins. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean True if allowed, false otherwise. * * @since 1.6 */ protected function allowEdit($data = array(), $key = 'id') { // Check if this person is a Super Admin if (JAccess::check($data[$key], 'core.admin')) { // If I'm not a Super Admin, then disallow the edit. if (!JFactory::getUser()->authorise('core.admin')) { return false; } } return parent::allowEdit($data, $key); } /** * Method to run batch operations. * * @param object $model The model. * * @return boolean True on success, false on failure * * @since 2.5 */ public function batch($model = null) { $this->checkToken(); // Set the model $model = $this->getModel('User', '', array()); // Preset the redirect $this->setRedirect(JRoute::_('index.php?option=com_users&view=users' . $this->getRedirectToListAppend(), false)); return parent::batch($model); } /** * Function that allows child controller access to model data after the data has been saved. * * @param JModelLegacy $model The data model object. * @param array $validData The validated data. * * @return void * * @since 3.1 */ protected function postSaveHook(JModelLegacy $model, $validData = array()) { return; } } PKb��\�#�L66*components/com_users/controllers/level.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * User view level controller class. * * @since 1.6 */ class UsersControllerLevel extends JControllerForm { /** * @var string The prefix to use with controller messages. * @since 1.6 */ protected $text_prefix = 'COM_USERS_LEVEL'; /** * Method to check if you can save a new or existing record. * * Overrides JControllerForm::allowSave to check the core.admin permission. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowSave($data, $key = 'id') { return (JFactory::getUser()->authorise('core.admin', $this->option) && parent::allowSave($data, $key)); } /** * Overrides JControllerForm::allowEdit * * Checks that non-Super Admins are not editing Super Admins. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 3.8.8 */ protected function allowEdit($data = array(), $key = 'id') { // Get user instance $user = JFactory::getUser(); // Check for if Super Admin can edit $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('*') ->from($db->quoteName('#__viewlevels')) ->where($db->quoteName('id') . ' = ' . (int) $data['id']); $db->setQuery($query); $viewlevel = $db->loadAssoc(); // Decode level groups $groups = json_decode($viewlevel['rules']); // If this group is super admin and this user is not super admin, canEdit is false if (!$user->authorise('core.admin') && JAccess::checkGroup($groups[0], 'core.admin')) { $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_EDIT_NOT_PERMITTED')); return false; } return parent::allowEdit($data, $key); } /** * Removes an item. * * Overrides JControllerAdmin::delete to check the core.admin permission. * * @return boolean Returns true on success, false on failure. * * @since 1.6 */ public function delete() { // Check for request forgeries. $this->checkToken(); $ids = $this->input->get('cid', array(), 'array'); if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } elseif (empty($ids)) { JError::raiseWarning(500, JText::_('COM_USERS_NO_LEVELS_SELECTED')); } else { // Get the model. $model = $this->getModel(); $ids = ArrayHelper::toInteger($ids); // Remove the items. if (!$model->delete($ids)) { JError::raiseWarning(500, $model->getError()); } else { $this->setMessage(JText::plural('COM_USERS_N_LEVELS_DELETED', count($ids))); } } $this->setRedirect('index.php?option=com_users&view=levels'); } } PKb��\z�x��+components/com_users/controllers/groups.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * User groups list controller class. * * @since 1.6 */ class UsersControllerGroups extends JControllerAdmin { /** * @var string The prefix to use with controller messages. * @since 1.6 */ protected $text_prefix = 'COM_USERS_GROUPS'; /** * Proxy for getModel. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'Group', $prefix = 'UsersModel', $config = array()) { return parent::getModel($name, $prefix, array('ignore_request' => true)); } /** * Removes an item. * * Overrides JControllerAdmin::delete to check the core.admin permission. * * @return boolean Returns true on success, false on failure. * * @since 1.6 */ public function delete() { if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } return parent::delete(); } /** * Method to publish a list of records. * * Overrides JControllerAdmin::publish to check the core.admin permission. * * @return void * * @since 1.6 */ public function publish() { if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } return parent::publish(); } /** * Changes the order of one or more records. * * Overrides JControllerAdmin::reorder to check the core.admin permission. * * @return boolean True on success * * @since 1.6 */ public function reorder() { if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } return parent::reorder(); } /** * Method to save the submitted ordering values for records. * * Overrides JControllerAdmin::saveorder to check the core.admin permission. * * @return boolean True on success * * @since 1.6 */ public function saveorder() { if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } return parent::saveorder(); } /** * Check in of one or more records. * * Overrides JControllerAdmin::checkin to check the core.admin permission. * * @return boolean True on success * * @since 1.6 */ public function checkin() { if (!JFactory::getUser()->authorise('core.admin', $this->option)) { JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); jexit(); } return parent::checkin(); } } PKb��\T0"��)components/com_users/controllers/mail.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Users mail controller. * * @since 1.6 */ class UsersControllerMail extends JControllerLegacy { /** * Send the mail * * @return void * * @since 1.6 */ public function send() { // Redirect to admin index if mass mailer disabled in conf if (JFactory::getApplication()->get('massmailoff', 0) == 1) { JFactory::getApplication()->redirect(JRoute::_('index.php', false)); } // Check for request forgeries. $this->checkToken('request'); $model = $this->getModel('Mail'); if ($model->send()) { $type = 'message'; } else { $type = 'error'; } $msg = $model->getError(); $this->setredirect('index.php?option=com_users&view=mail', $msg, $type); } /** * Cancel the mail * * @return void * * @since 1.6 */ public function cancel() { // Check for request forgeries. $this->checkToken('request'); $this->setRedirect('index.php'); } } PKb��\�_�(zz*components/com_users/controllers/group.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * User view level controller class. * * @since 1.6 */ class UsersControllerGroup extends JControllerForm { /** * @var string The prefix to use with controller messages. * @since 1.6 */ protected $text_prefix = 'COM_USERS_GROUP'; /** * Method to check if you can save a new or existing record. * * Overrides JControllerForm::allowSave to check the core.admin permission. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowSave($data, $key = 'id') { return (JFactory::getUser()->authorise('core.admin', $this->option) && parent::allowSave($data, $key)); } /** * Overrides JControllerForm::allowEdit * * Checks that non-Super Admins are not editing Super Admins. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowEdit($data = array(), $key = 'id') { // Check if this group is a Super Admin if (JAccess::checkGroup($data[$key], 'core.admin')) { // If I'm not a Super Admin, then disallow the edit. if (!JFactory::getUser()->authorise('core.admin')) { return false; } } return parent::allowEdit($data, $key); } } PKb��\6(����+components/com_users/controllers/levels.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * User view levels list controller class. * * @since 1.6 */ class UsersControllerLevels extends JControllerAdmin { /** * @var string The prefix to use with controller messages. * @since 1.6 */ protected $text_prefix = 'COM_USERS_LEVELS'; /** * Proxy for getModel. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'Level', $prefix = 'UsersModel', $config = array()) { return parent::getModel($name, $prefix, array('ignore_request' => true)); } } PKb��\e�Jo``)components/com_users/controllers/note.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * User note controller class. * * @since 2.5 */ class UsersControllerNote extends JControllerForm { /** * The prefix to use with controller messages. * * @var string * @since 2.5 */ protected $text_prefix = 'COM_USERS_NOTE'; /** * Gets the URL arguments to append to an item redirect. * * @param integer $recordId The primary key id for the item. * @param string $key The name of the primary key variable. * * @return string The arguments to append to the redirect URL. * * @since 2.5 */ protected function getRedirectToItemAppend($recordId = null, $key = 'id') { $append = parent::getRedirectToItemAppend($recordId, $key); $userId = JFactory::getApplication()->input->get('u_id', 0, 'int'); if ($userId) { $append .= '&u_id=' . $userId; } return $append; } } PKb��\.gL��*components/com_users/controllers/notes.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * User notes controller class. * * @since 2.5 */ class UsersControllerNotes extends JControllerAdmin { /** * The prefix to use with controller messages. * * @var string * @since 2.5 */ protected $text_prefix = 'COM_USERS_NOTES'; /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 2.5 */ public function getModel($name = 'Note', $prefix = 'UsersModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } } PKb��\y�J�P P components/com_users/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="user_options" label="COM_USERS_CONFIG_USER_OPTIONS" > <field name="allowUserRegistration" type="radio" label="COM_USERS_CONFIG_FIELD_ALLOWREGISTRATION_LABEL" description="COM_USERS_CONFIG_FIELD_ALLOWREGISTRATION_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="new_usertype" type="usergrouplist" label="COM_USERS_CONFIG_FIELD_NEW_USER_TYPE_LABEL" description="COM_USERS_CONFIG_FIELD_NEW_USER_TYPE_DESC" default="2" checksuperusergroup="1" /> <field name="guest_usergroup" type="usergrouplist" label="COM_USERS_CONFIG_FIELD_GUEST_USER_GROUP_LABEL" description="COM_USERS_CONFIG_FIELD_GUEST_USER_GROUP_DESC" default="1" checksuperusergroup="1" /> <field name="sendpassword" type="radio" label="COM_USERS_CONFIG_FIELD_SENDPASSWORD_LABEL" description="COM_USERS_CONFIG_FIELD_SENDPASSWORD_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="useractivation" type="list" label="COM_USERS_CONFIG_FIELD_USERACTIVATION_LABEL" description="COM_USERS_CONFIG_FIELD_USERACTIVATION_DESC" default="2" > <option value="0">JNONE</option> <option value="1">COM_USERS_CONFIG_FIELD_USERACTIVATION_OPTION_SELFACTIVATION</option> <option value="2">COM_USERS_CONFIG_FIELD_USERACTIVATION_OPTION_ADMINACTIVATION</option> </field> <field name="mail_to_admin" type="radio" label="COM_USERS_CONFIG_FIELD_MAILTOADMIN_LABEL" description="COM_USERS_CONFIG_FIELD_MAILTOADMIN_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="captcha" type="plugins" label="COM_USERS_CONFIG_FIELD_CAPTCHA_LABEL" description="COM_USERS_CONFIG_FIELD_CAPTCHA_DESC" folder="captcha" filter="cmd" useglobal="true" > <option value="0">JOPTION_DO_NOT_USE</option> </field> <field name="frontend_userparams" type="radio" label="COM_USERS_CONFIG_FIELD_FRONTEND_USERPARAMS_LABEL" description="COM_USERS_CONFIG_FIELD_FRONTEND_USERPARAMS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="site_language" type="radio" label="COM_USERS_CONFIG_FIELD_FRONTEND_LANG_LABEL" description="COM_USERS_CONFIG_FIELD_FRONTEND_LANG_DESC" class="btn-group btn-group-yesno" default="0" showon="frontend_userparams:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="change_login_name" type="radio" label="COM_USERS_CONFIG_FIELD_CHANGEUSERNAME_LABEL" description="COM_USERS_CONFIG_FIELD_CHANGEUSERNAME_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="domain_options" label="COM_USERS_CONFIG_DOMAIN_OPTIONS" > <field name="domains" type="subform" label="COM_USERS_CONFIG_FIELD_DOMAINS_LABEL" description="COM_USERS_CONFIG_FIELD_DOMAINS_DESC" multiple="true" layout="joomla.form.field.subform.repeatable-table" formsource="administrator/components/com_users/models/forms/config_domain.xml" /> </fieldset> <fieldset name="password_options" label="COM_USERS_CONFIG_PASSWORD_OPTIONS" > <field name="reset_count" type="integer" label="COM_USERS_CONFIG_FIELD_FRONTEND_RESET_COUNT_LABEL" description="COM_USERS_CONFIG_FIELD_FRONTEND_RESET_COUNT_DESC" first="0" last="20" step="1" default="10" /> <field name="reset_time" type="integer" label="COM_USERS_CONFIG_FIELD_FRONTEND_RESET_TIME_LABEL" description="COM_USERS_CONFIG_FIELD_FRONTEND_RESET_TIME_DESC" first="1" last="24" step="1" default="1" /> <field name="minimum_length" type="integer" label="COM_USERS_CONFIG_FIELD_MINIMUM_PASSWORD_LENGTH" description="COM_USERS_CONFIG_FIELD_MINIMUM_PASSWORD_LENGTH_DESC" first="4" last="99" step="1" default="4" /> <field name="minimum_integers" type="integer" label="COM_USERS_CONFIG_FIELD_MINIMUM_INTEGERS" description="COM_USERS_CONFIG_FIELD_MINIMUM_INTEGERS_DESC" first="0" last="98" step="1" default="0" /> <field name="minimum_symbols" type="integer" label="COM_USERS_CONFIG_FIELD_MINIMUM_SYMBOLS" description="COM_USERS_CONFIG_FIELD_MINIMUM_SYMBOLS_DESC" first="0" last="98" step="1" default="0" /> <field name="minimum_uppercase" type="integer" label="COM_USERS_CONFIG_FIELD_MINIMUM_UPPERCASE" description="COM_USERS_CONFIG_FIELD_MINIMUM_UPPERCASE_DESC" first="0" last="98" step="1" default="0" /> <field name="minimum_lowercase" type="integer" label="COM_USERS_CONFIG_FIELD_MINIMUM_LOWERCASE" description="COM_USERS_CONFIG_FIELD_MINIMUM_LOWERCASE_DESC" first="0" last="98" step="1" default="0" /> </fieldset> <fieldset name="user_notes_history" label="COM_USERS_CONFIG_FIELD_NOTES_HISTORY" > <field name="save_history" type="radio" label="JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL" description="JGLOBAL_SAVE_HISTORY_OPTIONS_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="history_limit" type="number" label="JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL" description="JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC" filter="integer" default="5" showon="save_history:1" /> </fieldset> <fieldset name="massmail" label="COM_USERS_MASS_MAIL" description="COM_USERS_MASS_MAIL_DESC"> <field name="mailSubjectPrefix" type="text" label="COM_USERS_CONFIG_FIELD_SUBJECT_PREFIX_LABEL" description="COM_USERS_CONFIG_FIELD_SUBJECT_PREFIX_DESC" /> <field name="mailBodySuffix" type="textarea" label="COM_USERS_CONFIG_FIELD_MAILBODY_SUFFIX_LABEL" description="COM_USERS_CONFIG_FIELD_MAILBODY_SUFFIX_DESC" rows="5" cols="30" /> </fieldset> <fieldset name="debug" label="COM_USERS_DEBUG_LABEL" description="COM_USERS_DEBUG_DESC"> <field name="debugUsers" type="radio" label="COM_USERS_DEBUG_USERS_LABEL" description="COM_USERS_DEBUG_USERS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="debugGroups" type="radio" label="COM_USERS_DEBUG_GROUPS_LABEL" description="COM_USERS_DEBUG_GROUPS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="integration" label="JGLOBAL_INTEGRATION_LABEL" description="COM_USERS_CONFIG_INTEGRATION_SETTINGS_DESC" > <field name="integration_sef" type="note" label="JGLOBAL_SEF_TITLE" /> <field name="sef_advanced" type="radio" class="btn-group btn-group-yesno btn-group-reversed" default="0" label="JGLOBAL_SEF_ADVANCED_LABEL" description="JGLOBAL_SEF_ADVANCED_DESC" filter="integer" > <option value="0">JGLOBAL_SEF_ADVANCED_LEGACY</option> <option value="1">JGLOBAL_SEF_ADVANCED_MODERN</option> </field> <field name="integration_customfields" type="note" label="JGLOBAL_FIELDS_TITLE" /> <field name="custom_fields_enable" type="radio" label="JGLOBAL_CUSTOM_FIELDS_ENABLE_LABEL" description="JGLOBAL_CUSTOM_FIELDS_ENABLE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_users" section="component" /> </fieldset> </config> PKb��\�t_π � components/com_users/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_users"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> <action name="core.edit.value" title="JACTION_EDITVALUE" description="JACTION_EDITVALUE_COMPONENT_DESC" /> </section> <section name="category"> <action name="core.create" title="JACTION_CREATE" description="COM_CATEGORIES_ACCESS_CREATE_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="COM_CATEGORIES_ACCESS_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_CATEGORIES_ACCESS_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_CATEGORIES_ACCESS_EDITSTATE_DESC" /> <action name="core.edit.own" title="JACTION_EDITOWN" description="COM_CATEGORIES_ACCESS_EDITOWN_DESC" /> </section> <section name="fieldgroup"> <action name="core.create" title="JACTION_CREATE" description="COM_FIELDS_GROUP_PERMISSION_CREATE_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="COM_FIELDS_GROUP_PERMISSION_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_FIELDS_GROUP_PERMISSION_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_FIELDS_GROUP_PERMISSION_EDITSTATE_DESC" /> <action name="core.edit.own" title="JACTION_EDITOWN" description="COM_FIELDS_GROUP_PERMISSION_EDITOWN_DESC" /> <action name="core.edit.value" title="JACTION_EDITVALUE" description="COM_FIELDS_GROUP_PERMISSION_EDITVALUE_DESC" /> </section> <section name="field"> <action name="core.delete" title="JACTION_DELETE" description="COM_FIELDS_FIELD_PERMISSION_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_FIELDS_FIELD_PERMISSION_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_FIELDS_FIELD_PERMISSION_EDITSTATE_DESC" /> <action name="core.edit.value" title="JACTION_EDITVALUE" description="COM_FIELDS_FIELD_PERMISSION_EDITVALUE_DESC" /> </section> </access> PKb��\8��_ _ -components/com_users/views/note/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.formvalidator'); JHtml::_('formbehavior.chosen', 'select'); JFactory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function() { Joomla.submitbutton = function(task) { if (task == "note.cancel" || document.formvalidator.isValid(document.getElementById("note-form"))) { ' . $this->form->getField('body')->save() . ' Joomla.submitform(task, document.getElementById("note-form")); } } });'); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=note&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="note-form" class="form-validate form-horizontal"> <fieldset class="adminform"> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('subject'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('subject'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('user_id'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('user_id'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('catid'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('catid'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('state'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('state'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('review_time'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('review_time'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('version_note'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('version_note'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('body'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('body'); ?> </div> </div> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </fieldset> </form> PKb��\[ϖ���-components/com_users/views/note/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * User note edit view * * @since 2.5 */ class UsersViewNote extends JViewLegacy { /** * The edit form. * * @var JForm * @since 2.5 */ protected $form; /** * The item data. * * @var object * @since 2.5 */ protected $item; /** * The model state. * * @var JObject * @since 2.5 */ protected $state; /** * Override the display method for the view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise a JError object. * * @since 2.5 */ public function display($tpl = null) { // Initialise view variables. $this->state = $this->get('State'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Get the component HTML helpers JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); parent::display($tpl); $this->addToolbar(); } /** * Display the toolbar. * * @return void * * @since 2.5 */ protected function addToolbar() { $input = JFactory::getApplication()->input; $input->set('hidemainmenu', 1); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); // Since we don't track these assets at the item level, use the category id. $canDo = JHelperContent::getActions('com_users', 'category', $this->item->catid); JToolbarHelper::title(JText::_('COM_USERS_NOTES'), 'users user'); // If not checked out, can save the item. if (!$checkedOut && ($canDo->get('core.edit') || count($user->getAuthorisedCategories('com_users', 'core.create')))) { JToolbarHelper::apply('note.apply'); JToolbarHelper::save('note.save'); } if (!$checkedOut && count($user->getAuthorisedCategories('com_users', 'core.create'))) { JToolbarHelper::save2new('note.save2new'); } // If an existing item, can save to a copy. if (!$isNew && (count($user->getAuthorisedCategories('com_users', 'core.create')) > 0)) { JToolbarHelper::save2copy('note.save2copy'); } if (empty($this->item->id)) { JToolbarHelper::cancel('note.cancel'); } else { if (JComponentHelper::isEnabled('com_contenthistory') && $this->state->params->get('save_history', 0) && $canDo->get('core.edit')) { JToolbarHelper::versions('com_users.note', $this->item->id); } JToolbarHelper::cancel('note.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_USERS_USER_NOTES_EDIT'); } } PKb��\#����5components/com_users/views/debuguser/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('formbehavior.chosen', 'select'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $colSpan = 4 + count($this->actions); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=debuguser&user_id=' . (int) $this->state->get('user_id')); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"> </div> <table class="table table-striped"> <thead> <tr> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_ASSET_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_ASSET_NAME', 'a.name', $listDirn, $listOrder); ?> </th> <?php foreach ($this->actions as $key => $action) : ?> <th width="5%" class="center"> <span class="hasTooltip" title="<?php echo JHtml::_('tooltipText', $key, $action[1]); ?>"><?php echo JText::_($key); ?></span> </th> <?php endforeach; ?> <th width="5%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_LFT', 'a.lft', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="<?php echo $colSpan; ?>"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row0"> <td> <?php echo $this->escape($item->title); ?> </td> <td class="nowrap"> <?php echo JLayoutHelper::render('joomla.html.treeprefix', array('level' => $item->level + 1)) . $this->escape($item->name); ?> </td> <?php foreach ($this->actions as $action) : ?> <?php $name = $action[0]; $check = $item->checks[$name]; if ($check === true) : $class = 'icon-ok'; $button = 'btn-success'; elseif ($check === false) : $class = 'icon-remove'; $button = 'btn-danger'; elseif ($check === null) : $class = 'icon-ban-circle'; $button = 'btn-warning'; else : $class = ''; $button = ''; endif; ?> <td class="center"> <span class="icon-white <?php echo $class; ?>"></span> </td> <?php endforeach; ?> <td class="center"> <?php echo (int) $item->lft; ?> - <?php echo (int) $item->rgt; ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> <div> <?php echo JText::_('COM_USERS_DEBUG_LEGEND'); ?> <span class="icon-white icon-ban-circle"></span><?php echo JText::_('COM_USERS_DEBUG_IMPLICIT_DENY'); ?> <span class="icon-white icon-ok"></span><?php echo JText::_('COM_USERS_DEBUG_EXPLICIT_ALLOW'); ?> <span class="icon-white icon-remove"></span><?php echo JText::_('COM_USERS_DEBUG_EXPLICIT_DENY'); ?> <br /><br /> </div> </div> </form> PKb��\�g�Dg g 2components/com_users/views/debuguser/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of User ACL permissions. * * @since 1.6 */ class UsersViewDebuguser extends JViewLegacy { protected $actions; /** * The item data. * * @var object * @since 1.6 */ protected $items; /** * The pagination object. * * @var JPagination * @since 1.6 */ protected $pagination; /** * The model state. * * @var JObject * @since 1.6 */ protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { // Access check. if (!JFactory::getUser()->authorise('core.manage', 'com_users')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $this->actions = $this->get('DebugActions'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->user = $this->get('User'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Vars only used in hathor. // @deprecated 4.0 To be removed with Hathor $this->levels = UsersHelperDebug::getLevelsOptions(); $this->components = UsersHelperDebug::getComponents(); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_users'); JToolbarHelper::title(JText::sprintf('COM_USERS_VIEW_DEBUG_USER_TITLE', $this->user->id, $this->escape($this->user->name)), 'users user'); JToolbarHelper::cancel('user.cancel', 'JTOOLBAR_CLOSE'); if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_users'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_USERS_DEBUG_USERS'); } } PKb��\��L")).components/com_users/views/group/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('formbehavior.chosen', 'select'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'group.cancel' || document.formvalidator.isValid(document.getElementById('group-form'))) { Joomla.submitform(task, document.getElementById('group-form')); } }; "); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="group-form" class="form-validate form-horizontal"> <fieldset> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'details')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'details', JText::_('COM_USERS_USERGROUP_DETAILS')); ?> <?php echo $this->form->renderField('title'); ?> <?php echo $this->form->renderField('parent_id'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php $this->ignore_fieldsets = array('group_details'); ?> <?php echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> </fieldset> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\Ι�MM.components/com_users/views/group/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a user group. * * @since 1.6 */ class UsersViewGroup extends JViewLegacy { protected $form; /** * The item data. * * @var object * @since 1.6 */ protected $item; /** * The model state. * * @var JObject * @since 1.6 */ protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { $this->state = $this->get('State'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $isNew = ($this->item->id == 0); $canDo = JHelperContent::getActions('com_users'); JToolbarHelper::title(JText::_($isNew ? 'COM_USERS_VIEW_NEW_GROUP_TITLE' : 'COM_USERS_VIEW_EDIT_GROUP_TITLE'), 'users groups-add'); if ($canDo->get('core.edit') || $canDo->get('core.create')) { JToolbarHelper::apply('group.apply'); JToolbarHelper::save('group.save'); } if ($canDo->get('core.create')) { JToolbarHelper::save2new('group.save2new'); } // If an existing item, can save to a copy. if (!$isNew && $canDo->get('core.create')) { JToolbarHelper::save2copy('group.save2copy'); } if (empty($this->item->id)) { JToolbarHelper::cancel('group.cancel'); } else { JToolbarHelper::cancel('group.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_USERS_GROUPS_EDIT'); } } PKb��\��r� � 0components/com_users/views/mail/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $script = "\t" . 'Joomla.submitbutton = function(pressbutton) {' . "\n"; $script .= "\t\t" . 'var form = document.adminForm;' . "\n"; $script .= "\t\t" . 'if (pressbutton == \'mail.cancel\') {' . "\n"; $script .= "\t\t\t" . 'Joomla.submitform(pressbutton);' . "\n"; $script .= "\t\t\t" . 'return;' . "\n"; $script .= "\t\t" . '}' . "\n"; $script .= "\t\t" . '// do field validation' . "\n"; $script .= "\t\t" . 'if (form.jform_subject.value == ""){' . "\n"; $script .= "\t\t\t" . 'alert("' . JText::_('COM_USERS_MAIL_PLEASE_FILL_IN_THE_SUBJECT', true) . '");' . "\n"; $script .= "\t\t" . '} else if (getSelectedValue(\'adminForm\',\'jform[group]\') < 0){' . "\n"; $script .= "\t\t\t" . 'alert("' . JText::_('COM_USERS_MAIL_PLEASE_SELECT_A_GROUP', true) . '");' . "\n"; $script .= "\t\t" . '} else if (form.jform_message.value == ""){' . "\n"; $script .= "\t\t\t" . 'alert("' . JText::_('COM_USERS_MAIL_PLEASE_FILL_IN_THE_MESSAGE', true) . '");' . "\n"; $script .= "\t\t" . '} else {' . "\n"; $script .= "\t\t\t" . 'Joomla.submitform(pressbutton);' . "\n"; $script .= "\t\t" . '}' . "\n"; $script .= "\t\t" . '}' . "\n"; JHtml::_('behavior.core'); JHtml::_('formbehavior.chosen', 'select'); JFactory::getDocument()->addScriptDeclaration($script); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=mail'); ?>" name="adminForm" method="post" id="adminForm"> <div class="row-fluid"> <div class="span9"> <fieldset class="adminform"> <div class="control-group"> <div class="control-label"><?php echo $this->form->getLabel('subject'); ?></div> <div class="controls"><?php echo JComponentHelper::getParams('com_users')->get('mailSubjectPrefix'); ?> <?php echo $this->form->getInput('subject'); ?></div> </div> <div class="control-group"> <div class="control-label"><?php echo $this->form->getLabel('message'); ?></div> <div class="controls"><?php echo $this->form->getInput('message'); ?><br> <?php echo JComponentHelper::getParams('com_users')->get('mailBodySuffix'); ?></div> </div> </fieldset> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> <div class="span3"> <fieldset class="form-inline"> <div class="control-group checkbox"> <div class="controls"><?php echo $this->form->getInput('recurse'); ?> <?php echo $this->form->getLabel('recurse'); ?></div> </div> <div class="control-group checkbox"> <div class="control-label"><?php echo $this->form->getInput('mode'); ?> <?php echo $this->form->getLabel('mode'); ?></div> </div> <div class="control-group checkbox"> <div class="control-label"><?php echo $this->form->getInput('disabled'); ?> <?php echo $this->form->getLabel('disabled'); ?></div> </div> <div class="control-group checkbox"> <div class="control-label"><?php echo $this->form->getInput('bcc'); ?> <?php echo $this->form->getLabel('bcc'); ?></div> </div> <div class="control-group"> <div class="control-label"><?php echo $this->form->getLabel('group'); ?></div> <div class="controls"><?php echo $this->form->getInput('group'); ?></div> </div> </fieldset> </div> </div> </form> PKb��\L�G-components/com_users/views/mail/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Users mail view. * * @since 1.6 */ class UsersViewMail extends JViewLegacy { /** * @var object form object */ protected $form; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { // Redirect to admin index if mass mailer disabled in conf if (JFactory::getApplication()->get('massmailoff', 0) == 1) { JFactory::getApplication()->redirect(JRoute::_('index.php', false)); } // Get data from the model $this->form = $this->get('Form'); $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); JToolbarHelper::title(JText::_('COM_USERS_MASS_MAIL'), 'users massmail'); JToolbarHelper::custom('mail.send', 'envelope.png', 'send_f2.png', 'COM_USERS_TOOLBAR_MAIL_SEND_MAIL', false); JToolbarHelper::cancel('mail.cancel'); JToolbarHelper::divider(); JToolbarHelper::preferences('com_users'); JToolbarHelper::divider(); JToolbarHelper::help('JHELP_USERS_MASS_MAIL_USERS'); } } PKb��\@��r{{-components/com_users/views/user/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('formbehavior.chosen', 'select'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'user.cancel' || document.formvalidator.isValid(document.getElementById('user-form'))) { Joomla.submitform(task, document.getElementById('user-form')); } }; Joomla.twoFactorMethodChange = function(e) { var selectedPane = 'com_users_twofactor_' + jQuery('#jform_twofactor_method').val(); jQuery.each(jQuery('#com_users_twofactor_forms_container>div'), function(i, el) { if (el.id != selectedPane) { jQuery('#' + el.id).hide(0); } else { jQuery('#' + el.id).show(0); } }); }; "); // Get the form fieldsets. $fieldsets = $this->form->getFieldsets(); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="user-form" class="form-validate form-horizontal" enctype="multipart/form-data"> <?php echo JLayoutHelper::render('joomla.edit.item_title', $this); ?> <fieldset> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'details')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'details', JText::_('COM_USERS_USER_ACCOUNT_DETAILS')); ?> <?php foreach ($this->form->getFieldset('user_details') as $field) : ?> <div class="control-group"> <div class="control-label"> <?php echo $field->label; ?> </div> <div class="controls"> <?php if ($field->fieldname == 'password') : ?> <?php // Disables autocomplete ?> <input type="password" style="display:none"> <?php endif; ?> <?php echo $field->input; ?> </div> </div> <?php endforeach; ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php if ($this->grouplist) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'groups', JText::_('COM_USERS_ASSIGNED_GROUPS')); ?> <?php echo $this->loadTemplate('groups'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php $this->ignore_fieldsets = array('user_details'); echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php if (!empty($this->tfaform) && $this->item->id) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'twofactorauth', JText::_('COM_USERS_USER_TWO_FACTOR_AUTH')); ?> <div class="control-group"> <div class="control-label"> <label id="jform_twofactor_method-lbl" for="jform_twofactor_method" class="hasTooltip" title="<?php echo '<strong>' . JText::_('COM_USERS_USER_FIELD_TWOFACTOR_LABEL') . '</strong><br />' . JText::_('COM_USERS_USER_FIELD_TWOFACTOR_DESC'); ?>"> <?php echo JText::_('COM_USERS_USER_FIELD_TWOFACTOR_LABEL'); ?> </label> </div> <div class="controls"> <?php echo JHtml::_('select.genericlist', Usershelper::getTwoFactorMethods(), 'jform[twofactor][method]', array('onchange' => 'Joomla.twoFactorMethodChange()'), 'value', 'text', $this->otpConfig->method, 'jform_twofactor_method', false); ?> </div> </div> <div id="com_users_twofactor_forms_container"> <?php foreach ($this->tfaform as $form) : ?> <?php $style = $form['method'] == $this->otpConfig->method ? 'display: block' : 'display: none'; ?> <div id="com_users_twofactor_<?php echo $form['method'] ?>" style="<?php echo $style; ?>"> <?php echo $form['form'] ?> </div> <?php endforeach; ?> </div> <fieldset> <legend> <?php echo JText::_('COM_USERS_USER_OTEPS'); ?> </legend> <div class="alert alert-info"> <?php echo JText::_('COM_USERS_USER_OTEPS_DESC'); ?> </div> <?php if (empty($this->otpConfig->otep)) : ?> <div class="alert alert-warning"> <?php echo JText::_('COM_USERS_USER_OTEPS_WAIT_DESC'); ?> </div> <?php else : ?> <?php foreach ($this->otpConfig->otep as $otep) : ?> <span class="span3"> <?php echo substr($otep, 0, 4); ?>-<?php echo substr($otep, 4, 4); ?>-<?php echo substr($otep, 8, 4); ?>-<?php echo substr($otep, 12, 4); ?> </span> <?php endforeach; ?> <div class="clearfix"></div> <?php endif; ?> </fieldset> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> </fieldset> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\��y2��4components/com_users/views/user/tmpl/edit_groups.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); ?> <?php echo JHtml::_('access.usergroups', 'jform[groups]', $this->groups, true); ?> PKb��\�`7�- - -components/com_users/views/user/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * User view class. * * @since 1.5 */ class UsersViewUser extends JViewLegacy { protected $form; protected $item; protected $grouplist; protected $groups; protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void * * @since 1.5 */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); $this->tfaform = $this->get('Twofactorform'); $this->otpConfig = $this->get('otpConfig'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Prevent user from modifying own group(s) $user = JFactory::getUser(); if ((int) $user->id != (int) $this->item->id || $user->authorise('core.admin')) { $this->grouplist = $this->get('Groups'); $this->groups = $this->get('AssignedGroups'); } $this->form->setValue('password', null); $this->form->setValue('password2', null); parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $user = JFactory::getUser(); $canDo = JHelperContent::getActions('com_users'); $isNew = ($this->item->id == 0); $isProfile = $this->item->id == $user->id; JToolbarHelper::title( JText::_( $isNew ? 'COM_USERS_VIEW_NEW_USER_TITLE' : ($isProfile ? 'COM_USERS_VIEW_EDIT_PROFILE_TITLE' : 'COM_USERS_VIEW_EDIT_USER_TITLE') ), 'user ' . ($isNew ? 'user-add' : ($isProfile ? 'user-profile' : 'user-edit')) ); if ($canDo->get('core.edit') || $canDo->get('core.create')) { JToolbarHelper::apply('user.apply'); JToolbarHelper::save('user.save'); } if ($canDo->get('core.create') && $canDo->get('core.manage')) { JToolbarHelper::save2new('user.save2new'); } if (empty($this->item->id)) { JToolbarHelper::cancel('user.cancel'); } else { JToolbarHelper::cancel('user.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_USERS_USER_MANAGER_EDIT'); } } PKb��\d�o��.components/com_users/views/level/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'level.cancel' || document.formvalidator.isValid(document.getElementById('level-form'))) { Joomla.submitform(task, document.getElementById('level-form')); } }; "); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="level-form" class="form-validate form-horizontal"> <fieldset> <legend><?php echo JText::_('COM_USERS_LEVEL_DETAILS'); ?></legend> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('title'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('title'); ?> </div> </div> </fieldset> <fieldset> <legend><?php echo JText::_('COM_USERS_USER_GROUPS_HAVING_ACCESS'); ?></legend> <?php echo JHtml::_('access.usergroups', 'jform[rules]', $this->item->rules, true); ?> </fieldset> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\槢YY.components/com_users/views/level/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a user view level. * * @since 1.6 */ class UsersViewLevel extends JViewLegacy { protected $form; /** * The item data. * * @var object * @since 1.6 */ protected $item; /** * The model state. * * @var JObject * @since 1.6 */ protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $isNew = ($this->item->id == 0); $canDo = JHelperContent::getActions('com_users'); JToolbarHelper::title(JText::_($isNew ? 'COM_USERS_VIEW_NEW_LEVEL_TITLE' : 'COM_USERS_VIEW_EDIT_LEVEL_TITLE'), 'users levels-add'); if ($canDo->get('core.edit') || $canDo->get('core.create')) { JToolbarHelper::apply('level.apply'); JToolbarHelper::save('level.save'); } if ($canDo->get('core.create')) { JToolbarHelper::save2new('level.save2new'); } // If an existing item, can save to a copy. if (!$isNew && $canDo->get('core.create')) { JToolbarHelper::save2copy('level.save2copy'); } if (empty($this->item->id)) { JToolbarHelper::cancel('level.cancel'); } else { JToolbarHelper::cancel('level.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_USERS_ACCESS_LEVELS_EDIT'); } } PKb��\'.Q@��/components/com_users/views/notes/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); ?> <div class="unotes"> <h1><?php echo JText::sprintf('COM_USERS_NOTES_FOR_USER', $this->user->name, $this->user->id); ?></h1> <?php if (empty($this->items)) : ?> <?php echo JText::_('COM_USERS_NO_NOTES'); ?> <?php else : ?> <ul class="alternating"> <?php foreach ($this->items as $item) : ?> <li> <div class="fltlft utitle"> <?php if ($item->subject) : ?> <h4><?php echo JText::sprintf('COM_USERS_NOTE_N_SUBJECT', (int) $item->id, $this->escape($item->subject)); ?></h4> <?php else : ?> <h4><?php echo JText::sprintf('COM_USERS_NOTE_N_SUBJECT', (int) $item->id, JText::_('COM_USERS_EMPTY_SUBJECT')); ?></h4> <?php endif; ?> </div> <div class="fltlft utitle"> <?php echo JHtml::_('date', $item->created_time, JText::_('DATE_FORMAT_LC2')); ?> </div> <?php $category_image = $item->cparams->get('image'); ?> <?php if ($item->catid && isset($category_image)) : ?> <div class="fltlft utitle"> <?php echo JHtml::_('users.image', $category_image); ?> </div> <div class="fltlft utitle"> <em><?php echo $this->escape($item->category_title); ?></em> </div> <?php endif; ?> <div class="clr"></div> <div class="ubody"> <?php echo (isset($item->body) ? JHtml::_('content.prepare', $item->body) : ''); ?> </div> </li> <?php endforeach; ?> </ul> <?php endif; ?> </div> PKb��\���*}}1components/com_users/views/notes/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=notes'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped"> <thead> <tr> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_SUBJECT', 'a.subject', $listDirn, $listOrder); ?> </th> <th width="20%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_USER', 'u.name', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_REVIEW', 'a.review_time', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="6"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $canEdit = $user->authorise('core.edit', 'com_users.category.' . $item->catid); $canCheckin = $user->authorise('core.admin', 'com_checkin') || $item->checked_out == $user->get('id') || $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_users.category.' . $item->catid) && $canCheckin; $subject = $item->subject ?: JText::_('COM_USERS_EMPTY_SUBJECT'); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center checklist"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td class="center"> <div class="btn-group"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'notes.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> <?php // Create dropdown items and render the dropdown list. if ($canChange) { JHtml::_('actionsdropdown.' . ((int) $item->state === 2 ? 'un' : '') . 'archive', 'cb' . $i, 'notes'); JHtml::_('actionsdropdown.' . ((int) $item->state === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'notes'); echo JHtml::_('actionsdropdown.render', $this->escape($subject)); } ?> </div> </td> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'notes.', $canCheckin); ?> <?php endif; ?> <?php $subject = $item->subject ?: JText::_('COM_USERS_EMPTY_SUBJECT'); ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_users&task=note.edit&id=' . $item->id); ?>"><?php echo $this->escape($subject); ?></a> <?php else : ?> <?php echo $this->escape($subject); ?> <?php endif; ?> <div class="small"> <?php echo JText::_('JCATEGORY') . ': ' . $this->escape($item->category_title); ?> </div> </td> <td class="hidden-phone"> <?php echo $this->escape($item->user_name); ?> </td> <td class="hidden-phone hidden-tablet"> <?php if ($item->review_time !== JFactory::getDbo()->getNullDate()) : ?> <?php echo JHtml::_('date', $item->review_time, JText::_('DATE_FORMAT_LC4')); ?> <?php else : ?> <?php echo JText::_('COM_USERS_EMPTY_REVIEW'); ?> <?php endif; ?> </td> <td class="hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> PKb��\�n��kk.components/com_users/views/notes/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; /** * User notes list view * * @since 2.5 */ class UsersViewNotes extends JViewLegacy { /** * A list of user note objects. * * @var array * @since 2.5 */ protected $items; /** * The pagination object. * * @var JPagination * @since 2.5 */ protected $pagination; /** * The model state. * * @var JObject * @since 2.5 */ protected $state; /** * The model state. * * @var JUser * @since 2.5 */ protected $user; /** * Override the display method for the view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise a JError object. * * @since 2.5 */ public function display($tpl = null) { // Initialise view variables. $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->user = $this->get('User'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); UsersHelper::addSubmenu('notes'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Get the component HTML helpers JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // Turn parameters into registry objects foreach ($this->items as $item) { $item->cparams = new Registry($item->category_params); } $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); parent::display($tpl); } /** * Display the toolbar. * * @return void * * @since 2.5 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_users', 'category', $this->state->get('filter.category_id')); JToolbarHelper::title(JText::_('COM_USERS_VIEW_NOTES_TITLE'), 'users user'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('note.add'); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('note.edit'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::divider(); JToolbarHelper::publish('notes.publish', 'JTOOLBAR_PUBLISH', true); JToolbarHelper::unpublish('notes.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolbarHelper::divider(); JToolbarHelper::archiveList('notes.archive'); JToolbarHelper::checkin('notes.checkin'); } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'notes.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolbarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::trash('notes.trash'); JToolbarHelper::divider(); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_users'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_USERS_USER_NOTES'); JHtmlSidebar::setAction('index.php?option=com_users&view=notes'); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { return array( 'u.name' => JText::_('COM_USERS_USER_HEADING'), 'a.subject' => JText::_('COM_USERS_SUBJECT_HEADING'), 'c.title' => JText::_('COM_USERS_CATEGORY_HEADING'), 'a.state' => JText::_('JSTATUS'), 'a.review_time' => JText::_('COM_USERS_REVIEW_HEADING'), 'a.id' => JText::_('JGRID_HEADING_ID') ); } } PKb��\$� }��<components/com_users/views/users/tmpl/default_batch_body.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Create the copy/move options. $options = array( JHtml::_('select.option', 'add', JText::_('COM_USERS_BATCH_ADD')), JHtml::_('select.option', 'del', JText::_('COM_USERS_BATCH_DELETE')), JHtml::_('select.option', 'set', JText::_('COM_USERS_BATCH_SET')) ); // Create the reset password options. $resetOptions = array( JHtml::_('select.option', '', JText::_('COM_USERS_NO_ACTION')), JHtml::_('select.option', 'yes', JText::_('JYES')), JHtml::_('select.option', 'no', JText::_('JNO')) ); JHtml::_('formbehavior.chosen', 'select'); ?> <div class="container-fluid"> <div class="row-fluid"> <div class="controls"> <label id="batch-choose-action-lbl" class="control-label" for="batch-group-id"> <?php echo JText::_('COM_USERS_BATCH_GROUP'); ?> </label> <div id="batch-choose-action" class="combo controls"> <div class="control-group"> <select name="batch[group_id]" id="batch-group-id"> <option value=""><?php echo JText::_('JSELECT'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('user.groups')); ?> </select> </div> </div> <div class="control-group radio"> <?php echo JHtml::_('select.radiolist', $options, 'batch[group_action]', '', 'value', 'text', 'add'); ?> </div> </div> </div> <label><?php echo JText::_('COM_USERS_REQUIRE_PASSWORD_RESET'); ?></label> <div class="control-group radio"> <?php echo JHtml::_('select.radiolist', $resetOptions, 'batch[reset_id]', '', 'value', 'text', ''); ?> </div> </div> PKb��\�?9QQ>components/com_users/views/users/tmpl/default_batch_footer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <button type="button" class="btn" onclick="document.getElementById('batch-group-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button type="submit" class="btn btn-success" onclick="Joomla.submitbutton('user.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> PKb��\� ^��/components/com_users/views/users/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); JHtml::_('bootstrap.popover', '.hasPopover', array('placement' => 'bottom')); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.multiselect'); // Special case for the search field tooltip. $searchFilterDesc = $this->filterForm->getFieldAttribute('search', 'description', null, 'filter'); JHtml::_('bootstrap.tooltip', '#filter_search', array('title' => JText::_($searchFilterDesc), 'placement' => 'bottom')); $input = JFactory::getApplication()->input; $field = $input->getCmd('field'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $enabledStates = array(0 => 'icon-publish', 1 => 'icon-unpublish'); $activatedStates = array(0 => 'icon-publish', 1 => 'icon-unpublish'); $userRequired = (int) $input->get('required', 0, 'int'); /** * Mootools compatibility * * There is an extra option passed in the URL for the iframe &ismoo=0 for the bootstraped field. * By default the value will be 1 or defaults to mootools behaviour using function jSelectUser() * * This should be removed when mootools won't be shipped by Joomla. */ $isMoo = $input->getInt('ismoo', 1); if ($isMoo) { $onClick = "window.parent.jSelectUser(this);window.parent.jQuery('.modal.in').modal('hide');"; } ?> <div class="container-popup"> <form action="<?php echo JRoute::_('index.php?option=com_users&view=users&layout=modal&tmpl=component&groups=' . $input->get('groups', '', 'BASE64') . '&excluded=' . $input->get('excluded', '', 'BASE64')); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!$userRequired) : ?> <div class="pull-left"> <button type="button" class="btn button-select" data-user-value="0" data-user-name="<?php echo $this->escape(JText::_('JLIB_FORM_SELECT_USER')); ?>" data-user-field="<?php echo $this->escape($field); ?>" <?php if ($isMoo) : ?>value="" onclick="window.parent.jSelectUser(this)"<?php endif; ?>><?php echo JText::_('JOPTION_NO_USER'); ?></button> </div> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped table-condensed"> <thead> <tr> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_NAME', 'a.name', $listDirn, $listOrder); ?> </th> <th width="25%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_USERNAME', 'a.username', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_ENABLED', 'a.block', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_ACTIVATED', 'a.activation', $listDirn, $listOrder); ?> </th> <th width="25%" class="nowrap"> <?php echo JText::_('COM_USERS_HEADING_GROUPS'); ?> </th> <th width="1%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="6"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $i = 0; ?> <?php foreach ($this->items as $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td> <a class="pointer button-select" href="#" data-user-value="<?php echo $item->id; ?>" data-user-name="<?php echo $this->escape($item->name); ?>" data-user-field="<?php echo $this->escape($field); ?>" <?php if ($isMoo) : ?>onclick="<?php echo $onClick; ?>"<?php endif; ?>> <?php echo $this->escape($item->name); ?> </a> </td> <td> <?php echo $this->escape($item->username); ?> </td> <td class="center"> <span class="<?php echo $enabledStates[(int) $this->escape($item->block)]; ?>"></span> </td> <td class="center"> <span class="<?php echo $activatedStates[(empty($item->activation) ? 0 : 1)]; ?>"></span> </td> <td> <?php echo nl2br($item->group_names); ?> </td> <td> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="field" value="<?php echo $this->escape($field); ?>" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="required" value="<?php echo $userRequired; ?>" /> <input type="hidden" name="ismoo" value="<?php echo $isMoo; ?>" /> <?php echo JHtml::_('form.token'); ?> </form> </div> PKb��\(���1components/com_users/views/users/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $loggeduser = JFactory::getUser(); $debugUsers = $this->state->get('params')->get('debugUsers', 1); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=users'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php // Search tools bar echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="userList"> <thead> <tr> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_NAME', 'a.name', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_USERNAME', 'a.username', $listDirn, $listOrder); ?> </th> <th width="5%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_ENABLED', 'a.block', $listDirn, $listOrder); ?> </th> <th width="5%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_ACTIVATED', 'a.activation', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap"> <?php echo JText::_('COM_USERS_HEADING_GROUPS'); ?> </th> <th width="15%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_EMAIL', 'a.email', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_LAST_VISIT_DATE', 'a.lastvisitDate', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_REGISTRATION_DATE', 'a.registerDate', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="10"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $canEdit = $this->canDo->get('core.edit'); $canChange = $loggeduser->authorise('core.edit.state', 'com_users'); // If this group is super admin and this user is not super admin, $canEdit is false if ((!$loggeduser->authorise('core.admin')) && JAccess::check($item->id, 'core.admin')) { $canEdit = false; $canChange = false; } ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php if ($canEdit || $canChange) : ?> <?php echo JHtml::_('grid.id', $i, $item->id); ?> <?php endif; ?> </td> <td> <div class="name break-word"> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_users&task=user.edit&id=' . (int) $item->id); ?>" title="<?php echo JText::sprintf('COM_USERS_EDIT_USER', $this->escape($item->name)); ?>"> <?php echo $this->escape($item->name); ?></a> <?php else : ?> <?php echo $this->escape($item->name); ?> <?php endif; ?> </div> <div class="btn-group"> <?php echo JHtml::_('users.filterNotes', $item->note_count, $item->id); ?> <?php echo JHtml::_('users.notes', $item->note_count, $item->id); ?> <?php echo JHtml::_('users.addNote', $item->id); ?> </div> <?php echo JHtml::_('users.notesModal', $item->note_count, $item->id); ?> <?php if ($item->requireReset == '1') : ?> <span class="label label-warning"><?php echo JText::_('COM_USERS_PASSWORD_RESET_REQUIRED'); ?></span> <?php endif; ?> <?php if ($debugUsers) : ?> <div class="small"><a href="<?php echo JRoute::_('index.php?option=com_users&view=debuguser&user_id=' . (int) $item->id); ?>"> <?php echo JText::_('COM_USERS_DEBUG_USER'); ?></a></div> <?php endif; ?> </td> <td class="break-word"> <?php echo $this->escape($item->username); ?> </td> <td class="center"> <?php $self = $loggeduser->id == $item->id; if ($canChange) : echo JHtml::_('jgrid.state', JHtmlUsers::blockStates($self), $item->block, $i, 'users.', !$self); else : echo JHtml::_('jgrid.state', JHtmlUsers::blockStates($self), $item->block, $i, 'users.', false); endif; ?> </td> <td class="center hidden-phone"> <?php $activated = empty( $item->activation) ? 0 : 1; echo JHtml::_('jgrid.state', JHtmlUsers::activateStates(), $activated, $i, 'users.', (boolean) $activated); ?> </td> <td> <?php if (substr_count($item->group_names, "\n") > 1) : ?> <span class="hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('COM_USERS_HEADING_GROUPS'), nl2br($item->group_names), 0); ?>"><?php echo JText::_('COM_USERS_USERS_MULTIPLE_GROUPS'); ?></span> <?php else : ?> <?php echo nl2br($item->group_names); ?> <?php endif; ?> </td> <td class="hidden-phone break-word hidden-tablet"> <?php echo JStringPunycode::emailToUTF8($this->escape($item->email)); ?> </td> <td class="hidden-phone hidden-tablet"> <?php if ($item->lastvisitDate != $this->db->getNullDate()) : ?> <?php echo JHtml::_('date', $item->lastvisitDate, JText::_('DATE_FORMAT_LC6')); ?> <?php else : ?> <?php echo JText::_('JNEVER'); ?> <?php endif; ?> </td> <td class="hidden-phone hidden-tablet"> <?php echo JHtml::_('date', $item->registerDate, JText::_('DATE_FORMAT_LC6')); ?> </td> <td class="hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php // Load the batch processing form if user is allowed ?> <?php if ($loggeduser->authorise('core.create', 'com_users') && $loggeduser->authorise('core.edit', 'com_users') && $loggeduser->authorise('core.edit.state', 'com_users')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_USERS_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\ E��� � 7components/com_users/views/users/tmpl/default_batch.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * @deprecated 3.4 Use default_batch_body and default_batch_footer */ defined('_JEXEC') or die; // Create the copy/move options. $options = array( JHtml::_('select.option', 'add', JText::_('COM_USERS_BATCH_ADD')), JHtml::_('select.option', 'del', JText::_('COM_USERS_BATCH_DELETE')), JHtml::_('select.option', 'set', JText::_('COM_USERS_BATCH_SET')) ); // Create the reset password options. $resetOptions = array( JHtml::_('select.option', '', JText::_('COM_USERS_NO_ACTION')), JHtml::_('select.option', 'yes', JText::_('JYES')), JHtml::_('select.option', 'no', JText::_('JNO')) ); JHtml::_('formbehavior.chosen', 'select'); ?> <div class="modal hide fade" id="collapseModal"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3><?php echo JText::_('COM_USERS_BATCH_OPTIONS'); ?></h3> </div> <div class="modal-body modal-batch"> <div class="row-fluid"> <div id="batch-choose-action" class="combo control-group"> <label id="batch-choose-action-lbl" class="control-label" for="batch-choose-action"> <?php echo JText::_('COM_USERS_BATCH_GROUP') ?> </label> </div> <div id="batch-choose-action" class="combo controls"> <div class="control-group"> <select name="batch[group_id]" id="batch-group-id"> <option value=""><?php echo JText::_('JSELECT') ?></option> <?php echo JHtml::_('select.options', JHtml::_('user.groups')); ?> </select> </div> </div> <div class="control-group radio"> <?php echo JHtml::_('select.radiolist', $options, 'batch[group_action]', '', 'value', 'text', 'add') ?> </div> </div> <label><?php echo JText::_('COM_USERS_REQUIRE_PASSWORD_RESET'); ?></label> <div class="control-group radio"> <?php echo JHtml::_('select.radiolist', $resetOptions, 'batch[reset_id]', '', 'value', 'text', '') ?> </div> </div> <div class="modal-footer"> <button class="btn" type="button" onclick="document.getElementById('batch-group-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button class="btn btn-primary" type="submit" onclick="Joomla.submitbutton('user.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> </div> </div> PKb��\�r���.components/com_users/views/users/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of users. * * @since 1.6 */ class UsersViewUsers extends JViewLegacy { /** * The item data. * * @var object * @since 1.6 */ protected $items; /** * The pagination object. * * @var JPagination * @since 1.6 */ protected $pagination; /** * The model state. * * @var JObject * @since 1.6 */ protected $state; /** * A JForm instance with filter fields. * * @var JForm * @since 3.6.3 */ public $filterForm; /** * An array with active filters. * * @var array * @since 3.6.3 */ public $activeFilters; /** * An ACL object to verify user rights. * * @var JObject * @since 3.6.3 */ protected $canDo; /** * An instance of JDatabaseDriver. * * @var JDatabaseDriver * @since 3.6.3 */ protected $db; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); $this->canDo = JHelperContent::getActions('com_users'); $this->db = JFactory::getDbo(); UsersHelper::addSubmenu('users'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = $this->canDo; $user = JFactory::getUser(); // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); JToolbarHelper::title(JText::_('COM_USERS_VIEW_USERS_TITLE'), 'users user'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('user.add'); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('user.edit'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::divider(); JToolbarHelper::publish('users.activate', 'COM_USERS_TOOLBAR_ACTIVATE', true); JToolbarHelper::unpublish('users.block', 'COM_USERS_TOOLBAR_BLOCK', true); JToolbarHelper::custom('users.unblock', 'unblock.png', 'unblock_f2.png', 'COM_USERS_TOOLBAR_UNBLOCK', true); JToolbarHelper::divider(); } if ($canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'users.delete', 'JTOOLBAR_DELETE'); JToolbarHelper::divider(); } // Add a batch button if ($user->authorise('core.create', 'com_users') && $user->authorise('core.edit', 'com_users') && $user->authorise('core.edit.state', 'com_users')) { $title = JText::_('JTOOLBAR_BATCH'); // Instantiate a new JLayoutFile instance and render the batch button $layout = new JLayoutFile('joomla.toolbar.batch'); $dhtml = $layout->render(array('title' => $title)); $bar->appendButton('Custom', $dhtml, 'batch'); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_users'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_USERS_USER_MANAGER'); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { return array( 'a.name' => JText::_('COM_USERS_HEADING_NAME'), 'a.username' => JText::_('JGLOBAL_USERNAME'), 'a.block' => JText::_('COM_USERS_HEADING_ENABLED'), 'a.activation' => JText::_('COM_USERS_HEADING_ACTIVATED'), 'a.email' => JText::_('JGLOBAL_EMAIL'), 'a.lastvisitDate' => JText::_('COM_USERS_HEADING_LAST_VISIT_DATE'), 'a.registerDate' => JText::_('COM_USERS_HEADING_REGISTRATION_DATE'), 'a.id' => JText::_('JGRID_HEADING_ID'), ); } } PKb��\pΰ��2components/com_users/views/groups/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $debugGroups = $this->state->get('params')->get('debugGroups', 1); JText::script('COM_USERS_GROUPS_CONFIRM_DELETE'); JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(task) { if (task == "groups.delete") { var i, cids = document.getElementsByName("cid[]"); for (i = 0; i < cids.length; i++) { if (cids[i].checked && cids[i].parentNode.getAttribute("data-usercount") != 0) { if (confirm(Joomla.JText._("COM_USERS_GROUPS_CONFIRM_DELETE"))) { Joomla.submitform(task); } return false; } } } Joomla.submitform(task); return false; }; '); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=groups'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this, 'options' => array('filterButton' => false))); ?> <div class="clearfix"> </div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="groupList"> <thead> <tr> <th width="1%" class="nowrap"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_GROUP_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap center"> <span class="icon-publish hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_USERS_COUNT_ENABLED_USERS'); ?>"> <span class="element-invisible"><?php echo JText::_('COM_USERS_COUNT_ENABLED_USERS'); ?></span> </span> </th> <th width="1%" class="nowrap center"> <span class="icon-unpublish hasTooltip" aria-hidden="true" title="<?php echo JText::_('COM_USERS_COUNT_DISABLED_USERS'); ?>"> <span class="element-invisible"><?php echo JText::_('COM_USERS_COUNT_DISABLED_USERS'); ?></span> </span> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="5"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_users'); $canEdit = $user->authorise('core.edit', 'com_users'); // If this group is super admin and this user is not super admin, $canEdit is false if (!$user->authorise('core.admin') && JAccess::checkGroup($item->id, 'core.admin')) { $canEdit = false; } $canChange = $user->authorise('core.edit.state', 'com_users'); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center" data-usercount="<?php echo $item->user_count; ?>"> <?php if ($canEdit) : ?> <?php echo JHtml::_('grid.id', $i, $item->id); ?> <?php endif; ?> </td> <td> <?php echo JLayoutHelper::render('joomla.html.treeprefix', array('level' => $item->level + 1)); ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_users&task=group.edit&id=' . $item->id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <?php if ($debugGroups) : ?> <div class="small"><a href="<?php echo JRoute::_('index.php?option=com_users&view=debuggroup&group_id=' . (int) $item->id); ?>"> <?php echo JText::_('COM_USERS_DEBUG_GROUP'); ?></a></div> <?php endif; ?> </td> <td class="center btns"> <a class="badge <?php if ($item->count_enabled > 0) echo 'badge-success'; ?>" href="<?php echo JRoute::_('index.php?option=com_users&view=users&filter[group_id]=' . (int) $item->id . '&filter[state]=0'); ?>"> <?php echo $item->count_enabled; ?></a> </td> <td class="center btns"> <a class="badge <?php if ($item->count_disabled > 0) echo 'badge-important'; ?>" href="<?php echo JRoute::_('index.php?option=com_users&view=users&filter[group_id]=' . (int) $item->id . '&filter[state]=1'); ?>"> <?php echo $item->count_disabled; ?></a> </td> <td class="hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\x�� /components/com_users/views/groups/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of user groups. * * @since 1.6 */ class UsersViewGroups extends JViewLegacy { /** * The item data. * * @var object * @since 1.6 */ protected $items; /** * The pagination object. * * @var JPagination * @since 1.6 */ protected $pagination; /** * The model state. * * @var JObject * @since 1.6 */ protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); UsersHelper::addSubmenu('groups'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_users'); JToolbarHelper::title(JText::_('COM_USERS_VIEW_GROUPS_TITLE'), 'users groups'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('group.add'); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('group.edit'); JToolbarHelper::divider(); } if ($canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'groups.delete', 'JTOOLBAR_DELETE'); JToolbarHelper::divider(); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_users'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_USERS_GROUPS'); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { return array( 'a.title' => JText::_('COM_USERS_HEADING_GROUP_TITLE'), 'a.id' => JText::_('JGRID_HEADING_ID'), ); } } PKb��\-��(2components/com_users/views/levels/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = $listOrder == 'a.ordering'; if ($saveOrder) { $saveOrderingUrl = 'index.php?option=com_users&task=levels.saveOrderAjax&tmpl=component'; JHtml::_('sortablelist.sortable', 'levelList', 'adminForm', strtolower($listDirn), $saveOrderingUrl); } ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=levels'); ?>" method="post" id="adminForm" name="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this, 'options' => array('filterButton' => false))); ?> <div class="clearfix"> </div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="levelList"> <thead> <tr> <th width="1%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', '', 'a.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?> </th> <th width="1%"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_LEVEL_NAME', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap hidden-phone"> <?php echo JText::_('COM_USERS_USER_GROUPS_HAVING_ACCESS'); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="5"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $count = count($this->items); ?> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_users'); $canEdit = $user->authorise('core.edit', 'com_users'); $canChange = $user->authorise('core.edit.state', 'com_users'); // Decode level groups $groups = json_decode($item->rules); // If this group is super admin and this user is not super admin, $canEdit is false if (!JFactory::getUser()->authorise('core.admin') && JAccess::checkGroup($groups[0], 'core.admin')) { $canEdit = false; $canChange = false; } ?> <tr class="row<?php echo $i % 2; ?>"> <td class="order nowrap center hidden-phone"> <?php $iconClass = ''; if (!$canChange) { $iconClass = ' inactive'; } elseif (!$saveOrder) { $iconClass = ' inactive tip-top hasTooltip" title="' . JHtml::_('tooltipText', 'JORDERINGDISABLED'); } ?> <span class="sortable-handler<?php echo $iconClass ?>"> <span class="icon-menu" aria-hidden="true"></span> </span> <?php if ($canChange && $saveOrder) : ?> <input type="text" style="display:none" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order" /> <?php endif; ?> </td> <td class="center"> <?php if ($canEdit) : ?> <?php echo JHtml::_('grid.id', $i, $item->id); ?> <?php endif; ?> </td> <td> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_users&task=level.edit&id=' . $item->id); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> </td> <td class="hidden-phone"> <?php echo UsersHelper::getVisibleByGroups($item->rules); ?> </td> <td class="hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\��=T T /components/com_users/views/levels/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of view levels. * * @since 1.6 */ class UsersViewLevels extends JViewLegacy { /** * The item data. * * @var object * @since 1.6 */ protected $items; /** * The pagination object. * * @var JPagination * @since 1.6 */ protected $pagination; /** * The model state. * * @var JObject * @since 1.6 */ protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); UsersHelper::addSubmenu('levels'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_users'); JToolbarHelper::title(JText::_('COM_USERS_VIEW_LEVELS_TITLE'), 'users levels'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('level.add'); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('level.edit'); JToolbarHelper::divider(); } if ($canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'level.delete', 'JTOOLBAR_DELETE'); JToolbarHelper::divider(); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_users'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_USERS_ACCESS_LEVELS'); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { return array( 'a.ordering' => JText::_('JGRID_HEADING_ORDERING'), 'a.title' => JText::_('COM_USERS_HEADING_LEVEL_NAME'), 'a.id' => JText::_('JGRID_HEADING_ID'), ); } } PKb��\�����6components/com_users/views/debuggroup/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('formbehavior.chosen', 'select'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $colSpan = 4 + count($this->actions); ?> <form action="<?php echo JRoute::_('index.php?option=com_users&view=debuggroup&group_id=' . (int) $this->state->get('group_id')); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"> </div> <table class="table table-striped"> <thead> <tr> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_ASSET_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_ASSET_NAME', 'a.name', $listDirn, $listOrder); ?> </th> <?php foreach ($this->actions as $key => $action) : ?> <th width="5%" class="center"> <span class="hasTooltip" title="<?php echo JHtml::_('tooltipText', $key, $action[1]); ?>"><?php echo JText::_($key); ?></span> </th> <?php endforeach; ?> <th width="5%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'COM_USERS_HEADING_LFT', 'a.lft', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="<?php echo $colSpan; ?>"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row0"> <td> <?php echo $this->escape($item->title); ?> </td> <td class="nowrap"> <?php echo JLayoutHelper::render('joomla.html.treeprefix', array('level' => $item->level + 1)) . $this->escape($item->name); ?> </td> <?php foreach ($this->actions as $action) : ?> <?php $name = $action[0]; $check = $item->checks[$name]; if ($check === true) : $class = 'icon-ok'; $button = 'btn-success'; elseif ($check === false) : $class = 'icon-remove'; $button = 'btn-danger'; elseif ($check === null) : $class = 'icon-ban-circle'; $button = 'btn-warning'; else : $class = ''; $button = ''; endif; ?> <td class="center"> <span class="icon-white <?php echo $class; ?>"></span> </td> <?php endforeach; ?> <td class="center"> <?php echo (int) $item->lft; ?> - <?php echo (int) $item->rgt; ?> </td> <td class="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> <div> <?php echo JText::_('COM_USERS_DEBUG_LEGEND'); ?> <span class="icon-white icon-ban-circle"></span><?php echo JText::_('COM_USERS_DEBUG_IMPLICIT_DENY'); ?> <span class="icon-white icon-ok"></span><?php echo JText::_('COM_USERS_DEBUG_EXPLICIT_ALLOW'); ?> <span class="icon-white icon-remove"></span><?php echo JText::_('COM_USERS_DEBUG_EXPLICIT_DENY'); ?> <br /><br /> </div> </div> </form> PKb��\�/�w w 3components/com_users/views/debuggroup/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of User Group ACL permissions. * * @since 1.6 */ class UsersViewDebuggroup extends JViewLegacy { protected $actions; /** * The item data. * * @var object * @since 1.6 */ protected $items; /** * The pagination object. * * @var JPagination * @since 1.6 */ protected $pagination; /** * The model state. * * @var JObject * @since 1.6 */ protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { // Access check. if (!JFactory::getUser()->authorise('core.manage', 'com_users')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $this->actions = $this->get('DebugActions'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->group = $this->get('Group'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Vars only used in hathor. // @deprecated 4.0 To be removed with Hathor $this->levels = UsersHelperDebug::getLevelsOptions(); $this->components = UsersHelperDebug::getComponents(); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_users'); JToolbarHelper::title(JText::sprintf('COM_USERS_VIEW_DEBUG_GROUP_TITLE', $this->group->id, $this->escape($this->group->title)), 'users groups'); JToolbarHelper::cancel('group.cancel', 'JTOOLBAR_CLOSE'); if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_users'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_USERS_DEBUG_GROUPS'); } } PKb��\'Y�&components/com_users/helpers/users.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Users component helper. * * @since 1.6 */ class UsersHelper { /** * @var JObject A cache for the available actions. * @since 1.6 */ protected static $actions; /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void * * @since 1.6 */ public static function addSubmenu($vName) { JHtmlSidebar::addEntry( JText::_('COM_USERS_SUBMENU_USERS'), 'index.php?option=com_users&view=users', $vName == 'users' ); // Groups and Levels are restricted to core.admin $canDo = JHelperContent::getActions('com_users'); if ($canDo->get('core.admin')) { JHtmlSidebar::addEntry( JText::_('COM_USERS_SUBMENU_GROUPS'), 'index.php?option=com_users&view=groups', $vName == 'groups' ); JHtmlSidebar::addEntry( JText::_('COM_USERS_SUBMENU_LEVELS'), 'index.php?option=com_users&view=levels', $vName == 'levels' ); } if (JComponentHelper::isEnabled('com_fields') && JComponentHelper::getParams('com_users')->get('custom_fields_enable', '1')) { JHtmlSidebar::addEntry( JText::_('JGLOBAL_FIELDS'), 'index.php?option=com_fields&context=com_users.user', $vName == 'fields.fields' ); JHtmlSidebar::addEntry( JText::_('JGLOBAL_FIELD_GROUPS'), 'index.php?option=com_fields&view=groups&context=com_users.user', $vName == 'fields.groups' ); } JHtmlSidebar::addEntry( JText::_('COM_USERS_SUBMENU_NOTES'), 'index.php?option=com_users&view=notes', $vName == 'notes' ); JHtmlSidebar::addEntry( JText::_('COM_USERS_SUBMENU_NOTE_CATEGORIES'), 'index.php?option=com_categories&extension=com_users', $vName == 'categories' ); } /** * Gets a list of the actions that can be performed. * * @return JObject * * @deprecated 3.2 Use JHelperContent::getActions() instead */ public static function getActions() { // Log usage of deprecated function try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions return JHelperContent::getActions('com_users'); } /** * Get a list of filter options for the blocked state of a user. * * @return array An array of JHtmlOption elements. * * @since 1.6 */ public static function getStateOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '0', JText::_('JENABLED')); $options[] = JHtml::_('select.option', '1', JText::_('JDISABLED')); return $options; } /** * Get a list of filter options for the activated state of a user. * * @return array An array of JHtmlOption elements. * * @since 1.6 */ public static function getActiveOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '0', JText::_('COM_USERS_ACTIVATED')); $options[] = JHtml::_('select.option', '1', JText::_('COM_USERS_UNACTIVATED')); return $options; } /** * Get a list of the user groups for filtering. * * @return array An array of JHtmlOption elements. * * @since 1.6 */ public static function getGroups() { $options = JHelperUsergroups::getInstance()->getAll(); foreach ($options as &$option) { $option->value = $option->id; $option->text = str_repeat('- ', $option->level) . $option->title; } return $options; } /** * Creates a list of range options used in filter select list * used in com_users on users view * * @return array * * @since 2.5 */ public static function getRangeOptions() { $options = array( JHtml::_('select.option', 'today', JText::_('COM_USERS_OPTION_RANGE_TODAY')), JHtml::_('select.option', 'past_week', JText::_('COM_USERS_OPTION_RANGE_PAST_WEEK')), JHtml::_('select.option', 'past_1month', JText::_('COM_USERS_OPTION_RANGE_PAST_1MONTH')), JHtml::_('select.option', 'past_3month', JText::_('COM_USERS_OPTION_RANGE_PAST_3MONTH')), JHtml::_('select.option', 'past_6month', JText::_('COM_USERS_OPTION_RANGE_PAST_6MONTH')), JHtml::_('select.option', 'past_year', JText::_('COM_USERS_OPTION_RANGE_PAST_YEAR')), JHtml::_('select.option', 'post_year', JText::_('COM_USERS_OPTION_RANGE_POST_YEAR')), ); return $options; } /** * Creates a list of two factor authentication methods used in com_users * on user view * * @return array * * @since 3.2.0 */ public static function getTwoFactorMethods() { FOFPlatform::getInstance()->importPlugin('twofactorauth'); $identities = FOFPlatform::getInstance()->runPlugins('onUserTwofactorIdentify', array()); $options = array( JHtml::_('select.option', 'none', JText::_('JGLOBAL_OTPMETHOD_NONE'), 'value', 'text'), ); if (!empty($identities)) { foreach ($identities as $identity) { if (!is_object($identity)) { continue; } $options[] = JHtml::_('select.option', $identity->method, $identity->title, 'value', 'text'); } } return $options; } /** * Get a list of the User Groups for Viewing Access Levels * * @param string $rules User Groups in JSON format * * @return string $groups Comma separated list of User Groups * * @since 3.6 */ public static function getVisibleByGroups($rules) { $rules = json_decode($rules); if (!$rules) { return false; } $rules = implode(',', $rules); $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('a.title AS text') ->from('#__usergroups as a') ->where('a.id IN (' . $rules . ')'); $db->setQuery($query); $groups = $db->loadColumn(); $groups = implode(', ', $groups); return $groups; } /** * Returns a valid section for users. If it is not valid then null * is returned. * * @param string $section The section to get the mapping for * * @return string|null The new section * * @since 3.7.0 */ public static function validateSection($section) { if (JFactory::getApplication()->isClient('site')) { switch ($section) { case 'registration': case 'profile': $section = 'user'; } } if ($section != 'user') { // We don't know other sections return null; } return $section; } /** * Returns valid contexts * * @return array * * @since 3.7.0 */ public static function getContexts() { JFactory::getLanguage()->load('com_users', JPATH_ADMINISTRATOR); $contexts = array( 'com_users.user' => JText::_('COM_USERS'), ); return $contexts; } } PKb��\��� ��+components/com_users/helpers/html/users.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Extended Utility class for the Users component. * * @since 2.5 */ class JHtmlUsers { /** * Display an image. * * @param string $src The source of the image * * @return string A <img> element if the specified file exists, otherwise, a null string * * @since 2.5 */ public static function image($src) { $src = preg_replace('#[^A-Z0-9\-_\./]#i', '', $src); $file = JPATH_SITE . '/' . $src; jimport('joomla.filesystem.path'); JPath::check($file); if (!file_exists($file)) { return ''; } return '<img src="' . JUri::root() . $src . '" alt="" />'; } /** * Displays an icon to add a note for this user. * * @param integer $userId The user ID * * @return string A link to add a note * * @since 2.5 */ public static function addNote($userId) { $title = JText::_('COM_USERS_ADD_NOTE'); return '<a href="' . JRoute::_('index.php?option=com_users&task=note.add&u_id=' . (int) $userId) . '" class="hasTooltip btn btn-mini" title="' . $title . '"><span class="icon-vcard" aria-hidden="true"></span><span class="hidden-phone">' . $title . '</span></a>'; } /** * Displays an icon to filter the notes list on this user. * * @param integer $count The number of notes for the user * @param integer $userId The user ID * * @return string A link to apply a filter * * @since 2.5 */ public static function filterNotes($count, $userId) { if (empty($count)) { return ''; } $title = JText::_('COM_USERS_FILTER_NOTES'); return '<a href="' . JRoute::_('index.php?option=com_users&view=notes&filter[search]=uid:' . (int) $userId) . '" class="hasTooltip btn btn-mini" title="' . $title . '"><span class="icon-filter"></span></a>'; } /** * Displays a note icon. * * @param integer $count The number of notes for the user * @param integer $userId The user ID * * @return string A link to a modal window with the user notes * * @since 2.5 */ public static function notes($count, $userId) { if (empty($count)) { return ''; } $title = JText::plural('COM_USERS_N_USER_NOTES', $count); return '<button type="button" data-target="#userModal_' . (int) $userId . '" id="modal-' . (int) $userId . '" data-toggle="modal"' . ' class="hasTooltip btn btn-mini" title="' . $title . '">' . '<span class="icon-drawer-2" aria-hidden="true"></span><span class="hidden-phone">' . $title . '</span></button>'; } /** * Renders the modal html. * * @param integer $count The number of notes for the user * @param integer $userId The user ID * * @return string The html for the rendered modal * * @since 3.4.1 */ public static function notesModal($count, $userId) { if (empty($count)) { return ''; } $title = JText::plural('COM_USERS_N_USER_NOTES', $count); $footer = '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JTOOLBAR_CLOSE') . '</button>'; return JHtml::_( 'bootstrap.renderModal', 'userModal_' . (int) $userId, array( 'title' => $title, 'backdrop' => 'static', 'keyboard' => true, 'closeButton' => true, 'footer' => $footer, 'url' => JRoute::_('index.php?option=com_users&view=notes&tmpl=component&layout=modal&filter[user_id]=' . (int) $userId), 'height' => '300px', 'width' => '800px', ) ); } /** * Build an array of block/unblock user states to be used by jgrid.state, * State options will be different for any user * and for currently logged in user * * @param boolean $self True if state array is for currently logged in user * * @return array a list of possible states to display * * @since 3.0 */ public static function blockStates( $self = false) { if ($self) { $states = array( 1 => array( 'task' => 'unblock', 'text' => '', 'active_title' => 'COM_USERS_USER_FIELD_BLOCK_DESC', 'inactive_title' => '', 'tip' => true, 'active_class' => 'unpublish', 'inactive_class' => 'unpublish', ), 0 => array( 'task' => 'block', 'text' => '', 'active_title' => '', 'inactive_title' => 'COM_USERS_USERS_ERROR_CANNOT_BLOCK_SELF', 'tip' => true, 'active_class' => 'publish', 'inactive_class' => 'publish', ) ); } else { $states = array( 1 => array( 'task' => 'unblock', 'text' => '', 'active_title' => 'COM_USERS_TOOLBAR_UNBLOCK', 'inactive_title' => '', 'tip' => true, 'active_class' => 'unpublish', 'inactive_class' => 'unpublish', ), 0 => array( 'task' => 'block', 'text' => '', 'active_title' => 'COM_USERS_USER_FIELD_BLOCK_DESC', 'inactive_title' => '', 'tip' => true, 'active_class' => 'publish', 'inactive_class' => 'publish', ) ); } return $states; } /** * Build an array of activate states to be used by jgrid.state, * * @return array a list of possible states to display * * @since 3.0 */ public static function activateStates() { $states = array( 1 => array( 'task' => 'activate', 'text' => '', 'active_title' => 'COM_USERS_TOOLBAR_ACTIVATE', 'inactive_title' => '', 'tip' => true, 'active_class' => 'unpublish', 'inactive_class' => 'unpublish', ), 0 => array( 'task' => '', 'text' => '', 'active_title' => '', 'inactive_title' => 'COM_USERS_ACTIVATED', 'tip' => true, 'active_class' => 'publish', 'inactive_class' => 'publish', ) ); return $states; } } PKb��\��3XX&components/com_users/helpers/debug.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Users component debugging helper. * * @since 1.6 */ class UsersHelperDebug { /** * Get a list of the components. * * @return array * * @since 1.6 */ public static function getComponents() { // Initialise variable. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('name AS text, element AS value') ->from('#__extensions') ->where('enabled >= 1') ->where('type =' . $db->quote('component')); $items = $db->setQuery($query)->loadObjectList(); if (count($items)) { $lang = JFactory::getLanguage(); foreach ($items as &$item) { // Load language $extension = $item->value; $source = JPATH_ADMINISTRATOR . '/components/' . $extension; $lang->load("$extension.sys", JPATH_ADMINISTRATOR, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); // Translate component name $item->text = JText::_($item->text); } // Sort by component name $items = ArrayHelper::sortObjects($items, 'text', 1, true, true); } return $items; } /** * Get a list of the actions for the component or code actions. * * @param string $component The name of the component. * * @return array * * @since 1.6 */ public static function getDebugActions($component = null) { $actions = array(); // Try to get actions for the component if (!empty($component)) { $component_actions = JAccess::getActions($component); if (!empty($component_actions)) { foreach ($component_actions as &$action) { $actions[$action->title] = array($action->name, $action->description); } } } // Use default actions from configuration if no component selected or component doesn't have actions if (empty($actions)) { $filename = JPATH_ADMINISTRATOR . '/components/com_config/model/form/application.xml'; if (is_file($filename)) { $xml = simplexml_load_file($filename); foreach ($xml->children()->fieldset as $fieldset) { if ('permissions' == (string) $fieldset['name']) { foreach ($fieldset->children() as $field) { if ('rules' == (string) $field['name']) { foreach ($field->children() as $action) { $actions[(string) $action['title']] = array( (string) $action['name'], (string) $action['description'] ); } break; } } } } // Load language $lang = JFactory::getLanguage(); $extension = 'com_config'; $source = JPATH_ADMINISTRATOR . '/components/' . $extension; $lang->load($extension, JPATH_ADMINISTRATOR, null, false, false) || $lang->load($extension, $source, null, false, false) || $lang->load($extension, JPATH_ADMINISTRATOR, $lang->getDefault(), false, false) || $lang->load($extension, $source, $lang->getDefault(), false, false); } } return $actions; } /** * Get a list of filter options for the levels. * * @return array An array of JHtmlOption elements. */ public static function getLevelsOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '1', JText::sprintf('COM_USERS_OPTION_LEVEL_COMPONENT', 1)); $options[] = JHtml::_('select.option', '2', JText::sprintf('COM_USERS_OPTION_LEVEL_CATEGORY', 2)); $options[] = JHtml::_('select.option', '3', JText::sprintf('COM_USERS_OPTION_LEVEL_DEEPER', 3)); $options[] = JHtml::_('select.option', '4', '4'); $options[] = JHtml::_('select.option', '5', '5'); $options[] = JHtml::_('select.option', '6', '6'); return $options; } } PKb��\�@viUUcomponents/com_users/users.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_users</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_USERS_XML_DESCRIPTION</description> <files folder="site"> <filename>controller.php</filename> <filename>router.php</filename> <filename>users.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="site"> <language tag="en-GB">language/en-GB.com_users.ini</language> </languages> <administration> <files folder="admin"> <filename>config.xml</filename> <filename>controller.php</filename> <filename>users.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_users.ini</language> <language tag="en-GB">language/en-GB.com_users.sys.ini</language> </languages> </administration> </extension> PKb��\IbZ�c3c3%components/com_users/models/users.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Methods supporting a list of user records. * * @since 1.6 */ class UsersModelUsers extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'name', 'a.name', 'username', 'a.username', 'email', 'a.email', 'block', 'a.block', 'sendEmail', 'a.sendEmail', 'registerDate', 'a.registerDate', 'lastvisitDate', 'a.lastvisitDate', 'activation', 'a.activation', 'active', 'group_id', 'range', 'lastvisitrange', 'state', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.name', $direction = 'asc') { $app = JFactory::getApplication('administrator'); // Adjust the context to support modal layouts. if ($layout = $app->input->get('layout', 'default', 'cmd')) { $this->context .= '.' . $layout; } // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.active', $this->getUserStateFromRequest($this->context . '.filter.active', 'filter_active', '', 'cmd')); $this->setState('filter.state', $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'cmd')); $this->setState('filter.group_id', $this->getUserStateFromRequest($this->context . '.filter.group_id', 'filter_group_id', null, 'int')); $this->setState('filter.range', $this->getUserStateFromRequest($this->context . '.filter.range', 'filter_range', '', 'cmd')); $this->setState( 'filter.lastvisitrange', $this->getUserStateFromRequest($this->context . '.filter.lastvisitrange', 'filter_lastvisitrange', '', 'cmd') ); $groups = json_decode(base64_decode($app->input->get('groups', '', 'BASE64'))); if (isset($groups)) { $groups = ArrayHelper::toInteger($groups); } $this->setState('filter.groups', $groups); $excluded = json_decode(base64_decode($app->input->get('excluded', '', 'BASE64'))); if (isset($excluded)) { $excluded = ArrayHelper::toInteger($excluded); } $this->setState('filter.excluded', $excluded); // Load the parameters. $params = JComponentHelper::getParams('com_users'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.active'); $id .= ':' . $this->getState('filter.state'); $id .= ':' . $this->getState('filter.group_id'); $id .= ':' . $this->getState('filter.range'); return parent::getStoreId($id); } /** * Gets the list of users and adds expensive joins to the result set. * * @return mixed An array of data items on success, false on failure. * * @since 1.6 */ public function getItems() { // Get a storage key. $store = $this->getStoreId(); // Try to load the data from internal storage. if (empty($this->cache[$store])) { $groups = $this->getState('filter.groups'); $groupId = $this->getState('filter.group_id'); if (isset($groups) && (empty($groups) || $groupId && !in_array($groupId, $groups))) { $items = array(); } else { $items = parent::getItems(); } // Bail out on an error or empty list. if (empty($items)) { $this->cache[$store] = $items; return $items; } // Joining the groups with the main query is a performance hog. // Find the information only on the result set. // First pass: get list of the user id's and reset the counts. $userIds = array(); foreach ($items as $item) { $userIds[] = (int) $item->id; $item->group_count = 0; $item->group_names = ''; $item->note_count = 0; } // Get the counts from the database only for the users in the list. $db = $this->getDbo(); $query = $db->getQuery(true); // Join over the group mapping table. $query->select('map.user_id, COUNT(map.group_id) AS group_count') ->from('#__user_usergroup_map AS map') ->where('map.user_id IN (' . implode(',', $userIds) . ')') ->group('map.user_id') // Join over the user groups table. ->join('LEFT', '#__usergroups AS g2 ON g2.id = map.group_id'); $db->setQuery($query); // Load the counts into an array indexed on the user id field. try { $userGroups = $db->loadObjectList('user_id'); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } $query->clear() ->select('n.user_id, COUNT(n.id) As note_count') ->from('#__user_notes AS n') ->where('n.user_id IN (' . implode(',', $userIds) . ')') ->where('n.state >= 0') ->group('n.user_id'); $db->setQuery($query); // Load the counts into an array indexed on the aro.value field (the user id). try { $userNotes = $db->loadObjectList('user_id'); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // Second pass: collect the group counts into the master items array. foreach ($items as &$item) { if (isset($userGroups[$item->id])) { $item->group_count = $userGroups[$item->id]->group_count; // Group_concat in other databases is not supported $item->group_names = $this->_getUserDisplayedGroups($item->id); } if (isset($userNotes[$item->id])) { $item->note_count = $userNotes[$item->id]->note_count; } } // Add the items to the internal cache. $this->cache[$store] = $items; } return $this->cache[$store]; } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.*' ) ); $query->from($db->quoteName('#__users') . ' AS a'); // If the model is set to check item state, add to the query. $state = $this->getState('filter.state'); if (is_numeric($state)) { $query->where('a.block = ' . (int) $state); } // If the model is set to check the activated state, add to the query. $active = $this->getState('filter.active'); if (is_numeric($active)) { if ($active == '0') { $query->where('a.activation IN (' . $db->quote('') . ', ' . $db->quote('0') . ')'); } elseif ($active == '1') { $query->where($query->length('a.activation') . ' > 1'); } } // Filter the items over the group id if set. $groupId = $this->getState('filter.group_id'); $groups = $this->getState('filter.groups'); if ($groupId || isset($groups)) { $query->join('LEFT', '#__user_usergroup_map AS map2 ON map2.user_id = a.id') ->group( $db->quoteName( array( 'a.id', 'a.name', 'a.username', 'a.password', 'a.block', 'a.sendEmail', 'a.registerDate', 'a.lastvisitDate', 'a.activation', 'a.params', 'a.email' ) ) ); if ($groupId) { $query->where('map2.group_id = ' . (int) $groupId); } if (isset($groups)) { $query->where('map2.group_id IN (' . implode(',', $groups) . ')'); } } // Filter the items over the search string if set. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = ' . (int) substr($search, 3)); } elseif (stripos($search, 'username:') === 0) { $search = $db->quote('%' . $db->escape(substr($search, 9), true) . '%'); $query->where('a.username LIKE ' . $search); } else { // Escape the search token. $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); // Compile the different search clauses. $searches = array(); $searches[] = 'a.name LIKE ' . $search; $searches[] = 'a.username LIKE ' . $search; $searches[] = 'a.email LIKE ' . $search; // Add the clauses to the query. $query->where('(' . implode(' OR ', $searches) . ')'); } } // Add filter for registration ranges select list $range = $this->getState('filter.range'); // Apply the range filter. if ($range) { $dates = $this->buildDateRange($range); if ($dates['dNow'] === false) { $query->where( $db->qn('a.registerDate') . ' < ' . $db->quote($dates['dStart']->format('Y-m-d H:i:s')) ); } else { $query->where( $db->qn('a.registerDate') . ' >= ' . $db->quote($dates['dStart']->format('Y-m-d H:i:s')) . ' AND ' . $db->qn('a.registerDate') . ' <= ' . $db->quote($dates['dNow']->format('Y-m-d H:i:s')) ); } } // Add filter for registration ranges select list $lastvisitrange = $this->getState('filter.lastvisitrange'); // Apply the range filter. if ($lastvisitrange) { $dates = $this->buildDateRange($lastvisitrange); if (is_string($dates['dStart'])) { $query->where( $db->qn('a.lastvisitDate') . ' = ' . $db->quote($dates['dStart']) ); } elseif ($dates['dNow'] === false) { $query->where( $db->qn('a.lastvisitDate') . ' < ' . $db->quote($dates['dStart']->format('Y-m-d H:i:s')) ); } else { $query->where( $db->qn('a.lastvisitDate') . ' >= ' . $db->quote($dates['dStart']->format('Y-m-d H:i:s')) . ' AND ' . $db->qn('a.lastvisitDate') . ' <= ' . $db->quote($dates['dNow']->format('Y-m-d H:i:s')) ); } } // Filter by excluded users $excluded = $this->getState('filter.excluded'); if (!empty($excluded)) { $query->where('id NOT IN (' . implode(',', $excluded) . ')'); } // Add the list ordering clause. $query->order($db->qn($db->escape($this->getState('list.ordering', 'a.name'))) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Construct the date range to filter on. * * @param string $range The textual range to construct the filter for. * * @return string The date range to filter on. * * @since 3.6.0 */ private function buildDateRange($range) { // Get UTC for now. $dNow = new JDate; $dStart = clone $dNow; switch ($range) { case 'past_week': $dStart->modify('-7 day'); break; case 'past_1month': $dStart->modify('-1 month'); break; case 'past_3month': $dStart->modify('-3 month'); break; case 'past_6month': $dStart->modify('-6 month'); break; case 'post_year': $dNow = false; case 'past_year': $dStart->modify('-1 year'); break; case 'today': // Ranges that need to align with local 'days' need special treatment. $app = JFactory::getApplication(); $offset = $app->get('offset'); // Reset the start time to be the beginning of today, local time. $dStart = new JDate('now', $offset); $dStart->setTime(0, 0, 0); // Now change the timezone back to UTC. $tz = new DateTimeZone('GMT'); $dStart->setTimezone($tz); break; case 'never': $dNow = false; $dStart = $this->_db->getNullDate(); break; } return array('dNow' => $dNow, 'dStart' => $dStart); } /** * SQL server change * * @param integer $user_id User identifier * * @return string Groups titles imploded :$ */ protected function _getUserDisplayedGroups($user_id) { $db = $this->getDbo(); $query = $db->getQuery(true) ->select($db->qn('title')) ->from($db->qn('#__usergroups', 'ug')) ->join('LEFT', $db->qn('#__user_usergroup_map', 'map') . ' ON (ug.id = map.group_id)') ->where($db->qn('map.user_id') . ' = ' . (int) $user_id); try { $result = $db->setQuery($query)->loadColumn(); } catch (RunTimeException $e) { $result = array(); } return implode("\n", $result); } } PKb��\��.� � 2components/com_users/models/fields/groupparent.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; use Joomla\CMS\Access\Access; use Joomla\CMS\Factory; use Joomla\CMS\Form\FormHelper; use Joomla\CMS\Helper\UserGroupsHelper; FormHelper::loadFieldClass('list'); /** * User Group Parent field.. * * @since 1.6 */ class JFormFieldGroupParent extends JFormFieldList { /** * The form field type. * * @var string * @since 1.6 */ protected $type = 'GroupParent'; /** * Method to clean the Usergroup Options from all children starting by a given father * * @param array $userGroupsOptions The usergroup options to clean * @param integer $fatherId The father ID to start with * * @return array The cleaned field options * * @since 3.9.4 */ private function cleanOptionsChildrenByFather($userGroupsOptions, $fatherId) { foreach ($userGroupsOptions as $userGroupsOptionsId => $userGroupsOptionsData) { if ((int) $userGroupsOptionsData->parent_id === (int) $fatherId) { unset($userGroupsOptions[$userGroupsOptionsId]); $userGroupsOptions = $this->cleanOptionsChildrenByFather($userGroupsOptions, $userGroupsOptionsId); } } return $userGroupsOptions; } /** * Method to get the field options. * * @return array The field option objects * * @since 1.6 */ protected function getOptions() { $options = UserGroupsHelper::getInstance()->getAll(); $currentGroupId = $this->form->getValue('id'); // Prevent to set yourself as parent if ($currentGroupId) { unset($options[$currentGroupId]); } // We should not remove any groups when we are creating a new group if (!is_null($currentGroupId)) { // Prevent parenting direct children and children of children of this item. $options = $this->cleanOptionsChildrenByFather($options, $currentGroupId); } $options = array_values($options); $isSuperAdmin = Factory::getUser()->authorise('core.admin'); // Pad the option text with spaces using depth level as a multiplier. for ($i = 0, $n = count($options); $i < $n; $i++) { // Show groups only if user is super admin or group is not super admin if ($isSuperAdmin || !Access::checkGroup($options[$i]->id, 'core.admin')) { $options[$i]->value = $options[$i]->id; $options[$i]->text = str_repeat('- ', $options[$i]->level) . $options[$i]->title; } else { unset($options[$i]); } } // Merge any additional options in the XML definition. return array_merge(parent::getOptions(), $options); } } PKb��\�#�'M�M�$components/com_users/models/user.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; /** * User model. * * @since 1.6 */ class UsersModelUser extends JModelAdmin { /** * An item. * * @var array */ protected $_item = null; /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @since 3.2 */ public function __construct($config = array()) { $config = array_merge( array( 'event_after_delete' => 'onUserAfterDelete', 'event_after_save' => 'onUserAfterSave', 'event_before_delete' => 'onUserBeforeDelete', 'event_before_save' => 'onUserBeforeSave', 'events_map' => array('save' => 'user', 'delete' => 'user', 'validate' => 'user') ), $config ); parent::__construct($config); } /** * Returns a reference to the a Table object, always creating it. * * @param string $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object * * @since 1.6 */ public function getTable($type = 'User', $prefix = 'JTable', $config = array()) { $table = JTable::getInstance($type, $prefix, $config); return $table; } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. * * @since 1.6 */ public function getItem($pk = null) { $pk = (!empty($pk)) ? $pk : (int) $this->getState('user.id'); if ($this->_item === null) { $this->_item = array(); } if (!isset($this->_item[$pk])) { $this->_item[$pk] = parent::getItem($pk); } return $this->_item[$pk]; } /** * Method to get the record form. * * @param array $data An optional array of data for the form to interogate. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { $pluginParams = new Registry; if (JPluginHelper::isEnabled('user', 'joomla')) { $plugin = JPluginHelper::getPlugin('user', 'joomla'); $pluginParams->loadString($plugin->params); } // Get the form. $form = $this->loadForm('com_users.user', 'user', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } $userId = $form->getValue('id'); // Passwords fields are required when mail to user is set to No in the joomla user plugin if ($userId === 0 && $pluginParams->get('mail_to_user', '1') === '0') { $form->setFieldAttribute('password', 'required', 'true'); $form->setFieldAttribute('password2', 'required', 'true'); } // If the user needs to change their password, mark the password fields as required if (JFactory::getUser()->requireReset) { $form->setFieldAttribute('password', 'required', 'true'); $form->setFieldAttribute('password2', 'required', 'true'); } // When multilanguage is set, a user's default site language should also be a Content Language if (JLanguageMultilang::isEnabled()) { $form->setFieldAttribute('language', 'type', 'frontend_language', 'params'); } // The user should not be able to set the requireReset value on their own account if ((int) $userId === (int) JFactory::getUser()->id) { $form->removeField('requireReset'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_users.edit.user.data', array()); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_users.profile', $data, 'user'); return $data; } /** * Override JModelAdmin::preprocessForm to ensure the correct plugin group is loaded. * * @param JForm $form A JForm object. * @param mixed $data The data expected for the form. * @param string $group The name of the plugin group to import (defaults to "content"). * * @return void * * @since 1.6 * @throws Exception if there is an error in the form event. */ protected function preprocessForm(JForm $form, $data, $group = 'user') { parent::preprocessForm($form, $data, $group); } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { $pk = (!empty($data['id'])) ? $data['id'] : (int) $this->getState('user.id'); $user = JUser::getInstance($pk); $my = JFactory::getUser(); $iAmSuperAdmin = $my->authorise('core.admin'); // User cannot modify own user groups if ((int) $user->id == (int) $my->id && !$iAmSuperAdmin && isset($data['groups'])) { // Form was probably tampered with JFactory::getApplication()->enqueueMessage(JText::_('COM_USERS_USERS_ERROR_CANNOT_EDIT_OWN_GROUP'), 'warning'); $data['groups'] = null; } if ($data['block'] && $pk == $my->id && !$my->block) { $this->setError(JText::_('COM_USERS_USERS_ERROR_CANNOT_BLOCK_SELF')); return false; } // Make sure user groups is selected when add/edit an account if (empty($data['groups']) && ((int) $user->id != (int) $my->id || $iAmSuperAdmin)) { $this->setError(JText::_('COM_USERS_USERS_ERROR_CANNOT_SAVE_ACCOUNT_WITHOUT_GROUPS')); return false; } // Make sure that we are not removing ourself from Super Admin group if ($iAmSuperAdmin && $my->get('id') == $pk) { // Check that at least one of our new groups is Super Admin $stillSuperAdmin = false; $myNewGroups = $data['groups']; foreach ($myNewGroups as $group) { $stillSuperAdmin = $stillSuperAdmin ?: JAccess::checkGroup($group, 'core.admin'); } if (!$stillSuperAdmin) { $this->setError(JText::_('COM_USERS_USERS_ERROR_CANNOT_DEMOTE_SELF')); return false; } } // Handle the two factor authentication setup if (array_key_exists('twofactor', $data)) { $twoFactorMethod = $data['twofactor']['method']; // Get the current One Time Password (two factor auth) configuration $otpConfig = $this->getOtpConfig($pk); if ($twoFactorMethod != 'none') { // Run the plugins FOFPlatform::getInstance()->importPlugin('twofactorauth'); $otpConfigReplies = FOFPlatform::getInstance()->runPlugins('onUserTwofactorApplyConfiguration', array($twoFactorMethod)); // Look for a valid reply foreach ($otpConfigReplies as $reply) { if (!is_object($reply) || empty($reply->method) || ($reply->method != $twoFactorMethod)) { continue; } $otpConfig->method = $reply->method; $otpConfig->config = $reply->config; break; } // Save OTP configuration. $this->setOtpConfig($pk, $otpConfig); // Generate one time emergency passwords if required (depleted or not set) if (empty($otpConfig->otep)) { $oteps = $this->generateOteps($pk); } } else { $otpConfig->method = 'none'; $otpConfig->config = array(); $this->setOtpConfig($pk, $otpConfig); } // Unset the raw data unset($data['twofactor']); // Reload the user record with the updated OTP configuration $user->load($pk); } // Bind the data. if (!$user->bind($data)) { $this->setError($user->getError()); return false; } // Store the data. if (!$user->save()) { $this->setError($user->getError()); return false; } $this->setState('user.id', $user->id); return true; } /** * Method to delete rows. * * @param array &$pks An array of item ids. * * @return boolean Returns true on success, false on failure. * * @since 1.6 */ public function delete(&$pks) { $user = JFactory::getUser(); $table = $this->getTable(); $pks = (array) $pks; // Check if I am a Super Admin $iAmSuperAdmin = $user->authorise('core.admin'); JPluginHelper::importPlugin($this->events_map['delete']); $dispatcher = JEventDispatcher::getInstance(); if (in_array($user->id, $pks)) { $this->setError(JText::_('COM_USERS_USERS_ERROR_CANNOT_DELETE_SELF')); return false; } // Iterate the items to delete each one. foreach ($pks as $i => $pk) { if ($table->load($pk)) { // Access checks. $allow = $user->authorise('core.delete', 'com_users'); // Don't allow non-super-admin to delete a super admin $allow = (!$iAmSuperAdmin && JAccess::check($pk, 'core.admin')) ? false : $allow; if ($allow) { // Get users data for the users to delete. $user_to_delete = JFactory::getUser($pk); // Fire the before delete event. $dispatcher->trigger($this->event_before_delete, array($table->getProperties())); if (!$table->delete($pk)) { $this->setError($table->getError()); return false; } else { // Trigger the after delete event. $dispatcher->trigger($this->event_after_delete, array($user_to_delete->getProperties(), true, $this->getError())); } } else { // Prune items that you can't change. unset($pks[$i]); JError::raiseWarning(403, JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); } } else { $this->setError($table->getError()); return false; } } return true; } /** * Method to block user records. * * @param array &$pks The ids of the items to publish. * @param integer $value The value of the published state * * @return boolean True on success. * * @since 1.6 */ public function block(&$pks, $value = 1) { $app = JFactory::getApplication(); $dispatcher = JEventDispatcher::getInstance(); $user = JFactory::getUser(); // Check if I am a Super Admin $iAmSuperAdmin = $user->authorise('core.admin'); $table = $this->getTable(); $pks = (array) $pks; JPluginHelper::importPlugin($this->events_map['save']); // Prepare the logout options. $options = array( 'clientid' => $app->get('shared_session', '0') ? null : 0, ); // Access checks. foreach ($pks as $i => $pk) { if ($value == 1 && $pk == $user->get('id')) { // Cannot block yourself. unset($pks[$i]); JError::raiseWarning(403, JText::_('COM_USERS_USERS_ERROR_CANNOT_BLOCK_SELF')); } elseif ($table->load($pk)) { $old = $table->getProperties(); $allow = $user->authorise('core.edit.state', 'com_users'); // Don't allow non-super-admin to delete a super admin $allow = (!$iAmSuperAdmin && JAccess::check($pk, 'core.admin')) ? false : $allow; if ($allow) { // Skip changing of same state if ($table->block == $value) { unset($pks[$i]); continue; } $table->block = (int) $value; // If unblocking, also change password reset count to zero to unblock reset if ($table->block === 0) { $table->resetCount = 0; } // Allow an exception to be thrown. try { if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the before save event. $result = $dispatcher->trigger($this->event_before_save, array($old, false, $table->getProperties())); if (in_array(false, $result, true)) { // Plugin will have to raise its own error or throw an exception. return false; } // Store the table. if (!$table->store()) { $this->setError($table->getError()); return false; } // Trigger the after save event $dispatcher->trigger($this->event_after_save, array($table->getProperties(), false, true, null)); } catch (Exception $e) { $this->setError($e->getMessage()); return false; } // Log the user out. if ($value) { $app->logout($table->id, $options); } } else { // Prune items that you can't change. unset($pks[$i]); JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } } } return true; } /** * Method to activate user records. * * @param array &$pks The ids of the items to activate. * * @return boolean True on success. * * @since 1.6 */ public function activate(&$pks) { $dispatcher = JEventDispatcher::getInstance(); $user = JFactory::getUser(); // Check if I am a Super Admin $iAmSuperAdmin = $user->authorise('core.admin'); $table = $this->getTable(); $pks = (array) $pks; JPluginHelper::importPlugin($this->events_map['save']); // Access checks. foreach ($pks as $i => $pk) { if ($table->load($pk)) { $old = $table->getProperties(); $allow = $user->authorise('core.edit.state', 'com_users'); // Don't allow non-super-admin to delete a super admin $allow = (!$iAmSuperAdmin && JAccess::check($pk, 'core.admin')) ? false : $allow; if (empty($table->activation)) { // Ignore activated accounts. unset($pks[$i]); } elseif ($allow) { $table->block = 0; $table->activation = ''; // Allow an exception to be thrown. try { if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the before save event. $result = $dispatcher->trigger($this->event_before_save, array($old, false, $table->getProperties())); if (in_array(false, $result, true)) { // Plugin will have to raise it's own error or throw an exception. return false; } // Store the table. if (!$table->store()) { $this->setError($table->getError()); return false; } // Fire the after save event $dispatcher->trigger($this->event_after_save, array($table->getProperties(), false, true, null)); } catch (Exception $e) { $this->setError($e->getMessage()); return false; } } else { // Prune items that you can't change. unset($pks[$i]); JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } } } return true; } /** * Method to perform batch operations on an item or a set of items. * * @param array $commands An array of commands to perform. * @param array $pks An array of item ids. * @param array $contexts An array of item contexts. * * @return boolean Returns true on success, false on failure. * * @since 2.5 */ public function batch($commands, $pks, $contexts) { // Sanitize user ids. $pks = array_unique($pks); $pks = ArrayHelper::toInteger($pks); // Remove any values of zero. if (array_search(0, $pks, true)) { unset($pks[array_search(0, $pks, true)]); } if (empty($pks)) { $this->setError(JText::_('COM_USERS_USERS_NO_ITEM_SELECTED')); return false; } $done = false; if (!empty($commands['group_id'])) { $cmd = ArrayHelper::getValue($commands, 'group_action', 'add'); if (!$this->batchUser((int) $commands['group_id'], $pks, $cmd)) { return false; } $done = true; } if (!empty($commands['reset_id'])) { if (!$this->batchReset($pks, $commands['reset_id'])) { return false; } $done = true; } if (!$done) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); return false; } // Clear the cache $this->cleanCache(); return true; } /** * Batch flag users as being required to reset their passwords * * @param array $user_ids An array of user IDs on which to operate * @param string $action The action to perform * * @return boolean True on success, false on failure * * @since 3.2 */ public function batchReset($user_ids, $action) { $user_ids = ArrayHelper::toInteger($user_ids); // Check if I am a Super Admin $iAmSuperAdmin = JFactory::getUser()->authorise('core.admin'); // Non-super super user cannot work with super-admin user. if (!$iAmSuperAdmin && JUserHelper::checkSuperUserInUsers($user_ids)) { $this->setError(JText::_('COM_USERS_ERROR_CANNOT_BATCH_SUPERUSER')); return false; } // Set the action to perform if ($action === 'yes') { $value = 1; } else { $value = 0; } // Prune out the current user if they are in the supplied user ID array $user_ids = array_diff($user_ids, array(JFactory::getUser()->id)); if (empty($user_ids)) { $this->setError(JText::_('COM_USERS_USERS_ERROR_CANNOT_REQUIRERESET_SELF')); return false; } // Get the DB object $db = $this->getDbo(); $user_ids = ArrayHelper::toInteger($user_ids); $query = $db->getQuery(true); // Update the reset flag $query->update($db->quoteName('#__users')) ->set($db->quoteName('requireReset') . ' = ' . $value) ->where($db->quoteName('id') . ' IN (' . implode(',', $user_ids) . ')'); $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } return true; } /** * Perform batch operations * * @param integer $group_id The group ID which assignments are being edited * @param array $user_ids An array of user IDs on which to operate * @param string $action The action to perform * * @return boolean True on success, false on failure * * @since 1.6 */ public function batchUser($group_id, $user_ids, $action) { $user_ids = ArrayHelper::toInteger($user_ids); // Check if I am a Super Admin $iAmSuperAdmin = JFactory::getUser()->authorise('core.admin'); // Non-super super user cannot work with super-admin user. if (!$iAmSuperAdmin && JUserHelper::checkSuperUserInUsers($user_ids)) { $this->setError(JText::_('COM_USERS_ERROR_CANNOT_BATCH_SUPERUSER')); return false; } // Non-super admin cannot work with super-admin group. if ((!$iAmSuperAdmin && JAccess::checkGroup($group_id, 'core.admin')) || $group_id < 1) { $this->setError(JText::_('COM_USERS_ERROR_INVALID_GROUP')); return false; } // Get the DB object $db = $this->getDbo(); switch ($action) { // Sets users to a selected group case 'set': $doDelete = 'all'; $doAssign = true; break; // Remove users from a selected group case 'del': $doDelete = 'group'; break; // Add users to a selected group case 'add': default: $doAssign = true; break; } // Remove the users from the group if requested. if (isset($doDelete)) { $query = $db->getQuery(true); // Remove users from the group $query->delete($db->quoteName('#__user_usergroup_map')) ->where($db->quoteName('user_id') . ' IN (' . implode(',', $user_ids) . ')'); // Only remove users from selected group if ($doDelete == 'group') { $query->where($db->quoteName('group_id') . ' = ' . (int) $group_id); } $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } } // Assign the users to the group if requested. if (isset($doAssign)) { $query = $db->getQuery(true); // First, we need to check if the user is already assigned to a group $query->select($db->quoteName('user_id')) ->from($db->quoteName('#__user_usergroup_map')) ->where($db->quoteName('group_id') . ' = ' . (int) $group_id); $db->setQuery($query); $users = $db->loadColumn(); // Build the values clause for the assignment query. $query->clear(); $groups = false; foreach ($user_ids as $id) { if (!in_array($id, $users)) { $query->values($id . ',' . $group_id); $groups = true; } } // If we have no users to process, throw an error to notify the user if (!$groups) { $this->setError(JText::_('COM_USERS_ERROR_NO_ADDITIONS')); return false; } $query->insert($db->quoteName('#__user_usergroup_map')) ->columns(array($db->quoteName('user_id'), $db->quoteName('group_id'))); $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } } return true; } /** * Gets the available groups. * * @return array An array of groups * * @since 1.6 */ public function getGroups() { $user = JFactory::getUser(); if ($user->authorise('core.edit', 'com_users') && $user->authorise('core.manage', 'com_users')) { $model = JModelLegacy::getInstance('Groups', 'UsersModel', array('ignore_request' => true)); return $model->getItems(); } else { return null; } } /** * Gets the groups this object is assigned to * * @param integer $userId The user ID to retrieve the groups for * * @return array An array of assigned groups * * @since 1.6 */ public function getAssignedGroups($userId = null) { $userId = (!empty($userId)) ? $userId : (int) $this->getState('user.id'); if (empty($userId)) { $result = array(); $form = $this->getForm(); if ($form) { $groupsIDs = $form->getValue('groups'); } if (!empty($groupsIDs)) { $result = $groupsIDs; } else { $params = JComponentHelper::getParams('com_users'); if ($groupId = $params->get('new_usertype', $params->get('guest_usergroup', 1))) { $result[] = $groupId; } } } else { $result = JUserHelper::getUserGroups($userId); } return $result; } /** * Returns the one time password (OTP) – a.k.a. two factor authentication – * configuration for a particular user. * * @param integer $user_id The numeric ID of the user * * @return stdClass An object holding the OTP configuration for this user * * @since 3.2 */ public function getOtpConfig($user_id = null) { $user_id = (!empty($user_id)) ? $user_id : (int) $this->getState('user.id'); // Initialise $otpConfig = (object) array( 'method' => 'none', 'config' => array(), 'otep' => array() ); /** * Get the raw data, without going through JUser (required in order to * be able to modify the user record before logging in the user). */ $db = $this->getDbo(); $query = $db->getQuery(true) ->select('*') ->from($db->qn('#__users')) ->where($db->qn('id') . ' = ' . (int) $user_id); $db->setQuery($query); $item = $db->loadObject(); // Make sure this user does have OTP enabled if (empty($item->otpKey)) { return $otpConfig; } // Get the encrypted data list($method, $config) = explode(':', $item->otpKey, 2); $encryptedOtep = $item->otep; // Get the secret key, yes the thing that is saved in the configuration file $key = $this->getOtpConfigEncryptionKey(); if (strpos($config, '{') === false) { $openssl = new FOFEncryptAes($key, 256); $mcrypt = new FOFEncryptAes($key, 256, 'cbc', null, 'mcrypt'); $decryptedConfig = $mcrypt->decryptString($config); if (strpos($decryptedConfig, '{') !== false) { // Data encrypted with mcrypt $decryptedOtep = $mcrypt->decryptString($encryptedOtep); $encryptedOtep = $openssl->encryptString($decryptedOtep); } else { // Config data seems to be save encrypted, this can happen with 3.6.3 and openssl, lets get the data $decryptedConfig = $openssl->decryptString($config); } $otpKey = $method . ':' . $decryptedConfig; $query = $db->getQuery(true) ->update($db->qn('#__users')) ->set($db->qn('otep') . '=' . $db->q($encryptedOtep)) ->set($db->qn('otpKey') . '=' . $db->q($otpKey)) ->where($db->qn('id') . ' = ' . $db->q($user_id)); $db->setQuery($query); $db->execute(); } else { $decryptedConfig = $config; } // Create an encryptor class $aes = new FOFEncryptAes($key, 256); // Decrypt the data $decryptedOtep = $aes->decryptString($encryptedOtep); // Remove the null padding added during encryption $decryptedConfig = rtrim($decryptedConfig, "\0"); $decryptedOtep = rtrim($decryptedOtep, "\0"); // Update the configuration object $otpConfig->method = $method; $otpConfig->config = @json_decode($decryptedConfig); $otpConfig->otep = @json_decode($decryptedOtep); /* * If the decryption failed for any reason we essentially disable the * two-factor authentication. This prevents impossible to log in sites * if the site admin changes the site secret for any reason. */ if (is_null($otpConfig->config)) { $otpConfig->config = array(); } if (is_object($otpConfig->config)) { $otpConfig->config = (array) $otpConfig->config; } if (is_null($otpConfig->otep)) { $otpConfig->otep = array(); } if (is_object($otpConfig->otep)) { $otpConfig->otep = (array) $otpConfig->otep; } // Return the configuration object return $otpConfig; } /** * Sets the one time password (OTP) – a.k.a. two factor authentication – * configuration for a particular user. The $otpConfig object is the same as * the one returned by the getOtpConfig method. * * @param integer $user_id The numeric ID of the user * @param stdClass $otpConfig The OTP configuration object * * @return boolean True on success * * @since 3.2 */ public function setOtpConfig($user_id, $otpConfig) { $user_id = (!empty($user_id)) ? $user_id : (int) $this->getState('user.id'); $updates = (object) array( 'id' => $user_id, 'otpKey' => '', 'otep' => '' ); // Create an encryptor class $key = $this->getOtpConfigEncryptionKey(); $aes = new FOFEncryptAes($key, 256); // Create the encrypted option strings if (!empty($otpConfig->method) && ($otpConfig->method != 'none')) { $decryptedConfig = json_encode($otpConfig->config); $decryptedOtep = json_encode($otpConfig->otep); $updates->otpKey = $otpConfig->method . ':' . $decryptedConfig; $updates->otep = $aes->encryptString($decryptedOtep); } $db = $this->getDbo(); $result = $db->updateObject('#__users', $updates, 'id'); return $result; } /** * Gets the symmetric encryption key for the OTP configuration data. It * currently returns the site's secret. * * @return string The encryption key * * @since 3.2 */ public function getOtpConfigEncryptionKey() { return JFactory::getConfig()->get('secret'); } /** * Gets the configuration forms for all two-factor authentication methods * in an array. * * @param integer $user_id The user ID to load the forms for (optional) * * @return array * * @since 3.2 */ public function getTwofactorform($user_id = null) { $user_id = (!empty($user_id)) ? $user_id : (int) $this->getState('user.id'); $otpConfig = $this->getOtpConfig($user_id); FOFPlatform::getInstance()->importPlugin('twofactorauth'); return FOFPlatform::getInstance()->runPlugins('onUserTwofactorShowConfiguration', array($otpConfig, $user_id)); } /** * Generates a new set of One Time Emergency Passwords (OTEPs) for a given user. * * @param integer $user_id The user ID * @param integer $count How many OTEPs to generate? Default: 10 * * @return array The generated OTEPs * * @since 3.2 */ public function generateOteps($user_id, $count = 10) { $user_id = (!empty($user_id)) ? $user_id : (int) $this->getState('user.id'); // Initialise $oteps = array(); // Get the OTP configuration for the user $otpConfig = $this->getOtpConfig($user_id); // If two factor authentication is not enabled, abort if (empty($otpConfig->method) || ($otpConfig->method == 'none')) { return $oteps; } $salt = '0123456789'; $base = strlen($salt); $length = 16; for ($i = 0; $i < $count; $i++) { $makepass = ''; $random = JCrypt::genRandomBytes($length + 1); $shift = ord($random[0]); for ($j = 1; $j <= $length; ++$j) { $makepass .= $salt[($shift + ord($random[$j])) % $base]; $shift += ord($random[$j]); } $oteps[] = $makepass; } $otpConfig->otep = $oteps; // Save the now modified OTP configuration $this->setOtpConfig($user_id, $otpConfig); return $oteps; } /** * Checks if the provided secret key is a valid two factor authentication * secret key. If not, it will check it against the list of one time * emergency passwords (OTEPs). If it's a valid OTEP it will also remove it * from the user's list of OTEPs. * * This method will return true in the following conditions: * - The two factor authentication is not enabled * - You have provided a valid secret key for * - You have provided a valid OTEP * * You can define the following options in the $options array: * otp_config The OTP (one time password, a.k.a. two factor auth) * configuration object. If not set we'll load it automatically. * warn_if_not_req Issue a warning if you are checking a secret key against * a user account which doesn't have any two factor * authentication method enabled. * warn_irq_msg The string to use for the warn_if_not_req warning * * @param integer $user_id The user's numeric ID * @param string $secretkey The secret key you want to check * @param array $options Options; see above * * @return boolean True if it's a valid secret key for this user. * * @since 3.2 */ public function isValidSecretKey($user_id, $secretkey, $options = array()) { // Load the user's OTP (one time password, a.k.a. two factor auth) configuration if (!array_key_exists('otp_config', $options)) { $otpConfig = $this->getOtpConfig($user_id); $options['otp_config'] = $otpConfig; } else { $otpConfig = $options['otp_config']; } // Check if the user has enabled two factor authentication if (empty($otpConfig->method) || ($otpConfig->method == 'none')) { // Load language $lang = JFactory::getLanguage(); $extension = 'com_users'; $source = JPATH_ADMINISTRATOR . '/components/' . $extension; $lang->load($extension, JPATH_ADMINISTRATOR, null, false, true) || $lang->load($extension, $source, null, false, true); $warn = true; $warnMessage = JText::_('COM_USERS_ERROR_SECRET_CODE_WITHOUT_TFA'); if (array_key_exists('warn_if_not_req', $options)) { $warn = $options['warn_if_not_req']; } if (array_key_exists('warn_irq_msg', $options)) { $warnMessage = $options['warn_irq_msg']; } // Warn the user if they are using a secret code but they have not // enabled two factor auth in their account. if (!empty($secretkey) && $warn) { try { $app = JFactory::getApplication(); $app->enqueueMessage($warnMessage, 'warning'); } catch (Exception $exc) { // This happens when we are in CLI mode. In this case // no warning is issued return true; } } return true; } $credentials = array( 'secretkey' => $secretkey, ); // Try to validate the OTP FOFPlatform::getInstance()->importPlugin('twofactorauth'); $otpAuthReplies = FOFPlatform::getInstance()->runPlugins('onUserTwofactorAuthenticate', array($credentials, $options)); $check = false; /* * This looks like noob code but DO NOT TOUCH IT and do not convert * to in_array(). During testing in_array() inexplicably returned * null when the OTEP begins with a zero! o_O */ if (!empty($otpAuthReplies)) { foreach ($otpAuthReplies as $authReply) { $check = $check || $authReply; } } // Fall back to one time emergency passwords if (!$check) { $check = $this->isValidOtep($user_id, $secretkey, $otpConfig); } return $check; } /** * Checks if the supplied string is a valid one time emergency password * (OTEP) for this user. If it is it will be automatically removed from the * user's list of OTEPs. * * @param integer $user_id The user ID against which you are checking * @param string $otep The string you want to test for validity * @param object $otpConfig Optional; the two factor authentication configuration (automatically fetched if not set) * * @return boolean True if it's a valid OTEP or if two factor auth is not * enabled in this user's account. * * @since 3.2 */ public function isValidOtep($user_id, $otep, $otpConfig = null) { if (is_null($otpConfig)) { $otpConfig = $this->getOtpConfig($user_id); } // Did the user use an OTEP instead? if (empty($otpConfig->otep)) { if (empty($otpConfig->method) || ($otpConfig->method == 'none')) { // Two factor authentication is not enabled on this account. // Any string is assumed to be a valid OTEP. return true; } else { /** * Two factor authentication enabled and no OTEPs defined. The * user has used them all up. Therefore anything they enter is * an invalid OTEP. */ return false; } } // Clean up the OTEP (remove dashes, spaces and other funny stuff // our beloved users may have unwittingly stuffed in it) $otep = filter_var($otep, FILTER_SANITIZE_NUMBER_INT); $otep = str_replace('-', '', $otep); $check = false; // Did we find a valid OTEP? if (in_array($otep, $otpConfig->otep)) { // Remove the OTEP from the array $otpConfig->otep = array_diff($otpConfig->otep, array($otep)); $this->setOtpConfig($user_id, $otpConfig); // Return true; the OTEP was a valid one $check = true; } return $check; } } PKb��\�~`QQ2components/com_users/models/forms/filter_users.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fields name="filter"> <field name="search" type="text" label="COM_USERS_SEARCH_USERS" description="COM_USERS_SEARCH_IN_NAME" hint="JSEARCH_FILTER" /> <field name="state" type="userstate" label="COM_USERS_FILTER_STATE" description="COM_USERS_FILTER_STATE_DESC" onchange="this.form.submit();" > <option value="">COM_USERS_FILTER_STATE</option> </field> <field name="active" type="useractive" label="COM_USERS_FILTER_ACTIVE" description="COM_USERS_FILTER_ACTIVE_DESC" onchange="this.form.submit();" > <option value="">COM_USERS_FILTER_ACTIVE</option> </field> <field name="group_id" type="usergrouplist" label="COM_USERS_FILTER_GROUP" description="COM_USERS_FILTER_GROUP_DESC" onchange="this.form.submit();" > <option value="">COM_USERS_FILTER_USERGROUP</option> </field> <field name="lastvisitrange" type="lastvisitdaterange" label="COM_USERS_OPTION_FILTER_LAST_VISIT_DATE" description="COM_USERS_OPTION_FILTER_LAST_VISIT_DATE" onchange="this.form.submit();" > <option value="">COM_USERS_OPTION_FILTER_LAST_VISIT_DATE</option> </field> <field name="range" type="registrationdaterange" label="COM_USERS_OPTION_FILTER_DATE" description="COM_USERS_OPTION_FILTER_DATE" onchange="this.form.submit();" > <option value="">COM_USERS_OPTION_FILTER_DATE</option> </field> </fields> <fields name="list"> <field name="fullordering" type="list" label="COM_CONTENT_LIST_FULL_ORDERING" description="COM_CONTENT_LIST_FULL_ORDERING_DESC" onchange="this.form.submit();" default="a.name ASC" > <option value="">JGLOBAL_SORT_BY</option> <option value="a.name ASC">COM_USERS_HEADING_NAME_ASC</option> <option value="a.name DESC">COM_USERS_HEADING_NAME_DESC</option> <option value="a.username ASC">COM_USERS_HEADING_USERNAME_ASC</option> <option value="a.username DESC">COM_USERS_HEADING_USERNAME_DESC</option> <option value="a.block ASC">COM_USERS_HEADING_ENABLED_ASC</option> <option value="a.block DESC">COM_USERS_HEADING_ENABLED_DESC</option> <option value="a.activation ASC">COM_USERS_HEADING_ACTIVATED_ASC</option> <option value="a.activation DESC">COM_USERS_HEADING_ACTIVATED_DESC</option> <option value="a.email ASC">COM_USERS_HEADING_EMAIL_ASC</option> <option value="a.email DESC">COM_USERS_HEADING_EMAIL_DESC</option> <option value="a.lastvisitDate ASC">COM_USERS_HEADING_LAST_VISIT_DATE_ASC</option> <option value="a.lastvisitDate DESC">COM_USERS_HEADING_LAST_VISIT_DATE_DESC</option> <option value="a.registerDate ASC">COM_USERS_HEADING_REGISTRATION_DATE_ASC</option> <option value="a.registerDate DESC">COM_USERS_HEADING_REGISTRATION_DATE_DESC</option> <option value="a.id ASC">JGRID_HEADING_ID_ASC</option> <option value="a.id DESC">JGRID_HEADING_ID_DESC</option> </field> <field name="limit" type="limitbox" label="COM_CONTENT_LIST_LIMIT" description="COM_CONTENT_LIST_LIMIT_DESC" class="input-mini" default="25" onchange="this.form.submit();" /> </fields> </form> PKb��\|g)22+components/com_users/models/forms/level.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="id" type="hidden" default="0" readonly="true" required="true" /> <field name="title" type="text" label="COM_USERS_LEVEL_FIELD_TITLE_LABEL" description="COM_USERS_LEVEL_FIELD_TITLE_DESC" required="true" size="50" /> <field name="ordering" type="text" label="JFIELD_ORDERING_LABEL" description="JFIELD_ORDERING_DESC" default="0" /> <field name="rules" type="hidden" filter="int_array" /> </fieldset> </form> PKb��\�%�c��+components/com_users/models/forms/group.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset name="group_details"> <field name="id" type="hidden" default="0" required="true" readonly="true" /> <field name="title" type="text" label="COM_USERS_GROUP_FIELD_TITLE_LABEL" description="COM_USERS_GROUP_FIELD_TITLE_DESC" required="true" size="40" /> <field name="parent_id" type="groupparent" label="COM_USERS_GROUP_FIELD_PARENT_LABEL" description="COM_USERS_GROUP_FIELD_PARENT_DESC" /> <field name="actions" type="hidden" multiple="true" /> <field name="lft" type="hidden" filter="unset" /> <field name="rgt" type="hidden" filter="unset" /> </fieldset> </form> PKb��\@��%***components/com_users/models/forms/note.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset addfieldpath="/administrator/components/com_categories/models/fields" > <field name="id" type="hidden" label="COM_USERS_FIELD_ID_LABEL" class="readonly" size="6" default="0" readonly="true" /> <field name="user_id" type="user" label="COM_USERS_FIELD_USER_ID_LABEL" description="JLIB_FORM_SELECT_USER" size="50" class="input-medium" required="true" /> <field name="catid" type="modal_category" label="COM_USERS_FIELD_CATEGORY_ID_LABEL" description="JFIELD_CATEGORY_DESC" extension="com_users" required="true" select="true" new="true" edit="true" clear="true" /> <field name="subject" type="text" label="COM_USERS_FIELD_SUBJECT_LABEL" description="COM_USERS_FIELD_SUBJECT_DESC" size="80" /> <field name="body" type="editor" label="COM_USERS_FIELD_NOTEBODY_LABEL" description="COM_USERS_FIELD_NOTEBODY_DESC" rows="10" cols="80" filter="safehtml" /> <field name="state" type="list" label="JSTATUS" description="COM_USERS_FIELD_STATE_DESC" size="1" default="1" > <option value="1">JPUBLISHED</option> <option value="0">JUNPUBLISHED</option> <option value="2">JARCHIVED</option> <option value="-2">JTRASHED</option> </field> <field name="review_time" type="calendar" label="COM_USERS_FIELD_REVIEW_TIME_LABEL" description="COM_USERS_FIELD_REVIEW_TIME_DESC" default="NOW" translateformat="true" filter="user_utc" /> <field name="checked_out" type="hidden" filter="unset" /> <field name="checked_out_time" type="hidden" filter="unset" /> <field name="created_user_id" type="hidden" label="JGLOBAL_FIELD_CREATED_BY_LABEL" filter="unset" /> <field name="created_time" type="hidden" label="JGLOBAL_FIELD_CREATED_LABEL" filter="unset" /> <field name="modified_user_id" type="hidden" label="JGLOBAL_FIELD_MODIFIED_BY_LABEL" filter="unset" /> <field name="modified_time" type="hidden" label="JGLOBAL_FIELD_MODIFIED_LABEL" filter="unset" /> <field name="publish_up" type="calendar" label="JGLOBAL_FIELD_PUBLISH_UP_LABEL" description="JGLOBAL_FIELD_PUBLISH_UP_DESC" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="publish_down" type="calendar" label="JGLOBAL_FIELD_PUBLISH_DOWN_LABEL" description="JGLOBAL_FIELD_PUBLISH_DOWN_DESC" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="version_note" type="text" label="JGLOBAL_FIELD_VERSION_NOTE_LABEL" description="JGLOBAL_FIELD_VERSION_NOTE_DESC" maxlength="255" size="45" labelclass="control-label" /> </fieldset> </form> PKb��\�28���*components/com_users/models/forms/mail.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="recurse" type="checkbox" label="COM_USERS_MAIL_FIELD_RECURSE_LABEL" description="COM_USERS_MAIL_FIELD_RECURSE_DESC" value="1" /> <field name="mode" type="checkbox" label="COM_USERS_MAIL_FIELD_SEND_IN_HTML_MODE_LABEL" description="COM_USERS_MAIL_FIELD_SEND_IN_HTML_MODE_DESC" value="1" /> <field name="disabled" type="checkbox" label="COM_USERS_MAIL_FIELD_EMAIL_DISABLED_USERS_LABEL" description="COM_USERS_MAIL_FIELD_EMAIL_DISABLED_USERS_DESC" value="1" /> <field name="group" type="usergrouplist" label="COM_USERS_MAIL_FIELD_GROUP_LABEL" description="COM_USERS_MAIL_FIELD_GROUP_DESC" default="0" size="10" > <option value="0">COM_USERS_MAIL_FIELD_VALUE_ALL_USERS_GROUPS</option> </field> <field name="bcc" type="checkbox" label="COM_USERS_MAIL_FIELD_SEND_AS_BLIND_CARBON_COPY_LABEL" description="COM_USERS_MAIL_FIELD_SEND_AS_BLIND_CARBON_COPY_DESC" default="1" value="1" checked="1" /> <field name="subject" type="text" label="COM_USERS_MAIL_FIELD_SUBJECT_LABEL" description="COM_USERS_MAIL_FIELD_SUBJECT_DESC" class="span8" maxlength="150" size="30" /> <field name="message" type="textarea" label="COM_USERS_MAIL_FIELD_MESSAGE_LABEL" description="COM_USERS_MAIL_FIELD_MESSAGE_DESC" class="span11 vert" cols="70" rows="20" /> </fieldset> </form> PKb��\=�m*components/com_users/models/forms/user.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset name="user_details"> <field name="name" type="text" label="COM_USERS_USER_FIELD_NAME_LABEL" description="COM_USERS_USER_FIELD_NAME_DESC" required="true" size="30" /> <field name="username" type="text" label="COM_USERS_USER_FIELD_USERNAME_LABEL" description="COM_USERS_USER_FIELD_USERNAME_DESC" required="true" size="30" /> <field name="password" type="password" label="JGLOBAL_PASSWORD" description="COM_USERS_USER_FIELD_PASSWORD_DESC" autocomplete="off" class="validate-password" filter="raw" validate="password" size="30" /> <field name="password2" type="password" label="COM_USERS_USER_FIELD_PASSWORD2_LABEL" description="COM_USERS_USER_FIELD_PASSWORD2_DESC" autocomplete="off" class="validate-password" filter="raw" message="COM_USERS_USER_FIELD_PASSWORD1_MESSAGE" size="30" validate="equals" field="password" /> <field name="email" type="email" label="JGLOBAL_EMAIL" description="COM_USERS_USER_FIELD_EMAIL_DESC" required="true" size="30" validate="email" validDomains="com_users.domains" /> <field name="registerDate" type="calendar" label="COM_USERS_USER_FIELD_REGISTERDATE_LABEL" description="COM_USERS_USER_FIELD_REGISTERDATE_DESC" class="readonly" readonly="true" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="lastvisitDate" type="calendar" label="COM_USERS_USER_FIELD_LASTVISIT_LABEL" description="COM_USERS_USER_FIELD_LASTVISIT_DESC" class="readonly" readonly="true" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="lastResetTime" type="calendar" label="COM_USERS_USER_FIELD_LASTRESET_LABEL" description="COM_USERS_USER_FIELD_LASTRESET_DESC" class="readonly" readonly="true" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="resetCount" type="number" label="COM_USERS_USER_FIELD_RESETCOUNT_LABEL" description="COM_USERS_USER_FIELD_RESETCOUNT_DESC" class="readonly" default="0" readonly="true" /> <field name="sendEmail" type="radio" label="COM_USERS_USER_FIELD_SENDEMAIL_LABEL" description="COM_USERS_USER_FIELD_SENDEMAIL_DESC" default="0" class="btn-group btn-group-yesno" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="block" type="radio" label="COM_USERS_USER_FIELD_BLOCK_LABEL" description="COM_USERS_USER_FIELD_BLOCK_DESC" class="btn-group btn-group-yesno btn-group-reversed" default="0" > <option value="1">COM_USERS_USER_FIELD_BLOCK</option> <option value="0">COM_USERS_USER_FIELD_ENABLE</option> </field> <field name="requireReset" type="radio" label="COM_USERS_USER_FIELD_REQUIRERESET_LABEL" description="COM_USERS_USER_FIELD_REQUIRERESET_DESC" default="0" class="btn-group btn-group-yesno" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="id" type="number" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" class="readonly" default="0" readonly="true" /> </fieldset> <field name="groups" type="hidden" /> <field name="twofactor" type="hidden" /> <fields name="params"> <!-- Basic user account settings. --> <fieldset name="settings" label="COM_USERS_SETTINGS_FIELDSET_LABEL"> <field name="admin_style" type="templatestyle" label="COM_USERS_USER_FIELD_BACKEND_TEMPLATE_LABEL" description="COM_USERS_USER_FIELD_BACKEND_TEMPLATE_DESC" client="administrator" filter="uint" > <option value="">JOPTION_USE_DEFAULT</option> </field> <field name="admin_language" type="language" label="COM_USERS_USER_FIELD_BACKEND_LANGUAGE_LABEL" description="COM_USERS_USER_FIELD_BACKEND_LANGUAGE_DESC" client="administrator" > <option value="">JOPTION_USE_DEFAULT</option> </field> <field name="language" type="language" label="COM_USERS_USER_FIELD_FRONTEND_LANGUAGE_LABEL" description="COM_USERS_USER_FIELD_FRONTEND_LANGUAGE_DESC" client="site" > <option value="">JOPTION_USE_DEFAULT</option> </field> <field name="editor" type="plugins" label="COM_USERS_USER_FIELD_EDITOR_LABEL" description="COM_USERS_USER_FIELD_EDITOR_DESC" folder="editors" > <option value="">JOPTION_USE_DEFAULT</option> </field> <field name="timezone" type="timezone" label="COM_USERS_USER_FIELD_TIMEZONE_LABEL" description="COM_USERS_USER_FIELD_TIMEZONE_DESC" > <option value="">JOPTION_USE_DEFAULT</option> </field> </fieldset> </fields> </form> PKb��\5 `�{{%components/com_users/models/level.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\CMS\Access\Access; use Joomla\CMS\Factory; use Joomla\CMS\Helper\UserGroupsHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Model\AdminModel; use Joomla\Utilities\ArrayHelper; /** * User view level model. * * @since 1.6 */ class UsersModelLevel extends AdminModel { /** * @var array A list of the access levels in use. * @since 1.6 */ protected $levelsInUse = null; /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canDelete($record) { // Check if the access level is being used by any content. if ($this->levelsInUse === null) { // Populate the list once. $this->levelsInUse = array(); $db = $this->getDbo(); $query = $db->getQuery(true) ->select('DISTINCT access'); // Get all the tables and the prefix $tables = $db->getTableList(); $prefix = $db->getPrefix(); foreach ($tables as $table) { // Get all of the columns in the table $fields = $db->getTableColumns($table); /** * We are looking for the access field. If custom tables are using something other * than the 'access' field they are on their own unfortunately. * Also make sure the table prefix matches the live db prefix (eg, it is not a "bak_" table) */ if (strpos($table, $prefix) === 0 && isset($fields['access'])) { // Lookup the distinct values of the field. $query->clear('from') ->from($db->quoteName($table)); $db->setQuery($query); try { $values = $db->loadColumn(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } $this->levelsInUse = array_merge($this->levelsInUse, $values); // TODO Could assemble an array of the tables used by each view level list those, // giving the user a clue in the error where to look. } } // Get uniques. $this->levelsInUse = array_unique($this->levelsInUse); // Ok, after all that we are ready to check the record :) } if (in_array($record->id, $this->levelsInUse)) { $this->setError(JText::sprintf('COM_USERS_ERROR_VIEW_LEVEL_IN_USE', $record->id, $record->title)); return false; } return parent::canDelete($record); } /** * Returns a reference to the a Table object, always creating it. * * @param string $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object * * @since 1.6 */ public function getTable($type = 'Viewlevel', $prefix = 'JTable', $config = array()) { $return = JTable::getInstance($type, $prefix, $config); return $return; } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. * * @since 1.6 */ public function getItem($pk = null) { $result = parent::getItem($pk); // Convert the params field to an array. $result->rules = json_decode($result->rules); return $result; } /** * Method to get the record form. * * @param array $data An optional array of data for the form to interogate. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_users.level', 'level', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_users.edit.level.data', array()); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_users.level', $data); return $data; } /** * Method to preprocess the form * * @param JForm $form A form object. * @param mixed $data The data expected for the form. * @param string $group The name of the plugin group to import (defaults to "content"). * * @return void * * @since 1.6 * @throws Exception if there is an error loading the form. */ protected function preprocessForm(JForm $form, $data, $group = '') { parent::preprocessForm($form, $data, 'user'); } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { if (!isset($data['rules'])) { $data['rules'] = array(); } $data['title'] = JFilterInput::getInstance()->clean($data['title'], 'TRIM'); return parent::save($data); } /** * Method to validate the form data. * * @param \JForm $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the field group to validate. * * @return array|boolean Array of filtered data if valid, false otherwise. * * @see \JFormRule * @see \JFilterInput * @since 3.8.8 */ public function validate($form, $data, $group = null) { $isSuperAdmin = Factory::getUser()->authorise('core.admin'); // Non Super user should not be able to change the access levels of super user groups if (!$isSuperAdmin) { if (!isset($data['rules']) || !is_array($data['rules'])) { $data['rules'] = array(); } $groups = array_values(UserGroupsHelper::getInstance()->getAll()); $rules = array(); if (!empty($data['id'])) { $table = $this->getTable(); $table->load($data['id']); $rules = json_decode($table->rules); } $rules = ArrayHelper::toInteger($rules); for ($i = 0, $n = count($groups); $i < $n; ++$i) { if (Access::checkGroup((int) $groups[$i]->id, 'core.admin')) { if (in_array($groups[$i]->id, $rules) && !in_array($groups[$i]->id, $data['rules'])) { $data['rules'][] = (int) $groups[$i]->id; } elseif (!in_array($groups[$i]->id, $rules) && in_array($groups[$i]->id, $data['rules'])) { $this->setError(Text::_('JLIB_USER_ERROR_NOT_SUPERADMIN')); return false; } } } } return parent::validate($form, $data, $group); } } PKb��\Mv�e++&components/com_users/models/groups.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Methods supporting a list of user group records. * * @since 1.6 */ class UsersModelGroups extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'parent_id', 'a.parent_id', 'title', 'a.title', 'lft', 'a.lft', 'rgt', 'a.rgt', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.lft', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); // Load the parameters. $params = JComponentHelper::getParams('com_users'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); return parent::getStoreId($id); } /** * Gets the list of groups and adds expensive joins to the result set. * * @return mixed An array of data items on success, false on failure. * * @since 1.6 */ public function getItems() { // Get a storage key. $store = $this->getStoreId(); // Try to load the data from internal storage. if (empty($this->cache[$store])) { $items = parent::getItems(); // Bail out on an error or empty list. if (empty($items)) { $this->cache[$store] = $items; return $items; } try { $items = $this->populateExtraData($items); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // Add the items to the internal cache. $this->cache[$store] = $items; } return $this->cache[$store]; } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.*' ) ); $query->from($db->quoteName('#__usergroups') . ' AS a'); // Filter the comments over the search string if set. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = ' . (int) substr($search, 3)); } else { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('a.title LIKE ' . $search); } } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.lft')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Populate level & path for items. * * @param array $items Array of stdClass objects * * @return array * * @since 3.6.3 */ private function populateExtraData(array $items) { // First pass: get list of the group id's and reset the counts. $groupsByKey = array(); foreach ($items as $item) { $groupsByKey[(int) $item->id] = $item; } $groupIds = array_keys($groupsByKey); $db = $this->getDbo(); // Get total enabled users in group. $query = $db->getQuery(true); // Count the objects in the user group. $query->select('map.group_id, COUNT(DISTINCT map.user_id) AS user_count') ->from($db->quoteName('#__user_usergroup_map', 'map')) ->join('LEFT', $db->quoteName('#__users', 'u') . ' ON ' . $db->quoteName('u.id') . ' = ' . $db->quoteName('map.user_id')) ->where($db->quoteName('map.group_id') . ' IN (' . implode(',', $groupIds) . ')') ->where($db->quoteName('u.block') . ' = 0') ->group($db->quoteName('map.group_id')); $db->setQuery($query); try { $countEnabled = $db->loadAssocList('group_id', 'count_enabled'); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // Get total disabled users in group. $query->clear('where') ->where('map.group_id IN (' . implode(',', $groupIds) . ')') ->where('u.block = 1'); $db->setQuery($query); try { $countDisabled = $db->loadAssocList('group_id', 'count_disabled'); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // Inject the values back into the array. foreach ($groupsByKey as &$item) { $item->count_enabled = isset($countEnabled[$item->id]) ? (int) $countEnabled[$item->id]['user_count'] : 0; $item->count_disabled = isset($countDisabled[$item->id]) ? (int) $countDisabled[$item->id]['user_count'] : 0; $item->user_count = $item->count_enabled + $item->count_disabled; } $groups = new JHelperUsergroups($groupsByKey); return array_values($groups->getAll()); } } PKb��\�����$components/com_users/models/mail.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Users mail model. * * @since 1.6 */ class UsersModelMail extends JModelAdmin { /** * Method to get the row form. * * @param array $data An optional array of data for the form to interogate. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_users.mail', 'mail', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_users.display.mail.data', array()); $this->preprocessData('com_users.mail', $data); return $data; } /** * Method to preprocess the form * * @param JForm $form A form object. * @param mixed $data The data expected for the form. * @param string $group The name of the plugin group to import (defaults to "content"). * * @return void * * @since 1.6 * @throws Exception if there is an error loading the form. */ protected function preprocessForm(JForm $form, $data, $group = 'user') { parent::preprocessForm($form, $data, $group); } /** * Send the email * * @return boolean */ public function send() { $app = JFactory::getApplication(); $data = $app->input->post->get('jform', array(), 'array'); $user = JFactory::getUser(); $access = new JAccess; $db = $this->getDbo(); $mode = array_key_exists('mode', $data) ? (int) $data['mode'] : 0; $subject = array_key_exists('subject', $data) ? $data['subject'] : ''; $grp = array_key_exists('group', $data) ? (int) $data['group'] : 0; $recurse = array_key_exists('recurse', $data) ? (int) $data['recurse'] : 0; $bcc = array_key_exists('bcc', $data) ? (int) $data['bcc'] : 0; $disabled = array_key_exists('disabled', $data) ? (int) $data['disabled'] : 0; $message_body = array_key_exists('message', $data) ? $data['message'] : ''; // Automatically removes html formatting if (!$mode) { $message_body = JFilterInput::getInstance()->clean($message_body, 'string'); } // Check for a message body and subject if (!$message_body || !$subject) { $app->setUserState('com_users.display.mail.data', $data); $this->setError(JText::_('COM_USERS_MAIL_PLEASE_FILL_IN_THE_FORM_CORRECTLY')); return false; } // Get users in the group out of the ACL $to = $access->getUsersByGroup($grp, $recurse); // Get all users email and group except for senders $query = $db->getQuery(true) ->select('email') ->from('#__users') ->where('id != ' . (int) $user->get('id')); if ($grp !== 0) { if (empty($to)) { $query->where('0'); } else { $query->where('id IN (' . implode(',', $to) . ')'); } } if ($disabled == 0) { $query->where('block = 0'); } $db->setQuery($query); $rows = $db->loadColumn(); // Check to see if there are any users in this group before we continue if (!count($rows)) { $app->setUserState('com_users.display.mail.data', $data); if (in_array($user->id, $to)) { $this->setError(JText::_('COM_USERS_MAIL_ONLY_YOU_COULD_BE_FOUND_IN_THIS_GROUP')); } else { $this->setError(JText::_('COM_USERS_MAIL_NO_USERS_COULD_BE_FOUND_IN_THIS_GROUP')); } return false; } // Get the Mailer $mailer = JFactory::getMailer(); $params = JComponentHelper::getParams('com_users'); // Build email message format. $mailer->setSender(array($app->get('mailfrom'), $app->get('fromname'))); $mailer->setSubject($params->get('mailSubjectPrefix') . stripslashes($subject)); $mailer->setBody($message_body . $params->get('mailBodySuffix')); $mailer->IsHtml($mode); // Add recipients if ($bcc) { $mailer->addBcc($rows); $mailer->addRecipient($app->get('mailfrom')); } else { $mailer->addRecipient($rows); } // Send the Mail $rs = $mailer->Send(); // Check for an error if ($rs instanceof Exception) { $app->setUserState('com_users.display.mail.data', $data); $this->setError($rs->getError()); return false; } elseif (empty($rs)) { $app->setUserState('com_users.display.mail.data', $data); $this->setError(JText::_('COM_USERS_MAIL_THE_MAIL_COULD_NOT_BE_SENT')); return false; } else { /** * Fill the data (specially for the 'mode', 'group' and 'bcc': they could not exist in the array * when the box is not checked and in this case, the default value would be used instead of the '0' * one) */ $data['mode'] = $mode; $data['subject'] = $subject; $data['group'] = $grp; $data['recurse'] = $recurse; $data['bcc'] = $bcc; $data['message'] = $message_body; $app->setUserState('com_users.display.mail.data', array()); $app->enqueueMessage(JText::plural('COM_USERS_MAIL_EMAIL_SENT_TO_N_USERS', count($rows)), 'message'); return true; } } } PKb��\0��H��*components/com_users/models/debuggroup.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('UsersHelperDebug', JPATH_ADMINISTRATOR . '/components/com_users/helpers/debug.php'); /** * Methods supporting a list of User ACL permissions * * @since 1.6 */ class UsersModelDebuggroup extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 3.6.0 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'a.title', 'component', 'a.name', 'a.lft', 'a.id', 'level_start', 'level_end', 'a.level', ); } parent::__construct($config); } /** * Get a list of the actions. * * @return array * * @since 1.6 */ public function getDebugActions() { $component = $this->getState('filter.component'); return UsersHelperDebug::getDebugActions($component); } /** * Override getItems method. * * @return array * * @since 1.6 */ public function getItems() { $groupId = $this->getState('group_id'); if (($assets = parent::getItems()) && $groupId) { $actions = $this->getDebugActions(); foreach ($assets as &$asset) { $asset->checks = array(); foreach ($actions as $action) { $name = $action[0]; $asset->checks[$name] = JAccess::checkGroup($groupId, $name, $asset->name); } } } return $assets; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.lft', $direction = 'asc') { $app = JFactory::getApplication('administrator'); // Adjust the context to support modal layouts. $layout = $app->input->get('layout', 'default'); if ($layout) { $this->context .= '.' . $layout; } // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('group_id', $this->getUserStateFromRequest($this->context . '.group_id', 'group_id', 0, 'int', false)); $levelStart = $this->getUserStateFromRequest($this->context . '.filter.level_start', 'filter_level_start', '', 'cmd'); $this->setState('filter.level_start', $levelStart); $value = $this->getUserStateFromRequest($this->context . '.filter.level_end', 'filter_level_end', '', 'cmd'); if ($value > 0 && $value < $levelStart) { $value = $levelStart; } $this->setState('filter.level_end', $value); $this->setState('filter.component', $this->getUserStateFromRequest($this->context . '.filter.component', 'filter_component', '', 'string')); // Load the parameters. $params = JComponentHelper::getParams('com_users'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('group_id'); $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.level_start'); $id .= ':' . $this->getState('filter.level_end'); $id .= ':' . $this->getState('filter.component'); return parent::getStoreId($id); } /** * Get the group being debugged. * * @return JObject * * @since 1.6 */ public function getGroup() { $groupId = (int) $this->getState('group_id'); $db = $this->getDbo(); $query = $db->getQuery(true) ->select('id, title') ->from('#__usergroups') ->where('id = ' . $groupId); $db->setQuery($query); try { $group = $db->loadObject(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } return $group; } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.name, a.title, a.level, a.lft, a.rgt' ) ); $query->from($db->quoteName('#__assets', 'a')); // Filter the items over the search string if set. if ($this->getState('filter.search')) { // Escape the search token. $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($this->getState('filter.search')), true) . '%')); // Compile the different search clauses. $searches = array(); $searches[] = 'a.name LIKE ' . $search; $searches[] = 'a.title LIKE ' . $search; // Add the clauses to the query. $query->where('(' . implode(' OR ', $searches) . ')'); } // Filter on the start and end levels. $levelStart = (int) $this->getState('filter.level_start'); $levelEnd = (int) $this->getState('filter.level_end'); if ($levelEnd > 0 && $levelEnd < $levelStart) { $levelEnd = $levelStart; } if ($levelStart > 0) { $query->where('a.level >= ' . $levelStart); } if ($levelEnd > 0) { $query->where('a.level <= ' . $levelEnd); } // Filter the items over the component if set. if ($this->getState('filter.component')) { $component = $this->getState('filter.component'); $query->where('(a.name = ' . $db->quote($component) . ' OR a.name LIKE ' . $db->quote($component . '.%') . ')'); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.lft')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } } PKb��\�y��!�!%components/com_users/models/group.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\String\StringHelper; use Joomla\Utilities\ArrayHelper; /** * User group model. * * @since 1.6 */ class UsersModelGroup extends JModelAdmin { /** * Constructor * * @param array $config An optional associative array of configuration settings. */ public function __construct($config = array()) { $config = array_merge( array( 'event_after_delete' => 'onUserAfterDeleteGroup', 'event_after_save' => 'onUserAfterSaveGroup', 'event_before_delete' => 'onUserBeforeDeleteGroup', 'event_before_save' => 'onUserBeforeSaveGroup', 'events_map' => array('delete' => 'user', 'save' => 'user') ), $config ); parent::__construct($config); } /** * Returns a reference to the a Table object, always creating it. * * @param string $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object * * @since 1.6 */ public function getTable($type = 'Usergroup', $prefix = 'JTable', $config = array()) { $return = JTable::getInstance($type, $prefix, $config); return $return; } /** * Method to get the record form. * * @param array $data An optional array of data for the form to interogate. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_users.group', 'group', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_users.edit.group.data', array()); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_users.group', $data); return $data; } /** * Override preprocessForm to load the user plugin group instead of content. * * @param JForm $form A form object. * @param mixed $data The data expected for the form. * @param string $group The name of the plugin group to import (defaults to "content"). * * @return void * * @since 1.6 * @throws Exception if there is an error loading the form. */ protected function preprocessForm(JForm $form, $data, $group = '') { $obj = is_array($data) ? ArrayHelper::toObject($data, 'JObject') : $data; if (isset($obj->parent_id) && $obj->parent_id == 0 && $obj->id > 0) { $form->setFieldAttribute('parent_id', 'type', 'hidden'); $form->setFieldAttribute('parent_id', 'hidden', 'true'); } parent::preprocessForm($form, $data, 'user'); } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { // Include the user plugins for events. JPluginHelper::importPlugin($this->events_map['save']); /** * Check the super admin permissions for group * We get the parent group permissions and then check the group permissions manually * We have to calculate the group permissions manually because we haven't saved the group yet */ $parentSuperAdmin = JAccess::checkGroup($data['parent_id'], 'core.admin'); // Get core.admin rules from the root asset $rules = JAccess::getAssetRules('root.1')->getData('core.admin'); // Get the value for the current group (will be true (allowed), false (denied), or null (inherit) $groupSuperAdmin = $rules['core.admin']->allow($data['id']); // We only need to change the $groupSuperAdmin if the parent is true or false. Otherwise, the value set in the rule takes effect. if ($parentSuperAdmin === false) { // If parent is false (Denied), effective value will always be false $groupSuperAdmin = false; } elseif ($parentSuperAdmin === true) { // If parent is true (allowed), group is true unless explicitly set to false $groupSuperAdmin = ($groupSuperAdmin === false) ? false : true; } // Check for non-super admin trying to save with super admin group $iAmSuperAdmin = JFactory::getUser()->authorise('core.admin'); if (!$iAmSuperAdmin && $groupSuperAdmin) { $this->setError(JText::_('JLIB_USER_ERROR_NOT_SUPERADMIN')); return false; } /** * Check for super-admin changing self to be non-super-admin * First, are we a super admin */ if ($iAmSuperAdmin) { // Next, are we a member of the current group? $myGroups = JAccess::getGroupsByUser(JFactory::getUser()->get('id'), false); if (in_array($data['id'], $myGroups)) { // Now, would we have super admin permissions without the current group? $otherGroups = array_diff($myGroups, array($data['id'])); $otherSuperAdmin = false; foreach ($otherGroups as $otherGroup) { $otherSuperAdmin = $otherSuperAdmin ?: JAccess::checkGroup($otherGroup, 'core.admin'); } /** * If we would not otherwise have super admin permissions * and the current group does not have super admin permissions, throw an exception */ if ((!$otherSuperAdmin) && (!$groupSuperAdmin)) { $this->setError(JText::_('JLIB_USER_ERROR_CANNOT_DEMOTE_SELF')); return false; } } } if (JFactory::getApplication()->input->get('task') == 'save2copy') { $data['title'] = $this->generateGroupTitle($data['parent_id'], $data['title']); } // Proceed with the save return parent::save($data); } /** * Method to delete rows. * * @param array &$pks An array of item ids. * * @return boolean Returns true on success, false on failure. * * @since 1.6 * @throws Exception */ public function delete(&$pks) { // Typecast variable. $pks = (array) $pks; $user = JFactory::getUser(); $groups = JAccess::getGroupsByUser($user->get('id')); // Get a row instance. $table = $this->getTable(); // Load plugins. JPluginHelper::importPlugin($this->events_map['delete']); $dispatcher = JEventDispatcher::getInstance(); // Check if I am a Super Admin $iAmSuperAdmin = $user->authorise('core.admin'); // Do not allow to delete groups to which the current user belongs foreach ($pks as $pk) { if (in_array($pk, $groups)) { JError::raiseWarning(403, JText::_('COM_USERS_DELETE_ERROR_INVALID_GROUP')); return false; } } // Iterate the items to delete each one. foreach ($pks as $i => $pk) { if ($table->load($pk)) { // Access checks. $allow = $user->authorise('core.edit.state', 'com_users'); // Don't allow non-super-admin to delete a super admin $allow = (!$iAmSuperAdmin && JAccess::checkGroup($pk, 'core.admin')) ? false : $allow; if ($allow) { // Fire the before delete event. $dispatcher->trigger($this->event_before_delete, array($table->getProperties())); if (!$table->delete($pk)) { $this->setError($table->getError()); return false; } else { // Trigger the after delete event. $dispatcher->trigger($this->event_after_delete, array($table->getProperties(), true, $this->getError())); } } else { // Prune items that you can't change. unset($pks[$i]); JError::raiseWarning(403, JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); } } else { $this->setError($table->getError()); return false; } } return true; } /** * Method to generate the title of group on Save as Copy action * * @param integer $parentId The id of the parent. * @param string $title The title of group * * @return string Contains the modified title. * * @since 3.3.7 */ protected function generateGroupTitle($parentId, $title) { // Alter the title & alias $table = $this->getTable(); while ($table->load(array('title' => $title, 'parent_id' => $parentId))) { if ($title == $table->title) { $title = StringHelper::increment($title); } } return $title; } } PKb��\B�%!��&components/com_users/models/levels.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Methods supporting a list of user access level records. * * @since 1.6 */ class UsersModelLevels extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'title', 'a.title', 'ordering', 'a.ordering', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.ordering', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search')); // Load the parameters. $params = JComponentHelper::getParams('com_users'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.*' ) ); $query->from($db->quoteName('#__viewlevels') . ' AS a'); // Add the level in the tree. $query->group('a.id, a.title, a.ordering, a.rules'); // Filter the items over the search string if set. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = ' . (int) substr($search, 3)); } else { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('a.title LIKE ' . $search); } } $query->group('a.id'); // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.ordering')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Method to adjust the ordering of a row. * * @param integer $pk The ID of the primary key to move. * @param integer $direction Increment, usually +1 or -1 * * @return boolean False on failure or error, true otherwise. */ public function reorder($pk, $direction = 0) { // Sanitize the id and adjustment. $pk = (!empty($pk)) ? $pk : (int) $this->getState('level.id'); $user = JFactory::getUser(); // Get an instance of the record's table. $table = JTable::getInstance('viewlevel'); // Load the row. if (!$table->load($pk)) { $this->setError($table->getError()); return false; } // Access checks. $allow = $user->authorise('core.edit.state', 'com_users'); if (!$allow) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); return false; } // Move the row. // TODO: Where clause to restrict category. $table->move($pk); return true; } /** * Saves the manually set order of records. * * @param array $pks An array of primary key ids. * @param integer $order Order position * * @return boolean|JException Boolean true on success, boolean false or JException instance on error */ public function saveorder($pks, $order) { $table = JTable::getInstance('viewlevel'); $user = JFactory::getUser(); $conditions = array(); if (empty($pks)) { return JError::raiseWarning(500, JText::_('COM_USERS_ERROR_LEVELS_NOLEVELS_SELECTED')); } // Update ordering values foreach ($pks as $i => $pk) { $table->load((int) $pk); // Access checks. $allow = $user->authorise('core.edit.state', 'com_users'); if (!$allow) { // Prune items that you can't change. unset($pks[$i]); JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } elseif ($table->ordering != $order[$i]) { $table->ordering = $order[$i]; if (!$table->store()) { $this->setError($table->getError()); return false; } } } // Execute reorder for each category. foreach ($conditions as $cond) { $table->load($cond[0]); $table->reorder($cond[1]); } return true; } } PKb��\H�D���)components/com_users/models/debuguser.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('UsersHelperDebug', JPATH_ADMINISTRATOR . '/components/com_users/helpers/debug.php'); /** * Methods supporting a list of User ACL permissions * * @since 1.6 */ class UsersModelDebugUser extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 3.6.0 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'a.title', 'component', 'a.name', 'a.lft', 'a.id', 'level_start', 'level_end', 'a.level', ); } parent::__construct($config); } /** * Get a list of the actions. * * @return array * * @since 1.6 */ public function getDebugActions() { $component = $this->getState('filter.component'); return UsersHelperDebug::getDebugActions($component); } /** * Override getItems method. * * @return array * * @since 1.6 */ public function getItems() { $userId = $this->getState('user_id'); $user = JFactory::getUser($userId); if (($assets = parent::getItems()) && $userId) { $actions = $this->getDebugActions(); foreach ($assets as &$asset) { $asset->checks = array(); foreach ($actions as $action) { $name = $action[0]; $asset->checks[$name] = $user->authorise($name, $asset->name); } } } return $assets; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.lft', $direction = 'asc') { $app = JFactory::getApplication('administrator'); // Adjust the context to support modal layouts. $layout = $app->input->get('layout', 'default'); if ($layout) { $this->context .= '.' . $layout; } // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('user_id', $this->getUserStateFromRequest($this->context . '.user_id', 'user_id', 0, 'int', false)); $levelStart = $this->getUserStateFromRequest($this->context . '.filter.level_start', 'filter_level_start', '', 'cmd'); $this->setState('filter.level_start', $levelStart); $value = $this->getUserStateFromRequest($this->context . '.filter.level_end', 'filter_level_end', '', 'cmd'); if ($value > 0 && $value < $levelStart) { $value = $levelStart; } $this->setState('filter.level_end', $value); $this->setState('filter.component', $this->getUserStateFromRequest($this->context . '.filter.component', 'filter_component', '', 'string')); // Load the parameters. $params = JComponentHelper::getParams('com_users'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('user_id'); $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.level_start'); $id .= ':' . $this->getState('filter.level_end'); $id .= ':' . $this->getState('filter.component'); return parent::getStoreId($id); } /** * Get the user being debugged. * * @return JUser * * @since 1.6 */ public function getUser() { $userId = $this->getState('user_id'); return JFactory::getUser($userId); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.id, a.name, a.title, a.level, a.lft, a.rgt' ) ); $query->from($db->quoteName('#__assets', 'a')); // Filter the items over the search string if set. if ($this->getState('filter.search')) { // Escape the search token. $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($this->getState('filter.search')), true) . '%')); // Compile the different search clauses. $searches = array(); $searches[] = 'a.name LIKE ' . $search; $searches[] = 'a.title LIKE ' . $search; // Add the clauses to the query. $query->where('(' . implode(' OR ', $searches) . ')'); } // Filter on the start and end levels. $levelStart = (int) $this->getState('filter.level_start'); $levelEnd = (int) $this->getState('filter.level_end'); if ($levelEnd > 0 && $levelEnd < $levelStart) { $levelEnd = $levelStart; } if ($levelStart > 0) { $query->where('a.level >= ' . $levelStart); } if ($levelEnd > 0) { $query->where('a.level <= ' . $levelEnd); } // Filter the items over the component if set. if ($this->getState('filter.component')) { $component = $this->getState('filter.component'); $query->where('(a.name = ' . $db->quote($component) . ' OR a.name LIKE ' . $db->quote($component . '.%') . ')'); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.lft')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } } PKb��\��~ $components/com_users/models/note.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * User note model. * * @since 2.5 */ class UsersModelNote extends JModelAdmin { /** * The type alias for this content type. * * @var string * @since 3.2 */ public $typeAlias = 'com_users.note'; /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure * * @since 2.5 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_users.note', 'note', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. * * @since 2.5 */ public function getItem($pk = null) { $result = parent::getItem($pk); // Get the dispatcher and load the content plugins. $dispatcher = JEventDispatcher::getInstance(); JPluginHelper::importPlugin('content'); // Load the user plugins for backward compatibility (v3.3.3 and earlier). JPluginHelper::importPlugin('user'); // Trigger the data preparation event. $dispatcher->trigger('onContentPrepareData', array('com_users.note', $result)); return $result; } /** * Method to get a table object, load it if necessary. * * @param string $name The table name. Optional. * @param string $prefix The class prefix. Optional. * @param array $options Configuration array for model. Optional. * * @return JTable The table object * * @since 2.5 */ public function getTable($name = 'Note', $prefix = 'UsersTable', $options = array()) { return JTable::getInstance($name, $prefix, $options); } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Get the application $app = JFactory::getApplication(); // Check the session for previously entered form data. $data = $app->getUserState('com_users.edit.note.data', array()); if (empty($data)) { $data = $this->getItem(); // Prime some default values. if ($this->getState('note.id') == 0) { $data->set('catid', $app->input->get('catid', $app->getUserState('com_users.notes.filter.category_id'), 'int')); } $userId = $app->input->get('u_id', 0, 'int'); if ($userId != 0) { $data->user_id = $userId; } } $this->preprocessData('com_users.note', $data); return $data; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 2.5 */ protected function populateState() { parent::populateState(); $userId = JFactory::getApplication()->input->get('u_id', 0, 'int'); $this->setState('note.user_id', $userId); } } PKb��\�rD((%components/com_users/models/notes.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * User notes model class. * * @since 2.5 */ class UsersModelNotes extends JModelList { /** * Class constructor. * * @param array $config An optional associative array of configuration settings. * * @since 2.5 */ public function __construct($config = array()) { // Set the list ordering fields. if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'user_id', 'a.user_id', 'u.name', 'subject', 'a.subject', 'catid', 'a.catid', 'category_id', 'state', 'a.state', 'published', 'c.title', 'review_time', 'a.review_time', 'publish_up', 'a.publish_up', 'publish_down', 'a.publish_down', 'level', 'c.level', ); } parent::__construct($config); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery A JDatabaseQuery object to retrieve the data set. * * @since 2.5 */ protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState('list.select', 'a.id, a.subject, a.checked_out, a.checked_out_time,' . 'a.catid, a.created_time, a.review_time,' . 'a.state, a.publish_up, a.publish_down' ) ); $query->from('#__user_notes AS a'); // Join over the category $query->select('c.title AS category_title, c.params AS category_params') ->join('LEFT', '#__categories AS c ON c.id = a.catid'); // Join over the users for the note user. $query->select('u.name AS user_name') ->join('LEFT', '#__users AS u ON u.id = a.user_id'); // Join over the users for the checked out user. $query->select('uc.name AS editor') ->join('LEFT', '#__users AS uc ON uc.id = a.checked_out'); // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = ' . (int) substr($search, 3)); } elseif (stripos($search, 'uid:') === 0) { $query->where('a.user_id = ' . (int) substr($search, 4)); } else { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('((a.subject LIKE ' . $search . ') OR (u.name LIKE ' . $search . ') OR (u.username LIKE ' . $search . '))'); } } // Filter by published state $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.state = ' . (int) $published); } elseif ($published === '') { $query->where('(a.state IN (0, 1))'); } // Filter by a single category. $categoryId = (int) $this->getState('filter.category_id'); if ($categoryId) { $query->where('a.catid = ' . $categoryId); } // Filter by a single user. $userId = (int) $this->getState('filter.user_id'); if ($userId) { // Add the body and where filter. $query->select('a.body') ->where('a.user_id = ' . $userId); } // Filter on the level. if ($level = $this->getState('filter.level')) { $query->where($db->quoteName('c.level') . ' <= ' . (int) $level); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.review_time')) . ' ' . $db->escape($this->getState('list.direction', 'DESC'))); return $query; } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 2.5 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.published'); $id .= ':' . $this->getState('filter.category_id'); $id .= ':' . $this->getState('filter.user_id'); $id .= ':' . $this->getState('filter.level'); return parent::getStoreId($id); } /** * Gets a user object if the user filter is set. * * @return JUser The JUser object * * @since 2.5 */ public function getUser() { $user = new JUser; // Filter by search in title $search = (int) $this->getState('filter.user_id'); if ($search != 0) { $user->load((int) $search); } return $user; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.review_time', $direction = 'desc') { // Adjust the context to support modal layouts. if ($layout = JFactory::getApplication()->input->get('layout')) { $this->context .= '.' . $layout; } $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search')); $this->setState('filter.published', $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', '', 'string')); $this->setState('filter.category_id', $this->getUserStateFromRequest($this->context . '.filter.category_id', 'filter_category_id')); $this->setState('filter.user_id', $this->getUserStateFromRequest($this->context . '.filter.user_id', 'filter_user_id')); $this->setState('filter.level', $this->getUserStateFromRequest($this->context . '.filter.level', 'filter_level', '', 'cmd')); parent::populateState($ordering, $direction); } } PKb��\�'A���#components/com_users/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Users master display controller. * * @since 1.6 */ class UsersController extends JControllerLegacy { /** * Checks whether a user can see this view. * * @param string $view The view name. * * @return boolean * * @since 1.6 */ protected function canView($view) { $canDo = JHelperContent::getActions('com_users'); switch ($view) { // Special permissions. case 'groups': case 'group': case 'levels': case 'level': return $canDo->get('core.admin'); break; // Default permissions. default: return true; } } /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { $view = $this->input->get('view', 'users'); $layout = $this->input->get('layout', 'default'); $id = $this->input->getInt('id'); if (!$this->canView($view)) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } // Check for edit form. if ($view == 'user' && $layout == 'edit' && !$this->checkEditId('com_users.edit.user', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_users&view=users', false)); return false; } elseif ($view == 'group' && $layout == 'edit' && !$this->checkEditId('com_users.edit.group', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_users&view=groups', false)); return false; } elseif ($view == 'level' && $layout == 'edit' && !$this->checkEditId('com_users.edit.level', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_users&view=levels', false)); return false; } elseif ($view == 'note' && $layout == 'edit' && !$this->checkEditId('com_users.edit.note', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_users&view=notes', false)); return false; } return parent::display(); } } PKb��\�U�NNcomponents/com_ajax/ajax.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_ajax * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; require_once JPATH_SITE . '/components/com_ajax/ajax.php'; PKb��\�9<��components/com_ajax/ajax.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.2" method="upgrade"> <name>com_ajax</name> <author>Joomla! Project</author> <creationDate>August 2013</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.2.0</version> <description>COM_AJAX_XML_DESCRIPTION</description> <files folder="site"> <filename>ajax.php</filename> </files> <languages folder="site"> <language tag="en-GB">language/en-GB.com_ajax.ini</language> </languages> <administration> <files folder="admin"> <filename>ajax.php</filename> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_ajax.ini</language> <language tag="en-GB">language/en-GB.com_ajax.sys.ini</language> </languages> </administration> </extension> PKb��\C�5HH!components/com_checkin/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_checkin" section="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> </field> </fieldset> </config> PKb��\���DD"components/com_checkin/checkin.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_checkin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; if (!JFactory::getUser()->authorise('core.manage', 'com_checkin')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Checkin'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\|��`��5components/com_checkin/views/checkin/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_checkin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_checkin'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if ($this->total > 0) : ?> <table id="global-checkin" class="table table-striped"> <thead> <tr> <th width="1%"><?php echo JHtml::_('grid.checkall'); ?></th> <th><?php echo JHtml::_('searchtools.sort', 'COM_CHECKIN_DATABASE_TABLE', 'table', $listDirn, $listOrder); ?></th> <th><?php echo JHtml::_('searchtools.sort', 'COM_CHECKIN_ITEMS_TO_CHECK_IN', 'count', $listDirn, $listOrder); ?></th> </tr> </thead> <tfoot> <tr> <td colspan="3"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $i = 0; ?> <?php foreach ($this->items as $table => $count) : ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"><?php echo JHtml::_('grid.id', $i, $table); ?></td> <td> <label for="cb<?php echo $i ?>"> <?php echo JText::sprintf('COM_CHECKIN_TABLE', $table); ?> </label> </td> <td> <span class="label label-warning"><?php echo $count; ?></span> </td> </tr> <?php $i++; ?> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\����~~2components/com_checkin/views/checkin/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_checkin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Checkin component * * @since 1.0 */ class CheckinViewCheckin extends JViewLegacy { /** * Unused class variable * * @var object * @deprecated 4.0 */ protected $tables; /** * An array of items * * @var array */ protected $items; /** * The pagination object * * @var JPagination */ protected $pagination; /** * The model state * * @var object */ protected $state; /** * The sidebar markup * * @var string */ protected $sidebar; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->total = $this->get('Total'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JToolbarHelper::title(JText::_('COM_CHECKIN_GLOBAL_CHECK_IN'), 'checkin'); JToolbarHelper::custom('checkin', 'checkin.png', 'checkin_f2.png', 'JTOOLBAR_CHECKIN', true); if (JFactory::getUser()->authorise('core.admin', 'com_checkin')) { JToolbarHelper::divider(); JToolbarHelper::preferences('com_checkin'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_SITE_MAINTENANCE_GLOBAL_CHECK-IN'); } } PKb��\��l���"components/com_checkin/checkin.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_checkin</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_CHECKIN_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>checkin.php</filename> <filename>config.xml</filename> <filename>controller.php</filename> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_checkin.ini</language> <language tag="en-GB">language/en-GB.com_checkin.sys.ini</language> </languages> </administration> </extension> PKb��\%줨�)components/com_checkin/models/checkin.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_checkin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Checkin Model * * @since 1.6 */ class CheckinModelCheckin extends JModelList { /** * Count of the total items checked out * * @var integer */ protected $total; /** * Unused class variable * * @var object * @deprecated 4.0 */ protected $tables; /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 3.5 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'table', 'count', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note: Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'table', $direction = 'asc') { $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search')); // List state information. parent::populateState($ordering, $direction); } /** * Checks in requested tables * * @param array $ids An array of table names. Optional. * * @return integer Checked in item count * * @since 1.6 */ public function checkin($ids = array()) { $db = $this->getDbo(); $nullDate = $db->getNullDate(); if (!is_array($ids)) { return 0; } // This int will hold the checked item count. $results = 0; $dispatcher = \JEventDispatcher::getInstance(); foreach ($ids as $tn) { // Make sure we get the right tables based on prefix. if (stripos($tn, JFactory::getApplication()->get('dbprefix')) !== 0) { continue; } $fields = $db->getTableColumns($tn); if (!(isset($fields['checked_out']) && isset($fields['checked_out_time']))) { continue; } $query = $db->getQuery(true) ->update($db->quoteName($tn)) ->set($db->quoteName('checked_out') . ' = DEFAULT') ->set($db->quoteName('checked_out_time') . ' = ' . $db->quote($nullDate)) ->where($db->quoteName('checked_out') . ' > 0'); $db->setQuery($query); if ($db->execute()) { $results = $results + $db->getAffectedRows(); $dispatcher->trigger('onAfterCheckin', array($tn)); } } return $results; } /** * Get total of tables * * @return integer Total to check-in tables * * @since 1.6 */ public function getTotal() { if (!isset($this->total)) { $this->getItems(); } return $this->total; } /** * Get tables * * @return array Checked in table names as keys and checked in item count as values. * * @since 1.6 */ public function getItems() { if (!isset($this->items)) { $db = $this->getDbo(); $tables = $db->getTableList(); // This array will hold table name as key and checked in item count as value. $results = array(); foreach ($tables as $i => $tn) { // Make sure we get the right tables based on prefix. if (stripos($tn, JFactory::getApplication()->get('dbprefix')) !== 0) { unset($tables[$i]); continue; } if ($this->getState('filter.search') && stripos($tn, $this->getState('filter.search')) === false) { unset($tables[$i]); continue; } $fields = $db->getTableColumns($tn); if (!(isset($fields['checked_out']) && isset($fields['checked_out_time']))) { unset($tables[$i]); continue; } } foreach ($tables as $tn) { $query = $db->getQuery(true) ->select('COUNT(*)') ->from($db->quoteName($tn)) ->where('checked_out > 0'); $db->setQuery($query); if ($db->execute()) { $results[$tn] = $db->loadResult(); // Show only tables with items to checkin. if ((int) $results[$tn] === 0) { unset($results[$tn]); } } else { continue; } } $this->total = count($results); // Order items by table if ($this->getState('list.ordering') == 'table') { if (strtolower($this->getState('list.direction')) == 'asc') { ksort($results); } else { krsort($results); } } // Order items by number of items else { if (strtolower($this->getState('list.direction')) == 'asc') { asort($results); } else { arsort($results); } } // Pagination $limit = (int) $this->getState('list.limit'); if ($limit !== 0) { $this->items = array_slice($results, $this->getState('list.start'), $limit); } else { $this->items = $results; } } return $this->items; } } PKb��\,�URR%components/com_checkin/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_checkin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Checkin Controller * * @since 1.6 */ class CheckinController extends JControllerLegacy { /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return CheckinController A JControllerLegacy object to support chaining. */ public function display($cachable = false, $urlparams = array()) { // Load the submenu. $this->addSubmenu($this->input->getWord('option', 'com_checkin')); return parent::display(); } /** * Check in a list of items. * * @return void */ public function checkin() { // Check for request forgeries $this->checkToken(); $ids = $this->input->get('cid', array(), 'array'); if (empty($ids)) { JError::raiseWarning(500, JText::_('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST')); } else { // Get the model. /** @var CheckinModelCheckin $model */ $model = $this->getModel(); // Checked in the items. $this->setMessage(JText::plural('COM_CHECKIN_N_ITEMS_CHECKED_IN', $model->checkin($ids))); } $this->setRedirect('index.php?option=com_checkin'); } /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void * * @since 1.6 */ protected function addSubmenu($vName) { JHtmlSidebar::addEntry( JText::_('JGLOBAL_SUBMENU_CHECKIN'), 'index.php?option=com_checkin', $vName == 'com_checkin' ); JHtmlSidebar::addEntry( JText::_('JGLOBAL_SUBMENU_CLEAR_CACHE'), 'index.php?option=com_cache', $vName == 'cache' ); JHtmlSidebar::addEntry( JText::_('JGLOBAL_SUBMENU_PURGE_EXPIRED_CACHE'), 'index.php?option=com_cache&view=purge', $vName == 'purge' ); } } PKb��\p��(��,components/com_admin/controllers/profile.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * User profile controller class. * * @since 1.6 */ class AdminControllerProfile extends JControllerForm { /** * Method to check if you can edit a record. * * Extended classes can override this if necessary. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowEdit($data = array(), $key = 'id') { return isset($data['id']) && $data['id'] == JFactory::getUser()->id; } /** * Overrides parent save method to check the submitted passwords match. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). * * @return boolean True if successful, false otherwise. * * @since 3.2 */ public function save($key = null, $urlVar = null) { $this->setRedirect(JRoute::_('index.php?option=com_admin&view=profile&layout=edit&id=' . JFactory::getUser()->id, false)); $return = parent::save(); if ($this->getTask() != 'apply') { // Redirect to the main page. $this->setRedirect(JRoute::_('index.php', false)); } return $return; } /** * Method to cancel an edit. * * @param string $key The name of the primary key of the URL variable. * * @return boolean True if access level checks pass, false otherwise. * * @since 1.6 */ public function cancel($key = null) { $return = parent::cancel($key); // Redirect to the main page. $this->setRedirect(JRoute::_('index.php', false)); return $return; } } PKb��\�:K�� � 1components/com_admin/postinstall/eaccelerator.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * This file contains post-installation message handling for eAccelerator compatibility. */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; /** * Checks if the eAccelerator caching method is enabled. * * This check should be done through the 3.x series as the issue impacts migrated sites which will * most often come from the previous LTS release (2.5). Remove for version 4 or when eAccelerator support is added. * * This check returns true when the eAccelerator caching method is user, meaning that the message concerning it should be displayed. * * @return integer * * @since 3.2 */ function admin_postinstall_eaccelerator_condition() { $app = JFactory::getApplication(); $cacheHandler = $app->get('cacheHandler', ''); return (ucfirst($cacheHandler) == 'Eaccelerator'); } /** * Disables the unsupported eAccelerator caching method, replacing it with the "file" caching method. * * @return void * * @since 3.2 */ function admin_postinstall_eaccelerator_action() { $prev = ArrayHelper::fromObject(new JConfig); $data = array_merge($prev, array('cacheHandler' => 'file')); $config = new Registry($data); jimport('joomla.filesystem.path'); jimport('joomla.filesystem.file'); // Set the configuration file path. $file = JPATH_CONFIGURATION . '/configuration.php'; // Get the new FTP credentials. $ftp = JClientHelper::getCredentials('ftp', true); // Attempt to make the file writeable if using FTP. if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0644')) { JError::raiseNotice(500, JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTWRITABLE')); } // Attempt to write the configuration file as a PHP class named JConfig. $configuration = $config->toString('PHP', array('class' => 'JConfig', 'closingtag' => false)); if (!JFile::write($file, $configuration)) { JFactory::getApplication()->enqueueMessage(JText::_('COM_CONFIG_ERROR_WRITE_FAILED'), 'error'); return; } // Attempt to make the file unwriteable if using FTP. if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0444')) { JError::raiseNotice(500, JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTUNWRITABLE')); } } PKb��\�qė�-components/com_admin/postinstall/htaccess.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * This file contains post-installation message handling for notifying users of a change * in the default .htaccess and web.config files. */ defined('_JEXEC') or die; /** * Notifies users of a change in the default .htaccess or web.config file * * This check returns true regardless of condition. * * @return boolean * * @since 3.4 */ function admin_postinstall_htaccess_condition() { return true; } PKb��\�<U�MM/components/com_admin/postinstall/phpversion.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * This file contains post-installation message handling for the checking minimum PHP version support */ defined('_JEXEC') or die; /** * Checks if the PHP version is less than 5.3.10. * * @return integer * * @since 3.2 */ function admin_postinstall_phpversion_condition() { return version_compare(PHP_VERSION, '5.3.10', 'lt'); } PKb��\I>?���6components/com_admin/postinstall/languageaccess340.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * This file contains post-installation message handling for the checks if the installation is * affected by the issue with content languages access in 3.4.0 */ defined('_JEXEC') or die; /** * Checks if the installation is affected by the issue with content languages access in 3.4.0 * * @link https://github.com/joomla/joomla-cms/pull/6172 * @link https://github.com/joomla/joomla-cms/pull/6194 * * @return boolean * * @since 3.4.1 */ function admin_postinstall_languageaccess340_condition() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('access')) ->from($db->quoteName('#__languages')) ->where($db->quoteName('access') . ' = ' . $db->quote('0')); $db->setQuery($query); $db->execute(); $numRows = $db->getNumRows(); if (isset($numRows) && $numRows != 0) { // We have rows here so we have at minumum one row with access set to 0 return true; } // All good the query return nothing. return false; } PKb��\H>�ּ�components/com_admin/admin.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_admin</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_ADMIN_XML_DESCRIPTION</description> <media /> <administration> <files folder="admin"> <filename>admin.php</filename> <filename>controller.php</filename> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_admin.ini</language> <language tag="en-GB">language/en-GB.com_admin.sys.ini</language> </languages> </administration> </extension> PKb��\� 2�2�components/com_admin/script.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Script file of Joomla CMS * * @since 1.6.4 */ class JoomlaInstallerScript { /** * The Joomla Version we are updating from * * @var string * @since 3.7 */ protected $fromVersion = null; /** * Function to act prior to installation process begins * * @param string $action Which action is happening (install|uninstall|discover_install|update) * @param JInstaller $installer The class calling this method * * @return boolean True on success * * @since 3.7.0 */ public function preflight($action, $installer) { if ($action === 'update') { // Get the version we are updating from if (!empty($installer->extension->manifest_cache)) { $manifestValues = json_decode($installer->extension->manifest_cache, true); if ((array_key_exists('version', $manifestValues))) { $this->fromVersion = $manifestValues['version']; return true; } } return false; } return true; } /** * Method to update Joomla! * * @param JInstaller $installer The class calling this method * * @return void */ public function update($installer) { $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'joomla_update.php'; JLog::addLogger($options, JLog::INFO, array('Update', 'databasequery', 'jerror')); try { JLog::add(JText::_('COM_JOOMLAUPDATE_UPDATE_LOG_DELETE_FILES'), JLog::INFO, 'Update'); } catch (RuntimeException $exception) { // Informational log only } // This needs to stay for 2.5 update compatibility $this->deleteUnexistingFiles(); $this->updateManifestCaches(); $this->updateDatabase(); $this->clearRadCache(); $this->updateAssets($installer); $this->clearStatsCache(); $this->convertTablesToUtf8mb4(true); $this->cleanJoomlaCache(); // VERY IMPORTANT! THIS METHOD SHOULD BE CALLED LAST, SINCE IT COULD // LOGOUT ALL THE USERS $this->flushSessions(); } /** * Called after any type of action * * @param string $action Which action is happening (install|uninstall|discover_install|update) * @param JInstaller $installer The class calling this method * * @return boolean True on success * * @since 3.7.0 */ public function postflight($action, $installer) { if ($action === 'update') { if (!empty($this->fromVersion) && version_compare($this->fromVersion, '3.7.0', 'lt')) { /* * Do a check if the menu item exists, skip if it does. Only needed when we are in pre stable state. */ $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('id') ->from($db->quoteName('#__menu')) ->where($db->quoteName('menutype') . ' = ' . $db->quote('main')) ->where($db->quoteName('title') . ' = ' . $db->quote('com_associations')) ->where($db->quoteName('client_id') . ' = 1') ->where($db->quoteName('component_id') . ' = 34'); $result = $db->setQuery($query)->loadResult(); if (!empty($result)) { return true; } /* * Add a menu item for com_associations, we need to do that here because with a plain sql statement we * damage the nested set structure for the menu table */ $newMenuItem = JTable::getInstance('Menu'); $data = array(); $data['menutype'] = 'main'; $data['title'] = 'com_associations'; $data['alias'] = 'Multilingual Associations'; $data['path'] = 'Multilingual Associations'; $data['link'] = 'index.php?option=com_associations'; $data['type'] = 'component'; $data['published'] = 1; $data['parent_id'] = 1; // We have used a SQL Statement to add the extension so using 34 is safe (fingers crossed) $data['component_id'] = 34; $data['img'] = 'class:associations'; $data['language'] = '*'; $data['client_id'] = 1; $newMenuItem->setLocation($data['parent_id'], 'last-child'); if (!$newMenuItem->save($data)) { // Install failed, roll back changes $installer->abort(JText::sprintf('JLIB_INSTALLER_ABORT_COMP_INSTALL_ROLLBACK', $newMenuItem->getError())); return false; } } } return true; } /** * Method to clear our stats plugin cache to ensure we get fresh data on Joomla Update * * @return void * * @since 3.5 */ protected function clearStatsCache() { $db = JFactory::getDbo(); try { // Get the params for the stats plugin $params = $db->setQuery( $db->getQuery(true) ->select($db->quoteName('params')) ->from($db->quoteName('#__extensions')) ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) ->where($db->quoteName('element') . ' = ' . $db->quote('stats')) )->loadResult(); } catch (Exception $e) { echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '<br />'; return; } $params = json_decode($params, true); // Reset the last run parameter if (isset($params['lastrun'])) { $params['lastrun'] = ''; } $params = json_encode($params); $query = $db->getQuery(true) ->update($db->quoteName('#__extensions')) ->set($db->quoteName('params') . ' = ' . $db->quote($params)) ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) ->where($db->quoteName('element') . ' = ' . $db->quote('stats')); try { $db->setQuery($query)->execute(); } catch (Exception $e) { echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '<br />'; return; } } /** * Method to update Database * * @return void */ protected function updateDatabase() { if (JFactory::getDbo()->getServerType() === 'mysql') { $this->updateDatabaseMysql(); } $this->uninstallEosPlugin(); $this->removeJedUpdateserver(); } /** * Method to update MySQL Database * * @return void */ protected function updateDatabaseMysql() { $db = JFactory::getDbo(); $db->setQuery('SHOW ENGINES'); try { $results = $db->loadObjectList(); } catch (Exception $e) { echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '<br />'; return; } foreach ($results as $result) { if ($result->Support != 'DEFAULT') { continue; } $db->setQuery('ALTER TABLE #__update_sites_extensions ENGINE = ' . $result->Engine); try { $db->execute(); } catch (Exception $e) { echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '<br />'; return; } break; } } /** * Uninstall the 2.5 EOS plugin * * @return void */ protected function uninstallEosPlugin() { $db = JFactory::getDbo(); // Check if the 2.5 EOS plugin is present and uninstall it if so $id = $db->setQuery( $db->getQuery(true) ->select('extension_id') ->from('#__extensions') ->where('name = ' . $db->quote('PLG_EOSNOTIFY')) )->loadResult(); // Skip update when id doesn’t exists if (!$id) { return; } // We need to unprotect the plugin so we can uninstall it $db->setQuery( $db->getQuery(true) ->update('#__extensions') ->set('protected = 0') ->where($db->quoteName('extension_id') . ' = ' . $id) )->execute(); $installer = new JInstaller; $installer->uninstall('plugin', $id); } /** * Remove the never used JED Updateserver * * @return void * * @since 3.7.0 */ protected function removeJedUpdateserver() { $db = JFactory::getDbo(); try { // Get the update site ID of the JED Update server $id = $db->setQuery( $db->getQuery(true) ->select('update_site_id') ->from($db->quoteName('#__update_sites')) ->where($db->quoteName('location') . ' = ' . $db->quote('https://update.joomla.org/jed/list.xml')) )->loadResult(); // Skip delete when id doesn’t exists if (!$id) { return; } // Delete from update sites $db->setQuery( $db->getQuery(true) ->delete($db->quoteName('#__update_sites')) ->where($db->quoteName('update_site_id') . ' = ' . $id) )->execute(); // Delete from update sites extensions $db->setQuery( $db->getQuery(true) ->delete($db->quoteName('#__update_sites_extensions')) ->where($db->quoteName('update_site_id') . ' = ' . $id) )->execute(); } catch (Exception $e) { echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '<br />'; return; } } /** * Update the manifest caches * * @return void */ protected function updateManifestCaches() { $extensions = JExtensionHelper::getCoreExtensions(); // Attempt to refresh manifest caches $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('*') ->from('#__extensions'); foreach ($extensions as $extension) { $query->where( 'type=' . $db->quote($extension[0]) . ' AND element=' . $db->quote($extension[1]) . ' AND folder=' . $db->quote($extension[2]) . ' AND client_id=' . $extension[3], 'OR' ); } $db->setQuery($query); try { $extensions = $db->loadObjectList(); } catch (Exception $e) { echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '<br />'; return; } $installer = new JInstaller; foreach ($extensions as $extension) { if (!$installer->refreshManifestCache($extension->extension_id)) { echo JText::sprintf('FILES_JOOMLA_ERROR_MANIFEST', $extension->type, $extension->element, $extension->name, $extension->client_id) . '<br />'; } } } /** * Delete files that should not exist * * @return void */ public function deleteUnexistingFiles() { $files = array( /* * Joomla 1.5 * * Because of the way some sites were upgraded forward from 1.5, they may still have some files from the * core libraries that need to be explicitly checked for and removed because of the migration of the * core libraries to using PHP namespaces. For example, the JVersion file is in an autoloaded path in 2.5+ * and due to the autoloader priorities the JVersion class will be used before the namespaced * Joomla\CMS\Version. This is a failsafe to ensure those files which MAY conflict with the current API * are removed. */ '/libraries/joomla/version.php', /* * Joomla 1.6 - 1.7 - 2.5 */ '/administrator/components/com_content/models/fields/filters.php', '/administrator/components/com_users/helpers/levels.php', '/administrator/modules/mod_quickicon/tmpl/default_button.php', '/administrator/templates/bluestork/params.ini', '/administrator/templates/hathor/params.ini', '/includes/version.php', '/libraries/joomla/application/applicationexception.php', '/libraries/joomla/client/http.php', '/libraries/joomla/database/databaseexception.php', '/libraries/joomla/database/databasequery.php', '/libraries/joomla/filter/filterinput.php', '/libraries/joomla/filter/filteroutput.php', '/libraries/joomla/form/formfield.php', '/libraries/joomla/form/formrule.php', '/libraries/joomla/log/logentry.php', '/libraries/joomla/utilities/garbagecron.txt', '/libraries/joomlacms/index.html', '/libraries/phpmailer/language/phpmailer.lang-en.php', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/img/flash.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/img/flv_player.swf', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/img/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/img/quicktime.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/img/realmedia.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/img/shockwave.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/img/trans.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/img/windowsmedia.gif', '/media/system/css/modal_msie.css', '/media/system/images/modal/closebox.gif', /* * Joomla 2.5.0 thru 3.0.0 */ '/administrator/components/com_admin/sql/updates/mysql/1.7.0-2011-06-06-2.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.0-2011-06-06.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.0.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.1-2011-09-15-2.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.1-2011-09-15-3.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.1-2011-09-15-4.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.1-2011-09-15.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.1-2011-09-17.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.1-2011-09-20.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.3-2011-10-15.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.3-2011-10-19.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.3-2011-11-10.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.4-2011-11-19.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.4-2011-11-23.sql', '/administrator/components/com_admin/sql/updates/mysql/1.7.4-2011-12-12.sql', '/administrator/components/com_admin/sql/updates/sqlsrv/2.5.2-2012-03-05.sql', '/administrator/components/com_admin/sql/updates/sqlsrv/2.5.3-2012-03-13.sql', '/administrator/components/com_admin/sql/updates/sqlsrv/index.html', '/administrator/components/com_admin/views/sysinfo/tmpl/default_navigation.php', '/administrator/components/com_categories/config.xml', '/administrator/components/com_categories/helpers/categoriesadministrator.php', '/administrator/components/com_contact/elements/contact.php', '/administrator/components/com_contact/elements/index.html', '/administrator/components/com_content/elements/article.php', '/administrator/components/com_content/elements/author.php', '/administrator/components/com_content/elements/index.html', '/administrator/components/com_installer/models/fields/client.php', '/administrator/components/com_installer/models/fields/group.php', '/administrator/components/com_installer/models/fields/index.html', '/administrator/components/com_installer/models/fields/search.php', '/administrator/components/com_installer/models/forms/index.html', '/administrator/components/com_installer/models/forms/manage.xml', '/administrator/components/com_installer/views/install/tmpl/default_form.php', '/administrator/components/com_installer/views/manage/tmpl/default_filter.php', '/administrator/components/com_languages/views/installed/tmpl/default_ftp.php', '/administrator/components/com_languages/views/installed/tmpl/default_navigation.php', '/administrator/components/com_modules/models/fields/index.html', '/administrator/components/com_modules/models/fields/moduleorder.php', '/administrator/components/com_modules/models/fields/moduleposition.php', '/administrator/components/com_newsfeeds/elements/index.html', '/administrator/components/com_newsfeeds/elements/newsfeed.php', '/administrator/components/com_templates/views/prevuuw/index.html', '/administrator/components/com_templates/views/prevuuw/tmpl/default.php', '/administrator/components/com_templates/views/prevuuw/tmpl/index.html', '/administrator/components/com_templates/views/prevuuw/view.html.php', '/administrator/components/com_users/controllers/config.php', '/administrator/includes/menu.php', '/administrator/includes/router.php', '/administrator/language/en-GB/en-GB.plg_system_finder.ini', '/administrator/language/en-GB/en-GB.plg_system_finder.sys.ini', '/administrator/manifests/packages/pkg_joomla.xml', '/administrator/modules/mod_submenu/helper.php', '/administrator/templates/hathor/css/ie6.css', '/administrator/templates/hathor/html/mod_submenu/index.html', '/administrator/templates/hathor/html/mod_submenu/default.php', '/components/com_media/controller.php', '/components/com_media/helpers/index.html', '/components/com_media/helpers/media.php', '/includes/menu.php', '/includes/pathway.php', '/includes/router.php', '/language/en-GB/en-GB.pkg_joomla.sys.ini', '/libraries/cms/cmsloader.php', '/libraries/cms/controller/index.html', '/libraries/cms/controller/legacy.php', '/libraries/cms/model/index.html', '/libraries/cms/model/legacy.php', '/libraries/cms/schema/changeitemmysql.php', '/libraries/cms/schema/changeitemsqlazure.php', '/libraries/cms/schema/changeitemsqlsrv.php', '/libraries/cms/view/index.html', '/libraries/cms/view/legacy.php', '/libraries/joomla/application/application.php', '/libraries/joomla/application/categories.php', '/libraries/joomla/application/cli/daemon.php', '/libraries/joomla/application/cli/index.html', '/libraries/joomla/application/component/controller.php', '/libraries/joomla/application/component/controlleradmin.php', '/libraries/joomla/application/component/controllerform.php', '/libraries/joomla/application/component/helper.php', '/libraries/joomla/application/component/index.html', '/libraries/joomla/application/component/model.php', '/libraries/joomla/application/component/modeladmin.php', '/libraries/joomla/application/component/modelform.php', '/libraries/joomla/application/component/modelitem.php', '/libraries/joomla/application/component/modellist.php', '/libraries/joomla/application/component/view.php', '/libraries/joomla/application/helper.php', '/libraries/joomla/application/input.php', '/libraries/joomla/application/input/cli.php', '/libraries/joomla/application/input/cookie.php', '/libraries/joomla/application/input/files.php', '/libraries/joomla/application/input/index.html', '/libraries/joomla/application/menu.php', '/libraries/joomla/application/module/helper.php', '/libraries/joomla/application/module/index.html', '/libraries/joomla/application/pathway.php', '/libraries/joomla/application/web/webclient.php', '/libraries/joomla/base/node.php', '/libraries/joomla/base/object.php', '/libraries/joomla/base/observable.php', '/libraries/joomla/base/observer.php', '/libraries/joomla/base/tree.php', '/libraries/joomla/cache/storage/eaccelerator.php', '/libraries/joomla/cache/storage/helpers/helper.php', '/libraries/joomla/cache/storage/helpers/index.html', '/libraries/joomla/database/database/index.html', '/libraries/joomla/database/database/mysql.php', '/libraries/joomla/database/database/mysqlexporter.php', '/libraries/joomla/database/database/mysqli.php', '/libraries/joomla/database/database/mysqliexporter.php', '/libraries/joomla/database/database/mysqliimporter.php', '/libraries/joomla/database/database/mysqlimporter.php', '/libraries/joomla/database/database/mysqliquery.php', '/libraries/joomla/database/database/mysqlquery.php', '/libraries/joomla/database/database/sqlazure.php', '/libraries/joomla/database/database/sqlazurequery.php', '/libraries/joomla/database/database/sqlsrv.php', '/libraries/joomla/database/database/sqlsrvquery.php', '/libraries/joomla/database/exception.php', '/libraries/joomla/database/table.php', '/libraries/joomla/database/table/asset.php', '/libraries/joomla/database/table/category.php', '/libraries/joomla/database/table/content.php', '/libraries/joomla/database/table/extension.php', '/libraries/joomla/database/table/index.html', '/libraries/joomla/database/table/language.php', '/libraries/joomla/database/table/menu.php', '/libraries/joomla/database/table/menutype.php', '/libraries/joomla/database/table/module.php', '/libraries/joomla/database/table/session.php', '/libraries/joomla/database/table/update.php', '/libraries/joomla/database/table/user.php', '/libraries/joomla/database/table/usergroup.php', '/libraries/joomla/database/table/viewlevel.php', '/libraries/joomla/database/tablenested.php', '/libraries/joomla/environment/request.php', '/libraries/joomla/environment/uri.php', '/libraries/joomla/error/error.php', '/libraries/joomla/error/exception.php', '/libraries/joomla/error/index.html', '/libraries/joomla/error/log.php', '/libraries/joomla/error/profiler.php', '/libraries/joomla/filesystem/archive.php', '/libraries/joomla/filesystem/archive/bzip2.php', '/libraries/joomla/filesystem/archive/gzip.php', '/libraries/joomla/filesystem/archive/index.html', '/libraries/joomla/filesystem/archive/tar.php', '/libraries/joomla/filesystem/archive/zip.php', '/libraries/joomla/form/fields/category.php', '/libraries/joomla/form/fields/componentlayout.php', '/libraries/joomla/form/fields/contentlanguage.php', '/libraries/joomla/form/fields/editor.php', '/libraries/joomla/form/fields/editors.php', '/libraries/joomla/form/fields/helpsite.php', '/libraries/joomla/form/fields/media.php', '/libraries/joomla/form/fields/menu.php', '/libraries/joomla/form/fields/menuitem.php', '/libraries/joomla/form/fields/modulelayout.php', '/libraries/joomla/form/fields/templatestyle.php', '/libraries/joomla/form/fields/user.php', '/libraries/joomla/html/editor.php', '/libraries/joomla/html/html/access.php', '/libraries/joomla/html/html/batch.php', '/libraries/joomla/html/html/behavior.php', '/libraries/joomla/html/html/category.php', '/libraries/joomla/html/html/content.php', '/libraries/joomla/html/html/contentlanguage.php', '/libraries/joomla/html/html/date.php', '/libraries/joomla/html/html/email.php', '/libraries/joomla/html/html/form.php', '/libraries/joomla/html/html/grid.php', '/libraries/joomla/html/html/image.php', '/libraries/joomla/html/html/index.html', '/libraries/joomla/html/html/jgrid.php', '/libraries/joomla/html/html/list.php', '/libraries/joomla/html/html/menu.php', '/libraries/joomla/html/html/number.php', '/libraries/joomla/html/html/rules.php', '/libraries/joomla/html/html/select.php', '/libraries/joomla/html/html/sliders.php', '/libraries/joomla/html/html/string.php', '/libraries/joomla/html/html/tabs.php', '/libraries/joomla/html/html/tel.php', '/libraries/joomla/html/html/user.php', '/libraries/joomla/html/pagination.php', '/libraries/joomla/html/pane.php', '/libraries/joomla/html/parameter.php', '/libraries/joomla/html/parameter/element.php', '/libraries/joomla/html/parameter/element/calendar.php', '/libraries/joomla/html/parameter/element/category.php', '/libraries/joomla/html/parameter/element/componentlayouts.php', '/libraries/joomla/html/parameter/element/contentlanguages.php', '/libraries/joomla/html/parameter/element/editors.php', '/libraries/joomla/html/parameter/element/filelist.php', '/libraries/joomla/html/parameter/element/folderlist.php', '/libraries/joomla/html/parameter/element/helpsites.php', '/libraries/joomla/html/parameter/element/hidden.php', '/libraries/joomla/html/parameter/element/imagelist.php', '/libraries/joomla/html/parameter/element/index.html', '/libraries/joomla/html/parameter/element/languages.php', '/libraries/joomla/html/parameter/element/list.php', '/libraries/joomla/html/parameter/element/menu.php', '/libraries/joomla/html/parameter/element/menuitem.php', '/libraries/joomla/html/parameter/element/modulelayouts.php', '/libraries/joomla/html/parameter/element/password.php', '/libraries/joomla/html/parameter/element/radio.php', '/libraries/joomla/html/parameter/element/spacer.php', '/libraries/joomla/html/parameter/element/sql.php', '/libraries/joomla/html/parameter/element/templatestyle.php', '/libraries/joomla/html/parameter/element/text.php', '/libraries/joomla/html/parameter/element/textarea.php', '/libraries/joomla/html/parameter/element/timezones.php', '/libraries/joomla/html/parameter/element/usergroup.php', '/libraries/joomla/html/parameter/index.html', '/libraries/joomla/html/toolbar.php', '/libraries/joomla/html/toolbar/button.php', '/libraries/joomla/html/toolbar/button/confirm.php', '/libraries/joomla/html/toolbar/button/custom.php', '/libraries/joomla/html/toolbar/button/help.php', '/libraries/joomla/html/toolbar/button/index.html', '/libraries/joomla/html/toolbar/button/link.php', '/libraries/joomla/html/toolbar/button/popup.php', '/libraries/joomla/html/toolbar/button/separator.php', '/libraries/joomla/html/toolbar/button/standard.php', '/libraries/joomla/html/toolbar/index.html', '/libraries/joomla/image/filters/brightness.php', '/libraries/joomla/image/filters/contrast.php', '/libraries/joomla/image/filters/edgedetect.php', '/libraries/joomla/image/filters/emboss.php', '/libraries/joomla/image/filters/grayscale.php', '/libraries/joomla/image/filters/index.html', '/libraries/joomla/image/filters/negate.php', '/libraries/joomla/image/filters/sketchy.php', '/libraries/joomla/image/filters/smooth.php', '/libraries/joomla/language/help.php', '/libraries/joomla/language/latin_transliterate.php', '/libraries/joomla/log/logexception.php', '/libraries/joomla/log/loggers/database.php', '/libraries/joomla/log/loggers/echo.php', '/libraries/joomla/log/loggers/formattedtext.php', '/libraries/joomla/log/loggers/index.html', '/libraries/joomla/log/loggers/messagequeue.php', '/libraries/joomla/log/loggers/syslog.php', '/libraries/joomla/log/loggers/w3c.php', '/libraries/joomla/methods.php', '/libraries/joomla/session/storage/eaccelerator.php', '/libraries/joomla/string/stringnormalize.php', '/libraries/joomla/utilities/date.php', '/libraries/joomla/utilities/simplecrypt.php', '/libraries/joomla/utilities/simplexml.php', '/libraries/joomla/utilities/string.php', '/libraries/joomla/utilities/xmlelement.php', '/media/com_finder/images/calendar.png', '/media/com_finder/images/index.html', '/media/com_finder/images/mime/index.html', '/media/com_finder/images/mime/pdf.png', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js', '/media/editors/tinymce/jscripts/tiny_mce/tiny_mce_src.js', '/media/plg_quickicon_extensionupdate/extensionupdatecheck.js', '/media/plg_quickicon_joomlaupdate/jupdatecheck.js', /* * Joomla! 3.0.0 thru 3.1.0 */ '/administrator/components/com_languages/views/installed/tmpl/default_ftp.php', '/administrator/language/en-GB/en-GB.plg_content_geshi.ini', '/administrator/language/en-GB/en-GB.plg_content_geshi.sys.ini', '/administrator/templates/hathor/html/com_contact/contact/edit_metadata.php', '/administrator/templates/hathor/html/com_newsfeeds/newsfeed/edit_metadata.php', '/administrator/templates/hathor/html/com_weblinks/weblink/edit_metadata.php', '/administrator/templates/hathor/html/mod_submenu/default.php', '/administrator/templates/hathor/html/mod_submenu/index.html', '/libraries/cms/feed/entry.php', '/libraries/cms/feed/factory.php', '/libraries/cms/feed/feed.php', '/libraries/cms/feed/index.html', '/libraries/cms/feed/link.php', '/libraries/cms/feed/parser.php', '/libraries/cms/feed/parser/atom.php', '/libraries/cms/feed/parser/index.html', '/libraries/cms/feed/parser/namespace.php', '/libraries/cms/feed/parser/rss.php', '/libraries/cms/feed/person.php', '/libraries/joomla/form/rules/boolean.php', '/libraries/joomla/form/rules/color.php', '/libraries/joomla/form/rules/email.php', '/libraries/joomla/form/rules/equals.php', '/libraries/joomla/form/rules/index.html', '/libraries/joomla/form/rules/options.php', '/libraries/joomla/form/rules/rules.php', '/libraries/joomla/form/rules/tel.php', '/libraries/joomla/form/rules/url.php', '/libraries/joomla/form/rules/username.php', '/libraries/joomla/installer/adapters/component.php', '/libraries/joomla/installer/adapters/file.php', '/libraries/joomla/installer/adapters/index.html', '/libraries/joomla/installer/adapters/language.php', '/libraries/joomla/installer/adapters/library.php', '/libraries/joomla/installer/adapters/module.php', '/libraries/joomla/installer/adapters/package.php', '/libraries/joomla/installer/adapters/plugin.php', '/libraries/joomla/installer/adapters/template.php', '/libraries/joomla/installer/extension.php', '/libraries/joomla/installer/helper.php', '/libraries/joomla/installer/index.html', '/libraries/joomla/installer/installer.php', '/libraries/joomla/installer/librarymanifest.php', '/libraries/joomla/installer/packagemanifest.php', '/media/system/css/mooRainbow.css', '/media/system/js/mooRainbow-uncompressed.js', '/media/system/js/mooRainbow.js', '/media/system/js/swf-uncompressed.js', '/media/system/js/swf.js', '/media/system/js/uploader-uncompressed.js', '/media/system/js/uploader.js', '/media/system/swf/index.html', '/media/system/swf/uploader.swf', /* * Joomla! 3.1.0 thru 3.2.0 */ '/administrator/components/com_banners/models/fields/ordering.php', '/administrator/components/com_config/helper/component.php', '/administrator/components/com_config/models/fields/filters.php', '/administrator/components/com_config/models/fields/index.html', '/administrator/components/com_config/models/forms/application.xml', '/administrator/components/com_config/models/forms/index.html', '/administrator/components/com_config/views/application/index.html', '/administrator/components/com_config/views/application/tmpl/default.php', '/administrator/components/com_config/views/application/tmpl/default_cache.php', '/administrator/components/com_config/views/application/tmpl/default_cookie.php', '/administrator/components/com_config/views/application/tmpl/default_database.php', '/administrator/components/com_config/views/application/tmpl/default_debug.php', '/administrator/components/com_config/views/application/tmpl/default_filters.php', '/administrator/components/com_config/views/application/tmpl/default_ftp.php', '/administrator/components/com_config/views/application/tmpl/default_ftplogin.php', '/administrator/components/com_config/views/application/tmpl/default_locale.php', '/administrator/components/com_config/views/application/tmpl/default_mail.php', '/administrator/components/com_config/views/application/tmpl/default_metadata.php', '/administrator/components/com_config/views/application/tmpl/default_navigation.php', '/administrator/components/com_config/views/application/tmpl/default_permissions.php', '/administrator/components/com_config/views/application/tmpl/default_seo.php', '/administrator/components/com_config/views/application/tmpl/default_server.php', '/administrator/components/com_config/views/application/tmpl/default_session.php', '/administrator/components/com_config/views/application/tmpl/default_site.php', '/administrator/components/com_config/views/application/tmpl/default_system.php', '/administrator/components/com_config/views/application/tmpl/index.html', '/administrator/components/com_config/views/application/view.html.php', '/administrator/components/com_config/views/close/index.html', '/administrator/components/com_config/views/close/view.html.php', '/administrator/components/com_config/views/component/index.html', '/administrator/components/com_config/views/component/tmpl/default.php', '/administrator/components/com_config/views/component/tmpl/default_navigation.php', '/administrator/components/com_config/views/component/tmpl/index.html', '/administrator/components/com_config/views/component/view.html.php', '/administrator/components/com_config/views/index.html', '/administrator/components/com_contact/models/fields/modal/contacts.php', '/administrator/components/com_contact/models/fields/ordering.php', '/administrator/components/com_newsfeeds/models/fields/modal/newsfeeds.php', '/administrator/components/com_newsfeeds/models/fields/ordering.php', '/administrator/components/com_plugins/models/fields/ordering.php', '/administrator/components/com_templates/controllers/source.php', '/administrator/components/com_templates/models/source.php', '/administrator/components/com_templates/views/source/index.html', '/administrator/components/com_templates/views/source/tmpl/edit.php', '/administrator/components/com_templates/views/source/tmpl/edit_ftp.php', '/administrator/components/com_templates/views/source/tmpl/index.html', '/administrator/components/com_templates/views/source/view.html.php', '/administrator/components/com_weblinks/models/fields/index.html', '/administrator/components/com_weblinks/models/fields/ordering.php', '/administrator/help/en-GB/Components_Banners_Banners.html', '/administrator/help/en-GB/Components_Banners_Banners_Edit.html', '/administrator/help/en-GB/Components_Banners_Categories.html', '/administrator/help/en-GB/Components_Banners_Category_Edit.html', '/administrator/help/en-GB/Components_Banners_Clients.html', '/administrator/help/en-GB/Components_Banners_Clients_Edit.html', '/administrator/help/en-GB/Components_Banners_Tracks.html', '/administrator/help/en-GB/Components_Contact_Categories.html', '/administrator/help/en-GB/Components_Contact_Category_Edit.html', '/administrator/help/en-GB/Components_Contacts_Contacts.html', '/administrator/help/en-GB/Components_Contacts_Contacts_Edit.html', '/administrator/help/en-GB/Components_Content_Categories.html', '/administrator/help/en-GB/Components_Content_Category_Edit.html', '/administrator/help/en-GB/Components_Messaging_Inbox.html', '/administrator/help/en-GB/Components_Messaging_Read.html', '/administrator/help/en-GB/Components_Messaging_Write.html', '/administrator/help/en-GB/Components_Newsfeeds_Categories.html', '/administrator/help/en-GB/Components_Newsfeeds_Category_Edit.html', '/administrator/help/en-GB/Components_Newsfeeds_Feeds.html', '/administrator/help/en-GB/Components_Newsfeeds_Feeds_Edit.html', '/administrator/help/en-GB/Components_Redirect_Manager.html', '/administrator/help/en-GB/Components_Redirect_Manager_Edit.html', '/administrator/help/en-GB/Components_Search.html', '/administrator/help/en-GB/Components_Weblinks_Categories.html', '/administrator/help/en-GB/Components_Weblinks_Category_Edit.html', '/administrator/help/en-GB/Components_Weblinks_Links.html', '/administrator/help/en-GB/Components_Weblinks_Links_Edit.html', '/administrator/help/en-GB/Content_Article_Manager.html', '/administrator/help/en-GB/Content_Article_Manager_Edit.html', '/administrator/help/en-GB/Content_Featured_Articles.html', '/administrator/help/en-GB/Content_Media_Manager.html', '/administrator/help/en-GB/Extensions_Extension_Manager_Discover.html', '/administrator/help/en-GB/Extensions_Extension_Manager_Install.html', '/administrator/help/en-GB/Extensions_Extension_Manager_Manage.html', '/administrator/help/en-GB/Extensions_Extension_Manager_Update.html', '/administrator/help/en-GB/Extensions_Extension_Manager_Warnings.html', '/administrator/help/en-GB/Extensions_Language_Manager_Content.html', '/administrator/help/en-GB/Extensions_Language_Manager_Edit.html', '/administrator/help/en-GB/Extensions_Language_Manager_Installed.html', '/administrator/help/en-GB/Extensions_Module_Manager.html', '/administrator/help/en-GB/Extensions_Module_Manager_Edit.html', '/administrator/help/en-GB/Extensions_Plugin_Manager.html', '/administrator/help/en-GB/Extensions_Plugin_Manager_Edit.html', '/administrator/help/en-GB/Extensions_Template_Manager_Styles.html', '/administrator/help/en-GB/Extensions_Template_Manager_Styles_Edit.html', '/administrator/help/en-GB/Extensions_Template_Manager_Templates.html', '/administrator/help/en-GB/Extensions_Template_Manager_Templates_Edit.html', '/administrator/help/en-GB/Extensions_Template_Manager_Templates_Edit_Source.html', '/administrator/help/en-GB/Glossary.html', '/administrator/help/en-GB/Menus_Menu_Item_Manager.html', '/administrator/help/en-GB/Menus_Menu_Item_Manager_Edit.html', '/administrator/help/en-GB/Menus_Menu_Manager.html', '/administrator/help/en-GB/Menus_Menu_Manager_Edit.html', '/administrator/help/en-GB/Site_Global_Configuration.html', '/administrator/help/en-GB/Site_Maintenance_Clear_Cache.html', '/administrator/help/en-GB/Site_Maintenance_Global_Check-in.html', '/administrator/help/en-GB/Site_Maintenance_Purge_Expired_Cache.html', '/administrator/help/en-GB/Site_System_Information.html', '/administrator/help/en-GB/Start_Here.html', '/administrator/help/en-GB/Users_Access_Levels.html', '/administrator/help/en-GB/Users_Access_Levels_Edit.html', '/administrator/help/en-GB/Users_Debug_Users.html', '/administrator/help/en-GB/Users_Groups.html', '/administrator/help/en-GB/Users_Groups_Edit.html', '/administrator/help/en-GB/Users_Mass_Mail_Users.html', '/administrator/help/en-GB/Users_User_Manager.html', '/administrator/help/en-GB/Users_User_Manager_Edit.html', '/administrator/help/en-GB/css/docbook.css', '/administrator/help/en-GB/css/help.css', '/administrator/includes/application.php', '/includes/application.php', '/libraries/joomla/application/router.php', '/libraries/joomla/environment/response.php', '/libraries/joomla/html/access.php', '/libraries/joomla/html/behavior.php', '/libraries/joomla/html/content.php', '/libraries/joomla/html/date.php', '/libraries/joomla/html/email.php', '/libraries/joomla/html/form.php', '/libraries/joomla/html/grid.php', '/libraries/joomla/html/html.php', '/libraries/joomla/html/index.html', '/libraries/joomla/html/jgrid.php', '/libraries/joomla/html/language/en-GB/en-GB.jhtmldate.ini', '/libraries/joomla/html/language/en-GB/index.html', '/libraries/joomla/html/language/index.html', '/libraries/joomla/html/list.php', '/libraries/joomla/html/number.php', '/libraries/joomla/html/rules.php', '/libraries/joomla/html/select.php', '/libraries/joomla/html/sliders.php', '/libraries/joomla/html/string.php', '/libraries/joomla/html/tabs.php', '/libraries/joomla/html/tel.php', '/libraries/joomla/html/user.php', '/libraries/joomla/pagination/index.html', '/libraries/joomla/pagination/object.php', '/libraries/joomla/pagination/pagination.php', '/libraries/joomla/plugin/helper.php', '/libraries/joomla/plugin/index.html', '/libraries/joomla/plugin/plugin.php', '/libraries/legacy/application/helper.php', '/libraries/legacy/component/helper.php', '/libraries/legacy/component/index.html', '/libraries/legacy/html/contentlanguage.php', '/libraries/legacy/html/index.html', '/libraries/legacy/html/menu.php', '/libraries/legacy/menu/index.html', '/libraries/legacy/menu/menu.php', '/libraries/legacy/module/helper.php', '/libraries/legacy/module/index.html', '/libraries/legacy/pathway/index.html', '/libraries/legacy/pathway/pathway.php', '/media/editors/codemirror/css/csscolors.css', '/media/editors/codemirror/css/jscolors.css', '/media/editors/codemirror/css/phpcolors.css', '/media/editors/codemirror/css/sparqlcolors.css', '/media/editors/codemirror/css/xmlcolors.css', '/media/editors/codemirror/js/basefiles-uncompressed.js', '/media/editors/codemirror/js/basefiles.js', '/media/editors/codemirror/js/codemirror-uncompressed.js', '/media/editors/codemirror/js/editor.js', '/media/editors/codemirror/js/highlight.js', '/media/editors/codemirror/js/mirrorframe.js', '/media/editors/codemirror/js/parsecss.js', '/media/editors/codemirror/js/parsedummy.js', '/media/editors/codemirror/js/parsehtmlmixed.js', '/media/editors/codemirror/js/parsejavascript.js', '/media/editors/codemirror/js/parsephp.js', '/media/editors/codemirror/js/parsephphtmlmixed.js', '/media/editors/codemirror/js/parsesparql.js', '/media/editors/codemirror/js/parsexml.js', '/media/editors/codemirror/js/select.js', '/media/editors/codemirror/js/stringstream.js', '/media/editors/codemirror/js/tokenize.js', '/media/editors/codemirror/js/tokenizejavascript.js', '/media/editors/codemirror/js/tokenizephp.js', '/media/editors/codemirror/js/undo.js', '/media/editors/codemirror/js/util.js', '/media/editors/tinymce/jscripts/index.html', '/media/editors/tinymce/jscripts/tiny_mce/index.html', '/media/editors/tinymce/jscripts/tiny_mce/langs/en.js', '/media/editors/tinymce/jscripts/tiny_mce/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/license.txt', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advhr/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advhr/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advhr/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advhr/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/img/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advimage/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlink/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlink/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlink/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlink/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/advlist/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autolink/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autoresize/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autosave/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/autosave/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/bbcode/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/contextmenu/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/directionality/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/emotions/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullpage/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullpage/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullpage/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/fullscreen/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/iespell/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/insertdatetime/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/layer/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/lists/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/css/media.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/js/media.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/media.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/media/moxieplayer.swf', '/media/editors/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/nonbreaking/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/noneditable/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/pagebreak/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/paste/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/paste/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/paste/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/preview/example.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/preview/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/preview/preview.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/print/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/save/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/searchreplace/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif', '/media/editors/tinymce/jscripts/tiny_mce/plugins/spellchecker/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/css/props.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/js/props.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/props.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/style/readme.txt', '/media/editors/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/tabfocus/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/cell.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/css/row.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/css/table.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/js/row.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/js/table.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/row.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/table/table.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/blank.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/css/template.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/js/template.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/template/template.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/visualblocks/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/visualblocks/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/visualchars/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/wordcount/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/about.htm', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/image.htm', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/flash.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/iframe.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/pagebreak.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/quicktime.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/realmedia.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/shockwave.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/trans.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/video.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/img/windowsmedia.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/js/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/link.htm', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/shortcuts.htm', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm', '/media/editors/tinymce/jscripts/tiny_mce/themes/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/img/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/langs/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/skins/default/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/skins/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/index.html', '/media/editors/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css', '/media/editors/tinymce/jscripts/tiny_mce/tiny_mce.js', '/media/editors/tinymce/jscripts/tiny_mce/tiny_mce_popup.js', '/media/editors/tinymce/jscripts/tiny_mce/utils/editable_selects.js', '/media/editors/tinymce/jscripts/tiny_mce/utils/form_utils.js', '/media/editors/tinymce/jscripts/tiny_mce/utils/index.html', '/media/editors/tinymce/jscripts/tiny_mce/utils/mctabs.js', '/media/editors/tinymce/jscripts/tiny_mce/utils/validate.js', '/media/editors/tinymce/templates/template_list.js', '/media/system/swf/uploader.swf', '/templates/protostar/html/editor_content.css', /* * Joomla! 3.2.0 thru 3.3.0 */ '/libraries/fof/platform/joomla.php', '/libraries/fof/readme.txt', '/libraries/joomla/github/gists.php', '/libraries/joomla/github/issues.php', '/libraries/joomla/github/pulls.php', '/libraries/joomla/github/users.php', '/libraries/joomla/registry/format.php', '/libraries/joomla/registry/format/index.html', '/libraries/joomla/registry/format/ini.php', '/libraries/joomla/registry/format/json.php', '/libraries/joomla/registry/format/php.php', '/libraries/joomla/registry/format/xml.php', '/libraries/joomla/registry/index.html', '/libraries/joomla/registry/registry.php', '/media/com_finder/js/finder.js', '/media/com_finder/js/highlighter.js', '/plugins/user/joomla/postinstall/actions.php', '/plugins/user/joomla/postinstall/index.html', /* * Joomla! 3.3.0 thru 3.4.0 */ '/administrator/components/com_tags/helpers/html/index.html', '/administrator/components/com_tags/models/fields/index.html', '/administrator/manifests/libraries/phpmailer.xml', '/administrator/templates/hathor/html/com_finder/filter/index.html', '/administrator/templates/hathor/html/com_finder/statistics/index.html', '/administrator/templates/isis/html/message.php', '/components/com_contact/helpers/icon.php', '/language/en-GB/en-GB.lib_phpmailer.sys.ini', '/libraries/compat/jsonserializable.php', '/libraries/compat/password/LICENSE.md', '/libraries/compat/password/lib/password.php', '/libraries/compat/password/lib/version_test.php', '/libraries/framework/Joomla/Application/Cli/CliOutput.php', '/libraries/framework/Joomla/Application/Cli/ColorProcessor.php', '/libraries/framework/Joomla/Application/Cli/ColorStyle.php', '/libraries/framework/Joomla/Application/Cli/Output/Processor/ColorProcessor.php', '/libraries/framework/Joomla/Application/Cli/Output/Processor/ProcessorInterface.php', '/libraries/framework/Joomla/Application/Cli/Output/Stdout.php', '/libraries/framework/Joomla/Application/Cli/Output/Xml.php', '/libraries/framework/Joomla/DI/Container.php', '/libraries/framework/Joomla/DI/ContainerAwareInterface.php', '/libraries/framework/Joomla/DI/Exception/DependencyResolutionException.php', '/libraries/framework/Joomla/DI/ServiceProviderInterface.php', '/libraries/framework/Joomla/Registry/AbstractRegistryFormat.php', '/libraries/framework/Joomla/Registry/Format/Ini.php', '/libraries/framework/Joomla/Registry/Format/Json.php', '/libraries/framework/Joomla/Registry/Format/Php.php', '/libraries/framework/Joomla/Registry/Format/Xml.php', '/libraries/framework/Joomla/Registry/Format/Yaml.php', '/libraries/framework/Joomla/Registry/Registry.php', '/libraries/framework/Symfony/Component/Yaml/Dumper.php', '/libraries/framework/Symfony/Component/Yaml/Escaper.php', '/libraries/framework/Symfony/Component/Yaml/Exception/DumpException.php', '/libraries/framework/Symfony/Component/Yaml/Exception/ExceptionInterface.php', '/libraries/framework/Symfony/Component/Yaml/Exception/ParseException.php', '/libraries/framework/Symfony/Component/Yaml/Exception/RuntimeException.php', '/libraries/framework/Symfony/Component/Yaml/Inline.php', '/libraries/framework/Symfony/Component/Yaml/LICENSE', '/libraries/framework/Symfony/Component/Yaml/Parser.php', '/libraries/framework/Symfony/Component/Yaml/Unescaper.php', '/libraries/framework/Symfony/Component/Yaml/Yaml.php', '/libraries/joomla/string/inflector.php', '/libraries/joomla/string/normalise.php', '/libraries/phpmailer/LICENSE', '/libraries/phpmailer/language/phpmailer.lang-joomla.php', '/libraries/phpmailer/phpmailer.php', '/libraries/phpmailer/pop3.php', '/libraries/phpmailer/smtp.php', '/media/editors/codemirror/css/ambiance.css', '/media/editors/codemirror/css/codemirror.css', '/media/editors/codemirror/css/configuration.css', '/media/editors/codemirror/js/brace-fold.js', '/media/editors/codemirror/js/clike.js', '/media/editors/codemirror/js/closebrackets.js', '/media/editors/codemirror/js/closetag.js', '/media/editors/codemirror/js/codemirror.js', '/media/editors/codemirror/js/css.js', '/media/editors/codemirror/js/foldcode.js', '/media/editors/codemirror/js/foldgutter.js', '/media/editors/codemirror/js/fullscreen.js', '/media/editors/codemirror/js/htmlmixed.js', '/media/editors/codemirror/js/indent-fold.js', '/media/editors/codemirror/js/javascript.js', '/media/editors/codemirror/js/less.js', '/media/editors/codemirror/js/matchbrackets.js', '/media/editors/codemirror/js/matchtags.js', '/media/editors/codemirror/js/php.js', '/media/editors/codemirror/js/xml-fold.js', '/media/editors/codemirror/js/xml.js', '/media/system/js/validate-jquery-uncompressed.js', '/templates/beez3/html/message.php', /* * Joomla! 3.4.0 thru 3.5.0 */ '/administrator/components/com_config/controller/application/refreshhelp.php', '/administrator/components/com_media/models/forms/index.html', '/administrator/templates/hathor/html/com_categories/categories/default_batch.php', '/administrator/templates/hathor/html/com_tags/tags/default_batch.php', '/components/com_wrapper/views/wrapper/metadata.xml', '/libraries/classloader.php', '/libraries/ClassLoader.php', '/libraries/composer_autoload.php', '/libraries/joomla/document/error/error.php', '/libraries/joomla/document/feed/feed.php', '/libraries/joomla/document/html/html.php', '/libraries/joomla/document/image/image.php', '/libraries/joomla/document/json/json.php', '/libraries/joomla/document/opensearch/opensearch.php', '/libraries/joomla/document/raw/raw.php', '/libraries/joomla/document/xml/xml.php', '/libraries/vendor/phpmailer/phpmailer/extras/class.html2text.php', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/Dumper.php', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/DumpException.php', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/ExceptionInterface.php', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/ParseException.php', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/RuntimeException.php', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/Inline.php', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/LICENSE', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/Unescaper.php', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/Yaml.php', '/media/com_banners/banner.js', '/media/com_finder/css/finder-rtl.css', '/media/com_finder/css/selectfilter.css', '/media/com_finder/css/sliderfilter.css', '/media/com_finder/js/sliderfilter.js', '/media/com_joomlaupdate/default.js', '/media/com_joomlaupdate/encryption.js', '/media/com_joomlaupdate/json2.js', '/media/com_joomlaupdate/update.js', '/media/editors/codemirror/lib/addons-uncompressed.js', '/media/editors/codemirror/lib/codemirror-uncompressed.css', '/media/editors/codemirror/lib/codemirror-uncompressed.js', '/media/editors/codemirror/mode/clike/scala.html', '/media/editors/codemirror/mode/css/less.html', '/media/editors/codemirror/mode/css/less_test.js', '/media/editors/codemirror/mode/css/scss.html', '/media/editors/codemirror/mode/css/scss_test.js', '/media/editors/codemirror/mode/css/test.js', '/media/editors/codemirror/mode/gfm/test.js', '/media/editors/codemirror/mode/haml/test.js', '/media/editors/codemirror/mode/javascript/json-ld.html', '/media/editors/codemirror/mode/javascript/test.js', '/media/editors/codemirror/mode/javascript/typescript.html', '/media/editors/codemirror/mode/kotlin/kotlin.js', '/media/editors/codemirror/mode/kotlin/kotlin.min.js', '/media/editors/codemirror/mode/markdown/test.js', '/media/editors/codemirror/mode/php/test.js', '/media/editors/codemirror/mode/ruby/test.js', '/media/editors/codemirror/mode/shell/test.js', '/media/editors/codemirror/mode/slim/test.js', '/media/editors/codemirror/mode/smartymixed/smartymixed.js', '/media/editors/codemirror/mode/stex/test.js', '/media/editors/codemirror/mode/textile/test.js', '/media/editors/codemirror/mode/verilog/test.js', '/media/editors/codemirror/mode/xml/test.js', '/media/editors/codemirror/mode/xquery/test.js', '/media/editors/tinymce/plugins/compat3x/editable_selects.js', '/media/editors/tinymce/plugins/compat3x/form_utils.js', '/media/editors/tinymce/plugins/compat3x/mctabs.js', '/media/editors/tinymce/plugins/compat3x/tiny_mce_popup.js', '/media/editors/tinymce/plugins/compat3x/validate.js', '/media/editors/tinymce/skins/lightgray/fonts/icomoon-small.eot', '/media/editors/tinymce/skins/lightgray/fonts/icomoon-small.svg', '/media/editors/tinymce/skins/lightgray/fonts/icomoon-small.ttf', '/media/editors/tinymce/skins/lightgray/fonts/icomoon-small.woff', '/media/editors/tinymce/skins/lightgray/fonts/icomoon.eot', '/media/editors/tinymce/skins/lightgray/fonts/icomoon.svg', '/media/editors/tinymce/skins/lightgray/fonts/icomoon.ttf', '/media/editors/tinymce/skins/lightgray/fonts/icomoon.woff', '/media/editors/tinymce/skins/lightgray/fonts/readme.md', '/media/editors/tinymce/skins/lightgray/fonts/tinymce-small.dev.svg', '/media/editors/tinymce/skins/lightgray/fonts/tinymce.dev.svg', '/media/editors/tinymce/skins/lightgray/img/wline.gif', '/media/mod_languages/images/km_kr.gif', '/media/mod_languages/images/si_LK.gif', '/plugins/editors/codemirror/styles.css', '/plugins/editors/codemirror/styles.min.css', /* * Joomla! 3.5.0 thru 3.6.0 */ '/administrator/components/com_installer/views/languages/tmpl/default_filter.php', '/administrator/components/com_joomlaupdate/helpers/download.php', '/administrator/manifests/libraries/simplepie.xml', '/administrator/templates/isis/js/bootstrap.min.js', '/administrator/templates/isis/js/jquery.js', '/libraries/joomla/application/web/client.php', '/libraries/simplepie/LICENSE.txt', '/libraries/simplepie/README.txt', '/libraries/simplepie/idn/LICENCE', '/libraries/simplepie/idn/ReadMe.txt', '/libraries/simplepie/idn/idna_convert.class.php', '/libraries/simplepie/idn/npdata.ser', '/libraries/simplepie/simplepie.php', '/media/mod_languages/images/si_lk.gif', '/media/system/js/permissions.min.js', '/plugins/editors/tinymce/fields/skins.php', '/plugins/user/profile/fields/dob.php', '/plugins/user/profile/fields/tos.php', /* * Joomla! 3.6.0 thru 3.7.0 */ '/administrator/components/com_banners/views/banners/tmpl/default_batch.php', '/administrator/components/com_cache/layouts/joomla/searchtools/default.php', '/administrator/components/com_cache/layouts/joomla/searchtools/default/bar.php', '/administrator/components/com_categories/views/categories/tmpl/default_batch.php', '/administrator/components/com_categories/views/category/tmpl/edit_extrafields.php', '/administrator/components/com_categories/views/category/tmpl/edit_options.php', '/administrator/components/com_content/views/articles/tmpl/default_batch.php', '/administrator/components/com_installer/controllers/languages.php', '/administrator/components/com_languages/layouts/joomla/searchtools/default.php', '/administrator/components/com_media/views/medialist/tmpl/thumbs_doc.php', '/administrator/components/com_media/views/medialist/tmpl/thumbs_folder.php', '/administrator/components/com_media/views/medialist/tmpl/thumbs_img.php', '/administrator/components/com_media/views/medialist/tmpl/thumbs_video.php', '/administrator/components/com_menus/views/items/tmpl/default_batch.php', '/administrator/components/com_messages/layouts/toolbar/mysettings.php', '/administrator/components/com_modules/layouts/joomla/searchtools/default.php', '/administrator/components/com_modules/layouts/joomla/searchtools/default/bar.php', '/administrator/components/com_modules/views/modules/tmpl/default_batch.php', '/administrator/components/com_newsfeeds/views/newsfeeds/tmpl/default_batch.php', '/administrator/components/com_redirect/views/links/tmpl/default_batch.php', '/administrator/components/com_tags/views/tags/tmpl/default_batch.php', '/administrator/components/com_templates/layouts/joomla/searchtools/default.php', '/administrator/components/com_templates/layouts/joomla/searchtools/default/bar.php', '/administrator/components/com_users/models/fields/components.php', '/administrator/components/com_users/views/users/tmpl/default_batch.php', '/administrator/modules/mod_menu/tmpl/default_disabled.php', '/administrator/modules/mod_menu/tmpl/default_enabled.php', '/administrator/templates/hathor/html/mod_menu/default_enabled.php', '/components/com_contact/metadata.xml', '/components/com_contact/views/category/metadata.xml', '/components/com_contact/views/contact/metadata.xml', '/components/com_contact/views/featured/metadata.xml', '/components/com_content/metadata.xml', '/components/com_content/views/archive/metadata.xml', '/components/com_content/views/article/metadata.xml', '/components/com_content/views/categories/metadata.xml', '/components/com_content/views/category/metadata.xml', '/components/com_content/views/featured/metadata.xml', '/components/com_content/views/form/metadata.xml', '/components/com_finder/views/search/metadata.xml', '/components/com_mailto/views/mailto/metadata.xml', '/components/com_mailto/views/sent/metadata.xml', '/components/com_newsfeeds/metadata.xml', '/components/com_newsfeeds/views/category/metadata.xml', '/components/com_newsfeeds/views/newsfeed/metadata.xml', '/components/com_search/views/search/metadata.xml', '/components/com_tags/metadata.xml', '/components/com_tags/views/tag/metadata.xml', '/components/com_users/metadata.xml', '/components/com_users/views/login/metadata.xml', '/components/com_users/views/profile/metadata.xml', '/components/com_users/views/registration/metadata.xml', '/components/com_users/views/remind/metadata.xml', '/components/com_users/views/reset/metadata.xml', '/components/com_wrapper/metadata.xml', '/libraries/joomla/data/data.php', '/libraries/joomla/data/dumpable.php', '/libraries/joomla/data/set.php', '/libraries/joomla/database/iterator/azure.php', '/libraries/joomla/user/authentication.php', '/libraries/platform.php', '/media/editors/codemirror/mode/jade/jade.js', '/media/editors/codemirror/mode/jade/jade.min.js', '/media/editors/none/none.js', '/media/editors/none/none.min.js', '/media/editors/tinymce/plugins/jdragdrop/plugin.js', '/media/editors/tinymce/plugins/jdragdrop/plugin.min.js', '/media/editors/tinymce/plugins/media/moxieplayer.swf', '/media/system/js/tiny-close.js', '/media/system/js/tiny-close.min.js', /* * Joomla! 3.7.0 thru 3.8.0 */ '/administrator/components/com_admin/postinstall/phpversion.php', '/administrator/components/com_content/models/fields/votelist.php', '/administrator/modules/mod_menu/preset/disabled.php', '/administrator/modules/mod_menu/preset/enabled.php', '/components/com_content/layouts/field/prepare/modal_article.php', '/components/com_fields/controllers/field.php', '/libraries/cms/application/administrator.php', '/libraries/cms/application/cms.php', '/libraries/cms/application/helper.php', '/libraries/cms/application/site.php', '/libraries/cms/authentication/helper.php', '/libraries/cms/captcha/captcha.php', '/libraries/cms/component/exception/missing.php', '/libraries/cms/component/helper.php', '/libraries/cms/component/record.php', '/libraries/cms/component/router/base.php', '/libraries/cms/component/router/interface.php', '/libraries/cms/component/router/legacy.php', '/libraries/cms/component/router/rules/interface.php', '/libraries/cms/component/router/rules/menu.php', '/libraries/cms/component/router/rules/nomenu.php', '/libraries/cms/component/router/rules/standard.php', '/libraries/cms/component/router/view.php', '/libraries/cms/component/router/viewconfiguration.php', '/libraries/cms/editor/editor.php', '/libraries/cms/error/page.php', '/libraries/cms/form/field/author.php', '/libraries/cms/form/field/captcha.php', '/libraries/cms/form/field/chromestyle.php', '/libraries/cms/form/field/contenthistory.php', '/libraries/cms/form/field/contentlanguage.php', '/libraries/cms/form/field/contenttype.php', '/libraries/cms/form/field/editor.php', '/libraries/cms/form/field/frontend_language.php', '/libraries/cms/form/field/headertag.php', '/libraries/cms/form/field/helpsite.php', '/libraries/cms/form/field/lastvisitdaterange.php', '/libraries/cms/form/field/limitbox.php', '/libraries/cms/form/field/media.php', '/libraries/cms/form/field/menu.php', '/libraries/cms/form/field/menuitem.php', '/libraries/cms/form/field/moduleorder.php', '/libraries/cms/form/field/moduleposition.php', '/libraries/cms/form/field/moduletag.php', '/libraries/cms/form/field/ordering.php', '/libraries/cms/form/field/plugin_status.php', '/libraries/cms/form/field/registrationdaterange.php', '/libraries/cms/form/field/status.php', '/libraries/cms/form/field/tag.php', '/libraries/cms/form/field/templatestyle.php', '/libraries/cms/form/field/user.php', '/libraries/cms/form/field/useractive.php', '/libraries/cms/form/field/usergrouplist.php', '/libraries/cms/form/field/userstate.php', '/libraries/cms/form/rule/captcha.php', '/libraries/cms/form/rule/notequals.php', '/libraries/cms/form/rule/password.php', '/libraries/cms/help/help.php', '/libraries/cms/helper/content.php', '/libraries/cms/helper/contenthistory.php', '/libraries/cms/helper/helper.php', '/libraries/cms/helper/media.php', '/libraries/cms/helper/route.php', '/libraries/cms/helper/tags.php', '/libraries/cms/helper/usergroups.php', '/libraries/cms/html/html.php', '/libraries/cms/installer/adapter.php', '/libraries/cms/installer/adapter/component.php', '/libraries/cms/installer/adapter/file.php', '/libraries/cms/installer/adapter/language.php', '/libraries/cms/installer/adapter/library.php', '/libraries/cms/installer/adapter/module.php', '/libraries/cms/installer/adapter/package.php', '/libraries/cms/installer/adapter/plugin.php', '/libraries/cms/installer/adapter/template.php', '/libraries/cms/installer/extension.php', '/libraries/cms/installer/helper.php', '/libraries/cms/installer/installer.php', '/libraries/cms/installer/manifest.php', '/libraries/cms/installer/manifest/library.php', '/libraries/cms/installer/manifest/package.php', '/libraries/cms/installer/script.php', '/libraries/cms/language/associations.php', '/libraries/cms/language/multilang.php', '/libraries/cms/layout/base.php', '/libraries/cms/layout/file.php', '/libraries/cms/layout/helper.php', '/libraries/cms/layout/layout.php', '/libraries/cms/library/helper.php', '/libraries/cms/menu/administrator.php', '/libraries/cms/menu/item.php', '/libraries/cms/menu/menu.php', '/libraries/cms/menu/site.php', '/libraries/cms/module/helper.php', '/libraries/cms/pagination/object.php', '/libraries/cms/pagination/pagination.php', '/libraries/cms/pathway/pathway.php', '/libraries/cms/pathway/site.php', '/libraries/cms/plugin/helper.php', '/libraries/cms/plugin/plugin.php', '/libraries/cms/response/json.php', '/libraries/cms/router/administrator.php', '/libraries/cms/router/router.php', '/libraries/cms/router/site.php', '/libraries/cms/schema/changeitem.php', '/libraries/cms/schema/changeitem/mysql.php', '/libraries/cms/schema/changeitem/postgresql.php', '/libraries/cms/schema/changeitem/sqlsrv.php', '/libraries/cms/schema/changeset.php', '/libraries/cms/search/helper.php', '/libraries/cms/table/contenthistory.php', '/libraries/cms/table/contenttype.php', '/libraries/cms/table/corecontent.php', '/libraries/cms/table/ucm.php', '/libraries/cms/toolbar/button.php', '/libraries/cms/toolbar/button/confirm.php', '/libraries/cms/toolbar/button/custom.php', '/libraries/cms/toolbar/button/help.php', '/libraries/cms/toolbar/button/link.php', '/libraries/cms/toolbar/button/popup.php', '/libraries/cms/toolbar/button/separator.php', '/libraries/cms/toolbar/button/slider.php', '/libraries/cms/toolbar/button/standard.php', '/libraries/cms/toolbar/toolbar.php', '/libraries/cms/ucm/base.php', '/libraries/cms/ucm/content.php', '/libraries/cms/ucm/type.php', '/libraries/cms/ucm/ucm.php', '/libraries/cms/version/version.php', '/libraries/joomla/access/access.php', '/libraries/joomla/access/exception/notallowed.php', '/libraries/joomla/access/rule.php', '/libraries/joomla/access/rules.php', '/libraries/joomla/access/wrapper/access.php', '/libraries/joomla/application/base.php', '/libraries/joomla/application/cli.php', '/libraries/joomla/application/daemon.php', '/libraries/joomla/application/route.php', '/libraries/joomla/application/web.php', '/libraries/joomla/association/extension/helper.php', '/libraries/joomla/association/extension/interface.php', '/libraries/joomla/authentication/authentication.php', '/libraries/joomla/authentication/response.php', '/libraries/joomla/cache/cache.php', '/libraries/joomla/cache/controller.php', '/libraries/joomla/cache/controller/callback.php', '/libraries/joomla/cache/controller/output.php', '/libraries/joomla/cache/controller/page.php', '/libraries/joomla/cache/controller/view.php', '/libraries/joomla/cache/exception.php', '/libraries/joomla/cache/exception/connecting.php', '/libraries/joomla/cache/exception/unsupported.php', '/libraries/joomla/cache/storage.php', '/libraries/joomla/cache/storage/apc.php', '/libraries/joomla/cache/storage/apcu.php', '/libraries/joomla/cache/storage/cachelite.php', '/libraries/joomla/cache/storage/file.php', '/libraries/joomla/cache/storage/helper.php', '/libraries/joomla/cache/storage/memcache.php', '/libraries/joomla/cache/storage/memcached.php', '/libraries/joomla/cache/storage/redis.php', '/libraries/joomla/cache/storage/wincache.php', '/libraries/joomla/cache/storage/xcache.php', '/libraries/joomla/client/ftp.php', '/libraries/joomla/client/helper.php', '/libraries/joomla/client/ldap.php', '/libraries/joomla/client/wrapper/helper.php', '/libraries/joomla/crypt/README.md', '/libraries/joomla/crypt/cipher.php', '/libraries/joomla/crypt/cipher/3des.php', '/libraries/joomla/crypt/cipher/blowfish.php', '/libraries/joomla/crypt/cipher/crypto.php', '/libraries/joomla/crypt/cipher/mcrypt.php', '/libraries/joomla/crypt/cipher/rijndael256.php', '/libraries/joomla/crypt/cipher/simple.php', '/libraries/joomla/crypt/crypt.php', '/libraries/joomla/crypt/key.php', '/libraries/joomla/crypt/password.php', '/libraries/joomla/crypt/password/simple.php', '/libraries/joomla/date/date.php', '/libraries/joomla/document/document.php', '/libraries/joomla/document/error.php', '/libraries/joomla/document/feed.php', '/libraries/joomla/document/feed/renderer/atom.php', '/libraries/joomla/document/feed/renderer/rss.php', '/libraries/joomla/document/html.php', '/libraries/joomla/document/html/renderer/component.php', '/libraries/joomla/document/html/renderer/head.php', '/libraries/joomla/document/html/renderer/message.php', '/libraries/joomla/document/html/renderer/module.php', '/libraries/joomla/document/html/renderer/modules.php', '/libraries/joomla/document/image.php', '/libraries/joomla/document/json.php', '/libraries/joomla/document/opensearch.php', '/libraries/joomla/document/raw.php', '/libraries/joomla/document/renderer.php', '/libraries/joomla/document/renderer/feed/atom.php', '/libraries/joomla/document/renderer/feed/rss.php', '/libraries/joomla/document/renderer/html/component.php', '/libraries/joomla/document/renderer/html/head.php', '/libraries/joomla/document/renderer/html/message.php', '/libraries/joomla/document/renderer/html/module.php', '/libraries/joomla/document/renderer/html/modules.php', '/libraries/joomla/document/xml.php', '/libraries/joomla/environment/browser.php', '/libraries/joomla/factory.php', '/libraries/joomla/feed/entry.php', '/libraries/joomla/feed/factory.php', '/libraries/joomla/feed/feed.php', '/libraries/joomla/feed/link.php', '/libraries/joomla/feed/parser.php', '/libraries/joomla/feed/parser/atom.php', '/libraries/joomla/feed/parser/namespace.php', '/libraries/joomla/feed/parser/rss.php', '/libraries/joomla/feed/parser/rss/itunes.php', '/libraries/joomla/feed/parser/rss/media.php', '/libraries/joomla/feed/person.php', '/libraries/joomla/filter/input.php', '/libraries/joomla/filter/output.php', '/libraries/joomla/filter/wrapper/output.php', '/libraries/joomla/form/field.php', '/libraries/joomla/form/form.php', '/libraries/joomla/form/helper.php', '/libraries/joomla/form/rule.php', '/libraries/joomla/form/rule/boolean.php', '/libraries/joomla/form/rule/calendar.php', '/libraries/joomla/form/rule/color.php', '/libraries/joomla/form/rule/email.php', '/libraries/joomla/form/rule/equals.php', '/libraries/joomla/form/rule/number.php', '/libraries/joomla/form/rule/options.php', '/libraries/joomla/form/rule/rules.php', '/libraries/joomla/form/rule/tel.php', '/libraries/joomla/form/rule/url.php', '/libraries/joomla/form/rule/username.php', '/libraries/joomla/form/wrapper/helper.php', '/libraries/joomla/http/factory.php', '/libraries/joomla/http/http.php', '/libraries/joomla/http/response.php', '/libraries/joomla/http/transport.php', '/libraries/joomla/http/transport/cacert.pem', '/libraries/joomla/http/transport/curl.php', '/libraries/joomla/http/transport/socket.php', '/libraries/joomla/http/transport/stream.php', '/libraries/joomla/http/wrapper/factory.php', '/libraries/joomla/image/filter.php', '/libraries/joomla/image/filter/backgroundfill.php', '/libraries/joomla/image/filter/brightness.php', '/libraries/joomla/image/filter/contrast.php', '/libraries/joomla/image/filter/edgedetect.php', '/libraries/joomla/image/filter/emboss.php', '/libraries/joomla/image/filter/grayscale.php', '/libraries/joomla/image/filter/negate.php', '/libraries/joomla/image/filter/sketchy.php', '/libraries/joomla/image/filter/smooth.php', '/libraries/joomla/image/image.php', '/libraries/joomla/input/cli.php', '/libraries/joomla/input/cookie.php', '/libraries/joomla/input/files.php', '/libraries/joomla/input/input.php', '/libraries/joomla/input/json.php', '/libraries/joomla/language/helper.php', '/libraries/joomla/language/language.php', '/libraries/joomla/language/stemmer.php', '/libraries/joomla/language/stemmer/porteren.php', '/libraries/joomla/language/text.php', '/libraries/joomla/language/transliterate.php', '/libraries/joomla/language/wrapper/helper.php', '/libraries/joomla/language/wrapper/text.php', '/libraries/joomla/language/wrapper/transliterate.php', '/libraries/joomla/log/entry.php', '/libraries/joomla/log/log.php', '/libraries/joomla/log/logger.php', '/libraries/joomla/log/logger/callback.php', '/libraries/joomla/log/logger/database.php', '/libraries/joomla/log/logger/echo.php', '/libraries/joomla/log/logger/formattedtext.php', '/libraries/joomla/log/logger/messagequeue.php', '/libraries/joomla/log/logger/syslog.php', '/libraries/joomla/log/logger/w3c.php', '/libraries/joomla/mail/helper.php', '/libraries/joomla/mail/language/phpmailer.lang-joomla.php', '/libraries/joomla/mail/mail.php', '/libraries/joomla/mail/wrapper/helper.php', '/libraries/joomla/microdata/microdata.php', '/libraries/joomla/microdata/types.json', '/libraries/joomla/object/object.php', '/libraries/joomla/profiler/profiler.php', '/libraries/joomla/session/exception/unsupported.php', '/libraries/joomla/session/session.php', '/libraries/joomla/string/punycode.php', '/libraries/joomla/table/asset.php', '/libraries/joomla/table/extension.php', '/libraries/joomla/table/interface.php', '/libraries/joomla/table/language.php', '/libraries/joomla/table/nested.php', '/libraries/joomla/table/observer.php', '/libraries/joomla/table/observer/contenthistory.php', '/libraries/joomla/table/observer/tags.php', '/libraries/joomla/table/table.php', '/libraries/joomla/table/update.php', '/libraries/joomla/table/updatesite.php', '/libraries/joomla/table/user.php', '/libraries/joomla/table/usergroup.php', '/libraries/joomla/table/viewlevel.php', '/libraries/joomla/updater/adapters/collection.php', '/libraries/joomla/updater/adapters/extension.php', '/libraries/joomla/updater/update.php', '/libraries/joomla/updater/updateadapter.php', '/libraries/joomla/updater/updater.php', '/libraries/joomla/uri/uri.php', '/libraries/joomla/user/helper.php', '/libraries/joomla/user/user.php', '/libraries/joomla/user/wrapper/helper.php', '/libraries/joomla/utilities/buffer.php', '/libraries/joomla/utilities/utility.php', '/libraries/legacy/access/rule.php', '/libraries/legacy/access/rules.php', '/libraries/legacy/application/cli.php', '/libraries/legacy/application/daemon.php', '/libraries/legacy/categories/categories.php', '/libraries/legacy/controller/admin.php', '/libraries/legacy/controller/form.php', '/libraries/legacy/controller/legacy.php', '/libraries/legacy/model/admin.php', '/libraries/legacy/model/form.php', '/libraries/legacy/model/item.php', '/libraries/legacy/model/legacy.php', '/libraries/legacy/model/list.php', '/libraries/legacy/table/category.php', '/libraries/legacy/table/content.php', '/libraries/legacy/table/menu.php', '/libraries/legacy/table/menu/type.php', '/libraries/legacy/table/module.php', '/libraries/legacy/view/categories.php', '/libraries/legacy/view/category.php', '/libraries/legacy/view/categoryfeed.php', '/libraries/legacy/view/legacy.php', '/libraries/legacy/web/client.php', '/libraries/legacy/web/web.php', '/media/editors/tinymce/langs/uk-UA.js', '/media/system/js/fields/calendar-locales/zh.js', /* * Joomla! 3.8.0 thru 3.9.0 */ '/administrator/components/com_users/controllers/profile.json.php', '/administrator/includes/toolbar.php', '/components/com_users/controllers/profile_base_json.php', '/components/com_users/controllers/profile.json.php', '/libraries/joomla/filesystem/file.php', '/libraries/joomla/filesystem/folder.php', '/libraries/joomla/filesystem/helper.php', '/libraries/joomla/filesystem/meta/language/en-GB/en-GB.lib_joomla_filesystem_patcher.ini', '/libraries/joomla/filesystem/patcher.php', '/libraries/joomla/filesystem/path.php', '/libraries/joomla/filesystem/stream.php', '/libraries/joomla/filesystem/streams/string.php', '/libraries/joomla/filesystem/support/stringcontroller.php', '/libraries/joomla/filesystem/wrapper/file.php', '/libraries/joomla/filesystem/wrapper/folder.php', '/libraries/joomla/filesystem/wrapper/path.php', '/libraries/src/Mail/language/phpmailer.lang-joomla.php', '/plugins/captcha/recaptcha/recaptchalib.php', /* * Joomla! 3.9.0 thru 3.10.0 */ '/SECURITY.md', '/administrator/components/com_users/controllers/profile.json.php', '/components/com_users/controllers/profile.json.php', '/components/com_users/controllers/profile_base_json.php', '/tests/unit/suites/libraries/cms/form/field/JFormFieldHelpsiteTest.php', /* * Legacy FOF */ '/libraries/fof/controller.php', '/libraries/fof/dispatcher.php', '/libraries/fof/inflector.php', '/libraries/fof/input.php', '/libraries/fof/model.php', '/libraries/fof/query.abstract.php', '/libraries/fof/query.element.php', '/libraries/fof/query.mysql.php', '/libraries/fof/query.mysqli.php', '/libraries/fof/query.sqlazure.php', '/libraries/fof/query.sqlsrv.php', '/libraries/fof/render.abstract.php', '/libraries/fof/render.joomla.php', '/libraries/fof/render.joomla3.php', '/libraries/fof/render.strapper.php', '/libraries/fof/string.utils.php', '/libraries/fof/table.php', '/libraries/fof/template.utils.php', '/libraries/fof/toolbar.php', '/libraries/fof/view.csv.php', '/libraries/fof/view.html.php', '/libraries/fof/view.json.php', '/libraries/fof/view.php', /* * Joomla! 3.9.7 */ '/administrator/components/com_joomlaupdate/access.xml', ); // TODO There is an issue while deleting folders using the ftp mode $folders = array( '/administrator/components/com_admin/sql/updates/sqlsrv', '/media/com_finder/images/mime', '/media/com_finder/images', '/components/com_media/helpers', // Joomla 3.0 '/administrator/components/com_contact/elements', '/administrator/components/com_content/elements', '/administrator/components/com_newsfeeds/elements', '/administrator/components/com_templates/views/prevuuw/tmpl', '/administrator/components/com_templates/views/prevuuw', '/libraries/cms/controller', '/libraries/cms/model', '/libraries/cms/view', '/libraries/joomla/application/cli', '/libraries/joomla/application/component', '/libraries/joomla/application/input', '/libraries/joomla/application/module', '/libraries/joomla/cache/storage/helpers', '/libraries/joomla/database/table', '/libraries/joomla/database/database', '/libraries/joomla/error', '/libraries/joomla/filesystem/archive', '/libraries/joomla/html/html', '/libraries/joomla/html/toolbar', '/libraries/joomla/html/toolbar/button', '/libraries/joomla/html/parameter', '/libraries/joomla/html/parameter/element', '/libraries/joomla/image/filters', '/libraries/joomla/log/loggers', // Joomla! 3.1 '/libraries/cms/feed/parser/rss', '/libraries/cms/feed/parser', '/libraries/cms/feed', '/libraries/joomla/form/rules', '/libraries/joomla/html/language/en-GB', '/libraries/joomla/html/language', '/libraries/joomla/html', '/libraries/joomla/installer/adapters', '/libraries/joomla/installer', '/libraries/joomla/pagination', '/libraries/legacy/html', '/libraries/legacy/menu', '/libraries/legacy/pathway', '/media/system/swf/', '/media/editors/tinymce/jscripts', // Joomla! 3.2 '/libraries/joomla/plugin', '/libraries/legacy/component', '/libraries/legacy/module', '/administrator/components/com_weblinks/models/fields', '/plugins/user/joomla/postinstall', '/libraries/joomla/registry/format', '/libraries/joomla/registry', // Joomla! 3.3 '/plugins/user/profile/fields', '/media/editors/tinymce/plugins/compat3x', // Joomla! 3.4 '/administrator/components/com_tags/helpers/html', '/administrator/components/com_tags/models/fields', '/administrator/templates/hathor/html/com_finder/filter', '/administrator/templates/hathor/html/com_finder/statistics', '/libraries/compat/password/lib', '/libraries/compat/password', '/libraries/compat', '/libraries/framework/Joomla/Application/Cli/Output/Processor', '/libraries/framework/Joomla/Application/Cli/Output', '/libraries/framework/Joomla/Application/Cli', '/libraries/framework/Joomla/Application', '/libraries/framework/Joomla/DI/Exception', '/libraries/framework/Joomla/DI', '/libraries/framework/Joomla/Registry/Format', '/libraries/framework/Joomla/Registry', '/libraries/framework/Joomla', '/libraries/framework/Symfony/Component/Yaml/Exception', '/libraries/framework/Symfony/Component/Yaml', '/libraries/framework', '/libraries/phpmailer/language', '/libraries/phpmailer', '/media/editors/codemirror/css', '/media/editors/codemirror/js', '/media/com_banners', // Joomla! 3.4.1 '/administrator/components/com_config/views', '/administrator/components/com_config/models/fields', '/administrator/components/com_config/models/forms', // Joomla! 3.4.2 '/media/editors/codemirror/mode/smartymixed', // Joomla! 3.5 '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml/Exception', '/libraries/vendor/symfony/yaml/Symfony/Component/Yaml', '/libraries/vendor/symfony/yaml/Symfony/Component', '/libraries/vendor/symfony/yaml/Symfony', '/libraries/joomla/document/error', '/libraries/joomla/document/image', '/libraries/joomla/document/json', '/libraries/joomla/document/opensearch', '/libraries/joomla/document/raw', '/libraries/joomla/document/xml', '/administrator/components/com_media/models/forms', '/media/editors/codemirror/mode/kotlin', '/media/editors/tinymce/plugins/compat3x', '/plugins/editors/tinymce/fields', '/plugins/user/profile/fields', // Joomla 3.6 '/libraries/simplepie/idn', '/libraries/simplepie', // Joomla! 3.6.3 '/media/editors/codemirror/mode/jade', // Joomla! 3.7.0 '/libraries/joomla/data', '/administrator/components/com_cache/layouts/joomla/searchtools/default', '/administrator/components/com_cache/layouts/joomla/searchtools', '/administrator/components/com_cache/layouts/joomla', '/administrator/components/com_cache/layouts', '/administrator/components/com_modules/layouts/joomla/searchtools/default', '/administrator/components/com_modules/layouts/joomla/searchtools', '/administrator/components/com_modules/layouts/joomla', '/administrator/components/com_templates/layouts/joomla/searchtools/default', '/administrator/components/com_templates/layouts/joomla/searchtools', '/administrator/components/com_templates/layouts/joomla', '/administrator/components/com_templates/layouts', '/administrator/templates/hathor/html/mod_menu', '/administrator/components/com_messages/layouts/toolbar', '/administrator/components/com_messages/layouts', // Joomla! 3.7.4 '/components/com_fields/controllers', // Joomla! 3.8.0 '/administrator/modules/mod_menu/preset', '/libraries/cms/application', '/libraries/cms/authentication', '/libraries/cms/captcha', '/libraries/cms/component/exception', '/libraries/cms/component/router/rules', '/libraries/cms/component/router', '/libraries/cms/component', '/libraries/cms/editor', '/libraries/cms/error', '/libraries/cms/extension', '/libraries/cms/form/field', '/libraries/cms/form/rule', '/libraries/cms/form', '/libraries/cms/help', '/libraries/cms/helper', '/libraries/cms/installer/adapter', '/libraries/cms/installer/manifest', '/libraries/cms/installer', '/libraries/cms/language', '/libraries/cms/layout', '/libraries/cms/library', '/libraries/cms/menu', '/libraries/cms/module', '/libraries/cms/pagination', '/libraries/cms/pathway', '/libraries/cms/plugin', '/libraries/cms/response', '/libraries/cms/router', '/libraries/cms/schema/changeitem', '/libraries/cms/schema', '/libraries/cms/search', '/libraries/cms/table', '/libraries/cms/toolbar/button', '/libraries/cms/toolbar', '/libraries/cms/ucm', '/libraries/cms/version', '/libraries/joomla/access/exception', '/libraries/joomla/access/wrapper', '/libraries/joomla/access', '/libraries/joomla/association/extension', '/libraries/joomla/association', '/libraries/joomla/authentication', '/libraries/joomla/cache/controller', '/libraries/joomla/cache/exception', '/libraries/joomla/cache/storage', '/libraries/joomla/cache', '/libraries/joomla/client/wrapper', '/libraries/joomla/client', '/libraries/joomla/crypt/cipher', '/libraries/joomla/crypt/password', '/libraries/joomla/crypt', '/libraries/joomla/date', '/libraries/joomla/document/feed/renderer', '/libraries/joomla/document/feed', '/libraries/joomla/document/html/renderer', '/libraries/joomla/document/html', '/libraries/joomla/document/renderer/feed', '/libraries/joomla/document/renderer/html', '/libraries/joomla/document/renderer', '/libraries/joomla/document', '/libraries/joomla/environment', '/libraries/joomla/feed/parser/rss', '/libraries/joomla/feed/parser', '/libraries/joomla/feed', '/libraries/joomla/filter/wrapper', '/libraries/joomla/filter', '/libraries/joomla/form/rule', '/libraries/joomla/form/wrapper', '/libraries/joomla/http/transport', '/libraries/joomla/http/wrapper', '/libraries/joomla/http', '/libraries/joomla/image/filter', '/libraries/joomla/image', '/libraries/joomla/input', '/libraries/joomla/language/stemmer', '/libraries/joomla/language/wrapper', '/libraries/joomla/language', '/libraries/joomla/log/logger', '/libraries/joomla/log', '/libraries/joomla/mail/language', '/libraries/joomla/mail/wrapper', '/libraries/joomla/mail', '/libraries/joomla/microdata', '/libraries/joomla/object', '/libraries/joomla/profiler', '/libraries/joomla/session/exception', '/libraries/joomla/table', '/libraries/joomla/updater/adapters', '/libraries/joomla/updater', '/libraries/joomla/uri', '/libraries/joomla/user/wrapper', '/libraries/joomla/user', '/libraries/legacy/access', '/libraries/legacy/categories', '/libraries/legacy/controller', '/libraries/legacy/model', '/libraries/legacy/table/menu', '/libraries/legacy/view', '/libraries/legacy/web', '/media/editors/tinymce/plugins/jdragdrop', // Joomla! 3.9.0 '/libraries/joomla/filesystem/meta/language/en-GB', '/libraries/joomla/filesystem/meta/language', '/libraries/joomla/filesystem/meta', '/libraries/joomla/filesystem/streams', '/libraries/joomla/filesystem/support', '/libraries/joomla/filesystem/wrapper', '/libraries/joomla/filesystem', ); jimport('joomla.filesystem.file'); foreach ($files as $file) { if (JFile::exists(JPATH_ROOT . $file) && !JFile::delete(JPATH_ROOT . $file)) { echo JText::sprintf('FILES_JOOMLA_ERROR_FILE_FOLDER', $file) . '<br />'; } } jimport('joomla.filesystem.folder'); foreach ($folders as $folder) { if (JFolder::exists(JPATH_ROOT . $folder) && !JFolder::delete(JPATH_ROOT . $folder)) { echo JText::sprintf('FILES_JOOMLA_ERROR_FILE_FOLDER', $folder) . '<br />'; } } /* * Needed for updates post-3.4 * If com_weblinks doesn't exist then assume we can delete the weblinks package manifest (included in the update packages) */ if (!JFile::exists(JPATH_ROOT . '/administrator/components/com_weblinks/weblinks.php') && JFile::exists(JPATH_ROOT . '/administrator/manifests/packages/pkg_weblinks.xml')) { JFile::delete(JPATH_ROOT . '/administrator/manifests/packages/pkg_weblinks.xml'); } } /** * Clears the RAD layer's table cache. * * The cache vastly improves performance but needs to be cleared every time you update the database schema. * * @return void * * @since 3.2 */ protected function clearRadCache() { jimport('joomla.filesystem.file'); if (JFile::exists(JPATH_ROOT . '/cache/fof/cache.php')) { JFile::delete(JPATH_ROOT . '/cache/fof/cache.php'); } } /** * Method to create assets for newly installed components * * @param JInstaller $installer The class calling this method * * @return boolean * * @since 3.2 */ public function updateAssets($installer) { // List all components added since 1.6 $newComponents = array( 'com_finder', 'com_joomlaupdate', 'com_tags', 'com_contenthistory', 'com_ajax', 'com_postinstall', 'com_fields', 'com_associations', 'com_privacy', 'com_actionlogs', ); foreach ($newComponents as $component) { /** @var JTableAsset $asset */ $asset = JTable::getInstance('Asset'); if ($asset->loadByName($component)) { continue; } $asset->name = $component; $asset->parent_id = 1; $asset->rules = '{}'; $asset->title = $component; $asset->setLocation(1, 'last-child'); if (!$asset->store()) { // Install failed, roll back changes $installer->abort(JText::sprintf('JLIB_INSTALLER_ABORT_COMP_INSTALL_ROLLBACK', $asset->stderr(true))); return false; } } return true; } /** * If we migrated the session from the previous system, flush all the active sessions. * Otherwise users will be logged in, but not able to do anything since they don't have * a valid session * * @return boolean */ public function flushSessions() { /** * The session may have not been started yet (e.g. CLI-based Joomla! update scripts). Let's make sure we do * have a valid session. */ $session = JFactory::getSession(); /** * Restarting the Session require a new login for the current user so lets check if we have an active session * and only restart it if not. * For B/C reasons we need to use getState as isActive is not available in 2.5 */ if ($session->getState() !== 'active') { $session->restart(); } // If $_SESSION['__default'] is no longer set we do not have a migrated session, therefore we can quit. if (!isset($_SESSION['__default'])) { return true; } $db = JFactory::getDbo(); try { switch ($db->getServerType()) { // MySQL database, use TRUNCATE (faster, more resilient) case 'mysql': $db->truncateTable('#__session'); break; // Non-MySQL databases, use a simple DELETE FROM query default: $query = $db->getQuery(true) ->delete($db->qn('#__session')); $db->setQuery($query)->execute(); break; } } catch (Exception $e) { echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '<br />'; return false; } return true; } /** * Converts the site's database tables to support UTF-8 Multibyte. * * @param boolean $doDbFixMsg Flag if message to be shown to check db fix * * @return void * * @since 3.5 */ public function convertTablesToUtf8mb4($doDbFixMsg = false) { $db = JFactory::getDbo(); // This is only required for MySQL databases $serverType = $db->getServerType(); if ($serverType != 'mysql') { return; } // Set required conversion status if ($db->hasUTF8mb4Support()) { $converted = 2; } else { $converted = 1; } // Check conversion status in database $db->setQuery('SELECT ' . $db->quoteName('converted') . ' FROM ' . $db->quoteName('#__utf8_conversion') ); try { $convertedDB = $db->loadResult(); } catch (Exception $e) { // Render the error message from the Exception object JFactory::getApplication()->enqueueMessage($e->getMessage(), 'error'); if ($doDbFixMsg) { // Show an error message telling to check database problems JFactory::getApplication()->enqueueMessage(JText::_('JLIB_DATABASE_ERROR_DATABASE_UPGRADE_FAILED'), 'error'); } return; } // Nothing to do, saved conversion status from DB is equal to required if ($convertedDB == $converted) { return; } // Step 1: Drop indexes later to be added again with column lengths limitations at step 2 $fileName1 = JPATH_ROOT . '/administrator/components/com_admin/sql/others/mysql/utf8mb4-conversion-01.sql'; if (is_file($fileName1)) { $fileContents1 = @file_get_contents($fileName1); $queries1 = $db->splitSql($fileContents1); if (!empty($queries1)) { foreach ($queries1 as $query1) { try { $db->setQuery($query1)->execute(); } catch (Exception $e) { // If the query fails we will go on. It just means the index to be dropped does not exist. } } } } // Step 2: Perform the index modifications and conversions $fileName2 = JPATH_ROOT . '/administrator/components/com_admin/sql/others/mysql/utf8mb4-conversion-02.sql'; if (is_file($fileName2)) { $fileContents2 = @file_get_contents($fileName2); $queries2 = $db->splitSql($fileContents2); if (!empty($queries2)) { foreach ($queries2 as $query2) { try { $db->setQuery($db->convertUtf8mb4QueryToUtf8($query2))->execute(); } catch (Exception $e) { $converted = 0; // Still render the error message from the Exception object JFactory::getApplication()->enqueueMessage($e->getMessage(), 'error'); } } } } if ($doDbFixMsg && $converted == 0) { // Show an error message telling to check database problems JFactory::getApplication()->enqueueMessage(JText::_('JLIB_DATABASE_ERROR_DATABASE_UPGRADE_FAILED'), 'error'); } // Set flag in database if the update is done. $db->setQuery('UPDATE ' . $db->quoteName('#__utf8_conversion') . ' SET ' . $db->quoteName('converted') . ' = ' . $converted . ';')->execute(); } /** * This method clean the Joomla Cache using the method `clean` from the com_cache model * * @return void * * @since 3.5.1 */ private function cleanJoomlaCache() { JModelLegacy::addIncludePath(JPATH_ROOT . '/administrator/components/com_cache/models'); $model = JModelLegacy::getInstance('cache', 'CacheModel'); // Clean frontend cache $model->clean(); // Clean admin cache $model->setState('client_id', 1); $model->clean(); } } PKb��\1LA��components/com_admin/admin.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); // No access check. $controller = JControllerLegacy::getInstance('Admin'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\u���;components/com_admin/sql/updates/mysql/3.4.0-2015-02-26.sqlnu�[���INSERT INTO `#__postinstall_messages` (`extension_id`, `title_key`, `description_key`, `action_key`, `language_extension`, `language_client_id`, `type`, `action_file`, `action`, `condition_file`, `condition_method`, `version_introduced`, `enabled`) VALUES (700, 'COM_CPANEL_MSG_LANGUAGEACCESS340_TITLE', 'COM_CPANEL_MSG_LANGUAGEACCESS340_BODY', '', 'com_cpanel', 1, 'message', '', '', 'admin://components/com_admin/postinstall/languageaccess340.php', 'admin_postinstall_languageaccess340_condition', '3.4.1', 1); PKb��\)0�g::0components/com_admin/sql/updates/mysql/3.1.3.sqlnu�[���# Placeholder file for database changes for version 3.1.3 PKb��\c�=��;components/com_admin/sql/updates/mysql/3.4.0-2014-12-03.sqlnu�[���UPDATE `#__extensions` SET `protected` = '0' WHERE `name` = 'plg_editors-xtd_article' AND `type` = "plugin" AND `element` = "article" AND `folder` = "editors-xtd"; PKb��\PɐUU;components/com_admin/sql/updates/mysql/3.3.4-2014-08-03.sqlnu�[���ALTER TABLE `#__user_profiles` CHANGE `profile_value` `profile_value` TEXT NOT NULL; PKb��\K���@@;components/com_admin/sql/updates/mysql/2.5.0-2011-12-20.sqlnu�[���SELECT @old_params:= CONCAT(SUBSTRING_INDEX(SUBSTRING(params, LOCATE('"filters":', params)), '}}', 1), '}}') as filters FROM `#__extensions` WHERE name="com_content"; UPDATE `#__extensions` SET params=CONCAT('{',SUBSTRING(params, 2, CHAR_LENGTH(params)-2),IF(params='','',','),@old_params,'}') WHERE name="com_config";PKb��\Ք�Y;components/com_admin/sql/updates/mysql/2.5.1-2012-01-26.sqlnu�[���INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (314, 'mod_version', 'module', 'mod_version', '', 1, 1, 1, 0, '{"legacy":false,"name":"mod_version","type":"module","creationDate":"January 2012","author":"Joomla! Project","copyright":"Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"2.5.0","description":"MOD_VERSION_XML_DESCRIPTION","group":""}', '{"format":"short","product":"1","cache":"0"}', '', '', 0, '0000-00-00 00:00:00', 0, 0); INSERT INTO `#__modules` (`title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) VALUES ('Joomla Version', '', '', 1, 'footer', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_version', 3, 1, '{"format":"short","product":"1","layout":"_:default","moduleclass_sfx":"","cache":"0"}', 1, '*'); INSERT INTO `#__modules_menu` (`moduleid`, `menuid`) VALUES (LAST_INSERT_ID(), 0);PKb��\59�S��;components/com_admin/sql/updates/mysql/3.3.0-2014-04-02.sqlnu�[���INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (451, 'plg_search_tags', 'plugin', 'tags', 'search', 0, 0, 1, 0, '', '{"search_limit":"50","show_tagged_items":"1"}', '', '', 0, '0000-00-00 00:00:00', 0, 0); PKb��\�]�==;components/com_admin/sql/updates/mysql/2.5.0-2011-12-24.sqlnu�[���ALTER TABLE `#__menu` DROP INDEX `idx_client_id_parent_id_alias`; -- -- The following statment had to be modified for utf8mb4 in Joomla! 3.5.1, changing -- `alias` to `alias`(100) -- ALTER TABLE `#__menu` ADD UNIQUE `idx_client_id_parent_id_alias_language` ( `client_id` , `parent_id` , `alias`(100) , `language` );PKb��\L��F� � ;components/com_admin/sql/updates/mysql/2.5.0-2011-12-22.sqlnu�[���REPLACE INTO `#__finder_taxonomy` (`id`, `parent_id`, `title`, `state`, `access`, `ordering`) VALUES (1, 0, 'ROOT', 0, 0, 0); REPLACE INTO `#__finder_terms_common` (`term`, `language`) VALUES ('a', 'en'), ('about', 'en'), ('after', 'en'), ('ago', 'en'), ('all', 'en'), ('am', 'en'), ('an', 'en'), ('and', 'en'), ('ani', 'en'), ('any', 'en'), ('are', 'en'), ('aren''t', 'en'), ('as', 'en'), ('at', 'en'), ('be', 'en'), ('but', 'en'), ('by', 'en'), ('for', 'en'), ('from', 'en'), ('get', 'en'), ('go', 'en'), ('how', 'en'), ('if', 'en'), ('in', 'en'), ('into', 'en'), ('is', 'en'), ('isn''t', 'en'), ('it', 'en'), ('its', 'en'), ('me', 'en'), ('more', 'en'), ('most', 'en'), ('must', 'en'), ('my', 'en'), ('new', 'en'), ('no', 'en'), ('none', 'en'), ('not', 'en'), ('noth', 'en'), ('nothing', 'en'), ('of', 'en'), ('off', 'en'), ('often', 'en'), ('old', 'en'), ('on', 'en'), ('onc', 'en'), ('once', 'en'), ('onli', 'en'), ('only', 'en'), ('or', 'en'), ('other', 'en'), ('our', 'en'), ('ours', 'en'), ('out', 'en'), ('over', 'en'), ('page', 'en'), ('she', 'en'), ('should', 'en'), ('small', 'en'), ('so', 'en'), ('some', 'en'), ('than', 'en'), ('thank', 'en'), ('that', 'en'), ('the', 'en'), ('their', 'en'), ('theirs', 'en'), ('them', 'en'), ('then', 'en'), ('there', 'en'), ('these', 'en'), ('they', 'en'), ('this', 'en'), ('those', 'en'), ('thus', 'en'), ('time', 'en'), ('times', 'en'), ('to', 'en'), ('too', 'en'), ('true', 'en'), ('under', 'en'), ('until', 'en'), ('up', 'en'), ('upon', 'en'), ('use', 'en'), ('user', 'en'), ('users', 'en'), ('veri', 'en'), ('version', 'en'), ('very', 'en'), ('via', 'en'), ('want', 'en'), ('was', 'en'), ('way', 'en'), ('were', 'en'), ('what', 'en'), ('when', 'en'), ('where', 'en'), ('whi', 'en'), ('which', 'en'), ('who', 'en'), ('whom', 'en'), ('whose', 'en'), ('why', 'en'), ('wide', 'en'), ('will', 'en'), ('with', 'en'), ('within', 'en'), ('without', 'en'), ('would', 'en'), ('yes', 'en'), ('yet', 'en'), ('you', 'en'), ('your', 'en'), ('yours', 'en'); INSERT INTO `#__menu` (`menutype`, `title`, `alias`, `note`, `path`, `link`, `type`, `published`, `parent_id`, `level`, `component_id`, `ordering`, `checked_out`, `checked_out_time`, `browserNav`, `access`, `img`, `template_style_id`, `params`, `lft`, `rgt`, `home`, `language`, `client_id`) VALUES ('menu', 'com_finder', 'Smart Search', '', 'Smart Search', 'index.php?option=com_finder', 'component', 0, 1, 1, 27, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:finder', 0, '', 41, 42, 0, '*', 1); PKb��\��/990components/com_admin/sql/updates/mysql/3.0.2.sqlnu�[���# Placeholder file for database changes for version 3.0.2PKb��\���PP;components/com_admin/sql/updates/mysql/2.5.0-2012-01-10.sqlnu�[���ALTER TABLE `#__updates` ADD COLUMN `infourl` text NOT NULL AFTER `detailsurl`; PKb��\(��nhh0components/com_admin/sql/updates/mysql/3.2.1.sqlnu�[���DELETE FROM `#__postinstall_messages` WHERE `title_key` = 'PLG_USER_JOOMLA_POSTINSTALL_STRONGPW_TITLE'; PKb��\E<��=components/com_admin/sql/updates/mysql/2.5.0-2011-12-21-1.sqlnu�[���INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (27, 'com_finder', 'component', 'com_finder', '', 1, 1, 0, 0, '', '{"show_description":"1","description_length":255,"allow_empty_query":"0","show_url":"1","show_advanced":"1","expand_advanced":"0","show_date_filters":"0","highlight_terms":"1","opensearch_name":"","opensearch_description":"","batch_size":"50","memory_table_limit":30000,"title_multiplier":"1.7","text_multiplier":"0.7","meta_multiplier":"1.2","path_multiplier":"2.0","misc_multiplier":"0.3","stemmer":"porter_en"}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (439, 'plg_captcha_recaptcha', 'plugin', 'recaptcha', 'captcha', 0, 1, 1, 0, '{}', '{"public_key":"","private_key":"","theme":"clean"}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (440, 'plg_system_highlight', 'plugin', 'highlight', 'system', 0, 1, 1, 0, '', '{}', '', '', 0, '0000-00-00 00:00:00', 7, 0), (441, 'plg_content_finder', 'plugin', 'finder', 'content', 0, 0, 1, 0, '{"legacy":false,"name":"plg_content_finder","type":"plugin","creationDate":"December 2011","author":"Joomla! Project","copyright":"Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"1.7.0","description":"PLG_CONTENT_FINDER_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (442, 'plg_finder_categories', 'plugin', 'categories', 'finder', 0, 1, 1, 0, '', '{}', '', '', 0, '0000-00-00 00:00:00', 1, 0), (443, 'plg_finder_contacts', 'plugin', 'contacts', 'finder', 0, 1, 1, 0, '', '{}', '', '', 0, '0000-00-00 00:00:00', 2, 0), (444, 'plg_finder_content', 'plugin', 'content', 'finder', 0, 1, 1, 0, '', '{}', '', '', 0, '0000-00-00 00:00:00', 3, 0), (445, 'plg_finder_newsfeeds', 'plugin', 'newsfeeds', 'finder', 0, 1, 1, 0, '', '{}', '', '', 0, '0000-00-00 00:00:00', 4, 0), (446, 'plg_finder_weblinks', 'plugin', 'weblinks', 'finder', 0, 1, 1, 0, '', '{}', '', '', 0, '0000-00-00 00:00:00', 5, 0), (223, 'mod_finder', 'module', 'mod_finder', '', 0, 1, 0, 0, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0); PKb��\�נP��;components/com_admin/sql/updates/mysql/3.3.6-2014-09-30.sqlnu�[���INSERT INTO `#__update_sites` (`name`, `type`, `location`, `enabled`) VALUES ('Joomla! Update Component Update Site', 'extension', 'https://update.joomla.org/core/extensions/com_joomlaupdate.xml', 1); INSERT INTO `#__update_sites_extensions` (`update_site_id`, `extension_id`) VALUES ((SELECT `update_site_id` FROM `#__update_sites` WHERE `name` = 'Joomla! Update Component Update Site'), (SELECT `extension_id` FROM `#__extensions` WHERE `name` = 'com_joomlaupdate')); PKb��\�X��^^;components/com_admin/sql/updates/mysql/2.5.4-2012-03-19.sqlnu�[���ALTER TABLE `#__languages` ADD COLUMN `access` integer unsigned NOT NULL default 0 AFTER `published`; ALTER TABLE `#__languages` ADD INDEX `idx_access` (`access`); UPDATE `#__categories` SET `extension` = 'com_users.notes' WHERE `extension` = 'com_users'; UPDATE `#__extensions` SET `enabled` = '1' WHERE `protected` = '1' AND `type` <> 'plugin'; PKb��\� ���;components/com_admin/sql/updates/mysql/3.2.2-2013-12-28.sqlnu�[���UPDATE `#__menu` SET `component_id` = (SELECT `extension_id` FROM `#__extensions` WHERE `element` = 'com_joomlaupdate') WHERE `link` = 'index.php?option=com_joomlaupdate'; PKb��\#�3 # #0components/com_admin/sql/updates/mysql/3.1.2.sqlnu�[���UPDATE `#__content_types` SET `table` = '{"special":{"dbtable":"#__content","key":"id","type":"Content","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE `type_title` = 'Article'; UPDATE `#__content_types` SET `table` = '{"special":{"dbtable":"#__contact_details","key":"id","type":"Contact","prefix":"ContactTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE `type_title` = 'Contact'; UPDATE `#__content_types` SET `table` = '{"special":{"dbtable":"#__newsfeeds","key":"id","type":"Newsfeed","prefix":"NewsfeedsTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE `type_title` = 'Newsfeed'; UPDATE `#__content_types` SET `table` = '{"special":{"dbtable":"#__users","key":"id","type":"User","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE `type_title` = 'User'; UPDATE `#__content_types` SET `table` = '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE `type_title` = 'Article Category'; UPDATE `#__content_types` SET `table` = '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE `type_title` = 'Contact Category'; UPDATE `#__content_types` SET `table` = '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE `type_title` = 'Newsfeeds Category'; UPDATE `#__content_types` SET `table` = '{"special":{"dbtable":"#__tags","key":"tag_id","type":"Tag","prefix":"TagsTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE `type_title` = 'Tag'; UPDATE `#__content_types` SET `field_mappings` = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"introtext", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"attribs", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"asset_id"}, "special": {"fulltext":"fulltext"}}' WHERE `type_title` = 'Article'; UPDATE `#__content_types` SET `field_mappings` = '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"address", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"image", "core_urls":"webpage", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special": {"con_position":"con_position","suburb":"suburb","state":"state","country":"country","postcode":"postcode","telephone":"telephone","fax":"fax","misc":"misc","email_to":"email_to","default_con":"default_con","user_id":"user_id","mobile":"mobile","sortname1":"sortname1","sortname2":"sortname2","sortname3":"sortname3"}}' WHERE `type_title` = 'Contact'; UPDATE `#__content_types` SET `field_mappings` = '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"link", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special": {"numarticles":"numarticles","cache_time":"cache_time","rtl":"rtl"}}' WHERE `type_title` = 'Newsfeed'; UPDATE `#__content_types` SET `field_mappings` = '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"null","core_alias":"username","core_created_time":"registerdate","core_modified_time":"lastvisitDate","core_body":"null", "core_hits":"null","core_publish_up":"null","core_publish_down":"null","access":"null", "core_params":"params", "core_featured":"null", "core_metadata":"null", "core_language":"null", "core_images":"null", "core_urls":"null", "core_version":"null", "core_ordering":"null", "core_metakey":"null", "core_metadesc":"null", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}, "special": {}}' WHERE `type_title` = 'User'; UPDATE `#__content_types` SET `field_mappings` = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}' WHERE `type_title` = 'Article Category'; UPDATE `#__content_types` SET `field_mappings` = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}' WHERE `type_title` = 'Contact Category'; UPDATE `#__content_types` SET `field_mappings` = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}' WHERE `type_title` = 'Newsfeeds Category'; UPDATE `#__content_types` SET `field_mappings` = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path"}}' WHERE `type_title` = 'Tag'; PKb��\?�ݿw w =components/com_admin/sql/updates/mysql/2.5.0-2011-12-21-2.sqlnu�[���CREATE TABLE IF NOT EXISTS `#__finder_links_terms0` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_terms1` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_terms2` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_terms3` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_terms4` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_terms5` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_terms6` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_terms7` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_terms8` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_terms9` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_termsa` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_termsb` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_termsc` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_termsd` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_termse` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links_termsf` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_taxonomy` ( `id` int(10) unsigned NOT NULL auto_increment, `parent_id` int(10) unsigned NOT NULL default '0', `title` varchar(255) NOT NULL, `state` tinyint(1) unsigned NOT NULL default '1', `access` tinyint(1) unsigned NOT NULL default '0', `ordering` tinyint(1) unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `parent_id` (`parent_id`), KEY `state` (`state`), KEY `ordering` (`ordering`), KEY `access` (`access`), KEY `idx_parent_published` (`parent_id`,`state`,`access`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_taxonomy_map` ( `link_id` int(10) unsigned NOT NULL, `node_id` int(10) unsigned NOT NULL, PRIMARY KEY (`link_id`,`node_id`), KEY `link_id` (`link_id`), KEY `node_id` (`node_id`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_terms` ( `term_id` int(10) unsigned NOT NULL auto_increment, `term` varchar(75) NOT NULL, `stem` varchar(75) NOT NULL, `common` tinyint(1) unsigned NOT NULL default '0', `phrase` tinyint(1) unsigned NOT NULL default '0', `weight` float unsigned NOT NULL default '0', `soundex` varchar(75) NOT NULL, `links` int(10) NOT NULL default '0', PRIMARY KEY (`term_id`), UNIQUE KEY `idx_term` (`term`), KEY `idx_term_phrase` (`term`,`phrase`), KEY `idx_stem_phrase` (`stem`,`phrase`), KEY `idx_soundex_phrase` (`soundex`,`phrase`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_terms_common` ( `term` varchar(75) NOT NULL, `language` varchar(3) NOT NULL, KEY `idx_word_lang` (`term`,`language`), KEY `idx_lang` (`language`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_tokens` ( `term` varchar(75) NOT NULL, `stem` varchar(75) NOT NULL, `common` tinyint(1) unsigned NOT NULL default '0', `phrase` tinyint(1) unsigned NOT NULL default '0', `weight` float unsigned NOT NULL default '1', `context` tinyint(1) unsigned NOT NULL default '2', KEY `idx_word` (`term`), KEY `idx_context` (`context`) ) ENGINE=MEMORY DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_tokens_aggregate` ( `term_id` int(10) unsigned NOT NULL, `map_suffix` char(1) NOT NULL, `term` varchar(75) NOT NULL, `stem` varchar(75) NOT NULL, `common` tinyint(1) unsigned NOT NULL default '0', `phrase` tinyint(1) unsigned NOT NULL default '0', `term_weight` float unsigned NOT NULL, `context` tinyint(1) unsigned NOT NULL default '2', `context_weight` float unsigned NOT NULL, `total_weight` float unsigned NOT NULL, KEY `token` (`term`), KEY `keyword_id` (`term_id`) ) ENGINE=MEMORY DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_types` ( `id` int(10) unsigned NOT NULL auto_increment, `title` varchar(100) NOT NULL, `mime` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `title` (`title`) ) DEFAULT CHARSET=utf8; PKb��\ݡ)�;components/com_admin/sql/updates/mysql/3.3.0-2014-02-16.sqlnu�[���ALTER TABLE `#__users` ADD COLUMN `requireReset` tinyint(4) NOT NULL DEFAULT 0 COMMENT 'Require user to reset password on next login' AFTER `otep`; PKb��\��ͪll0components/com_admin/sql/updates/mysql/3.1.4.sqlnu�[���INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (104, 'IDNA Convert', 'library', 'idna_convert', '', 0, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0); PKb��\���1::0components/com_admin/sql/updates/mysql/3.1.5.sqlnu�[���# Placeholder file for database changes for version 3.1.5 PKb��\lG���;components/com_admin/sql/updates/mysql/2.5.0-2011-12-16.sqlnu�[���CREATE TABLE IF NOT EXISTS `#__overrider` ( `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key', `constant` varchar(255) NOT NULL, `string` text NOT NULL, `file` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8;PKb��\H=���;components/com_admin/sql/updates/mysql/3.4.0-2014-08-24.sqlnu�[���INSERT INTO `#__postinstall_messages` (`extension_id`, `title_key`, `description_key`, `action_key`, `language_extension`, `language_client_id`, `type`, `action_file`, `action`, `condition_file`, `condition_method`, `version_introduced`, `enabled`) VALUES (700, 'COM_CPANEL_MSG_HTACCESS_TITLE', 'COM_CPANEL_MSG_HTACCESS_BODY', '', 'com_cpanel', 1, 'message', '', '', 'admin://components/com_admin/postinstall/htaccess.php', 'admin_postinstall_htaccess_condition', '3.4.0', 1); PKb��\sS�/;components/com_admin/sql/updates/mysql/3.4.0-2015-01-21.sqlnu�[���INSERT INTO `#__postinstall_messages` (`extension_id`, `title_key`, `description_key`, `action_key`, `language_extension`, `language_client_id`, `type`, `action_file`, `action`, `condition_file`, `condition_method`, `version_introduced`, `enabled`) VALUES (700, 'COM_CPANEL_MSG_ROBOTS_TITLE', 'COM_CPANEL_MSG_ROBOTS_BODY', '', 'com_cpanel', 1, 'message', '', '', '', '', '3.3.0', 1);PKb��\$.5�^^;components/com_admin/sql/updates/mysql/2.5.0-2012-01-14.sqlnu�[���ALTER TABLE `#__languages` CHANGE `sitename` `sitename` VARCHAR( 1024 ) NOT NULL DEFAULT ''; PKb��\� &&;components/com_admin/sql/updates/mysql/2.5.2-2012-03-05.sqlnu�[���# Dummy SQL file to set schema versionPKb��\(�--;components/com_admin/sql/updates/mysql/3.4.0-2014-09-16.sqlnu�[���ALTER TABLE `#__redirect_links` ADD COLUMN `header` smallint(3) NOT NULL DEFAULT 301; -- -- The following statement has to be disabled because it conflicts with -- a later change added with Joomla! 3.5.0 for long URLs in this table -- -- ALTER TABLE `#__redirect_links` MODIFY `new_url` varchar(255); PKb��\T�990components/com_admin/sql/updates/mysql/2.5.6.sqlnu�[���# Placeholder file for database changes for version 2.5.6PKb��\���990components/com_admin/sql/updates/mysql/3.1.1.sqlnu�[���# Placeholder file for database changes for version 3.1.1PKb��\Si&��;components/com_admin/sql/updates/mysql/3.2.2-2014-01-15.sqlnu�[���INSERT INTO `#__postinstall_messages` (`extension_id`, `title_key`, `description_key`, `action_key`, `language_extension`, `language_client_id`, `type`, `action_file`, `action`, `condition_file`, `condition_method`, `version_introduced`, `enabled`) VALUES (700, 'COM_CPANEL_MSG_PHPVERSION_TITLE', 'COM_CPANEL_MSG_PHPVERSION_BODY', '', 'com_cpanel', 1, 'message', '', '', 'admin://components/com_admin/postinstall/phpversion.php', 'admin_postinstall_phpversion_condition', '3.2.2', 1); PKb��\�ݟ�ff;components/com_admin/sql/updates/mysql/3.2.2-2014-01-18.sqlnu�[���/* Update updates version length */ ALTER TABLE `#__updates` MODIFY `version` varchar(32) DEFAULT ''; PKb��\�qU�``;components/com_admin/sql/updates/mysql/3.2.2-2014-01-23.sqlnu�[���INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (106, 'PHPass', 'library', 'phpass', '', 0, 1, 1, 1, '{"legacy":false,"name":"PHPass","type":"library","creationDate":"2004-2006","author":"Solar Designer","authorEmail":"solar@openwall.com","authorUrl":"http:\/\/www.openwall.com/phpass","version":"0.3","description":"LIB_PHPASS_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0); PKb��\��rlss;components/com_admin/sql/updates/mysql/3.2.2-2014-01-08.sqlnu�[���INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (403, 'plg_content_contact', 'plugin', 'contact', 'content', 0, 1, 1, 0, '', '', '', '', 0, '0000-00-00 00:00:00', 1, 0);PKb��\����nn0components/com_admin/sql/updates/mysql/3.0.3.sqlnu�[���ALTER TABLE `#__associations` CHANGE `id` `id` INT(11) NOT NULL COMMENT 'A reference to the associated item.';PKb��\UJ��C#C#0components/com_admin/sql/updates/mysql/3.0.0.sqlnu�[���ALTER TABLE `#__users` DROP INDEX `usertype`; ALTER TABLE `#__session` DROP INDEX `whosonline`; DROP TABLE IF EXISTS `#__update_categories`; ALTER TABLE `#__contact_details` DROP `imagepos`; ALTER TABLE `#__content` DROP COLUMN `title_alias`; ALTER TABLE `#__content` DROP COLUMN `sectionid`; ALTER TABLE `#__content` DROP COLUMN `mask`; ALTER TABLE `#__content` DROP COLUMN `parentid`; ALTER TABLE `#__newsfeeds` DROP COLUMN `filename`; ALTER TABLE `#__menu` DROP COLUMN `ordering`; ALTER TABLE `#__session` DROP COLUMN `usertype`; ALTER TABLE `#__users` DROP COLUMN `usertype`; ALTER TABLE `#__updates` DROP COLUMN `categoryid`; UPDATE `#__extensions` SET protected = 0 WHERE `name` = 'com_search' OR `name` = 'mod_articles_archive' OR `name` = 'mod_articles_latest' OR `name` = 'mod_banners' OR `name` = 'mod_feed' OR `name` = 'mod_footer' OR `name` = 'mod_users_latest' OR `name` = 'mod_articles_category' OR `name` = 'mod_articles_categories' OR `name` = 'plg_content_pagebreak' OR `name` = 'plg_content_pagenavigation' OR `name` = 'plg_content_vote' OR `name` = 'plg_editors_tinymce' OR `name` = 'plg_system_p3p' OR `name` = 'plg_user_contactcreator' OR `name` = 'plg_user_profile'; DELETE FROM `#__extensions` WHERE `extension_id` = 800; ALTER TABLE `#__assets` ENGINE=InnoDB; ALTER TABLE `#__associations` ENGINE=InnoDB; ALTER TABLE `#__banners` ENGINE=InnoDB; ALTER TABLE `#__banner_clients` ENGINE=InnoDB; ALTER TABLE `#__banner_tracks` ENGINE=InnoDB; ALTER TABLE `#__categories` ENGINE=InnoDB; ALTER TABLE `#__contact_details` ENGINE=InnoDB; ALTER TABLE `#__content` ENGINE=InnoDB; ALTER TABLE `#__content_frontpage` ENGINE=InnoDB; ALTER TABLE `#__content_rating` ENGINE=InnoDB; ALTER TABLE `#__core_log_searches` ENGINE=InnoDB; ALTER TABLE `#__extensions` ENGINE=InnoDB; ALTER TABLE `#__finder_filters` ENGINE=InnoDB; ALTER TABLE `#__finder_links` ENGINE=InnoDB; ALTER TABLE `#__finder_links_terms0` ENGINE=InnoDB; ALTER TABLE `#__finder_links_terms1` ENGINE=InnoDB; ALTER TABLE `#__finder_links_terms2` ENGINE=InnoDB; ALTER TABLE `#__finder_links_terms3` ENGINE=InnoDB; ALTER TABLE `#__finder_links_terms4` ENGINE=InnoDB; ALTER TABLE `#__finder_links_terms5` ENGINE=InnoDB; ALTER TABLE `#__finder_links_terms6` ENGINE=InnoDB; ALTER TABLE `#__finder_links_terms7` ENGINE=InnoDB; ALTER TABLE `#__finder_links_terms8` ENGINE=InnoDB; ALTER TABLE `#__finder_links_terms9` ENGINE=InnoDB; ALTER TABLE `#__finder_links_termsa` ENGINE=InnoDB; ALTER TABLE `#__finder_links_termsb` ENGINE=InnoDB; ALTER TABLE `#__finder_links_termsc` ENGINE=InnoDB; ALTER TABLE `#__finder_links_termsd` ENGINE=InnoDB; ALTER TABLE `#__finder_links_termse` ENGINE=InnoDB; ALTER TABLE `#__finder_links_termsf` ENGINE=InnoDB; ALTER TABLE `#__finder_taxonomy` ENGINE=InnoDB; ALTER TABLE `#__finder_taxonomy_map` ENGINE=InnoDB; ALTER TABLE `#__finder_terms` ENGINE=InnoDB; ALTER TABLE `#__finder_terms_common` ENGINE=InnoDB; ALTER TABLE `#__finder_types` ENGINE=InnoDB; ALTER TABLE `#__languages` ENGINE=InnoDB; ALTER TABLE `#__menu` ENGINE=InnoDB; ALTER TABLE `#__menu_types` ENGINE=InnoDB; ALTER TABLE `#__messages` ENGINE=InnoDB; ALTER TABLE `#__messages_cfg` ENGINE=InnoDB; ALTER TABLE `#__modules` ENGINE=InnoDB; ALTER TABLE `#__modules_menu` ENGINE=InnoDB; ALTER TABLE `#__newsfeeds` ENGINE=InnoDB; ALTER TABLE `#__overrider` ENGINE=InnoDB; ALTER TABLE `#__redirect_links` ENGINE=InnoDB; ALTER TABLE `#__schemas` ENGINE=InnoDB; ALTER TABLE `#__session` ENGINE=InnoDB; ALTER TABLE `#__template_styles` ENGINE=InnoDB; ALTER TABLE `#__updates` ENGINE=InnoDB; ALTER TABLE `#__update_sites` ENGINE=InnoDB; ALTER TABLE `#__update_sites_extensions` ENGINE=InnoDB; ALTER TABLE `#__users` ENGINE=InnoDB; ALTER TABLE `#__usergroups` ENGINE=InnoDB; ALTER TABLE `#__user_notes` ENGINE=InnoDB; ALTER TABLE `#__user_profiles` ENGINE=InnoDB; ALTER TABLE `#__user_usergroup_map` ENGINE=InnoDB; ALTER TABLE `#__viewlevels` ENGINE=InnoDB; ALTER TABLE `#__newsfeeds` ADD COLUMN `description` text NOT NULL; ALTER TABLE `#__newsfeeds` ADD COLUMN `version` int(10) unsigned NOT NULL DEFAULT '1'; ALTER TABLE `#__newsfeeds` ADD COLUMN `hits` int(10) unsigned NOT NULL DEFAULT '0'; ALTER TABLE `#__newsfeeds` ADD COLUMN `images` text NOT NULL; ALTER TABLE `#__contact_details` ADD COLUMN `version` int(10) unsigned NOT NULL DEFAULT '1'; ALTER TABLE `#__contact_details` ADD COLUMN `hits` int(10) unsigned NOT NULL DEFAULT '0'; ALTER TABLE `#__banners` ADD COLUMN `created_by` int(10) unsigned NOT NULL DEFAULT '0'; ALTER TABLE `#__banners` ADD COLUMN `created_by_alias` varchar(255) NOT NULL DEFAULT ''; ALTER TABLE `#__banners` ADD COLUMN `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'; ALTER TABLE `#__banners` ADD COLUMN `modified_by` int(10) unsigned NOT NULL DEFAULT '0'; ALTER TABLE `#__banners` ADD COLUMN `version` int(10) unsigned NOT NULL DEFAULT '1'; ALTER TABLE `#__categories` ADD COLUMN `version` int(10) unsigned NOT NULL DEFAULT '1'; UPDATE `#__assets` SET name=REPLACE( name, 'com_user.notes.category','com_users.category' ); UPDATE `#__categories` SET extension=REPLACE( extension, 'com_user.notes.category','com_users.category' ); ALTER TABLE `#__finder_terms` ADD COLUMN `language` char(3) NOT NULL DEFAULT ''; ALTER TABLE `#__finder_tokens` ADD COLUMN `language` char(3) NOT NULL DEFAULT ''; ALTER TABLE `#__finder_tokens_aggregate` ADD COLUMN `language` char(3) NOT NULL DEFAULT ''; INSERT INTO `#__extensions` (`name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES ('isis', 'template', 'isis', '', 1, 1, 1, 0, '{"name":"isis","type":"template","creationDate":"3\\/30\\/2012","author":"Kyle Ledbetter","copyright":"Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"","version":"1.0","description":"TPL_ISIS_XML_DESCRIPTION","group":""}', '{"templateColor":"","logoFile":""}', '', '', 0, '0000-00-00 00:00:00', 0, 0), ('protostar', 'template', 'protostar', '', 0, 1, 1, 0, '{"name":"protostar","type":"template","creationDate":"4\\/30\\/2012","author":"Kyle Ledbetter","copyright":"Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"","version":"1.0","description":"TPL_PROTOSTAR_XML_DESCRIPTION","group":""}', '{"templateColor":"","logoFile":"","googleFont":"1","googleFontName":"Open+Sans","fluidContainer":"0"}', '', '', 0, '0000-00-00 00:00:00', 0, 0), ('beez3', 'template', 'beez3', '', 0, 1, 1, 0, '{"legacy":false,"name":"beez3","type":"template","creationDate":"25 November 2009","author":"Angie Radtke","copyright":"Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.","authorEmail":"a.radtke@derauftritt.de","authorUrl":"http:\\/\\/www.der-auftritt.de","version":"1.6.0","description":"TPL_BEEZ3_XML_DESCRIPTION","group":""}', '{"wrapperSmall":"53","wrapperLarge":"72","sitetitle":"","sitedescription":"","navposition":"center","templatecolor":"nature"}', '', '', 0, '0000-00-00 00:00:00', 0, 0); INSERT INTO `#__template_styles` (`template`, `client_id`, `home`, `title`, `params`) VALUES ('protostar', 0, '0', 'protostar - Default', '{"templateColor":"","logoFile":"","googleFont":"1","googleFontName":"Open+Sans","fluidContainer":"0"}'), ('isis', 1, '1', 'isis - Default', '{"templateColor":"","logoFile":""}'), ('beez3', 0, '0', 'beez3 - Default', '{"wrapperSmall":53,"wrapperLarge":72,"logo":"","sitetitle":"","sitedescription":"","navposition":"center","bootstrap":"","templatecolor":"nature","headerImage":"","backgroundcolor":"#eee"}'); UPDATE `#__template_styles` SET home = (CASE WHEN (SELECT count FROM (SELECT count(`id`) AS count FROM `#__template_styles` WHERE home = '1' AND client_id = 1) as c) = 0 THEN '1' ELSE '0' END) WHERE template = 'isis' AND home != '1'; UPDATE `#__template_styles` SET home = 0 WHERE template = 'bluestork'; INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (315, 'mod_stats_admin', 'module', 'mod_stats_admin', '', 1, 1, 1, 0, '{"name":"mod_stats_admin","type":"module","creationDate":"September 2012","author":"Joomla! Project","copyright":"Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.0.0","description":"MOD_STATS_XML_DESCRIPTION","group":""}', '{"serverinfo":"0","siteinfo":"0","counter":"0","increase":"0","cache":"1","cache_time":"900","cachemode":"static"}', '', '', 0, '0000-00-00 00:00:00', 0, 0); UPDATE `#__update_sites` SET location = 'https://update.joomla.org/language/translationlist_3.xml' WHERE location = 'https://update.joomla.org/language/translationlist.xml' AND name = 'Accredited Joomla! Translations'; PKb��\� &&;components/com_admin/sql/updates/mysql/2.5.3-2012-03-13.sqlnu�[���# Dummy SQL file to set schema versionPKb��\f��]uu0components/com_admin/sql/updates/mysql/2.5.5.sqlnu�[���ALTER TABLE `#__redirect_links` ADD COLUMN `hits` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `comment`; ALTER TABLE `#__users` ADD COLUMN `lastResetTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Date of last password reset'; ALTER TABLE `#__users` ADD COLUMN `resetCount` int(11) NOT NULL DEFAULT '0' COMMENT 'Count of password resets since lastResetTime';PKb��\��ܶ990components/com_admin/sql/updates/mysql/3.0.1.sqlnu�[���# Placeholder file for database changes for version 3.0.1PKb��\�=�/;components/com_admin/sql/updates/mysql/2.5.0-2011-12-23.sqlnu�[���CREATE TABLE IF NOT EXISTS `#__finder_filters` ( `filter_id` int(10) unsigned NOT NULL auto_increment, `title` varchar(255) NOT NULL, `alias` varchar(255) NOT NULL, `state` tinyint(1) NOT NULL default '1', `created` datetime NOT NULL default '0000-00-00 00:00:00', `created_by` int(10) unsigned NOT NULL, `created_by_alias` varchar(255) NOT NULL, `modified` datetime NOT NULL default '0000-00-00 00:00:00', `modified_by` int(10) unsigned NOT NULL default '0', `checked_out` int(10) unsigned NOT NULL default '0', `checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00', `map_count` int(10) unsigned NOT NULL default '0', `data` text NOT NULL, `params` mediumtext, PRIMARY KEY (`filter_id`) ) DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__finder_links` ( `link_id` int(10) unsigned NOT NULL auto_increment, `url` varchar(255) NOT NULL, `route` varchar(255) NOT NULL, `title` varchar(255) default NULL, `description` varchar(255) default NULL, `indexdate` datetime NOT NULL default '0000-00-00 00:00:00', `md5sum` varchar(32) default NULL, `published` tinyint(1) NOT NULL default '1', `state` int(5) default '1', `access` int(5) default '0', `language` varchar(8) NOT NULL, `publish_start_date` datetime NOT NULL default '0000-00-00 00:00:00', `publish_end_date` datetime NOT NULL default '0000-00-00 00:00:00', `start_date` datetime NOT NULL default '0000-00-00 00:00:00', `end_date` datetime NOT NULL default '0000-00-00 00:00:00', `list_price` double unsigned NOT NULL default '0', `sale_price` double unsigned NOT NULL default '0', `type_id` int(11) NOT NULL, `object` mediumblob NOT NULL, PRIMARY KEY (`link_id`), KEY `idx_type` (`type_id`), KEY `idx_title` (`title`), KEY `idx_md5` (`md5sum`), KEY `idx_url` (`url`(75)), KEY `idx_published_list` (`published`,`state`,`access`,`publish_start_date`,`publish_end_date`,`list_price`), KEY `idx_published_sale` (`published`,`state`,`access`,`publish_start_date`,`publish_end_date`,`sale_price`) ) DEFAULT CHARSET=utf8; PKb��\���;components/com_admin/sql/updates/mysql/3.4.0-2014-09-01.sqlnu�[���INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (801, 'weblinks', 'package', 'pkg_weblinks', '', 0, 1, 1, 0, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0); INSERT INTO `#__update_sites` (`name`, `type`, `location`, `enabled`) VALUES ('Weblinks Update Site', 'extension', 'https://raw.githubusercontent.com/joomla-extensions/weblinks/master/manifest.xml', 1); INSERT INTO `#__update_sites_extensions` (`update_site_id`, `extension_id`) VALUES ((SELECT `update_site_id` FROM `#__update_sites` WHERE `name` = 'Weblinks Update Site'), 801); PKb��\�����;components/com_admin/sql/updates/mysql/3.2.2-2013-12-22.sqlnu�[���ALTER TABLE `#__update_sites` ADD COLUMN `extra_query` VARCHAR(1000) DEFAULT ''; ALTER TABLE `#__updates` ADD COLUMN `extra_query` VARCHAR(1000) DEFAULT ''; PKb��\����;components/com_admin/sql/updates/mysql/3.2.3-2014-02-20.sqlnu�[���UPDATE `#__extensions` ext1, `#__extensions` ext2 SET ext1.`params` = ext2.`params` WHERE ext1.`name` = 'plg_authentication_cookie' AND ext2.`name` = 'plg_system_remember'; PKb��\�6��;components/com_admin/sql/updates/mysql/2.5.4-2012-03-18.sqlnu�[���INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (28, 'com_joomlaupdate', 'component', 'com_joomlaupdate', '', 1, 1, 0, 1, '{"legacy":false,"name":"com_joomlaupdate","type":"component","creationDate":"February 2012","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"2.5.2","description":"COM_JOOMLAUPDATE_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0); INSERT INTO `#__menu` (`menutype`, `title`, `alias`, `note`, `path`, `link`, `type`, `published`, `parent_id`, `level`, `component_id`, `ordering`, `checked_out`, `checked_out_time`, `browserNav`, `access`, `img`, `template_style_id`, `params`, `lft`, `rgt`, `home`, `language`, `client_id`) VALUES ('menu', 'com_joomlaupdate', 'Joomla! Update', '', 'Joomla! Update', 'index.php?option=com_joomlaupdate', 'component', 0, 1, 1, 28, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:joomlaupdate', 0, '', 41, 42, 0, '*', 1); PKb��\a���;components/com_admin/sql/updates/mysql/2.5.0-2011-12-19.sqlnu�[���CREATE TABLE IF NOT EXISTS `#__user_notes` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(10) unsigned NOT NULL DEFAULT '0', `catid` int(10) unsigned NOT NULL DEFAULT '0', `subject` varchar(100) NOT NULL DEFAULT '', `body` text NOT NULL, `state` tinyint(3) NOT NULL DEFAULT '0', `checked_out` int(10) unsigned NOT NULL DEFAULT '0', `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created_user_id` int(10) unsigned NOT NULL DEFAULT '0', `created_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_user_id` int(10) unsigned NOT NULL, `modified_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `review_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `publish_up` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `publish_down` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_category_id` (`catid`) ) DEFAULT CHARSET=utf8; PKb��\��$�M�M0components/com_admin/sql/updates/mysql/3.2.0.sqlnu�[���/* Core 3.2 schema updates */ ALTER TABLE `#__content_types` ADD COLUMN `content_history_options` VARCHAR(5120) NOT NULL COMMENT 'JSON string for com_contenthistory options'; UPDATE `#__content_types` SET `content_history_options` = '{"formFile":"administrator\\/components\\/com_content\\/models\\/forms\\/article.xml", "hideFields":["asset_id","checked_out","checked_out_time","version"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"],"convertToInt":["publish_up", "publish_down", "featured", "ordering"],"displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ]}' WHERE `type_alias` = 'com_content.article'; UPDATE `#__content_types` SET `content_history_options` = '{"formFile":"administrator\\/components\\/com_contact\\/models\\/forms\\/contact.xml","hideFields":["default_con","checked_out","checked_out_time","version","xreference"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"],"convertToInt":["publish_up", "publish_down", "featured", "ordering"], "displayLookup":[ {"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ] }' WHERE `type_alias` = 'com_contact.contact'; UPDATE `#__content_types` SET `content_history_options` = '{"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}' WHERE `type_alias` IN ('com_content.category', 'com_contact.category', 'com_newsfeeds.category'); UPDATE `#__content_types` SET `content_history_options` = '{"formFile":"administrator\\/components\\/com_newsfeeds\\/models\\/forms\\/newsfeed.xml","hideFields":["asset_id","checked_out","checked_out_time","version"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"],"convertToInt":["publish_up", "publish_down", "featured", "ordering"],"displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}' WHERE `type_alias` = 'com_newsfeeds.newsfeed'; UPDATE `#__content_types` SET `content_history_options` = '{"formFile":"administrator\\/components\\/com_tags\\/models\\/forms\\/tag.xml", "hideFields":["checked_out","checked_out_time","version", "lft", "rgt", "level", "path", "urls", "publish_up", "publish_down"],"ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"}, {"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}' WHERE `type_alias` = 'com_tags.tag'; INSERT INTO `#__content_types` (`type_title`, `type_alias`, `table`, `rules`, `field_mappings`, `router`, `content_history_options`) VALUES ('Banner', 'com_banners.banner', '{"special":{"dbtable":"#__banners","key":"id","type":"Banner","prefix":"BannersTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"null","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"link", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"null", "asset_id":"null"}, "special":{"imptotal":"imptotal", "impmade":"impmade", "clicks":"clicks", "clickurl":"clickurl", "custombannercode":"custombannercode", "cid":"cid", "purchase_type":"purchase_type", "track_impressions":"track_impressions", "track_clicks":"track_clicks"}}', '', '{"formFile":"administrator\\/components\\/com_banners\\/models\\/forms\\/banner.xml", "hideFields":["checked_out","checked_out_time","version", "reset"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "imptotal", "impmade", "reset"], "convertToInt":["publish_up", "publish_down", "ordering"], "displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}, {"sourceColumn":"cid","targetTable":"#__banner_clients","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}'), ('Banners Category', 'com_banners.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}', '', '{"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"], "convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}'), ('Banner Client', 'com_banners.client', '{"special":{"dbtable":"#__banner_clients","key":"id","type":"Client","prefix":"BannersTable"}}', '', '', '', '{"formFile":"administrator\\/components\\/com_banners\\/models\\/forms\\/client.xml", "hideFields":["checked_out","checked_out_time"], "ignoreChanges":["checked_out", "checked_out_time"], "convertToInt":[], "displayLookup":[]}'), ('User Notes', 'com_users.note', '{"special":{"dbtable":"#__user_notes","key":"id","type":"Note","prefix":"UsersTable"}}', '', '', '', '{"formFile":"administrator\\/components\\/com_users\\/models\\/forms\\/note.xml", "hideFields":["checked_out","checked_out_time", "publish_up", "publish_down"],"ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time"], "convertToInt":["publish_up", "publish_down"],"displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}, {"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}'), ('User Notes Category', 'com_users.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}', '', '{"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", "hideFields":["checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"], "convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}'); UPDATE `#__extensions` SET `params` = '{"template_positions_display":"0","upload_limit":"2","image_formats":"gif,bmp,jpg,jpeg,png","source_formats":"txt,less,ini,xml,js,php,css","font_formats":"woff,ttf,otf","compressed_formats":"zip"}' WHERE `extension_id` = 20; UPDATE `#__extensions` SET `params` = '{"lineNumbers":"1","lineWrapping":"1","matchTags":"1","matchBrackets":"1","marker-gutter":"1","autoCloseTags":"1","autoCloseBrackets":"1","autoFocus":"1","theme":"default","tabmode":"indent"}' WHERE `extension_id` = 410; INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (30, 'com_contenthistory', 'component', 'com_contenthistory', '', 1, 1, 1, 0, '{"name":"com_contenthistory","type":"component","creationDate":"May 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.\\n\\t","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.2.0","description":"COM_CONTENTHISTORY_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (31, 'com_ajax', 'component', 'com_ajax', '', 1, 1, 1, 0, '{"name":"com_ajax","type":"component","creationDate":"August 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.2.0","description":"COM_AJAX_DESC","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (32, 'com_postinstall', 'component', 'com_postinstall', '', 1, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0), (105, 'FOF', 'library', 'fof', '', 0, 1, 1, 1, '{"legacy":false,"name":"FOF","type":"library","creationDate":"2013-10-08","author":"Nicholas K. Dionysopoulos \/ Akeeba Ltd","copyright":"(C)2011-2013 Nicholas K. Dionysopoulos","authorEmail":"nicholas@akeebabackup.com","authorUrl":"https:\/\/www.akeebabackup.com","version":"2.1.rc4","description":"Framework-on-Framework (FOF) - A rapid component development framework for Joomla!","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (448, 'plg_twofactorauth_totp', 'plugin', 'totp', 'twofactorauth', 0, 0, 1, 0, '{"name":"plg_twofactorauth_totp","type":"plugin","creationDate":"August 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.2.0","description":"PLG_TWOFACTORAUTH_TOTP_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (449, 'plg_authentication_cookie', 'plugin', 'cookie', 'authentication', 0, 1, 1, 0, '{"name":"plg_authentication_cookie","type":"plugin","creationDate":"July 2013","author":"Joomla! Project","copyright":"Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.0.0","description":"PLG_AUTH_COOKIE_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (450, 'plg_twofactorauth_yubikey', 'plugin', 'yubikey', 'twofactorauth', 0, 0, 1, 0, '{"name":"plg_twofactorauth_yubikey","type":"plugin","creationDate":"Se[ptember 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.2.0","description":"PLG_TWOFACTORAUTH_YUBIKEY_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0); INSERT INTO `#__menu` (`menutype`, `title`, `alias`, `note`, `path`, `link`, `type`, `published`, `parent_id`, `level`, `component_id`, `checked_out`, `checked_out_time`, `browserNav`, `access`, `img`, `template_style_id`, `params`, `lft`, `rgt`, `home`, `language`, `client_id`) VALUES ('main', 'com_postinstall', 'Post-installation messages', '', 'Post-installation messages', 'index.php?option=com_postinstall', 'component', 0, 1, 1, 32, 0, '0000-00-00 00:00:00', 0, 1, 'class:postinstall', 0, '', 45, 46, 0, '*', 1); ALTER TABLE `#__modules` ADD COLUMN `asset_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the #__assets table.' AFTER `id`; CREATE TABLE `#__postinstall_messages` ( `postinstall_message_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `extension_id` bigint(20) NOT NULL DEFAULT '700' COMMENT 'FK to #__extensions', `title_key` varchar(255) NOT NULL DEFAULT '' COMMENT 'Lang key for the title', `description_key` varchar(255) NOT NULL DEFAULT '' COMMENT 'Lang key for description', `action_key` varchar(255) NOT NULL DEFAULT '', `language_extension` varchar(255) NOT NULL DEFAULT 'com_postinstall' COMMENT 'Extension holding lang keys', `language_client_id` tinyint(3) NOT NULL DEFAULT '1', `type` varchar(10) NOT NULL DEFAULT 'link' COMMENT 'Message type - message, link, action', `action_file` varchar(255) DEFAULT '' COMMENT 'RAD URI to the PHP file containing action method', `action` varchar(255) DEFAULT '' COMMENT 'Action method name or URL', `condition_file` varchar(255) DEFAULT NULL COMMENT 'RAD URI to file holding display condition method', `condition_method` varchar(255) DEFAULT NULL COMMENT 'Display condition method, must return boolean', `version_introduced` varchar(50) NOT NULL DEFAULT '3.2.0' COMMENT 'Version when this message was introduced', `enabled` tinyint(3) NOT NULL DEFAULT '1', PRIMARY KEY (`postinstall_message_id`) ) DEFAULT CHARSET=utf8; INSERT INTO `#__postinstall_messages` (`extension_id`, `title_key`, `description_key`, `action_key`, `language_extension`, `language_client_id`, `type`, `action_file`, `action`, `condition_file`, `condition_method`, `version_introduced`, `enabled`) VALUES (700, 'PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_TITLE', 'PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_BODY', 'PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_ACTION', 'plg_twofactorauth_totp', 1, 'action', 'site://plugins/twofactorauth/totp/postinstall/actions.php', 'twofactorauth_postinstall_action', 'site://plugins/twofactorauth/totp/postinstall/actions.php', 'twofactorauth_postinstall_condition', '3.2.0', 1), (700, 'COM_CPANEL_MSG_EACCELERATOR_TITLE', 'COM_CPANEL_MSG_EACCELERATOR_BODY', 'COM_CPANEL_MSG_EACCELERATOR_BUTTON', 'com_cpanel', 1, 'action', 'admin://components/com_admin/postinstall/eaccelerator.php', 'admin_postinstall_eaccelerator_action', 'admin://components/com_admin/postinstall/eaccelerator.php', 'admin_postinstall_eaccelerator_condition', '3.2.0', 1); CREATE TABLE IF NOT EXISTS `#__ucm_history` ( `version_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `ucm_item_id` int(10) unsigned NOT NULL, `ucm_type_id` int(10) unsigned NOT NULL, `version_note` varchar(255) NOT NULL DEFAULT '' COMMENT 'Optional version name', `save_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `editor_user_id` int(10) unsigned NOT NULL DEFAULT '0', `character_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Number of characters in this version.', `sha1_hash` varchar(50) NOT NULL DEFAULT '' COMMENT 'SHA1 hash of the version_data column.', `version_data` mediumtext NOT NULL COMMENT 'json-encoded string of version data', `keep_forever` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0=auto delete; 1=keep', PRIMARY KEY (`version_id`), KEY `idx_ucm_item_id` (`ucm_type_id`,`ucm_item_id`), KEY `idx_save_date` (`save_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `#__users` ADD COLUMN `otpKey` varchar(1000) NOT NULL DEFAULT '' COMMENT 'Two factor authentication encrypted keys'; ALTER TABLE `#__users` ADD COLUMN `otep` varchar(1000) NOT NULL DEFAULT '' COMMENT 'One time emergency passwords'; CREATE TABLE IF NOT EXISTS `#__user_keys` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` varchar(255) NOT NULL, `token` varchar(255) NOT NULL, `series` varchar(255) NOT NULL, `invalid` tinyint(4) NOT NULL, `time` varchar(200) NOT NULL, `uastring` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `series` (`series`), UNIQUE KEY `series_2` (`series`), UNIQUE KEY `series_3` (`series`), KEY `user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /* Update bad params for two cpanel modules */ UPDATE `#__modules` SET `params` = REPLACE(`params`, '"bootstrap_size":"1"', '"bootstrap_size":"0"') WHERE `id` IN (3,4); PKb��\O�K�F�F0components/com_admin/sql/updates/mysql/3.1.0.sqlnu�[���-- -- Table structure for table `#__content_types` -- CREATE TABLE IF NOT EXISTS `#__content_types` ( `type_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `type_title` varchar(255) NOT NULL DEFAULT '', `type_alias` varchar(255) NOT NULL DEFAULT '', `table` varchar(255) NOT NULL DEFAULT '', `rules` text NOT NULL, `field_mappings` text NOT NULL, `router` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`type_id`), KEY `idx_alias` (`type_alias`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10000; -- -- Dumping data for table `#__content_types` -- INSERT INTO `#__content_types` (`type_id`, `type_title`, `type_alias`, `table`, `rules`, `field_mappings`,`router`) VALUES (1, 'Article', 'com_content.article', '{"special":{"dbtable":"#__content","key":"id","type":"Content","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"introtext", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"attribs", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"asset_id"}], "special": [{"fulltext":"fulltext"}]}','ContentHelperRoute::getArticleRoute'), (2, 'Contact', 'com_contact.contact', '{"special":{"dbtable":"#__contact_details","key":"id","type":"Contact","prefix":"ContactTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"address", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"image", "core_urls":"webpage", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}], "special": [{"con_position":"con_position","suburb":"suburb","state":"state","country":"country","postcode":"postcode","telephone":"telephone","fax":"fax","misc":"misc","email_to":"email_to","default_con":"default_con","user_id":"user_id","mobile":"mobile","sortname1":"sortname1","sortname2":"sortname2","sortname3":"sortname3"}]}','ContactHelperRoute::getContactRoute'), (3, 'Newsfeed', 'com_newsfeeds.newsfeed', '{"special":{"dbtable":"#__newsfeeds","key":"id","type":"Newsfeed","prefix":"NewsfeedsTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"link", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}], "special": [{"numarticles":"numarticles","cache_time":"cache_time","rtl":"rtl"}]}','NewsfeedsHelperRoute::getNewsfeedRoute'), (4, 'User', 'com_users.user', '{"special":{"dbtable":"#__users","key":"id","type":"User","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"name","core_state":"null","core_alias":"username","core_created_time":"registerdate","core_modified_time":"lastvisitDate","core_body":"null", "core_hits":"null","core_publish_up":"null","core_publish_down":"null","access":"null", "core_params":"params", "core_featured":"null", "core_metadata":"null", "core_language":"null", "core_images":"null", "core_urls":"null", "core_version":"null", "core_ordering":"null", "core_metakey":"null", "core_metadesc":"null", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}], "special": [{}]}','UsersHelperRoute::getUserRoute'), (5, 'Article Category', 'com_content.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}]}','ContentHelperRoute::getCategoryRoute'), (6, 'Contact Category', 'com_contact.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}]}','ContactHelperRoute::getCategoryRoute'), (7, 'Newsfeeds Category', 'com_newsfeeds.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}]}','NewsfeedsHelperRoute::getCategoryRoute'), (8, 'Tag', 'com_tags.tag', '{"special":{"dbtable":"#__tags","key":"tag_id","type":"Tag","prefix":"TagsTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path"}]}','TagsHelperRoute::getTagRoute'); CREATE TABLE IF NOT EXISTS `#__contentitem_tag_map` ( `type_alias` varchar(255) NOT NULL DEFAULT '', `core_content_id` int(10) unsigned NOT NULL COMMENT 'PK from the core content table', `content_item_id` int(11) NOT NULL COMMENT 'PK from the content type table', `tag_id` int(10) unsigned NOT NULL COMMENT 'PK from the tag table', `tag_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Date of most recent save for this tag-item', `type_id` mediumint(8) NOT NULL COMMENT 'PK from the content_type table', UNIQUE KEY `uc_ItemnameTagid` (`type_id`,`content_item_id`,`tag_id`), KEY `idx_tag_type` (`tag_id`,`type_id`), KEY `idx_date_id` (`tag_date`,`tag_id`), KEY `idx_tag` (`tag_id`), KEY `idx_type` (`type_id`), KEY `idx_core_content_id` (`core_content_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Maps items from content tables to tags'; CREATE TABLE IF NOT EXISTS `#__tags` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `parent_id` int(10) unsigned NOT NULL DEFAULT '0', `lft` int(11) NOT NULL DEFAULT '0', `rgt` int(11) NOT NULL DEFAULT '0', `level` int(10) unsigned NOT NULL DEFAULT '0', `path` varchar(255) NOT NULL DEFAULT '', `title` varchar(255) NOT NULL, `alias` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', `note` varchar(255) NOT NULL DEFAULT '', `description` mediumtext NOT NULL, `published` tinyint(1) NOT NULL DEFAULT '0', `checked_out` int(11) unsigned NOT NULL DEFAULT '0', `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `access` int(10) unsigned NOT NULL DEFAULT '0', `params` text NOT NULL, `metadesc` varchar(1024) NOT NULL COMMENT 'The meta description for the page.', `metakey` varchar(1024) NOT NULL COMMENT 'The meta keywords for the page.', `metadata` varchar(2048) NOT NULL COMMENT 'JSON encoded metadata properties.', `created_user_id` int(10) unsigned NOT NULL DEFAULT '0', `created_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created_by_alias` varchar(255) NOT NULL DEFAULT '', `modified_user_id` int(10) unsigned NOT NULL DEFAULT '0', `modified_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `images` text NOT NULL, `urls` text NOT NULL, `hits` int(10) unsigned NOT NULL DEFAULT '0', `language` char(7) NOT NULL, `version` int(10) unsigned NOT NULL DEFAULT '1', `publish_up` datetime NOT NULL default '0000-00-00 00:00:00', `publish_down` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`), KEY `tag_idx` (`published`,`access`), KEY `idx_access` (`access`), KEY `idx_checkout` (`checked_out`), KEY `idx_path` (`path`), KEY `idx_left_right` (`lft`,`rgt`), KEY `idx_alias` (`alias`), KEY `idx_language` (`language`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Dumping data for table `#__tags` -- INSERT INTO `#__tags` (`id`, `parent_id`, `lft`, `rgt`, `level`, `path`, `title`, `alias`, `note`, `description`, `published`, `checked_out`, `checked_out_time`, `access`, `params`, `metadesc`, `metakey`, `metadata`, `created_user_id`, `created_time`,`created_by_alias`, `modified_user_id`, `modified_time`, `images`, `urls`, `hits`, `language`, `version`) VALUES (1, 0, 0, 1, 0, '', 'ROOT', 'root', '', '', 1, 0, '0000-00-00 00:00:00', 1, '{}', '', '', '', '', '2011-01-01 00:00:01','', 0, '0000-00-00 00:00:00', '', '', 0, '*', 1); -- -- Table structure for table `#__ucm_base` -- CREATE TABLE IF NOT EXISTS `#__ucm_base` ( `ucm_id` int(10) unsigned NOT NULL, `ucm_item_id` int(10) NOT NULL, `ucm_type_id` int(11) NOT NULL, `ucm_language_id` int(11) NOT NULL, PRIMARY KEY (`ucm_id`), KEY `idx_ucm_item_id` (`ucm_item_id`), KEY `idx_ucm_type_id` (`ucm_type_id`), KEY `idx_ucm_language_id` (`ucm_language_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__ucm_content` ( `core_content_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `core_type_alias` varchar(255) NOT NULL DEFAULT '' COMMENT 'FK to the content types table', `core_title` varchar(255) NOT NULL, `core_alias` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', `core_body` mediumtext NOT NULL, `core_state` tinyint(1) NOT NULL DEFAULT '0', `core_checked_out_time` varchar(255) NOT NULL DEFAULT '', `core_checked_out_user_id` int(10) unsigned NOT NULL DEFAULT '0', `core_access` int(10) unsigned NOT NULL DEFAULT '0', `core_params` text NOT NULL, `core_featured` tinyint(4) unsigned NOT NULL DEFAULT '0', `core_metadata` varchar(2048) NOT NULL COMMENT 'JSON encoded metadata properties.', `core_created_user_id` int(10) unsigned NOT NULL DEFAULT '0', `core_created_by_alias` varchar(255) NOT NULL DEFAULT '', `core_created_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `core_modified_user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Most recent user that modified', `core_modified_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `core_language` char(7) NOT NULL, `core_publish_up` datetime NOT NULL, `core_publish_down` datetime NOT NULL, `core_content_item_id` int(10) unsigned COMMENT 'ID from the individual type table', `asset_id` int(10) unsigned COMMENT 'FK to the #__assets table.', `core_images` text NOT NULL, `core_urls` text NOT NULL, `core_hits` int(10) unsigned NOT NULL DEFAULT '0', `core_version` int(10) unsigned NOT NULL DEFAULT '1', `core_ordering` int(11) NOT NULL DEFAULT '0', `core_metakey` text NOT NULL, `core_metadesc` text NOT NULL, `core_catid` int(10) unsigned NOT NULL DEFAULT '0', `core_xreference` varchar(50) NOT NULL COMMENT 'A reference to enable linkages to external data sets.', `core_type_id` int(10) unsigned, PRIMARY KEY (`core_content_id`), KEY `tag_idx` (`core_state`,`core_access`), KEY `idx_access` (`core_access`), KEY `idx_alias` (`core_alias`), KEY `idx_language` (`core_language`), KEY `idx_title` (`core_title`), KEY `idx_modified_time` (`core_modified_time`), KEY `idx_created_time` (`core_created_time`), KEY `idx_content_type` (`core_type_alias`), KEY `idx_core_modified_user_id` (`core_modified_user_id`), KEY `idx_core_checked_out_user_id` (`core_checked_out_user_id`), KEY `idx_core_created_user_id` (`core_created_user_id`), KEY `idx_core_type_id` (`core_type_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Contains core content data in name spaced fields'; INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (29, 'com_tags', 'component', 'com_tags', '', 1, 1, 1, 1, '{"legacy":false,"name":"com_tags","type":"component","creationDate":"March 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.0.0","description":"COM_TAGS_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (316, 'mod_tags_popular', 'module', 'mod_tags_popular', '', 0, 1, 1, 0, '{"name":"mod_tags_popular","type":"module","creationDate":"January 2013","author":"Joomla! Project","copyright":"Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.1.0","description":"MOD_TAGS_POPULAR_XML_DESCRIPTION","group":""}', '{"maximum":"5","timeframe":"alltime","owncache":"1"}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (317, 'mod_tags_similar', 'module', 'mod_tags_similar', '', 0, 1, 1, 0, '{"name":"mod_tags_similar","type":"module","creationDate":"January 2013","author":"Joomla! Project","copyright":"Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.1.0","description":"MOD_TAGS_SIMILAR_XML_DESCRIPTION","group":""}', '{"maximum":"5","matchtype":"any","owncache":"1"}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (447, 'plg_finder_tags', 'plugin', 'tags', 'finder', 0, 1, 1, 0, '{"name":"plg_finder_tags","type":"plugin","creationDate":"February 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.0.0","description":"PLG_FINDER_TAGS_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0); INSERT INTO `#__menu` (`menutype`, `title`, `alias`, `note`, `path`, `link`, `type`, `published`, `parent_id`, `level`, `component_id`, `checked_out`, `checked_out_time`, `browserNav`, `access`, `img`, `template_style_id`, `params`, `lft`, `rgt`, `home`, `language`, `client_id`) VALUES ('main', 'com_tags', 'Tags', '', 'Tags', 'index.php?option=com_tags', 'component', 0, 1, 1, 29, 0, '0000-00-00 00:00:00', 0, 1, 'class:tags', 0, '', 45, 46, 0, '', 1); PKb��\��<YY;components/com_admin/sql/updates/mysql/2.5.0-2011-12-06.sqlnu�[���INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES (437, 'plg_quickicon_joomlaupdate', 'plugin', 'joomlaupdate', 'quickicon', 0, 1, 1, 1, '', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0), (438, 'plg_quickicon_extensionupdate', 'plugin', 'extensionupdate', 'quickicon', 0, 1, 1, 1, '', '{}', '', '', 0, '0000-00-00 00:00:00', 0, 0); ALTER TABLE `#__update_sites` ADD COLUMN `last_check_timestamp` bigint(20) DEFAULT '0' AFTER `enabled`; REPLACE INTO `#__update_sites` VALUES (1, 'Joomla Core', 'collection', 'https://update.joomla.org/core/list.xml', 1, 0), (2, 'Joomla Extension Directory', 'collection', 'https://update.joomla.org/jed/list.xml', 1, 0); PKb��\_�88;components/com_admin/sql/updates/mysql/3.4.0-2014-10-20.sqlnu�[���DELETE FROM `#__extensions` WHERE `extension_id` = 100; PKb��\y�#0components/com_admin/sql/updates/mysql/2.5.7.sqlnu�[���INSERT INTO `#__update_sites` (`name`, `type`, `location`, `enabled`, `last_check_timestamp`) VALUES('Accredited Joomla! Translations','collection','https://update.joomla.org/language/translationlist.xml',1,0);INSERT INTO `#__update_sites_extensions` (`update_site_id`, `extension_id`) VALUES(LAST_INSERT_ID(),600);UPDATE `#__assets` SET name=REPLACE( name, 'com_user.notes.category','com_users.category' );UPDATE `#__categories` SET extension=REPLACE( extension, 'com_user.notes.category','com_users.category' );PKb��\BU��>components/com_admin/sql/updates/sqlazure/3.4.0-2015-02-26.sqlnu�[���INSERT INTO [#__postinstall_messages] ([extension_id], [title_key], [description_key], [action_key], [language_extension], [language_client_id], [type], [action_file], [action], [condition_file], [condition_method], [version_introduced], [enabled]) SELECT 700, 'COM_CPANEL_MSG_LANGUAGEACCESS340_TITLE', 'COM_CPANEL_MSG_LANGUAGEACCESS340_BODY', '', 'com_cpanel', 1, 'message', '', '', 'admin://components/com_admin/postinstall/languageaccess340.php', 'admin_postinstall_languageaccess340_condition', '3.4.1', 1; PKb��\)0�g::3components/com_admin/sql/updates/sqlazure/3.1.3.sqlnu�[���# Placeholder file for database changes for version 3.1.3 PKb��\��';��>components/com_admin/sql/updates/sqlazure/3.4.0-2014-12-03.sqlnu�[���UPDATE [#__extensions] SET [protected] = '0' WHERE [name] = 'plg_editors-xtd_article' AND [type] = 'plugin' AND [element] = 'article' AND [folder] = 'editors-xtd'; PKb��\_a��VV>components/com_admin/sql/updates/sqlazure/3.3.4-2014-08-03.sqlnu�[���ALTER TABLE [#__user_profiles] ALTER COLUMN [profile_value] [nvarchar](max) NOT NULL; PKb��\s��O��>components/com_admin/sql/updates/sqlazure/3.3.0-2014-04-02.sqlnu�[���SET IDENTITY_INSERT [#__extensions] ON; INSERT INTO [#__extensions] ([extension_id], [name], [type], [element], [folder], [client_id], [enabled], [access], [protected], [manifest_cache], [params], [custom_data], [system_data], [checked_out], [checked_out_time], [ordering], [state]) SELECT 451, 'plg_search_tags', 'plugin', 'tags', 'search', 0, 0, 1, 0, '', '{"search_limit":"50","show_tagged_items":"1"}', '', '', 0, '1900-01-01 00:00:00', 0, 0; SET IDENTITY_INSERT [#__extensions] OFF; PKb��\��/993components/com_admin/sql/updates/sqlazure/3.0.2.sqlnu�[���# Placeholder file for database changes for version 3.0.2PKb��\i��hh3components/com_admin/sql/updates/sqlazure/3.2.1.sqlnu�[���DELETE FROM [#__postinstall_messages] WHERE [title_key] = 'PLG_USER_JOOMLA_POSTINSTALL_STRONGPW_TITLE'; PKb��\�X(��>components/com_admin/sql/updates/sqlazure/3.3.6-2014-09-30.sqlnu�[���INSERT INTO [#__update_sites] ([name], [type], [location], [enabled]) SELECT 'Joomla! Update Component Update Site', 'extension', 'https://update.joomla.org/core/extensions/com_joomlaupdate.xml', 1; INSERT INTO [#__update_sites_extensions] ([update_site_id], [extension_id]) SELECT (SELECT [update_site_id] FROM [#__update_sites] WHERE [name] = 'Joomla! Update Component Update Site'), (SELECT [extension_id] FROM [#__extensions] WHERE [name] = 'com_joomlaupdate'); PKb��\S-�YY>components/com_admin/sql/updates/sqlazure/2.5.4-2012-03-19.sqlnu�[���ALTER TABLE [#__languages] ADD [access] INTEGER CONSTRAINT DF_languages_access DEFAULT '' NOT NULL CREATE UNIQUE INDEX idx_access ON [#__languages] (access); UPDATE [#__categories] SET [extension] = 'com_users.notes' WHERE [extension] = 'com_users'; UPDATE [#__extensions] SET [enabled] = '1' WHERE [protected] = '1' AND [type] <> 'plugin'; PKb��\t�&Ӭ�>components/com_admin/sql/updates/sqlazure/3.2.2-2013-12-28.sqlnu�[���UPDATE [#__menu] SET [component_id] = (SELECT [extension_id] FROM [#__extensions] WHERE [element] = 'com_joomlaupdate') WHERE [link] = 'index.php?option=com_joomlaupdate'; PKb��\�c� # #3components/com_admin/sql/updates/sqlazure/3.1.2.sqlnu�[���UPDATE [#__content_types] SET [table] = '{"special":{"dbtable":"#__content","key":"id","type":"Content","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE [type_title] = 'Article'; UPDATE [#__content_types] SET [table] = '{"special":{"dbtable":"#__contact_details","key":"id","type":"Contact","prefix":"ContactTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE [type_title] = 'Contact'; UPDATE [#__content_types] SET [table] = '{"special":{"dbtable":"#__newsfeeds","key":"id","type":"Newsfeed","prefix":"NewsfeedsTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE [type_title] = 'Newsfeed'; UPDATE [#__content_types] SET [table] = '{"special":{"dbtable":"#__users","key":"id","type":"User","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE [type_title] = 'User'; UPDATE [#__content_types] SET [table] = '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE [type_title] = 'Article Category'; UPDATE [#__content_types] SET [table] = '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE [type_title] = 'Contact Category'; UPDATE [#__content_types] SET [table] = '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE [type_title] = 'Newsfeeds Category'; UPDATE [#__content_types] SET [table] = '{"special":{"dbtable":"#__tags","key":"tag_id","type":"Tag","prefix":"TagsTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE [type_title] = 'Tag'; UPDATE [#__content_types] SET [field_mappings] = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"introtext", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"attribs", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"asset_id"}, "special": {"fulltext":"fulltext"}}' WHERE [type_title] = 'Article'; UPDATE [#__content_types] SET [field_mappings] = '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"address", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"image", "core_urls":"webpage", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special": {"con_position":"con_position","suburb":"suburb","state":"state","country":"country","postcode":"postcode","telephone":"telephone","fax":"fax","misc":"misc","email_to":"email_to","default_con":"default_con","user_id":"user_id","mobile":"mobile","sortname1":"sortname1","sortname2":"sortname2","sortname3":"sortname3"}}' WHERE [type_title] = 'Contact'; UPDATE [#__content_types] SET [field_mappings] = '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"link", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special": {"numarticles":"numarticles","cache_time":"cache_time","rtl":"rtl"}}' WHERE [type_title] = 'Newsfeed'; UPDATE [#__content_types] SET [field_mappings] = '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"null","core_alias":"username","core_created_time":"registerdate","core_modified_time":"lastvisitDate","core_body":"null", "core_hits":"null","core_publish_up":"null","core_publish_down":"null","access":"null", "core_params":"params", "core_featured":"null", "core_metadata":"null", "core_language":"null", "core_images":"null", "core_urls":"null", "core_version":"null", "core_ordering":"null", "core_metakey":"null", "core_metadesc":"null", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}, "special": {}}' WHERE [type_title] = 'User'; UPDATE [#__content_types] SET [field_mappings] = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}' WHERE [type_title] = 'Article Category'; UPDATE [#__content_types] SET [field_mappings] = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}' WHERE [type_title] = 'Contact Category'; UPDATE [#__content_types] SET [field_mappings] = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}' WHERE [type_title] = 'Newsfeeds Category'; UPDATE [#__content_types] SET [field_mappings] = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path"}}' WHERE [type_title] = 'Tag'; PKb��\��g�EE>components/com_admin/sql/updates/sqlazure/3.3.0-2014-02-16.sqlnu�[���ALTER TABLE [#__users] ADD [requireReset] [smallint] NULL DEFAULT 0; PKb��\�]���3components/com_admin/sql/updates/sqlazure/3.1.4.sqlnu�[���SET IDENTITY_INSERT [#__extensions] ON; INSERT INTO [#__extensions] ([extension_id], [name], [type], [element], [folder], [client_id], [enabled], [access], [protected], [manifest_cache], [params], [custom_data], [system_data], [checked_out], [checked_out_time], [ordering], [state]) SELECT 104, 'IDNA Convert', 'library', 'idna_convert', '', 0, 1, 1, 1, '', '', '', '', 0, '1900-01-01 00:00:00', 0, 0; SET IDENTITY_INSERT [#__extensions] OFF; PKb��\���1::3components/com_admin/sql/updates/sqlazure/3.1.5.sqlnu�[���# Placeholder file for database changes for version 3.1.5 PKb��\O~V��>components/com_admin/sql/updates/sqlazure/3.4.0-2014-08-24.sqlnu�[���INSERT INTO [#__postinstall_messages] ([extension_id], [title_key], [description_key], [action_key], [language_extension], [language_client_id], [type], [action_file], [action], [condition_file], [condition_method], [version_introduced], [enabled]) SELECT 700, 'COM_CPANEL_MSG_HTACCESS_TITLE', 'COM_CPANEL_MSG_HTACCESS_BODY', '', 'com_cpanel', 1, 'message', '', '', 'admin://components/com_admin/postinstall/htaccess.php', 'admin_postinstall_htaccess_condition', '3.4.0', 1; PKb��\��&~~>components/com_admin/sql/updates/sqlazure/3.4.0-2015-01-21.sqlnu�[���INSERT INTO [#__postinstall_messages] ([extension_id], [title_key], [description_key], [action_key], [language_extension], [language_client_id], [type], [action_file], [action], [condition_file], [condition_method], [version_introduced], [enabled]) SELECT 700, 'COM_CPANEL_MSG_ROBOTS_TITLE', 'COM_CPANEL_MSG_ROBOTS_BODY', '', 'com_cpanel', 1, 'message', '', '', '', '', '3.3.0', 1; PKb��\� &&>components/com_admin/sql/updates/sqlazure/2.5.2-2012-03-05.sqlnu�[���# Dummy SQL file to set schema versionPKb��\r�T33>components/com_admin/sql/updates/sqlazure/3.4.0-2014-09-16.sqlnu�[���ALTER TABLE [#__redirect_links] ADD [header] [smallint] NOT NULL DEFAULT 301; -- -- The following statement has to be disabled because it conflicts with -- a later change added with Joomla! 3.5.0 for long URLs in this table -- -- ALTER TABLE [#__redirect_links] ALTER COLUMN [new_url] [nvarchar](255) NULL; PKb��\T�993components/com_admin/sql/updates/sqlazure/2.5.6.sqlnu�[���# Placeholder file for database changes for version 2.5.6PKb��\���993components/com_admin/sql/updates/sqlazure/3.1.1.sqlnu�[���# Placeholder file for database changes for version 3.1.1PKb��\�� o��>components/com_admin/sql/updates/sqlazure/3.4.4-2015-07-11.sqlnu�[���ALTER TABLE [#__contentitem_tag_map] DROP CONSTRAINT [#__contentitem_tag_map$uc_ItemnameTagid]; ALTER TABLE [#__contentitem_tag_map] ADD CONSTRAINT [#__contentitem_tag_map$uc_ItemnameTagid] UNIQUE NONCLUSTERED ( [type_id] ASC, [content_item_id] ASC, [tag_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; PKb��\��R��>components/com_admin/sql/updates/sqlazure/3.2.2-2014-01-15.sqlnu�[���INSERT INTO [#__postinstall_messages] ([extension_id], [title_key], [description_key], [action_key], [language_extension], [language_client_id], [type], [action_file], [action], [condition_file], [condition_method], [version_introduced], [enabled]) SELECT 700, 'COM_CPANEL_MSG_PHPVERSION_TITLE', 'COM_CPANEL_MSG_PHPVERSION_BODY', '', 'com_cpanel', 1, 'message', '', '', 'admin://components/com_admin/postinstall/phpversion.php', 'admin_postinstall_phpversion_condition', '3.2.2', 1; PKb��\��dd>components/com_admin/sql/updates/sqlazure/3.2.2-2014-01-18.sqlnu�[���/* Update updates version length */ ALTER TABLE [#__updates] ALTER COLUMN [version] [nvarchar](32); PKb��\⪾��>components/com_admin/sql/updates/sqlazure/3.2.2-2014-01-23.sqlnu�[���SET IDENTITY_INSERT [#__extensions] ON; INSERT INTO [#__extensions] ([extension_id], [name], [type], [element], [folder], [client_id], [enabled], [access], [protected], [manifest_cache], [params], [custom_data], [system_data], [checked_out], [checked_out_time], [ordering], [state]) SELECT 106, 'PHPass', 'library', 'phpass', '', 0, 1, 1, 1, '', '', '', '', 0, '1900-01-01 00:00:00', 0, 0; SET IDENTITY_INSERT [#__extensions] OFF; PKb��\r�����>components/com_admin/sql/updates/sqlazure/3.2.2-2014-01-08.sqlnu�[���SET IDENTITY_INSERT [#__extensions] ON; INSERT INTO [#__extensions] ([extension_id], [name], [type], [element], [folder], [client_id], [enabled], [access], [protected], [manifest_cache], [params], [custom_data], [system_data], [checked_out], [checked_out_time], [ordering], [state]) SELECT 403, 'plg_content_contact', 'plugin', 'contact', 'content', 0, 1, 1, 0, '', '', '', '', 0, '1900-01-01 00:00:00', 1, 0; SET IDENTITY_INSERT [#__extensions] OFF; PKb��\+�)���3components/com_admin/sql/updates/sqlazure/3.0.3.sqlnu�[���ALTER TABLE [#__associations] DROP CONSTRAINT [PK_#__associations_context]; ALTER TABLE [#__associations] ALTER COLUMN [id] INT NOT NULL; ALTER TABLE [#__associations] ADD CONSTRAINT [PK_#__associations_context] PRIMARY KEY CLUSTERED( [context] ASC, [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; PKb��\��::3components/com_admin/sql/updates/sqlazure/3.0.0.sqlnu�[���# Placeholder file for database changes for version 3.0.0 PKb��\� &&>components/com_admin/sql/updates/sqlazure/2.5.3-2012-03-13.sqlnu�[���# Dummy SQL file to set schema versionPKb��\Ԍ@��3components/com_admin/sql/updates/sqlazure/2.5.5.sqlnu�[���ALTER TABLE [#__redirect_links] ADD [hits] INTEGER CONSTRAINT DF_redirect_links_hits DEFAULT '' NOT NULL; ALTER TABLE [#__users] ADD [lastResetTime] [datetime] NOT NULL; ALTER TABLE [#__users] ADD [resetCount] [int] NOT NULL;PKb��\�5�::3components/com_admin/sql/updates/sqlazure/3.0.1.sqlnu�[���# Placeholder file for database changes for version 3.0.1 PKb��\8n� 44>components/com_admin/sql/updates/sqlazure/3.4.0-2014-09-01.sqlnu�[���SET IDENTITY_INSERT [#__extensions] ON; INSERT INTO [#__extensions] ([extension_id], [name], [type], [element], [folder], [client_id], [enabled], [access], [protected], [manifest_cache], [params], [custom_data], [system_data], [checked_out], [checked_out_time], [ordering], [state]) SELECT 801, 'weblinks', 'package', 'pkg_weblinks', '', 0, 1, 1, 0, '', '', '', '', 0, '1900-01-01 00:00:00', 0, 0; SET IDENTITY_INSERT [#__extensions] OFF; INSERT INTO [#__update_sites] ([name], [type], [location], [enabled]) SELECT 'Weblinks Update Site', 'extension', 'https://raw.githubusercontent.com/joomla-extensions/weblinks/master/manifest.xml', 1; INSERT INTO [#__update_sites_extensions] ([update_site_id], [extension_id]) SELECT (SELECT [update_site_id] FROM [#__update_sites] WHERE [name] = 'Weblinks Update Site'), 801; PKb��\qJ>��>components/com_admin/sql/updates/sqlazure/3.2.2-2013-12-22.sqlnu�[���ALTER TABLE [#__update_sites] ADD [extra_query] [nvarchar](1000) NULL DEFAULT ''; ALTER TABLE [#__updates] ADD [extra_query] [nvarchar](1000) NULL DEFAULT ''; PKb��\�Y�G��>components/com_admin/sql/updates/sqlazure/3.2.3-2014-02-20.sqlnu�[���UPDATE [#__extensions] SET [params] = (SELECT [params] FROM [#__extensions] WHERE [name] = 'plg_system_remember') WHERE [name] = 'plg_authentication_cookie';PKb��\�Z�>components/com_admin/sql/updates/sqlazure/2.5.4-2012-03-18.sqlnu�[���SET IDENTITY_INSERT [#__extensions] ON; INSERT INTO [#__extensions] ([extension_id], [name], [type], [element], [folder], [client_id], [enabled], [access], [protected], [manifest_cache], [params], [custom_data], [system_data], [checked_out], [checked_out_time], [ordering], [state]) SELECT 28, 'com_joomlaupdate', 'component', 'com_joomlaupdate', '', 1, 1, 0, 1, '{"legacy":false,"name":"com_joomlaupdate","type":"component","creationDate":"February 2012","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"2.5.2","description":"COM_JOOMLAUPDATE_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '1900-01-01 00:00:00', 0, 0; SET IDENTITY_INSERT [#__extensions] OFF; INSERT INTO [#__menu] ([menutype], [title], [alias], [note], [path], [link], [type], [published], [parent_id], [level], [component_id], [ordering], [checked_out], [checked_out_time], [browserNav], [access], [img], [template_style_id], [params], [lft], [rgt], [home], [language], [client_id]) SELECT 'menu', 'com_joomlaupdate', 'Joomla! Update', '', 'Joomla! Update', 'index.php?option=com_joomlaupdate', 'component', 0, 1, 1, 28, 0, 0, '1900-01-01 00:00:00', 0, 0, 'class:joomlaupdate', 0, '', 41, 42, 0, '*', 1; PKb��\���qOqO3components/com_admin/sql/updates/sqlazure/3.2.0.sqlnu�[���/* Core 3.2 schema updates */ ALTER TABLE [#__content_types] ADD [content_history_options] [nvarchar] (max) NULL; UPDATE [#__content_types] SET [content_history_options] = '{"formFile":"administrator\/components\/com_content\/models\/forms\/article.xml", "hideFields":["asset_id","checked_out","checked_out_time","version"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"],"convertToInt":["publish_up", "publish_down", "featured", "ordering"],"displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ]}' WHERE [type_alias] = 'com_content.article'; UPDATE [#__content_types] SET [content_history_options] = '{"formFile":"administrator\/components\/com_contact\/models\/forms\/contact.xml","hideFields":["default_con","checked_out","checked_out_time","version","xreference"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"],"convertToInt":["publish_up", "publish_down", "featured", "ordering"], "displayLookup":[ {"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ] }' WHERE [type_alias] = 'com_contact.contact'; UPDATE [#__content_types] SET [content_history_options] = '{"formFile":"administrator\/components\/com_categories\/models\/forms\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}' WHERE [type_alias] IN ('com_content.category', 'com_contact.category', 'com_newsfeeds.category'); UPDATE [#__content_types] SET [content_history_options] = '{"formFile":"administrator\/components\/com_newsfeeds\/models\/forms\/newsfeed.xml","hideFields":["asset_id","checked_out","checked_out_time","version"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"],"convertToInt":["publish_up", "publish_down", "featured", "ordering"],"displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}' WHERE [type_alias] = 'com_newsfeeds.newsfeed'; UPDATE [#__content_types] SET [content_history_options] = '{"formFile":"administrator\/components\/com_tags\/models\/forms\/tag.xml", "hideFields":["checked_out","checked_out_time","version", "lft", "rgt", "level", "path", "urls", "publish_up", "publish_down"],"ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"}, {"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}' WHERE [type_alias] = 'com_tags.tag'; INSERT INTO [#__content_types] ([type_title], [type_alias], [table], [rules], [field_mappings], [router], [content_history_options]) SELECT 'Banner', 'com_banners.banner', '{"special":{"dbtable":"#__banners","key":"id","type":"Banner","prefix":"BannersTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"null","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"link", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"null", "asset_id":"null"}, "special":{"imptotal":"imptotal", "impmade":"impmade", "clicks":"clicks", "clickurl":"clickurl", "custombannercode":"custombannercode", "cid":"cid", "purchase_type":"purchase_type", "track_impressions":"track_impressions", "track_clicks":"track_clicks"}}', '', '{"formFile":"administrator\/components\/com_banners\/models\/forms\/banner.xml", "hideFields":["checked_out","checked_out_time","version", "reset"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "imptotal", "impmade", "reset"], "convertToInt":["publish_up", "publish_down", "ordering"], "displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}, {"sourceColumn":"cid","targetTable":"#__banner_clients","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}' UNION ALL SELECT 'Banners Category', 'com_banners.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}', '', '{"formFile":"administrator\/components\/com_categories\/models\/forms\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"], "convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}' UNION ALL SELECT 'Banner Client', 'com_banners.client', '{"special":{"dbtable":"#__banner_clients","key":"id","type":"Client","prefix":"BannersTable"}}', '', '', '', '{"formFile":"administrator\/components\/com_banners\/models\/forms\/client.xml", "hideFields":["checked_out","checked_out_time"], "ignoreChanges":["checked_out", "checked_out_time"], "convertToInt":[], "displayLookup":[]}' UNION ALL SELECT 'User Notes', 'com_users.note', '{"special":{"dbtable":"#__user_notes","key":"id","type":"Note","prefix":"UsersTable"}}', '', '', '', '{"formFile":"administrator\/components\/com_users\/models\/forms\/note.xml", "hideFields":["checked_out","checked_out_time", "publish_up", "publish_down"],"ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time"], "convertToInt":["publish_up", "publish_down"],"displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}, {"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}' UNION ALL SELECT 'User Notes Category', 'com_users.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}', '', '{"formFile":"administrator\/components\/com_categories\/models\/forms\/category.xml", "hideFields":["checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"], "convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}'; UPDATE [#__extensions] SET [params] = '{"template_positions_display":"0","upload_limit":"2","image_formats":"gif,bmp,jpg,jpeg,png","source_formats":"txt,less,ini,xml,js,php,css","font_formats":"woff,ttf,otf","compressed_formats":"zip"}' WHERE [extension_id] = 20; UPDATE [#__extensions] SET [params] = '{"lineNumbers":"1","lineWrapping":"1","matchTags":"1","matchBrackets":"1","marker-gutter":"1","autoCloseTags":"1","autoCloseBrackets":"1","autoFocus":"1","theme":"default","tabmode":"indent"}' WHERE [extension_id] = 410; SET IDENTITY_INSERT [#__extensions] ON; INSERT INTO [#__extensions] ([extension_id], [name], [type], [element], [folder], [client_id], [enabled], [access], [protected], [manifest_cache], [params], [custom_data], [system_data], [checked_out], [checked_out_time], [ordering], [state]) SELECT 30, 'com_contenthistory', 'component', 'com_contenthistory', '', 1, 1, 1, 0, '', '', '', '', 0, '1900-01-01 00:00:00', 0, 0 UNION ALL SELECT 31, 'com_ajax', 'component', 'com_ajax', '', 1, 1, 1, 0, '', '', '', '', 0, '1900-01-01 00:00:00', 0, 0 UNION ALL SELECT 32, 'com_postinstall', 'component', 'com_postinstall', '', 1, 1, 1, 1, '', '', '', '', 0, '1900-01-01 00:00:00', 0, 0 UNION ALL SELECT 105, 'FOF', 'library', 'fof', '', 0, 1, 1, 1, '', '', '', '', 0, '1900-01-01 00:00:00', 0, 0 UNION ALL SELECT 448, 'plg_twofactorauth_totp', 'plugin', 'totp', 'twofactorauth', 0, 0, 1, 0, '', '', '', '', 0, '1900-01-01 00:00:00', 0, 0 UNION ALL SELECT 449, 'plg_authentication_cookie', 'plugin', 'cookie', 'authentication', 0, 1, 1, 0, '', '', '', '', 0, '1900-01-01 00:00:00', 0, 0 UNION ALL SELECT 450, 'plg_twofactorauth_yubikey', 'plugin', 'yubikey', 'twofactorauth', 0, 0, 1, 0, '', '', '', '', 0, '1900-01-01 00:00:00', 0, 0; SET IDENTITY_INSERT [#__extensions] OFF; INSERT INTO [#__menu] ([menutype], [title], [alias], [note], [path], [link], [type], [published], [parent_id], [level], [component_id], [checked_out], [checked_out_time], [browserNav], [access], [img], [template_style_id], [params], [lft], [rgt], [home], [language], [client_id]) SELECT 'menu', 'com_postinstall', 'Post-installation messages', '', 'Post-installation messages', 'index.php?option=com_postinstall', 'component', 0, 1, 1, 32, 0, '1900-01-01 00:00:00', 0, 1, 'class:postinstall', 0, '', 45, 46, 0, '*', 1; ALTER TABLE [#__modules] ADD [asset_id] [bigint] NOT NULL DEFAULT 0; CREATE TABLE [#__postinstall_messages] ( [postinstall_message_id] [bigint] IDENTITY(1,1) NOT NULL, [extension_id] [bigint] NOT NULL DEFAULT 700, [title_key] [nvarchar](255) NOT NULL DEFAULT '', [description_key] [nvarchar](255) NOT NULL DEFAULT '', [action_key] [nvarchar](255) NOT NULL DEFAULT '', [language_extension] [nvarchar](255) NOT NULL DEFAULT 'com_postinstall', [language_client_id] [int] NOT NULL DEFAULT 1, [type] [nvarchar](10) NOT NULL DEFAULT 'link', [action_file] [nvarchar](255) DEFAULT '', [action] [nvarchar](255) DEFAULT '', [condition_file] [nvarchar](255) DEFAULT NULL, [condition_method] [nvarchar](255) DEFAULT NULL, [version_introduced] [nvarchar](50) NOT NULL DEFAULT '3.2.0', [enabled] [int] NOT NULL DEFAULT 1, CONSTRAINT [PK_#__postinstall_message_id] PRIMARY KEY CLUSTERED ( [postinstall_message_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; INSERT INTO [#__postinstall_messages] ([extension_id], [title_key], [description_key], [action_key], [language_extension], [language_client_id], [type], [action_file], [action], [condition_file], [condition_method], [version_introduced], [enabled]) SELECT 700, 'PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_TITLE', 'PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_BODY', 'PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_ACTION', 'plg_twofactorauth_totp', 1, 'action', 'site://plugins/twofactorauth/totp/postinstall/actions.php', 'twofactorauth_postinstall_action', 'site://plugins/twofactorauth/totp/postinstall/actions.php', 'twofactorauth_postinstall_condition', '3.2.0', 1 UNION ALL SELECT 700, 'COM_CPANEL_MSG_EACCELERATOR_TITLE', 'COM_CPANEL_MSG_EACCELERATOR_BODY', 'COM_CPANEL_MSG_EACCELERATOR_BUTTON', 'com_cpanel', 1, 'action', 'admin://components/com_admin/postinstall/eaccelerator.php', 'admin_postinstall_eaccelerator_action', 'admin://components/com_admin/postinstall/eaccelerator.php', 'admin_postinstall_eaccelerator_condition', '3.2.0', 1; CREATE TABLE [#__ucm_history] ( [version_id] [bigint] IDENTITY(1,1) NOT NULL, [ucm_item_id] [bigint] NOT NULL, [ucm_type_id] [bigint] NOT NULL, [version_note] [nvarchar](255) NOT NULL DEFAULT '', [save_date] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', [editor_user_id] [bigint] NOT NULL DEFAULT 0, [character_count] [bigint] NOT NULL DEFAULT 0, [sha1_hash] [nvarchar](50) NOT NULL DEFAULT '', [version_data] [nvarchar](max) NOT NULL, [keep_forever] [smallint] NOT NULL DEFAULT 0, CONSTRAINT [PK_#__ucm_history_version_id] PRIMARY KEY CLUSTERED ( [version_id] ASC )WITH (PAD_INDEX= OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; CREATE NONCLUSTERED INDEX [idx_ucm_item_id] ON [#__ucm_history] ( [ucm_type_id] ASC, [ucm_item_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_save_date] ON [#__ucm_history] ( [save_date] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); ALTER TABLE [#__users] ADD [otpKey] [nvarchar](1000) NOT NULL DEFAULT ''; ALTER TABLE [#__users] ADD [otep] [nvarchar](1000) NOT NULL DEFAULT ''; CREATE TABLE [#__user_keys] ( [id] [bigint] IDENTITY(1,1) NOT NULL, [user_id] [nvarchar](255) NOT NULL, [token] [nvarchar](255) NOT NULL, [series] [nvarchar](255) NOT NULL, [invalid] [smallint] NOT NULL, [time] [nvarchar](200) NOT NULL, [uastring] [nvarchar](255) NOT NULL, CONSTRAINT [PK_#__user_keys_id] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], CONSTRAINT [#__user_keys$series] UNIQUE NONCLUSTERED ( [series] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], CONSTRAINT [#__user_keys$series_2] UNIQUE NONCLUSTERED ( [series] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], CONSTRAINT [#__user_keys$series_3] UNIQUE NONCLUSTERED ( [series] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; CREATE NONCLUSTERED INDEX [user_id] ON [#__user_keys] ( [user_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); /* Queries below sync the schema to MySQL where able without causing errors */ ALTER TABLE [#__contentitem_tag_map] ADD [type_id] [int] NOT NULL; CREATE NONCLUSTERED INDEX [idx_type] ON [#__contentitem_tag_map] ( [type_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); ALTER TABLE [#__newsfeeds] ALTER COLUMN [alias] [nvarchar](255) NOT NULL; ALTER TABLE [#__overrider] ALTER COLUMN [constant] [nvarchar](255) NOT NULL; ALTER TABLE [#__overrider] ALTER COLUMN [string] [nvarchar](max) NOT NULL; ALTER TABLE [#__overrider] ALTER COLUMN [file] [nvarchar](255) NOT NULL; ALTER TABLE [#__session] DROP COLUMN [usertype]; ALTER TABLE [#__ucm_content] ALTER COLUMN [core_metadata] [nvarchar](2048) NOT NULL; CREATE PROCEDURE "#removeDefault" ( @table NVARCHAR(100), @column NVARCHAR(100) ) AS BEGIN DECLARE @constraintName AS nvarchar(100) DECLARE @constraintQuery AS nvarchar(1000) SELECT @constraintName = name FROM sys.default_constraints WHERE parent_object_id = object_id(@table) AND parent_column_id = columnproperty(object_id(@table), @column, 'ColumnId') SET @constraintQuery = 'ALTER TABLE [' + @table + '] DROP CONSTRAINT [' + @constraintName + ']' EXECUTE sp_executesql @constraintQuery END; EXECUTE "#removeDefault" "#__ucm_content", 'core_content_item_id'; EXECUTE "#removeDefault" "#__ucm_content", 'asset_id'; EXECUTE "#removeDefault" "#__ucm_content", 'core_type_id'; EXECUTE "#removeDefault" "#__updates", 'categoryid'; ALTER TABLE [#__updates] DROP COLUMN [categoryid]; ALTER TABLE [#__updates] ALTER COLUMN [infourl] [nvarchar](max) NOT NULL; /* Update bad params for two cpanel modules */ UPDATE [#__modules] SET [params] = REPLACE([params], '"bootstrap_size":"1"', '"bootstrap_size":"0"') WHERE [id] IN (3,4); PKb��\��xB�U�U3components/com_admin/sql/updates/sqlazure/3.1.0.sqlnu�[���/* Changes to Smart Search tables for driver compatibility */ ALTER TABLE [#__finder_tokens_aggregate] ALTER COLUMN [term_id] [bigint] NULL; ALTER TABLE [#__finder_tokens_aggregate] ALTER COLUMN [map_suffix] [nchar](1) NULL; ALTER TABLE [#__finder_tokens_aggregate] ADD DEFAULT ((0)) FOR [term_id]; ALTER TABLE [#__finder_tokens_aggregate] ADD DEFAULT ((0)) FOR [total_weight]; /* Changes to tables where data type conflicts exist with MySQL (mainly dealing with null values */ ALTER TABLE [#__extensions] ADD DEFAULT (N'') FOR [system_data]; ALTER TABLE [#__modules] ADD DEFAULT (N'') FOR [content]; ALTER TABLE [#__updates] ADD DEFAULT (N'') FOR [data]; /* Tags database schema */ /****** Object: Table [#__content_types] ******/ SET QUOTED_IDENTIFIER ON; CREATE TABLE [#__content_types] ( [type_id] [bigint] IDENTITY(1,1) NOT NULL, [type_title] [nvarchar](255) NOT NULL DEFAULT '', [type_alias] [nvarchar](255) NOT NULL DEFAULT '', [table] [nvarchar](255) NOT NULL DEFAULT '', [rules] [nvarchar](max) NOT NULL, [field_mappings] [nvarchar](max) NOT NULL, [router] [nvarchar](255) NOT NULL DEFAULT '', CONSTRAINT [PK_#__content_types_type_id] PRIMARY KEY CLUSTERED ( [type_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; CREATE NONCLUSTERED INDEX [idx_alias] ON [#__content_types] ( [type_alias] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); SET IDENTITY_INSERT [#__content_types] ON; INSERT INTO [#__content_types] ([type_id], [type_title], [type_alias], [table], [rules], [field_mappings], [router]) SELECT 1, 'Article', 'com_content.article', '{"special":{"dbtable":"#__content","key":"id","type":"Content","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"introtext", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"attribs", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"asset_id"}], "special": [{"fulltext":"fulltext"}]}', 'ContentHelperRoute::getArticleRoute' UNION ALL SELECT 2, 'Contact', 'com_contact.contact', '{"special":{"dbtable":"#__contact_details","key":"id","type":"Contact","prefix":"ContactTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"address", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"image", "core_urls":"webpage", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}], "special": [{"con_position":"con_position","suburb":"suburb","state":"state","country":"country","postcode":"postcode","telephone":"telephone","fax":"fax","misc":"misc","email_to":"email_to","default_con":"default_con","user_id":"user_id","mobile":"mobile","sortname1":"sortname1","sortname2":"sortname2","sortname3":"sortname3"}]}', 'ContactHelperRoute::getContactRoute' UNION ALL SELECT 3, 'Newsfeed', 'com_newsfeeds.newsfeed', '{"special":{"dbtable":"#__newsfeeds","key":"id","type":"Newsfeed","prefix":"NewsfeedsTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"link", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}], "special": [{"numarticles":"numarticles","cache_time":"cache_time","rtl":"rtl"}]}', 'NewsfeedsHelperRoute::getNewsfeedRoute' UNION ALL SELECT 4, 'User', 'com_users.user', '{"special":{"dbtable":"#__users","key":"id","type":"User","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"name","core_state":"null","core_alias":"username","core_created_time":"registerdate","core_modified_time":"lastvisitDate","core_body":"null", "core_hits":"null","core_publish_up":"null","core_publish_down":"null","access":"null", "core_params":"params", "core_featured":"null", "core_metadata":"null", "core_language":"null", "core_images":"null", "core_urls":"null", "core_version":"null", "core_ordering":"null", "core_metakey":"null", "core_metadesc":"null", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}], "special": [{}]}', 'UsersHelperRoute::getUserRoute' UNION ALL SELECT 5, 'Article Category', 'com_content.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}]}', 'ContentHelperRoute::getCategoryRoute' UNION ALL SELECT 6, 'Contact Category', 'com_contact.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}]}', 'ContactHelperRoute::getCategoryRoute' UNION ALL SELECT 7, 'Newsfeeds Category', 'com_newsfeeds.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}]}', 'NewsfeedsHelperRoute::getCategoryRoute' UNION ALL SELECT 8, 'Tag', 'com_tags.tag', '{"special":{"dbtable":"#__tags","key":"tag_id","type":"Tag","prefix":"TagsTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path"}]}', 'TagsHelperRoute::getTagRoute'; SET IDENTITY_INSERT [#__content_types] OFF; /****** Object: Table [#__contentitem_tag_map] ******/ SET QUOTED_IDENTIFIER ON; CREATE TABLE [#__contentitem_tag_map] ( [type_alias] [nvarchar](255) NOT NULL DEFAULT '', [core_content_id] [bigint] NOT NULL, [content_item_id] [int] NOT NULL, [tag_id] [bigint] NOT NULL, [tag_date] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', CONSTRAINT [#__contentitem_tag_map$uc_ItemnameTagid] UNIQUE NONCLUSTERED ( [type_alias] ASC, [content_item_id] ASC, [tag_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; CREATE NONCLUSTERED INDEX [idx_tag_name] ON [#__contentitem_tag_map] ( [tag_id] ASC, [type_alias] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_date_id] ON [#__contentitem_tag_map] ( [tag_date] ASC, [tag_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_tag] ON [#__contentitem_tag_map] ( [tag_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_core_content_id] ON [#__contentitem_tag_map] ( [core_content_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); /****** Object: Table [#__tags] ******/ SET QUOTED_IDENTIFIER ON; CREATE TABLE [#__tags] ( [id] [int] IDENTITY(1,1) NOT NULL , [parent_id] [bigint] NOT NULL DEFAULT '0', [lft] [int] NOT NULL DEFAULT '0', [rgt] [int] NOT NULL DEFAULT '0', [level] [bigint] NOT NULL DEFAULT '0', [path] [nvarchar](255) NOT NULL DEFAULT '', [title] [nvarchar](255) NOT NULL, [alias] [nvarchar](255) NOT NULL DEFAULT '', [note] [nvarchar](255) NOT NULL DEFAULT '', [description] [nvarchar](max) NOT NULL, [published] [smallint] NOT NULL DEFAULT '0', [checked_out] [bigint] NOT NULL DEFAULT '0', [checked_out_time] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', [access] [int] NOT NULL DEFAULT '0', [params] [nvarchar](max) NOT NULL, [metadesc] [nvarchar](1024) NOT NULL, [metakey] [nvarchar](1024) NOT NULL, [metadata] [nvarchar](2048) NOT NULL, [created_user_id] [bigint] NOT NULL DEFAULT '0', [created_time] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', [created_by_alias] [nvarchar](255) NOT NULL DEFAULT '', [modified_user_id] [bigint] NOT NULL DEFAULT '0', [modified_time] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', [images] [nvarchar](max) NOT NULL, [urls] [nvarchar](max) NOT NULL, [hits] [bigint] NOT NULL DEFAULT '0', [language] [nvarchar](7) NOT NULL, [version] [bigint] NOT NULL DEFAULT '1', [publish_up] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', [publish_down] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', CONSTRAINT [PK_#__tags_id] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; CREATE NONCLUSTERED INDEX [tag_idx] ON [#__tags] ( [published] ASC, [access] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_access] ON [#__tags] ( [access] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_checkout] ON [#__tags] ( [checked_out] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_path] ON [#__tags] ( [path] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_left_right] ON [#__tags] ( [lft] ASC, [rgt] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_alias] ON [#__tags] ( [alias] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_language] ON [#__tags] ( [language] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); SET IDENTITY_INSERT [#__tags] ON; INSERT INTO [#__tags] ([id], [parent_id], [lft], [rgt], [level], [path], [title], [alias], [note], [description], [published], [checked_out], [checked_out_time], [access], [params], [metadesc], [metakey], [metadata], [created_user_id], [created_time], [modified_user_id], [modified_time], [images], [urls], [hits], [language]) SELECT 1, 0, 0, 1, 0, '', 'ROOT', 'root', '', '', 1, 0, '1900-01-01 00:00:00', 1, '{}', '', '', '', 0, '2009-10-18 16:07:09', 0, '1900-01-01 00:00:00', '', '', 0, '*'; SET IDENTITY_INSERT [#__tags] OFF; /****** Object: Table [#__ucm_base] ******/ SET QUOTED_IDENTIFIER ON; CREATE TABLE [#__ucm_base] ( [ucm_id] [bigint] IDENTITY(1,1) NOT NULL, [ucm_item_id] [bigint] NOT NULL, [ucm_type_id] [bigint] NOT NULL, [ucm_language_id] [bigint] NOT NULL, CONSTRAINT [PK_#__ucm_base_ucm_id] PRIMARY KEY CLUSTERED ( [ucm_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], ) ON [PRIMARY]; CREATE NONCLUSTERED INDEX [ucm_item_id] ON [#__ucm_base] ( [ucm_item_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [ucm_type_id] ON [#__ucm_base] ( [ucm_type_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [ucm_language_id] ON [#__ucm_base] ( [ucm_language_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); /****** Object: Table [#__ucm_content] ******/ SET QUOTED_IDENTIFIER ON; CREATE TABLE [#__ucm_content] ( [core_content_id] [bigint] IDENTITY(1,1) NOT NULL, [core_type_alias] [nvarchar](255) NOT NULL, [core_title] [nvarchar](255) NOT NULL DEFAULT '', [core_alias] [nvarchar](255) NOT NULL DEFAULT '', [core_body] [nvarchar](max) NOT NULL, [core_state] [smallint] NOT NULL DEFAULT '0', [core_checked_out_time] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', [core_checked_out_user_id] [bigint] NOT NULL DEFAULT '0', [core_access] [bigint] NOT NULL DEFAULT '0', [core_params] [nvarchar](max) NOT NULL, [core_featured] [tinyint] NOT NULL DEFAULT '0', [core_metadata] [nvarchar](max) NOT NULL, [core_created_user_id] [bigint] NOT NULL DEFAULT '0', [core_created_by_alias] [nvarchar](255) NOT NULL DEFAULT '', [core_created_time] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', [core_modified_user_id] [bigint] NOT NULL DEFAULT '0', [core_modified_time] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', [core_language] [nvarchar](7) NOT NULL, [core_publish_up] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', [core_publish_down] [datetime] NOT NULL DEFAULT '1900-01-01T00:00:00.000', [core_content_item_id] [bigint] NOT NULL DEFAULT '0', [asset_id] [bigint] NOT NULL DEFAULT '0', [core_images] [nvarchar](max) NOT NULL, [core_urls] [nvarchar](max) NOT NULL, [core_hits] [bigint] NOT NULL DEFAULT '0', [core_version] [bigint] NOT NULL DEFAULT '1', [core_ordering] [int] NOT NULL DEFAULT '0', [core_metakey] [nvarchar](max) NOT NULL, [core_metadesc] [nvarchar](max) NOT NULL, [core_catid] [bigint] NOT NULL DEFAULT '0', [core_xreference] [nvarchar](50) NOT NULL, [core_type_id] [bigint] NOT NULL DEFAULT '0', CONSTRAINT [PK_#__ucm_content_core_content_id] PRIMARY KEY CLUSTERED ( [core_content_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], CONSTRAINT [#__ucm_content_core_content_id$idx_type_alias_item_id] UNIQUE NONCLUSTERED ( [core_type_alias] ASC, [core_content_item_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]; CREATE NONCLUSTERED INDEX [tag_idx] ON [#__ucm_content] ( [core_state] ASC, [core_access] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_access] ON [#__ucm_content] ( [core_access] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_alias] ON [#__ucm_content] ( [core_alias] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_language] ON [#__ucm_content] ( [core_language] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_title] ON [#__ucm_content] ( [core_title] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_modified_time] ON [#__ucm_content] ( [core_modified_time] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_created_time] ON [#__ucm_content] ( [core_created_time] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_content_type] ON [#__ucm_content] ( [core_type_alias] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_core_modified_user_id] ON [#__ucm_content] ( [core_modified_user_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_core_checked_out_user_id] ON [#__ucm_content] ( [core_checked_out_user_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_core_created_user_id] ON [#__ucm_content] ( [core_created_user_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); CREATE NONCLUSTERED INDEX [idx_core_type_id] ON [#__ucm_content] ( [core_type_id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); SET IDENTITY_INSERT [#__extensions] ON; INSERT INTO [#__extensions] ([extension_id], [name], [type], [element], [folder], [client_id], [enabled], [access], [protected], [manifest_cache], [params], [custom_data], [system_data], [checked_out], [checked_out_time], [ordering], [state]) SELECT 29, 'com_tags', 'component', 'com_tags', '', 1, 1, 1, 1, '{"name":"com_joomlaupdate","type":"component","creationDate":"March 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.1.0","description":"COM_TAGS_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '1900-01-01 00:00:00', 0, 0; SET IDENTITY_INSERT [#__extensions] OFF; INSERT INTO [#__menu] ([menutype], [title], [alias], [note], [path], [link], [type], [published], [parent_id], [level], [component_id], [checked_out], [checked_out_time], [browserNav], [access], [img], [template_style_id], [params], [lft], [rgt], [home], [language], [client_id]) SELECT 'menu', 'com_tags', 'Tags', '', 'Tags', 'index.php?option=com_tags', 'component', 0, 1, 1, 29, 0, '1900-01-01 00:00:00', 0, 0, 'class:tags', 0, '', 43, 44, 0, '*', 1; PKb��\��zu88>components/com_admin/sql/updates/sqlazure/3.4.0-2014-10-20.sqlnu�[���DELETE FROM [#__extensions] WHERE [extension_id] = 100; PKb��\�]\V3components/com_admin/sql/updates/sqlazure/2.5.7.sqlnu�[���INSERT INTO [#__update_sites] ([name], [type], [location], [enabled], [last_check_timestamp]) SELECT 'Accredited Joomla! Translations', 'collection', 'https://update.joomla.org/language/translationlist.xml', 1, 0; INSERT INTO [#__update_sites_extensions] ([update_site_id], [extension_id]) SELECT SCOPE_IDENTITY(), 600; UPDATE [#__assets] SET [name] = REPLACE([name], 'com_user.notes.category', 'com_users.category'); UPDATE [#__categories] SET [extension] = REPLACE([extension], 'com_user.notes.category', 'com_users.category'); PKb��\vB�@components/com_admin/sql/updates/postgresql/3.4.0-2015-02-26.sqlnu�[���INSERT INTO "#__postinstall_messages" ("extension_id", "title_key", "description_key", "action_key", "language_extension", "language_client_id", "type", "action_file", "action", "condition_file", "condition_method", "version_introduced", "enabled") VALUES (700, 'COM_CPANEL_MSG_LANGUAGEACCESS340_TITLE', 'COM_CPANEL_MSG_LANGUAGEACCESS340_BODY', '', 'com_cpanel', 1, 'message', '', '', 'admin://components/com_admin/postinstall/languageaccess340.php', 'admin_postinstall_languageaccess340_condition', '3.4.1', 1); PKb��\)0�g::5components/com_admin/sql/updates/postgresql/3.1.3.sqlnu�[���# Placeholder file for database changes for version 3.1.3 PKb��\+8�\��@components/com_admin/sql/updates/postgresql/3.4.0-2014-12-03.sqlnu�[���UPDATE "#__extensions" SET "protected" = '0' WHERE "name" = 'plg_editors-xtd_article' AND "type" = 'plugin' AND "element" = 'article' AND "folder" = 'editors-xtd'; PKb��\ Bf�GG@components/com_admin/sql/updates/postgresql/3.3.4-2014-08-03.sqlnu�[���ALTER TABLE "#__user_profiles" ALTER COLUMN "profile_value" TYPE text; PKb��\�����@components/com_admin/sql/updates/postgresql/3.3.0-2014-04-02.sqlnu�[���INSERT INTO "#__extensions" ("extension_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "manifest_cache", "params", "custom_data", "system_data", "checked_out", "checked_out_time", "ordering", "state") VALUES (451, 'plg_search_tags', 'plugin', 'tags', 'search', 0, 0, 1, 0, '', '{"search_limit":"50","show_tagged_items":"1"}', '', '', 0, '1970-01-01 00:00:00', 0, 0); PKb��\��/995components/com_admin/sql/updates/postgresql/3.0.2.sqlnu�[���# Placeholder file for database changes for version 3.0.2PKb��\���3hh5components/com_admin/sql/updates/postgresql/3.2.1.sqlnu�[���DELETE FROM "#__postinstall_messages" WHERE "title_key" = 'PLG_USER_JOOMLA_POSTINSTALL_STRONGPW_TITLE'; PKb��\*�g���@components/com_admin/sql/updates/postgresql/3.3.6-2014-09-30.sqlnu�[���INSERT INTO "#__update_sites" ("name", "type", "location", "enabled") VALUES ('Joomla! Update Component Update Site', 'extension', 'https://update.joomla.org/core/extensions/com_joomlaupdate.xml', 1); INSERT INTO "#__update_sites_extensions" ("update_site_id", "extension_id") VALUES ((SELECT "update_site_id" FROM "#__update_sites" WHERE "name" = 'Joomla! Update Component Update Site'), (SELECT "extension_id" FROM "#__extensions" WHERE "name" = 'com_joomlaupdate')); PKb��\v���@components/com_admin/sql/updates/postgresql/3.2.2-2013-12-28.sqlnu�[���UPDATE "#__menu" SET "component_id" = (SELECT "extension_id" FROM "#__extensions" WHERE "element" = 'com_joomlaupdate') WHERE "link" = 'index.php?option=com_joomlaupdate'; PKb��\���d # #5components/com_admin/sql/updates/postgresql/3.1.2.sqlnu�[���UPDATE "#__content_types" SET "table" = '{"special":{"dbtable":"#__content","key":"id","type":"Content","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE "type_title" = 'Article'; UPDATE "#__content_types" SET "table" = '{"special":{"dbtable":"#__contact_details","key":"id","type":"Contact","prefix":"ContactTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE "type_title" = 'Contact'; UPDATE "#__content_types" SET "table" = '{"special":{"dbtable":"#__newsfeeds","key":"id","type":"Newsfeed","prefix":"NewsfeedsTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE "type_title" = 'Newsfeed'; UPDATE "#__content_types" SET "table" = '{"special":{"dbtable":"#__users","key":"id","type":"User","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE "type_title" = 'User'; UPDATE "#__content_types" SET "table" = '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE "type_title" = 'Article Category'; UPDATE "#__content_types" SET "table" = '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE "type_title" = 'Contact Category'; UPDATE "#__content_types" SET "table" = '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE "type_title" = 'Newsfeeds Category'; UPDATE "#__content_types" SET "table" = '{"special":{"dbtable":"#__tags","key":"tag_id","type":"Tag","prefix":"TagsTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' WHERE "type_title" = 'Tag'; UPDATE "#__content_types" SET "field_mappings" = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"introtext", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"attribs", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"asset_id"}, "special": {"fulltext":"fulltext"}}' WHERE "type_title" = 'Article'; UPDATE "#__content_types" SET "field_mappings" = '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"address", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"image", "core_urls":"webpage", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special": {"con_position":"con_position","suburb":"suburb","state":"state","country":"country","postcode":"postcode","telephone":"telephone","fax":"fax","misc":"misc","email_to":"email_to","default_con":"default_con","user_id":"user_id","mobile":"mobile","sortname1":"sortname1","sortname2":"sortname2","sortname3":"sortname3"}}' WHERE "type_title" = 'Contact'; UPDATE "#__content_types" SET "field_mappings" = '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"link", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special": {"numarticles":"numarticles","cache_time":"cache_time","rtl":"rtl"}}' WHERE "type_title" = 'Newsfeed'; UPDATE "#__content_types" SET "field_mappings" = '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"null","core_alias":"username","core_created_time":"registerdate","core_modified_time":"lastvisitDate","core_body":"null", "core_hits":"null","core_publish_up":"null","core_publish_down":"null","access":"null", "core_params":"params", "core_featured":"null", "core_metadata":"null", "core_language":"null", "core_images":"null", "core_urls":"null", "core_version":"null", "core_ordering":"null", "core_metakey":"null", "core_metadesc":"null", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}, "special": {}}' WHERE "type_title" = 'User'; UPDATE "#__content_types" SET "field_mappings" = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}' WHERE "type_title" = 'Article Category'; UPDATE "#__content_types" SET "field_mappings" = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}' WHERE "type_title" = 'Contact Category'; UPDATE "#__content_types" SET "field_mappings" = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}' WHERE "type_title" = 'Newsfeeds Category'; UPDATE "#__content_types" SET "field_mappings" = '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path"}}' WHERE "type_title" = 'Tag'; PKb��\K ui��@components/com_admin/sql/updates/postgresql/3.3.0-2014-02-16.sqlnu�[���ALTER TABLE "#__users" ADD COLUMN "requireReset" smallint DEFAULT 0; COMMENT ON COLUMN "#__users"."requireReset" IS 'Require user to reset password on next login'; PKb��\�m�ll5components/com_admin/sql/updates/postgresql/3.1.4.sqlnu�[���INSERT INTO "#__extensions" ("extension_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "manifest_cache", "params", "custom_data", "system_data", "checked_out", "checked_out_time", "ordering", "state") VALUES (104, 'IDNA Convert', 'library', 'idna_convert', '', 0, 1, 1, 1, '', '', '', '', 0, '1970-01-01 00:00:00', 0, 0); PKb��\���1::5components/com_admin/sql/updates/postgresql/3.1.5.sqlnu�[���# Placeholder file for database changes for version 3.1.5 PKb��\R�Π��@components/com_admin/sql/updates/postgresql/3.4.0-2014-08-24.sqlnu�[���INSERT INTO "#__postinstall_messages" ("extension_id", "title_key", "description_key", "action_key", "language_extension", "language_client_id", "type", "action_file", "action", "condition_file", "condition_method", "version_introduced", "enabled") VALUES (700, 'COM_CPANEL_MSG_HTACCESS_TITLE', 'COM_CPANEL_MSG_HTACCESS_BODY', '', 'com_cpanel', 1, 'message', '', '', 'admin://components/com_admin/postinstall/htaccess.php', 'admin_postinstall_htaccess_condition', '3.4.0', 1); PKb��\�I0@components/com_admin/sql/updates/postgresql/3.4.0-2015-01-21.sqlnu�[���INSERT INTO "#__postinstall_messages" ("extension_id", "title_key", "description_key", "action_key", "language_extension", "language_client_id", "type", "action_file", "action", "condition_file", "condition_method", "version_introduced", "enabled") VALUES (700, 'COM_CPANEL_MSG_ROBOTS_TITLE', 'COM_CPANEL_MSG_ROBOTS_BODY', '', 'com_cpanel', 1, 'message', '', '', '', '', '3.3.0', 1);PKb��\��00@components/com_admin/sql/updates/postgresql/3.4.0-2014-09-16.sqlnu�[���ALTER TABLE "#__redirect_links" ADD COLUMN "header" INTEGER DEFAULT 301 NOT NULL; -- -- The following statement has to be disabled because it conflicts with -- a later change added with Joomla! 3.5.0 for long URLs in this table -- -- ALTER TABLE "#__redirect_links" ALTER COLUMN "new_url" DROP NOT NULL; PKb��\��B88@components/com_admin/sql/updates/postgresql/3.3.0-2013-12-21.sqlnu�[���# Placeholder file to set the database schema for 3.3.0 PKb��\���995components/com_admin/sql/updates/postgresql/3.1.1.sqlnu�[���# Placeholder file for database changes for version 3.1.1PKb��\�į ��@components/com_admin/sql/updates/postgresql/3.4.4-2015-07-11.sqlnu�[���ALTER TABLE "#__contentitem_tag_map" DROP CONSTRAINT "#__uc_ItemnameTagid", ADD CONSTRAINT "#__uc_ItemnameTagid" UNIQUE ("type_id", "content_item_id", "tag_id"); PKb��\U-<y��@components/com_admin/sql/updates/postgresql/3.2.2-2014-01-15.sqlnu�[���INSERT INTO "#__postinstall_messages" ("extension_id", "title_key", "description_key", "action_key", "language_extension", "language_client_id", "type", "action_file", "action", "condition_file", "condition_method", "version_introduced", "enabled") VALUES (700, 'COM_CPANEL_MSG_PHPVERSION_TITLE', 'COM_CPANEL_MSG_PHPVERSION_BODY', '', 'com_cpanel', 1, 'message', '', '', 'admin://components/com_admin/postinstall/phpversion.php', 'admin_postinstall_phpversion_condition', '3.2.2', 1); PKb��\3i�pp@components/com_admin/sql/updates/postgresql/3.2.2-2014-01-18.sqlnu�[���/* Update updates version length */ ALTER TABLE "#__updates" ALTER COLUMN "version" TYPE character varying(32); PKb��\+M��``@components/com_admin/sql/updates/postgresql/3.2.2-2014-01-23.sqlnu�[���INSERT INTO "#__extensions" ("extension_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "manifest_cache", "params", "custom_data", "system_data", "checked_out", "checked_out_time", "ordering", "state") VALUES (106, 'PHPass', 'library', 'phpass', '', 0, 1, 1, 1, '{"legacy":false,"name":"PHPass","type":"library","creationDate":"2004-2006","author":"Solar Designer","authorEmail":"solar@openwall.com","authorUrl":"http:\/\/www.openwall.com/phpass","version":"0.3","description":"LIB_PHPASS_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '1970-01-01 00:00:00', 0, 0); PKb��\: ;tt@components/com_admin/sql/updates/postgresql/3.2.2-2014-01-08.sqlnu�[���INSERT INTO "#__extensions" ("extension_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "manifest_cache", "params", "custom_data", "system_data", "checked_out", "checked_out_time", "ordering", "state") VALUES (403, 'plg_content_contact', 'plugin', 'contact', 'content', 0, 1, 1, 0, '', '', '', '', 0, '1970-01-01 00:00:00', 1, 0); PKb��\ N�<<5components/com_admin/sql/updates/postgresql/3.0.3.sqlnu�[���ALTER TABLE "#__associations" ALTER COLUMN id TYPE integer; PKb��\���#::5components/com_admin/sql/updates/postgresql/3.0.0.sqlnu�[���-- Placeholder file for database changes for version 3.0.0PKb��\��ܶ995components/com_admin/sql/updates/postgresql/3.0.1.sqlnu�[���# Placeholder file for database changes for version 3.0.1PKb��\C%)���@components/com_admin/sql/updates/postgresql/3.4.0-2014-09-01.sqlnu�[���INSERT INTO "#__extensions" ("extension_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "manifest_cache", "params", "custom_data", "system_data", "checked_out", "checked_out_time", "ordering", "state") VALUES (801, 'weblinks', 'package', 'pkg_weblinks', '', 0, 1, 1, 0, '', '', '', '', 0, '1970-01-01 00:00:00', 0, 0); INSERT INTO "#__update_sites" ("name", "type", "location", "enabled") VALUES ('Weblinks Update Site', 'extension', 'https://raw.githubusercontent.com/joomla-extensions/weblinks/master/manifest.xml', 1); INSERT INTO "#__update_sites_extensions" ("update_site_id", "extension_id") VALUES ((SELECT "update_site_id" FROM "#__update_sites" WHERE "name" = 'Weblinks Update Site'), 801); PKb��\x�����@components/com_admin/sql/updates/postgresql/3.2.2-2013-12-22.sqlnu�[���ALTER TABLE "#__update_sites" ADD COLUMN "extra_query" varchar(1000) DEFAULT ''; ALTER TABLE "#__updates" ADD COLUMN "extra_query" varchar(1000) DEFAULT ''; PKb��\/�ߞ�@components/com_admin/sql/updates/postgresql/3.2.3-2014-02-20.sqlnu�[���UPDATE "#__extensions" SET "params" = (SELECT "params" FROM "#__extensions" WHERE "name" = 'plg_system_remember') WHERE "name" = 'plg_authentication_cookie'; PKb��\� xlfQfQ5components/com_admin/sql/updates/postgresql/3.2.0.sqlnu�[���/* Core 3.2 schema updates */ ALTER TABLE "#__content_types" ADD COLUMN "content_history_options" varchar(5120) DEFAULT NULL; UPDATE "#__content_types" SET "content_history_options" = '{"formFile":"administrator\\/components\\/com_content\\/models\\/forms\\/article.xml", "hideFields":["asset_id","checked_out","checked_out_time","version"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"],"convertToInt":["publish_up", "publish_down", "featured", "ordering"],"displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ]}' WHERE "type_alias" = 'com_content.article'; UPDATE "#__content_types" SET "content_history_options" = '{"formFile":"administrator\\/components\\/com_contact\\/models\\/forms\\/contact.xml","hideFields":["default_con","checked_out","checked_out_time","version","xreference"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"],"convertToInt":["publish_up", "publish_down", "featured", "ordering"], "displayLookup":[ {"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ] }' WHERE "type_alias" = 'com_contact.contact'; UPDATE "#__content_types" SET "content_history_options" = '{"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}' WHERE "type_alias" IN ('com_content.category', 'com_contact.category', 'com_newsfeeds.category'); UPDATE "#__content_types" SET "content_history_options" = '{"formFile":"administrator\\/components\\/com_newsfeeds\\/models\\/forms\\/newsfeed.xml","hideFields":["asset_id","checked_out","checked_out_time","version"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"],"convertToInt":["publish_up", "publish_down", "featured", "ordering"],"displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}' WHERE "type_alias" = 'com_newsfeeds.newsfeed'; UPDATE "#__content_types" SET "content_history_options" = '{"formFile":"administrator\\/components\\/com_tags\\/models\\/forms\\/tag.xml", "hideFields":["checked_out","checked_out_time","version", "lft", "rgt", "level", "path", "urls", "publish_up", "publish_down"],"ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"}, {"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}' WHERE "type_alias" = 'com_tags.tag'; INSERT INTO "#__content_types" ("type_title", "type_alias", "table", "rules", "field_mappings", "router", "content_history_options") VALUES ('Banner', 'com_banners.banner', '{"special":{"dbtable":"#__banners","key":"id","type":"Banner","prefix":"BannersTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"null","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"link", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"null", "asset_id":"null"}, "special":{"imptotal":"imptotal", "impmade":"impmade", "clicks":"clicks", "clickurl":"clickurl", "custombannercode":"custombannercode", "cid":"cid", "purchase_type":"purchase_type", "track_impressions":"track_impressions", "track_clicks":"track_clicks"}}', '', '{"formFile":"administrator\\/components\\/com_banners\\/models\\/forms\\/banner.xml", "hideFields":["checked_out","checked_out_time","version", "reset"],"ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "imptotal", "impmade", "reset"], "convertToInt":["publish_up", "publish_down", "ordering"], "displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}, {"sourceColumn":"cid","targetTable":"#__banner_clients","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}'), ('Banners Category', 'com_banners.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special": {"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}', '', '{"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"], "convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}'), ('Banner Client', 'com_banners.client', '{"special":{"dbtable":"#__banner_clients","key":"id","type":"Client","prefix":"BannersTable"}}', '', '', '', '{"formFile":"administrator\\/components\\/com_banners\\/models\\/forms\\/client.xml", "hideFields":["checked_out","checked_out_time"], "ignoreChanges":["checked_out", "checked_out_time"], "convertToInt":[], "displayLookup":[]}'), ('User Notes', 'com_users.note', '{"special":{"dbtable":"#__user_notes","key":"id","type":"Note","prefix":"UsersTable"}}', '', '', '', '{"formFile":"administrator\\/components\\/com_users\\/models\\/forms\\/note.xml", "hideFields":["checked_out","checked_out_time", "publish_up", "publish_down"],"ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time"], "convertToInt":["publish_up", "publish_down"],"displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}, {"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}]}'), ('User Notes Category', 'com_users.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}', '', '{"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", "hideFields":["checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"], "convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, {"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}'); UPDATE "#__extensions" SET "params" = '{"template_positions_display":"0","upload_limit":"2","image_formats":"gif,bmp,jpg,jpeg,png","source_formats":"txt,less,ini,xml,js,php,css","font_formats":"woff,ttf,otf","compressed_formats":"zip"}' WHERE "extension_id" = 20; UPDATE "#__extensions" SET "params" = '{"lineNumbers":"1","lineWrapping":"1","matchTags":"1","matchBrackets":"1","marker-gutter":"1","autoCloseTags":"1","autoCloseBrackets":"1","autoFocus":"1","theme":"default","tabmode":"indent"}' WHERE "extension_id" = 410; INSERT INTO "#__extensions" ("extension_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "manifest_cache", "params", "custom_data", "system_data", "checked_out", "checked_out_time", "ordering", "state") VALUES (30, 'com_contenthistory', 'component', 'com_contenthistory', '', 1, 1, 1, 0, '{"name":"com_contenthistory","type":"component","creationDate":"May 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.\\n\\t","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.2.0","description":"COM_CONTENTHISTORY_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '1970-01-01 00:00:00', 0, 0), (31, 'com_ajax', 'component', 'com_ajax', '', 1, 1, 1, 0, '{"name":"com_ajax","type":"component","creationDate":"August 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.2.0","description":"COM_AJAX_DESC","group":""}', '{}', '', '', 0, '1970-01-01 00:00:00', 0, 0), (32, 'com_postinstall', 'component', 'com_postinstall', '', 1, 1, 1, 1, '', '', '', '', 0, '1970-01-01 00:00:00', 0, 0), (105, 'FOF', 'library', 'fof', '', 0, 1, 1, 1, '{"legacy":false,"name":"FOF","type":"library","creationDate":"2013-10-08","author":"Nicholas K. Dionysopoulos \/ Akeeba Ltd","copyright":"(C)2011-2013 Nicholas K. Dionysopoulos","authorEmail":"nicholas@akeebabackup.com","authorUrl":"https:\/\/www.akeebabackup.com","version":"2.1.rc4","description":"Framework-on-Framework (FOF) - A rapid component development framework for Joomla!","group":""}', '{}', '', '', 0, '1970-01-01 00:00:00', 0, 0), (448, 'plg_twofactorauth_totp', 'plugin', 'totp', 'twofactorauth', 0, 0, 1, 0, '{"name":"plg_twofactorauth_totp","type":"plugin","creationDate":"August 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.2.0","description":"PLG_TWOFACTORAUTH_TOTP_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '1970-01-01 00:00:00', 0, 0), (449, 'plg_authentication_cookie', 'plugin', 'cookie', 'authentication', 0, 1, 1, 0, '{"name":"plg_authentication_cookie","type":"plugin","creationDate":"July 2013","author":"Joomla! Project","copyright":"Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.0.0","description":"PLG_AUTH_COOKIE_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '1970-01-01 00:00:00', 0, 0), (450, 'plg_twofactorauth_yubikey', 'plugin', 'yubikey', 'twofactorauth', 0, 0, 1, 0, '{"name":"plg_twofactorauth_yubikey","type":"plugin","creationDate":"Se[ptember 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.2.0","description":"PLG_TWOFACTORAUTH_YUBIKEY_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '1970-01-01 00:00:00', 0, 0); INSERT INTO "#__menu" ("menutype", "title", "alias", "note", "path", "link", "type", "published", "parent_id", "level", "component_id", "checked_out", "checked_out_time", "browserNav", "access", "img", "template_style_id", "params", "lft", "rgt", "home", "language", "client_id") VALUES ('main', 'com_postinstall', 'Post-installation messages', '', 'Post-installation messages', 'index.php?option=com_postinstall', 'component', 0, 1, 1, 32, 0, '1970-01-01 00:00:00', 0, 1, 'class:postinstall', 0, '', 45, 46, 0, '*', 1); ALTER TABLE "#__modules" ADD COLUMN "asset_id" bigint DEFAULT 0 NOT NULL; CREATE TABLE "#__postinstall_messages" ( "postinstall_message_id" serial NOT NULL, "extension_id" bigint NOT NULL DEFAULT 700, "title_key" varchar(255) NOT NULL DEFAULT '', "description_key" varchar(255) NOT NULL DEFAULT '', "action_key" varchar(255) NOT NULL DEFAULT '', "language_extension" varchar(255) NOT NULL DEFAULT 'com_postinstall', "language_client_id" smallint NOT NULL DEFAULT 1, "type" varchar(10) NOT NULL DEFAULT 'link', "action_file" varchar(255) DEFAULT '', "action" varchar(255) DEFAULT '', "condition_file" varchar(255) DEFAULT NULL, "condition_method" varchar(255) DEFAULT NULL, "version_introduced" varchar(255) NOT NULL DEFAULT '3.2.0', "enabled" smallint NOT NULL DEFAULT 1, PRIMARY KEY ("postinstall_message_id") ); COMMENT ON COLUMN "#__postinstall_messages"."extension_id" IS 'FK to jos_extensions'; COMMENT ON COLUMN "#__postinstall_messages"."title_key" IS 'Lang key for the title'; COMMENT ON COLUMN "#__postinstall_messages"."description_key" IS 'Lang key for description'; COMMENT ON COLUMN "#__postinstall_messages"."language_extension" IS 'Extension holding lang keys'; COMMENT ON COLUMN "#__postinstall_messages"."type" IS 'Message type - message, link, action'; COMMENT ON COLUMN "#__postinstall_messages"."action_file" IS 'RAD URI to the PHP file containing action method'; COMMENT ON COLUMN "#__postinstall_messages"."action" IS 'Action method name or URL'; COMMENT ON COLUMN "#__postinstall_messages"."condition_file" IS 'RAD URI to file holding display condition method'; COMMENT ON COLUMN "#__postinstall_messages"."condition_method" IS 'Display condition method, must return boolean'; COMMENT ON COLUMN "#__postinstall_messages"."version_introduced" IS 'Version when this message was introduced'; INSERT INTO "#__postinstall_messages" ("extension_id", "title_key", "description_key", "action_key", "language_extension", "language_client_id", "type", "action_file", "action", "condition_file", "condition_method", "version_introduced", "enabled") VALUES (700, 'PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_TITLE', 'PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_BODY', 'PLG_TWOFACTORAUTH_TOTP_POSTINSTALL_ACTION', 'plg_twofactorauth_totp', 1, 'action', 'site://plugins/twofactorauth/totp/postinstall/actions.php', 'twofactorauth_postinstall_action', 'site://plugins/twofactorauth/totp/postinstall/actions.php', 'twofactorauth_postinstall_condition', '3.2.0', 1), (700, 'COM_CPANEL_MSG_EACCELERATOR_TITLE', 'COM_CPANEL_MSG_EACCELERATOR_BODY', 'COM_CPANEL_MSG_EACCELERATOR_BUTTON', 'com_cpanel', 1, 'action', 'admin://components/com_admin/postinstall/eaccelerator.php', 'admin_postinstall_eaccelerator_action', 'admin://components/com_admin/postinstall/eaccelerator.php', 'admin_postinstall_eaccelerator_condition', '3.2.0', 1); CREATE TABLE "#__ucm_history" ( "version_id" serial NOT NULL, "ucm_item_id" integer NOT NULL, "ucm_type_id" integer NOT NULL, "version_note" varchar(255) NOT NULL DEFAULT '', "save_date" timestamp with time zone NOT NULL DEFAULT '1970-01-01 00:00:00', "editor_user_id" integer NOT NULL DEFAULT 0, "character_count" integer NOT NULL DEFAULT 0, "sha1_hash" varchar(50) NOT NULL DEFAULT '', "version_data" text NOT NULL, "keep_forever" smallint NOT NULL DEFAULT 0, PRIMARY KEY ("version_id") ); CREATE INDEX "#__ucm_history_idx_ucm_item_id" ON "#__ucm_history" ("ucm_type_id", "ucm_item_id"); CREATE INDEX "#__ucm_history_idx_save_date" ON "#__ucm_history" ("save_date"); COMMENT ON COLUMN "#__ucm_history"."version_note" IS 'Optional version name'; COMMENT ON COLUMN "#__ucm_history"."character_count" IS 'Number of characters in this version.'; COMMENT ON COLUMN "#__ucm_history"."sha1_hash" IS 'SHA1 hash of the version_data column.'; COMMENT ON COLUMN "#__ucm_history"."version_data" IS 'json-encoded string of version data'; COMMENT ON COLUMN "#__ucm_history"."keep_forever" IS '0=auto delete; 1=keep'; ALTER TABLE "#__users" ADD COLUMN "otpKey" varchar(1000) DEFAULT '' NOT NULL; ALTER TABLE "#__users" ADD COLUMN "otep" varchar(1000) DEFAULT '' NOT NULL; CREATE TABLE "#__user_keys" ( "id" serial NOT NULL, "user_id" varchar(255) NOT NULL, "token" varchar(255) NOT NULL, "series" varchar(255) NOT NULL, "invalid" smallint NOT NULL, "time" varchar(200) NOT NULL, "uastring" varchar(255) NOT NULL, PRIMARY KEY ("id"), CONSTRAINT "#__user_keys_series" UNIQUE ("series"), CONSTRAINT "#__user_keys_series_2" UNIQUE ("series"), CONSTRAINT "#__user_keys_series_3" UNIQUE ("series") ); CREATE INDEX "#__user_keys_idx_user_id" ON "#__user_keys" ("user_id"); /* Queries below sync the schema to MySQL where able without causing errors */ ALTER TABLE "#__contentitem_tag_map" ADD COLUMN "type_id" integer NOT NULL; CREATE INDEX "#__contentitem_tag_map_idx_tag_type" ON "#__contentitem_tag_map" ("tag_id", "type_id"); CREATE INDEX "#__contentitem_tag_map_idx_type" ON "#__contentitem_tag_map" ("type_id"); COMMENT ON COLUMN "#__contentitem_tag_map"."type_id" IS 'PK from the content_type table'; ALTER TABLE "#__session" DROP COLUMN "usertype"; ALTER TABLE "#__updates" DROP COLUMN "categoryid"; ALTER TABLE "#__users" DROP COLUMN "usertype"; PKb��\�kNkN5components/com_admin/sql/updates/postgresql/3.1.0.sqlnu�[���/* Changes to tables where data type conflicts exist with MySQL (mainly dealing with null values */ ALTER TABLE "#__modules" ALTER COLUMN "content" SET DEFAULT ''; -- -- The following statement has to be disabled because it conflicts with -- a later change added with Joomla! 3.8.8 to repair the update of database schema changes -- -- ALTER TABLE "#__updates" ALTER COLUMN "data" SET DEFAULT ''; /* Tags database schema */ -- -- Table: #__content_types -- CREATE TABLE "#__content_types" ( "type_id" serial NOT NULL, "type_title" character varying(255) NOT NULL DEFAULT '', "type_alias" character varying(255) NOT NULL DEFAULT '', "table" character varying(255) NOT NULL DEFAULT '', "rules" text NOT NULL, "field_mappings" text NOT NULL, "router" character varying(255) NOT NULL DEFAULT '', PRIMARY KEY ("type_id") ); CREATE INDEX "#__content_types_idx_alias" ON "#__content_types" ("type_alias"); -- -- Dumping data for table #__content_types -- INSERT INTO "#__content_types" ("type_id", "type_title", "type_alias", "table", "rules", "field_mappings", "router") VALUES (1, 'Article', 'com_content.article', '{"special":{"dbtable":"#__content","key":"id","type":"Content","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"introtext", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"attribs", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"asset_id"}], "special": [{"fulltext":"fulltext"}]}','ContentHelperRoute::getArticleRoute'), (2, 'Contact', 'com_contact.contact', '{"special":{"dbtable":"#__contact_details","key":"id","type":"Contact","prefix":"ContactTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"address", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"image", "core_urls":"webpage", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}], "special": [{"con_position":"con_position","suburb":"suburb","state":"state","country":"country","postcode":"postcode","telephone":"telephone","fax":"fax","misc":"misc","email_to":"email_to","default_con":"default_con","user_id":"user_id","mobile":"mobile","sortname1":"sortname1","sortname2":"sortname2","sortname3":"sortname3"}]}','ContactHelperRoute::getContactRoute'), (3, 'Newsfeed', 'com_newsfeeds.newsfeed', '{"special":{"dbtable":"#__newsfeeds","key":"id","type":"Newsfeed","prefix":"NewsfeedsTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"name","core_state":"published","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"link", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}], "special": [{"numarticles":"numarticles","cache_time":"cache_time","rtl":"rtl"}]}','NewsfeedsHelperRoute::getNewsfeedRoute'), (4, 'User', 'com_users.user', '{"special":{"dbtable":"#__users","key":"id","type":"User","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"name","core_state":"null","core_alias":"username","core_created_time":"registerdate","core_modified_time":"lastvisitDate","core_body":"null", "core_hits":"null","core_publish_up":"null","core_publish_down":"null","access":"null", "core_params":"params", "core_featured":"null", "core_metadata":"null", "core_language":"null", "core_images":"null", "core_urls":"null", "core_version":"null", "core_ordering":"null", "core_metakey":"null", "core_metadesc":"null", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}], "special": [{}]}','UsersHelperRoute::getUserRoute'), (5, 'Article Category', 'com_content.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}]}','ContentHelperRoute::getCategoryRoute'), (6, 'Contact Category', 'com_contact.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}]}','ContactHelperRoute::getCategoryRoute'), (7, 'Newsfeeds Category', 'com_newsfeeds.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}]}','NewsfeedsHelperRoute::getCategoryRoute'), (8, 'Tag', 'com_tags.tag', '{"special":{"dbtable":"#__tags","key":"tag_id","type":"Tag","prefix":"TagsTable","config":"array()"},"common":{"dbtable":"#__core_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":[{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"null", "core_xreference":"null", "asset_id":"null"}], "special": [{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path"}]}','TagsHelperRoute::getTagRoute'); SELECT nextval('#__content_types_type_id_seq'); SELECT setval('#__content_types_type_id_seq', 10000, false); -- -- Table: #__contentitem_tag_map -- CREATE TABLE "#__contentitem_tag_map" ( "type_alias" character varying(255) NOT NULL DEFAULT '', "core_content_id" integer NOT NULL, "content_item_id" integer NOT NULL, "tag_id" integer NOT NULL, "tag_date" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, CONSTRAINT "uc_ItemnameTagid" UNIQUE ("type_alias", "content_item_id", "tag_id") ); CREATE INDEX "#__contentitem_tag_map_idx_tag_type" ON "#__contentitem_tag_map" ("tag_id", "type_alias"); CREATE INDEX "#__contentitem_tag_map_idx_date_id" ON "#__contentitem_tag_map" ("tag_date", "tag_id"); CREATE INDEX "#__contentitem_tag_map_idx_tag" ON "#__contentitem_tag_map" ("tag_id"); CREATE INDEX "#__contentitem_tag_map_idx_core_content_id" ON "#__contentitem_tag_map" ("core_content_id"); COMMENT ON COLUMN "#__contentitem_tag_map"."core_content_id" IS 'PK from the core content table'; COMMENT ON COLUMN "#__contentitem_tag_map"."content_item_id" IS 'PK from the content type table'; COMMENT ON COLUMN "#__contentitem_tag_map"."tag_id" IS 'PK from the tag table'; COMMENT ON COLUMN "#__contentitem_tag_map"."tag_date" IS 'Date of most recent save for this tag-item'; -- -------------------------------------------------------- -- -- Table: #__tags -- CREATE TABLE "#__tags" ( "id" serial NOT NULL, "parent_id" bigint DEFAULT 0 NOT NULL, "lft" bigint DEFAULT 0 NOT NULL, "rgt" bigint DEFAULT 0 NOT NULL, "level" integer DEFAULT 0 NOT NULL, "path" character varying(255) DEFAULT '' NOT NULL, "title" character varying(255) NOT NULL, "alias" character varying(255) DEFAULT '' NOT NULL, "note" character varying(255) DEFAULT '' NOT NULL, "description" text DEFAULT '' NOT NULL, "published" smallint DEFAULT 0 NOT NULL, "checked_out" bigint DEFAULT 0 NOT NULL, "checked_out_time" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "access" bigint DEFAULT 0 NOT NULL, "params" text NOT NULL, "metadesc" character varying(1024) NOT NULL, "metakey" character varying(1024) NOT NULL, "metadata" character varying(2048) NOT NULL, "created_user_id" integer DEFAULT 0 NOT NULL, "created_time" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "created_by_alias" character varying(255) DEFAULT '' NOT NULL, "modified_user_id" integer DEFAULT 0 NOT NULL, "modified_time" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "images" text NOT NULL, "urls" text NOT NULL, "hits" integer DEFAULT 0 NOT NULL, "language" character varying(7) DEFAULT '' NOT NULL, "version" bigint DEFAULT 1 NOT NULL, "publish_up" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "publish_down" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, PRIMARY KEY ("id") ); CREATE INDEX "#__tags_cat_idx" ON "#__tags" ("published", "access"); CREATE INDEX "#__tags_idx_access" ON "#__tags" ("access"); CREATE INDEX "#__tags_idx_checkout" ON "#__tags" ("checked_out"); CREATE INDEX "#__tags_idx_path" ON "#__tags" ("path"); CREATE INDEX "#__tags_idx_left_right" ON "#__tags" ("lft", "rgt"); CREATE INDEX "#__tags_idx_alias" ON "#__tags" ("alias"); CREATE INDEX "#__tags_idx_language" ON "#__tags" ("language"); -- -- Dumping data for table #__tags -- INSERT INTO "#__tags" ("id", "parent_id", "lft", "rgt", "level", "path", "title", "alias", "note", "description", "published", "checked_out", "checked_out_time", "access", "params", "metadesc", "metakey", "metadata", "created_user_id", "created_time", "created_by_alias", "modified_user_id", "modified_time", "images", "urls", "hits", "language", "version") VALUES (1, 0, 0, 1, 0, '', 'ROOT', 'root', '', '', 1, 0, '1970-01-01 00:00:00', 1, '{}', '', '', '', 42, '1970-01-01 00:00:00', '', 0, '1970-01-01 00:00:00', '', '', 0, '*', 1); SELECT nextval('#__tags_id_seq'); SELECT setval('#__tags_id_seq', 2, false); -- -- Table: #__ucm_base -- CREATE TABLE "#__ucm_base" ( "ucm_id" serial NOT NULL, "ucm_item_id" bigint NOT NULL, "ucm_type_id" bigint NOT NULL, "ucm_language_id" bigint NOT NULL, PRIMARY KEY ("ucm_id") ); CREATE INDEX "#__ucm_base_ucm_item_id" ON "#__ucm_base" ("ucm_item_id"); CREATE INDEX "#__ucm_base_ucm_type_id" ON "#__ucm_base" ("ucm_type_id"); CREATE INDEX "#__ucm_base_ucm_language_id" ON "#__ucm_base" ("ucm_language_id"); -- -- Table: #__ucm_content -- CREATE TABLE "#__ucm_content" ( "core_content_id" serial NOT NULL, "core_type_alias" character varying(255) DEFAULT '' NOT NULL, "core_title" character varying(255) NOT NULL, "core_alias" character varying(255) DEFAULT '' NOT NULL, "core_body" text NOT NULL, "core_state" smallint DEFAULT 0 NOT NULL, "core_checked_out_time" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "core_checked_out_user_id" bigint DEFAULT 0 NOT NULL, "core_access" bigint DEFAULT 0 NOT NULL, "core_params" text NOT NULL, "core_featured" smallint DEFAULT 0 NOT NULL, "core_metadata" text NOT NULL, "core_created_user_id" bigint DEFAULT 0 NOT NULL, "core_created_by_alias" character varying(255) DEFAULT '' NOT NULL, "core_created_time" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "core_modified_user_id" bigint DEFAULT 0 NOT NULL, "core_modified_time" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "core_language" character varying(7) DEFAULT '' NOT NULL, "core_publish_up" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "core_publish_down" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "core_content_item_id" bigint DEFAULT 0 NOT NULL, "asset_id" bigint DEFAULT 0 NOT NULL, "core_images" text NOT NULL, "core_urls" text NOT NULL, "core_hits" bigint DEFAULT 0 NOT NULL, "core_version" bigint DEFAULT 1 NOT NULL, "core_ordering" bigint DEFAULT 0 NOT NULL, "core_metakey" text NOT NULL, "core_metadesc" text NOT NULL, "core_catid" bigint DEFAULT 0 NOT NULL, "core_xreference" character varying(50) DEFAULT '' NOT NULL, "core_type_id" bigint DEFAULT 0 NOT NULL, PRIMARY KEY ("core_content_id"), CONSTRAINT "#__ucm_content_idx_type_alias_item_id" UNIQUE ("core_type_alias", "core_content_item_id") ); CREATE INDEX "#__ucm_content_tag_idx" ON "#__ucm_content" ("core_state", "core_access"); CREATE INDEX "#__ucm_content_idx_access" ON "#__ucm_content" ("core_access"); CREATE INDEX "#__ucm_content_idx_alias" ON "#__ucm_content" ("core_alias"); CREATE INDEX "#__ucm_content_idx_language" ON "#__ucm_content" ("core_language"); CREATE INDEX "#__ucm_content_idx_title" ON "#__ucm_content" ("core_title"); CREATE INDEX "#__ucm_content_idx_modified_time" ON "#__ucm_content" ("core_modified_time"); CREATE INDEX "#__ucm_content_idx_created_time" ON "#__ucm_content" ("core_created_time"); CREATE INDEX "#__ucm_content_idx_content_type" ON "#__ucm_content" ("core_type_alias"); CREATE INDEX "#__ucm_content_idx_core_modified_user_id" ON "#__ucm_content" ("core_modified_user_id"); CREATE INDEX "#__ucm_content_idx_core_checked_out_user_id" ON "#__ucm_content" ("core_checked_out_user_id"); CREATE INDEX "#__ucm_content_idx_core_created_user_id" ON "#__ucm_content" ("core_created_user_id"); CREATE INDEX "#__ucm_content_idx_core_type_id" ON "#__ucm_content" ("core_type_id"); -- -- Add extensions table records -- INSERT INTO "#__extensions" ("extension_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "manifest_cache", "params", "custom_data", "system_data", "checked_out", "checked_out_time", "ordering", "state") VALUES (29, 'com_tags', 'component', 'com_tags', '', 1, 1, 1, 1, '{"legacy":false,"name":"com_tags","type":"component","creationDate":"March 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.0.0","description":"COM_TAGS_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '1970-01-01 00:00:00', 0, 0), (315, 'mod_stats_admin', 'module', 'mod_stats_admin', '', 1, 1, 1, 0, '{"name":"mod_stats_admin","type":"module","creationDate":"September 2012","author":"Joomla! Project","copyright":"Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.0.0","description":"MOD_STATS_XML_DESCRIPTION","group":""}', '{"serverinfo":"0","siteinfo":"0","counter":"0","increase":"0","cache":"1","cache_time":"900","cachemode":"static"}', '', '', 0, '1970-01-01 00:00:00', 0, 0), (316, 'mod_tags_popular', 'module', 'mod_tags_popular', '', 0, 1, 1, 0, '{"name":"mod_tags_popular","type":"module","creationDate":"January 2013","author":"Joomla! Project","copyright":"Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.1.0","description":"MOD_TAGS_POPULAR_XML_DESCRIPTION","group":""}', '{"maximum":"5","timeframe":"alltime","owncache":"1"}', '', '', 0, '1970-01-01 00:00:00', 0, 0), (317, 'mod_tags_similar', 'module', 'mod_tags_similar', '', 0, 1, 1, 0, '{"name":"mod_tags_similar","type":"module","creationDate":"January 2013","author":"Joomla! Project","copyright":"Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.1.0","description":"MOD_TAGS_SIMILAR_XML_DESCRIPTION","group":""}', '{"maximum":"5","matchtype":"any","owncache":"1"}', '', '', 0, '1970-01-01 00:00:00', 0, 0), (447, 'plg_finder_tags', 'plugin', 'tags', 'finder', 0, 1, 1, 0, '{"name":"plg_finder_tags","type":"plugin","creationDate":"February 2013","author":"Joomla! Project","copyright":"(C) 2005 - 2019 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"3.0.0","description":"PLG_FINDER_TAGS_XML_DESCRIPTION","group":""}', '{}', '', '', 0, '1970-01-01 00:00:00', 0, 0); -- -- Add menu table records -- INSERT INTO "#__menu" ("menutype", "title", "alias", "note", "path", "link", "type", "published", "parent_id", "level", "component_id", "checked_out", "checked_out_time", "browserNav", "access", "img", "template_style_id", "params", "lft", "rgt", "home", "language", "client_id") VALUES ('main', 'com_tags', 'Tags', '', 'Tags', 'index.php?option=com_tags', 'component', 0, 1, 1, 29, 0, '1970-01-01 00:00:00', 0, 1, 'class:tags', 0, '', 45, 46, 0, '', 1); PKb��\ Tt�88@components/com_admin/sql/updates/postgresql/3.4.0-2014-10-20.sqlnu�[���DELETE FROM "#__extensions" WHERE "extension_id" = 100; PKb��\o�{>>0components/com_admin/views/help/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); ?> <form action="<?php echo JRoute::_('index.php?option=com_admin&view=help'); ?>" method="post" name="adminForm" id="adminForm"> <div class="row-fluid"> <div id="sidebar" class="span3"> <div class="clearfix"></div> <div class="sidebar-nav"> <ul class="nav nav-list"> <li><?php echo JHtml::_('link', JHelp::createUrl('JHELP_START_HERE'), JText::_('COM_ADMIN_START_HERE'), array('target' => 'helpFrame')); ?></li> <li><?php echo JHtml::_('link', $this->latest_version_check, JText::_('COM_ADMIN_LATEST_VERSION_CHECK'), array('target' => 'helpFrame')); ?></li> <li><?php echo JHtml::_('link', 'https://www.gnu.org/licenses/gpl-2.0.html', JText::_('COM_ADMIN_LICENSE'), array('target' => 'helpFrame')); ?></li> <li><?php echo JHtml::_('link', JHelp::createUrl('JHELP_GLOSSARY'), JText::_('COM_ADMIN_GLOSSARY'), array('target' => 'helpFrame')); ?></li> <li class="divider"></li> <li class="nav-header"><?php echo JText::_('COM_ADMIN_ALPHABETICAL_INDEX'); ?></li> <?php foreach ($this->toc as $k => $v) : ?> <li> <?php $url = JHelp::createUrl('JHELP_' . strtoupper($k)); ?> <?php echo JHtml::_('link', $url, $v, array('target' => 'helpFrame')); ?> </li> <?php endforeach; ?> </ul> </div> </div> <div class="span9"> <iframe name="helpFrame" title="helpFrame" height="2100px" src="<?php echo $this->page; ?>" class="helpFrame table table-bordered"></iframe> </div> </div> <input class="textarea" type="hidden" name="option" value="com_admin" /> </form> PKb��\�-a-{{-components/com_admin/views/help/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Admin component * * @since 1.6 */ class AdminViewHelp extends JViewLegacy { /** * The search string * * @var string * @since 1.6 */ protected $help_search = null; /** * The page to be viewed * * @var string * @since 1.6 */ protected $page = null; /** * The iso language tag * * @var string * @since 1.6 */ protected $lang_tag = null; /** * Table of contents * * @var array * @since 1.6 */ protected $toc = array(); /** * URL for the latest version check * * @var string * @since 1.6 */ protected $latest_version_check = 'https://downloads.joomla.org/latest'; /** * URL for the start here link * * @var string * @since 1.6 */ protected $start_here = null; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { $this->help_search = $this->get('HelpSearch'); $this->page = $this->get('Page'); $this->toc = $this->get('Toc'); $this->lang_tag = $this->get('LangTag'); $this->latest_version_check = $this->get('LatestVersionCheck'); $this->addToolbar(); return parent::display($tpl); } /** * Setup the Toolbar * * @return void * * @since 1.6 */ protected function addToolbar() { JToolbarHelper::title(JText::_('COM_ADMIN_HELP'), 'support help_header'); } } PKb��\y�=�DD0components/com_admin/views/profile/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(task) { if (task == "profile.cancel" || document.formvalidator.isValid(document.getElementById("profile-form"))) { Joomla.submitform(task, document.getElementById("profile-form")); } }; '); // Load chosen.css JHtml::_('formbehavior.chosen', 'select'); // Fieldsets to not automatically render by /layouts/joomla/edit/params.php $this->ignore_fieldsets = array('user_details'); ?> <form action="<?php echo JRoute::_('index.php?option=com_admin&view=profile&layout=edit&id=' . $this->item->id); ?>" method="post" name="adminForm" id="profile-form" class="form-validate form-horizontal" enctype="multipart/form-data"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'account')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'account', JText::_('COM_ADMIN_USER_ACCOUNT_DETAILS')); ?> <?php foreach ($this->form->getFieldset('user_details') as $field) : ?> <?php if ($field->fieldname === 'password2') : ?> <?php // Disables autocomplete ?> <input type="password" style="display:none"> <?php endif; ?> <?php echo $field->renderField(); ?> <?php endforeach; ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\/�E�\\0components/com_admin/views/profile/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class to allow users edit their own profile. * * @since 1.6 */ class AdminViewProfile extends JViewLegacy { /** * The JForm object * * @var JForm * @since 1.6 */ protected $form; /** * The item being viewed * * @var object * @since 1.6 */ protected $item; /** * The model state * * @var object * @since 1.6 */ protected $state; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->form->setValue('password', null); $this->form->setValue('password2', null); $this->addToolbar(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', 1); JToolbarHelper::title(JText::_('COM_ADMIN_VIEW_PROFILE_TITLE'), 'user user-profile'); JToolbarHelper::apply('profile.apply'); JToolbarHelper::save('profile.save'); JToolbarHelper::cancel('profile.cancel', 'JTOOLBAR_CLOSE'); JToolbarHelper::divider(); JToolbarHelper::help('JHELP_ADMIN_USER_PROFILE_EDIT'); } } PKb��\0�M� � :components/com_admin/views/sysinfo/tmpl/default_system.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_ADMIN_SYSTEM_INFORMATION'); ?></legend> <table class="table table-striped"> <thead> <tr> <th width="25%"> <?php echo JText::_('COM_ADMIN_SETTING'); ?> </th> <th> <?php echo JText::_('COM_ADMIN_VALUE'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="2"> </td> </tr> </tfoot> <tbody> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_PHP_BUILT_ON'); ?></strong> </td> <td> <?php echo $this->info['php']; ?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_DATABASE_TYPE'); ?></strong> </td> <td> <?php echo $this->info['dbserver']; ?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_DATABASE_VERSION'); ?></strong> </td> <td> <?php echo $this->info['dbversion']; ?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_DATABASE_COLLATION'); ?></strong> </td> <td> <?php echo $this->info['dbcollation']; ?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_DATABASE_CONNECTION_COLLATION'); ?></strong> </td> <td> <?php echo $this->info['dbconnectioncollation']; ?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_PHP_VERSION'); ?></strong> </td> <td> <?php echo $this->info['phpversion']; ?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_WEB_SERVER'); ?></strong> </td> <td> <?php echo JHtml::_('system.server', $this->info['server']); ?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_WEBSERVER_TO_PHP_INTERFACE'); ?></strong> </td> <td> <?php echo $this->info['sapi_name']; ?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_JOOMLA_VERSION'); ?></strong> </td> <td> <?php echo $this->info['version']; ?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_PLATFORM_VERSION'); ?></strong> </td> <td> <?php echo $this->info['platform']; ?> </td> </tr> <tr> <td> <strong><?php echo JText::_('COM_ADMIN_USER_AGENT'); ?></strong> </td> <td> <?php echo htmlspecialchars($this->info['useragent'], ENT_COMPAT, 'UTF-8'); ?> </td> </tr> </tbody> </table> </fieldset> PKb��\�� <��;components/com_admin/views/sysinfo/tmpl/default_phpinfo.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_ADMIN_PHP_INFORMATION'); ?></legend> <?php echo $this->php_info; ?> </fieldset> PKb��\8����:components/com_admin/views/sysinfo/tmpl/default_config.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_ADMIN_CONFIGURATION_FILE'); ?></legend> <table class="table table-striped"> <thead> <tr> <th width="300"> <?php echo JText::_('COM_ADMIN_SETTING'); ?> </th> <th> <?php echo JText::_('COM_ADMIN_VALUE'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="2"> </td> </tr> </tfoot> <tbody> <?php foreach ($this->config as $key => $value) : ?> <tr> <td> <?php echo $key; ?> </td> <td> <?php echo htmlspecialchars($value, ENT_QUOTES); ?> </td> </tr> <?php endforeach; ?> </tbody> </table> </fieldset> PKb��\�vx?components/com_admin/views/sysinfo/tmpl/default_phpsettings.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_ADMIN_RELEVANT_PHP_SETTINGS'); ?></legend> <table class="table table-striped"> <thead> <tr> <th width="250"> <?php echo JText::_('COM_ADMIN_SETTING'); ?> </th> <th> <?php echo JText::_('COM_ADMIN_VALUE'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="2">  </td> </tr> </tfoot> <tbody> <tr> <td> <?php echo JText::_('COM_ADMIN_SAFE_MODE'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['safe_mode']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_OPEN_BASEDIR'); ?> </td> <td> <?php echo JHtml::_('phpsetting.string', $this->php_settings['open_basedir']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_DISPLAY_ERRORS'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['display_errors']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_SHORT_OPEN_TAGS'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['short_open_tag']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_FILE_UPLOADS'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['file_uploads']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_MAGIC_QUOTES'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['magic_quotes_gpc']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_REGISTER_GLOBALS'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['register_globals']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_OUTPUT_BUFFERING'); ?> </td> <td> <?php echo JHtml::_('phpsetting.boolean', $this->php_settings['output_buffering']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_SESSION_SAVE_PATH'); ?> </td> <td> <?php echo JHtml::_('phpsetting.string', $this->php_settings['session.save_path']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_SESSION_AUTO_START'); ?> </td> <td> <?php echo JHtml::_('phpsetting.integer', $this->php_settings['session.auto_start']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_XML_ENABLED'); ?> </td> <td> <?php echo JHtml::_('phpsetting.set', $this->php_settings['xml']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_ZLIB_ENABLED'); ?> </td> <td> <?php echo JHtml::_('phpsetting.set', $this->php_settings['zlib']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_ZIP_ENABLED'); ?> </td> <td> <?php echo JHtml::_('phpsetting.set', $this->php_settings['zip']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_DISABLED_FUNCTIONS'); ?> </td> <td class="break-word"> <?php echo JHtml::_('phpsetting.string', $this->php_settings['disable_functions']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_MBSTRING_ENABLED'); ?> </td> <td> <?php echo JHtml::_('phpsetting.set', $this->php_settings['mbstring']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_ICONV_AVAILABLE'); ?> </td> <td> <?php echo JHtml::_('phpsetting.set', $this->php_settings['iconv']); ?> </td> </tr> <tr> <td> <?php echo JText::_('COM_ADMIN_MAX_INPUT_VARS'); ?> </td> <td> <?php echo JHtml::_('phpsetting.integer', $this->php_settings['max_input_vars']); ?> </td> </tr> </tbody> </table> </fieldset> PKb��\��aff3components/com_admin/views/sysinfo/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Add specific helper files for html generation JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); ?> <form action="<?php echo JRoute::_('index.php?option=com_admin&view=sysinfo'); ?>" method="post" name="adminForm" id="adminForm"> <div class="row-fluid"> <!-- Begin Content --> <div class="span12"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'site')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'site', JText::_('COM_ADMIN_SYSTEM_INFORMATION')); ?> <?php echo $this->loadTemplate('system'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'phpsettings', JText::_('COM_ADMIN_PHP_SETTINGS')); ?> <?php echo $this->loadTemplate('phpsettings'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'config', JText::_('COM_ADMIN_CONFIGURATION_FILE')); ?> <?php echo $this->loadTemplate('config'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'directory', JText::_('COM_ADMIN_DIRECTORY_PERMISSIONS')); ?> <?php echo $this->loadTemplate('directory'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'phpinfo', JText::_('COM_ADMIN_PHP_INFORMATION')); ?> <?php echo $this->loadTemplate('phpinfo'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> </div> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> <!-- End Content --> </div> </form> PKb��\��z��=components/com_admin/views/sysinfo/tmpl/default_directory.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset class="adminform"> <legend><?php echo JText::_('COM_ADMIN_DIRECTORY_PERMISSIONS'); ?></legend> <table class="table table-striped"> <thead> <tr> <th width="650"> <?php echo JText::_('COM_ADMIN_DIRECTORY'); ?> </th> <th> <?php echo JText::_('COM_ADMIN_STATUS'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="2"> </td> </tr> </tfoot> <tbody> <?php foreach ($this->directory as $dir => $info) : ?> <tr> <td> <?php echo JHtml::_('directory.message', $dir, $info['message']); ?> </td> <td> <?php echo JHtml::_('directory.writable', $info['writable']); ?> </td> </tr> <?php endforeach; ?> </tbody> </table> </fieldset> PKb��\�D�w w 0components/com_admin/views/sysinfo/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Sysinfo View class for the Admin component * * @since 1.6 */ class AdminViewSysinfo extends JViewLegacy { /** * Some PHP settings * * @var array * @since 1.6 */ protected $php_settings = array(); /** * Config values * * @var array * @since 1.6 */ protected $config = array(); /** * Some system values * * @var array * @since 1.6 */ protected $info = array(); /** * PHP info * * @var string * @since 1.6 */ protected $php_info = null; /** * Information about writable state of directories * * @var array * @since 1.6 */ protected $directory = array(); /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { // Access check. if (!JFactory::getUser()->authorise('core.admin')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $this->php_settings = $this->get('PhpSettings'); $this->config = $this->get('config'); $this->info = $this->get('info'); $this->php_info = $this->get('PhpInfo'); $this->directory = $this->get('directory'); $this->addToolbar(); $this->_setSubMenu(); return parent::display($tpl); } /** * Setup the SubMenu * * @return void * * @since 1.6 * @note Necessary for Hathor compatibility * @deprecated 4.0 To be removed with Hathor */ protected function _setSubMenu() { try { $contents = $this->loadTemplate('navigation'); $document = JFactory::getDocument(); $document->setBuffer($contents, 'modules', 'submenu'); } catch (Exception $e) { } } /** * Setup the Toolbar * * @return void * * @since 1.6 */ protected function addToolbar() { JToolbarHelper::title(JText::_('COM_ADMIN_SYSTEM_INFORMATION'), 'info-2 systeminfo'); JToolbarHelper::link(JRoute::_('index.php?option=com_admin&view=sysinfo&format=text'), 'COM_ADMIN_DOWNLOAD_SYSTEM_INFORMATION_TEXT', 'download'); JToolbarHelper::link(JRoute::_('index.php?option=com_admin&view=sysinfo&format=json'), 'COM_ADMIN_DOWNLOAD_SYSTEM_INFORMATION_JSON', 'download'); JToolbarHelper::help('JHELP_SITE_SYSTEM_INFORMATION'); } } PKb��\�sc0components/com_admin/helpers/html/phpsetting.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Utility class working with phpsetting * * @since 1.6 */ abstract class JHtmlPhpSetting { /** * Method to generate a boolean message for a value * * @param boolean $val is the value set? * * @return string html code */ public static function boolean($val) { return JText::_($val ? 'JON' : 'JOFF'); } /** * Method to generate a boolean message for a value * * @param boolean $val is the value set? * * @return string html code */ public static function set($val) { return JText::_($val ? 'JYES' : 'JNO'); } /** * Method to generate a string message for a value * * @param string $val a php ini value * * @return string html code */ public static function string($val) { return !empty($val) ? $val : JText::_('JNONE'); } /** * Method to generate an integer from a value * * @param string $val a php ini value * * @return string html code * * @deprecated 4.0 Use intval() or casting instead. */ public static function integer($val) { try { JLog::add(sprintf('%s() is deprecated. Use intval() or casting instead.', __METHOD__), JLog::WARNING, 'deprecated'); } catch (RuntimeException $exception) { // Informational log only } return (int) $val; } } PKb��\����/components/com_admin/helpers/html/directory.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Utility class working with directory * * @since 1.6 */ abstract class JHtmlDirectory { /** * Method to generate a (un)writable message for directory * * @param boolean $writable is the directory writable? * * @return string html code */ public static function writable($writable) { if ($writable) { return '<span class="badge badge-success">' . JText::_('COM_ADMIN_WRITABLE') . '</span>'; } return '<span class="badge badge-important">' . JText::_('COM_ADMIN_UNWRITABLE') . '</span>'; } /** * Method to generate a message for a directory * * @param string $dir the directory * @param boolean $message the message * @param boolean $visible is the $dir visible? * * @return string html code */ public static function message($dir, $message, $visible = true) { $output = $visible ? $dir : ''; if (empty($message)) { return $output; } return $output . ' <strong>' . JText::_($message) . '</strong>'; } } PKb��\e��Uee,components/com_admin/helpers/html/system.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Utility class working with system * * @since 1.6 */ abstract class JHtmlSystem { /** * Method to generate a string message for a value * * @param string $val a php ini value * * @return string html code */ public static function server($val) { return !empty($val) ? $val : JText::_('COM_ADMIN_NA'); } } PKb��\�x x -components/com_admin/models/forms/profile.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset name="user_details"> <field name="name" type="text" label="COM_ADMIN_USER_HEADING_NAME" description="COM_ADMIN_USER_FIELD_NAME_DESC" required="true" size="30" /> <field name="username" type="text" label="COM_ADMIN_USER_FIELD_USERNAME_LABEL" description="COM_ADMIN_USER_FIELD_USERNAME_DESC" required="true" size="30" /> <field name="password2" type="password" label="JGLOBAL_PASSWORD" description="COM_ADMIN_USER_FIELD_PASSWORD_DESC" autocomplete="off" class="validate-password" field="password" filter="raw" message="COM_ADMIN_USER_FIELD_PASSWORD1_MESSAGE" size="30" validate="equals" /> <field name="password" type="password" label="COM_ADMIN_USER_FIELD_PASSWORD2_LABEL" description="COM_ADMIN_USER_FIELD_PASSWORD2_DESC" autocomplete="off" class="validate-password" filter="raw" size="30" validate="password" /> <field name="email" type="email" label="JGLOBAL_EMAIL" description="COM_ADMIN_USER_FIELD_EMAIL_DESC" class="validate-email" required="true" size="30" validate="email" validDomains="com_users.domains" /> <field name="registerDate" type="calendar" label="COM_ADMIN_USER_FIELD_REGISTERDATE_LABEL" description="COM_ADMIN_USER_FIELD_REGISTERDATE_DESC" class="readonly" readonly="true" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="lastvisitDate" type="calendar" label="COM_ADMIN_USER_FIELD_LASTVISIT_LABEL" description="COM_ADMIN_USER_FIELD_LASTVISIT_DESC" class="readonly" readonly="true" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="id" type="number" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" class="readonly" default="0" readonly="true" filter="unset" /> </fieldset> <fields name="params"> <!-- Basic user account settings. --> <fieldset name="settings" label="COM_ADMIN_USER_SETTINGS_FIELDSET_LABEL"> <field name="admin_style" type="templatestyle" label="COM_ADMIN_USER_FIELD_BACKEND_TEMPLATE_LABEL" description="COM_ADMIN_USER_FIELD_BACKEND_TEMPLATE_DESC" client="administrator" filter="uint" > <option value="">JOPTION_USE_DEFAULT</option> </field> <field name="admin_language" type="language" label="COM_ADMIN_USER_FIELD_BACKEND_LANGUAGE_LABEL" description="COM_ADMIN_USER_FIELD_BACKEND_LANGUAGE_DESC" client="administrator" > <option value="">JOPTION_USE_DEFAULT</option> </field> <field name="language" type="language" label="COM_ADMIN_USER_FIELD_FRONTEND_LANGUAGE_LABEL" description="COM_ADMIN_USER_FIELD_FRONTEND_LANGUAGE_DESC" client="site" > <option value="">JOPTION_USE_DEFAULT</option> </field> <field name="editor" type="plugins" label="COM_ADMIN_USER_FIELD_EDITOR_LABEL" description="COM_ADMIN_USER_FIELD_EDITOR_DESC" folder="editors" useaccess="true" > <option value="">JOPTION_USE_DEFAULT</option> </field> <field name="timezone" type="timezone" label="COM_ADMIN_USER_FIELD_TIMEZONE_LABEL" description="COM_ADMIN_USER_FIELD_TIMEZONE_DESC" > <option value="">JOPTION_USE_DEFAULT</option> </field> </fieldset> </fields> </form> PKb��\��(XSCSC'components/com_admin/models/sysinfo.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; /** * Model for the display of system information. * * @since 1.6 */ class AdminModelSysInfo extends JModelLegacy { /** * Some PHP settings * * @var array * @since 1.6 */ protected $php_settings = array(); /** * Config values * * @var array * @since 1.6 */ protected $config = array(); /** * Some system values * * @var array * @since 1.6 */ protected $info = array(); /** * PHP info * * @var string * @since 1.6 */ protected $php_info = null; /** * Array containing the phpinfo() data. * * @var array * * @since 3.5 */ protected $phpInfoArray; /** * Private/critical data that we don't want to share * * @var array * * @since 3.5 */ protected $privateSettings = array( 'phpInfoArray' => array( 'CONTEXT_DOCUMENT_ROOT', 'Cookie', 'DOCUMENT_ROOT', 'extension_dir', 'error_log', 'Host', 'HTTP_COOKIE', 'HTTP_HOST', 'HTTP_ORIGIN', 'HTTP_REFERER', 'HTTP Request', 'include_path', 'mysql.default_socket', 'MYSQL_SOCKET', 'MYSQL_INCLUDE', 'MYSQL_LIBS', 'mysqli.default_socket', 'MYSQLI_SOCKET', 'PATH', 'Path to sendmail', 'pdo_mysql.default_socket', 'Referer', 'REMOTE_ADDR', 'SCRIPT_FILENAME', 'sendmail_path', 'SERVER_ADDR', 'SERVER_ADMIN', 'Server Administrator', 'SERVER_NAME', 'Server Root', 'session.name', 'session.save_path', 'upload_tmp_dir', 'User/Group', 'open_basedir', ), 'other' => array( 'db', 'dbprefix', 'fromname', 'live_site', 'log_path', 'mailfrom', 'memcache_server_host', 'memcached_server_host', 'open_basedir', 'Origin', 'proxy_host', 'proxy_user', 'proxy_pass', 'redis_server_host', 'redis_server_auth', 'secret', 'sendmail', 'session.save_path', 'session_memcache_server_host', 'session_memcached_server_host', 'session_redis_server_host', 'session_redis_server_auth', 'sitename', 'smtphost', 'tmp_path', 'open_basedir', ) ); /** * System values that can be "safely" shared * * @var array * * @since 3.5 */ protected $safeData; /** * Information about writable state of directories * * @var array * @since 1.6 */ protected $directories = array(); /** * The current editor. * * @var string * @since 1.6 */ protected $editor = null; /** * Remove sections of data marked as private in the privateSettings * * @param array $dataArray Array with data tha may contain private informati * @param string $dataType Type of data to search for a specific section in the privateSettings array * * @return array * * @since 3.5 */ protected function cleanPrivateData($dataArray, $dataType = 'other') { $dataType = isset($this->privateSettings[$dataType]) ? $dataType : 'other'; $privateSettings = $this->privateSettings[$dataType]; if (!$privateSettings) { return $dataArray; } foreach ($dataArray as $section => $values) { if (is_array($values)) { $dataArray[$section] = $this->cleanPrivateData($values, $dataType); } if (in_array($section, $privateSettings, true)) { $dataArray[$section] = $this->cleanSectionPrivateData($values); } } return $dataArray; } /** * Obfuscate section values * * @param mixed $sectionValues Section data * * @return mixed * * @since 3.5 */ protected function cleanSectionPrivateData($sectionValues) { if (!is_array($sectionValues)) { if (strstr($sectionValues, JPATH_ROOT)) { $sectionValues = 'xxxxxx'; } return strlen($sectionValues) ? 'xxxxxx' : ''; } foreach ($sectionValues as $setting => $value) { $sectionValues[$setting] = strlen($value) ? 'xxxxxx' : ''; } return $sectionValues; } /** * Method to get the PHP settings * * @return array Some PHP settings * * @since 1.6 */ public function &getPhpSettings() { if (!empty($this->php_settings)) { return $this->php_settings; } $this->php_settings = array( 'safe_mode' => ini_get('safe_mode') == '1', 'display_errors' => ini_get('display_errors') == '1', 'short_open_tag' => ini_get('short_open_tag') == '1', 'file_uploads' => ini_get('file_uploads') == '1', 'magic_quotes_gpc' => ini_get('magic_quotes_gpc') == '1', 'register_globals' => ini_get('register_globals') == '1', 'output_buffering' => (int) ini_get('output_buffering') !== 0, 'open_basedir' => ini_get('open_basedir'), 'session.save_path' => ini_get('session.save_path'), 'session.auto_start' => ini_get('session.auto_start'), 'disable_functions' => ini_get('disable_functions'), 'xml' => extension_loaded('xml'), 'zlib' => extension_loaded('zlib'), 'zip' => function_exists('zip_open') && function_exists('zip_read'), 'mbstring' => extension_loaded('mbstring'), 'iconv' => function_exists('iconv'), 'max_input_vars' => ini_get('max_input_vars'), ); return $this->php_settings; } /** * Method to get the config * * @return array config values * * @since 1.6 */ public function &getConfig() { if (!empty($this->config)) { return $this->config; } $registry = new Registry(new JConfig); $this->config = $registry->toArray(); $hidden = array('host', 'user', 'password', 'ftp_user', 'ftp_pass', 'smtpuser', 'smtppass',); foreach ($hidden as $key) { $this->config[$key] = 'xxxxxx'; } return $this->config; } /** * Method to get the system information * * @return array System information values * * @since 1.6 */ public function &getInfo() { if (!empty($this->info)) { return $this->info; } $version = new JVersion; $platform = new JPlatform; $db = $this->getDbo(); $this->info = array( 'php' => php_uname(), 'dbserver' => $db->getServerType(), 'dbversion' => $db->getVersion(), 'dbcollation' => $db->getCollation(), 'dbconnectioncollation' => $db->getConnectionCollation(), 'phpversion' => phpversion(), 'server' => isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : getenv('SERVER_SOFTWARE'), 'sapi_name' => php_sapi_name(), 'version' => $version->getLongVersion(), 'platform' => $platform->getLongVersion(), 'useragent' => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '', ); return $this->info; } /** * Check if the phpinfo function is enabled * * @return boolean True if enabled * * @since 3.4.1 */ public function phpinfoEnabled() { return !in_array('phpinfo', explode(',', ini_get('disable_functions'))); } /** * Method to get filter data from the model * * @param string $dataType Type of data to get safely * @param bool $public If true no sensitive information will be removed * * @return array * * @since 3.5 */ public function getSafeData($dataType, $public = true) { if (isset($this->safeData[$dataType])) { return $this->safeData[$dataType]; } $methodName = 'get' . ucfirst($dataType); if (!method_exists($this, $methodName)) { return array(); } $data = $this->$methodName($public); $this->safeData[$dataType] = $this->cleanPrivateData($data, $dataType); return $this->safeData[$dataType]; } /** * Method to get the PHP info * * @return string PHP info * * @since 1.6 */ public function &getPHPInfo() { if (!$this->phpinfoEnabled()) { $this->php_info = JText::_('COM_ADMIN_PHPINFO_DISABLED'); return $this->php_info; } if (!is_null($this->php_info)) { return $this->php_info; } ob_start(); date_default_timezone_set('UTC'); phpinfo(INFO_GENERAL | INFO_CONFIGURATION | INFO_MODULES); $phpInfo = ob_get_contents(); ob_end_clean(); preg_match_all('#<body[^>]*>(.*)</body>#siU', $phpInfo, $output); $output = preg_replace('#<table[^>]*>#', '<table class="table table-striped adminlist">', $output[1][0]); $output = preg_replace('#(\w),(\w)#', '\1, \2', $output); $output = preg_replace('#<hr />#', '', $output); $output = str_replace('<div class="center">', '', $output); $output = preg_replace('#<tr class="h">(.*)<\/tr>#', '<thead><tr class="h">$1</tr></thead><tbody>', $output); $output = str_replace('</table>', '</tbody></table>', $output); $output = str_replace('</div>', '', $output); $this->php_info = $output; return $this->php_info; } /** * Get phpinfo() output as array * * @return array * * @since 3.5 */ public function getPhpInfoArray() { // Already cached if (null !== $this->phpInfoArray) { return $this->phpInfoArray; } $phpInfo = $this->getPhpInfo(); $this->phpInfoArray = $this->parsePhpInfo($phpInfo); return $this->phpInfoArray; } /** * Method to get a list of installed extensions * * @return array installed extensions * * @since 3.5 */ public function getExtensions() { $installed = array(); $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('*') ->from($db->qn('#__extensions')); $db->setQuery($query); try { $extensions = $db->loadObjectList(); } catch (Exception $e) { try { JLog::add(JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()), JLog::WARNING, 'jerror'); } catch (RuntimeException $exception) { JFactory::getApplication()->enqueueMessage( JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()), 'warning' ); } return $installed; } if (empty($extensions)) { return $installed; } foreach ($extensions as $extension) { if (strlen($extension->name) == 0) { continue; } $installed[$extension->name] = array( 'name' => $extension->name, 'type' => $extension->type, 'state' => $extension->enabled ? JText::_('JENABLED') : JText::_('JDISABLED'), 'author' => 'unknown', 'version' => 'unknown', 'creationDate' => 'unknown', 'authorUrl' => 'unknown', ); $manifest = new Registry($extension->manifest_cache); $extraData = array( 'author' => $manifest->get('author', ''), 'version' => $manifest->get('version', ''), 'creationDate' => $manifest->get('creationDate', ''), 'authorUrl' => $manifest->get('authorUrl', '') ); $installed[$extension->name] = array_merge($installed[$extension->name], $extraData); } return $installed; } /** * Method to get the directory states * * @param bool $public If true no information is going to be removed * * @return array States of directories * * @since 1.6 */ public function getDirectory($public = false) { if (!empty($this->directories)) { return $this->directories; } $this->directories = array(); $registry = JFactory::getConfig(); $cparams = JComponentHelper::getParams('com_media'); $this->addDirectory('administrator/components', JPATH_ADMINISTRATOR . '/components'); $this->addDirectory('administrator/language', JPATH_ADMINISTRATOR . '/language'); // List all admin languages $admin_langs = new DirectoryIterator(JPATH_ADMINISTRATOR . '/language'); foreach ($admin_langs as $folder) { if ($folder->isDot() || !$folder->isDir()) { continue; } $this->addDirectory( 'administrator/language/' . $folder->getFilename(), JPATH_ADMINISTRATOR . '/language/' . $folder->getFilename() ); } // List all manifests folders $manifests = new DirectoryIterator(JPATH_ADMINISTRATOR . '/manifests'); foreach ($manifests as $folder) { if ($folder->isDot() || !$folder->isDir()) { continue; } $this->addDirectory( 'administrator/manifests/' . $folder->getFilename(), JPATH_ADMINISTRATOR . '/manifests/' . $folder->getFilename() ); } $this->addDirectory('administrator/modules', JPATH_ADMINISTRATOR . '/modules'); $this->addDirectory('administrator/templates', JPATH_THEMES); $this->addDirectory('components', JPATH_SITE . '/components'); $this->addDirectory($cparams->get('image_path'), JPATH_SITE . '/' . $cparams->get('image_path')); // List all images folders $image_folders = new DirectoryIterator(JPATH_SITE . '/' . $cparams->get('image_path')); foreach ($image_folders as $folder) { if ($folder->isDot() || !$folder->isDir()) { continue; } $this->addDirectory( 'images/' . $folder->getFilename(), JPATH_SITE . '/' . $cparams->get('image_path') . '/' . $folder->getFilename() ); } $this->addDirectory('language', JPATH_SITE . '/language'); // List all site languages $site_langs = new DirectoryIterator(JPATH_SITE . '/language'); foreach ($site_langs as $folder) { if ($folder->isDot() || !$folder->isDir()) { continue; } $this->addDirectory('language/' . $folder->getFilename(), JPATH_SITE . '/language/' . $folder->getFilename()); } $this->addDirectory('libraries', JPATH_LIBRARIES); $this->addDirectory('media', JPATH_SITE . '/media'); $this->addDirectory('modules', JPATH_SITE . '/modules'); $this->addDirectory('plugins', JPATH_PLUGINS); $plugin_groups = new DirectoryIterator(JPATH_SITE . '/plugins'); foreach ($plugin_groups as $folder) { if ($folder->isDot() || !$folder->isDir()) { continue; } $this->addDirectory('plugins/' . $folder->getFilename(), JPATH_PLUGINS . '/' . $folder->getFilename()); } $this->addDirectory('templates', JPATH_SITE . '/templates'); $this->addDirectory('configuration.php', JPATH_CONFIGURATION . '/configuration.php'); // Is there a cache path in configuration.php? if ($cache_path = trim($registry->get('cache_path', ''))) { // Frontend and backend use same directory for caching. $this->addDirectory($cache_path, $cache_path, 'COM_ADMIN_CACHE_DIRECTORY'); } else { $this->addDirectory('cache', JPATH_SITE . '/cache', 'COM_ADMIN_CACHE_DIRECTORY'); $this->addDirectory('administrator/cache', JPATH_CACHE, 'COM_ADMIN_CACHE_DIRECTORY'); } if ($public) { $this->addDirectory( 'log', $registry->get('log_path', JPATH_ADMINISTRATOR . '/logs'), 'COM_ADMIN_LOG_DIRECTORY' ); $this->addDirectory( 'tmp', $registry->get('tmp_path', JPATH_ROOT . '/tmp'), 'COM_ADMIN_TEMP_DIRECTORY' ); } else { $this->addDirectory( $registry->get('log_path', JPATH_ADMINISTRATOR . '/logs'), $registry->get('log_path', JPATH_ADMINISTRATOR . '/logs'), 'COM_ADMIN_LOG_DIRECTORY' ); $this->addDirectory( $registry->get('tmp_path', JPATH_ROOT . '/tmp'), $registry->get('tmp_path', JPATH_ROOT . '/tmp'), 'COM_ADMIN_TEMP_DIRECTORY' ); } return $this->directories; } /** * Method to add a directory * * @param string $name Directory Name * @param string $path Directory path * @param string $message Message * * @return void * * @since 1.6 */ private function addDirectory($name, $path, $message = '') { $this->directories[$name] = array('writable' => is_writable($path), 'message' => $message,); } /** * Method to get the editor * * @return string The default editor * * @note Has to be removed (it is present in the config...) * @since 1.6 */ public function &getEditor() { if (!is_null($this->editor)) { return $this->editor; } $this->editor = JFactory::getConfig()->get('editor'); return $this->editor; } /** * Parse phpinfo output into an array * Source https://gist.github.com/sbmzhcn/6255314 * * @param string $html Output of phpinfo() * * @return array * * @since 3.5 */ protected function parsePhpInfo($html) { $html = strip_tags($html, '<h2><th><td>'); $html = preg_replace('/<th[^>]*>([^<]+)<\/th>/', '<info>\1</info>', $html); $html = preg_replace('/<td[^>]*>([^<]+)<\/td>/', '<info>\1</info>', $html); $t = preg_split('/(<h2[^>]*>[^<]+<\/h2>)/', $html, -1, PREG_SPLIT_DELIM_CAPTURE); $r = array(); $count = count($t); $p1 = '<info>([^<]+)<\/info>'; $p2 = '/' . $p1 . '\s*' . $p1 . '\s*' . $p1 . '/'; $p3 = '/' . $p1 . '\s*' . $p1 . '/'; for ($i = 1; $i < $count; $i++) { if (preg_match('/<h2[^>]*>([^<]+)<\/h2>/', $t[$i], $matchs)) { $name = trim($matchs[1]); $vals = explode("\n", $t[$i + 1]); foreach ($vals AS $val) { // 3cols if (preg_match($p2, $val, $matchs)) { $r[$name][trim($matchs[1])] = array(trim($matchs[2]), trim($matchs[3]),); } // 2cols elseif (preg_match($p3, $val, $matchs)) { $r[$name][trim($matchs[1])] = trim($matchs[2]); } } } } return $r; } } PKb��\���ƻ�$components/com_admin/models/help.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\String\StringHelper; /** * Admin Component Help Model * * @since 1.6 */ class AdminModelHelp extends JModelLegacy { /** * The search string * * @var string * @since 1.6 */ protected $help_search = null; /** * The page to be viewed * * @var string * @since 1.6 */ protected $page = null; /** * The ISO language tag * * @var string * @since 1.6 */ protected $lang_tag = null; /** * Table of contents * * @var array * @since 1.6 */ protected $toc = null; /** * URL for the latest version check * * @var string * @since 1.6 */ protected $latest_version_check = null; /** * Method to get the help search string * * @return string Help search string * * @since 1.6 */ public function &getHelpSearch() { if (is_null($this->help_search)) { $this->help_search = JFactory::getApplication()->input->getString('helpsearch'); } return $this->help_search; } /** * Method to get the page * * @return string The page * * @since 1.6 */ public function &getPage() { if (is_null($this->page)) { $this->page = JHelp::createUrl(JFactory::getApplication()->input->get('page', 'JHELP_START_HERE')); } return $this->page; } /** * Method to get the lang tag * * @return string lang iso tag * * @since 1.6 */ public function getLangTag() { if (is_null($this->lang_tag)) { $this->lang_tag = JFactory::getLanguage()->getTag(); if (!is_dir(JPATH_BASE . '/help/' . $this->lang_tag)) { // Use English as fallback $this->lang_tag = 'en-GB'; } } return $this->lang_tag; } /** * Method to get the table of contents * * @return array Table of contents */ public function &getToc() { if (!is_null($this->toc)) { return $this->toc; } // Get vars $lang_tag = $this->getLangTag(); $help_search = $this->getHelpSearch(); // New style - Check for a TOC JSON file if (file_exists(JPATH_BASE . '/help/' . $lang_tag . '/toc.json')) { $data = json_decode(file_get_contents(JPATH_BASE . '/help/' . $lang_tag . '/toc.json')); // Loop through the data array foreach ($data as $key => $value) { $this->toc[$key] = JText::_('COM_ADMIN_HELP_' . $value); } // Sort the Table of Contents asort($this->toc); return $this->toc; } // Get Help files jimport('joomla.filesystem.folder'); $files = JFolder::files(JPATH_BASE . '/help/' . $lang_tag, '\.xml$|\.html$'); $this->toc = array(); foreach ($files as $file) { $buffer = file_get_contents(JPATH_BASE . '/help/' . $lang_tag . '/' . $file); if (!preg_match('#<title>(.*?)</title>#', $buffer, $m)) { continue; } $title = trim($m[1]); if (!$title) { continue; } // Translate the page title $title = JText::_($title); // Strip the extension $file = preg_replace('#\.xml$|\.html$#', '', $file); if ($help_search && StringHelper::strpos(StringHelper::strtolower(strip_tags($buffer)), StringHelper::strtolower($help_search)) === false) { continue; } // Add an item in the Table of Contents $this->toc[$file] = $title; } // Sort the Table of Contents asort($this->toc); return $this->toc; } /** * Method to get the latest version check * * @return string Latest Version Check URL */ public function &getLatestVersionCheck() { if (!$this->latest_version_check) { $override = 'https://help.joomla.org/proxy/index.php?keyref=Help{major}{minor}:' . 'Joomla_Version_{major}_{minor}_{maintenance}/{langcode}&lang={langcode}'; $this->latest_version_check = JHelp::createUrl('JVERSION', false, $override); } return $this->latest_version_check; } } PKb��\���ZZ'components/com_admin/models/profile.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('UsersModelUser', JPATH_ADMINISTRATOR . '/components/com_users/models/user.php'); /** * User model. * * @since 1.6 */ class AdminModelProfile extends UsersModelUser { /** * Method to get the record form. * * @param array $data An optional array of data for the form to interogate. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_admin.profile', 'profile', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } // Check for username compliance and parameter set $isUsernameCompliant = true; if ($this->loadFormData()->username) { $username = $this->loadFormData()->username; $isUsernameCompliant = !(preg_match('#[<>"\'%;()&\\\\]|\\.\\./#', $username) || strlen(utf8_decode($username)) < 2 || trim($username) != $username); } $this->setState('user.username.compliant', $isUsernameCompliant); if (!JComponentHelper::getParams('com_users')->get('change_login_name') && $isUsernameCompliant) { $form->setFieldAttribute('username', 'required', 'false'); $form->setFieldAttribute('username', 'readonly', 'true'); $form->setFieldAttribute('username', 'description', 'COM_ADMIN_USER_FIELD_NOCHANGE_USERNAME_DESC'); } // When multilanguage is set, a user's default site language should also be a Content Language if (JLanguageMultilang::isEnabled()) { $form->setFieldAttribute('language', 'type', 'frontend_language', 'params'); } // If the user needs to change their password, mark the password fields as required if (JFactory::getUser()->requireReset) { $form->setFieldAttribute('password', 'required', 'true'); $form->setFieldAttribute('password2', 'required', 'true'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_users.edit.user.data', array()); if (empty($data)) { $data = $this->getItem(); } // Load the users plugins. JPluginHelper::importPlugin('user'); $this->preprocessData('com_admin.profile', $data); return $data; } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. * * @since 1.6 */ public function getItem($pk = null) { return parent::getItem(JFactory::getUser()->id); } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { $user = JFactory::getUser(); unset($data['id']); unset($data['groups']); unset($data['sendEmail']); unset($data['block']); $isUsernameCompliant = $this->getState('user.username.compliant'); if (!JComponentHelper::getParams('com_users')->get('change_login_name') && $isUsernameCompliant) { unset($data['username']); } // Bind the data. if (!$user->bind($data)) { $this->setError($user->getError()); return false; } $user->groups = null; // Store the data. if (!$user->save()) { $this->setError($user->getError()); return false; } $this->setState('user.id', $user->id); return true; } } PKb��\��vv#components/com_admin/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_admin * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Admin Controller * * @since 1.6 */ class AdminController extends JControllerLegacy { } PKb��\�q�Q��*components/com_messages/tables/message.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Message Table class * * @since 1.5 */ class MessagesTableMessage extends JTable { /** * Constructor * * @param JDatabaseDriver &$db Database connector object * * @since 1.5 */ public function __construct(&$db) { parent::__construct('#__messages', 'message_id', $db); $this->setColumnAlias('published', 'state'); } /** * Validation and filtering. * * @return boolean * * @since 1.5 */ public function check() { // Check the to and from users. $user = new JUser($this->user_id_from); if (empty($user->id)) { $this->setError(JText::_('COM_MESSAGES_ERROR_INVALID_FROM_USER')); return false; } $user = new JUser($this->user_id_to); if (empty($user->id)) { $this->setError(JText::_('COM_MESSAGES_ERROR_INVALID_TO_USER')); return false; } if (empty($this->subject)) { $this->setError(JText::_('COM_MESSAGES_ERROR_INVALID_SUBJECT')); return false; } if (empty($this->message)) { $this->setError(JText::_('COM_MESSAGES_ERROR_INVALID_MESSAGE')); return false; } return true; } /** * Method to set the publishing state for a row or list of rows in the database * table. The method respects checked out rows by other users and will attempt * to checkin rows that it can after adjustments are made. * * @param mixed $pks An optional array of primary key values to update. If not * set the instance property value is used. * @param integer $state The publishing state. eg. [0 = unpublished, 1 = published] * @param integer $userId The user id of the user performing the operation. * * @return boolean True on success. * * @since 1.6 */ public function publish($pks = null, $state = 1, $userId = 0) { $k = $this->_tbl_key; // Sanitize input. $pks = ArrayHelper::toInteger($pks); $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED')); return false; } } // Build the WHERE clause for the primary keys. $where = $k . ' IN (' . implode(',', $pks) . ')'; // Update the publishing state for rows with the given primary keys. $this->_db->setQuery( 'UPDATE ' . $this->_db->quoteName($this->_tbl) . ' SET ' . $this->_db->quoteName('state') . ' = ' . (int) $state . ' WHERE (' . $where . ')' ); try { $this->_db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // If the JTable instance value is in the list of primary keys that were set, set the instance. if (in_array($this->$k, $pks)) { $this->state = $state; } $this->setError(''); return true; } } PKb��\�/�.��.components/com_messages/controllers/config.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Messages Component Message Model * * @since 1.6 */ class MessagesControllerConfig extends JControllerLegacy { /** * Method to save a record. * * @return boolean * * @since 1.6 */ public function save() { // Check for request forgeries. $this->checkToken(); $app = JFactory::getApplication(); $model = $this->getModel('Config', 'MessagesModel'); $data = $this->input->post->get('jform', array(), 'array'); // Validate the posted data. $form = $model->getForm(); if (!$form) { JError::raiseError(500, $model->getError()); return false; } $data = $model->validate($form, $data); // Check for validation errors. if ($data === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Redirect back to the main list. $this->setRedirect(JRoute::_('index.php?option=com_messages&view=messages', false)); return false; } // Attempt to save the data. if (!$model->save($data)) { // Redirect back to the main list. $this->setMessage(JText::sprintf('JERROR_SAVE_FAILED', $model->getError()), 'warning'); $this->setRedirect(JRoute::_('index.php?option=com_messages&view=messages', false)); return false; } // Redirect to the list screen. $this->setMessage(JText::_('COM_MESSAGES_CONFIG_SAVED')); $this->setRedirect(JRoute::_('index.php?option=com_messages&view=messages', false)); return true; } } PKb��\�)��yy0components/com_messages/controllers/messages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Messages list controller class. * * @since 1.6 */ class MessagesControllerMessages extends JControllerAdmin { /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'Message', $prefix = 'MessagesModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } } PKb��\��Z�))/components/com_messages/controllers/message.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Messages Component Message Model * * @since 1.6 */ class MessagesControllerMessage extends JControllerForm { /** * Method (override) to check if you can save a new or existing record. * * Adjusts for the primary key name and hands off to the parent class. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowSave($data, $key = 'message_id') { return parent::allowSave($data, $key); } /** * Reply to an existing message. * * This is a simple redirect to the compose form. * * @return void * * @since 1.6 */ public function reply() { if ($replyId = $this->input->getInt('reply_id')) { $this->setRedirect('index.php?option=com_messages&view=message&layout=edit&reply_id=' . $replyId); } else { $this->setMessage(JText::_('COM_MESSAGES_INVALID_REPLY_ID')); $this->setRedirect('index.php?option=com_messages&view=messages'); } } } PKb��\mj�:��$components/com_messages/messages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; if (!JFactory::getUser()->authorise('core.manage', 'com_messages')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $task = JFactory::getApplication()->input->get('task'); $controller = JControllerLegacy::getInstance('Messages'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\�Q`b��$components/com_messages/messages.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_messages</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_MESSAGES_XML_DESCRIPTION</description> <languages folder="site"> <language tag="en-GB">language/en-GB.com_messages.ini</language> </languages> <administration> <files folder="admin"> <filename>config.xml</filename> <filename>controller.php</filename> <filename>messages.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>tables</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_messages.ini</language> <language tag="en-GB">language/en-GB.com_messages.sys.ini</language> </languages> </administration> </extension> PKb��\y��KK6components/com_messages/layouts/toolbar/mysettings.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $text = JText::_('COM_MESSAGES_TOOLBAR_MY_SETTINGS'); ?> <a rel="{handler:'iframe', size:{x:700,y:300}}" href="index.php?option=com_messages&view=config&tmpl=component" title="<?php echo $text; ?>" class="messagesSettings btn btn-small"> <span class="icon-cog"></span> <?php echo $text; ?> </a> PKb��\���ff"components/com_messages/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_messages" section="component" /> </fieldset> </config> PKb��\�8�rr"components/com_messages/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_messages"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKb��\�R�E��3components/com_messages/views/message/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'message.cancel' || document.formvalidator.isValid(document.getElementById('message-form'))) { Joomla.submitform(task, document.getElementById('message-form')); } }; "); ?> <form action="<?php echo JRoute::_('index.php?option=com_messages'); ?>" method="post" name="adminForm" id="message-form" class="form-validate form-horizontal"> <fieldset class="adminform"> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('user_id_to'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('user_id_to'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('subject'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('subject'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('message'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('message'); ?> </div> </div> </fieldset> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\1I[ww6components/com_messages/views/message/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.core'); JHtml::_('formbehavior.chosen', 'select'); ?> <form action="<?php echo JRoute::_('index.php?option=com_messages'); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <fieldset> <div class="control-group"> <div class="control-label"> <?php echo JText::_('COM_MESSAGES_FIELD_USER_ID_FROM_LABEL'); ?> </div> <div class="controls"> <?php echo $this->item->get('from_user_name'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo JText::_('COM_MESSAGES_FIELD_DATE_TIME_LABEL'); ?> </div> <div class="controls"> <?php echo JHtml::_('date', $this->item->date_time, JText::_('DATE_FORMAT_LC2')); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo JText::_('COM_MESSAGES_FIELD_SUBJECT_LABEL'); ?> </div> <div class="controls"> <?php echo $this->item->subject; ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo JText::_('COM_MESSAGES_FIELD_MESSAGE_LABEL'); ?> </div> <div class="controls"> <?php echo $this->item->message; ?> </div> </div> <input type="hidden" name="task" value="" /> <input type="hidden" name="reply_id" value="<?php echo $this->item->message_id; ?>" /> <?php echo JHtml::_('form.token'); ?> </fieldset> </form> PKb��\�鿁::3components/com_messages/views/message/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Messages component * * @since 1.6 */ class MessagesViewMessage extends JViewLegacy { protected $form; protected $item; protected $state; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { if ($this->getLayout() == 'edit') { JFactory::getApplication()->input->set('hidemainmenu', true); JToolbarHelper::title(JText::_('COM_MESSAGES_WRITE_PRIVATE_MESSAGE'), 'envelope-opened new-privatemessage'); JToolbarHelper::save('message.save', 'COM_MESSAGES_TOOLBAR_SEND'); JToolbarHelper::cancel('message.cancel'); JToolbarHelper::help('JHELP_COMPONENTS_MESSAGING_WRITE'); } else { JToolbarHelper::title(JText::_('COM_MESSAGES_VIEW_PRIVATE_MESSAGE'), 'envelope inbox'); $sender = JUser::getInstance($this->item->user_id_from); if ($sender->authorise('core.admin') || $sender->authorise('core.manage', 'com_messages') && $sender->authorise('core.login.admin')) { JToolbarHelper::custom('message.reply', 'redo', null, 'COM_MESSAGES_TOOLBAR_REPLY', false); } JToolbarHelper::cancel('message.cancel'); JToolbarHelper::help('JHELP_COMPONENTS_MESSAGING_READ'); } } } PKb��\M��ǐ�5components/com_messages/views/config/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); JFactory::getDocument()->addScriptDeclaration( " Joomla.submitbutton = function(task) { if (task == 'config.cancel' || document.formvalidator.isValid(document.getElementById('config-form'))) { Joomla.submitform(task, document.getElementById('config-form')); } }; " ); ?> <div class="container-popup"> <form action="<?php echo JRoute::_('index.php?option=com_messages&view=config'); ?>" method="post" name="adminForm" id="message-form" class="form-validate form-horizontal"> <fieldset> <?php echo $this->form->renderField('lock'); ?> <?php echo $this->form->renderField('mail_on_new'); ?> <?php echo $this->form->renderField('auto_purge'); ?> </fieldset> <button id="saveBtn" type="button" class="hidden" onclick="Joomla.submitform('config.save', this.form);"></button> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> </div> PKb��\��'�UU2components/com_messages/views/config/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit messages user configuration. * * @since 1.6 */ class MessagesViewConfig extends JViewLegacy { protected $form; protected $item; protected $state; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Bind the record to the form. $this->form->bind($this->item); parent::display($tpl); } } PKb��\�<�� � 7components/com_messages/views/messages/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); JFactory::getDocument()->addStyleDeclaration( ' @media (min-width: 768px) { div.modal { left: none; width: 500px; margin-left: -250px; } } ' ); ?> <form action="<?php echo JRoute::_('index.php?option=com_messages&view=messages'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"></div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped"> <thead> <tr> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th class="title nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_MESSAGES_HEADING_SUBJECT', 'a.subject', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'COM_MESSAGES_HEADING_READ', 'a.state', $listDirn, $listOrder); ?> </th> <th width="15%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_MESSAGES_HEADING_FROM', 'a.user_id_from', $listDirn, $listOrder); ?> </th> <th width="20%" class="nowrap hidden-tablet hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JDATE', 'a.date_time', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="5"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $canChange = $user->authorise('core.edit.state', 'com_messages'); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->message_id); ?> </td> <td> <a href="<?php echo JRoute::_('index.php?option=com_messages&view=message&message_id=' . (int) $item->message_id); ?>"> <?php echo $this->escape($item->subject); ?></a> </td> <td class="center"> <?php echo JHtml::_('messages.status', $i, $item->state, $canChange); ?> </td> <td> <?php echo $item->user_from; ?> </td> <td class="hidden-phone hidden-tablet"> <?php echo JHtml::_('date', $item->date_time, JText::_('DATE_FORMAT_LC2')); ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> PKb��\ẗ́���4components/com_messages/views/messages/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of messages. * * @since 1.6 */ class MessagesViewMessages extends JViewLegacy { protected $items; protected $pagination; protected $state; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); $canDo = JHelperContent::getActions('com_messages'); JToolbarHelper::title(JText::_('COM_MESSAGES_MANAGER_MESSAGES'), 'envelope inbox'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('message.add'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::divider(); JToolbarHelper::publish('messages.publish', 'COM_MESSAGES_TOOLBAR_MARK_AS_READ', true); JToolbarHelper::unpublish('messages.unpublish', 'COM_MESSAGES_TOOLBAR_MARK_AS_UNREAD', true); } JToolbarHelper::divider(); $bar = JToolBar::getInstance('toolbar'); $bar->appendButton( 'Popup', 'cog', 'COM_MESSAGES_TOOLBAR_MY_SETTINGS', 'index.php?option=com_messages&view=config&tmpl=component', 500, 250, 0, 0, '', '', '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JCANCEL') . '</button>' . '<button type="button" class="btn btn-success" data-dismiss="modal"' . ' onclick="jQuery(\'#modal-cog iframe\').contents().find(\'#saveBtn\').click();">' . JText::_('JSAVE') . '</button>' ); if ($state->get('filter.state') == -2 && $canDo->get('core.delete')) { JToolbarHelper::divider(); JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'messages.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::divider(); JToolbarHelper::trash('messages.trash'); } if ($canDo->get('core.admin')) { JToolbarHelper::preferences('com_messages'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_COMPONENTS_MESSAGING_INBOX'); } } PKb��\ �yy,components/com_messages/helpers/messages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Messages helper class. * * @since 1.6 */ class MessagesHelper { /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void * * @since 1.6 */ public static function addSubmenu($vName) { JHtmlSidebar::addEntry( JText::_('COM_MESSAGES_ADD'), 'index.php?option=com_messages&view=message&layout=edit', $vName == 'message' ); JHtmlSidebar::addEntry( JText::_('COM_MESSAGES_READ'), 'index.php?option=com_messages', $vName == 'messages' ); } /** * Gets a list of the actions that can be performed. * * @return JObject * * @deprecated 3.2 Use JHelperContent::getActions() instead */ public static function getActions() { // Log usage of deprecated function try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions return JHelperContent::getActions('com_messages'); } /** * Get a list of filter options for the state of a module. * * @return array An array of JHtmlOption elements. * * @since 1.6 */ public static function getStateOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '1', JText::_('COM_MESSAGES_OPTION_READ')); $options[] = JHtml::_('select.option', '0', JText::_('COM_MESSAGES_OPTION_UNREAD')); $options[] = JHtml::_('select.option', '-2', JText::_('JTRASHED')); return $options; } } PKb��\=�8 � 1components/com_messages/helpers/html/messages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * JHtml administrator messages class. * * @since 1.6 */ class JHtmlMessages { /** * Get the HTML code of the state switcher * * @param int $value The state value * @param int $i Row number * @param boolean $canChange Can the user change the state? * * @return string * * @since 1.6 * * @deprecated 4.0 Use JHtmlMessages::status() instead */ public static function state($value = 0, $i = 0, $canChange = false) { // Log deprecated message try { JLog::add( sprintf('%s() is deprecated. Use JHtmlMessages::status() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Note: $i is required but has to be an optional argument in the function call due to argument order if (null === $i) { throw new InvalidArgumentException('$i is a required argument in JHtmlMessages::state'); } // Note: $canChange is required but has to be an optional argument in the function call due to argument order if (null === $canChange) { throw new InvalidArgumentException('$canChange is a required argument in JHtmlMessages::state'); } return static::status($i, $value, $canChange); } /** * Get the HTML code of the state switcher * * @param int $i Row number * @param int $value The state value * @param boolean $canChange Can the user change the state? * * @return string * * @since 3.4 */ public static function status($i, $value = 0, $canChange = false) { // Array of image, task, title, action. $states = array( -2 => array('trash', 'messages.unpublish', 'JTRASHED', 'COM_MESSAGES_MARK_AS_UNREAD'), 1 => array('publish', 'messages.unpublish', 'COM_MESSAGES_OPTION_READ', 'COM_MESSAGES_MARK_AS_UNREAD'), 0 => array('unpublish', 'messages.publish', 'COM_MESSAGES_OPTION_UNREAD', 'COM_MESSAGES_MARK_AS_READ'), ); $state = ArrayHelper::getValue($states, (int) $value, $states[0]); $icon = $state[0]; if ($canChange) { $html = '<a href="#" onclick="return listItemTask(\'cb' . $i . '\',\'' . $state[1] . '\')" class="btn btn-micro hasTooltip' . ($value == 1 ? ' active' : '') . '" title="' . JHtml::_('tooltipText', $state[3]) . '"><span class="icon-' . $icon . '" aria-hidden="true"></span></a>'; } return $html; } } PKb��\�j吭�6components/com_messages/models/fields/usermessages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JFormHelper::loadFieldClass('user'); /** * Supports a modal select of users that have access to com_messages * * @since 1.6 */ class JFormFieldUserMessages extends JFormFieldUser { /** * The form field type. * * @var string * @since 1.6 */ public $type = 'UserMessages'; /** * Method to get the filtering groups (null means no filtering) * * @return array|null array of filtering groups or null. * * @since 1.6 */ protected function getGroups() { // Compute usergroups $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('id') ->from('#__usergroups'); $db->setQuery($query); try { $groups = $db->loadColumn(); } catch (RuntimeException $e) { JError::raiseNotice(500, $e->getMessage()); return null; } foreach ($groups as $i => $group) { if (JAccess::checkGroup($group, 'core.admin')) { continue; } if (!JAccess::checkGroup($group, 'core.manage', 'com_messages')) { unset($groups[$i]); continue; } if (!JAccess::checkGroup($group, 'core.login.admin')) { unset($groups[$i]); continue; } } return array_values($groups); } /** * Method to get the users to exclude from the list of users * * @return array|null array of users to exclude or null to to not exclude them * * @since 1.6 */ protected function getExcluded() { return array(JFactory::getUser()->id); } } PKb��\��(z z )components/com_messages/models/config.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Message configuration model. * * @since 1.6 */ class MessagesModelConfig extends JModelForm { /** * Method to auto-populate the model state. * * This method should only be called once per instantiation and is designed * to be called on the first call to the getState() method unless the model * configuration flag to ignore the request is set. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { $user = JFactory::getUser(); $this->setState('user.id', $user->get('id')); // Load the parameters. $params = JComponentHelper::getParams('com_messages'); $this->setState('params', $params); } /** * Method to get a single record. * * @return mixed Object on success, false on failure. * * @since 1.6 */ public function &getItem() { $item = new JObject; $db = $this->getDbo(); $query = $db->getQuery(true) ->select('cfg_name, cfg_value') ->from('#__messages_cfg') ->where($db->quoteName('user_id') . ' = ' . (int) $this->getState('user.id')); $db->setQuery($query); try { $rows = $db->loadObjectList(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } foreach ($rows as $row) { $item->set($row->cfg_name, $row->cfg_value); } $this->preprocessData('com_messages.config', $item); return $item; } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_messages.config', 'config', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { $db = $this->getDbo(); if ($userId = (int) $this->getState('user.id')) { $query = $db->getQuery(true) ->delete($db->quoteName('#__messages_cfg')) ->where($db->quoteName('user_id') . '=' . (int) $userId); $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } if (count($data)) { $query = $db->getQuery(true) ->insert($db->quoteName('#__messages_cfg')) ->columns($db->quoteName(array('user_id', 'cfg_name', 'cfg_value'))); foreach ($data as $k => $v) { $query->values($userId . ', ' . $db->quote($k) . ', ' . $db->quote($v)); } $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } } return true; } else { $this->setError('COM_MESSAGES_ERR_INVALID_USER'); return false; } } } PKb��\j<���0components/com_messages/models/forms/message.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="user_id_to" type="usermessages" label="COM_MESSAGES_FIELD_USER_ID_TO_LABEL" description="COM_MESSAGES_FIELD_USER_ID_TO_DESC" default="0" required="true" /> <field name="subject" type="text" label="COM_MESSAGES_FIELD_SUBJECT_LABEL" description="COM_MESSAGES_FIELD_SUBJECT_DESC" required="true" /> <field name="message" type="editor" label="COM_MESSAGES_FIELD_MESSAGE_LABEL" description="COM_MESSAGES_FIELD_MESSAGE_DESC" required="true" filter="JComponentHelper::filterText" buttons="false" /> </fieldset> </form> PKb��\V@��))/components/com_messages/models/forms/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="lock" type="radio" label="COM_MESSAGES_FIELD_LOCK_LABEL" description="COM_MESSAGES_FIELD_LOCK_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="mail_on_new" type="radio" label="COM_MESSAGES_FIELD_MAIL_ON_NEW_LABEL" description="COM_MESSAGES_FIELD_MAIL_ON_NEW_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="auto_purge" type="number" label="COM_MESSAGES_FIELD_AUTO_PURGE_LABEL" description="COM_MESSAGES_FIELD_AUTO_PURGE_DESC" size="6" default="7" /> </fieldset> </form> PKb��\)�� +components/com_messages/models/messages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Messages Component Messages Model * * @since 1.6 */ class MessagesModelMessages extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'message_id', 'a.id', 'subject', 'a.subject', 'state', 'a.state', 'user_id_from', 'a.user_id_from', 'user_id_to', 'a.user_id_to', 'date_time', 'a.date_time', 'priority', 'a.priority', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * This method should only be called once per instantiation and is designed * to be called on the first call to the getState() method unless the model * configuration flag to ignore the request is set. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.date_time', $direction = 'desc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.state', $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'cmd')); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.state'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.*, ' . 'u.name AS user_from' ) ); $query->from('#__messages AS a'); // Join over the users for message owner. $query->join('INNER', '#__users AS u ON u.id = a.user_id_from') ->where('a.user_id_to = ' . (int) $user->get('id')); // Filter by published state. $state = $this->getState('filter.state'); if (is_numeric($state)) { $query->where('a.state = ' . (int) $state); } elseif ($state !== '*') { $query->where('(a.state IN (0, 1))'); } // Filter by search in subject or message. $search = $this->getState('filter.search'); if (!empty($search)) { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('a.subject LIKE ' . $search . ' OR a.message LIKE ' . $search); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.date_time')) . ' ' . $db->escape($this->getState('list.direction', 'DESC'))); return $query; } } PKb��\��� 1 1*components/com_messages/models/message.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\CMS\Router\Route; /** * Private Message model. * * @since 1.6 */ class MessagesModelMessage extends JModelAdmin { /** * Message */ protected $item; /** * Method to auto-populate the model state. * * This method should only be called once per instantiation and is designed * to be called on the first call to the getState() method unless the model * configuration flag to ignore the request is set. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { parent::populateState(); $input = JFactory::getApplication()->input; $user = JFactory::getUser(); $this->setState('user.id', $user->get('id')); $messageId = (int) $input->getInt('message_id'); $this->setState('message.id', $messageId); $replyId = (int) $input->getInt('reply_id'); $this->setState('reply.id', $replyId); } /** * Check that recipient user is the one trying to delete and then call parent delete method * * @param array &$pks An array of record primary keys. * * @return boolean True if successful, false if an error occurs. * * @since 3.1 */ public function delete(&$pks) { $pks = (array) $pks; $table = $this->getTable(); $user = JFactory::getUser(); // Iterate the items to delete each one. foreach ($pks as $i => $pk) { if ($table->load($pk)) { if ($table->user_id_to != $user->id) { // Prune items that you can't change. unset($pks[$i]); try { JLog::add(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED'), JLog::WARNING, 'jerror'); } catch (RuntimeException $exception) { JFactory::getApplication()->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED'), 'warning'); } return false; } } else { $this->setError($table->getError()); return false; } } return parent::delete($pks); } /** * Returns a Table object, always creating it. * * @param type $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object * * @since 1.6 */ public function getTable($type = 'Message', $prefix = 'MessagesTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. * * @since 1.6 */ public function getItem($pk = null) { if (!isset($this->item)) { if ($this->item = parent::getItem($pk)) { // Prime required properties. if (empty($this->item->message_id)) { // Prepare data for a new record. if ($replyId = $this->getState('reply.id')) { // If replying to a message, preload some data. $db = $this->getDbo(); $query = $db->getQuery(true) ->select($db->quoteName(array('subject', 'user_id_from'))) ->from($db->quoteName('#__messages')) ->where($db->quoteName('message_id') . ' = ' . (int) $replyId); try { $message = $db->setQuery($query)->loadObject(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } $this->item->set('user_id_to', $message->user_id_from); $re = JText::_('COM_MESSAGES_RE'); if (stripos($message->subject, $re) !== 0) { $this->item->set('subject', $re . $message->subject); } } } elseif ($this->item->user_id_to != JFactory::getUser()->id) { $this->setError(JText::_('JERROR_ALERTNOAUTHOR')); return false; } else { // Mark message read $db = $this->getDbo(); $query = $db->getQuery(true) ->update($db->quoteName('#__messages')) ->set($db->quoteName('state') . ' = 1') ->where($db->quoteName('message_id') . ' = ' . $this->item->message_id); $db->setQuery($query)->execute(); } } // Get the user name for an existing messasge. if ($this->item->user_id_from && $fromUser = new JUser($this->item->user_id_from)) { $this->item->set('from_user_name', $fromUser->name); } } return $this->item; } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_messages.message', 'message', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_messages.edit.message.data', array()); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_messages.message', $data); return $data; } /** * Checks that the current user matches the message recipient and calls the parent publish method * * @param array &$pks A list of the primary keys to change. * @param integer $value The value of the published state. * * @return boolean True on success. * * @since 3.1 */ public function publish(&$pks, $value = 1) { $user = JFactory::getUser(); $table = $this->getTable(); $pks = (array) $pks; // Check that the recipient matches the current user foreach ($pks as $i => $pk) { $table->reset(); if ($table->load($pk)) { if ($table->user_id_to != $user->id) { // Prune items that you can't change. unset($pks[$i]); try { JLog::add(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'), JLog::WARNING, 'jerror'); } catch (RuntimeException $exception) { JFactory::getApplication()->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'), 'warning'); } return false; } } } return parent::publish($pks, $value); } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { $table = $this->getTable(); // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Assign empty values. if (empty($table->user_id_from)) { $table->user_id_from = JFactory::getUser()->get('id'); } if ((int) $table->date_time == 0) { $table->date_time = JFactory::getDate()->toSql(); } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Load the recipient user configuration. $model = JModelLegacy::getInstance('Config', 'MessagesModel', array('ignore_request' => true)); $model->setState('user.id', $table->user_id_to); $config = $model->getItem(); if (empty($config)) { $this->setError($model->getError()); return false; } if ($config->get('locked', false)) { $this->setError(JText::_('COM_MESSAGES_ERR_SEND_FAILED')); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } if ($config->get('mail_on_new', true)) { // Load the user details (already valid from table check). $fromUser = JUser::getInstance($table->user_id_from); $toUser = JUser::getInstance($table->user_id_to); $debug = JFactory::getConfig()->get('debug_lang'); $default_language = JComponentHelper::getParams('com_languages')->get('administrator'); $lang = JLanguage::getInstance($toUser->getParam('admin_language', $default_language), $debug); $lang->load('com_messages', JPATH_ADMINISTRATOR); // Build the email subject and message $app = JFactory::getApplication(); $linkMode = $app->get('force_ssl', 0) >= 1 ? Route::TLS_FORCE : Route::TLS_IGNORE; $sitename = $app->get('sitename'); $fromName = $fromUser->get('name'); $siteURL = JRoute::link('administrator', 'index.php?option=com_messages&view=message&message_id=' . $table->message_id, false, $linkMode, true); $subject = html_entity_decode($table->subject, ENT_COMPAT, 'UTF-8'); $message = strip_tags(html_entity_decode($table->message, ENT_COMPAT, 'UTF-8')); $subj = sprintf($lang->_('COM_MESSAGES_NEW_MESSAGE'), $fromName, $sitename); $msg = $subject . "\n\n" . $message . "\n\n" . sprintf($lang->_('COM_MESSAGES_PLEASE_LOGIN'), $siteURL); // Send the email $mailer = JFactory::getMailer(); if (!$mailer->addReplyTo($fromUser->email, $fromUser->name)) { try { JLog::add(JText::_('COM_MESSAGES_ERROR_COULD_NOT_SEND_INVALID_REPLYTO'), JLog::WARNING, 'jerror'); } catch (RuntimeException $exception) { JFactory::getApplication()->enqueueMessage(JText::_('COM_MESSAGES_ERROR_COULD_NOT_SEND_INVALID_REPLYTO'), 'warning'); } // The message is still saved in the database, we do not allow this failure to cause the entire save routine to fail return true; } if (!$mailer->addRecipient($toUser->email, $toUser->name)) { try { JLog::add(JText::_('COM_MESSAGES_ERROR_COULD_NOT_SEND_INVALID_RECIPIENT'), JLog::WARNING, 'jerror'); } catch (RuntimeException $exception) { JFactory::getApplication()->enqueueMessage(JText::_('COM_MESSAGES_ERROR_COULD_NOT_SEND_INVALID_RECIPIENT'), 'warning'); } // The message is still saved in the database, we do not allow this failure to cause the entire save routine to fail return true; } $mailer->setSubject($subj); $mailer->setBody($msg); // The Send method will raise an error via JError on a failure, we do not need to check it ourselves here $mailer->Send(); } return true; } /** * Sends a message to the site's super users * * @param string $subject The message subject * @param string $message The message * * @return boolean * * @since 3.9.0 */ public function notifySuperUsers($subject, $message, $fromUser = null) { $db = $this->getDbo(); try { /** @var JTableAsset $table */ $table = $this->getTable('Asset', 'JTable'); $rootId = $table->getRootId(); /** @var JAccessRule[] $rules */ $rules = JAccess::getAssetRules($rootId)->getData(); $rawGroups = $rules['core.admin']->getData(); if (empty($rawGroups)) { $this->setError(JText::_('COM_MESSAGES_ERROR_MISSING_ROOT_ASSET_GROUPS')); return false; } $groups = array(); foreach ($rawGroups as $g => $enabled) { if ($enabled) { $groups[] = $db->quote($g); } } if (empty($groups)) { $this->setError(JText::_('COM_MESSAGES_ERROR_NO_GROUPS_SET_AS_SUPER_USER')); return false; } $query = $db->getQuery(true) ->select($db->quoteName('user_id')) ->from($db->quoteName('#__user_usergroup_map')) ->where($db->quoteName('group_id') . ' IN(' . implode(',', $groups) . ')'); $userIDs = $db->setQuery($query)->loadColumn(0); if (empty($userIDs)) { $this->setError(JText::_('COM_MESSAGES_ERROR_NO_USERS_SET_AS_SUPER_USER')); return false; } foreach ($userIDs as $id) { /* * All messages must have a valid from user, we have use cases where an unauthenticated user may trigger this * so we will set the from user as the to user */ $data = array( 'user_id_from' => $id, 'user_id_to' => $id, 'subject' => $subject, 'message' => $message, ); if (!$this->save($data)) { return false; } } return true; } catch (Exception $exception) { $this->setError($exception->getMessage()); return false; } } } PKb��\ 1�2ZZ&components/com_messages/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_messages * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Messages master display controller. * * @since 1.6 */ class MessagesController extends JControllerLegacy { /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached. * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { JLoader::register('MessagesHelper', JPATH_ADMINISTRATOR . '/components/com_messages/helpers/messages.php'); $view = $this->input->get('view', 'messages'); $layout = $this->input->get('layout', 'default'); $id = $this->input->getInt('id'); // Check for edit form. if ($view == 'message' && $layout == 'edit' && !$this->checkEditId('com_messages.edit.message', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_messages&view=messages', false)); return false; } // Load the submenu. MessagesHelper::addSubmenu($this->input->get('view', 'messages')); parent::display(); } } PKb��\^� ::$components/com_menus/tables/menu.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Menu table * * @since 1.6 */ class MenusTableMenu extends JTableMenu { /** * Method to delete a node and, optionally, its child nodes from the table. * * @param integer $pk The primary key of the node to delete. * @param boolean $children True to delete child nodes, false to move them up a level. * * @return boolean True on success. * * @since 2.5 */ public function delete($pk = null, $children = false) { $return = parent::delete($pk, $children); if ($return) { // Delete key from the #__modules_menu table $db = JFactory::getDbo(); $query = $db->getQuery(true) ->delete($db->quoteName('#__modules_menu')) ->where($db->quoteName('menuid') . ' = ' . $pk); $db->setQuery($query); $db->execute(); } return $return; } } PKb��\��9���*components/com_menus/controllers/items.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * The Menu Item Controller * * @since 1.6 */ class MenusControllerItems extends JControllerAdmin { /** * Constructor * * @param array $config Optional configuration array * * @since 1.6 */ public function __construct($config = array()) { parent::__construct($config); $this->registerTask('unsetDefault', 'setDefault'); } /** * Proxy for getModel. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'Item', $prefix = 'MenusModel', $config = array()) { return parent::getModel($name, $prefix, array('ignore_request' => true)); } /** * Rebuild the nested set tree. * * @return boolean False on failure or error, true on success. * * @since 1.6 */ public function rebuild() { $this->checkToken(); $this->setRedirect('index.php?option=com_menus&view=items'); $model = $this->getModel(); if ($model->rebuild()) { // Reorder succeeded. $this->setMessage(JText::_('COM_MENUS_ITEMS_REBUILD_SUCCESS')); return true; } else { // Rebuild failed. $this->setMessage(JText::sprintf('COM_MENUS_ITEMS_REBUILD_FAILED'), 'error'); return false; } } /** * Save the manual order inputs from the menu items list view * * @return void * * @see JControllerAdmin::saveorder() * @deprecated 4.0 */ public function saveorder() { $this->checkToken(); try { JLog::add( sprintf('%s() is deprecated. Function will be removed in 4.0.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get the arrays from the Request $order = $this->input->post->get('order', null, 'array'); $originalOrder = explode(',', $this->input->getString('original_order_values')); // Make sure something has changed if (!($order === $originalOrder)) { parent::saveorder(); } else { // Nothing to reorder $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list, false)); return true; } } /** * Method to set the home property for a list of items * * @return void * * @since 1.6 */ public function setDefault() { // Check for request forgeries $this->checkToken('request'); $app = JFactory::getApplication(); // Get items to publish from the request. $cid = $this->input->get('cid', array(), 'array'); $data = array('setDefault' => 1, 'unsetDefault' => 0); $task = $this->getTask(); $value = ArrayHelper::getValue($data, $task, 0, 'int'); if (empty($cid)) { JError::raiseWarning(500, JText::_($this->text_prefix . '_NO_ITEM_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Make sure the item ids are integers $cid = ArrayHelper::toInteger($cid); // Publish the items. if (!$model->setHome($cid, $value)) { JError::raiseWarning(500, $model->getError()); } else { if ($value == 1) { $ntext = 'COM_MENUS_ITEMS_SET_HOME'; } else { $ntext = 'COM_MENUS_ITEMS_UNSET_HOME'; } $this->setMessage(JText::plural($ntext, count($cid))); } } $this->setRedirect( JRoute::_( 'index.php?option=' . $this->option . '&view=' . $this->view_list . '&menutype=' . $app->getUserState('com_menus.items.menutype'), false ) ); } /** * Method to publish a list of items * * @return void * * @since 3.6.0 */ public function publish() { // Check for request forgeries $this->checkToken(); // Get items to publish from the request. $cid = JFactory::getApplication()->input->get('cid', array(), 'array'); $data = array('publish' => 1, 'unpublish' => 0, 'trash' => -2, 'report' => -3); $task = $this->getTask(); $value = ArrayHelper::getValue($data, $task, 0, 'int'); if (empty($cid)) { try { JLog::add(JText::_($this->text_prefix . '_NO_ITEM_SELECTED'), JLog::WARNING, 'jerror'); } catch (RuntimeException $exception) { JFactory::getApplication()->enqueueMessage(JText::_($this->text_prefix . '_NO_ITEM_SELECTED'), 'warning'); } } else { // Get the model. $model = $this->getModel(); // Make sure the item ids are integers $cid = ArrayHelper::toInteger($cid); // Publish the items. try { $model->publish($cid, $value); $errors = $model->getErrors(); $messageType = 'message'; if ($value == 1) { if ($errors) { $messageType = 'error'; $ntext = $this->text_prefix . '_N_ITEMS_FAILED_PUBLISHING'; } else { $ntext = $this->text_prefix . '_N_ITEMS_PUBLISHED'; } } elseif ($value == 0) { $ntext = $this->text_prefix . '_N_ITEMS_UNPUBLISHED'; } else { $ntext = $this->text_prefix . '_N_ITEMS_TRASHED'; } $this->setMessage(JText::plural($ntext, count($cid)), $messageType); } catch (Exception $e) { $this->setMessage($e->getMessage(), 'error'); } } $this->setRedirect( JRoute::_( 'index.php?option=' . $this->option . '&view=' . $this->view_list . '&menutype=' . JFactory::getApplication()->getUserState('com_menus.items.menutype'), false ) ); } /** * Check in of one or more records. * * @return boolean True on success * * @since 3.6.0 */ public function checkin() { // Check for request forgeries. $this->checkToken(); $ids = JFactory::getApplication()->input->post->get('cid', array(), 'array'); $model = $this->getModel(); $return = $model->checkin($ids); if ($return === false) { // Checkin failed. $message = JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError()); $this->setRedirect( JRoute::_( 'index.php?option=' . $this->option . '&view=' . $this->view_list . '&menutype=' . JFactory::getApplication()->getUserState('com_menus.items.menutype'), false ), $message, 'error' ); return false; } else { // Checkin succeeded. $message = JText::plural($this->text_prefix . '_N_ITEMS_CHECKED_IN', count($ids)); $this->setRedirect( JRoute::_( 'index.php?option=' . $this->option . '&view=' . $this->view_list . '&menutype=' . JFactory::getApplication()->getUserState('com_menus.items.menutype'), false ), $message ); return true; } } } PKb��\A=�j)components/com_menus/controllers/menu.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * The Menu Type Controller * * @since 1.6 */ class MenusControllerMenu extends JControllerForm { /** * Dummy method to redirect back to standard controller * * @param boolean $cachable If true, the view output will be cached. * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menus', false)); } /** * Method to save a menu item. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). * * @return boolean True if successful, false otherwise. * * @since 1.6 */ public function save($key = null, $urlVar = null) { // Check for request forgeries. $this->checkToken(); $app = JFactory::getApplication(); $data = $this->input->post->get('jform', array(), 'array'); $context = 'com_menus.edit.menu'; $task = $this->getTask(); $recordId = $this->input->getInt('id'); // Prevent using 'main' as menutype as this is reserved for backend menus if (strtolower($data['menutype']) == 'main') { $msg = JText::_('COM_MENUS_ERROR_MENUTYPE'); JFactory::getApplication()->enqueueMessage($msg, 'error'); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menu&layout=edit', false)); return false; } // Populate the row id from the session. $data['id'] = $recordId; // Get the model and attempt to validate the posted data. $model = $this->getModel('Menu'); $form = $model->getForm(); if (!$form) { JError::raiseError(500, $model->getError()); return false; } $validData = $model->validate($form, $data); // Check for validation errors. if ($validData === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState($context . '.data', $data); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menu&layout=edit', false)); return false; } if (isset($validData['preset'])) { $preset = trim($validData['preset']) ?: null; unset($validData['preset']); } // Attempt to save the data. if (!$model->save($validData)) { // Save the data in the session. $app->setUserState($context . '.data', $validData); // Redirect back to the edit screen. $this->setMessage(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError()), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menu&layout=edit', false)); return false; } // Import the preset selected if (isset($preset) && $data['client_id'] == 1) { try { MenusHelper::installPreset($preset, $data['menutype']); $this->setMessage(JText::_('COM_MENUS_PRESET_IMPORT_SUCCESS')); } catch (Exception $e) { // Save was successful but the preset could not be loaded. Let it through with just a warning $this->setMessage(JText::sprintf('COM_MENUS_PRESET_IMPORT_FAILED', $e->getMessage())); } } else { $this->setMessage(JText::_('COM_MENUS_MENU_SAVE_SUCCESS')); } // Redirect the user and adjust session state based on the chosen task. switch ($task) { case 'apply': // Set the record data in the session. $recordId = $model->getState($this->context . '.id'); $this->holdEditId($context, $recordId); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menu&layout=edit' . $this->getRedirectToItemAppend($recordId), false)); break; case 'save2new': // Clear the record id and data from the session. $this->releaseEditId($context, $recordId); $app->setUserState($context . '.data', null); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menu&layout=edit', false)); break; default: // Clear the record id and data from the session. $this->releaseEditId($context, $recordId); $app->setUserState($context . '.data', null); // Redirect to the list screen. $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menus', false)); break; } } /** * Method to display a menu as preset xml. * * @return boolean True if successful, false otherwise. * * @since 3.8.0 */ public function exportXml() { // Check for request forgeries. $this->checkToken(); $cid = $this->input->get('cid', array(), 'array'); $model = $this->getModel('Menu'); $item = $model->getItem(reset($cid)); if (!$item->menutype) { $this->setMessage(JText::_('COM_MENUS_SELECT_MENU_FIRST_EXPORT'), 'warning'); $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menus', false)); return false; } $this->setRedirect(JRoute::_('index.php?option=com_menus&view=menu&menutype=' . $item->menutype . '&format=xml', false)); return true; } } PKb��\ٺ�X*components/com_menus/controllers/menus.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * The Menu List Controller * * @since 1.6 */ class MenusControllerMenus extends JControllerLegacy { /** * Display the view * * @param boolean $cachable If true, the view output will be cached. * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 1.6 */ public function display($cachable = false, $urlparams = false) { } /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'Menu', $prefix = 'MenusModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } /** * Remove an item. * * @return void * * @since 1.6 */ public function delete() { // Check for request forgeries $this->checkToken(); $user = JFactory::getUser(); $app = JFactory::getApplication(); $cids = (array) $this->input->get('cid', array(), 'array'); if (count($cids) < 1) { $app->enqueueMessage(JText::_('COM_MENUS_NO_MENUS_SELECTED'), 'notice'); } else { // Access checks. foreach ($cids as $i => $id) { if (!$user->authorise('core.delete', 'com_menus.menu.' . (int) $id)) { // Prune items that you can't change. unset($cids[$i]); $app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED'), 'error'); } } if (count($cids) > 0) { // Get the model. $model = $this->getModel(); // Make sure the item ids are integers $cids = ArrayHelper::toInteger($cids); // Remove the items. if (!$model->delete($cids)) { $this->setMessage($model->getError(), 'error'); } else { $this->setMessage(JText::plural('COM_MENUS_N_MENUS_DELETED', count($cids))); } } } $this->setRedirect('index.php?option=com_menus&view=menus'); } /** * Rebuild the menu tree. * * @return boolean False on failure or error, true on success. * * @since 1.6 */ public function rebuild() { $this->checkToken(); $this->setRedirect('index.php?option=com_menus&view=menus'); $model = $this->getModel('Item'); if ($model->rebuild()) { // Reorder succeeded. $this->setMessage(JText::_('JTOOLBAR_REBUILD_SUCCESS')); return true; } else { // Rebuild failed. $this->setMessage(JText::sprintf('JTOOLBAR_REBUILD_FAILED', $model->getError()), 'error'); return false; } } /** * Temporary method. This should go into the 1.5 to 1.6 upgrade routines. * * @return JException|void JException instance on error * * @since 1.6 */ public function resync() { $db = JFactory::getDbo(); $query = $db->getQuery(true); $parts = null; try { $query->select('element, extension_id') ->from('#__extensions') ->where('type = ' . $db->quote('component')); $db->setQuery($query); $components = $db->loadAssocList('element', 'extension_id'); } catch (RuntimeException $e) { return JError::raiseWarning(500, $e->getMessage()); } // Load all the component menu links $query->select($db->quoteName('id')) ->select($db->quoteName('link')) ->select($db->quoteName('component_id')) ->from('#__menu') ->where($db->quoteName('type') . ' = ' . $db->quote('component.item')); $db->setQuery($query); try { $items = $db->loadObjectList(); } catch (RuntimeException $e) { return JError::raiseWarning(500, $e->getMessage()); } foreach ($items as $item) { // Parse the link. parse_str(parse_url($item->link, PHP_URL_QUERY), $parts); // Tease out the option. if (isset($parts['option'])) { $option = $parts['option']; // Lookup the component ID if (isset($components[$option])) { $componentId = $components[$option]; } else { // Mismatch. Needs human intervention. $componentId = -1; } // Check for mis-matched component id's in the menu link. if ($item->component_id != $componentId) { // Update the menu table. $log = "Link $item->id refers to $item->component_id, converting to $componentId ($item->link)"; echo "<br />$log"; $query->clear(); $query->update('#__menu') ->set('component_id = ' . $componentId) ->where('id = ' . $item->id); try { $db->setQuery($query)->execute(); } catch (RuntimeException $e) { return JError::raiseWarning(500, $e->getMessage()); } } } } } } PKb��\Kg�?�?)components/com_menus/controllers/item.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * The Menu Item Controller * * @since 1.6 */ class MenusControllerItem extends JControllerForm { /** * Method to check if you can add a new record. * * Extended classes can override this if necessary. * * @param array $data An array of input data. * * @return boolean * * @since 3.6 */ protected function allowAdd($data = array()) { $user = JFactory::getUser(); $menuType = JFactory::getApplication()->input->getCmd('menutype', isset($data['menutype']) ? $data['menutype'] : ''); $menutypeID = 0; // Load menutype ID if ($menuType) { $menutypeID = (int) $this->getMenuTypeId($menuType); } return $user->authorise('core.create', 'com_menus.menu.' . $menutypeID); } /** * Method to check if you edit a record. * * Extended classes can override this if necessary. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key; default is id. * * @return boolean * * @since 3.6 */ protected function allowEdit($data = array(), $key = 'id') { $user = JFactory::getUser(); $menutypeID = 0; if (isset($data[$key])) { $model = $this->getModel(); $item = $model->getItem($data[$key]); if (!empty($item->menutype)) { // Protected menutype, do not allow edit if ($item->menutype == 'main') { return false; } $menutypeID = (int) $this->getMenuTypeId($item->menutype); } } return $user->authorise('core.edit', 'com_menus.menu.' . (int) $menutypeID); } /** * Loads the menutype ID by a given menutype string * * @param string $menutype The given menutype * * @return integer * * @since 3.6 */ protected function getMenuTypeId($menutype) { $model = $this->getModel(); $table = $model->getTable('MenuType', 'JTable'); $table->load(array('menutype' => $menutype)); return (int) $table->id; } /** * Method to add a new menu item. * * @return mixed True if the record can be added, a JError object if not. * * @since 1.6 */ public function add() { $app = JFactory::getApplication(); $context = 'com_menus.edit.item'; $result = parent::add(); if ($result) { $app->setUserState($context . '.type', null); $app->setUserState($context . '.link', null); } return $result; } /** * Method to run batch operations. * * @param object $model The model. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 1.6 */ public function batch($model = null) { $this->checkToken(); $model = $this->getModel('Item', '', array()); // Preset the redirect $this->setRedirect(JRoute::_('index.php?option=com_menus&view=items' . $this->getRedirectToListAppend(), false)); return parent::batch($model); } /** * Method to cancel an edit. * * @param string $key The name of the primary key of the URL variable. * * @return boolean True if access level checks pass, false otherwise. * * @since 1.6 */ public function cancel($key = null) { $this->checkToken(); $app = JFactory::getApplication(); $context = 'com_menus.edit.item'; $result = parent::cancel(); if ($result) { // Clear the ancillary data from the session. $app->setUserState($context . '.type', null); $app->setUserState($context . '.link', null); // Redirect to the list screen. $this->setRedirect( JRoute::_( 'index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend() . '&menutype=' . $app->getUserState('com_menus.items.menutype'), false ) ); } return $result; } /** * Method to edit an existing record. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key * (sometimes required to avoid router collisions). * * @return boolean True if access level check and checkout passes, false otherwise. * * @since 1.6 */ public function edit($key = null, $urlVar = null) { $app = JFactory::getApplication(); $result = parent::edit(); if ($result) { // Push the new ancillary data into the session. $app->setUserState('com_menus.edit.item.type', null); $app->setUserState('com_menus.edit.item.link', null); } return $result; } /** * Gets the URL arguments to append to an item redirect. * * @param integer $recordId The primary key id for the item. * @param string $urlVar The name of the URL variable for the id. * * @return string The arguments to append to the redirect URL. * * @since 3.0.1 */ protected function getRedirectToItemAppend($recordId = null, $urlVar = 'id') { $append = parent::getRedirectToItemAppend($recordId, $urlVar); if ($recordId) { $model = $this->getModel(); $item = $model->getItem($recordId); $clientId = $item->client_id; $append = '&client_id=' . $clientId . $append; } else { $app = JFactory::getApplication(); $clientId = $app->input->get('client_id', '0', 'int'); $menuType = $app->input->get('menutype', 'mainmenu', 'cmd'); $append = '&client_id=' . $clientId . ($menuType ? '&menutype=' . $menuType : '') . $append; } return $append; } /** * Method to save a record. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). * * @return boolean True if successful, false otherwise. * * @since 1.6 */ public function save($key = null, $urlVar = null) { // Check for request forgeries. $this->checkToken(); $app = JFactory::getApplication(); $model = $this->getModel('Item', '', array()); $table = $model->getTable(); $data = $this->input->post->get('jform', array(), 'array'); $task = $this->getTask(); $context = 'com_menus.edit.item'; // Set the menutype should we need it. if ($data['menutype'] !== '') { $app->input->set('menutype', $data['menutype']); } // Determine the name of the primary key for the data. if (empty($key)) { $key = $table->getKeyName(); } // To avoid data collisions the urlVar may be different from the primary key. if (empty($urlVar)) { $urlVar = $key; } $recordId = $this->input->getInt($urlVar); // Populate the row id from the session. $data[$key] = $recordId; // The save2copy task needs to be handled slightly differently. if ($task == 'save2copy') { // Check-in the original row. if ($model->checkin($data['id']) === false) { // Check-in failed, go back to the item and display a notice. $this->setMessage(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError()), 'warning'); return false; } // Reset the ID and then treat the request as for Apply. $data['id'] = 0; $data['associations'] = array(); $task = 'apply'; } // Access check. if (!$this->allowSave($data, $key)) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED')); $this->setMessage($this->getError(), 'error'); $this->setRedirect( JRoute::_( 'index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false ) ); return false; } // Validate the posted data. // This post is made up of two forms, one for the item and one for params. $form = $model->getForm($data); if (!$form) { JError::raiseError(500, $model->getError()); return false; } if ($data['type'] == 'url') { $data['link'] = str_replace(array('"', '>', '<'), '', $data['link']); if (strstr($data['link'], ':')) { $segments = explode(':', $data['link']); $protocol = strtolower($segments[0]); $scheme = array( 'http', 'https', 'ftp', 'ftps', 'gopher', 'mailto', 'news', 'prospero', 'telnet', 'rlogin', 'tn3270', 'wais', 'mid', 'cid', 'nntp', 'tel', 'urn', 'ldap', 'file', 'fax', 'modem', 'git', 'sms', ); if (!in_array($protocol, $scheme)) { $app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'), 'warning'); $this->setRedirect( JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId), false) ); return false; } } } $data = $model->validate($form, $data); // Preprocess request fields to ensure that we remove not set or empty request params $request = $form->getGroup('request', true); // Check for the special 'request' entry. if ($data['type'] == 'component' && !empty($request)) { $removeArgs = array(); if (!isset($data['request']) || !is_array($data['request'])) { $data['request'] = array(); } foreach ($request as $field) { $fieldName = $field->getAttribute('name'); if (!isset($data['request'][$fieldName]) || $data['request'][$fieldName] == '') { $removeArgs[$fieldName] = ''; } } // Parse the submitted link arguments. $args = array(); parse_str(parse_url($data['link'], PHP_URL_QUERY), $args); // Merge in the user supplied request arguments. $args = array_merge($args, $data['request']); // Remove the unused request params if (!empty($args) && !empty($removeArgs)) { $args = array_diff_key($args, $removeArgs); } $data['link'] = 'index.php?' . urldecode(http_build_query($args, '', '&')); unset($data['request']); } // Check for validation errors. if ($data === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState('com_menus.edit.item.data', $data); // Redirect back to the edit screen. $editUrl = 'index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId); $this->setRedirect(JRoute::_($editUrl, false)); return false; } // Attempt to save the data. if (!$model->save($data)) { // Save the data in the session. $app->setUserState('com_menus.edit.item.data', $data); // Redirect back to the edit screen. $editUrl = 'index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId); $this->setMessage(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError()), 'error'); $this->setRedirect(JRoute::_($editUrl, false)); return false; } // Save succeeded, check-in the row. if ($model->checkin($data['id']) === false) { // Check-in failed, go back to the row and display a notice. $this->setMessage(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError()), 'warning'); $redirectUrl = 'index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId); $this->setRedirect(JRoute::_($redirectUrl, false)); return false; } $this->setMessage(JText::_('COM_MENUS_SAVE_SUCCESS')); // Redirect the user and adjust session state based on the chosen task. switch ($task) { case 'apply': // Set the row data in the session. $recordId = $model->getState($this->context . '.id'); $this->holdEditId($context, $recordId); $app->setUserState('com_menus.edit.item.data', null); $app->setUserState('com_menus.edit.item.type', null); $app->setUserState('com_menus.edit.item.link', null); // Redirect back to the edit screen. $editUrl = 'index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId); $this->setRedirect(JRoute::_($editUrl, false)); break; case 'save2new': // Clear the row id and data in the session. $this->releaseEditId($context, $recordId); $app->setUserState('com_menus.edit.item.data', null); $app->setUserState('com_menus.edit.item.type', null); $app->setUserState('com_menus.edit.item.link', null); // Redirect back to the edit screen. $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend(), false)); break; default: // Clear the row id and data in the session. $this->releaseEditId($context, $recordId); $app->setUserState('com_menus.edit.item.data', null); $app->setUserState('com_menus.edit.item.type', null); $app->setUserState('com_menus.edit.item.link', null); // Redirect to the list screen. $this->setRedirect( JRoute::_( 'index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend() . '&menutype=' . $app->getUserState('com_menus.items.menutype'), false ) ); break; } return true; } /** * Sets the type of the menu item currently being edited. * * @return void * * @since 1.6 */ public function setType() { $this->checkToken(); $app = JFactory::getApplication(); // Get the posted values from the request. $data = $this->input->post->get('jform', array(), 'array'); // Get the type. $type = $data['type']; $type = json_decode(base64_decode($type)); $title = isset($type->title) ? $type->title : null; $recordId = isset($type->id) ? $type->id : 0; $specialTypes = array('alias', 'separator', 'url', 'heading', 'container'); if (!in_array($title, $specialTypes)) { $title = 'component'; } else { // Set correct component id to ensure proper 404 messages with system links $data['component_id'] = 0; } $app->setUserState('com_menus.edit.item.type', $title); if ($title == 'component') { if (isset($type->request)) { // Clean component name $type->request->option = JFilterInput::getInstance()->clean($type->request->option, 'CMD'); $component = JComponentHelper::getComponent($type->request->option); $data['component_id'] = $component->id; $app->setUserState('com_menus.edit.item.link', 'index.php?' . JUri::buildQuery((array) $type->request)); } } // If the type is alias you just need the item id from the menu item referenced. elseif ($title == 'alias') { $app->setUserState('com_menus.edit.item.link', 'index.php?Itemid='); } unset($data['request']); $data['type'] = $title; if ($this->input->get('fieldtype') == 'type') { $data['link'] = $app->getUserState('com_menus.edit.item.link'); } // Save the data in the session. $app->setUserState('com_menus.edit.item.data', $data); $this->type = $type; $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId), false)); } /** * Gets the parent items of the menu location currently. * * @return void * * @since 3.2 */ public function getParentItem() { $app = JFactory::getApplication(); $results = array(); $menutype = $this->input->get->get('menutype'); if ($menutype) { $model = $this->getModel('Items', '', array()); $model->getState(); $model->setState('filter.menutype', $menutype); $model->setState('list.select', 'a.id, a.title, a.level'); $model->setState('list.start', '0'); $model->setState('list.limit', '0'); /** @var MenusModelItems $model */ $results = $model->getItems(); // Pad the option text with spaces using depth level as a multiplier. for ($i = 0, $n = count($results); $i < $n; $i++) { $results[$i]->title = str_repeat(' - ', $results[$i]->level) . $results[$i]->title; } } // Output a JSON object echo json_encode($results); $app->close(); } } PKb��\Φ��33?components/com_menus/layouts/joomla/searchtools/default/bar.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Layout * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; /** @var array $displayData */ $data = $displayData; if ($data['view'] instanceof MenusViewItems) { // We will get the menutype filter & remove it from the form filters $menuTypeField = $data['view']->filterForm->getField('menutype'); // Add the client selector before the form filters. $clientIdField = $data['view']->filterForm->getField('client_id'); if ($clientIdField): ?> <div class="js-stools-field-filter js-stools-client_id"> <?php echo $clientIdField->input; ?> </div> <?php endif; ?> <div class="js-stools-field-filter js-stools-menutype"> <?php echo $menuTypeField->input; ?> </div> <?php } elseif ($data['view'] instanceof MenusViewMenus) { // Add the client selector before the form filters. $clientIdField = $data['view']->filterForm->getField('client_id'); ?> <div class="js-stools-field-filter js-stools-client_id"> <?php echo $clientIdField->input; ?> </div> <?php } // Display the main joomla layout echo JLayoutHelper::render('joomla.searchtools.default.bar', $data, null, array('component' => 'none')); PKb��\Z��;components/com_menus/layouts/joomla/searchtools/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage Layout * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; /** @var array $displayData */ $data = $displayData; // Receive overridable options $data['options'] = !empty($data['options']) ? $data['options'] : array(); if ($data['view'] instanceof MenusViewItems || $data['view'] instanceof MenusViewMenus) { $doc = JFactory::getDocument(); $doc->addStyleDeclaration(" /* Fixed filter field in search bar */ .js-stools .js-stools-menutype, .js-stools .js-stools-client_id { float: left; margin-right: 10px; min-width: 220px; } html[dir=rtl] .js-stools .js-stools-menutype, html[dir=rtl] .js-stools .js-stools-client_id { float: right; margin-left: 10px margin-right: 0; } .js-stools .js-stools-container-bar .js-stools-field-filter .chzn-container { padding: 3px 0; } "); // Client selector doesn't have to activate the filter bar. unset($data['view']->activeFilters['client_id']); // Menutype filter doesn't have to activate the filter bar unset($data['view']->activeFilters['menutype']); } // Set some basic options $customOptions = array( 'filtersHidden' => isset($data['options']['filtersHidden']) ? $data['options']['filtersHidden'] : empty($data['view']->activeFilters), 'defaultLimit' => isset($data['options']['defaultLimit']) ? $data['options']['defaultLimit'] : JFactory::getApplication()->get('list_limit', 20), 'searchFieldSelector' => '#filter_search', 'orderFieldSelector' => '#list_fullordering', 'totalResults' => isset($data['options']['totalResults']) ? $data['options']['totalResults'] : -1, 'noResultsText' => isset($data['options']['noResultsText']) ? $data['options']['noResultsText'] : JText::_('JGLOBAL_NO_MATCHING_RESULTS'), ); $data['options'] = array_merge($customOptions, $data['options']); $formSelector = !empty($data['options']['formSelector']) ? $data['options']['formSelector'] : '#adminForm'; // Load search tools JHtml::_('searchtools.form', $formSelector, $data['options']); $filtersClass = isset($data['view']->activeFilters) && $data['view']->activeFilters ? ' js-stools-container-filters-visible' : ''; ?> <div class="js-stools clearfix"> <div class="clearfix"> <div class="js-stools-container-bar"> <?php echo JLayoutHelper::render('joomla.searchtools.default.bar', $data); ?> </div> <div class="js-stools-container-list hidden-phone hidden-tablet"> <?php echo JLayoutHelper::render('joomla.searchtools.default.list', $data); ?> </div> </div> <!-- Filters div --> <div class="js-stools-container-filters hidden-phone clearfix<?php echo $filtersClass; ?>"> <?php echo JLayoutHelper::render('joomla.searchtools.default.filters', $data); ?> </div> </div> <?php if ($data['options']['totalResults'] === 0) : ?> <?php echo JLayoutHelper::render('joomla.searchtools.default.noitems', $data); ?> <?php endif; ?> PKb��\�z''components/com_menus/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="page-options" label="COM_MENUS_PAGE_OPTIONS_LABEL" > <field name="page_title" type="text" label="COM_MENUS_ITEM_FIELD_PAGE_TITLE_LABEL" description="COM_MENUS_ITEM_FIELD_PAGE_TITLE_DESC" default="" /> <field name="show_page_heading" type="radio" label="COM_MENUS_ITEM_FIELD_SHOW_PAGE_HEADING_LABEL" description="COM_MENUS_ITEM_FIELD_SHOW_PAGE_HEADING_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="page_heading" type="text" label="COM_MENUS_ITEM_FIELD_PAGE_HEADING_LABEL" description="COM_MENUS_ITEM_FIELD_PAGE_HEADING_DESC" default="" showon="show_page_heading:1" /> <field name="pageclass_sfx" type="text" label="COM_MENUS_ITEM_FIELD_PAGE_CLASS_LABEL" description="COM_MENUS_ITEM_FIELD_PAGE_CLASS_DESC" default="" /> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_menus" section="component" /> </fieldset> </config> PKb��\4P��HHcomponents/com_menus/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_menus"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> <section name="menu"> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKb��\�͖�>>components/com_menus/menus.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; if (!JFactory::getUser()->authorise('core.manage', 'com_menus')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Menus'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\h�NRSS:components/com_menus/views/item/tmpl/edit_associations.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.associations', $this); PKb��\"���5components/com_menus/views/item/tmpl/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <?php echo JHtml::_('bootstrap.startAccordion', 'menuOptions', array('active' => 'collapse0')); $fieldSets = $this->form->getFieldsets('params'); $i = 0; foreach ($fieldSets as $name => $fieldSet) : if (!(($this->item->link == 'index.php?option=com_wrapper&view=wrapper') && $fieldSet->name == 'request') && !($this->item->link == 'index.php?Itemid=' && $fieldSet->name == 'aliasoptions')) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_MENUS_' . $name . '_FIELDSET_LABEL'; echo JHtml::_('bootstrap.addSlide', 'menuOptions', JText::_($label), 'collapse' . ($i++)); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">' . $this->escape(JText::_($fieldSet->description)) . '</p>'; endif; ?> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <div class="control-group"> <div class="control-label"> <?php echo $field->label; ?> </div> <div class="controls"> <?php echo $field->input; ?> </div> </div> <?php endforeach; echo JHtml::_('bootstrap.endSlide'); endif; endforeach; ?> <?php echo JHtml::_('bootstrap.endAccordion'); PKb��\�$;�``5components/com_menus/views/item/tmpl/edit_modules.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.core'); foreach ($this->levels as $key => $value) { $allLevels[$value->id] = $value->title; } JFactory::getDocument()->addScriptDeclaration(' var viewLevels = ' . json_encode($allLevels) . ', menuId = parseInt(' . (int) $this->item->id . '); jQuery(function($) { var baseLink = "index.php?option=com_modules&client_id=0&task=module.edit&tmpl=component&view=module&layout=modal&id=", iFrameAttr = "class=\"iframe jviewport-height70\""; $(document) .on("click", "input:radio[id^=\'jform_toggle_modules_assigned1\']", function (event) { $(".table tr.no").hide(); }) .on("click", "input:radio[id^=\'jform_toggle_modules_assigned0\']", function (event) { $(".table tr.no").show(); }) .on("click", "input:radio[id^=\'jform_toggle_modules_published1\']", function (event) { $(".table tr.unpublished").hide(); }) .on("click", "input:radio[id^=\'jform_toggle_modules_published0\']", function (event) { $(".table tr.unpublished").show(); }) .on("click", ".module-edit-link", function () { var link = baseLink + $(this).data("moduleId"), iFrame = $("<iframe src=\"" + link + "\" " + iFrameAttr + "></iframe>"); $("#moduleEditModal").modal() .find(".modal-body").empty().prepend(iFrame); }) .on("click", "#moduleEditModal .modal-footer .btn", function () { var target = $(this).data("target"); if (target) { $("#moduleEditModal iframe").contents().find(target).click(); } }); }); '); JFactory::getDocument()->addStyleDeclaration(' ul.horizontal-buttons li { display: inline-block; padding-right: 10%; } '); // Set up the bootstrap modal that will be used for all module editors echo JHtml::_( 'bootstrap.renderModal', 'moduleEditModal', array( 'title' => JText::_('COM_MENUS_EDIT_MODULE_SETTINGS'), 'backdrop' => 'static', 'keyboard' => false, 'closeButton' => false, 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn" data-dismiss="modal" data-target="#closeBtn">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary" data-dismiss="modal" data-target="#saveBtn">' . JText::_('JSAVE') . '</button>' . '<button type="button" class="btn btn-success" data-target="#applyBtn">' . JText::_('JAPPLY') . '</button>', ) ); ?> <?php // Set main fields. $this->fields = array('toggle_modules_assigned','toggle_modules_published'); echo JLayoutHelper::render('joomla.menu.edit_modules', $this); ?> <table class="table table-striped"> <thead> <tr> <th class="left"> <?php echo JText::_('COM_MENUS_HEADING_ASSIGN_MODULE'); ?> </th> <th> <?php echo JText::_('COM_MENUS_HEADING_LEVELS'); ?> </th> <th> <?php echo JText::_('COM_MENUS_HEADING_POSITION'); ?> </th> <th> <?php echo JText::_('COM_MENUS_HEADING_DISPLAY'); ?> </th> <th> <?php echo JText::_('COM_MENUS_HEADING_PUBLISHED_ITEMS'); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->modules as $i => &$module) : ?> <?php if (is_null($module->menuid)) : ?> <?php if (!$module->except || $module->menuid < 0) : ?> <?php $no = 'no '; ?> <?php else : ?> <?php $no = ''; ?> <?php endif; ?> <?php else : ?> <?php $no = ''; ?> <?php endif; ?> <?php if ($module->published) : ?> <?php $status = ''; ?> <?php else : ?> <?php $status = 'unpublished '; ?> <?php endif; ?> <tr class="<?php echo $no; ?><?php echo $status; ?>row<?php echo $i % 2; ?>" id="tr-<?php echo $module->id; ?>" style="display:table-row"> <td id="<?php echo $module->id; ?>"> <button type="button" data-target="#moduleEditModal" class="btn btn-link module-edit-link" title="<?php echo JText::_('COM_MENUS_EDIT_MODULE_SETTINGS'); ?>" id="title-<?php echo $module->id; ?>" data-module-id="<?php echo $module->id; ?>"> <?php echo $this->escape($module->title); ?></button> </td> <td id="access-<?php echo $module->id; ?>"> <?php echo $this->escape($module->access_title); ?> </td> <td id="position-<?php echo $module->id; ?>"> <?php echo $this->escape($module->position); ?> </td> <td id="menus-<?php echo $module->id; ?>"> <?php if (is_null($module->menuid)) : ?> <?php if ($module->except) : ?> <span class="label label-success"> <?php echo JText::_('JYES'); ?> </span> <?php else : ?> <span class="label label-important"> <?php echo JText::_('JNO'); ?> </span> <?php endif; ?> <?php elseif ($module->menuid > 0) : ?> <span class="label label-success"> <?php echo JText::_('JYES'); ?> </span> <?php elseif ($module->menuid < 0) : ?> <span class="label label-important"> <?php echo JText::_('JNO'); ?> </span> <?php else : ?> <span class="label label-info"> <?php echo JText::_('JALL'); ?> </span> <?php endif; ?> </td> <td id="status-<?php echo $module->id; ?>"> <?php if ($module->published) : ?> <span class="label label-success"> <?php echo JText::_('JYES'); ?> </span> <?php else : ?> <span class="label label-important"> <?php echo JText::_('JNO'); ?> </span> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> PKb��\������-components/com_menus/views/item/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.core'); JHtml::_('behavior.tabstate'); JHtml::_('behavior.formvalidator'); JHtml::_('formbehavior.chosen', '#jform_request_filter_tag', null, array('placeholder_text_multiple' => JText::_('JGLOBAL_TYPE_OR_SELECT_SOME_TAGS'))); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.keepalive'); JText::script('ERROR'); JText::script('JGLOBAL_VALIDATION_FORM_FAILED'); $assoc = JLanguageAssociations::isEnabled(); // Ajax for parent items $script = " jQuery(document).ready(function ($){ $('#jform_menutype').change(function(){ var menutype = $(this).val(); $.ajax({ url: 'index.php?option=com_menus&task=item.getParentItem&menutype=' + menutype, dataType: 'json' }).done(function(data) { $('#jform_parent_id option').each(function() { if ($(this).val() != '1') { $(this).remove(); } }); $.each(data, function (i, val) { var option = $('<option>'); option.text(val.title).val(val.id); $('#jform_parent_id').append(option); }); $('#jform_parent_id').trigger('liszt:updated'); }); }); // Menu type Login Form specific $('#item-form').on('submit', function() { if ($('#jform_params_login_redirect_url') && $('#jform_params_logout_redirect_url')) { // Login if ($('#jform_params_login_redirect_url').closest('.control-group').css('display') === 'block') { $('#jform_params_login_redirect_menuitem_id').val(''); } if ($('#jform_params_login_redirect_menuitem_name').closest('.control-group').css('display') === 'block') { $('#jform_params_login_redirect_url').val(''); } // Logout if ($('#jform_params_logout_redirect_url').closest('.control-group').css('display') === 'block') { $('#jform_params_logout_redirect_menuitem_id').val(''); } if ($('#jform_params_logout_redirect_menuitem_id').closest('.control-group').css('display') === 'block') { $('#jform_params_logout_redirect_url').val(''); } } }); }); Joomla.submitbutton = function(task, type){ if (task == 'item.setType' || task == 'item.setMenuType') { if (task == 'item.setType') { jQuery('#item-form input[name=\"jform[type]\"]').val(type); jQuery('#fieldtype').val('type'); } else { jQuery('#item-form input[name=\"jform[menutype]\"]').val(type); } Joomla.submitform('item.setType', document.getElementById('item-form')); } else if (task == 'item.cancel' || document.formvalidator.isValid(document.getElementById('item-form'))) { Joomla.submitform(task, document.getElementById('item-form')); // @deprecated 4.0 The following js is not needed since 3.7.0. if (task !== 'item.apply') { window.parent.jQuery('#menuEdit" . (int) $this->item->id . "Modal').modal('hide'); } } else { // special case for modal popups validation response jQuery('#item-form .modal-value.invalid').each(function(){ var field = jQuery(this), idReversed = field.attr('id').split('').reverse().join(''), separatorLocation = idReversed.indexOf('_'), nameId = '#' + idReversed.substr(separatorLocation).split('').reverse().join('') + 'name'; jQuery(nameId).addClass('invalid'); }); } }; "; $input = JFactory::getApplication()->input; // Add the script to the document head. JFactory::getDocument()->addScriptDeclaration($script); // In case of modal $isModal = $input->get('layout') == 'modal' ? true : false; $layout = $isModal ? 'modal' : 'edit'; $tmpl = $isModal || $input->get('tmpl', '', 'cmd') === 'component' ? '&tmpl=component' : ''; $clientId = $this->state->get('item.client_id', 0); $lang = JFactory::getLanguage()->getTag(); // Load mod_menu.ini file when client is administrator if ($clientId === 1) { JFactory::getLanguage()->load('mod_menu', JPATH_ADMINISTRATOR, null, false, true); } ?> <form action="<?php echo JRoute::_('index.php?option=com_menus&view=item&client_id=' . $clientId . '&layout=' . $layout . $tmpl . '&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="item-form" class="form-validate"> <?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?> <?php // Add the translation of the menu item title when client is administrator ?> <?php if ($clientId === 1 && $this->item->id != 0) : ?> <div class="form-inline form-inline-header"> <div class="control-group"> <div class="control-label"> <label><?php echo JText::sprintf('COM_MENUS_TITLE_TRANSLATION', $lang); ?></label> </div> <div class="controls"> <input class="input-xlarge" value="<?php echo JText::_($this->item->title); ?>" readonly="readonly" type="text"> </div> </div> </div> <?php endif; ?> <div class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'details')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'details', JText::_('COM_MENUS_ITEM_DETAILS')); ?> <div class="row-fluid"> <div class="span9"> <?php echo $this->form->renderField('type'); if ($this->item->type == 'alias') { echo $this->form->renderField('aliasoptions', 'params'); } if ($this->item->type == 'separator') { echo $this->form->renderField('text_separator', 'params'); } echo $this->form->renderFieldset('request'); if ($this->item->type == 'url') { $this->form->setFieldAttribute('link', 'readonly', 'false'); $this->form->setFieldAttribute('link', 'required', 'true'); } echo $this->form->renderField('link'); if ($this->item->type == 'alias') { echo $this->form->renderField('alias_redirect', 'params'); } echo $this->form->renderField('browserNav'); echo $this->form->renderField('template_style_id'); if (!$isModal && $this->item->type == 'container') { echo $this->loadTemplate('container'); } ?> </div> <div class="span3"> <?php // Set main fields. $this->fields = array( 'id', 'client_id', 'menutype', 'parent_id', 'menuordering', 'published', 'home', 'access', 'language', 'note', ); if ($this->item->type != 'component') { $this->fields = array_diff($this->fields, array('home')); } echo JLayoutHelper::render('joomla.edit.global', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php $this->fieldsets = array(); $this->ignore_fieldsets = array('aliasoptions', 'request', 'item_associations'); echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php if (!$isModal && $assoc && $this->state->get('item.client_id') != 1) : ?> <?php if ($this->item->type !== 'alias' && $this->item->type !== 'url' && $this->item->type !== 'separator' && $this->item->type !== 'heading') : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'associations', JText::_('JGLOBAL_FIELDSET_ASSOCIATIONS')); ?> <?php echo $this->loadTemplate('associations'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php elseif ($isModal && $assoc && $this->state->get('item.client_id') != 1) : ?> <div class="hidden"><?php echo $this->loadTemplate('associations'); ?></div> <?php endif; ?> <?php if (!empty($this->modules)) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'modules', JText::_('COM_MENUS_ITEM_MODULE_ASSIGNMENT')); ?> <?php echo $this->loadTemplate('modules'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> </div> <input type="hidden" name="task" value="" /> <input type="hidden" name="forcedLanguage" value="<?php echo $input->get('forcedLanguage', '', 'cmd'); ?>" /> <?php echo $this->form->getInput('component_id'); ?> <?php echo JHtml::_('form.token'); ?> <input type="hidden" id="fieldtype" name="fieldtype" value="" /> </form> PKb��\�]�JJ-components/com_menus/views/item/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * The HTML Menus Menu Item View. * * @since 1.6 */ class MenusViewItem extends JViewLegacy { /** * @var JForm */ protected $form; /** * @var object */ protected $item; /** * @var mixed */ protected $modules; /** * @var JObject */ protected $state; /** * @var JObject */ protected $canDo; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void * * @since 1.6 */ public function display($tpl = null) { $user = JFactory::getUser(); $this->state = $this->get('State'); $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->modules = $this->get('Modules'); $this->levels = $this->get('ViewLevels'); $this->canDo = JHelperContent::getActions('com_menus', 'menu', (int) $this->state->get('item.menutypeid')); // Check if we're allowed to edit this item // No need to check for create, because then the moduletype select is empty if (!empty($this->item->id) && !$this->canDo->get('core.edit')) { throw new Exception(JText::_('JERROR_ALERTNOAUTHOR'), 403); } // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return; } // If we are forcing a language in modal (used for associations). if ($this->getLayout() === 'modal' && $forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'cmd')) { // Set the language field to the forcedLanguage and disable changing it. $this->form->setValue('language', null, $forcedLanguage); $this->form->setFieldAttribute('language', 'readonly', 'true'); // Only allow to select categories with All language or with the forced language. $this->form->setFieldAttribute('parent_id', 'language', '*,' . $forcedLanguage); } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $input = JFactory::getApplication()->input; $input->set('hidemainmenu', true); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); $canDo = $this->canDo; $clientId = $this->state->get('item.client_id', 0); JToolbarHelper::title(JText::_($isNew ? 'COM_MENUS_VIEW_NEW_ITEM_TITLE' : 'COM_MENUS_VIEW_EDIT_ITEM_TITLE'), 'list menu-add'); // If a new item, can save the item. Allow users with edit permissions to apply changes to prevent returning to grid. if ($isNew && $canDo->get('core.create')) { if ($canDo->get('core.edit')) { JToolbarHelper::apply('item.apply'); } JToolbarHelper::save('item.save'); } // If not checked out, can save the item. if (!$isNew && !$checkedOut && $canDo->get('core.edit')) { JToolbarHelper::apply('item.apply'); JToolbarHelper::save('item.save'); } // If the user can create new items, allow them to see Save & New if ($canDo->get('core.create')) { JToolbarHelper::save2new('item.save2new'); } // If an existing item, can save to a copy only if we have create rights. if (!$isNew && $canDo->get('core.create')) { JToolbarHelper::save2copy('item.save2copy'); } if (!$isNew && JLanguageAssociations::isEnabled() && JComponentHelper::isEnabled('com_associations') && $clientId != 1) { JToolbarHelper::custom('item.editAssociations', 'contract', 'contract', 'JTOOLBAR_ASSOCIATIONS', false, false); } if ($isNew) { JToolbarHelper::cancel('item.cancel'); } else { JToolbarHelper::cancel('item.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); // Get the help information for the menu item. $lang = JFactory::getLanguage(); $help = $this->get('Help'); if ($lang->hasKey($help->url)) { $debug = $lang->setDebug(false); $url = JText::_($help->url); $lang->setDebug($debug); } else { $url = $help->url; } JToolbarHelper::help($help->key, $help->local, $url); } } PKb��\eX�K<components/com_menus/views/items/tmpl/default_batch_body.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $options = array( JHtml::_('select.option', 'c', JText::_('JLIB_HTML_BATCH_COPY')), JHtml::_('select.option', 'm', JText::_('JLIB_HTML_BATCH_MOVE')) ); $published = $this->state->get('filter.published'); $clientId = $this->state->get('filter.client_id'); $menuType = JFactory::getApplication()->getUserState('com_menus.items.menutype'); if ($clientId == 1) : JFactory::getDocument()->addScriptDeclaration( ' jQuery(document).ready(function($){ if ($("#batch-menu-id").length){var batchSelector = $("#batch-menu-id");} if ($("#batch-copy-move").length) { $("#batch-copy-move").hide(); batchSelector.on("change", function(){ if (batchSelector.val() != 0 || batchSelector.val() != "") { $("#batch-copy-move").show(); } else { $("#batch-copy-move").hide(); } }); } }); ' ); endif; ?> <div class="container-fluid"> <?php if (strlen($menuType) && $menuType != '*') : ?> <?php if ($clientId != 1) : ?> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <?php endif; ?> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div id="batch-choose-action" class="combo control-group"> <label id="batch-choose-action-lbl" class="control-label" for="batch-menu-id"> <?php echo JText::_('COM_MENUS_BATCH_MENU_LABEL'); ?> </label> <div class="controls"> <select name="batch[menu_id]" id="batch-menu-id"> <option value=""><?php echo JText::_('JLIB_HTML_BATCH_NO_CATEGORY'); ?></option> <?php $opts = array( 'published' => $published, 'checkacl' => (int) $this->state->get('menutypeid'), 'clientid' => (int) $clientId, ); echo JHtml::_('select.options', JHtml::_('menu.menuitems', $opts)); ?> </select> </div> </div> <div id="batch-copy-move" class="control-group radio"> <?php echo JText::_('JLIB_HTML_BATCH_MOVE_QUESTION'); ?> <?php echo JHtml::_('select.radiolist', $options, 'batch[move_copy]', '', 'value', 'text', 'm'); ?> </div> <?php endif; ?> <?php if ($published < 0 && $clientId == 1): ?> <p><?php echo JText::_('COM_MENUS_SELECT_MENU_FILTER_NOT_TRASHED'); ?></p> <?php endif; ?> </div> <?php else : ?> <div class="row-fluid"> <p><?php echo JText::_('COM_MENUS_SELECT_MENU_FIRST'); ?></p> </div> <?php endif; ?> </div> PKb��\l�����>components/com_menus/views/items/tmpl/default_batch_footer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $published = $this->state->get('filter.published'); $clientId = $this->state->get('filter.client_id'); $menuType = JFactory::getApplication()->getUserState('com_menus.items.menutype'); ?> <button type="button" class="btn" onclick="document.getElementById('batch-menu-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <?php if ((strlen($menuType) && $menuType != '*' && $clientId == 0) || ($published > 0 && $clientId == 1)): ?> <button type="submit" class="btn btn-success" onclick="Joomla.submitbutton('item.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> <?php endif; ?> PKb��\x���..1components/com_menus/views/items/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $app = JFactory::getApplication(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $ordering = ($listOrder == 'a.lft'); $saveOrder = ($listOrder == 'a.lft' && strtolower($listDirn) == 'asc'); $menuType = (string) $app->getUserState('com_menus.items.menutype', '', 'string'); if ($saveOrder && $menuType) { $saveOrderingUrl = 'index.php?option=com_menus&task=items.saveOrderAjax&tmpl=component'; JHtml::_('sortablelist.sortable', 'itemList', 'adminForm', strtolower($listDirn), $saveOrderingUrl, false, true); } $assoc = JLanguageAssociations::isEnabled() && $this->state->get('filter.client_id') == 0; $colSpan = $assoc ? 10 : 9; if ($menuType == '') { $colSpan--; } ?> <?php // Set up the filter bar. ?> <form action="<?php echo JRoute::_('index.php?option=com_menus&view=items'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this, 'options' => array('selectorFieldName' => 'menutype'))); ?> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="itemList"> <thead> <tr> <?php if ($menuType) : ?> <th width="1%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', '', 'a.lft', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?> </th> <?php endif; ?> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="title"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_MENUS_HEADING_MENU', 'menutype_title', $listDirn, $listOrder); ?> </th> <?php if ($this->state->get('filter.client_id') == 0) : ?> <th width="5%" class="center nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_MENUS_HEADING_HOME', 'a.home', $listDirn, $listOrder); ?> </th> <?php endif; ?> <?php if ($this->state->get('filter.client_id') == 0) : ?> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'a.access', $listDirn, $listOrder); ?> </th> <?php endif; ?> <?php if ($assoc) : ?> <th width="5%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_MENUS_HEADING_ASSOCIATION', 'association', $listDirn, $listOrder); ?> </th> <?php endif; ?> <?php if ($this->state->get('filter.client_id') == 0) : ?> <th width="15%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'language', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="<?php echo $colSpan; ?>"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $orderkey = array_search($item->id, $this->ordering[$item->parent_id]); $canCreate = $user->authorise('core.create', 'com_menus.menu.' . $item->menutype_id); $canEdit = $user->authorise('core.edit', 'com_menus.menu.' . $item->menutype_id); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id')|| $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_menus.menu.' . $item->menutype_id) && $canCheckin; // Get the parents of item for sorting if ($item->level > 1) { $parentsStr = ''; $_currentParentId = $item->parent_id; $parentsStr = ' ' . $_currentParentId; for ($j = 0; $j < $item->level; $j++) { foreach ($this->ordering as $k => $v) { $v = implode('-', $v); $v = '-' . $v . '-'; if (strpos($v, '-' . $_currentParentId . '-') !== false) { $parentsStr .= ' ' . $k; $_currentParentId = $k; break; } } } } else { $parentsStr = ''; } ?> <tr class="row<?php echo $i % 2; ?>" sortable-group-id="<?php echo $item->parent_id; ?>" item-id="<?php echo $item->id; ?>" parents="<?php echo $parentsStr; ?>" level="<?php echo $item->level; ?>"> <?php if ($menuType) : ?> <td class="order nowrap center hidden-phone"> <?php $iconClass = ''; if (!$canChange) { $iconClass = ' inactive'; } elseif (!$saveOrder) { $iconClass = ' inactive tip-top hasTooltip" title="' . JHtml::_('tooltipText', 'JORDERINGDISABLED'); } ?> <span class="sortable-handler<?php echo $iconClass ?>"> <span class="icon-menu" aria-hidden="true"></span> </span> <?php if ($canChange && $saveOrder) : ?> <input type="text" style="display:none" name="order[]" size="5" value="<?php echo $orderkey + 1; ?>" /> <?php endif; ?> </td> <?php endif; ?> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td class="center"> <?php // Show protected items as published always. We don't allow state change for them. Show/Hide is the module's job. $published = $item->protected ? 3 : $item->published; echo JHtml::_('MenusHtml.Menus.state', $published, $i, $canChange && !$item->protected, 'cb'); ?> </td> <td> <?php $prefix = JLayoutHelper::render('joomla.html.treeprefix', array('level' => $item->level)); ?> <?php echo $prefix; ?> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'items.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit && !$item->protected) : ?> <a class="hasTooltip" href="<?php echo JRoute::_('index.php?option=com_menus&task=item.edit&id=' . (int) $item->id); ?>" title="<?php echo JText::_('JACTION_EDIT'); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <span class="small"> <?php if ($item->type != 'url') : ?> <?php if (empty($item->note)) : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?> <?php else : ?> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS_NOTE', $this->escape($item->alias), $this->escape($item->note)); ?> <?php endif; ?> <?php elseif ($item->type == 'url' && $item->note) : ?> <?php echo JText::sprintf('JGLOBAL_LIST_NOTE', $this->escape($item->note)); ?> <?php endif; ?> </span> <?php echo JHtml::_('MenusHtml.Menus.visibility', $item->params); ?> <div title="<?php echo $this->escape($item->path); ?>"> <?php echo $prefix; ?> <span class="small" title="<?php echo isset($item->item_type_desc) ? htmlspecialchars($this->escape($item->item_type_desc), ENT_COMPAT, 'UTF-8') : ''; ?>"> <?php echo $this->escape($item->item_type); ?></span> </div> </td> <td class="small hidden-phone"> <?php echo $this->escape($item->menutype_title ?: ucwords($item->menutype)); ?> </td> <?php if ($this->state->get('filter.client_id') == 0) : ?> <td class="center hidden-phone"> <?php if ($item->type == 'component') : ?> <?php if ($item->language == '*' || $item->home == '0') : ?> <?php echo JHtml::_('jgrid.isdefault', $item->home, $i, 'items.', ($item->language != '*' || !$item->home) && $canChange && !$item->protected); ?> <?php elseif ($canChange) : ?> <a href="<?php echo JRoute::_('index.php?option=com_menus&task=items.unsetDefault&cid[]=' . $item->id . '&' . JSession::getFormToken() . '=1'); ?>"> <?php if ($item->language_image) : ?> <?php echo JHtml::_('image', 'mod_languages/' . $item->language_image . '.gif', $item->language_title, array('title' => JText::sprintf('COM_MENUS_GRID_UNSET_LANGUAGE', $item->language_title)), true); ?> <?php else : ?> <span class="label" title="<?php echo JText::sprintf('COM_MENUS_GRID_UNSET_LANGUAGE', $item->language_title); ?>"><?php echo $item->language_sef; ?></span> <?php endif; ?> </a> <?php else : ?> <?php if ($item->language_image) : ?> <?php echo JHtml::_('image', 'mod_languages/' . $item->language_image . '.gif', $item->language_title, array('title' => $item->language_title), true); ?> <?php else : ?> <span class="label" title="<?php echo $item->language_title; ?>"><?php echo $item->language_sef; ?></span> <?php endif; ?> <?php endif; ?> <?php endif; ?> </td> <?php endif; ?> <?php if ($this->state->get('filter.client_id') == 0) : ?> <td class="small hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <?php endif; ?> <?php if ($assoc) : ?> <td class="small hidden-phone"> <?php if ($item->association) : ?> <?php echo JHtml::_('MenusHtml.Menus.association', $item->id); ?> <?php endif; ?> </td> <?php endif; ?> <?php if ($this->state->get('filter.client_id') == 0) : ?> <td class="small hidden-phone"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <?php endif; ?> <td class="hidden-phone"> <span title="<?php echo sprintf('%d-%d', $item->lft, $item->rgt); ?>"> <?php echo (int) $item->id; ?> </span> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php // Load the batch processing form if user is allowed ?> <?php if ($user->authorise('core.create', 'com_menus') || $user->authorise('core.edit', 'com_menus')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_MENUS_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer') ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�*͉ � 7components/com_menus/views/items/tmpl/default_batch.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * @deprecated 3.4 Use default_batch_body and default_batch_footer */ defined('_JEXEC') or die; $options = array( JHtml::_('select.option', 'c', JText::_('JLIB_HTML_BATCH_COPY')), JHtml::_('select.option', 'm', JText::_('JLIB_HTML_BATCH_MOVE')) ); $published = $this->state->get('filter.published'); ?> <div class="modal hide fade" id="collapseModal"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3><?php echo JText::_('COM_MENUS_BATCH_OPTIONS'); ?></h3> </div> <div class="modal-body modal-batch"> <p><?php echo JText::_('COM_MENUS_BATCH_TIP'); ?></p> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div id="batch-choose-action" class="combo control-group"> <label id="batch-choose-action-lbl" class="control-label" for="batch-choose-action"> <?php echo JText::_('COM_MENUS_BATCH_MENU_LABEL'); ?> </label> <div class="controls"> <select name="batch[menu_id]" id="batch-menu-id"> <option value=""><?php echo JText::_('JSELECT') ?></option> <?php echo JHtml::_('select.options', JHtml::_('menu.menuitems', array('published' => $published))); ?> </select> </div> </div> <div id="batch-copy-move" class="control-group radio"> <?php echo JHtml::_('select.radiolist', $options, 'batch[move_copy]', '', 'value', 'text', 'm'); ?> </div> <?php endif; ?> </div> </div> <div class="modal-footer"> <button class="btn" type="button" onclick="document.getElementById('batch-menu-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button class="btn btn-primary" type="submit" onclick="Joomla.submitbutton('item.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> </div> </div> PKb��\��J��+�+.components/com_menus/views/items/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * The HTML Menus Menu Items View. * * @since 1.6 */ class MenusViewItems extends JViewLegacy { /** * @var array */ protected $f_levels; /** * @var mixed */ protected $items; /** * @var JPagination */ protected $pagination; /** * @var JObject */ protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void * * @since 1.6 */ public function display($tpl = null) { $lang = JFactory::getLanguage(); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->total = $this->get('Total'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { MenusHelper::addSubmenu('items'); } // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->ordering = array(); // Preprocess the list of items to find ordering divisions. foreach ($this->items as $item) { $this->ordering[$item->parent_id][] = $item->id; // Item type text switch ($item->type) { case 'url': $value = JText::_('COM_MENUS_TYPE_EXTERNAL_URL'); break; case 'alias': $value = JText::_('COM_MENUS_TYPE_ALIAS'); break; case 'separator': $value = JText::_('COM_MENUS_TYPE_SEPARATOR'); break; case 'heading': $value = JText::_('COM_MENUS_TYPE_HEADING'); break; case 'container': $value = JText::_('COM_MENUS_TYPE_CONTAINER'); break; case 'component': default: // Load language $lang->load($item->componentname . '.sys', JPATH_ADMINISTRATOR, null, false, true) || $lang->load($item->componentname . '.sys', JPATH_ADMINISTRATOR . '/components/' . $item->componentname, null, false, true); if (!empty($item->componentname)) { $titleParts = array(); $titleParts[] = JText::_($item->componentname); $vars = null; parse_str($item->link, $vars); if (isset($vars['view'])) { // Attempt to load the view xml file. $file = JPATH_SITE . '/components/' . $item->componentname . '/views/' . $vars['view'] . '/metadata.xml'; if (!is_file($file)) { $file = JPATH_SITE . '/components/' . $item->componentname . '/view/' . $vars['view'] . '/metadata.xml'; } if (is_file($file) && $xml = simplexml_load_file($file)) { // Look for the first view node off of the root node. if ($view = $xml->xpath('view[1]')) { // Add view title if present. if (!empty($view[0]['title'])) { $viewTitle = trim((string) $view[0]['title']); // Check if the key is valid. Needed due to B/C so we don't show untranslated keys. This check should be removed with Joomla 4. if ($lang->hasKey($viewTitle)) { $titleParts[] = JText::_($viewTitle); } } } } $vars['layout'] = isset($vars['layout']) ? $vars['layout'] : 'default'; // Attempt to load the layout xml file. // If Alternative Menu Item, get template folder for layout file if (strpos($vars['layout'], ':') > 0) { // Use template folder for layout file $temp = explode(':', $vars['layout']); $file = JPATH_SITE . '/templates/' . $temp[0] . '/html/' . $item->componentname . '/' . $vars['view'] . '/' . $temp[1] . '.xml'; // Load template language file $lang->load('tpl_' . $temp[0] . '.sys', JPATH_SITE, null, false, true) || $lang->load('tpl_' . $temp[0] . '.sys', JPATH_SITE . '/templates/' . $temp[0], null, false, true); } else { // Get XML file from component folder for standard layouts $file = JPATH_SITE . '/components/' . $item->componentname . '/views/' . $vars['view'] . '/tmpl/' . $vars['layout'] . '.xml'; if (!file_exists($file)) { $file = JPATH_SITE . '/components/' . $item->componentname . '/view/' . $vars['view'] . '/tmpl/' . $vars['layout'] . '.xml'; } } if (is_file($file) && $xml = simplexml_load_file($file)) { // Look for the first view node off of the root node. if ($layout = $xml->xpath('layout[1]')) { if (!empty($layout[0]['title'])) { $titleParts[] = JText::_(trim((string) $layout[0]['title'])); } } if (!empty($layout[0]->message[0])) { $item->item_type_desc = JText::_(trim((string) $layout[0]->message[0])); } } unset($xml); // Special case if neither a view nor layout title is found if (count($titleParts) == 1) { $titleParts[] = $vars['view']; } } $value = implode(' » ', $titleParts); } else { if (preg_match("/^index.php\?option=([a-zA-Z\-0-9_]*)/", $item->link, $result)) { $value = JText::sprintf('COM_MENUS_TYPE_UNEXISTING', $result[1]); } else { $value = JText::_('COM_MENUS_TYPE_UNKNOWN'); } } break; } $item->item_type = $value; $item->protected = $item->menutype == 'main'; } // Levels filter. $options = array(); $options[] = JHtml::_('select.option', '1', JText::_('J1')); $options[] = JHtml::_('select.option', '2', JText::_('J2')); $options[] = JHtml::_('select.option', '3', JText::_('J3')); $options[] = JHtml::_('select.option', '4', JText::_('J4')); $options[] = JHtml::_('select.option', '5', JText::_('J5')); $options[] = JHtml::_('select.option', '6', JText::_('J6')); $options[] = JHtml::_('select.option', '7', JText::_('J7')); $options[] = JHtml::_('select.option', '8', JText::_('J8')); $options[] = JHtml::_('select.option', '9', JText::_('J9')); $options[] = JHtml::_('select.option', '10', JText::_('J10')); $this->f_levels = $options; // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); } else { // In menu associations modal we need to remove language filter if forcing a language. if ($forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'CMD')) { // If the language is forced we can't allow to select the language, so transform the language selector filter into a hidden field. $languageXml = new SimpleXMLElement('<field name="language" type="hidden" default="' . $forcedLanguage . '" />'); $this->filterForm->setField($languageXml, 'filter', true); // Also, unset the active language filter so the search tools is not open by default with this filter. unset($this->activeFilters['language']); } } // Allow a system plugin to insert dynamic menu types to the list shown in menus: JEventDispatcher::getInstance()->trigger('onBeforeRenderMenuItems', array($this)); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $menutypeId = (int) $this->state->get('menutypeid'); $canDo = JHelperContent::getActions('com_menus', 'menu', (int) $menutypeId); $user = JFactory::getUser(); // Get the menu title $menuTypeTitle = $this->get('State')->get('menutypetitle'); // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); if ($menuTypeTitle) { JToolbarHelper::title(JText::sprintf('COM_MENUS_VIEW_ITEMS_MENU_TITLE', $menuTypeTitle), 'list menumgr'); } else { JToolbarHelper::title(JText::_('COM_MENUS_VIEW_ITEMS_ALL_TITLE'), 'list menumgr'); } if ($canDo->get('core.create')) { JToolbarHelper::addNew('item.add'); } $protected = $this->state->get('filter.menutype') == 'main'; if ($canDo->get('core.edit') && !$protected) { JToolbarHelper::editList('item.edit'); } if ($canDo->get('core.edit.state') && !$protected) { JToolbarHelper::publish('items.publish', 'JTOOLBAR_PUBLISH', true); JToolbarHelper::unpublish('items.unpublish', 'JTOOLBAR_UNPUBLISH', true); } if (JFactory::getUser()->authorise('core.admin') && !$protected) { JToolbarHelper::checkin('items.checkin', 'JTOOLBAR_CHECKIN', true); } if ($canDo->get('core.edit.state') && $this->state->get('filter.client_id') == 0) { JToolbarHelper::makeDefault('items.setDefault', 'COM_MENUS_TOOLBAR_SET_HOME'); } if (JFactory::getUser()->authorise('core.admin')) { JToolbarHelper::custom('items.rebuild', 'refresh.png', 'refresh_f2.png', 'JToolbar_Rebuild', false); } // Add a batch button if (!$protected && $user->authorise('core.create', 'com_menus') && $user->authorise('core.edit', 'com_menus') && $user->authorise('core.edit.state', 'com_menus')) { $title = JText::_('JTOOLBAR_BATCH'); // Instantiate a new JLayoutFile instance and render the batch button $layout = new JLayoutFile('joomla.toolbar.batch'); $dhtml = $layout->render(array('title' => $title)); $bar->appendButton('Custom', $dhtml, 'batch'); } if (!$protected && $this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'items.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif (!$protected && $canDo->get('core.edit.state')) { JToolbarHelper::trash('items.trash'); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::divider(); JToolbarHelper::preferences('com_menus'); } JToolbarHelper::help('JHELP_MENUS_MENU_ITEM_MANAGER'); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { $this->state = $this->get('State'); if ($this->state->get('filter.client_id') == 0) { return array( 'a.lft' => JText::_('JGRID_HEADING_ORDERING'), 'a.published' => JText::_('JSTATUS'), 'a.title' => JText::_('JGLOBAL_TITLE'), 'a.home' => JText::_('COM_MENUS_HEADING_HOME'), 'a.access' => JText::_('JGRID_HEADING_ACCESS'), 'association' => JText::_('COM_MENUS_HEADING_ASSOCIATION'), 'language' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.id' => JText::_('JGRID_HEADING_ID') ); } else { return array( 'a.lft' => JText::_('JGRID_HEADING_ORDERING'), 'a.published' => JText::_('JSTATUS'), 'a.title' => JText::_('JGLOBAL_TITLE'), 'a.id' => JText::_('JGRID_HEADING_ID') ); } } } PKb��\k���-components/com_menus/views/menu/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.core'); JHtml::_('behavior.formvalidator'); JHtml::_('formbehavior.chosen', 'select'); JText::script('ERROR'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { var form = document.getElementById('item-form'); if (task == 'menu.cancel' || document.formvalidator.isValid(form)) { Joomla.submitform(task, form); } }; "); ?> <form action="<?php echo JRoute::_('index.php?option=com_menus&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="item-form"> <?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?> <div class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'details')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'details', JText::_('COM_MENUS_MENU_DETAILS')); ?> <?php echo $this->form->renderField('menutype'); echo $this->form->renderField('description'); echo $this->form->renderField('client_id'); echo $this->form->renderField('preset'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php if ($this->canDo->get('core.admin')) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'permissions', JText::_('COM_MENUS_FIELDSET_RULES')); ?> <?php echo $this->form->getInput('rules'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�E�� � -components/com_menus/views/menu/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * The HTML Menus Menu Item View. * * @since 1.6 */ class MenusViewMenu extends JViewLegacy { /** * @var JForm */ protected $form; /** * @var mixed */ protected $item; /** * @var JObject */ protected $state; /** * * @var JObject */ protected $canDo; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void * * @since 1.6 */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); $this->canDo = JHelperContent::getActions('com_menus', 'menu', $this->item->id); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } parent::display($tpl); $this->addToolbar(); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $input = JFactory::getApplication()->input; $input->set('hidemainmenu', true); $isNew = ($this->item->id == 0); JToolbarHelper::title(JText::_($isNew ? 'COM_MENUS_VIEW_NEW_MENU_TITLE' : 'COM_MENUS_VIEW_EDIT_MENU_TITLE'), 'list menu'); // If a new item, can save the item. Allow users with edit permissions to apply changes to prevent returning to grid. if ($isNew && $this->canDo->get('core.create')) { if ($this->canDo->get('core.edit')) { JToolbarHelper::apply('menu.apply'); } JToolbarHelper::save('menu.save'); } // If user can edit, can save the item. if (!$isNew && $this->canDo->get('core.edit')) { JToolbarHelper::apply('menu.apply'); JToolbarHelper::save('menu.save'); } // If the user can create new items, allow them to see Save & New if ($this->canDo->get('core.create')) { JToolbarHelper::save2new('menu.save2new'); } if ($isNew) { JToolbarHelper::cancel('menu.cancel'); } else { JToolbarHelper::cancel('menu.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_MENUS_MENU_MANAGER_EDIT'); } } PKb��\i<~��5components/com_menus/views/menutypes/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $input = JFactory::getApplication()->input; // Checking if loaded via index.php or component.php $tmpl = ($input->getCmd('tmpl') != '') ? '1' : ''; JHtml::_('behavior.core'); JFactory::getDocument()->addScriptDeclaration(' setmenutype = function(type) { var tmpl = ' . json_encode($tmpl) . '; if (tmpl) { window.parent.Joomla.submitbutton("item.setType", type); window.parent.jQuery("#menuTypeModal").modal("hide"); } else { window.location="index.php?option=com_menus&view=item&task=item.setType&layout=edit&type=" + type; } }; '); ?> <?php echo JHtml::_('bootstrap.startAccordion', 'collapseTypes', array('active' => 'slide1')); ?> <?php $i = 0; ?> <?php foreach ($this->types as $name => $list) : ?> <?php echo JHtml::_('bootstrap.addSlide', 'collapseTypes', $name, 'collapse' . ($i++)); ?> <ul class="nav nav-tabs nav-stacked"> <?php foreach ($list as $title => $item) : ?> <li> <?php $menutype = array('id' => $this->recordId, 'title' => isset($item->type) ? $item->type : $item->title, 'request' => $item->request); ?> <?php $menutype = base64_encode(json_encode($menutype)); ?> <a class="choose_type" href="#" title="<?php echo JText::_($item->description); ?>" onclick="setmenutype('<?php echo $menutype; ?>')"> <?php echo $title;?> <small class="muted"> <?php echo JText::_($item->description); ?> </small> </a> </li> <?php endforeach; ?> </ul> <?php echo JHtml::_('bootstrap.endSlide'); ?> <?php endforeach; ?> <?php echo JHtml::_('bootstrap.endSlide'); ?> <?php echo JHtml::_('bootstrap.endAccordion'); PKb��\w�����2components/com_menus/views/menutypes/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * The HTML Menus Menu Item TYpes View. * * @since 1.6 */ class MenusViewMenutypes extends JViewLegacy { /** * @var JObject[] */ protected $types; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void * * @since 1.6 */ public function display($tpl = null) { $app = JFactory::getApplication(); $this->recordId = $app->input->getInt('recordId'); $types = $this->get('TypeOptions'); $this->addCustomTypes($types); $sortedTypes = array(); foreach ($types as $name => $list) { $tmp = array(); foreach ($list as $item) { $tmp[JText::_($item->title)] = $item; } uksort($tmp, 'strcasecmp'); $sortedTypes[JText::_($name)] = $tmp; } uksort($sortedTypes, 'strcasecmp'); $this->types = $sortedTypes; $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 3.0 */ protected function addToolbar() { // Add page title JToolbarHelper::title(JText::_('COM_MENUS'), 'list menumgr'); // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); // Cancel $title = JText::_('JTOOLBAR_CANCEL'); $dhtml = "<button onClick=\"location.href='index.php?option=com_menus&view=items'\" class=\"btn\"> <span class=\"icon-remove\" title=\"$title\"></span> $title</button>"; $bar->appendButton('Custom', $dhtml, 'new'); } /** * Method to add system link types to the link types array * * @param array $types The list of link types * * @return void * * @since 3.7.0 */ protected function addCustomTypes(&$types) { if (empty($types)) { $types = array(); } // Adding System Links $list = array(); $o = new JObject; $o->title = 'COM_MENUS_TYPE_EXTERNAL_URL'; $o->type = 'url'; $o->description = 'COM_MENUS_TYPE_EXTERNAL_URL_DESC'; $o->request = null; $list[] = $o; $o = new JObject; $o->title = 'COM_MENUS_TYPE_ALIAS'; $o->type = 'alias'; $o->description = 'COM_MENUS_TYPE_ALIAS_DESC'; $o->request = null; $list[] = $o; $o = new JObject; $o->title = 'COM_MENUS_TYPE_SEPARATOR'; $o->type = 'separator'; $o->description = 'COM_MENUS_TYPE_SEPARATOR_DESC'; $o->request = null; $list[] = $o; $o = new JObject; $o->title = 'COM_MENUS_TYPE_HEADING'; $o->type = 'heading'; $o->description = 'COM_MENUS_TYPE_HEADING_DESC'; $o->request = null; $list[] = $o; if ($this->get('state')->get('client_id') == 1) { $o = new JObject; $o->title = 'COM_MENUS_TYPE_CONTAINER'; $o->type = 'container'; $o->description = 'COM_MENUS_TYPE_CONTAINER_DESC'; $o->request = null; $list[] = $o; } $types['COM_MENUS_TYPE_SYSTEM'] = $list; } } PKb��\{n�G�-�-1components/com_menus/views/menus/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $uri = JUri::getInstance(); $return = base64_encode($uri); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $modMenuId = (int) $this->get('ModMenuId'); $script = array(); $script[] = 'jQuery(document).ready(function() {'; foreach ($this->items as $item) : if ($user->authorise('core.edit', 'com_menus')) : $script[] = ' function jSelectPosition_' . $item->id . '(name) {'; $script[] = ' document.getElementById("' . $item->id . '").value = name;'; $script[] = ' jQuery(".modal").modal("hide");'; $script[] = ' };'; endif; endforeach; $script[] = ' jQuery(".modal").on("hidden", function () {'; $script[] = ' setTimeout(function(){'; $script[] = ' window.parent.location.reload();'; $script[] = ' },1000);'; $script[] = ' });'; $script[] = '});'; $script[] = ' (function (originalFn) { Joomla.submitform = function(task, form) { originalFn(task, form); if (task == "menu.exportXml") { document.adminForm.task.value = ""; } }; })(Joomla.submitform); '; JFactory::getDocument()->addScriptDeclaration(implode("\n", $script)); ?> <form action="<?php echo JRoute::_('index.php?option=com_menus&view=menus'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this, 'options' => array('filterButton' => false))); ?> <div class="clearfix"> </div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="menuList"> <thead> <tr> <th width="1%"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap center"> <span class="icon-publish" aria-hidden="true"></span> <span class="hidden-phone"><?php echo JText::_('COM_MENUS_HEADING_PUBLISHED_ITEMS'); ?></span> </th> <th width="10%" class="nowrap center"> <span class="icon-unpublish" aria-hidden="true"></span> <span class="hidden-phone"><?php echo JText::_('COM_MENUS_HEADING_UNPUBLISHED_ITEMS'); ?></span> </th> <th width="10%" class="nowrap center"> <span class="icon-trash" aria-hidden="true"></span> <span class="hidden-phone"><?php echo JText::_('COM_MENUS_HEADING_TRASHED_ITEMS'); ?></span> </th> <th width="20%" class="nowrap center"> <span class="icon-cube" aria-hidden="true"></span> <span class="hidden-phone"><?php echo JText::_('COM_MENUS_HEADING_LINKED_MODULES'); ?></span> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="15"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $canEdit = $user->authorise('core.edit', 'com_menus.menu.' . (int) $item->id); $canManageItems = $user->authorise('core.manage', 'com_menus.menu.' . (int) $item->id); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php if ($canManageItems) : ?> <a href="<?php echo JRoute::_('index.php?option=com_menus&view=items&menutype=' . $item->menutype); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <div class="small"> <?php echo JText::_('COM_MENUS_MENU_MENUTYPE_LABEL'); ?>: <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_menus&task=menu.edit&id=' . $item->id); ?>" title="<?php echo $this->escape($item->description); ?>"> <?php echo $this->escape($item->menutype); ?></a> <?php else : ?> <?php echo $this->escape($item->menutype); ?> <?php endif; ?> </div> </td> <td class="center btns"> <?php if ($canManageItems) : ?> <a class="badge<?php if ($item->count_published > 0) echo ' badge-success'; ?>" href="<?php echo JRoute::_('index.php?option=com_menus&view=items&menutype=' . $item->menutype . '&filter[published]=1'); ?>"> <?php echo $item->count_published; ?></a> <?php else : ?> <span class="badge<?php if ($item->count_published > 0) echo ' badge-success'; ?>"> <?php echo $item->count_published; ?></span> <?php endif; ?> </td> <td class="center btns"> <?php if ($canManageItems) : ?> <a class="badge<?php if ($item->count_unpublished > 0) echo ' badge-important'; ?>" href="<?php echo JRoute::_('index.php?option=com_menus&view=items&menutype=' . $item->menutype . '&filter[published]=0'); ?>"> <?php echo $item->count_unpublished; ?></a> <?php else : ?> <span class="badge<?php if ($item->count_unpublished > 0) echo ' badge-important'; ?>"> <?php echo $item->count_unpublished; ?></span> <?php endif; ?> </td> <td class="center btns"> <?php if ($canManageItems) : ?> <a class="badge<?php if ($item->count_trashed > 0) echo ' badge-inverse'; ?>" href="<?php echo JRoute::_('index.php?option=com_menus&view=items&menutype=' . $item->menutype . '&filter[published]=-2'); ?>"> <?php echo $item->count_trashed; ?></a> <?php else : ?> <span class="badge<?php if ($item->count_trashed > 0) echo ' badge-inverse'; ?>"> <?php echo $item->count_trashed; ?></span> <?php endif; ?> </td> <td class="center"> <?php if (isset($this->modules[$item->menutype])) : ?> <div class="btn-group"> <button type="button" class="btn btn-small dropdown-toggle" data-toggle="dropdown"> <?php echo JText::_('COM_MENUS_MODULES'); ?> <span class="caret"></span> </button> <ul class="dropdown-menu dropdown-reverse"> <?php foreach ($this->modules[$item->menutype] as &$module) : ?> <li> <?php if ($user->authorise('core.edit', 'com_modules.module.' . (int) $module->id)) : ?> <?php $link = JRoute::_('index.php?option=com_modules&task=module.edit&id=' . $module->id . '&return=' . $return . '&tmpl=component&layout=modal'); ?> <a role="button" href="#moduleEdit<?php echo $module->id; ?>Modal" class="button" data-toggle="modal" title="<?php echo JText::_('COM_MENUS_EDIT_MODULE_SETTINGS'); ?>"> <?php echo JText::sprintf('COM_MENUS_MODULE_ACCESS_POSITION', $this->escape($module->title), $this->escape($module->access_title), $this->escape($module->position)); ?></a> <?php else : ?> <a href="#" class="disabled" disabled="disabled"> <?php echo JText::sprintf('COM_MENUS_MODULE_ACCESS_POSITION', $this->escape($module->title), $this->escape($module->access_title), $this->escape($module->position)); ?></a> <?php endif; ?> </li> <?php endforeach; ?> </ul> </div> <?php foreach ($this->modules[$item->menutype] as &$module) : ?> <?php if ($user->authorise('core.edit', 'com_modules.module.' . (int) $module->id)) : ?> <?php $link = JRoute::_('index.php?option=com_modules&task=module.edit&id=' . $module->id . '&return=' . $return . '&tmpl=component&layout=modal'); ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'moduleEdit' . $module->id . 'Modal', array( 'title' => JText::_('COM_MENUS_EDIT_MODULE_SETTINGS'), 'backdrop' => 'static', 'keyboard' => false, 'closeButton' => false, 'url' => $link, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn" data-dismiss="modal"' . ' onclick="jQuery(\'#moduleEdit' . $module->id . 'Modal iframe\').contents().find(\'#closeBtn\').click();">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary"' . ' onclick="jQuery(\'#moduleEdit' . $module->id . 'Modal iframe\').contents().find(\'#saveBtn\').click();">' . JText::_('JSAVE') . '</button>' . '<button type="button" class="btn btn-success"' . ' onclick="jQuery(\'#moduleEdit' . $module->id . 'Modal iframe\').contents().find(\'#applyBtn\').click();">' . JText::_('JAPPLY') . '</button>', ) ); ?> <?php endif; ?> <?php endforeach; ?> <?php elseif ($modMenuId) : ?> <?php $link = JRoute::_('index.php?option=com_modules&task=module.add&eid=' . $modMenuId . '¶ms[menutype]=' . $item->menutype . '&tmpl=component&layout=modal'); ?> <button type="button" class="btn btn-small btn-primary" data-toggle="modal" data-target="#moduleAddModal"><?php echo JText::_('COM_MENUS_ADD_MENU_MODULE'); ?></button> <?php echo JHtml::_( 'bootstrap.renderModal', 'moduleAddModal', array( 'title' => JText::_('COM_MENUS_ADD_MENU_MODULE'), 'backdrop' => 'static', 'keyboard' => false, 'closeButton' => false, 'url' => $link, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn" data-dismiss="modal"' . ' onclick="jQuery(\'#moduleAddModal iframe\').contents().find(\'#closeBtn\').click();">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary"' . ' onclick="jQuery(\'#moduleAddModal iframe\').contents().find(\'#saveBtn\').click();">' . JText::_('JSAVE') . '</button>' . '<button type="button" class="btn btn-success"' . ' onclick="jQuery(\'#moduleAddModal iframe\').contents().find(\'#applyBtn\').click();">' . JText::_('JAPPLY') . '</button>', ) ); ?> <?php endif; ?> </td> <td class="hidden-phone"> <?php echo $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\,��� � .components/com_menus/views/menus/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * The HTML Menus Menu Menus View. * * @since 1.6 */ class MenusViewMenus extends JViewLegacy { /** * @var mixed */ protected $items; /** * @var array */ protected $modules; /** * @var JPagination */ protected $pagination; /** * @var JObject */ protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void * * @since 1.6 */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->modules = $this->get('Modules'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); if ($this->getLayout() == 'default') { $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); } MenusHelper::addSubmenu('menus'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_menus'); JToolbarHelper::title(JText::_('COM_MENUS_VIEW_MENUS_TITLE'), 'list menumgr'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('menu.add'); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('menu.edit'); } if ($canDo->get('core.delete')) { JToolbarHelper::divider(); JToolbarHelper::deleteList('COM_MENUS_MENU_CONFIRM_DELETE', 'menus.delete', 'JTOOLBAR_DELETE'); } JToolbarHelper::custom('menus.rebuild', 'refresh.png', 'refresh_f2.png', 'JTOOLBAR_REBUILD', false); if ($canDo->get('core.admin') && $this->state->get('client_id') == 1) { JToolbarHelper::custom('menu.exportXml', 'download', 'download', 'COM_MENUS_MENU_EXPORT_BUTTON', true); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::divider(); JToolbarHelper::preferences('com_menus'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_MENUS_MENU_MANAGER'); } } PKb��\�\���+components/com_menus/helpers/html/menus.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; JLoader::register('MenusHelper', JPATH_ADMINISTRATOR . '/components/com_menus/helpers/menus.php'); /** * Menus HTML helper class. * * @package Joomla.Administrator * @subpackage com_menus * @since 1.7 */ abstract class MenusHtmlMenus { /** * Generate the markup to display the item associations * * @param int $itemid The menu item id * * @return string * * @since 3.0 * * @throws Exception If there is an error on the query */ public static function association($itemid) { // Defaults $html = ''; // Get the associations if ($associations = MenusHelper::getAssociations($itemid)) { // Get the associated menu items $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('m.id, m.title') ->select('l.sef as lang_sef, l.lang_code') ->select('mt.title as menu_title') ->from('#__menu as m') ->join('LEFT', '#__menu_types as mt ON mt.menutype=m.menutype') ->where('m.id IN (' . implode(',', array_values($associations)) . ')') ->where('m.id != ' . $itemid) ->join('LEFT', '#__languages as l ON m.language=l.lang_code') ->select('l.image') ->select('l.title as language_title'); $db->setQuery($query); try { $items = $db->loadObjectList('id'); } catch (runtimeException $e) { throw new Exception($e->getMessage(), 500); } // Construct html if ($items) { foreach ($items as &$item) { $text = strtoupper($item->lang_sef); $url = JRoute::_('index.php?option=com_menus&task=item.edit&id=' . (int) $item->id); $tooltip = htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8') . '<br />' . JText::sprintf('COM_MENUS_MENU_SPRINTF', $item->menu_title); $classes = 'hasPopover label label-association label-' . $item->lang_sef; $item->link = '<a href="' . $url . '" title="' . $item->language_title . '" class="' . $classes . '" data-content="' . $tooltip . '" data-placement="top">' . $text . '</a>'; } } JHtml::_('bootstrap.popover'); $html = JLayoutHelper::render('joomla.content.associations', $items); } return $html; } /** * Returns a published state on a grid * * @param integer $value The state value. * @param integer $i The row index * @param boolean $enabled An optional setting for access control on the action. * @param string $checkbox An optional prefix for checkboxes. * * @return string The Html code * * @see JHtmlJGrid::state * * @since 1.7.1 */ public static function state($value, $i, $enabled = true, $checkbox = 'cb') { $states = array( 9 => array( 'unpublish', '', 'COM_MENUS_HTML_UNPUBLISH_HEADING', '', true, 'publish', 'publish', ), 8 => array( 'publish', '', 'COM_MENUS_HTML_PUBLISH_HEADING', '', true, 'unpublish', 'unpublish', ), 7 => array( 'unpublish', '', 'COM_MENUS_HTML_UNPUBLISH_SEPARATOR', '', true, 'publish', 'publish', ), 6 => array( 'publish', '', 'COM_MENUS_HTML_PUBLISH_SEPARATOR', '', true, 'unpublish', 'unpublish', ), 5 => array( 'unpublish', '', 'COM_MENUS_HTML_UNPUBLISH_ALIAS', '', true, 'publish', 'publish', ), 4 => array( 'publish', '', 'COM_MENUS_HTML_PUBLISH_ALIAS', '', true, 'unpublish', 'unpublish', ), 3 => array( 'unpublish', '', 'COM_MENUS_HTML_UNPUBLISH_URL', '', true, 'publish', 'publish', ), 2 => array( 'publish', '', 'COM_MENUS_HTML_PUBLISH_URL', '', true, 'unpublish', 'unpublish', ), 1 => array( 'unpublish', 'COM_MENUS_EXTENSION_PUBLISHED_ENABLED', 'COM_MENUS_HTML_UNPUBLISH_ENABLED', 'COM_MENUS_EXTENSION_PUBLISHED_ENABLED', true, 'publish', 'publish', ), 0 => array( 'publish', 'COM_MENUS_EXTENSION_UNPUBLISHED_ENABLED', 'COM_MENUS_HTML_PUBLISH_ENABLED', 'COM_MENUS_EXTENSION_UNPUBLISHED_ENABLED', true, 'unpublish', 'unpublish', ), -1 => array( 'unpublish', 'COM_MENUS_EXTENSION_PUBLISHED_DISABLED', 'COM_MENUS_HTML_UNPUBLISH_DISABLED', 'COM_MENUS_EXTENSION_PUBLISHED_DISABLED', true, 'warning', 'warning', ), -2 => array( 'publish', 'COM_MENUS_EXTENSION_UNPUBLISHED_DISABLED', 'COM_MENUS_HTML_PUBLISH_DISABLED', 'COM_MENUS_EXTENSION_UNPUBLISHED_DISABLED', true, 'trash', 'trash', ), -3 => array( 'publish', '', 'COM_MENUS_HTML_PUBLISH', '', true, 'trash', 'trash', ), ); return JHtml::_('jgrid.state', $states, $value, $i, 'items.', $enabled, true, $checkbox); } /** * Returns a visibility state on a grid * * @param integer $params Params of item. * * @return string The Html code * * @since 3.7.0 */ public static function visibility($params) { $registry = new Registry; try { $registry->loadString($params); } catch (Exception $e) { // Invalid JSON } $show_menu = $registry->get('menu_show'); return ($show_menu === 0) ? '<span class="label">' . JText::_('COM_MENUS_LABEL_HIDDEN') . '</span>' : ''; } } PKb��\E3��w6w6&components/com_menus/helpers/menus.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ use Joomla\CMS\Menu\MenuHelper; use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; defined('_JEXEC') or die; /** * Menus component helper. * * @since 1.6 */ class MenusHelper { /** * Defines the valid request variables for the reverse lookup. * * @since 1.6 */ protected static $_filter = array('option', 'view', 'layout'); /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void * * @since 1.6 */ public static function addSubmenu($vName) { JHtmlSidebar::addEntry( JText::_('COM_MENUS_SUBMENU_MENUS'), 'index.php?option=com_menus&view=menus', $vName == 'menus' ); JHtmlSidebar::addEntry( JText::_('COM_MENUS_SUBMENU_ITEMS'), 'index.php?option=com_menus&view=items', $vName == 'items' ); } /** * Gets a list of the actions that can be performed. * * @param integer $parentId The menu ID. * * @return JObject * * @since 1.6 * @deprecated 3.2 Use JHelperContent::getActions() instead */ public static function getActions($parentId = 0) { // Log usage of deprecated function try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions return JHelperContent::getActions('com_menus'); } /** * Gets a standard form of a link for lookups. * * @param mixed $request A link string or array of request variables. * * @return mixed A link in standard option-view-layout form, or false if the supplied response is invalid. * * @since 1.6 */ public static function getLinkKey($request) { if (empty($request)) { return false; } // Check if the link is in the form of index.php?... if (is_string($request)) { $args = array(); if (strpos($request, 'index.php') === 0) { parse_str(parse_url(htmlspecialchars_decode($request), PHP_URL_QUERY), $args); } else { parse_str($request, $args); } $request = $args; } // Only take the option, view and layout parts. foreach ($request as $name => $value) { if ((!in_array($name, self::$_filter)) && (!($name == 'task' && !array_key_exists('view', $request)))) { // Remove the variables we want to ignore. unset($request[$name]); } } ksort($request); return 'index.php?' . http_build_query($request, '', '&'); } /** * Get the menu list for create a menu module * * @param int $clientId Optional client id - viz 0 = site, 1 = administrator, can be NULL for all * * @return array The menu array list * * @since 1.6 */ public static function getMenuTypes($clientId = 0) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('a.menutype') ->from('#__menu_types AS a'); if (isset($clientId)) { $query->where('a.client_id = ' . (int) $clientId); } $db->setQuery($query); return $db->loadColumn(); } /** * Get a list of menu links for one or all menus. * * @param string $menuType An option menu to filter the list on, otherwise all menu with given client id links * are returned as a grouped array. * @param integer $parentId An optional parent ID to pivot results around. * @param integer $mode An optional mode. If parent ID is set and mode=2, the parent and children are excluded from the list. * @param array $published An optional array of states * @param array $languages Optional array of specify which languages we want to filter * @param int $clientId Optional client id - viz 0 = site, 1 = administrator, can be NULL for all (used only if menutype not givein) * * @return array * * @since 1.6 */ public static function getMenuLinks($menuType = null, $parentId = 0, $mode = 0, $published = array(), $languages = array(), $clientId = 0) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('DISTINCT(a.id) AS value, a.title AS text, a.alias, a.level, a.menutype, a.client_id, a.type, a.published, a.template_style_id, a.checked_out, a.language, a.lft' ) ->from('#__menu AS a'); $query->select('e.name as componentname, e.element') ->join('left', '#__extensions e ON e.extension_id = a.component_id'); if (JLanguageMultilang::isEnabled()) { $query->select('l.title AS language_title, l.image AS language_image, l.sef AS language_sef') ->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = a.language'); } // Filter by the type if given, this is more specific than client id if ($menuType) { $query->where('(a.menutype = ' . $db->quote($menuType) . ' OR a.parent_id = 0)'); } elseif (isset($clientId)) { $query->where('a.client_id = ' . (int) $clientId); } // Prevent the parent and children from showing if requested. if ($parentId && $mode == 2) { $query->join('LEFT', '#__menu AS p ON p.id = ' . (int) $parentId) ->where('(a.lft <= p.lft OR a.rgt >= p.rgt)'); } if (!empty($languages)) { if (is_array($languages)) { $languages = '(' . implode(',', array_map(array($db, 'quote'), $languages)) . ')'; } $query->where('a.language IN ' . $languages); } if (!empty($published)) { if (is_array($published)) { $published = '(' . implode(',', $published) . ')'; } $query->where('a.published IN ' . $published); } $query->where('a.published != -2'); $query->order('a.lft ASC'); // Get the options. $db->setQuery($query); try { $links = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); return false; } if (empty($menuType)) { // If the menutype is empty, group the items by menutype. $query->clear() ->select('*') ->from('#__menu_types') ->where('menutype <> ' . $db->quote('')) ->order('title, menutype'); if (isset($clientId)) { $query->where('client_id = ' . (int) $clientId); } $db->setQuery($query); try { $menuTypes = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); return false; } // Create a reverse lookup and aggregate the links. $rlu = array(); foreach ($menuTypes as &$type) { $rlu[$type->menutype] = & $type; $type->links = array(); } // Loop through the list of menu links. foreach ($links as &$link) { if (isset($rlu[$link->menutype])) { $rlu[$link->menutype]->links[] = & $link; // Cleanup garbage. unset($link->menutype); } } return $menuTypes; } else { return $links; } } /** * Get the associations * * @param integer $pk Menu item id * * @return array * * @since 3.0 */ public static function getAssociations($pk) { $langAssociations = JLanguageAssociations::getAssociations('com_menus', '#__menu', 'com_menus.item', $pk, 'id', '', ''); $associations = array(); foreach ($langAssociations as $langAssociation) { $associations[$langAssociation->language] = $langAssociation->id; } return $associations; } /** * Load the menu items from database for the given menutype * * @param string $menutype The selected menu type * @param boolean $enabledOnly Whether to load only enabled/published menu items. * @param int[] $exclude The menu items to exclude from the list * * @return array * * @since 3.8.0 */ public static function getMenuItems($menutype, $enabledOnly = false, $exclude = array()) { $db = JFactory::getDbo(); $query = $db->getQuery(true); // Prepare the query. $query->select('m.*') ->from('#__menu AS m') ->where('m.menutype = ' . $db->q($menutype)) ->where('m.client_id = 1') ->where('m.id > 1'); if ($enabledOnly) { $query->where('m.published = 1'); } // Filter on the enabled states. $query->select('e.element') ->join('LEFT', '#__extensions AS e ON m.component_id = e.extension_id') ->where('(e.enabled = 1 OR e.enabled IS NULL)'); if (count($exclude)) { $exId = array_filter($exclude, 'is_numeric'); $exEl = array_filter($exclude, 'is_string'); if ($exId) { $query->where('m.id NOT IN (' . implode(', ', array_map('intval', $exId)) . ')'); $query->where('m.parent_id NOT IN (' . implode(', ', array_map('intval', $exId)) . ')'); } if ($exEl) { $query->where('e.element NOT IN (' . implode(', ', $db->quote($exEl)) . ')'); } } // Order by lft. $query->order('m.lft'); $db->setQuery($query); try { $menuItems = $db->loadObjectList(); foreach ($menuItems as &$menuitem) { $menuitem->params = new Registry($menuitem->params); } } catch (RuntimeException $e) { $menuItems = array(); JFactory::getApplication()->enqueueMessage(JText::_('JERROR_AN_ERROR_HAS_OCCURRED'), 'error'); } return $menuItems; } /** * Method to install a preset menu into database and link them to the given menutype * * @param string $preset The preset name * @param string $menutype The target menutype * * @return void * * @throws Exception * * @since 3.8.0 */ public static function installPreset($preset, $menutype) { $items = MenuHelper::loadPreset($preset, false); if (count($items) == 0) { throw new Exception(JText::_('COM_MENUS_PRESET_LOAD_FAILED')); } static::installPresetItems($items, $menutype, 1); } /** * Method to install a preset menu item into database and link it to the given menutype * * @param stdClass[] $items The single menuitem instance with a list of its descendants * @param string $menutype The target menutype * @param int $parent The parent id or object * * @return void * * @throws Exception * * @since 3.8.0 */ protected static function installPresetItems(&$items, $menutype, $parent = 1) { $db = JFactory::getDbo(); $query = $db->getQuery(true); static $components = array(); if (!$components) { $query->select('extension_id, element')->from('#__extensions')->where('type = ' . $db->q('component')); $components = $db->setQuery($query)->loadObjectList(); $components = ArrayHelper::getColumn((array) $components, 'element', 'extension_id'); } $dispatcher = JEventDispatcher::getInstance(); $dispatcher->trigger('onPreprocessMenuItems', array('com_menus.administrator.import', &$items, null, true)); foreach ($items as &$item) { /** @var JTableMenu $table */ $table = JTable::getInstance('Menu'); $item->alias = $menutype . '-' . $item->title; if ($item->type == 'separator') { // Do not reuse a separator $item->title = $item->title ?: '-'; $item->alias = microtime(true); } elseif ($item->type == 'heading' || $item->type == 'container') { // Try to match an existing record to have minimum collision for a heading $keys = array( 'menutype' => $menutype, 'type' => $item->type, 'title' => $item->title, 'parent_id' => $parent, 'client_id' => 1, ); $table->load($keys); } elseif ($item->type == 'url' || $item->type == 'component') { if (substr($item->link, 0, 8) === 'special:') { $special = substr($item->link, 8); if ($special === 'language-forum') { $item->link = 'index.php?option=com_admin&view=help&layout=langforum'; } elseif ($special === 'custom-forum') { $item->link = ''; } } // Try to match an existing record to have minimum collision for a link $keys = array( 'menutype' => $menutype, 'type' => $item->type, 'link' => $item->link, 'parent_id' => $parent, 'client_id' => 1, ); $table->load($keys); } // Translate "hideitems" param value from "element" into "menu-item-id" if ($item->type == 'container' && count($hideitems = (array) $item->params->get('hideitems'))) { foreach ($hideitems as &$hel) { if (!is_numeric($hel)) { $hel = array_search($hel, $components); } } $query->clear()->select('id')->from('#__menu')->where('component_id IN (' . implode(', ', $hideitems) . ')'); $hideitems = $db->setQuery($query)->loadColumn(); $item->params->set('hideitems', $hideitems); } $record = array( 'menutype' => $menutype, 'title' => $item->title, 'alias' => $item->alias, 'type' => $item->type, 'link' => $item->link, 'browserNav' => $item->browserNav ? 1 : 0, 'img' => $item->class, 'access' => $item->access, 'component_id' => array_search($item->element, $components), 'parent_id' => $parent, 'client_id' => 1, 'published' => 1, 'language' => '*', 'home' => 0, 'params' => (string) $item->params, ); if (!$table->bind($record)) { throw new Exception('Bind failed: ' . $table->getError()); } $table->setLocation($parent, 'last-child'); if (!$table->check()) { throw new Exception('Check failed: ' . $table->getError()); } if (!$table->store()) { throw new Exception('Saved failed: ' . $table->getError()); } $item->id = $table->get('id'); if (!empty($item->submenu)) { static::installPresetItems($item->submenu, $menutype, $item->id); } } } } PKb��\���components/com_menus/menus.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_menus</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_MENUS_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>config.xml</filename> <filename>controller.php</filename> <filename>menus.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> <folder>presets</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_menus.ini</language> <language tag="en-GB">language/en-GB.com_menus.sys.ini</language> </languages> </administration> </extension> PKb��\d��yByB%components/com_menus/models/items.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Menu Item List Model for Menus. * * @since 1.6 */ class MenusModelItems extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'menutype', 'a.menutype', 'menutype_title', 'title', 'a.title', 'alias', 'a.alias', 'published', 'a.published', 'access', 'a.access', 'access_level', 'language', 'a.language', 'checked_out', 'a.checked_out', 'checked_out_time', 'a.checked_out_time', 'lft', 'a.lft', 'rgt', 'a.rgt', 'level', 'a.level', 'path', 'a.path', 'client_id', 'a.client_id', 'home', 'a.home', 'parent_id', 'a.parent_id', 'a.ordering' ); $app = JFactory::getApplication(); $assoc = JLanguageAssociations::isEnabled(); if ($assoc) { $config['filter_fields'][] = 'association'; } } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.lft', $direction = 'asc') { $app = JFactory::getApplication('administrator'); $user = JFactory::getUser(); $forcedLanguage = $app->input->get('forcedLanguage', '', 'cmd'); // Adjust the context to support modal layouts. if ($layout = $app->input->get('layout')) { $this->context .= '.' . $layout; } // Adjust the context to support forced languages. if ($forcedLanguage) { $this->context .= '.' . $forcedLanguage; } $search = $this->getUserStateFromRequest($this->context . '.search', 'filter_search'); $this->setState('filter.search', $search); $published = $this->getUserStateFromRequest($this->context . '.published', 'filter_published', ''); $this->setState('filter.published', $published); $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access'); $this->setState('filter.access', $access); $parentId = $this->getUserStateFromRequest($this->context . '.filter.parent_id', 'filter_parent_id'); $this->setState('filter.parent_id', $parentId); $level = $this->getUserStateFromRequest($this->context . '.filter.level', 'filter_level'); $this->setState('filter.level', $level); // Watch changes in client_id and menutype and keep sync whenever needed. $currentClientId = $app->getUserState($this->context . '.client_id', 0); $clientId = $app->input->getInt('client_id', $currentClientId); // Load mod_menu.ini file when client is administrator if ($clientId == 1) { JFactory::getLanguage()->load('mod_menu', JPATH_ADMINISTRATOR, null, false, true); } $currentMenuType = $app->getUserState($this->context . '.menutype', ''); $menuType = $app->input->getString('menutype', $currentMenuType); // If client_id changed clear menutype and reset pagination if ($clientId != $currentClientId) { $menuType = ''; $app->input->set('limitstart', 0); $app->input->set('menutype', ''); } // If menutype changed reset pagination. if ($menuType != $currentMenuType) { $app->input->set('limitstart', 0); } if (!$menuType) { $app->setUserState($this->context . '.menutype', ''); $this->setState('menutypetitle', ''); $this->setState('menutypeid', ''); } // Special menu types, if selected explicitly, will be allowed as a filter elseif ($menuType == 'main') { // Adjust client_id to match the menutype. This is safe as client_id was not changed in this request. $app->input->set('client_id', 1); $app->setUserState($this->context . '.menutype', $menuType); $this->setState('menutypetitle', ucfirst($menuType)); $this->setState('menutypeid', -1); } // Get the menutype object with appropriate checks. elseif ($cMenu = $this->getMenu($menuType, true)) { // Adjust client_id to match the menutype. This is safe as client_id was not changed in this request. $app->input->set('client_id', $cMenu->client_id); $app->setUserState($this->context . '.menutype', $menuType); $this->setState('menutypetitle', $cMenu->title); $this->setState('menutypeid', $cMenu->id); } // This menutype does not exist, leave client id unchanged but reset menutype and pagination else { $menuType = ''; $app->input->set('limitstart', 0); $app->input->set('menutype', $menuType); $app->setUserState($this->context . '.menutype', $menuType); $this->setState('menutypetitle', ''); $this->setState('menutypeid', ''); } // Client id filter $clientId = (int) $this->getUserStateFromRequest($this->context . '.client_id', 'client_id', 0, 'int'); $this->setState('filter.client_id', $clientId); // Use a different filter file when client is administrator if ($clientId == 1) { $this->filterFormName = 'filter_itemsadmin'; } $this->setState('filter.menutype', $menuType); $language = $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', ''); $this->setState('filter.language', $language); // Component parameters. $params = JComponentHelper::getParams('com_menus'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); // Force a language. if (!empty($forcedLanguage)) { $this->setState('filter.language', $forcedLanguage); } } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.access'); $id .= ':' . $this->getState('filter.published'); $id .= ':' . $this->getState('filter.language'); $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.parent_id'); $id .= ':' . $this->getState('filter.menutype'); $id .= ':' . $this->getState('filter.client_id'); return parent::getStoreId($id); } /** * Builds an SQL query to load the list data. * * @return JDatabaseQuery A query object. * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); $app = JFactory::getApplication(); // Select all fields from the table. $query->select( $this->getState( 'list.select', $db->quoteName( array( 'a.id', 'a.menutype', 'a.title', 'a.alias', 'a.note', 'a.path', 'a.link', 'a.type', 'a.parent_id', 'a.level', 'a.published', 'a.component_id', 'a.checked_out', 'a.checked_out_time', 'a.browserNav', 'a.access', 'a.img', 'a.template_style_id', 'a.params', 'a.lft', 'a.rgt', 'a.home', 'a.language', 'a.client_id' ), array( null, null, null, null, null, null, null, null, null, null, 'a.published', null, null, null, null, null, null, null, null, null, null, null, null, null ) ) ) ); $query->select( 'CASE ' . ' WHEN a.type = ' . $db->quote('component') . ' THEN a.published+2*(e.enabled-1) ' . ' WHEN a.type = ' . $db->quote('url') . ' AND a.published != -2 THEN a.published+2 ' . ' WHEN a.type = ' . $db->quote('url') . ' AND a.published = -2 THEN a.published-1 ' . ' WHEN a.type = ' . $db->quote('alias') . ' AND a.published != -2 THEN a.published+4 ' . ' WHEN a.type = ' . $db->quote('alias') . ' AND a.published = -2 THEN a.published-1 ' . ' WHEN a.type = ' . $db->quote('separator') . ' AND a.published != -2 THEN a.published+6 ' . ' WHEN a.type = ' . $db->quote('separator') . ' AND a.published = -2 THEN a.published-1 ' . ' WHEN a.type = ' . $db->quote('heading') . ' AND a.published != -2 THEN a.published+8 ' . ' WHEN a.type = ' . $db->quote('heading') . ' AND a.published = -2 THEN a.published-1 ' . ' WHEN a.type = ' . $db->quote('container') . ' AND a.published != -2 THEN a.published+8 ' . ' WHEN a.type = ' . $db->quote('container') . ' AND a.published = -2 THEN a.published-1 ' . ' END AS published ' ); $query->from($db->quoteName('#__menu') . ' AS a'); // Join over the language $query->select('l.title AS language_title, l.image AS language_image, l.sef AS language_sef') ->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = a.language'); // Join over the users. $query->select('u.name AS editor') ->join('LEFT', $db->quoteName('#__users') . ' AS u ON u.id = a.checked_out'); // Join over components $query->select('c.element AS componentname') ->join('LEFT', $db->quoteName('#__extensions') . ' AS c ON c.extension_id = a.component_id'); // Join over the asset groups. $query->select('ag.title AS access_level') ->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Join over the menu types. $query->select($db->quoteName(array('mt.id', 'mt.title'), array('menutype_id', 'menutype_title'))) ->join('LEFT', $db->quoteName('#__menu_types', 'mt') . ' ON ' . $db->qn('mt.menutype') . ' = ' . $db->qn('a.menutype')); // Join over the associations. $assoc = JLanguageAssociations::isEnabled(); if ($assoc) { $query->select('COUNT(asso2.id)>1 as association') ->join('LEFT', '#__associations AS asso ON asso.id = a.id AND asso.context=' . $db->quote('com_menus.item')) ->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key') ->group('a.id, e.enabled, l.title, l.image, u.name, c.element, ag.title, e.name, mt.id, mt.title, l.sef'); } // Join over the extensions $query->select('e.name AS name') ->join('LEFT', '#__extensions AS e ON e.extension_id = a.component_id'); // Exclude the root category. $query->where('a.id > 1') ->where('a.client_id = ' . (int) $this->getState('filter.client_id')); // Filter on the published state. $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where('a.published = ' . (int) $published); } elseif ($published === '') { $query->where('a.published IN (0, 1)'); } // Filter by search in title, alias or id if ($search = trim($this->getState('filter.search'))) { if (stripos($search, 'id:') === 0) { $query->where('a.id = ' . (int) substr($search, 3)); } elseif (stripos($search, 'link:') === 0) { if ($search = substr($search, 5)) { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('a.link LIKE ' . $search); } } else { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('(' . 'a.title LIKE ' . $search . ' OR a.alias LIKE ' . $search . ' OR a.note LIKE ' . $search . ')'); } } // Filter the items over the parent id if set. $parentId = $this->getState('filter.parent_id'); if (!empty($parentId)) { $level = $this->getState('filter.level'); // Create a subquery for the sub-items list $subQuery = $db->getQuery(true) ->select('sub.id') ->from('#__menu as sub') ->join('INNER', '#__menu as this ON sub.lft > this.lft AND sub.rgt < this.rgt') ->where('this.id = ' . (int) $parentId); if ($level) { $subQuery->where('sub.level <= this.level + ' . (int) ($level - 1)); } // Add the subquery to the main query $query->where('(a.parent_id = ' . (int) $parentId . ' OR a.parent_id IN (' . (string) $subQuery . '))'); } // Filter on the level. elseif ($level = $this->getState('filter.level')) { $query->where('a.level <= ' . (int) $level); } // Filter the items over the menu id if set. $menuType = $this->getState('filter.menutype'); // A value "" means all if ($menuType == '') { // Load all menu types we have manage access $query2 = $this->getDbo()->getQuery(true) ->select($this->getDbo()->qn(array('id', 'menutype'))) ->from('#__menu_types') ->where('client_id = ' . (int) $this->getState('filter.client_id')) ->order('title'); // Show protected items on explicit filter only $query->where('a.menutype != ' . $db->q('main')); $menuTypes = $this->getDbo()->setQuery($query2)->loadObjectList(); if ($menuTypes) { $types = array(); foreach ($menuTypes as $type) { if ($user->authorise('core.manage', 'com_menus.menu.' . (int) $type->id)) { $types[] = $query->q($type->menutype); } } $query->where($types ? 'a.menutype IN(' . implode(',', $types) . ')' : 0); } } // Default behavior => load all items from a specific menu elseif (strlen($menuType)) { $query->where('a.menutype = ' . $db->quote($menuType)); } // Empty menu type => error else { $query->where('1 != 1'); } // Filter on the access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = ' . (int) $access); } // Implement View Level Access if (!$user->authorise('core.admin')) { $groups = $user->getAuthorisedViewLevels(); if (!empty($groups)) { $query->where('a.access IN (' . implode(',', $groups) . ')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where('a.language = ' . $db->quote($language)); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.lft')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Method to allow derived classes to preprocess the form. * * @param JForm $form A JForm object. * @param mixed $data The data expected for the form. * @param string $group The name of the plugin group to import (defaults to "content"). * * @return void * * @since 3.2 * @throws Exception if there is an error in the form event. */ protected function preprocessForm(JForm $form, $data, $group = 'content') { $name = $form->getName(); if ($name == 'com_menus.items.filter') { $clientId = $this->getState('filter.client_id'); $form->setFieldAttribute('menutype', 'clientid', $clientId); } elseif (false !== strpos($name, 'com_menus.items.modal.')) { $form->removeField('client_id'); $clientId = $this->getState('filter.client_id'); $form->setFieldAttribute('menutype', 'clientid', $clientId); } } /** * Get the client id for a menu * * @param string $menuType The menutype identifier for the menu * @param boolean $check Flag whether to perform check against ACL as well as existence * * @return integer * * @since 3.7.0 */ protected function getMenu($menuType, $check = false) { $query = $this->_db->getQuery(true); $query->select('a.*') ->from($this->_db->qn('#__menu_types', 'a')) ->where('menutype = ' . $this->_db->q($menuType)); $cMenu = $this->_db->setQuery($query)->loadObject(); if ($check) { // Check if menu type exists. if (!$cMenu) { JLog::add(JText::_('COM_MENUS_ERROR_MENUTYPE_NOT_FOUND'), JLog::ERROR, 'jerror'); return false; } // Check if menu type is valid against ACL. elseif (!JFactory::getUser()->authorise('core.manage', 'com_menus.menu.' . $cMenu->id)) { JLog::add(JText::_('JERROR_ALERTNOAUTHOR'), JLog::ERROR, 'jerror'); return false; } } return $cMenu; } /** * Method to get an array of data items. * * @return mixed An array of data items on success, false on failure. * * @since 3.0.1 */ public function getItems() { $store = $this->getStoreId(); if (!isset($this->cache[$store])) { $items = parent::getItems(); $lang = JFactory::getLanguage(); $client = $this->state->get('filter.client_id'); if ($items) { foreach ($items as $item) { if ($extension = $item->componentname) { $lang->load("$extension.sys", JPATH_ADMINISTRATOR, null, false, true) || $lang->load("$extension.sys", JPATH_ADMINISTRATOR . '/components/' . $extension, null, false, true); } // Translate component name if ($client === 1) { $item->title = JText::_($item->title); } } } $this->cache[$store] = $items; } return $this->cache[$store]; } } PKb��\ҟUX X 1components/com_menus/models/fields/menuparent.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; JFormHelper::loadFieldClass('list'); /** * Menu Parent field. * * @since 1.6 */ class JFormFieldMenuParent extends JFormFieldList { /** * The form field type. * * @var string * @since 1.6 */ protected $type = 'MenuParent'; /** * Method to get the field options. * * @return array The field option objects. * * @since 1.6 */ protected function getOptions() { $options = array(); $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('DISTINCT(a.id) AS value, a.title AS text, a.level, a.lft') ->from('#__menu AS a'); // Filter by menu type. if ($menuType = $this->form->getValue('menutype')) { $query->where('a.menutype = ' . $db->quote($menuType)); } else { // Skip special menu types $query->where('a.menutype != ' . $db->quote('')); $query->where('a.menutype != ' . $db->quote('main')); } // Filter by client id. $clientId = $this->getAttribute('clientid'); if (!is_null($clientId)) { $query->where($db->quoteName('a.client_id') . ' = ' . (int) $clientId); } // Prevent parenting to children of this item. if ($id = $this->form->getValue('id')) { $query->join('LEFT', $db->quoteName('#__menu') . ' AS p ON p.id = ' . (int) $id) ->where('NOT(a.lft >= p.lft AND a.rgt <= p.rgt)'); } $query->where('a.published != -2') ->order('a.lft ASC'); // Get the options. $db->setQuery($query); try { $options = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } // Pad the option text with spaces using depth level as a multiplier. for ($i = 0, $n = count($options); $i < $n; $i++) { if ($clientId != 0) { // Allow translation of custom admin menus $options[$i]->text = str_repeat('- ', $options[$i]->level) . JText::_($options[$i]->text); } else { $options[$i]->text = str_repeat('- ', $options[$i]->level) . $options[$i]->text; } } // Merge any additional options in the XML definition. $options = array_merge(parent::getOptions(), $options); return $options; } } PKb��\�}�U� � 3components/com_menus/models/fields/menuordering.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; JFormHelper::loadFieldClass('list'); /** * Menu Ordering field. * * @since 1.6 */ class JFormFieldMenuOrdering extends JFormFieldList { /** * The form field type. * * @var string * @since 1.7 */ protected $type = 'MenuOrdering'; /** * Method to get the list of siblings in a menu. * The method requires that parent be set. * * @return array The field option objects or false if the parent field has not been set * * @since 1.7 */ protected function getOptions() { $options = array(); // Get the parent $parent_id = $this->form->getValue('parent_id', 0); if (empty($parent_id)) { return false; } $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('a.id AS value, a.title AS text, a.client_id AS ' . $db->quoteName('clientId')) ->from('#__menu AS a') ->where('a.published >= 0') ->where('a.parent_id =' . (int) $parent_id); if ($menuType = $this->form->getValue('menutype')) { $query->where('a.menutype = ' . $db->quote($menuType)); } else { $query->where('a.menutype != ' . $db->quote('')); } $query->order('a.lft ASC'); // Get the options. $db->setQuery($query); try { $options = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } // Allow translation of custom admin menus foreach ($options as &$option) { if ($option->clientId != 0) { $option->text = JText::_($option->text); } } $options = array_merge( array(array('value' => '-1', 'text' => JText::_('COM_MENUS_ITEM_FIELD_ORDERING_VALUE_FIRST'))), $options, array(array('value' => '-2', 'text' => JText::_('COM_MENUS_ITEM_FIELD_ORDERING_VALUE_LAST'))) ); // Merge any additional options in the XML definition. $options = array_merge(parent::getOptions(), $options); return $options; } /** * Method to get the field input markup. * * @return string The field input markup. * * @since 1.7 */ protected function getInput() { if ($this->form->getValue('id', 0) == 0) { return '<span class="readonly">' . JText::_('COM_MENUS_ITEM_FIELD_ORDERING_TEXT') . '</span>'; } else { return parent::getInput(); } } } PKb��\"��� � /components/com_menus/models/fields/menutype.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; use Joomla\Utilities\ArrayHelper; JFormHelper::loadFieldClass('list'); /** * Menu Type field. * * @since 1.6 */ class JFormFieldMenutype extends JFormFieldList { /** * The form field type. * * @var string * @since 1.6 */ protected $type = 'menutype'; /** * Method to get the field input markup. * * @return string The field input markup. * * @since 1.6 */ protected function getInput() { $html = array(); $recordId = (int) $this->form->getValue('id'); $size = (string) ($v = $this->element['size']) ? ' size="' . $v . '"' : ''; $class = (string) ($v = $this->element['class']) ? ' class="' . $v . '"' : 'class="text_area"'; $required = (string) $this->element['required'] ? ' required="required"' : ''; $clientId = (int) $this->element['clientid'] ?: 0; // Get a reverse lookup of the base link URL to Title switch ($this->value) { case 'url': $value = JText::_('COM_MENUS_TYPE_EXTERNAL_URL'); break; case 'alias': $value = JText::_('COM_MENUS_TYPE_ALIAS'); break; case 'separator': $value = JText::_('COM_MENUS_TYPE_SEPARATOR'); break; case 'heading': $value = JText::_('COM_MENUS_TYPE_HEADING'); break; case 'container': $value = JText::_('COM_MENUS_TYPE_CONTAINER'); break; default: $link = $this->form->getValue('link'); /** @var MenusModelMenutypes $model */ $model = JModelLegacy::getInstance('Menutypes', 'MenusModel', array('ignore_request' => true)); $model->setState('client_id', $clientId); $rlu = $model->getReverseLookup(); // Clean the link back to the option, view and layout $value = JText::_(ArrayHelper::getValue($rlu, MenusHelper::getLinkKey($link))); break; } // Include jQuery JHtml::_('jquery.framework'); // Add the script to the document head. JFactory::getDocument()->addScriptDeclaration(' function jSelectPosition_' . $this->id . '(name) { document.getElementById("' . $this->id . '").value = name; } ' ); $link = JRoute::_('index.php?option=com_menus&view=menutypes&tmpl=component&client_id=' . $clientId . '&recordId=' . $recordId); $html[] = '<span class="input-append"><input type="text" ' . $required . ' readonly="readonly" id="' . $this->id . '" value="' . $value . '" ' . $size . $class . ' />'; $html[] = '<button type="button" data-target="#menuTypeModal" class="btn btn-primary" data-toggle="modal" title="' . JText::_('JSELECT') . '">' . '<span class="icon-list icon-white" aria-hidden="true"></span> ' . JText::_('JSELECT') . '</button></span>'; $html[] = JHtml::_( 'bootstrap.renderModal', 'menuTypeModal', array( 'url' => $link, 'title' => JText::_('COM_MENUS_ITEM_FIELD_TYPE_LABEL'), 'width' => '800px', 'height' => '300px', 'modalWidth' => '80', 'bodyHeight' => '70', 'footer' => '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' ) ); $html[] = '<input class="input-small" type="hidden" name="' . $this->name . '" value="' . htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') . '" />'; return implode("\n", $html); } } PKb��\�k�2components/com_menus/models/forms/item_heading.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fields name="params"> <fieldset name="menu-options" label="COM_MENUS_LINKTYPE_OPTIONS_LABEL" > <field name="menu-anchor_title" type="text" label="COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_LABEL" description="COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_DESC" /> <field name="menu-anchor_css" type="text" label="COM_MENUS_ITEM_FIELD_ANCHOR_CSS_LABEL" description="COM_MENUS_ITEM_FIELD_ANCHOR_CSS_DESC" /> <field name="menu_image" type="media" label="COM_MENUS_ITEM_FIELD_MENU_IMAGE_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_IMAGE_DESC" /> <field name="menu_image_css" type="text" label="COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_DESC" /> <field name="menu_text" type="radio" label="COM_MENUS_ITEM_FIELD_MENU_TEXT_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_TEXT_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="menu_show" type="radio" label="COM_MENUS_ITEM_FIELD_MENU_SHOW_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_SHOW_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> </fields> <help key="JHELP_MENUS_MENU_ITEM_MENU_ITEM_HEADING" /> </form> PKb��\G�@}��0components/com_menus/models/forms/item_alias.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <!-- Add fields to the request variables for the layout. --> <fields name="params"> <fieldset name="aliasoptions"> <field name="aliasoptions" type="modal_menu" label="COM_MENUS_ITEM_FIELD_ALIAS_MENU_LABEL" description="COM_MENUS_ITEM_FIELD_ALIAS_MENU_DESC" clientid="0" required="true" select="true" new="true" edit="true" clear="true" /> <field name="alias_redirect" type="radio" label="COM_MENUS_ITEM_FIELD_ALIAS_REDIRECT_LABEL" description="COM_MENUS_ITEM_FIELD_ALIAS_REDIRECT_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="menu-options" label="COM_MENUS_LINKTYPE_OPTIONS_LABEL" > <field name="menu-anchor_title" type="text" label="COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_LABEL" description="COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_DESC" /> <field name="menu-anchor_css" type="text" label="COM_MENUS_ITEM_FIELD_ANCHOR_CSS_LABEL" description="COM_MENUS_ITEM_FIELD_ANCHOR_CSS_DESC" /> <field name="menu_image" type="media" label="COM_MENUS_ITEM_FIELD_MENU_IMAGE_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_IMAGE_DESC" /> <field name="menu_image_css" type="text" label="COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_DESC" /> <field name="menu_text" type="radio" label="COM_MENUS_ITEM_FIELD_MENU_TEXT_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_TEXT_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="menu_show" type="radio" label="COM_MENUS_ITEM_FIELD_MENU_SHOW_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_SHOW_DESC" default="1" filter="integer" class="btn-group btn-group-yesno" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> </fields> <help key="JHELP_MENUS_MENU_ITEM_MENU_ITEM_ALIAS" /> </form> PKb��\S��bb4components/com_menus/models/forms/item_separator.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fields name="params"> <fieldset name="menu-options" label="COM_MENUS_LINKTYPE_OPTIONS_LABEL" > <field name="menu-anchor_css" type="text" label="COM_MENUS_ITEM_FIELD_ANCHOR_CSS_LABEL" description="COM_MENUS_ITEM_FIELD_ANCHOR_CSS_DESC" /> <field name="menu_image" type="media" label="COM_MENUS_ITEM_FIELD_MENU_IMAGE_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_IMAGE_DESC" /> <field name="menu_image_css" type="text" label="COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_DESC" /> <field name="menu_text" type="radio" label="COM_MENUS_ITEM_FIELD_MENU_TEXT_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_TEXT_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="menu_show" type="radio" label="COM_MENUS_ITEM_FIELD_MENU_SHOW_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_SHOW_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> </fields> <help key="JHELP_MENUS_MENU_ITEM_TEXT_SEPARATOR" /> </form> PKb��\4^����*components/com_menus/models/forms/menu.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="id" type="hidden" id="id" default="0" filter="int" readonly="true" /> <field name="asset_id" type="hidden" filter="unset" /> <field name="menutype" type="text" label="COM_MENUS_MENU_MENUTYPE_LABEL" description="COM_MENUS_MENU_MENUTYPE_DESC" id="menutype" size="30" maxlength="24" required="true" /> <field name="title" type="text" label="JGLOBAL_TITLE" description="COM_MENUS_MENU_TITLE_DESC" id="title" size="30" maxlength="48" required="true" /> <field name="description" type="text" label="JGLOBAL_DESCRIPTION" description="COM_MENUS_MENU_DESCRIPTION_DESC" id="menudescription" size="30" maxlength="255" /> <field name="client_id" type="radio" label="COM_MENUS_MENU_CLIENT_ID_LABEL" description="COM_MENUS_MENU_CLIENT_ID_DESC" id="client_id" default="0" class="btn-group btn-group-yesno btn-group-reversed" > <option value="0">JSITE</option> <option value="1">JADMINISTRATOR</option> </field> <field name="preset" type="menuPreset" label="COM_MENUS_FIELD_PRESET_LABEL" description="COM_MENUS_FIELD_PRESET_DESC" showon="client_id:1" > <option value="">JNONE</option> </field> <field name="rules" type="rules" label="JFIELD_RULES_LABEL" translate_label="false" filter="rules" component="com_menus" section="menu" validate="rules" /> </fieldset> </form> PKb��\���RR.components/com_menus/models/forms/item_url.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fields name="params"> <fieldset name="menu-options" label="COM_MENUS_LINKTYPE_OPTIONS_LABEL" > <field name="menu-anchor_title" type="text" label="COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_LABEL" description="COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_DESC" /> <field name="menu-anchor_css" type="text" label="COM_MENUS_ITEM_FIELD_ANCHOR_CSS_LABEL" description="COM_MENUS_ITEM_FIELD_ANCHOR_CSS_DESC" /> <field name="menu-anchor_rel" type="list" label="COM_MENUS_ITEM_FIELD_ANCHOR_REL_LABEL" description="COM_MENUS_ITEM_FIELD_ANCHOR_REL_DESC" default="" > <option value="">JNONE</option> <option value="alternate"/> <option value="author"/> <option value="bookmark"/> <option value="help"/> <option value="license"/> <option value="next"/> <option value="nofollow"/> <option value="noreferrer"/> <option value="prefetch"/> <option value="prev"/> <option value="search"/> <option value="tag"/> </field> <field name="menu_image" type="media" label="COM_MENUS_ITEM_FIELD_MENU_IMAGE_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_IMAGE_DESC" /> <field name="menu_image_css" type="text" label="COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_DESC" /> <field name="menu_text" type="radio" label="COM_MENUS_ITEM_FIELD_MENU_TEXT_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_TEXT_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="menu_show" type="radio" label="COM_MENUS_ITEM_FIELD_MENU_SHOW_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_SHOW_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> </fields> <help key="JHELP_MENUS_MENU_ITEM_EXTERNAL_URL" /> </form> PKb��\U�8��*components/com_menus/models/forms/item.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="id" type="hidden" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" class="readonly" default="0" filter="int" readonly="true" /> <field name="title" type="text" label="COM_MENUS_ITEM_FIELD_TITLE_LABEL" description="COM_MENUS_ITEM_FIELD_TITLE_DESC" class="input-xxlarge input-large-text" size="40" required="true" /> <field name="alias" type="alias" label="JFIELD_ALIAS_LABEL" description="JFIELD_ALIAS_DESC" hint="JFIELD_ALIAS_PLACEHOLDER" size="40" /> <field name="note" type="text" label="JFIELD_NOTE_LABEL" description="COM_MENUS_ITEM_FIELD_NOTE_DESC" maxlength="255" class="span12" size="40" /> <field name="link" type="link" label="COM_MENUS_ITEM_FIELD_LINK_LABEL" description="COM_MENUS_ITEM_FIELD_LINK_DESC" readonly="true" class="input-xxlarge" size="50" /> <field name="menutype" type="menu" label="COM_MENUS_ITEM_FIELD_ASSIGNED_LABEL" description="COM_MENUS_ITEM_FIELD_ASSIGNED_DESC" required="true" clientid="0" size="1" > <option value="">COM_MENUS_SELECT_MENU</option> </field> <field name="type" type="menutype" label="COM_MENUS_ITEM_FIELD_TYPE_LABEL" description="COM_MENUS_ITEM_FIELD_TYPE_DESC" class="input-medium" required="true" size="40" /> <field name="published" type="list" label="JSTATUS" description="JFIELD_PUBLISHED_DESC" id="published" class="chzn-color-state" size="1" default="1" filter="integer" > <option value="1">JPUBLISHED</option> <option value="0">JUNPUBLISHED</option> <option value="-2">JTRASHED</option> </field> <field name="parent_id" type="menuparent" label="COM_MENUS_ITEM_FIELD_PARENT_LABEL" description="COM_MENUS_ITEM_FIELD_PARENT_DESC" default="1" filter="int" clientid="0" size="1" > <option value="1">COM_MENUS_ITEM_ROOT</option> </field> <field name="menuordering" type="menuordering" label="COM_MENUS_ITEM_FIELD_ORDERING_LABEL" description="COM_MENUS_ITEM_FIELD_ORDERING_DESC" filter="int" size="1"> </field> <field name="component_id" type="hidden" filter="int" /> <field name="browserNav" type="list" label="COM_MENUS_ITEM_FIELD_BROWSERNAV_LABEL" description="COM_MENUS_ITEM_FIELD_BROWSERNAV_DESC" default="0" filter="int" > <option value="0">COM_MENUS_FIELD_VALUE_PARENT</option> <option value="1">COM_MENUS_FIELD_VALUE_NEW_WITH_NAV</option> <option value="2">COM_MENUS_FIELD_VALUE_NEW_WITHOUT_NAV</option> </field> <field name="access" type="accesslevel" label="JFIELD_ACCESS_LABEL" description="JFIELD_ACCESS_DESC" id="access" filter="integer" /> <field name="template_style_id" type="templatestyle" label="COM_MENUS_ITEM_FIELD_TEMPLATE_LABEL" description="COM_MENUS_ITEM_FIELD_TEMPLATE_DESC" client="site" filter="int" showon="type!:alias[OR]params.alias_redirect:0" > <option value="0">JOPTION_USE_DEFAULT</option> </field> <field name="home" type="radio" label="COM_MENUS_ITEM_FIELD_HOME_LABEL" description="COM_MENUS_ITEM_FIELD_HOME_DESC" default="0" class="btn-group btn-group-yesno" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="language" type="contentlanguage" label="JFIELD_LANGUAGE_LABEL" description="COM_MENUS_ITEM_FIELD_LANGUAGE_DESC" > <option value="*">JALL</option> </field> <field name="path" type="hidden" filter="unset" /> <field name="level" type="hidden" filter="unset" /> <field name="checked_out" type="hidden" filter="unset" /> <field name="checked_out_time" type="hidden" filter="unset" /> <field name="lft" type="hidden" filter="unset" /> <field name="rgt" type="hidden" filter="unset" /> <field name="toggle_modules_assigned" type="radio" label="COM_MENUS_ITEM_FIELD_HIDE_UNASSIGNED_LABEL" description="COM_MENUS_ITEM_FIELD_HIDE_UNASSIGNED_DESC" default="1" class="btn-group btn-group-yesno" filter="integer" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="toggle_modules_published" type="radio" label="COM_MENUS_ITEM_FIELD_HIDE_UNPUBLISHED_LABEL" description="COM_MENUS_ITEM_FIELD_HIDE_UNPUBLISHED_DESC" default="1" class="btn-group btn-group-yesno" filter="integer" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fields name="params"> </fields> </form> PKb��\T�����2components/com_menus/models/forms/filter_items.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <field name="client_id" type="list" label="" filtermode="selector" onchange="this.form.submit();" > <option value="0">JSITE</option> <option value="1">JADMINISTRATOR</option> </field> <field name="menutype" type="menu" label="COM_MENUS_FILTER_CATEGORY" description="JOPTION_FILTER_CATEGORY_DESC" accesstype="manage" clientid="" showAll="false" filtermode="selector" onchange="this.form.submit();" > <option value="">COM_MENUS_SELECT_MENU</option> </field> <fields name="filter"> <field name="search" type="text" label="COM_MENUS_ITEMS_SEARCH_FILTER_LABEL" description="COM_MENUS_ITEMS_SEARCH_FILTER" hint="JSEARCH_FILTER" noresults="JGLOBAL_NO_MATCHING_RESULTS" /> <field name="published" type="status" label="COM_MENUS_FILTER_PUBLISHED" description="COM_MENUS_FILTER_PUBLISHED_DESC" filter="*,0,1,-2" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_PUBLISHED</option> </field> <field name="access" type="accesslevel" label="JOPTION_FILTER_ACCESS" description="JOPTION_FILTER_ACCESS_DESC" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_ACCESS</option> </field> <field name="language" type="contentlanguage" label="JOPTION_FILTER_LANGUAGE" description="JOPTION_FILTER_LANGUAGE_DESC" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_LANGUAGE</option> <option value="*">JALL</option> </field> <field name="level" type="integer" label="JOPTION_FILTER_LEVEL" description="JOPTION_FILTER_LEVEL_DESC" first="1" last="10" step="1" languages="*" onchange="this.form.submit();" > <option value="">JOPTION_SELECT_MAX_LEVELS</option> </field> <field name="parent_id" type="menuitembytype" label="COM_MENUS_FILTER_PARENT_MENU_ITEM_LABEL" description="COM_MENUS_FILTER_PARENT_MENU_ITEM_DESC" onchange="this.form.submit();" > <option value="">COM_MENUS_FILTER_SELECT_PARENT_MENU_ITEM</option> </field> </fields> <fields name="list"> <field name="fullordering" type="list" label="JGLOBAL_SORT_BY" description="JGLOBAL_SORT_BY" statuses="*,0,1,2,-2" onchange="this.form.submit();" default="a.lft ASC" > <option value="">JGLOBAL_SORT_BY</option> <option value="a.lft ASC">JGRID_HEADING_ORDERING_ASC</option> <option value="a.lft DESC">JGRID_HEADING_ORDERING_DESC</option> <option value="a.published ASC">JSTATUS_ASC</option> <option value="a.published DESC">JSTATUS_DESC</option> <option value="a.title ASC">JGLOBAL_TITLE_ASC</option> <option value="a.title DESC">JGLOBAL_TITLE_DESC</option> <option value="menutype_title ASC">COM_MENUS_HEADING_MENU_ASC</option> <option value="menutype_title DESC">COM_MENUS_HEADING_MENU_DESC</option> <option value="a.home ASC">COM_MENUS_HEADING_HOME_ASC</option> <option value="a.home DESC">COM_MENUS_HEADING_HOME_DESC</option> <option value="a.access ASC">JGRID_HEADING_ACCESS_ASC</option> <option value="a.access DESC">JGRID_HEADING_ACCESS_DESC</option> <option value="association ASC" requires="associations">JASSOCIATIONS_ASC</option> <option value="association DESC" requires="associations">JASSOCIATIONS_DESC</option> <option value="language ASC">JGRID_HEADING_LANGUAGE_ASC</option> <option value="language DESC">JGRID_HEADING_LANGUAGE_DESC</option> <option value="a.id ASC">JGRID_HEADING_ID_ASC</option> <option value="a.id DESC">JGRID_HEADING_ID_DESC</option> </field> <field name="limit" type="limitbox" label="COM_MENUS_LIST_LIMIT" description="COM_MENUS_LIST_LIMIT_DESC" class="input-mini" default="25" onchange="this.form.submit();" /> </fields> </form> PKb��\�r�\��4components/com_menus/models/forms/item_component.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fields name="params" label="COM_MENUS_LINKTYPE_OPTIONS_LABEL" > <fieldset name="menu-options" label="COM_MENUS_LINKTYPE_OPTIONS_LABEL"> <field name="menu-anchor_title" type="text" label="COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_LABEL" description="COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_DESC" /> <field name="menu-anchor_css" type="text" label="COM_MENUS_ITEM_FIELD_ANCHOR_CSS_LABEL" description="COM_MENUS_ITEM_FIELD_ANCHOR_CSS_DESC" /> <field name="menu_image" type="media" label="COM_MENUS_ITEM_FIELD_MENU_IMAGE_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_IMAGE_DESC" /> <field name="menu_image_css" type="text" label="COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_IMAGE_CSS_DESC" /> <field name="menu_text" type="radio" label="COM_MENUS_ITEM_FIELD_MENU_TEXT_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_TEXT_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="menu_show" type="radio" label="COM_MENUS_ITEM_FIELD_MENU_SHOW_LABEL" description="COM_MENUS_ITEM_FIELD_MENU_SHOW_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="page-options" label="COM_MENUS_PAGE_OPTIONS_LABEL"> <field name="page_title" type="text" label="COM_MENUS_ITEM_FIELD_PAGE_TITLE_LABEL" description="COM_MENUS_ITEM_FIELD_PAGE_TITLE_DESC" useglobal="true" /> <field name="show_page_heading" type="list" label="COM_MENUS_ITEM_FIELD_SHOW_PAGE_HEADING_LABEL" description="COM_MENUS_ITEM_FIELD_SHOW_PAGE_HEADING_DESC" class="chzn-color" default="" useglobal="true" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="page_heading" type="text" label="COM_MENUS_ITEM_FIELD_PAGE_HEADING_LABEL" description="COM_MENUS_ITEM_FIELD_PAGE_HEADING_DESC" /> <field name="pageclass_sfx" type="text" label="COM_MENUS_ITEM_FIELD_PAGE_CLASS_LABEL" description="COM_MENUS_ITEM_FIELD_PAGE_CLASS_DESC" /> </fieldset> <fieldset name="metadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS"> <field name="menu-meta_description" type="textarea" label="JFIELD_META_DESCRIPTION_LABEL" description="JFIELD_META_DESCRIPTION_DESC" rows="3" cols="40" /> <field name="menu-meta_keywords" type="textarea" label="JFIELD_META_KEYWORDS_LABEL" description="JFIELD_META_KEYWORDS_DESC" rows="3" cols="40" /> <field name="robots" type="list" label="JFIELD_METADATA_ROBOTS_LABEL" description="JFIELD_METADATA_ROBOTS_DESC" > <option value="">JGLOBAL_USE_GLOBAL</option> <option value="index, follow">JGLOBAL_INDEX_FOLLOW</option> <option value="noindex, follow">JGLOBAL_NOINDEX_FOLLOW</option> <option value="index, nofollow">JGLOBAL_INDEX_NOFOLLOW</option> <option value="noindex, nofollow">JGLOBAL_NOINDEX_NOFOLLOW</option> </field> <field name="secure" type="list" label="COM_MENUS_ITEM_FIELD_SECURE_LABEL" description="COM_MENUS_ITEM_FIELD_SECURE_DESC" default="0" filter="integer" > <option value="-1">JOFF</option> <option value="1">JON</option> <option value="0">COM_MENUS_FIELD_VALUE_IGNORE</option> </field> </fieldset> </fields> </form> PKb��\�O�$components/com_menus/models/menu.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; /** * Menu Item Model for Menus. * * @since 1.6 */ class MenusModelMenu extends JModelForm { /** * The prefix to use with controller messages. * * @var string * @since 1.6 */ protected $text_prefix = 'COM_MENUS_MENU'; /** * Model context string. * * @var string */ protected $_context = 'com_menus.menu'; /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canDelete($record) { return JFactory::getUser()->authorise('core.delete', 'com_menus.menu.' . (int) $record->id); } /** * Method to test whether the state of a record can be edited. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canEditState($record) { $user = JFactory::getUser(); return $user->authorise('core.edit.state', 'com_menus.menu.' . (int) $record->id); } /** * Returns a Table object, always creating it * * @param string $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object * * @since 1.6 */ public function getTable($type = 'MenuType', $prefix = 'JTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { $app = JFactory::getApplication('administrator'); // Load the User state. $id = $app->input->getInt('id'); $this->setState('menu.id', $id); // Load the parameters. $params = JComponentHelper::getParams('com_menus'); $this->setState('params', $params); } /** * Method to get a menu item. * * @param integer $itemId The id of the menu item to get. * * @return mixed Menu item data object on success, false on failure. * * @since 1.6 */ public function &getItem($itemId = null) { $itemId = (!empty($itemId)) ? $itemId : (int) $this->getState('menu.id'); // Get a menu item row instance. $table = $this->getTable(); // Attempt to load the row. $return = $table->load($itemId); // Check for a table object error. if ($return === false && $table->getError()) { $this->setError($table->getError()); return false; } $properties = $table->getProperties(1); $value = ArrayHelper::toObject($properties, 'JObject'); return $value; } /** * Method to get the menu item form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_menus.menu', 'menu', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_menus.edit.menu.data', array()); if (empty($data)) { $data = $this->getItem(); } else { unset($data['preset']); } $this->preprocessData('com_menus.menu', $data); return $data; } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { $dispatcher = JEventDispatcher::getInstance(); $id = (!empty($data['id'])) ? $data['id'] : (int) $this->getState('menu.id'); $isNew = true; // Get a row instance. $table = $this->getTable(); // Include the plugins for the save events. JPluginHelper::importPlugin('content'); // Load the row if saving an existing item. if ($id > 0) { $isNew = false; $table->load($id); } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the before event. $result = $dispatcher->trigger('onContentBeforeSave', array($this->_context, &$table, $isNew)); // Store the data. if (in_array(false, $result, true) || !$table->store()) { $this->setError($table->getError()); return false; } // Trigger the after save event. $dispatcher->trigger('onContentAfterSave', array($this->_context, &$table, $isNew)); $this->setState('menu.id', $table->id); // Clean the cache $this->cleanCache(); return true; } /** * Method to delete groups. * * @param array $itemIds An array of item ids. * * @return boolean Returns true on success, false on failure. * * @since 1.6 */ public function delete($itemIds) { $dispatcher = JEventDispatcher::getInstance(); // Sanitize the ids. $itemIds = ArrayHelper::toInteger((array) $itemIds); // Get a group row instance. $table = $this->getTable(); // Include the plugins for the delete events. JPluginHelper::importPlugin('content'); // Iterate the items to delete each one. foreach ($itemIds as $itemId) { if ($table->load($itemId)) { // Trigger the before delete event. $result = $dispatcher->trigger('onContentBeforeDelete', array($this->_context, $table)); if (in_array(false, $result, true) || !$table->delete($itemId)) { $this->setError($table->getError()); return false; } // Trigger the after delete event. $dispatcher->trigger('onContentAfterDelete', array($this->_context, $table)); // TODO: Delete the menu associations - Menu items and Modules } } // Clean the cache $this->cleanCache(); return true; } /** * Gets a list of all mod_mainmenu modules and collates them by menutype * * @return array * * @since 1.6 */ public function &getModules() { $db = $this->getDbo(); $query = $db->getQuery(true) ->from('#__modules as a') ->select('a.id, a.title, a.params, a.position') ->where('module = ' . $db->quote('mod_menu')) ->select('ag.title AS access_title') ->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); $db->setQuery($query); $modules = $db->loadObjectList(); $result = array(); foreach ($modules as &$module) { $params = new Registry($module->params); $menuType = $params->get('menutype'); if (!isset($result[$menuType])) { $result[$menuType] = array(); } $result[$menuType][] = & $module; } return $result; } /** * Custom clean the cache * * @param string $group Cache group name. * @param integer $client_id Application client id. * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('com_menus', 0); parent::cleanCache('com_modules'); parent::cleanCache('mod_menu', 0); parent::cleanCache('mod_menu', 1); } } PKb��\�4[���%components/com_menus/models/menus.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Menu List Model for Menus. * * @since 1.6 */ class MenusModelMenus extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'title', 'a.title', 'menutype', 'a.menutype', 'client_id', 'a.client_id', ); } parent::__construct($config); } /** * Overrides the getItems method to attach additional metrics to the list. * * @return mixed An array of data items on success, false on failure. * * @since 1.6.1 */ public function getItems() { // Get a storage key. $store = $this->getStoreId('getItems'); // Try to load the data from internal storage. if (!empty($this->cache[$store])) { return $this->cache[$store]; } // Load the list items. $items = parent::getItems(); // If emtpy or an error, just return. if (empty($items)) { return array(); } // Getting the following metric by joins is WAY TOO SLOW. // Faster to do three queries for very large menu trees. // Get the menu types of menus in the list. $db = $this->getDbo(); $menuTypes = ArrayHelper::getColumn((array) $items, 'menutype'); // Quote the strings. $menuTypes = implode( ',', array_map(array($db, 'quote'), $menuTypes) ); // Get the published menu counts. $query = $db->getQuery(true) ->select('m.menutype, COUNT(DISTINCT m.id) AS count_published') ->from('#__menu AS m') ->where('m.published = 1') ->where('m.menutype IN (' . $menuTypes . ')') ->group('m.menutype'); $db->setQuery($query); try { $countPublished = $db->loadAssocList('menutype', 'count_published'); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // Get the unpublished menu counts. $query->clear('where') ->where('m.published = 0') ->where('m.menutype IN (' . $menuTypes . ')'); $db->setQuery($query); try { $countUnpublished = $db->loadAssocList('menutype', 'count_published'); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // Get the trashed menu counts. $query->clear('where') ->where('m.published = -2') ->where('m.menutype IN (' . $menuTypes . ')'); $db->setQuery($query); try { $countTrashed = $db->loadAssocList('menutype', 'count_published'); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // Inject the values back into the array. foreach ($items as $item) { $item->count_published = isset($countPublished[$item->menutype]) ? $countPublished[$item->menutype] : 0; $item->count_unpublished = isset($countUnpublished[$item->menutype]) ? $countUnpublished[$item->menutype] : 0; $item->count_trashed = isset($countTrashed[$item->menutype]) ? $countTrashed[$item->menutype] : 0; } // Add the items to the internal cache. $this->cache[$store] = $items; return $this->cache[$store]; } /** * Method to build an SQL query to load the list data. * * @return string An SQL query * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select all fields from the table. $query->select($this->getState('list.select', 'a.id, a.menutype, a.title, a.description, a.client_id')) ->from($db->quoteName('#__menu_types') . ' AS a') ->where('a.id > 0'); $query->where('a.client_id = ' . (int) $this->getState('client_id')); // Filter by search in title or menutype if ($search = trim($this->getState('filter.search'))) { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('(' . 'a.title LIKE ' . $search . ' OR a.menutype LIKE ' . $search . ')'); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.id')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.title', $direction = 'asc') { $search = $this->getUserStateFromRequest($this->context . '.search', 'filter_search'); $this->setState('filter.search', $search); $clientId = (int) $this->getUserStateFromRequest($this->context . '.client_id', 'client_id', 0, 'int'); $this->setState('client_id', $clientId); // List state information. parent::populateState($ordering, $direction); } /** * Gets the extension id of the core mod_menu module. * * @return integer * * @since 2.5 */ public function getModMenuId() { $db = $this->getDbo(); $query = $db->getQuery(true) ->select('e.extension_id') ->from('#__extensions AS e') ->where('e.type = ' . $db->quote('module')) ->where('e.element = ' . $db->quote('mod_menu')) ->where('e.client_id = ' . (int) $this->getState('client_id')); $db->setQuery($query); return $db->loadResult(); } /** * Gets a list of all mod_mainmenu modules and collates them by menutype * * @return array * * @since 1.6 */ public function &getModules() { $model = JModelLegacy::getInstance('Menu', 'MenusModel', array('ignore_request' => true)); $result = $model->getModules(); return $result; } } PKb��\8l0����$components/com_menus/models/item.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\String\StringHelper; use Joomla\Utilities\ArrayHelper; jimport('joomla.filesystem.path'); JLoader::register('MenusHelper', JPATH_ADMINISTRATOR . '/components/com_menus/helpers/menus.php'); /** * Menu Item Model for Menus. * * @since 1.6 */ class MenusModelItem extends JModelAdmin { /** * The type alias for this content type. * * @var string * @since 3.4 */ public $typeAlias = 'com_menus.item'; /** * The context used for the associations table * * @var string * @since 3.4.4 */ protected $associationsContext = 'com_menus.item'; /** * @var string The prefix to use with controller messages. * @since 1.6 */ protected $text_prefix = 'COM_MENUS_ITEM'; /** * @var string The help screen key for the menu item. * @since 1.6 */ protected $helpKey = 'JHELP_MENUS_MENU_ITEM_MANAGER_EDIT'; /** * @var string The help screen base URL for the menu item. * @since 1.6 */ protected $helpURL; /** * @var boolean True to use local lookup for the help screen. * @since 1.6 */ protected $helpLocal = false; /** * Batch copy/move command. If set to false, * the batch copy/move command is not supported * * @var string */ protected $batch_copymove = 'menu_id'; /** * Allowed batch commands * * @var array */ protected $batch_commands = array( 'assetgroup_id' => 'batchAccess', 'language_id' => 'batchLanguage' ); /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canDelete($record) { if (empty($record->id) || $record->published != -2) { return false; } $menuTypeId = 0; if (!empty($record->menutype)) { $menuTypeId = $this->getMenuTypeId($record->menutype); } return JFactory::getUser()->authorise('core.delete', 'com_menus.menu.' . (int) $menuTypeId); } /** * Method to test whether the state of a record can be edited. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission for the component. * * @since 3.6 */ protected function canEditState($record) { $menuTypeId = !empty($record->menutype) ? $this->getMenuTypeId($record->menutype) : 0; $assetKey = $menuTypeId ? 'com_menus.menu.' . (int) $menuTypeId : 'com_menus'; return JFactory::getUser()->authorise('core.edit.state', $assetKey); } /** * Batch copy menu items to a new menu or parent. * * @param integer $value The new menu or sub-item. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return mixed An array of new IDs on success, boolean false on failure. * * @since 1.6 */ protected function batchCopy($value, $pks, $contexts) { // $value comes as {menutype}.{parent_id} $parts = explode('.', $value); $menuType = $parts[0]; $parentId = ArrayHelper::getValue($parts, 1, 0, 'int'); $table = $this->getTable(); $db = $this->getDbo(); $query = $db->getQuery(true); $newIds = array(); // Check that the parent exists if ($parentId) { if (!$table->load($parentId)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Non-fatal error $this->setError(JText::_('JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND')); $parentId = 0; } } } // If the parent is 0, set it to the ID of the root item in the tree if (empty($parentId)) { if (!$parentId = $table->getRootId()) { $this->setError($db->getErrorMsg()); return false; } } // Check that user has create permission for menus $user = JFactory::getUser(); $menuTypeId = (int) $this->getMenuTypeId($menuType); if (!$user->authorise('core.create', 'com_menus.menu.' . $menuTypeId)) { $this->setError(JText::_('COM_MENUS_BATCH_MENU_ITEM_CANNOT_CREATE')); return false; } // We need to log the parent ID $parents = array(); // Calculate the emergency stop count as a precaution against a runaway loop bug $query->select('COUNT(id)') ->from($db->quoteName('#__menu')); $db->setQuery($query); try { $count = $db->loadResult(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // Parent exists so we let's proceed while (!empty($pks) && $count > 0) { // Pop the first id off the stack $pk = array_shift($pks); $table->reset(); // Check that the row actually exists if (!$table->load($pk)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Not fatal error $this->setError(JText::sprintf('JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND', $pk)); continue; } } // Copy is a bit tricky, because we also need to copy the children $query->clear() ->select('id') ->from($db->quoteName('#__menu')) ->where('lft > ' . (int) $table->lft) ->where('rgt < ' . (int) $table->rgt); $db->setQuery($query); $childIds = $db->loadColumn(); // Add child ID's to the array only if they aren't already there. foreach ($childIds as $childId) { if (!in_array($childId, $pks)) { $pks[] = $childId; } } // Make a copy of the old ID and Parent ID $oldId = $table->id; $oldParentId = $table->parent_id; // Reset the id because we are making a copy. $table->id = 0; // If we a copying children, the Old ID will turn up in the parents list // otherwise it's a new top level item $table->parent_id = isset($parents[$oldParentId]) ? $parents[$oldParentId] : $parentId; $table->menutype = $menuType; // Set the new location in the tree for the node. $table->setLocation($table->parent_id, 'last-child'); // TODO: Deal with ordering? // $table->ordering = 1; $table->level = null; $table->lft = null; $table->rgt = null; $table->home = 0; // Alter the title & alias list($title, $alias) = $this->generateNewTitle($table->parent_id, $table->alias, $table->title); $table->title = $title; $table->alias = $alias; // Check the row. if (!$table->check()) { $this->setError($table->getError()); return false; } // Store the row. if (!$table->store()) { $this->setError($table->getError()); return false; } // Get the new item ID $newId = $table->get('id'); // Add the new ID to the array $newIds[$pk] = $newId; // Now we log the old 'parent' to the new 'parent' $parents[$oldId] = $table->id; $count--; } // Rebuild the hierarchy. if (!$table->rebuild()) { $this->setError($table->getError()); return false; } // Rebuild the tree path. if (!$table->rebuildPath($table->id)) { $this->setError($table->getError()); return false; } // Clean the cache $this->cleanCache(); return $newIds; } /** * Batch move menu items to a new menu or parent. * * @param integer $value The new menu or sub-item. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return boolean True on success. * * @since 1.6 */ protected function batchMove($value, $pks, $contexts) { // $value comes as {menutype}.{parent_id} $parts = explode('.', $value); $menuType = $parts[0]; $parentId = ArrayHelper::getValue($parts, 1, 0, 'int'); $table = $this->getTable(); $db = $this->getDbo(); $query = $db->getQuery(true); // Check that the parent exists. if ($parentId) { if (!$table->load($parentId)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Non-fatal error $this->setError(JText::_('JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND')); $parentId = 0; } } } // Check that user has create and edit permission for menus $user = JFactory::getUser(); $menuTypeId = (int) $this->getMenuTypeId($menuType); if (!$user->authorise('core.create', 'com_menus.menu.' . $menuTypeId)) { $this->setError(JText::_('COM_MENUS_BATCH_MENU_ITEM_CANNOT_CREATE')); return false; } if (!$user->authorise('core.edit', 'com_menus.menu.' . $menuTypeId)) { $this->setError(JText::_('COM_MENUS_BATCH_MENU_ITEM_CANNOT_EDIT')); return false; } // We are going to store all the children and just moved the menutype $children = array(); // Parent exists so we let's proceed foreach ($pks as $pk) { // Check that the row actually exists if (!$table->load($pk)) { if ($error = $table->getError()) { // Fatal error $this->setError($error); return false; } else { // Not fatal error $this->setError(JText::sprintf('JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND', $pk)); continue; } } // Set the new location in the tree for the node. $table->setLocation($parentId, 'last-child'); // Set the new Parent Id $table->parent_id = $parentId; // Check if we are moving to a different menu if ($menuType != $table->menutype) { // Add the child node ids to the children array. $query->clear() ->select($db->quoteName('id')) ->from($db->quoteName('#__menu')) ->where($db->quoteName('lft') . ' BETWEEN ' . (int) $table->lft . ' AND ' . (int) $table->rgt); $db->setQuery($query); $children = array_merge($children, (array) $db->loadColumn()); } // Check the row. if (!$table->check()) { $this->setError($table->getError()); return false; } // Store the row. if (!$table->store()) { $this->setError($table->getError()); return false; } // Rebuild the tree path. if (!$table->rebuildPath()) { $this->setError($table->getError()); return false; } } // Process the child rows if (!empty($children)) { // Remove any duplicates and sanitize ids. $children = array_unique($children); $children = ArrayHelper::toInteger($children); // Update the menutype field in all nodes where necessary. $query->clear() ->update($db->quoteName('#__menu')) ->set($db->quoteName('menutype') . ' = ' . $db->quote($menuType)) ->where($db->quoteName('id') . ' IN (' . implode(',', $children) . ')'); $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } } // Clean the cache $this->cleanCache(); return true; } /** * Method to check if you can save a record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function canSave($data = array(), $key = 'id') { return JFactory::getUser()->authorise('core.edit', $this->option); } /** * Method to get the row form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // The folder and element vars are passed when saving the form. if (empty($data)) { $item = $this->getItem(); // The type should already be set. $this->setState('item.link', $item->link); } else { $this->setState('item.link', ArrayHelper::getValue($data, 'link')); $this->setState('item.type', ArrayHelper::getValue($data, 'type')); } $clientId = $this->getState('item.client_id'); // Get the form. if ($clientId == 1) { $form = $this->loadForm('com_menus.item.admin', 'itemadmin', array('control' => 'jform', 'load_data' => $loadData), true); } else { $form = $this->loadForm('com_menus.item', 'item', array('control' => 'jform', 'load_data' => $loadData), true); } if (empty($form)) { return false; } if ($loadData) { $data = $this->loadFormData(); } // Modify the form based on access controls. if (!$this->canEditState((object) $data)) { // Disable fields for display. $form->setFieldAttribute('menuordering', 'disabled', 'true'); $form->setFieldAttribute('published', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is an article you can edit. $form->setFieldAttribute('menuordering', 'filter', 'unset'); $form->setFieldAttribute('published', 'filter', 'unset'); } // Filter available menus $action = $this->getState('item.id') > 0 ? 'edit' : 'create'; $form->setFieldAttribute('menutype', 'accesstype', $action); $form->setFieldAttribute('type', 'clientid', $clientId); return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data, providing it has an ID and it is the same. $itemData = (array) $this->getItem(); $sessionData = (array) JFactory::getApplication()->getUserState('com_menus.edit.item.data', array()); // Only merge if there is a session and itemId or itemid is null. if (isset($sessionData['id']) && isset($itemData['id']) && $sessionData['id'] === $itemData['id'] || is_null($itemData['id'])) { $data = array_merge($itemData, $sessionData); } else { $data = $itemData; } // For a new menu item, pre-select some filters (Status, Language, Access) in edit form if those have been selected in Menu Manager if ($this->getItem()->id == 0) { // Get selected fields $filters = JFactory::getApplication()->getUserState('com_menus.items.filter'); $data['parent_id'] = (isset($filters['parent_id']) ? $filters['parent_id'] : null); $data['published'] = (isset($filters['published']) ? $filters['published'] : null); $data['language'] = (isset($filters['language']) ? $filters['language'] : null); $data['access'] = (!empty($filters['access']) ? $filters['access'] : JFactory::getConfig()->get('access')); } if (isset($data['menutype']) && !$this->getState('item.menutypeid')) { $menuTypeId = (int) $this->getMenuTypeId($data['menutype']); $this->setState('item.menutypeid', $menuTypeId); } $data = (object) $data; $this->preprocessData('com_menus.item', $data); return $data; } /** * Get the necessary data to load an item help screen. * * @return object An object with key, url, and local properties for loading the item help screen. * * @since 1.6 */ public function getHelp() { return (object) array('key' => $this->helpKey, 'url' => $this->helpURL, 'local' => $this->helpLocal); } /** * Method to get a menu item. * * @param integer $pk An optional id of the object to get, otherwise the id from the model state is used. * * @return mixed Menu item data object on success, false on failure. * * @since 1.6 */ public function getItem($pk = null) { $pk = (!empty($pk)) ? $pk : (int) $this->getState('item.id'); // Get a level row instance. $table = $this->getTable(); // Attempt to load the row. $table->load($pk); // Check for a table object error. if ($error = $table->getError()) { $this->setError($error); return false; } // Prime required properties. if ($type = $this->getState('item.type')) { $table->type = $type; } if (empty($table->id)) { $table->parent_id = $this->getState('item.parent_id'); $table->menutype = $this->getState('item.menutype'); $table->client_id = $this->getState('item.client_id'); $table->params = '{}'; } // If the link has been set in the state, possibly changing link type. if ($link = $this->getState('item.link')) { // Check if we are changing away from the actual link type. if (MenusHelper::getLinkKey($table->link) !== MenusHelper::getLinkKey($link) && (int) $table->id === (int) $this->getState('item.id')) { $table->link = $link; } } switch ($table->type) { case 'alias': $table->component_id = 0; $args = array(); parse_str(parse_url($table->link, PHP_URL_QUERY), $args); break; case 'separator': case 'heading': case 'container': $table->link = ''; $table->component_id = 0; break; case 'url': $table->component_id = 0; $args = array(); parse_str(parse_url($table->link, PHP_URL_QUERY), $args); break; case 'component': default: // Enforce a valid type. $table->type = 'component'; // Ensure the integrity of the component_id field is maintained, particularly when changing the menu item type. $args = array(); parse_str(parse_url($table->link, PHP_URL_QUERY), $args); if (isset($args['option'])) { // Load the language file for the component. $lang = JFactory::getLanguage(); $lang->load($args['option'], JPATH_ADMINISTRATOR, null, false, true) || $lang->load($args['option'], JPATH_ADMINISTRATOR . '/components/' . $args['option'], null, false, true); // Determine the component id. $component = JComponentHelper::getComponent($args['option']); if (isset($component->id)) { $table->component_id = $component->id; } } break; } // We have a valid type, inject it into the state for forms to use. $this->setState('item.type', $table->type); // Convert to the JObject before adding the params. $properties = $table->getProperties(1); $result = ArrayHelper::toObject($properties); // Convert the params field to an array. $registry = new Registry($table->params); $result->params = $registry->toArray(); // Merge the request arguments in to the params for a component. if ($table->type == 'component') { // Note that all request arguments become reserved parameter names. $result->request = $args; $result->params = array_merge($result->params, $args); // Special case for the Login menu item. // Display the login or logout redirect URL fields if not empty if ($table->link == 'index.php?option=com_users&view=login') { if (!empty($result->params['login_redirect_url'])) { $result->params['loginredirectchoice'] = '0'; } if (!empty($result->params['logout_redirect_url'])) { $result->params['logoutredirectchoice'] = '0'; } } } if ($table->type == 'alias') { // Note that all request arguments become reserved parameter names. $result->params = array_merge($result->params, $args); } if ($table->type == 'url') { // Note that all request arguments become reserved parameter names. $result->params = array_merge($result->params, $args); } // Load associated menu items, only supported for frontend for now if ($this->getState('item.client_id') == 0 && JLanguageAssociations::isEnabled()) { if ($pk != null) { $result->associations = MenusHelper::getAssociations($pk); } else { $result->associations = array(); } } $result->menuordering = $pk; return $result; } /** * Get the list of modules not in trash. * * @return mixed An array of module records (id, title, position), or false on error. * * @since 1.6 */ public function getModules() { $db = $this->getDbo(); $query = $db->getQuery(true); // Currently any setting that affects target page for a backend menu is not supported, hence load no modules. if ($this->getState('item.client_id') == 1) { return false; } /** * Join on the module-to-menu mapping table. * We are only interested if the module is displayed on ALL or THIS menu item (or the inverse ID number). * sqlsrv changes for modulelink to menu manager */ $query->select('a.id, a.title, a.position, a.published, map.menuid') ->from('#__modules AS a') ->join('LEFT', sprintf('#__modules_menu AS map ON map.moduleid = a.id AND map.menuid IN (0, %1$d, -%1$d)', $this->getState('item.id'))) ->select('(SELECT COUNT(*) FROM #__modules_menu WHERE moduleid = a.id AND menuid < 0) AS ' . $db->quoteName('except')); // Join on the asset groups table. $query->select('ag.title AS access_title') ->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access') ->where('a.published >= 0') ->where('a.client_id = ' . (int) $this->getState('item.client_id')) ->order('a.position, a.ordering'); $db->setQuery($query); try { $result = $db->loadObjectList(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } return $result; } /** * Get the list of all view levels * * @return array|boolean An array of all view levels (id, title). * * @since 3.4 */ public function getViewLevels() { $db = $this->getDbo(); $query = $db->getQuery(true); // Get all the available view levels $query->select($db->quoteName('id')) ->select($db->quoteName('title')) ->from($db->quoteName('#__viewlevels')) ->order($db->quoteName('id')); $db->setQuery($query); try { $result = $db->loadObjectList(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } return $result; } /** * A protected method to get the where clause for the reorder. * This ensures that the row will be moved relative to a row with the same menutype. * * @param JTableMenu $table instance. * * @return array An array of conditions to add to add to ordering queries. * * @since 1.6 */ protected function getReorderConditions($table) { return array('menutype = ' . $this->_db->quote($table->get('menutype'))); } /** * Returns a Table object, always creating it * * @param string $type The table type to instantiate. * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable|JTableNested A database object. * * @since 1.6 */ public function getTable($type = 'Menu', $prefix = 'MenusTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { $app = JFactory::getApplication('administrator'); // Load the User state. $pk = $app->input->getInt('id'); $this->setState('item.id', $pk); if (!($parentId = $app->getUserState('com_menus.edit.item.parent_id'))) { $parentId = $app->input->getInt('parent_id'); } $this->setState('item.parent_id', $parentId); $menuType = $app->getUserStateFromRequest('com_menus.items.menutype', 'menutype', '', 'string'); // If we have a menutype we take client_id from there, unless forced otherwise if ($menuType) { $menuTypeObj = $this->getMenuType($menuType); // An invalid menutype will be handled as clientId = 0 and menuType = '' $menuType = (string) $menuTypeObj->menutype; $menuTypeId = (int) $menuTypeObj->client_id; $clientId = (int) $menuTypeObj->client_id; } else { $menuTypeId = 0; $clientId = $app->getUserState('com_menus.items.client_id', 0); } // Forced client id will override/clear menuType if conflicted $forcedClientId = $app->input->get('client_id', null, 'string'); // Current item if not new, we don't allow changing client id at all if ($pk) { $table = $this->getTable(); $table->load($pk); $forcedClientId = $table->get('client_id', $forcedClientId); } if (isset($forcedClientId) && $forcedClientId != $clientId) { $clientId = $forcedClientId; $menuType = ''; $menuTypeId = 0; } // Set the menu type and client id on the list view state, so we return to this menu after saving. $app->setUserState('com_menus.items.menutype', $menuType); $app->setUserState('com_menus.items.client_id', $clientId); $this->setState('item.menutype', $menuType); $this->setState('item.client_id', $clientId); $this->setState('item.menutypeid', $menuTypeId); if (!($type = $app->getUserState('com_menus.edit.item.type'))) { $type = $app->input->get('type'); /** * Note: a new menu item will have no field type. * The field is required so the user has to change it. */ } $this->setState('item.type', $type); if ($link = $app->getUserState('com_menus.edit.item.link')) { $this->setState('item.link', $link); } // Load the parameters. $params = JComponentHelper::getParams('com_menus'); $this->setState('params', $params); } /** * Loads the menutype object by a given menutype string * * @param string $menutype The given menutype * * @return stdClass * * @since 3.7.0 */ protected function getMenuType($menutype) { $table = $this->getTable('MenuType', 'JTable'); $table->load(array('menutype' => $menutype)); return (object) $table->getProperties(); } /** * Loads the menutype ID by a given menutype string * * @param string $menutype The given menutype * * @return integer * * @since 3.6 */ protected function getMenuTypeId($menutype) { $menu = $this->getMenuType($menutype); return (int) $menu->id; } /** * Method to preprocess the form. * * @param JForm $form A JForm object. * @param mixed $data The data expected for the form. * @param string $group The name of the plugin group to import. * * @return void * * @since 1.6 * @throws Exception if there is an error in the form event. */ protected function preprocessForm(JForm $form, $data, $group = 'content') { $link = $this->getState('item.link'); $type = $this->getState('item.type'); $clientId = $this->getState('item.client_id'); $formFile = false; // Load the specific type file $typeFile = $clientId == 1 ? 'itemadmin_' . $type : 'item_' . $type; $clientInfo = JApplicationHelper::getClientInfo($clientId); // Initialise form with component view params if available. if ($type == 'component') { $link = htmlspecialchars_decode($link); // Parse the link arguments. $args = array(); parse_str(parse_url(htmlspecialchars_decode($link), PHP_URL_QUERY), $args); // Confirm that the option is defined. $option = ''; $base = ''; if (isset($args['option'])) { // The option determines the base path to work with. $option = $args['option']; $base = $clientInfo->path . '/components/' . $option; } if (isset($args['view'])) { $view = $args['view']; // Determine the layout to search for. if (isset($args['layout'])) { $layout = $args['layout']; } else { $layout = 'default'; } // Check for the layout XML file. Use standard xml file if it exists. $tplFolders = array( $base . '/views/' . $view . '/tmpl', $base . '/view/' . $view . '/tmpl' ); $path = JPath::find($tplFolders, $layout . '.xml'); if (is_file($path)) { $formFile = $path; } // If custom layout, get the xml file from the template folder // template folder is first part of file name -- template:folder if (!$formFile && (strpos($layout, ':') > 0)) { list($altTmpl, $altLayout) = explode(':', $layout); $templatePath = JPath::clean($clientInfo->path . '/templates/' . $altTmpl . '/html/' . $option . '/' . $view . '/' . $altLayout . '.xml'); if (is_file($templatePath)) { $formFile = $templatePath; } } } // Now check for a view manifest file if (!$formFile) { if (isset($view)) { $metadataFolders = array( $base . '/view/' . $view, $base . '/views/' . $view ); $metaPath = JPath::find($metadataFolders, 'metadata.xml'); if (is_file($path = JPath::clean($metaPath))) { $formFile = $path; } } else { // Now check for a component manifest file $path = JPath::clean($base . '/metadata.xml'); if (is_file($path)) { $formFile = $path; } } } } if ($formFile) { // If an XML file was found in the component, load it first. // We need to qualify the full path to avoid collisions with component file names. if ($form->loadFile($formFile, true, '/metadata') == false) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Attempt to load the xml file. if (!$xml = simplexml_load_file($formFile)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Get the help data from the XML file if present. $help = $xml->xpath('/metadata/layout/help'); } else { // We don't have a component. Load the form XML to get the help path $xmlFile = JPath::find(JPATH_ADMINISTRATOR . '/components/com_menus/models/forms', $typeFile . '.xml'); if ($xmlFile) { if (!$xml = simplexml_load_file($xmlFile)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Get the help data from the XML file if present. $help = $xml->xpath('/form/help'); } } if (!empty($help)) { $helpKey = trim((string) $help[0]['key']); $helpURL = trim((string) $help[0]['url']); $helpLoc = trim((string) $help[0]['local']); $this->helpKey = $helpKey ?: $this->helpKey; $this->helpURL = $helpURL ?: $this->helpURL; $this->helpLocal = (($helpLoc == 'true') || ($helpLoc == '1') || ($helpLoc == 'local')) ? true : false; } if (!$form->loadFile($typeFile, true, false)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Association menu items, we currently do not support this for admin menu… may be later if ($clientId == 0 && JLanguageAssociations::isEnabled()) { $languages = JLanguageHelper::getContentLanguages(false, true, null, 'ordering', 'asc'); if (count($languages) > 1) { $addform = new SimpleXMLElement('<form />'); $fields = $addform->addChild('fields'); $fields->addAttribute('name', 'associations'); $fieldset = $fields->addChild('fieldset'); $fieldset->addAttribute('name', 'item_associations'); foreach ($languages as $language) { $field = $fieldset->addChild('field'); $field->addAttribute('name', $language->lang_code); $field->addAttribute('type', 'modal_menu'); $field->addAttribute('language', $language->lang_code); $field->addAttribute('label', $language->title); $field->addAttribute('translate_label', 'false'); $field->addAttribute('select', 'true'); $field->addAttribute('new', 'true'); $field->addAttribute('edit', 'true'); $field->addAttribute('clear', 'true'); $field->addAttribute('propagate', 'true'); $option = $field->addChild('option', 'COM_MENUS_ITEM_FIELD_ASSOCIATION_NO_VALUE'); $option->addAttribute('value', ''); } $form->load($addform, false); } } // Trigger the default form events. parent::preprocessForm($form, $data, $group); } /** * Method rebuild the entire nested set tree. * * @return boolean|JException Boolean true on success, boolean false or JException instance on error * * @since 1.6 */ public function rebuild() { // Initialise variables. $db = $this->getDbo(); $query = $db->getQuery(true); $table = $this->getTable(); try { $rebuildResult = $table->rebuild(); } catch (Exception $e) { $this->setError($e->getMessage()); return false; } if (!$rebuildResult) { $this->setError($table->getError()); return false; } $query->select('id, params') ->from('#__menu') ->where('params NOT LIKE ' . $db->quote('{%')) ->where('params <> ' . $db->quote('')); $db->setQuery($query); try { $items = $db->loadObjectList(); } catch (RuntimeException $e) { return JError::raiseWarning(500, $e->getMessage()); } foreach ($items as &$item) { $registry = new Registry($item->params); $params = (string) $registry; $query->clear(); $query->update('#__menu') ->set('params = ' . $db->quote($params)) ->where('id = ' . $item->id); try { $db->setQuery($query)->execute(); } catch (RuntimeException $e) { return JError::raiseWarning(500, $e->getMessage()); } unset($registry); } // Clean the cache $this->cleanCache(); return true; } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { $dispatcher = JEventDispatcher::getInstance(); $pk = (!empty($data['id'])) ? $data['id'] : (int) $this->getState('item.id'); $isNew = true; $table = $this->getTable(); $context = $this->option . '.' . $this->name; // Include the plugins for the on save events. JPluginHelper::importPlugin($this->events_map['save']); // Load the row if saving an existing item. if ($pk > 0) { $table->load($pk); $isNew = false; } if (!$isNew) { if ($table->parent_id == $data['parent_id']) { // If first is chosen make the item the first child of the selected parent. if ($data['menuordering'] == -1) { $table->setLocation($data['parent_id'], 'first-child'); } // If last is chosen make it the last child of the selected parent. elseif ($data['menuordering'] == -2) { $table->setLocation($data['parent_id'], 'last-child'); } // Don't try to put an item after itself. All other ones put after the selected item. // $data['id'] is empty means it's a save as copy elseif ($data['menuordering'] && $table->id != $data['menuordering'] || empty($data['id'])) { $table->setLocation($data['menuordering'], 'after'); } // Just leave it where it is if no change is made. elseif ($data['menuordering'] && $table->id == $data['menuordering']) { unset($data['menuordering']); } } // Set the new parent id if parent id not matched and put in last position else { $table->setLocation($data['parent_id'], 'last-child'); } } // We have a new item, so it is not a change. else { $menuType = $this->getMenuType($data['menutype']); $data['client_id'] = $menuType->client_id; $table->setLocation($data['parent_id'], 'last-child'); } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Alter the title & alias for save as copy. Also, unset the home record. if (!$isNew && $data['id'] == 0) { list($title, $alias) = $this->generateNewTitle($table->parent_id, $table->alias, $table->title); $table->title = $title; $table->alias = $alias; $table->published = 0; $table->home = 0; } // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the before save event. $result = $dispatcher->trigger($this->event_before_save, array($context, &$table, $isNew)); // Store the data. if (in_array(false, $result, true)|| !$table->store()) { $this->setError($table->getError()); return false; } // Trigger the after save event. $dispatcher->trigger($this->event_after_save, array($context, &$table, $isNew)); // Rebuild the tree path. if (!$table->rebuildPath($table->id)) { $this->setError($table->getError()); return false; } $this->setState('item.id', $table->id); $this->setState('item.menutype', $table->menutype); // Load associated menu items, for now not supported for admin menu… may be later if ($table->get('client_id') == 0 && JLanguageAssociations::isEnabled()) { // Adding self to the association $associations = isset($data['associations']) ? $data['associations'] : array(); // Unset any invalid associations $associations = Joomla\Utilities\ArrayHelper::toInteger($associations); foreach ($associations as $tag => $id) { if (!$id) { unset($associations[$tag]); } } // Detecting all item menus $all_language = $table->language == '*'; if ($all_language && !empty($associations)) { JError::raiseNotice(403, JText::_('COM_MENUS_ERROR_ALL_LANGUAGE_ASSOCIATED')); } // Get associationskey for edited item $db = $this->getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('key')) ->from($db->quoteName('#__associations')) ->where($db->quoteName('context') . ' = ' . $db->quote($this->associationsContext)) ->where($db->quoteName('id') . ' = ' . (int) $table->id); $db->setQuery($query); $old_key = $db->loadResult(); // Deleting old associations for the associated items $query = $db->getQuery(true) ->delete($db->quoteName('#__associations')) ->where($db->quoteName('context') . ' = ' . $db->quote($this->associationsContext)); if ($associations) { $query->where('(' . $db->quoteName('id') . ' IN (' . implode(',', $associations) . ') OR ' . $db->quoteName('key') . ' = ' . $db->quote($old_key) . ')' ); } else { $query->where($db->quoteName('key') . ' = ' . $db->quote($old_key)); } $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // Adding self to the association if (!$all_language) { $associations[$table->language] = (int) $table->id; } if (count($associations) > 1) { // Adding new association for these items $key = md5(json_encode($associations)); $query->clear() ->insert('#__associations'); foreach ($associations as $id) { $query->values(((int) $id) . ',' . $db->quote($this->associationsContext) . ',' . $db->quote($key)); } $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } } } // Clean the cache $this->cleanCache(); if (isset($data['link'])) { $base = JUri::base(); $juri = JUri::getInstance($base . $data['link']); $option = $juri->getVar('option'); // Clean the cache parent::cleanCache($option); } return true; } /** * Method to save the reordered nested set tree. * First we save the new order values in the lft values of the changed ids. * Then we invoke the table rebuild to implement the new ordering. * * @param array $idArray Rows identifiers to be reordered * @param array $lft_array lft values of rows to be reordered * * @return boolean false on failuer or error, true otherwise. * * @since 1.6 */ public function saveorder($idArray = null, $lft_array = null) { // Get an instance of the table object. $table = $this->getTable(); if (!$table->saveorder($idArray, $lft_array)) { $this->setError($table->getError()); return false; } // Clean the cache $this->cleanCache(); return true; } /** * Method to change the home state of one or more items. * * @param array $pks A list of the primary keys to change. * @param integer $value The value of the home state. * * @return boolean True on success. * * @since 1.6 */ public function setHome(&$pks, $value = 1) { $table = $this->getTable(); $pks = (array) $pks; $languages = array(); $onehome = false; // Remember that we can set a home page for different languages, // so we need to loop through the primary key array. foreach ($pks as $i => $pk) { if ($table->load($pk)) { if (!array_key_exists($table->language, $languages)) { $languages[$table->language] = true; if ($table->home == $value) { unset($pks[$i]); JError::raiseNotice(403, JText::_('COM_MENUS_ERROR_ALREADY_HOME')); } elseif ($table->menutype == 'main') { // Prune items that you can't change. unset($pks[$i]); JError::raiseWarning(403, JText::_('COM_MENUS_ERROR_MENUTYPE_HOME')); } else { $table->home = $value; if ($table->language == '*') { $table->published = 1; } if (!$this->canSave($table)) { // Prune items that you can't change. unset($pks[$i]); JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED')); } elseif (!$table->check()) { // Prune the items that failed pre-save checks. unset($pks[$i]); JError::raiseWarning(403, $table->getError()); } elseif (!$table->store()) { // Prune the items that could not be stored. unset($pks[$i]); JError::raiseWarning(403, $table->getError()); } } } else { unset($pks[$i]); if (!$onehome) { $onehome = true; JError::raiseNotice(403, JText::sprintf('COM_MENUS_ERROR_ONE_HOME')); } } } } // Clean the cache $this->cleanCache(); return true; } /** * Method to change the published state of one or more records. * * @param array $pks A list of the primary keys to change. * @param integer $value The value of the published state. * * @return boolean True on success. * * @since 1.6 */ public function publish(&$pks, $value = 1) { $table = $this->getTable(); $pks = (array) $pks; // Default menu item existence checks. if ($value != 1) { foreach ($pks as $i => $pk) { if ($table->load($pk) && $table->home && $table->language == '*') { // Prune items that you can't change. JError::raiseWarning(403, JText::_('JLIB_DATABASE_ERROR_MENU_UNPUBLISH_DEFAULT_HOME')); unset($pks[$i]); break; } } } // Clean the cache $this->cleanCache(); // Ensure that previous checks doesn't empty the array if (empty($pks)) { return true; } return parent::publish($pks, $value); } /** * Method to change the title & alias. * * @param integer $parent_id The id of the parent. * @param string $alias The alias. * @param string $title The title. * * @return array Contains the modified title and alias. * * @since 1.6 */ protected function generateNewTitle($parent_id, $alias, $title) { // Alter the title & alias $table = $this->getTable(); while ($table->load(array('alias' => $alias, 'parent_id' => $parent_id))) { if ($title == $table->title) { $title = StringHelper::increment($title); } $alias = StringHelper::increment($alias, 'dash'); } return array($title, $alias); } /** * Custom clean the cache * * @param string $group Cache group name. * @param integer $client_id Application client id. * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('com_menus', 0); parent::cleanCache('com_modules'); parent::cleanCache('mod_menu', 0); parent::cleanCache('mod_menu', 1); } } PKb��\ 0��5<5<)components/com_menus/models/menutypes.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.path'); /** * Menu Item Types Model for Menus. * * @since 1.6 */ class MenusModelMenutypes extends JModelLegacy { /** * A reverse lookup of the base link URL to Title * * @var array */ protected $rlu = array(); /** * Method to auto-populate the model state. * * This method should only be called once per instantiation and is designed * to be called on the first call to the getState() method unless the model * configuration flag to ignore the request is set. * * @return void * * @note Calling getState in this method will result in recursion. * @since 3.0.1 */ protected function populateState() { parent::populateState(); $app = JFactory::getApplication(); $clientId = $app->input->get('client_id', 0); $this->state->set('client_id', $clientId); } /** * Method to get the reverse lookup of the base link URL to Title * * @return array Array of reverse lookup of the base link URL to Title * * @since 1.6 */ public function getReverseLookup() { if (empty($this->rlu)) { $this->getTypeOptions(); } return $this->rlu; } /** * Method to get the available menu item type options. * * @return array Array of groups with menu item types. * * @since 1.6 */ public function getTypeOptions() { jimport('joomla.filesystem.file'); $lang = JFactory::getLanguage(); $list = array(); // Get the list of components. $db = $this->getDbo(); $query = $db->getQuery(true) ->select('name, element AS ' . $db->quoteName('option')) ->from('#__extensions') ->where('type = ' . $db->quote('component')) ->where('enabled = 1') ->order('name ASC'); $db->setQuery($query); $components = $db->loadObjectList(); foreach ($components as $component) { $options = $this->getTypeOptionsByComponent($component->option); if ($options) { $list[$component->name] = $options; // Create the reverse lookup for link-to-name. foreach ($options as $option) { if (isset($option->request)) { $this->addReverseLookupUrl($option); if (isset($option->request['option'])) { $componentLanguageFolder = JPATH_ADMINISTRATOR . '/components/' . $option->request['option']; $lang->load($option->request['option'] . '.sys', JPATH_ADMINISTRATOR, null, false, true) || $lang->load($option->request['option'] . '.sys', $componentLanguageFolder, null, false, true); } } } } } // Allow a system plugin to insert dynamic menu types to the list shown in menus: JEventDispatcher::getInstance()->trigger('onAfterGetMenuTypeOptions', array(&$list, $this)); return $list; } /** * Method to create the reverse lookup for link-to-name. * (can be used from onAfterGetMenuTypeOptions handlers) * * @param JObject $option with request array or string and title public variables * * @return void * * @since 3.1 */ public function addReverseLookupUrl($option) { $this->rlu[MenusHelper::getLinkKey($option->request)] = $option->get('title'); } /** * Get menu types by component. * * @param string $component Component URL option. * * @return array * * @since 1.6 */ protected function getTypeOptionsByComponent($component) { $options = array(); $client = JApplicationHelper::getClientInfo($this->getState('client_id')); $mainXML = $client->path . '/components/' . $component . '/metadata.xml'; if (is_file($mainXML)) { $options = $this->getTypeOptionsFromXml($mainXML, $component); } if (empty($options)) { $options = $this->getTypeOptionsFromMvc($component); } if ($client->id == 1 && empty($options)) { $options = $this->getTypeOptionsFromManifest($component); } return $options; } /** * Get the menu types from an XML file * * @param string $file File path * @param string $component Component option as in URL * * @return array|boolean * * @since 1.6 */ protected function getTypeOptionsFromXml($file, $component) { $options = array(); // Attempt to load the xml file. if (!$xml = simplexml_load_file($file)) { return false; } // Look for the first menu node off of the root node. if (!$menu = $xml->xpath('menu[1]')) { return false; } else { $menu = $menu[0]; } // If we have no options to parse, just add the base component to the list of options. if (!empty($menu['options']) && $menu['options'] == 'none') { // Create the menu option for the component. $o = new JObject; $o->title = (string) $menu['name']; $o->description = (string) $menu['msg']; $o->request = array('option' => $component); $options[] = $o; return $options; } // Look for the first options node off of the menu node. if (!$optionsNode = $menu->xpath('options[1]')) { return false; } else { $optionsNode = $optionsNode[0]; } // Make sure the options node has children. if (!$children = $optionsNode->children()) { return false; } // Process each child as an option. foreach ($children as $child) { if ($child->getName() == 'option') { // Create the menu option for the component. $o = new JObject; $o->title = (string) $child['name']; $o->description = (string) $child['msg']; $o->request = array('option' => $component, (string) $optionsNode['var'] => (string) $child['value']); $options[] = $o; } elseif ($child->getName() == 'default') { // Create the menu option for the component. $o = new JObject; $o->title = (string) $child['name']; $o->description = (string) $child['msg']; $o->request = array('option' => $component); $options[] = $o; } } return $options; } /** * Get menu types from MVC * * @param string $component Component option like in URLs * * @return array|boolean * * @since 1.6 */ protected function getTypeOptionsFromMvc($component) { $options = array(); $client = JApplicationHelper::getClientInfo($this->getState('client_id')); // Get the views for this component. if (is_dir($client->path . '/components/' . $component)) { $folders = JFolder::folders($client->path . '/components/' . $component, '^view[s]?$', false, true); } $path = ''; if (!empty($folders[0])) { $path = $folders[0]; } if (is_dir($path)) { $views = JFolder::folders($path); } else { return false; } foreach ($views as $view) { // Ignore private views. if (strpos($view, '_') !== 0) { // Determine if a metadata file exists for the view. $file = $path . '/' . $view . '/metadata.xml'; if (is_file($file)) { // Attempt to load the xml file. if ($xml = simplexml_load_file($file)) { // Look for the first view node off of the root node. if ($menu = $xml->xpath('view[1]')) { $menu = $menu[0]; // If the view is hidden from the menu, discard it and move on to the next view. if (!empty($menu['hidden']) && $menu['hidden'] == 'true') { unset($xml); continue; } // Do we have an options node or should we process layouts? // Look for the first options node off of the menu node. if ($optionsNode = $menu->xpath('options[1]')) { $optionsNode = $optionsNode[0]; // Make sure the options node has children. if ($children = $optionsNode->children()) { // Process each child as an option. foreach ($children as $child) { if ($child->getName() == 'option') { // Create the menu option for the component. $o = new JObject; $o->title = (string) $child['name']; $o->description = (string) $child['msg']; $o->request = array('option' => $component, 'view' => $view, (string) $optionsNode['var'] => (string) $child['value']); $options[] = $o; } elseif ($child->getName() == 'default') { // Create the menu option for the component. $o = new JObject; $o->title = (string) $child['name']; $o->description = (string) $child['msg']; $o->request = array('option' => $component, 'view' => $view); $options[] = $o; } } } } else { $options = array_merge($options, (array) $this->getTypeOptionsFromLayouts($component, $view)); } } unset($xml); } } else { $options = array_merge($options, (array) $this->getTypeOptionsFromLayouts($component, $view)); } } } return $options; } /** * Get menu types from Component manifest * * @param string $component Component option like in URLs * * @return array|boolean * * @since 3.7.0 */ protected function getTypeOptionsFromManifest($component) { // Load the component manifest $fileName = JPATH_ADMINISTRATOR . '/components/' . $component . '/' . str_replace('com_', '', $component) . '.xml'; if (!is_file($fileName)) { return false; } if (!($manifest = simplexml_load_file($fileName))) { return false; } // Check for a valid XML root tag. if ($manifest->getName() != 'extension') { return false; } $options = array(); // Start with the component root menu. $rootMenu = $manifest->administration->menu; // If the menu item doesn't exist or is hidden do nothing. if (!$rootMenu || in_array((string) $rootMenu['hidden'], array('true', 'hidden'))) { return $options; } // Create the root menu option. $ro = new stdClass; $ro->title = (string) trim($rootMenu); $ro->description = ''; $ro->request = array('option' => $component); // Process submenu options. $submenu = $manifest->administration->submenu; if (!$submenu) { return $options; } foreach ($submenu->menu as $child) { $attributes = $child->attributes(); $o = new stdClass; $o->title = (string) trim($child); $o->description = ''; if ((string) $attributes->link) { parse_str((string) $attributes->link, $request); } else { $request = array(); $request['option'] = $component; $request['act'] = (string) $attributes->act; $request['task'] = (string) $attributes->task; $request['controller'] = (string) $attributes->controller; $request['view'] = (string) $attributes->view; $request['layout'] = (string) $attributes->layout; $request['sub'] = (string) $attributes->sub; } $o->request = array_filter($request, 'strlen'); $options[] = new JObject($o); // Do not repeat the default view link (index.php?option=com_abc). if (count($o->request) == 1) { $ro = null; } } if ($ro) { $options[] = new JObject($ro); } return $options; } /** * Get the menu types from component layouts * * @param string $component Component option as in URLs * @param string $view Name of the view * * @return array * * @since 1.6 */ protected function getTypeOptionsFromLayouts($component, $view) { $options = array(); $layouts = array(); $layoutNames = array(); $lang = JFactory::getLanguage(); $path = ''; $client = JApplicationHelper::getClientInfo($this->getState('client_id')); // Get the views for this component. if (is_dir($client->path . '/components/' . $component)) { $folders = JFolder::folders($client->path . '/components/' . $component, '^view[s]?$', false, true); } if (!empty($folders[0])) { $path = $folders[0] . '/' . $view . '/tmpl'; } if (is_dir($path)) { $layouts = array_merge($layouts, JFolder::files($path, '.xml$', false, true)); } else { return $options; } // Build list of standard layout names foreach ($layouts as $layout) { // Ignore private layouts. if (strpos(basename($layout), '_') === false) { // Get the layout name. $layoutNames[] = basename($layout, '.xml'); } } // Get the template layouts // TODO: This should only search one template -- the current template for this item (default of specified) $folders = JFolder::folders($client->path . '/templates', '', false, true); // Array to hold association between template file names and templates $templateName = array(); foreach ($folders as $folder) { if (is_dir($folder . '/html/' . $component . '/' . $view)) { $template = basename($folder); $lang->load('tpl_' . $template . '.sys', $client->path, null, false, true) || $lang->load('tpl_' . $template . '.sys', $client->path . '/templates/' . $template, null, false, true); $templateLayouts = JFolder::files($folder . '/html/' . $component . '/' . $view, '.xml$', false, true); foreach ($templateLayouts as $layout) { // Get the layout name. $templateLayoutName = basename($layout, '.xml'); // Add to the list only if it is not a standard layout if (array_search($templateLayoutName, $layoutNames) === false) { $layouts[] = $layout; // Set template name array so we can get the right template for the layout $templateName[$layout] = basename($folder); } } } } // Process the found layouts. foreach ($layouts as $layout) { // Ignore private layouts. if (strpos(basename($layout), '_') === false) { $file = $layout; // Get the layout name. $layout = basename($layout, '.xml'); // Create the menu option for the layout. $o = new JObject; $o->title = ucfirst($layout); $o->description = ''; $o->request = array('option' => $component, 'view' => $view); // Only add the layout request argument if not the default layout. if ($layout != 'default') { // If the template is set, add in format template:layout so we save the template name $o->request['layout'] = isset($templateName[$file]) ? $templateName[$file] . ':' . $layout : $layout; } // Load layout metadata if it exists. if (is_file($file)) { // Attempt to load the xml file. if ($xml = simplexml_load_file($file)) { // Look for the first view node off of the root node. if ($menu = $xml->xpath('layout[1]')) { $menu = $menu[0]; // If the view is hidden from the menu, discard it and move on to the next view. if (!empty($menu['hidden']) && $menu['hidden'] == 'true') { unset($xml); unset($o); continue; } // Populate the title and description if they exist. if (!empty($menu['title'])) { $o->title = trim((string) $menu['title']); } if (!empty($menu->message[0])) { $o->description = trim((string) $menu->message[0]); } } } } // Add the layout to the options array. $options[] = $o; } } return $options; } } PKb��\@�"e #components/com_menus/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_menus * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Base controller class for Menu Manager. * * @since 1.6 */ class MenusController extends JControllerLegacy { /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array|boolean $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { JLoader::register('MenusHelper', JPATH_ADMINISTRATOR . '/components/com_menus/helpers/menus.php'); // Check custom administrator menu modules if (JModuleHelper::isAdminMultilang()) { $languages = JLanguageHelper::getInstalledLanguages(1, true); $langCodes = array(); foreach ($languages as $language) { if (isset($language->metadata['nativeName'])) { $languageName = $language->metadata['nativeName']; } else { $languageName = $language->metadata['name']; } $langCodes[$language->metadata['tag']] = $languageName; } $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->qn('m.language')) ->from($db->qn('#__modules', 'm')) ->where($db->qn('m.module') . ' = ' . $db->quote('mod_menu')) ->where($db->qn('m.published') . ' = 1') ->where($db->qn('m.client_id') . ' = 1') ->group($db->qn('m.language')); $mLanguages = $db->setQuery($query)->loadColumn(); // Check if we have a mod_menu module set to All languages or a mod_menu module for each admin language. if (!in_array('*', $mLanguages) && count($langMissing = array_diff(array_keys($langCodes), $mLanguages))) { $app = JFactory::getApplication(); $langMissing = array_intersect_key($langCodes, array_flip($langMissing)); $app->enqueueMessage(JText::sprintf('JMENU_MULTILANG_WARNING_MISSING_MODULES', implode(', ', $langMissing)), 'warning'); } } return parent::display(); } } PKb��\��cc"components/com_plugins/plugins.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); if (!JFactory::getUser()->authorise('core.manage', 'com_plugins')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Plugins'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\�gsss.components/com_plugins/controllers/plugins.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Plugins list controller class. * * @since 1.6 */ class PluginsControllerPlugins extends JControllerAdmin { /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'Plugin', $prefix = 'PluginsModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } } PKb��\:h��-components/com_plugins/controllers/plugin.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Plugin controller class. * * @since 1.6 */ class PluginsControllerPlugin extends JControllerForm { } PKb��\ok�bb!components/com_plugins/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC"> <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_plugins" section="component" /> </fieldset> </config> PKb��\��m�!components/com_plugins/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_plugins"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKb��\����"components/com_plugins/plugins.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_plugins</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_PLUGINS_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>config.xml</filename> <filename>controller.php</filename> <filename>plugins.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_plugins.ini</language> <language tag="en-GB">language/en-GB.com_plugins.sys.ini</language> </languages> </administration> </extension> PKb��\�9components/com_plugins/views/plugin/tmpl/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; foreach ($this->fieldsets as $name => $fieldset) { if (!isset($fieldset->repeat) || isset($fieldset->repeat) && $fieldset->repeat == false) { $label = !empty($fieldset->label) ? JText::_($fieldset->label) : JText::_('COM_PLUGINS_' . $fieldset->name . '_FIELDSET_LABEL', true); $optionsname = 'options-' . $fieldset->name; echo JHtml::_('bootstrap.addTab', 'myTab', $optionsname, $label); if (isset($fieldset->description) && trim($fieldset->description)) { echo '<p class="tip">' . $this->escape(JText::_($fieldset->description)) . '</p>'; } $hidden_fields = ''; foreach ($this->form->getFieldset($name) as $field) { if (!$field->hidden) { ?> <div class="control-group"> <div class="control-label"> <?php echo $field->label; ?> </div> <div class="controls"> <?php echo $field->input; ?> </div> </div> <?php } else { $hidden_fields .= $field->input; } } echo $hidden_fields; echo JHtml::_('bootstrap.endTab'); } } PKb��\���ell1components/com_plugins/views/plugin/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.tooltip'); $this->fieldsets = $this->form->getFieldsets('params'); $input = JFactory::getApplication()->input; // In case of modal $isModal = $input->get('layout') === 'modal' ? true : false; $layout = $isModal ? 'modal' : 'edit'; $tmpl = $isModal || $input->get('tmpl', '', 'cmd') === 'component' ? '&tmpl=component' : ''; JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task === 'plugin.cancel' || document.formvalidator.isValid(document.getElementById('style-form'))) { Joomla.submitform(task, document.getElementById('style-form')); if (task !== 'plugin.apply') { if (self !== top ) { window.top.setTimeout('window.parent.location = window.top.location.href', 1000); window.parent.jQuery('#plugin" . $this->item->extension_id . "Modal').modal('hide'); } } } }; "); ?> <form action="<?php echo JRoute::_('index.php?option=com_plugins&view=plugin&layout=' . $layout . $tmpl . '&extension_id=' . (int) $this->item->extension_id); ?>" method="post" name="adminForm" id="style-form" class="form-validate"> <div class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'general')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'general', JText::_('COM_PLUGINS_PLUGIN')); ?> <div class="row-fluid"> <div class="span9"> <?php if ($this->item->xml) : ?> <?php if ($this->item->xml->description) : ?> <h2> <?php if ($this->item->xml) { echo ($text = (string) $this->item->xml->name) ? JText::_($text) : $this->item->name; } else { echo JText::_('COM_PLUGINS_XML_ERR'); } ?> </h2> <div class="info-labels"> <span class="label hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_PLUGINS_FIELD_FOLDER_LABEL', 'COM_PLUGINS_FIELD_FOLDER_DESC'); ?>"> <?php echo $this->form->getValue('folder'); ?> </span> / <span class="label hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_PLUGINS_FIELD_ELEMENT_LABEL', 'COM_PLUGINS_FIELD_ELEMENT_DESC'); ?>"> <?php echo $this->form->getValue('element'); ?> </span> </div> <div> <?php $short_description = JText::_($this->item->xml->description); $this->fieldset = 'description'; $long_description = JLayoutHelper::render('joomla.edit.fieldset', $this); if (!$long_description) { $truncated = JHtmlString::truncate($short_description, 550, true, false); if (strlen($truncated) > 500) { $long_description = $short_description; $short_description = JHtmlString::truncate($truncated, 250); if ($short_description == $long_description) { $long_description = ''; } } } ?> <p><?php echo $short_description; ?></p> <?php if ($long_description) : ?> <p class="readmore"> <a href="#" onclick="jQuery('.nav-tabs a[href=\'#description\']').tab('show');"> <?php echo JText::_('JGLOBAL_SHOW_FULL_DESCRIPTION'); ?> </a> </p> <?php endif; ?> </div> <?php endif; ?> <?php else : ?> <div class="alert alert-error"><?php echo JText::_('COM_PLUGINS_XML_ERR'); ?></div> <?php endif; ?> <?php $this->fieldset = 'basic'; $html = JLayoutHelper::render('joomla.edit.fieldset', $this); echo $html ? '<hr />' . $html : ''; ?> </div> <div class="span3"> <?php echo JLayoutHelper::render('joomla.edit.global', $this); ?> <div class="form-vertical"> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('ordering'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('ordering'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('folder'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('folder'); ?> </div> </div> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('element'); ?> </div> <div class="controls"> <?php echo $this->form->getInput('element'); ?> </div> </div> </div> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php if (isset($long_description) && $long_description != '') : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'description', JText::_('JGLOBAL_FIELDSET_DESCRIPTION')); ?> <?php echo $long_description; ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php $this->fieldsets = array(); $this->ignore_fieldsets = array('basic', 'description'); echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> </div> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\u�)��1components/com_plugins/views/plugin/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a plugin. * * @since 1.5 */ class PluginsViewPlugin extends JViewLegacy { protected $item; protected $form; protected $state; /** * Display the view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { $this->state = $this->get('State'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $canDo = JHelperContent::getActions('com_plugins'); JToolbarHelper::title(JText::sprintf('COM_PLUGINS_MANAGER_PLUGIN', JText::_($this->item->name)), 'power-cord plugin'); // If not checked out, can save the item. if ($canDo->get('core.edit')) { JToolbarHelper::apply('plugin.apply'); JToolbarHelper::save('plugin.save'); } JToolbarHelper::cancel('plugin.cancel', 'JTOOLBAR_CLOSE'); JToolbarHelper::divider(); // Get the help information for the plugin item. $lang = JFactory::getLanguage(); $help = $this->get('Help'); if ($lang->hasKey($help->url)) { $debug = $lang->setDebug(false); $url = JText::_($help->url); $lang->setDebug($debug); } else { $url = null; } JToolbarHelper::help($help->key, false, $url); } } PKb��\�f{��5components/com_plugins/views/plugins/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = $listOrder == 'ordering'; if ($saveOrder) { $saveOrderingUrl = 'index.php?option=com_plugins&task=plugins.saveOrderAjax&tmpl=component'; JHtml::_('sortablelist.sortable', 'pluginList', 'adminForm', strtolower($listDirn), $saveOrderingUrl); } ?> <form action="<?php echo JRoute::_('index.php?option=com_plugins&view=plugins'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"> </div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('COM_PLUGINS_MSG_MANAGE_NO_PLUGINS'); ?> </div> <?php else : ?> <table class="table table-striped" id="pluginList"> <thead> <tr> <th width="1%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', '', 'ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'enabled', $listDirn, $listOrder); ?> </th> <th class="title"> <?php echo JHtml::_('searchtools.sort', 'COM_PLUGINS_NAME_HEADING', 'name', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_PLUGINS_FOLDER_HEADING', 'folder', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_PLUGINS_ELEMENT_HEADING', 'element', $listDirn, $listOrder); ?> </th> <th width="5%" class="hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'access', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'extension_id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="8"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'ordering'); $canEdit = $user->authorise('core.edit', 'com_plugins'); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id') || $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_plugins') && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>" sortable-group-id="<?php echo $item->folder; ?>"> <td class="order nowrap center hidden-phone"> <?php $iconClass = ''; if (!$canChange) { $iconClass = ' inactive'; } elseif (!$saveOrder) { $iconClass = ' inactive tip-top hasTooltip" title="' . JHtml::_('tooltipText', 'JORDERINGDISABLED'); } ?> <span class="sortable-handler<?php echo $iconClass; ?>"> <span class="icon-menu" aria-hidden="true"></span> </span> <?php if ($canChange && $saveOrder) : ?> <input type="text" style="display:none" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order" /> <?php endif; ?> </td> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->extension_id); ?> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->enabled, $i, 'plugins.', $canChange); ?> </td> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'plugins.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a class="hasTooltip" href="<?php echo JRoute::_('index.php?option=com_plugins&task=plugin.edit&extension_id=' . (int) $item->extension_id); ?>" title="<?php echo JText::_('JACTION_EDIT'); ?>"> <?php echo $item->name; ?></a> <?php else : ?> <?php echo $item->name; ?> <?php endif; ?> </td> <td class="nowrap small hidden-phone"> <?php echo $this->escape($item->folder); ?> </td> <td class="nowrap small hidden-phone"> <?php echo $this->escape($item->element); ?> </td> <td class="small hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <td class="hidden-phone"> <?php echo (int) $item->extension_id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�$��� � 2components/com_plugins/views/plugins/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of plugins. * * @since 1.5 */ class PluginsViewPlugins extends JViewLegacy { protected $items; protected $pagination; protected $state; /** * Display the view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_plugins'); JToolbarHelper::title(JText::_('COM_PLUGINS_MANAGER_PLUGINS'), 'power-cord plugin'); if ($canDo->get('core.edit')) { JToolbarHelper::editList('plugin.edit'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::publish('plugins.publish', 'JTOOLBAR_ENABLE', true); JToolbarHelper::unpublish('plugins.unpublish', 'JTOOLBAR_DISABLE', true); JToolbarHelper::checkin('plugins.checkin'); } if ($canDo->get('core.admin')) { JToolbarHelper::preferences('com_plugins'); } JToolbarHelper::help('JHELP_EXTENSIONS_PLUGIN_MANAGER'); } /** * Returns an array of fields the table can be sorted by. * * @return array Array containing the field name to sort by as the key and display text as value. * * @since 3.0 */ protected function getSortFields() { return array( 'ordering' => JText::_('JGRID_HEADING_ORDERING'), 'enabled' => JText::_('JSTATUS'), 'name' => JText::_('JGLOBAL_TITLE'), 'folder' => JText::_('COM_PLUGINS_FOLDER_HEADING'), 'element' => JText::_('COM_PLUGINS_ELEMENT_HEADING'), 'access' => JText::_('JGRID_HEADING_ACCESS'), 'extension_id' => JText::_('JGRID_HEADING_ID'), ); } } PKb��\a��F` ` *components/com_plugins/helpers/plugins.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Plugins component helper. * * @since 1.6 */ class PluginsHelper { public static $extension = 'com_plugins'; /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void */ public static function addSubmenu($vName) { // No submenu for this component. } /** * Gets a list of the actions that can be performed. * * @return JObject * * @deprecated 3.2 Use JHelperContent::getActions() instead */ public static function getActions() { // Log usage of deprecated function. try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions. return JHelperContent::getActions('com_plugins'); } /** * Returns an array of standard published state filter options. * * @return string The HTML code for the select tag */ public static function publishedOptions() { // Build the active state filter options. $options = array(); $options[] = JHtml::_('select.option', '1', 'JENABLED'); $options[] = JHtml::_('select.option', '0', 'JDISABLED'); return $options; } /** * Returns a list of folders filter options. * * @return string The HTML code for the select tag */ public static function folderOptions() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('DISTINCT(folder) AS value, folder AS text') ->from('#__extensions') ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) ->order('folder'); $db->setQuery($query); try { $options = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } return $options; } /** * Returns a list of elements filter options. * * @return string The HTML code for the select tag */ public static function elementOptions() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('DISTINCT(element) AS value, element AS text') ->from('#__extensions') ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) ->order('element'); $db->setQuery($query); try { $options = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } return $options; } /** * Parse the template file. * * @param string $templateBaseDir Base path to the template directory. * @param string $templateDir Template directory. * * @return JObject */ public function parseXMLTemplateFile($templateBaseDir, $templateDir) { $data = new JObject; // Check of the xml file exists. $filePath = JPath::clean($templateBaseDir . '/templates/' . $templateDir . '/templateDetails.xml'); if (is_file($filePath)) { $xml = JInstaller::parseXMLInstallFile($filePath); if ($xml['type'] != 'template') { return false; } foreach ($xml as $key => $value) { $data->set($key, $value); } } return $data; } } PKb��\������7components/com_plugins/models/fields/pluginordering.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; JFormHelper::loadFieldClass('ordering'); /** * Supports an HTML select list of plugins. * * @since 1.6 */ class JFormFieldPluginordering extends JFormFieldOrdering { /** * The form field type. * * @var string * @since 1.6 */ protected $type = 'Pluginordering'; /** * Builds the query for the ordering list. * * @return JDatabaseQuery The query for the ordering form field. */ protected function getQuery() { $db = JFactory::getDbo(); $folder = $this->form->getValue('folder'); // Build the query for the ordering list. $query = $db->getQuery(true) ->select( array( $db->quoteName('ordering', 'value'), $db->quoteName('name', 'text'), $db->quoteName('type'), $db->quote('folder'), $db->quote('extension_id') ) ) ->from($db->quoteName('#__extensions')) ->where('(type =' . $db->quote('plugin') . 'AND folder=' . $db->quote($folder) . ')') ->order('ordering'); return $query; } /** * Retrieves the current Item's Id. * * @return integer The current item ID. */ protected function getItemId() { return (int) $this->form->getValue('extension_id'); } } PKb��\�:=�55)components/com_plugins/models/plugins.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Methods supporting a list of plugin records. * * @since 1.6 */ class PluginsModelPlugins extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'extension_id', 'a.extension_id', 'name', 'a.name', 'folder', 'a.folder', 'element', 'a.element', 'checked_out', 'a.checked_out', 'checked_out_time', 'a.checked_out_time', 'state', 'a.state', 'enabled', 'a.enabled', 'access', 'a.access', 'access_level', 'ordering', 'a.ordering', 'client_id', 'a.client_id', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'folder', $direction = 'asc') { // Load the filter state. $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string'); $this->setState('filter.search', $search); $accessId = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', '', 'cmd'); $this->setState('filter.access', $accessId); $state = $this->getUserStateFromRequest($this->context . '.filter.enabled', 'filter_enabled', '', 'cmd'); $this->setState('filter.enabled', $state); $folder = $this->getUserStateFromRequest($this->context . '.filter.folder', 'filter_folder', '', 'string'); $this->setState('filter.folder', $folder); $element = $this->getUserStateFromRequest($this->context . '.filter.element', 'filter_element', '', 'string'); $this->setState('filter.element', $element); // Load the parameters. $params = JComponentHelper::getParams('com_plugins'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.access'); $id .= ':' . $this->getState('filter.enabled'); $id .= ':' . $this->getState('filter.folder'); $id .= ':' . $this->getState('filter.element'); return parent::getStoreId($id); } /** * Returns an object list. * * @param JDatabaseQuery $query A database query object. * @param integer $limitstart Offset. * @param integer $limit The number of records. * * @return array */ protected function _getList($query, $limitstart = 0, $limit = 0) { $search = $this->getState('filter.search'); $ordering = $this->getState('list.ordering', 'ordering'); // If "Sort Table By:" is not set, set ordering to name if ($ordering == '') { $ordering = 'name'; } if ($ordering == 'name' || (!empty($search) && stripos($search, 'id:') !== 0)) { $this->_db->setQuery($query); $result = $this->_db->loadObjectList(); $this->translate($result); if (!empty($search)) { $escapedSearchString = $this->refineSearchStringToRegex($search, '/'); foreach ($result as $i => $item) { if (!preg_match("/$escapedSearchString/i", $item->name)) { unset($result[$i]); } } } $orderingDirection = strtolower($this->getState('list.direction')); $direction = ($orderingDirection == 'desc') ? -1 : 1; $result = ArrayHelper::sortObjects($result, $ordering, $direction, true, true); $total = count($result); $this->cache[$this->getStoreId('getTotal')] = $total; if ($total < $limitstart) { $limitstart = 0; $this->setState('list.start', 0); } return array_slice($result, $limitstart, $limit ?: null); } else { if ($ordering == 'ordering') { $query->order('a.folder ASC'); $ordering = 'a.ordering'; } $query->order($this->_db->quoteName($ordering) . ' ' . $this->getState('list.direction')); if ($ordering == 'folder') { $query->order('a.ordering ASC'); } $result = parent::_getList($query, $limitstart, $limit); $this->translate($result); return $result; } } /** * Translate a list of objects. * * @param array &$items The array of objects. * * @return array The array of translated objects. */ protected function translate(&$items) { $lang = JFactory::getLanguage(); foreach ($items as &$item) { $source = JPATH_PLUGINS . '/' . $item->folder . '/' . $item->element; $extension = 'plg_' . $item->folder . '_' . $item->element; $lang->load($extension . '.sys', JPATH_ADMINISTRATOR, null, false, true) || $lang->load($extension . '.sys', $source, null, false, true); $item->name = JText::_($item->name); } } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.extension_id , a.name, a.element, a.folder, a.checked_out, a.checked_out_time,' . ' a.enabled, a.access, a.ordering' ) ) ->from($db->quoteName('#__extensions') . ' AS a') ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')); // Join over the users for the checked out user. $query->select('uc.name AS editor') ->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); // Join over the asset groups. $query->select('ag.title AS access_level') ->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where('a.access = ' . (int) $access); } // Filter by published state. $published = $this->getState('filter.enabled'); if (is_numeric($published)) { $query->where('a.enabled = ' . (int) $published); } elseif ($published === '') { $query->where('(a.enabled IN (0, 1))'); } // Filter by state. $query->where('a.state >= 0'); // Filter by folder. if ($folder = $this->getState('filter.folder')) { $query->where('a.folder = ' . $db->quote($folder)); } // Filter by element. if ($element = $this->getState('filter.element')) { $query->where('a.element = ' . $db->quote($element)); } // Filter by search in name or id. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.extension_id = ' . (int) substr($search, 3)); } } return $query; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 3.5 */ protected function loadFormData() { $data = parent::loadFormData(); // Set the selected filter values for pages that use the JLayouts for filtering $data->list['sortTable'] = $this->state->get('list.ordering'); $data->list['directionTable'] = $this->state->get('list.direction'); return $data; } } PKb��\�� YY.components/com_plugins/models/forms/plugin.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset addfieldpath="/administrator/components/com_plugins/models/fields" > <field name="extension_id" type="text" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" default="0" readonly="true" class="readonly" /> <field name="name" type="hidden" label="COM_PLUGINS_FIELD_NAME_LABEL" description="COM_PLUGINS_FIELD_NAME_DESC" /> <field name="enabled" type="list" label="JSTATUS" description="COM_PLUGINS_FIELD_ENABLED_DESC" class="chzn-color-state" size="1" default="1" > <option value="1">JENABLED</option> <option value="0">JDISABLED</option> </field> <field name="access" type="accesslevel" label="JFIELD_ACCESS_LABEL" description="JFIELD_ACCESS_DESC" size="1" /> <field name="ordering" type="pluginordering" label="JFIELD_ORDERING_LABEL" description="JFIELD_ORDERING_DESC" /> <field name="folder" type="text" label="COM_PLUGINS_FIELD_FOLDER_LABEL" description="COM_PLUGINS_FIELD_FOLDER_DESC" class="readonly" size="20" readonly="true" /> <field name="element" type="text" label="COM_PLUGINS_FIELD_ELEMENT_LABEL" description="COM_PLUGINS_FIELD_ELEMENT_DESC" class="readonly" size="20" readonly="true" /> </fieldset> </form> PKb��\H��9d%d%(components/com_plugins/models/plugin.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; /** * Plugin model. * * @since 1.6 */ class PluginsModelPlugin extends JModelAdmin { /** * @var string The help screen key for the module. * @since 1.6 */ protected $helpKey = 'JHELP_EXTENSIONS_PLUGIN_MANAGER_EDIT'; /** * @var string The help screen base URL for the module. * @since 1.6 */ protected $helpURL; /** * @var array An array of cached plugin items. * @since 1.6 */ protected $_cache; /** * Constructor. * * @param array $config An optional associative array of configuration settings. */ public function __construct($config = array()) { $config = array_merge( array( 'event_after_save' => 'onExtensionAfterSave', 'event_before_save' => 'onExtensionBeforeSave', 'events_map' => array( 'save' => 'extension' ) ), $config ); parent::__construct($config); } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure. * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // The folder and element vars are passed when saving the form. if (empty($data)) { $item = $this->getItem(); $folder = $item->folder; $element = $item->element; } else { $folder = ArrayHelper::getValue($data, 'folder', '', 'cmd'); $element = ArrayHelper::getValue($data, 'element', '', 'cmd'); } // Add the default fields directory JForm::addFieldPath(JPATH_PLUGINS . '/' . $folder . '/' . $element . '/field'); // These variables are used to add data from the plugin XML files. $this->setState('item.folder', $folder); $this->setState('item.element', $element); // Get the form. $form = $this->loadForm('com_plugins.plugin', 'plugin', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } // Modify the form based on access controls. if (!$this->canEditState((object) $data)) { // Disable fields for display. $form->setFieldAttribute('ordering', 'disabled', 'true'); $form->setFieldAttribute('enabled', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is a record you can edit. $form->setFieldAttribute('ordering', 'filter', 'unset'); $form->setFieldAttribute('enabled', 'filter', 'unset'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_plugins.edit.plugin.data', array()); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_plugins.plugin', $data); return $data; } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. */ public function getItem($pk = null) { $pk = (!empty($pk)) ? $pk : (int) $this->getState('plugin.id'); if (!isset($this->_cache[$pk])) { // Get a row instance. $table = $this->getTable(); // Attempt to load the row. $return = $table->load($pk); // Check for a table object error. if ($return === false && $table->getError()) { $this->setError($table->getError()); return false; } // Convert to the JObject before adding other data. $properties = $table->getProperties(1); $this->_cache[$pk] = ArrayHelper::toObject($properties, 'JObject'); // Convert the params field to an array. $registry = new Registry($table->params); $this->_cache[$pk]->params = $registry->toArray(); // Get the plugin XML. $path = JPath::clean(JPATH_PLUGINS . '/' . $table->folder . '/' . $table->element . '/' . $table->element . '.xml'); if (file_exists($path)) { $this->_cache[$pk]->xml = simplexml_load_file($path); } else { $this->_cache[$pk]->xml = null; } } return $this->_cache[$pk]; } /** * Returns a reference to the Table object, always creating it. * * @param string $type The table type to instantiate. * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object */ public function getTable($type = 'Extension', $prefix = 'JTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { // Execute the parent method. parent::populateState(); $app = JFactory::getApplication('administrator'); // Load the User state. $pk = $app->input->getInt('extension_id'); $this->setState('plugin.id', $pk); } /** * Preprocess the form. * * @param JForm $form A form object. * @param mixed $data The data expected for the form. * @param string $group Cache group name. * * @return mixed True if successful. * * @throws Exception if there is an error in the form event. * @since 1.6 */ protected function preprocessForm(JForm $form, $data, $group = 'content') { jimport('joomla.filesystem.path'); $folder = $this->getState('item.folder'); $element = $this->getState('item.element'); $lang = JFactory::getLanguage(); // Load the core and/or local language sys file(s) for the ordering field. $db = $this->getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('element')) ->from($db->quoteName('#__extensions')) ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) ->where($db->quoteName('folder') . ' = ' . $db->quote($folder)); $db->setQuery($query); $elements = $db->loadColumn(); foreach ($elements as $elementa) { $lang->load('plg_' . $folder . '_' . $elementa . '.sys', JPATH_ADMINISTRATOR, null, false, true) || $lang->load('plg_' . $folder . '_' . $elementa . '.sys', JPATH_PLUGINS . '/' . $folder . '/' . $elementa, null, false, true); } if (empty($folder) || empty($element)) { $app = JFactory::getApplication(); $app->redirect(JRoute::_('index.php?option=com_plugins&view=plugins', false)); } $formFile = JPath::clean(JPATH_PLUGINS . '/' . $folder . '/' . $element . '/' . $element . '.xml'); if (!file_exists($formFile)) { throw new Exception(JText::sprintf('COM_PLUGINS_ERROR_FILE_NOT_FOUND', $element . '.xml')); } // Load the core and/or local language file(s). $lang->load('plg_' . $folder . '_' . $element, JPATH_ADMINISTRATOR, null, false, true) || $lang->load('plg_' . $folder . '_' . $element, JPATH_PLUGINS . '/' . $folder . '/' . $element, null, false, true); if (file_exists($formFile)) { // Get the plugin form. if (!$form->loadFile($formFile, false, '//config')) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } } // Attempt to load the xml file. if (!$xml = simplexml_load_file($formFile)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Get the help data from the XML file if present. $help = $xml->xpath('/extension/help'); if (!empty($help)) { $helpKey = trim((string) $help[0]['key']); $helpURL = trim((string) $help[0]['url']); $this->helpKey = $helpKey ?: $this->helpKey; $this->helpURL = $helpURL ?: $this->helpURL; } // Trigger the default form events. parent::preprocessForm($form, $data, $group); } /** * A protected method to get a set of ordering conditions. * * @param object $table A record object. * * @return array An array of conditions to add to add to ordering queries. * * @since 1.6 */ protected function getReorderConditions($table) { $condition = array(); $condition[] = 'type = ' . $this->_db->quote($table->type); $condition[] = 'folder = ' . $this->_db->quote($table->folder); return $condition; } /** * Override method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { // Setup type. $data['type'] = 'plugin'; return parent::save($data); } /** * Get the necessary data to load an item help screen. * * @return object An object with key, url, and local properties for loading the item help screen. * * @since 1.6 */ public function getHelp() { return (object) array('key' => $this->helpKey, 'url' => $this->helpURL); } /** * Custom clean cache method, plugins are cached in 2 places for different clients. * * @param string $group Cache group name. * @param integer $client_id Application client id. * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('com_plugins', 0); parent::cleanCache('com_plugins', 1); } } PKb��\� ��VV%components/com_plugins/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_plugins * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Plugins master display controller. * * @since 1.5 */ class PluginsController extends JControllerLegacy { /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { JLoader::register('PluginsHelper', JPATH_ADMINISTRATOR . '/components/com_plugins/helpers/plugins.php'); // Load the submenu. PluginsHelper::addSubmenu($this->input->get('view', 'plugins')); $view = $this->input->get('view', 'plugins'); $layout = $this->input->get('layout', 'default'); $id = $this->input->getInt('extension_id'); // Check for edit form. if ($view == 'plugin' && $layout == 'edit' && !$this->checkEditId('com_plugins.edit.plugin', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_plugins&view=plugins', false)); return false; } parent::display(); } } PKb��\�{=���0components/com_contenthistory/contenthistory.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.2" method="upgrade"> <name>com_contenthistory</name> <author>Joomla! Project</author> <creationDate>May 2013</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.2.0</version> <description>COM_CONTENTHISTORY_XML_DESCRIPTION</description> <files folder="site"> <filename>contenthistory.php</filename> <filename>index.html</filename> </files> <administration> <files folder="admin"> <filename>controller.php</filename> <filename>contenthistory.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>media</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_contenthistory.ini</language> <language tag="en-GB">language/en-GB.com_contenthistory.sys.ini</language> </languages> </administration> </extension> PKb��\k&''5components/com_contenthistory/controllers/history.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Contenthistory list controller class. * * @since 3.2 */ class ContenthistoryControllerHistory extends JControllerAdmin { /** * Deletes and returns correctly. * * @return void * * @since 3.2 */ public function delete() { $this->checkToken(); // Get items to remove from the request. $cid = $this->input->get('cid', array(), 'array'); if (!is_array($cid) || count($cid) < 1) { JError::raiseWarning(500, JText::_('COM_CONTENTHISTORY_NO_ITEM_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Make sure the item ids are integers $cid = ArrayHelper::toInteger($cid); // Remove the items. if ($model->delete($cid)) { $this->setMessage(JText::plural('COM_CONTENTHISTORY_N_ITEMS_DELETED', count($cid))); } else { $this->setMessage($model->getError()); } } $this->setRedirect( JRoute::_( 'index.php?option=com_contenthistory&view=history&layout=modal&tmpl=component&item_id=' . $this->input->getInt('item_id') . '&type_id=' . $this->input->getInt('type_id') . '&type_alias=' . $this->input->getCmd('type_alias') . '&' . JSession::getFormToken() . '=1', false ) ); } /** * Proxy for getModel. * * @param string $name The name of the model * @param string $prefix The prefix for the model * @param array $config An additional array of parameters * * @return JModelLegacy The model * * @since 3.2 */ public function getModel($name = 'History', $prefix = 'ContenthistoryModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } /** * Toggles the keep forever value for one or more history rows. If it was Yes, changes to No. If No, changes to Yes. * * @return void * * @since 3.2 */ public function keep() { $this->checkToken(); // Get items to remove from the request. $cid = $this->input->get('cid', array(), 'array'); if (!is_array($cid) || count($cid) < 1) { JError::raiseWarning(500, JText::_('COM_CONTENTHISTORY_NO_ITEM_SELECTED')); } else { // Get the model. $model = $this->getModel(); // Make sure the item ids are integers $cid = ArrayHelper::toInteger($cid); // Remove the items. if ($model->keep($cid)) { $this->setMessage(JText::plural('COM_CONTENTHISTORY_N_ITEMS_KEEP_TOGGLE', count($cid))); } else { $this->setMessage($model->getError()); } } $this->setRedirect( JRoute::_( 'index.php?option=com_contenthistory&view=history&layout=modal&tmpl=component&item_id=' . $this->input->getInt('item_id') . '&type_id=' . $this->input->getInt('type_id') . '&type_alias=' . $this->input->getCmd('type_alias') . '&' . JSession::getFormToken() . '=1', false ) ); } } PKb��\ͻ�aff5components/com_contenthistory/controllers/preview.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Contenthistory list controller class. * * @since 3.2 */ class ContenthistoryControllerPreview extends JControllerLegacy { /** * Proxy for getModel. * * @param string $name The name of the model * @param string $prefix The prefix for the model * @param array $config An additional array of parameters * * @return JModelLegacy The model * * @since 3.2 */ public function getModel($name = 'Preview', $prefix = 'ContenthistoryModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } } PKb��\�c���$�$:components/com_contenthistory/views/history/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JSession::checkToken('get') or die(JText::_('JINVALID_TOKEN')); JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); JHtml::_('behavior.multiselect'); JHtml::_('jquery.framework'); $input = JFactory::getApplication()->input; $field = $input->getCmd('field'); $function = 'jSelectContenthistory_' . $field; $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $message = JText::_('COM_CONTENTHISTORY_BUTTON_SELECT_ONE', true); $compareMessage = JText::_('COM_CONTENTHISTORY_BUTTON_SELECT_TWO', true); JText::script('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST'); $deleteMessage = "alert(Joomla.JText._('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST'));"; $aliasArray = explode('.', $this->state->type_alias); $option = (end($aliasArray) == 'category') ? 'com_categories&extension=' . implode('.', array_slice($aliasArray, 0, count($aliasArray) - 1)) : $aliasArray[0]; $filter = JFilterInput::getInstance(); $task = $filter->clean(end($aliasArray)) . '.loadhistory'; $loadUrl = JRoute::_('index.php?option=' . $filter->clean($option) . '&task=' . $task); $deleteUrl = JRoute::_('index.php?option=com_contenthistory&task=history.delete'); $hash = $this->state->get('sha1_hash'); $formUrl = 'index.php?option=com_contenthistory&view=history&layout=modal&tmpl=component&item_id=' . $this->state->get('item_id') . '&type_id=' . $this->state->get('type_id') . '&type_alias=' . $this->state->get('type_alias') . '&' . JSession::getFormToken() . '=1'; JFactory::getDocument()->addScriptDeclaration(" (function ($){ $(document).ready(function (){ $('#toolbar-load').click(function() { var ids = $('input[id*=\'cb\']:checked'); if (ids.length == 1) { // Add version item id to URL var url = $('#toolbar-load').attr('data-url') + '&version_id=' + ids[0].value; $('#content-url').attr('data-url', url); if (window.parent) { window.parent.location = url; } } else { alert('" . $message . "'); } }); $('#toolbar-preview').click(function() { var windowSizeArray = ['width=800, height=600, resizable=yes, scrollbars=yes']; var ids = $('input[id*=\'cb\']:checked'); if (ids.length == 1) { // Add version item id to URL var url = $('#toolbar-preview').attr('data-url') + '&version_id=' + ids[0].value; $('#content-url').attr('data-url', url); if (window.parent) { window.open(url, '', windowSizeArray); return false; } } else { alert('" . $message . "'); } }); $('#toolbar-compare').click(function() { var windowSizeArray = ['width=1000, height=600, resizable=yes, scrollbars=yes']; var ids = $('input[id*=\'cb\']:checked'); if (ids.length == 2) { // Add version item ids to URL var url = $('#toolbar-compare').attr('data-url') + '&id1=' + ids[0].value + '&id2=' + ids[1].value; $('#content-url').attr('data-url', url); if (window.parent) { window.open(url, '', windowSizeArray); return false; } } else { alert('" . $compareMessage . "'); } }); }); })(jQuery); " ); ?> <div class="container-popup"> <div class="btn-group pull-right"> <button id="toolbar-load" type="submit" class="btn hasTooltip" aria-label="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_LOAD_DESC'); ?>" title="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_LOAD_DESC'); ?>" data-url="<?php echo JRoute::_($loadUrl); ?>"> <span class="icon-upload" aria-hidden="true"></span><span class="hidden-phone"><?php echo JText::_('COM_CONTENTHISTORY_BUTTON_LOAD'); ?></span></button> <button id="toolbar-preview" type="button" class="btn hasTooltip" aria-label="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_PREVIEW_DESC'); ?>" title="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_PREVIEW_DESC'); ?>" data-url="<?php echo JRoute::_('index.php?option=com_contenthistory&view=preview&layout=preview&tmpl=component&' . JSession::getFormToken() . '=1'); ?>"> <span class="icon-search" aria-hidden="true"></span><span class="hidden-phone"><?php echo JText::_('COM_CONTENTHISTORY_BUTTON_PREVIEW'); ?></span></button> <button id="toolbar-compare" type="button" class="btn hasTooltip" aria-label="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_COMPARE_DESC'); ?>" title="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_COMPARE_DESC'); ?>" data-url="<?php echo JRoute::_('index.php?option=com_contenthistory&view=compare&layout=compare&tmpl=component&' . JSession::getFormToken() . '=1'); ?>"> <span class="icon-zoom-in" aria-hidden="true"></span><span class="hidden-phone"><?php echo JText::_('COM_CONTENTHISTORY_BUTTON_COMPARE'); ?></span></button> <button onclick="if (document.adminForm.boxchecked.value==0){<?php echo $deleteMessage; ?>}else{ Joomla.submitbutton('history.keep')}" class="btn pointer hasTooltip" aria-label="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_KEEP_DESC'); ?>" title="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_KEEP_DESC'); ?>"> <span class="icon-lock" aria-hidden="true"></span><span class="hidden-phone"><?php echo JText::_('COM_CONTENTHISTORY_BUTTON_KEEP'); ?></span></button> <button onclick="if (document.adminForm.boxchecked.value==0){<?php echo $deleteMessage; ?>}else{ Joomla.submitbutton('history.delete')}" class="btn pointer hasTooltip" aria-label="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_DELETE_DESC'); ?>" title="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_DELETE_DESC'); ?>"> <span class="icon-delete" aria-hidden="true"></span><span class="hidden-phone"><?php echo JText::_('COM_CONTENTHISTORY_BUTTON_DELETE'); ?></span></button> </div> <div class="clearfix"></div> <hr class="hr-condensed" /> <form action="<?php echo JRoute::_($formUrl); ?>" method="post" name="adminForm" id="adminForm"> <table class="table table-striped table-condensed"> <thead> <tr> <th width="1%" class="center"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> <th width="15%"> <?php echo JText::_('JDATE'); ?> </th> <th width="15%" class="nowrap hidden-phone"> <?php echo JText::_('COM_CONTENTHISTORY_VERSION_NOTE'); ?> </th> <th width="10%" class="nowrap"> <?php echo JText::_('COM_CONTENTHISTORY_KEEP_VERSION'); ?> </th> <th width="15%" class="nowrap hidden-phone"> <?php echo JText::_('JAUTHOR'); ?> </th> <th width="10%" class="nowrap center"> <?php echo JText::_('COM_CONTENTHISTORY_CHARACTER_COUNT'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="15"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $i = 0; ?> <?php foreach ($this->items as $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->version_id); ?> </td> <td> <a class="save-date" onclick="window.open(this.href,'win2','width=800,height=600,resizable=yes,scrollbars=yes'); return false;" href="<?php echo JRoute::_('index.php?option=com_contenthistory&view=preview&layout=preview&tmpl=component&' . JSession::getFormToken() . '=1&version_id=' . $item->version_id); ?>"> <?php echo JHtml::_('date', $item->save_date, JText::_('DATE_FORMAT_LC6')); ?> </a> <?php if ($item->sha1_hash == $hash) : ?> <span class="icon-featured" aria-hidden="true"><span class="element-invisible"><?php echo JText::_('JFEATURED'); ?></span></span> <?php endif; ?> </td> <td class="hidden-phone"> <?php echo htmlspecialchars($item->version_note); ?> </td> <td> <?php if ($item->keep_forever) : ?> <a class="btn btn-mini active" rel="tooltip" href="javascript:void(0);" onclick="return listItemTask('cb<?php echo $i; ?>','history.keep')" data-original-title="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_KEEP_TOGGLE_OFF'); ?>"> <?php echo JText::_('JYES'); ?> <span class="icon-lock" aria-hidden="true"></span> </a> <?php else : ?> <a class="btn btn-mini active" rel="tooltip" href="javascript:void(0);" onclick="return listItemTask('cb<?php echo $i; ?>','history.keep')" data-original-title="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_KEEP_TOGGLE_ON'); ?>"> <?php echo JText::_('JNO'); ?> </a> <?php endif; ?> </td> <td class="hidden-phone"> <?php echo htmlspecialchars($item->editor); ?> </td> <td class="center"> <?php echo number_format((int) $item->character_count, 0, JText::_('DECIMALS_SEPARATOR'), JText::_('THOUSANDS_SEPARATOR')); ?> </td> </tr> <?php $i++; ?> <?php endforeach; ?> </tbody> </table> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </form> </div> PKb��\jCg��9components/com_contenthistory/views/history/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of contenthistory. * * @since 3.2 */ class ContenthistoryViewHistory extends JViewLegacy { protected $items; protected $pagination; protected $state; /** * Method to display the view. * * @param string $tpl A template file to load. [optional] * * @return mixed Exception on failure, void on success. * * @since 3.2 */ public function display($tpl = null) { $this->state = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } return parent::display($tpl); } } PKb��\���I��<components/com_contenthistory/views/preview/tmpl/preview.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JSession::checkToken('get') or die(JText::_('JINVALID_TOKEN')); ?> <h3> <?php echo JText::sprintf('COM_CONTENTHISTORY_PREVIEW_SUBTITLE_DATE', $this->item->save_date); ?> <?php if ($this->item->version_note) : ?> <?php echo JText::sprintf('COM_CONTENTHISTORY_PREVIEW_SUBTITLE', $this->item->version_note); ?> <?php endif; ?> </h3> <table class="table table-striped" > <thead><tr> <th width="25%"><?php echo JText::_('COM_CONTENTHISTORY_PREVIEW_FIELD'); ?></th> <th><?php echo JText::_('COM_CONTENTHISTORY_PREVIEW_VALUE'); ?></th> </tr></thead> <tbody> <?php foreach ($this->item->data as $name => $value) : ?> <tr> <?php if (is_object($value->value)) : ?> <td><strong><?php echo $value->label; ?></strong></td> <td></td><tr> <?php foreach ($value->value as $subName => $subValue) : ?> <?php if ($subValue) : ?> <tr> <td><i> <?php echo $subValue->label; ?></i></td> <td><?php echo $subValue->value; ?></td> </tr> <?php endif; ?> <?php endforeach; ?> <?php else : ?> <td><strong><?php echo $value->label; ?></strong></td> <td><?php echo $value->value; ?></td> <?php endif; ?> </tr> <?php endforeach; ?> </tbody> </table> PKb��\Z=`�mm9components/com_contenthistory/views/preview/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of contenthistory. * * @since 1.5 */ class ContenthistoryViewPreview extends JViewLegacy { protected $items; protected $state; /** * Method to display the view. * * @param string $tpl A template file to load. [optional] * * @return mixed Exception on failure, void on success. * * @since 3.2 */ public function display($tpl = null) { $this->state = $this->get('State'); $this->item = $this->get('Item'); if (false === $this->item) { JFactory::getLanguage()->load('com_content', JPATH_SITE, null, true); JError::raiseError(404, JText::_('COM_CONTENT_ERROR_ARTICLE_NOT_FOUND')); return false; } // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } return parent::display($tpl); } } PKb��\}<components/com_contenthistory/views/compare/tmpl/compare.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JSession::checkToken('get') or die(JText::_('JINVALID_TOKEN')); $version2 = $this->items[0]; $version1 = $this->items[1]; $object1 = $version1->data; $object2 = $version2->data; JHtml::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . '/helpers/html'); JHtml::_('textdiff.textdiff', 'diff'); JFactory::getDocument()->addScriptDeclaration(" (function ($){ $(document).ready(function (){ jQuery('.diffhtml, .diffhtml-header').hide(); }); })(jQuery); " ); ?> <fieldset> <legend> <?php echo JText::sprintf('COM_CONTENTHISTORY_COMPARE_TITLE'); ?> <div class="btn-group pull-right"> <button id="toolbar-all-rows" class="btn hasTooltip" title="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_COMPARE_ALL_ROWS_DESC'); ?>" onclick="jQuery('.items-equal').show(); jQuery('#toolbar-all-rows').hide(); jQuery('#toolbar-changed-rows').show()" style="display:none" > <?php echo JText::_('COM_CONTENTHISTORY_BUTTON_COMPARE_ALL_ROWS'); ?></button> <button id="toolbar-changed-rows" class="btn hasTooltip" title="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_COMPARE_CHANGED_ROWS_DESC'); ?>" onclick="jQuery('.items-equal').hide(); jQuery('#toolbar-all-rows').show(); jQuery('#toolbar-changed-rows').hide()"> <?php echo JText::_('COM_CONTENTHISTORY_BUTTON_COMPARE_CHANGED_ROWS'); ?></button> <button class="diff-header btn hasTooltip" title="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_COMPARE_HTML_DESC'); ?>" onclick="jQuery('.diffhtml, .diffhtml-header').show(); jQuery('.diff, .diff-header').hide()"> <span class="icon-wrench" aria-hidden="true"></span> <?php echo JText::_('COM_CONTENTHISTORY_BUTTON_COMPARE_HTML'); ?></button> <button class="diffhtml-header btn hasTooltip" title="<?php echo JText::_('COM_CONTENTHISTORY_BUTTON_COMPARE_TEXT_DESC'); ?>" onclick="jQuery('.diffhtml, .diffhtml-header').hide(); jQuery('.diff, .diff-header').show()"> <span class="icon-pencil" aria-hidden="true"></span> <?php echo JText::_('COM_CONTENTHISTORY_BUTTON_COMPARE_TEXT'); ?></button> </div> </legend> <table id="diff" class="table table-striped table-condensed"> <thead><tr> <th width="25%"><?php echo JText::_('COM_CONTENTHISTORY_PREVIEW_FIELD'); ?></th> <th style="display:none" /> <th style="display:none" /> <th><?php echo JText::sprintf('COM_CONTENTHISTORY_COMPARE_VALUE1', $version1->save_date, $version1->version_note); ?></th> <th><?php echo JText::sprintf('COM_CONTENTHISTORY_COMPARE_VALUE2', $version2->save_date, $version2->version_note); ?></th> <th class="diff-header"><?php echo JText::_('COM_CONTENTHISTORY_COMPARE_DIFF'); ?></th> <th class="diffhtml-header"><?php echo JText::_('COM_CONTENTHISTORY_COMPARE_DIFF'); ?></th> </tr></thead> <tbody> <?php foreach ($object1 as $name => $value) : ?> <?php $rowClass = ($value->value == $object2->$name->value) ? 'items-equal' : 'items-not-equal'; ?> <tr class="<?php echo $rowClass; ?>"> <?php if (is_object($value->value)) : ?> <td><strong><?php echo $value->label; ?></strong></td> <td /><td /><td /> <?php foreach ($value->value as $subName => $subValue) : ?> <?php $newSubValue = isset($object2->$name->value->$subName->value) ? $object2->$name->value->$subName->value : ''; ?> <?php if ($subValue->value || $newSubValue) : ?> <?php $rowClass = ($subValue->value == $newSubValue) ? 'items-equal' : 'items-not-equal'; ?> <tr class="<?php echo $rowClass; ?>"> <td><i> <?php echo $subValue->label; ?></i></td> <td class="originalhtml" style="display:none" ><?php echo htmlspecialchars($subValue->value, ENT_COMPAT, 'UTF-8'); ?></td> <td class="changedhtml" style="display:none" ><?php echo htmlspecialchars($newSubValue, ENT_COMPAT, 'UTF-8'); ?></td> <td class="original"><?php echo $subValue->value; ?></td> <td class="changed"><?php echo $newSubValue; ?></td> <td class="diff" /> <td class="diffhtml" /> </tr> <?php endif; ?> <?php endforeach; ?> <?php else : ?> <td><strong><?php echo $value->label; ?></strong></td> <td class="originalhtml" style="display:none" ><?php echo htmlspecialchars($value->value); ?></td> <?php $object2->$name->value = is_object($object2->$name->value) ? json_encode($object2->$name->value) : $object2->$name->value; ?> <td class="changedhtml" style="display:none" ><?php echo htmlspecialchars($object2->$name->value, ENT_COMPAT, 'UTF-8'); ?></td> <td class="original"><?php echo $value->value; ?></td> <td class="changed"><?php echo $object2->$name->value; ?></td> <td class="diff" /> <td class="diffhtml" /> <?php endif; ?> </tr> <?php endforeach; ?> </tbody> </table> </fieldset> PKb��\7"˼��9components/com_contenthistory/views/compare/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of contenthistory. * * @since 3.2 */ class ContenthistoryViewCompare extends JViewLegacy { protected $items; protected $state; /** * Method to display the view. * * @param string $tpl A template file to load. [optional] * * @return mixed Exception on failure, void on success. * * @since 3.2 */ public function display($tpl = null) { $this->state = $this->get('State'); $this->items = $this->get('Items'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } return parent::display($tpl); } } PKb��\�|x ��7components/com_contenthistory/helpers/html/textdiff.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_PLATFORM') or die; /** * HTML utility class for creating text diffs using jQuery, diff_patch_match.js and jquery.pretty-text-diff.js JavaScript libraries. * * @since 3.2 * * @deprecated 4.0 No replacement */ abstract class JHtmlTextdiff { /** * @var array Array containing information for loaded files * @since 3.2 */ protected static $loaded = array(); /** * Method to load Javascript text diff * * @param string $containerId DOM id of the element where the diff will be rendered * * @return void * * @since 3.2 */ public static function textdiff($containerId) { // Only load once if (isset(static::$loaded[__METHOD__])) { return; } // Depends on jQuery UI JHtml::_('bootstrap.framework'); JHtml::_('script', 'com_contenthistory/diff_match_patch.js', array('version' => 'auto', 'relative' => true)); JHtml::_('script', 'com_contenthistory/jquery.pretty-text-diff.min.js', array('version' => 'auto', 'relative' => true)); JHtml::_('stylesheet', 'com_contenthistory/jquery.pretty-text-diff.css', array('version' => 'auto', 'relative' => true)); // Attach diff to document JFactory::getDocument()->addScriptDeclaration(" (function ($){ $(document).ready(function (){ $('#" . $containerId . " tr').prettyTextDiff(); }); })(jQuery); " ); // Set static array static::$loaded[__METHOD__] = true; return; } } PKb��\?4,,8components/com_contenthistory/helpers/contenthistory.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Categories helper. * * @since 3.2 */ class ContenthistoryHelper { /** * Method to put all field names, including nested ones, in a single array for easy lookup. * * @param stdClass $object Standard class object that may contain one level of nested objects. * * @return array Associative array of all field names, including ones in a nested object. * * @since 3.2 */ public static function createObjectArray($object) { $result = array(); if ($object === null) { return $result; } foreach ($object as $name => $value) { $result[$name] = $value; if (is_object($value)) { foreach ($value as $subName => $subValue) { $result[$subName] = $subValue; } } } return $result; } /** * Method to decode JSON-encoded fields in a standard object. Used to unpack JSON strings in the content history data column. * * @param stdClass $jsonString Standard class object that may contain one or more JSON-encoded fields. * * @return stdClass Object with any JSON-encoded fields unpacked. * * @since 3.2 */ public static function decodeFields($jsonString) { $object = json_decode($jsonString); if (is_object($object)) { foreach ($object as $name => $value) { if ($subObject = json_decode($value)) { $object->$name = $subObject; } } } return $object; } /** * Method to get field labels for the fields in the JSON-encoded object. * First we see if we can find translatable labels for the fields in the object. * We translate any we can find and return an array in the format object->name => label. * * @param stdClass $object Standard class object in the format name->value. * @param JTableContenttype $typesTable Table object with content history options. * * @return stdClass Contains two associative arrays. * $formValues->labels in the format name => label (for example, 'id' => 'Article ID'). * $formValues->values in the format name => value (for example, 'state' => 'Published'. * This translates the text from the selected option in the form. * * @since 3.2 */ public static function getFormValues($object, JTableContenttype $typesTable) { $labels = array(); $values = array(); $expandedObjectArray = static::createObjectArray($object); static::loadLanguageFiles($typesTable->type_alias); if ($formFile = static::getFormFile($typesTable)) { if ($xml = simplexml_load_file($formFile)) { // Now we need to get all of the labels from the form $fieldArray = $xml->xpath('//field'); $fieldArray = array_merge($fieldArray, $xml->xpath('//fields')); foreach ($fieldArray as $field) { if ($label = (string) $field->attributes()->label) { $labels[(string) $field->attributes()->name] = JText::_($label); } } // Get values for any list type fields $listFieldArray = $xml->xpath('//field[@type="list" or @type="radio"]'); foreach ($listFieldArray as $field) { $name = (string) $field->attributes()->name; if (isset($expandedObjectArray[$name])) { $optionFieldArray = $field->xpath('option[@value="' . $expandedObjectArray[$name] . '"]'); $valueText = null; if (is_array($optionFieldArray) && count($optionFieldArray)) { $valueText = trim((string) $optionFieldArray[0]); } $values[(string) $field->attributes()->name] = JText::_($valueText); } } } } $result = new stdClass; $result->labels = $labels; $result->values = $values; return $result; } /** * Method to get the XML form file for this component. Used to get translated field names for history preview. * * @param JTableContenttype $typesTable Table object with content history options. * * @return mixed JModel object if successful, false if no model found. * * @since 3.2 */ public static function getFormFile(JTableContenttype $typesTable) { $result = false; jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); // First, see if we have a file name in the $typesTable $options = json_decode($typesTable->content_history_options); if (is_object($options) && isset($options->formFile) && JFile::exists(JPATH_ROOT . '/' . $options->formFile)) { $result = JPATH_ROOT . '/' . $options->formFile; } else { $aliasArray = explode('.', $typesTable->type_alias); if (count($aliasArray) == 2) { $component = ($aliasArray[1] == 'category') ? 'com_categories' : $aliasArray[0]; $path = JFolder::makeSafe(JPATH_ADMINISTRATOR . '/components/' . $component . '/models/forms/'); $file = JFile::makeSafe($aliasArray[1] . '.xml'); $result = JFile::exists($path . $file) ? $path . $file : false; } } return $result; } /** * Method to query the database using values from lookup objects. * * @param stdClass $lookup The std object with the values needed to do the query. * @param mixed $value The value used to find the matching title or name. Typically the id. * * @return mixed Value from database (for example, name or title) on success, false on failure. * * @since 3.2 */ public static function getLookupValue($lookup, $value) { $result = false; if (isset($lookup->sourceColumn) && isset($lookup->targetTable) && isset($lookup->targetColumn)&& isset($lookup->displayColumn)) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName($lookup->displayColumn)) ->from($db->quoteName($lookup->targetTable)) ->where($db->quoteName($lookup->targetColumn) . ' = ' . $db->quote($value)); $db->setQuery($query); try { $result = $db->loadResult(); } catch (Exception $e) { // Ignore any errors and just return false return false; } } return $result; } /** * Method to remove fields from the object based on values entered in the #__content_types table. * * @param stdClass $object Object to be passed to view layout file. * @param JTableContenttype $typeTable Table object with content history options. * * @return stdClass object with hidden fields removed. * * @since 3.2 */ public static function hideFields($object, JTableContenttype $typeTable) { if ($options = json_decode($typeTable->content_history_options)) { if (isset($options->hideFields) && is_array($options->hideFields)) { foreach ($options->hideFields as $field) { unset($object->$field); } } } return $object; } /** * Method to load the language files for the component whose history is being viewed. * * @param string $typeAlias The type alias, for example 'com_content.article'. * * @return void * * @since 3.2 */ public static function loadLanguageFiles($typeAlias) { $aliasArray = explode('.', $typeAlias); if (is_array($aliasArray) && count($aliasArray) == 2) { $component = ($aliasArray[1] == 'category') ? 'com_categories' : $aliasArray[0]; $lang = JFactory::getLanguage(); /** * Loading language file from the administrator/language directory then * loading language file from the administrator/components/extension/language directory */ $lang->load($component, JPATH_ADMINISTRATOR, null, false, true) || $lang->load($component, JPath::clean(JPATH_ADMINISTRATOR . '/components/' . $component), null, false, true); // Force loading of backend global language file $lang->load('joomla', JPath::clean(JPATH_ADMINISTRATOR), null, false, true); } } /** * Method to create object to pass to the layout. Format is as follows: * field is std object with name, value. * * Value can be a std object with name, value pairs. * * @param stdClass $object The std object from the JSON string. Can be nested 1 level deep. * @param stdClass $formValues Standard class of label and value in an associative array. * * @return stdClass Object with translated labels where available * * @since 3.2 */ public static function mergeLabels($object, $formValues) { $result = new stdClass; if ($object === null) { return $result; } $labelsArray = $formValues->labels; $valuesArray = $formValues->values; foreach ($object as $name => $value) { $result->$name = new stdClass; $result->$name->name = $name; $result->$name->value = isset($valuesArray[$name]) ? $valuesArray[$name] : $value; $result->$name->label = isset($labelsArray[$name]) ? $labelsArray[$name] : $name; if (is_object($value)) { $subObject = new stdClass; foreach ($value as $subName => $subValue) { $subObject->$subName = new stdClass; $subObject->$subName->name = $subName; $subObject->$subName->value = isset($valuesArray[$subName]) ? $valuesArray[$subName] : $subValue; $subObject->$subName->label = isset($labelsArray[$subName]) ? $labelsArray[$subName] : $subName; $result->$name->value = $subObject; } } } return $result; } /** * Method to prepare the object for the preview and compare views. * * @param JTableContenthistory $table Table object loaded with data. * * @return stdClass Object ready for the views. * * @since 3.2 */ public static function prepareData(JTableContenthistory $table) { $object = static::decodeFields($table->version_data); $typesTable = JTable::getInstance('Contenttype'); $typesTable->load(array('type_id' => $table->ucm_type_id)); $formValues = static::getFormValues($object, $typesTable); $object = static::mergeLabels($object, $formValues); $object = static::hideFields($object, $typesTable); $object = static::processLookupFields($object, $typesTable); return $object; } /** * Method to process any lookup values found in the content_history_options column for this table. * This allows category title and user name to be displayed instead of the id column. * * @param stdClass $object The std object from the JSON string. Can be nested 1 level deep. * @param JTableContenttype $typesTable Table object loaded with data. * * @return stdClass Object with lookup values inserted. * * @since 3.2 */ public static function processLookupFields($object, JTableContenttype $typesTable) { if ($options = json_decode($typesTable->content_history_options)) { if (isset($options->displayLookup) && is_array($options->displayLookup)) { foreach ($options->displayLookup as $lookup) { $sourceColumn = isset($lookup->sourceColumn) ? $lookup->sourceColumn : false; $sourceValue = isset($object->$sourceColumn->value) ? $object->$sourceColumn->value : false; if ($sourceColumn && $sourceValue && ($lookupValue = static::getLookupValue($lookup, $sourceValue))) { $object->$sourceColumn->value = $lookupValue; } } } } return $object; } } PKb��\�+��0components/com_contenthistory/contenthistory.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Disallow unauthenticated users if (JFactory::getUser()->guest) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Contenthistory', array('base_path' => JPATH_COMPONENT_ADMINISTRATOR)); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\6[M?�(�(0components/com_contenthistory/models/history.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Methods supporting a list of contenthistory records. * * @since 3.2 */ class ContenthistoryModelHistory extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JControllerLegacy * @since 3.2 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'version_id', 'h.version_id', 'version_note', 'h.version_note', 'save_date', 'h.save_date', 'editor_user_id', 'h.editor_user_id', ); } parent::__construct($config); } /** * Method to test whether a record is editable * * @param JTableContenthistory $record A JTable object. * * @return boolean True if allowed to edit the record. Defaults to the permission set in the component. * * @since 3.2 */ protected function canEdit($record) { $result = false; if (!empty($record->ucm_type_id)) { // Check that the type id matches the type alias $typeAlias = JFactory::getApplication()->input->get('type_alias'); /** @var JTableContenttype $contentTypeTable */ $contentTypeTable = JTable::getInstance('Contenttype', 'JTable'); if ($contentTypeTable->getTypeId($typeAlias) == $record->ucm_type_id) { /** * Make sure user has edit privileges for this content item. Note that we use edit permissions * for the content item, not delete permissions for the content history row. */ $user = JFactory::getUser(); $result = $user->authorise('core.edit', $typeAlias . '.' . (int) $record->ucm_item_id); } // Finally try session (this catches edit.own case too) if (!$result) { $contentTypeTable->load($record->ucm_type_id); $typeEditables = (array) JFactory::getApplication()->getUserState(str_replace('.', '.edit.', $contentTypeTable->type_alias) . '.id'); $result = in_array((int) $record->ucm_item_id, $typeEditables); } } return $result; } /** * Method to test whether a history record can be deleted. Note that we check whether we have edit permissions * for the content item row. * * @param JTableContenthistory $record A JTable object. * * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. * * @since 3.6 */ protected function canDelete($record) { return $this->canEdit($record); } /** * Method to delete one or more records from content history table. * * @param array $pks An array of record primary keys. * * @return boolean True if successful, false if an error occurs. * * @since 3.2 */ public function delete(&$pks) { $pks = (array) $pks; $table = $this->getTable(); // Iterate the items to delete each one. foreach ($pks as $i => $pk) { if ($table->load($pk)) { if ($table->keep_forever === "1") { unset($pks[$i]); continue; } if ($this->canEdit($table)) { if (!$table->delete($pk)) { $this->setError($table->getError()); return false; } } else { // Prune items that you can't change. unset($pks[$i]); $error = $this->getError(); if ($error) { try { JLog::add($error, JLog::WARNING, 'jerror'); } catch (RuntimeException $exception) { JFactory::getApplication()->enqueueMessage($error, 'warning'); } return false; } else { try { JLog::add(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED'), JLog::WARNING, 'jerror'); } catch (RuntimeException $exception) { JFactory::getApplication()->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED'), 'warning'); } return false; } } } else { $this->setError($table->getError()); return false; } } // Clear the component's cache $this->cleanCache(); return true; } /** * Method to get an array of data items. * * @return mixed An array of data items on success, false on failure. * * @since 3.4.5 */ public function getItems() { $items = parent::getItems(); $user = JFactory::getUser(); if ($items === false) { return false; } // This should be an array with at least one element if (!is_array($items) || !isset($items[0])) { return $items; } // Get the content type's record so we can check ACL /** @var JTableContenttype $contentTypeTable */ $contentTypeTable = JTable::getInstance('Contenttype'); $ucmTypeId = $items[0]->ucm_type_id; if (!$contentTypeTable->load($ucmTypeId)) { // Assume a failure to load the content type means broken data, abort mission return false; } // Access check if ($user->authorise('core.edit', $contentTypeTable->type_alias . '.' . (int) $items[0]->ucm_item_id) || $this->canEdit($items[0])) { return $items; } else { $this->setError(JText::_('JERROR_ALERTNOAUTHOR')); return false; } } /** * Method to get a table object, load it if necessary. * * @param string $type The table name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A JTable object * * @since 3.2 */ public function getTable($type = 'Contenthistory', $prefix = 'JTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to toggle on and off the keep forever value for one or more records from content history table. * * @param array $pks An array of record primary keys. * * @return boolean True if successful, false if an error occurs. * * @since 3.2 */ public function keep(&$pks) { $pks = (array) $pks; $table = $this->getTable(); // Iterate the items to delete each one. foreach ($pks as $i => $pk) { if ($table->load($pk)) { if ($this->canEdit($table)) { $table->keep_forever = $table->keep_forever ? 0 : 1; if (!$table->store()) { $this->setError($table->getError()); return false; } } else { // Prune items that you can't change. unset($pks[$i]); $error = $this->getError(); if ($error) { try { JLog::add($error, JLog::WARNING, 'jerror'); } catch (RuntimeException $exception) { JFactory::getApplication()->enqueueMessage($error, 'warning'); } return false; } else { try { JLog::add(JText::_('COM_CONTENTHISTORY_ERROR_KEEP_NOT_PERMITTED'), JLog::WARNING, 'jerror'); } catch (RuntimeException $exception) { JFactory::getApplication()->enqueueMessage(JText::_('COM_CONTENTHISTORY_ERROR_KEEP_NOT_PERMITTED'), 'warning'); } return false; } } } else { $this->setError($table->getError()); return false; } } // Clear the component's cache $this->cleanCache(); return true; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 3.2 */ protected function populateState($ordering = 'h.save_date', $direction = 'DESC') { $input = JFactory::getApplication()->input; $itemId = $input->get('item_id', 0, 'integer'); $typeId = $input->get('type_id', 0, 'integer'); $typeAlias = $input->get('type_alias', '', 'string'); $this->setState('item_id', $itemId); $this->setState('type_id', $typeId); $this->setState('type_alias', $typeAlias); $this->setState('sha1_hash', $this->getSha1Hash()); // Load the parameters. $params = JComponentHelper::getParams('com_contenthistory'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * * @since 3.2 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'h.version_id, h.ucm_item_id, h.ucm_type_id, h.version_note, h.save_date, h.editor_user_id,' . 'h.character_count, h.sha1_hash, h.version_data, h.keep_forever' ) ) ->from($db->quoteName('#__ucm_history') . ' AS h') ->where($db->quoteName('h.ucm_item_id') . ' = ' . (int) $this->getState('item_id')) ->where($db->quoteName('h.ucm_type_id') . ' = ' . (int) $this->getState('type_id')) // Join over the users for the editor ->select('uc.name AS editor') ->join('LEFT', '#__users AS uc ON uc.id = h.editor_user_id'); // Add the list ordering clause. $orderCol = $this->state->get('list.ordering'); $orderDirn = $this->state->get('list.direction'); $query->order($db->quoteName($orderCol) . $orderDirn); return $query; } /** * Get the sha1 hash value for the current item being edited. * * @return string sha1 hash of row data * * @since 3.2 */ protected function getSha1Hash() { $result = false; $typeTable = JTable::getInstance('Contenttype', 'JTable'); $typeId = JFactory::getApplication()->input->getInteger('type_id', 0); $typeTable->load($typeId); $typeAliasArray = explode('.', $typeTable->type_alias); JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/' . $typeAliasArray[0] . '/tables'); $contentTable = $typeTable->getContentTable(); $keyValue = JFactory::getApplication()->input->getInteger('item_id', 0); if ($contentTable && $contentTable->load($keyValue)) { $helper = new JHelper; $dataObject = $helper->getDataObject($contentTable); $result = $this->getTable('Contenthistory', 'JTable')->getSha1(json_encode($dataObject), $typeTable); } return $result; } } PKb��\����0components/com_contenthistory/models/preview.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('ContenthistoryHelper', JPATH_ADMINISTRATOR . '/components/com_contenthistory/helpers/contenthistory.php'); /** * Methods supporting a list of contenthistory records. * * @since 3.2 */ class ContenthistoryModelPreview extends JModelItem { /** * Method to get a version history row. * * @return stdClass|boolean On success, standard object with row data. False on failure. * * @since 3.2 */ public function getItem() { /** @var JTableContenthistory $table */ $table = JTable::getInstance('Contenthistory'); $versionId = JFactory::getApplication()->input->getInt('version_id'); if (!$table->load($versionId)) { return false; } // Get the content type's record so we can check ACL /** @var JTableContenttype $contentTypeTable */ $contentTypeTable = JTable::getInstance('Contenttype'); if (!$contentTypeTable->load($table->ucm_type_id)) { // Assume a failure to load the content type means broken data, abort mission return false; } $user = JFactory::getUser(); // Access check if ($user->authorise('core.edit', $contentTypeTable->type_alias . '.' . (int) $table->ucm_item_id) || $this->canEdit($table)) { $return = true; } else { $this->setError(JText::_('JERROR_ALERTNOAUTHOR')); return false; } // Good to go, finish processing the data if ($return == true) { $result = new stdClass; $result->version_note = $table->version_note; $result->data = ContenthistoryHelper::prepareData($table); // Let's use custom calendars when present $result->save_date = JHtml::_('date', $table->save_date, JText::_('DATE_FORMAT_LC6')); $dateProperties = array ( 'modified_time', 'created_time', 'modified', 'created', 'checked_out_time', 'publish_up', 'publish_down', ); foreach ($dateProperties as $dateProperty) { if (array_key_exists($dateProperty, $result->data) && $result->data->$dateProperty->value != '0000-00-00 00:00:00') { $result->data->$dateProperty->value = JHtml::_('date', $result->data->$dateProperty->value, JText::_('DATE_FORMAT_LC6')); } } return $result; } } /** * Method to test whether a record is editable * * @param JTableContenthistory $record A JTable object. * * @return boolean True if allowed to edit the record. Defaults to the permission set in the component. * * @since 3.6 */ protected function canEdit($record) { $result = false; if (!empty($record->ucm_type_id)) { // Check that the type id matches the type alias $typeAlias = JFactory::getApplication()->input->get('type_alias'); /** @var JTableContenttype $contentTypeTable */ $contentTypeTable = JTable::getInstance('Contenttype', 'JTable'); if ($contentTypeTable->getTypeId($typeAlias) == $record->ucm_type_id) { /** * Make sure user has edit privileges for this content item. Note that we use edit permissions * for the content item, not delete permissions for the content history row. */ $user = JFactory::getUser(); $result = $user->authorise('core.edit', $typeAlias . '.' . (int) $record->ucm_item_id); } // Finally try session (this catches edit.own case too) if (!$result) { $contentTypeTable->load($record->ucm_type_id); $typeEditables = (array) JFactory::getApplication()->getUserState(str_replace('.', '.edit.', $contentTypeTable->type_alias) . '.id'); $result = in_array((int) $record->ucm_item_id, $typeEditables); } } return $result; } } PKb��\y@j�gg0components/com_contenthistory/models/compare.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('ContenthistoryHelper', JPATH_ADMINISTRATOR . '/components/com_contenthistory/helpers/contenthistory.php'); /** * Methods supporting a list of contenthistory records. * * @since 3.2 */ class ContenthistoryModelCompare extends JModelItem { /** * Method to get a version history row. * * @return array|boolean On success, array of populated tables. False on failure. * * @since 3.2 */ public function getItems() { $input = JFactory::getApplication()->input; /** @var JTableContenthistory $table1 */ $table1 = JTable::getInstance('Contenthistory'); /** @var JTableContenthistory $table2 */ $table2 = JTable::getInstance('Contenthistory'); $id1 = $input->getInt('id1'); $id2 = $input->getInt('id2'); $result = array(); if ($table1->load($id1) && $table2->load($id2)) { // Get the first history record's content type record so we can check ACL /** @var JTableContenttype $contentTypeTable */ $contentTypeTable = JTable::getInstance('Contenttype'); $ucmTypeId = $table1->ucm_type_id; if (!$contentTypeTable->load($ucmTypeId)) { // Assume a failure to load the content type means broken data, abort mission return false; } $user = JFactory::getUser(); // Access check if ($user->authorise('core.edit', $contentTypeTable->type_alias . '.' . (int) $table1->ucm_item_id) || $this->canEdit($table1)) { $return = true; } else { $this->setError(JText::_('JERROR_ALERTNOAUTHOR')); return false; } // All's well, process the records if ($return == true) { foreach (array($table1, $table2) as $table) { $object = new stdClass; $object->data = ContenthistoryHelper::prepareData($table); $object->version_note = $table->version_note; // Let's use custom calendars when present $object->save_date = JHtml::_('date', $table->save_date, JText::_('DATE_FORMAT_LC6')); $dateProperties = array ( 'modified_time', 'created_time', 'modified', 'created', 'checked_out_time', 'publish_up', 'publish_down', ); foreach ($dateProperties as $dateProperty) { if (array_key_exists($dateProperty, $object->data) && $object->data->$dateProperty->value != '0000-00-00 00:00:00') { $object->data->$dateProperty->value = JHtml::_('date', $object->data->$dateProperty->value, JText::_('DATE_FORMAT_LC6')); } } $result[] = $object; } return $result; } } return false; } /** * Method to test whether a record is editable * * @param JTableContenthistory $record A JTable object. * * @return boolean True if allowed to edit the record. Defaults to the permission set in the component. * * @since 3.6 */ protected function canEdit($record) { $result = false; if (!empty($record->ucm_type_id)) { // Check that the type id matches the type alias $typeAlias = JFactory::getApplication()->input->get('type_alias'); /** @var JTableContenttype $contentTypeTable */ $contentTypeTable = JTable::getInstance('Contenttype', 'JTable'); if ($contentTypeTable->getTypeId($typeAlias) == $record->ucm_type_id) { /** * Make sure user has edit privileges for this content item. Note that we use edit permissions * for the content item, not delete permissions for the content history row. */ $user = JFactory::getUser(); $result = $user->authorise('core.edit', $typeAlias . '.' . (int) $record->ucm_item_id); } // Finally try session (this catches edit.own case too) if (!$result) { $contentTypeTable->load($record->ucm_type_id); $typeEditables = (array) JFactory::getApplication()->getUserState(str_replace('.', '.edit.', $contentTypeTable->type_alias) . '.id'); $result = in_array((int) $record->ucm_item_id, $typeEditables); } } return $result; } } PKb��\?=G9��,components/com_contenthistory/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contenthistory * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Contenthistory Controller * * @since 3.2 */ class ContenthistoryController extends JControllerLegacy { } PKb��\�옕�� components/com_cpanel/cpanel.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cpanel * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // No access check. $controller = JControllerLegacy::getInstance('Cpanel'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\��p�� components/com_cpanel/cpanel.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_cpanel</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_CPANEL_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>controller.php</filename> <filename>cpanel.php</filename> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_cpanel.ini</language> <language tag="en-GB">language/en-GB.com_cpanel.sys.ini</language> </languages> </administration> </extension> PKb��\�E���3components/com_cpanel/views/cpanel/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cpanel * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; $user = JFactory::getUser(); ?> <div class="row-fluid"> <?php $iconmodules = JModuleHelper::getModules('icon'); if ($iconmodules) : ?> <div class="span3"> <div class="cpanel-links"> <?php // Display the submenu position modules foreach ($iconmodules as $iconmodule) { echo JModuleHelper::renderModule($iconmodule); } ?> </div> </div> <?php endif; ?> <div class="span<?php echo $iconmodules ? 9 : 12; ?>"> <?php if ($user->authorise('core.manage', 'com_postinstall') && $this->postinstall_message_count) : ?> <div class="row-fluid"> <div class="alert alert-info"> <h3> <?php echo JText::_('COM_CPANEL_MESSAGES_TITLE'); ?> </h3> <p> <?php echo JText::_('COM_CPANEL_MESSAGES_BODY_NOCLOSE'); ?> </p> <p> <?php echo JText::_('COM_CPANEL_MESSAGES_BODYMORE_NOCLOSE'); ?> </p> <p> <a href="index.php?option=com_postinstall&eid=700" class="btn btn-primary"> <?php echo JText::_('COM_CPANEL_MESSAGES_REVIEW'); ?> </a> </p> </div> </div> <?php endif; ?> <div class="row-fluid"> <?php $spans = 0; foreach ($this->modules as $module) { // Get module parameters $params = new Registry($module->params); $bootstrapSize = $params->get('bootstrap_size'); if (!$bootstrapSize) { $bootstrapSize = 12; } $spans += $bootstrapSize; if ($spans > 12) { echo '</div><div class="row-fluid">'; $spans = $bootstrapSize; } echo JModuleHelper::renderModule($module, array('style' => 'well')); } ?> </div> </div> </div> PKb��\C}�R^^0components/com_cpanel/views/cpanel/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cpanel * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Cpanel component * * @since 1.0 */ class CpanelViewCpanel extends JViewLegacy { /** * Array of cpanel modules * * @var array */ protected $modules = null; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { // Set toolbar items for the page JToolbarHelper::title(JText::_('COM_CPANEL'), 'home-2 cpanel'); JToolbarHelper::help('screen.cpanel'); $input = JFactory::getApplication()->input; /* * Set the template - this will display cpanel.php * from the selected admin template. */ $input->set('tmpl', 'cpanel'); // Display the cpanel modules $this->modules = JModuleHelper::getModules('cpanel'); try { $messages_model = FOFModel::getTmpInstance('Messages', 'PostinstallModel')->eid(700); $messages = $messages_model->getItemList(); } catch (RuntimeException $e) { $messages = array(); // Still render the error message from the Exception object JFactory::getApplication()->enqueueMessage($e->getMessage(), 'error'); } $this->postinstall_message_count = count($messages); parent::display($tpl); } } PKb��\��i]yy$components/com_cpanel/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_cpanel * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Cpanel Controller * * @since 1.5 */ class CpanelController extends JControllerLegacy { } PKb��\_�A� � $components/com_finder/tables/map.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Map table class for the Finder package. * * @since 2.5 */ class FinderTableMap extends JTable { /** * Constructor * * @param JDatabaseDriver $db JDatabaseDriver connector object. * * @since 2.5 */ public function __construct(&$db) { parent::__construct('#__finder_taxonomy', 'id', $db); } /** * Method to set the publishing state for a row or list of rows in the database * table. The method respects checked out rows by other users and will attempt * to checkin rows that it can after adjustments are made. * * @param mixed $pks An array of primary key values to update. If not * set the instance property value is used. [optional] * @param integer $state The publishing state. eg. [0 = unpublished, 1 = published] [optional] * @param integer $userId The user id of the user performing the operation. [optional] * * @return boolean True on success. * * @since 2.5 */ public function publish($pks = null, $state = 1, $userId = 0) { $k = $this->_tbl_key; // Sanitize input. $pks = ArrayHelper::toInteger($pks); $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED')); return false; } } // Build the WHERE clause for the primary keys. $where = $k . '=' . implode(' OR ' . $k . '=', $pks); // Update the publishing state for rows with the given primary keys. $query = $this->_db->getQuery(true) ->update($this->_db->quoteName($this->_tbl)) ->set($this->_db->quoteName('state') . ' = ' . (int) $state) ->where($where); $this->_db->setQuery($query); try { $this->_db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // If the JTable instance value is in the list of primary keys that were set, set the instance. if (in_array($this->$k, $pks)) { $this->state = $state; } $this->setError(''); return true; } } PKb��\�N'-��'components/com_finder/tables/filter.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; /** * Filter table class for the Finder package. * * @since 2.5 */ class FinderTableFilter extends JTable { /** * Constructor * * @param JDatabaseDriver $db JDatabaseDriver connector object. * * @since 2.5 */ public function __construct(&$db) { parent::__construct('#__finder_filters', 'filter_id', $db); $this->setColumnAlias('published', 'state'); } /** * Method to bind an associative array or object to the JTable instance. This * method only binds properties that are publicly accessible and optionally * takes an array of properties to ignore when binding. * * @param array $array Named array * @param mixed $ignore An optional array or space separated list of properties * to ignore while binding. [optional] * * @return mixed Null if operation was satisfactory, otherwise returns an error string * * @since 2.5 */ public function bind($array, $ignore = '') { if (isset($array['params']) && is_array($array['params'])) { $registry = new Registry($array['params']); $array['params'] = (string) $registry; } return parent::bind($array, $ignore); } /** * Method to perform sanity checks on the JTable instance properties to ensure * they are safe to store in the database. Child classes should override this * method to make sure the data they are storing in the database is safe and * as expected before storage. * * @return boolean True if the instance is sane and able to be stored in the database. * * @since 2.5 */ public function check() { if (trim($this->alias) === '') { $this->alias = $this->title; } $this->alias = JApplicationHelper::stringURLSafe($this->alias); if (trim(str_replace('-', '', $this->alias)) === '') { $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); } $params = new Registry($this->params); $nullDate = $this->_db->getNullDate(); $d1 = $params->get('d1', $nullDate); $d2 = $params->get('d2', $nullDate); // Check the end date is not earlier than the start date. if ($d2 > $nullDate && $d2 < $d1) { // Swap the dates. $params->set('d1', $d2); $params->set('d2', $d1); $this->params = (string) $params; } return true; } /** * Method to set the publishing state for a row or list of rows in the database * table. The method respects checked out rows by other users and will attempt * to checkin rows that it can after adjustments are made. * * @param mixed $pks An array of primary key values to update. If not * set the instance property value is used. [optional] * @param integer $state The publishing state. eg. [0 = unpublished, 1 = published] [optional] * @param integer $userId The user id of the user performing the operation. [optional] * * @return boolean True on success. * * @since 2.5 */ public function publish($pks = null, $state = 1, $userId = 0) { $k = $this->_tbl_key; // Sanitize input. $pks = ArrayHelper::toInteger($pks); $userId = (int) $userId; $state = (int) $state; // If there are no primary keys set check to see if the instance key is set. if (empty($pks)) { if ($this->$k) { $pks = array($this->$k); } // Nothing to set publishing state on, return false. else { $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED')); return false; } } // Build the WHERE clause for the primary keys. $where = $k . '=' . implode(' OR ' . $k . '=', $pks); // Determine if there is checkin support for the table. if (!property_exists($this, 'checked_out') || !property_exists($this, 'checked_out_time')) { $checkin = ''; } else { $checkin = ' AND (checked_out = 0 OR checked_out = ' . (int) $userId . ')'; } // Update the publishing state for rows with the given primary keys. $query = $this->_db->getQuery(true) ->update($this->_db->quoteName($this->_tbl)) ->set($this->_db->quoteName('state') . ' = ' . (int) $state) ->where($where); $this->_db->setQuery($query . $checkin); try { $this->_db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // If checkin is supported and all rows were adjusted, check them in. if ($checkin && count($pks) === $this->_db->getAffectedRows()) { // Checkin the rows. foreach ($pks as $pk) { $this->checkIn($pk); } } // If the JTable instance value is in the list of primary keys that were set, set the instance. if (in_array($this->$k, $pks)) { $this->state = $state; } $this->setError(''); return true; } /** * Method to store a row in the database from the JTable instance properties. * If a primary key value is set the row with that primary key value will be * updated with the instance property values. If no primary key value is set * a new row will be inserted into the database with the properties from the * JTable instance. * * @param boolean $updateNulls True to update fields even if they are null. [optional] * * @return boolean True on success. * * @since 2.5 */ public function store($updateNulls = false) { $date = JFactory::getDate()->toSql(); $userId = JFactory::getUser()->id; $this->modified = $date; if ($this->filter_id) { // Existing item $this->modified_by = $userId; } else { // New item. A filter's created field can be set by the user, // so we don't touch it if it is set. if (!(int) $this->created) { $this->created = $date; } if (empty($this->created_by)) { $this->created_by = $userId; } } if (is_array($this->data)) { $this->map_count = count($this->data); $this->data = implode(',', $this->data); } else { $this->map_count = 0; $this->data = implode(',', array()); } // Verify that the alias is unique $table = JTable::getInstance('Filter', 'FinderTable', array('dbo' => $this->_db)); if ($table->load(array('alias' => $this->alias)) && ($table->filter_id != $this->filter_id || $this->filter_id == 0)) { $this->setError(JText::_('JLIB_DATABASE_ERROR_ARTICLE_UNIQUE_ALIAS')); return false; } return parent::store($updateNulls); } } PKb��\o=c__%components/com_finder/tables/link.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Link table class for the Finder package. * * @since 2.5 */ class FinderTableLink extends JTable { /** * Constructor * * @param JDatabaseDriver $db JDatabaseDriver connector object. * * @since 2.5 */ public function __construct(&$db) { parent::__construct('#__finder_links', 'link_id', $db); } } PKb��\7v7�)�)2components/com_finder/controllers/indexer.json.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Register dependent classes. JLoader::register('FinderIndexer', JPATH_ADMINISTRATOR . '/components/com_finder/helpers/indexer/indexer.php'); /** * Indexer controller class for Finder. * * @since 2.5 */ class FinderControllerIndexer extends JControllerLegacy { /** * Method to start the indexer. * * @return void * * @since 2.5 */ public function start() { $params = JComponentHelper::getParams('com_finder'); if ($params->get('enable_logging', '0')) { $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'indexer.php'; JLog::addLogger($options); } // Log the start try { JLog::add('Starting the indexer', JLog::INFO); } catch (RuntimeException $exception) { // Informational log only } // We don't want this form to be cached. $app = JFactory::getApplication(); $app->setHeader('Expires', 'Mon, 1 Jan 2001 00:00:00 GMT', true); $app->setHeader('Last-Modified', gmdate('D, d M Y H:i:s') . ' GMT', true); $app->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', false); $app->setHeader('Pragma', 'no-cache'); // Check for a valid token. If invalid, send a 403 with the error message. JSession::checkToken('request') or static::sendResponse(new Exception(JText::_('JINVALID_TOKEN_NOTICE'), 403)); // Put in a buffer to silence noise. ob_start(); // Reset the indexer state. FinderIndexer::resetState(); // Import the finder plugins. JPluginHelper::importPlugin('finder'); // Add the indexer language to JS JText::script('COM_FINDER_AN_ERROR_HAS_OCCURRED'); JText::script('COM_FINDER_NO_ERROR_RETURNED'); // Start the indexer. try { // Trigger the onStartIndex event. JEventDispatcher::getInstance()->trigger('onStartIndex'); // Get the indexer state. $state = FinderIndexer::getState(); $state->start = 1; // Send the response. static::sendResponse($state); } // Catch an exception and return the response. catch (Exception $e) { static::sendResponse($e); } } /** * Method to run the next batch of content through the indexer. * * @return void * * @since 2.5 */ public function batch() { $params = JComponentHelper::getParams('com_finder'); if ($params->get('enable_logging', '0')) { $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'indexer.php'; JLog::addLogger($options); } // Log the start try { JLog::add('Starting the indexer batch process', JLog::INFO); } catch (RuntimeException $exception) { // Informational log only } // We don't want this form to be cached. $app = JFactory::getApplication(); $app->setHeader('Expires', 'Mon, 1 Jan 2001 00:00:00 GMT', true); $app->setHeader('Last-Modified', gmdate('D, d M Y H:i:s') . ' GMT', true); $app->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', false); $app->setHeader('Pragma', 'no-cache'); // Check for a valid token. If invalid, send a 403 with the error message. JSession::checkToken('request') or static::sendResponse(new Exception(JText::_('JINVALID_TOKEN_NOTICE'), 403)); // Put in a buffer to silence noise. ob_start(); // Remove the script time limit. @set_time_limit(0); // Get the indexer state. $state = FinderIndexer::getState(); // Reset the batch offset. $state->batchOffset = 0; // Update the indexer state. FinderIndexer::setState($state); // Import the finder plugins. JPluginHelper::importPlugin('finder'); /* * We are going to swap out the raw document object with an HTML document * in order to work around some plugins that don't do proper environment * checks before trying to use HTML document functions. */ $raw = clone JFactory::getDocument(); $lang = JFactory::getLanguage(); // Get the document properties. $attributes = array ( 'charset' => 'utf-8', 'lineend' => 'unix', 'tab' => ' ', 'language' => $lang->getTag(), 'direction' => $lang->isRtl() ? 'rtl' : 'ltr' ); // Get the HTML document. $html = JDocument::getInstance('html', $attributes); // Todo: Why is this document fetched and immediately overwritten? $doc = JFactory::getDocument(); // Swap the documents. $doc = $html; // Get the admin application. $admin = clone JFactory::getApplication(); // Get the site app. $site = JApplicationCms::getInstance('site'); // Swap the app. $app = JFactory::getApplication(); // Todo: Why is the app fetched and immediately overwritten? $app = $site; // Start the indexer. try { // Trigger the onBeforeIndex event. JEventDispatcher::getInstance()->trigger('onBeforeIndex'); // Trigger the onBuildIndex event. JEventDispatcher::getInstance()->trigger('onBuildIndex'); // Get the indexer state. $state = FinderIndexer::getState(); $state->start = 0; $state->complete = 0; // Swap the documents back. $doc = $raw; // Swap the applications back. $app = $admin; // Log batch completion and memory high-water mark. try { JLog::add('Batch completed, peak memory usage: ' . number_format(memory_get_peak_usage(true)) . ' bytes', JLog::INFO); } catch (RuntimeException $exception) { // Informational log only } // Send the response. static::sendResponse($state); } // Catch an exception and return the response. catch (Exception $e) { // Swap the documents back. $doc = $raw; // Send the response. static::sendResponse($e); } } /** * Method to optimize the index and perform any necessary cleanup. * * @return void * * @since 2.5 */ public function optimize() { // We don't want this form to be cached. $app = JFactory::getApplication(); $app->setHeader('Expires', 'Mon, 1 Jan 2001 00:00:00 GMT', true); $app->setHeader('Last-Modified', gmdate('D, d M Y H:i:s') . ' GMT', true); $app->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', false); $app->setHeader('Pragma', 'no-cache'); // Check for a valid token. If invalid, send a 403 with the error message. JSession::checkToken('request') or static::sendResponse(new Exception(JText::_('JINVALID_TOKEN_NOTICE'), 403)); // Put in a buffer to silence noise. ob_start(); // Import the finder plugins. JPluginHelper::importPlugin('finder'); try { // Optimize the index FinderIndexer::getInstance()->optimize(); // Get the indexer state. $state = FinderIndexer::getState(); $state->start = 0; $state->complete = 1; // Send the response. static::sendResponse($state); } // Catch an exception and return the response. catch (Exception $e) { static::sendResponse($e); } } /** * Method to handle a send a JSON response. The body parameter * can be an Exception object for when an error has occurred or * a JObject for a good response. * * @param mixed $data JObject on success, Exception on error. [optional] * * @return void * * @since 2.5 */ public static function sendResponse($data = null) { // This method always sends a JSON response $app = JFactory::getApplication(); $app->mimeType = 'application/json'; $params = JComponentHelper::getParams('com_finder'); if ($params->get('enable_logging', '0')) { $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'indexer.php'; JLog::addLogger($options); } // Send the assigned error code if we are catching an exception. if ($data instanceof Exception) { try { JLog::add($data->getMessage(), JLog::ERROR); } catch (RuntimeException $exception) { // Informational log only } $app->setHeader('status', $data->getCode()); } // Create the response object. $response = new FinderIndexerResponse($data); // Add the buffer. $response->buffer = JDEBUG ? ob_get_contents() : ob_end_clean(); // Send the JSON response. $app->setHeader('Content-Type', $app->mimeType . '; charset=' . $app->charSet); $app->sendHeaders(); echo json_encode($response); // Close the application. $app->close(); } } /** * Finder Indexer JSON Response Class * * @since 2.5 */ class FinderIndexerResponse { /** * Class Constructor * * @param mixed $state The processing state for the indexer * * @since 2.5 */ public function __construct($state) { $params = JComponentHelper::getParams('com_finder'); if ($params->get('enable_logging', '0')) { $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'indexer.php'; JLog::addLogger($options); } // The old token is invalid so send a new one. $this->token = JFactory::getSession()->getFormToken(); // Check if we are dealing with an error. if ($state instanceof Exception) { // Log the error try { JLog::add($state->getMessage(), JLog::ERROR); } catch (RuntimeException $exception) { // Informational log only } // Prepare the error response. $this->error = true; $this->header = JText::_('COM_FINDER_INDEXER_HEADER_ERROR'); $this->message = $state->getMessage(); } else { // Prepare the response data. $this->batchSize = (int) $state->batchSize; $this->batchOffset = (int) $state->batchOffset; $this->totalItems = (int) $state->totalItems; $this->startTime = $state->startTime; $this->endTime = JFactory::getDate()->toSql(); $this->start = !empty($state->start) ? (int) $state->start : 0; $this->complete = !empty($state->complete) ? (int) $state->complete : 0; // Set the appropriate messages. if ($this->totalItems <= 0 && $this->complete) { $this->header = JText::_('COM_FINDER_INDEXER_HEADER_COMPLETE'); $this->message = JText::_('COM_FINDER_INDEXER_MESSAGE_COMPLETE'); } elseif ($this->totalItems <= 0) { $this->header = JText::_('COM_FINDER_INDEXER_HEADER_OPTIMIZE'); $this->message = JText::_('COM_FINDER_INDEXER_MESSAGE_OPTIMIZE'); } else { $this->header = JText::_('COM_FINDER_INDEXER_HEADER_RUNNING'); $this->message = JText::_('COM_FINDER_INDEXER_MESSAGE_RUNNING'); } } } } // Register the error handler. JError::setErrorHandling(E_ALL, 'callback', array('FinderControllerIndexer', 'sendResponse')); PKb��\�]�tt*components/com_finder/controllers/maps.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Maps controller class for Finder. * * @since 2.5 */ class FinderControllerMaps extends JControllerAdmin { /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return JModelLegacy The model. * * @since 1.6 */ public function getModel($name = 'Maps', $prefix = 'FinderModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } } PKb��\��GG+components/com_finder/controllers/index.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Index controller class for Finder. * * @since 2.5 */ class FinderControllerIndex extends JControllerAdmin { /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return JModelLegacy The model. * * @since 2.5 */ public function getModel($name = 'Index', $prefix = 'FinderModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } /** * Method to purge all indexed links from the database. * * @return boolean True on success. * * @since 2.5 */ public function purge() { $this->checkToken(); // Remove the script time limit. @set_time_limit(0); $model = $this->getModel('Index', 'FinderModel'); // Attempt to purge the index. $return = $model->purge(); if (!$return) { $message = JText::_('COM_FINDER_INDEX_PURGE_FAILED', $model->getError()); $this->setRedirect('index.php?option=com_finder&view=index', $message); return false; } else { $message = JText::_('COM_FINDER_INDEX_PURGE_SUCCESS'); $this->setRedirect('index.php?option=com_finder&view=index', $message); return true; } } } PKb��\�!��||-components/com_finder/controllers/filters.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Filters controller class for Finder. * * @since 2.5 */ class FinderControllerFilters extends JControllerAdmin { /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return JModelLegacy The model. * * @since 2.5 */ public function getModel($name = 'Filter', $prefix = 'FinderModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } } PKb��\:�|,components/com_finder/controllers/filter.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Indexer controller class for Finder. * * @since 2.5 */ class FinderControllerFilter extends JControllerForm { /** * Method to save a record. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). * * @return boolean True if successful, false otherwise. * * @since 2.5 */ public function save($key = null, $urlVar = null) { // Check for request forgeries. $this->checkToken(); $app = JFactory::getApplication(); $input = $app->input; $model = $this->getModel(); $table = $model->getTable(); $data = $input->post->get('jform', array(), 'array'); $checkin = property_exists($table, 'checked_out'); $context = "$this->option.edit.$this->context"; $task = $this->getTask(); // Determine the name of the primary key for the data. if (empty($key)) { $key = $table->getKeyName(); } // To avoid data collisions the urlVar may be different from the primary key. if (empty($urlVar)) { $urlVar = $key; } $recordId = $input->get($urlVar, '', 'int'); if (!$this->checkEditId($context, $recordId)) { // Somehow the person just went to the form and tried to save it. We don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $recordId)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false)); return false; } // Populate the row id from the session. $data[$key] = $recordId; // The save2copy task needs to be handled slightly differently. if ($task === 'save2copy') { // Check-in the original row. if ($checkin && $model->checkin($data[$key]) === false) { // Check-in failed. Go back to the item and display a notice. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError())); $this->setMessage($this->getError(), 'error'); $this->setRedirect('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, $urlVar)); return false; } // Reset the ID and then treat the request as for Apply. $data[$key] = 0; $task = 'apply'; } // Access check. if (!$this->allowSave($data, $key)) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED')); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false)); return false; } // Validate the posted data. // Sometimes the form needs some posted data, such as for plugins and modules. $form = $model->getForm($data, false); if (!$form) { $app->enqueueMessage($model->getError(), 'error'); return false; } // Test whether the data is valid. $validData = $model->validate($form, $data); // Check for validation errors. if ($validData === false) { // Get the validation messages. $errors = $model->getErrors(); // Push up to three validation messages out to the user. for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof Exception) { $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); } else { $app->enqueueMessage($errors[$i], 'warning'); } } // Save the data in the session. $app->setUserState($context . '.data', $data); // Redirect back to the edit screen. $this->setRedirect( JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, $key), false) ); return false; } // Get and sanitize the filter data. $validData['data'] = $input->post->get('t', array(), 'array'); $validData['data'] = array_unique($validData['data']); $validData['data'] = ArrayHelper::toInteger($validData['data']); // Remove any values of zero. if (array_search(0, $validData['data'], true)) { unset($validData['data'][array_search(0, $validData['data'], true)]); } // Attempt to save the data. if (!$model->save($validData)) { // Save the data in the session. $app->setUserState($context . '.data', $validData); // Redirect back to the edit screen. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError())); $this->setMessage($this->getError(), 'error'); $this->setRedirect( JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, $key), false) ); return false; } // Save succeeded, so check-in the record. if ($checkin && $model->checkin($validData[$key]) === false) { // Save the data in the session. $app->setUserState($context . '.data', $validData); // Check-in failed, so go back to the record and display a notice. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED', $model->getError())); $this->setMessage($this->getError(), 'error'); $this->setRedirect('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, $key)); return false; } $this->setMessage( JText::_( (JFactory::getLanguage()->hasKey($this->text_prefix . ($recordId === 0 && $app->isClient('site') ? '_SUBMIT' : '') . '_SAVE_SUCCESS') ? $this->text_prefix : 'JLIB_APPLICATION') . ($recordId === 0 && $app->isClient('site') ? '_SUBMIT' : '') . '_SAVE_SUCCESS' ) ); // Redirect the user and adjust session state based on the chosen task. switch ($task) { case 'apply': // Set the record data in the session. $recordId = $model->getState($this->context . '.id'); $this->holdEditId($context, $recordId); $app->setUserState($context . '.data', null); $model->checkout($recordId); // Redirect back to the edit screen. $this->setRedirect( JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend($recordId, $key), false) ); break; case 'save2new': // Clear the record id and data from the session. $this->releaseEditId($context, $recordId); $app->setUserState($context . '.data', null); // Redirect back to the edit screen. $this->setRedirect( JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_item . $this->getRedirectToItemAppend(null, $key), false) ); break; default: // Clear the record id and data from the session. $this->releaseEditId($context, $recordId); $app->setUserState($context . '.data', null); // Redirect to the list screen. $this->setRedirect( JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false) ); break; } // Invoke the postSave method to allow for the child class to access the model. $this->postSaveHook($model, $validData); return true; } } PKb��\a��YAA components/com_finder/finder.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; if (!JFactory::getUser()->authorise('core.manage', 'com_finder')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Finder'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\�'�` components/com_finder/finder.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_finder</name> <author>Joomla! Project</author> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <creationDate>August 2011</creationDate> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_FINDER_XML_DESCRIPTION</description> <menu link="option=com_finder">COM_FINDER</menu> <files folder="site"> <filename>controller.php</filename> <filename>finder.php</filename> <filename>router.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <media destination="com_finder" folder="media"> <folder>js</folder> <folder>css</folder> </media> <install> <sql> <file charset="utf8" driver="mysql">sql/install.mysql.sql</file> <file charset="utf8" driver="postgresql">sql/install.postgresql.sql</file> </sql> </install> <uninstall> <sql> <file charset="utf8" driver="mysql">sql/uninstall.mysql.sql</file> <file charset="utf8" driver="postgresql">sql/uninstall.postgresql.sql</file> </sql> </uninstall> <languages folder="site"> <language tag="en-GB">language/en-GB.com_finder.ini</language> </languages> <administration> <files folder="admin"> <filename>access.xml</filename> <filename>config.xml</filename> <filename>controller.php</filename> <filename>finder.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>sql</folder> <folder>tables</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_finder.ini</language> <language tag="en-GB">language/en-GB.com_finder.sys.ini</language> </languages> <menu img="class:finder" link="option=com_finder">COM_FINDER</menu> </administration> </extension> PKb��\T�:�d"d" components/com_finder/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="search" label="COM_FINDER_FIELDSET_SEARCH_OPTIONS_LABEL" description="COM_FINDER_FIELDSET_SEARCH_OPTIONS_DESCRIPTION" > <field name="enabled" type="radio" label="COM_FINDER_CONFIG_GATHER_SEARCH_STATISTICS_LABEL" description="COM_FINDER_CONFIG_GATHER_SEARCH_STATISTICS_DESCRIPTION" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="show_description" type="radio" label="COM_FINDER_CONFIG_SHOW_DESCRIPTION_LABEL" description="COM_FINDER_CONFIG_SHOW_DESCRIPTION_DESCRIPTION" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="description_length" type="number" label="COM_FINDER_CONFIG_DESCRIPTION_LENGTH_LABEL" description="COM_FINDER_CONFIG_DESCRIPTION_LENGTH_DESCRIPTION" size="5" default="255" filter="integer" showon="show_description:1" /> <field name="allow_empty_query" type="radio" label="COM_FINDER_CONFIG_ALLOW_EMPTY_QUERY_LABEL" description="COM_FINDER_CONFIG_ALLOW_EMPTY_QUERY_DESCRIPTION" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="show_url" type="radio" label="COM_FINDER_CONFIG_SHOW_URL_LABEL" description="COM_FINDER_CONFIG_SHOW_URL_DESCRIPTION" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_autosuggest" type="radio" label="COM_FINDER_CONFIG_SHOW_AUTOSUGGEST_LABEL" description="COM_FINDER_CONFIG_SHOW_AUTOSUGGEST_DESCRIPTION" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_suggested_query" type="radio" label="COM_FINDER_CONFIG_SHOW_SUGGESTED_QUERY_LABEL" description="COM_FINDER_CONFIG_SHOW_SUGGESTED_QUERY_DESC" class="btn-group btn-group-yesno" default="1" validate="options" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_explained_query" type="radio" label="COM_FINDER_CONFIG_SHOW_EXPLAINED_QUERY_LABEL" description="COM_FINDER_CONFIG_SHOW_EXPLAINED_QUERY_DESC" class="btn-group btn-group-yesno" default="1" validate="options" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_advanced" type="radio" label="COM_FINDER_CONFIG_SHOW_ADVANCED_LABEL" description="COM_FINDER_CONFIG_SHOW_ADVANCED_DESCRIPTION" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_advanced_tips" type="radio" label="COM_FINDER_CONFIG_SHOW_ADVANCED_TIPS_LABEL" description="COM_FINDER_CONFIG_SHOW_ADVANCED_TIPS_DESCRIPTION" class="btn-group btn-group-yesno" default="1" showon="show_advanced:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="expand_advanced" type="radio" label="COM_FINDER_CONFIG_EXPAND_ADVANCED_LABEL" description="COM_FINDER_CONFIG_EXPAND_ADVANCED_DESCRIPTION" class="btn-group btn-group-yesno" default="0" showon="show_advanced:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_date_filters" type="radio" label="COM_FINDER_CONFIG_SHOW_DATE_FILTERS_LABEL" description="COM_FINDER_CONFIG_SHOW_DATE_FILTERS_DESCRIPTION" class="btn-group btn-group-yesno" default="0" showon="show_advanced:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="sort_order" type="list" label="COM_FINDER_CONFIG_SORT_ORDER_LABEL" description="COM_FINDER_CONFIG_SORT_ORDER_DESC" default="relevance" validate="options" > <option value="relevance">COM_FINDER_CONFIG_SORT_OPTION_RELEVANCE</option> <option value="date">COM_FINDER_CONFIG_SORT_OPTION_START_DATE</option> <option value="price">COM_FINDER_CONFIG_SORT_OPTION_LIST_PRICE</option> </field> <field name="sort_direction" type="list" label="COM_FINDER_CONFIG_SORT_DIRECTION_LABEL" description="COM_FINDER_CONFIG_SORT_DIRECTION_DESC" default="desc" validate="options" > <option value="desc">COM_FINDER_CONFIG_SORT_OPTION_DESCENDING</option> <option value="asc">COM_FINDER_CONFIG_SORT_OPTION_ASCENDING</option> </field> <field name="highlight_terms" type="radio" label="COM_FINDER_CONFIG_HILIGHT_CONTENT_SEARCH_TERMS_LABEL" description="COM_FINDER_CONFIG_HILIGHT_CONTENT_SEARCH_TERMS_DESCRIPTION" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="opensearch_name" type="text" label="COM_FINDER_CONFIG_FIELD_OPENSEARCH_NAME_LABEL" description="COM_FINDER_CONFIG_FIELD_OPENSEARCH_NAME_DESCRIPTION" default="" /> <field name="opensearch_description" type="textarea" label="COM_FINDER_CONFIG_FIELD_OPENSEARCH_DESCRIPTON_LABEL" description="COM_FINDER_CONFIG_FIELD_OPENSEARCH_DESCRIPTON_DESCRIPTION" default="" cols="30" rows="2" /> </fieldset> <fieldset name="index" label="COM_FINDER_FIELDSET_INDEX_OPTIONS_LABEL" description="COM_FINDER_FIELDSET_INDEX_OPTIONS_DESCRIPTION" > <field name="batch_size" type="list" label="COM_FINDER_CONFIG_BATCH_SIZE_LABEL" description="COM_FINDER_CONFIG_BATCH_SIZE_DESCRIPTION" default="50" validate="options" > <option value="5">J5</option> <option value="10">J10</option> <option value="25">J25</option> <option value="50">J50</option> <option value="75">J75</option> <option value="100">J100</option> <option value="150">J150</option> <option value="200">J200</option> <option value="250">J250</option> <option value="300">J300</option> </field> <field name="memory_table_limit" type="number" label="COM_FINDER_CONFIG_MEMORY_TABLE_LIMIT_LABEL" description="COM_FINDER_CONFIG_MEMORY_TABLE_LIMIT_DESCRIPTION" size="10" default="30000" filter="integer" /> <field name="title_multiplier" type="number" label="COM_FINDER_CONFIG_TITLE_MULTIPLIER_LABEL" description="COM_FINDER_CONFIG_TITLE_MULTIPLIER_DESCRIPTION" size="5" default="1.7" /> <field name="text_multiplier" type="number" label="COM_FINDER_CONFIG_TEXT_MULTIPLIER_LABEL" description="COM_FINDER_CONFIG_TEXT_MULTIPLIER_DESCRIPTION" size="5" default="0.7" /> <field name="meta_multiplier" type="number" label="COM_FINDER_CONFIG_META_MULTIPLIER_LABEL" description="COM_FINDER_CONFIG_META_MULTIPLIER_DESCRIPTION" size="5" default="1.2" /> <field name="path_multiplier" type="number" label="COM_FINDER_CONFIG_PATH_MULTIPLIER_LABEL" description="COM_FINDER_CONFIG_PATH_MULTIPLIER_DESCRIPTION" size="5" default="2.0" /> <field name="misc_multiplier" type="number" label="COM_FINDER_CONFIG_MISC_MULTIPLIER_LABEL" description="COM_FINDER_CONFIG_MISC_MULTIPLIER_DESCRIPTION" size="5" default="0.3" /> <field name="stem" type="radio" label="COM_FINDER_CONFIG_STEMMER_ENABLE_LABEL" description="COM_FINDER_CONFIG_STEMMER_ENABLE_DESCRIPTION" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="stemmer" type="list" label="COM_FINDER_CONFIG_STEMMER_LABEL" description="COM_FINDER_CONFIG_STEMMER_DESCRIPTION" default="snowball" showon="stem:1" > <option value="porter_en">COM_FINDER_CONFIG_STEMMER_PORTER_EN</option> <option value="fr">COM_FINDER_CONFIG_STEMMER_FR</option> <option value="snowball">COM_FINDER_CONFIG_STEMMER_SNOWBALL</option> </field> <field name="enable_logging" type="radio" label="COM_FINDER_CONFIG_ENABLE_LOGGING_LABEL" description="COM_FINDER_CONFIG_ENABLE_LOGGING_DESCRIPTION" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_finder" section="component" /> </fieldset> </config> PKb��\�|��ww2components/com_finder/sql/uninstall.postgresql.sqlnu�[���DROP TABLE IF EXISTS "#__finder_filters"; DROP TABLE IF EXISTS "#__finder_links"; DROP TABLE IF EXISTS "#__finder_links_terms0"; DROP TABLE IF EXISTS "#__finder_links_terms1"; DROP TABLE IF EXISTS "#__finder_links_terms2"; DROP TABLE IF EXISTS "#__finder_links_terms3"; DROP TABLE IF EXISTS "#__finder_links_terms4"; DROP TABLE IF EXISTS "#__finder_links_terms5"; DROP TABLE IF EXISTS "#__finder_links_terms6"; DROP TABLE IF EXISTS "#__finder_links_terms7"; DROP TABLE IF EXISTS "#__finder_links_terms8"; DROP TABLE IF EXISTS "#__finder_links_terms9"; DROP TABLE IF EXISTS "#__finder_links_termsa"; DROP TABLE IF EXISTS "#__finder_links_termsb"; DROP TABLE IF EXISTS "#__finder_links_termsc"; DROP TABLE IF EXISTS "#__finder_links_termsd"; DROP TABLE IF EXISTS "#__finder_links_termse"; DROP TABLE IF EXISTS "#__finder_links_termsf"; DROP TABLE IF EXISTS "#__finder_taxonomy"; DROP TABLE IF EXISTS "#__finder_taxonomy_map"; DROP TABLE IF EXISTS "#__finder_terms"; DROP TABLE IF EXISTS "#__finder_terms_common"; DROP TABLE IF EXISTS "#__finder_tokens"; DROP TABLE IF EXISTS "#__finder_tokens_aggregate"; DROP TABLE IF EXISTS "#__finder_types"; PKb��\��aa;a;+components/com_finder/sql/install.mysql.sqlnu�[���-- -- Table structure for table `#__finder_filters` -- CREATE TABLE IF NOT EXISTS `#__finder_filters` ( `filter_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `alias` varchar(255) NOT NULL, `state` tinyint(1) NOT NULL DEFAULT 1, `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created_by` int(10) unsigned NOT NULL, `created_by_alias` varchar(255) NOT NULL, `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(10) unsigned NOT NULL DEFAULT 0, `checked_out` int(10) unsigned NOT NULL DEFAULT 0, `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `map_count` int(10) unsigned NOT NULL DEFAULT 0, `data` text NOT NULL, `params` mediumtext, PRIMARY KEY (`filter_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links` -- CREATE TABLE IF NOT EXISTS `#__finder_links` ( `link_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `url` varchar(255) NOT NULL, `route` varchar(255) NOT NULL, `title` varchar(400) DEFAULT NULL, `description` varchar(255) DEFAULT NULL, `indexdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `md5sum` varchar(32) DEFAULT NULL, `published` tinyint(1) NOT NULL DEFAULT 1, `state` int(5) DEFAULT 1, `access` int(5) DEFAULT 0, `language` varchar(8) NOT NULL, `publish_start_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `publish_end_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `start_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `end_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `list_price` double unsigned NOT NULL DEFAULT 0, `sale_price` double unsigned NOT NULL DEFAULT 0, `type_id` int(11) NOT NULL, `object` mediumblob NOT NULL, PRIMARY KEY (`link_id`), KEY `idx_type` (`type_id`), KEY `idx_title` (`title`(100)), KEY `idx_md5` (`md5sum`), KEY `idx_url` (`url`(75)), KEY `idx_published_list` (`published`,`state`,`access`,`publish_start_date`,`publish_end_date`,`list_price`), KEY `idx_published_sale` (`published`,`state`,`access`,`publish_start_date`,`publish_end_date`,`sale_price`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_terms0` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms0` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_terms1` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms1` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_terms2` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms2` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_terms3` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms3` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_terms4` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms4` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_terms5` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms5` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_terms6` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms6` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_terms7` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms7` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_terms8` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms8` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_terms9` -- CREATE TABLE IF NOT EXISTS `#__finder_links_terms9` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_termsa` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termsa` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_termsb` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termsb` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_termsc` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termsc` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_termsd` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termsd` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_termse` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termse` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_links_termsf` -- CREATE TABLE IF NOT EXISTS `#__finder_links_termsf` ( `link_id` int(10) unsigned NOT NULL, `term_id` int(10) unsigned NOT NULL, `weight` float unsigned NOT NULL, PRIMARY KEY (`link_id`,`term_id`), KEY `idx_term_weight` (`term_id`,`weight`), KEY `idx_link_term_weight` (`link_id`,`term_id`,`weight`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_taxonomy` -- CREATE TABLE IF NOT EXISTS `#__finder_taxonomy` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `parent_id` int(10) unsigned NOT NULL DEFAULT 0, `title` varchar(255) NOT NULL, `state` tinyint(1) unsigned NOT NULL DEFAULT 1, `access` tinyint(1) unsigned NOT NULL DEFAULT 0, `ordering` tinyint(1) unsigned NOT NULL DEFAULT 0, PRIMARY KEY (`id`), KEY `parent_id` (`parent_id`), KEY `state` (`state`), KEY `ordering` (`ordering`), KEY `access` (`access`), KEY `idx_parent_published` (`parent_id`,`state`,`access`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Dumping data for table `#__finder_taxonomy` -- REPLACE INTO `#__finder_taxonomy` (`id`, `parent_id`, `title`, `state`, `access`, `ordering`) VALUES (1, 0, 'ROOT', 0, 0, 0); -- -- Table structure for table `#__finder_taxonomy_map` -- CREATE TABLE IF NOT EXISTS `#__finder_taxonomy_map` ( `link_id` int(10) unsigned NOT NULL, `node_id` int(10) unsigned NOT NULL, PRIMARY KEY (`link_id`,`node_id`), KEY `link_id` (`link_id`), KEY `node_id` (`node_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_terms` -- CREATE TABLE IF NOT EXISTS `#__finder_terms` ( `term_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `term` varchar(75) NOT NULL, `stem` varchar(75) NOT NULL, `common` tinyint(1) unsigned NOT NULL DEFAULT 0, `phrase` tinyint(1) unsigned NOT NULL DEFAULT 0, `weight` float unsigned NOT NULL DEFAULT 0, `soundex` varchar(75) NOT NULL, `links` int(10) NOT NULL DEFAULT 0, `language` char(3) NOT NULL DEFAULT '', PRIMARY KEY (`term_id`), UNIQUE KEY `idx_term` (`term`), KEY `idx_term_phrase` (`term`,`phrase`), KEY `idx_stem_phrase` (`stem`,`phrase`), KEY `idx_soundex_phrase` (`soundex`,`phrase`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_terms_common` -- CREATE TABLE IF NOT EXISTS `#__finder_terms_common` ( `term` varchar(75) NOT NULL, `language` varchar(3) NOT NULL, KEY `idx_word_lang` (`term`,`language`), KEY `idx_lang` (`language`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Dumping data for table `#__finder_terms_common` -- REPLACE INTO `#__finder_terms_common` (`term`, `language`) VALUES ('a', 'en'), ('about', 'en'), ('after', 'en'), ('ago', 'en'), ('all', 'en'), ('am', 'en'), ('an', 'en'), ('and', 'en'), ('any', 'en'), ('are', 'en'), ('aren''t', 'en'), ('as', 'en'), ('at', 'en'), ('be', 'en'), ('but', 'en'), ('by', 'en'), ('for', 'en'), ('from', 'en'), ('get', 'en'), ('go', 'en'), ('how', 'en'), ('if', 'en'), ('in', 'en'), ('into', 'en'), ('is', 'en'), ('isn''t', 'en'), ('it', 'en'), ('its', 'en'), ('me', 'en'), ('more', 'en'), ('most', 'en'), ('must', 'en'), ('my', 'en'), ('new', 'en'), ('no', 'en'), ('none', 'en'), ('not', 'en'), ('nothing', 'en'), ('of', 'en'), ('off', 'en'), ('often', 'en'), ('old', 'en'), ('on', 'en'), ('onc', 'en'), ('once', 'en'), ('only', 'en'), ('or', 'en'), ('other', 'en'), ('our', 'en'), ('ours', 'en'), ('out', 'en'), ('over', 'en'), ('page', 'en'), ('she', 'en'), ('should', 'en'), ('small', 'en'), ('so', 'en'), ('some', 'en'), ('than', 'en'), ('thank', 'en'), ('that', 'en'), ('the', 'en'), ('their', 'en'), ('theirs', 'en'), ('them', 'en'), ('then', 'en'), ('there', 'en'), ('these', 'en'), ('they', 'en'), ('this', 'en'), ('those', 'en'), ('thus', 'en'), ('time', 'en'), ('times', 'en'), ('to', 'en'), ('too', 'en'), ('true', 'en'), ('under', 'en'), ('until', 'en'), ('up', 'en'), ('upon', 'en'), ('use', 'en'), ('user', 'en'), ('users', 'en'), ('version', 'en'), ('very', 'en'), ('via', 'en'), ('want', 'en'), ('was', 'en'), ('way', 'en'), ('were', 'en'), ('what', 'en'), ('when', 'en'), ('where', 'en'), ('which', 'en'), ('who', 'en'), ('whom', 'en'), ('whose', 'en'), ('why', 'en'), ('wide', 'en'), ('will', 'en'), ('with', 'en'), ('within', 'en'), ('without', 'en'), ('would', 'en'), ('yes', 'en'), ('yet', 'en'), ('you', 'en'), ('your', 'en'), ('yours', 'en'); -- -- Table structure for table `#__finder_tokens` -- CREATE TABLE IF NOT EXISTS `#__finder_tokens` ( `term` varchar(75) NOT NULL, `stem` varchar(75) NOT NULL, `common` tinyint(1) unsigned NOT NULL DEFAULT 0, `phrase` tinyint(1) unsigned NOT NULL DEFAULT 0, `weight` float unsigned NOT NULL DEFAULT 1, `context` tinyint(1) unsigned NOT NULL DEFAULT 2, `language` char(3) NOT NULL DEFAULT '', KEY `idx_word` (`term`), KEY `idx_context` (`context`) ) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_tokens_aggregate` -- CREATE TABLE IF NOT EXISTS `#__finder_tokens_aggregate` ( `term_id` int(10) unsigned NOT NULL, `map_suffix` char(1) NOT NULL, `term` varchar(75) NOT NULL, `stem` varchar(75) NOT NULL, `common` tinyint(1) unsigned NOT NULL DEFAULT 0, `phrase` tinyint(1) unsigned NOT NULL DEFAULT 0, `term_weight` float unsigned NOT NULL, `context` tinyint(1) unsigned NOT NULL DEFAULT 2, `context_weight` float unsigned NOT NULL, `total_weight` float unsigned NOT NULL, `language` char(3) NOT NULL DEFAULT '', KEY `token` (`term`), KEY `keyword_id` (`term_id`) ) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; -- -- Table structure for table `#__finder_types` -- CREATE TABLE IF NOT EXISTS `#__finder_types` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL, `mime` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `title` (`title`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci; PKb��\�; ��0components/com_finder/sql/install.postgresql.sqlnu�[���-- -- Table: #__finder_filters -- CREATE TABLE "#__finder_filters" ( "filter_id" serial NOT NULL, "title" character varying(255) NOT NULL, "alias" character varying(255) NOT NULL, "state" smallint DEFAULT 1 NOT NULL, "created" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "created_by" integer NOT NULL, "created_by_alias" character varying(255) NOT NULL, "modified" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "modified_by" integer DEFAULT 0 NOT NULL, "checked_out" integer DEFAULT 0 NOT NULL, "checked_out_time" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "map_count" integer DEFAULT 0 NOT NULL, "data" text NOT NULL, "params" text, PRIMARY KEY ("filter_id") ); -- -- Table: #__finder_links -- CREATE TABLE "#__finder_links" ( "link_id" serial NOT NULL, "url" character varying(255) NOT NULL, "route" character varying(255) NOT NULL, "title" character varying(255) DEFAULT NULL, "description" character varying(255) DEFAULT NULL, "indexdate" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "md5sum" character varying(32) DEFAULT NULL, "published" smallint DEFAULT 1 NOT NULL, "state" integer DEFAULT 1, "access" integer DEFAULT 0, "language" character varying(8) NOT NULL, "publish_start_date" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "publish_end_date" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "start_date" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "end_date" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "list_price" numeric(8,2) DEFAULT 0 NOT NULL, "sale_price" numeric(8,2) DEFAULT 0 NOT NULL, "type_id" bigint NOT NULL, "object" bytea NOT NULL, PRIMARY KEY ("link_id") ); CREATE INDEX "#__finder_links_idx_type" on "#__finder_links" ("type_id"); CREATE INDEX "#__finder_links_idx_title" on "#__finder_links" ("title"); CREATE INDEX "#__finder_links_idx_md5" on "#__finder_links" ("md5sum"); CREATE INDEX "#__finder_links_idx_url" on "#__finder_links" (url(75)); CREATE INDEX "#__finder_links_idx_published_list" on "#__finder_links" ("published", "state", "access", "publish_start_date", "publish_end_date", "list_price"); CREATE INDEX "#__finder_links_idx_published_sale" on "#__finder_links" ("published", "state", "access", "publish_start_date", "publish_end_date", "sale_price"); -- -- Table: #__finder_links_terms0 -- CREATE TABLE "#__finder_links_terms0" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms0_idx_term_weight" on "#__finder_links_terms0" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms0_idx_link_term_weight" on "#__finder_links_terms0" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms1 -- CREATE TABLE "#__finder_links_terms1" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms1_idx_term_weight" on "#__finder_links_terms1" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms1_idx_link_term_weight" on "#__finder_links_terms1" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms2 -- CREATE TABLE "#__finder_links_terms2" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms2_idx_term_weight" on "#__finder_links_terms2" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms2_idx_link_term_weight" on "#__finder_links_terms2" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms3 -- CREATE TABLE "#__finder_links_terms3" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms3_idx_term_weight" on "#__finder_links_terms3" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms3_idx_link_term_weight" on "#__finder_links_terms3" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms4 -- CREATE TABLE "#__finder_links_terms4" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms4_idx_term_weight" on "#__finder_links_terms4" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms4_idx_link_term_weight" on "#__finder_links_terms4" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms5 -- CREATE TABLE "#__finder_links_terms5" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms5_idx_term_weight" on "#__finder_links_terms5" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms5_idx_link_term_weight" on "#__finder_links_terms5" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms6 -- CREATE TABLE "#__finder_links_terms6" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms6_idx_term_weight" on "#__finder_links_terms6" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms6_idx_link_term_weight" on "#__finder_links_terms6" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms7 -- CREATE TABLE "#__finder_links_terms7" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms7_idx_term_weight" on "#__finder_links_terms7" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms7_idx_link_term_weight" on "#__finder_links_terms7" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms8 -- CREATE TABLE "#__finder_links_terms8" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms8_idx_term_weight" on "#__finder_links_terms8" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms8_idx_link_term_weight" on "#__finder_links_terms8" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_terms9 -- CREATE TABLE "#__finder_links_terms9" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_terms9_idx_term_weight" on "#__finder_links_terms9" ("term_id", "weight"); CREATE INDEX "#__finder_links_terms9_idx_link_term_weight" on "#__finder_links_terms9" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termsa -- CREATE TABLE "#__finder_links_termsa" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termsa_idx_term_weight" on "#__finder_links_termsa" ("term_id", "weight"); CREATE INDEX "#__finder_links_termsa_idx_link_term_weight" on "#__finder_links_termsa" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termsb -- CREATE TABLE "#__finder_links_termsb" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termsb_idx_term_weight" on "#__finder_links_termsb" ("term_id", "weight"); CREATE INDEX "#__finder_links_termsb_idx_link_term_weight" on "#__finder_links_termsb" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termsc -- CREATE TABLE "#__finder_links_termsc" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termsc_idx_term_weight" on "#__finder_links_termsc" ("term_id", "weight"); CREATE INDEX "#__finder_links_termsc_idx_link_term_weight" on "#__finder_links_termsc" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termsd -- CREATE TABLE "#__finder_links_termsd" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termsd_idx_term_weight" on "#__finder_links_termsd" ("term_id", "weight"); CREATE INDEX "#__finder_links_termsd_idx_link_term_weight" on "#__finder_links_termsd" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termse -- CREATE TABLE "#__finder_links_termse" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termse_idx_term_weight" on "#__finder_links_termse" ("term_id", "weight"); CREATE INDEX "#__finder_links_termse_idx_link_term_weight" on "#__finder_links_termse" ("link_id", "term_id", "weight"); -- -- Table: #__finder_links_termsf -- CREATE TABLE "#__finder_links_termsf" ( "link_id" integer NOT NULL, "term_id" integer NOT NULL, "weight" numeric(8,2) NOT NULL, PRIMARY KEY ("link_id", "term_id") ); CREATE INDEX "#__finder_links_termsf_idx_term_weight" on "#__finder_links_termsf" ("term_id", "weight"); CREATE INDEX "#__finder_links_termsf_idx_link_term_weight" on "#__finder_links_termsf" ("link_id", "term_id", "weight"); -- -- Table: #__finder_taxonomy -- CREATE TABLE "#__finder_taxonomy" ( "id" serial NOT NULL, "parent_id" integer DEFAULT 0 NOT NULL, "title" character varying(255) NOT NULL, "state" smallint DEFAULT 1 NOT NULL, "access" smallint DEFAULT 0 NOT NULL, "ordering" smallint DEFAULT 0 NOT NULL, PRIMARY KEY ("id") ); CREATE INDEX "#__finder_taxonomy_parent_id" on "#__finder_taxonomy" ("parent_id"); CREATE INDEX "#__finder_taxonomy_state" on "#__finder_taxonomy" ("state"); CREATE INDEX "#__finder_taxonomy_ordering" on "#__finder_taxonomy" ("ordering"); CREATE INDEX "#__finder_taxonomy_access" on "#__finder_taxonomy" ("access"); CREATE INDEX "#__finder_taxonomy_idx_parent_published" on "#__finder_taxonomy" ("parent_id", "state", "access"); -- -- Dumping data for table #__finder_taxonomy -- UPDATE "#__finder_taxonomy" SET ("id", "parent_id", "title", "state", "access", "ordering") = (1, 0, 'ROOT', 0, 0, 0) WHERE "id"=1; INSERT INTO "#__finder_taxonomy" ("id", "parent_id", "title", "state", "access", "ordering") SELECT 1, 0, 'ROOT', 0, 0, 0 WHERE 1 NOT IN (SELECT 1 FROM "#__finder_taxonomy" WHERE "id"=1); -- -- Table: #__finder_taxonomy_map -- CREATE TABLE "#__finder_taxonomy_map" ( "link_id" integer NOT NULL, "node_id" integer NOT NULL, PRIMARY KEY ("link_id", "node_id") ); CREATE INDEX "#__finder_taxonomy_map_link_id" on "#__finder_taxonomy_map" ("link_id"); CREATE INDEX "#__finder_taxonomy_map_node_id" on "#__finder_taxonomy_map" ("node_id"); -- -- Table: #__finder_terms -- CREATE TABLE "#__finder_terms" ( "term_id" serial NOT NULL, "term" character varying(75) NOT NULL, "stem" character varying(75) NOT NULL, "common" smallint DEFAULT 0 NOT NULL, "phrase" smallint DEFAULT 0 NOT NULL, "weight" numeric(8,2) DEFAULT 0 NOT NULL, "soundex" character varying(75) NOT NULL, "links" integer DEFAULT 0 NOT NULL, PRIMARY KEY ("term_id"), CONSTRAINT "#__finder_terms_idx_term" UNIQUE ("term") ); CREATE INDEX "#__finder_terms_idx_term_phrase" on "#__finder_terms" ("term", "phrase"); CREATE INDEX "#__finder_terms_idx_stem_phrase" on "#__finder_terms" ("stem", "phrase"); CREATE INDEX "#__finder_terms_idx_soundex_phrase" on "#__finder_terms" ("soundex", "phrase"); -- -- Table: #__finder_terms_common -- CREATE TABLE "#__finder_terms_common" ( "term" character varying(75) NOT NULL, "language" character varying(3) NOT NULL ); CREATE INDEX "#__finder_terms_common_idx_word_lang" on "#__finder_terms_common" ("term", "language"); CREATE INDEX "#__finder_terms_common_idx_lang" on "#__finder_terms_common" ("language"); -- -- Dumping data for table `#__finder_terms_common` -- -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('a', 'en') WHERE "term"='a'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'a', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='a'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('about', 'en') WHERE "term"='about'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'about', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='about'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('after', 'en') WHERE "term"='after'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'after', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='after'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('ago', 'en') WHERE "term"='ago'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'ago', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='ago'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('all', 'en') WHERE "term"='all'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'all', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='all'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('am', 'en') WHERE "term"='am'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'am', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='am'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('an', 'en') WHERE "term"='an'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'an', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='an'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('and', 'en') WHERE "term"='and'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'and', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='and'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('any', 'en') WHERE "term"='any'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'any', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='any'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('are', 'en') WHERE "term"='are'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'are', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='are'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('aren''t', 'en') WHERE "term"='aren''t'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'aren''t', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='aren''t'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('as', 'en') WHERE "term"='as'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'as', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='as'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('at', 'en') WHERE "term"='at'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'at', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='at'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('be', 'en') WHERE "term"='be'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'be', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='be'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('but', 'en') WHERE "term"='but'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'but', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='but'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('by', 'en') WHERE "term"='by'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'by', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='by'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('for', 'en') WHERE "term"='for'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'for', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='for'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('from', 'en') WHERE "term"='from'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'from', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='from'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('get', 'en') WHERE "term"='get'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'get', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='get'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('go', 'en') WHERE "term"='go'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'go', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='go'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('how', 'en') WHERE "term"='how'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'how', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='how'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('if', 'en') WHERE "term"='if'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'if', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='if'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('in', 'en') WHERE "term"='in'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'in', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='in'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('into', 'en') WHERE "term"='into'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'into', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='into'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('is', 'en') WHERE "term"='is'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'is', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='is'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('isn''t', 'en') WHERE "term"='isn''t'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'isn''t', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='isn''t'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('it', 'en') WHERE "term"='it'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'it', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='it'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('its', 'en') WHERE "term"='its'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'its', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='its'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('me', 'en') WHERE "term"='me'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'me', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='me'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('more', 'en') WHERE "term"='more'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'more', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='more'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('most', 'en') WHERE "term"='most'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'most', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='most'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('must', 'en') WHERE "term"='must'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'must', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='must'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('my', 'en') WHERE "term"='my'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'my', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='my'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('new', 'en') WHERE "term"='new'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'new', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='new'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('no', 'en') WHERE "term"='no'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'no', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='no'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('none', 'en') WHERE "term"='none'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'none', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='none'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('not', 'en') WHERE "term"='not'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'not', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='not'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('nothing', 'en') WHERE "term"='nothing'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'nothing', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='nothing'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('of', 'en') WHERE "term"='of'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'of', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='of'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('off', 'en') WHERE "term"='off'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'off', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='off'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('often', 'en') WHERE "term"='often'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'often', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='often'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('old', 'en') WHERE "term"='old'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'old', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='old'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('on', 'en') WHERE "term"='on'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'on', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='on'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('onc', 'en') WHERE "term"='onc'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'onc', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='onc'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('once', 'en') WHERE "term"='once'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'once', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='once'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('only', 'en') WHERE "term"='only'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'only', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='only'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('or', 'en') WHERE "term"='or'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'or', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='or'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('other', 'en') WHERE "term"='other'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'other', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='other'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('our', 'en') WHERE "term"='our'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'our', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='our'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('ours', 'en') WHERE "term"='ours'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'ours', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='ours'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('out', 'en') WHERE "term"='out'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'out', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='out'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('over', 'en') WHERE "term"='over'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'over', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='over'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('page', 'en') WHERE "term"='page'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'page', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='page'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('she', 'en') WHERE "term"='she'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'she', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='she'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('should', 'en') WHERE "term"='should'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'should', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='should'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('small', 'en') WHERE "term"='small'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'small', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='small'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('so', 'en') WHERE "term"='so'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'so', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='so'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('some', 'en') WHERE "term"='some'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'some', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='some'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('than', 'en') WHERE "term"='than'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'than', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='than'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('thank', 'en') WHERE "term"='thank'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'thank', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='thank'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('that', 'en') WHERE "term"='that'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'that', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='that'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('the', 'en') WHERE "term"='the'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'the', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='the'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('their', 'en') WHERE "term"='their'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'their', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='their'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('theirs', 'en') WHERE "term"='theirs'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'theirs', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='theirs'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('them', 'en') WHERE "term"='them'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'them', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='them'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('then', 'en') WHERE "term"='then'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'then', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='then'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('there', 'en') WHERE "term"='there'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'there', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='there'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('these', 'en') WHERE "term"='these'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'these', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='these'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('they', 'en') WHERE "term"='they'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'they', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='they'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('this', 'en') WHERE "term"='this'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'this', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='this'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('those', 'en') WHERE "term"='those'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'those', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='those'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('thus', 'en') WHERE "term"='thus'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'thus', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='thus'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('time', 'en') WHERE "term"='time'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'time', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='time'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('times', 'en') WHERE "term"='times'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'times', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='times'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('to', 'en') WHERE "term"='to'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'to', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='to'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('too', 'en') WHERE "term"='too'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'too', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='too'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('true', 'en') WHERE "term"='true'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'true', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='true'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('under', 'en')WHERE "term"='under'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'under', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='under'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('until', 'en') WHERE "term"='until'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'until', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='until'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('up', 'en') WHERE "term"='up'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'up', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='up'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('upon', 'en') WHERE "term"='upon'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'upon', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='upon'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('use', 'en') WHERE "term"='use'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'use', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='use'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('user', 'en') WHERE "term"='user'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'user', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='user'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('users', 'en') WHERE "term"='users'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'users', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='users'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('version', 'en') WHERE "term"='version'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'version', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='version'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('very', 'en') WHERE "term"='very'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'very', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='very'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('via', 'en') WHERE "term"='via'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'via', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='via'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('want', 'en') WHERE "term"='want'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'want', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='want'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('was', 'en') WHERE "term"='was'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'was', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='was'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('way', 'en') WHERE "term"='way'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'way', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='way'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('were', 'en') WHERE "term"='were'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'were', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='were'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('what', 'en') WHERE "term"='what'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'what', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='what'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('when', 'en') WHERE "term"='when'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'when', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='when'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('where', 'en') WHERE "term"='where'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'where', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='where'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('which', 'en') WHERE "term"='which'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'which', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='which'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('who', 'en') WHERE "term"='who'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'who', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='who'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('whom', 'en') WHERE "term"='whom'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'whom', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='whom'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('whose', 'en') WHERE "term"='whose'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'whose', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='whose'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('why', 'en') WHERE "term"='why'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'why', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='why'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('wide', 'en') WHERE "term"='wide'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'wide', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='wide'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('will', 'en') WHERE "term"='will'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'will', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='will'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('with', 'en') WHERE "term"='with'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'with', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='with'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('within', 'en') WHERE "term"='within'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'within', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='within'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('without', 'en') WHERE "term"='without'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'without', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='without'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('would', 'en') WHERE "term"='would'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'would', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='would'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('yes', 'en') WHERE "term"='yes'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'yes', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='yes'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('yet', 'en') WHERE "term"='yet'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'yet', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='yet'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('you', 'en') WHERE "term"='you'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'you', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='you'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('your', 'en') WHERE "term"='your'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'your', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='your'); -- UPDATE "#__finder_terms_common" SET ("term", "language") = ('yours', 'en') WHERE "term"='yours'; INSERT INTO "#__finder_terms_common" ("term", "language") SELECT 'yours', 'en' WHERE 1 NOT IN (SELECT 1 FROM "#__finder_terms_common" WHERE "term"='yours'); -- -- Table: #__finder_tokens -- CREATE TABLE "#__finder_tokens" ( "term" character varying(75) NOT NULL, "stem" character varying(75) NOT NULL, "common" smallint DEFAULT 0 NOT NULL, "phrase" smallint DEFAULT 0 NOT NULL, "weight" numeric(8,2) DEFAULT 1 NOT NULL, "context" smallint DEFAULT 2 NOT NULL ); CREATE INDEX "#__finder_tokens_idx_word" on "#__finder_tokens" ("term"); CREATE INDEX "#__finder_tokens_idx_context" on "#__finder_tokens" ("context"); -- -- Table: #__finder_tokens_aggregate -- CREATE TABLE "#__finder_tokens_aggregate" ( "term_id" integer NOT NULL, "map_suffix" character(1) NOT NULL, "term" character varying(75) NOT NULL, "stem" character varying(75) NOT NULL, "common" smallint DEFAULT 0 NOT NULL, "phrase" smallint DEFAULT 0 NOT NULL, "term_weight" numeric(8,2) NOT NULL, "context" smallint DEFAULT 2 NOT NULL, "context_weight" numeric(8,2) NOT NULL, "total_weight" numeric(8,2) NOT NULL ); CREATE INDEX "#__finder_tokens_aggregate_token" on "#__finder_tokens_aggregate" ("term"); CREATE INDEX "_#__finder_tokens_aggregate_keyword_id" on "#__finder_tokens_aggregate" ("term_id"); -- -- Table: #__finder_types -- CREATE TABLE "#__finder_types" ( "id" serial NOT NULL, "title" character varying(100) NOT NULL, "mime" character varying(100) NOT NULL, PRIMARY KEY ("id"), CONSTRAINT "#__finder_types_title" UNIQUE ("title") ); PKb��\�1�iww-components/com_finder/sql/uninstall.mysql.sqlnu�[���DROP TABLE IF EXISTS `#__finder_filters`; DROP TABLE IF EXISTS `#__finder_links`; DROP TABLE IF EXISTS `#__finder_links_terms0`; DROP TABLE IF EXISTS `#__finder_links_terms1`; DROP TABLE IF EXISTS `#__finder_links_terms2`; DROP TABLE IF EXISTS `#__finder_links_terms3`; DROP TABLE IF EXISTS `#__finder_links_terms4`; DROP TABLE IF EXISTS `#__finder_links_terms5`; DROP TABLE IF EXISTS `#__finder_links_terms6`; DROP TABLE IF EXISTS `#__finder_links_terms7`; DROP TABLE IF EXISTS `#__finder_links_terms8`; DROP TABLE IF EXISTS `#__finder_links_terms9`; DROP TABLE IF EXISTS `#__finder_links_termsa`; DROP TABLE IF EXISTS `#__finder_links_termsb`; DROP TABLE IF EXISTS `#__finder_links_termsc`; DROP TABLE IF EXISTS `#__finder_links_termsd`; DROP TABLE IF EXISTS `#__finder_links_termse`; DROP TABLE IF EXISTS `#__finder_links_termsf`; DROP TABLE IF EXISTS `#__finder_taxonomy`; DROP TABLE IF EXISTS `#__finder_taxonomy_map`; DROP TABLE IF EXISTS `#__finder_terms`; DROP TABLE IF EXISTS `#__finder_terms_common`; DROP TABLE IF EXISTS `#__finder_tokens`; DROP TABLE IF EXISTS `#__finder_tokens_aggregate`; DROP TABLE IF EXISTS `#__finder_types`; PKb��\|I�33 components/com_finder/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_finder"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKb��\�%�"� � 0components/com_finder/views/filter/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.tabstate'); JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(task) { if (task == "filter.cancel" || document.formvalidator.isValid(document.getElementById("adminForm"))) { Joomla.submitform(task, document.getElementById("adminForm")); } }; jQuery(document).ready(function($) { $("#rightbtn").on("click", function() { if($(this).text() == "' . JText::_('COM_FINDER_FILTER_SHOW_ALL') . '") { $(".collapse:not(.in)").each(function (index) { $(this).collapse("toggle"); }); $(this).text("' . JText::_('COM_FINDER_FILTER_HIDE_ALL') . '"); } else { $(this).text("' . JText::_('COM_FINDER_FILTER_SHOW_ALL') . '"); $(".collapse.in").each(function (index) { $(this).collapse("toggle"); }); } return false; }); $(".filter-node").change(function() { $(\'input[id="jform_map_count"]\').val(document.querySelectorAll(\'input[type="checkbox"]:checked\').length); }); }); '); JFactory::getDocument()->addStyleDeclaration(' .accordion-inner .control-group .controls { margin-left: 10px; } .accordion-inner > .control-group { margin-bottom: 0; } '); ?> <form action="<?php echo JRoute::_('index.php?option=com_finder&view=filter&layout=edit&filter_id=' . (int) $this->item->filter_id); ?>" method="post" name="adminForm" id="adminForm" class="form-validate"> <?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?> <div class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'details')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'details', JText::_('COM_FINDER_EDIT_FILTER')); ?> <div class="row-fluid"> <div class="span9"> <?php if ($this->total > 0) : ?> <div class="well"> <?php echo $this->form->renderField('map_count'); ?> </div> <button class="btn jform-rightbtn" type="button" onclick="jQuery('.filter-node').each(function () { this.click(); });"> <span class="icon-checkbox-partial" aria-hidden="true"></span> <?php echo JText::_('JGLOBAL_SELECTION_INVERT'); ?></button> <button class="btn pull-right" type="button" id="rightbtn" ><?php echo JText::_('COM_FINDER_FILTER_SHOW_ALL'); ?></button> <hr> <?php endif; ?> <?php echo JHtml::_('filter.slider', array('selected_nodes' => $this->filter->data)); ?> </div> <div class="span3"> <?php echo JLayoutHelper::render('joomla.edit.global', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'publishing', JText::_('JGLOBAL_FIELDSET_PUBLISHING')); ?> <div class="row-fluid form-horizontal-desktop"> <?php echo JLayoutHelper::render('joomla.edit.publishingdata', $this); ?> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> </div> <input type="hidden" name="task" value="" /> <input type="hidden" name="return" value="<?php echo JFactory::getApplication()->input->get('return', '', 'cmd'); ?>" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\naMsh h 0components/com_finder/views/filter/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Filter view class for Finder. * * @since 2.5 */ class FinderViewFilter extends JViewLegacy { /** * The filter object * * @var FinderTableFilter * * @since 3.6.2 */ protected $filter; /** * The JForm object * * @var JForm * * @since 3.6.2 */ protected $form; /** * The active item * * @var JObject|boolean * * @since 3.6.2 */ protected $item; /** * The model state * * @var mixed * * @since 3.6.2 */ protected $state; /** * The total indexed items * * @var integer * * @since 3.8.0 */ protected $total; /** * Method to display the view. * * @param string $tpl A template file to load. [optional] * * @return mixed A string if successful, otherwise a JError object. * * @since 2.5 */ public function display($tpl = null) { // Load the view data. $this->filter = $this->get('Filter'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); $this->state = $this->get('State'); $this->total = $this->get('Total'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::addIncludePath(JPATH_SITE . '/components/com_finder/helpers/html'); // Configure the toolbar. $this->addToolbar(); return parent::display($tpl); } /** * Method to configure the toolbar for this view. * * @return void * * @since 2.5 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $isNew = ($this->item->filter_id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == JFactory::getUser()->id); $canDo = JHelperContent::getActions('com_finder'); // Configure the toolbar. JToolbarHelper::title( $isNew ? JText::_('COM_FINDER_FILTER_NEW_TOOLBAR_TITLE') : JText::_('COM_FINDER_FILTER_EDIT_TOOLBAR_TITLE'), 'zoom-in finder' ); // Set the actions for new and existing records. if ($isNew) { // For new records, check the create permission. if ($canDo->get('core.create')) { JToolbarHelper::apply('filter.apply'); JToolbarHelper::save('filter.save'); JToolbarHelper::save2new('filter.save2new'); } JToolbarHelper::cancel('filter.cancel'); } else { // Can't save the record if it's checked out. // Since it's an existing record, check the edit permission. if (!$checkedOut && $canDo->get('core.edit')) { JToolbarHelper::apply('filter.apply'); JToolbarHelper::save('filter.save'); // We can save this record, but check the create permission to see if we can return to make a new one. if ($canDo->get('core.create')) { JToolbarHelper::save2new('filter.save2new'); } } // If an existing item, can save as a copy if ($canDo->get('core.create')) { JToolbarHelper::save2copy('filter.save2copy'); } JToolbarHelper::cancel('filter.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS_EDIT'); } } PKb��\���>��4components/com_finder/views/filters/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.tooltip'); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); JText::script('COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT'); JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(pressbutton) { if (pressbutton == "filters.delete") { if (confirm(Joomla.JText._("COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT"))) { Joomla.submitform(pressbutton); } else { return false; } } Joomla.submitform(pressbutton); }; '); ?> <form action="<?php echo JRoute::_('index.php?option=com_finder&view=filters'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"> </div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('COM_FINDER_NO_RESULTS_OR_FILTERS'); ?> </div> <?php else : ?> <table class="table table-striped"> <thead> <tr> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_FINDER_HEADING_CREATED_BY', 'a.created_by_alias', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_FINDER_HEADING_CREATED_ON', 'a.created', $listDirn, $listOrder); ?> </th> <th width="5%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_FINDER_HEADING_MAP_COUNT', 'a.map_count', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.filter_id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="7"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $canCreate = $user->authorise('core.create', 'com_finder'); $canEdit = $user->authorise('core.edit', 'com_finder'); $userAuthoriseCoreManage = $user->authorise('core.manage', 'com_checkin'); $userAuthoriseCoreEditState = $user->authorise('core.edit.state', 'com_finder'); $userId = $user->get('id'); foreach ($this->items as $i => $item) : $canCheckIn = $userAuthoriseCoreManage || $item->checked_out == $userId || $item->checked_out == 0; $canChange = $userAuthoriseCoreEditState && $canCheckIn; $escapedTitle = $this->escape($item->title); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->filter_id); ?> </td> <td class="center nowrap"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'filters.', $canChange); ?> </td> <td> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'filters.', $canCheckIn); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_finder&task=filter.edit&filter_id=' . (int) $item->filter_id); ?>"> <?php echo $escapedTitle; ?></a> <?php else : ?> <?php echo $escapedTitle; ?> <?php endif; ?> </td> <td class="nowrap hidden-phone"> <?php echo $item->created_by_alias ?: $item->user_name; ?> </td> <td class="nowrap hidden-phone"> <?php echo JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC4')); ?> </td> <td class="nowrap hidden-phone"> <?php echo $item->map_count; ?> </td> <td class="hidden-phone"> <?php echo (int) $item->filter_id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\5���1components/com_finder/views/filters/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Filters view class for Finder. * * @since 2.5 */ class FinderViewFilters extends JViewLegacy { /** * An array of items * * @var array * * @since 3.6.1 */ protected $items; /** * The pagination object * * @var JPagination * * @since 3.6.1 */ protected $pagination; /** * The HTML markup for the sidebar * * @var string * * @since 3.6.1 */ protected $sidebar; /** * The model state * * @var mixed * * @since 3.6.1 */ protected $state; /** * The total number of items * * @var integer * * @since 3.6.1 */ protected $total; /** * Method to display the view. * * @param string $tpl A template file to load. [optional] * * @return mixed A string if successful, otherwise a JError object. * * @since 2.5 */ public function display($tpl = null) { // Load the view data. $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->total = $this->get('Total'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); FinderHelper::addSubmenu('filters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // Configure the toolbar. $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); return parent::display($tpl); } /** * Method to configure the toolbar for this view. * * @return void * * @since 2.5 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_finder'); JToolbarHelper::title(JText::_('COM_FINDER_FILTERS_TOOLBAR_TITLE'), 'zoom-in finder'); $toolbar = JToolbar::getInstance('toolbar'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('filter.add'); JToolbarHelper::editList('filter.edit'); JToolbarHelper::divider(); } if ($canDo->get('core.edit.state')) { JToolbarHelper::publishList('filters.publish'); JToolbarHelper::unpublishList('filters.unpublish'); JToolbarHelper::checkin('filters.checkin'); JToolbarHelper::divider(); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_finder'); } JToolbarHelper::divider(); $toolbar->appendButton('Popup', 'bars', 'COM_FINDER_STATISTICS', 'index.php?option=com_finder&view=statistics&tmpl=component', 550, 350); JToolbarHelper::divider(); JToolbarHelper::help('JHELP_COMPONENTS_FINDER_MANAGE_SEARCH_FILTERS'); if ($canDo->get('core.delete')) { JToolbarHelper::deleteList('', 'filters.delete'); JToolbarHelper::divider(); } } } PKb��\���(��2components/com_finder/views/index/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.popover'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $lang = JFactory::getLanguage(); JText::script('COM_FINDER_INDEX_CONFIRM_PURGE_PROMPT'); JText::script('COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT'); JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(pressbutton) { if (pressbutton == "index.purge") { if (confirm(Joomla.JText._("COM_FINDER_INDEX_CONFIRM_PURGE_PROMPT"))) { Joomla.submitform(pressbutton); } else { return false; } } if (pressbutton == "index.delete") { if (confirm(Joomla.JText._("COM_FINDER_INDEX_CONFIRM_DELETE_PROMPT"))) { Joomla.submitform(pressbutton); } else { return false; } } Joomla.submitform(pressbutton); }; '); ?> <form action="<?php echo JRoute::_('index.php?option=com_finder&view=index'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <table class="table table-striped"> <thead> <tr> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'l.published', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'l.title', $listDirn, $listOrder); ?> </th> <th width="5%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_FINDER_INDEX_HEADING_INDEX_TYPE', 't.title', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_FINDER_INDEX_HEADING_INDEX_DATE', 'l.indexdate', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap center hidden-phone hidden-tablet"> <?php echo JText::_('COM_FINDER_INDEX_HEADING_DETAILS'); ?> </th> <th width="35%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_FINDER_INDEX_HEADING_LINK_URL', 'l.url', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="7"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $canChange = JFactory::getUser()->authorise('core.manage', 'com_finder'); ?> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->link_id); ?> </td> <td class="center"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'index.', $canChange, 'cb'); ?> </td> <td> <label for="cb<?php echo $i ?>"> <?php echo $this->escape($item->title); ?> </label> </td> <td class="small nowrap hidden-phone"> <?php $key = FinderHelperLanguage::branchSingular($item->t_title); echo $lang->hasKey($key) ? JText::_($key) : $item->t_title; ?> </td> <td class="small nowrap hidden-phone"> <?php echo JHtml::_('date', $item->indexdate, JText::_('DATE_FORMAT_LC4')); ?> </td> <td class="center hidden-phone hidden-tablet"> <?php if ((int) $item->publish_start_date || (int) $item->publish_end_date || (int) $item->start_date || (int) $item->end_date) : ?> <span class="icon-calendar pop hasPopover" aria-hidden="true" data-placement="left" title="<?php echo JText::_('COM_FINDER_INDEX_DATE_INFO_TITLE'); ?>" data-content="<?php echo JText::sprintf('COM_FINDER_INDEX_DATE_INFO', $item->publish_start_date, $item->publish_end_date, $item->start_date, $item->end_date); ?>"></span> <span class="element-invisible"><?php echo JText::sprintf('COM_FINDER_INDEX_DATE_INFO', $item->publish_start_date, $item->publish_end_date, $item->start_date, $item->end_date); ?></span> <?php endif; ?> </td> <td class="small break-word hidden-phone hidden-tablet"> <?php echo (strlen($item->url) > 80) ? substr($item->url, 0, 70) . '...' : $item->url; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <input type="hidden" name="task" value="display" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\O��X__/components/com_finder/views/index/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('FinderHelperLanguage', JPATH_ADMINISTRATOR . '/components/com_finder/helpers/language.php'); /** * Index view class for Finder. * * @since 2.5 */ class FinderViewIndex extends JViewLegacy { /** * An array of items * * @var array * * @since 3.6.1 */ protected $items; /** * The pagination object * * @var JPagination * * @since 3.6.1 */ protected $pagination; /** * The state of core Smart Search plugins * * @var array * * @since 3.6.1 */ protected $pluginState; /** * The HTML markup for the sidebar * * @var string * * @since 3.6.1 */ protected $sidebar; /** * The model state * * @var mixed * * @since 3.6.1 */ protected $state; /** * The total number of items * * @var integer * * @since 3.6.1 */ protected $total; /** * Method to display the view. * * @param string $tpl A template file to load. [optional] * * @return mixed A string if successful, otherwise a JError object. * * @since 2.5 */ public function display($tpl = null) { // Load plugin language files. FinderHelperLanguage::loadPluginLanguage(); $this->items = $this->get('Items'); $this->total = $this->get('Total'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->pluginState = $this->get('pluginState'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); FinderHelper::addSubmenu('index'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } if (!$this->pluginState['plg_content_finder']->enabled) { $link = JRoute::_('index.php?option=com_plugins&task=plugin.edit&extension_id=' . FinderHelper::getFinderPluginId()); JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_FINDER_INDEX_PLUGIN_CONTENT_NOT_ENABLED', $link), 'warning'); } elseif ($this->get('TotalIndexed') === 0) { JFactory::getApplication()->enqueueMessage(JText::_('COM_FINDER_INDEX_NO_DATA') . ' ' . JText::_('COM_FINDER_INDEX_TIP'), 'notice'); } JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // Configure the toolbar. $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); return parent::display($tpl); } /** * Method to configure the toolbar for this view. * * @return void * * @since 2.5 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_finder'); JToolbarHelper::title(JText::_('COM_FINDER_INDEX_TOOLBAR_TITLE'), 'zoom-in finder'); $toolbar = JToolbar::getInstance('toolbar'); $toolbar->appendButton( 'Popup', 'archive', 'COM_FINDER_INDEX', 'index.php?option=com_finder&view=indexer&tmpl=component', 500, 210, 0, 0, 'window.parent.location.reload()', 'COM_FINDER_HEADING_INDEXER' ); if ($canDo->get('core.edit.state')) { JToolbarHelper::publishList('index.publish'); JToolbarHelper::unpublishList('index.unpublish'); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_finder'); } $toolbar->appendButton('Popup', 'bars', 'COM_FINDER_STATISTICS', 'index.php?option=com_finder&view=statistics&tmpl=component', 550, 350); if ($canDo->get('core.delete')) { JToolbarHelper::deleteList('', 'index.delete'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::trash('index.purge', 'COM_FINDER_INDEX_TOOLBAR_PURGE', false); } JToolbarHelper::help('JHELP_COMPONENTS_FINDER_MANAGE_INDEXED_CONTENT'); } } PKb��\��4OO7components/com_finder/views/statistics/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <h3> <?php echo JText::_('COM_FINDER_STATISTICS_TITLE'); ?> </h3> <div class="row-fluid"> <div class="span12"> <p class="tab-description"><?php echo JText::sprintf('COM_FINDER_STATISTICS_STATS_DESCRIPTION', number_format($this->data->term_count, 0, JText::_('DECIMALS_SEPARATOR'), JText::_('THOUSANDS_SEPARATOR')), number_format($this->data->link_count, 0, JText::_('DECIMALS_SEPARATOR'), JText::_('THOUSANDS_SEPARATOR')), number_format($this->data->taxonomy_node_count, 0, JText::_('DECIMALS_SEPARATOR'), JText::_('THOUSANDS_SEPARATOR')), number_format($this->data->taxonomy_branch_count, 0, JText::_('DECIMALS_SEPARATOR'), JText::_('THOUSANDS_SEPARATOR'))); ?></p> <table class="table table-striped table-condensed"> <thead> <tr> <th> <?php echo JText::_('COM_FINDER_STATISTICS_LINK_TYPE_HEADING'); ?> </th> <th> <?php echo JText::_('COM_FINDER_STATISTICS_LINK_TYPE_COUNT'); ?> </th> </tr> </thead> <tbody> <?php foreach ($this->data->type_list as $type) : ?> <tr> <td> <?php $lang_key = 'PLG_FINDER_STATISTICS_' . str_replace(' ', '_', $type->type_title); $lang_string = JText::_($lang_key); echo $lang_string === $lang_key ? $type->type_title : $lang_string; ?> </td> <td> <span class="badge badge-info"><?php echo number_format($type->link_count, 0, JText::_('DECIMALS_SEPARATOR'), JText::_('THOUSANDS_SEPARATOR')); ?></span> </td> </tr> <?php endforeach; ?> <tr> <td> <strong><?php echo JText::_('COM_FINDER_STATISTICS_LINK_TYPE_TOTAL'); ?></strong> </td> <td> <span class="badge badge-info"><?php echo number_format($this->data->link_count, 0, JText::_('DECIMALS_SEPARATOR'), JText::_('THOUSANDS_SEPARATOR')); ?></span> </td> </tr> </tbody> </table> </div> </div> PKb��\ǥ����4components/com_finder/views/statistics/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Statistics view class for Finder. * * @since 2.5 */ class FinderViewStatistics extends JViewLegacy { /** * The index statistics * * @var JObject * * @since 3.6.1 */ protected $data; /** * Method to display the view. * * @param string $tpl A template file to load. [optional] * * @return mixed A string if successful, otherwise a JError object. * * @since 2.5 */ public function display($tpl = null) { // Load the view data. $this->data = $this->get('Data'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } return parent::display($tpl); } } PKb��\�6���1components/com_finder/views/maps/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $lang = JFactory::getLanguage(); $branchFilter = $this->escape($this->state->get('filter.branch')); $colSpan = $branchFilter ? 5 : 6; JText::script('COM_FINDER_MAPS_CONFIRM_DELETE_PROMPT'); JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(pressbutton) { if (pressbutton == "map.delete") { if (confirm(Joomla.JText._("COM_FINDER_MAPS_CONFIRM_DELETE_PROMPT"))) { Joomla.submitform(pressbutton); } else { return false; } } Joomla.submitform(pressbutton); }; '); ?> <form action="<?php echo JRoute::_('index.php?option=com_finder&view=maps'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"> </div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('COM_FINDER_MAPS_NO_CONTENT'); ?> </div> <?php else : ?> <table class="table table-striped"> <thead> <tr> <th width="1%" class="center nowrap"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="center nowrap"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'd.branch_title', $listDirn, $listOrder); ?> </th> <?php if (!$branchFilter) : ?> <th width="1%" class="nowrap center"> <?php echo JText::_('COM_FINDER_HEADING_CHILDREN'); ?> </th> <?php endif; ?> <th width="1%" class="nowrap center"> <span class="icon-publish" aria-hidden="true"></span> <span class="hidden-phone"><?php echo JText::_('COM_FINDER_MAPS_COUNT_PUBLISHED_ITEMS'); ?></span> </th> <th width="1%" class="nowrap center"> <span class="icon-unpublish" aria-hidden="true"></span> <span class="hidden-phone"><?php echo JText::_('COM_FINDER_MAPS_COUNT_UNPUBLISHED_ITEMS'); ?></span> </th> </tr> </thead> <tfoot> <tr> <td colspan="<?php echo $colSpan; ?>"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $canChange = JFactory::getUser()->authorise('core.manage', 'com_finder'); ?> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td class="center nowrap"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'maps.', $canChange, 'cb'); ?> </td> <td> <?php if (trim($item->parent_title, '**') === 'Language') { $title = FinderHelperLanguage::branchLanguageTitle($item->title); } else { $key = FinderHelperLanguage::branchSingular($item->title); $title = $lang->hasKey($key) ? JText::_($key) : $item->title; } ?> <?php if ((int) $item->num_children === 0) : ?> <span class="gi">—</span> <?php endif; ?> <label for="cb<?php echo $i; ?>" style="display:inline-block;"> <?php echo $this->escape($title); ?> </label> <?php if ($this->escape(trim($title, '**')) === 'Language' && JLanguageMultilang::isEnabled()) : ?> <strong><?php echo JText::_('COM_FINDER_MAPS_MULTILANG'); ?></strong> <?php endif; ?> </td> <?php if (!$branchFilter) : ?> <td class="center btns"> <?php if ((int) $item->num_children !== 0) : ?> <a href="<?php echo JRoute::_('index.php?option=com_finder&view=maps&filter[branch]=' . $item->id); ?>"> <span class="badge <?php if ($item->num_children > 0) echo 'badge-info'; ?>"><?php echo $item->num_children; ?></span></a> <?php else : ?> - <?php endif; ?> </td> <?php endif; ?> <td class="center btns"> <?php if ((int) $item->num_children === 0) : ?> <a class="badge <?php if ((int) $item->count_published > 0) echo 'badge-success'; ?>" title="<?php echo JText::_('COM_FINDER_MAPS_COUNT_PUBLISHED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=com_finder&view=index&filter[state]=1&filter[content_map]=' . $item->id); ?>"> <?php echo (int) $item->count_published; ?></a> <?php else : ?> - <?php endif; ?> </td> <td class="center btns"> <?php if ((int) $item->num_children === 0) : ?> <a class="badge <?php if ((int) $item->count_unpublished > 0) echo 'badge-important'; ?>" title="<?php echo JText::_('COM_FINDER_MAPS_COUNT_UNPUBLISHED_ITEMS'); ?>" href="<?php echo JRoute::_('index.php?option=com_finder&view=index&filter[state]=0&filter[content_map]=' . $item->id); ?>"> <?php echo (int) $item->count_unpublished; ?></a> <?php else : ?> - <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> </div> <input type="hidden" name="task" value="display" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\�n����.components/com_finder/views/maps/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('FinderHelperLanguage', JPATH_ADMINISTRATOR . '/components/com_finder/helpers/language.php'); /** * Groups view class for Finder. * * @since 2.5 */ class FinderViewMaps extends JViewLegacy { /** * An array of items * * @var array * * @since 3.6.1 */ protected $items; /** * The pagination object * * @var JPagination * * @since 3.6.1 */ protected $pagination; /** * The HTML markup for the sidebar * * @var string * * @since 3.6.1 */ protected $sidebar; /** * The model state * * @var object * * @since 3.6.1 */ protected $state; /** * The total number of items * * @var object * * @since 3.6.1 */ protected $total; /** * Method to display the view. * * @param string $tpl A template file to load. [optional] * * @return mixed A string if successful, otherwise a JError object. * * @since 2.5 */ public function display($tpl = null) { // Load plugin language files. FinderHelperLanguage::loadPluginLanguage(); // Load the view data. $this->items = $this->get('Items'); $this->total = $this->get('Total'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); FinderHelper::addSubmenu('maps'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // Prepare the view. $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); return parent::display($tpl); } /** * Method to configure the toolbar for this view. * * @return void * * @since 2.5 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_finder'); JToolbarHelper::title(JText::_('COM_FINDER_MAPS_TOOLBAR_TITLE'), 'zoom-in finder'); if ($canDo->get('core.edit.state')) { JToolbarHelper::publishList('maps.publish'); JToolbarHelper::unpublishList('maps.unpublish'); JToolbarHelper::divider(); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_finder'); } JToolbarHelper::divider(); JToolbar::getInstance('toolbar')->appendButton( 'Popup', 'bars', 'COM_FINDER_STATISTICS', 'index.php?option=com_finder&view=statistics&tmpl=component', 550, 350 ); JToolbarHelper::divider(); JToolbarHelper::help('JHELP_COMPONENTS_FINDER_MANAGE_CONTENT_MAPS'); if ($canDo->get('core.delete')) { JToolbarHelper::deleteList('', 'maps.delete'); JToolbarHelper::divider(); } } } PKb��\�(�rr4components/com_finder/views/indexer/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.keepalive'); JHtml::_('behavior.core'); JHtml::_('jquery.framework'); JHtml::_('script', 'com_finder/indexer.js', array('version' => 'auto', 'relative' => true)); JFactory::getDocument()->addScriptDeclaration('var msg = "' . JText::_('COM_FINDER_INDEXER_MESSAGE_COMPLETE') . '";'); ?> <div id="finder-indexer-container"> <br /><br /> <h1 id="finder-progress-header"><?php echo JText::_('COM_FINDER_INDEXER_HEADER_INIT'); ?></h1> <p id="finder-progress-message"><?php echo JText::_('COM_FINDER_INDEXER_MESSAGE_INIT'); ?></p> <div id="progress" class="progress progress-striped active"> <div id="progress-bar" class="bar bar-success" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div> </div> <input id="finder-indexer-token" type="hidden" name="<?php echo JFactory::getSession()->getFormToken(); ?>" value="1" /> </div> PKb��\H6���1components/com_finder/views/indexer/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Indexer view class for Finder. * * @since 2.5 */ class FinderViewIndexer extends JViewLegacy { } PKb��\�[p�P P (components/com_finder/helpers/finder.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Helper class for Finder. * * @since 2.5 */ class FinderHelper { /** * The extension name. * * @var string * @since 2.5 */ public static $extension = 'com_finder'; /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void * * @since 2.5 */ public static function addSubmenu($vName) { JHtmlSidebar::addEntry( JText::_('COM_FINDER_SUBMENU_INDEX'), 'index.php?option=com_finder&view=index', $vName === 'index' ); JHtmlSidebar::addEntry( JText::_('COM_FINDER_SUBMENU_MAPS'), 'index.php?option=com_finder&view=maps', $vName === 'maps' ); JHtmlSidebar::addEntry( JText::_('COM_FINDER_SUBMENU_FILTERS'), 'index.php?option=com_finder&view=filters', $vName === 'filters' ); } /** * Gets the finder system plugin extension id. * * @return integer The finder system plugin extension id. * * @since 3.6.0 */ public static function getFinderPluginId() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('extension_id')) ->from($db->quoteName('#__extensions')) ->where($db->quoteName('folder') . ' = ' . $db->quote('content')) ->where($db->quoteName('element') . ' = ' . $db->quote('finder')); $db->setQuery($query); try { $result = (int) $db->loadResult(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } return $result; } /** * Gets a list of the actions that can be performed. * * @return JObject A JObject containing the allowed actions. * * @since 2.5 * @deprecated 3.2 Use JHelperContent::getActions() instead */ public static function getActions() { // Log usage of deprecated function try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions return JHelperContent::getActions('com_finder'); } } PKb��\�/��-components/com_finder/helpers/html/finder.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('FinderHelperLanguage', JPATH_ADMINISTRATOR . '/components/com_finder/helpers/language.php'); use Joomla\Utilities\ArrayHelper; /** * HTML behavior class for Finder. * * @since 2.5 */ abstract class JHtmlFinder { /** * Creates a list of types to filter on. * * @return array An array containing the types that can be selected. * * @since 2.5 */ public static function typeslist() { // Load the finder types. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('DISTINCT t.title AS text, t.id AS value') ->from($db->quoteName('#__finder_types') . ' AS t') ->join('LEFT', $db->quoteName('#__finder_links') . ' AS l ON l.type_id = t.id') ->order('t.title ASC'); $db->setQuery($query); try { $rows = $db->loadObjectList(); } catch (RuntimeException $e) { return array(); } // Compile the options. $options = array(); $lang = JFactory::getLanguage(); foreach ($rows as $row) { $key = $lang->hasKey(FinderHelperLanguage::branchPlural($row->text)) ? FinderHelperLanguage::branchPlural($row->text) : $row->text; $options[] = JHtml::_('select.option', $row->value, JText::sprintf('COM_FINDER_ITEM_X_ONLY', JText::_($key))); } return $options; } /** * Creates a list of maps. * * @return array An array containing the maps that can be selected. * * @since 2.5 */ public static function mapslist() { // Load the finder types. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('title', 'text')) ->select($db->quoteName('id', 'value')) ->from($db->quoteName('#__finder_taxonomy')) ->where($db->quoteName('parent_id') . ' = 1'); $db->setQuery($query); try { $branches = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $db->getMessage()); } // Translate. $lang = JFactory::getLanguage(); foreach ($branches as $branch) { $key = FinderHelperLanguage::branchPlural($branch->text); $branch->translatedText = $lang->hasKey($key) ? JText::_($key) : $branch->text; } // Order by title. $branches = ArrayHelper::sortObjects($branches, 'translatedText', 1, true, true); // Compile the options. $options = array(); $options[] = JHtml::_('select.option', '', JText::_('COM_FINDER_MAPS_SELECT_BRANCH')); // Convert the values to options. foreach ($branches as $branch) { $options[] = JHtml::_('select.option', $branch->value, $branch->translatedText); } return $options; } /** * Creates a list of published states. * * @return array An array containing the states that can be selected. * * @since 2.5 */ public static function statelist() { return array( JHtml::_('select.option', '1', JText::sprintf('COM_FINDER_ITEM_X_ONLY', JText::_('JPUBLISHED'))), JHtml::_('select.option', '0', JText::sprintf('COM_FINDER_ITEM_X_ONLY', JText::_('JUNPUBLISHED'))) ); } } PKb��\���##*components/com_finder/helpers/language.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Finder language helper class. * * @since 2.5 */ class FinderHelperLanguage { /** * Method to return a plural language code for a taxonomy branch. * * @param string $branchName Branch title. * * @return string Language key code. * * @since 2.5 */ public static function branchPlural($branchName) { $return = preg_replace('/[^a-zA-Z0-9]+/', '_', strtoupper($branchName)); if ($return !== '_') { return 'PLG_FINDER_QUERY_FILTER_BRANCH_P_' . $return; } return $branchName; } /** * Method to return a singular language code for a taxonomy branch. * * @param string $branchName Branch name. * * @return string Language key code. * * @since 2.5 */ public static function branchSingular($branchName) { $return = preg_replace('/[^a-zA-Z0-9]+/', '_', strtoupper($branchName)); return 'PLG_FINDER_QUERY_FILTER_BRANCH_S_' . $return; } /** * Method to return the language name for a language taxonomy branch. * * @param string $branchName Language branch name. * * @return string The language title. * * @since 3.6.0 */ public static function branchLanguageTitle($branchName) { $title = $branchName; if ($branchName === '*') { $title = JText::_('JALL_LANGUAGE'); } else { $languages = JLanguageHelper::getLanguages('lang_code'); if (isset($languages[$branchName])) { $title = $languages[$branchName]->title; } } return $title; } /** * Method to load Smart Search component language file. * * @return void * * @since 2.5 */ public static function loadComponentLanguage() { JFactory::getLanguage()->load('com_finder', JPATH_SITE); } /** * Method to load Smart Search plugin language files. * * @return void * * @since 2.5 */ public static function loadPluginLanguage() { static $loaded = false; // If already loaded, don't load again. if ($loaded) { return; } $loaded = true; // Get array of all the enabled Smart Search plugin names. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select(array($db->qn('name'), $db->qn('element'))) ->from($db->quoteName('#__extensions')) ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) ->where($db->quoteName('folder') . ' = ' . $db->quote('finder')) ->where($db->quoteName('enabled') . ' = 1'); $db->setQuery($query); $plugins = $db->loadObjectList(); if (empty($plugins)) { return; } // Load generic language strings. $lang = JFactory::getLanguage(); $lang->load('plg_content_finder', JPATH_ADMINISTRATOR); // Load language file for each plugin. foreach ($plugins as $plugin) { $lang->load($plugin->name, JPATH_ADMINISTRATOR) || $lang->load($plugin->name, JPATH_PLUGINS . '/finder/' . $plugin->element); } } } PKb��\MH4\'';components/com_finder/helpers/indexer/stemmer/porter_en.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('FinderIndexerStemmer', dirname(__DIR__) . '/stemmer.php'); /** * Porter English stemmer class for the Finder indexer package. * * This class was adapted from one written by Richard Heyes. * See copyright and link information above. * * @since 2.5 */ class FinderIndexerStemmerPorter_En extends FinderIndexerStemmer { /** * Regex for matching a consonant. * * @var string * @since 2.5 */ private static $regex_consonant = '(?:[bcdfghjklmnpqrstvwxz]|(?<=[aeiou])y|^y)'; /** * Regex for matching a vowel * * @var string * @since 2.5 */ private static $regex_vowel = '(?:[aeiou]|(?<![aeiou])y)'; /** * Method to stem a token and return the root. * * @param string $token The token to stem. * @param string $lang The language of the token. * * @return string The root token. * * @since 2.5 */ public function stem($token, $lang) { // Check if the token is long enough to merit stemming. if (strlen($token) <= 2) { return $token; } // Check if the language is English or All. if ($lang !== 'en' && $lang !== '*') { return $token; } // Stem the token if it is not in the cache. if (!isset($this->cache[$lang][$token])) { // Stem the token. $result = $token; $result = self::step1ab($result); $result = self::step1c($result); $result = self::step2($result); $result = self::step3($result); $result = self::step4($result); $result = self::step5($result); // Add the token to the cache. $this->cache[$lang][$token] = $result; } return $this->cache[$lang][$token]; } /** * Step 1 * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function step1ab($word) { // Part a if (substr($word, -1) === 's') { self::replace($word, 'sses', 'ss') || self::replace($word, 'ies', 'i') || self::replace($word, 'ss', 'ss') || self::replace($word, 's', ''); } // Part b if (substr($word, -2, 1) !== 'e' || !self::replace($word, 'eed', 'ee', 0)) { // First rule $v = self::$regex_vowel; // Words ending with ing and ed // Note use of && and OR, for precedence reasons if (preg_match("#$v+#", substr($word, 0, -3)) && self::replace($word, 'ing', '') || preg_match("#$v+#", substr($word, 0, -2)) && self::replace($word, 'ed', '')) { // If one of above two test successful if (!self::replace($word, 'at', 'ate') && !self::replace($word, 'bl', 'ble') && !self::replace($word, 'iz', 'ize')) { // Double consonant ending $wordSubStr = substr($word, -2); if ($wordSubStr !== 'll' && $wordSubStr !== 'ss' && $wordSubStr !== 'zz' && self::doubleConsonant($word)) { $word = substr($word, 0, -1); } elseif (self::m($word) === 1 && self::cvc($word)) { $word .= 'e'; } } } } return $word; } /** * Step 1c * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function step1c($word) { $v = self::$regex_vowel; if (substr($word, -1) === 'y' && preg_match("#$v+#", substr($word, 0, -1))) { self::replace($word, 'y', 'i'); } return $word; } /** * Step 2 * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function step2($word) { switch (substr($word, -2, 1)) { case 'a': self::replace($word, 'ational', 'ate', 0) || self::replace($word, 'tional', 'tion', 0); break; case 'c': self::replace($word, 'enci', 'ence', 0) || self::replace($word, 'anci', 'ance', 0); break; case 'e': self::replace($word, 'izer', 'ize', 0); break; case 'g': self::replace($word, 'logi', 'log', 0); break; case 'l': self::replace($word, 'entli', 'ent', 0) || self::replace($word, 'ousli', 'ous', 0) || self::replace($word, 'alli', 'al', 0) || self::replace($word, 'bli', 'ble', 0) || self::replace($word, 'eli', 'e', 0); break; case 'o': self::replace($word, 'ization', 'ize', 0) || self::replace($word, 'ation', 'ate', 0) || self::replace($word, 'ator', 'ate', 0); break; case 's': self::replace($word, 'iveness', 'ive', 0) || self::replace($word, 'fulness', 'ful', 0) || self::replace($word, 'ousness', 'ous', 0) || self::replace($word, 'alism', 'al', 0); break; case 't': self::replace($word, 'biliti', 'ble', 0) || self::replace($word, 'aliti', 'al', 0) || self::replace($word, 'iviti', 'ive', 0); break; } return $word; } /** * Step 3 * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function step3($word) { switch (substr($word, -2, 1)) { case 'a': self::replace($word, 'ical', 'ic', 0); break; case 's': self::replace($word, 'ness', '', 0); break; case 't': self::replace($word, 'icate', 'ic', 0) || self::replace($word, 'iciti', 'ic', 0); break; case 'u': self::replace($word, 'ful', '', 0); break; case 'v': self::replace($word, 'ative', '', 0); break; case 'z': self::replace($word, 'alize', 'al', 0); break; } return $word; } /** * Step 4 * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function step4($word) { switch (substr($word, -2, 1)) { case 'a': self::replace($word, 'al', '', 1); break; case 'c': self::replace($word, 'ance', '', 1) || self::replace($word, 'ence', '', 1); break; case 'e': self::replace($word, 'er', '', 1); break; case 'i': self::replace($word, 'ic', '', 1); break; case 'l': self::replace($word, 'able', '', 1) || self::replace($word, 'ible', '', 1); break; case 'n': self::replace($word, 'ant', '', 1) || self::replace($word, 'ement', '', 1) || self::replace($word, 'ment', '', 1) || self::replace($word, 'ent', '', 1); break; case 'o': $wordSubStr = substr($word, -4); if ($wordSubStr === 'tion' || $wordSubStr === 'sion') { self::replace($word, 'ion', '', 1); } else { self::replace($word, 'ou', '', 1); } break; case 's': self::replace($word, 'ism', '', 1); break; case 't': self::replace($word, 'ate', '', 1) || self::replace($word, 'iti', '', 1); break; case 'u': self::replace($word, 'ous', '', 1); break; case 'v': self::replace($word, 'ive', '', 1); break; case 'z': self::replace($word, 'ize', '', 1); break; } return $word; } /** * Step 5 * * @param string $word The token to stem. * * @return string * * @since 2.5 */ private static function step5($word) { // Part a if (substr($word, -1) === 'e') { if (self::m(substr($word, 0, -1)) > 1) { self::replace($word, 'e', ''); } elseif (self::m(substr($word, 0, -1)) === 1) { if (!self::cvc(substr($word, 0, -1))) { self::replace($word, 'e', ''); } } } // Part b if (self::m($word) > 1 && self::doubleConsonant($word) && substr($word, -1) === 'l') { $word = substr($word, 0, -1); } return $word; } /** * Replaces the first string with the second, at the end of the string. If third * arg is given, then the preceding string must match that m count at least. * * @param string $str String to check * @param string $check Ending to check for * @param string $repl Replacement string * @param integer $m Optional minimum number of m() to meet * * @return boolean Whether the $check string was at the end * of the $str string. True does not necessarily mean * that it was replaced. * * @since 2.5 */ private static function replace(&$str, $check, $repl, $m = null) { $len = 0 - strlen($check); if (substr($str, $len) === $check) { $substr = substr($str, 0, $len); if ($m === null || self::m($substr) > $m) { $str = $substr . $repl; } return true; } return false; } /** * m() measures the number of consonant sequences in $str. if c is * a consonant sequence and v a vowel sequence, and <..> indicates arbitrary * presence, * * <c><v> gives 0 * <c>vc<v> gives 1 * <c>vcvc<v> gives 2 * <c>vcvcvc<v> gives 3 * * @param string $str The string to return the m count for * * @return integer The m count * * @since 2.5 */ private static function m($str) { $c = self::$regex_consonant; $v = self::$regex_vowel; $str = preg_replace("#^$c+#", '', $str); $str = preg_replace("#$v+$#", '', $str); preg_match_all("#($v+$c+)#", $str, $matches); return count($matches[1]); } /** * Returns true/false as to whether the given string contains two * of the same consonant next to each other at the end of the string. * * @param string $str String to check * * @return boolean Result * * @since 2.5 */ private static function doubleConsonant($str) { $c = self::$regex_consonant; return preg_match("#$c{2}$#", $str, $matches) && $matches[0][0] === $matches[0][1]; } /** * Checks for ending CVC sequence where second C is not W, X or Y * * @param string $str String to check * * @return boolean Result * * @since 2.5 */ private static function cvc($str) { $c = self::$regex_consonant; $v = self::$regex_vowel; return preg_match("#($c$v$c)$#", $str, $matches) && strlen($matches[1]) === 3 && $matches[1][2] !== 'w' && $matches[1][2] !== 'x' && $matches[1][2] !== 'y'; } } PKb��\��Y�t(t(4components/com_finder/helpers/indexer/stemmer/fr.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('FinderIndexerStemmer', dirname(__DIR__) . '/stemmer.php'); /** * French stemmer class for Smart Search indexer. * * First contributed by Eric Sanou (bobotche@hotmail.fr) * This class is inspired in Alexis Ulrich's French stemmer code (http://alx2002.free.fr) * * @since 3.0 */ class FinderIndexerStemmerFr extends FinderIndexerStemmer { /** * Stemming rules. * * @var array * @since 3.0 */ private static $stemRules; /** * Method to stem a token and return the root. * * @param string $token The token to stem. * @param string $lang The language of the token. * * @return string The root token. * * @since 3.0 */ public function stem($token, $lang) { // Check if the token is long enough to merit stemming. if (strlen($token) <= 2) { return $token; } // Check if the language is French or All. if ($lang !== 'fr' && $lang !== '*') { return $token; } // Stem the token if it is not in the cache. if (!isset($this->cache[$lang][$token])) { // Stem the token. $result = self::getStem($token); // Add the token to the cache. $this->cache[$lang][$token] = $result; } return $this->cache[$lang][$token]; } /** * French stemmer rules variables. * * @return array The rules * * @since 3.0 */ protected static function getStemRules() { if (self::$stemRules) { return self::$stemRules; } $vars = array(); // French accented letters in ISO-8859-1 encoding $vars['accents'] = chr(224) . chr(226) . chr(232) . chr(233) . chr(234) . chr(235) . chr(238) . chr(239) . chr(244) . chr(251) . chr(249) . chr(231); // The rule patterns include all accented words for french language $vars['rule_pattern'] = '/^([a-z' . $vars['accents'] . ']*)(\*){0,1}(\d)([a-z' . $vars['accents'] . ']*)([.|>])/'; // French vowels (including y) in ISO-8859-1 encoding $vars['vowels'] = chr(97) . chr(224) . chr(226) . chr(101) . chr(232) . chr(233) . chr(234) . chr(235) . chr(105) . chr(238) . chr(239) . chr(111) . chr(244) . chr(117) . chr(251) . chr(249) . chr(121); // The French rules in ISO-8859-1 encoding $vars['rules'] = array( 'esre1>', 'esio1>', 'siol1.', 'siof0.', 'sioe0.', 'sio3>', 'st1>', 'sf1>', 'sle1>', 'slo1>', 's' . chr(233) . '1>', chr(233) . 'tuae5.', chr(233) . 'tuae2.', 'tnia0.', 'tniv1.', 'tni3>', 'suor1.', 'suo0.', 'sdrail5.', 'sdrai4.', 'er' . chr(232) . 'i1>', 'sesue3x>', 'esuey5i.', 'esue2x>', 'se1>', 'er' . chr(232) . 'g3.', 'eca1>', 'esiah0.', 'esi1>', 'siss2.', 'sir2>', 'sit2>', 'egan' . chr(233) . '1.', 'egalli6>', 'egass1.', 'egas0.', 'egat3.', 'ega3>', 'ette4>', 'ett2>', 'etio1.', 'tio' . chr(231) . '4c.', 'tio0.', 'et1>', 'eb1>', 'snia1>', 'eniatnau8>', 'eniatn4.', 'enia1>', 'niatnio3.', 'niatg3.', 'e' . chr(233) . '1>', chr(233) . 'hcat1.', chr(233) . 'hca4.', chr(233) . 'tila5>', chr(233) . 'tici5.', chr(233) . 'tir1.', chr(233) . 'ti3>', chr(233) . 'gan1.', chr(233) . 'ga3>', chr(233) . 'tehc1.', chr(233) . 'te3>', chr(233) . 'it0.', chr(233) . '1>', 'eire4.', 'eirue5.', 'eio1.', 'eia1.', 'ei1>', 'eng1.', 'xuaessi7.', 'xuae1>', 'uaes0.', 'uae3.', 'xuave2l.', 'xuav2li>', 'xua3la>', 'ela1>', 'lart2.', 'lani2>', 'la' . chr(233) . '2>', 'siay4i.', 'siassia7.', 'siarv1*.', 'sia1>', 'tneiayo6i.', 'tneiay6i.', 'tneiassia9.', 'tneiareio7.', 'tneia5>', 'tneia4>', 'tiario4.', 'tiarim3.', 'tiaria3.', 'tiaris3.', 'tiari5.', 'tiarve6>', 'tiare5>', 'iare4>', 'are3>', 'tiay4i.', 'tia3>', 'tnay4i.', 'em' . chr(232) . 'iu5>', 'em' . chr(232) . 'i4>', 'tnaun3.', 'tnauqo3.', 'tnau4>', 'tnaf0.', 'tnat' . chr(233) . '2>', 'tna3>', 'tno3>', 'zeiy4i.', 'zey3i.', 'zeire5>', 'zeird4.', 'zeirio4.', 'ze2>', 'ssiab0.', 'ssia4.', 'ssi3.', 'tnemma6>', 'tnemesuey9i.', 'tnemesue8>', 'tnemevi7.', 'tnemessia5.', 'tnemessi8.', 'tneme5>', 'tnemia4.', 'tnem' . chr(233) . '5>', 'el2l>', 'lle3le>', 'let' . chr(244) . '0.', 'lepp0.', 'le2>', 'srei1>', 'reit3.', 'reila2.', 'rei3>', 'ert' . chr(226) . 'e5.', 'ert' . chr(226) . chr(233) . '1.', 'ert' . chr(226) . '4.', 'drai4.', 'erdro0.', 'erute5.', 'ruta0.', 'eruta1.', 'erutiov1.', 'erub3.', 'eruh3.', 'erul3.', 'er2r>', 'nn1>', 'r' . chr(232) . 'i3.', 'srev0.', 'sr1>', 'rid2>', 're2>', 'xuei4.', 'esuei5.', 'lbati3.', 'lba3>', 'rueis0.', 'ruehcn4.', 'ecirta6.', 'ruetai6.', 'rueta5.', 'rueir0.', 'rue3>', 'esseti6.', 'essere6>', 'esserd1.', 'esse4>', 'essiab1.', 'essia5.', 'essio1.', 'essi4.', 'essal4.', 'essa1>', 'ssab1.', 'essurp1.', 'essu4.', 'essi1.', 'ssor1.', 'essor2.', 'esso1>', 'ess2>', 'tio3.', 'r' . chr(232) . 's2re.', 'r' . chr(232) . '0e.', 'esn1.', 'eu1>', 'sua0.', 'su1>', 'utt1>', 'tu' . chr(231) . '3c.', 'u' . chr(231) . '2c.', 'ur1.', 'ehcn2>', 'ehcu1>', 'snorr3.', 'snoru3.', 'snorua3.', 'snorv3.', 'snorio4.', 'snori5.', 'snore5>', 'snortt4>', 'snort' . chr(238) . 'a7.', 'snort3.', 'snor4.', 'snossi6.', 'snoire6.', 'snoird5.', 'snoitai7.', 'snoita6.', 'snoits1>', 'noits0.', 'snoi4>', 'noitaci7>', 'noitai6.', 'noita5.', 'noitu4.', 'noi3>', 'snoya0.', 'snoy4i.', 'sno' . chr(231) . 'a1.', 'sno' . chr(231) . 'r1.', 'snoe4.', 'snosiar1>', 'snola1.', 'sno3>', 'sno1>', 'noll2.', 'tnennei4.', 'ennei2>', 'snei1>', 'sne' . chr(233) . '1>', 'enne' . chr(233) . '5e.', 'ne' . chr(233) . '3e.', 'neic0.', 'neiv0.', 'nei3.', 'sc1.', 'sd1.', 'sg1.', 'sni1.', 'tiu0.', 'ti2.', 'sp1>', 'sna1>', 'sue1.', 'enn2>', 'nong2.', 'noss2.', 'rioe4.', 'riot0.', 'riorc1.', 'riovec5.', 'rio3.', 'ric2.', 'ril2.', 'tnerim3.', 'tneris3>', 'tneri5.', 't' . chr(238) . 'a3.', 'riss2.', 't' . chr(238) . '2.', 't' . chr(226) . '2>', 'ario2.', 'arim1.', 'ara1.', 'aris1.', 'ari3.', 'art1>', 'ardn2.', 'arr1.', 'arua1.', 'aro1.', 'arv1.', 'aru1.', 'ar2.', 'rd1.', 'ud1.', 'ul1.', 'ini1.', 'rin2.', 'tnessiab3.', 'tnessia7.', 'tnessi6.', 'tnessni4.', 'sini2.', 'sl1.', 'iard3.', 'iario3.', 'ia2>', 'io0.', 'iule2.', 'i1>', 'sid2.', 'sic2.', 'esoi4.', 'ed1.', 'ai2>', 'a1>', 'adr1.', 'tner' . chr(232) . '5>', 'evir1.', 'evio4>', 'evi3.', 'fita4.', 'fi2>', 'enie1.', 'sare4>', 'sari4>', 'sard3.', 'sart2>', 'sa2.', 'tnessa6>', 'tnessu6>', 'tnegna3.', 'tnegi3.', 'tneg0.', 'tneru5>', 'tnemg0.', 'tnerni4.', 'tneiv1.', 'tne3>', 'une1.', 'en1>', 'nitn2.', 'ecnay5i.', 'ecnal1.', 'ecna4.', 'ec1>', 'nn1.', 'rit2>', 'rut2>', 'rud2.', 'ugn1>', 'eg1>', 'tuo0.', 'tul2>', 't' . chr(251) . '2>', 'ev1>', 'v' . chr(232) . '2ve>', 'rtt1>', 'emissi6.', 'em1.', 'ehc1.', 'c' . chr(233) . 'i2c' . chr(232) . '.', 'libi2l.', 'llie1.', 'liei4i.', 'xuev1.', 'xuey4i.', 'xueni5>', 'xuell4.', 'xuere5.', 'xue3>', 'rb' . chr(233) . '3rb' . chr(232) . '.', 'tur2.', 'rir' . chr(233) . '4re.', 'rir2.', 'c' . chr(226) . '2ca.', 'snu1.', 'rt' . chr(238) . 'a4.', 'long2.', 'vec2.', chr(231) . '1c>', 'ssilp3.', 'silp2.', 't' . chr(232) . 'hc2te.', 'n' . chr(232) . 'm2ne.', 'llepp1.', 'tan2.', 'rv' . chr(232) . '3rve.', 'rv' . chr(233) . '3rve.', 'r' . chr(232) . '2re.', 'r' . chr(233) . '2re.', 't' . chr(232) . '2te.', 't' . chr(233) . '2te.', 'epp1.', 'eya2i.', 'ya1i.', 'yo1i.', 'esu1.', 'ugi1.', 'tt1.', 'end0.' ); self::$stemRules = $vars; return self::$stemRules; } /** * Returns the number of the first rule from the rule number * that can be applied to the given reversed input. * returns -1 if no rule can be applied, ie the stem has been found * * @param string $reversed_input The input to check in reversed order * @param integer $rule_number The rule number to check * * @return integer Number of the first rule * * @since 3.0 */ private static function getFirstRule($reversed_input, $rule_number) { $vars = static::getStemRules(); $nb_rules = count($vars['rules']); for ($i = $rule_number; $i < $nb_rules; $i++) { // Gets the letters from the current rule $rule = $vars['rules'][$i]; $rule = preg_replace($vars['rule_pattern'], "\\1", $rule); if (strncasecmp(utf8_decode($rule), $reversed_input, strlen(utf8_decode($rule))) == 0) { return $i; } } return -1; } /** * Check the acceptability of a stem for French language * * @param string $reversed_stem The stem to check in reverse form * * @return boolean True if stem is acceptable * * @since 3.0 */ private static function check($reversed_stem) { $vars = static::getStemRules(); if (preg_match('/[' . $vars['vowels'] . ']$/', utf8_encode($reversed_stem))) { // If the form starts with a vowel then at least two letters must remain after stemming (e.g.: "etaient" --> "et") return (strlen($reversed_stem) > 2); } else { // If the reversed stem starts with a consonant then at least two letters must remain after stemming if (strlen($reversed_stem) <= 2) { return false; } // And at least one of these must be a vowel or "y" return preg_match('/[' . $vars['vowels'] . ']/', utf8_encode($reversed_stem)); } } /** * Paice/Husk stemmer which returns a stem for the given $input * * @param string $input The word for which we want the stem in UTF-8 * * @return string The stem * * @since 3.0 */ private static function getStem($input) { $vars = static::getStemRules(); $reversed_input = strrev(utf8_decode($input)); $rule_number = 0; // This loop goes through the rules' array until it finds an ending one (ending by '.') or the last one ('end0.') while (true) { $rule_number = self::getFirstRule($reversed_input, $rule_number); if ($rule_number === -1) { // No other rule can be applied => the stem has been found break; } $rule = $vars['rules'][$rule_number]; preg_match($vars['rule_pattern'], $rule, $matches); $reversed_stem = utf8_decode($matches[4]) . substr($reversed_input, $matches[3]); if (self::check($reversed_stem)) { $reversed_input = $reversed_stem; if ($matches[5] === '.') { break; } } else { // Go to another rule $rule_number++; } } return utf8_encode(strrev($reversed_input)); } } PKb��\=��� � :components/com_finder/helpers/indexer/stemmer/snowball.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('FinderIndexerStemmer', dirname(__DIR__) . '/stemmer.php'); /** * Snowball stemmer class for the Finder indexer package. * * @since 2.5 */ class FinderIndexerStemmerSnowball extends FinderIndexerStemmer { /** * Method to stem a token and return the root. * * @param string $token The token to stem. * @param string $lang The language of the token. * * @return string The root token. * * @since 2.5 */ public function stem($token, $lang) { // Language to use if All is specified. static $defaultLang = ''; // If language is All then try to get site default language. if ($lang === '*' && $defaultLang === '') { $languages = JLanguageHelper::getLanguages(); $defaultLang = isset($languages[0]->sef) ? $languages[0]->sef : '*'; $lang = $defaultLang; } // Stem the token if it is not in the cache. if (!isset($this->cache[$lang][$token])) { // Get the stem function from the language string. switch ($lang) { // Danish stemmer. case 'da': $function = 'stem_danish'; break; // German stemmer. case 'de': $function = 'stem_german'; break; // English stemmer. default: case 'en': $function = 'stem_english'; break; // Spanish stemmer. case 'es': $function = 'stem_spanish'; break; // Finnish stemmer. case 'fi': $function = 'stem_finnish'; break; // French stemmer. case 'fr': $function = 'stem_french'; break; // Hungarian stemmer. case 'hu': $function = 'stem_hungarian'; break; // Italian stemmer. case 'it': $function = 'stem_italian'; break; // Norwegian stemmer. case 'nb': $function = 'stem_norwegian'; break; // Dutch stemmer. case 'nl': $function = 'stem_dutch'; break; // Portuguese stemmer. case 'pt': $function = 'stem_portuguese'; break; // Romanian stemmer. case 'ro': $function = 'stem_romanian'; break; // Russian stemmer. case 'ru': $function = 'stem_russian_unicode'; break; // Swedish stemmer. case 'sv': $function = 'stem_swedish'; break; // Turkish stemmer. case 'tr': $function = 'stem_turkish_unicode'; break; } // Stem the word if the stemmer method exists. $this->cache[$lang][$token] = function_exists($function) ? $function($token) : $token; } return $this->cache[$lang][$token]; } } PKb��\�b�h��0components/com_finder/helpers/indexer/parser.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Parser base class for the Finder indexer package. * * @since 2.5 */ abstract class FinderIndexerParser { /** * Method to get a parser, creating it if necessary. * * @param string $format The type of parser to load. * * @return FinderIndexerParser A FinderIndexerParser instance. * * @since 2.5 * @throws Exception on invalid parser. */ public static function getInstance($format) { static $instances; // Only create one parser for each format. if (isset($instances[$format])) { return $instances[$format]; } // Create an array of instances if necessary. if (!is_array($instances)) { $instances = array(); } // Setup the adapter for the parser. $format = JFilterInput::getInstance()->clean($format, 'cmd'); $path = __DIR__ . '/parser/' . $format . '.php'; $class = 'FinderIndexerParser' . ucfirst($format); // Check if a parser exists for the format. if (!file_exists($path)) { // Throw invalid format exception. throw new Exception(JText::sprintf('COM_FINDER_INDEXER_INVALID_PARSER', $format)); } // Instantiate the parser. JLoader::register($class, $path); $instances[$format] = new $class; return $instances[$format]; } /** * Method to parse input and extract the plain text. Because this method is * called from both inside and outside the indexer, it needs to be able to * batch out its parsing functionality to deal with the inefficiencies of * regular expressions. We will parse recursively in 2KB chunks. * * @param string $input The input to parse. * * @return string The plain text input. * * @since 2.5 */ public function parse($input) { // If the input is less than 2KB we can parse it in one go. if (strlen($input) <= 2048) { return $this->process($input); } // Input is longer than 2Kb so parse it in chunks of 2Kb or less. $start = 0; $end = strlen($input); $chunk = 2048; $return = null; while ($start < $end) { // Setup the string. $string = substr($input, $start, $chunk); // Find the last space character if we aren't at the end. $ls = (($start + $chunk) < $end ? strrpos($string, ' ') : false); // Truncate to the last space character. if ($ls !== false) { $string = substr($string, 0, $ls); } // Adjust the start position for the next iteration. $start += ($ls !== false ? ($ls + 1 - $chunk) + $chunk : $chunk); // Parse the chunk. $return .= $this->process($string); } return $return; } /** * Method to process input and extract the plain text. * * @param string $input The input to process. * * @return string The plain text input. * * @since 2.5 */ abstract protected function process($input); } PKb��\Sl_�:�:1components/com_finder/helpers/indexer/indexer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\String\StringHelper; JLoader::register('FinderIndexerHelper', __DIR__ . '/helper.php'); JLoader::register('FinderIndexerParser', __DIR__ . '/parser.php'); JLoader::register('FinderIndexerStemmer', __DIR__ . '/stemmer.php'); JLoader::register('FinderIndexerTaxonomy', __DIR__ . '/taxonomy.php'); JLoader::register('FinderIndexerToken', __DIR__ . '/token.php'); jimport('joomla.filesystem.file'); /** * Main indexer class for the Finder indexer package. * * The indexer class provides the core functionality of the Finder * search engine. It is responsible for adding and updating the * content links table; extracting and scoring tokens; and maintaining * all referential information for the content. * * Note: All exceptions thrown from within this class should be caught * by the controller. * * @since 2.5 */ abstract class FinderIndexer { /** * The title context identifier. * * @var integer * @since 2.5 */ const TITLE_CONTEXT = 1; /** * The text context identifier. * * @var integer * @since 2.5 */ const TEXT_CONTEXT = 2; /** * The meta context identifier. * * @var integer * @since 2.5 */ const META_CONTEXT = 3; /** * The path context identifier. * * @var integer * @since 2.5 */ const PATH_CONTEXT = 4; /** * The misc context identifier. * * @var integer * @since 2.5 */ const MISC_CONTEXT = 5; /** * The indexer state object. * * @var JObject * @since 2.5 */ public static $state; /** * The indexer profiler object. * * @var JProfiler * @since 2.5 */ public static $profiler; /** * Database driver cache. * * @var JDatabaseDriver * @since 3.8.0 */ protected $db; /** * Reusable Query Template. To be used with clone. * * @var JDatabaseQuery * @since 3.8.0 */ protected $addTokensToDbQueryTemplate; /** * FinderIndexer constructor. * * @since 3.8.0 */ public function __construct() { $this->db = JFactory::getDbo(); $db = $this->db; /** * Set up query template for addTokensToDb, we will be cloning this template when needed. * This is about twice as fast as calling the clear function or setting up a new object. */ $this->addTokensToDbQueryTemplate = $db->getQuery(true)->insert($db->quoteName('#__finder_tokens')) ->columns( array( $db->quoteName('term'), $db->quoteName('stem'), $db->quoteName('common'), $db->quoteName('phrase'), $db->quoteName('weight'), $db->quoteName('context'), $db->quoteName('language') ) ); } /** * Returns a reference to the FinderIndexer object. * * @return FinderIndexer instance based on the database driver * * @since 3.0 * @throws RuntimeException if driver class for indexer not present. */ public static function getInstance() { // Setup the adapter for the indexer. $serverType = JFactory::getDbo()->getServerType(); // For `mssql` server types, convert the type to `sqlsrv` if ($serverType === 'mssql') { $serverType = 'sqlsrv'; } $path = __DIR__ . '/driver/' . $serverType . '.php'; $class = 'FinderIndexerDriver' . ucfirst($serverType); // Check if a parser exists for the format. if (file_exists($path)) { // Instantiate the parser. JLoader::register($class, $path); return new $class; } // Throw invalid format exception. throw new RuntimeException(JText::sprintf('COM_FINDER_INDEXER_INVALID_DRIVER', $serverType)); } /** * Method to get the indexer state. * * @return object The indexer state object. * * @since 2.5 */ public static function getState() { // First, try to load from the internal state. if ((bool) static::$state) { return static::$state; } // If we couldn't load from the internal state, try the session. $session = JFactory::getSession(); $data = $session->get('_finder.state', null); // If the state is empty, load the values for the first time. if (empty($data)) { $data = new JObject; // Load the default configuration options. $data->options = JComponentHelper::getParams('com_finder'); // Setup the weight lookup information. $data->weights = array( self::TITLE_CONTEXT => round($data->options->get('title_multiplier', 1.7), 2), self::TEXT_CONTEXT => round($data->options->get('text_multiplier', 0.7), 2), self::META_CONTEXT => round($data->options->get('meta_multiplier', 1.2), 2), self::PATH_CONTEXT => round($data->options->get('path_multiplier', 2.0), 2), self::MISC_CONTEXT => round($data->options->get('misc_multiplier', 0.3), 2) ); // Set the current time as the start time. $data->startTime = JFactory::getDate()->toSql(); // Set the remaining default values. $data->batchSize = (int) $data->options->get('batch_size', 50); $data->batchOffset = 0; $data->totalItems = 0; $data->pluginState = array(); } // Setup the profiler if debugging is enabled. if (JFactory::getApplication()->get('debug')) { static::$profiler = JProfiler::getInstance('FinderIndexer'); } // Setup the stemmer. if ($data->options->get('stem', 1) && $data->options->get('stemmer', 'porter_en')) { FinderIndexerHelper::$stemmer = FinderIndexerStemmer::getInstance($data->options->get('stemmer', 'porter_en')); } // Set the state. static::$state = $data; return static::$state; } /** * Method to set the indexer state. * * @param object $data A new indexer state object. * * @return boolean True on success, false on failure. * * @since 2.5 */ public static function setState($data) { // Check the state object. if (empty($data) || !$data instanceof JObject) { return false; } // Set the new internal state. static::$state = $data; // Set the new session state. JFactory::getSession()->set('_finder.state', $data); return true; } /** * Method to reset the indexer state. * * @return void * * @since 2.5 */ public static function resetState() { // Reset the internal state to null. self::$state = null; // Reset the session state to null. JFactory::getSession()->set('_finder.state', null); } /** * Method to index a content item. * * @param FinderIndexerResult $item The content item to index. * @param string $format The format of the content. [optional] * * @return integer The ID of the record in the links table. * * @since 2.5 * @throws Exception on database error. */ abstract public function index($item, $format = 'html'); /** * Method to remove a link from the index. * * @param integer $linkId The id of the link. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ public function remove($linkId) { $db = $this->db; $query = $db->getQuery(true); // Update the link counts and remove the mapping records. for ($i = 0; $i <= 15; $i++) { // Update the link counts for the terms. $query->clear() ->update($db->quoteName('#__finder_terms', 't')) ->join('INNER', $db->quoteName('#__finder_links_terms' . dechex($i), 'm') . ' ON ' . $db->quoteName('m.term_id') . ' = ' . $db->quoteName('t.term_id') ) ->set($db->quoteName('links') . ' = ' . $db->quoteName('links') . ' - 1') ->where($db->quoteName('m.link_id') . ' = ' . (int) $linkId); $db->setQuery($query)->execute(); // Remove all records from the mapping tables. $query->clear() ->delete($db->quoteName('#__finder_links_terms' . dechex($i))) ->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query)->execute(); } // Delete all orphaned terms. $query->clear() ->delete($db->quoteName('#__finder_terms')) ->where($db->quoteName('links') . ' <= 0'); $db->setQuery($query)->execute(); // Delete the link from the index. $query->clear() ->delete($db->quoteName('#__finder_links')) ->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query)->execute(); // Remove the taxonomy maps. FinderIndexerTaxonomy::removeMaps($linkId); // Remove the orphaned taxonomy nodes. FinderIndexerTaxonomy::removeOrphanNodes(); return true; } /** * Method to optimize the index. We use this method to remove unused terms * and any other optimizations that might be necessary. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ abstract public function optimize(); /** * Method to get a content item's signature. * * @param object $item The content item to index. * * @return string The content item's signature. * * @since 2.5 */ protected static function getSignature($item) { // Get the indexer state. $state = static::getState(); // Get the relevant configuration variables. $config = array( $state->weights, $state->options->get('stem', 1), $state->options->get('stemmer', 'porter_en') ); return md5(serialize(array($item, $config))); } /** * Method to parse input, tokenize it, and then add it to the database. * * @param mixed $input String or resource to use as input. A resource input will automatically be chunked to conserve * memory. Strings will be chunked if longer than 2K in size. * @param integer $context The context of the input. See context constants. * @param string $lang The language of the input. * @param string $format The format of the input. * * @return integer The number of tokens extracted from the input. * * @since 2.5 */ protected function tokenizeToDb($input, $context, $lang, $format) { $count = 0; $buffer = null; if (empty($input)) { return $count; } // If the input is a resource, batch the process out. if (is_resource($input)) { // Batch the process out to avoid memory limits. while (!feof($input)) { // Read into the buffer. $buffer .= fread($input, 2048); /* * If we haven't reached the end of the file, seek to the last * space character and drop whatever is after that to make sure * we didn't truncate a term while reading the input. */ if (!feof($input)) { // Find the last space character. $ls = strrpos($buffer, ' '); // Adjust string based on the last space character. if ($ls) { // Truncate the string to the last space character. $string = substr($buffer, 0, $ls); // Adjust the buffer based on the last space for the next iteration and trim. $buffer = StringHelper::trim(substr($buffer, $ls)); } // No space character was found. else { $string = $buffer; } } // We've reached the end of the file, so parse whatever remains. else { $string = $buffer; } // Parse, tokenise and add tokens to the database. $count = $this->tokenizeToDbShort($string, $context, $lang, $format, $count); unset($string, $tokens); } return $count; } // Parse, tokenise and add tokens to the database. $count = $this->tokenizeToDbShort($input, $context, $lang, $format, $count); return $count; } /** * Method to parse input, tokenise it, then add the tokens to the database. * * @param string $input String to parse, tokenise and add to database. * @param integer $context The context of the input. See context constants. * @param string $lang The language of the input. * @param string $format The format of the input. * @param integer $count The number of tokens processed so far. * * @return integer Cummulative number of tokens extracted from the input so far. * * @since 3.7.0 */ private function tokenizeToDbShort($input, $context, $lang, $format, $count) { // Parse the input. $input = FinderIndexerHelper::parse($input, $format); // Check the input. if (empty($input)) { return $count; } // Tokenize the input. $tokens = FinderIndexerHelper::tokenize($input, $lang); // Add the tokens to the database. $count += $this->addTokensToDb($tokens, $context); // Check if we're approaching the memory limit of the token table. if ($count > static::$state->options->get('memory_table_limit', 30000)) { $this->toggleTables(false); } return $count; } /** * Method to add a set of tokens to the database. * * @param mixed $tokens An array or single FinderIndexerToken object. * @param mixed $context The context of the tokens. See context constants. [optional] * * @return integer The number of tokens inserted into the database. * * @since 2.5 * @throws Exception on database error. */ protected function addTokensToDb($tokens, $context = '') { // Get the database object. $db = $this->db; // Count the number of token values. $values = 0; if (($tokens instanceof FinderIndexerToken) === false) { // Break into chunks of no more than 1000 items $chunks = count($tokens) > 1000 ? array_chunk($tokens, 1000) : array($tokens); foreach ($chunks as $chunkTokens) { // Cloning a new query template is twice as fast as calling the clear function $query = clone $this->addTokensToDbQueryTemplate; // Iterate through the tokens to create SQL value sets. foreach ($chunkTokens as $token) { $query->values( $db->quote($token->term) . ', ' . $db->quote($token->stem) . ', ' . (int) $token->common . ', ' . (int) $token->phrase . ', ' . $db->escape((float) $token->weight) . ', ' . (int) $context . ', ' . $db->quote($token->language) ); ++$values; } $db->setQuery($query)->execute(); } } else { $query = clone $this->addTokensToDbQueryTemplate; $query->values( $db->quote($tokens->term) . ', ' . $db->quote($tokens->stem) . ', ' . (int) $tokens->common . ', ' . (int) $tokens->phrase . ', ' . $db->escape((float) $tokens->weight) . ', ' . (int) $context . ', ' . $db->quote($tokens->language) ); ++$values; $db->setQuery($query)->execute(); } return $values; } /** * Method to switch the token tables from Memory tables to Disk tables * when they are close to running out of memory. * Since this is not supported/implemented in all DB-drivers, the default is a stub method, which simply returns true. * * @param boolean $memory Flag to control how they should be toggled. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected function toggleTables($memory) { return true; } } PKb��\�^P���1components/com_finder/helpers/indexer/stemmer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Stemmer base class for the Finder indexer package. * * @since 2.5 */ abstract class FinderIndexerStemmer { /** * An internal cache of stemmed tokens. * * @var array * @since 2.5 */ public $cache = array(); /** * Method to get a stemmer, creating it if necessary. * * @param string $adapter The type of stemmer to load. * * @return FinderIndexerStemmer A FinderIndexerStemmer instance. * * @since 2.5 * @throws Exception on invalid stemmer. */ public static function getInstance($adapter) { static $instances; // Only create one stemmer for each adapter. if (isset($instances[$adapter])) { return $instances[$adapter]; } // Create an array of instances if necessary. if (!is_array($instances)) { $instances = array(); } // Setup the adapter for the stemmer. $adapter = JFilterInput::getInstance()->clean($adapter, 'cmd'); $path = __DIR__ . '/stemmer/' . $adapter . '.php'; $class = 'FinderIndexerStemmer' . ucfirst($adapter); // Check if a stemmer exists for the adapter. if (!file_exists($path)) { // Throw invalid adapter exception. throw new Exception(JText::sprintf('COM_FINDER_INDEXER_INVALID_STEMMER', $adapter)); } // Instantiate the stemmer. JLoader::register($class, $path); $instances[$adapter] = new $class; return $instances[$adapter]; } /** * Method to stem a token and return the root. * * @param string $token The token to stem. * @param string $lang The language of the token. * * @return string The root token. * * @since 2.5 */ abstract public function stem($token, $lang); } PKb��\��Y̋̋/components/com_finder/helpers/indexer/query.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\String\StringHelper; use Joomla\Utilities\ArrayHelper; JLoader::register('FinderIndexerHelper', __DIR__ . '/helper.php'); JLoader::register('FinderIndexerTaxonomy', __DIR__ . '/taxonomy.php'); JLoader::register('FinderHelperRoute', JPATH_SITE . '/components/com_finder/helpers/route.php'); JLoader::register('FinderHelperLanguage', JPATH_ADMINISTRATOR . '/components/com_finder/helpers/language.php'); /** * Query class for the Finder indexer package. * * @since 2.5 */ class FinderIndexerQuery { /** * Flag to show whether the query can return results. * * @var boolean * @since 2.5 */ public $search; /** * The query input string. * * @var string * @since 2.5 */ public $input; /** * The language of the query. * * @var string * @since 2.5 */ public $language; /** * The query string matching mode. * * @var string * @since 2.5 */ public $mode; /** * The included tokens. * * @var array * @since 2.5 */ public $included = array(); /** * The excluded tokens. * * @var array * @since 2.5 */ public $excluded = array(); /** * The tokens to ignore because no matches exist. * * @var array * @since 2.5 */ public $ignored = array(); /** * The operators used in the query input string. * * @var array * @since 2.5 */ public $operators = array(); /** * The terms to highlight as matches. * * @var array * @since 2.5 */ public $highlight = array(); /** * The number of matching terms for the query input. * * @var integer * @since 2.5 */ public $terms; /** * The static filter id. * * @var string * @since 2.5 */ public $filter; /** * The taxonomy filters. This is a multi-dimensional array of taxonomy * branches as the first level and then the taxonomy nodes as the values. * * For example: * $filters = array( * 'Type' = array(10, 32, 29, 11, ...); * 'Label' = array(20, 314, 349, 91, 82, ...); * ... * ); * * @var array * @since 2.5 */ public $filters = array(); /** * The start date filter. * * @var string * @since 2.5 */ public $date1; /** * The end date filter. * * @var string * @since 2.5 */ public $date2; /** * The start date filter modifier. * * @var string * @since 2.5 */ public $when1; /** * The end date filter modifier. * * @var string * @since 2.5 */ public $when2; /** * Method to instantiate the query object. * * @param array $options An array of query options. * * @since 2.5 * @throws Exception on database error. */ public function __construct($options) { // Get the input string. $this->input = isset($options['input']) ? $options['input'] : null; // Get the empty query setting. $this->empty = isset($options['empty']) ? (bool) $options['empty'] : false; // Get the input language. $this->language = !empty($options['language']) ? $options['language'] : FinderIndexerHelper::getDefaultLanguage(); $this->language = FinderIndexerHelper::getPrimaryLanguage($this->language); // Get the matching mode. $this->mode = 'AND'; // Initialize the temporary date storage. $this->dates = new Registry; // Populate the temporary date storage. if (!empty($options['date1'])) { $this->dates->set('date1', $options['date1']); } if (!empty($options['date2'])) { $this->dates->set('date2', $options['date2']); } if (!empty($options['when1'])) { $this->dates->set('when1', $options['when1']); } if (!empty($options['when2'])) { $this->dates->set('when2', $options['when2']); } // Process the static taxonomy filters. if (!empty($options['filter'])) { $this->processStaticTaxonomy($options['filter']); } // Process the dynamic taxonomy filters. if (!empty($options['filters'])) { $this->processDynamicTaxonomy($options['filters']); } // Get the date filters. $d1 = $this->dates->get('date1'); $d2 = $this->dates->get('date2'); $w1 = $this->dates->get('when1'); $w2 = $this->dates->get('when2'); // Process the date filters. if (!empty($d1) || !empty($d2)) { $this->processDates($d1, $d2, $w1, $w2); } // Process the input string. $this->processString($this->input, $this->language, $this->mode); // Get the number of matching terms. foreach ($this->included as $token) { $this->terms += count($token->matches); } // Remove the temporary date storage. unset($this->dates); // Lastly, determine whether this query can return a result set. // Check if we have a query string. if (!empty($this->input)) { $this->search = true; } // Check if we can search without a query string. elseif ($this->empty && (!empty($this->filter) || !empty($this->filters) || !empty($this->date1) || !empty($this->date2))) { $this->search = true; } // We do not have a valid search query. else { $this->search = false; } } /** * Method to convert the query object into a URI string. * * @param string $base The base URI. [optional] * * @return string The complete query URI. * * @since 2.5 */ public function toUri($base = '') { // Set the base if not specified. if ($base === '') { $base = 'index.php?option=com_finder&view=search'; } // Get the base URI. $uri = JUri::getInstance($base); // Add the static taxonomy filter if present. if ((bool) $this->filter) { $uri->setVar('f', $this->filter); } // Get the filters in the request. $t = JFactory::getApplication()->input->request->get('t', array(), 'array'); // Add the dynamic taxonomy filters if present. if ((bool) $this->filters) { foreach ($this->filters as $nodes) { foreach ($nodes as $node) { if (!in_array($node, $t)) { continue; } $uri->setVar('t[]', $node); } } } // Add the input string if present. if (!empty($this->input)) { $uri->setVar('q', $this->input); } // Add the start date if present. if (!empty($this->date1)) { $uri->setVar('d1', $this->date1); } // Add the end date if present. if (!empty($this->date2)) { $uri->setVar('d2', $this->date2); } // Add the start date modifier if present. if (!empty($this->when1)) { $uri->setVar('w1', $this->when1); } // Add the end date modifier if present. if (!empty($this->when2)) { $uri->setVar('w2', $this->when2); } // Add a menu item id if one is not present. if (!$uri->getVar('Itemid')) { // Get the menu item id. $query = array( 'view' => $uri->getVar('view'), 'f' => $uri->getVar('f'), 'q' => $uri->getVar('q'), ); $item = FinderHelperRoute::getItemid($query); // Add the menu item id if present. if ($item !== null) { $uri->setVar('Itemid', $item); } } return $uri->toString(array('path', 'query')); } /** * Method to get a list of excluded search term ids. * * @return array An array of excluded term ids. * * @since 2.5 */ public function getExcludedTermIds() { $results = array(); // Iterate through the excluded tokens and compile the matching terms. for ($i = 0, $c = count($this->excluded); $i < $c; $i++) { $results = array_merge($results, $this->excluded[$i]->matches); } // Sanitize the terms. $results = array_unique($results); return ArrayHelper::toInteger($results); } /** * Method to get a list of included search term ids. * * @return array An array of included term ids. * * @since 2.5 */ public function getIncludedTermIds() { $results = array(); // Iterate through the included tokens and compile the matching terms. for ($i = 0, $c = count($this->included); $i < $c; $i++) { // Check if we have any terms. if (empty($this->included[$i]->matches)) { continue; } // Get the term. $term = $this->included[$i]->term; // Prepare the container for the term if necessary. if (!array_key_exists($term, $results)) { $results[$term] = array(); } // Add the matches to the stack. $results[$term] = array_merge($results[$term], $this->included[$i]->matches); } // Sanitize the terms. foreach ($results as $key => $value) { $results[$key] = array_unique($results[$key]); $results[$key] = ArrayHelper::toInteger($results[$key]); } return $results; } /** * Method to get a list of required search term ids. * * @return array An array of required term ids. * * @since 2.5 */ public function getRequiredTermIds() { $results = array(); // Iterate through the included tokens and compile the matching terms. for ($i = 0, $c = count($this->included); $i < $c; $i++) { // Check if the token is required. if ($this->included[$i]->required) { // Get the term. $term = $this->included[$i]->term; // Prepare the container for the term if necessary. if (!array_key_exists($term, $results)) { $results[$term] = array(); } // Add the matches to the stack. $results[$term] = array_merge($results[$term], $this->included[$i]->matches); } } // Sanitize the terms. foreach ($results as $key => $value) { $results[$key] = array_unique($results[$key]); $results[$key] = ArrayHelper::toInteger($results[$key]); } return $results; } /** * Method to process the static taxonomy input. The static taxonomy input * comes in the form of a pre-defined search filter that is assigned to the * search form. * * @param integer $filterId The id of static filter. * * @return boolean True on success, false on failure. * * @since 2.5 * @throws Exception on database error. */ protected function processStaticTaxonomy($filterId) { // Get the database object. $db = JFactory::getDbo(); // Initialize user variables $groups = implode(',', JFactory::getUser()->getAuthorisedViewLevels()); // Load the predefined filter. $query = $db->getQuery(true) ->select('f.data, f.params') ->from($db->quoteName('#__finder_filters') . ' AS f') ->where('f.filter_id = ' . (int) $filterId); $db->setQuery($query); $return = $db->loadObject(); // Check the returned filter. if (empty($return)) { return false; } // Set the filter. $this->filter = (int) $filterId; // Get a parameter object for the filter date options. $registry = new Registry($return->params); $params = $registry; // Set the dates if not already set. $this->dates->def('d1', $params->get('d1')); $this->dates->def('d2', $params->get('d2')); $this->dates->def('w1', $params->get('w1')); $this->dates->def('w2', $params->get('w2')); // Remove duplicates and sanitize. $filters = explode(',', $return->data); $filters = array_unique($filters); $filters = ArrayHelper::toInteger($filters); // Remove any values of zero. if (in_array(0, $filters, true) !== false) { unset($filters[array_search(0, $filters, true)]); } // Check if we have any real input. if (empty($filters)) { return true; } /* * Create the query to get filters from the database. We do this for * two reasons: one, it allows us to ensure that the filters being used * are real; two, we need to sort the filters by taxonomy branch. */ $query->clear() ->select('t1.id, t1.title, t2.title AS branch') ->from($db->quoteName('#__finder_taxonomy') . ' AS t1') ->join('INNER', $db->quoteName('#__finder_taxonomy') . ' AS t2 ON t2.id = t1.parent_id') ->where('t1.state = 1') ->where('t1.access IN (' . $groups . ')') ->where('t1.id IN (' . implode(',', $filters) . ')') ->where('t2.state = 1') ->where('t2.access IN (' . $groups . ')'); // Load the filters. $db->setQuery($query); $results = $db->loadObjectList(); // Sort the filter ids by branch. foreach ($results as $result) { $this->filters[$result->branch][$result->title] = (int) $result->id; } return true; } /** * Method to process the dynamic taxonomy input. The dynamic taxonomy input * comes in the form of select fields that the user chooses from. The * dynamic taxonomy input is processed AFTER the static taxonomy input * because the dynamic options can be used to further narrow a static * taxonomy filter. * * @param array $filters An array of taxonomy node ids. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected function processDynamicTaxonomy($filters) { // Initialize user variables $groups = implode(',', JFactory::getUser()->getAuthorisedViewLevels()); // Remove duplicates and sanitize. $filters = array_unique($filters); $filters = ArrayHelper::toInteger($filters); // Remove any values of zero. if (in_array(0, $filters, true) !== false) { unset($filters[array_search(0, $filters, true)]); } // Check if we have any real input. if (empty($filters)) { return true; } // Get the database object. $db = JFactory::getDbo(); $query = $db->getQuery(true); /* * Create the query to get filters from the database. We do this for * two reasons: one, it allows us to ensure that the filters being used * are real; two, we need to sort the filters by taxonomy branch. */ $query->select('t1.id, t1.title, t2.title AS branch') ->from($db->quoteName('#__finder_taxonomy') . ' AS t1') ->join('INNER', $db->quoteName('#__finder_taxonomy') . ' AS t2 ON t2.id = t1.parent_id') ->where('t1.state = 1') ->where('t1.access IN (' . $groups . ')') ->where('t1.id IN (' . implode(',', $filters) . ')') ->where('t2.state = 1') ->where('t2.access IN (' . $groups . ')'); // Load the filters. $db->setQuery($query); $results = $db->loadObjectList(); // Cleared filter branches. $cleared = array(); /* * Sort the filter ids by branch. Because these filters are designed to * override and further narrow the items selected in the static filter, * we will clear the values from the static filter on a branch by * branch basis before adding the dynamic filters. So, if the static * filter defines a type filter of "articles" and three "category" * filters but the user only limits the category further, the category * filters will be flushed but the type filters will not. */ foreach ($results as $result) { // Check if the branch has been cleared. if (!in_array($result->branch, $cleared, true)) { // Clear the branch. $this->filters[$result->branch] = array(); // Add the branch to the cleared list. $cleared[] = $result->branch; } // Add the filter to the list. $this->filters[$result->branch][$result->title] = (int) $result->id; } return true; } /** * Method to process the query date filters to determine start and end * date limitations. * * @param string $date1 The first date filter. * @param string $date2 The second date filter. * @param string $when1 The first date modifier. * @param string $when2 The second date modifier. * * @return boolean True on success. * * @since 2.5 */ protected function processDates($date1, $date2, $when1, $when2) { // Clean up the inputs. $date1 = trim(StringHelper::strtolower($date1)); $date2 = trim(StringHelper::strtolower($date2)); $when1 = trim(StringHelper::strtolower($when1)); $when2 = trim(StringHelper::strtolower($when2)); // Get the time offset. $offset = JFactory::getApplication()->get('offset'); // Array of allowed when values. $whens = array('before', 'after', 'exact'); // The value of 'today' is a special case that we need to handle. if ($date1 === StringHelper::strtolower(JText::_('COM_FINDER_QUERY_FILTER_TODAY'))) { $date1 = JFactory::getDate('now', $offset)->format('%Y-%m-%d'); } // Try to parse the date string. $date = JFactory::getDate($date1, $offset); // Check if the date was parsed successfully. if ($date->toUnix() !== null) { // Set the date filter. $this->date1 = $date->toSql(); $this->when1 = in_array($when1, $whens, true) ? $when1 : 'before'; } // The value of 'today' is a special case that we need to handle. if ($date2 === StringHelper::strtolower(JText::_('COM_FINDER_QUERY_FILTER_TODAY'))) { $date2 = JFactory::getDate('now', $offset)->format('%Y-%m-%d'); } // Try to parse the date string. $date = JFactory::getDate($date2, $offset); // Check if the date was parsed successfully. if ($date->toUnix() !== null) { // Set the date filter. $this->date2 = $date->toSql(); $this->when2 = in_array($when2, $whens, true) ? $when2 : 'before'; } return true; } /** * Method to process the query input string and extract required, optional, * and excluded tokens; taxonomy filters; and date filters. * * @param string $input The query input string. * @param string $lang The query input language. * @param string $mode The query matching mode. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected function processString($input, $lang, $mode) { // Clean up the input string. $input = html_entity_decode($input, ENT_QUOTES, 'UTF-8'); $input = StringHelper::strtolower($input); $input = preg_replace('#\s+#mi', ' ', $input); $input = trim($input); $debug = JFactory::getConfig()->get('debug_lang'); /* * First, we need to handle string based modifiers. String based * modifiers could potentially include things like "category:blah" or * "before:2009-10-21" or "type:article", etc. */ $patterns = array( 'before' => JText::_('COM_FINDER_FILTER_WHEN_BEFORE'), 'after' => JText::_('COM_FINDER_FILTER_WHEN_AFTER'), ); // Add the taxonomy branch titles to the possible patterns. foreach (FinderIndexerTaxonomy::getBranchTitles() as $branch) { // Add the pattern. $patterns[$branch] = StringHelper::strtolower(JText::_(FinderHelperLanguage::branchSingular($branch))); } // Container for search terms and phrases. $terms = array(); $phrases = array(); // Cleared filter branches. $cleared = array(); /* * Compile the suffix pattern. This is used to match the values of the * filter input string. Single words can be input directly, multi-word * values have to be wrapped in double quotes. */ $quotes = html_entity_decode('‘’'', ENT_QUOTES, 'UTF-8'); $suffix = '(([\w\d' . $quotes . '-]+)|\"([\w\d\s' . $quotes . '-]+)\")'; /* * Iterate through the possible filter patterns and search for matches. * We need to match the key, colon, and a value pattern for the match * to be valid. */ foreach ($patterns as $modifier => $pattern) { $matches = array(); if ($debug) { $pattern = substr($pattern, 2, -2); } // Check if the filter pattern is in the input string. if (preg_match('#' . $pattern . '\s*:\s*' . $suffix . '#mi', $input, $matches)) { // Get the value given to the modifier. $value = isset($matches[3]) ? $matches[3] : $matches[1]; // Now we have to handle the filter string. switch ($modifier) { // Handle a before and after date filters. case 'before': case 'after': { // Get the time offset. $offset = JFactory::getApplication()->get('offset'); // Array of allowed when values. $whens = array('before', 'after', 'exact'); // The value of 'today' is a special case that we need to handle. if ($value === StringHelper::strtolower(JText::_('COM_FINDER_QUERY_FILTER_TODAY'))) { $value = JFactory::getDate('now', $offset)->format('%Y-%m-%d'); } // Try to parse the date string. $date = JFactory::getDate($value, $offset); // Check if the date was parsed successfully. if ($date->toUnix() !== null) { // Set the date filter. $this->date1 = $date->toSql(); $this->when1 = in_array($modifier, $whens, true) ? $modifier : 'before'; } break; } // Handle a taxonomy branch filter. default: { // Try to find the node id. $return = FinderIndexerTaxonomy::getNodeByTitle($modifier, $value); // Check if the node id was found. if ($return) { // Check if the branch has been cleared. if (!in_array($modifier, $cleared, true)) { // Clear the branch. $this->filters[$modifier] = array(); // Add the branch to the cleared list. $cleared[] = $modifier; } // Add the filter to the list. $this->filters[$modifier][$return->title] = (int) $return->id; } break; } } // Clean up the input string again. $input = str_replace($matches[0], '', $input); $input = preg_replace('#\s+#mi', ' ', $input); $input = trim($input); } } /* * Extract the tokens enclosed in double quotes so that we can handle * them as phrases. */ if (StringHelper::strpos($input, '"') !== false) { $matches = array(); // Extract the tokens enclosed in double quotes. if (preg_match_all('#\"([^"]+)\"#m', $input, $matches)) { /* * One or more phrases were found so we need to iterate through * them, tokenize them as phrases, and remove them from the raw * input string before we move on to the next processing step. */ foreach ($matches[1] as $key => $match) { // Find the complete phrase in the input string. $pos = StringHelper::strpos($input, $matches[0][$key]); $len = StringHelper::strlen($matches[0][$key]); // Add any terms that are before this phrase to the stack. if (trim(StringHelper::substr($input, 0, $pos))) { $terms = array_merge($terms, explode(' ', trim(StringHelper::substr($input, 0, $pos)))); } // Strip out everything up to and including the phrase. $input = StringHelper::substr($input, $pos + $len); // Clean up the input string again. $input = preg_replace('#\s+#mi', ' ', $input); $input = trim($input); // Get the number of words in the phrase. $parts = explode(' ', $match); // Check if the phrase is longer than three words. if (count($parts) > 3) { /* * If the phrase is longer than three words, we need to * break it down into smaller chunks of phrases that * are less than or equal to three words. We overlap * the chunks so that we can ensure that a match is * found for the complete phrase and not just portions * of it. */ for ($i = 0, $c = count($parts); $i < $c; $i += 2) { // Set up the chunk. $chunk = array(); // The chunk has to be assembled based on how many // pieces are available to use. switch ($c - $i) { /* * If only one word is left, we can break from * the switch and loop because the last word * was already used at the end of the last * chunk. */ case 1: break 2; // If there words are left, we use them both as // the last chunk of the phrase and we're done. case 2: $chunk[] = $parts[$i]; $chunk[] = $parts[$i + 1]; break; // If there are three or more words left, we // build a three word chunk and continue on. default: $chunk[] = $parts[$i]; $chunk[] = $parts[$i + 1]; $chunk[] = $parts[$i + 2]; break; } // If the chunk is not empty, add it as a phrase. if (count($chunk)) { $phrases[] = implode(' ', $chunk); $terms[] = implode(' ', $chunk); } } } else { // The phrase is <= 3 words so we can use it as is. $phrases[] = $match; $terms[] = $match; } } } } // Add the remaining terms if present. if ((bool) $input) { $terms = array_merge($terms, explode(' ', $input)); } // An array of our boolean operators. $operator => $translation $operators = array( 'AND' => StringHelper::strtolower(JText::_('COM_FINDER_QUERY_OPERATOR_AND')), 'OR' => StringHelper::strtolower(JText::_('COM_FINDER_QUERY_OPERATOR_OR')), 'NOT' => StringHelper::strtolower(JText::_('COM_FINDER_QUERY_OPERATOR_NOT')), ); // If language debugging is enabled you need to ignore the debug strings in matching. if (JDEBUG) { $debugStrings = array('**', '??'); $operators = str_replace($debugStrings, '', $operators); } /* * Iterate through the terms and perform any sorting that needs to be * done based on boolean search operators. Terms that are before an * and/or/not modifier have to be handled in relation to their operator. */ for ($i = 0, $c = count($terms); $i < $c; $i++) { // Check if the term is followed by an operator that we understand. if (isset($terms[$i + 1]) && in_array($terms[$i + 1], $operators, true)) { // Get the operator mode. $op = array_search($terms[$i + 1], $operators, true); // Handle the AND operator. if ($op === 'AND' && isset($terms[$i + 2])) { // Tokenize the current term. $token = FinderIndexerHelper::tokenize($terms[$i], $lang, true); // Todo: The previous function call may return an array, which seems not to be handled by the next one, which expects an object $token = $this->getTokenData($token); // Set the required flag. $token->required = true; // Add the current token to the stack. $this->included[] = $token; $this->highlight = array_merge($this->highlight, array_keys($token->matches)); // Skip the next token (the mode operator). $this->operators[] = $terms[$i + 1]; // Tokenize the term after the next term (current plus two). $other = FinderIndexerHelper::tokenize($terms[$i + 2], $lang, true); $other = $this->getTokenData($other); // Set the required flag. $other->required = true; // Add the token after the next token to the stack. $this->included[] = $other; $this->highlight = array_merge($this->highlight, array_keys($other->matches)); // Remove the processed phrases if possible. if (($pk = array_search($terms[$i], $phrases, true)) !== false) { unset($phrases[$pk]); } if (($pk = array_search($terms[$i + 2], $phrases, true)) !== false) { unset($phrases[$pk]); } // Remove the processed terms. unset($terms[$i], $terms[$i + 1], $terms[$i + 2]); // Adjust the loop. $i += 2; continue; } // Handle the OR operator. elseif ($op === 'OR' && isset($terms[$i + 2])) { // Tokenize the current term. $token = FinderIndexerHelper::tokenize($terms[$i], $lang, true); $token = $this->getTokenData($token); // Set the required flag. $token->required = false; // Add the current token to the stack. if ((bool) $token->matches) { $this->included[] = $token; $this->highlight = array_merge($this->highlight, array_keys($token->matches)); } else { $this->ignored[] = $token; } // Skip the next token (the mode operator). $this->operators[] = $terms[$i + 1]; // Tokenize the term after the next term (current plus two). $other = FinderIndexerHelper::tokenize($terms[$i + 2], $lang, true); $other = $this->getTokenData($other); // Set the required flag. $other->required = false; // Add the token after the next token to the stack. if ((bool) $other->matches) { $this->included[] = $other; $this->highlight = array_merge($this->highlight, array_keys($other->matches)); } else { $this->ignored[] = $other; } // Remove the processed phrases if possible. if (($pk = array_search($terms[$i], $phrases, true)) !== false) { unset($phrases[$pk]); } if (($pk = array_search($terms[$i + 2], $phrases, true)) !== false) { unset($phrases[$pk]); } // Remove the processed terms. unset($terms[$i], $terms[$i + 1], $terms[$i + 2]); // Adjust the loop. $i += 2; continue; } } // Handle an orphaned OR operator. elseif (isset($terms[$i + 1]) && array_search($terms[$i], $operators, true) === 'OR') { // Skip the next token (the mode operator). $this->operators[] = $terms[$i]; // Tokenize the next term (current plus one). $other = FinderIndexerHelper::tokenize($terms[$i + 1], $lang, true); $other = $this->getTokenData($other); // Set the required flag. $other->required = false; // Add the token after the next token to the stack. if ((bool) $other->matches) { $this->included[] = $other; $this->highlight = array_merge($this->highlight, array_keys($other->matches)); } else { $this->ignored[] = $other; } // Remove the processed phrase if possible. if (($pk = array_search($terms[$i + 1], $phrases, true)) !== false) { unset($phrases[$pk]); } // Remove the processed terms. unset($terms[$i], $terms[$i + 1]); // Adjust the loop. $i++; continue; } // Handle the NOT operator. elseif (isset($terms[$i + 1]) && array_search($terms[$i], $operators, true) === 'NOT') { // Skip the next token (the mode operator). $this->operators[] = $terms[$i]; // Tokenize the next term (current plus one). $other = FinderIndexerHelper::tokenize($terms[$i + 1], $lang, true); $other = $this->getTokenData($other); // Set the required flag. $other->required = false; // Add the next token to the stack. if ((bool) $other->matches) { $this->excluded[] = $other; } else { $this->ignored[] = $other; } // Remove the processed phrase if possible. if (($pk = array_search($terms[$i + 1], $phrases, true)) !== false) { unset($phrases[$pk]); } // Remove the processed terms. unset($terms[$i], $terms[$i + 1]); // Adjust the loop. $i++; continue; } } /* * Iterate through any search phrases and tokenize them. We handle * phrases as autonomous units and do not break them down into two and * three word combinations. */ for ($i = 0, $c = count($phrases); $i < $c; $i++) { // Tokenize the phrase. $token = FinderIndexerHelper::tokenize($phrases[$i], $lang, true); $token = $this->getTokenData($token); // Set the required flag. $token->required = true; // Add the current token to the stack. $this->included[] = $token; $this->highlight = array_merge($this->highlight, array_keys($token->matches)); // Remove the processed term if possible. if (($pk = array_search($phrases[$i], $terms, true)) !== false) { unset($terms[$pk]); } // Remove the processed phrase. unset($phrases[$i]); } /* * Handle any remaining tokens using the standard processing mechanism. */ if ((bool) $terms) { // Tokenize the terms. $terms = implode(' ', $terms); $tokens = FinderIndexerHelper::tokenize($terms, $lang, false); // Make sure we are working with an array. $tokens = is_array($tokens) ? $tokens : array($tokens); // Get the token data and required state for all the tokens. foreach ($tokens as $token) { // Get the token data. $token = $this->getTokenData($token); // Set the required flag for the token. $token->required = $mode === 'AND' ? (!$token->phrase) : false; // Add the token to the appropriate stack. if ($token->required || (bool) $token->matches) { $this->included[] = $token; $this->highlight = array_merge($this->highlight, array_keys($token->matches)); } else { $this->ignored[] = $token; } } } return true; } /** * Method to get the base and similar term ids and, if necessary, suggested * term data from the database. The terms ids are identified based on a * 'like' match in MySQL and/or a common stem. If no term ids could be * found, then we know that we will not be able to return any results for * that term and we should try to find a similar term to use that we can * match so that we can suggest the alternative search query to the user. * * @param FinderIndexerToken $token A FinderIndexerToken object. * * @return FinderIndexerToken A FinderIndexerToken object. * * @since 2.5 * @throws Exception on database error. */ protected function getTokenData($token) { // Get the database object. $db = JFactory::getDbo(); // Create a database query to build match the token. $query = $db->getQuery(true) ->select('t.term, t.term_id') ->from('#__finder_terms AS t'); /* * If the token is a phrase, the lookup process is fairly simple. If * the token is a word, it is a little more complicated. We have to * create two queries to lookup the term and the stem respectively, * then union the result sets together. This is MUCH faster than using * an or condition in the database query. */ if ($token->phrase) { // Add the phrase to the query. $query->where('t.term = ' . $db->quote($token->term)) ->where('t.phrase = 1'); } else { // Add the term to the query. $query->where('t.term = ' . $db->quote($token->term)) ->where('t.phrase = 0'); // Clone the query, replace the WHERE clause. $sub = clone $query; $sub->clear('where'); $sub->where('t.stem = ' . $db->quote($token->stem)); $sub->where('t.phrase = 0'); // Union the two queries. $query->union($sub); } // Get the terms. $db->setQuery($query); $matches = $db->loadObjectList(); // Check the matching terms. if ((bool) $matches) { // Add the matches to the token. for ($i = 0, $c = count($matches); $i < $c; $i++) { $token->matches[$matches[$i]->term] = (int) $matches[$i]->term_id; } } // If no matches were found, try to find a similar but better token. if (empty($token->matches)) { // Create a database query to get the similar terms. // TODO: PostgreSQL doesn't support SOUNDEX out of the box $query->clear() ->select('DISTINCT t.term_id AS id, t.term AS term') ->from('#__finder_terms AS t') // ->where('t.soundex = ' . soundex($db->quote($token->term))) ->where('t.soundex = SOUNDEX(' . $db->quote($token->term) . ')') ->where('t.phrase = ' . (int) $token->phrase); // Get the terms. $db->setQuery($query); $results = $db->loadObjectList(); // Check if any similar terms were found. if (empty($results)) { return $token; } // Stack for sorting the similar terms. $suggestions = array(); // Get the levnshtein distance for all suggested terms. foreach ($results as $sk => $st) { // Get the levenshtein distance between terms. $distance = levenshtein($st->term, $token->term); // Make sure the levenshtein distance isn't over 50. if ($distance < 50) { $suggestions[$sk] = $distance; } } // Sort the suggestions. asort($suggestions, SORT_NUMERIC); // Get the closest match. $keys = array_keys($suggestions); $key = $keys[0]; // Add the suggested term. $token->suggestion = $results[$key]->term; } return $token; } } PKb��\�cA�YY5components/com_finder/helpers/indexer/parser/html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('FinderIndexerParser', dirname(__DIR__) . '/parser.php'); /** * HTML Parser class for the Finder indexer package. * * @since 2.5 */ class FinderIndexerParserHtml extends FinderIndexerParser { /** * Method to parse input and extract the plain text. Because this method is * called from both inside and outside the indexer, it needs to be able to * batch out its parsing functionality to deal with the inefficiencies of * regular expressions. We will parse recursively in 2KB chunks. * * @param string $input The input to parse. * * @return string The plain text input. * * @since 2.5 */ public function parse($input) { // Strip invalid UTF-8 characters. $input = iconv('utf-8', 'utf-8//IGNORE', $input); // Remove anything between <head> and </head> tags. Do this first // because there might be <script> or <style> tags nested inside. $input = $this->removeBlocks($input, '<head>', '</head>'); // Convert <style> and <noscript> tags to <script> tags // so we can remove them efficiently. $search = array( '<style', '</style', '<noscript', '</noscript', ); $replace = array( '<script', '</script', '<script', '</script', ); $input = str_replace($search, $replace, $input); // Strip all script blocks. $input = $this->removeBlocks($input, '<script', '</script>'); // Decode HTML entities. $input = html_entity_decode($input, ENT_QUOTES, 'UTF-8'); // Convert entities equivalent to spaces to actual spaces. $input = str_replace(array(' ', ' '), ' ', $input); // This fixes issues such as '<h1>Title</h1><p>Paragraph</p>' // being transformed into 'TitleParagraph' with no space. $input = str_replace('>', '> ', $input); // Strip HTML tags. $input = strip_tags($input); return parent::parse($input); } /** * Method to process HTML input and extract the plain text. * * @param string $input The input to process. * * @return string The plain text input. * * @since 2.5 */ protected function process($input) { // Replace any amount of white space with a single space. return preg_replace('#\s+#u', ' ', $input); } /** * Method to remove blocks of text between a start and an end tag. * Each block removed is effectively replaced by a single space. * * Note: The start tag and the end tag must be different. * Note: Blocks must not be nested. * Note: This method will function correctly with multi-byte strings. * * @param string $input String to be processed. * @param string $startTag String representing the start tag. * @param string $endTag String representing the end tag. * * @return string with blocks removed. * * @since 3.4 */ private function removeBlocks($input, $startTag, $endTag) { $return = ''; $offset = 0; $startTagLength = strlen($startTag); $endTagLength = strlen($endTag); // Find the first start tag. $start = stripos($input, $startTag); // If no start tags were found, return the string unchanged. if ($start === false) { return $input; } // Look for all blocks defined by the start and end tags. while ($start !== false) { // Accumulate the substring up to the start tag. $return .= substr($input, $offset, $start - $offset) . ' '; // Look for an end tag corresponding to the start tag. $end = stripos($input, $endTag, $start + $startTagLength); // If no corresponding end tag, leave the string alone. if ($end === false) { // Fix the offset so part of the string is not duplicated. $offset = $start; break; } // Advance the start position. $offset = $end + $endTagLength; // Look for the next start tag and loop. $start = stripos($input, $startTag, $offset); } // Add in the final substring after the last end tag. $return .= substr($input, $offset); return $return; } } PKb��\��--4components/com_finder/helpers/indexer/parser/rtf.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('FinderIndexerParser', dirname(__DIR__) . '/parser.php'); /** * RTF Parser class for the Finder indexer package. * * @since 2.5 */ class FinderIndexerParserRtf extends FinderIndexerParser { /** * Method to process RTF input and extract the plain text. * * @param string $input The input to process. * * @return string The plain text input. * * @since 2.5 */ protected function process($input) { // Remove embedded pictures. $input = preg_replace('#{\\\pict[^}]*}#mi', '', $input); // Remove control characters. $input = str_replace(array('{', '}', "\\\n"), array(' ', ' ', "\n"), $input); $input = preg_replace('#\\\([^;]+?);#m', ' ', $input); $input = preg_replace('#\\\[\'a-zA-Z0-9]+#mi', ' ', $input); return $input; } } PKb��\��/2��4components/com_finder/helpers/indexer/parser/txt.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('FinderIndexerParser', dirname(__DIR__) . '/parser.php'); /** * Text Parser class for the Finder indexer package. * * @since 2.5 */ class FinderIndexerParserTxt extends FinderIndexerParser { /** * Method to process Text input and extract the plain text. * * @param string $input The input to process. * * @return string The plain text input. * * @since 2.5 */ protected function process($input) { return $input; } } PKb��\x��8�80components/com_finder/helpers/indexer/helper.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\String\StringHelper; JLoader::register('FinderIndexerParser', __DIR__ . '/parser.php'); JLoader::register('FinderIndexerStemmer', __DIR__ . '/stemmer.php'); JLoader::register('FinderIndexerToken', __DIR__ . '/token.php'); /** * Helper class for the Finder indexer package. * * @since 2.5 */ class FinderIndexerHelper { /** * The token stemmer object. The stemmer is set by whatever class * wishes to use it but it must be an instance of FinderIndexerStemmer. * * @var FinderIndexerStemmer * @since 2.5 */ public static $stemmer; /** * A state flag, in order to not constantly check if the stemmer is an instance of FinderIndexerStemmer * * @var boolean * @since 3.7.0 */ protected static $stemmerOK; /** * Method to parse input into plain text. * * @param string $input The raw input. * @param string $format The format of the input. [optional] * * @return string The parsed input. * * @since 2.5 * @throws Exception on invalid parser. */ public static function parse($input, $format = 'html') { // Get a parser for the specified format and parse the input. return FinderIndexerParser::getInstance($format)->parse($input); } /** * Method to tokenize a text string. * * @param string $input The input to tokenize. * @param string $lang The language of the input. * @param boolean $phrase Flag to indicate whether input could be a phrase. [optional] * * @return array|FinderIndexerToken An array of FinderIndexerToken objects or a single FinderIndexerToken object. * * @since 2.5 */ public static function tokenize($input, $lang, $phrase = false) { static $cache; $store = StringHelper::strlen($input) < 128 ? md5($input . '::' . $lang . '::' . $phrase) : null; // Check if the string has been tokenized already. if ($store && isset($cache[$store])) { return $cache[$store]; } $tokens = array(); $quotes = html_entity_decode('‘’'', ENT_QUOTES, 'UTF-8'); // Get the simple language key. $lang = static::getPrimaryLanguage($lang); /* * Parsing the string input into terms is a multi-step process. * * Regexes: * 1. Remove everything except letters, numbers, quotes, apostrophe, plus, dash, period, and comma. * 2. Remove plus, dash, period, and comma characters located before letter characters. * 3. Remove plus, dash, period, and comma characters located after other characters. * 4. Remove plus, period, and comma characters enclosed in alphabetical characters. Ungreedy. * 5. Remove orphaned apostrophe, plus, dash, period, and comma characters. * 6. Remove orphaned quote characters. * 7. Replace the assorted single quotation marks with the ASCII standard single quotation. * 8. Remove multiple space characters and replaces with a single space. */ $input = StringHelper::strtolower($input); $input = preg_replace('#[^\pL\pM\pN\p{Pi}\p{Pf}\'+-.,]+#mui', ' ', $input); $input = preg_replace('#(^|\s)[+-.,]+([\pL\pM]+)#mui', ' $1', $input); $input = preg_replace('#([\pL\pM\pN]+)[+-.,]+(\s|$)#mui', '$1 ', $input); $input = preg_replace('#([\pL\pM]+)[+.,]+([\pL\pM]+)#muiU', '$1 $2', $input); $input = preg_replace('#(^|\s)[\'+-.,]+(\s|$)#mui', ' ', $input); $input = preg_replace('#(^|\s)[\p{Pi}\p{Pf}]+(\s|$)#mui', ' ', $input); $input = preg_replace('#[' . $quotes . ']+#mui', '\'', $input); $input = preg_replace('#\s+#mui', ' ', $input); $input = trim($input); // Explode the normalized string to get the terms. $terms = explode(' ', $input); /* * If we have Unicode support and are dealing with Chinese text, Chinese * has to be handled specially because there are not necessarily any spaces * between the "words". So, we have to test if the words belong to the Chinese * character set and if so, explode them into single glyphs or "words". */ if ($lang === 'zh') { // Iterate through the terms and test if they contain Chinese. for ($i = 0, $n = count($terms); $i < $n; $i++) { $charMatches = array(); $charCount = preg_match_all('#[\p{Han}]#mui', $terms[$i], $charMatches); // Split apart any groups of Chinese characters. for ($j = 0; $j < $charCount; $j++) { $tSplit = StringHelper::str_ireplace($charMatches[0][$j], '', $terms[$i], false); if ((bool) $tSplit) { $terms[$i] = $tSplit; } else { unset($terms[$i]); } $terms[] = $charMatches[0][$j]; } } // Reset array keys. $terms = array_values($terms); } /* * If we have to handle the input as a phrase, that means we don't * tokenize the individual terms and we do not create the two and three * term combinations. The phrase must contain more than one word! */ if ($phrase === true && count($terms) > 1) { // Create tokens from the phrase. $tokens[] = new FinderIndexerToken($terms, $lang); } else { // Create tokens from the terms. for ($i = 0, $n = count($terms); $i < $n; $i++) { $tokens[] = new FinderIndexerToken($terms[$i], $lang); } // Create two and three word phrase tokens from the individual words. for ($i = 0, $n = count($tokens); $i < $n; $i++) { // Setup the phrase positions. $i2 = $i + 1; $i3 = $i + 2; // Create the two word phrase. if ($i2 < $n && isset($tokens[$i2])) { // Tokenize the two word phrase. $token = new FinderIndexerToken( array( $tokens[$i]->term, $tokens[$i2]->term ), $lang, $lang === 'zh' ? '' : ' ' ); $token->derived = true; // Add the token to the stack. $tokens[] = $token; } // Create the three word phrase. if ($i3 < $n && isset($tokens[$i3])) { // Tokenize the three word phrase. $token = new FinderIndexerToken( array( $tokens[$i]->term, $tokens[$i2]->term, $tokens[$i3]->term ), $lang, $lang === 'zh' ? '' : ' ' ); $token->derived = true; // Add the token to the stack. $tokens[] = $token; } } } if ($store) { $cache[$store] = count($tokens) > 1 ? $tokens : array_shift($tokens); return $cache[$store]; } else { return count($tokens) > 1 ? $tokens : array_shift($tokens); } } /** * Method to get the base word of a token. This method uses the public * {@link FinderIndexerHelper::$stemmer} object if it is set. If no stemmer is set, * the original token is returned. * * @param string $token The token to stem. * @param string $lang The language of the token. * * @return string The root token. * * @since 2.5 */ public static function stem($token, $lang) { // Trim apostrophes at either end of the token. $token = trim($token, '\''); // Trim everything after any apostrophe in the token. if ($res = explode('\'', $token)) { $token = $res[0]; } if (static::$stemmerOK === true) { return static::$stemmer->stem($token, $lang); } else { // Stem the token if we have a valid stemmer to use. if (static::$stemmer instanceof FinderIndexerStemmer) { static::$stemmerOK = true; return static::$stemmer->stem($token, $lang); } } return $token; } /** * Method to add a content type to the database. * * @param string $title The type of content. For example: PDF * @param string $mime The mime type of the content. For example: PDF [optional] * * @return integer The id of the content type. * * @since 2.5 * @throws Exception on database error. */ public static function addContentType($title, $mime = null) { static $types; $db = JFactory::getDbo(); $query = $db->getQuery(true); // Check if the types are loaded. if (empty($types)) { // Build the query to get the types. $query->select('*') ->from($db->quoteName('#__finder_types')); // Get the types. $db->setQuery($query); $types = $db->loadObjectList('title'); } // Check if the type already exists. if (isset($types[$title])) { return (int) $types[$title]->id; } // Add the type. $query->clear() ->insert($db->quoteName('#__finder_types')) ->columns(array($db->quoteName('title'), $db->quoteName('mime'))) ->values($db->quote($title) . ', ' . $db->quote($mime)); $db->setQuery($query); $db->execute(); // Return the new id. return (int) $db->insertid(); } /** * Method to check if a token is common in a language. * * @param string $token The token to test. * @param string $lang The language to reference. * * @return boolean True if common, false otherwise. * * @since 2.5 */ public static function isCommon($token, $lang) { static $data; static $default; $langCode = $lang; // If language requested is wildcard, use the default language. if ($default === null && $lang === '*') { $default = strstr(self::getDefaultLanguage(), '-', true); $langCode = $default; } // Load the common tokens for the language if necessary. if (!isset($data[$langCode])) { $data[$langCode] = self::getCommonWords($langCode); } // Check if the token is in the common array. return in_array($token, $data[$langCode], true); } /** * Method to get an array of common terms for a language. * * @param string $lang The language to use. * * @return array Array of common terms. * * @since 2.5 * @throws Exception on database error. */ public static function getCommonWords($lang) { $db = JFactory::getDbo(); // Create the query to load all the common terms for the language. $query = $db->getQuery(true) ->select($db->quoteName('term')) ->from($db->quoteName('#__finder_terms_common')) ->where($db->quoteName('language') . ' = ' . $db->quote($lang)); // Load all of the common terms for the language. $db->setQuery($query); return $db->loadColumn(); } /** * Method to get the default language for the site. * * @return string The default language string. * * @since 2.5 */ public static function getDefaultLanguage() { static $lang; // We need to go to com_languages to get the site default language, it's the best we can guess. if (empty($lang)) { $lang = JComponentHelper::getParams('com_languages')->get('site', 'en-GB'); } return $lang; } /** * Method to parse a language/locale key and return a simple language string. * * @param string $lang The language/locale key. For example: en-GB * * @return string The simple language string. For example: en * * @since 2.5 */ public static function getPrimaryLanguage($lang) { static $data; // Only parse the identifier if necessary. if (!isset($data[$lang])) { if (is_callable(array('Locale', 'getPrimaryLanguage'))) { // Get the language key using the Locale package. $data[$lang] = Locale::getPrimaryLanguage($lang); } else { // Get the language key using string position. $data[$lang] = StringHelper::substr($lang, 0, StringHelper::strpos($lang, '-')); } } return $data[$lang]; } /** * Method to get the path (SEF route) for a content item. * * @param string $url The non-SEF route to the content item. * * @return string The path for the content item. * * @since 2.5 * @deprecated 4.0 */ public static function getContentPath($url) { static $router; // Only get the router once. if (!($router instanceof JRouter)) { // Get and configure the site router. $config = JFactory::getConfig(); $router = JRouter::getInstance('site'); $router->setMode($config->get('sef', 1)); } // Build the relative route. $uri = $router->build($url); $route = $uri->toString(array('path', 'query', 'fragment')); $route = str_replace(JUri::base(true) . '/', '', $route); return $route; } /** * Method to get extra data for a content before being indexed. This is how * we add Comments, Tags, Labels, etc. that should be available to Finder. * * @param FinderIndexerResult $item The item to index as a FinderIndexerResult object. * * @return boolean True on success, false on failure. * * @since 2.5 * @throws Exception on database error. */ public static function getContentExtras(FinderIndexerResult $item) { // Get the event dispatcher. $dispatcher = JEventDispatcher::getInstance(); // Load the finder plugin group. JPluginHelper::importPlugin('finder'); // Trigger the event. $results = $dispatcher->trigger('onPrepareFinderContent', array(&$item)); // Check the returned results. This is for plugins that don't throw // exceptions when they encounter serious errors. if (in_array(false, $results)) { throw new Exception($dispatcher->getError(), 500); } return true; } /** * Method to process content text using the onContentPrepare event trigger. * * @param string $text The content to process. * @param Registry $params The parameters object. [optional] * @param FinderIndexerResult $item The item which get prepared. [optional] * * @return string The processed content. * * @since 2.5 */ public static function prepareContent($text, $params = null, FinderIndexerResult $item = null) { static $loaded; // Get the dispatcher. $dispatcher = JEventDispatcher::getInstance(); // Load the content plugins if necessary. if (empty($loaded)) { JPluginHelper::importPlugin('content'); $loaded = true; } // Instantiate the parameter object if necessary. if (!($params instanceof Registry)) { $registry = new Registry($params); $params = $registry; } // Create a mock content object. $content = JTable::getInstance('Content'); $content->text = $text; if ($item) { $content->bind((array) $item); $content->bind($item->getElements()); } if ($item && !empty($item->context)) { $content->context = $item->context; } // Fire the onContentPrepare event. $dispatcher->trigger('onContentPrepare', array('com_finder.indexer', &$content, &$params, 0)); return $content->text; } } PKb��\v)ε�U�U1components/com_finder/helpers/indexer/adapter.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; JLoader::register('FinderIndexer', __DIR__ . '/indexer.php'); JLoader::register('FinderIndexerHelper', __DIR__ . '/helper.php'); JLoader::register('FinderIndexerResult', __DIR__ . '/result.php'); JLoader::register('FinderIndexerTaxonomy', __DIR__ . '/taxonomy.php'); /** * Prototype adapter class for the Finder indexer package. * * @since 2.5 */ abstract class FinderIndexerAdapter extends JPlugin { /** * The context is somewhat arbitrary but it must be unique or there will be * conflicts when managing plugin/indexer state. A good best practice is to * use the plugin name suffix as the context. For example, if the plugin is * named 'plgFinderContent', the context could be 'Content'. * * @var string * @since 2.5 */ protected $context; /** * The extension name. * * @var string * @since 2.5 */ protected $extension; /** * The sublayout to use when rendering the results. * * @var string * @since 2.5 */ protected $layout; /** * The mime type of the content the adapter indexes. * * @var string * @since 2.5 */ protected $mime; /** * The access level of an item before save. * * @var integer * @since 2.5 */ protected $old_access; /** * The access level of a category before save. * * @var integer * @since 2.5 */ protected $old_cataccess; /** * The type of content the adapter indexes. * * @var string * @since 2.5 */ protected $type_title; /** * The type id of the content. * * @var integer * @since 2.5 */ protected $type_id; /** * The database object. * * @var object * @since 2.5 */ protected $db; /** * The table name. * * @var string * @since 2.5 */ protected $table; /** * The indexer object. * * @var FinderIndexer * @since 3.0 */ protected $indexer; /** * The field the published state is stored in. * * @var string * @since 2.5 */ protected $state_field = 'state'; /** * Method to instantiate the indexer adapter. * * @param object $subject The object to observe. * @param array $config An array that holds the plugin configuration. * * @since 2.5 */ public function __construct(&$subject, $config) { // Get the database object. $this->db = JFactory::getDbo(); // Call the parent constructor. parent::__construct($subject, $config); // Get the type id. $this->type_id = $this->getTypeId(); // Add the content type if it doesn't exist and is set. if (empty($this->type_id) && !empty($this->type_title)) { $this->type_id = FinderIndexerHelper::addContentType($this->type_title, $this->mime); } // Check for a layout override. if ($this->params->get('layout')) { $this->layout = $this->params->get('layout'); } // Get the indexer object $this->indexer = FinderIndexer::getInstance(); } /** * Method to get the adapter state and push it into the indexer. * * @return void * * @since 2.5 * @throws Exception on error. */ public function onStartIndex() { // Get the indexer state. $iState = FinderIndexer::getState(); // Get the number of content items. $total = (int) $this->getContentCount(); // Add the content count to the total number of items. $iState->totalItems += $total; // Populate the indexer state information for the adapter. $iState->pluginState[$this->context]['total'] = $total; $iState->pluginState[$this->context]['offset'] = 0; // Set the indexer state. FinderIndexer::setState($iState); } /** * Method to prepare for the indexer to be run. This method will often * be used to include dependencies and things of that nature. * * @return boolean True on success. * * @since 2.5 * @throws Exception on error. */ public function onBeforeIndex() { // Get the indexer and adapter state. $iState = FinderIndexer::getState(); $aState = $iState->pluginState[$this->context]; // Check the progress of the indexer and the adapter. if ($iState->batchOffset == $iState->batchSize || $aState['offset'] == $aState['total']) { return true; } // Run the setup method. return $this->setup(); } /** * Method to index a batch of content items. This method can be called by * the indexer many times throughout the indexing process depending on how * much content is available for indexing. It is important to track the * progress correctly so we can display it to the user. * * @return boolean True on success. * * @since 2.5 * @throws Exception on error. */ public function onBuildIndex() { // Get the indexer and adapter state. $iState = FinderIndexer::getState(); $aState = $iState->pluginState[$this->context]; // Check the progress of the indexer and the adapter. if ($iState->batchOffset == $iState->batchSize || $aState['offset'] == $aState['total']) { return true; } // Get the batch offset and size. $offset = (int) $aState['offset']; $limit = (int) ($iState->batchSize - $iState->batchOffset); // Get the content items to index. $items = $this->getItems($offset, $limit); // Iterate through the items and index them. for ($i = 0, $n = count($items); $i < $n; $i++) { // Index the item. $this->index($items[$i]); // Adjust the offsets. $offset++; $iState->batchOffset++; $iState->totalItems--; } // Update the indexer state. $aState['offset'] = $offset; $iState->pluginState[$this->context] = $aState; FinderIndexer::setState($iState); return true; } /** * Method to change the value of a content item's property in the links * table. This is used to synchronize published and access states that * are changed when not editing an item directly. * * @param string $id The ID of the item to change. * @param string $property The property that is being changed. * @param integer $value The new value of that property. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected function change($id, $property, $value) { // Check for a property we know how to handle. if ($property !== 'state' && $property !== 'access') { return true; } // Get the URL for the content id. $item = $this->db->quote($this->getUrl($id, $this->extension, $this->layout)); // Update the content items. $query = $this->db->getQuery(true) ->update($this->db->quoteName('#__finder_links')) ->set($this->db->quoteName($property) . ' = ' . (int) $value) ->where($this->db->quoteName('url') . ' = ' . $item); $this->db->setQuery($query); $this->db->execute(); return true; } /** * Method to index an item. * * @param FinderIndexerResult $item The item to index as a FinderIndexerResult object. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ abstract protected function index(FinderIndexerResult $item); /** * Method to reindex an item. * * @param integer $id The ID of the item to reindex. * * @return void * * @since 2.5 * @throws Exception on database error. */ protected function reindex($id) { // Run the setup method. $this->setup(); // Remove the old item. $this->remove($id); // Get the item. $item = $this->getItem($id); // Index the item. $this->index($item); } /** * Method to remove an item from the index. * * @param string $id The ID of the item to remove. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected function remove($id) { // Get the item's URL $url = $this->db->quote($this->getUrl($id, $this->extension, $this->layout)); // Get the link ids for the content items. $query = $this->db->getQuery(true) ->select($this->db->quoteName('link_id')) ->from($this->db->quoteName('#__finder_links')) ->where($this->db->quoteName('url') . ' = ' . $url); $this->db->setQuery($query); $items = $this->db->loadColumn(); // Check the items. if (empty($items)) { return true; } // Remove the items. foreach ($items as $item) { $this->indexer->remove($item); } return true; } /** * Method to setup the adapter before indexing. * * @return boolean True on success, false on failure. * * @since 2.5 * @throws Exception on database error. */ abstract protected function setup(); /** * Method to update index data on category access level changes * * @param JTable $row A JTable object * * @return void * * @since 2.5 */ protected function categoryAccessChange($row) { $query = clone $this->getStateQuery(); $query->where('c.id = ' . (int) $row->id); // Get the access level. $this->db->setQuery($query); $items = $this->db->loadObjectList(); // Adjust the access level for each item within the category. foreach ($items as $item) { // Set the access level. $temp = max($item->access, $row->access); // Update the item. $this->change((int) $item->id, 'access', $temp); // Reindex the item $this->reindex($row->id); } } /** * Method to update index data on category access level changes * * @param array $pks A list of primary key ids of the content that has changed state. * @param integer $value The value of the state that the content has been changed to. * * @return void * * @since 2.5 */ protected function categoryStateChange($pks, $value) { /* * The item's published state is tied to the category * published state so we need to look up all published states * before we change anything. */ foreach ($pks as $pk) { $query = clone $this->getStateQuery(); $query->where('c.id = ' . (int) $pk); // Get the published states. $this->db->setQuery($query); $items = $this->db->loadObjectList(); // Adjust the state for each item within the category. foreach ($items as $item) { // Translate the state. $temp = $this->translateState($item->state, $value); // Update the item. $this->change($item->id, 'state', $temp); // Reindex the item $this->reindex($item->id); } } } /** * Method to check the existing access level for categories * * @param JTable $row A JTable object * * @return void * * @since 2.5 */ protected function checkCategoryAccess($row) { $query = $this->db->getQuery(true) ->select($this->db->quoteName('access')) ->from($this->db->quoteName('#__categories')) ->where($this->db->quoteName('id') . ' = ' . (int) $row->id); $this->db->setQuery($query); // Store the access level to determine if it changes $this->old_cataccess = $this->db->loadResult(); } /** * Method to check the existing access level for items * * @param JTable $row A JTable object * * @return void * * @since 2.5 */ protected function checkItemAccess($row) { $query = $this->db->getQuery(true) ->select($this->db->quoteName('access')) ->from($this->db->quoteName($this->table)) ->where($this->db->quoteName('id') . ' = ' . (int) $row->id); $this->db->setQuery($query); // Store the access level to determine if it changes $this->old_access = $this->db->loadResult(); } /** * Method to get the number of content items available to index. * * @return integer The number of content items available to index. * * @since 2.5 * @throws Exception on database error. */ protected function getContentCount() { $return = 0; // Get the list query. $query = $this->getListQuery(); // Check if the query is valid. if (empty($query)) { return $return; } // Tweak the SQL query to make the total lookup faster. if ($query instanceof JDatabaseQuery) { $query = clone $query; $query->clear('select') ->select('COUNT(*)') ->clear('order'); } // Get the total number of content items to index. $this->db->setQuery($query); return (int) $this->db->loadResult(); } /** * Method to get a content item to index. * * @param integer $id The id of the content item. * * @return FinderIndexerResult A FinderIndexerResult object. * * @since 2.5 * @throws Exception on database error. */ protected function getItem($id) { // Get the list query and add the extra WHERE clause. $query = $this->getListQuery(); $query->where('a.id = ' . (int) $id); // Get the item to index. $this->db->setQuery($query); $row = $this->db->loadAssoc(); // Convert the item to a result object. $item = ArrayHelper::toObject((array) $row, 'FinderIndexerResult'); // Set the item type. $item->type_id = $this->type_id; // Set the item layout. $item->layout = $this->layout; return $item; } /** * Method to get a list of content items to index. * * @param integer $offset The list offset. * @param integer $limit The list limit. * @param JDatabaseQuery $query A JDatabaseQuery object. [optional] * * @return array An array of FinderIndexerResult objects. * * @since 2.5 * @throws Exception on database error. */ protected function getItems($offset, $limit, $query = null) { $items = array(); // Get the content items to index. $this->db->setQuery($this->getListQuery($query), $offset, $limit); $rows = $this->db->loadAssocList(); // Convert the items to result objects. foreach ($rows as $row) { // Convert the item to a result object. $item = ArrayHelper::toObject((array) $row, 'FinderIndexerResult'); // Set the item type. $item->type_id = $this->type_id; // Set the mime type. $item->mime = $this->mime; // Set the item layout. $item->layout = $this->layout; // Set the extension if present if (isset($row->extension)) { $item->extension = $row->extension; } // Add the item to the stack. $items[] = $item; } return $items; } /** * Method to get the SQL query used to retrieve the list of content items. * * @param mixed $query A JDatabaseQuery object. [optional] * * @return JDatabaseQuery A database object. * * @since 2.5 */ protected function getListQuery($query = null) { // Check if we can use the supplied SQL query. return $query instanceof JDatabaseQuery ? $query : $this->db->getQuery(true); } /** * Method to get the plugin type * * @param integer $id The plugin ID * * @return string The plugin type * * @since 2.5 */ protected function getPluginType($id) { // Prepare the query $query = $this->db->getQuery(true) ->select($this->db->quoteName('element')) ->from($this->db->quoteName('#__extensions')) ->where($this->db->quoteName('extension_id') . ' = ' . (int) $id); $this->db->setQuery($query); return $this->db->loadResult(); } /** * Method to get a SQL query to load the published and access states for * an article and category. * * @return JDatabaseQuery A database object. * * @since 2.5 */ protected function getStateQuery() { $query = $this->db->getQuery(true); // Item ID $query->select('a.id'); // Item and category published state $query->select('a.' . $this->state_field . ' AS state, c.published AS cat_state'); // Item and category access levels $query->select('a.access, c.access AS cat_access') ->from($this->table . ' AS a') ->join('LEFT', '#__categories AS c ON c.id = a.catid'); return $query; } /** * Method to get the query clause for getting items to update by time. * * @param string $time The modified timestamp. * * @return JDatabaseQuery A database object. * * @since 2.5 */ protected function getUpdateQueryByTime($time) { // Build an SQL query based on the modified time. $query = $this->db->getQuery(true) ->where('a.modified >= ' . $this->db->quote($time)); return $query; } /** * Method to get the query clause for getting items to update by id. * * @param array $ids The ids to load. * * @return JDatabaseQuery A database object. * * @since 2.5 */ protected function getUpdateQueryByIds($ids) { // Build an SQL query based on the item ids. $query = $this->db->getQuery(true) ->where('a.id IN(' . implode(',', $ids) . ')'); return $query; } /** * Method to get the type id for the adapter content. * * @return integer The numeric type id for the content. * * @since 2.5 * @throws Exception on database error. */ protected function getTypeId() { // Get the type id from the database. $query = $this->db->getQuery(true) ->select($this->db->quoteName('id')) ->from($this->db->quoteName('#__finder_types')) ->where($this->db->quoteName('title') . ' = ' . $this->db->quote($this->type_title)); $this->db->setQuery($query); return (int) $this->db->loadResult(); } /** * Method to get the URL for the item. The URL is how we look up the link * in the Finder index. * * @param integer $id The id of the item. * @param string $extension The extension the category is in. * @param string $view The view for the URL. * * @return string The URL of the item. * * @since 2.5 */ protected function getUrl($id, $extension, $view) { return 'index.php?option=' . $extension . '&view=' . $view . '&id=' . $id; } /** * Method to get the page title of any menu item that is linked to the * content item, if it exists and is set. * * @param string $url The URL of the item. * * @return mixed The title on success, null if not found. * * @since 2.5 * @throws Exception on database error. */ protected function getItemMenuTitle($url) { $return = null; // Set variables $user = JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); // Build a query to get the menu params. $query = $this->db->getQuery(true) ->select($this->db->quoteName('params')) ->from($this->db->quoteName('#__menu')) ->where($this->db->quoteName('link') . ' = ' . $this->db->quote($url)) ->where($this->db->quoteName('published') . ' = 1') ->where($this->db->quoteName('access') . ' IN (' . $groups . ')'); // Get the menu params from the database. $this->db->setQuery($query); $params = $this->db->loadResult(); // Check the results. if (empty($params)) { return $return; } // Instantiate the params. $params = json_decode($params); // Get the page title if it is set. if (isset($params->page_title) && $params->page_title) { $return = $params->page_title; } return $return; } /** * Method to update index data on access level changes * * @param JTable $row A JTable object * * @return void * * @since 2.5 */ protected function itemAccessChange($row) { $query = clone $this->getStateQuery(); $query->where('a.id = ' . (int) $row->id); // Get the access level. $this->db->setQuery($query); $item = $this->db->loadObject(); // Set the access level. $temp = max($row->access, $item->cat_access); // Update the item. $this->change((int) $row->id, 'access', $temp); } /** * Method to update index data on published state changes * * @param array $pks A list of primary key ids of the content that has changed state. * @param integer $value The value of the state that the content has been changed to. * * @return void * * @since 2.5 */ protected function itemStateChange($pks, $value) { /* * The item's published state is tied to the category * published state so we need to look up all published states * before we change anything. */ foreach ($pks as $pk) { $query = clone $this->getStateQuery(); $query->where('a.id = ' . (int) $pk); // Get the published states. $this->db->setQuery($query); $item = $this->db->loadObject(); // Translate the state. $temp = $this->translateState($value, $item->cat_state); // Update the item. $this->change($pk, 'state', $temp); // Reindex the item $this->reindex($pk); } } /** * Method to update index data when a plugin is disabled * * @param array $pks A list of primary key ids of the content that has changed state. * * @return void * * @since 2.5 */ protected function pluginDisable($pks) { // Since multiple plugins may be disabled at a time, we need to check first // that we're handling the appropriate one for the context foreach ($pks as $pk) { if ($this->getPluginType($pk) == strtolower($this->context)) { // Get all of the items to unindex them $query = clone $this->getStateQuery(); $this->db->setQuery($query); $items = $this->db->loadColumn(); // Remove each item foreach ($items as $item) { $this->remove($item); } } } } /** * Method to translate the native content states into states that the * indexer can use. * * @param integer $item The item state. * @param integer $category The category state. [optional] * * @return integer The translated indexer state. * * @since 2.5 */ protected function translateState($item, $category = null) { // If category is present, factor in its states as well if ($category !== null && $category == 0) { $item = 0; } // Translate the state switch ($item) { // Published and archived items only should return a published state case 1; case 2: return 1; // All other states should return an unpublished state default: case 0: return 0; } } } PKb��\�T{��K�K6components/com_finder/helpers/indexer/driver/mysql.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.filesystem.file'); /** * Indexer class supporting MySQL(i) for the Finder indexer package. * * The indexer class provides the core functionality of the Finder * search engine. It is responsible for adding and updating the * content links table; extracting and scoring tokens; and maintaining * all referential information for the content. * * Note: All exceptions thrown from within this class should be caught * by the controller. * * @since 3.0 */ class FinderIndexerDriverMysql extends FinderIndexer { /** * Method to index a content item. * * @param FinderIndexerResult $item The content item to index. * @param string $format The format of the content. [optional] * * @return integer The ID of the record in the links table. * * @since 3.0 * @throws Exception on database error. */ public function index($item, $format = 'html') { // Mark beforeIndexing in the profiler. static::$profiler ? static::$profiler->mark('beforeIndexing') : null; $db = $this->db; $nd = $db->getNullDate(); // Check if the item is in the database. $query = $db->getQuery(true) ->select($db->quoteName('link_id') . ', ' . $db->quoteName('md5sum')) ->from($db->quoteName('#__finder_links')) ->where($db->quoteName('url') . ' = ' . $db->quote($item->url)); // Load the item from the database. $db->setQuery($query); $link = $db->loadObject(); // Get the indexer state. $state = static::getState(); // Get the signatures of the item. $curSig = static::getSignature($item); $oldSig = isset($link->md5sum) ? $link->md5sum : null; // Get the other item information. $linkId = empty($link->link_id) ? null : $link->link_id; $isNew = empty($link->link_id) ? true : false; // Check the signatures. If they match, the item is up to date. if (!$isNew && $curSig == $oldSig) { return $linkId; } /* * If the link already exists, flush all the term maps for the item. * Maps are stored in 16 tables so we need to iterate through and flush * each table one at a time. */ if (!$isNew) { for ($i = 0; $i <= 15; $i++) { // Flush the maps for the link. $query->clear() ->delete($db->quoteName('#__finder_links_terms' . dechex($i))) ->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query); $db->execute(); } // Remove the taxonomy maps. FinderIndexerTaxonomy::removeMaps($linkId); } // Mark afterUnmapping in the profiler. static::$profiler ? static::$profiler->mark('afterUnmapping') : null; // Perform cleanup on the item data. $item->publish_start_date = (int) $item->publish_start_date != 0 ? $item->publish_start_date : $nd; $item->publish_end_date = (int) $item->publish_end_date != 0 ? $item->publish_end_date : $nd; $item->start_date = (int) $item->start_date != 0 ? $item->start_date : $nd; $item->end_date = (int) $item->end_date != 0 ? $item->end_date : $nd; // Prepare the item description. $item->description = FinderIndexerHelper::parse($item->summary); /* * Now, we need to enter the item into the links table. If the item * already exists in the database, we need to use an UPDATE query. * Otherwise, we need to use an INSERT to get the link id back. */ if ($isNew) { $columnsArray = array( $db->quoteName('url'), $db->quoteName('route'), $db->quoteName('title'), $db->quoteName('description'), $db->quoteName('indexdate'), $db->quoteName('published'), $db->quoteName('state'), $db->quoteName('access'), $db->quoteName('language'), $db->quoteName('type_id'), $db->quoteName('object'), $db->quoteName('publish_start_date'), $db->quoteName('publish_end_date'), $db->quoteName('start_date'), $db->quoteName('end_date'), $db->quoteName('list_price'), $db->quoteName('sale_price') ); // Insert the link. $query->clear() ->insert($db->quoteName('#__finder_links')) ->columns($columnsArray) ->values( $db->quote($item->url) . ', ' . $db->quote($item->route) . ', ' . $db->quote($item->title) . ', ' . $db->quote($item->description) . ', ' . $query->currentTimestamp() . ', ' . '1, ' . (int) $item->state . ', ' . (int) $item->access . ', ' . $db->quote($item->language) . ', ' . (int) $item->type_id . ', ' . $db->quote(serialize($item)) . ', ' . $db->quote($item->publish_start_date) . ', ' . $db->quote($item->publish_end_date) . ', ' . $db->quote($item->start_date) . ', ' . $db->quote($item->end_date) . ', ' . (double) ($item->list_price ?: 0) . ', ' . (double) ($item->sale_price ?: 0) ); $db->setQuery($query); $db->execute(); // Get the link id. $linkId = (int) $db->insertid(); } else { // Update the link. $query->clear() ->update($db->quoteName('#__finder_links')) ->set($db->quoteName('route') . ' = ' . $db->quote($item->route)) ->set($db->quoteName('title') . ' = ' . $db->quote($item->title)) ->set($db->quoteName('description') . ' = ' . $db->quote($item->description)) ->set($db->quoteName('indexdate') . ' = ' . $query->currentTimestamp()) ->set($db->quoteName('state') . ' = ' . (int) $item->state) ->set($db->quoteName('access') . ' = ' . (int) $item->access) ->set($db->quoteName('language') . ' = ' . $db->quote($item->language)) ->set($db->quoteName('type_id') . ' = ' . (int) $item->type_id) ->set($db->quoteName('object') . ' = ' . $db->quote(serialize($item))) ->set($db->quoteName('publish_start_date') . ' = ' . $db->quote($item->publish_start_date)) ->set($db->quoteName('publish_end_date') . ' = ' . $db->quote($item->publish_end_date)) ->set($db->quoteName('start_date') . ' = ' . $db->quote($item->start_date)) ->set($db->quoteName('end_date') . ' = ' . $db->quote($item->end_date)) ->set($db->quoteName('list_price') . ' = ' . (double) ($item->list_price ?: 0)) ->set($db->quoteName('sale_price') . ' = ' . (double) ($item->sale_price ?: 0)) ->where('link_id = ' . (int) $linkId); $db->setQuery($query); $db->execute(); } // Set up the variables we will need during processing. $count = 0; // Mark afterLinking in the profiler. static::$profiler ? static::$profiler->mark('afterLinking') : null; // Truncate the tokens tables. $db->truncateTable('#__finder_tokens'); // Truncate the tokens aggregate table. $db->truncateTable('#__finder_tokens_aggregate'); /* * Process the item's content. The items can customize their * processing instructions to define extra properties to process * or rearrange how properties are weighted. */ foreach ($item->getInstructions() as $group => $properties) { // Iterate through the properties of the group. foreach ($properties as $property) { // Check if the property exists in the item. if (empty($item->$property)) { continue; } // Tokenize the property. if (is_array($item->$property)) { // Tokenize an array of content and add it to the database. foreach ($item->$property as $ip) { /* * If the group is path, we need to a few extra processing * steps to strip the extension and convert slashes and dashes * to spaces. */ if ($group === static::PATH_CONTEXT) { $ip = JFile::stripExt($ip); $ip = str_replace(array('/', '-'), ' ', $ip); } // Tokenize a string of content and add it to the database. $count += $this->tokenizeToDb($ip, $group, $item->language, $format); // Check if we're approaching the memory limit of the token table. if ($count > static::$state->options->get('memory_table_limit', 30000)) { $this->toggleTables(false); } } } else { /* * If the group is path, we need to a few extra processing * steps to strip the extension and convert slashes and dashes * to spaces. */ if ($group === static::PATH_CONTEXT) { $item->$property = JFile::stripExt($item->$property); $item->$property = str_replace('/', ' ', $item->$property); $item->$property = str_replace('-', ' ', $item->$property); } // Tokenize a string of content and add it to the database. $count += $this->tokenizeToDb($item->$property, $group, $item->language, $format); // Check if we're approaching the memory limit of the token table. if ($count > static::$state->options->get('memory_table_limit', 30000)) { $this->toggleTables(false); } } } } /* * Process the item's taxonomy. The items can customize their * taxonomy mappings to define extra properties to map. */ foreach ($item->getTaxonomy() as $branch => $nodes) { // Iterate through the nodes and map them to the branch. foreach ($nodes as $node) { // Add the node to the tree. $nodeId = FinderIndexerTaxonomy::addNode($branch, $node->title, $node->state, $node->access); // Add the link => node map. FinderIndexerTaxonomy::addMap($linkId, $nodeId); } } // Mark afterProcessing in the profiler. static::$profiler ? static::$profiler->mark('afterProcessing') : null; /* * At this point, all of the item's content has been parsed, tokenized * and inserted into the #__finder_tokens table. Now, we need to * aggregate all the data into that table into a more usable form. The * aggregated data will be inserted into #__finder_tokens_aggregate * table. */ $query = 'INSERT INTO ' . $db->quoteName('#__finder_tokens_aggregate') . ' (' . $db->quoteName('term_id') . ', ' . $db->quoteName('map_suffix') . ', ' . $db->quoteName('term') . ', ' . $db->quoteName('stem') . ', ' . $db->quoteName('common') . ', ' . $db->quoteName('phrase') . ', ' . $db->quoteName('term_weight') . ', ' . $db->quoteName('context') . ', ' . $db->quoteName('context_weight') . ', ' . $db->quoteName('total_weight') . ', ' . $db->quoteName('language') . ')' . ' SELECT' . ' COALESCE(t.term_id, 0), \'\', t1.term, t1.stem, t1.common, t1.phrase, t1.weight, t1.context,' . ' ROUND( t1.weight * COUNT( t2.term ) * %F, 8 ) AS context_weight, 0, t1.language' . ' FROM (' . ' SELECT DISTINCT t1.term, t1.stem, t1.common, t1.phrase, t1.weight, t1.context, t1.language' . ' FROM ' . $db->quoteName('#__finder_tokens') . ' AS t1' . ' WHERE t1.context = %d' . ' ) AS t1' . ' JOIN ' . $db->quoteName('#__finder_tokens') . ' AS t2 ON t2.term = t1.term' . ' LEFT JOIN ' . $db->quoteName('#__finder_terms') . ' AS t ON t.term = t1.term' . ' WHERE t2.context = %d' . ' GROUP BY t1.term, t.term_id, t1.term, t1.stem, t1.common, t1.phrase, t1.weight, t1.context, t1.language' . ' ORDER BY t1.term DESC'; // Iterate through the contexts and aggregate the tokens per context. foreach ($state->weights as $context => $multiplier) { // Run the query to aggregate the tokens for this context.. $db->setQuery(sprintf($query, $multiplier, $context, $context)); $db->execute(); } // Mark afterAggregating in the profiler. static::$profiler ? static::$profiler->mark('afterAggregating') : null; /* * When we pulled down all of the aggregate data, we did a LEFT JOIN * over the terms table to try to find all the term ids that * already exist for our tokens. If any of the rows in the aggregate * table have a term of 0, then no term record exists for that * term so we need to add it to the terms table. */ $db->setQuery( 'INSERT IGNORE INTO ' . $db->quoteName('#__finder_terms') . ' (' . $db->quoteName('term') . ', ' . $db->quoteName('stem') . ', ' . $db->quoteName('common') . ', ' . $db->quoteName('phrase') . ', ' . $db->quoteName('weight') . ', ' . $db->quoteName('soundex') . ', ' . $db->quoteName('language') . ')' . ' SELECT ta.term, ta.stem, ta.common, ta.phrase, ta.term_weight, SOUNDEX(ta.term), ta.language' . ' FROM ' . $db->quoteName('#__finder_tokens_aggregate') . ' AS ta' . ' WHERE ta.term_id = 0' . ' GROUP BY ta.term, ta.stem, ta.common, ta.phrase, ta.term_weight, SOUNDEX(ta.term), ta.language' ); $db->execute(); /* * Now, we just inserted a bunch of new records into the terms table * so we need to go back and update the aggregate table with all the * new term ids. */ $query = $db->getQuery(true) ->update($db->quoteName('#__finder_tokens_aggregate') . ' AS ta') ->join('INNER', $db->quoteName('#__finder_terms') . ' AS t ON t.term = ta.term') ->set('ta.term_id = t.term_id') ->where('ta.term_id = 0'); $db->setQuery($query); $db->execute(); // Mark afterTerms in the profiler. static::$profiler ? static::$profiler->mark('afterTerms') : null; /* * After we've made sure that all of the terms are in the terms table * and the aggregate table has the correct term ids, we need to update * the links counter for each term by one. */ $query->clear() ->update($db->quoteName('#__finder_terms') . ' AS t') ->join('INNER', $db->quoteName('#__finder_tokens_aggregate') . ' AS ta ON ta.term_id = t.term_id') ->set('t.' . $db->quoteName('links') . ' = t.links + 1'); $db->setQuery($query); $db->execute(); // Mark afterTerms in the profiler. static::$profiler ? static::$profiler->mark('afterTerms') : null; /* * Before we can insert all of the mapping rows, we have to figure out * which mapping table the rows need to be inserted into. The mapping * table for each term is based on the first character of the md5 of * the first character of the term. In php, it would be expressed as * substr(md5(substr($token, 0, 1)), 0, 1) */ $query->clear() ->update($db->quoteName('#__finder_tokens_aggregate')) ->set($db->quoteName('map_suffix') . ' = SUBSTR(MD5(SUBSTR(' . $db->quoteName('term') . ', 1, 1)), 1, 1)'); $db->setQuery($query); $db->execute(); /* * At this point, the aggregate table contains a record for each * term in each context. So, we're going to pull down all of that * data while grouping the records by term and add all of the * sub-totals together to arrive at the final total for each token for * this link. Then, we insert all of that data into the appropriate * mapping table. */ for ($i = 0; $i <= 15; $i++) { // Get the mapping table suffix. $suffix = dechex($i); /* * We have to run this query 16 times, one for each link => term * mapping table. */ $db->setQuery( 'INSERT INTO ' . $db->quoteName('#__finder_links_terms' . $suffix) . ' (' . $db->quoteName('link_id') . ', ' . $db->quoteName('term_id') . ', ' . $db->quoteName('weight') . ')' . ' SELECT ' . (int) $linkId . ', ' . $db->quoteName('term_id') . ',' . ' ROUND(SUM(' . $db->quoteName('context_weight') . '), 8)' . ' FROM ' . $db->quoteName('#__finder_tokens_aggregate') . ' WHERE ' . $db->quoteName('map_suffix') . ' = ' . $db->quote($suffix) . ' GROUP BY ' . $db->quoteName('term') . ', ' . $db->quoteName('term_id') . ' ORDER BY ' . $db->quoteName('term') . ' DESC' ); $db->execute(); } // Mark afterMapping in the profiler. static::$profiler ? static::$profiler->mark('afterMapping') : null; // Update the signature. $query->clear() ->update($db->quoteName('#__finder_links')) ->set($db->quoteName('md5sum') . ' = ' . $db->quote($curSig)) ->where($db->quoteName('link_id') . ' = ' . $db->quote($linkId)); $db->setQuery($query); $db->execute(); // Mark afterSigning in the profiler. static::$profiler ? static::$profiler->mark('afterSigning') : null; // Truncate the tokens tables. $db->truncateTable('#__finder_tokens'); // Truncate the tokens aggregate table. $db->truncateTable('#__finder_tokens_aggregate'); // Toggle the token tables back to memory tables. $this->toggleTables(true); // Mark afterTruncating in the profiler. static::$profiler ? static::$profiler->mark('afterTruncating') : null; return $linkId; } /** * Method to optimize the index. We use this method to remove unused terms * and any other optimizations that might be necessary. * * @return boolean True on success. * * @since 3.0 * @throws Exception on database error. */ public function optimize() { // Get the database object. $db = $this->db; $query = $db->getQuery(true); // Delete all orphaned terms. $query->delete($db->quoteName('#__finder_terms')) ->where($db->quoteName('links') . ' <= 0'); $db->setQuery($query); $db->execute(); // Optimize the links table. $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__finder_links')); $db->execute(); for ($i = 0; $i <= 15; $i++) { // Optimize the terms mapping table. $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__finder_links_terms' . dechex($i))); $db->execute(); } // Optimize the filters table. $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__finder_filters')); $db->execute(); // Optimize the terms common table. $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__finder_terms_common')); $db->execute(); // Optimize the types table. $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__finder_types')); $db->execute(); // Remove the orphaned taxonomy nodes. FinderIndexerTaxonomy::removeOrphanNodes(); // Optimize the taxonomy mapping table. $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__finder_taxonomy_map')); $db->execute(); // Optimize the taxonomy table. $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__finder_taxonomy')); $db->execute(); return true; } /** * Method to switch the token tables from Memory tables to MyISAM tables * when they are close to running out of memory. * * @param boolean $memory Flag to control how they should be toggled. * * @return boolean True on success. * * @since 3.0 * @throws Exception on database error. */ protected function toggleTables($memory) { static $state; // Get the database adapter. $db = $this->db; // Check if we are setting the tables to the Memory engine. if ($memory === true && $state !== true) { // Set the tokens table to Memory. $db->setQuery('ALTER TABLE ' . $db->quoteName('#__finder_tokens') . ' ENGINE = MEMORY'); $db->execute(); // Set the tokens aggregate table to Memory. $db->setQuery('ALTER TABLE ' . $db->quoteName('#__finder_tokens_aggregate') . ' ENGINE = MEMORY'); $db->execute(); // Set the internal state. $state = $memory; } // We must be setting the tables to the MyISAM engine. elseif ($memory === false && $state !== false) { // Set the tokens table to MyISAM. $db->setQuery('ALTER TABLE ' . $db->quoteName('#__finder_tokens') . ' ENGINE = MYISAM'); $db->execute(); // Set the tokens aggregate table to MyISAM. $db->setQuery('ALTER TABLE ' . $db->quoteName('#__finder_tokens_aggregate') . ' ENGINE = MYISAM'); $db->execute(); // Set the internal state. $state = $memory; } return true; } } PKb��\ �s?GGGG7components/com_finder/helpers/indexer/driver/sqlsrv.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.filesystem.file'); /** * Indexer class supporting SQL Server for the Finder indexer package. * * The indexer class provides the core functionality of the Finder * search engine. It is responsible for adding and updating the * content links table; extracting and scoring tokens; and maintaining * all referential information for the content. * * Note: All exceptions thrown from within this class should be caught * by the controller. * * @since 3.1 */ class FinderIndexerDriverSqlsrv extends FinderIndexer { /** * Method to index a content item. * * @param FinderIndexerResult $item The content item to index. * @param string $format The format of the content. [optional] * * @return integer The ID of the record in the links table. * * @since 3.1 * @throws Exception on database error. */ public function index($item, $format = 'html') { // Mark beforeIndexing in the profiler. static::$profiler ? static::$profiler->mark('beforeIndexing') : null; $db = $this->db; $nd = $db->getNullDate(); // Check if the item is in the database. $query = $db->getQuery(true) ->select($db->quoteName('link_id') . ', ' . $db->quoteName('md5sum')) ->from($db->quoteName('#__finder_links')) ->where($db->quoteName('url') . ' = ' . $db->quote($item->url)); // Load the item from the database. $db->setQuery($query); $link = $db->loadObject(); // Get the indexer state. $state = static::getState(); // Get the signatures of the item. $curSig = static::getSignature($item); $oldSig = isset($link->md5sum) ? $link->md5sum : null; // Get the other item information. $linkId = empty($link->link_id) ? null : $link->link_id; $isNew = empty($link->link_id) ? true : false; // Check the signatures. If they match, the item is up to date. if (!$isNew && $curSig === $oldSig) { return $linkId; } /* * If the link already exists, flush all the term maps for the item. * Maps are stored in 16 tables so we need to iterate through and flush * each table one at a time. */ if (!$isNew) { for ($i = 0; $i <= 15; $i++) { // Flush the maps for the link. $query->clear() ->delete($db->quoteName('#__finder_links_terms' . dechex($i))) ->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query); $db->execute(); } // Remove the taxonomy maps. FinderIndexerTaxonomy::removeMaps($linkId); } // Mark afterUnmapping in the profiler. static::$profiler ? static::$profiler->mark('afterUnmapping') : null; // Perform cleanup on the item data. $item->publish_start_date = (int) $item->publish_start_date != 0 ? $item->publish_start_date : $nd; $item->publish_end_date = (int) $item->publish_end_date != 0 ? $item->publish_end_date : $nd; $item->start_date = (int) $item->start_date != 0 ? $item->start_date : $nd; $item->end_date = (int) $item->end_date != 0 ? $item->end_date : $nd; // Prepare the item description. $item->description = FinderIndexerHelper::parse($item->summary); /* * Now, we need to enter the item into the links table. If the item * already exists in the database, we need to use an UPDATE query. * Otherwise, we need to use an INSERT to get the link id back. */ if ($isNew) { $columnsArray = array( $db->quoteName('url'), $db->quoteName('route'), $db->quoteName('title'), $db->quoteName('description'), $db->quoteName('indexdate'), $db->quoteName('published'), $db->quoteName('state'), $db->quoteName('access'), $db->quoteName('language'), $db->quoteName('type_id'), $db->quoteName('object'), $db->quoteName('publish_start_date'), $db->quoteName('publish_end_date'), $db->quoteName('start_date'), $db->quoteName('end_date'), $db->quoteName('list_price'), $db->quoteName('sale_price') ); // Insert the link. $query->clear() ->insert($db->quoteName('#__finder_links')) ->columns($columnsArray) ->values( $db->quote($item->url) . ', ' . $db->quote($item->route) . ', ' . $db->quote($item->title) . ', ' . $db->quote($item->description) . ', ' . $query->currentTimestamp() . ', ' . '1, ' . (int) $item->state . ', ' . (int) $item->access . ', ' . $db->quote($item->language) . ', ' . (int) $item->type_id . ', ' . $db->quote(serialize($item)) . ', ' . $db->quote($item->publish_start_date) . ', ' . $db->quote($item->publish_end_date) . ', ' . $db->quote($item->start_date) . ', ' . $db->quote($item->end_date) . ', ' . (double) ($item->list_price ?: 0) . ', ' . (double) ($item->sale_price ?: 0) ); $db->setQuery($query); $db->execute(); // Get the link id. $linkId = (int) $db->insertid(); } else { // Update the link. $query->clear() ->update($db->quoteName('#__finder_links')) ->set($db->quoteName('route') . ' = ' . $db->quote($item->route)) ->set($db->quoteName('title') . ' = ' . $db->quote($item->title)) ->set($db->quoteName('description') . ' = ' . $db->quote($item->description)) ->set($db->quoteName('indexdate') . ' = ' . $query->currentTimestamp()) ->set($db->quoteName('state') . ' = ' . (int) $item->state) ->set($db->quoteName('access') . ' = ' . (int) $item->access) ->set($db->quoteName('language') . ' = ' . $db->quote($item->language)) ->set($db->quoteName('type_id') . ' = ' . (int) $item->type_id) ->set($db->quoteName('object') . ' = ' . $db->quote(serialize($item))) ->set($db->quoteName('publish_start_date') . ' = ' . $db->quote($item->publish_start_date)) ->set($db->quoteName('publish_end_date') . ' = ' . $db->quote($item->publish_end_date)) ->set($db->quoteName('start_date') . ' = ' . $db->quote($item->start_date)) ->set($db->quoteName('end_date') . ' = ' . $db->quote($item->end_date)) ->set($db->quoteName('list_price') . ' = ' . (double) ($item->list_price ?: 0)) ->set($db->quoteName('sale_price') . ' = ' . (double) ($item->sale_price ?: 0)) ->where('link_id = ' . (int) $linkId); $db->setQuery($query); $db->execute(); } // Set up the variables we will need during processing. $count = 0; // Mark afterLinking in the profiler. static::$profiler ? static::$profiler->mark('afterLinking') : null; // Truncate the tokens tables. $db->truncateTable('#__finder_tokens'); // Truncate the tokens aggregate table. $db->truncateTable('#__finder_tokens_aggregate'); /* * Process the item's content. The items can customize their * processing instructions to define extra properties to process * or rearrange how properties are weighted. */ foreach ($item->getInstructions() as $group => $properties) { // Iterate through the properties of the group. foreach ($properties as $property) { // Check if the property exists in the item. if (empty($item->$property)) { continue; } // Tokenize the property. if (is_array($item->$property)) { // Tokenize an array of content and add it to the database. foreach ($item->$property as $ip) { /* * If the group is path, we need to a few extra processing * steps to strip the extension and convert slashes and dashes * to spaces. */ if ($group === static::PATH_CONTEXT) { $ip = JFile::stripExt($ip); $ip = str_replace(array('/', '-'), ' ', $ip); } // Tokenize a string of content and add it to the database. $count += $this->tokenizeToDb($ip, $group, $item->language, $format); // Check if we're approaching the memory limit of the token table. if ($count > static::$state->options->get('memory_table_limit', 30000)) { $this->toggleTables(false); } } } else { /* * If the group is path, we need to a few extra processing * steps to strip the extension and convert slashes and dashes * to spaces. */ if ($group === static::PATH_CONTEXT) { $item->$property = JFile::stripExt($item->$property); $item->$property = str_replace('/', ' ', $item->$property); $item->$property = str_replace('-', ' ', $item->$property); } // Tokenize a string of content and add it to the database. $count += $this->tokenizeToDb($item->$property, $group, $item->language, $format); // Check if we're approaching the memory limit of the token table. if ($count > static::$state->options->get('memory_table_limit', 30000)) { $this->toggleTables(false); } } } } /* * Process the item's taxonomy. The items can customize their * taxonomy mappings to define extra properties to map. */ foreach ($item->getTaxonomy() as $branch => $nodes) { // Iterate through the nodes and map them to the branch. foreach ($nodes as $node) { // Add the node to the tree. $nodeId = FinderIndexerTaxonomy::addNode($branch, $node->title, $node->state, $node->access); // Add the link => node map. FinderIndexerTaxonomy::addMap($linkId, $nodeId); } } // Mark afterProcessing in the profiler. static::$profiler ? static::$profiler->mark('afterProcessing') : null; /* * At this point, all of the item's content has been parsed, tokenized * and inserted into the #__finder_tokens table. Now, we need to * aggregate all the data into that table into a more usable form. The * aggregated data will be inserted into #__finder_tokens_aggregate * table. */ $query = 'INSERT INTO ' . $db->quoteName('#__finder_tokens_aggregate') . ' (' . $db->quoteName('term_id') . ', ' . $db->quoteName('term') . ', ' . $db->quoteName('stem') . ', ' . $db->quoteName('common') . ', ' . $db->quoteName('phrase') . ', ' . $db->quoteName('term_weight') . ', ' . $db->quoteName('context') . ', ' . $db->quoteName('context_weight') . ', ' . $db->quoteName('language') . ')' . ' SELECT' . ' t.term_id, t1.term, t1.stem, t1.common, t1.phrase, t1.weight, t1.context,' . ' ROUND( t1.weight * COUNT( t2.term ) * %F, 8 ) AS context_weight, t1.language' . ' FROM (' . ' SELECT DISTINCT t1.term, t1.stem, t1.common, t1.phrase, t1.weight, t1.context, t1.language' . ' FROM ' . $db->quoteName('#__finder_tokens') . ' AS t1' . ' WHERE t1.context = %d' . ' ) AS t1' . ' JOIN ' . $db->quoteName('#__finder_tokens') . ' AS t2 ON t2.term = t1.term' . ' LEFT JOIN ' . $db->quoteName('#__finder_terms') . ' AS t ON t.term = t1.term' . ' WHERE t2.context = %d' . ' GROUP BY t1.term, t.term_id, t1.term, t1.stem, t1.common, t1.phrase, t1.weight, t1.context, t1.language' . ' ORDER BY t1.term DESC'; // Iterate through the contexts and aggregate the tokens per context. foreach ($state->weights as $context => $multiplier) { // Run the query to aggregate the tokens for this context.. $db->setQuery(sprintf($query, $multiplier, $context, $context)); $db->execute(); } // Mark afterAggregating in the profiler. static::$profiler ? static::$profiler->mark('afterAggregating') : null; /* * When we pulled down all of the aggregate data, we did a LEFT JOIN * over the terms table to try to find all the term ids that * already exist for our tokens. If any of the rows in the aggregate * table have a term of 0, then no term record exists for that * term so we need to add it to the terms table. */ $db->setQuery( 'INSERT INTO ' . $db->quoteName('#__finder_terms') . ' (' . $db->quoteName('term') . ', ' . $db->quoteName('stem') . ', ' . $db->quoteName('common') . ', ' . $db->quoteName('phrase') . ', ' . $db->quoteName('weight') . ', ' . $db->quoteName('soundex') . ')' . ' SELECT ta.term, ta.stem, ta.common, ta.phrase, ta.term_weight, SOUNDEX(ta.term)' . ' FROM ' . $db->quoteName('#__finder_tokens_aggregate') . ' AS ta' . ' WHERE ta.term_id IS NULL' . ' GROUP BY ta.term, ta.stem, ta.common, ta.phrase, ta.term_weight' ); $db->execute(); /* * Now, we just inserted a bunch of new records into the terms table * so we need to go back and update the aggregate table with all the * new term ids. */ $query = $db->getQuery(true) ->update('ta') ->set('ta.term_id = t.term_id from #__finder_tokens_aggregate AS ta INNER JOIN #__finder_terms AS t ON t.term = ta.term') ->where('ta.term_id IS NULL'); $db->setQuery($query); $db->execute(); // Mark afterTerms in the profiler. static::$profiler ? static::$profiler->mark('afterTerms') : null; /* * After we've made sure that all of the terms are in the terms table * and the aggregate table has the correct term ids, we need to update * the links counter for each term by one. */ $query->clear() ->update('t') ->set('t.links = t.links + 1 FROM #__finder_terms AS t INNER JOIN #__finder_tokens_aggregate AS ta ON ta.term_id = t.term_id'); $db->setQuery($query); $db->execute(); // Mark afterTerms in the profiler. static::$profiler ? static::$profiler->mark('afterTerms') : null; /* * Before we can insert all of the mapping rows, we have to figure out * which mapping table the rows need to be inserted into. The mapping * table for each term is based on the first character of the md5 of * the first character of the term. In php, it would be expressed as * substr(md5(substr($token, 0, 1)), 0, 1) */ $query->clear() ->update($db->quoteName('#__finder_tokens_aggregate')) ->set($db->quoteName('map_suffix') . " = SUBSTRING(HASHBYTES('MD5', SUBSTRING(" . $db->quoteName('term') . ', 1, 1)), 1, 1)'); $db->setQuery($query); $db->execute(); /* * At this point, the aggregate table contains a record for each * term in each context. So, we're going to pull down all of that * data while grouping the records by term and add all of the * sub-totals together to arrive at the final total for each token for * this link. Then, we insert all of that data into the appropriate * mapping table. */ for ($i = 0; $i <= 15; $i++) { // Get the mapping table suffix. $suffix = dechex($i); /* * We have to run this query 16 times, one for each link => term * mapping table. */ $db->setQuery( 'INSERT INTO ' . $db->quoteName('#__finder_links_terms' . $suffix) . ' (' . $db->quoteName('link_id') . ', ' . $db->quoteName('term_id') . ', ' . $db->quoteName('weight') . ')' . ' SELECT ' . (int) $linkId . ', ' . $db->quoteName('term_id') . ',' . ' ROUND(SUM(' . $db->quoteName('context_weight') . '), 8)' . ' FROM ' . $db->quoteName('#__finder_tokens_aggregate') . ' WHERE ' . $db->quoteName('map_suffix') . ' = ' . $db->quote($suffix) . ' GROUP BY term, term_id' . ' ORDER BY ' . $db->quoteName('term') . ' DESC' ); $db->execute(); } // Mark afterMapping in the profiler. static::$profiler ? static::$profiler->mark('afterMapping') : null; // Update the signature. $query->clear() ->update($db->quoteName('#__finder_links')) ->set($db->quoteName('md5sum') . ' = ' . $db->quote($curSig)) ->where($db->quoteName('link_id') . ' = ' . $db->quote($linkId)); $db->setQuery($query); $db->execute(); // Mark afterSigning in the profiler. static::$profiler ? static::$profiler->mark('afterSigning') : null; // Truncate the tokens tables. $db->truncateTable('#__finder_tokens'); // Truncate the tokens aggregate table. $db->truncateTable('#__finder_tokens_aggregate'); // Toggle the token tables back to memory tables. $this->toggleTables(true); // Mark afterTruncating in the profiler. static::$profiler ? static::$profiler->mark('afterTruncating') : null; return $linkId; } /** * Method to remove a link from the index. * * @param integer $linkId The id of the link. * * @return boolean True on success. * * @since 3.1 * @throws Exception on database error. */ public function remove($linkId) { $db = $this->db; $query = $db->getQuery(true); // Update the link counts and remove the mapping records. for ($i = 0; $i <= 15; $i++) { // Update the link counts for the terms. $query->update('t') ->set('t.links = t.links - 1 from #__finder_terms AS t INNER JOIN #__finder_links_terms' . dechex($i) . ' AS m ON m.term_id = t.term_id') ->where('m.link_id = ' . $db->quote((int) $linkId)); $db->setQuery($query); $db->execute(); // Remove all records from the mapping tables. $query->clear() ->delete($db->quoteName('#__finder_links_terms' . dechex($i))) ->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query); $db->execute(); } // Delete all orphaned terms. $query->clear() ->delete($db->quoteName('#__finder_terms')) ->where($db->quoteName('links') . ' <= 0'); $db->setQuery($query); $db->execute(); // Delete the link from the index. $query->clear() ->delete($db->quoteName('#__finder_links')) ->where($db->quoteName('link_id') . ' = ' . $db->quote((int) $linkId)); $db->setQuery($query); $db->execute(); // Remove the taxonomy maps. FinderIndexerTaxonomy::removeMaps($linkId); // Remove the orphaned taxonomy nodes. FinderIndexerTaxonomy::removeOrphanNodes(); return true; } /** * Method to optimize the index. We use this method to remove unused terms * and any other optimizations that might be necessary. * * @return boolean True on success. * * @since 3.1 * @throws Exception on database error. */ public function optimize() { // Get the database object. $db = $this->db; $query = $db->getQuery(true); // Delete all orphaned terms. $query->delete($db->quoteName('#__finder_terms')) ->where($db->quoteName('links') . ' <= 0'); $db->setQuery($query); $db->execute(); // Remove the orphaned taxonomy nodes. FinderIndexerTaxonomy::removeOrphanNodes(); return true; } } PKb��\�Y~`/F/F;components/com_finder/helpers/indexer/driver/postgresql.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.filesystem.file'); /** * Indexer class supporting PostgreSQL for the Finder indexer package. * * @since 3.0 */ class FinderIndexerDriverPostgresql extends FinderIndexer { /** * Method to index a content item. * * @param FinderIndexerResult $item The content item to index. * @param string $format The format of the content. [optional] * * @return integer The ID of the record in the links table. * * @since 3.0 * @throws Exception on database error. */ public function index($item, $format = 'html') { // Mark beforeIndexing in the profiler. static::$profiler ? static::$profiler->mark('beforeIndexing') : null; $db = $this->db; $nd = $db->getNullDate(); // Check if the item is in the database. $query = $db->getQuery(true) ->select($db->quoteName('link_id') . ', ' . $db->quoteName('md5sum')) ->from($db->quoteName('#__finder_links')) ->where($db->quoteName('url') . ' = ' . $db->quote($item->url)); // Load the item from the database. $db->setQuery($query); $link = $db->loadObject(); // Get the indexer state. $state = static::getState(); // Get the signatures of the item. $curSig = static::getSignature($item); $oldSig = isset($link->md5sum) ? $link->md5sum : null; // Get the other item information. $linkId = empty($link->link_id) ? null : $link->link_id; $isNew = empty($link->link_id) ? true : false; // Check the signatures. If they match, the item is up to date. if (!$isNew && $curSig === $oldSig) { return $linkId; } /* * If the link already exists, flush all the term maps for the item. * Maps are stored in 16 tables so we need to iterate through and flush * each table one at a time. */ if (!$isNew) { for ($i = 0; $i <= 15; $i++) { // Flush the maps for the link. $query->clear() ->delete($db->quoteName('#__finder_links_terms' . dechex($i))) ->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query); $db->execute(); } // Remove the taxonomy maps. FinderIndexerTaxonomy::removeMaps($linkId); } // Mark afterUnmapping in the profiler. static::$profiler ? static::$profiler->mark('afterUnmapping') : null; // Perform cleanup on the item data. $item->publish_start_date = (int) $item->publish_start_date != 0 ? $item->publish_start_date : $nd; $item->publish_end_date = (int) $item->publish_end_date != 0 ? $item->publish_end_date : $nd; $item->start_date = (int) $item->start_date != 0 ? $item->start_date : $nd; $item->end_date = (int) $item->end_date != 0 ? $item->end_date : $nd; // Prepare the item description. $item->description = FinderIndexerHelper::parse($item->summary); /* * Now, we need to enter the item into the links table. If the item * already exists in the database, we need to use an UPDATE query. * Otherwise, we need to use an INSERT to get the link id back. */ if ($isNew) { $columnsArray = array( $db->quoteName('url'), $db->quoteName('route'), $db->quoteName('title'), $db->quoteName('description'), $db->quoteName('indexdate'), $db->quoteName('published'), $db->quoteName('state'), $db->quoteName('access'), $db->quoteName('language'), $db->quoteName('type_id'), $db->quoteName('object'), $db->quoteName('publish_start_date'), $db->quoteName('publish_end_date'), $db->quoteName('start_date'), $db->quoteName('end_date'), $db->quoteName('list_price'), $db->quoteName('sale_price') ); // Insert the link. $query->clear() ->insert($db->quoteName('#__finder_links')) ->columns($columnsArray) ->values( $db->quote($item->url) . ', ' . $db->quote($item->route) . ', ' . $db->quote($item->title) . ', ' . $db->quote($item->description) . ', ' . $query->currentTimestamp() . ', ' . '1, ' . (int) $item->state . ', ' . (int) $item->access . ', ' . $db->quote($item->language) . ', ' . (int) $item->type_id . ', ' . $db->quote(serialize($item)) . ', ' . $db->quote($item->publish_start_date) . ', ' . $db->quote($item->publish_end_date) . ', ' . $db->quote($item->start_date) . ', ' . $db->quote($item->end_date) . ', ' . (double) ($item->list_price ?: 0) . ', ' . (double) ($item->sale_price ?: 0) ); $db->setQuery($query); $db->execute(); // Get the link id. $linkId = (int) $db->insertid(); } else { // Update the link. $query->clear() ->update($db->quoteName('#__finder_links')) ->set($db->quoteName('route') . ' = ' . $db->quote($item->route)) ->set($db->quoteName('title') . ' = ' . $db->quote($item->title)) ->set($db->quoteName('description') . ' = ' . $db->quote($item->description)) ->set($db->quoteName('indexdate') . ' = ' . $query->currentTimestamp()) ->set($db->quoteName('state') . ' = ' . (int) $item->state) ->set($db->quoteName('access') . ' = ' . (int) $item->access) ->set($db->quoteName('language') . ' = ' . $db->quote($item->language)) ->set($db->quoteName('type_id') . ' = ' . (int) $item->type_id) ->set($db->quoteName('object') . ' = ' . $db->quote(serialize($item))) ->set($db->quoteName('publish_start_date') . ' = ' . $db->quote($item->publish_start_date)) ->set($db->quoteName('publish_end_date') . ' = ' . $db->quote($item->publish_end_date)) ->set($db->quoteName('start_date') . ' = ' . $db->quote($item->start_date)) ->set($db->quoteName('end_date') . ' = ' . $db->quote($item->end_date)) ->set($db->quoteName('list_price') . ' = ' . (double) ($item->list_price ?: 0)) ->set($db->quoteName('sale_price') . ' = ' . (double) ($item->sale_price ?: 0)) ->where('link_id = ' . (int) $linkId); $db->setQuery($query); $db->execute(); } // Set up the variables we will need during processing. $count = 0; // Mark afterLinking in the profiler. static::$profiler ? static::$profiler->mark('afterLinking') : null; // Truncate the tokens tables. $db->truncateTable('#__finder_tokens'); // Truncate the tokens aggregate table. $db->truncateTable('#__finder_tokens_aggregate'); /* * Process the item's content. The items can customize their * processing instructions to define extra properties to process * or rearrange how properties are weighted. */ foreach ($item->getInstructions() as $group => $properties) { // Iterate through the properties of the group. foreach ($properties as $property) { // Check if the property exists in the item. if (empty($item->$property)) { continue; } // Tokenize the property. if (is_array($item->$property)) { // Tokenize an array of content and add it to the database. foreach ($item->$property as $ip) { /* * If the group is path, we need to a few extra processing * steps to strip the extension and convert slashes and dashes * to spaces. */ if ($group === static::PATH_CONTEXT) { $ip = JFile::stripExt($ip); $ip = str_replace(array('/', '-'), ' ', $ip); } // Tokenize a string of content and add it to the database. $count += $this->tokenizeToDb($ip, $group, $item->language, $format); // Check if we're approaching the memory limit of the token table. if ($count > static::$state->options->get('memory_table_limit', 30000)) { $this->toggleTables(false); } } } else { /* * If the group is path, we need to a few extra processing * steps to strip the extension and convert slashes and dashes * to spaces. */ if ($group === static::PATH_CONTEXT) { $item->$property = JFile::stripExt($item->$property); $item->$property = str_replace('/', ' ', $item->$property); $item->$property = str_replace('-', ' ', $item->$property); } // Tokenize a string of content and add it to the database. $count += $this->tokenizeToDb($item->$property, $group, $item->language, $format); // Check if we're approaching the memory limit of the token table. if ($count > static::$state->options->get('memory_table_limit', 30000)) { $this->toggleTables(false); } } } } /* * Process the item's taxonomy. The items can customize their * taxonomy mappings to define extra properties to map. */ foreach ($item->getTaxonomy() as $branch => $nodes) { // Iterate through the nodes and map them to the branch. foreach ($nodes as $node) { // Add the node to the tree. $nodeId = FinderIndexerTaxonomy::addNode($branch, $node->title, $node->state, $node->access); // Add the link => node map. FinderIndexerTaxonomy::addMap($linkId, $nodeId); } } // Mark afterProcessing in the profiler. static::$profiler ? static::$profiler->mark('afterProcessing') : null; /* * At this point, all of the item's content has been parsed, tokenized * and inserted into the #__finder_tokens table. Now, we need to * aggregate all the data into that table into a more usable form. The * aggregated data will be inserted into #__finder_tokens_aggregate * table. */ $query = 'INSERT INTO ' . $db->quoteName('#__finder_tokens_aggregate') . ' (' . $db->quoteName('term_id') . ', ' . $db->quoteName('term') . ', ' . $db->quoteName('stem') . ', ' . $db->quoteName('common') . ', ' . $db->quoteName('phrase') . ', ' . $db->quoteName('term_weight') . ', ' . $db->quoteName('context') . ', ' . $db->quoteName('context_weight') . ', ' . $db->quoteName('language') . ')' . ' SELECT' . ' t.term_id, t1.term, t1.stem, t1.common, t1.phrase, t1.weight, t1.context,' . ' ROUND( t1.weight * COUNT( t2.term ) * %F, 8 ) AS context_weight, t1.language' . ' FROM (' . ' SELECT DISTINCT t1.term, t1.stem, t1.common, t1.phrase, t1.weight, t1.context, t1.language' . ' FROM ' . $db->quoteName('#__finder_tokens') . ' AS t1' . ' WHERE t1.context = %d' . ' ) AS t1' . ' JOIN ' . $db->quoteName('#__finder_tokens') . ' AS t2 ON t2.term = t1.term' . ' LEFT JOIN ' . $db->quoteName('#__finder_terms') . ' AS t ON t.term = t1.term' . ' WHERE t2.context = %d AND t.term_id IS NOT NULL' . ' GROUP BY t1.term, t.term_id, t1.term, t1.stem, t1.common, t1.phrase, t1.weight, t1.context, t1.language' . ' ORDER BY t1.term DESC'; // Iterate through the contexts and aggregate the tokens per context. foreach ($state->weights as $context => $multiplier) { // Run the query to aggregate the tokens for this context.. $db->setQuery(sprintf($query, $multiplier, $context, $context)); $db->execute(); } // Mark afterAggregating in the profiler. static::$profiler ? static::$profiler->mark('afterAggregating') : null; /* * When we pulled down all of the aggregate data, we did a LEFT JOIN * over the terms table to try to find all the term ids that * already exist for our tokens. If any of the rows in the aggregate * table have a term of 0, then no term record exists for that * term so we need to add it to the terms table. */ // Emulation of IGNORE INTO behaviour $db->setQuery( ' SELECT ta.term' . ' FROM ' . $db->quoteName('#__finder_tokens_aggregate') . ' AS ta' . ' WHERE ta.term_id = 0' ); if ($db->loadRow() === null) { $db->setQuery( 'INSERT INTO ' . $db->quoteName('#__finder_terms') . ' (' . $db->quoteName('term') . ', ' . $db->quoteName('stem') . ', ' . $db->quoteName('common') . ', ' . $db->quoteName('phrase') . ', ' . $db->quoteName('weight') . ', ' . $db->quoteName('soundex') . ', ' . $db->quoteName('language') . ')' . ' SELECT ta.term, ta.stem, ta.common, ta.phrase, ta.term_weight, SOUNDEX(ta.term), ta.language' . ' FROM ' . $db->quoteName('#__finder_tokens_aggregate') . ' AS ta' . ' WHERE ta.term_id = 0' . ' GROUP BY ta.term, ta.stem, ta.common, ta.phrase, ta.term_weight, SOUNDEX(ta.term), ta.language' ); $db->execute(); } /* * Now, we just inserted a bunch of new records into the terms table * so we need to go back and update the aggregate table with all the * new term ids. */ $query = $db->getQuery(true) ->update($db->quoteName('#__finder_tokens_aggregate') . ' AS ta') ->join('INNER', $db->quoteName('#__finder_terms') . ' AS t ON t.term = ta.term') ->set('term_id = t.term_id') ->where('ta.term_id = 0'); $db->setQuery($query); $db->execute(); // Mark afterTerms in the profiler. static::$profiler ? static::$profiler->mark('afterTerms') : null; /* * After we've made sure that all of the terms are in the terms table * and the aggregate table has the correct term ids, we need to update * the links counter for each term by one. */ $query->clear() ->update($db->quoteName('#__finder_terms') . ' AS t') ->join('INNER', $db->quoteName('#__finder_tokens_aggregate') . ' AS ta ON ta.term_id = t.term_id') ->set($db->quoteName('links') . ' = t.links + 1'); $db->setQuery($query); $db->execute(); // Mark afterTerms in the profiler. static::$profiler ? static::$profiler->mark('afterTerms') : null; /* * Before we can insert all of the mapping rows, we have to figure out * which mapping table the rows need to be inserted into. The mapping * table for each term is based on the first character of the md5 of * the first character of the term. In php, it would be expressed as * substr(md5(substr($token, 0, 1)), 0, 1) */ $query->clear() ->update($db->quoteName('#__finder_tokens_aggregate')) ->set($db->quoteName('map_suffix') . ' = SUBSTR(MD5(SUBSTR(' . $db->quoteName('term') . ', 1, 1)), 1, 1)'); $db->setQuery($query); $db->execute(); /* * At this point, the aggregate table contains a record for each * term in each context. So, we're going to pull down all of that * data while grouping the records by term and add all of the * sub-totals together to arrive at the final total for each token for * this link. Then, we insert all of that data into the appropriate * mapping table. */ for ($i = 0; $i <= 15; $i++) { // Get the mapping table suffix. $suffix = dechex($i); /* * We have to run this query 16 times, one for each link => term * mapping table. */ $db->setQuery( 'INSERT INTO ' . $db->quoteName('#__finder_links_terms' . $suffix) . ' (' . $db->quoteName('link_id') . ', ' . $db->quoteName('term_id') . ', ' . $db->quoteName('weight') . ')' . ' SELECT ' . (int) $linkId . ', ' . $db->quoteName('term_id') . ',' . ' ROUND(SUM(' . $db->quoteName('context_weight') . '), 8)' . ' FROM ' . $db->quoteName('#__finder_tokens_aggregate') . ' WHERE ' . $db->quoteName('map_suffix') . ' = ' . $db->quote($suffix) . ' GROUP BY ' . $db->quoteName('term') . ', ' . $db->quoteName('term_id') . ' ORDER BY ' . $db->quoteName('term') . ' DESC' ); $db->execute(); } // Mark afterMapping in the profiler. static::$profiler ? static::$profiler->mark('afterMapping') : null; // Update the signature. $query->clear() ->update($db->quoteName('#__finder_links')) ->set($db->quoteName('md5sum') . ' = ' . $db->quote($curSig)) ->where($db->quoteName('link_id') . ' = ' . $db->quote($linkId)); $db->setQuery($query); $db->execute(); // Mark afterSigning in the profiler. static::$profiler ? static::$profiler->mark('afterSigning') : null; // Truncate the tokens tables. $db->truncateTable('#__finder_tokens'); // Truncate the tokens aggregate table. $db->truncateTable('#__finder_tokens_aggregate'); // Toggle the token tables back to memory tables. $this->toggleTables(true); // Mark afterTruncating in the profiler. static::$profiler ? static::$profiler->mark('afterTruncating') : null; return $linkId; } /** * Method to optimize the index. We use this method to remove unused terms * and any other optimizations that might be necessary. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ public function optimize() { // Get the database object. $db = $this->db; $query = $db->getQuery(true); // Delete all orphaned terms. $query->delete($db->quoteName('#__finder_terms')) ->where($db->quoteName('links') . ' <= 0'); $db->setQuery($query); $db->execute(); // Optimize the links table. $db->setQuery('VACUUM ' . $db->quoteName('#__finder_links')); $db->execute(); $db->setQuery('REINDEX TABLE ' . $db->quoteName('#__finder_links')); $db->execute(); for ($i = 0; $i <= 15; $i++) { // Optimize the terms mapping table. $db->setQuery('VACUUM ' . $db->quoteName('#__finder_links_terms' . dechex($i))); $db->execute(); $db->setQuery('REINDEX TABLE ' . $db->quoteName('#__finder_links_terms' . dechex($i))); $db->execute(); } // Optimize the filters table. $db->setQuery('REINDEX TABLE ' . $db->quoteName('#__finder_filters')); $db->execute(); // Optimize the terms common table. $db->setQuery('REINDEX TABLE ' . $db->quoteName('#__finder_terms_common')); $db->execute(); // Optimize the types table. $db->setQuery('REINDEX TABLE ' . $db->quoteName('#__finder_types')); $db->execute(); // Remove the orphaned taxonomy nodes. FinderIndexerTaxonomy::removeOrphanNodes(); // Optimize the taxonomy mapping table. $db->setQuery('REINDEX TABLE ' . $db->quoteName('#__finder_taxonomy_map')); $db->execute(); // Optimize the taxonomy table. $db->setQuery('REINDEX TABLE ' . $db->quoteName('#__finder_taxonomy')); $db->execute(); return true; } } PKb��\d��j'j'2components/com_finder/helpers/indexer/taxonomy.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Stemmer base class for the Finder indexer package. * * @since 2.5 */ class FinderIndexerTaxonomy { /** * An internal cache of taxonomy branch data. * * @var array * @since 2.5 */ public static $branches = array(); /** * An internal cache of taxonomy node data. * * @var array * @since 2.5 */ public static $nodes = array(); /** * Method to add a branch to the taxonomy tree. * * @param string $title The title of the branch. * @param integer $state The published state of the branch. [optional] * @param integer $access The access state of the branch. [optional] * * @return integer The id of the branch. * * @since 2.5 * @throws Exception on database error. */ public static function addBranch($title, $state = 1, $access = 1) { // Check to see if the branch is in the cache. if (isset(static::$branches[$title])) { return static::$branches[$title]->id; } // Check to see if the branch is in the table. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('*') ->from($db->quoteName('#__finder_taxonomy')) ->where($db->quoteName('parent_id') . ' = 1') ->where($db->quoteName('title') . ' = ' . $db->quote($title)); $db->setQuery($query); // Get the result. $result = $db->loadObject(); // Check if the database matches the input data. if ((bool) $result && $result->state == $state && $result->access == $access) { // The data matches, add the item to the cache. static::$branches[$title] = $result; return static::$branches[$title]->id; } /* * The database did not match the input. This could be because the * state has changed or because the branch does not exist. Let's figure * out which case is true and deal with it. */ $branch = new JObject; if (empty($result)) { // Prepare the branch object. $branch->parent_id = 1; $branch->title = $title; $branch->state = (int) $state; $branch->access = (int) $access; } else { // Prepare the branch object. $branch->id = (int) $result->id; $branch->parent_id = (int) $result->parent_id; $branch->title = $result->title; $branch->state = (int) $result->title; $branch->access = (int) $result->access; $branch->ordering = (int) $result->ordering; } // Store the branch. static::storeNode($branch); // Add the branch to the cache. static::$branches[$title] = $branch; return static::$branches[$title]->id; } /** * Method to add a node to the taxonomy tree. * * @param string $branch The title of the branch to store the node in. * @param string $title The title of the node. * @param integer $state The published state of the node. [optional] * @param integer $access The access state of the node. [optional] * * @return integer The id of the node. * * @since 2.5 * @throws Exception on database error. */ public static function addNode($branch, $title, $state = 1, $access = 1) { // Check to see if the node is in the cache. if (isset(static::$nodes[$branch][$title])) { return static::$nodes[$branch][$title]->id; } // Get the branch id, insert it if it does not exist. $branchId = static::addBranch($branch); // Check to see if the node is in the table. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('*') ->from($db->quoteName('#__finder_taxonomy')) ->where($db->quoteName('parent_id') . ' = ' . $db->quote($branchId)) ->where($db->quoteName('title') . ' = ' . $db->quote($title)); $db->setQuery($query); // Get the result. $result = $db->loadObject(); // Check if the database matches the input data. if ((bool) $result && $result->state == $state && $result->access == $access) { // The data matches, add the item to the cache. static::$nodes[$branch][$title] = $result; return static::$nodes[$branch][$title]->id; } /* * The database did not match the input. This could be because the * state has changed or because the node does not exist. Let's figure * out which case is true and deal with it. */ $node = new JObject; if (empty($result)) { // Prepare the node object. $node->parent_id = (int) $branchId; $node->title = $title; $node->state = (int) $state; $node->access = (int) $access; } else { // Prepare the node object. $node->id = (int) $result->id; $node->parent_id = (int) $result->parent_id; $node->title = $result->title; $node->state = (int) $result->title; $node->access = (int) $result->access; $node->ordering = (int) $result->ordering; } // Store the node. static::storeNode($node); // Add the node to the cache. static::$nodes[$branch][$title] = $node; return static::$nodes[$branch][$title]->id; } /** * Method to add a map entry between a link and a taxonomy node. * * @param integer $linkId The link to map to. * @param integer $nodeId The node to map to. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ public static function addMap($linkId, $nodeId) { // Insert the map. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('link_id')) ->from($db->quoteName('#__finder_taxonomy_map')) ->where($db->quoteName('link_id') . ' = ' . (int) $linkId) ->where($db->quoteName('node_id') . ' = ' . (int) $nodeId); $db->setQuery($query); $db->execute(); $id = (int) $db->loadResult(); $map = new JObject; $map->link_id = (int) $linkId; $map->node_id = (int) $nodeId; if ($id) { $db->updateObject('#__finder_taxonomy_map', $map, array('link_id', 'node_id')); } else { $db->insertObject('#__finder_taxonomy_map', $map); } return true; } /** * Method to get the title of all taxonomy branches. * * @return array An array of branch titles. * * @since 2.5 * @throws Exception on database error. */ public static function getBranchTitles() { $db = JFactory::getDbo(); // Set user variables $groups = implode(',', JFactory::getUser()->getAuthorisedViewLevels()); // Create a query to get the taxonomy branch titles. $query = $db->getQuery(true) ->select($db->quoteName('title')) ->from($db->quoteName('#__finder_taxonomy')) ->where($db->quoteName('parent_id') . ' = 1') ->where($db->quoteName('state') . ' = 1') ->where($db->quoteName('access') . ' IN (' . $groups . ')'); // Get the branch titles. $db->setQuery($query); return $db->loadColumn(); } /** * Method to find a taxonomy node in a branch. * * @param string $branch The branch to search. * @param string $title The title of the node. * * @return mixed Integer id on success, null on no match. * * @since 2.5 * @throws Exception on database error. */ public static function getNodeByTitle($branch, $title) { $db = JFactory::getDbo(); // Set user variables $groups = implode(',', JFactory::getUser()->getAuthorisedViewLevels()); // Create a query to get the node. $query = $db->getQuery(true) ->select('t1.*') ->from($db->quoteName('#__finder_taxonomy') . ' AS t1') ->join('INNER', $db->quoteName('#__finder_taxonomy') . ' AS t2 ON t2.id = t1.parent_id') ->where('t1.access IN (' . $groups . ')') ->where('t1.state = 1') ->where('t1.title LIKE ' . $db->quote($db->escape($title) . '%')) ->where('t2.access IN (' . $groups . ')') ->where('t2.state = 1') ->where('t2.title = ' . $db->quote($branch)); // Get the node. $db->setQuery($query, 0, 1); return $db->loadObject(); } /** * Method to remove map entries for a link. * * @param integer $linkId The link to remove. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ public static function removeMaps($linkId) { // Delete the maps. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->delete($db->quoteName('#__finder_taxonomy_map')) ->where($db->quoteName('link_id') . ' = ' . (int) $linkId); $db->setQuery($query); $db->execute(); return true; } /** * Method to remove orphaned taxonomy nodes and branches. * * @return integer The number of deleted rows. * * @since 2.5 * @throws Exception on database error. */ public static function removeOrphanNodes() { // Delete all orphaned nodes. $db = JFactory::getDbo(); $query = $db->getQuery(true); $subquery = $db->getQuery(true); $subquery1 = $db->getQuery(true); $subquery1->select($db->quoteName('t.id')) ->from($db->quoteName('#__finder_taxonomy', 't')) ->join('LEFT', $db->quoteName('#__finder_taxonomy_map', 'm') . ' ON ' . $db->quoteName('m.node_id') . '=' . $db->quoteName('t.id')) ->where($db->quoteName('t.parent_id') . ' > 1 ') ->where($db->quoteName('m.link_id') . ' IS NULL'); $subquery->select($db->quoteName('id')) ->from('(' . $subquery1 . ') temp'); $query->delete($db->quoteName('#__finder_taxonomy')) ->where($db->quoteName('id') . ' IN (' . $subquery . ')'); $db->setQuery($query); $db->execute(); return $db->getAffectedRows(); } /** * Method to store a node to the database. This method will accept either a branch or a node. * * @param object $item The item to store. * * @return boolean True on success. * * @since 2.5 * @throws Exception on database error. */ protected static function storeNode($item) { $db = JFactory::getDbo(); // Check if we are updating or inserting the item. if (empty($item->id)) { // Insert the item. $db->insertObject('#__finder_taxonomy', $item, 'id'); } else { // Update the item. $db->updateObject('#__finder_taxonomy', $item, 'id'); } return true; } } PKb��\�=�/components/com_finder/helpers/indexer/token.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\String\StringHelper; /** * Token class for the Finder indexer package. * * @since 2.5 */ class FinderIndexerToken { /** * This is the term that will be referenced in the terms table and the * mapping tables. * * @var string * @since 2.5 */ public $term; /** * The stem is used to match the root term and produce more potential * matches when searching the index. * * @var string * @since 2.5 */ public $stem; /** * If the token is numeric, it is likely to be short and uncommon so the * weight is adjusted to compensate for that situation. * * @var boolean * @since 2.5 */ public $numeric; /** * If the token is a common term, the weight is adjusted to compensate for * the higher frequency of the term in relation to other terms. * * @var boolean * @since 2.5 */ public $common; /** * Flag for phrase tokens. * * @var boolean * @since 2.5 */ public $phrase; /** * The length is used to calculate the weight of the token. * * @var integer * @since 2.5 */ public $length; /** * The weight is calculated based on token size and whether the token is * considered a common term. * * @var integer * @since 2.5 */ public $weight; /** * The simple language identifier for the token. * * @var string * @since 2.5 */ public $language; /** * The container for matches. * * @var array * @since 3.8.12 */ public $matches = array(); /** * Is derived token (from individual words) * * @var boolean * @since 3.8.12 */ public $derived; /** * The suggested term * * @var string * @since 3.8.12 */ public $suggestion; /** * Method to construct the token object. * * @param mixed $term The term as a string for words or an array for phrases. * @param string $lang The simple language identifier. * @param string $spacer The space separator for phrases. [optional] * * @since 2.5 */ public function __construct($term, $lang, $spacer = ' ') { $this->language = $lang; // Tokens can be a single word or an array of words representing a phrase. if (is_array($term)) { // Populate the token instance. $this->term = implode($spacer, $term); $this->stem = implode($spacer, array_map(array('FinderIndexerHelper', 'stem'), $term, array($lang))); $this->numeric = false; $this->common = false; $this->phrase = true; $this->length = StringHelper::strlen($this->term); /* * Calculate the weight of the token. * * 1. Length of the token up to 30 and divide by 30, add 1. * 2. Round weight to 4 decimal points. */ $this->weight = (($this->length >= 30 ? 30 : $this->length) / 30) + 1; $this->weight = round($this->weight, 4); } else { // Populate the token instance. $this->term = $term; $this->stem = FinderIndexerHelper::stem($this->term, $lang); $this->numeric = (is_numeric($this->term) || (bool) preg_match('#^[0-9,.\-\+]+$#', $this->term)); $this->common = $this->numeric ? false : FinderIndexerHelper::isCommon($this->term, $lang); $this->phrase = false; $this->length = StringHelper::strlen($this->term); /* * Calculate the weight of the token. * * 1. Length of the token up to 15 and divide by 15. * 2. If common term, divide weight by 8. * 3. If numeric, multiply weight by 1.5. * 4. Round weight to 4 decimal points. */ $this->weight = ($this->length >= 15 ? 15 : $this->length) / 15; $this->weight = $this->common === true ? $this->weight / 8 : $this->weight; $this->weight = $this->numeric === true ? $this->weight * 1.5 : $this->weight; $this->weight = round($this->weight, 4); } } } PKb��\& g""0components/com_finder/helpers/indexer/result.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('FinderIndexer', __DIR__ . '/indexer.php'); /** * Result class for the Finder indexer package. * * This class uses magic __get() and __set() methods to prevent properties * being added that might confuse the system. All properties not explicitly * declared will be pushed into the elements array and can be accessed * explicitly using the getElement() method. * * @since 2.5 */ class FinderIndexerResult { /** * An array of extra result properties. * * @var array * @since 2.5 */ protected $elements = array(); /** * This array tells the indexer which properties should be indexed and what * weights to use for those properties. * * @var array * @since 2.5 */ protected $instructions = array( FinderIndexer::TITLE_CONTEXT => array('title', 'subtitle', 'id'), FinderIndexer::TEXT_CONTEXT => array('summary', 'body'), FinderIndexer::META_CONTEXT => array('meta', 'list_price', 'sale_price'), FinderIndexer::PATH_CONTEXT => array('path', 'alias'), FinderIndexer::MISC_CONTEXT => array('comments'), ); /** * The indexer will use this data to create taxonomy mapping entries for * the item so that it can be filtered by type, label, category, * or whatever. * * @var array * @since 2.5 */ protected $taxonomy = array(); /** * The content URL. * * @var string * @since 2.5 */ public $url; /** * The content route. * * @var string * @since 2.5 */ public $route; /** * The content title. * * @var string * @since 2.5 */ public $title; /** * The content description. * * @var string * @since 2.5 */ public $description; /** * The published state of the result. * * @var integer * @since 2.5 */ public $published; /** * The content published state. * * @var integer * @since 2.5 */ public $state; /** * The content access level. * * @var integer * @since 2.5 */ public $access; /** * The content language. * * @var string * @since 2.5 */ public $language = '*'; /** * The publishing start date. * * @var string * @since 2.5 */ public $publish_start_date; /** * The publishing end date. * * @var string * @since 2.5 */ public $publish_end_date; /** * The generic start date. * * @var string * @since 2.5 */ public $start_date; /** * The generic end date. * * @var string * @since 2.5 */ public $end_date; /** * The item list price. * * @var mixed * @since 2.5 */ public $list_price; /** * The item sale price. * * @var mixed * @since 2.5 */ public $sale_price; /** * The content type id. This is set by the adapter. * * @var integer * @since 2.5 */ public $type_id; /** * The default language for content. * * @var string * @since 3.0.2 */ public $defaultLanguage; /** * Constructor * * @since 3.0.3 */ public function __construct() { $this->defaultLanguage = JComponentHelper::getParams('com_languages')->get('site', 'en-GB'); } /** * The magic set method is used to push additional values into the elements * array in order to preserve the cleanliness of the object. * * @param string $name The name of the element. * @param mixed $value The value of the element. * * @return void * * @since 2.5 */ public function __set($name, $value) { $this->setElement($name, $value); } /** * The magic get method is used to retrieve additional element values from the elements array. * * @param string $name The name of the element. * * @return mixed The value of the element if set, null otherwise. * * @since 2.5 */ public function __get($name) { return $this->getElement($name); } /** * The magic isset method is used to check the state of additional element values in the elements array. * * @param string $name The name of the element. * * @return boolean True if set, false otherwise. * * @since 2.5 */ public function __isset($name) { return isset($this->elements[$name]); } /** * The magic unset method is used to unset additional element values in the elements array. * * @param string $name The name of the element. * * @return void * * @since 2.5 */ public function __unset($name) { unset($this->elements[$name]); } /** * Method to retrieve additional element values from the elements array. * * @param string $name The name of the element. * * @return mixed The value of the element if set, null otherwise. * * @since 2.5 */ public function getElement($name) { // Get the element value if set. if (array_key_exists($name, $this->elements)) { return $this->elements[$name]; } return null; } /** * Method to retrieve all elements. * * @return array The elements * * @since 3.8.3 */ public function getElements() { return $this->elements; } /** * Method to set additional element values in the elements array. * * @param string $name The name of the element. * @param mixed $value The value of the element. * * @return void * * @since 2.5 */ public function setElement($name, $value) { $this->elements[$name] = $value; } /** * Method to get all processing instructions. * * @return array An array of processing instructions. * * @since 2.5 */ public function getInstructions() { return $this->instructions; } /** * Method to add a processing instruction for an item property. * * @param string $group The group to associate the property with. * @param string $property The property to process. * * @return void * * @since 2.5 */ public function addInstruction($group, $property) { // Check if the group exists. We can't add instructions for unknown groups. // Check if the property exists in the group. if (array_key_exists($group, $this->instructions) && !in_array($property, $this->instructions[$group], true)) { // Add the property to the group. $this->instructions[$group][] = $property; } } /** * Method to remove a processing instruction for an item property. * * @param string $group The group to associate the property with. * @param string $property The property to process. * * @return void * * @since 2.5 */ public function removeInstruction($group, $property) { // Check if the group exists. We can't remove instructions for unknown groups. if (array_key_exists($group, $this->instructions)) { // Search for the property in the group. $key = array_search($property, $this->instructions[$group]); // If the property was found, remove it. if ($key !== false) { unset($this->instructions[$group][$key]); } } } /** * Method to get the taxonomy maps for an item. * * @param string $branch The taxonomy branch to get. [optional] * * @return array An array of taxonomy maps. * * @since 2.5 */ public function getTaxonomy($branch = null) { // Get the taxonomy branch if available. if ($branch !== null && isset($this->taxonomy[$branch])) { // Filter the input. $branch = preg_replace('#[^\pL\pM\pN\p{Pi}\p{Pf}\'+-.,_]+#mui', ' ', $branch); return $this->taxonomy[$branch]; } return $this->taxonomy; } /** * Method to add a taxonomy map for an item. * * @param string $branch The title of the taxonomy branch to add the node to. * @param string $title The title of the taxonomy node. * @param integer $state The published state of the taxonomy node. [optional] * @param integer $access The access level of the taxonomy node. [optional] * * @return void * * @since 2.5 */ public function addTaxonomy($branch, $title, $state = 1, $access = 1) { // Filter the input. $branch = preg_replace('#[^\pL\pM\pN\p{Pi}\p{Pf}\'+-.,_]+#mui', ' ', $branch); // Create the taxonomy node. $node = new JObject; $node->title = $title; $node->state = (int) $state; $node->access = (int) $access; // Add the node to the taxonomy branch. $this->taxonomy[$branch][$node->title] = $node; } /** * Method to set the item language * * @return void * * @since 3.0 */ public function setLanguage() { if ($this->language == '') { $this->language = $this->defaultLanguage; } } } PKb��\8WDZ��3components/com_finder/models/fields/directories.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Load the base adapter. JLoader::register('FinderIndexerAdapter', JPATH_ADMINISTRATOR . '/components/com_finder/helpers/indexer/adapter.php'); JFormHelper::loadFieldClass('list'); /** * Renders a list of directories. * * @since 2.5 * @deprecated 4.0 Use JFormFieldFolderlist */ class JFormFieldDirectories extends JFormFieldList { /** * The form field type. * * @var string * @since 2.5 */ protected $type = 'Directories'; /** * Method to get the field options. * * @return array The field option objects. * * @since 2.5 */ public function getOptions() { $values = array(); $options = array(); $exclude = array( JPATH_ADMINISTRATOR, JPATH_INSTALLATION, JPATH_LIBRARIES, JPATH_PLUGINS, JPATH_SITE . '/cache', JPATH_SITE . '/components', JPATH_SITE . '/includes', JPATH_SITE . '/language', JPATH_SITE . '/modules', JPATH_THEMES, JFactory::getApplication()->get('log_path'), JFactory::getApplication()->get('tmp_path') ); // Get the base directories. jimport('joomla.filesystem.folder'); $dirs = JFolder::folders(JPATH_SITE, '.', false, true); // Iterate through the base directories and find the subdirectories. foreach ($dirs as $dir) { // Check if the directory should be excluded. if (in_array($dir, $exclude)) { continue; } // Get the child directories. $return = JFolder::folders($dir, '.', true, true); // Merge the directories. if (is_array($return)) { $values[] = $dir; $values = array_merge($values, $return); } } // Convert the values to options. foreach ($values as $value) { $options[] = JHtml::_('select.option', str_replace(JPATH_SITE . '/', '', $value), str_replace(JPATH_SITE . '/', '', $values)); } // Add a null option. array_unshift($options, JHtml::_('select.option', '', '- ' . JText::_('JNONE') . ' -')); return $options; } } PKb��\4�@��4components/com_finder/models/fields/searchfilter.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die(); JFormHelper::loadFieldClass('list'); /** * Search Filter field for the Finder package. * * @since 2.5 */ class JFormFieldSearchFilter extends JFormFieldList { /** * The form field type. * * @var string * @since 2.5 */ protected $type = 'SearchFilter'; /** * Method to get the field options. * * @return array The field option objects. * * @since 2.5 */ public function getOptions() { // Build the query. $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('f.title AS text, f.filter_id AS value') ->from($db->quoteName('#__finder_filters') . ' AS f') ->where('f.state = 1') ->order('f.title ASC'); $db->setQuery($query); $options = $db->loadObjectList(); array_unshift($options, JHtml::_('select.option', '', JText::_('COM_FINDER_SELECT_SEARCH_FILTER'), 'value', 'text')); return $options; } } PKb��\?�=�jj-components/com_finder/models/forms/filter.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="filter_id" type="text" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" class="readonly" size="10" default="0" readonly="true" /> <field name="title" type="text" label="JGLOBAL_TITLE" description="COM_FINDER_FILTER_TITLE_DESCRIPTION" class="input-xxlarge input-large-text" size="40" id="title" required="true" /> <field name="alias" type="text" label="JFIELD_ALIAS_LABEL" description="JFIELD_ALIAS_DESC" hint="JFIELD_ALIAS_PLACEHOLDER" size="45" /> <field name="created" type="calendar" label="JGLOBAL_FIELD_CREATED_LABEL" description="JGLOBAL_FIELD_CREATED_DESC" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="modified" type="calendar" label="JGLOBAL_FIELD_MODIFIED_LABEL" description="COM_FINDER_FIELD_MODIFIED_DESCRIPTION" class="readonly" translateformat="true" showtime="true" size="22" readonly="true" filter="user_utc" /> <field name="created_by" type="user" label="COM_FINDER_FIELD_CREATED_BY_LABEL" description="COM_FINDER_FIELD_CREATED_BY_DESC" /> <field name="created_by_alias" type="text" label="COM_FINDER_FIELD_CREATED_BY_ALIAS_LABEL" description="COM_FINDER_FIELD_CREATED_BY_ALIAS_DESC" size="20" /> <field name="modified_by" type="user" label="JGLOBAL_FIELD_MODIFIED_BY_LABEL" class="readonly" readonly="true" filter="unset" /> <field name="checked_out" type="hidden" filter="unset" /> <field name="checked_out_time" type="hidden" filter="unset" /> <field name="state" type="list" label="JSTATUS" description="JFIELD_PUBLISHED_DESC" class="chzn-color-state" filter="intval" size="1" default="1" > <option value="1">JPUBLISHED</option> <option value="0">JUNPUBLISHED</option> </field> <field name="map_count" type="text" label="COM_FINDER_FILTER_MAP_COUNT" description="COM_FINDER_FILTER_MAP_COUNT_DESCRIPTION" class="readonly" size="10" default="0" readonly="true" /> </fieldset> <fields name="params"> <fieldset name="jbasic" label="COM_FINDER_FILTER_FIELDSET_PARAMS"> <field name="w1" type="list" label="COM_FINDER_FILTER_WHEN_START_DATE_LABEL" description="COM_FINDER_FILTER_WHEN_START_DATE_DESCRIPTION" default="" filter="string" > <option value="">JNONE</option> <option value="-1">COM_FINDER_FILTER_WHEN_BEFORE</option> <option value="0">COM_FINDER_FILTER_WHEN_EXACTLY</option> <option value="1">COM_FINDER_FILTER_WHEN_AFTER</option> </field> <field name="d1" type="calendar" label="COM_FINDER_FILTER_START_DATE_LABEL" description="COM_FINDER_FILTER_START_DATE_DESCRIPTION" translateformat="true" size="22" filter="user_utc" /> <field name="w2" type="list" label="COM_FINDER_FILTER_WHEN_END_DATE_LABEL" description="COM_FINDER_FILTER_WHEN_END_DATE_DESCRIPTION" default="" filter="string" > <option value="">JNONE</option> <option value="-1">COM_FINDER_FILTER_WHEN_BEFORE</option> <option value="0">COM_FINDER_FILTER_WHEN_EXACTLY</option> <option value="1">COM_FINDER_FILTER_WHEN_AFTER</option> </field> <field name="d2" type="calendar" label="COM_FINDER_FILTER_END_DATE_LABEL" description="COM_FINDER_FILTER_END_DATE_DESCRIPTION" translateformat="true" size="22" filter="user_utc" /> </fieldset> </fields> </form> PKb��\�dH��(components/com_finder/models/indexer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Indexer model class for Finder. * * @since 2.5 */ class FinderModelIndexer extends JModelLegacy { } PKb��\��)�**%components/com_finder/models/maps.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die(); /** * Maps model for the Finder package. * * @since 2.5 */ class FinderModelMaps extends JModelList { /** * Constructor. * * @param array $config An associative array of configuration settings. [optional] * * @since 2.5 * @see JControllerLegacy */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'state', 'a.state', 'title', 'a.title', 'branch', 'branch_title', 'd.branch_title', 'level', 'd.level', ); } parent::__construct($config); } /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to delete the record. Defaults to the permission for the component. * * @since 2.5 */ protected function canDelete($record) { return JFactory::getUser()->authorise('core.delete', $this->option); } /** * Method to test whether a record can have its state changed. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission for the component. * * @since 2.5 */ protected function canEditState($record) { return JFactory::getUser()->authorise('core.edit.state', $this->option); } /** * Method to delete one or more records. * * @param array $pks An array of record primary keys. * * @return boolean True if successful, false if an error occurs. * * @since 2.5 */ public function delete(&$pks) { $dispatcher = JEventDispatcher::getInstance(); $pks = (array) $pks; $table = $this->getTable(); // Include the content plugins for the on delete events. JPluginHelper::importPlugin('content'); // Iterate the items to delete each one. foreach ($pks as $i => $pk) { if ($table->load($pk)) { if ($this->canDelete($table)) { $context = $this->option . '.' . $this->name; // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger('onContentBeforeDelete', array($context, $table)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } if (!$table->delete($pk)) { $this->setError($table->getError()); return false; } // Trigger the onContentAfterDelete event. $dispatcher->trigger('onContentAfterDelete', array($context, $table)); } else { // Prune items that you can't change. unset($pks[$i]); $error = $this->getError(); if ($error) { $this->setError($error); } else { $this->setError(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED')); } } } else { $this->setError($table->getError()); return false; } } // Clear the component's cache $this->cleanCache(); return true; } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery A JDatabaseQuery object * * @since 2.5 */ protected function getListQuery() { $db = $this->getDbo(); // Select all fields from the table. $query = $db->getQuery(true) ->select('a.id, a.parent_id, a.title, a.state, a.access, a.ordering') ->select('CASE WHEN a.parent_id = 1 THEN 1 ELSE 2 END AS level') ->select('p.title AS parent_title') ->from($db->quoteName('#__finder_taxonomy', 'a')) ->leftJoin($db->quoteName('#__finder_taxonomy', 'p') . ' ON p.id = a.parent_id') ->where('a.parent_id != 0'); $childQuery = $db->getQuery(true) ->select('parent_id') ->select('COUNT(*) AS num_children') ->from($db->quoteName('#__finder_taxonomy')) ->where('parent_id != 0') ->group('parent_id'); // Join to get children. $query->select('b.num_children'); $query->select('CASE WHEN a.parent_id = 1 THEN a.title ELSE p.title END AS branch_title'); $query->leftJoin('(' . $childQuery . ') AS b ON b.parent_id = a.id'); // Join to get the map links. $stateQuery = $db->getQuery(true) ->select('m.node_id') ->select('COUNT(NULLIF(l.published, 0)) AS count_published') ->select('COUNT(NULLIF(l.published, 1)) AS count_unpublished') ->from($db->quoteName('#__finder_taxonomy_map', 'm')) ->leftJoin($db->quoteName('#__finder_links', 'l') . ' ON l.link_id = m.link_id') ->group('m.node_id'); $query->select('COALESCE(s.count_published, 0) AS count_published'); $query->select('COALESCE(s.count_unpublished, 0) AS count_unpublished'); $query->leftJoin('(' . $stateQuery . ') AS s ON s.node_id = a.id'); // If the model is set to check item state, add to the query. $state = $this->getState('filter.state'); if (is_numeric($state)) { $query->where('a.state = ' . (int) $state); } // Filter over level. $level = $this->getState('filter.level'); if (is_numeric($level) && (int) $level === 1) { $query->where('a.parent_id = 1'); } // Filter the maps over the branch if set. $branchId = $this->getState('filter.branch'); if (is_numeric($branchId)) { $query->where('a.parent_id = ' . (int) $branchId); } // Filter the maps over the search string if set. if ($search = $this->getState('filter.search')) { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where('a.title LIKE ' . $search); } // Handle the list ordering. $listOrdering = $this->getState('list.ordering', 'd.branch_title'); $listDirn = $this->getState('list.direction', 'ASC'); if ($listOrdering === 'd.branch_title') { $query->order("branch_title $listDirn, level ASC, a.title $listDirn"); } elseif ($listOrdering === 'a.state') { $query->order("a.state $listDirn, branch_title $listDirn, level ASC"); } return $query; } /** * Returns a record count for the query. * * @param JDatabaseQuery|string $query The query. * * @return integer Number of rows for query. * * @since 3.0 */ protected function _getListCount($query) { $query = clone $query; $query->clear('select')->clear('join')->clear('order')->clear('limit')->clear('offset')->select('COUNT(*)'); return (int) $this->getDbo()->setQuery($query)->loadResult(); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. [optional] * * @return string A store id. * * @since 2.5 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.state'); $id .= ':' . $this->getState('filter.branch'); $id .= ':' . $this->getState('filter.level'); return parent::getStoreId($id); } /** * Returns a JTable object, always creating it. * * @param string $type The table type to instantiate. [optional] * @param string $prefix A prefix for the table class name. [optional] * @param array $config Configuration array for model. [optional] * * @return JTable A database object * * @since 2.5 */ public function getTable($type = 'Map', $prefix = 'FinderTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to auto-populate the model state. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. [optional] * @param string $direction An optional direction. [optional] * * @return void * * @since 2.5 */ protected function populateState($ordering = 'd.branch_title', $direction = 'ASC') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.state', $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'cmd')); $this->setState('filter.branch', $this->getUserStateFromRequest($this->context . '.filter.branch', 'filter_branch', '', 'cmd')); $this->setState('filter.level', $this->getUserStateFromRequest($this->context . '.filter.level', 'filter_level', '', 'cmd')); // Load the parameters. $params = JComponentHelper::getParams('com_finder'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to change the published state of one or more records. * * @param array $pks A list of the primary keys to change. * @param integer $value The value of the published state. [optional] * * @return boolean True on success. * * @since 2.5 */ public function publish(&$pks, $value = 1) { $dispatcher = JEventDispatcher::getInstance(); $user = JFactory::getUser(); $table = $this->getTable(); $pks = (array) $pks; // Include the content plugins for the change of state event. JPluginHelper::importPlugin('content'); // Access checks. foreach ($pks as $i => $pk) { $table->reset(); if ($table->load($pk) && !$this->canEditState($table)) { // Prune items that you can't change. unset($pks[$i]); $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); return false; } } // Attempt to change the state of the records. if (!$table->publish($pks, $value, $user->get('id'))) { $this->setError($table->getError()); return false; } $context = $this->option . '.' . $this->name; // Trigger the onContentChangeState event. $result = $dispatcher->trigger('onContentChangeState', array($context, $pks, $value)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Clear the component's cache $this->cleanCache(); return true; } /** * Method to purge all maps from the taxonomy. * * @return boolean Returns true on success, false on failure. * * @since 2.5 */ public function purge() { $db = $this->getDbo(); $query = $db->getQuery(true) ->delete($db->quoteName('#__finder_taxonomy')) ->where($db->quoteName('parent_id') . ' > 1'); $db->setQuery($query); $db->execute(); $query->clear() ->delete($db->quoteName('#__finder_taxonomy_map')); $db->setQuery($query); $db->execute(); return true; } } PKb��\�*VV+components/com_finder/models/statistics.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Statistics model class for Finder. * * @since 2.5 */ class FinderModelStatistics extends JModelLegacy { /** * Method to get the component statistics * * @return JObject The component statistics * * @since 2.5 */ public function getData() { // Initialise $db = $this->getDbo(); $query = $db->getQuery(true); $data = new JObject; $query->select('COUNT(term_id)') ->from($db->quoteName('#__finder_terms')); $db->setQuery($query); $data->term_count = $db->loadResult(); $query->clear() ->select('COUNT(link_id)') ->from($db->quoteName('#__finder_links')); $db->setQuery($query); $data->link_count = $db->loadResult(); $query->clear() ->select('COUNT(id)') ->from($db->quoteName('#__finder_taxonomy')) ->where($db->quoteName('parent_id') . ' = 1'); $db->setQuery($query); $data->taxonomy_branch_count = $db->loadResult(); $query->clear() ->select('COUNT(id)') ->from($db->quoteName('#__finder_taxonomy')) ->where($db->quoteName('parent_id') . ' > 1'); $db->setQuery($query); $data->taxonomy_node_count = $db->loadResult(); $query->clear() ->select('t.title AS type_title, COUNT(a.link_id) AS link_count') ->from($db->quoteName('#__finder_links') . ' AS a') ->join('INNER', $db->quoteName('#__finder_types') . ' AS t ON t.id = a.type_id') ->group('a.type_id, t.title') ->order($db->quoteName('type_title') . ' ASC'); $db->setQuery($query); $data->type_list = $db->loadObjectList(); $lang = JFactory::getLanguage(); $plugins = JPluginHelper::getPlugin('finder'); foreach ($plugins as $plugin) { $lang->load('plg_finder_' . $plugin->name . '.sys', JPATH_ADMINISTRATOR, null, false, true) || $lang->load('plg_finder_' . $plugin->name . '.sys', JPATH_PLUGINS . '/finder/' . $plugin->name, null, false, true); } return $data; } } PKb��\�|6ܻ-�-&components/com_finder/models/index.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Index model class for Finder. * * @since 2.5 */ class FinderModelIndex extends JModelList { /** * The event to trigger after deleting the data. * * @var string * @since 2.5 */ protected $event_after_delete = 'onContentAfterDelete'; /** * The event to trigger before deleting the data. * * @var string * @since 2.5 */ protected $event_before_delete = 'onContentBeforeDelete'; /** * Constructor. * * @param array $config An associative array of configuration settings. [optional] * * @since 2.5 * @see JControllerLegacy */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'state', 'published', 'l.published', 'title', 'l.title', 'type', 'type_id', 'l.type_id', 't.title', 't_title', 'url', 'l.url', 'indexdate', 'l.indexdate', 'content_map', ); } parent::__construct($config); } /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to delete the record. Defaults to the permission for the component. * * @since 2.5 */ protected function canDelete($record) { return JFactory::getUser()->authorise('core.delete', $this->option); } /** * Method to test whether a record can have its state changed. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission for the component. * * @since 2.5 */ protected function canEditState($record) { return JFactory::getUser()->authorise('core.edit.state', $this->option); } /** * Method to delete one or more records. * * @param array $pks An array of record primary keys. * * @return boolean True if successful, false if an error occurs. * * @since 2.5 */ public function delete(&$pks) { $dispatcher = JEventDispatcher::getInstance(); $pks = (array) $pks; $table = $this->getTable(); // Include the content plugins for the on delete events. JPluginHelper::importPlugin('content'); // Iterate the items to delete each one. foreach ($pks as $i => $pk) { if ($table->load($pk)) { if ($this->canDelete($table)) { $context = $this->option . '.' . $this->name; // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger($this->event_before_delete, array($context, $table)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } if (!$table->delete($pk)) { $this->setError($table->getError()); return false; } // Trigger the onContentAfterDelete event. $dispatcher->trigger($this->event_after_delete, array($context, $table)); } else { // Prune items that you can't change. unset($pks[$i]); $error = $this->getError(); if ($error) { $this->setError($error); } else { $this->setError(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED')); } } } else { $this->setError($table->getError()); return false; } } // Clear the component's cache $this->cleanCache(); return true; } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery A JDatabaseQuery object * * @since 2.5 */ protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true) ->select('l.*') ->select($db->quoteName('t.title', 't_title')) ->from($db->quoteName('#__finder_links', 'l')) ->join('INNER', $db->quoteName('#__finder_types', 't') . ' ON ' . $db->quoteName('t.id') . ' = ' . $db->quoteName('l.type_id')); // Check the type filter. $type = $this->getState('filter.type'); if (is_numeric($type)) { $query->where($db->quoteName('l.type_id') . ' = ' . (int) $type); } // Check the map filter. $contentMapId = $this->getState('filter.content_map'); if (is_numeric($contentMapId)) { $query->join('INNER', $db->quoteName('#__finder_taxonomy_map', 'm') . ' ON ' . $db->quoteName('m.link_id') . ' = ' . $db->quoteName('l.link_id')) ->where($db->quoteName('m.node_id') . ' = ' . (int) $contentMapId); } // Check for state filter. $state = $this->getState('filter.state'); if (is_numeric($state)) { $query->where($db->quoteName('l.published') . ' = ' . (int) $state); } // Check the search phrase. $search = $this->getState('filter.search'); if (!empty($search)) { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $orSearchSql = $db->quoteName('l.title') . ' LIKE ' . $search . ' OR ' . $db->quoteName('l.url') . ' LIKE ' . $search; // Filter by indexdate only if $search doesn't contains non-ascii characters if (!preg_match('/[^\x00-\x7F]/', $search)) { $orSearchSql .= ' OR ' . $query->castAsChar($db->quoteName('l.indexdate')) . ' LIKE ' . $search; } $query->where('(' . $orSearchSql . ')'); } // Handle the list ordering. $listOrder = $this->getState('list.ordering', 'l.title'); $listDir = $this->getState('list.direction', 'ASC'); if ($listOrder === 't.title') { $ordering = $db->quoteName('t.title') . ' ' . $db->escape($listDir) . ', ' . $db->quoteName('l.title') . ' ' . $db->escape($listDir); } else { $ordering = $db->escape($listOrder) . ' ' . $db->escape($listDir); } $query->order($ordering); return $query; } /** * Method to get the state of the Smart Search Plugins. * * @return array Array of relevant plugins and whether they are enabled or not. * * @since 2.5 */ public function getPluginState() { $db = $this->getDbo(); $query = $db->getQuery(true) ->select('name, enabled') ->from($db->quoteName('#__extensions')) ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) ->where($db->quoteName('folder') . ' IN (' . $db->quote('system') . ',' . $db->quote('content') . ')') ->where($db->quoteName('element') . ' = ' . $db->quote('finder')); $db->setQuery($query); return $db->loadObjectList('name'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. [optional] * * @return string A store id. * * @since 2.5 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.state'); $id .= ':' . $this->getState('filter.type'); $id .= ':' . $this->getState('filter.content_map'); return parent::getStoreId($id); } /** * Gets the total of indexed items. * * @return integer The total of indexed items. * * @since 3.6.0 */ public function getTotalIndexed() { $db = $this->getDbo(); $query = $db->getQuery(true) ->select('COUNT(link_id)') ->from($db->quoteName('#__finder_links')); $db->setQuery($query); $db->execute(); return (int) $db->loadResult(); } /** * Returns a JTable object, always creating it. * * @param string $type The table type to instantiate. [optional] * @param string $prefix A prefix for the table class name. [optional] * @param array $config Configuration array for model. [optional] * * @return JTable A database object * * @since 2.5 */ public function getTable($type = 'Link', $prefix = 'FinderTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to purge the index, deleting all links. * * @return boolean True on success, false on failure. * * @since 2.5 * @throws Exception on database error */ public function purge() { $db = $this->getDbo(); // Truncate the links table. $db->truncateTable('#__finder_links'); // Truncate the links terms tables. for ($i = 0; $i <= 15; $i++) { // Get the mapping table suffix. $suffix = dechex($i); $db->truncateTable('#__finder_links_terms' . $suffix); } // Truncate the terms table. $db->truncateTable('#__finder_terms'); // Truncate the taxonomy map table. $db->truncateTable('#__finder_taxonomy_map'); // Delete all the taxonomy nodes except the root. $query = $db->getQuery(true) ->delete($db->quoteName('#__finder_taxonomy')) ->where($db->quoteName('id') . ' > 1'); $db->setQuery($query); $db->execute(); // Truncate the tokens tables. $db->truncateTable('#__finder_tokens'); // Truncate the tokens aggregate table. $db->truncateTable('#__finder_tokens_aggregate'); return true; } /** * Method to auto-populate the model state. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. [optional] * @param string $direction An optional direction. [optional] * * @return void * * @since 2.5 */ protected function populateState($ordering = 'l.title', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.state', $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'cmd')); $this->setState('filter.type', $this->getUserStateFromRequest($this->context . '.filter.type', 'filter_type', '', 'cmd')); $this->setState('filter.content_map', $this->getUserStateFromRequest($this->context . '.filter.content_map', 'filter_content_map', '', 'cmd')); // Load the parameters. $params = JComponentHelper::getParams('com_finder'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to change the published state of one or more records. * * @param array $pks A list of the primary keys to change. * @param integer $value The value of the published state. [optional] * * @return boolean True on success. * * @since 2.5 */ public function publish(&$pks, $value = 1) { $dispatcher = JEventDispatcher::getInstance(); $user = JFactory::getUser(); $table = $this->getTable(); $pks = (array) $pks; // Include the content plugins for the change of state event. JPluginHelper::importPlugin('content'); // Access checks. foreach ($pks as $i => $pk) { $table->reset(); if ($table->load($pk) && !$this->canEditState($table)) { // Prune items that you can't change. unset($pks[$i]); $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); return false; } } // Attempt to change the state of the records. if (!$table->publish($pks, $value, $user->get('id'))) { $this->setError($table->getError()); return false; } $context = $this->option . '.' . $this->name; // Trigger the onContentChangeState event. $result = $dispatcher->trigger('onContentChangeState', array($context, $pks, $value)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Clear the component's cache $this->cleanCache(); return true; } } PKb��\�!�`(components/com_finder/models/filters.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Filters model class for Finder. * * @since 2.5 */ class FinderModelFilters extends JModelList { /** * Constructor. * * @param array $config An associative array of configuration settings. [optional] * * @since 2.5 * @see JControllerLegacy */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'filter_id', 'a.filter_id', 'title', 'a.title', 'state', 'a.state', 'created_by_alias', 'a.created_by_alias', 'created', 'a.created', 'map_count', 'a.map_count' ); } parent::__construct($config); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery A JDatabaseQuery object * * @since 2.5 */ protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true); // Select all fields from the table. $query->select('a.*') ->from($db->quoteName('#__finder_filters', 'a')); // Join over the users for the checked out user. $query->select($db->quoteName('uc.name', 'editor')) ->join('LEFT', $db->quoteName('#__users', 'uc') . ' ON ' . $db->quoteName('uc.id') . ' = ' . $db->quoteName('a.checked_out')); // Join over the users for the author. $query->select($db->quoteName('ua.name', 'user_name')) ->join('LEFT', $db->quoteName('#__users', 'ua') . ' ON ' . $db->quoteName('ua.id') . ' = ' . $db->quoteName('a.created_by')); // Check for a search filter. if ($search = $this->getState('filter.search')) { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where($db->quoteName('a.title') . ' LIKE ' . $search); } // If the model is set to check item state, add to the query. $state = $this->getState('filter.state'); if (is_numeric($state)) { $query->where($db->quoteName('a.state') . ' = ' . (int) $state); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.title') . ' ' . $db->escape($this->getState('list.direction', 'ASC')))); return $query; } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. [optional] * * @return string A store id. * * @since 2.5 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.state'); return parent::getStoreId($id); } /** * Method to auto-populate the model state. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. [optional] * @param string $direction An optional direction. [optional] * * @return void * * @since 2.5 */ protected function populateState($ordering = 'a.title', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.state', $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'cmd')); // Load the parameters. $params = JComponentHelper::getParams('com_finder'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } } PKb��\I�D���'components/com_finder/models/filter.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Filter model class for Finder. * * @since 2.5 */ class FinderModelFilter extends JModelAdmin { /** * The prefix to use with controller messages. * * @var string * @since 2.5 */ protected $text_prefix = 'COM_FINDER'; /** * Model context string. * * @var string * @since 2.5 */ protected $context = 'com_finder.filter'; /** * Custom clean cache method. * * @param string $group The component name. [optional] * @param integer $client_id The client ID. [optional] * * @return void * * @since 2.5 */ protected function cleanCache($group = 'com_finder', $client_id = 1) { parent::cleanCache($group, $client_id); } /** * Method to get the filter data. * * @return FinderTableFilter|boolean The filter data or false on a failure. * * @since 2.5 */ public function getFilter() { $filter_id = (int) $this->getState('filter.id'); // Get a FinderTableFilter instance. $filter = $this->getTable(); // Attempt to load the row. $return = $filter->load($filter_id); // Check for a database error. if ($return === false && $filter->getError()) { $this->setError($filter->getError()); return false; } // Process the filter data. if (!empty($filter->data)) { $filter->data = explode(',', $filter->data); } elseif (empty($filter->data)) { $filter->data = array(); } // Check for a database error. if ($this->_db->getErrorNum()) { $this->setError($this->_db->getErrorMsg()); return false; } return $filter; } /** * Method to get the record form. * * @param array $data Data for the form. [optional] * @param boolean $loadData True if the form is to load its own data (default case), false if not. [optional] * * @return JForm|boolean A JForm object on success, false on failure * * @since 2.5 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_finder.filter', 'filter', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Returns a JTable object, always creating it. * * @param string $type The table type to instantiate. [optional] * @param string $prefix A prefix for the table class name. [optional] * @param array $config Configuration array for model. [optional] * * @return JTable A database object * * @since 2.5 */ public function getTable($type = 'Filter', $prefix = 'FinderTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 2.5 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_finder.edit.filter.data', array()); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_finder.filter', $data); return $data; } /** * Method to get the total indexed items * * @return number the number of indexed items * * @since 3.5 */ public function getTotal() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('MAX(link_id)') ->from('#__finder_links'); return $db->setQuery($query)->loadResult(); } } PKb��\x��P��$components/com_finder/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_finder * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Base controller class for Finder. * * @since 2.5 */ class FinderController extends JControllerLegacy { /** * The default view. * * @var string * @since 2.5 */ protected $default_view = 'index'; /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return FinderController A JControllerLegacy object to support chaining. * * @since 2.5 */ public function display($cachable = false, $urlparams = array()) { JLoader::register('FinderHelper', JPATH_ADMINISTRATOR . '/components/com_finder/helpers/finder.php'); $view = $this->input->get('view', 'index', 'word'); $layout = $this->input->get('layout', 'index', 'word'); $filterId = $this->input->get('filter_id', null, 'int'); // Check for edit form. if ($view === 'filter' && $layout === 'edit' && !$this->checkEditId('com_finder.edit.filter', $filterId)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $filterId)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_finder&view=filters', false)); return false; } return parent::display(); } } PKb��\�z"��-components/com_modules/controllers/module.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Module controller class. * * @since 1.6 */ class ModulesControllerModule extends JControllerForm { /** * Override parent add method. * * @return mixed True if the record can be added, a JError object if not. * * @since 1.6 */ public function add() { $app = JFactory::getApplication(); // Get the result of the parent method. If an error, just return it. $result = parent::add(); if ($result instanceof Exception) { return $result; } // Look for the Extension ID. $extensionId = $app->input->get('eid', 0, 'int'); if (empty($extensionId)) { $redirectUrl = 'index.php?option=' . $this->option . '&view=' . $this->view_item . '&layout=edit'; $this->setRedirect(JRoute::_($redirectUrl, false)); return JError::raiseWarning(500, JText::_('COM_MODULES_ERROR_INVALID_EXTENSION')); } $app->setUserState('com_modules.add.module.extension_id', $extensionId); $app->setUserState('com_modules.add.module.params', null); // Parameters could be coming in for a new item, so let's set them. $params = $app->input->get('params', array(), 'array'); $app->setUserState('com_modules.add.module.params', $params); } /** * Override parent cancel method to reset the add module state. * * @param string $key The name of the primary key of the URL variable. * * @return boolean True if access level checks pass, false otherwise. * * @since 1.6 */ public function cancel($key = null) { $app = JFactory::getApplication(); $result = parent::cancel(); $app->setUserState('com_modules.add.module.extension_id', null); $app->setUserState('com_modules.add.module.params', null); return $result; } /** * Override parent allowSave method. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowSave($data, $key = 'id') { // Use custom position if selected if (isset($data['custom_position'])) { if (empty($data['position'])) { $data['position'] = $data['custom_position']; } unset($data['custom_position']); } return parent::allowSave($data, $key); } /** * Method override to check if you can edit an existing record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 3.2 */ protected function allowEdit($data = array(), $key = 'id') { // Initialise variables. $recordId = (int) isset($data[$key]) ? $data[$key] : 0; $user = JFactory::getUser(); // Zero record (id:0), return component edit permission by calling parent controller method if (!$recordId) { return parent::allowEdit($data, $key); } // Check edit on the record asset (explicit or inherited) if ($user->authorise('core.edit', 'com_modules.module.' . $recordId)) { return true; } return false; } /** * Method to run batch operations. * * @param string $model The model * * @return boolean True on success. * * @since 1.7 */ public function batch($model = null) { $this->checkToken(); // Set the model $model = $this->getModel('Module', '', array()); // Preset the redirect $redirectUrl = 'index.php?option=com_modules&view=modules' . $this->getRedirectToListAppend(); $this->setRedirect(JRoute::_($redirectUrl, false)); return parent::batch($model); } /** * Function that allows child controller access to model data after the data has been saved. * * @param JModelLegacy $model The data model object. * @param array $validData The validated data. * * @return void * * @since 1.6 */ protected function postSaveHook(JModelLegacy $model, $validData = array()) { $app = JFactory::getApplication(); $task = $this->getTask(); switch ($task) { case 'save2new': $app->setUserState('com_modules.add.module.extension_id', $model->getState('module.extension_id')); break; default: $app->setUserState('com_modules.add.module.extension_id', null); break; } $app->setUserState('com_modules.add.module.params', null); } /** * Method to save a record. * * @param string $key The name of the primary key of the URL variable. * @param string $urlVar The name of the URL variable if different from the primary key * * @return boolean True if successful, false otherwise. */ public function save($key = null, $urlVar = null) { $this->checkToken(); if (JFactory::getDocument()->getType() == 'json') { $model = $this->getModel(); $data = $this->input->post->get('jform', array(), 'array'); $item = $model->getItem($this->input->get('id')); $properties = $item->getProperties(); if (isset($data['params'])) { unset($properties['params']); } // Replace changed properties $data = array_replace_recursive($properties, $data); if (!empty($data['assigned'])) { $data['assigned'] = array_map('abs', $data['assigned']); } // Add new data to input before process by parent save() $this->input->post->set('jform', $data); // Add path of forms directory JForm::addFormPath(JPATH_ADMINISTRATOR . '/components/com_modules/models/forms'); } parent::save($key, $urlVar); } /** * Method to get the other modules in the same position * * @return string The data for the Ajax request. * * @since 3.6.3 */ public function orderPosition() { $app = JFactory::getApplication(); // Send json mime type. $app->mimeType = 'application/json'; $app->setHeader('Content-Type', $app->mimeType . '; charset=' . $app->charSet); $app->sendHeaders(); // Check if user token is valid. if (!JSession::checkToken('get')) { $app->enqueueMessage(JText::_('JINVALID_TOKEN_NOTICE'), 'error'); echo new JResponseJson; $app->close(); } $jinput = $app->input; $clientId = $jinput->getValue('client_id'); $position = $jinput->getValue('position'); $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('position, ordering, title') ->from('#__modules') ->where('client_id = ' . (int) $clientId . ' AND position = ' . $db->q($position)) ->order('ordering'); $db->setQuery($query); try { $orders = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); return ''; } $orders2 = array(); $n = count($orders); if ($n > 0) { for ($i = 0, $n; $i < $n; $i++) { if (!isset($orders2[$orders[$i]->position])) { $orders2[$orders[$i]->position] = 0; } $orders2[$orders[$i]->position]++; $ord = $orders2[$orders[$i]->position]; $title = JText::sprintf('COM_MODULES_OPTION_ORDER_POSITION', $ord, htmlspecialchars($orders[$i]->title, ENT_QUOTES, 'UTF-8')); $html[] = $orders[$i]->position . ',' . $ord . ',' . $title; } } else { $html[] = $position . ',' . 1 . ',' . JText::_('JNONE'); } echo new JResponseJson($html); $app->close(); } } PKb��\�B�PP.components/com_modules/controllers/modules.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Modules list controller class. * * @since 1.6 */ class ModulesControllerModules extends JControllerAdmin { /** * Method to clone an existing module. * * @return void * * @since 1.6 */ public function duplicate() { // Check for request forgeries $this->checkToken(); $pks = $this->input->post->get('cid', array(), 'array'); $pks = ArrayHelper::toInteger($pks); try { if (empty($pks)) { throw new Exception(JText::_('COM_MODULES_ERROR_NO_MODULES_SELECTED')); } $model = $this->getModel(); $model->duplicate($pks); $this->setMessage(JText::plural('COM_MODULES_N_MODULES_DUPLICATED', count($pks))); } catch (Exception $e) { JError::raiseWarning(500, $e->getMessage()); } $this->setRedirect('index.php?option=com_modules&view=modules'); } /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'Module', $prefix = 'ModulesModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } } PKb��\��u��7components/com_modules/layouts/toolbar/cancelselect.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $text = JText::_('JTOOLBAR_CANCEL'); ?> <button onclick="location.href='index.php?option=com_modules'" class="btn" title="<?php echo $text; ?>"> <span class="icon-remove" aria-hidden="true"></span> <?php echo $text; ?> </button> PKb��\�9))4components/com_modules/layouts/toolbar/newmodule.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $text = JText::_('JTOOLBAR_NEW'); ?> <button onclick="location.href='index.php?option=com_modules&view=select'" class="btn btn-small btn-success" title="<?php echo $text; ?>"> <span class="icon-plus icon-white" aria-hidden="true"></span> <?php echo $text; ?> </button> PKb��\�m��"components/com_modules/modules.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_modules</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_MODULES_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>config.xml</filename> <filename>controller.php</filename> <filename>modules.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_modules.ini</language> <language tag="en-GB">language/en-GB.com_modules.sys.ini</language> </languages> </administration> </extension> PKb��\�����!components/com_modules/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="modules" label="COM_MODULES_GENERAL" description="COM_MODULES_GENERAL_FIELDSET_DESC" > <field name="redirect_edit" type="list" class="advancedSelect" default="site" label="COM_MODULES_REDIRECT_EDIT_LABEL" description="COM_MODULES_REDIRECT_EDIT_DESC" > <option value="admin">JADMINISTRATOR</option> <option value="site">JSITE</option> </field> </fieldset> <fieldset name="admin_modules" label="COM_MODULES_ADMIN_LANG_FILTER_FIELDSET_LABEL" > <field name="adminlangfilter" type="radio" label="COM_MODULES_ADMIN_LANG_FILTER_LABEL" description="COM_MODULES_ADMIN_LANG_FILTER_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_modules" section="component" /> </fieldset> </config> PKb��\�>�b;;!components/com_modules/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_modules"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> <action name="module.edit.frontend" title="COM_MODULES_ACTION_EDITFRONTEND" description="COM_MODULES_ACTION_EDITFRONTEND_COMPONENT_DESC" /> </section> <section name="module"> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> <action name="module.edit.frontend" title="COM_MODULES_ACTION_EDITFRONTEND" description="COM_MODULES_ACTION_EDITFRONTEND_COMPONENT_DESC" /> </section> </access>PKb��\��Q� � @components/com_modules/views/modules/tmpl/default_batch_body.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $clientId = $this->state->get('client_id'); // Show only Module Positions of published Templates $published = 1; $positions = JHtml::_('modules.positions', $clientId, $published); $positions['']['items'][] = ModulesHelper::createOption('nochange', JText::_('COM_MODULES_BATCH_POSITION_NOCHANGE')); $positions['']['items'][] = ModulesHelper::createOption('noposition', JText::_('COM_MODULES_BATCH_POSITION_NOPOSITION')); // Add custom position to options $customGroupText = JText::_('COM_MODULES_CUSTOM_POSITION'); // Build field $attr = array( 'id' => 'batch-position-id', 'list.attr' => 'class="chzn-custom-value input-xlarge" ' . 'data-custom_group_text="' . $customGroupText . '" ' . 'data-no_results_text="' . JText::_('COM_MODULES_ADD_CUSTOM_POSITION') . '" ' . 'data-placeholder="' . JText::_('COM_MODULES_TYPE_OR_SELECT_POSITION') . '" ' ); ?> <div class="container-fluid"> <p><?php echo JText::_('COM_MODULES_BATCH_TIP'); ?></p> <div class="row-fluid"> <?php if ($clientId != 1) : ?> <div class="control-group span6"> <div class="controls"> <?php echo JLayoutHelper::render('joomla.html.batch.language', array()); ?> </div> </div> <?php elseif ($clientId == 1 && JModuleHelper::isAdminMultilang()) : ?> <div class="control-group span6"> <div class="controls"> <?php echo JLayoutHelper::render('joomla.html.batch.adminlanguage', array()); ?> </div> </div> <?php endif; ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div class="span6"> <div class="controls"> <label id="batch-choose-action-lbl" for="batch-choose-action"> <?php echo JText::_('COM_MODULES_BATCH_POSITION_LABEL'); ?> </label> <div id="batch-choose-action" class="control-group"> <?php echo JHtml::_('select.groupedlist', $positions, 'batch[position_id]', $attr); ?> <div id="batch-copy-move" class="control-group radio"> <?php echo JHtml::_('modules.batchOptions'); ?> </div> </div> </div> </div> <?php endif; ?> </div> </div> PKb��\]�J��Bcomponents/com_modules/views/modules/tmpl/default_batch_footer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <button type="button" class="btn" onclick="document.getElementById('batch-position-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button type="submit" class="btn btn-success" onclick="Joomla.submitbutton('module.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> PKb��\�*�R$R$5components/com_modules/views/modules/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $clientId = (int) $this->state->get('client_id', 0); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = ($listOrder == 'a.ordering'); if ($saveOrder) { $saveOrderingUrl = 'index.php?option=com_modules&task=modules.saveOrderAjax&tmpl=component'; JHtml::_('sortablelist.sortable', 'moduleList', 'adminForm', strtolower($listDirn), $saveOrderingUrl); } $colSpan = $clientId === 1 ? 8 : 10; ?> <form action="<?php echo JRoute::_('index.php?option=com_modules'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif;?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if ($this->total > 0) : ?> <table class="table table-striped" id="moduleList"> <thead> <tr> <th width="1%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', '', 'a.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap center" style="min-width:55px"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="title"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> </th> <th width="15%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_MODULES_HEADING_POSITION', 'a.position', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_MODULES_HEADING_MODULE', 'name', $listDirn, $listOrder); ?> </th> <?php if ($clientId === 0) : ?> <th width="10%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_MODULES_HEADING_PAGES', 'pages', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'ag.title', $listDirn, $listOrder); ?> </th> <?php if ($clientId === 0) : ?> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'l.title', $listDirn, $listOrder); ?> </th> <?php elseif ($clientId === 1 && JModuleHelper::isAdminMultilang()) : ?> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'a.language', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th width="1%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="<?php echo $colSpan; ?>"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_modules'); $canEdit = $user->authorise('core.edit', 'com_modules.module.' . $item->id); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id')|| $item->checked_out == 0; $canChange = $user->authorise('core.edit.state', 'com_modules.module.' . $item->id) && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>" sortable-group-id="<?php echo $item->position ?: 'none'; ?>"> <td class="order nowrap center hidden-phone"> <?php $iconClass = ''; if (!$canChange) { $iconClass = ' inactive'; } elseif (!$saveOrder) { $iconClass = ' inactive tip-top hasTooltip" title="' . JHtml::_('tooltipText', 'JORDERINGDISABLED'); } ?> <span class="sortable-handler<?php echo $iconClass; ?>"> <span class="icon-menu"></span> </span> <?php if ($canChange && $saveOrder) : ?> <input type="text" style="display:none" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order" /> <?php endif; ?> </td> <td class="center"> <?php if ($item->enabled > 0) : ?> <?php echo JHtml::_('grid.id', $i, $item->id); ?> <?php endif; ?> </td> <td class="center"> <div class="btn-group"> <?php // Check if extension is enabled ?> <?php if ($item->enabled > 0) : ?> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'modules.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> <?php // Create dropdown items and render the dropdown list. if ($canCreate) { JHtml::_('actionsdropdown.duplicate', 'cb' . $i, 'modules'); } if ($canChange) { JHtml::_('actionsdropdown.' . ((int) $item->published === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'modules'); } if ($canCreate || $canChange) { echo JHtml::_('actionsdropdown.render', $this->escape($item->title)); } ?> <?php else : ?> <?php // Extension is not enabled, show a message that indicates this. ?> <button class="btn btn-micro hasTooltip" title="<?php echo JText::_('COM_MODULES_MSG_MANAGE_EXTENSION_DISABLED'); ?>"> <span class="icon-ban-circle" aria-hidden="true"></span> </button> <?php endif; ?> </div> </td> <td class="has-context"> <div class="pull-left"> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'modules.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit) : ?> <a class="hasTooltip" href="<?php echo JRoute::_('index.php?option=com_modules&task=module.edit&id=' . (int) $item->id); ?>" title="<?php echo JText::_('JACTION_EDIT'); ?>"> <?php echo $this->escape($item->title); ?></a> <?php else : ?> <?php echo $this->escape($item->title); ?> <?php endif; ?> <?php if (!empty($item->note)) : ?> <div class="small"> <?php echo JText::sprintf('JGLOBAL_LIST_NOTE', $this->escape($item->note)); ?> </div> <?php endif; ?> </div> </td> <td class="small hidden-phone"> <?php if ($item->position) : ?> <span class="label label-info"> <?php echo $item->position; ?> </span> <?php else : ?> <span class="label"> <?php echo JText::_('JNONE'); ?> </span> <?php endif; ?> </td> <td class="small hidden-phone hidden-tablet"> <?php echo $item->name; ?> </td> <?php if ($clientId === 0) : ?> <td class="small hidden-phone hidden-tablet"> <?php echo $item->pages; ?> </td> <?php endif; ?> <td class="small hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <?php if ($clientId === 0) : ?> <td class="small hidden-phone"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <?php elseif ($clientId === 1 && JModuleHelper::isAdminMultilang()) : ?> <td class="small hidden-phone"> <?php if ($item->language == ''):?> <?php echo JText::_('JUNDEFINED'); ?> <?php elseif ($item->language == '*'):?> <?php echo JText::alt('JALL', 'language'); ?> <?php else:?> <?php echo $this->escape($item->language); ?> <?php endif; ?> </td> <?php endif; ?> <td class="hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <?php // Load the batch processing form. ?> <?php if ($user->authorise('core.create', 'com_modules') && $user->authorise('core.edit', 'com_modules') && $user->authorise('core.edit.state', 'com_modules')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_MODULES_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�?�d{{;components/com_modules/views/modules/tmpl/default_batch.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * @deprecated 3.4 Use default_batch_body and default_batch_footer */ defined('_JEXEC') or die; $clientId = $this->state->get('filter.client_id'); // Show only Module Positions of published Templates $published = 1; $positions = JHtml::_('modules.positions', $clientId, $published); $positions['']['items'][] = ModulesHelper::createOption('nochange', JText::_('COM_MODULES_BATCH_POSITION_NOCHANGE')); $positions['']['items'][] = ModulesHelper::createOption('noposition', JText::_('COM_MODULES_BATCH_POSITION_NOPOSITION')); // Add custom position to options $customGroupText = JText::_('COM_MODULES_CUSTOM_POSITION'); // Build field $attr = array( 'id' => 'batch-position-id', 'list.attr' => 'class="chzn-custom-value input-xlarge" ' . 'data-custom_group_text="' . $customGroupText . '" ' . 'data-no_results_text="' . JText::_('COM_MODULES_ADD_CUSTOM_POSITION') . '" ' . 'data-placeholder="' . JText::_('COM_MODULES_TYPE_OR_SELECT_POSITION') . '" ' ); ?> <div class="modal hide fade" id="collapseModal"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3><?php echo JText::_('COM_MODULES_BATCH_OPTIONS'); ?></h3> </div> <div class="modal-body modal-batch"> <p><?php echo JText::_('COM_MODULES_BATCH_TIP'); ?></p> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div class="span6"> <div class="controls"> <label id="batch-choose-action-lbl" for="batch-choose-action"> <?php echo JText::_('COM_MODULES_BATCH_POSITION_LABEL'); ?> </label> <div id="batch-choose-action" class="control-group"> <?php echo JHtml::_('select.groupedlist', $positions, 'batch[position_id]', $attr) ?> <div id="batch-move-copy" class="control-group radio"> <?php echo JHtml::_('modules.batchOptions'); ?> </div> </div> </div> </div> <?php endif; ?> </div> </div> <div class="modal-footer"> <button class="btn" type="button" onclick="document.getElementById('batch-position-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button class="btn btn-success" type="submit" onclick="Joomla.submitbutton('module.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> </div> </div> PKb��\��k112components/com_modules/views/modules/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of modules. * * @since 1.6 */ class ModulesViewModules extends JViewLegacy { protected $items; protected $pagination; protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->total = $this->get('Total'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); $this->clientId = $this->state->get('client_id'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // We do not need the Language filter when modules are not filtered if ($this->clientId == 1 && !JModuleHelper::isAdminMultilang()) { unset($this->activeFilters['language']); $this->filterForm->removeField('language', 'filter'); } // We don't need the toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); } // If in modal layout. else { // Client id selector should not exist. $this->filterForm->removeField('client_id', ''); // If in the frontend state and language should not activate the search tools. if (JFactory::getApplication()->isClient('site')) { unset($this->activeFilters['state']); unset($this->activeFilters['language']); } } // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); $canDo = JHelperContent::getActions('com_modules'); $user = JFactory::getUser(); // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); if ($state->get('client_id') == 1) { JToolbarHelper::title(JText::_('COM_MODULES_MANAGER_MODULES_ADMIN'), 'cube module'); } else { JToolbarHelper::title(JText::_('COM_MODULES_MANAGER_MODULES_SITE'), 'cube module'); } if ($canDo->get('core.create')) { // Instantiate a new JLayoutFile instance and render the layout $layout = new JLayoutFile('toolbar.newmodule'); $bar->appendButton('Custom', $layout->render(array()), 'new'); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('module.edit'); } if ($canDo->get('core.create')) { JToolbarHelper::custom('modules.duplicate', 'copy.png', 'copy_f2.png', 'JTOOLBAR_DUPLICATE', true); } if ($canDo->get('core.edit.state')) { JToolbarHelper::publish('modules.publish', 'JTOOLBAR_PUBLISH', true); JToolbarHelper::unpublish('modules.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolbarHelper::checkin('modules.checkin'); } // Add a batch button if ($user->authorise('core.create', 'com_modules') && $user->authorise('core.edit', 'com_modules') && $user->authorise('core.edit.state', 'com_modules')) { JHtml::_('bootstrap.renderModal', 'collapseModal'); $title = JText::_('JTOOLBAR_BATCH'); // Instantiate a new JLayoutFile instance and render the batch button $layout = new JLayoutFile('joomla.toolbar.batch'); $dhtml = $layout->render(array('title' => $title)); $bar->appendButton('Custom', $dhtml, 'batch'); } if ($state->get('filter.state') == -2 && $canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'modules.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::trash('modules.trash'); } if ($canDo->get('core.admin')) { JToolbarHelper::preferences('com_modules'); } JToolbarHelper::help('JHELP_EXTENSIONS_MODULE_MANAGER'); if (JHtmlSidebar::getEntries()) { $this->sidebar = JHtmlSidebar::render(); } } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { $this->state = $this->get('State'); if ($this->state->get('client_id') == 0) { if ($this->getLayout() == 'default') { return array( 'ordering' => JText::_('JGRID_HEADING_ORDERING'), 'a.published' => JText::_('JSTATUS'), 'a.title' => JText::_('JGLOBAL_TITLE'), 'position' => JText::_('COM_MODULES_HEADING_POSITION'), 'name' => JText::_('COM_MODULES_HEADING_MODULE'), 'pages' => JText::_('COM_MODULES_HEADING_PAGES'), 'a.access' => JText::_('JGRID_HEADING_ACCESS'), 'language_title' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.id' => JText::_('JGRID_HEADING_ID') ); } return array( 'a.title' => JText::_('JGLOBAL_TITLE'), 'position' => JText::_('COM_MODULES_HEADING_POSITION'), 'name' => JText::_('COM_MODULES_HEADING_MODULE'), 'pages' => JText::_('COM_MODULES_HEADING_PAGES'), 'a.access' => JText::_('JGRID_HEADING_ACCESS'), 'language_title' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.id' => JText::_('JGRID_HEADING_ID') ); } else { if ($this->getLayout() == 'default') { return array( 'ordering' => JText::_('JGRID_HEADING_ORDERING'), 'a.published' => JText::_('JSTATUS'), 'a.title' => JText::_('JGLOBAL_TITLE'), 'position' => JText::_('COM_MODULES_HEADING_POSITION'), 'name' => JText::_('COM_MODULES_HEADING_MODULE'), 'a.access' => JText::_('JGRID_HEADING_ACCESS'), 'a.language' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.id' => JText::_('JGRID_HEADING_ID') ); } return array( 'a.title' => JText::_('JGLOBAL_TITLE'), 'position' => JText::_('COM_MODULES_HEADING_POSITION'), 'name' => JText::_('COM_MODULES_HEADING_MODULE'), 'a.access' => JText::_('JGRID_HEADING_ACCESS'), 'a.language' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.id' => JText::_('JGRID_HEADING_ID') ); } } } PKb��\�S�Pii5components/com_modules/views/preview/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // @deprecated 4.0 not used for a long time defined('_JEXEC') or die; JFactory::getDocument()->addScriptDeclaration( ' var form = window.top.document.adminForm var title = form.title.value; var alltext = window.top.' . $this->editor->getContent('text') . '; jQuery(document).ready(function() { document.getElementById("td-title").innerHTML = title; document.getElementById("td-text").innerHTML = alltext; });' ); ?> <table class="center" width="90%"> <tr> <td class="contentheading" colspan="2" id="td-title"></td> </tr> <tr> <td valign="top" height="90%" colspan="2" id="td-text"></td> </tr> </table> PKb��\�t�2components/com_modules/views/preview/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // @deprecated 4.0 not used for a long time defined('_JEXEC') or die; /** * HTML View class for the Modules component * * @since 1.6 */ class ModulesViewPreview extends JViewLegacy { /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { $editor = JFactory::getConfig()->get('editor'); $this->editor = JEditor::getInstance($editor); parent::display($tpl); } } PKb��\�'�&%%1components/com_modules/views/module/view.json.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a module. * * @package Joomla.Administrator * @subpackage com_templates * @since 3.2 */ class ModulesViewModule extends JViewLegacy { protected $item; protected $form; protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { $app = JFactory::getApplication(); try { $this->item = $this->get('Item'); } catch (Exception $e) { $app->enqueueMessage($e->getMessage(), 'error'); return false; } $paramsList = $this->item->getProperties(); unset($paramsList['xml']); $paramsList = json_encode($paramsList); return $paramsList; } } PKb��\=yA���<components/com_modules/views/module/tmpl/edit_assignment.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Initialise related data. JLoader::register('MenusHelper', JPATH_ADMINISTRATOR . '/components/com_menus/helpers/menus.php'); $menuTypes = MenusHelper::getMenuLinks(); JHtml::_('script', 'jui/treeselectmenu.jquery.min.js', array('version' => 'auto', 'relative' => true)); $script = " jQuery(document).ready(function() { menuHide(jQuery('#jform_assignment').val()); jQuery('#jform_assignment').change(function() { menuHide(jQuery(this).val()); }) }); function menuHide(val) { if (val == 0 || val == '-') { jQuery('#menuselect-group').hide(); } else { jQuery('#menuselect-group').show(); } } "; // Add the script to the document head JFactory::getDocument()->addScriptDeclaration($script); ?> <div class="control-group"> <label id="jform_menus-lbl" class="control-label" for="jform_menus"><?php echo JText::_('COM_MODULES_MODULE_ASSIGN'); ?></label> <div id="jform_menus" class="controls"> <select name="jform[assignment]" id="jform_assignment"> <?php echo JHtml::_('select.options', ModulesHelper::getAssignmentOptions($this->item->client_id), 'value', 'text', $this->item->assignment, true); ?> </select> </div> </div> <div id="menuselect-group" class="control-group"> <label id="jform_menuselect-lbl" class="control-label" for="jform_menuselect"><?php echo JText::_('JGLOBAL_MENU_SELECTION'); ?></label> <div id="jform_menuselect" class="controls"> <?php if (!empty($menuTypes)) : ?> <?php $id = 'jform_menuselect'; ?> <div class="well well-small"> <div class="form-inline"> <span class="small"><?php echo JText::_('JSELECT'); ?>: <a id="treeCheckAll" href="javascript://"><?php echo JText::_('JALL'); ?></a>, <a id="treeUncheckAll" href="javascript://"><?php echo JText::_('JNONE'); ?></a> </span> <span class="width-20">|</span> <span class="small"><?php echo JText::_('COM_MODULES_EXPAND'); ?>: <a id="treeExpandAll" href="javascript://"><?php echo JText::_('JALL'); ?></a>, <a id="treeCollapseAll" href="javascript://"><?php echo JText::_('JNONE'); ?></a> </span> <input type="text" id="treeselectfilter" name="treeselectfilter" class="input-medium search-query pull-right" size="16" autocomplete="off" placeholder="<?php echo JText::_('JSEARCH_FILTER'); ?>" aria-invalid="false" tabindex="-1"> </div> <div class="clearfix"></div> <hr class="hr-condensed" /> <ul class="treeselect"> <?php foreach ($menuTypes as &$type) : ?> <?php if (count($type->links)) : ?> <?php $prevlevel = 0; ?> <li> <div class="treeselect-item pull-left"> <label class="pull-left nav-header"><?php echo $type->title; ?></label></div> <?php foreach ($type->links as $i => $link) : ?> <?php if ($prevlevel < $link->level) { echo '<ul class="treeselect-sub">'; } elseif ($prevlevel > $link->level) { echo str_repeat('</li></ul>', $prevlevel - $link->level); } else { echo '</li>'; } $selected = 0; if ($this->item->assignment == 0) { $selected = 1; } elseif ($this->item->assignment < 0) { $selected = in_array(-$link->value, $this->item->assigned); } elseif ($this->item->assignment > 0) { $selected = in_array($link->value, $this->item->assigned); } ?> <li> <div class="treeselect-item pull-left"> <?php $uselessMenuItem = in_array($link->type, array('separator', 'heading', 'alias', 'url')); ?> <input type="checkbox" class="pull-left novalidate" name="jform[assigned][]" id="<?php echo $id . $link->value; ?>" value="<?php echo (int) $link->value; ?>"<?php echo $selected ? ' checked="checked"' : ''; echo $uselessMenuItem ? ' disabled="disabled"' : ''; ?> /> <label for="<?php echo $id . $link->value; ?>" class="pull-left"> <?php echo $link->text; ?> <span class="small"><?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($link->alias)); ?></span> <?php if (JLanguageMultilang::isEnabled() && $link->language != '' && $link->language != '*') : ?> <?php if ($link->language_image) : ?> <?php echo JHtml::_('image', 'mod_languages/' . $link->language_image . '.gif', $link->language_title, array('title' => $link->language_title), true); ?> <?php else : ?> <?php echo '<span class="label" title="' . $link->language_title . '">' . $link->language_sef . '</span>'; ?> <?php endif; ?> <?php endif; ?> <?php if ($link->published == 0) : ?> <?php echo ' <span class="label">' . JText::_('JUNPUBLISHED') . '</span>'; ?> <?php endif; ?> <?php if ($uselessMenuItem) : ?> <?php echo ' <span class="label">' . JText::_('COM_MODULES_MENU_ITEM_' . strtoupper($link->type)) . '</span>'; ?> <?php endif; ?> </label> </div> <?php if (!isset($type->links[$i + 1])) { echo str_repeat('</li></ul>', $link->level); } $prevlevel = $link->level; ?> <?php endforeach; ?> </li> <?php endif; ?> <?php endforeach; ?> </ul> <div id="noresultsfound" style="display:none;" class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <div style="display:none;" id="treeselectmenu"> <div class="pull-left nav-hover treeselect-menu"> <div class="btn-group"> <a href="#" data-toggle="dropdown" class="dropdown-toggle btn btn-micro"> <span class="caret"></span> </a> <ul class="dropdown-menu"> <li class="nav-header"><?php echo JText::_('COM_MODULES_SUBITEMS'); ?></li> <li class="divider"></li> <li class=""><a class="checkall" href="javascript://"><span class="icon-checkbox" aria-hidden="true"></span> <?php echo JText::_('JSELECT'); ?></a> </li> <li><a class="uncheckall" href="javascript://"><span class="icon-checkbox-unchecked" aria-hidden="true"></span> <?php echo JText::_('COM_MODULES_DESELECT'); ?></a> </li> <div class="treeselect-menu-expand"> <li class="divider"></li> <li><a class="expandall" href="javascript://"><span class="icon-plus" aria-hidden="true"></span> <?php echo JText::_('COM_MODULES_EXPAND'); ?></a></li> <li><a class="collapseall" href="javascript://"><span class="icon-minus" aria-hidden="true"></span> <?php echo JText::_('COM_MODULES_COLLAPSE'); ?></a></li> </div> </ul> </div> </div> </div> </div> <?php endif; ?> </div> </div> PKb��\���>>9components/com_modules/views/module/tmpl/edit_options.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <?php echo JHtml::_('bootstrap.startAccordion', 'moduleOptions', array('active' => 'collapse0')); $fieldSets = $this->form->getFieldsets('params'); $i = 0; foreach ($fieldSets as $name => $fieldSet) : $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_MODULES_' . $name . '_FIELDSET_LABEL'; $class = isset($fieldSet->class) && !empty($fieldSet->class) ? $fieldSet->class : ''; echo JHtml::_('bootstrap.addSlide', 'moduleOptions', JText::_($label), 'collapse' . ($i++), $class); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="tip">' . $this->escape(JText::_($fieldSet->description)) . '</p>'; endif; ?> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <div class="control-group"> <div class="control-label"> <?php echo $field->label; ?> </div> <div class="controls"> <?php echo $field->input; ?> </div> </div> <?php endforeach; echo JHtml::_('bootstrap.endSlide'); endforeach; echo JHtml::_('bootstrap.endAccordion'); PKb��\��Wp��;components/com_modules/views/module/tmpl/edit_positions.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('TemplatesHelper', JPATH_ADMINISTRATOR . '/components/com_templates/helpers/templates.php'); JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); $clientId = $this->item->client_id; $state = 1; $selectedPosition = $this->item->position; $positions = JHtml::_('modules.positions', $clientId, $state, $selectedPosition); // Add custom position to options $customGroupText = JText::_('COM_MODULES_CUSTOM_POSITION'); // Build field $attr = array( 'id' => 'jform_position', 'list.select' => $this->item->position, 'list.attr' => 'class="chzn-custom-value" ' . 'data-custom_group_text="' . $customGroupText . '" ' . 'data-no_results_text="' . JText::_('COM_MODULES_ADD_CUSTOM_POSITION') . '" ' . 'data-placeholder="' . JText::_('COM_MODULES_TYPE_OR_SELECT_POSITION') . '" ' ); echo JHtml::_('select.groupedlist', $positions, 'jform[position]', $attr); PKb��\$<�� + +1components/com_modules/views/module/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.combobox'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', '#jform_position', null, array('disable_search_threshold' => 0 )); JHtml::_('formbehavior.chosen', '.multipleCategories', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_CATEGORY'))); JHtml::_('formbehavior.chosen', '.multipleTags', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_TAG'))); JHtml::_('formbehavior.chosen', '.multipleAuthors', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_AUTHOR'))); JHtml::_('formbehavior.chosen', '.multipleAuthorAliases', null, array('placeholder_text_multiple' => JText::_('JOPTION_SELECT_AUTHOR_ALIAS'))); JHtml::_('formbehavior.chosen', 'select'); $hasContent = isset($this->item->xml->customContent); $hasContentFieldName = 'content'; // For a later improvement if ($hasContent) { $hasContentFieldName = 'content'; } // Get Params Fieldsets $this->fieldsets = $this->form->getFieldsets('params'); $script = " Joomla.submitbutton = function(task) { if (task == 'module.cancel' || document.formvalidator.isValid(document.getElementById('module-form'))) { "; if ($hasContent) { $script .= $this->form->getField($hasContentFieldName)->save(); } $script .= " Joomla.submitform(task, document.getElementById('module-form')); jQuery('#permissions-sliders select').attr('disabled', 'disabled'); if (self != top) { if (parent.viewLevels) { var updPosition = jQuery('#jform_position').chosen().val(), updTitle = jQuery('#jform_title').val(), updMenus = jQuery('#jform_assignment').chosen().val(), updStatus = jQuery('#jform_published').chosen().val(), updAccess = jQuery('#jform_access').chosen().val(), tmpMenu = jQuery('#menus-" . $this->item->id . "', parent.document), tmpRow = jQuery('#tr-" . $this->item->id . "', parent.document); tmpStatus = jQuery('#status-" . $this->item->id . "', parent.document); window.parent.inMenus = new Array(); window.parent.numMenus = jQuery(':input[name=\"jform[assigned][]\"]').length; jQuery('input[name=\"jform[assigned][]\"]').each(function(){ if (updMenus > 0 ) { if (jQuery(this).is(':checked')) { window.parent.inMenus.push(parseInt(jQuery(this).val())); } } if (updMenus < 0 ) { if (!jQuery(this).is(':checked')) { window.parent.inMenus.push(parseInt(jQuery(this).val())); } } }); if (updMenus == 0) { tmpMenu.html('<span class=\"label label-info\">" . JText::_('JALL') . "</span>'); if (tmpRow.hasClass('no')) { tmpRow.removeClass('no '); } } if (updMenus == '-') { tmpMenu.html('<span class=\"label label-important\">" . JText::_('JNO') . "</span>'); if (!tmpRow.hasClass('no') || tmpRow.hasClass('')) { tmpRow.addClass('no '); } } if (updMenus > 0) { if (window.parent.inMenus.indexOf(parent.menuId) >= 0) { if (window.parent.numMenus == window.parent.inMenus.length) { tmpMenu.html('<span class=\"label label-info\">" . JText::_('JALL') . "</span>'); if (tmpRow.hasClass('no') || tmpRow.hasClass('')) { tmpRow.removeClass('no'); } } else { tmpMenu.html('<span class=\"label label-success\">" . JText::_('JYES') . "</span>'); if (tmpRow.hasClass('no')) { tmpRow.removeClass('no'); } } } if (window.parent.inMenus.indexOf(parent.menuId) < 0) { tmpMenu.html('<span class=\"label label-important\">" . JText::_('JNO') . "</span>'); if (!tmpRow.hasClass('no')) { tmpRow.addClass('no'); } } } if (updMenus < 0) { if (window.parent.inMenus.indexOf(parent.menuId) >= 0) { if (window.parent.numMenus == window.parent.inMenus.length) { tmpMenu.html('<span class=\"label label-info\">" . JText::_('JALL') . "</span>'); if (tmpRow.hasClass('no')) { tmpRow.removeClass('no'); } } else { tmpMenu.html('<span class=\"label label-success\">" . JText::_('JYES') . "</span>'); if (tmpRow.hasClass('no')) { tmpRow.removeClass('no'); } } } if (window.parent.inMenus.indexOf(parent.menuId) < 0) { tmpMenu.html('<span class=\"label label-important\">" . JText::_('JNO') . "</span>'); if (!tmpRow.hasClass('no') || tmpRow.hasClass('')) { tmpRow.addClass('no'); } } } if (updStatus == 1) { tmpStatus.html('<span class=\"label label-success\">" . JText::_('JYES') . "</span>'); if (tmpRow.hasClass('unpublished')) { tmpRow.removeClass('unpublished '); } } if (updStatus == 0) { tmpStatus.html('<span class=\"label label-important\">" . JText::_('JNO') . "</span>'); if (!tmpRow.hasClass('unpublished') || tmpRow.hasClass('')) { tmpRow.addClass('unpublished'); } } if (updStatus == -2) { tmpStatus.html('<span class=\"label label-default\">" . JText::_('JTRASHED') . "</span>'); if (!tmpRow.hasClass('unpublished') || tmpRow.hasClass('')) { tmpRow.addClass('unpublished'); } } if (document.formvalidator.isValid(document.getElementById('module-form'))) { jQuery('#title-" . $this->item->id . "', parent.document).text(updTitle); jQuery('#position-" . $this->item->id . "', parent.document).text(updPosition); jQuery('#access-" . $this->item->id . "', parent.document).html(parent.viewLevels[updAccess]); } } } if (task !== 'module.apply') { window.parent.jQuery('#module" . ((int) $this->item->id == 0 ? 'Add' : 'Edit' . (int) $this->item->id) . "Modal').modal('hide'); } } };"; JFactory::getDocument()->addScriptDeclaration($script); $input = JFactory::getApplication()->input; // In case of modal $isModal = $input->get('layout') == 'modal' ? true : false; $layout = $isModal ? 'modal' : 'edit'; $tmpl = $isModal || $input->get('tmpl', '', 'cmd') === 'component' ? '&tmpl=component' : ''; ?> <form action="<?php echo JRoute::_('index.php?option=com_modules&layout=' . $layout . $tmpl . '&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="module-form" class="form-validate"> <?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?> <div class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'general')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'general', JText::_('COM_MODULES_MODULE')); ?> <div class="row-fluid"> <div class="span9"> <?php if ($this->item->xml) : ?> <?php if ($this->item->xml->description) : ?> <h2> <?php if ($this->item->xml) { echo ($text = (string) $this->item->xml->name) ? JText::_($text) : $this->item->module; } else { echo JText::_('COM_MODULES_ERR_XML'); } ?> </h2> <div class="info-labels"> <span class="label hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_MODULES_FIELD_CLIENT_ID_LABEL'); ?>"> <?php echo $this->item->client_id == 0 ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); ?> </span> </div> <div> <?php $short_description = JText::_($this->item->xml->description); $this->fieldset = 'description'; $long_description = JLayoutHelper::render('joomla.edit.fieldset', $this); if (!$long_description) { $truncated = JHtmlString::truncate($short_description, 550, true, false); if (strlen($truncated) > 500) { $long_description = $short_description; $short_description = JHtmlString::truncate($truncated, 250); if ($short_description == $long_description) { $long_description = ''; } } } ?> <p><?php echo $short_description; ?></p> <?php if ($long_description) : ?> <p class="readmore"> <a href="#" onclick="jQuery('.nav-tabs a[href=\'#description\']').tab('show');"> <?php echo JText::_('JGLOBAL_SHOW_FULL_DESCRIPTION'); ?> </a> </p> <?php endif; ?> </div> <?php endif; ?> <?php else : ?> <div class="alert alert-error"><?php echo JText::_('COM_MODULES_ERR_XML'); ?></div> <?php endif; ?> <?php if ($hasContent) { echo $this->form->getInput($hasContentFieldName); } $this->fieldset = 'basic'; $html = JLayoutHelper::render('joomla.edit.fieldset', $this); echo $html ? '<hr />' . $html : ''; ?> </div> <div class="span3"> <fieldset class="form-vertical"> <?php echo $this->form->renderField('showtitle'); ?> <div class="control-group"> <div class="control-label"> <?php echo $this->form->getLabel('position'); ?> </div> <div class="controls"> <?php echo $this->loadTemplate('positions'); ?> </div> </div> </fieldset> <?php // Set main fields. $this->fields = array( 'published', 'publish_up', 'publish_down', 'access', 'ordering', 'language', 'note' ); ?> <?php echo JLayoutHelper::render('joomla.edit.global', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php if (isset($long_description) && $long_description != '') : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'description', JText::_('JGLOBAL_FIELDSET_DESCRIPTION')); ?> <?php echo $long_description; ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php if ($this->item->client_id == 0) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'assignment', JText::_('COM_MODULES_MENU_ASSIGNMENT')); ?> <?php echo $this->loadTemplate('assignment'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php $this->fieldsets = array(); $this->ignore_fieldsets = array('basic', 'description'); echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php if ($this->canDo->get('core.admin')) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'permissions', JText::_('COM_MODULES_FIELDSET_RULES')); ?> <?php echo $this->form->getInput('rules'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> <?php echo $this->form->getInput('module'); ?> <?php echo $this->form->getInput('client_id'); ?> </div> </form> PKb��\G�̸2components/com_modules/views/module/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); ?> <button id="applyBtn" type="button" class="hidden" onclick="Joomla.submitbutton('module.apply');"></button> <button id="saveBtn" type="button" class="hidden" onclick="Joomla.submitbutton('module.save');"></button> <button id="closeBtn" type="button" class="hidden" onclick="Joomla.submitbutton('module.cancel');"></button> <div class="container-popup"> <?php $this->setLayout('edit'); ?> <?php echo $this->loadTemplate(); ?> </div> PKb��\G �o221components/com_modules/views/module/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a module. * * @since 1.6 */ class ModulesViewModule extends JViewLegacy { protected $form; protected $item; protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); $this->canDo = JHelperContent::getActions('com_modules', 'module', $this->item->id); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); $canDo = $this->canDo; JToolbarHelper::title(JText::sprintf('COM_MODULES_MANAGER_MODULE', JText::_($this->item->module)), 'cube module'); // For new records, check the create permission. if ($isNew && $canDo->get('core.create')) { JToolbarHelper::apply('module.apply'); JToolbarHelper::save('module.save'); JToolbarHelper::save2new('module.save2new'); JToolbarHelper::cancel('module.cancel'); } else { // Can't save the record if it's checked out. if (!$checkedOut) { // Since it's an existing record, check the edit permission. if ($canDo->get('core.edit')) { JToolbarHelper::apply('module.apply'); JToolbarHelper::save('module.save'); // We can save this record, but check the create permission to see if we can return to make a new one. if ($canDo->get('core.create')) { JToolbarHelper::save2new('module.save2new'); } } } // If checked out, we can still save if ($canDo->get('core.create')) { JToolbarHelper::save2copy('module.save2copy'); } JToolbarHelper::cancel('module.cancel', 'JTOOLBAR_CLOSE'); } // Get the help information for the menu item. $lang = JFactory::getLanguage(); $help = $this->get('Help'); if ($lang->hasKey($help->url)) { $debug = $lang->setDebug(false); $url = JText::_($help->url); $lang->setDebug($debug); } else { $url = null; } JToolbarHelper::help($help->key, false, $url); } } PKb��\�QĖ��5components/com_modules/views/positions/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // @deprecated 4.0 without replacement only used in hathor defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('formbehavior.chosen', 'select'); $function = JFactory::getApplication()->input->getCmd('function', 'jSelectPosition'); $lang = JFactory::getLanguage(); $ordering = $this->escape($this->state->get('list.ordering')); $direction = $this->escape($this->state->get('list.direction')); $clientId = $this->state->get('client_id'); $state = $this->state->get('filter.state'); $template = $this->state->get('filter.template'); $type = $this->state->get('filter.type'); ?> <form action="<?php echo JRoute::_('index.php?option=com_modules&view=positions&layout=modal&tmpl=component&function=' . $function . '&client_id=' . $clientId); ?>" method="post" name="adminForm" id="adminForm"> <fieldset class="filter clearfix"> <div class="left"> <label for="filter_search"> <?php echo JText::_('JSEARCH_FILTER_LABEL'); ?> </label> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" size="30" title="<?php echo JText::_('COM_MODULES_FILTER_SEARCH_DESC'); ?>" /> <button type="submit"> <?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" onclick="document.getElementById('filter_search').value='';this.form.submit();"> <?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> <div class="right"> <select name="filter_state" onchange="this.form.submit()"> <option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('modules.templateStates'), 'value', 'text', $state, true); ?> </select> <select name="filter_type" onchange="this.form.submit()"> <option value=""><?php echo JText::_('COM_MODULES_OPTION_SELECT_TYPE'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('modules.types'), 'value', 'text', $type, true); ?> </select> <select name="filter_template" onchange="this.form.submit()"> <option value=""><?php echo JText::_('JOPTION_SELECT_TEMPLATE'); ?></option> <?php echo JHtml::_('select.options', JHtml::_('modules.templates', $clientId), 'value', 'text', $template, true); ?> </select> </div> </fieldset> <table class="adminlist"> <thead> <tr> <th class="title" width="20%"> <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'value', $direction, $ordering); ?> </th> <th> <?php echo JHtml::_('grid.sort', 'COM_MODULES_HEADING_TEMPLATES', 'templates', $direction, $ordering); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="15"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $i = 1; foreach ($this->items as $value => $templates) : ?> <tr class="row<?php echo $i = 1 - $i; ?>"> <td> <a class="pointer" onclick="if (window.parent) window.parent.<?php echo $function; ?>('<?php echo $value; ?>');"><?php echo $this->escape($value); ?></a> </td> <td> <?php if (!empty($templates)) : ?> <a class="pointer" onclick="if (window.parent) window.parent.<?php echo $function; ?>('<?php echo $value; ?>');"> <ul> <?php foreach ($templates as $template => $label) : ?> <li><?php echo $lang->hasKey($label) ? JText::sprintf('COM_MODULES_MODULE_TEMPLATE_POSITION', JText::_($template), JText::_($label)) : JText::_($template); ?></li> <?php endforeach; ?> </ul> </a> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <div> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="filter_order" value="<?php echo $ordering; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $direction; ?>" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\CL8���4components/com_modules/views/positions/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // @deprecated 4.0 without replacement only used in hathor defined('_JEXEC') or die; /** * View Module positions class. * * @since 1.6 */ class ModulesViewPositions extends JViewLegacy { protected $items; protected $pagination; protected $state; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } parent::display($tpl); } } PKb��\�����4components/com_modules/views/select/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.popover'); $document = JFactory::getDocument(); ?> <h2><?php echo JText::_('COM_MODULES_TYPE_CHOOSE'); ?></h2> <ul id="new-modules-list" class="list list-striped"> <?php foreach ($this->items as &$item) : ?> <?php // Prepare variables for the link. ?> <?php $link = 'index.php?option=com_modules&task=module.add&eid=' . $item->extension_id; ?> <?php $name = $this->escape($item->name); ?> <?php $desc = JHtml::_('string.truncate', $this->escape(strip_tags($item->desc)), 200); ?> <?php $short_desc = JHtml::_('string.truncate', $this->escape(strip_tags($item->desc)), 90); ?> <li> <a href="<?php echo JRoute::_($link); ?>"> <strong><?php echo $name; ?></strong></a> <small class="hasPopover" data-placement="right" title="<?php echo $name; ?>" data-content="<?php echo $desc; ?>"><?php echo $short_desc; ?></small> </li> <?php endforeach; ?> </ul> <div class="clr"></div> PKb��\n=�dd1components/com_modules/views/select/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Modules component * * @since 1.6 */ class ModulesViewSelect extends JViewLegacy { protected $state; protected $items; /** * Display the view * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { $state = $this->get('State'); $items = $this->get('Items'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->state = &$state; $this->items = &$items; $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); // Add page title if ($state->get('client_id') == 1) { JToolbarHelper::title(JText::_('COM_MODULES_MANAGER_MODULES_ADMIN'), 'cube module'); } else { JToolbarHelper::title(JText::_('COM_MODULES_MANAGER_MODULES_SITE'), 'cube module'); } // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); // Instantiate a new JLayoutFile instance and render the layout $layout = new JLayoutFile('toolbar.cancelselect'); $bar->appendButton('Custom', $layout->render(array()), 'new'); } } PKb��\p�zQ��&components/com_modules/helpers/xml.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; try { JLog::add('ModulesHelperXML is deprecated. Do not use.', JLog::WARNING, 'deprecated'); } catch (RuntimeException $exception) { // Informational log only } /** * Helper for parse XML module files * * @since 1.5 * @deprecated 3.2 Do not use. */ class ModulesHelperXML { /** * Parse the module XML file * * @param array &$rows XML rows * * @return void * * @since 1.5 * * @deprecated 3.2 Do not use. */ public function parseXMLModuleFile(&$rows) { foreach ($rows as $i => $row) { if ($row->module == '') { $rows[$i]->name = 'custom'; $rows[$i]->module = 'custom'; $rows[$i]->descrip = 'Custom created module, using Module Manager New function'; } else { $data = JInstaller::parseXMLInstallFile($row->path . '/' . $row->file); if ($data['type'] == 'module') { $rows[$i]->name = $data['name']; $rows[$i]->descrip = $data['description']; } } } } } PKb��\���K/components/com_modules/helpers/html/modules.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * JHtml module helper class. * * @since 1.6 */ abstract class JHtmlModules { /** * Builds an array of template options * * @param integer $clientId The client id. * @param string $state The state of the template. * * @return array */ public static function templates($clientId = 0, $state = '') { $options = array(); $templates = ModulesHelper::getTemplates($clientId, $state); foreach ($templates as $template) { $options[] = JHtml::_('select.option', $template->element, $template->name); } return $options; } /** * Builds an array of template type options * * @return array */ public static function types() { $options = array(); $options[] = JHtml::_('select.option', 'user', 'COM_MODULES_OPTION_POSITION_USER_DEFINED'); $options[] = JHtml::_('select.option', 'template', 'COM_MODULES_OPTION_POSITION_TEMPLATE_DEFINED'); return $options; } /** * Builds an array of template state options * * @return array */ public static function templateStates() { $options = array(); $options[] = JHtml::_('select.option', '1', 'JENABLED'); $options[] = JHtml::_('select.option', '0', 'JDISABLED'); return $options; } /** * Returns a published state on a grid * * @param integer $value The state value. * @param integer $i The row index * @param boolean $enabled An optional setting for access control on the action. * @param string $checkbox An optional prefix for checkboxes. * * @return string The Html code * * @see JHtmlJGrid::state * @since 1.7.1 */ public static function state($value, $i, $enabled = true, $checkbox = 'cb') { $states = array( 1 => array( 'unpublish', 'COM_MODULES_EXTENSION_PUBLISHED_ENABLED', 'COM_MODULES_HTML_UNPUBLISH_ENABLED', 'COM_MODULES_EXTENSION_PUBLISHED_ENABLED', true, 'publish', 'publish', ), 0 => array( 'publish', 'COM_MODULES_EXTENSION_UNPUBLISHED_ENABLED', 'COM_MODULES_HTML_PUBLISH_ENABLED', 'COM_MODULES_EXTENSION_UNPUBLISHED_ENABLED', true, 'unpublish', 'unpublish', ), -1 => array( 'unpublish', 'COM_MODULES_EXTENSION_PUBLISHED_DISABLED', 'COM_MODULES_HTML_UNPUBLISH_DISABLED', 'COM_MODULES_EXTENSION_PUBLISHED_DISABLED', true, 'warning', 'warning', ), -2 => array( 'publish', 'COM_MODULES_EXTENSION_UNPUBLISHED_DISABLED', 'COM_MODULES_HTML_PUBLISH_DISABLED', 'COM_MODULES_EXTENSION_UNPUBLISHED_DISABLED', true, 'unpublish', 'unpublish', ), ); return JHtml::_('jgrid.state', $states, $value, $i, 'modules.', $enabled, true, $checkbox); } /** * Display a batch widget for the module position selector. * * @param integer $clientId The client ID. * @param integer $state The state of the module (enabled, unenabled, trashed). * @param string $selectedPosition The currently selected position for the module. * * @return string The necessary positions for the widget. * * @since 2.5 */ public static function positions($clientId, $state = 1, $selectedPosition = '') { JLoader::register('TemplatesHelper', JPATH_ADMINISTRATOR . '/components/com_templates/helpers/templates.php'); $templates = array_keys(ModulesHelper::getTemplates($clientId, $state)); $templateGroups = array(); // Add an empty value to be able to deselect a module position $option = ModulesHelper::createOption(); $templateGroups[''] = ModulesHelper::createOptionGroup('', array($option)); // Add positions from templates $isTemplatePosition = false; foreach ($templates as $template) { $options = array(); $positions = TemplatesHelper::getPositions($clientId, $template); if (is_array($positions)) { foreach ($positions as $position) { $text = ModulesHelper::getTranslatedModulePosition($clientId, $template, $position) . ' [' . $position . ']'; $options[] = ModulesHelper::createOption($position, $text); if (!$isTemplatePosition && $selectedPosition === $position) { $isTemplatePosition = true; } } $options = ArrayHelper::sortObjects($options, 'text'); } $templateGroups[$template] = ModulesHelper::createOptionGroup(ucfirst($template), $options); } // Add custom position to options $customGroupText = JText::_('COM_MODULES_CUSTOM_POSITION'); $editPositions = true; $customPositions = ModulesHelper::getPositions($clientId, $editPositions); $templateGroups[$customGroupText] = ModulesHelper::createOptionGroup($customGroupText, $customPositions); return $templateGroups; } /** * Get a select with the batch action options * * @return void */ public static function batchOptions() { // Create the copy/move options. $options = array( JHtml::_('select.option', 'c', JText::_('JLIB_HTML_BATCH_COPY')), JHtml::_('select.option', 'm', JText::_('JLIB_HTML_BATCH_MOVE')) ); echo JHtml::_('select.radiolist', $options, 'batch[move_copy]', '', 'value', 'text', 'm'); } /** * Method to get the field options. * * @param integer $clientId The client ID * * @return array The field option objects. * * @since 2.5 */ public static function positionList($clientId = 0) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('DISTINCT(position) as value') ->select('position as text') ->from($db->quoteName('#__modules')) ->where($db->quoteName('client_id') . ' = ' . (int) $clientId) ->order('position'); // Get the options. $db->setQuery($query); try { $options = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } // Pop the first item off the array if it's blank if (count($options)) { if (strlen($options[0]->text) < 1) { array_shift($options); } } return $options; } } PKb��\ڑ�3#3#*components/com_modules/helpers/modules.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Modules component helper. * * @since 1.6 */ abstract class ModulesHelper { /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void */ public static function addSubmenu($vName) { // Not used in this component. } /** * Gets a list of the actions that can be performed. * * @param integer $moduleId The module ID. * * @return JObject * * @deprecated 3.2 Use JHelperContent::getActions() instead */ public static function getActions($moduleId = 0) { // Log usage of deprecated function try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions if (empty($moduleId)) { $result = JHelperContent::getActions('com_modules'); } else { $result = JHelperContent::getActions('com_modules', 'module', $moduleId); } return $result; } /** * Get a list of filter options for the state of a module. * * @return array An array of JHtmlOption elements. */ public static function getStateOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '1', JText::_('JPUBLISHED')); $options[] = JHtml::_('select.option', '0', JText::_('JUNPUBLISHED')); $options[] = JHtml::_('select.option', '-2', JText::_('JTRASHED')); $options[] = JHtml::_('select.option', '*', JText::_('JALL')); return $options; } /** * Get a list of filter options for the application clients. * * @return array An array of JHtmlOption elements. */ public static function getClientOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '0', JText::_('JSITE')); $options[] = JHtml::_('select.option', '1', JText::_('JADMINISTRATOR')); return $options; } /** * Get a list of modules positions * * @param integer $clientId Client ID * @param boolean $editPositions Allow to edit the positions * * @return array A list of positions */ public static function getPositions($clientId, $editPositions = false) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('DISTINCT(position)') ->from('#__modules') ->where($db->quoteName('client_id') . ' = ' . (int) $clientId) ->order('position'); $db->setQuery($query); try { $positions = $db->loadColumn(); $positions = is_array($positions) ? $positions : array(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); return; } // Build the list $options = array(); foreach ($positions as $position) { if (!$position && !$editPositions) { $options[] = JHtml::_('select.option', 'none', JText::_('COM_MODULES_NONE')); } else { $options[] = JHtml::_('select.option', $position, $position); } } return $options; } /** * Return a list of templates * * @param integer $clientId Client ID * @param string $state State * @param string $template Template name * * @return array List of templates */ public static function getTemplates($clientId = 0, $state = '', $template = '') { $db = JFactory::getDbo(); // Get the database object and a new query object. $query = $db->getQuery(true); // Build the query. $query->select('element, name, enabled') ->from('#__extensions') ->where('client_id = ' . (int) $clientId) ->where('type = ' . $db->quote('template')); if ($state != '') { $query->where('enabled = ' . $db->quote($state)); } if ($template != '') { $query->where('element = ' . $db->quote($template)); } // Set the query and load the templates. $db->setQuery($query); $templates = $db->loadObjectList('element'); return $templates; } /** * Get a list of the unique modules installed in the client application. * * @param int $clientId The client id. * * @return array Array of unique modules */ public static function getModules($clientId) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('element AS value, name AS text') ->from('#__extensions as e') ->where('e.client_id = ' . (int) $clientId) ->where('type = ' . $db->quote('module')) ->join('LEFT', '#__modules as m ON m.module=e.element AND m.client_id=e.client_id') ->where('m.module IS NOT NULL') ->group('element,name'); $db->setQuery($query); $modules = $db->loadObjectList(); $lang = JFactory::getLanguage(); foreach ($modules as $i => $module) { $extension = $module->value; $path = $clientId ? JPATH_ADMINISTRATOR : JPATH_SITE; $source = $path . "/modules/$extension"; $lang->load("$extension.sys", $path, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); $modules[$i]->text = JText::_($module->text); } $modules = ArrayHelper::sortObjects($modules, 'text', 1, true, true); return $modules; } /** * Get a list of the assignment options for modules to menus. * * @param int $clientId The client id. * * @return array */ public static function getAssignmentOptions($clientId) { $options = array(); $options[] = JHtml::_('select.option', '0', 'COM_MODULES_OPTION_MENU_ALL'); $options[] = JHtml::_('select.option', '-', 'COM_MODULES_OPTION_MENU_NONE'); if ($clientId == 0) { $options[] = JHtml::_('select.option', '1', 'COM_MODULES_OPTION_MENU_INCLUDE'); $options[] = JHtml::_('select.option', '-1', 'COM_MODULES_OPTION_MENU_EXCLUDE'); } return $options; } /** * Return a translated module position name * * @param integer $clientId Application client id 0: site | 1: admin * @param string $template Template name * @param string $position Position name * * @return string Return a translated position name * * @since 3.0 */ public static function getTranslatedModulePosition($clientId, $template, $position) { // Template translation $lang = JFactory::getLanguage(); $path = $clientId ? JPATH_ADMINISTRATOR : JPATH_SITE; $loaded = $lang->getPaths('tpl_' . $template . '.sys'); // Only load the template's language file if it hasn't been already if (!$loaded) { $lang->load('tpl_' . $template . '.sys', $path, null, false, false) || $lang->load('tpl_' . $template . '.sys', $path . '/templates/' . $template, null, false, false) || $lang->load('tpl_' . $template . '.sys', $path, $lang->getDefault(), false, false) || $lang->load('tpl_' . $template . '.sys', $path . '/templates/' . $template, $lang->getDefault(), false, false); } $langKey = strtoupper('TPL_' . $template . '_POSITION_' . $position); $text = JText::_($langKey); // Avoid untranslated strings if (!self::isTranslatedText($langKey, $text)) { // Modules component translation $langKey = strtoupper('COM_MODULES_POSITION_' . $position); $text = JText::_($langKey); // Avoid untranslated strings if (!self::isTranslatedText($langKey, $text)) { // Try to humanize the position name $text = ucfirst(preg_replace('/^' . $template . '\-/', '', $position)); $text = ucwords(str_replace(array('-', '_'), ' ', $text)); } } return $text; } /** * Check if the string was translated * * @param string $langKey Language file text key * @param string $text The "translated" text to be checked * * @return boolean Return true for translated text * * @since 3.0 */ public static function isTranslatedText($langKey, $text) { return $text !== $langKey; } /** * Create and return a new Option * * @param string $value The option value [optional] * @param string $text The option text [optional] * * @return object The option as an object (stdClass instance) * * @since 3.0 */ public static function createOption($value = '', $text = '') { if (empty($text)) { $text = $value; } $option = new stdClass; $option->value = $value; $option->text = $text; return $option; } /** * Create and return a new Option Group * * @param string $label Value and label for group [optional] * @param array $options Array of options to insert into group [optional] * * @return array Return the new group as an array * * @since 3.0 */ public static function createOptionGroup($label = '', $options = array()) { $group = array(); $group['value'] = $label; $group['text'] = $label; $group['items'] = $options; return $group; } } PKb��\Y'����"components/com_modules/modules.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); $user = JFactory::getUser(); $input = JFactory::getApplication()->input; if (($input->get('layout') !== 'modal' && $input->get('view') !== 'modules') && !$user->authorise('core.manage', 'com_modules')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Modules'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\N���0components/com_modules/models/forms/advanced.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fields name="params"> <fieldset name="advanced"> <field name="module_tag" type="moduletag" label="COM_MODULES_FIELD_MODULE_TAG_LABEL" description="COM_MODULES_FIELD_MODULE_TAG_DESC" default="div" /> <field name="bootstrap_size" type="integer" label="COM_MODULES_FIELD_BOOTSTRAP_SIZE_LABEL" description="COM_MODULES_FIELD_BOOTSTRAP_SIZE_DESC" first="0" last="12" step="1" /> <field name="header_tag" type="headertag" label="COM_MODULES_FIELD_HEADER_TAG_LABEL" description="COM_MODULES_FIELD_HEADER_TAG_DESC" default="h3" /> <field name="header_class" type="text" label="COM_MODULES_FIELD_HEADER_CLASS_LABEL" description="COM_MODULES_FIELD_HEADER_CLASS_DESC" /> <field name="style" type="chromestyle" label="COM_MODULES_FIELD_MODULE_STYLE_LABEL" description="COM_MODULES_FIELD_MODULE_STYLE_DESC" /> </fieldset> </fields> </form> PKb��\�#W��.components/com_modules/models/forms/module.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="id" type="number" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" default="0" readonly="true" /> <field name="title" type="text" label="JGLOBAL_TITLE" description="COM_MODULES_FIELD_TITLE_DESC" class="input-xxlarge input-large-text" size="40" maxlength="100" required="true" /> <field name="note" type="text" label="COM_MODULES_FIELD_NOTE_LABEL" description="COM_MODULES_FIELD_NOTE_DESC" maxlength="255" size="40" class="span12" /> <field name="module" type="hidden" label="COM_MODULES_FIELD_MODULE_LABEL" description="COM_MODULES_FIELD_MODULE_DESC" readonly="readonly" size="20" /> <field name="showtitle" type="radio" label="COM_MODULES_FIELD_SHOWTITLE_LABEL" description="COM_MODULES_FIELD_SHOWTITLE_DESC" class="btn-group btn-group-yesno" default="1" size="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="published" type="list" label="JSTATUS" description="COM_MODULES_FIELD_PUBLISHED_DESC" class="chzn-color-state" default="1" size="1" > <option value="1">JPUBLISHED</option> <option value="0">JUNPUBLISHED</option> <option value="-2">JTRASHED</option> </field> <field name="publish_up" type="calendar" label="COM_MODULES_FIELD_PUBLISH_UP_LABEL" description="COM_MODULES_FIELD_PUBLISH_UP_DESC" filter="user_utc" translateformat="true" showtime="true" size="22" /> <field name="publish_down" type="calendar" label="COM_MODULES_FIELD_PUBLISH_DOWN_LABEL" description="COM_MODULES_FIELD_PUBLISH_DOWN_DESC" filter="user_utc" translateformat="true" showtime="true" size="22" /> <field name="client_id" type="hidden" label="COM_MODULES_FIELD_CLIENT_ID_LABEL" description="COM_MODULES_FIELD_CLIENT_ID_DESC" readonly="true" size="1" /> <field name="position" type="moduleposition" label="COM_MODULES_FIELD_POSITION_LABEL" description="COM_MODULES_FIELD_POSITION_DESC" default="" maxlength="50" /> <field name="access" type="accesslevel" label="JFIELD_ACCESS_LABEL" description="JFIELD_ACCESS_DESC" size="1" /> <field name="ordering" type="moduleorder" label="JFIELD_ORDERING_LABEL" description="JFIELD_ORDERING_DESC" linked="position" /> <field name="content" type="editor" label="COM_MODULES_FIELD_CONTENT_LABEL" description="COM_MODULES_FIELD_CONTENT_DESC" buttons="true" filter="JComponentHelper::filterText" hide="readmore,pagebreak,module" /> <field name="language" type="contentlanguage" label="JFIELD_LANGUAGE_LABEL" description="JFIELD_MODULE_LANGUAGE_DESC" > <option value="*">JALL</option> </field> <field name="assignment" type="hidden" /> <field name="assigned" type="hidden" /> <field name="asset_id" type="hidden" filter="unset" /> <field name="rules" type="rules" label="JFIELD_RULES_LABEL" translate_label="false" filter="rules" component="com_modules" section="module" validate="rules" /> </fieldset> </form> PKb��\�?�VmVm(components/com_modules/models/module.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\String\StringHelper; use Joomla\Utilities\ArrayHelper; /** * Module model. * * @since 1.6 */ class ModulesModelModule extends JModelAdmin { /** * The type alias for this content type. * * @var string * @since 3.4 */ public $typeAlias = 'com_modules.module'; /** * @var string The prefix to use with controller messages. * @since 1.6 */ protected $text_prefix = 'COM_MODULES'; /** * @var string The help screen key for the module. * @since 1.6 */ protected $helpKey = 'JHELP_EXTENSIONS_MODULE_MANAGER_EDIT'; /** * @var string The help screen base URL for the module. * @since 1.6 */ protected $helpURL; /** * Batch copy/move command. If set to false, * the batch copy/move command is not supported * * @var string */ protected $batch_copymove = 'position_id'; /** * Allowed batch commands * * @var array */ protected $batch_commands = array( 'assetgroup_id' => 'batchAccess', 'language_id' => 'batchLanguage', ); /** * Constructor. * * @param array $config An optional associative array of configuration settings. */ public function __construct($config = array()) { $config = array_merge( array( 'event_after_delete' => 'onExtensionAfterDelete', 'event_after_save' => 'onExtensionAfterSave', 'event_before_delete' => 'onExtensionBeforeDelete', 'event_before_save' => 'onExtensionBeforeSave', 'events_map' => array( 'save' => 'extension', 'delete' => 'extension' ) ), $config ); parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { $app = JFactory::getApplication('administrator'); // Load the User state. $pk = $app->input->getInt('id'); if (!$pk) { if ($extensionId = (int) $app->getUserState('com_modules.add.module.extension_id')) { $this->setState('extension.id', $extensionId); } } $this->setState('module.id', $pk); // Load the parameters. $params = JComponentHelper::getParams('com_modules'); $this->setState('params', $params); } /** * Batch copy modules to a new position or current. * * @param integer $value The new value matching a module position. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 2.5 */ protected function batchCopy($value, $pks, $contexts) { // Set the variables $user = JFactory::getUser(); $table = $this->getTable(); $newIds = array(); foreach ($pks as $pk) { if ($user->authorise('core.create', 'com_modules')) { $table->reset(); $table->load($pk); // Set the new position if ($value == 'noposition') { $position = ''; } elseif ($value == 'nochange') { $position = $table->position; } else { $position = $value; } $table->position = $position; // Copy of the Asset ID $oldAssetId = $table->asset_id; // Alter the title if necessary $data = $this->generateNewTitle(0, $table->title, $table->position); $table->title = $data['0']; // Reset the ID because we are making a copy $table->id = 0; // Unpublish the new module $table->published = 0; if (!$table->store()) { $this->setError($table->getError()); return false; } // Get the new item ID $newId = $table->get('id'); // Add the new ID to the array $newIds[$pk] = $newId; // Now we need to handle the module assignments $db = $this->getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('menuid')) ->from($db->quoteName('#__modules_menu')) ->where($db->quoteName('moduleid') . ' = ' . $pk); $db->setQuery($query); $menus = $db->loadColumn(); // Insert the new records into the table foreach ($menus as $menu) { $query->clear() ->insert($db->quoteName('#__modules_menu')) ->columns(array($db->quoteName('moduleid'), $db->quoteName('menuid'))) ->values($newId . ', ' . $menu); $db->setQuery($query); $db->execute(); } // Copy rules $query->clear() ->update($db->quoteName('#__assets', 't')) ->join('INNER', $db->quoteName('#__assets', 's') . ' ON ' . $db->quoteName('s.id') . ' = ' . $oldAssetId ) ->set($db->quoteName('t.rules') . ' = ' . $db->quoteName('s.rules')) ->where($db->quoteName('t.id') . ' = ' . $table->asset_id); $db->setQuery($query)->execute(); } else { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_CREATE')); return false; } } // Clean the cache $this->cleanCache(); return $newIds; } /** * Batch move modules to a new position or current. * * @param integer $value The new value matching a module position. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 2.5 */ protected function batchMove($value, $pks, $contexts) { // Set the variables $user = JFactory::getUser(); $table = $this->getTable(); foreach ($pks as $pk) { if ($user->authorise('core.edit', 'com_modules')) { $table->reset(); $table->load($pk); // Set the new position if ($value == 'noposition') { $position = ''; } elseif ($value == 'nochange') { $position = $table->position; } else { $position = $value; } $table->position = $position; if (!$table->store()) { $this->setError($table->getError()); return false; } } else { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); return false; } } // Clean the cache $this->cleanCache(); return true; } /** * Method to test whether a record can have its state edited. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. * * @since 3.2 */ protected function canEditState($record) { // Check for existing module. if (!empty($record->id)) { return JFactory::getUser()->authorise('core.edit.state', 'com_modules.module.' . (int) $record->id); } // Default to component settings if module not known. return parent::canEditState($record); } /** * Method to delete rows. * * @param array &$pks An array of item ids. * * @return boolean Returns true on success, false on failure. * * @since 1.6 * @throws Exception */ public function delete(&$pks) { $dispatcher = JEventDispatcher::getInstance(); $pks = (array) $pks; $user = JFactory::getUser(); $table = $this->getTable(); $context = $this->option . '.' . $this->name; // Include the plugins for the on delete events. JPluginHelper::importPlugin($this->events_map['delete']); // Iterate the items to delete each one. foreach ($pks as $pk) { if ($table->load($pk)) { // Access checks. if (!$user->authorise('core.delete', 'com_modules.module.' . (int) $pk) || $table->published != -2) { JError::raiseWarning(403, JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); return; } // Trigger the before delete event. $result = $dispatcher->trigger($this->event_before_delete, array($context, $table)); if (in_array(false, $result, true) || !$table->delete($pk)) { throw new Exception($table->getError()); } else { // Delete the menu assignments $db = $this->getDbo(); $query = $db->getQuery(true) ->delete('#__modules_menu') ->where('moduleid=' . (int) $pk); $db->setQuery($query); $db->execute(); // Trigger the after delete event. $dispatcher->trigger($this->event_after_delete, array($context, $table)); } // Clear module cache parent::cleanCache($table->module, $table->client_id); } else { throw new Exception($table->getError()); } } // Clear modules cache $this->cleanCache(); return true; } /** * Method to duplicate modules. * * @param array &$pks An array of primary key IDs. * * @return boolean|JException Boolean true on success, JException instance on error * * @since 1.6 * @throws Exception */ public function duplicate(&$pks) { $user = JFactory::getUser(); $db = $this->getDbo(); // Access checks. if (!$user->authorise('core.create', 'com_modules')) { throw new Exception(JText::_('JERROR_CORE_CREATE_NOT_PERMITTED')); } $table = $this->getTable(); foreach ($pks as $pk) { if ($table->load($pk, true)) { // Reset the id to create a new record. $table->id = 0; // Alter the title. $m = null; if (preg_match('#\((\d+)\)$#', $table->title, $m)) { $table->title = preg_replace('#\(\d+\)$#', '(' . ($m[1] + 1) . ')', $table->title); } $data = $this->generateNewTitle(0, $table->title, $table->position); $table->title = $data[0]; // Unpublish duplicate module $table->published = 0; if (!$table->check() || !$table->store()) { throw new Exception($table->getError()); } $query = $db->getQuery(true) ->select($db->quoteName('menuid')) ->from($db->quoteName('#__modules_menu')) ->where($db->quoteName('moduleid') . ' = ' . (int) $pk); $db->setQuery($query); $rows = $db->loadColumn(); foreach ($rows as $menuid) { $tuples[] = (int) $table->id . ',' . (int) $menuid; } } else { throw new Exception($table->getError()); } } if (!empty($tuples)) { // Module-Menu Mapping: Do it in one query $query = $db->getQuery(true) ->insert($db->quoteName('#__modules_menu')) ->columns($db->quoteName(array('moduleid', 'menuid'))) ->values($tuples); $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { return JError::raiseWarning(500, $e->getMessage()); } } // Clear modules cache $this->cleanCache(); return true; } /** * Method to change the title. * * @param integer $category_id The id of the category. Not used here. * @param string $title The title. * @param string $position The position. * * @return array Contains the modified title. * * @since 2.5 */ protected function generateNewTitle($category_id, $title, $position) { // Alter the title & alias $table = $this->getTable(); while ($table->load(array('position' => $position, 'title' => $title))) { $title = StringHelper::increment($title); } return array($title); } /** * Method to get the client object * * @return void * * @since 1.6 */ public function &getClient() { return $this->_client; } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // The folder and element vars are passed when saving the form. if (empty($data)) { $item = $this->getItem(); $clientId = $item->client_id; $module = $item->module; $id = $item->id; } else { $clientId = ArrayHelper::getValue($data, 'client_id'); $module = ArrayHelper::getValue($data, 'module'); $id = ArrayHelper::getValue($data, 'id'); } // Add the default fields directory $baseFolder = $clientId ? JPATH_ADMINISTRATOR : JPATH_SITE; JForm::addFieldPath($baseFolder . '/modules' . '/' . $module . '/field'); // These variables are used to add data from the plugin XML files. $this->setState('item.client_id', $clientId); $this->setState('item.module', $module); // Get the form. if ($clientId == 1) { $form = $this->loadForm('com_modules.module.admin', 'moduleadmin', array('control' => 'jform', 'load_data' => $loadData), true); // Display language field to filter admin custom menus per language if (!JModuleHelper::isAdminMultilang()) { $form->setFieldAttribute('language', 'type', 'hidden'); } } else { $form = $this->loadForm('com_modules.module', 'module', array('control' => 'jform', 'load_data' => $loadData), true); } if (empty($form)) { return false; } $form->setFieldAttribute('position', 'client', $this->getState('item.client_id') == 0 ? 'site' : 'administrator'); $user = JFactory::getUser(); /** * Check for existing module * Modify the form based on Edit State access controls. */ if ($id != 0 && (!$user->authorise('core.edit.state', 'com_modules.module.' . (int) $id)) || ($id == 0 && !$user->authorise('core.edit.state', 'com_modules')) ) { // Disable fields for display. $form->setFieldAttribute('ordering', 'disabled', 'true'); $form->setFieldAttribute('published', 'disabled', 'true'); $form->setFieldAttribute('publish_up', 'disabled', 'true'); $form->setFieldAttribute('publish_down', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is a record you can edit. $form->setFieldAttribute('ordering', 'filter', 'unset'); $form->setFieldAttribute('published', 'filter', 'unset'); $form->setFieldAttribute('publish_up', 'filter', 'unset'); $form->setFieldAttribute('publish_down', 'filter', 'unset'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { $app = JFactory::getApplication(); // Check the session for previously entered form data. $data = $app->getUserState('com_modules.edit.module.data', array()); if (empty($data)) { $data = $this->getItem(); // Pre-select some filters (Status, Module Position, Language, Access Level) in edit form if those have been selected in Module Manager if (!$data->id) { $filters = (array) $app->getUserState('com_modules.modules.filter'); $data->set('published', $app->input->getInt('published', ((isset($filters['state']) && $filters['state'] !== '') ? $filters['state'] : null))); $data->set('position', $app->input->getInt('position', (!empty($filters['position']) ? $filters['position'] : null))); $data->set('language', $app->input->getString('language', (!empty($filters['language']) ? $filters['language'] : null))); $data->set('access', $app->input->getInt('access', (!empty($filters['access']) ? $filters['access'] : JFactory::getConfig()->get('access')))); } // Avoid to delete params of a second module opened in a new browser tab while new one is not saved yet. if (empty($data->params)) { // This allows us to inject parameter settings into a new module. $params = $app->getUserState('com_modules.add.module.params'); if (is_array($params)) { $data->set('params', $params); } } } $this->preprocessData('com_modules.module', $data); return $data; } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. * * @since 1.6 */ public function getItem($pk = null) { $pk = (!empty($pk)) ? (int) $pk : (int) $this->getState('module.id'); $db = $this->getDbo(); if (!isset($this->_cache[$pk])) { // Get a row instance. $table = $this->getTable(); // Attempt to load the row. $return = $table->load($pk); // Check for a table object error. if ($return === false && $error = $table->getError()) { $this->setError($error); return false; } // Check if we are creating a new extension. if (empty($pk)) { if ($extensionId = (int) $this->getState('extension.id')) { $query = $db->getQuery(true) ->select('element, client_id') ->from('#__extensions') ->where('extension_id = ' . $extensionId) ->where('type = ' . $db->quote('module')); $db->setQuery($query); try { $extension = $db->loadObject(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } if (empty($extension)) { $this->setError('COM_MODULES_ERROR_CANNOT_FIND_MODULE'); return false; } // Extension found, prime some module values. $table->module = $extension->element; $table->client_id = $extension->client_id; } else { JFactory::getApplication()->redirect(JRoute::_('index.php?option=com_modules&view=modules', false)); return false; } } // Convert to the JObject before adding other data. $properties = $table->getProperties(1); $this->_cache[$pk] = ArrayHelper::toObject($properties, 'JObject'); // Convert the params field to an array. $registry = new Registry($table->params); $this->_cache[$pk]->params = $registry->toArray(); // Determine the page assignment mode. $query = $db->getQuery(true) ->select($db->quoteName('menuid')) ->from($db->quoteName('#__modules_menu')) ->where($db->quoteName('moduleid') . ' = ' . (int) $pk); $db->setQuery($query); $assigned = $db->loadColumn(); if (empty($pk)) { // If this is a new module, assign to all pages. $assignment = 0; } elseif (empty($assigned)) { // For an existing module it is assigned to none. $assignment = '-'; } else { if ($assigned[0] > 0) { $assignment = 1; } elseif ($assigned[0] < 0) { $assignment = -1; } else { $assignment = 0; } } $this->_cache[$pk]->assigned = $assigned; $this->_cache[$pk]->assignment = $assignment; // Get the module XML. $client = JApplicationHelper::getClientInfo($table->client_id); $path = JPath::clean($client->path . '/modules/' . $table->module . '/' . $table->module . '.xml'); if (file_exists($path)) { $this->_cache[$pk]->xml = simplexml_load_file($path); } else { $this->_cache[$pk]->xml = null; } } return $this->_cache[$pk]; } /** * Get the necessary data to load an item help screen. * * @return object An object with key, url, and local properties for loading the item help screen. * * @since 1.6 */ public function getHelp() { return (object) array('key' => $this->helpKey, 'url' => $this->helpURL); } /** * Returns a reference to the a Table object, always creating it. * * @param string $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object * * @since 1.6 */ public function getTable($type = 'Module', $prefix = 'JTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Prepare and sanitise the table prior to saving. * * @param JTable $table The database object * * @return void * * @since 1.6 */ protected function prepareTable($table) { $table->title = htmlspecialchars_decode($table->title, ENT_QUOTES); $table->position = trim($table->position); } /** * Method to preprocess the form * * @param JForm $form A form object. * @param mixed $data The data expected for the form. * @param string $group The name of the plugin group to import (defaults to "content"). * * @return void * * @since 1.6 * @throws Exception if there is an error loading the form. */ protected function preprocessForm(JForm $form, $data, $group = 'content') { jimport('joomla.filesystem.path'); $lang = JFactory::getLanguage(); $clientId = $this->getState('item.client_id'); $module = $this->getState('item.module'); $client = JApplicationHelper::getClientInfo($clientId); $formFile = JPath::clean($client->path . '/modules/' . $module . '/' . $module . '.xml'); // Load the core and/or local language file(s). $lang->load($module, $client->path, null, false, true) || $lang->load($module, $client->path . '/modules/' . $module, null, false, true); if (file_exists($formFile)) { // Get the module form. if (!$form->loadFile($formFile, false, '//config')) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Attempt to load the xml file. if (!$xml = simplexml_load_file($formFile)) { throw new Exception(JText::_('JERROR_LOADFILE_FAILED')); } // Get the help data from the XML file if present. $help = $xml->xpath('/extension/help'); if (!empty($help)) { $helpKey = trim((string) $help[0]['key']); $helpURL = trim((string) $help[0]['url']); $this->helpKey = $helpKey ?: $this->helpKey; $this->helpURL = $helpURL ?: $this->helpURL; } } // Load the default advanced params JForm::addFormPath(JPATH_ADMINISTRATOR . '/components/com_modules/models/forms'); $form->loadFile('advanced', false); // Trigger the default form events. parent::preprocessForm($form, $data, $group); } /** * Loads ContentHelper for filters before validating data. * * @param object $form The form to validate against. * @param array $data The data to validate. * @param string $group The name of the group(defaults to null). * * @return mixed Array of filtered data if valid, false otherwise. * * @since 1.1 */ public function validate($form, $data, $group = null) { JLoader::register('ContentHelper', JPATH_ADMINISTRATOR . '/components/com_content/helpers/content.php'); return parent::validate($form, $data, $group); } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 1.6 */ public function save($data) { $dispatcher = JEventDispatcher::getInstance(); $input = JFactory::getApplication()->input; $table = $this->getTable(); $pk = (!empty($data['id'])) ? $data['id'] : (int) $this->getState('module.id'); $isNew = true; $context = $this->option . '.' . $this->name; // Include the plugins for the save event. JPluginHelper::importPlugin($this->events_map['save']); // Load the row if saving an existing record. if ($pk > 0) { $table->load($pk); $isNew = false; } // Alter the title and published state for Save as Copy if ($input->get('task') == 'save2copy') { $orig_table = clone $this->getTable(); $orig_table->load((int) $input->getInt('id')); $data['published'] = 0; if ($data['title'] == $orig_table->title) { $data['title'] = StringHelper::increment($data['title']); } } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Prepare the row for saving $this->prepareTable($table); // Check the data. if (!$table->check()) { $this->setError($table->getError()); return false; } // Trigger the before save event. $result = $dispatcher->trigger($this->event_before_save, array($context, &$table, $isNew)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } // Process the menu link mappings. $assignment = isset($data['assignment']) ? $data['assignment'] : 0; // Delete old module to menu item associations $db = $this->getDbo(); $query = $db->getQuery(true) ->delete('#__modules_menu') ->where('moduleid = ' . (int) $table->id); $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } // If the assignment is numeric, then something is selected (otherwise it's none). if (is_numeric($assignment)) { // Variable is numeric, but could be a string. $assignment = (int) $assignment; // Logic check: if no module excluded then convert to display on all. if ($assignment == -1 && empty($data['assigned'])) { $assignment = 0; } // Check needed to stop a module being assigned to `All` // and other menu items resulting in a module being displayed twice. if ($assignment === 0) { // Assign new module to `all` menu item associations. $query->clear() ->insert('#__modules_menu') ->columns(array($db->quoteName('moduleid'), $db->quoteName('menuid'))) ->values((int) $table->id . ', 0'); $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } } elseif (!empty($data['assigned'])) { // Get the sign of the number. $sign = $assignment < 0 ? -1 : 1; $query->clear() ->insert($db->quoteName('#__modules_menu')) ->columns($db->quoteName(array('moduleid', 'menuid'))); foreach ($data['assigned'] as &$pk) { $query->values((int) $table->id . ',' . (int) $pk * $sign); } $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } } } // Trigger the after save event. $dispatcher->trigger($this->event_after_save, array($context, &$table, $isNew)); // Compute the extension id of this module in case the controller wants it. $query->clear() ->select($db->quoteName('extension_id')) ->from($db->quoteName('#__extensions', 'e')) ->join( 'LEFT', $db->quoteName('#__modules', 'm') . ' ON ' . $db->quoteName('e.client_id') . ' = ' . (int) $table->client_id . ' AND ' . $db->quoteName('e.element') . ' = ' . $db->quoteName('m.module') ) ->where($db->quoteName('m.id') . ' = ' . (int) $table->id); $db->setQuery($query); try { $extensionId = $db->loadResult(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); return false; } $this->setState('module.extension_id', $extensionId); $this->setState('module.id', $table->id); // Clear modules cache $this->cleanCache(); // Clean module cache parent::cleanCache($table->module, $table->client_id); return true; } /** * A protected method to get a set of ordering conditions. * * @param object $table A record object. * * @return array An array of conditions to add to add to ordering queries. * * @since 1.6 */ protected function getReorderConditions($table) { $condition = array(); $condition[] = 'client_id = ' . (int) $table->client_id; $condition[] = 'position = ' . $this->_db->quote($table->position); return $condition; } /** * Custom clean cache method for different clients * * @param string $group The name of the plugin group to import (defaults to null). * @param integer $client_id The client ID. [optional] * * @return void * * @since 1.6 */ protected function cleanCache($group = null, $client_id = 0) { parent::cleanCache('com_modules', $this->getClient()); } } PKb��\B�G��+components/com_modules/models/positions.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Modules Component Positions Model * * @since 1.6 */ class ModulesModelPositions extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'value', 'templates', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'value', $direction = 'asc') { $app = JFactory::getApplication('administrator'); // Load the filter state. $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); $this->setState('filter.search', $search); $state = $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'string'); $this->setState('filter.state', $state); $template = $this->getUserStateFromRequest($this->context . '.filter.template', 'filter_template', '', 'string'); $this->setState('filter.template', $template); $type = $this->getUserStateFromRequest($this->context . '.filter.type', 'filter_type', '', 'string'); $this->setState('filter.type', $type); // Special case for the client id. $clientId = (int) $this->getUserStateFromRequest($this->context . '.client_id', 'client_id', 0, 'int'); $clientId = (!in_array((int) $clientId, array (0, 1))) ? 0 : (int) $clientId; $this->setState('client_id', $clientId); // Load the parameters. $params = JComponentHelper::getParams('com_modules'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get an array of data items. * * @return mixed An array of data items on success, false on failure. * * @since 1.6 */ public function getItems() { if (!isset($this->items)) { $lang = JFactory::getLanguage(); $search = $this->getState('filter.search'); $state = $this->getState('filter.state'); $clientId = $this->getState('client_id'); $filter_template = $this->getState('filter.template'); $type = $this->getState('filter.type'); $ordering = $this->getState('list.ordering'); $direction = $this->getState('list.direction'); $limitstart = $this->getState('list.start'); $limit = $this->getState('list.limit'); $client = JApplicationHelper::getClientInfo($clientId); if ($type != 'template') { // Get the database object and a new query object. $query = $this->_db->getQuery(true) ->select('DISTINCT(position) as value') ->from('#__modules') ->where($this->_db->quoteName('client_id') . ' = ' . (int) $clientId); if ($search) { $search = $this->_db->quote('%' . str_replace(' ', '%', $this->_db->escape(trim($search), true) . '%')); $query->where('position LIKE ' . $search); } $this->_db->setQuery($query); try { $positions = $this->_db->loadObjectList('value'); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } foreach ($positions as $value => $position) { $positions[$value] = array(); } } else { $positions = array(); } // Load the positions from the installed templates. foreach (ModulesHelper::getTemplates($clientId) as $template) { $path = JPath::clean($client->path . '/templates/' . $template->element . '/templateDetails.xml'); if (file_exists($path)) { $xml = simplexml_load_file($path); if (isset($xml->positions[0])) { $lang->load('tpl_' . $template->element . '.sys', $client->path, null, false, true) || $lang->load('tpl_' . $template->element . '.sys', $client->path . '/templates/' . $template->element, null, false, true); foreach ($xml->positions[0] as $position) { $value = (string) $position['value']; $label = (string) $position; if (!$value) { $value = $label; $label = preg_replace('/[^a-zA-Z0-9_\-]/', '_', 'TPL_' . $template->element . '_POSITION_' . $value); $altlabel = preg_replace('/[^a-zA-Z0-9_\-]/', '_', 'COM_MODULES_POSITION_' . $value); if (!$lang->hasKey($label) && $lang->hasKey($altlabel)) { $label = $altlabel; } } if ($type == 'user' || ($state != '' && $state != $template->enabled)) { unset($positions[$value]); } elseif (preg_match(chr(1) . $search . chr(1) . 'i', $value) && ($filter_template == '' || $filter_template == $template->element)) { if (!isset($positions[$value])) { $positions[$value] = array(); } $positions[$value][$template->name] = $label; } } } } } $this->total = count($positions); if ($limitstart >= $this->total) { $limitstart = $limitstart < $limit ? 0 : $limitstart - $limit; $this->setState('list.start', $limitstart); } if ($ordering == 'value') { if ($direction == 'asc') { ksort($positions); } else { krsort($positions); } } else { if ($direction == 'asc') { asort($positions); } else { arsort($positions); } } $this->items = array_slice($positions, $limitstart, $limit ?: null); } return $this->items; } /** * Method to get the total number of items. * * @return integer The total number of items. * * @since 1.6 */ public function getTotal() { if (!isset($this->total)) { $this->getItems(); } return $this->total; } } PKb��\�����(components/com_modules/models/select.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Module model. * * @since 1.6 */ class ModulesModelSelect extends JModelList { /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = null, $direction = null) { $app = JFactory::getApplication('administrator'); // Load the filter state. $clientId = $app->getUserState('com_modules.modules.client_id', 0); $this->setState('client_id', (int) $clientId); // Load the parameters. $params = JComponentHelper::getParams('com_modules'); $this->setState('params', $params); // Manually set limits to get all modules. $this->setState('list.limit', 0); $this->setState('list.start', 0); $this->setState('list.ordering', 'a.name'); $this->setState('list.direction', 'ASC'); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('client_id'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.extension_id, a.name, a.element AS module' ) ); $query->from($db->quoteName('#__extensions') . ' AS a'); // Filter by module $query->where('a.type = ' . $db->quote('module')); // Filter by client. $clientId = $this->getState('client_id'); $query->where('a.client_id = ' . (int) $clientId); // Filter by enabled $query->where('a.enabled = 1'); // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.ordering')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Method to get a list of items. * * @return mixed An array of objects on success, false on failure. */ public function getItems() { // Get the list of items from the database. $items = parent::getItems(); $client = JApplicationHelper::getClientInfo($this->getState('client_id', 0)); $lang = JFactory::getLanguage(); // Loop through the results to add the XML metadata, // and load language support. foreach ($items as &$item) { $path = JPath::clean($client->path . '/modules/' . $item->module . '/' . $item->module . '.xml'); if (file_exists($path)) { $item->xml = simplexml_load_file($path); } else { $item->xml = null; } // 1.5 Format; Core files or language packs then // 1.6 3PD Extension Support $lang->load($item->module . '.sys', $client->path, null, false, true) || $lang->load($item->module . '.sys', $client->path . '/modules/' . $item->module, null, false, true); $item->name = JText::_($item->name); if (isset($item->xml) && $text = trim($item->xml->description)) { $item->desc = JText::_($text); } else { $item->desc = JText::_('COM_MODULES_NODESCRIPTION'); } } $items = ArrayHelper::sortObjects($items, 'name', 1, true, true); // TODO: Use the cached XML from the extensions table? return $items; } } PKb��\��44)components/com_modules/models/modules.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Modules Component Module Model * * @since 1.5 */ class ModulesModelModules extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'title', 'a.title', 'checked_out', 'a.checked_out', 'checked_out_time', 'a.checked_out_time', 'published', 'a.published', 'state', 'access', 'a.access', 'ag.title', 'access_level', 'ordering', 'a.ordering', 'module', 'a.module', 'language', 'a.language', 'l.title', 'language_title', 'publish_up', 'a.publish_up', 'publish_down', 'a.publish_down', 'client_id', 'a.client_id', 'position', 'a.position', 'pages', 'name', 'e.name', 'menuitem', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.position', $direction = 'asc') { $app = JFactory::getApplication(); $layout = $app->input->get('layout', '', 'cmd'); // Adjust the context to support modal layouts. if ($layout) { $this->context .= '.' . $layout; } // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.position', $this->getUserStateFromRequest($this->context . '.filter.position', 'filter_position', '', 'string')); $this->setState('filter.module', $this->getUserStateFromRequest($this->context . '.filter.module', 'filter_module', '', 'string')); $this->setState('filter.menuitem', $this->getUserStateFromRequest($this->context . '.filter.menuitem', 'filter_menuitem', '', 'cmd')); $this->setState('filter.access', $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', '', 'cmd')); // If in modal layout on the frontend, state and language are always forced. if ($app->isClient('site') && $layout === 'modal') { $this->setState('filter.language', 'current'); $this->setState('filter.state', 1); } // If in backend (modal or not) we get the same fields from the user request. else { $this->setState('filter.language', $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', '', 'string')); $this->setState('filter.state', $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'string')); } // Special case for the client id. if ($app->isClient('site') || $layout === 'modal') { $this->setState('client_id', 0); $clientId = 0; } else { $clientId = (int) $this->getUserStateFromRequest($this->context . '.client_id', 'client_id', 0, 'int'); $clientId = (!in_array($clientId, array (0, 1))) ? 0 : $clientId; $this->setState('client_id', $clientId); } // Use a different filter file when client is administrator if ($clientId == 1) { $this->filterFormName = 'filter_modulesadmin'; } // Load the parameters. $params = JComponentHelper::getParams('com_modules'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('client_id'); $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.state'); $id .= ':' . $this->getState('filter.position'); $id .= ':' . $this->getState('filter.module'); $id .= ':' . $this->getState('filter.menuitem'); $id .= ':' . $this->getState('filter.access'); $id .= ':' . $this->getState('filter.language'); return parent::getStoreId($id); } /** * Returns an object list * * @param string $query The query * @param int $limitstart Offset * @param int $limit The number of records * * @return array */ protected function _getList($query, $limitstart = 0, $limit = 0) { $listOrder = $this->getState('list.ordering', 'a.position'); $listDirn = $this->getState('list.direction', 'asc'); // If ordering by fields that need translate we need to sort the array of objects after translating them. if (in_array($listOrder, array('pages', 'name'))) { // Fetch the results. $this->_db->setQuery($query); $result = $this->_db->loadObjectList(); // Translate the results. $this->translate($result); // Sort the array of translated objects. $result = ArrayHelper::sortObjects($result, $listOrder, strtolower($listDirn) == 'desc' ? -1 : 1, true, true); // Process pagination. $total = count($result); $this->cache[$this->getStoreId('getTotal')] = $total; if ($total < $limitstart) { $limitstart = 0; $this->setState('list.start', 0); } return array_slice($result, $limitstart, $limit ?: null); } // If ordering by fields that doesn't need translate just order the query. if ($listOrder === 'a.ordering') { $query->order($this->_db->quoteName('a.position') . ' ASC') ->order($this->_db->quoteName($listOrder) . ' ' . $this->_db->escape($listDirn)); } elseif ($listOrder === 'a.position') { $query->order($this->_db->quoteName($listOrder) . ' ' . $this->_db->escape($listDirn)) ->order($this->_db->quoteName('a.ordering') . ' ASC'); } else { $query->order($this->_db->quoteName($listOrder) . ' ' . $this->_db->escape($listDirn)); } // Process pagination. $result = parent::_getList($query, $limitstart, $limit); // Translate the results. $this->translate($result); return $result; } /** * Translate a list of objects * * @param array &$items The array of objects * * @return array The array of translated objects */ protected function translate(&$items) { $lang = JFactory::getLanguage(); $clientPath = $this->getState('client_id') ? JPATH_ADMINISTRATOR : JPATH_SITE; foreach ($items as $item) { $extension = $item->module; $source = $clientPath . "/modules/$extension"; $lang->load("$extension.sys", $clientPath, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); $item->name = JText::_($item->name); if (is_null($item->pages)) { $item->pages = JText::_('JNONE'); } elseif ($item->pages < 0) { $item->pages = JText::_('COM_MODULES_ASSIGNED_VARIES_EXCEPT'); } elseif ($item->pages > 0) { $item->pages = JText::_('COM_MODULES_ASSIGNED_VARIES_ONLY'); } else { $item->pages = JText::_('JALL'); } } } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery() { $app = JFactory::getApplication(); // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields. $query->select( $this->getState( 'list.select', 'a.id, a.title, a.note, a.position, a.module, a.language,' . 'a.checked_out, a.checked_out_time, a.published AS published, e.enabled AS enabled, a.access, a.ordering, a.publish_up, a.publish_down' ) ); // From modules table. $query->from($db->quoteName('#__modules', 'a')); // Join over the language $query->select($db->quoteName('l.title', 'language_title')) ->select($db->quoteName('l.image', 'language_image')) ->join('LEFT', $db->quoteName('#__languages', 'l') . ' ON ' . $db->quoteName('l.lang_code') . ' = ' . $db->quoteName('a.language')); // Join over the users for the checked out user. $query->select($db->quoteName('uc.name', 'editor')) ->join('LEFT', $db->quoteName('#__users', 'uc') . ' ON ' . $db->quoteName('uc.id') . ' = ' . $db->quoteName('a.checked_out')); // Join over the asset groups. $query->select($db->quoteName('ag.title', 'access_level')) ->join('LEFT', $db->quoteName('#__viewlevels', 'ag') . ' ON ' . $db->quoteName('ag.id') . ' = ' . $db->quoteName('a.access')); // Join over the module menus $query->select('MIN(mm.menuid) AS pages') ->join('LEFT', $db->quoteName('#__modules_menu', 'mm') . ' ON ' . $db->quoteName('mm.moduleid') . ' = ' . $db->quoteName('a.id')); // Join over the extensions $query->select($db->quoteName('e.name', 'name')) ->join('LEFT', $db->quoteName('#__extensions', 'e') . ' ON ' . $db->quoteName('e.element') . ' = ' . $db->quoteName('a.module')); // Group (careful with PostgreSQL) $query->group( 'a.id, a.title, a.note, a.position, a.module, a.language, a.checked_out, ' . 'a.checked_out_time, a.published, a.access, a.ordering, l.title, l.image, uc.name, ag.title, e.name, ' . 'l.lang_code, uc.id, ag.id, mm.moduleid, e.element, a.publish_up, a.publish_down, e.enabled' ); // Filter by client. $clientId = $this->getState('client_id'); $query->where($db->quoteName('a.client_id') . ' = ' . (int) $clientId . ' AND ' . $db->quoteName('e.client_id') . ' = ' . (int) $clientId); // Filter by current user access level. $user = JFactory::getUser(); // Get the current user for authorisation checks if ($user->authorise('core.admin') !== true) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where('a.access IN (' . $groups . ')'); } // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where($db->quoteName('a.access') . ' = ' . (int) $access); } // Filter by published state. $state = $this->getState('filter.state'); if (is_numeric($state)) { $query->where($db->quoteName('a.published') . ' = ' . (int) $state); } elseif ($state === '') { $query->where($db->quoteName('a.published') . ' IN (0, 1)'); } // Filter by position. if ($position = $this->getState('filter.position')) { $query->where($db->quoteName('a.position') . ' = ' . $db->quote(($position === 'none') ? '' : $position)); } // Filter by module. if ($module = $this->getState('filter.module')) { $query->where($db->quoteName('a.module') . ' = ' . $db->quote($module)); } // Filter by menuitem id (only for site client). if ((int) $clientId === 0 && $menuItemId = $this->getState('filter.menuitem')) { // If user selected the modules not assigned to any page (menu item). if ((int) $menuItemId === -1) { $query->having('MIN(' . $db->quoteName('mm.menuid') . ') IS NULL'); } // If user selected the modules assigned to some particlar page (menu item). else { // Modules in "All" pages. $subQuery1 = $db->getQuery(true); $subQuery1->select('MIN(' . $db->quoteName('menuid') . ')') ->from($db->quoteName('#__modules_menu')) ->where($db->quoteName('moduleid') . ' = ' . $db->quoteName('a.id')); // Modules in "Selected" pages that have the chosen menu item id. $subQuery2 = $db->getQuery(true); $subQuery2->select($db->quoteName('moduleid')) ->from($db->quoteName('#__modules_menu')) ->where($db->quoteName('menuid') . ' = ' . (int) $menuItemId); // Modules in "All except selected" pages that doesn't have the chosen menu item id. $subQuery3 = $db->getQuery(true); $subQuery3->select($db->quoteName('moduleid')) ->from($db->quoteName('#__modules_menu')) ->where($db->quoteName('menuid') . ' = -' . (int) $menuItemId); // Filter by modules assigned to the selected menu item. $query->where('( (' . $subQuery1 . ') = 0 OR ((' . $subQuery1 . ') > 0 AND ' . $db->quoteName('a.id') . ' IN (' . $subQuery2 . ')) OR ((' . $subQuery1 . ') < 0 AND ' . $db->quoteName('a.id') . ' NOT IN (' . $subQuery3 . ')) )' ); } } // Filter by search in title or note or id:. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where($db->quoteName('a.id') . ' = ' . (int) substr($search, 3)); } else { $search = $db->quote('%' . strtolower($search) . '%'); $query->where('(LOWER(a.title) LIKE ' . $search . ' OR LOWER(a.note) LIKE ' . $search . ')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { if ($language === 'current') { $query->where($db->quoteName('a.language') . ' IN (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ')'); } else { $query->where($db->quoteName('a.language') . ' = ' . $db->quote($language)); } } return $query; } } PKb��\�'�� � %components/com_modules/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_modules * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Modules manager master display controller. * * @since 1.6 */ class ModulesController extends JControllerLegacy { /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array|boolean $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()} * * @return JController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { $id = $this->input->getInt('id'); $document = JFactory::getDocument(); // For JSON requests if ($document->getType() == 'json') { $view = new ModulesViewModule; // Get/Create the model if ($model = new ModulesModelModule) { // Checkin table entry if (!$model->checkout($id)) { JFactory::getApplication()->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_CHECKIN_USER_MISMATCH'), 'error'); return false; } // Push the model into the view (as default) $view->setModel($model, true); } $view->document = $document; return $view->display(); } JLoader::register('ModulesHelper', JPATH_ADMINISTRATOR . '/components/com_modules/helpers/modules.php'); $layout = $this->input->get('layout', 'edit'); $id = $this->input->getInt('id'); // Check for edit form. if ($layout == 'edit' && !$this->checkEditId('com_modules.edit.module', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_modules&view=modules', false)); return false; } // Load the submenu. ModulesHelper::addSubmenu($this->input->get('view', 'modules')); // Check custom administrator menu modules if (JModuleHelper::isAdminMultilang()) { $languages = JLanguageHelper::getInstalledLanguages(1, true); $langCodes = array(); foreach ($languages as $language) { if (isset($language->metadata['nativeName'])) { $languageName = $language->metadata['nativeName']; } else { $languageName = $language->metadata['name']; } $langCodes[$language->metadata['tag']] = $languageName; } $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->qn('m.language')) ->from($db->qn('#__modules', 'm')) ->where($db->qn('m.module') . ' = ' . $db->quote('mod_menu')) ->where($db->qn('m.published') . ' = 1') ->where($db->qn('m.client_id') . ' = 1') ->group($db->qn('m.language')); $mLanguages = $db->setQuery($query)->loadColumn(); // Check if we have a mod_menu module set to All languages or a mod_menu module for each admin language. if (!in_array('*', $mLanguages) && count($langMissing = array_diff(array_keys($langCodes), $mLanguages))) { $app = JFactory::getApplication(); $langMissing = array_intersect_key($langCodes, array_flip($langMissing)); $app->enqueueMessage(JText::sprintf('JMENU_MULTILANG_WARNING_MISSING_MODULES', implode(', ', $langMissing)), 'warning'); } } return parent::display(); } } PKb��\�5�""components/com_login/login.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_login * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $input = JFactory::getApplication()->input; $task = $input->get('task'); if ($task != 'login' && $task != 'logout') { $input->set('task', ''); $task = ''; } $controller = JControllerLegacy::getInstance('Login'); $controller->execute($task); $controller->redirect(); PKb��\G�u��1components/com_login/views/login/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_login * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Get the login modules * If you want to use a completely different login module change the value of name * in your layout override. */ $loginmodule = LoginModelLogin::getLoginModule('mod_login'); echo JModuleHelper::renderModule($loginmodule, array('style' => 'rounded', 'id' => 'section-box')); /** * Get any other modules in the login position. * If you want to use a different position for the modules, change the name here in your override. */ $modules = JModuleHelper::getModules('login'); foreach ($modules as $module) // Render the login modules if ($module->module != 'mod_login'){ echo JModuleHelper::renderModule($module, array('style' => 'rounded', 'id' => 'section-box')); } PKb��\����.components/com_login/views/login/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_login * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Login component * * @since 1.6 */ class LoginViewLogin extends JViewLegacy { /** * Display the view. * * @param string $tpl The name of the template file to parse. * * @return void * * @since 3.7.0 */ public function display($tpl = null) { /** * To prevent clickjacking, only allow the login form to be used inside a frame in the same origin. * So send a X-Frame-Options HTTP Header with the SAMEORIGIN value. * * @link https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet * @link https://tools.ietf.org/html/rfc7034 */ JFactory::getApplication()->setHeader('X-Frame-Options', 'SAMEORIGIN'); return parent::display($tpl); } } PKb��\`Ƚ��components/com_login/login.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_login</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_LOGIN_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>controller.php</filename> <filename>login.php</filename> <folder>views</folder> <folder>models</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_login.ini</language> <language tag="en-GB">language/en-GB.com_login.sys.ini</language> </languages> </administration> </extension> PKb��\�/����%components/com_login/models/login.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_login * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Login Model * * @since 1.5 */ class LoginModelLogin extends JModelLegacy { /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { $input = JFactory::getApplication()->input->getInputForRequestMethod(); $credentials = array( 'username' => $input->get('username', '', 'USERNAME'), 'password' => $input->get('passwd', '', 'RAW'), 'secretkey' => $input->get('secretkey', '', 'RAW'), ); $this->setState('credentials', $credentials); // Check for return URL from the request first. if ($return = $input->get('return', '', 'BASE64')) { $return = base64_decode($return); if (!JUri::isInternal($return)) { $return = ''; } } // Set the return URL if empty. if (empty($return)) { $return = 'index.php'; } $this->setState('return', $return); } /** * Get the administrator login module by name (real, eg 'login' or folder, eg 'mod_login'). * * @param string $name The name of the module. * @param string $title The title of the module, optional. * * @return object The Module object. * * @since 1.7.0 */ public static function getLoginModule($name = 'mod_login', $title = null) { $result = null; $modules = self::_load($name); $total = count($modules); for ($i = 0; $i < $total; $i++) { // Match the title if we're looking for a specific instance of the module. if (!$title || $modules[$i]->title == $title) { $result = $modules[$i]; break; } } // If we didn't find it, and the name is mod_something, create a dummy object. if (is_null($result) && substr($name, 0, 4) == 'mod_') { $result = new stdClass; $result->id = 0; $result->title = ''; $result->module = $name; $result->position = ''; $result->content = ''; $result->showtitle = 0; $result->control = ''; $result->params = ''; $result->user = 0; } return $result; } /** * Load login modules. * * Note that we load regardless of state or access level since access * for public is the only thing that makes sense since users are not logged in * and the module lets them log in. * This is put in as a failsafe to avoid super user lock out caused by an unpublished * login module or by a module set to have a viewing access level that is not Public. * * @param string $module The name of the module. * * @return array * * @since 1.7.0 */ protected static function _load($module) { static $clean; if (isset($clean)) { return $clean; } $app = JFactory::getApplication(); $lang = JFactory::getLanguage()->getTag(); $clientId = (int) $app->getClientId(); /** @var JCacheControllerCallback $cache */ $cache = JFactory::getCache('com_modules', 'callback'); $loader = function () use ($app, $lang, $module) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('m.id, m.title, m.module, m.position, m.showtitle, m.params') ->from('#__modules AS m') ->where('m.module =' . $db->quote($module) . ' AND m.client_id = 1') ->join('LEFT', '#__extensions AS e ON e.element = m.module AND e.client_id = m.client_id') ->where('e.enabled = 1'); // Filter by language. if ($app->isClient('site') && $app->getLanguageFilter()) { $query->where('m.language IN (' . $db->quote($lang) . ',' . $db->quote('*') . ')'); } $query->order('m.position, m.ordering'); // Set the query. $db->setQuery($query); return $db->loadObjectList(); }; try { return $clean = $cache->get($loader, array(), md5(serialize(array($clientId, $lang)))); } catch (JCacheException $cacheException) { try { return $loader(); } catch (JDatabaseExceptionExecuting $databaseException) { JError::raiseWarning(500, JText::sprintf('JLIB_APPLICATION_ERROR_MODULE_LOAD', $databaseException->getMessage())); return array(); } } catch (JDatabaseExceptionExecuting $databaseException) { JError::raiseWarning(500, JText::sprintf('JLIB_APPLICATION_ERROR_MODULE_LOAD', $databaseException->getMessage())); return array(); } } } PKb��\D/N� � #components/com_login/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_login * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Login Controller. * * @since 1.5 */ class LoginController extends JControllerLegacy { /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { /* * Special treatment is required for this component, as this view may be called * after a session timeout. We must reset the view and layout prior to display * otherwise an error will occur. */ $this->input->set('view', 'login'); $this->input->set('layout', 'default'); // For non-html formats we do not have login view, so just display 403 instead if ($this->input->get('format', 'html') !== 'html') { throw new RuntimeException(JText::_('JERROR_ALERTNOAUTHOR'), 403); } parent::display(); } /** * Method to log in a user. * * @return void */ public function login() { // Check for request forgeries. $this->checkToken('request'); $app = JFactory::getApplication(); $model = $this->getModel('login'); $credentials = $model->getState('credentials'); $return = $model->getState('return'); $result = $app->login($credentials, array('action' => 'core.login.admin')); if ($result && !($result instanceof Exception)) { // Only redirect to an internal URL. if (JUri::isInternal($return)) { // If &tmpl=component - redirect to index.php if (strpos($return, 'tmpl=component') === false) { $app->redirect($return); } else { $app->redirect('index.php'); } } } $this->display(); } /** * Method to log out a user. * * @return void */ public function logout() { $this->checkToken('request'); $app = JFactory::getApplication(); $userid = $this->input->getInt('uid', null); if ($app->get('shared_session', '0')) { $clientid = null; } else { $clientid = $userid ? 0 : 1; } $options = array( 'clientid' => $clientid, ); $result = $app->logout($userid, $options); if (!($result instanceof Exception)) { $model = $this->getModel('login'); $return = $model->getState('return'); // Only redirect to an internal URL. if (JUri::isInternal($return)) { $app->redirect($return); } } parent::display(); } } PKb��\�i>cc"components/com_contact/contact.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); if (!JFactory::getUser()->authorise('core.manage', 'com_contact')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('contact'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\C��zz)components/com_contact/tables/contact.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\String\StringHelper; /** * Contact Table class. * * @since 1.0 */ class ContactTableContact extends JTable { /** * Ensure the params and metadata in json encoded in the bind method * * @var array * @since 3.3 */ protected $_jsonEncode = array('params', 'metadata'); /** * Constructor * * @param JDatabaseDriver $db Database connector object * * @since 1.0 */ public function __construct(&$db) { parent::__construct('#__contact_details', 'id', $db); $this->setColumnAlias('title', 'name'); JTableObserverTags::createObserver($this, array('typeAlias' => 'com_contact.contact')); JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_contact.contact')); } /** * Stores a contact. * * @param boolean $updateNulls True to update fields even if they are null. * * @return boolean True on success, false on failure. * * @since 1.6 */ public function store($updateNulls = false) { // Transform the params field if (is_array($this->params)) { $registry = new Registry($this->params); $this->params = (string) $registry; } $date = JFactory::getDate()->toSql(); $userId = JFactory::getUser()->id; $this->modified = $date; if ($this->id) { // Existing item $this->modified_by = $userId; } else { // New contact. A contact created and created_by field can be set by the user, // so we don't touch either of these if they are set. if (!(int) $this->created) { $this->created = $date; } if (empty($this->created_by)) { $this->created_by = $userId; } } // Set publish_up to null date if not set if (!$this->publish_up) { $this->publish_up = $this->_db->getNullDate(); } // Set publish_down to null date if not set if (!$this->publish_down) { $this->publish_down = $this->_db->getNullDate(); } // Set xreference to empty string if not set if (!$this->xreference) { $this->xreference = ''; } // Store utf8 email as punycode $this->email_to = JStringPunycode::emailToPunycode($this->email_to); // Convert IDN urls to punycode $this->webpage = JStringPunycode::urlToPunycode($this->webpage); // Verify that the alias is unique $table = JTable::getInstance('Contact', 'ContactTable', array('dbo' => $this->_db)); if ($table->load(array('alias' => $this->alias, 'catid' => $this->catid)) && ($table->id != $this->id || $this->id == 0)) { $this->setError(JText::_('COM_CONTACT_ERROR_UNIQUE_ALIAS')); return false; } return parent::store($updateNulls); } /** * Overloaded check function * * @return boolean True on success, false on failure * * @see JTable::check * @since 1.5 */ public function check() { $this->default_con = (int) $this->default_con; if (JFilterInput::checkAttribute(array('href', $this->webpage))) { $this->setError(JText::_('COM_CONTACT_WARNING_PROVIDE_VALID_URL')); return false; } // Check for valid name if (trim($this->name) == '') { $this->setError(JText::_('COM_CONTACT_WARNING_PROVIDE_VALID_NAME')); return false; } // Generate a valid alias $this->generateAlias(); // Check for valid category if (trim($this->catid) == '') { $this->setError(JText::_('COM_CONTACT_WARNING_CATEGORY')); return false; } // Sanity check for user_id if (!$this->user_id) { $this->user_id = 0; } // Check the publish down date is not earlier than publish up. if ((int) $this->publish_down > 0 && $this->publish_down < $this->publish_up) { $this->setError(JText::_('JGLOBAL_START_PUBLISH_AFTER_FINISH')); return false; } /* * Clean up keywords -- eliminate extra spaces between phrases * and cr (\r) and lf (\n) characters from string. * Only process if not empty. */ if (!empty($this->metakey)) { // Array of characters to remove. $badCharacters = array("\n", "\r", "\"", '<', '>'); // Remove bad characters. $afterClean = StringHelper::str_ireplace($badCharacters, '', $this->metakey); // Create array using commas as delimiter. $keys = explode(',', $afterClean); $cleanKeys = array(); foreach ($keys as $key) { // Ignore blank keywords. if (trim($key)) { $cleanKeys[] = trim($key); } } // Put array back together delimited by ", " $this->metakey = implode(', ', $cleanKeys); } // Clean up description -- eliminate quotes and <> brackets if (!empty($this->metadesc)) { // Only process if not empty $badCharacters = array("\"", '<', '>'); $this->metadesc = StringHelper::str_ireplace($badCharacters, '', $this->metadesc); } return true; } /** * Generate a valid alias from title / date. * Remains public to be able to check for duplicated alias before saving * * @return string */ public function generateAlias() { if (empty($this->alias)) { $this->alias = $this->name; } $this->alias = JApplicationHelper::stringURLSafe($this->alias, $this->language); if (trim(str_replace('-', '', $this->alias)) == '') { $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); } return $this->alias; } } PKb��\+AѰ � .components/com_contact/controllers/contact.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Controller for a single contact * * @since 1.6 */ class ContactControllerContact extends JControllerForm { /** * Method override to check if you can add a new record. * * @param array $data An array of input data. * * @return boolean * * @since 1.6 */ protected function allowAdd($data = array()) { $categoryId = ArrayHelper::getValue($data, 'catid', $this->input->getInt('filter_category_id'), 'int'); $allow = null; if ($categoryId) { // If the category has been passed in the URL check it. $allow = JFactory::getUser()->authorise('core.create', $this->option . '.category.' . $categoryId); } if ($allow === null) { // In the absense of better information, revert to the component permissions. return parent::allowAdd($data); } return $allow; } /** * Method override to check if you can edit an existing record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowEdit($data = array(), $key = 'id') { $recordId = (int) isset($data[$key]) ? $data[$key] : 0; // Since there is no asset tracking, fallback to the component permissions. if (!$recordId) { return parent::allowEdit($data, $key); } // Get the item. $item = $this->getModel()->getItem($recordId); // Since there is no item, return false. if (empty($item)) { return false; } $user = JFactory::getUser(); // Check if can edit own core.edit.own. $canEditOwn = $user->authorise('core.edit.own', $this->option . '.category.' . (int) $item->catid) && $item->created_by == $user->id; // Check the category core.edit permissions. return $canEditOwn || $user->authorise('core.edit', $this->option . '.category.' . (int) $item->catid); } /** * Method to run batch operations. * * @param object $model The model. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 2.5 */ public function batch($model = null) { $this->checkToken(); // Set the model /** @var ContactModelContact $model */ $model = $this->getModel('Contact', '', array()); // Preset the redirect $this->setRedirect(JRoute::_('index.php?option=com_contact&view=contacts' . $this->getRedirectToListAppend(), false)); return parent::batch($model); } } PKb��\\yb" /components/com_contact/controllers/contacts.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Contacts list controller class. * * @since 1.6 */ class ContactControllerContacts extends JControllerAdmin { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JControllerLegacy * @since 1.6 */ public function __construct($config = array()) { parent::__construct($config); $this->registerTask('unfeatured', 'featured'); } /** * Method to toggle the featured setting of a list of contacts. * * @return void * * @since 1.6 */ public function featured() { // Check for request forgeries $this->checkToken(); $ids = $this->input->get('cid', array(), 'array'); $values = array('featured' => 1, 'unfeatured' => 0); $task = $this->getTask(); $value = ArrayHelper::getValue($values, $task, 0, 'int'); // Get the model. /** @var ContactModelContact $model */ $model = $this->getModel(); // Access checks. foreach ($ids as $i => $id) { $item = $model->getItem($id); if (!JFactory::getUser()->authorise('core.edit.state', 'com_contact.category.' . (int) $item->catid)) { // Prune items that you can't change. unset($ids[$i]); JError::raiseNotice(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } } if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_CONTACT_NO_ITEM_SELECTED')); } else { // Publish the items. if (!$model->featured($ids, $value)) { JError::raiseWarning(500, $model->getError()); } if ($value == 1) { $message = JText::plural('COM_CONTACT_N_ITEMS_FEATURED', count($ids)); } else { $message = JText::plural('COM_CONTACT_N_ITEMS_UNFEATURED', count($ids)); } } $this->setRedirect('index.php?option=com_contact&view=contacts', $message); } /** * Proxy for getModel. * * @param string $name The name of the model. * @param string $prefix The prefix for the PHP class name. * @param array $config Array of configuration parameters. * * @return JModelLegacy * * @since 1.6 */ public function getModel($name = 'Contact', $prefix = 'ContactModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } } PKb��\�z{�ii!components/com_contact/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="contact" label="COM_CONTACT_FIELD_CONFIG_INDIVIDUAL_CONTACT_DISPLAY" description="COM_CONTACT_FIELD_CONFIG_INDIVIDUAL_CONTACT_DESC" addfieldpath="/administrator/components/com_fields/models/fields" > <field name="contact_layout" type="componentlayout" label="JGLOBAL_FIELD_LAYOUT_LABEL" description="JGLOBAL_FIELD_LAYOUT_DESC" menuitems="true" extension="com_contact" view="contact" /> <field name="show_contact_category" type="list" label="COM_CONTACT_FIELD_CONTACT_SHOW_CATEGORY_LABEL" description="COM_CONTACT_FIELD_CONTACT_SHOW_CATEGORY_DESC" default="hide" class="chzn-color" > <option value="hide">JHIDE</option> <option value="show_no_link">COM_CONTACT_FIELD_VALUE_NO_LINK</option> <option value="show_with_link">COM_CONTACT_FIELD_VALUE_WITH_LINK</option> </field> <field name="save_history" type="radio" label="JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL" description="JGLOBAL_SAVE_HISTORY_OPTIONS_DESC" default="0" class="btn-group btn-group-yesno" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="history_limit" type="number" label="JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL" description="JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC" default="10" filter="integer" showon="save_history:1" /> <field name="show_contact_list" type="radio" label="COM_CONTACT_FIELD_CONTACT_SHOW_LIST_LABEL" description="COM_CONTACT_FIELD_CONTACT_SHOW_LIST_DESC" default="0" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="presentation_style" type="list" label="COM_CONTACT_FIELD_PRESENTATION_LABEL" description="COM_CONTACT_FIELD_PRESENTATION_DESC" default="sliders" > <option value="sliders">COM_CONTACT_FIELD_VALUE_SLIDERS</option> <option value="tabs">COM_CONTACT_FIELD_VALUE_TABS</option> <option value="plain">COM_CONTACT_FIELD_VALUE_PLAIN</option> </field> <field name="show_tags" type="radio" label="COM_CONTACT_FIELD_SHOW_TAGS_LABEL" description="COM_CONTACT_FIELD_SHOW_TAGS_DESC" id="show_tags" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_info" type="radio" label="COM_CONTACT_FIELD_SHOW_INFO_LABEL" description="COM_CONTACT_FIELD_SHOW_INFO_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_name" type="radio" label="COM_CONTACT_FIELD_PARAMS_NAME_LABEL" description="COM_CONTACT_FIELD_PARAMS_NAME_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_position" type="radio" label="COM_CONTACT_FIELD_PARAMS_CONTACT_POSITION_LABEL" description="COM_CONTACT_FIELD_PARAMS_CONTACT_POSITION_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_email" type="radio" label="JGLOBAL_EMAIL" description="COM_CONTACT_FIELD_PARAMS_CONTACT_E_MAIL_DESC" default="0" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="add_mailto_link" type="radio" label="COM_CONTACT_FIELD_PARAMS_ADD_MAILTO_LINK_LABEL" description="COM_CONTACT_FIELD_PARAMS_ADD_MAILTO_LINK_DESC" class="btn-group btn-group-yesno" showon="show_info:1[AND]show_email:1" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="show_street_address" type="radio" label="COM_CONTACT_FIELD_PARAMS_STREET_ADDRESS_LABEL" description="COM_CONTACT_FIELD_PARAMS_STREET_ADDRESS_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_suburb" type="radio" label="COM_CONTACT_FIELD_PARAMS_TOWN-SUBURB_LABEL" description="COM_CONTACT_FIELD_PARAMS_TOWN-SUBURB_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_state" type="radio" label="COM_CONTACT_FIELD_PARAMS_STATE-COUNTY_LABEL" description="COM_CONTACT_FIELD_PARAMS_STATE-COUNTY_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_postcode" type="radio" label="COM_CONTACT_FIELD_PARAMS_POST-ZIP_CODE_LABEL" description="COM_CONTACT_FIELD_PARAMS_POST-ZIP_CODE_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_country" type="radio" label="COM_CONTACT_FIELD_PARAMS_COUNTRY_LABEL" description="COM_CONTACT_FIELD_PARAMS_COUNTRY_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_telephone" type="radio" label="COM_CONTACT_FIELD_PARAMS_TELEPHONE_LABEL" description="COM_CONTACT_FIELD_PARAMS_TELEPHONE_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_mobile" type="radio" label="COM_CONTACT_FIELD_PARAMS_MOBILE_LABEL" description="COM_CONTACT_FIELD_PARAMS_MOBILE_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_fax" type="radio" label="COM_CONTACT_FIELD_PARAMS_FAX_LABEL" description="COM_CONTACT_FIELD_PARAMS_FAX_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_webpage" type="radio" label="COM_CONTACT_FIELD_PARAMS_WEBPAGE_LABEL" description="COM_CONTACT_FIELD_PARAMS_WEBPAGE_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_image" type="radio" label="COM_CONTACT_FIELD_PARAMS_SHOW_IMAGE_LABEL" description="COM_CONTACT_FIELD_PARAMS_SHOW_IMAGE_DESC" default="1" class="btn-group btn-group-yesno" showon="show_info:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="image" type="media" label="COM_CONTACT_FIELD_PARAMS_IMAGE_LABEL" description="COM_CONTACT_FIELD_PARAMS_IMAGE_DESC" default="" showon="show_info:1[AND]show_image:1" /> <field name="show_misc" type="radio" label="COM_CONTACT_FIELD_PARAMS_MISC_INFO_LABEL" description="COM_CONTACT_FIELD_PARAMS_MISC_INFO_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="allow_vcard" type="radio" label="COM_CONTACT_FIELD_PARAMS_VCARD_LABEL" description="COM_CONTACT_FIELD_PARAMS_VCARD_DESC" default="0" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_articles" type="radio" label="COM_CONTACT_FIELD_ARTICLES_SHOW_LABEL" description="COM_CONTACT_FIELD_ARTICLES_SHOW_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="articles_display_num" type="list" label="COM_CONTACT_FIELD_ARTICLES_DISPLAY_NUM_LABEL" description="COM_CONTACT_FIELD_ARTICLES_DISPLAY_NUM_DESC" default="10" showon="show_articles:1" > <option value="use_contact">COM_CONTACT_FIELD_VALUE_USE_CONTACT_SETTINGS</option> <option value="5">J5</option> <option value="10">J10</option> <option value="15">J15</option> <option value="20">J20</option> <option value="25">J25</option> <option value="30">J30</option> <option value="50">J50</option> <option value="75">J75</option> <option value="100">J100</option> <option value="150">J150</option> <option value="200">J200</option> <option value="250">J250</option> <option value="300">J300</option> <option value="0">JALL</option> </field> <field name="show_profile" type="radio" label="COM_CONTACT_FIELD_PROFILE_SHOW_LABEL" description="COM_CONTACT_FIELD_PROFILE_SHOW_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_user_custom_fields" type="fieldgroups" label="COM_CONTACT_FIELD_USER_CUSTOM_FIELDS_SHOW_LABEL" description="COM_CONTACT_FIELD_USER_CUSTOM_FIELDS_SHOW_DESC" multiple="true" context="com_users.user" > <option value="-1">JALL</option> </field> <field name="show_links" type="radio" label="COM_CONTACT_FIELD_SHOW_LINKS_LABEL" description="COM_CONTACT_FIELD_SHOW_LINKS_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="linka_name" type="text" label="COM_CONTACT_FIELD_LINKA_NAME_LABEL" description="COM_CONTACT_FIELD_LINK_NAME_DESC" size="30" default="" showon="show_links:1" /> <field name="linkb_name" type="text" label="COM_CONTACT_FIELD_LINKB_NAME_LABEL" description="COM_CONTACT_FIELD_LINK_NAME_DESC" size="30" default="" showon="show_links:1" /> <field name="linkc_name" type="text" label="COM_CONTACT_FIELD_LINKC_NAME_LABEL" description="COM_CONTACT_FIELD_LINK_NAME_DESC" size="30" default="" showon="show_links:1" /> <field name="linkd_name" type="text" label="COM_CONTACT_FIELD_LINKD_NAME_LABEL" description="COM_CONTACT_FIELD_LINK_NAME_DESC" size="30" default="" showon="show_links:1" /> <field name="linke_name" type="text" label="COM_CONTACT_FIELD_LINKE_NAME_LABEL" description="COM_CONTACT_FIELD_LINK_NAME_DESC" size="30" default="" showon="show_links:1" /> </fieldset> <fieldset name="Icons" label="COM_CONTACT_ICONS_SETTINGS" description="COM_CONTACT_FIELD_CONFIG_INDIVIDUAL_CONTACT_DESC" > <field name="contact_icons" type="list" label="COM_CONTACT_FIELD_ICONS_SETTINGS_LABEL" description="COM_CONTACT_FIELD_ICONS_SETTINGS_DESC" default="0" > <option value="0">COM_CONTACT_FIELD_VALUE_ICONS</option> <option value="1">COM_CONTACT_FIELD_VALUE_TEXT</option> <option value="2">COM_CONTACT_FIELD_VALUE_NONE</option> </field> <field name="icon_address" type="media" label="COM_CONTACT_FIELD_ICONS_ADDRESS_LABEL" description="COM_CONTACT_FIELD_ICONS_ADDRESS_DESC" hide_none="1" default="" showon="contact_icons:0" /> <field name="icon_email" type="media" label="COM_CONTACT_FIELD_ICONS_EMAIL_LABEL" description="COM_CONTACT_FIELD_ICONS_EMAIL_DESC" hide_none="1" default="" showon="contact_icons:0" /> <field name="icon_telephone" type="media" label="COM_CONTACT_FIELD_ICONS_TELEPHONE_LABEL" description="COM_CONTACT_FIELD_ICONS_TELEPHONE_DESC" hide_none="1" default="" showon="contact_icons:0" /> <field name="icon_mobile" type="media" label="COM_CONTACT_FIELD_ICONS_MOBILE_LABEL" description="COM_CONTACT_FIELD_ICONS_MOBILE_DESC" hide_none="1" default="" showon="contact_icons:0" /> <field name="icon_fax" type="media" label="COM_CONTACT_FIELD_ICONS_FAX_LABEL" description="COM_CONTACT_FIELD_ICONS_FAX_DESC" hide_none="1" default="" showon="contact_icons:0" /> <field name="icon_misc" type="media" label="COM_CONTACT_FIELD_ICONS_MISC_LABEL" description="COM_CONTACT_FIELD_ICONS_MISC_DESC" hide_none="1" default="" showon="contact_icons:0" /> </fieldset> <fieldset name="Category" label="JCATEGORY" description="COM_CONTACT_FIELD_CONFIG_CATEGORY_DESC" > <field name="category_layout" type="componentlayout" label="JGLOBAL_FIELD_LAYOUT_LABEL" description="JGLOBAL_FIELD_LAYOUT_DESC" menuitems="true" extension="com_contact" view="category" /> <field name="show_category_title" type="radio" label="JGLOBAL_SHOW_CATEGORY_TITLE" description="JGLOBAL_SHOW_CATEGORY_TITLE_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_description" type="radio" label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL" description="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_description_image" type="radio" label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL" description="JGLOBAL_SHOW_CATEGORY_IMAGE_DESC" default="0" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="maxLevel" type="list" label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL" description="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_DESC" default="-1" > <option value="-1">JALL</option> <option value="0">JNONE</option> <option value="1">J1</option> <option value="2">J2</option> <option value="3">J3</option> <option value="4">J4</option> <option value="5">J5</option> </field> <field name="show_subcat_desc" type="radio" label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL" description="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_DESC" default="1" class="btn-group btn-group-yesno" showon="maxLevel:-1,1,2,3,4,5" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_empty_categories" type="radio" label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL" description="COM_CONTACT_SHOW_EMPTY_CATEGORIES_DESC" default="0" class="btn-group btn-group-yesno" showon="maxLevel:-1,1,2,3,4,5" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_cat_items" type="radio" label="COM_CONTACT_FIELD_SHOW_CAT_ITEMS_LABEL" description="COM_CONTACT_FIELD_SHOW_CAT_ITEMS_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_cat_tags" type="radio" label="COM_CONTACT_FIELD_SHOW_CAT_TAGS_LABEL" description="COM_CONTACT_FIELD_SHOW_CAT_TAGS_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="categories" label="JCATEGORIES" description="COM_CONTACT_FIELD_CONFIG_CATEGORIES_DESC" > <field name="show_base_description" type="radio" label="JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_LABEL" description="JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="maxLevelcat" type="list" label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL" description="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_DESC" default="-1" > <option value="-1">JALL</option> <option value="0">JNONE</option> <option value="1">J1</option> <option value="2">J2</option> <option value="3">J3</option> <option value="4">J4</option> <option value="5">J5</option> </field> <field name="show_subcat_desc_cat" type="radio" label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL" description="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_DESC" default="1" class="btn-group btn-group-yesno" showon="maxLevelcat:-1,1,2,3,4,5" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_empty_categories_cat" type="radio" label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL" description="COM_CONTACT_SHOW_EMPTY_CATEGORIES_DESC" default="0" class="btn-group btn-group-yesno" showon="maxLevelcat:-1,1,2,3,4,5" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_cat_items_cat" type="radio" label="COM_CONTACT_FIELD_SHOW_CAT_ITEMS_LABEL" description="COM_CONTACT_FIELD_SHOW_CAT_ITEMS_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="contacts" label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="COM_CONTACT_FIELD_CONFIG_TABLE_OF_CONTACTS_DESC" > <field name="filter_field" type="radio" label="JGLOBAL_FILTER_FIELD_LABEL" description="JGLOBAL_FILTER_FIELD_DESC" default="0" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_pagination_limit" type="radio" label="JGLOBAL_DISPLAY_SELECT_LABEL" description="JGLOBAL_DISPLAY_SELECT_DESC" default="0" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_headings" type="radio" label="JGLOBAL_SHOW_HEADINGS_LABEL" description="JGLOBAL_SHOW_HEADINGS_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_image_heading" type="radio" label="COM_CONTACT_FIELD_CONFIG_SHOW_IMAGE_LABEL" description="COM_CONTACT_FIELD_CONFIG_SHOW_IMAGE_DESC" default="0" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_position_headings" type="radio" label="COM_CONTACT_FIELD_CONFIG_POSITION_LABEL" description="COM_CONTACT_FIELD_CONFIG_POSITION_DESC" default="1" class="btn-group btn-group-yesno" showon="show_headings:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_email_headings" type="radio" label="JGLOBAL_EMAIL" description="COM_CONTACT_FIELD_CONFIG_EMAIL_DESC" default="0" class="btn-group btn-group-yesno" showon="show_headings:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_telephone_headings" type="radio" label="COM_CONTACT_FIELD_CONFIG_PHONE_LABEL" description="COM_CONTACT_FIELD_CONFIG_PHONE_DESC" default="1" class="btn-group btn-group-yesno" showon="show_headings:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_mobile_headings" type="radio" label="COM_CONTACT_FIELD_CONFIG_MOBILE_LABEL" description="COM_CONTACT_FIELD_CONFIG_MOBILE_DESC" default="0" class="btn-group btn-group-yesno" showon="show_headings:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_fax_headings" type="radio" label="COM_CONTACT_FIELD_CONFIG_FAX_LABEL" description="COM_CONTACT_FIELD_CONFIG_FAX_DESC" default="0" class="btn-group btn-group-yesno" showon="show_headings:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_suburb_headings" type="radio" label="COM_CONTACT_FIELD_CONFIG_SUBURB_LABEL" description="COM_CONTACT_FIELD_CONFIG_SUBURB_DESC" default="0" class="btn-group btn-group-yesno" showon="show_headings:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_state_headings" type="radio" label="COM_CONTACT_FIELD_CONFIG_STATE_LABEL" description="COM_CONTACT_FIELD_CONFIG_STATE_DESC" default="0" class="btn-group btn-group-yesno" showon="show_headings:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_country_headings" type="radio" label="COM_CONTACT_FIELD_CONFIG_COUNTRY_LABEL" description="COM_CONTACT_FIELD_CONFIG_COUNTRY_DESC" default="0" class="btn-group btn-group-yesno" showon="show_headings:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_pagination" type="list" label="JGLOBAL_PAGINATION_LABEL" description="JGLOBAL_PAGINATION_DESC" default="2" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> <option value="2">JGLOBAL_AUTO</option> </field> <field name="show_pagination_results" type="radio" label="JGLOBAL_PAGINATION_RESULTS_LABEL" description="JGLOBAL_PAGINATION_RESULTS_DESC" default="1" class="btn-group btn-group-yesno" showon="show_pagination:1,2" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="initial_sort" type="list" label="COM_CONTACT_FIELD_INITIAL_SORT_LABEL" description="COM_CONTACT_FIELD_INITIAL_SORT_DESC" default="ordering" validate="options" > <option value="name">COM_CONTACT_FIELD_VALUE_NAME</option> <option value="sortname">COM_CONTACT_FIELD_VALUE_SORT_NAME</option> <option value="ordering">COM_CONTACT_FIELD_VALUE_ORDERING</option> </field> </fieldset> <fieldset name="Contact_Form" label="COM_CONTACT_FIELD_CONFIG_CONTACT_FORM" description="COM_CONTACT_FIELD_CONFIG_INDIVIDUAL_CONTACT_DESC" > <field name="captcha" type="plugins" label="COM_CONTACT_FIELD_CAPTCHA_LABEL" description="COM_CONTACT_FIELD_CAPTCHA_DESC" folder="captcha" filter="cmd" useglobal="true" > <option value="0">JOPTION_DO_NOT_USE</option> </field> <field name="show_email_form" type="radio" label="COM_CONTACT_FIELD_EMAIL_SHOW_FORM_LABEL" description="COM_CONTACT_FIELD_EMAIL_SHOW_FORM_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_email_copy" type="radio" label="COM_CONTACT_FIELD_EMAIL_EMAIL_COPY_LABEL" description="COM_CONTACT_FIELD_EMAIL_EMAIL_COPY_DESC" default="0" class="btn-group btn-group-yesno" showon="show_email_form:1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="banned_email" type="textarea" label="COM_CONTACT_FIELD_CONFIG_BANNED_EMAIL_LABEL" description="COM_CONTACT_FIELD_CONFIG_BANNED_EMAIL_DESC" default="" rows="3" cols="30" showon="show_email_form:1" /> <field name="banned_subject" type="textarea" label="COM_CONTACT_FIELD_CONFIG_BANNED_SUBJECT_LABEL" description="COM_CONTACT_FIELD_CONFIG_BANNED_SUBJECT_DESC" default="" rows="3" cols="30" showon="show_email_form:1" /> <field name="banned_text" type="textarea" label="COM_CONTACT_FIELD_CONFIG_BANNED_TEXT_LABEL" description="COM_CONTACT_FIELD_CONFIG_BANNED_TEXT_DESC" default="" rows="3" cols="30" showon="show_email_form:1" /> <field name="validate_session" type="radio" label="COM_CONTACT_FIELD_CONFIG_SESSION_CHECK_LABEL" description="COM_CONTACT_FIELD_CONFIG_SESSION_CHECK_DESC" default="1" class="btn-group btn-group-yesno" showon="show_email_form:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="custom_reply" type="radio" label="COM_CONTACT_FIELD_CONFIG_CUSTOM_REPLY_LABEL" description="COM_CONTACT_FIELD_CONFIG_CUSTOM_REPLY_DESC" default="0" class="btn-group btn-group-yesno" showon="show_email_form:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="redirect" type="text" label="COM_CONTACT_FIELD_CONFIG_REDIRECT_LABEL" description="COM_CONTACT_FIELD_CONFIG_REDIRECT_DESC" default="" size="30" showon="show_email_form:1" /> </fieldset> <fieldset name="integration" label="JGLOBAL_INTEGRATION_LABEL" description="COM_CONTACT_CONFIG_INTEGRATION_SETTINGS_DESC" > <field name="integration_newsfeeds" type="note" label="JGLOBAL_FEED_TITLE" /> <field name="show_feed_link" type="radio" label="JGLOBAL_SHOW_FEED_LINK_LABEL" description="JGLOBAL_SHOW_FEED_LINK_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="integration_sef" type="note" label="JGLOBAL_SEF_TITLE" /> <field name="sef_advanced" type="radio" class="btn-group btn-group-yesno btn-group-reversed" default="0" label="JGLOBAL_SEF_ADVANCED_LABEL" description="JGLOBAL_SEF_ADVANCED_DESC" filter="integer" > <option value="0">JGLOBAL_SEF_ADVANCED_LEGACY</option> <option value="1">JGLOBAL_SEF_ADVANCED_MODERN</option> </field> <field name="sef_ids" type="radio" label="JGLOBAL_SEF_NOIDS_LABEL" description="JGLOBAL_SEF_NOIDS_DESC" class="btn-group btn-group-yesno" default="0" showon="sef_advanced:1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="integration_customfields" type="note" label="JGLOBAL_FIELDS_TITLE" /> <field name="custom_fields_enable" type="radio" label="JGLOBAL_CUSTOM_FIELDS_ENABLE_LABEL" description="JGLOBAL_CUSTOM_FIELDS_ENABLE_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" validate="rules" filter="rules" component="com_contact" section="component" /> </fieldset> </config> PKb��\��,,3components/com_contact/sql/uninstall.mysql.utf8.sqlnu�[���DROP TABLE IF EXISTS `#__contact_details`; PKb��\��a�� � 1components/com_contact/sql/install.mysql.utf8.sqlnu�[���-- -- Table structure for table `#__contact_details` -- CREATE TABLE IF NOT EXISTS `#__contact_details` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL DEFAULT '', `alias` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '', `con_position` varchar(255) DEFAULT NULL, `address` text, `suburb` varchar(100) DEFAULT NULL, `state` varchar(100) DEFAULT NULL, `country` varchar(100) DEFAULT NULL, `postcode` varchar(100) DEFAULT NULL, `telephone` varchar(255) DEFAULT NULL, `fax` varchar(255) DEFAULT NULL, `misc` mediumtext, `image` varchar(255) DEFAULT NULL, `email_to` varchar(255) DEFAULT NULL, `default_con` tinyint(1) unsigned NOT NULL DEFAULT 0, `published` tinyint(1) NOT NULL DEFAULT 0, `checked_out` int(10) unsigned NOT NULL DEFAULT 0, `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `ordering` int(11) NOT NULL DEFAULT 0, `params` text NOT NULL, `user_id` int(11) NOT NULL DEFAULT 0, `catid` int(11) NOT NULL DEFAULT 0, `access` int(10) unsigned NOT NULL DEFAULT 0, `mobile` varchar(255) NOT NULL DEFAULT '', `webpage` varchar(255) NOT NULL DEFAULT '', `sortname1` varchar(255) NOT NULL, `sortname2` varchar(255) NOT NULL, `sortname3` varchar(255) NOT NULL, `language` char(7) NOT NULL, `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created_by` int(10) unsigned NOT NULL DEFAULT 0, `created_by_alias` varchar(255) NOT NULL DEFAULT '', `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(10) unsigned NOT NULL DEFAULT 0, `metakey` text NOT NULL, `metadesc` text NOT NULL, `metadata` text NOT NULL, `featured` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT 'Set if contact is featured.', `xreference` varchar(50) NOT NULL COMMENT 'A reference to enable linkages to external data sets.', `publish_up` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `publish_down` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `version` int(10) unsigned NOT NULL DEFAULT 1, `hits` int(10) unsigned NOT NULL DEFAULT 0, PRIMARY KEY (`id`), KEY `idx_access` (`access`), KEY `idx_checkout` (`checked_out`), KEY `idx_state` (`published`), KEY `idx_catid` (`catid`), KEY `idx_createdby` (`created_by`), KEY `idx_featured_catid` (`featured`,`catid`), KEY `idx_language` (`language`), KEY `idx_xreference` (`xreference`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci; PKb��\n e>� � !components/com_contact/access.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <access component="com_contact"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> <action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_COMPONENT_DESC" /> <action name="core.edit.value" title="JACTION_EDITVALUE" description="JACTION_EDITVALUE_COMPONENT_DESC" /> </section> <section name="category"> <action name="core.create" title="JACTION_CREATE" description="COM_CATEGORIES_ACCESS_CREATE_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="COM_CATEGORIES_ACCESS_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_CATEGORIES_ACCESS_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_CATEGORIES_ACCESS_EDITSTATE_DESC" /> <action name="core.edit.own" title="JACTION_EDITOWN" description="COM_CATEGORIES_ACCESS_EDITOWN_DESC" /> </section> <section name="fieldgroup"> <action name="core.create" title="JACTION_CREATE" description="COM_FIELDS_GROUP_PERMISSION_CREATE_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="COM_FIELDS_GROUP_PERMISSION_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_FIELDS_GROUP_PERMISSION_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_FIELDS_GROUP_PERMISSION_EDITSTATE_DESC" /> <action name="core.edit.own" title="JACTION_EDITOWN" description="COM_FIELDS_GROUP_PERMISSION_EDITOWN_DESC" /> <action name="core.edit.value" title="JACTION_EDITVALUE" description="COM_FIELDS_GROUP_PERMISSION_EDITVALUE_DESC" /> </section> <section name="field"> <action name="core.delete" title="JACTION_DELETE" description="COM_FIELDS_FIELD_PERMISSION_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_FIELDS_FIELD_PERMISSION_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_FIELDS_FIELD_PERMISSION_EDITSTATE_DESC" /> <action name="core.edit.value" title="JACTION_EDITVALUE" description="COM_FIELDS_FIELD_PERMISSION_EDITVALUE_DESC" /> </section> </access>PKb��\c^p���:components/com_contact/views/contact/tmpl/modal_params.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : $paramstabs = 'params-' . $name; echo JHtml::_('bootstrap.addTab', 'myTab', $paramstabs, JText::_($fieldSet->label)); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="alert alert-info">' . $this->escape(JText::_($fieldSet->description)) . '</p>'; endif; ?> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <div class="control-group"> <div class="control-label"><?php echo $field->label; ?></div> <div class="controls"><?php echo $field->input; ?></div> </div> <?php endforeach; ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endforeach; ?> PKb��\v1��UU?components/com_contact/views/contact/tmpl/edit_associations.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.associations', $this); PKb��\{$�T��2components/com_contact/views/contact/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', '#jform_catid', null, array('disable_search_threshold' => 0 )); JHtml::_('formbehavior.chosen', '#jform_tags', null, array('placeholder_text_multiple' => JText::_('JGLOBAL_TYPE_OR_SELECT_SOME_TAGS'))); JHtml::_('formbehavior.chosen', 'select'); $app = JFactory::getApplication(); $input = $app->input; $assoc = JLanguageAssociations::isEnabled(); JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(task) { if (task == "contact.cancel" || document.formvalidator.isValid(document.getElementById("contact-form"))) { ' . $this->form->getField('misc')->save() . ' Joomla.submitform(task, document.getElementById("contact-form")); // @deprecated 4.0 The following js is not needed since 3.7.0. if (task !== "contact.apply") { window.parent.jQuery("#contactEdit' . $this->item->id . 'Modal").modal("hide"); } } }; '); // Fieldsets to not automatically render by /layouts/joomla/edit/params.php $this->ignore_fieldsets = array('details', 'item_associations', 'jmetadata'); // In case of modal $isModal = $input->get('layout') == 'modal' ? true : false; $layout = $isModal ? 'modal' : 'edit'; $tmpl = $isModal || $input->get('tmpl', '', 'cmd') === 'component' ? '&tmpl=component' : ''; ?> <form action="<?php echo JRoute::_('index.php?option=com_contact&layout=' . $layout . $tmpl . '&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="contact-form" class="form-validate"> <?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?> <div class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'details')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'details', empty($this->item->id) ? JText::_('COM_CONTACT_NEW_CONTACT') : JText::_('COM_CONTACT_EDIT_CONTACT')); ?> <div class="row-fluid"> <div class="span9"> <div class="row-fluid form-horizontal-desktop float-cols" > <div class="span6"> <?php echo $this->form->renderField('user_id'); ?> <?php echo $this->form->renderField('image'); ?> <?php echo $this->form->renderField('con_position'); ?> <?php echo $this->form->renderField('email_to'); ?> <?php echo $this->form->renderField('address'); ?> <?php echo $this->form->renderField('suburb'); ?> <?php echo $this->form->renderField('state'); ?> <?php echo $this->form->renderField('postcode'); ?> <?php echo $this->form->renderField('country'); ?> </div> <div class="span6"> <?php echo $this->form->renderField('telephone'); ?> <?php echo $this->form->renderField('mobile'); ?> <?php echo $this->form->renderField('fax'); ?> <?php echo $this->form->renderField('webpage'); ?> <?php echo $this->form->renderField('sortname1'); ?> <?php echo $this->form->renderField('sortname2'); ?> <?php echo $this->form->renderField('sortname3'); ?> </div> </div> </div> <div class="span3"> <?php echo JLayoutHelper::render('joomla.edit.global', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'misc', JText::_('JGLOBAL_FIELDSET_MISCELLANEOUS')); ?> <div class="row-fluid form-horizontal-desktop"> <div class="form-vertical"> <?php echo $this->form->renderField('misc'); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'publishing', JText::_('JGLOBAL_FIELDSET_PUBLISHING')); ?> <div class="row-fluid form-horizontal-desktop"> <div class="span6"> <?php echo JLayoutHelper::render('joomla.edit.publishingdata', $this); ?> </div> <div class="span6"> <?php echo JLayoutHelper::render('joomla.edit.metadata', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php if ( ! $isModal && $assoc) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'associations', JText::_('JGLOBAL_FIELDSET_ASSOCIATIONS')); ?> <?php echo $this->loadTemplate('associations'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php elseif ($isModal && $assoc) : ?> <div class="hidden"><?php echo $this->loadTemplate('associations'); ?></div> <?php endif; ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> </div> <input type="hidden" name="task" value="" /> <input type="hidden" name="forcedLanguage" value="<?php echo $input->get('forcedLanguage', '', 'cmd'); ?>" /> <?php echo JHtml::_('form.token'); ?> </form> PKb��\c^p���9components/com_contact/views/contact/tmpl/edit_params.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : $paramstabs = 'params-' . $name; echo JHtml::_('bootstrap.addTab', 'myTab', $paramstabs, JText::_($fieldSet->label)); if (isset($fieldSet->description) && trim($fieldSet->description)) : echo '<p class="alert alert-info">' . $this->escape(JText::_($fieldSet->description)) . '</p>'; endif; ?> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <div class="control-group"> <div class="control-label"><?php echo $field->label; ?></div> <div class="controls"><?php echo $field->input; ?></div> </div> <?php endforeach; ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endforeach; ?> PKb��\v1��UU@components/com_contact/views/contact/tmpl/modal_associations.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.associations', $this); PKb��\%���nn3components/com_contact/views/contact/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); // @deprecated 4.0 the function parameter, the inline js and the buttons are not needed since 3.7.0. $function = JFactory::getApplication()->input->getCmd('function', 'jEditContact_' . (int) $this->item->id); // Function to update input title when changed JFactory::getDocument()->addScriptDeclaration(' function jEditContactModal() { if (window.parent && document.formvalidator.isValid(document.getElementById("contact-form"))) { return window.parent.' . $this->escape($function) . '(document.getElementById("jform_name").value); } } '); ?> <button id="applyBtn" type="button" class="hidden" onclick="Joomla.submitbutton('contact.apply'); jEditContactModal();"></button> <button id="saveBtn" type="button" class="hidden" onclick="Joomla.submitbutton('contact.save'); jEditContactModal();"></button> <button id="closeBtn" type="button" class="hidden" onclick="Joomla.submitbutton('contact.cancel');"></button> <div class="container-popup"> <?php $this->setLayout('edit'); ?> <?php echo $this->loadTemplate(); ?> </div> PKb��\)ϽfQQ;components/com_contact/views/contact/tmpl/edit_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.metadata', $this); PKb��\)ϽfQQ<components/com_contact/views/contact/tmpl/modal_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.metadata', $this); PKb��\��^//2components/com_contact/views/contact/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a contact. * * @since 1.6 */ class ContactViewContact extends JViewLegacy { /** * The JForm object * * @var JForm */ protected $form; /** * The active item * * @var object */ protected $item; /** * The model state * * @var object */ protected $state; /** * Display the view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { // Initialise variables. $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // If we are forcing a language in modal (used for associations). if ($this->getLayout() === 'modal' && $forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'cmd')) { // Set the language field to the forcedLanguage and disable changing it. $this->form->setValue('language', null, $forcedLanguage); $this->form->setFieldAttribute('language', 'readonly', 'true'); // Only allow to select categories with All language or with the forced language. $this->form->setFieldAttribute('catid', 'language', '*,' . $forcedLanguage); // Only allow to select tags with All language or with the forced language. $this->form->setFieldAttribute('tags', 'language', '*,' . $forcedLanguage); } $this->addToolbar(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $user = JFactory::getUser(); $userId = $user->id; $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $userId); // Since we don't track these assets at the item level, use the category id. $canDo = JHelperContent::getActions('com_contact', 'category', $this->item->catid); JToolbarHelper::title($isNew ? JText::_('COM_CONTACT_MANAGER_CONTACT_NEW') : JText::_('COM_CONTACT_MANAGER_CONTACT_EDIT'), 'address contact'); // Build the actions for new and existing records. if ($isNew) { // For new records, check the create permission. if ($isNew && (count($user->getAuthorisedCategories('com_contact', 'core.create')) > 0)) { JToolbarHelper::apply('contact.apply'); JToolbarHelper::save('contact.save'); JToolbarHelper::save2new('contact.save2new'); } JToolbarHelper::cancel('contact.cancel'); } else { // Since it's an existing record, check the edit permission, or fall back to edit own if the owner. $itemEditable = $canDo->get('core.edit') || ($canDo->get('core.edit.own') && $this->item->created_by == $userId); // Can't save the record if it's checked out and editable if (!$checkedOut && $itemEditable) { JToolbarHelper::apply('contact.apply'); JToolbarHelper::save('contact.save'); // We can save this record, but check the create permission to see if we can return to make a new one. if ($canDo->get('core.create')) { JToolbarHelper::save2new('contact.save2new'); } } // If checked out, we can still save if ($canDo->get('core.create')) { JToolbarHelper::save2copy('contact.save2copy'); } if (JComponentHelper::isEnabled('com_contenthistory') && $this->state->params->get('save_history', 0) && $itemEditable) { JToolbarHelper::versions('com_contact.contact', $this->item->id); } if (JLanguageAssociations::isEnabled() && JComponentHelper::isEnabled('com_associations')) { JToolbarHelper::custom('contact.editAssociations', 'contract', 'contract', 'JTOOLBAR_ASSOCIATIONS', false, false); } JToolbarHelper::cancel('contact.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_COMPONENTS_CONTACTS_CONTACTS_EDIT'); } } PKb��\��\�ggAcomponents/com_contact/views/contacts/tmpl/default_batch_body.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $published = $this->state->get('filter.published'); ?> <div class="container-fluid"> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.item', 'com_contact'); ?> </div> </div> <?php endif; ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.tag'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.user'); ?> </div> </div> </div> </div> PKb��\/l�j##Ccomponents/com_contact/views/contacts/tmpl/default_batch_footer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <button type="button" class="btn" onclick="document.getElementById('batch-category-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value='';document.getElementById('batch-user-id').value='';document.getElementById('batch-tag-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button type="submit" class="btn btn-success" onclick="Joomla.submitbutton('contact.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> PKb��\�t;�]]4components/com_contact/views/contacts/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $app = JFactory::getApplication(); if ($app->isClient('site')) { JSession::checkToken('get') or die(JText::_('JINVALID_TOKEN')); } JLoader::register('ContactHelperRoute', JPATH_ROOT . '/components/com_contact/helpers/route.php'); JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.core'); JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); JHtml::_('bootstrap.popover', '.hasPopover', array('placement' => 'bottom')); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.polyfill', array('event'), 'lt IE 9'); JHtml::_('script', 'com_contact/admin-contacts-modal.min.js', array('version' => 'auto', 'relative' => true)); // Special case for the search field tooltip. $searchFilterDesc = $this->filterForm->getFieldAttribute('search', 'description', null, 'filter'); JHtml::_('bootstrap.tooltip', '#filter_search', array('title' => JText::_($searchFilterDesc), 'placement' => 'bottom')); $function = $app->input->getCmd('function', 'jSelectContact'); $editor = $app->input->getCmd('editor', ''); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $onclick = $this->escape($function); if (!empty($editor)) { // This view is used also in com_menus. Load the xtd script only if the editor is set! JFactory::getDocument()->addScriptOptions('xtd-contacts', array('editor' => $editor)); $onclick = "jSelectContact"; } ?> <div class="container-popup"> <form action="<?php echo JRoute::_('index.php?option=com_contact&view=contacts&layout=modal&tmpl=component&function=' . $function . '&' . JSession::getFormToken() . '=1'); ?>" method="post" name="adminForm" id="adminForm" class="form-inline"> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped table-condensed"> <thead> <tr> <th width="1%" class="center nowrap"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="nowrap title"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.name', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_CONTACT_FIELD_LINKED_USER_LABEL', 'ul.name', $listDirn, $listOrder); ?> </th> <th width="15%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'language_title', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="6"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $iconStates = array( -2 => 'icon-trash', 0 => 'icon-unpublish', 1 => 'icon-publish', 2 => 'icon-archive', ); ?> <?php foreach ($this->items as $i => $item) : ?> <?php if ($item->language && JLanguageMultilang::isEnabled()) { $tag = strlen($item->language); if ($tag == 5) { $lang = substr($item->language, 0, 2); } elseif ($tag == 6) { $lang = substr($item->language, 0, 3); } else { $lang = ''; } } elseif (!JLanguageMultilang::isEnabled()) { $lang = ''; } ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <span class="<?php echo $iconStates[$this->escape($item->published)]; ?>" aria-hidden="true"></span> </td> <td> <a class="select-link" href="javascript:void(0)" data-function="<?php echo $this->escape($onclick); ?>" data-id="<?php echo $item->id; ?>" data-title="<?php echo $this->escape($item->name); ?>" data-uri="<?php echo $this->escape(ContactHelperRoute::getContactRoute($item->id, $item->catid, $item->language)); ?>" data-language="<?php echo $this->escape($lang); ?>"> <?php echo $this->escape($item->name); ?> </a> <?php echo $this->escape($item->name); ?></a> <div class="small"> <?php echo JText::_('JCATEGORY') . ': ' . $this->escape($item->category_title); ?> </div> </td> <td> <?php if (!empty($item->linked_user)) : ?> <?php echo $item->linked_user; ?> <?php endif; ?> </td> <td class="small hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <td class="small hidden-phone"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td align="center"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="forcedLanguage" value="<?php echo $app->input->get('forcedLanguage', '', 'CMD'); ?>" /> <?php echo JHtml::_('form.token'); ?> </form> </div> PKb��\���[� � 6components/com_contact/views/contacts/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $userId = $user->get('id'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = $listOrder == 'a.ordering'; $assoc = JLanguageAssociations::isEnabled(); if ($saveOrder) { $saveOrderingUrl = 'index.php?option=com_contact&task=contacts.saveOrderAjax&tmpl=component'; JHtml::_('sortablelist.sortable', 'contactList', 'adminForm', strtolower($listDirn), $saveOrderingUrl); } ?> <form action="<?php echo JRoute::_('index.php?option=com_contact'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty($this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"></div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="contactList"> <thead> <tr> <th width="1%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', '', 'a.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" style="min-width:55px" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.name', $listDirn, $listOrder); ?> </th> <th class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_CONTACT_FIELD_LINKED_USER_LABEL', 'ul.name', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <?php if ($assoc) : ?> <th width="5%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_CONTACT_HEADING_ASSOCIATION', 'association', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th width="15%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'language_title', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="10"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $n = count($this->items); foreach ($this->items as $i => $item) : $canCreate = $user->authorise('core.create', 'com_contact.category.' . $item->catid); $canEdit = $user->authorise('core.edit', 'com_contact.category.' . $item->catid); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $userId || $item->checked_out == 0; $canEditOwn = $user->authorise('core.edit.own', 'com_contact.category.' . $item->catid) && $item->created_by == $userId; $canChange = $user->authorise('core.edit.state', 'com_contact.category.' . $item->catid) && $canCheckin; $item->cat_link = JRoute::_('index.php?option=com_categories&extension=com_contact&task=edit&type=other&id=' . $item->catid); ?> <tr class="row<?php echo $i % 2; ?>" sortable-group-id="<?php echo $item->catid; ?>"> <td class="order nowrap center hidden-phone"> <?php $iconClass = ''; if (!$canChange) { $iconClass = ' inactive'; } elseif (!$saveOrder) { $iconClass = ' inactive tip-top hasTooltip" title="' . JHtml::_('tooltipText', 'JORDERINGDISABLED'); } ?> <span class="sortable-handler<?php echo $iconClass; ?>"> <span class="icon-menu" aria-hidden="true"></span> </span> <?php if ($canChange && $saveOrder) : ?> <input type="text" style="display:none" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order" /> <?php endif; ?> </td> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td class="center"> <div class="btn-group"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'contacts.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> <?php echo JHtml::_('contact.featured', $item->featured, $i, $canChange); ?> <?php // Create dropdown items and render the dropdown list. if ($canChange) { JHtml::_('actionsdropdown.' . ((int) $item->published === 2 ? 'un' : '') . 'archive', 'cb' . $i, 'contacts'); JHtml::_('actionsdropdown.' . ((int) $item->published === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'contacts'); echo JHtml::_('actionsdropdown.render', $this->escape($item->name)); } ?> </div> </td> <td class="has-context"> <div class="pull-left break-word"> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'contacts.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit || $canEditOwn) : ?> <a href="<?php echo JRoute::_('index.php?option=com_contact&task=contact.edit&id=' . (int) $item->id); ?>"><?php echo $this->escape($item->name); ?></a> <?php else : ?> <?php echo $this->escape($item->name); ?> <?php endif; ?> <span class="small"> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?> </span> <div class="small"> <?php echo JText::_('JCATEGORY') . ': ' . $this->escape($item->category_title); ?> </div> </div> </td> <td class="small hidden-phone hidden-tablet"> <?php if (!empty($item->linked_user)) : ?> <a href="<?php echo JRoute::_('index.php?option=com_users&task=user.edit&id=' . $item->user_id); ?>"><?php echo $item->linked_user; ?></a> <div class="small"><?php echo $item->email; ?></div> <?php endif; ?> </td> <td class="small hidden-phone"> <?php echo $item->access_level; ?> </td> <?php if ($assoc) : ?> <td class="hidden-phone hidden-tablet"> <?php if ($item->association) : ?> <?php echo JHtml::_('contact.association', $item->id); ?> <?php endif; ?> </td> <?php endif; ?> <td class="small hidden-phone"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="hidden-phone"> <?php echo $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php // Load the batch processing form. ?> <?php if ($user->authorise('core.create', 'com_contact') && $user->authorise('core.edit', 'com_contact') && $user->authorise('core.edit.state', 'com_contact')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_CONTACT_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\���]]<components/com_contact/views/contacts/tmpl/default_batch.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $published = $this->state->get('filter.published'); ?> <div class="modal hide fade" id="collapseModal"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo JText::_('JLIB_HTML_BEHAVIOR_CLOSE'); ?>"> <span aria-hidden="true">×</span> </button> <h3><?php echo JText::_('COM_CONTACT_BATCH_OPTIONS'); ?></h3> </div> <div class="modal-body modal-batch"> <p><?php echo JText::_('COM_CONTACT_BATCH_TIP'); ?></p> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.item', 'com_contact'); ?> </div> </div> <?php endif; ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.tag'); ?> </div> </div> <div class="row-fluid"> <div class="control-group"> <div class="controls"> <?php echo JHtml::_('batch.user'); ?> </div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn" onclick="document.getElementById('batch-category-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value='';document.getElementById('batch-user-id').value='';document.getElementById('batch-tag-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button type="submit" class="btn btn-primary" onclick="Joomla.submitbutton('contact.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> </div> </div> PKb��\7��)mm3components/com_contact/views/contacts/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of contacts. * * @since 1.6 */ class ContactViewContacts extends JViewLegacy { /** * An array of items * * @var array */ protected $items; /** * The pagination object * * @var JPagination */ protected $pagination; /** * The model state * * @var object */ protected $state; /** * Form object for search filters * * @var JForm */ public $filterForm; /** * The active search filters * * @var array */ public $activeFilters; /** * The sidebar markup * * @var string */ protected $sidebar; /** * Display the view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { if ($this->getLayout() !== 'modal') { ContactHelper::addSubmenu('contacts'); } $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Preprocess the list of items to find ordering divisions. // TODO: Complete the ordering stuff with nested sets foreach ($this->items as &$item) { $item->order_up = true; $item->order_dn = true; } // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); } else { // In article associations modal we need to remove language filter if forcing a language. // We also need to change the category filter to show show categories with All or the forced language. if ($forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'CMD')) { // If the language is forced we can't allow to select the language, so transform the language selector filter into a hidden field. $languageXml = new SimpleXMLElement('<field name="language" type="hidden" default="' . $forcedLanguage . '" />'); $this->filterForm->setField($languageXml, 'filter', true); // Also, unset the active language filter so the search tools is not open by default with this filter. unset($this->activeFilters['language']); // One last changes needed is to change the category filter to just show categories with All language or with the forced language. $this->filterForm->setFieldAttribute('category_id', 'language', '*,' . $forcedLanguage, 'filter'); } } return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_contact', 'category', $this->state->get('filter.category_id')); $user = JFactory::getUser(); JToolbarHelper::title(JText::_('COM_CONTACT_MANAGER_CONTACTS'), 'address contact'); if ($canDo->get('core.create') || count($user->getAuthorisedCategories('com_contact', 'core.create')) > 0) { JToolbarHelper::addNew('contact.add'); } if ($canDo->get('core.edit') || $canDo->get('core.edit.own')) { JToolbarHelper::editList('contact.edit'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::publish('contacts.publish', 'JTOOLBAR_PUBLISH', true); JToolbarHelper::unpublish('contacts.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolbarHelper::custom('contacts.featured', 'featured.png', 'featured_f2.png', 'JFEATURE', true); JToolbarHelper::custom('contacts.unfeatured', 'unfeatured.png', 'featured_f2.png', 'JUNFEATURE', true); JToolbarHelper::archiveList('contacts.archive'); JToolbarHelper::checkin('contacts.checkin'); } // Add a batch button if ($user->authorise('core.create', 'com_contact') && $user->authorise('core.edit', 'com_contact') && $user->authorise('core.edit.state', 'com_contact')) { $title = JText::_('JTOOLBAR_BATCH'); // Instantiate a new JLayoutFile instance and render the batch button $layout = new JLayoutFile('joomla.toolbar.batch'); $dhtml = $layout->render(array('title' => $title)); JToolbar::getInstance('toolbar')->appendButton('Custom', $dhtml, 'batch'); } if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'contacts.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::trash('contacts.trash'); } if ($user->authorise('core.admin', 'com_contact') || $user->authorise('core.options', 'com_contact')) { JToolbarHelper::preferences('com_contact'); } JToolbarHelper::help('JHELP_COMPONENTS_CONTACTS_CONTACTS'); JHtmlSidebar::setAction('index.php?option=com_contact'); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { return array( 'a.ordering' => JText::_('JGRID_HEADING_ORDERING'), 'a.published' => JText::_('JSTATUS'), 'a.name' => JText::_('JGLOBAL_TITLE'), 'category_title' => JText::_('JCATEGORY'), 'ul.name' => JText::_('COM_CONTACT_FIELD_LINKED_USER_LABEL'), 'a.featured' => JText::_('JFEATURED'), 'a.access' => JText::_('JGRID_HEADING_ACCESS'), 'a.language' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.id' => JText::_('JGRID_HEADING_ID'), ); } } PKb��\�"�O��*components/com_contact/helpers/contact.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Contact component helper. * * @since 1.6 */ class ContactHelper extends JHelperContent { /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void * * @since 1.6 */ public static function addSubmenu($vName) { JHtmlSidebar::addEntry( JText::_('COM_CONTACT_SUBMENU_CONTACTS'), 'index.php?option=com_contact&view=contacts', $vName == 'contacts' ); JHtmlSidebar::addEntry( JText::_('COM_CONTACT_SUBMENU_CATEGORIES'), 'index.php?option=com_categories&extension=com_contact', $vName == 'categories' ); if (JComponentHelper::isEnabled('com_fields') && JComponentHelper::getParams('com_contact')->get('custom_fields_enable', '1')) { JHtmlSidebar::addEntry( JText::_('JGLOBAL_FIELDS'), 'index.php?option=com_fields&context=com_contact.contact', $vName == 'fields.fields' ); JHtmlSidebar::addEntry( JText::_('JGLOBAL_FIELD_GROUPS'), 'index.php?option=com_fields&view=groups&context=com_contact.contact', $vName == 'fields.groups' ); } } /** * Adds Count Items for Category Manager. * * @param stdClass[] &$items The category objects * * @return stdClass[] * * @since 3.5 */ public static function countItems(&$items) { $config = (object) array( 'related_tbl' => 'contact_details', 'state_col' => 'published', 'group_col' => 'catid', 'relation_type' => 'category_or_group', ); return parent::countRelations($items, $config); } /** * Adds Count Items for Tag Manager. * * @param stdClass[] &$items The tag objects * @param string $extension The name of the active view. * * @return stdClass[] * * @since 3.6 */ public static function countTagItems(&$items, $extension) { $parts = explode('.', $extension); $section = count($parts) > 1 ? $parts[1] : null; $config = (object) array( 'related_tbl' => ($section === 'category' ? 'categories' : 'contact_details'), 'state_col' => 'published', 'group_col' => 'tag_id', 'extension' => $extension, 'relation_type' => 'tag_assigments', ); return parent::countRelations($items, $config); } /** * Returns a valid section for contacts. If it is not valid then null * is returned. * * @param string $section The section to get the mapping for * @param object $item optional item object * * @return string|null The new section * * @since 3.7.0 */ public static function validateSection($section, $item) { if (JFactory::getApplication()->isClient('site') && $section == 'contact' && $item instanceof JForm) { // The contact form needs to be the mail section $section = 'mail'; } if (JFactory::getApplication()->isClient('site') && $section == 'category') { // The contact form needs to be the mail section $section = 'contact'; } if ($section != 'mail' && $section != 'contact') { // We don't know other sections return null; } return $section; } /** * Returns valid contexts * * @return array * * @since 3.7.0 */ public static function getContexts() { JFactory::getLanguage()->load('com_contact', JPATH_ADMINISTRATOR); $contexts = array( 'com_contact.contact' => JText::_('COM_CONTACT_FIELDS_CONTEXT_CONTACT'), 'com_contact.mail' => JText::_('COM_CONTACT_FIELDS_CONTEXT_MAIL'), 'com_contact.categories' => JText::_('JCATEGORY') ); return $contexts; } } PKb��\U�� /components/com_contact/helpers/html/contact.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; JLoader::register('ContactHelper', JPATH_ADMINISTRATOR . '/components/com_contact/helpers/contact.php'); /** * Contact HTML helper class. * * @since 1.6 */ abstract class JHtmlContact { /** * Get the associated language flags * * @param integer $contactid The item id to search associations * * @return string The language HTML * * @throws Exception */ public static function association($contactid) { // Defaults $html = ''; // Get the associations if ($associations = JLanguageAssociations::getAssociations('com_contact', '#__contact_details', 'com_contact.item', $contactid)) { foreach ($associations as $tag => $associated) { $associations[$tag] = (int) $associated->id; } // Get the associated contact items $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('c.id, c.name as title') ->select('l.sef as lang_sef, lang_code') ->from('#__contact_details as c') ->select('cat.title as category_title') ->join('LEFT', '#__categories as cat ON cat.id=c.catid') ->where('c.id IN (' . implode(',', array_values($associations)) . ')') ->where('c.id != ' . $contactid) ->join('LEFT', '#__languages as l ON c.language=l.lang_code') ->select('l.image') ->select('l.title as language_title'); $db->setQuery($query); try { $items = $db->loadObjectList('id'); } catch (RuntimeException $e) { throw new Exception($e->getMessage(), 500, $e); } if ($items) { foreach ($items as &$item) { $text = strtoupper($item->lang_sef); $url = JRoute::_('index.php?option=com_contact&task=contact.edit&id=' . (int) $item->id); $tooltip = htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8') . '<br />' . JText::sprintf('JCATEGORY_SPRINTF', $item->category_title); $classes = 'hasPopover label label-association label-' . $item->lang_sef; $item->link = '<a href="' . $url . '" title="' . $item->language_title . '" class="' . $classes . '" data-content="' . $tooltip . '" data-placement="top">' . $text . '</a>'; } } JHtml::_('bootstrap.popover'); $html = JLayoutHelper::render('joomla.content.associations', $items); } return $html; } /** * Show the featured/not-featured icon. * * @param integer $value The featured value. * @param integer $i Id of the item. * @param boolean $canChange Whether the value can be changed or not. * * @return string The anchor tag to toggle featured/unfeatured contacts. * * @since 1.6 */ public static function featured($value = 0, $i, $canChange = true) { // Array of image, task, title, action $states = array( 0 => array('unfeatured', 'contacts.featured', 'COM_CONTACT_UNFEATURED', 'JGLOBAL_TOGGLE_FEATURED'), 1 => array('featured', 'contacts.unfeatured', 'JFEATURED', 'JGLOBAL_TOGGLE_FEATURED'), ); $state = ArrayHelper::getValue($states, (int) $value, $states[1]); $icon = $state[0]; if ($canChange) { $html = '<a href="#" onclick="return listItemTask(\'cb' . $i . '\',\'' . $state[1] . '\')" class="btn btn-micro hasTooltip' . ($value == 1 ? ' active' : '') . '" title="' . JHtml::_('tooltipText', $state[3]) . '"><span class="icon-' . $icon . '" aria-hidden="true"></span></a>'; } else { $html = '<a class="btn btn-micro hasTooltip disabled' . ($value == 1 ? ' active' : '') . '" title="' . JHtml::_('tooltipText', $state[2]) . '"><span class="icon-' . $icon . '" aria-hidden="true"></span></a>'; } return $html; } } PKb��\Ĩ''6components/com_contact/models/fields/modal/contact.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; use Joomla\CMS\Language\LanguageHelper; /** * Supports a modal contact picker. * * @since 1.6 */ class JFormFieldModal_Contact extends JFormField { /** * The form field type. * * @var string * @since 1.6 */ protected $type = 'Modal_Contact'; /** * Method to get the field input markup. * * @return string The field input markup. * * @since 1.6 */ protected function getInput() { $allowNew = ((string) $this->element['new'] == 'true'); $allowEdit = ((string) $this->element['edit'] == 'true'); $allowClear = ((string) $this->element['clear'] != 'false'); $allowSelect = ((string) $this->element['select'] != 'false'); $allowPropagate = ((string) $this->element['propagate'] == 'true'); $languages = LanguageHelper::getContentLanguages(array(0, 1)); // Load language JFactory::getLanguage()->load('com_contact', JPATH_ADMINISTRATOR); // The active contact id field. $value = (int) $this->value > 0 ? (int) $this->value : ''; // Create the modal id. $modalId = 'Contact_' . $this->id; // Add the modal field script to the document head. JHtml::_('jquery.framework'); JHtml::_('script', 'system/modal-fields.js', array('version' => 'auto', 'relative' => true)); // Script to proxy the select modal function to the modal-fields.js file. if ($allowSelect) { static $scriptSelect = null; if (is_null($scriptSelect)) { $scriptSelect = array(); } if (!isset($scriptSelect[$this->id])) { JFactory::getDocument()->addScriptDeclaration(" function jSelectContact_" . $this->id . "(id, title, object) { window.processModalSelect('Contact', '" . $this->id . "', id, title, '', object); } "); JText::script('JGLOBAL_ASSOCIATIONS_PROPAGATE_FAILED'); $scriptSelect[$this->id] = true; } } // Setup variables for display. $linkContacts = 'index.php?option=com_contact&view=contacts&layout=modal&tmpl=component&' . JSession::getFormToken() . '=1'; $linkContact = 'index.php?option=com_contact&view=contact&layout=modal&tmpl=component&' . JSession::getFormToken() . '=1'; $modalTitle = JText::_('COM_CONTACT_CHANGE_CONTACT'); if (isset($this->element['language'])) { $linkContacts .= '&forcedLanguage=' . $this->element['language']; $linkContact .= '&forcedLanguage=' . $this->element['language']; $modalTitle .= ' — ' . $this->element['label']; } $urlSelect = $linkContacts . '&function=jSelectContact_' . $this->id; $urlEdit = $linkContact . '&task=contact.edit&id=\' + document.getElementById("' . $this->id . '_id").value + \''; $urlNew = $linkContact . '&task=contact.add'; if ($value) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('name')) ->from($db->quoteName('#__contact_details')) ->where($db->quoteName('id') . ' = ' . (int) $value); $db->setQuery($query); try { $title = $db->loadResult(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } } $title = empty($title) ? JText::_('COM_CONTACT_SELECT_A_CONTACT') : htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); // The current contact display field. $html = '<span class="input-append">'; $html .= '<input class="input-medium" id="' . $this->id . '_name" type="text" value="' . $title . '" disabled="disabled" size="35" />'; // Select contact button if ($allowSelect) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? ' hidden' : '') . '"' . ' id="' . $this->id . '_select"' . ' data-toggle="modal"' . ' data-target="#ModalSelect' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_CONTACT_CHANGE_CONTACT') . '">' . '<span class="icon-file" aria-hidden="true"></span> ' . JText::_('JSELECT') . '</button>'; } // New contact button if ($allowNew) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? ' hidden' : '') . '"' . ' id="' . $this->id . '_new"' . ' data-toggle="modal"' . ' data-target="#ModalNew' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_CONTACT_NEW_CONTACT') . '">' . '<span class="icon-new" aria-hidden="true"></span> ' . JText::_('JACTION_CREATE') . '</button>'; } // Edit contact button if ($allowEdit) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_edit"' . ' data-toggle="modal"' . ' data-target="#ModalEdit' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_CONTACT_EDIT_CONTACT') . '">' . '<span class="icon-edit" aria-hidden="true"></span> ' . JText::_('JACTION_EDIT') . '</button>'; } // Clear contact button if ($allowClear) { $html .= '<button' . ' type="button"' . ' class="btn' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_clear"' . ' onclick="window.processModalParent(\'' . $this->id . '\'); return false;">' . '<span class="icon-remove" aria-hidden="true"></span>' . JText::_('JCLEAR') . '</button>'; } // Propagate contact button if ($allowPropagate && count($languages) > 2) { // Strip off language tag at the end $tagLength = (int) strlen($this->element['language']); $callbackFunctionStem = substr("jSelectContact_" . $this->id, 0, -$tagLength); $html .= '<a' . ' class="btn hasTooltip' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_propagate"' . ' href="#"' . ' title="' . JHtml::tooltipText('JGLOBAL_ASSOCIATIONS_PROPAGATE_TIP') . '"' . ' onclick="Joomla.propagateAssociation(\'' . $this->id . '\', \'' . $callbackFunctionStem . '\');">' . '<span class="icon-refresh" aria-hidden="true"></span>' . JText::_('JGLOBAL_ASSOCIATIONS_PROPAGATE_BUTTON') . '</a>'; } $html .= '</span>'; // Select contact modal if ($allowSelect) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalSelect' . $modalId, array( 'title' => $modalTitle, 'url' => $urlSelect, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>', ) ); } // New contact modal if ($allowNew) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalNew' . $modalId, array( 'title' => JText::_('COM_CONTACT_NEW_CONTACT'), 'backdrop' => 'static', 'keyboard' => false, 'closeButton' => false, 'url' => $urlNew, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'contact\', \'cancel\', \'contact-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'contact\', \'save\', \'contact-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JSAVE') . '</button>' . '<button type="button" class="btn btn-success"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'contact\', \'apply\', \'contact-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JAPPLY') . '</button>', ) ); } // Edit contact modal. if ($allowEdit) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalEdit' . $modalId, array( 'title' => JText::_('COM_CONTACT_EDIT_CONTACT'), 'backdrop' => 'static', 'keyboard' => false, 'closeButton' => false, 'url' => $urlEdit, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'contact\', \'cancel\', \'contact-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'contact\', \'save\', \'contact-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JSAVE') . '</button>' . '<button type="button" class="btn btn-success"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'contact\', \'apply\', \'contact-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JAPPLY') . '</button>', ) ); } // Note: class='required' for client side validation. $class = $this->required ? ' class="required modal-value"' : ''; $html .= '<input type="hidden" id="' . $this->id . '_id"' . $class . ' data-required="' . (int) $this->required . '" name="' . $this->name . '" data-text="' . htmlspecialchars(JText::_('COM_CONTACT_SELECT_A_CONTACT', true), ENT_COMPAT, 'UTF-8') . '" value="' . $value . '" />'; return $html; } /** * Method to get the field label markup. * * @return string The field label markup. * * @since 3.4 */ protected function getLabel() { return str_replace($this->id, $this->id . '_id', parent::getLabel()); } } PKb��\[u!22)components/com_contact/models/contact.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\String\StringHelper; use Joomla\Utilities\ArrayHelper; JLoader::register('ContactHelper', JPATH_ADMINISTRATOR . '/components/com_contact/helpers/contact.php'); /** * Item Model for a Contact. * * @since 1.6 */ class ContactModelContact extends JModelAdmin { /** * The type alias for this content type. * * @var string * @since 3.2 */ public $typeAlias = 'com_contact.contact'; /** * The context used for the associations table * * @var string * @since 3.4.4 */ protected $associationsContext = 'com_contact.item'; /** * Batch copy/move command. If set to false, the batch copy/move command is not supported * * @var string */ protected $batch_copymove = 'category_id'; /** * Allowed batch commands * * @var array */ protected $batch_commands = array( 'assetgroup_id' => 'batchAccess', 'language_id' => 'batchLanguage', 'tag' => 'batchTag', 'user_id' => 'batchUser', ); /** * Batch change a linked user. * * @param integer $value The new value matching a User ID. * @param array $pks An array of row IDs. * @param array $contexts An array of item contexts. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 2.5 */ protected function batchUser($value, $pks, $contexts) { foreach ($pks as $pk) { if ($this->user->authorise('core.edit', $contexts[$pk])) { $this->table->reset(); $this->table->load($pk); $this->table->user_id = (int) $value; $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); if (!$this->table->store()) { $this->setError($this->table->getError()); return false; } } else { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); return false; } } // Clean the cache $this->cleanCache(); return true; } /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canDelete($record) { if (empty($record->id) || $record->published != -2) { return false; } return JFactory::getUser()->authorise('core.delete', 'com_contact.category.' . (int) $record->catid); } /** * Method to test whether a record can have its state edited. * * @param object $record A record object. * * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canEditState($record) { // Check against the category. if (!empty($record->catid)) { return JFactory::getUser()->authorise('core.edit.state', 'com_contact.category.' . (int) $record->catid); } // Default to component settings if category not known. return parent::canEditState($record); } /** * Returns a Table object, always creating it * * @param string $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object * * @since 1.6 */ public function getTable($type = 'Contact', $prefix = 'ContactTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to get the row form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm|boolean A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { JForm::addFieldPath(JPATH_ADMINISTRATOR . '/components/com_users/models/fields'); // Get the form. $form = $this->loadForm('com_contact.contact', 'contact', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } // Modify the form based on access controls. if (!$this->canEditState((object) $data)) { // Disable fields for display. $form->setFieldAttribute('featured', 'disabled', 'true'); $form->setFieldAttribute('ordering', 'disabled', 'true'); $form->setFieldAttribute('published', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is a record you can edit. $form->setFieldAttribute('featured', 'filter', 'unset'); $form->setFieldAttribute('ordering', 'filter', 'unset'); $form->setFieldAttribute('published', 'filter', 'unset'); } return $form; } /** * Method to get a single record. * * @param integer $pk The id of the primary key. * * @return mixed Object on success, false on failure. * * @since 1.6 */ public function getItem($pk = null) { if ($item = parent::getItem($pk)) { // Convert the metadata field to an array. $registry = new Registry($item->metadata); $item->metadata = $registry->toArray(); } // Load associated contact items $assoc = JLanguageAssociations::isEnabled(); if ($assoc) { $item->associations = array(); if ($item->id != null) { $associations = JLanguageAssociations::getAssociations('com_contact', '#__contact_details', 'com_contact.item', $item->id); foreach ($associations as $tag => $association) { $item->associations[$tag] = $association->id; } } } // Load item tags if (!empty($item->id)) { $item->tags = new JHelperTags; $item->tags->getTagIds($item->id, 'com_contact.contact'); } return $item; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { $app = JFactory::getApplication(); // Check the session for previously entered form data. $data = $app->getUserState('com_contact.edit.contact.data', array()); if (empty($data)) { $data = $this->getItem(); // Prime some default values. if ($this->getState('contact.id') == 0) { $data->set('catid', $app->input->get('catid', $app->getUserState('com_contact.contacts.filter.category_id'), 'int')); } } $this->preprocessData('com_contact.contact', $data); return $data; } /** * Method to save the form data. * * @param array $data The form data. * * @return boolean True on success. * * @since 3.0 */ public function save($data) { $input = JFactory::getApplication()->input; JLoader::register('CategoriesHelper', JPATH_ADMINISTRATOR . '/components/com_categories/helpers/categories.php'); // Cast catid to integer for comparison $catid = (int) $data['catid']; // Check if New Category exists if ($catid > 0) { $catid = CategoriesHelper::validateCategoryId($data['catid'], 'com_contact'); } // Save New Category if ($catid == 0 && $this->canCreateCategory()) { $table = array(); $table['title'] = $data['catid']; $table['parent_id'] = 1; $table['extension'] = 'com_contact'; $table['language'] = $data['language']; $table['published'] = 1; // Create new category and get catid back $data['catid'] = CategoriesHelper::createCategory($table); } // Alter the name for save as copy if ($input->get('task') == 'save2copy') { $origTable = clone $this->getTable(); $origTable->load($input->getInt('id')); if ($data['name'] == $origTable->name) { list($name, $alias) = $this->generateNewTitle($data['catid'], $data['alias'], $data['name']); $data['name'] = $name; $data['alias'] = $alias; } else { if ($data['alias'] == $origTable->alias) { $data['alias'] = ''; } } $data['published'] = 0; } $links = array('linka', 'linkb', 'linkc', 'linkd', 'linke'); foreach ($links as $link) { if ($data['params'][$link]) { $data['params'][$link] = JStringPunycode::urlToPunycode($data['params'][$link]); } } return parent::save($data); } /** * Prepare and sanitise the table prior to saving. * * @param JTable $table The JTable object * * @return void * * @since 1.6 */ protected function prepareTable($table) { $date = JFactory::getDate()->toSql(); $table->name = htmlspecialchars_decode($table->name, ENT_QUOTES); $table->generateAlias(); if (empty($table->id)) { // Set the values $table->created = $date; // Set ordering to the last item if not set if (empty($table->ordering)) { $db = $this->getDbo(); $query = $db->getQuery(true) ->select('MAX(ordering)') ->from($db->quoteName('#__contact_details')); $db->setQuery($query); $max = $db->loadResult(); $table->ordering = $max + 1; } } else { // Set the values $table->modified = $date; $table->modified_by = JFactory::getUser()->id; } // Increment the content version number. $table->version++; } /** * A protected method to get a set of ordering conditions. * * @param JTable $table A record object. * * @return array An array of conditions to add to add to ordering queries. * * @since 1.6 */ protected function getReorderConditions($table) { return array('catid = ' . (int) $table->catid); } /** * Preprocess the form. * * @param JForm $form Form object. * @param object $data Data object. * @param string $group Group name. * * @return void * * @since 3.0.3 */ protected function preprocessForm(JForm $form, $data, $group = 'content') { // Determine correct permissions to check. if ($this->getState('contact.id')) { // Existing record. Can only edit in selected categories. $form->setFieldAttribute('catid', 'action', 'core.edit'); } else { // New record. Can only create in selected categories. $form->setFieldAttribute('catid', 'action', 'core.create'); } if ($this->canCreateCategory()) { $form->setFieldAttribute('catid', 'allowAdd', 'true'); } // Association contact items if (JLanguageAssociations::isEnabled()) { $languages = JLanguageHelper::getContentLanguages(false, true, null, 'ordering', 'asc'); if (count($languages) > 1) { $addform = new SimpleXMLElement('<form />'); $fields = $addform->addChild('fields'); $fields->addAttribute('name', 'associations'); $fieldset = $fields->addChild('fieldset'); $fieldset->addAttribute('name', 'item_associations'); foreach ($languages as $language) { $field = $fieldset->addChild('field'); $field->addAttribute('name', $language->lang_code); $field->addAttribute('type', 'modal_contact'); $field->addAttribute('language', $language->lang_code); $field->addAttribute('label', $language->title); $field->addAttribute('translate_label', 'false'); $field->addAttribute('select', 'true'); $field->addAttribute('new', 'true'); $field->addAttribute('edit', 'true'); $field->addAttribute('clear', 'true'); $field->addAttribute('propagate', 'true'); } $form->load($addform, false); } } parent::preprocessForm($form, $data, $group); } /** * Method to toggle the featured setting of contacts. * * @param array $pks The ids of the items to toggle. * @param integer $value The value to toggle to. * * @return boolean True on success. * * @since 1.6 */ public function featured($pks, $value = 0) { // Sanitize the ids. $pks = ArrayHelper::toInteger((array) $pks); if (empty($pks)) { $this->setError(JText::_('COM_CONTACT_NO_ITEM_SELECTED')); return false; } $table = $this->getTable(); try { $db = $this->getDbo(); $query = $db->getQuery(true); $query->update('#__contact_details'); $query->set('featured = ' . (int) $value); $query->where('id IN (' . implode(',', $pks) . ')'); $db->setQuery($query); $db->execute(); } catch (Exception $e) { $this->setError($e->getMessage()); return false; } $table->reorder(); // Clean component's cache $this->cleanCache(); return true; } /** * Is the user allowed to create an on the fly category? * * @return boolean * * @since 3.6.1 */ private function canCreateCategory() { return JFactory::getUser()->authorise('core.create', 'com_contact'); } } PKb��\�1�DWDW/components/com_contact/models/forms/contact.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset addfieldpath="/administrator/components/com_categories/models/fields"> <field name="id" type="number" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" default="0" class="readonly" size="10" readonly="true" /> <field name="name" type="text" label="COM_CONTACT_FIELD_NAME_LABEL" description="COM_CONTACT_FIELD_NAME_DESC" class="input-xxlarge input-large-text" size="40" required="true" /> <field name="alias" type="text" label="JFIELD_ALIAS_LABEL" description="JFIELD_ALIAS_DESC" size="45" hint="JFIELD_ALIAS_PLACEHOLDER" /> <field name="version_note" type="text" label="JGLOBAL_FIELD_VERSION_NOTE_LABEL" description="JGLOBAL_FIELD_VERSION_NOTE_DESC" labelclass="control-label" class="span12" size="45" maxlength="255" /> <field name="user_id" type="user" label="COM_CONTACT_FIELD_LINKED_USER_LABEL" description="COM_CONTACT_FIELD_LINKED_USER_DESC" /> <field name="published" type="list" label="JSTATUS" description="JFIELD_PUBLISHED_DESC" default="1" id="published" class="chzn-color-state" size="1" > <option value="1">JPUBLISHED</option> <option value="0">JUNPUBLISHED</option> <option value="2">JARCHIVED</option> <option value="-2">JTRASHED</option> </field> <field name="catid" type="categoryedit" label="JCATEGORY" description="JFIELD_CATEGORY_DESC" extension="com_contact" required="true" default="" /> <field name="access" type="accesslevel" label="JFIELD_ACCESS_LABEL" description="JFIELD_ACCESS_DESC" size="1" /> <field name="misc" type="editor" label="COM_CONTACT_FIELD_INFORMATION_MISC_LABEL" description="COM_CONTACT_FIELD_INFORMATION_MISC_DESC" filter="JComponentHelper::filterText" buttons="true" hide="readmore,pagebreak" /> <field name="created_by" type="user" label="JGLOBAL_FIELD_CREATED_BY_LABEL" description="COM_CONTACT_FIELD_CREATED_BY_DESC" /> <field name="created_by_alias" type="text" label="COM_CONTACT_FIELD_CREATED_BY_ALIAS_LABEL" description="COM_CONTACT_FIELD_CREATED_BY_ALIAS_DESC" size="20" /> <field name="created" type="calendar" label="COM_CONTACT_FIELD_CREATED_LABEL" description="COM_CONTACT_FIELD_CREATED_DESC" size="22" translateformat="true" showtime="true" filter="user_utc" /> <field name="modified" type="calendar" label="JGLOBAL_FIELD_MODIFIED_LABEL" description="COM_CONTACT_FIELD_MODIFIED_DESC" class="readonly" size="22" readonly="true" translateformat="true" showtime="true" filter="user_utc" /> <field name="modified_by" type="user" label="JGLOBAL_FIELD_MODIFIED_BY_LABEL" description="COM_CONTACT_FIELD_MODIFIED_BY_DESC" class="readonly" readonly="true" filter="unset" /> <field name="checked_out" type="hidden" filter="unset" /> <field name="checked_out_time" type="hidden" filter="unset" /> <field name="ordering" type="ordering" label="JFIELD_ORDERING_LABEL" description="JFIELD_ORDERING_DESC" content_type="com_contact.contact" /> <field name="publish_up" type="calendar" label="COM_CONTACT_FIELD_PUBLISH_UP_LABEL" description="COM_CONTACT_FIELD_PUBLISH_UP_DESC" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="publish_down" type="calendar" label="COM_CONTACT_FIELD_PUBLISH_DOWN_LABEL" description="COM_CONTACT_FIELD_PUBLISH_DOWN_DESC" translateformat="true" showtime="true" size="22" filter="user_utc" /> <field name="metakey" type="textarea" label="JFIELD_META_KEYWORDS_LABEL" description="JFIELD_META_KEYWORDS_DESC" rows="3" cols="30" /> <field name="metadesc" type="textarea" label="JFIELD_META_DESCRIPTION_LABEL" description="JFIELD_META_DESCRIPTION_DESC" rows="3" cols="30" /> <field name="language" type="contentlanguage" label="JFIELD_LANGUAGE_LABEL" description="COM_CONTACT_FIELD_LANGUAGE_DESC" > <option value="*">JALL</option> </field> <field name="featured" type="radio" label="JFEATURED" description="COM_CONTACT_FIELD_FEATURED_DESC" default="0" class="btn-group btn-group-yesno" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="tags" type="tag" label="JTAG" description="JTAG_DESC" class="span12" multiple="true" /> <field name="contact_icons" type="list" label="COM_CONTACT_FIELD_ICONS_SETTINGS" description="COM_CONTACT_FIELD_ICONS_SETTINGS_DESC" default="0" > <option value="0">COM_CONTACT_FIELD_VALUE_NONE</option> <option value="1">COM_CONTACT_FIELD_VALUE_TEXT</option> <option value="2">COM_CONTACT_FIELD_VALUE_ICONS</option> </field> <field name="icon_address" type="media" label="COM_CONTACT_FIELD_ICONS_ADDRESS_LABEL" description="COM_CONTACT_FIELD_ICONS_ADDRESS_DESC" hide_none="1" /> <field name="icon_email" type="media" label="COM_CONTACT_FIELD_ICONS_EMAIL_LABEL" description="COM_CONTACT_FIELD_ICONS_EMAIL_DESC" hide_none="1" /> <field name="icon_telephone" type="media" label="COM_CONTACT_FIELD_ICONS_TELEPHONE_LABEL" description="COM_CONTACT_FIELD_ICONS_TELEPHONE_DESC" hide_none="1" /> <field name="icon_mobile" type="media" label="COM_CONTACT_FIELD_ICONS_MOBILE_LABEL" description="COM_CONTACT_FIELD_ICONS_MOBILE_DESC" hide_none="1" /> <field name="icon_fax" type="media" label="COM_CONTACT_FIELD_ICONS_FAX_LABEL" description="COM_CONTACT_FIELD_ICONS_FAX_DESC" hide_none="1" /> <field name="icon_misc" type="media" label="COM_CONTACT_FIELD_ICONS_MISC_LABEL" description="COM_CONTACT_FIELD_ICONS_MISC_DESC" hide_none="1" /> </fieldset> <fieldset name="details" label="COM_CONTACT_CONTACT_DETAILS"> <field name="@text_details" type="note" label="" description="COM_CONTACT_EDIT_DETAILS" /> <field name="image" type="media" label="COM_CONTACT_FIELD_PARAMS_IMAGE_LABEL" description="COM_CONTACT_FIELD_PARAMS_IMAGE_DESC" hide_none="1" /> <field name="con_position" type="text" label="COM_CONTACT_FIELD_INFORMATION_POSITION_LABEL" description="COM_CONTACT_FIELD_INFORMATION_POSITION_DESC" size="30" /> <field name="email_to" type="email" label="JGLOBAL_EMAIL" description="COM_CONTACT_FIELD_INFORMATION_EMAIL_DESC" size="30" /> <field name="address" type="textarea" label="COM_CONTACT_FIELD_INFORMATION_ADDRESS_LABEL" description="COM_CONTACT_FIELD_INFORMATION_ADDRESS_DESC" rows="3" cols="30" /> <field name="suburb" type="text" label="COM_CONTACT_FIELD_INFORMATION_SUBURB_LABEL" description="COM_CONTACT_FIELD_INFORMATION_SUBURB_DESC" size="30" /> <field name="state" type="text" label="COM_CONTACT_FIELD_INFORMATION_STATE_LABEL" description="COM_CONTACT_FIELD_INFORMATION_STATE_DESC" size="30" /> <field name="postcode" type="text" label="COM_CONTACT_FIELD_INFORMATION_POSTCODE_LABEL" description="COM_CONTACT_FIELD_INFORMATION_POSTCODE_DESC" size="30" /> <field name="country" type="text" label="COM_CONTACT_FIELD_INFORMATION_COUNTRY_LABEL" description="COM_CONTACT_FIELD_INFORMATION_COUNTRY_DESC" size="30" /> <field name="telephone" type="text" label="COM_CONTACT_FIELD_INFORMATION_TELEPHONE_LABEL" description="COM_CONTACT_FIELD_INFORMATION_TELEPHONE_DESC" size="30" /> <field name="mobile" type="text" label="COM_CONTACT_FIELD_INFORMATION_MOBILE_LABEL" description="COM_CONTACT_FIELD_INFORMATION_MOBILE_DESC" size="30" /> <field name="fax" type="text" label="COM_CONTACT_FIELD_INFORMATION_FAX_LABEL" description="COM_CONTACT_FIELD_INFORMATION_FAX_DESC" size="30" /> <field name="webpage" type="url" label="COM_CONTACT_FIELD_INFORMATION_WEBPAGE_LABEL" description="COM_CONTACT_FIELD_INFORMATION_WEBPAGE_DESC" size="30" filter="url" validate="url" /> <field name="sortname1" type="text" label="COM_CONTACT_FIELD_SORTNAME1_LABEL" description="COM_CONTACT_FIELD_SORTNAME1_DESC" size="30" /> <field name="sortname2" type="text" label="COM_CONTACT_FIELD_SORTNAME2_LABEL" description="COM_CONTACT_FIELD_SORTNAME2_DESC" size="30" /> <field name="sortname3" type="text" label="COM_CONTACT_FIELD_SORTNAME3_LABEL" description="COM_CONTACT_FIELD_SORTNAME3_DESC" size="30" /> </fieldset> <fields name="params" label="JGLOBAL_FIELDSET_DISPLAY_OPTIONS"> <fieldset name="display" label="JGLOBAL_FIELDSET_DISPLAY_OPTIONS" addfieldpath="/administrator/components/com_fields/models/fields"> <field name="show_contact_category" type="list" label="JGLOBAL_SHOW_CATEGORY_LABEL" description="COM_CONTACT_FIELD_SHOW_CATEGORY_DESC" class="chzn-color" useglobal="true" > <option value="hide">JHIDE</option> <option value="show_no_link">COM_CONTACT_FIELD_VALUE_NO_LINK</option> <option value="show_with_link">COM_CONTACT_FIELD_VALUE_WITH_LINK</option> </field> <field name="show_contact_list" type="list" label="COM_CONTACT_FIELD_CONTACT_SHOW_LIST_LABEL" description="COM_CONTACT_FIELD_CONTACT_SHOW_LIST_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="presentation_style" type="list" label="COM_CONTACT_FIELD_PRESENTATION_LABEL" description="COM_CONTACT_FIELD_PRESENTATION_DESC" useglobal="true" > <option value="sliders">COM_CONTACT_FIELD_VALUE_SLIDERS</option> <option value="tabs">COM_CONTACT_FIELD_VALUE_TABS</option> <option value="plain">COM_CONTACT_FIELD_VALUE_PLAIN</option> </field> <field name="show_tags" type="list" label="COM_CONTACT_FIELD_SHOW_TAGS_LABEL" description="COM_CONTACT_FIELD_SHOW_TAGS_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_info" type="list" label="COM_CONTACT_FIELD_SHOW_INFO_LABEL" description="COM_CONTACT_FIELD_SHOW_INFO_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_name" type="list" label="COM_CONTACT_FIELD_PARAMS_NAME_LABEL" description="COM_CONTACT_FIELD_PARAMS_NAME_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_position" type="list" label="COM_CONTACT_FIELD_PARAMS_CONTACT_POSITION_LABEL" description="COM_CONTACT_FIELD_PARAMS_CONTACT_POSITION_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_email" type="list" label="JGLOBAL_EMAIL" description="COM_CONTACT_FIELD_PARAMS_CONTACT_E_MAIL_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="add_mailto_link" type="list" label="COM_CONTACT_FIELD_PARAMS_ADD_MAILTO_LINK_LABEL" description="COM_CONTACT_FIELD_PARAMS_ADD_MAILTO_LINK_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="show_street_address" type="list" label="COM_CONTACT_FIELD_PARAMS_STREET_ADDRESS_LABEL" description="COM_CONTACT_FIELD_PARAMS_STREET_ADDRESS_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_suburb" type="list" label="COM_CONTACT_FIELD_PARAMS_TOWN-SUBURB_LABEL" description="COM_CONTACT_FIELD_PARAMS_TOWN-SUBURB_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_state" type="list" label="COM_CONTACT_FIELD_PARAMS_STATE-COUNTY_LABEL" description="COM_CONTACT_FIELD_PARAMS_STATE-COUNTY_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_postcode" type="list" label="COM_CONTACT_FIELD_PARAMS_POST-ZIP_CODE_LABEL" description="COM_CONTACT_FIELD_PARAMS_POST-ZIP_CODE_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_country" type="list" label="COM_CONTACT_FIELD_PARAMS_COUNTRY_LABEL" description="COM_CONTACT_FIELD_PARAMS_COUNTRY_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_telephone" type="list" label="COM_CONTACT_FIELD_PARAMS_TELEPHONE_LABEL" description="COM_CONTACT_FIELD_PARAMS_TELEPHONE_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_mobile" type="list" label="COM_CONTACT_FIELD_PARAMS_MOBILE_LABEL" description="COM_CONTACT_FIELD_PARAMS_MOBILE_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_fax" type="list" label="COM_CONTACT_FIELD_PARAMS_FAX_LABEL" description="COM_CONTACT_FIELD_PARAMS_FAX_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_webpage" type="list" label="COM_CONTACT_FIELD_PARAMS_WEBPAGE_LABEL" description="COM_CONTACT_FIELD_PARAMS_WEBPAGE_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_image" type="list" label="COM_CONTACT_FIELD_PARAMS_SHOW_IMAGE_LABEL" description="COM_CONTACT_FIELD_PARAMS_SHOW_IMAGE_DESC" class="chzn-color" useglobal="true" showon="show_info:1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_misc" type="list" label="COM_CONTACT_FIELD_PARAMS_MISC_INFO_LABEL" description="COM_CONTACT_FIELD_PARAMS_MISC_INFO_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="allow_vcard" type="list" label="COM_CONTACT_FIELD_PARAMS_VCARD_LABEL" description="COM_CONTACT_FIELD_PARAMS_VCARD_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_articles" type="list" label="COM_CONTACT_FIELD_ARTICLES_SHOW_LABEL" description="COM_CONTACT_FIELD_ARTICLES_SHOW_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="articles_display_num" type="list" label="COM_CONTACT_FIELD_ARTICLES_DISPLAY_NUM_LABEL" description="COM_CONTACT_FIELD_ARTICLES_DISPLAY_NUM_DESC" default="" useglobal="true" > <option value="5">J5</option> <option value="10">J10</option> <option value="15">J15</option> <option value="20">J20</option> <option value="25">J25</option> <option value="30">J30</option> <option value="50">J50</option> <option value="75">J75</option> <option value="100">J100</option> <option value="150">J150</option> <option value="200">J200</option> <option value="250">J250</option> <option value="300">J300</option> <option value="0">JALL</option> </field> <field name="show_profile" type="list" label="COM_CONTACT_FIELD_PROFILE_SHOW_LABEL" description="COM_CONTACT_FIELD_PROFILE_SHOW_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_user_custom_fields" type="fieldgroups" label="COM_CONTACT_FIELD_USER_CUSTOM_FIELDS_SHOW_LABEL" description="COM_CONTACT_FIELD_USER_CUSTOM_FIELDS_SHOW_DESC" multiple="true" context="com_users.user" > <option value="-1">JALL</option> </field> <field name="show_links" type="list" label="COM_CONTACT_FIELD_SHOW_LINKS_LABEL" description="COM_CONTACT_FIELD_SHOW_LINKS_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="linka_name" type="text" label="COM_CONTACT_FIELD_LINKA_NAME_LABEL" description="COM_CONTACT_FIELD_LINK_NAME_DESC" size="30" /> <field name="linka" type="url" label="COM_CONTACT_FIELD_LINKA_LABEL" description="COM_CONTACT_FIELD_LINKA_DESC" size="30" filter="url" validate="url" /> <field name="linkb_name" type="text" label="COM_CONTACT_FIELD_LINKB_NAME_LABEL" description="COM_CONTACT_FIELD_LINK_NAME_DESC" size="30" /> <field name="linkb" type="url" label="COM_CONTACT_FIELD_LINKB_LABEL" description="COM_CONTACT_FIELD_LINKB_DESC" size="30" filter="url" validate="url" /> <field name="linkc_name" type="text" label="COM_CONTACT_FIELD_LINKC_NAME_LABEL" description="COM_CONTACT_FIELD_LINK_NAME_DESC" size="30" /> <field name="linkc" type="url" label="COM_CONTACT_FIELD_LINKC_LABEL" description="COM_CONTACT_FIELD_LINKC_DESC" size="30" filter="url" validate="url" /> <field name="linkd_name" type="text" label="COM_CONTACT_FIELD_LINKD_NAME_LABEL" description="COM_CONTACT_FIELD_LINK_NAME_DESC" size="30" /> <field name="linkd" type="url" label="COM_CONTACT_FIELD_LINKD_LABEL" description="COM_CONTACT_FIELD_LINKD_DESC" size="30" filter="url" validate="url" /> <field name="linke_name" type="text" label="COM_CONTACT_FIELD_LINKE_NAME_LABEL" description="COM_CONTACT_FIELD_LINK_NAME_DESC" size="30" /> <field name="linke" type="url" label="COM_CONTACT_FIELD_LINKE_LABEL" description="COM_CONTACT_FIELD_LINKE_DESC" size="30" filter="url" validate="url" /> <field name="contact_layout" type="componentlayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_COMPONENT_LAYOUT_DESC" extension="com_contact" view="contact" useglobal="true" /> </fieldset> <fieldset name="email" label="COM_CONTACT_FIELDSET_CONTACT_LABEL"> <field name="show_email_form" type="list" label="COM_CONTACT_FIELD_EMAIL_SHOW_FORM_LABEL" description="COM_CONTACT_FIELD_EMAIL_SHOW_FORM_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="show_email_copy" type="list" label="COM_CONTACT_FIELD_EMAIL_EMAIL_COPY_LABEL" description="COM_CONTACT_FIELD_EMAIL_EMAIL_COPY_DESC" class="chzn-color" useglobal="true" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="validate_session" type="list" label="COM_CONTACT_FIELD_CONFIG_SESSION_CHECK_LABEL" description="COM_CONTACT_FIELD_CONFIG_SESSION_CHECK_DESC" class="chzn-color" useglobal="true" > <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="custom_reply" type="list" label="COM_CONTACT_FIELD_CONFIG_CUSTOM_REPLY_LABEL" description="COM_CONTACT_FIELD_CONFIG_CUSTOM_REPLY_DESC" class="chzn-color" useglobal="true" > <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="redirect" type="text" label="COM_CONTACT_FIELD_CONFIG_REDIRECT_LABEL" description="COM_CONTACT_FIELD_CONFIG_REDIRECT_DESC" size="30" /> </fieldset> </fields> <fields name="metadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS"> <fieldset name="jmetadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS"> <field name="robots" type="list" label="JFIELD_METADATA_ROBOTS_LABEL" description="JFIELD_METADATA_ROBOTS_DESC" > <option value="">JGLOBAL_USE_GLOBAL</option> <option value="index, follow">JGLOBAL_INDEX_FOLLOW</option> <option value="noindex, follow">JGLOBAL_NOINDEX_FOLLOW</option> <option value="index, nofollow">JGLOBAL_INDEX_NOFOLLOW</option> <option value="noindex, nofollow">JGLOBAL_NOINDEX_NOFOLLOW</option> </field> <field name="rights" type="text" label="JFIELD_METADATA_RIGHTS_LABEL" description="JFIELD_METADATA_RIGHTS_DESC" size="20" /> </fieldset> </fields> <field name="hits" type="number" label="JGLOBAL_HITS" description="COM_CONTACT_HITS_DESC" class="readonly" size="6" readonly="true" filter="unset" /> <field name="version" type="text" label="COM_CONTACT_FIELD_VERSION_LABEL" description="COM_CONTACT_FIELD_VERSION_DESC" class="readonly" size="6" readonly="true" filter="unset" /> </form> PKb��\���'�'*components/com_contact/models/contacts.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Methods supporting a list of contact records. * * @since 1.6 */ class ContactModelContacts extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JControllerLegacy * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'name', 'a.name', 'alias', 'a.alias', 'checked_out', 'a.checked_out', 'checked_out_time', 'a.checked_out_time', 'catid', 'a.catid', 'category_id', 'category_title', 'user_id', 'a.user_id', 'published', 'a.published', 'access', 'a.access', 'access_level', 'created', 'a.created', 'created_by', 'a.created_by', 'ordering', 'a.ordering', 'featured', 'a.featured', 'language', 'a.language', 'language_title', 'publish_up', 'a.publish_up', 'publish_down', 'a.publish_down', 'ul.name', 'linked_user', 'tag', 'level', 'c.level', ); $assoc = JLanguageAssociations::isEnabled(); if ($assoc) { $config['filter_fields'][] = 'association'; } } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.name', $direction = 'asc') { $app = JFactory::getApplication(); $forcedLanguage = $app->input->get('forcedLanguage', '', 'cmd'); // Adjust the context to support modal layouts. if ($layout = $app->input->get('layout')) { $this->context .= '.' . $layout; } // Adjust the context to support forced languages. if ($forcedLanguage) { $this->context .= '.' . $forcedLanguage; } $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.published', $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', '', 'string')); $this->setState('filter.category_id', $this->getUserStateFromRequest($this->context . '.filter.category_id', 'filter_category_id', '', 'string') ); $this->setState('filter.access', $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', '', 'cmd')); $this->setState('filter.language', $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', '', 'string')); $this->setState('filter.tag', $this->getUserStateFromRequest($this->context . '.filter.tag', 'filter_tag', '', 'string')); $this->setState('filter.level', $this->getUserStateFromRequest($this->context . '.filter.level', 'filter_level', null, 'int')); // List state information. parent::populateState($ordering, $direction); // Force a language. if (!empty($forcedLanguage)) { $this->setState('filter.language', $forcedLanguage); } } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.published'); $id .= ':' . serialize($this->getState('filter.category_id')); $id .= ':' . $this->getState('filter.access'); $id .= ':' . $this->getState('filter.language'); $id .= ':' . $this->getState('filter.tag'); $id .= ':' . $this->getState('filter.level'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); $user = JFactory::getUser(); // Select the required fields from the table. $query->select( $db->quoteName( explode(', ', $this->getState( 'list.select', 'a.id, a.name, a.alias, a.checked_out, a.checked_out_time, a.catid, a.user_id' . ', a.published, a.access, a.created, a.created_by, a.ordering, a.featured, a.language' . ', a.publish_up, a.publish_down' ) ) ) ); $query->from($db->quoteName('#__contact_details', 'a')); // Join over the users for the linked user. $query->select( array( $db->quoteName('ul.name', 'linked_user'), $db->quoteName('ul.email') ) ) ->join( 'LEFT', $db->quoteName('#__users', 'ul') . ' ON ' . $db->quoteName('ul.id') . ' = ' . $db->quoteName('a.user_id') ); // Join over the language $query->select($db->quoteName('l.title', 'language_title')) ->select($db->quoteName('l.image', 'language_image')) ->join( 'LEFT', $db->quoteName('#__languages', 'l') . ' ON ' . $db->quoteName('l.lang_code') . ' = ' . $db->quoteName('a.language') ); // Join over the users for the checked out user. $query->select($db->quoteName('uc.name', 'editor')) ->join( 'LEFT', $db->quoteName('#__users', 'uc') . ' ON ' . $db->quoteName('uc.id') . ' = ' . $db->quoteName('a.checked_out') ); // Join over the asset groups. $query->select($db->quoteName('ag.title', 'access_level')) ->join( 'LEFT', $db->quoteName('#__viewlevels', 'ag') . ' ON ' . $db->quoteName('ag.id') . ' = ' . $db->quoteName('a.access') ); // Join over the categories. $query->select($db->quoteName('c.title', 'category_title')) ->join( 'LEFT', $db->quoteName('#__categories', 'c') . ' ON ' . $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid') ); // Join over the associations. $assoc = JLanguageAssociations::isEnabled(); if ($assoc) { $query->select('COUNT(' . $db->quoteName('asso2.id') . ') > 1 as ' . $db->quoteName('association')) ->join( 'LEFT', $db->quoteName('#__associations', 'asso') . ' ON ' . $db->quoteName('asso.id') . ' = ' . $db->quoteName('a.id') . ' AND ' . $db->quoteName('asso.context') . ' = ' . $db->quote('com_contact.item') ) ->join( 'LEFT', $db->quoteName('#__associations', 'asso2') . ' ON ' . $db->quoteName('asso2.key') . ' = ' . $db->quoteName('asso.key') ) ->group( $db->quoteName( array( 'a.id', 'a.name', 'a.alias', 'a.checked_out', 'a.checked_out_time', 'a.catid', 'a.user_id', 'a.published', 'a.access', 'a.created', 'a.created_by', 'a.ordering', 'a.featured', 'a.language', 'a.publish_up', 'a.publish_down', 'ul.name' , 'ul.email', 'l.title' , 'l.image' , 'uc.name' , 'ag.title' , 'c.title', 'c.level' ) ) ); } // Filter by access level. if ($access = $this->getState('filter.access')) { $query->where($db->quoteName('a.access') . ' = ' . (int) $access); } // Implement View Level Access if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); $query->where($db->quoteName('a.access') . ' IN (' . $groups . ')'); } // Filter by published state $published = $this->getState('filter.published'); if (is_numeric($published)) { $query->where($db->quoteName('a.published') . ' = ' . (int) $published); } elseif ($published === '') { $query->where('(' . $db->quoteName('a.published') . ' = 0 OR ' . $db->quoteName('a.published') . ' = 1)'); } // Filter by a single or group of categories. $categoryId = $this->getState('filter.category_id'); if (is_numeric($categoryId)) { $query->where($db->quoteName('a.catid') . ' = ' . (int) $categoryId); } elseif (is_array($categoryId)) { $query->where($db->quoteName('a.catid') . ' IN (' . implode(',', ArrayHelper::toInteger($categoryId)) . ')'); } // Filter by search in name. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where('a.id = ' . (int) substr($search, 3)); } else { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where( '(' . $db->quoteName('a.name') . ' LIKE ' . $search . ' OR ' . $db->quoteName('a.alias') . ' LIKE ' . $search . ')' ); } } // Filter on the language. if ($language = $this->getState('filter.language')) { $query->where($db->quoteName('a.language') . ' = ' . $db->quote($language)); } // Filter by a single tag. $tagId = $this->getState('filter.tag'); if (is_numeric($tagId)) { $query->where($db->quoteName('tagmap.tag_id') . ' = ' . (int) $tagId) ->join( 'LEFT', $db->quoteName('#__contentitem_tag_map', 'tagmap') . ' ON ' . $db->quoteName('tagmap.content_item_id') . ' = ' . $db->quoteName('a.id') . ' AND ' . $db->quoteName('tagmap.type_alias') . ' = ' . $db->quote('com_contact.contact') ); } // Filter on the level. if ($level = $this->getState('filter.level')) { $query->where('c.level <= ' . (int) $level); } // Add the list ordering clause. $orderCol = $this->state->get('list.ordering', 'a.name'); $orderDirn = $this->state->get('list.direction', 'asc'); if ($orderCol == 'a.ordering' || $orderCol == 'category_title') { $orderCol = $db->quoteName('c.title') . ' ' . $orderDirn . ', ' . $db->quoteName('a.ordering'); } $query->order($db->escape($orderCol . ' ' . $orderDirn)); return $query; } } PKb��\��ee%components/com_contact/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_contact * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Component Controller * * @since 1.5 */ class ContactController extends JControllerLegacy { /** * The default view. * * @var string * @since 1.6 */ protected $default_view = 'contacts'; /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return ContactController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = array()) { JLoader::register('ContactHelper', JPATH_ADMINISTRATOR . '/components/com_contact/helpers/contact.php'); $view = $this->input->get('view', 'contacts'); $layout = $this->input->get('layout', 'default'); $id = $this->input->getInt('id'); // Check for edit form. if ($view == 'contact' && $layout == 'edit' && !$this->checkEditId('com_contact.edit.contact', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_contact&view=contacts', false)); return false; } return parent::display(); } } PKb��\/SLb��"components/com_contact/contact.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_contact</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_CONTACT_XML_DESCRIPTION</description> <install> <!-- Runs on install --> <sql> <file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file> </sql> </install> <uninstall> <!-- Runs on uninstall --> <sql> <file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file> </sql> </uninstall> <files folder="site"> <filename>contact.php</filename> <filename>controller.php</filename> <filename>metadata.xml</filename> <filename>router.php</filename> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="site"> <language tag="en-GB">language/en-GB.com_contact.ini</language> </languages> <administration> <menu img="class:contact">COM_CONTACT</menu> <submenu> <!-- Note that all & must be escaped to & for the file to be valid XML and be parsed by the installer --> <menu link="option=com_contact" img="class:contact" alt="Contact/Contacts">COM_CONTACT_CONTACTS</menu> <menu link="option=com_categories&extension=com_contact" view="categories" img="class:contact-cat" alt="Contacts/Categories">COM_CONTACT_CATEGORIES</menu> </submenu> <files folder="admin"> <filename>access.xml</filename> <filename>config.xml</filename> <filename>contact.php</filename> <filename>controller.php</filename> <folder>controllers</folder> <folder>elements</folder> <folder>helpers</folder> <folder>models</folder> <folder>tables</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_contact.ini</language> <language tag="en-GB">language/en-GB.com_contact.sys.ini</language> </languages> </administration> </extension> PKb��\�^��� components/com_config/config.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); // Access checks are done internally because of different requirements for the two controllers. // Tell the browser not to cache this page. JFactory::getApplication()->setHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT', true); // Load classes JLoader::registerPrefix('Config', JPATH_COMPONENT); JLoader::registerPrefix('Config', JPATH_ROOT . '/components/com_config'); // Application $app = JFactory::getApplication(); $controllerHelper = new ConfigControllerHelper; $controller = $controllerHelper->parseController($app); $controller->prefix = 'Config'; // Perform the Request task $controller->execute(); PKb��\��e� � 1components/com_config/controllers/application.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Controller for global configuration * * @since 1.5 * @deprecated 4.0 */ class ConfigControllerApplication extends JControllerLegacy { /** * Class Constructor * * @param array $config An optional associative array of configuration settings. * * @since 1.5 * @deprecated 4.0 */ public function __construct($config = array()) { parent::__construct($config); // Map the apply task to the save method. $this->registerTask('apply', 'save'); } /** * Method to save the configuration. * * @return boolean True on success, false on failure. * * @since 1.5 * @deprecated 4.0 Use ConfigControllerApplicationSave instead. */ public function save() { try { JLog::add( sprintf('%s() is deprecated. Use ConfigControllerApplicationSave instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } $controller = new ConfigControllerApplicationSave; return $controller->execute(); } /** * Cancel operation. * * @return boolean True if successful; false otherwise. * * @deprecated 4.0 Use ConfigControllerApplicationCancel instead. */ public function cancel() { try { JLog::add( sprintf('%s() is deprecated. Use ConfigControllerApplicationCancel instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } $controller = new ConfigControllerApplicationCancel; return $controller->execute(); } /** * Method to remove the root property from the configuration. * * @return boolean True on success, false on failure. * * @since 1.5 * @deprecated 4.0 Use ConfigControllerApplicationRemoveroot instead. */ public function removeroot() { try { JLog::add( sprintf('%s() is deprecated. Use ConfigControllerApplicationRemoveroot instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } $controller = new ConfigControllerApplicationRemoveroot; return $controller->execute(); } } PKb��\�r� /components/com_config/controllers/component.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Note: this view is intended only to be opened in a popup * * @since 1.5 * @deprecated 4.0 */ class ConfigControllerComponent extends JControllerLegacy { /** * Class Constructor * * @param array $config An optional associative array of configuration settings. * * @since 1.5 * @deprecated 4.0 */ public function __construct($config = array()) { parent::__construct($config); // Map the apply task to the save method. $this->registerTask('apply', 'save'); } /** * Cancel operation * * @return void * * @since 3.0 * @deprecated 4.0 Use ConfigControllerComponentCancel instead. */ public function cancel() { try { JLog::add( sprintf('%s() is deprecated. Use ConfigControllerComponentCancel instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } $controller = new ConfigControllerComponentCancel; $controller->execute(); } /** * Save the configuration. * * @return boolean True if successful; false otherwise. * * @deprecated 4.0 Use ConfigControllerComponentSave instead. */ public function save() { try { JLog::add( sprintf('%s() is deprecated. Use ConfigControllerComponentSave instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } $controller = new ConfigControllerComponentSave; return $controller->execute(); } } PKb��\k<>@��5components/com_config/controller/component/cancel.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Cancel Controller for global configuration components * * @since 3.2 */ class ConfigControllerComponentCancel extends ConfigControllerCanceladmin { /** * Method to cancel global configuration component. * * @return void * * @since 3.2 */ public function execute() { $this->context = 'com_config.config.global'; $this->component = $this->input->get('component'); $this->redirect = 'index.php?option=' . $this->component; parent::execute(); } } PKb��\dB����3components/com_config/controller/component/save.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Save Controller for global configuration * * @since 3.2 */ class ConfigControllerComponentSave extends JControllerBase { /** * Application object - Redeclared for proper typehinting * * @var JApplicationCms * @since 3.2 */ protected $app; /** * Method to save global configuration. * * @return mixed Calls $app->redirect() * * @since 3.2 */ public function execute() { // Check for request forgeries. if (!JSession::checkToken()) { $this->app->enqueueMessage(JText::_('JINVALID_TOKEN'), 'error'); $this->app->redirect('index.php'); } // Set FTP credentials, if given. JClientHelper::setCredentialsFromRequest('ftp'); $model = new ConfigModelComponent; $form = $model->getForm(); $data = $this->input->get('jform', array(), 'array'); $id = $this->input->getInt('id'); $option = $this->input->get('component'); $user = JFactory::getUser(); // Make sure com_joomlaupdate and com_privacy can only be accessed by SuperUser if (in_array(strtolower($option), array('com_joomlaupdate', 'com_privacy')) && !JFactory::getUser()->authorise('core.admin')) { $this->app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'error'); return; } // Check if the user is authorised to do this. if (!$user->authorise('core.admin', $option) && !$user->authorise('core.options', $option)) { $this->app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'error'); $this->app->redirect('index.php'); } // Remove the permissions rules data if user isn't allowed to edit them. if (!$user->authorise('core.admin', $option) && isset($data['params']) && isset($data['params']['rules'])) { unset($data['params']['rules']); } $returnUri = $this->input->post->get('return', null, 'base64'); $redirect = ''; if (!empty($returnUri)) { $redirect = '&return=' . urlencode($returnUri); } // Validate the posted data. $return = $model->validate($form, $data); // Check for validation errors. if ($return === false) { /* * The validate method enqueued all messages for us, so we just need to redirect back. */ // Save the data in the session. $this->app->setUserState('com_config.config.global.data', $data); // Redirect back to the edit screen. $this->app->redirect(JRoute::_('index.php?option=com_config&view=component&component=' . $option . $redirect, false)); } // Attempt to save the configuration. $data = array( 'params' => $return, 'id' => $id, 'option' => $option ); try { $model->save($data); } catch (RuntimeException $e) { // Save the data in the session. $this->app->setUserState('com_config.config.global.data', $data); // Save failed, go back to the screen and display a notice. $this->app->enqueueMessage(JText::sprintf('JERROR_SAVE_FAILED', $e->getMessage()), 'error'); $this->app->redirect(JRoute::_('index.php?option=com_config&view=component&component=' . $option . $redirect, false)); } // Set the redirect based on the task. switch ($this->options[3]) { case 'apply': $this->app->enqueueMessage(JText::_('COM_CONFIG_SAVE_SUCCESS'), 'message'); $this->app->redirect(JRoute::_('index.php?option=com_config&view=component&component=' . $option . $redirect, false)); break; case 'save': default: $redirect = 'index.php?option=' . $option; if (!empty($returnUri)) { $redirect = base64_decode($returnUri); } // Don't redirect to an external URL. if (!JUri::isInternal($redirect)) { $redirect = JUri::base(); } $this->app->redirect(JRoute::_($redirect, false)); break; } return true; } } PKb��\�ž�116components/com_config/controller/component/display.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Base Display Controller * * @since 3.2 * @note Needed for front end view */ class ConfigControllerComponentDisplay extends ConfigControllerDisplay { /** * Prefix for the view and model classes * * @var string * @since 3.2 */ public $prefix = 'Config'; } PKb��\ԅ%��;components/com_config/controller/application/removeroot.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Remove Root Controller for global configuration * * @since 3.2 */ class ConfigControllerApplicationRemoveroot extends JControllerBase { /** * Application object - Redeclared for proper typehinting * * @var JApplicationCms * @since 3.2 */ protected $app; /** * Method to remove root in global configuration. * * @return boolean True on success. * * @since 3.2 */ public function execute() { // Check for request forgeries. if (!JSession::checkToken('get')) { $this->app->enqueueMessage(JText::_('JINVALID_TOKEN')); $this->app->redirect('index.php'); } // Check if the user is authorized to do this. if (!JFactory::getUser()->authorise('core.admin')) { $this->app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR')); $this->app->redirect('index.php'); } // Initialise model. $model = new ConfigModelApplication; // Attempt to save the configuration and remove root. try { $model->removeroot(); } catch (RuntimeException $e) { // Save failed, go back to the screen and display a notice. $this->app->enqueueMessage(JText::sprintf('JERROR_SAVE_FAILED', $e->getMessage()), 'error'); $this->app->redirect(JRoute::_('index.php', false)); } // Set the redirect based on the task. $this->app->enqueueMessage(JText::_('COM_CONFIG_SAVE_SUCCESS')); $this->app->redirect(JRoute::_('index.php', false)); } } PKb��\S�n[��<components/com_config/controller/application/refreshhelp.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Refresh Help Controller for global configuration * * @since 3.2 */ class ConfigControllerApplicationRefreshhelp extends JControllerBase { /** * Application object - Redeclared for proper typehinting * * @var JApplicationCms * @since 3.2 */ protected $app; /** * Method to refresh help in global configuration. * * @return boolean True on success. * * @since 3.2 */ public function execute() { jimport('joomla.filesystem.file'); // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); if (($data = file_get_contents('http://help.joomla.org/helpsites.xml')) === false) { $this->app->enqueueMessage(JText::_('COM_CONFIG_ERROR_HELPREFRESH_FETCH'), 'error'); $this->app->redirect(JRoute::_('index.php?option=com_config', false)); } elseif (!JFile::write(JPATH_BASE . '/help/helpsites.xml', $data)) { $this->app->enqueueMessage(JText::_('COM_CONFIG_ERROR_HELPREFRESH_ERROR_STORE'), 'error'); $this->app->redirect(JRoute::_('index.php?option=com_config', false)); } else { $this->app->enqueueMessage(JText::_('COM_CONFIG_HELPREFRESH_SUCCESS'), 'error'); $this->app->redirect(JRoute::_('index.php?option=com_config', false)); } } } PKb��\�FQL��7components/com_config/controller/application/cancel.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Cancel Controller for global configuration * * @since 3.2 */ class ConfigControllerApplicationCancel extends ConfigControllerCanceladmin { /** * Method to cancel global configuration. * * @return boolean True on success. * * @since 3.2 */ public function execute() { // Check if the user is authorized to do this. if (!JFactory::getUser()->authorise('core.admin', 'com_config')) { $this->app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR')); $this->app->redirect('index.php'); } $this->context = 'com_config.config.global'; $this->redirect = 'index.php?option=com_cpanel'; parent::execute(); } } PKb��\]{~�W W 5components/com_config/controller/application/save.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Save Controller for global configuration * * @since 3.2 */ class ConfigControllerApplicationSave extends JControllerBase { /** * Application object - Redeclared for proper typehinting * * @var JApplicationCms * @since 3.2 */ protected $app; /** * Method to save global configuration. * * @return mixed Calls $app->redirect() for all cases except JSON * * @since 3.2 */ public function execute() { // Check for request forgeries. if (!JSession::checkToken()) { $this->app->enqueueMessage(JText::_('JINVALID_TOKEN'), 'error'); $this->app->redirect('index.php'); } // Check if the user is authorized to do this. if (!JFactory::getUser()->authorise('core.admin')) { $this->app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'error'); $this->app->redirect('index.php'); } // Set FTP credentials, if given. JClientHelper::setCredentialsFromRequest('ftp'); $model = new ConfigModelApplication; $data = $this->input->post->get('jform', array(), 'array'); // Complete data array if needed $oldData = $model->getData(); $data = array_replace($oldData, $data); // Get request type $saveFormat = JFactory::getDocument()->getType(); // Handle service requests if ($saveFormat == 'json') { $form = $model->getForm(); $return = $model->validate($form, $data); if ($return === false) { $this->app->setHeader('Status', 422, true); return false; } return $model->save($return); } // Must load after serving service-requests $form = $model->getForm(); // Validate the posted data. $return = $model->validate($form, $data); // Check for validation errors. if ($return === false) { /* * The validate method enqueued all messages for us, so we just need to redirect back. */ // Save the posted data in the session. $this->app->setUserState('com_config.config.global.data', $data); // Redirect back to the edit screen. $this->app->redirect(JRoute::_('index.php?option=com_config&controller=config.display.application', false)); } // Attempt to save the configuration. $data = $return; $return = $model->save($data); // Check the return value. if ($return === false) { /* * The save method enqueued all messages for us, so we just need to redirect back. */ // Save the validated data in the session. $this->app->setUserState('com_config.config.global.data', $data); // Save failed, go back to the screen and display a notice. $this->app->redirect(JRoute::_('index.php?option=com_config&controller=config.display.application', false)); } // Set the success message. $this->app->enqueueMessage(JText::_('COM_CONFIG_SAVE_SUCCESS'), 'message'); // Clear the data from the session. $this->app->setUserState('com_config.config.global.data', null); // Set the redirect based on the task. switch ($this->options[3]) { case 'apply': $this->app->redirect(JRoute::_('index.php?option=com_config', false)); break; case 'save': default: $this->app->redirect(JRoute::_('index.php', false)); break; } } } PKb��\�וC338components/com_config/controller/application/display.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Base Display Controller * * @since 3.2 * @note Needed for front end view */ class ConfigControllerApplicationDisplay extends ConfigControllerDisplay { /** * Prefix for the view and model classes * * @var string * @since 3.2 */ public $prefix = 'Config'; } PKb��\ ��g@components/com_config/view/component/tmpl/default_navigation.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <ul class="nav nav-list"> <?php if ($this->userIsSuperAdmin) : ?> <li class="nav-header"><?php echo JText::_('COM_CONFIG_SYSTEM'); ?></li> <li><a href="index.php?option=com_config"><?php echo JText::_('COM_CONFIG_GLOBAL_CONFIGURATION'); ?></a></li> <li class="divider"></li> <?php endif; ?> <li class="nav-header"><?php echo JText::_('COM_CONFIG_COMPONENT_FIELDSET_LABEL'); ?></li> <?php foreach ($this->components as $component) : ?> <?php $active = ''; if ($this->currentComponent === $component) { $active = ' class="active"'; } ?> <li<?php echo $active; ?>> <a href="index.php?option=com_config&view=component&component=<?php echo $component; ?>"><?php echo JText::_($component); ?></a> </li> <?php endforeach; ?> </ul> PKb��\:�iPP5components/com_config/view/component/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $app = JFactory::getApplication(); $template = $app->getTemplate(); // Load the tooltip behavior. JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', '.chzn-custom-value', null, array('disable_search_threshold' => 0)); JHtml::_('formbehavior.chosen', 'select'); // Load JS message titles JText::script('ERROR'); JText::script('WARNING'); JText::script('NOTICE'); JText::script('MESSAGE'); JFactory::getDocument()->addScriptDeclaration( ' Joomla.submitbutton = function(task) { if (task === "config.cancel.component" || document.formvalidator.isValid(document.getElementById("component-form"))) { jQuery("#permissions-sliders select").attr("disabled", "disabled"); Joomla.submitform(task, document.getElementById("component-form")); } }; // Select first tab jQuery(document).ready(function() { jQuery("#configTabs a:first").tab("show"); });' ); ?> <form action="<?php echo JRoute::_('index.php?option=com_config'); ?>" id="component-form" method="post" name="adminForm" autocomplete="off" class="form-validate form-horizontal"> <div class="row-fluid"> <!-- Begin Sidebar --> <div class="span2" id="sidebar"> <div class="sidebar-nav"> <?php echo $this->loadTemplate('navigation'); ?> </div> </div><!-- End Sidebar --> <div class="span10" id="config"> <?php if ($this->fieldsets): ?> <ul class="nav nav-tabs" id="configTabs"> <?php foreach ($this->fieldsets as $name => $fieldSet) : ?> <?php $dataShowOn = ''; ?> <?php if (!empty($fieldSet->showon)) : ?> <?php JHtml::_('jquery.framework'); ?> <?php JHtml::_('script', 'jui/cms.js', array('version' => 'auto', 'relative' => true)); ?> <?php $dataShowOn = ' data-showon=\'' . json_encode(JFormHelper::parseShowOnConditions($fieldSet->showon, $this->formControl)) . '\''; ?> <?php endif; ?> <?php $label = empty($fieldSet->label) ? 'COM_CONFIG_' . $name . '_FIELDSET_LABEL' : $fieldSet->label; ?> <li<?php echo $dataShowOn; ?>><a data-toggle="tab" href="#<?php echo $name; ?>"><?php echo JText::_($label); ?></a></li> <?php endforeach; ?> </ul><!-- /configTabs --> <div class="tab-content" id="configContent"> <?php foreach ($this->fieldsets as $name => $fieldSet) : ?> <div class="tab-pane" id="<?php echo $name; ?>"> <?php if (isset($fieldSet->description) && !empty($fieldSet->description)) : ?> <div class="tab-description alert alert-info"> <span class="icon-info" aria-hidden="true"></span> <?php echo JText::_($fieldSet->description); ?> </div> <?php endif; ?> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <?php $dataShowOn = ''; $groupClass = $field->type === 'Spacer' ? ' field-spacer' : ''; ?> <?php if ($field->showon) : ?> <?php JHtml::_('jquery.framework'); ?> <?php JHtml::_('script', 'jui/cms.js', array('version' => 'auto', 'relative' => true)); ?> <?php $dataShowOn = ' data-showon=\'' . json_encode(JFormHelper::parseShowOnConditions($field->showon, $field->formControl, $field->group)) . '\''; ?> <?php endif; ?> <?php if ($field->hidden) : ?> <?php echo $field->input; ?> <?php else : ?> <div class="control-group<?php echo $groupClass; ?>"<?php echo $dataShowOn; ?>> <?php if ($name != 'permissions') : ?> <div class="control-label"> <?php echo $field->label; ?> </div> <?php endif; ?> <div class="<?php if ($name != 'permissions') : ?>controls<?php endif; ?>"> <?php echo $field->input; ?> </div> </div> <?php endif; ?> <?php endforeach; ?> </div> <?php endforeach; ?> </div><!-- /configContent --> <?php else: ?> <div class="alert alert-info"><span class="icon-info" aria-hidden="true"></span> <?php echo JText::_('COM_CONFIG_COMPONENT_NO_CONFIG_FIELDS_MESSAGE'); ?></div> <?php endif; ?> </div><!-- /config --> <input type="hidden" name="id" value="<?php echo $this->component->id; ?>" /> <input type="hidden" name="component" value="<?php echo $this->component->option; ?>" /> <input type="hidden" name="return" value="<?php echo $this->return; ?>" /> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\r!NP -components/com_config/view/component/html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View for the component configuration * * @since 3.2 */ class ConfigViewComponentHtml extends ConfigViewCmsHtml { public $state; public $form; public $component; /** * Display the view * * @return string The rendered view. * * @since 3.2 * */ public function render() { $form = null; $component = null; try { $component = $this->model->getComponent(); if (!$component->enabled) { return false; } $form = $this->model->getForm(); $user = JFactory::getUser(); } catch (Exception $e) { JFactory::getApplication()->enqueueMessage($e->getMessage(), 'error'); return false; } // Bind the form to the data. if ($form && $component->params) { $form->bind($component->params); } $this->fieldsets = $form ? $form->getFieldsets() : null; $this->formControl = $form ? $form->getFormControl() : null; // Don't show permissions fieldset if not authorised. if (!$user->authorise('core.admin', $component->option) && isset($this->fieldsets['permissions'])) { unset($this->fieldsets['permissions']); } $this->form = &$form; $this->component = &$component; $this->components = ConfigHelperConfig::getComponentsWithConfig(); $this->userIsSuperAdmin = $user->authorise('core.admin'); $this->currentComponent = JFactory::getApplication()->input->get('component'); $this->return = JFactory::getApplication()->input->get('return', '', 'base64'); $this->addToolbar(); return parent::render(); } /** * Add the page title and toolbar. * * @return void * * @since 3.2 */ protected function addToolbar() { JToolbarHelper::title(JText::_($this->component->option . '_configuration'), 'equalizer config'); JToolbarHelper::apply('config.save.component.apply'); JToolbarHelper::save('config.save.component.save'); JToolbarHelper::divider(); JToolbarHelper::cancel('config.cancel.component'); JToolbarHelper::divider(); JToolbarHelper::help('JHELP_COMPONENTS_' . $this->currentComponent . '_OPTIONS'); } } PKb��\c����/components/com_config/view/application/json.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View for the component configuration * * @since 3.2 */ class ConfigViewApplicationJson extends ConfigViewCmsJson { public $state; public $data; /** * Display the view * * @return string The rendered view. * * @since 3.2 */ public function render() { try { $this->data = $this->model->getData(); $user = JFactory::getUser(); } catch (Exception $e) { JFactory::getApplication()->enqueueMessage($e->getMessage(), 'error'); return false; } $this->userIsSuperAdmin = $user->authorise('core.admin'); // Required data $requiredData = array( 'sitename' => null, 'offline' => null, 'access' => null, 'list_limit' => null, 'MetaDesc' => null, 'MetaKeys' => null, 'MetaRights' => null, 'sef' => null, 'sitename_pagetitles' => null, 'debug' => null, 'debug_lang' => null, 'error_reporting' => null, 'mailfrom' => null, 'fromname' => null ); $this->data = array_intersect_key($this->data, $requiredData); return json_encode($this->data); } } PKb��\G�I���>components/com_config/view/application/tmpl/default_locale.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_LOCATION_SETTINGS'); $this->fieldsname = 'locale'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\:�>components/com_config/view/application/tmpl/default_system.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_SYSTEM_SETTINGS'); $this->fieldsname = 'system'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\�:��>components/com_config/view/application/tmpl/default_server.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_SERVER_SETTINGS'); $this->fieldsname = 'server'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\k0���=components/com_config/view/application/tmpl/default_proxy.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_PROXY_SETTINGS'); $this->fieldsname = 'proxy'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\��k��Bcomponents/com_config/view/application/tmpl/default_navigation.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <ul class="nav nav-list"> <?php if ($this->userIsSuperAdmin) : ?> <li class="nav-header"><?php echo JText::_('COM_CONFIG_SYSTEM'); ?></li> <li class="active"> <a href="index.php?option=com_config"><?php echo JText::_('COM_CONFIG_GLOBAL_CONFIGURATION'); ?></a> </li> <li class="divider"></li> <?php endif; ?> <li class="nav-header"><?php echo JText::_('COM_CONFIG_COMPONENT_FIELDSET_LABEL'); ?></li> <?php foreach ($this->components as $component) : ?> <li> <a href="index.php?option=com_config&view=component&component=<?php echo $component; ?>"><?php echo JText::_($component); ?></a> </li> <?php endforeach; ?> </ul> PKb��\d֙���<components/com_config/view/application/tmpl/default_site.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_SITE_SETTINGS'); $this->fieldsname = 'site'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\lE���@components/com_config/view/application/tmpl/default_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_METADATA_SETTINGS'); $this->fieldsname = 'metadata'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\wG\P��?components/com_config/view/application/tmpl/default_filters.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_TEXT_FILTER_SETTINGS'); $this->fieldsname = 'filters'; $this->description = JText::_('COM_CONFIG_TEXT_FILTERS_DESC'); echo JLayoutHelper::render('joomla.content.text_filters', $this); PKb��\�� ~��>components/com_config/view/application/tmpl/default_cookie.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_COOKIE_SETTINGS'); $this->fieldsname = 'cookie'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\;�^��;components/com_config/view/application/tmpl/default_seo.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_SEO_SETTINGS'); $this->fieldsname = 'seo'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\��K��?components/com_config/view/application/tmpl/default_session.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_SESSION_SETTINGS'); $this->fieldsname = 'session'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\R!Aܨ�;components/com_config/view/application/tmpl/default_ftp.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_FTP_SETTINGS'); $this->fieldsname = 'ftp'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\;~��@components/com_config/view/application/tmpl/default_database.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_DATABASE_SETTINGS'); $this->fieldsname = 'database'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\��Hyy@components/com_config/view/application/tmpl/default_ftplogin.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset title="<?php echo JText::_('COM_CONFIG_FTP_DETAILS'); ?>" class="form-horizontal"> <legend><?php echo JText::_('COM_CONFIG_FTP_DETAILS'); ?></legend> <?php echo JText::_('COM_CONFIG_FTP_DETAILS_TIP'); ?> <?php if ($this->ftp instanceof Exception) : ?> <p><?php echo JText::_($this->ftp->message); ?></p> <?php endif; ?> <div class="control-group"> <div class="control-label"><label for="username"><?php echo JText::_('JGLOBAL_USERNAME'); ?></label></div> <div class="controls"> <input type="text" id="username" name="username" class="input_box" size="70" value="" /> </div> </div> <div class="control-group"> <div class="control-label"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></div> <div class="controls"> <input type="password" id="password" name="password" class="input_box" size="70" value="" /> </div> </div> </fieldset> PKb��\�\��7components/com_config/view/application/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; // Load tooltips behavior JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('bootstrap.tooltip'); JHtml::_('formbehavior.chosen', 'select'); // Load JS message titles JText::script('ERROR'); JText::script('WARNING'); JText::script('NOTICE'); JText::script('MESSAGE'); JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(task) { if (task === "config.cancel.application" || document.formvalidator.isValid(document.getElementById("application-form"))) { jQuery("#permissions-sliders select").attr("disabled", "disabled"); Joomla.submitform(task, document.getElementById("application-form")); } }; '); ?> <form action="<?php echo JRoute::_('index.php?option=com_config'); ?>" id="application-form" method="post" name="adminForm" class="form-validate"> <div class="row-fluid"> <!-- Begin Sidebar --> <div id="sidebar" class="span2"> <div class="sidebar-nav"> <?php echo $this->loadTemplate('navigation'); ?> <?php // Display the submenu position modules $this->submenumodules = JModuleHelper::getModules('submenu'); foreach ($this->submenumodules as $submenumodule) { $output = JModuleHelper::renderModule($submenumodule); $params = new Registry($submenumodule->params); echo $output; } ?> </div> </div> <!-- End Sidebar --> <!-- Begin Content --> <div class="span10"> <ul class="nav nav-tabs"> <li class="active"><a href="#page-site" data-toggle="tab"><?php echo JText::_('JSITE'); ?></a></li> <li><a href="#page-system" data-toggle="tab"><?php echo JText::_('COM_CONFIG_SYSTEM'); ?></a></li> <li><a href="#page-server" data-toggle="tab"><?php echo JText::_('COM_CONFIG_SERVER'); ?></a></li> <li><a href="#page-filters" data-toggle="tab"><?php echo JText::_('COM_CONFIG_TEXT_FILTERS'); ?></a></li> <?php if ($this->ftp) : ?> <li><a href="#page-ftp" data-toggle="tab"><?php echo JText::_('COM_CONFIG_FTP_SETTINGS'); ?></a></li> <?php endif; ?> <li><a href="#page-permissions" data-toggle="tab"><?php echo JText::_('COM_CONFIG_PERMISSIONS'); ?></a></li> </ul> <div id="config-document" class="tab-content"> <div id="page-site" class="tab-pane active"> <div class="row-fluid"> <div class="span6"> <?php echo $this->loadTemplate('site'); ?> <?php echo $this->loadTemplate('metadata'); ?> </div> <div class="span6"> <?php echo $this->loadTemplate('seo'); ?> <?php echo $this->loadTemplate('cookie'); ?> </div> </div> </div> <div id="page-system" class="tab-pane"> <div class="row-fluid"> <div class="span12"> <?php echo $this->loadTemplate('system'); ?> <?php echo $this->loadTemplate('debug'); ?> <?php echo $this->loadTemplate('cache'); ?> <?php echo $this->loadTemplate('session'); ?> </div> </div> </div> <div id="page-server" class="tab-pane"> <div class="row-fluid"> <div class="span6"> <?php echo $this->loadTemplate('server'); ?> <?php echo $this->loadTemplate('locale'); ?> <?php echo $this->loadTemplate('ftp'); ?> <?php echo $this->loadTemplate('proxy'); ?> </div> <div class="span6"> <?php echo $this->loadTemplate('database'); ?> <?php echo $this->loadTemplate('mail'); ?> </div> </div> </div> <div id="page-filters" class="tab-pane"> <div class="row-fluid"> <?php echo $this->loadTemplate('filters'); ?> </div> </div> <?php if ($this->ftp) : ?> <div id="page-ftp" class="tab-pane"> <?php echo $this->loadTemplate('ftplogin'); ?> </div> <?php endif; ?> <div id="page-permissions" class="tab-pane"> <div class="row-fluid"> <?php echo $this->loadTemplate('permissions'); ?> </div> </div> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div> </div> <!-- End Content --> </div> </form> PKb��\m�]�Ccomponents/com_config/view/application/tmpl/default_permissions.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_PERMISSION_SETTINGS'); $this->description = ''; $this->fieldsname = 'permissions'; $this->formclass = 'form-vertical'; $this->showlabel = false; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\��o0��=components/com_config/view/application/tmpl/default_debug.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_DEBUG_SETTINGS'); $this->fieldsname = 'debug'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\�0s��<components/com_config/view/application/tmpl/default_mail.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('jquery.token'); JHtml::_('script', 'system/sendtestmail.js', array('version' => 'auto', 'relative' => true)); // Load JavaScript message titles JText::script('ERROR'); JText::script('WARNING'); JText::script('NOTICE'); JText::script('MESSAGE'); // Add strings for JavaScript error translations. JText::script('JLIB_JS_AJAX_ERROR_CONNECTION_ABORT'); JText::script('JLIB_JS_AJAX_ERROR_NO_CONTENT'); JText::script('JLIB_JS_AJAX_ERROR_OTHER'); JText::script('JLIB_JS_AJAX_ERROR_PARSE'); JText::script('JLIB_JS_AJAX_ERROR_TIMEOUT'); // Ajax request data. $ajaxUri = JRoute::_('index.php?option=com_config&task=config.sendtestmail.application&format=json'); $this->name = JText::_('COM_CONFIG_MAIL_SETTINGS'); $this->fieldsname = 'mail'; echo JLayoutHelper::render('joomla.content.options_default', $this); echo '<button class="btn btn-small" data-ajaxuri="' . $ajaxUri . '" type="button" id="sendtestmail"> <span>' . JText::_('COM_CONFIG_SENDMAIL_ACTION_BUTTON') . '</span> </button>'; PKb��\��p��=components/com_config/view/application/tmpl/default_cache.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->name = JText::_('COM_CONFIG_CACHE_SETTINGS'); $this->fieldsname = 'cache'; echo JLayoutHelper::render('joomla.content.options_default', $this); PKb��\�{J�bb/components/com_config/view/application/html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View for the global configuration * * @since 3.2 */ class ConfigViewApplicationHtml extends ConfigViewCmsHtml { public $state; public $form; public $data; /** * Method to display the view. * * @return string The rendered view. * * @since 3.2 */ public function render() { $form = null; $data = null; try { // Load Form and Data $form = $this->model->getForm(); $data = $this->model->getData(); $user = JFactory::getUser(); } catch (Exception $e) { JFactory::getApplication()->enqueueMessage($e->getMessage(), 'error'); return false; } // Bind data if ($form && $data) { $form->bind($data); } // Get the params for com_users. $usersParams = JComponentHelper::getParams('com_users'); // Get the params for com_media. $mediaParams = JComponentHelper::getParams('com_media'); // Load settings for the FTP layer. $ftp = JClientHelper::setCredentialsFromRequest('ftp'); $this->form = &$form; $this->data = &$data; $this->ftp = &$ftp; $this->usersParams = &$usersParams; $this->mediaParams = &$mediaParams; $this->components = ConfigHelperConfig::getComponentsWithConfig(); ConfigHelperConfig::loadLanguageForComponents($this->components); $this->userIsSuperAdmin = $user->authorise('core.admin'); $this->addToolbar(); return parent::render(); } /** * Add the page title and toolbar. * * @return void * * @since 3.2 */ protected function addToolbar() { JToolbarHelper::title(JText::_('COM_CONFIG_GLOBAL_CONFIGURATION'), 'equalizer config'); JToolbarHelper::apply('config.save.application.apply'); JToolbarHelper::save('config.save.application.save'); JToolbarHelper::divider(); JToolbarHelper::cancel('config.cancel.application'); JToolbarHelper::divider(); JToolbarHelper::help('JHELP_SITE_GLOBAL_CONFIGURATION'); } } PKb��\�IMA�� components/com_config/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_config</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_CONFIG_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>config.php</filename> <filename>controller.php</filename> <folder>controllers</folder> <folder>models</folder> <folder>controller</folder> <folder>model</folder> <folder>view</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_config.ini</language> <language tag="en-GB">language/en-GB.com_config.sys.ini</language> </languages> </administration> </extension> PKb��\1uĽ�� components/com_config/access.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <access component="com_config"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> </section> </access> PKb��\5;��'components/com_config/helper/config.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Components helper for com_config * * @since 3.0 */ class ConfigHelperConfig extends JHelperContent { /** * Get an array of all enabled components. * * @return array * * @since 3.0 */ public static function getAllComponents() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('element') ->from('#__extensions') ->where('type = ' . $db->quote('component')) ->where('enabled = 1'); $db->setQuery($query); $result = $db->loadColumn(); return $result; } /** * Returns true if the component has configuration options. * * @param string $component Component name * * @return boolean * * @since 3.0 */ public static function hasComponentConfig($component) { return is_file(JPATH_ADMINISTRATOR . '/components/' . $component . '/config.xml'); } /** * Returns an array of all components with configuration options. * Optionally return only those components for which the current user has 'core.manage' rights. * * @param boolean $authCheck True to restrict to components where current user has 'core.manage' rights. * * @return array * * @since 3.0 */ public static function getComponentsWithConfig($authCheck = true) { $result = array(); $components = self::getAllComponents(); $user = JFactory::getUser(); // Remove com_config from the array as that may have weird side effects $components = array_diff($components, array('com_config')); foreach ($components as $component) { if (self::hasComponentConfig($component) && (!$authCheck || $user->authorise('core.manage', $component))) { self::loadLanguageForComponent($component); $result[$component] = JApplicationHelper::stringURLSafe(JText::_($component)) . '_' . $component; } } asort($result); return array_keys($result); } /** * Load the sys language for the given component. * * @param array $components Array of component names. * * @return void * * @since 3.0 */ public static function loadLanguageForComponents($components) { foreach ($components as $component) { self::loadLanguageForComponent($component); } } /** * Load the sys language for the given component. * * @param string $component component name. * * @return void * * @since 3.5 */ public static function loadLanguageForComponent($component) { if (empty($component)) { return; } $lang = JFactory::getLanguage(); // Load the core file then // Load extension-local file. $lang->load($component . '.sys', JPATH_BASE, null, false, true) || $lang->load($component . '.sys', JPATH_ADMINISTRATOR . '/components/' . $component, null, false, true); } } PKb��\~\�\\,components/com_config/models/application.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; try { JLog::add( sprintf('ConfigModelApplication has moved from %1$s to %2$s', __FILE__, dirname(__DIR__) . '/model/application.php'), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } include_once JPATH_ADMINISTRATOR . '/components/com_config/model/application.php'; PKb��\ܼ�6VV*components/com_config/models/component.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; try { JLog::add( sprintf('ConfigModelComponent has moved from %1$s to %2$s', __FILE__, dirname(__DIR__) . '/model/component.php'), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } include_once JPATH_ADMINISTRATOR . '/components/com_config/model/component.php'; PKb��\{����$components/com_config/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Config Component Controller * * @since 1.5 */ class ConfigController extends JControllerLegacy { /** * @var string The default view. * @since 1.6 */ protected $default_view = 'application'; /** * Method to display the view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return ConfigController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = array()) { // Set the default view name and format from the Request. $vName = $this->input->get('view', 'application'); if (ucfirst($vName) == 'Application') { $controller = new ConfigControllerApplicationDisplay; } elseif (ucfirst($vName) == 'Component') { $controller = new ConfigControllerComponentDisplay; } return $controller->execute(); } } PKb��\��&"�n�n+components/com_config/model/application.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; /** * Model for the global configuration * * @since 3.2 */ class ConfigModelApplication extends ConfigModelForm { /** * Method to get a form object. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_config.application', 'application', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } /** * Method to get the configuration data. * * This method will load the global configuration data straight from * JConfig. If configuration data has been saved in the session, that * data will be merged into the original data, overwriting it. * * @return array An array containg all global config data. * * @since 1.6 */ public function getData() { // Get the config data. $config = new JConfig; $data = ArrayHelper::fromObject($config); // Prime the asset_id for the rules. $data['asset_id'] = 1; // Get the text filter data $params = JComponentHelper::getParams('com_config'); $data['filters'] = ArrayHelper::fromObject($params->get('filters')); // If no filter data found, get from com_content (update of 1.6/1.7 site) if (empty($data['filters'])) { $contentParams = JComponentHelper::getParams('com_content'); $data['filters'] = ArrayHelper::fromObject($contentParams->get('filters')); } // Check for data in the session. $temp = JFactory::getApplication()->getUserState('com_config.config.global.data'); // Merge in the session data. if (!empty($temp)) { $data = array_merge($data, $temp); } return $data; } /** * Method to save the configuration data. * * @param array $data An array containing all global config data. * * @return boolean True on success, false on failure. * * @since 1.6 */ public function save($data) { $app = JFactory::getApplication(); $dispatcher = JEventDispatcher::getInstance(); // Check that we aren't setting wrong database configuration $options = array( 'driver' => $data['dbtype'], 'host' => $data['host'], 'user' => $data['user'], 'password' => JFactory::getConfig()->get('password'), 'database' => $data['db'], 'prefix' => $data['dbprefix'] ); try { JDatabaseDriver::getInstance($options)->getVersion(); } catch (Exception $e) { $app->enqueueMessage(JText::_('JLIB_DATABASE_ERROR_DATABASE_CONNECT'), 'error'); return false; } // Check if we can set the Force SSL option if ((int) $data['force_ssl'] !== 0 && (int) $data['force_ssl'] !== (int) JFactory::getConfig()->get('force_ssl', '0')) { try { // Make an HTTPS request to check if the site is available in HTTPS. $host = JUri::getInstance()->getHost(); $options = new \Joomla\Registry\Registry; $options->set('userAgent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0'); // Do not check for valid server certificate here, leave this to the user, moreover disable using a proxy if any is configured. $options->set('transport.curl', array( CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_PROXY => null, CURLOPT_PROXYUSERPWD => null, ) ); $response = JHttpFactory::getHttp($options)->get('https://' . $host . JUri::root(true) . '/', array('Host' => $host), 10); // If available in HTTPS check also the status code. if (!in_array($response->code, array(200, 503, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 401), true)) { throw new RuntimeException(JText::_('COM_CONFIG_ERROR_SSL_NOT_AVAILABLE_HTTP_CODE')); } } catch (RuntimeException $e) { $data['force_ssl'] = 0; // Also update the user state $app->setUserState('com_config.config.global.data.force_ssl', 0); // Inform the user $app->enqueueMessage(JText::sprintf('COM_CONFIG_ERROR_SSL_NOT_AVAILABLE', $e->getMessage()), 'warning'); } } // Save the rules if (isset($data['rules'])) { $rules = new JAccessRules($data['rules']); // Check that we aren't removing our Super User permission // Need to get groups from database, since they might have changed $myGroups = JAccess::getGroupsByUser(JFactory::getUser()->get('id')); $myRules = $rules->getData(); $hasSuperAdmin = $myRules['core.admin']->allow($myGroups); if (!$hasSuperAdmin) { $app->enqueueMessage(JText::_('COM_CONFIG_ERROR_REMOVING_SUPER_ADMIN'), 'error'); return false; } $asset = JTable::getInstance('asset'); if ($asset->loadByName('root.1')) { $asset->rules = (string) $rules; if (!$asset->check() || !$asset->store()) { $app->enqueueMessage($asset->getError(), 'error'); return; } } else { $app->enqueueMessage(JText::_('COM_CONFIG_ERROR_ROOT_ASSET_NOT_FOUND'), 'error'); return false; } unset($data['rules']); } // Save the text filters if (isset($data['filters'])) { $registry = new Registry(array('filters' => $data['filters'])); $extension = JTable::getInstance('extension'); // Get extension_id $extensionId = $extension->find(array('name' => 'com_config')); if ($extension->load((int) $extensionId)) { $extension->params = (string) $registry; if (!$extension->check() || !$extension->store()) { $app->enqueueMessage($extension->getError(), 'error'); return; } } else { $app->enqueueMessage(JText::_('COM_CONFIG_ERROR_CONFIG_EXTENSION_NOT_FOUND'), 'error'); return false; } unset($data['filters']); } // Get the previous configuration. $prev = new JConfig; $prev = ArrayHelper::fromObject($prev); // Merge the new data in. We do this to preserve values that were not in the form. $data = array_merge($prev, $data); /* * Perform miscellaneous options based on configuration settings/changes. */ // Escape the offline message if present. if (isset($data['offline_message'])) { $data['offline_message'] = JFilterOutput::ampReplace($data['offline_message']); } // Purge the database session table if we are changing to the database handler. if ($prev['session_handler'] != 'database' && $data['session_handler'] == 'database') { $table = JTable::getInstance('session'); $table->purge(-1); } // Set the shared session configuration if (isset($data['shared_session'])) { $currentShared = isset($prev['shared_session']) ? $prev['shared_session'] : '0'; // Has the user enabled shared sessions? if ($data['shared_session'] == 1 && $currentShared == 0) { // Generate a random shared session name $data['session_name'] = JUserHelper::genRandomPassword(16); } // Has the user disabled shared sessions? if ($data['shared_session'] == 0 && $currentShared == 1) { // Remove the session name value unset($data['session_name']); } } if (empty($data['cache_handler'])) { $data['caching'] = 0; } /* * Look for a custom cache_path * First check if a path is given in the submitted data, then check if a path exists in the previous data, otherwise use the default */ if (!empty($data['cache_path'])) { $path = $data['cache_path']; } elseif (!empty($prev['cache_path'])) { $path = $prev['cache_path']; } else { $path = JPATH_SITE . '/cache'; } // Give a warning if the cache-folder can not be opened if ($data['caching'] > 0 && $data['cache_handler'] == 'file' && @opendir($path) == false) { $error = true; // If a custom path is in use, try using the system default instead of disabling cache if ($path !== JPATH_SITE . '/cache' && @opendir(JPATH_SITE . '/cache') != false) { try { JLog::add( JText::sprintf('COM_CONFIG_ERROR_CUSTOM_CACHE_PATH_NOTWRITABLE_USING_DEFAULT', $path, JPATH_SITE . '/cache'), JLog::WARNING, 'jerror' ); } catch (RuntimeException $logException) { $app->enqueueMessage( JText::sprintf('COM_CONFIG_ERROR_CUSTOM_CACHE_PATH_NOTWRITABLE_USING_DEFAULT', $path, JPATH_SITE . '/cache'), 'warning' ); } $path = JPATH_SITE . '/cache'; $error = false; $data['cache_path'] = ''; } if ($error) { try { JLog::add(JText::sprintf('COM_CONFIG_ERROR_CACHE_PATH_NOTWRITABLE', $path), JLog::WARNING, 'jerror'); } catch (RuntimeException $exception) { $app->enqueueMessage(JText::sprintf('COM_CONFIG_ERROR_CACHE_PATH_NOTWRITABLE', $path), 'warning'); } $data['caching'] = 0; } } // Did the user remove their custom cache path? Don't save the variable to the config if (empty($data['cache_path'])) { unset($data['cache_path']); } // Clean the cache if disabled but previously enabled or changing cache handlers; these operations use the `$prev` data already in memory if ((!$data['caching'] && $prev['caching']) || $data['cache_handler'] !== $prev['cache_handler']) { try { JFactory::getCache()->clean(); } catch (JCacheExceptionConnecting $exception) { try { JLog::add(JText::_('COM_CONFIG_ERROR_CACHE_CONNECTION_FAILED'), JLog::WARNING, 'jerror'); } catch (RuntimeException $logException) { $app->enqueueMessage(JText::_('COM_CONFIG_ERROR_CACHE_CONNECTION_FAILED'), 'warning'); } } catch (JCacheExceptionUnsupported $exception) { try { JLog::add(JText::_('COM_CONFIG_ERROR_CACHE_DRIVER_UNSUPPORTED'), JLog::WARNING, 'jerror'); } catch (RuntimeException $logException) { $app->enqueueMessage(JText::_('COM_CONFIG_ERROR_CACHE_DRIVER_UNSUPPORTED'), 'warning'); } } } // Create the new configuration object. $config = new Registry($data); // Overwrite the old FTP credentials with the new ones. $temp = JFactory::getConfig(); $temp->set('ftp_enable', $data['ftp_enable']); $temp->set('ftp_host', $data['ftp_host']); $temp->set('ftp_port', $data['ftp_port']); $temp->set('ftp_user', $data['ftp_user']); $temp->set('ftp_pass', $data['ftp_pass']); $temp->set('ftp_root', $data['ftp_root']); // Clear cache of com_config component. $this->cleanCache('_system', 0); $this->cleanCache('_system', 1); $result = $dispatcher->trigger('onApplicationBeforeSave', array($config)); // Store the data. if (in_array(false, $result, true)) { throw new RuntimeException(JText::_('COM_CONFIG_ERROR_UNKNOWN_BEFORE_SAVING')); } // Write the configuration file. $result = $this->writeConfigFile($config); // Trigger the after save event. $dispatcher->trigger('onApplicationAfterSave', array($config)); return $result; } /** * Method to unset the root_user value from configuration data. * * This method will load the global configuration data straight from * JConfig and remove the root_user value for security, then save the configuration. * * @return boolean True on success, false on failure. * * @since 1.6 */ public function removeroot() { $dispatcher = JEventDispatcher::getInstance(); // Get the previous configuration. $prev = new JConfig; $prev = ArrayHelper::fromObject($prev); // Create the new configuration object, and unset the root_user property unset($prev['root_user']); $config = new Registry($prev); $result = $dispatcher->trigger('onApplicationBeforeSave', array($config)); // Store the data. if (in_array(false, $result, true)) { throw new RuntimeException(JText::_('COM_CONFIG_ERROR_UNKNOWN_BEFORE_SAVING')); } // Write the configuration file. $result = $this->writeConfigFile($config); // Trigger the after save event. $dispatcher->trigger('onApplicationAfterSave', array($config)); return $result; } /** * Method to write the configuration to a file. * * @param Registry $config A Registry object containing all global config data. * * @return boolean True on success, false on failure. * * @since 2.5.4 * @throws RuntimeException */ private function writeConfigFile(Registry $config) { jimport('joomla.filesystem.path'); jimport('joomla.filesystem.file'); // Set the configuration file path. $file = JPATH_CONFIGURATION . '/configuration.php'; // Get the new FTP credentials. $ftp = JClientHelper::getCredentials('ftp', true); $app = JFactory::getApplication(); // Attempt to make the file writeable if using FTP. if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0644')) { $app->enqueueMessage(JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTWRITABLE'), 'notice'); } // Attempt to write the configuration file as a PHP class named JConfig. $configuration = $config->toString('PHP', array('class' => 'JConfig', 'closingtag' => false)); if (!JFile::write($file, $configuration)) { throw new RuntimeException(JText::_('COM_CONFIG_ERROR_WRITE_FAILED')); } // Invalidates the cached configuration file if (function_exists('opcache_invalidate')) { opcache_invalidate($file); } // Attempt to make the file unwriteable if using FTP. if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0444')) { $app->enqueueMessage(JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTUNWRITABLE'), 'notice'); } return true; } /** * Method to store the permission values in the asset table. * * This method will get an array with permission key value pairs and transform it * into json and update the asset table in the database. * * @param string $permission Need an array with Permissions (component, rule, value and title) * * @return array A list of result data. * * @since 3.5 */ public function storePermissions($permission = null) { $app = JFactory::getApplication(); $user = JFactory::getUser(); if (is_null($permission)) { // Get data from input. $permission = array( 'component' => $app->input->get('comp'), 'action' => $app->input->get('action'), 'rule' => $app->input->get('rule'), 'value' => $app->input->get('value'), 'title' => $app->input->get('title', '', 'RAW') ); } // We are creating a new item so we don't have an item id so don't allow. if (substr($permission['component'], -6) === '.false') { $app->enqueueMessage(JText::_('JLIB_RULES_SAVE_BEFORE_CHANGE_PERMISSIONS'), 'error'); return false; } // Check if the user is authorized to do this. if (!$user->authorise('core.admin', $permission['component'])) { $app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'error'); return false; } $permission['component'] = empty($permission['component']) ? 'root.1' : $permission['component']; // Current view is global config? $isGlobalConfig = $permission['component'] === 'root.1'; // Check if changed group has Super User permissions. $isSuperUserGroupBefore = JAccess::checkGroup($permission['rule'], 'core.admin'); // Check if current user belongs to changed group. $currentUserBelongsToGroup = in_array((int) $permission['rule'], $user->groups) ? true : false; // Get current user groups tree. $currentUserGroupsTree = JAccess::getGroupsByUser($user->id, true); // Check if current user belongs to changed group. $currentUserSuperUser = $user->authorise('core.admin'); // If user is not Super User cannot change the permissions of a group it belongs to. if (!$currentUserSuperUser && $currentUserBelongsToGroup) { $app->enqueueMessage(JText::_('JLIB_USER_ERROR_CANNOT_CHANGE_OWN_GROUPS'), 'error'); return false; } // If user is not Super User cannot change the permissions of a group it belongs to. if (!$currentUserSuperUser && in_array((int) $permission['rule'], $currentUserGroupsTree)) { $app->enqueueMessage(JText::_('JLIB_USER_ERROR_CANNOT_CHANGE_OWN_PARENT_GROUPS'), 'error'); return false; } // If user is not Super User cannot change the permissions of a Super User Group. if (!$currentUserSuperUser && $isSuperUserGroupBefore && !$currentUserBelongsToGroup) { $app->enqueueMessage(JText::_('JLIB_USER_ERROR_CANNOT_CHANGE_SUPER_USER'), 'error'); return false; } // If user is not Super User cannot change the Super User permissions in any group it belongs to. if ($isSuperUserGroupBefore && $currentUserBelongsToGroup && $permission['action'] === 'core.admin') { $app->enqueueMessage(JText::_('JLIB_USER_ERROR_CANNOT_DEMOTE_SELF'), 'error'); return false; } try { $asset = JTable::getInstance('asset'); $result = $asset->loadByName($permission['component']); if ($result === false) { $data = array($permission['action'] => array($permission['rule'] => $permission['value'])); $rules = new JAccessRules($data); $asset->rules = (string) $rules; $asset->name = (string) $permission['component']; $asset->title = (string) $permission['title']; // Get the parent asset id so we have a correct tree. $parentAsset = JTable::getInstance('Asset'); if (strpos($asset->name, '.') !== false) { $assetParts = explode('.', $asset->name); $parentAsset->loadByName($assetParts[0]); $parentAssetId = $parentAsset->id; } else { $parentAssetId = $parentAsset->getRootId(); } /** * @to do: incorrect ACL stored * When changing a permission of an item that doesn't have a row in the asset table the row a new row is created. * This works fine for item <-> component <-> global config scenario and component <-> global config scenario. * But doesn't work properly for item <-> section(s) <-> component <-> global config scenario, * because a wrong parent asset id (the component) is stored. * Happens when there is no row in the asset table (ex: deleted or not created on update). */ $asset->setLocation($parentAssetId, 'last-child'); } else { // Decode the rule settings. $temp = json_decode($asset->rules, true); // Check if a new value is to be set. if (isset($permission['value'])) { // Check if we already have an action entry. if (!isset($temp[$permission['action']])) { $temp[$permission['action']] = array(); } // Check if we already have a rule entry. if (!isset($temp[$permission['action']][$permission['rule']])) { $temp[$permission['action']][$permission['rule']] = array(); } // Set the new permission. $temp[$permission['action']][$permission['rule']] = (int) $permission['value']; // Check if we have an inherited setting. if ($permission['value'] === '') { unset($temp[$permission['action']][$permission['rule']]); } // Check if we have any rules. if (!$temp[$permission['action']]) { unset($temp[$permission['action']]); } } else { // There is no value so remove the action as it's not needed. unset($temp[$permission['action']]); } $asset->rules = json_encode($temp, JSON_FORCE_OBJECT); } if (!$asset->check() || !$asset->store()) { $app->enqueueMessage(JText::_('JLIB_UNKNOWN'), 'error'); return false; } } catch (Exception $e) { $app->enqueueMessage($e->getMessage(), 'error'); return false; } // All checks done. $result = array( 'text' => '', 'class' => '', 'result' => true, ); // Show the current effective calculated permission considering current group, path and cascade. try { // Get the asset id by the name of the component. $query = $this->db->getQuery(true) ->select($this->db->quoteName('id')) ->from($this->db->quoteName('#__assets')) ->where($this->db->quoteName('name') . ' = ' . $this->db->quote($permission['component'])); $this->db->setQuery($query); $assetId = (int) $this->db->loadResult(); // Fetch the parent asset id. $parentAssetId = null; /** * @to do: incorrect info * When creating a new item (not saving) it uses the calculated permissions from the component (item <-> component <-> global config). * But if we have a section too (item <-> section(s) <-> component <-> global config) this is not correct. * Also, currently it uses the component permission, but should use the calculated permissions for achild of the component/section. */ // If not in global config we need the parent_id asset to calculate permissions. if (!$isGlobalConfig) { // In this case we need to get the component rules too. $query->clear() ->select($this->db->quoteName('parent_id')) ->from($this->db->quoteName('#__assets')) ->where($this->db->quoteName('id') . ' = ' . $assetId); $this->db->setQuery($query); $parentAssetId = (int) $this->db->loadResult(); } // Get the group parent id of the current group. $query->clear() ->select($this->db->quoteName('parent_id')) ->from($this->db->quoteName('#__usergroups')) ->where($this->db->quoteName('id') . ' = ' . (int) $permission['rule']); $this->db->setQuery($query); $parentGroupId = (int) $this->db->loadResult(); // Count the number of child groups of the current group. $query->clear() ->select('COUNT(' . $this->db->quoteName('id') . ')') ->from($this->db->quoteName('#__usergroups')) ->where($this->db->quoteName('parent_id') . ' = ' . (int) $permission['rule']); $this->db->setQuery($query); $totalChildGroups = (int) $this->db->loadResult(); } catch (Exception $e) { $app->enqueueMessage($e->getMessage(), 'error'); return false; } // Clear access statistics. JAccess::clearStatics(); // After current group permission is changed we need to check again if the group has Super User permissions. $isSuperUserGroupAfter = JAccess::checkGroup($permission['rule'], 'core.admin'); // Get the rule for just this asset (non-recursive) and get the actual setting for the action for this group. $assetRule = JAccess::getAssetRules($assetId, false, false)->allow($permission['action'], $permission['rule']); // Get the group, group parent id, and group global config recursive calculated permission for the chosen action. $inheritedGroupRule = JAccess::checkGroup($permission['rule'], $permission['action'], $assetId); if (!empty($parentAssetId)) { $inheritedGroupParentAssetRule = JAccess::checkGroup($permission['rule'], $permission['action'], $parentAssetId); } else { $inheritedGroupParentAssetRule = null; } $inheritedParentGroupRule = !empty($parentGroupId) ? JAccess::checkGroup($parentGroupId, $permission['action'], $assetId) : null; // Current group is a Super User group, so calculated setting is "Allowed (Super User)". if ($isSuperUserGroupAfter) { $result['class'] = 'label label-success'; $result['text'] = '<span class="icon-lock icon-white" aria-hidden="true"></span>' . JText::_('JLIB_RULES_ALLOWED_ADMIN'); } // Not super user. else { // First get the real recursive calculated setting and add (Inherited) to it. // If recursive calculated setting is "Denied" or null. Calculated permission is "Not Allowed (Inherited)". if ($inheritedGroupRule === null || $inheritedGroupRule === false) { $result['class'] = 'label label-important'; $result['text'] = JText::_('JLIB_RULES_NOT_ALLOWED_INHERITED'); } // If recursive calculated setting is "Allowed". Calculated permission is "Allowed (Inherited)". else { $result['class'] = 'label label-success'; $result['text'] = JText::_('JLIB_RULES_ALLOWED_INHERITED'); } // Second part: Overwrite the calculated permissions labels if there is an explicity permission in the current group. /** * @to do: incorect info * If a component has a permission that doesn't exists in global config (ex: frontend editing in com_modules) by default * we get "Not Allowed (Inherited)" when we should get "Not Allowed (Default)". */ // If there is an explicity permission "Not Allowed". Calculated permission is "Not Allowed". if ($assetRule === false) { $result['class'] = 'label label-important'; $result['text'] = JText::_('JLIB_RULES_NOT_ALLOWED'); } // If there is an explicity permission is "Allowed". Calculated permission is "Allowed". elseif ($assetRule === true) { $result['class'] = 'label label-success'; $result['text'] = JText::_('JLIB_RULES_ALLOWED'); } // Third part: Overwrite the calculated permissions labels for special cases. // Global configuration with "Not Set" permission. Calculated permission is "Not Allowed (Default)". if (empty($parentGroupId) && $isGlobalConfig === true && $assetRule === null) { $result['class'] = 'label label-important'; $result['text'] = JText::_('JLIB_RULES_NOT_ALLOWED_DEFAULT'); } /** * Component/Item with explicit "Denied" permission at parent Asset (Category, Component or Global config) configuration. * Or some parent group has an explicit "Denied". * Calculated permission is "Not Allowed (Locked)". */ elseif ($inheritedGroupParentAssetRule === false || $inheritedParentGroupRule === false) { $result['class'] = 'label label-important'; $result['text'] = '<span class="icon-lock icon-white" aria-hidden="true"></span>' . JText::_('JLIB_RULES_NOT_ALLOWED_LOCKED'); } } // If removed or added super user from group, we need to refresh the page to recalculate all settings. if ($isSuperUserGroupBefore != $isSuperUserGroupAfter) { $app->enqueueMessage(JText::_('JLIB_RULES_NOTICE_RECALCULATE_GROUP_PERMISSIONS'), 'notice'); } // If this group has child groups, we need to refresh the page to recalculate the child settings. if ($totalChildGroups > 0) { $app->enqueueMessage(JText::_('JLIB_RULES_NOTICE_RECALCULATE_GROUP_CHILDS_PERMISSIONS'), 'notice'); } return $result; } /** * Method to send a test mail which is called via an AJAX request * * @return boolean * * @since 3.5 * @throws Exception */ public function sendTestMail() { // Set the new values to test with the current settings $app = JFactory::getApplication(); $input = $app->input; $app->set('smtpauth', $input->get('smtpauth')); $app->set('smtpuser', $input->get('smtpuser', '', 'STRING')); $app->set('smtppass', $input->get('smtppass', '', 'RAW')); $app->set('smtphost', $input->get('smtphost')); $app->set('smtpsecure', $input->get('smtpsecure')); $app->set('smtpport', $input->get('smtpport')); $app->set('mailfrom', $input->get('mailfrom', '', 'STRING')); $app->set('fromname', $input->get('fromname', '', 'STRING')); $app->set('mailer', $input->get('mailer')); $app->set('mailonline', $input->get('mailonline')); $mail = JFactory::getMailer(); // Prepare email and send try to send it $mailSubject = JText::sprintf('COM_CONFIG_SENDMAIL_SUBJECT', $app->get('sitename')); $mailBody = JText::sprintf('COM_CONFIG_SENDMAIL_BODY', JText::_('COM_CONFIG_SENDMAIL_METHOD_' . strtoupper($mail->Mailer))); if ($mail->sendMail($app->get('mailfrom'), $app->get('fromname'), $app->get('mailfrom'), $mailSubject, $mailBody) === true) { $methodName = JText::_('COM_CONFIG_SENDMAIL_METHOD_' . strtoupper($mail->Mailer)); // If JMail send the mail using PHP Mail as fallback. if ($mail->Mailer != $app->get('mailer')) { $app->enqueueMessage(JText::sprintf('COM_CONFIG_SENDMAIL_SUCCESS_FALLBACK', $app->get('mailfrom'), $methodName), 'warning'); } else { $app->enqueueMessage(JText::sprintf('COM_CONFIG_SENDMAIL_SUCCESS', $app->get('mailfrom'), $methodName), 'message'); } return true; } $app->enqueueMessage(JText::_('COM_CONFIG_SENDMAIL_ERROR'), 'error'); return false; } } PKb��\�.~��t�t0components/com_config/model/form/application.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset name="cache" label="COM_CONFIG_CACHE_SETTINGS_LABEL"> <field name="cache_handler" type="cachehandler" label="COM_CONFIG_FIELD_CACHE_HANDLER_LABEL" description="COM_CONFIG_FIELD_CACHE_HANDLER_DESC" default="" filter="word" /> <field name="cache_path" type="text" label="COM_CONFIG_FIELD_CACHE_PATH_LABEL" description="COM_CONFIG_FIELD_CACHE_PATH_DESC" showon="cache_handler:file" filter="string" size="50" /> <field name="memcache_persist" type="radio" label="COM_CONFIG_FIELD_MEMCACHE_PERSISTENT_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_PERSISTENT_DESC" class="btn-group btn-group-yesno" default="1" showon="cache_handler:memcache" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="memcache_compress" type="radio" label="COM_CONFIG_FIELD_MEMCACHE_COMPRESSION_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_COMPRESSION_DESC" class="btn-group btn-group-yesno" default="0" showon="cache_handler:memcache" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="memcache_server_host" type="text" label="COM_CONFIG_FIELD_MEMCACHE_HOST_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_HOST_DESC" default="localhost" showon="cache_handler:memcache" filter="string" size="25" /> <field name="memcache_server_port" type="number" label="COM_CONFIG_FIELD_MEMCACHE_PORT_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_PORT_DESC" showon="cache_handler:memcache" min="1" max="65535" default="11211" filter="integer" validate="number" size="5" /> <field name="memcached_persist" type="radio" label="COM_CONFIG_FIELD_MEMCACHE_PERSISTENT_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_PERSISTENT_DESC" class="btn-group btn-group-yesno" default="1" showon="cache_handler:memcached" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="memcached_compress" type="radio" label="COM_CONFIG_FIELD_MEMCACHE_COMPRESSION_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_COMPRESSION_DESC" class="btn-group btn-group-yesno" default="0" showon="cache_handler:memcached" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="memcached_server_host" type="text" label="COM_CONFIG_FIELD_MEMCACHE_HOST_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_HOST_DESC" default="localhost" showon="cache_handler:memcached" filter="string" size="25" /> <field name="memcached_server_port" type="number" label="COM_CONFIG_FIELD_MEMCACHE_PORT_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_PORT_DESC" showon="cache_handler:memcached" min="1" max="65535" default="11211" filter="integer" validate="number" size="5" /> <field name="redis_persist" type="radio" label="COM_CONFIG_FIELD_REDIS_PERSISTENT_LABEL" description="COM_CONFIG_FIELD_REDIS_PERSISTENT_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" showon="cache_handler:redis" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="redis_server_host" type="text" label="COM_CONFIG_FIELD_REDIS_HOST_LABEL" description="COM_CONFIG_FIELD_REDIS_HOST_DESC" default="localhost" filter="string" showon="cache_handler:redis" size="25" /> <field name="redis_server_port" type="number" label="COM_CONFIG_FIELD_REDIS_PORT_LABEL" description="COM_CONFIG_FIELD_REDIS_PORT_DESC" showon="cache_handler:redis" min="1" max="65535" default="6379" filter="integer" validate="number" size="5" /> <field name="redis_server_auth" type="password" label="COM_CONFIG_FIELD_REDIS_AUTH_LABEL" description="COM_CONFIG_FIELD_REDIS_AUTH_DESC" filter="raw" showon="cache_handler:redis" autocomplete="off" size="30" /> <field name="redis_server_db" type="number" label="COM_CONFIG_FIELD_REDIS_DB_LABEL" description="COM_CONFIG_FIELD_REDIS_DB_DESC" default="0" filter="integer" showon="cache_handler:redis" size="4" /> <field name="cachetime" type="number" label="COM_CONFIG_FIELD_CACHE_TIME_LABEL" description="COM_CONFIG_FIELD_CACHE_TIME_DESC" min="1" default="15" filter="integer" validate="number" size="6" /> <field name="cache_platformprefix" type="radio" label="COM_CONFIG_FIELD_CACHE_PLATFORMPREFIX_LABEL" description="COM_CONFIG_FIELD_CACHE_PLATFORMPREFIX_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="caching" type="list" label="COM_CONFIG_FIELD_CACHE_LABEL" description="COM_CONFIG_FIELD_CACHE_DESC" default="2" filter="integer" > <option value="0">COM_CONFIG_FIELD_VALUE_CACHE_OFF</option> <option value="1">COM_CONFIG_FIELD_VALUE_CACHE_CONSERVATIVE</option> <option value="2">COM_CONFIG_FIELD_VALUE_CACHE_PROGRESSIVE</option> </field> </fieldset> <fieldset name="memcache" label="COM_CONFIG_MEMCACHE_SETTINGS_LABEL"> </fieldset> <fieldset name="database" label="CONFIG_DATABASE_SETTINGS_LABEL"> <field name="dbtype" type="databaseconnection" label="COM_CONFIG_FIELD_DATABASE_TYPE_LABEL" description="COM_CONFIG_FIELD_DATABASE_TYPE_DESC" supported="mysql,mysqli,pgsql,pdomysql,postgresql,sqlsrv,sqlazure" filter="string" /> <field name="host" type="text" label="COM_CONFIG_FIELD_DATABASE_HOST_LABEL" description="COM_CONFIG_FIELD_DATABASE_HOST_DESC" required="true" filter="string" size="30" /> <field name="user" type="text" label="COM_CONFIG_FIELD_DATABASE_USERNAME_LABEL" description="COM_CONFIG_FIELD_DATABASE_USERNAME_DESC" required="true" filter="string" size="30" /> <field name="db" type="text" label="COM_CONFIG_FIELD_DATABASE_NAME_LABEL" description="COM_CONFIG_FIELD_DATABASE_NAME_DESC" required="true" filter="string" size="30" /> <field name="dbprefix" type="text" label="COM_CONFIG_FIELD_DATABASE_PREFIX_LABEL" description="COM_CONFIG_FIELD_DATABASE_PREFIX_DESC" default="jos_" filter="string" size="10" /> </fieldset> <fieldset name="debug" label="CONFIG_DEBUG_SETTINGS_LABEL"> <field name="debug" type="radio" label="COM_CONFIG_FIELD_DEBUG_SYSTEM_LABEL" description="COM_CONFIG_FIELD_DEBUG_SYSTEM_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="debug_lang" type="radio" label="COM_CONFIG_FIELD_DEBUG_LANG_LABEL" description="COM_CONFIG_FIELD_DEBUG_LANG_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="debug_lang_const" type="radio" label="COM_CONFIG_FIELD_DEBUG_CONST_LANG_LABEL" description="COM_CONFIG_FIELD_DEBUG_CONST_LANG_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" showon="debug_lang:1" > <option value="0">COM_CONFIG_FIELD_DEBUG_CONST</option> <option value="1">COM_CONFIG_FIELD_DEBUG_VALUE</option> </field> </fieldset> <fieldset name="ftp" label="CONFIG_FTP_SETTINGS_LABEL"> <field name="ftp_enable" type="radio" label="COM_CONFIG_FIELD_FTP_ENABLE_LABEL" description="COM_CONFIG_FIELD_FTP_ENABLE_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="ftp_host" type="text" label="COM_CONFIG_FIELD_FTP_HOST_LABEL" description="COM_CONFIG_FIELD_FTP_HOST_DESC" filter="string" showon="ftp_enable:1" size="14" /> <field name="ftp_port" type="number" label="COM_CONFIG_FIELD_FTP_PORT_LABEL" description="COM_CONFIG_FIELD_FTP_PORT_DESC" showon="ftp_enable:1" min="1" max="65535" hint="21" validate="number" filter="integer" size="5" /> <field name="ftp_user" type="text" label="COM_CONFIG_FIELD_FTP_USERNAME_LABEL" description="COM_CONFIG_FIELD_FTP_USERNAME_DESC" filter="string" showon="ftp_enable:1" autocomplete="off" size="25" /> <field name="ftp_pass" type="password" label="COM_CONFIG_FIELD_FTP_PASSWORD_LABEL" description="COM_CONFIG_FIELD_FTP_PASSWORD_DESC" filter="raw" showon="ftp_enable:1" autocomplete="off" size="25" /> <field name="ftp_root" type="text" label="COM_CONFIG_FIELD_FTP_ROOT_LABEL" description="COM_CONFIG_FIELD_FTP_ROOT_DESC" showon="ftp_enable:1" filter="string" size="50" /> </fieldset> <fieldset name="proxy" label="CONFIG_PROXY_SETTINGS_LABEL"> <field name="proxy_enable" type="radio" label="COM_CONFIG_FIELD_PROXY_ENABLE_LABEL" description="COM_CONFIG_FIELD_PROXY_ENABLE_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="proxy_host" type="text" label="COM_CONFIG_FIELD_PROXY_HOST_LABEL" description="COM_CONFIG_FIELD_PROXY_HOST_DESC" filter="string" showon="proxy_enable:1" size="14" /> <field name="proxy_port" type="number" label="COM_CONFIG_FIELD_PROXY_PORT_LABEL" description="COM_CONFIG_FIELD_PROXY_PORT_DESC" showon="proxy_enable:1" min="1" max="65535" hint="8080" validate="number" filter="integer" size="5" /> <field name="proxy_user" type="text" label="COM_CONFIG_FIELD_PROXY_USERNAME_LABEL" description="COM_CONFIG_FIELD_PROXY_USERNAME_DESC" filter="string" showon="proxy_enable:1" autocomplete="off" size="25" /> <field name="proxy_pass" type="password" label="COM_CONFIG_FIELD_PROXY_PASSWORD_LABEL" description="COM_CONFIG_FIELD_PROXY_PASSWORD_DESC" filter="raw" showon="proxy_enable:1" autocomplete="off" size="25" /> </fieldset> <fieldset name="locale" label="CONFIG_LOCATION_SETTINGS_LABEL"> <field name="offset" type="timezone" label="COM_CONFIG_FIELD_SERVER_TIMEZONE_LABEL" description="COM_CONFIG_FIELD_SERVER_TIMEZONE_DESC" default="UTC" > <option value="UTC">JLIB_FORM_VALUE_TIMEZONE_UTC</option> </field> </fieldset> <fieldset name="mail" label="CONFIG_MAIL_SETTINGS_LABEL"> <field name="mailonline" type="radio" label="COM_CONFIG_FIELD_MAIL_MAILONLINE_LABEL" description="COM_CONFIG_FIELD_MAIL_MAILONLINE_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="massmailoff" type="radio" label="COM_CONFIG_FIELD_MAIL_MASSMAILOFF_LABEL" description="COM_CONFIG_FIELD_MAIL_MASSMAILOFF_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" showon="mailonline:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="mailfrom" type="email" label="COM_CONFIG_FIELD_MAIL_FROM_EMAIL_LABEL" description="COM_CONFIG_FIELD_MAIL_FROM_EMAIL_DESC" filter="string" size="30" validate="email" showon="mailonline:1" /> <field name="fromname" type="text" label="COM_CONFIG_FIELD_MAIL_FROM_NAME_LABEL" description="COM_CONFIG_FIELD_MAIL_FROM_NAME_DESC" filter="string" size="30" showon="mailonline:1" /> <field name="replyto" type="email" label="COM_CONFIG_FIELD_MAIL_REPLY_TO_EMAIL_LABEL" description="COM_CONFIG_FIELD_MAIL_REPLY_TO_EMAIL_DESC" filter="string" size="30" validate="email" showon="mailonline:1" /> <field name="replytoname" type="text" label="COM_CONFIG_FIELD_MAIL_REPLY_TO_NAME_LABEL" description="COM_CONFIG_FIELD_MAIL_REPLY_TO_NAME_DESC" filter="string" size="30" showon="mailonline:1" /> <field name="mailer" type="list" label="COM_CONFIG_FIELD_MAIL_MAILER_LABEL" description="COM_CONFIG_FIELD_MAIL_MAILER_DESC" default="mail" filter="word" showon="mailonline:1" > <option value="mail">COM_CONFIG_FIELD_VALUE_PHP_MAIL</option> <option value="sendmail">COM_CONFIG_FIELD_VALUE_SENDMAIL</option> <option value="smtp">COM_CONFIG_FIELD_VALUE_SMTP</option> </field> <field name="sendmail" type="text" label="COM_CONFIG_FIELD_MAIL_SENDMAIL_PATH_LABEL" description="COM_CONFIG_FIELD_MAIL_SENDMAIL_PATH_DESC" default="/usr/sbin/sendmail" showon="mailonline:1[AND]mailer:sendmail" filter="string" size="30" /> <field name="smtphost" type="text" label="COM_CONFIG_FIELD_MAIL_SMTP_HOST_LABEL" description="COM_CONFIG_FIELD_MAIL_SMTP_HOST_DESC" default="localhost" showon="mailonline:1[AND]mailer:smtp" filter="string" size="30" /> <field name="smtpport" type="number" label="COM_CONFIG_FIELD_MAIL_SMTP_PORT_LABEL" description="COM_CONFIG_FIELD_MAIL_SMTP_PORT_DESC" showon="mailonline:1[AND]mailer:smtp" min="1" max="65535" default="25" hint="25" validate="number" filter="integer" size="5" /> <field name="smtpsecure" type="list" label="COM_CONFIG_FIELD_MAIL_SMTP_SECURE_LABEL" description="COM_CONFIG_FIELD_MAIL_SMTP_SECURE_DESC" default="none" showon="mailonline:1[AND]mailer:smtp" filter="word" > <option value="none">COM_CONFIG_FIELD_VALUE_NONE</option> <option value="ssl">COM_CONFIG_FIELD_VALUE_SSL</option> <option value="tls">COM_CONFIG_FIELD_VALUE_TLS</option> </field> <field name="smtpauth" type="radio" label="COM_CONFIG_FIELD_MAIL_SMTP_AUTH_LABEL" description="COM_CONFIG_FIELD_MAIL_SMTP_AUTH_DESC" class="btn-group btn-group-yesno" default="0" showon="mailonline:1[AND]mailer:smtp" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="smtpuser" type="text" label="COM_CONFIG_FIELD_MAIL_SMTP_USERNAME_LABEL" description="COM_CONFIG_FIELD_MAIL_SMTP_USERNAME_DESC" showon="mailonline:1[AND]mailer:smtp[AND]smtpauth:1" filter="string" autocomplete="off" size="30" /> <field name="smtppass" type="password" label="COM_CONFIG_FIELD_MAIL_SMTP_PASSWORD_LABEL" description="COM_CONFIG_FIELD_MAIL_SMTP_PASSWORD_DESC" showon="mailonline:1[AND]mailer:smtp[AND]smtpauth:1" filter="raw" autocomplete="off" size="30" /> </fieldset> <fieldset name="metadata" label="COM_CONFIG_METADATA_SETTINGS"> <field name="MetaDesc" type="textarea" label="COM_CONFIG_FIELD_METADESC_LABEL" description="COM_CONFIG_FIELD_METADESC_DESC" filter="string" cols="60" rows="3" /> <field name="MetaKeys" type="textarea" label="COM_CONFIG_FIELD_METAKEYS_LABEL" description="COM_CONFIG_FIELD_METAKEYS_DESC" filter="string" cols="60" rows="3" /> <field name="robots" type="list" label="JFIELD_METADATA_ROBOTS_LABEL" description="JFIELD_METADATA_ROBOTS_DESC" default="" > <option value="">JGLOBAL_INDEX_FOLLOW</option> <option value="noindex, follow">JGLOBAL_NOINDEX_FOLLOW</option> <option value="index, nofollow">JGLOBAL_INDEX_NOFOLLOW</option> <option value="noindex, nofollow">JGLOBAL_NOINDEX_NOFOLLOW</option> </field> <field name="MetaRights" type="textarea" label="JFIELD_META_RIGHTS_LABEL" description="JFIELD_META_RIGHTS_DESC" filter="string" cols="60" rows="2" /> <field name="MetaAuthor" type="radio" label="COM_CONFIG_FIELD_METAAUTHOR_LABEL" description="COM_CONFIG_FIELD_METAAUTHOR_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="MetaVersion" type="radio" label="COM_CONFIG_FIELD_METAVERSION_LABEL" description="COM_CONFIG_FIELD_METAVERSION_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="seo" label="CONFIG_SEO_SETTINGS_LABEL"> <field name="sef" type="radio" label="COM_CONFIG_FIELD_SEF_URL_LABEL" description="COM_CONFIG_FIELD_SEF_URL_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="sef_rewrite" type="radio" label="COM_CONFIG_FIELD_SEF_REWRITE_LABEL" description="COM_CONFIG_FIELD_SEF_REWRITE_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" showon="sef:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="sef_suffix" type="radio" label="COM_CONFIG_FIELD_SEF_SUFFIX_LABEL" description="COM_CONFIG_FIELD_SEF_SUFFIX_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" showon="sef:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="unicodeslugs" type="radio" label="COM_CONFIG_FIELD_UNICODESLUGS_LABEL" description="COM_CONFIG_FIELD_UNICODESLUGS_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" showon="sef:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="sitename_pagetitles" type="list" label="COM_CONFIG_FIELD_SITENAME_PAGETITLES_LABEL" description="COM_CONFIG_FIELD_SITENAME_PAGETITLES_DESC" default="0" filter="integer" > <option value="2">COM_CONFIG_FIELD_VALUE_AFTER</option> <option value="1">COM_CONFIG_FIELD_VALUE_BEFORE</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="server" label="CONFIG_SERVER_SETTINGS_LABEL"> <field name="tmp_path" type="text" label="COM_CONFIG_FIELD_TEMP_PATH_LABEL" description="COM_CONFIG_FIELD_TEMP_PATH_DESC" filter="string" size="50" /> <field name="gzip" type="radio" label="COM_CONFIG_FIELD_GZIP_COMPRESSION_LABEL" description="COM_CONFIG_FIELD_GZIP_COMPRESSION_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="error_reporting" type="list" label="COM_CONFIG_FIELD_ERROR_REPORTING_LABEL" description="COM_CONFIG_FIELD_ERROR_REPORTING_DESC" default="default" filter="cmd" > <option value="default">COM_CONFIG_FIELD_VALUE_SYSTEM_DEFAULT</option> <option value="none">COM_CONFIG_FIELD_VALUE_NONE</option> <option value="simple">COM_CONFIG_FIELD_VALUE_SIMPLE</option> <option value="maximum">COM_CONFIG_FIELD_VALUE_MAXIMUM</option> <option value="development">COM_CONFIG_FIELD_VALUE_DEVELOPMENT</option> </field> <field name="force_ssl" type="list" label="COM_CONFIG_FIELD_FORCE_SSL_LABEL" description="COM_CONFIG_FIELD_FORCE_SSL_DESC" default="-1" filter="integer" > <option value="0">COM_CONFIG_FIELD_VALUE_NONE</option> <option value="1">COM_CONFIG_FIELD_VALUE_ADMINISTRATOR_ONLY</option> <option value="2">COM_CONFIG_FIELD_VALUE_ENTIRE_SITE</option> </field> </fieldset> <fieldset name="session" label="CONFIG_SESSION_SETTINGS_LABEL"> <field name="session_handler" type="sessionhandler" label="COM_CONFIG_FIELD_SESSION_HANDLER_LABEL" description="COM_CONFIG_FIELD_SESSION_HANDLER_DESC" default="none" filter="word" /> <field name="session_memcache_server_host" type="text" label="COM_CONFIG_FIELD_MEMCACHE_HOST_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_HOST_DESC" default="localhost" filter="string" showon="session_handler:memcache" size="25" /> <field name="session_memcache_server_port" type="number" label="COM_CONFIG_FIELD_MEMCACHE_PORT_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_PORT_DESC" showon="session_handler:memcache" min="1" max="65535" default="11211" validate="number" filter="integer" size="5" /> <field name="session_memcached_server_host" type="text" label="COM_CONFIG_FIELD_MEMCACHE_HOST_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_HOST_DESC" default="localhost" filter="string" showon="session_handler:memcached" size="25" /> <field name="session_memcached_server_port" type="number" label="COM_CONFIG_FIELD_MEMCACHE_PORT_LABEL" description="COM_CONFIG_FIELD_MEMCACHE_PORT_DESC" showon="session_handler:memcached" min="1" max="65535" default="11211" validate="number" filter="integer" size="5" /> <field name="session_redis_persist" type="radio" label="COM_CONFIG_FIELD_REDIS_PERSISTENT_LABEL" description="COM_CONFIG_FIELD_REDIS_PERSISTENT_DESC" class="btn-group btn-group-yesno" default="1" filter="integer" showon="session_handler:redis" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="session_redis_server_host" type="text" label="COM_CONFIG_FIELD_REDIS_HOST_LABEL" description="COM_CONFIG_FIELD_REDIS_HOST_DESC" default="localhost" filter="string" showon="session_handler:redis" size="25" /> <field name="session_redis_server_port" type="number" label="COM_CONFIG_FIELD_REDIS_PORT_LABEL" description="COM_CONFIG_FIELD_REDIS_PORT_DESC" showon="session_handler:redis" min="1" max="65535" default="6379" validate="number" filter="integer" size="5" /> <field name="session_redis_server_auth" type="password" label="COM_CONFIG_FIELD_REDIS_AUTH_LABEL" description="COM_CONFIG_FIELD_REDIS_AUTH_DESC" filter="raw" showon="session_handler:redis" autocomplete="off" size="30" /> <field name="session_redis_server_db" type="number" label="COM_CONFIG_FIELD_REDIS_DB_LABEL" description="COM_CONFIG_FIELD_REDIS_DB_DESC" default="0" filter="integer" showon="session_handler:redis" size="4" /> <field name="lifetime" type="number" label="COM_CONFIG_FIELD_SESSION_TIME_LABEL" description="COM_CONFIG_FIELD_SESSION_TIME_DESC" min="1" max="16383" default="15" filter="integer" validate="number" size="6" /> <field name="shared_session" type="radio" label="COM_CONFIG_FIELD_SHARED_SESSION_LABEL" description="COM_CONFIG_FIELD_SHARED_SESSION_DESC" class="btn-group btn-group-yesno" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="site" label="CONFIG_SITE_SETTINGS_LABEL"> <field name="sitename" type="text" label="COM_CONFIG_FIELD_SITE_NAME_LABEL" description="COM_CONFIG_FIELD_SITE_NAME_DESC" required="true" filter="string" size="50" /> <field name="offline" type="radio" label="COM_CONFIG_FIELD_SITE_OFFLINE_LABEL" description="COM_CONFIG_FIELD_SITE_OFFLINE_DESC" class="btn-group btn-group-yesno btn-group-reversed" default="0" filter="integer" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="display_offline_message" type="list" label="COM_CONFIG_FIELD_SITE_DISPLAY_MESSAGE_LABEL" description="COM_CONFIG_FIELD_SITE_DISPLAY_MESSAGE_DESC" default="1" filter="integer" showon="offline:1" > <option value="0">JHIDE</option> <option value="1">COM_CONFIG_FIELD_VALUE_DISPLAY_OFFLINE_MESSAGE_CUSTOM</option> <option value="2">COM_CONFIG_FIELD_VALUE_DISPLAY_OFFLINE_MESSAGE_LANGUAGE</option> </field> <field name="offline_message" type="textarea" label="COM_CONFIG_FIELD_OFFLINE_MESSAGE_LABEL" description="COM_CONFIG_FIELD_OFFLINE_MESSAGE_DESC" filter="safehtml" cols="60" rows="2" showon="offline:1[AND]display_offline_message:1" /> <field name="offline_image" type="media" label="COM_CONFIG_FIELD_OFFLINE_IMAGE_LABEL" description="COM_CONFIG_FIELD_OFFLINE_IMAGE_DESC" showon="offline:1" /> <field name="frontediting" type="list" label="COM_CONFIG_FRONTEDITING_LABEL" description="COM_CONFIG_FRONTEDITING_DESC" default="1" filter="integer" > <option value="2">COM_CONFIG_FRONTEDITING_MENUSANDMODULES</option> <option value="1">COM_CONFIG_FRONTEDITING_MODULES</option> <option value="0">JNONE</option> </field> <field name="editor" type="plugins" label="COM_CONFIG_FIELD_DEFAULT_EDITOR_LABEL" description="COM_CONFIG_FIELD_DEFAULT_EDITOR_DESC" folder="editors" default="tinymce" filter="cmd" /> <field name="captcha" type="plugins" label="COM_CONFIG_FIELD_DEFAULT_CAPTCHA_LABEL" description="COM_CONFIG_FIELD_DEFAULT_CAPTCHA_DESC" folder="captcha" default="0" filter="cmd" > <option value="0">JOPTION_DO_NOT_USE</option> </field> <field name="access" type="accesslevel" label="COM_CONFIG_FIELD_DEFAULT_ACCESS_LEVEL_LABEL" description="COM_CONFIG_FIELD_DEFAULT_ACCESS_LEVEL_DESC" default="1" filter="integer" /> <field name="list_limit" type="list" label="COM_CONFIG_FIELD_DEFAULT_LIST_LIMIT_LABEL" description="COM_CONFIG_FIELD_DEFAULT_LIST_LIMIT_DESC" default="20" filter="integer" > <option value="5">J5</option> <option value="10">J10</option> <option value="15">J15</option> <option value="20">J20</option> <option value="25">J25</option> <option value="30">J30</option> <option value="50">J50</option> <option value="100">J100</option> <option value="200">J200</option> <option value="500">J500</option> </field> <field name="feed_limit" type="list" label="COM_CONFIG_FIELD_DEFAULT_FEED_LIMIT_LABEL" description="COM_CONFIG_FIELD_DEFAULT_FEED_LIMIT_DESC" default="10" filter="integer" > <option value="5">J5</option> <option value="10">J10</option> <option value="15">J15</option> <option value="20">J20</option> <option value="25">J25</option> <option value="30">J30</option> <option value="50">J50</option> <option value="100">J100</option> </field> <field name="feed_email" type="list" label="COM_CONFIG_FIELD_FEED_EMAIL_LABEL" description="COM_CONFIG_FIELD_FEED_EMAIL_DESC" default="none" filter="word" > <option value="author">COM_CONFIG_FIELD_VALUE_AUTHOR_EMAIL</option> <option value="site">COM_CONFIG_FIELD_VALUE_SITE_EMAIL</option> <option value="none">COM_CONFIG_FIELD_VALUE_NO_EMAIL</option> </field> </fieldset> <fieldset name="system" label="CONFIG_SYSTEM_SETTINGS_LABEL"> <field name="log_path" type="text" label="COM_CONFIG_FIELD_LOG_PATH_LABEL" description="COM_CONFIG_FIELD_LOG_PATH_DESC" required="true" filter="string" size="50" /> </fieldset> <fieldset name="cookie" label="CONFIG_COOKIE_SETTINGS_LABEL"> <field name="cookie_domain" type="text" label="COM_CONFIG_FIELD_COOKIE_DOMAIN_LABEL" description="COM_CONFIG_FIELD_COOKIE_DOMAIN_DESC" filter="string" size="40" /> <field name="cookie_path" type="text" label="COM_CONFIG_FIELD_COOKIE_PATH_LABEL" description="COM_CONFIG_FIELD_COOKIE_PATH_DESC" filter="string" size="40" /> </fieldset> <fieldset name="permissions" label="CONFIG_PERMISSION_SETTINGS_LABEL"> <field name="rules" type="rules" label="FIELD_RULES_LABEL" translate_label="false" validate="rules" filter="rules" > <action name="core.login.site" title="JACTION_LOGIN_SITE" description="COM_CONFIG_ACTION_LOGIN_SITE_DESC" /> <action name="core.login.admin" title="JACTION_LOGIN_ADMIN" description="COM_CONFIG_ACTION_LOGIN_ADMIN_DESC" /> <action name="core.login.offline" title="JACTION_LOGIN_OFFLINE" description="COM_CONFIG_ACTION_LOGIN_OFFLINE_DESC" /> <action name="core.admin" title="JACTION_ADMIN_GLOBAL" description="COM_CONFIG_ACTION_ADMIN_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="COM_CONFIG_ACTION_OPTIONS_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="COM_CONFIG_ACTION_MANAGE_DESC" /> <action name="core.create" title="JACTION_CREATE" description="COM_CONFIG_ACTION_CREATE_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="COM_CONFIG_ACTION_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_CONFIG_ACTION_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_CONFIG_ACTION_EDITSTATE_DESC" /> <action name="core.edit.own" title="JACTION_EDITOWN" description="COM_CONFIG_ACTION_EDITOWN_DESC" /> <action name="core.edit.value" title="JACTION_EDITVALUE" description="COM_CONFIG_ACTION_EDITVALUE_DESC" /> </field> </fieldset> <fieldset name="filters" label="COM_CONFIG_TEXT_FILTERS" description="COM_CONFIG_TEXT_FILTERS_DESC"> <field name="filters" type="filters" label="COM_CONFIG_TEXT_FILTERS" filter="" /> </fieldset> <fieldset> <field name="asset_id" type="hidden" /> </fieldset> </form> PKb��\�%-components/com_config/model/field/filters.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; /** * Text Filters form field. * * @since 1.6 */ class JFormFieldFilters extends JFormField { /** * The form field type. * * @var string * @since 1.6 */ public $type = 'Filters'; /** * Method to get the field input markup. * * TODO: Add access check. * * @return string The field input markup. * * @since 1.6 */ protected function getInput() { // Load Framework JHtml::_('jquery.framework'); // Add translation string for notification JText::script('COM_CONFIG_TEXT_FILTERS_NOTE'); // Add Javascript $doc = JFactory::getDocument(); $doc->addScriptDeclaration(' jQuery( document ).ready(function( $ ) { $("#filter-config select").change(function() { var currentFilter = $(this).children("option:selected").val(); if($(this).children("option:selected").val() === "NONE") { var child = $("#filter-config select[data-parent=" + $(this).attr("data-id") + "]"); while(child.length !== 0) { if(child.children("option:selected").val() !== "NONE") { alert(Joomla.JText._("COM_CONFIG_TEXT_FILTERS_NOTE")); break; } child = $("#filter-config select[data-parent=" + child.attr("data-id") + "]"); } return; } var parent = $("#filter-config select[data-id=" + $(this).attr("data-parent") + "]"); while(parent.length !== 0) { if(parent.children("option:selected").val() === "NONE") { alert(Joomla.JText._("COM_CONFIG_TEXT_FILTERS_NOTE")); break; } parent = $("#filter-config select[data-id=" + parent.attr("data-parent") + "]") } }); }); '); // Get the available user groups. $groups = $this->getUserGroups(); // Build the form control. $html = array(); // Open the table. $html[] = '<table id="filter-config" class="table table-striped">'; // The table heading. $html[] = ' <thead>'; $html[] = ' <tr>'; $html[] = ' <th>'; $html[] = ' <span class="acl-action">' . JText::_('JGLOBAL_FILTER_GROUPS_LABEL') . '</span>'; $html[] = ' </th>'; $html[] = ' <th>'; $html[] = ' <span class="acl-action">' . JText::_('JGLOBAL_FILTER_TYPE_LABEL') . '</span>'; $html[] = ' </th>'; $html[] = ' <th>'; $html[] = ' <span class="acl-action">' . JText::_('JGLOBAL_FILTER_TAGS_LABEL') . '</span>'; $html[] = ' </th>'; $html[] = ' <th>'; $html[] = ' <span class="acl-action">' . JText::_('JGLOBAL_FILTER_ATTRIBUTES_LABEL') . '</span>'; $html[] = ' </th>'; $html[] = ' </tr>'; $html[] = ' </thead>'; // The table body. $html[] = ' <tbody>'; foreach ($groups as $group) { if (!isset($this->value[$group->value])) { $this->value[$group->value] = array('filter_type' => 'BL', 'filter_tags' => '', 'filter_attributes' => ''); } $group_filter = $this->value[$group->value]; $group_filter['filter_tags'] = !empty($group_filter['filter_tags']) ? $group_filter['filter_tags'] : ''; $group_filter['filter_attributes'] = !empty($group_filter['filter_attributes']) ? $group_filter['filter_attributes'] : ''; $html[] = ' <tr>'; $html[] = ' <td class="acl-groups left">'; $html[] = ' ' . JLayoutHelper::render('joomla.html.treeprefix', array('level' => $group->level + 1)) . $group->text; $html[] = ' </td>'; $html[] = ' <td>'; $html[] = ' <select' . ' name="' . $this->name . '[' . $group->value . '][filter_type]"' . ' id="' . $this->id . $group->value . '_filter_type"' . ' data-parent="' . ($group->parent) . '" ' . ' data-id="' . ($group->value) . '" ' . ' class="novalidate"' . '>'; $html[] = ' <option value="BL"' . ($group_filter['filter_type'] == 'BL' ? ' selected="selected"' : '') . '>' . JText::_('COM_CONFIG_FIELD_FILTERS_DEFAULT_BLACK_LIST') . '</option>'; $html[] = ' <option value="CBL"' . ($group_filter['filter_type'] == 'CBL' ? ' selected="selected"' : '') . '>' . JText::_('COM_CONFIG_FIELD_FILTERS_CUSTOM_BLACK_LIST') . '</option>'; $html[] = ' <option value="WL"' . ($group_filter['filter_type'] == 'WL' ? ' selected="selected"' : '') . '>' . JText::_('COM_CONFIG_FIELD_FILTERS_WHITE_LIST') . '</option>'; $html[] = ' <option value="NH"' . ($group_filter['filter_type'] == 'NH' ? ' selected="selected"' : '') . '>' . JText::_('COM_CONFIG_FIELD_FILTERS_NO_HTML') . '</option>'; $html[] = ' <option value="NONE"' . ($group_filter['filter_type'] == 'NONE' ? ' selected="selected"' : '') . '>' . JText::_('COM_CONFIG_FIELD_FILTERS_NO_FILTER') . '</option>'; $html[] = ' </select>'; $html[] = ' </td>'; $html[] = ' <td>'; $html[] = ' <input' . ' name="' . $this->name . '[' . $group->value . '][filter_tags]"' . ' type="text"' . ' id="' . $this->id . $group->value . '_filter_tags" class="novalidate"' . ' value="' . htmlspecialchars($group_filter['filter_tags'], ENT_QUOTES) . '"' . '/>'; $html[] = ' </td>'; $html[] = ' <td>'; $html[] = ' <input' . ' name="' . $this->name . '[' . $group->value . '][filter_attributes]"' . ' type="text"' . ' id="' . $this->id . $group->value . '_filter_attributes" class="novalidate"' . ' value="' . htmlspecialchars($group_filter['filter_attributes'], ENT_QUOTES) . '"' . '/>'; $html[] = ' </td>'; $html[] = ' </tr>'; } $html[] = ' </tbody>'; // Close the table. $html[] = '</table>'; // Add notes $html[] = '<div class="alert">'; $html[] = '<p>' . JText::_('JGLOBAL_FILTER_TYPE_DESC') . '</p>'; $html[] = '<p>' . JText::_('JGLOBAL_FILTER_TAGS_DESC') . '</p>'; $html[] = '<p>' . JText::_('JGLOBAL_FILTER_ATTRIBUTES_DESC') . '</p>'; $html[] = '</div>'; return implode("\n", $html); } /** * A helper to get the list of user groups. * * @return array * * @since 1.6 */ protected function getUserGroups() { // Get a database object. $db = JFactory::getDbo(); // Get the user groups from the database. $query = $db->getQuery(true); $query->select('a.id AS value, a.title AS text, COUNT(DISTINCT b.id) AS level, a.parent_id as parent'); $query->from('#__usergroups AS a'); $query->join('LEFT', '#__usergroups AS b on a.lft > b.lft AND a.rgt < b.rgt'); $query->group('a.id, a.title, a.lft'); $query->order('a.lft ASC'); $db->setQuery($query); $options = $db->loadObjectList(); return $options; } } PKb��\��b��)components/com_config/model/component.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_config * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Model for component configuration * * @since 3.2 */ class ConfigModelComponent extends ConfigModelForm { /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 3.2 */ protected function populateState() { $input = JFactory::getApplication()->input; // Set the component (option) we are dealing with. $component = $input->get('component'); $state = $this->loadState(); $state->set('component.option', $component); // Set an alternative path for the configuration file. if ($path = $input->getString('path')) { $path = JPath::clean(JPATH_SITE . '/' . $path); JPath::check($path); $state->set('component.path', $path); } $this->setState($state); } /** * Method to get a form object. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure * * @since 3.2 */ public function getForm($data = array(), $loadData = true) { $state = $this->getState(); $option = $state->get('component.option'); if ($path = $state->get('component.path')) { // Add the search path for the admin component config.xml file. JForm::addFormPath($path); } else { // Add the search path for the admin component config.xml file. JForm::addFormPath(JPATH_ADMINISTRATOR . '/components/' . $option); } // Get the form. $form = $this->loadForm( 'com_config.component', 'config', array('control' => 'jform', 'load_data' => $loadData), false, '/config' ); if (empty($form)) { return false; } $lang = JFactory::getLanguage(); $lang->load($option, JPATH_BASE, null, false, true) || $lang->load($option, JPATH_BASE . "/components/$option", null, false, true); return $form; } /** * Get the component information. * * @return object * * @since 3.2 */ public function getComponent() { $state = $this->getState(); $option = $state->get('component.option'); // Load common and local language files. $lang = JFactory::getLanguage(); $lang->load($option, JPATH_BASE, null, false, true) || $lang->load($option, JPATH_BASE . "/components/$option", null, false, true); $result = JComponentHelper::getComponent($option); return $result; } /** * Method to save the configuration data. * * @param array $data An array containing all global config data. * * @return boolean True on success, false on failure. * * @since 3.2 * @throws RuntimeException */ public function save($data) { $table = JTable::getInstance('extension'); $dispatcher = JEventDispatcher::getInstance(); $context = $this->option . '.' . $this->name; JPluginHelper::importPlugin('extension'); // Check super user group. if (isset($data['params']) && !JFactory::getUser()->authorise('core.admin')) { $form = $this->getForm(array(), false); foreach ($form->getFieldsets() as $fieldset) { foreach ($form->getFieldset($fieldset->name) as $field) { if ($field->type === 'UserGroupList' && isset($data['params'][$field->fieldname]) && (int) $field->getAttribute('checksuperusergroup', 0) === 1 && JAccess::checkGroup($data['params'][$field->fieldname], 'core.admin')) { throw new RuntimeException(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED')); } } } } // Save the rules. if (isset($data['params']) && isset($data['params']['rules'])) { $rules = new JAccessRules($data['params']['rules']); $asset = JTable::getInstance('asset'); if (!$asset->loadByName($data['option'])) { $root = JTable::getInstance('asset'); $root->loadByName('root.1'); $asset->name = $data['option']; $asset->title = $data['option']; $asset->setLocation($root->id, 'last-child'); } $asset->rules = (string) $rules; if (!$asset->check() || !$asset->store()) { throw new RuntimeException($asset->getError()); } // We don't need this anymore unset($data['option']); unset($data['params']['rules']); } // Load the previous Data if (!$table->load($data['id'])) { throw new RuntimeException($table->getError()); } unset($data['id']); // Bind the data. if (!$table->bind($data)) { throw new RuntimeException($table->getError()); } // Check the data. if (!$table->check()) { throw new RuntimeException($table->getError()); } $result = $dispatcher->trigger('onExtensionBeforeSave', array($context, $table, false)); // Store the data. if (in_array(false, $result, true) || !$table->store()) { throw new RuntimeException($table->getError()); } // Trigger the after save event. $dispatcher->trigger('onExtensionAfterSave', array($context, $table, false)); // Clean the component cache. $this->cleanCache('_system', 0); $this->cleanCache('_system', 1); return true; } } PKb��\��'components/com_redirect/tables/link.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Link Table for Redirect. * * @since 1.6 */ class RedirectTableLink extends JTable { /** * Constructor * * @param JDatabaseDriver $db Database object. * * @since 1.6 */ public function __construct($db) { parent::__construct('#__redirect_links', 'id', $db); } /** * Overloaded check function * * @return boolean * * @since 1.6 */ public function check() { $this->old_url = trim(rawurldecode($this->old_url)); $this->new_url = trim(rawurldecode($this->new_url)); // Check for valid name. if (empty($this->old_url)) { $this->setError(JText::_('COM_REDIRECT_ERROR_SOURCE_URL_REQUIRED')); return false; } // Check for NOT NULL. if (empty($this->referer)) { $this->referer = ''; } // Check for valid name if not in advanced mode. if (empty($this->new_url) && JComponentHelper::getParams('com_redirect')->get('mode', 0) == false) { $this->setError(JText::_('COM_REDIRECT_ERROR_DESTINATION_URL_REQUIRED')); return false; } elseif (empty($this->new_url) && JComponentHelper::getParams('com_redirect')->get('mode', 0) == true) { // Else if an empty URL and in redirect mode only throw the same error if the code is a 3xx status code if ($this->header < 400 && $this->header >= 300) { $this->setError(JText::_('COM_REDIRECT_ERROR_DESTINATION_URL_REQUIRED')); return false; } } // Check for duplicates if ($this->old_url == $this->new_url) { $this->setError(JText::_('COM_REDIRECT_ERROR_DUPLICATE_URLS')); return false; } $db = $this->getDbo(); // Check for existing name $query = $db->getQuery(true) ->select($db->quoteName('id')) ->select($db->quoteName('old_url')) ->from('#__redirect_links') ->where($db->quoteName('old_url') . ' = ' . $db->quote($this->old_url)); $db->setQuery($query); $urls = $db->loadAssocList(); foreach ($urls as $url) { if ($url['old_url'] === $this->old_url && (int) $url['id'] != (int) $this->id) { $this->setError(JText::_('COM_REDIRECT_ERROR_DUPLICATE_OLD_URL')); return false; } } return true; } /** * Overriden store method to set dates. * * @param boolean $updateNulls True to update fields even if they are null. * * @return boolean True on success. * * @since 1.6 */ public function store($updateNulls = false) { $date = JFactory::getDate()->toSql(); $this->modified_date = $date; if (!$this->id) { // New record. $this->created_date = $date; } return parent::store($updateNulls); } } PKb��\�| O��,components/com_redirect/controllers/link.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Redirect link controller class. * * @since 1.6 */ class RedirectControllerLink extends JControllerForm { // Parent class access checks are sufficient for this controller. } PKb��\�n�m��-components/com_redirect/controllers/links.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Redirect link list controller class. * * @since 1.6 */ class RedirectControllerLinks extends JControllerAdmin { /** * Method to update a record. * * @return void * * @since 1.6 */ public function activate() { // Check for request forgeries. $this->checkToken(); $ids = $this->input->get('cid', array(), 'array'); $newUrl = $this->input->getString('new_url'); $comment = $this->input->getString('comment'); if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_REDIRECT_NO_ITEM_SELECTED')); } else { // Get the model. $model = $this->getModel(); $ids = ArrayHelper::toInteger($ids); // Remove the items. if (!$model->activate($ids, $newUrl, $comment)) { JError::raiseWarning(500, $model->getError()); } else { $this->setMessage(JText::plural('COM_REDIRECT_N_LINKS_UPDATED', count($ids))); } } $this->setRedirect('index.php?option=com_redirect&view=links'); } /** * Method to duplicate URLs in records. * * @return void * * @since 3.6.0 */ public function duplicateUrls() { // Check for request forgeries. $this->checkToken(); $ids = $this->input->get('cid', array(), 'array'); $newUrl = $this->input->getString('new_url'); $comment = $this->input->getString('comment'); if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_REDIRECT_NO_ITEM_SELECTED')); } else { // Get the model. $model = $this->getModel(); $ids = ArrayHelper::toInteger($ids); // Remove the items. if (!$model->duplicateUrls($ids, $newUrl, $comment)) { JError::raiseWarning(500, $model->getError()); } else { $this->setMessage(JText::plural('COM_REDIRECT_N_LINKS_UPDATED', count($ids))); } } $this->setRedirect('index.php?option=com_redirect&view=links'); } /** * Proxy for getModel. * * @param string $name The name of the model. * @param string $prefix The prefix of the model. * @param array $config An array of settings. * * @return JModel instance * * @since 1.6 */ public function getModel($name = 'Link', $prefix = 'RedirectModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } /** * Executes the batch process to add URLs to the database * * @return void */ public function batch() { $batch_urls_request = $this->input->post->get('batch_urls', array(), 'array'); $batch_urls_lines = array_map('trim', explode("\n", $batch_urls_request[0])); $batch_urls = array(); foreach ($batch_urls_lines as $batch_urls_line) { if (!empty($batch_urls_line)) { $params = JComponentHelper::getParams('com_redirect'); $separator = $params->get('separator', '|'); // Basic check to make sure the correct separator is being used if (!\Joomla\String\StringHelper::strpos($batch_urls_line, $separator)) { $this->setMessage(JText::sprintf('COM_REDIRECT_NO_SEPARATOR_FOUND', $separator), 'error'); $this->setRedirect('index.php?option=com_redirect&view=links'); return false; } $batch_urls[] = array_map('trim', explode($separator, $batch_urls_line)); } } // Set default message on error - overwrite if successful $this->setMessage(JText::_('COM_REDIRECT_NO_ITEM_ADDED'), 'error'); if (!empty($batch_urls)) { $model = $this->getModel('Links'); // Execute the batch process if ($model->batchProcess($batch_urls)) { $this->setMessage(JText::plural('COM_REDIRECT_N_LINKS_ADDED', count($batch_urls))); } } $this->setRedirect('index.php?option=com_redirect&view=links'); } /** * Clean out the unpublished links. * * @return void * * @since 3.5 */ public function purge() { $model = $this->getModel('Links'); if ($model->purge()) { $message = JText::_('COM_REDIRECT_CLEAR_SUCCESS'); } else { $message = JText::_('COM_REDIRECT_CLEAR_FAIL'); } $this->setRedirect('index.php?option=com_redirect&view=links', $message); } } PKb��\�r^Y��"components/com_redirect/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="redirect" label="COM_REDIRECT_ADVANCED_OPTIONS" > <field name="mode" type="radio" label="COM_REDIRECT_MODE_LABEL" description="COM_REDIRECT_MODE_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="separator" type="text" label="COM_REDIRECT_BULK_SEPARATOR_LABEL" description="COM_REDIRECT_BULK_SEPARATOR_DESC" default="|" /> <field name="defaultImportState" type="radio" label="COM_REDIRECT_DEFAULT_IMPORT_STATE_LABEL" description="COM_REDIRECT_DEFAULT_IMPORT_STATE_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JENABLED</option> <option value="0">JDISABLED</option> </field> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_redirect" section="component" /> </fieldset> </config> PKb��\,ް55"components/com_redirect/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_redirect"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKb��\_�<���0components/com_redirect/views/link/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', 'select'); JFactory::getDocument()->addScriptDeclaration(" Joomla.submitbutton = function(task) { if (task == 'link.cancel' || document.formvalidator.isValid(document.getElementById('link-form'))) { Joomla.submitform(task, document.getElementById('link-form')); } }; "); ?> <form action="<?php echo JRoute::_('index.php?option=com_redirect&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="link-form" class="form-validate form-horizontal"> <fieldset> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'basic')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'basic', empty($this->item->id) ? JText::_('COM_REDIRECT_NEW_LINK') : JText::sprintf('COM_REDIRECT_EDIT_LINK', $this->item->id)); ?> <?php echo $this->form->renderField('old_url'); ?> <?php echo $this->form->renderField('new_url'); ?> <?php echo $this->form->renderField('published'); ?> <?php echo $this->form->renderField('comment'); ?> <?php echo $this->form->renderField('id'); ?> <?php echo $this->form->renderField('created_date'); ?> <?php echo $this->form->renderField('modified_date'); ?> <?php if (JComponentHelper::getParams('com_redirect')->get('mode')) : ?> <?php echo $this->form->renderFieldset('advanced'); ?> <?php endif; ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </fieldset> </form> PKb��\���XX0components/com_redirect/views/link/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a redirect link. * * @since 1.6 */ class RedirectViewLink extends JViewLegacy { protected $item; protected $form; protected $state; /** * Display the view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed False if unsuccessful, otherwise void. * * @since 1.6 */ public function display($tpl = null) { $this->form = $this->get('Form'); $this->item = $this->get('Item'); $this->state = $this->get('State'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $isNew = ($this->item->id == 0); $canDo = JHelperContent::getActions('com_redirect'); JToolbarHelper::title($isNew ? JText::_('COM_REDIRECT_MANAGER_LINK_NEW') : JText::_('COM_REDIRECT_MANAGER_LINK_EDIT'), 'refresh redirect'); // If not checked out, can save the item. if ($canDo->get('core.edit')) { JToolbarHelper::apply('link.apply'); JToolbarHelper::save('link.save'); } /** * This component does not support Save as Copy due to uniqueness checks. * While it can be done, it causes too much confusion if the user does * not change the Old URL. */ if ($canDo->get('core.edit') && $canDo->get('core.create')) { JToolbarHelper::save2new('link.save2new'); } if (empty($this->item->id)) { JToolbarHelper::cancel('link.cancel'); } else { JToolbarHelper::cancel('link.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::help('JHELP_COMPONENTS_REDIRECT_MANAGER_EDIT'); } } PKb��\)e��?components/com_redirect/views/links/tmpl/default_batch_body.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $published = $this->state->get('filter.published'); $params = $this->params; $separator = $params->get('separator', '|'); ?> <div class="container-fluid"> <div class="row-fluid"> <div class="control-group span12"> <p><?php echo JText::sprintf('COM_REDIRECT_BATCH_TIP', $separator); ?></p> <div class="controls"> <textarea class="span12" rows="10" aria-required="true" value="" id="batch_urls" name="batch_urls"></textarea> </div> </div> </div> </div> PKb��\��\�ll<components/com_redirect/views/links/tmpl/default_addform.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div class="accordion hidden-phone" id="accordion1"> <div class="accordion-group"> <div class="accordion-heading"> <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#batch"> <?php echo JText::_('COM_REDIRECT_BATCH_UPDATE_WITH_NEW_URL'); ?> </a> </div> <div id="batch" class="accordion-body collapse"> <div class="accordion-inner"> <fieldset class="batch form-inline"> <div class="control-group"> <label for="new_url" class="control-label"><?php echo JText::_('COM_REDIRECT_FIELD_NEW_URL_LABEL'); ?></label> <div class="controls"> <input type="text" name="new_url" id="new_url" value="" size="50" title="<?php echo JText::_('COM_REDIRECT_FIELD_NEW_URL_DESC'); ?>" /> </div> </div> <div class="control-group"> <label for="comment" class="control-label"><?php echo JText::_('COM_REDIRECT_FIELD_COMMENT_LABEL'); ?></label> <div class="controls"> <input type="text" name="comment" id="comment" value="" size="50" title="<?php echo JText::_('COM_REDIRECT_FIELD_COMMENT_DESC'); ?>" /> </div> </div> <button class="btn btn-primary" type="button" onclick="this.form.task.value='links.duplicateUrls';this.form.submit();"><?php echo JText::_('COM_REDIRECT_BUTTON_UPDATE_LINKS'); ?></button> </fieldset> </div> </div> </div> </div> PKb��\W��VRRAcomponents/com_redirect/views/links/tmpl/default_batch_footer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <button type="button" class="btn" data-dismiss="modal" onclick="document.getElementById('batch_urls').value='';"> <?php echo JText::_('JCANCEL'); ?> </button> <button type="submit" class="btn btn-success" onclick="Joomla.submitbutton('links.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> PKb��\�+��4components/com_redirect/views/links/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_redirect&view=links'); ?>" method="post" name="adminForm" id="adminForm"> <div id="j-main-container"> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if ($this->redirectPluginId) : ?> <?php $link = JRoute::_('index.php?option=com_plugins&client_id=0&task=plugin.edit&extension_id=' . $this->redirectPluginId . '&tmpl=component&layout=modal'); ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'plugin' . $this->redirectPluginId . 'Modal', array( 'url' => $link, 'title' => JText::_('COM_REDIRECT_EDIT_PLUGIN_SETTINGS'), 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'closeButton' => false, 'backdrop' => 'static', 'keyboard' => false, 'footer' => '<button type="button" class="btn" data-dismiss="modal"' . ' onclick="jQuery(\'#plugin' . $this->redirectPluginId . 'Modal iframe\').contents().find(\'#closeBtn\').click();">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary" data-dismiss="modal" onclick="jQuery(\'#plugin' . $this->redirectPluginId . 'Modal iframe\').contents().find(\'#saveBtn\').click();">' . JText::_("JSAVE") . '</button>' . '<button type="button" class="btn btn-success" onclick="jQuery(\'#plugin' . $this->redirectPluginId . 'Modal iframe\').contents().find(\'#applyBtn\').click(); return false;">' . JText::_("JAPPLY") . '</button>' ) ); ?> <?php endif; ?> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped"> <thead> <tr> <th width="1%" class="center nowrap"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="center nowrap"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="nowrap title"> <?php echo JHtml::_('searchtools.sort', 'COM_REDIRECT_HEADING_OLD_URL', 'a.old_url', $listDirn, $listOrder); ?> </th> <th width="30%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_REDIRECT_HEADING_NEW_URL', 'a.new_url', $listDirn, $listOrder); ?> </th> <th width="30%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_REDIRECT_HEADING_REFERRER', 'a.referer', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_REDIRECT_HEADING_CREATED_DATE', 'a.created_date', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_REDIRECT_HEADING_HITS', 'a.hits', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_REDIRECT_HEADING_STATUS_CODE', 'a.header', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="9"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $canEdit = $user->authorise('core.edit', 'com_redirect'); $canChange = $user->authorise('core.edit.state', 'com_redirect'); ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td class="center"> <div class="btn-group"> <?php echo JHtml::_('redirect.published', $item->published, $i); ?> <?php // Create dropdown items and render the dropdown list. if ($canChange) { JHtml::_('actionsdropdown.' . ((int) $item->published === 2 ? 'un' : '') . 'archive', 'cb' . $i, 'links'); JHtml::_('actionsdropdown.' . ((int) $item->published === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'links'); echo JHtml::_('actionsdropdown.render', $this->escape($item->old_url)); } ?> </div> </td> <td class="break-word"> <?php if ($canEdit) : ?> <a href="<?php echo JRoute::_('index.php?option=com_redirect&task=link.edit&id=' . $item->id); ?>" title="<?php echo $this->escape($item->old_url); ?>"> <?php echo $this->escape(str_replace(JUri::root(), '', rawurldecode($item->old_url))); ?></a> <?php else : ?> <?php echo $this->escape(str_replace(JUri::root(), '', rawurldecode($item->old_url))); ?> <?php endif; ?> </td> <td class="small break-word"> <?php echo $this->escape(rawurldecode($item->new_url)); ?> </td> <td class="small break-word hidden-phone hidden-tablet"> <?php echo $this->escape($item->referer); ?> </td> <td class="small hidden-phone hidden-tablet"> <?php echo JHtml::_('date', $item->created_date, JText::_('DATE_FORMAT_LC4')); ?> </td> <td class="hidden-phone"> <?php echo (int) $item->hits; ?> </td> <td class="hidden-phone"> <?php echo (int) $item->header; ?> </td> <td class="hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <?php if (!empty($this->items)) : ?> <?php echo $this->loadTemplate('addform'); ?> <?php endif; ?> <?php // Load the batch processing form if user is allowed ?> <?php if ($user->authorise('core.create', 'com_redirect') && $user->authorise('core.edit', 'com_redirect') && $user->authorise('core.edit.state', 'com_redirect')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_REDIRECT_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKb��\�b�\��:components/com_redirect/views/links/tmpl/default_batch.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * @deprecated 3.4 Use default_batch_body and default_batch_footer */ defined('_JEXEC') or die; ?> <div class="modal hide fade" id="collapseModal"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3><?php echo JText::_('COM_REDIRECT_BATCH_OPTIONS'); ?></h3> </div> <div class="modal-body modal-batch"> <p><?php echo JText::_('COM_REDIRECT_BATCH_TIP'); ?></p> <div class="row-fluid"> <div class="control-group span12"> <div class="controls"> <textarea class="span12" rows="10" aria-required="true" value="" id="batch_urls" name="batch_urls"></textarea> </div> </div> </div> </div> <div class="modal-footer"> <button class="btn" type="button" onclick="document.id('batch_urls').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button class="btn btn-primary" type="submit" onclick="Joomla.submitbutton('links.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> </div> </div> PKb��\jI��1components/com_redirect/views/links/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of redirection links. * * @since 1.6 */ class RedirectViewLinks extends JViewLegacy { protected $enabled; protected $collect_urls_enabled; protected $redirectPluginId = 0; protected $items; protected $pagination; protected $state; public $filterForm; public $activeFilters; /** * Display the view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed False if unsuccessful, otherwise void. * * @since 1.6 * * @throws Exception */ public function display($tpl = null) { // Set variables $app = JFactory::getApplication(); $this->enabled = JPluginHelper::isEnabled('system', 'redirect'); $this->collect_urls_enabled = RedirectHelper::collectUrlsEnabled(); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); $this->params = JComponentHelper::getParams('com_redirect'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Show messages about the enabled plugin and if the plugin should collect URLs if ($this->enabled && $this->collect_urls_enabled) { $app->enqueueMessage(JText::sprintf('COM_REDIRECT_COLLECT_URLS_ENABLED', JText::_('COM_REDIRECT_PLUGIN_ENABLED')), 'notice'); } else { $this->redirectPluginId = RedirectHelper::getRedirectPluginId(); $link = JHtml::_( 'link', '#plugin' . $this->redirectPluginId . 'Modal', JText::_('COM_REDIRECT_SYSTEM_PLUGIN'), 'class="alert-link" data-toggle="modal" id="title-' . $this->redirectPluginId . '"' ); // To be removed in Joomla 4 if (JFactory::getApplication()->getTemplate() === 'hathor') { $link = JHtml::_( 'link', JRoute::_('index.php?option=com_plugins&task=plugin.edit&extension_id=' . RedirectHelper::getRedirectPluginId()), JText::_('COM_REDIRECT_SYSTEM_PLUGIN') ); } if ($this->enabled && !$this->collect_urls_enabled) { $app->enqueueMessage(JText::sprintf('COM_REDIRECT_COLLECT_MODAL_URLS_DISABLED', JText::_('COM_REDIRECT_PLUGIN_ENABLED'), $link), 'notice'); } else { $app->enqueueMessage(JText::sprintf('COM_REDIRECT_PLUGIN_MODAL_DISABLED', $link), 'error'); } } $this->addToolbar(); return parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); $canDo = JHelperContent::getActions('com_redirect'); JToolbarHelper::title(JText::_('COM_REDIRECT_MANAGER_LINKS'), 'refresh redirect'); if ($canDo->get('core.create')) { JToolbarHelper::addNew('link.add'); } if ($canDo->get('core.edit')) { JToolbarHelper::editList('link.edit'); } if ($canDo->get('core.edit.state')) { if ($state->get('filter.state') != 2) { JToolbarHelper::divider(); JToolbarHelper::publish('links.publish', 'JTOOLBAR_ENABLE', true); JToolbarHelper::unpublish('links.unpublish', 'JTOOLBAR_DISABLE', true); } if ($state->get('filter.state') != -1) { JToolbarHelper::divider(); if ($state->get('filter.state') != 2) { JToolbarHelper::archiveList('links.archive'); } elseif ($state->get('filter.state') == 2) { JToolbarHelper::unarchiveList('links.publish', 'JTOOLBAR_UNARCHIVE'); } } } if ($canDo->get('core.create')) { // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); $title = JText::_('JTOOLBAR_BULK_IMPORT'); JHtml::_('bootstrap.modal', 'collapseModal'); // Instantiate a new JLayoutFile instance and render the batch button $layout = new JLayoutFile('toolbar.batch'); $dhtml = $layout->render(array('title' => $title)); $bar->appendButton('Custom', $dhtml, 'batch'); } if ($state->get('filter.state') == -2 && $canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'links.delete', 'JTOOLBAR_EMPTY_TRASH'); JToolbarHelper::divider(); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::custom('links.purge', 'delete', 'delete', 'COM_REDIRECT_TOOLBAR_PURGE', false); JToolbarHelper::trash('links.trash'); JToolbarHelper::divider(); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_redirect'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_COMPONENTS_REDIRECT_MANAGER'); } } PKb��\d<�?LL1components/com_redirect/helpers/html/redirect.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Utility class for creating HTML Grids. * * @since 1.6 */ class JHtmlRedirect { /** * Display the published or unpublished state of an item. * * @param int $value The state value. * @param int $i The ID of the item. * @param boolean $canChange An optional prefix for the task. * * @return string * * @since 1.6 * * @throws InvalidArgumentException */ public static function published($value = 0, $i = null, $canChange = true) { // Note: $i is required but has to be an optional argument in the function call due to argument order if (null === $i) { throw new InvalidArgumentException('$i is a required argument in JHtmlRedirect::published'); } // Array of image, task, title, action $states = array( 1 => array('publish', 'links.unpublish', 'JENABLED', 'COM_REDIRECT_DISABLE_LINK'), 0 => array('unpublish', 'links.publish', 'JDISABLED', 'COM_REDIRECT_ENABLE_LINK'), 2 => array('archive', 'links.unpublish', 'JARCHIVED', 'JUNARCHIVE'), -2 => array('trash', 'links.publish', 'JTRASHED', 'COM_REDIRECT_ENABLE_LINK'), ); $state = ArrayHelper::getValue($states, (int) $value, $states[0]); $icon = $state[0]; if ($canChange) { $html = '<a href="#" onclick="return listItemTask(\'cb' . $i . '\',\'' . $state[1] . '\')" class="btn btn-micro hasTooltip' . ($value == 1 ? ' active' : '') . '" title="' . JHtml::_('tooltipText', $state[3]) . '"><span class="icon-' . $icon . '" aria-hidden="true"></span></a>'; } return $html; } } PKb��\�RG��,components/com_redirect/helpers/redirect.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; /** * Redirect component helper. * * @since 1.6 */ class RedirectHelper { public static $extension = 'com_redirect'; /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void * * @since 1.6 */ public static function addSubmenu($vName) { // No submenu for this component. } /** * Gets a list of the actions that can be performed. * * @return JObject * * @deprecated 3.2 Use JHelperContent::getActions() instead */ public static function getActions() { // Log usage of deprecated function try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions return JHelperContent::getActions('com_redirect'); } /** * Returns an array of standard published state filter options. * * @return array An array containing the options * * @since 1.6 */ public static function publishedOptions() { // Build the active state filter options. $options = array(); $options[] = JHtml::_('select.option', '*', 'JALL'); $options[] = JHtml::_('select.option', '1', 'JENABLED'); $options[] = JHtml::_('select.option', '0', 'JDISABLED'); $options[] = JHtml::_('select.option', '2', 'JARCHIVED'); $options[] = JHtml::_('select.option', '-2', 'JTRASHED'); return $options; } /** * Gets the redirect system plugin extension id. * * @return integer The redirect system plugin extension id. * * @since 3.6.0 */ public static function getRedirectPluginId() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('extension_id')) ->from($db->quoteName('#__extensions')) ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) ->where($db->quoteName('element') . ' = ' . $db->quote('redirect')); $db->setQuery($query); try { $result = (int) $db->loadResult(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } return $result; } /** * Checks whether the option "Collect URLs" is enabled for the output message * * @return boolean * * @since 3.4 */ public static function collectUrlsEnabled() { $collect_urls = false; if (JPluginHelper::isEnabled('system', 'redirect')) { $params = new Registry(JPluginHelper::getPlugin('system', 'redirect')->params); $collect_urls = (bool) $params->get('collect_urls', 1); } return $collect_urls; } } PKb��\��/Lgg$components/com_redirect/redirect.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_redirect</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_REDIRECT_XML_DESCRIPTION</description> <administration> <menu link="option=com_redirect" img="class:redirect">Redirect</menu> <files folder="admin"> <filename>config.xml</filename> <filename>controller.php</filename> <filename>redirect.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>tables</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_redirect.ini</language> <language tag="en-GB">language/en-GB.com_redirect.sys.ini</language> </languages> </administration> </extension> PKb��\��A..2components/com_redirect/models/fields/redirect.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; JFormHelper::loadFieldClass('list'); /** * A dropdown containing all valid HTTP 1.1 response codes. * * @package Joomla.Administrator * @subpackage com_redirect * @since 3.4 */ class JFormFieldRedirect extends JFormFieldList { /** * The form field type. * * @var string * @since 3.4 */ protected $type = 'Redirect'; /** * A map of integer HTTP 1.1 response codes to the full HTTP Status for the headers. * * @var object * @since 3.4 * @link http://www.iana.org/assignments/http-status-codes/ */ protected $responseMap = array( 100 => 'HTTP/1.1 100 Continue', 101 => 'HTTP/1.1 101 Switching Protocols', 102 => 'HTTP/1.1 102 Processing', 200 => 'HTTP/1.1 200 OK', 201 => 'HTTP/1.1 201 Created', 202 => 'HTTP/1.1 202 Accepted', 203 => 'HTTP/1.1 203 Non-Authoritative Information', 204 => 'HTTP/1.1 204 No Content', 205 => 'HTTP/1.1 205 Reset Content', 206 => 'HTTP/1.1 206 Partial Content', 207 => 'HTTP/1.1 207 Multi-Status', 208 => 'HTTP/1.1 208 Already Reported', 226 => 'HTTP/1.1 226 IM Used', 300 => 'HTTP/1.1 300 Multiple Choices', 301 => 'HTTP/1.1 301 Moved Permanently', 302 => 'HTTP/1.1 302 Found', 303 => 'HTTP/1.1 303 See other', 304 => 'HTTP/1.1 304 Not Modified', 305 => 'HTTP/1.1 305 Use Proxy', 306 => 'HTTP/1.1 306 (Unused)', 307 => 'HTTP/1.1 307 Temporary Redirect', 308 => 'HTTP/1.1 308 Permanent Redirect', 400 => 'HTTP/1.1 400 Bad Request', 401 => 'HTTP/1.1 401 Unauthorized', 402 => 'HTTP/1.1 402 Payment Required', 403 => 'HTTP/1.1 403 Forbidden', 404 => 'HTTP/1.1 404 Not Found', 405 => 'HTTP/1.1 405 Method Not Allowed', 406 => 'HTTP/1.1 406 Not Acceptable', 407 => 'HTTP/1.1 407 Proxy Authentication Required', 408 => 'HTTP/1.1 408 Request Timeout', 409 => 'HTTP/1.1 409 Conflict', 410 => 'HTTP/1.1 410 Gone', 411 => 'HTTP/1.1 411 Length Required', 412 => 'HTTP/1.1 412 Precondition Failed', 413 => 'HTTP/1.1 413 Payload Too Large', 414 => 'HTTP/1.1 414 URI Too Long', 415 => 'HTTP/1.1 415 Unsupported Media Type', 416 => 'HTTP/1.1 416 Requested Range Not Satisfiable', 417 => 'HTTP/1.1 417 Expectation Failed', 418 => 'HTTP/1.1 418 I\'m a teapot', 422 => 'HTTP/1.1 422 Unprocessable Entity', 423 => 'HTTP/1.1 423 Locked', 424 => 'HTTP/1.1 424 Failed Dependency', 425 => 'HTTP/1.1 425 Reserved for WebDAV advanced collections expired proposal', 426 => 'HTTP/1.1 426 Upgrade Required', 428 => 'HTTP/1.1 428 Precondition Required', 429 => 'HTTP/1.1 429 Too Many Requests', 431 => 'HTTP/1.1 431 Request Header Fields Too Large', 451 => 'HTTP/1.1 451 Unavailable For Legal Reasons', 500 => 'HTTP/1.1 500 Internal Server Error', 501 => 'HTTP/1.1 501 Not Implemented', 502 => 'HTTP/1.1 502 Bad Gateway', 503 => 'HTTP/1.1 503 Service Unavailable', 504 => 'HTTP/1.1 504 Gateway Timeout', 505 => 'HTTP/1.1 505 HTTP Version Not Supported', 506 => 'HTTP/1.1 506 Variant Also Negotiates (Experimental)', 507 => 'HTTP/1.1 507 Insufficient Storage', 508 => 'HTTP/1.1 508 Loop Detected', 510 => 'HTTP/1.1 510 Not Extended', 511 => 'HTTP/1.1 511 Network Authentication Required', ); /** * Method to get the field input markup. * * @return string The field input markup. * * @since 3.4 */ protected function getOptions() { $options = array(); foreach ($this->responseMap as $key => $value) { $options[] = JHtml::_('select.option', $key, $value); } // Merge any additional options in the XML definition. $options = array_merge(parent::getOptions(), $options); return $options; } } PKb��\k� -components/com_redirect/models/forms/link.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="id" type="number" label="JGLOBAL_FIELD_ID_LABEL" description="JGLOBAL_FIELD_ID_DESC" id="id" default="0" readonly="true" class="readonly" /> <field name="old_url" type="text" label="COM_REDIRECT_FIELD_OLD_URL_LABEL" description="COM_REDIRECT_FIELD_OLD_URL_DESC" class="input-xxlarge" size="50" required="true" /> <field name="new_url" type="text" label="COM_REDIRECT_FIELD_NEW_URL_LABEL" description="COM_REDIRECT_FIELD_NEW_URL_DESC" class="input-xxlarge" size="50" required="true" /> <field name="comment" type="text" label="COM_REDIRECT_FIELD_COMMENT_LABEL" description="COM_REDIRECT_FIELD_COMMENT_DESC" size="40" /> <field name="published" type="list" label="JSTATUS" description="JFIELD_PUBLISHED_DESC" class="chzn-color-state" size="1" default="1" > <option value="1">JENABLED</option> <option value="0">JDISABLED</option> <option value="2">JARCHIVED</option> <option value="-2">JTRASHED</option> </field> <field name="referer" type="text" label="COM_REDIRECT_FIELD_REFERRER_LABEL" id="referer" size="50" readonly="true" /> <field name="created_date" type="text" label="COM_REDIRECT_FIELD_CREATED_DATE_LABEL" id="created_date" class="readonly" size="20" readonly="true" /> <field name="modified_date" type="text" label="COM_REDIRECT_FIELD_UPDATED_DATE_LABEL" id="modified_date" class="readonly" size="20" readonly="true" /> <field name="hits" type="number" label="JGLOBAL_HITS" id="hits" class="readonly" size="20" readonly="true" filter="unset" /> </fieldset> <fieldset name="advanced"> <field name="header" type="redirect" label="COM_REDIRECT_FIELD_REDIRECT_STATUS_CODE_LABEL" description="COM_REDIRECT_FIELD_REDIRECT_STATUS_CODE_DESC" default="301" class="input-xlarge" /> </fieldset> </form> PKb��\��//'components/com_redirect/models/link.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Redirect link model. * * @since 1.6 */ class RedirectModelLink extends JModelAdmin { /** * @var string The prefix to use with controller messages. * @since 1.6 */ protected $text_prefix = 'COM_REDIRECT'; /** * Method to test whether a record can be deleted. * * @param object $record A record object. * * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. * * @since 1.6 */ protected function canDelete($record) { if ($record->published != -2) { return false; } return parent::canDelete($record); } /** * Returns a reference to the a Table object, always creating it. * * @param string $type The table type to instantiate * @param string $prefix A prefix for the table class name. Optional. * @param array $config Configuration array for model. Optional. * * @return JTable A database object * * @since 1.6 */ public function getTable($type = 'Link', $prefix = 'RedirectTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Method to get the record form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return JForm A JForm object on success, false on failure * * @since 1.6 */ public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_redirect.link', 'link', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } // Modify the form based on access controls. if ($this->canEditState((object) $data) != true) { // Disable fields for display. $form->setFieldAttribute('published', 'disabled', 'true'); // Disable fields while saving. // The controller has already verified this is a record you can edit. $form->setFieldAttribute('published', 'filter', 'unset'); } // If in advanced mode then we make sure the new URL field is not compulsory and the header // field compulsory in case people select non-3xx redirects if (JComponentHelper::getParams('com_redirect')->get('mode', 0) == true) { $form->setFieldAttribute('new_url', 'required', 'false'); $form->setFieldAttribute('header', 'required', 'true'); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_redirect.edit.link.data', array()); if (empty($data)) { $data = $this->getItem(); } $this->preprocessData('com_redirect.link', $data); return $data; } /** * Method to activate links. * * @param array &$pks An array of link ids. * @param string $url The new URL to set for the redirect. * @param string $comment A comment for the redirect links. * * @return boolean Returns true on success, false on failure. * * @since 1.6 */ public function activate(&$pks, $url, $comment = null) { $user = JFactory::getUser(); $db = $this->getDbo(); // Sanitize the ids. $pks = (array) $pks; $pks = ArrayHelper::toInteger($pks); // Populate default comment if necessary. $comment = (!empty($comment)) ? $comment : JText::sprintf('COM_REDIRECT_REDIRECTED_ON', JHtml::_('date', time())); // Access checks. if (!$user->authorise('core.edit', 'com_redirect')) { $pks = array(); $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDIT_NOT_PERMITTED')); return false; } if (!empty($pks)) { // Update the link rows. $query = $db->getQuery(true) ->update($db->quoteName('#__redirect_links')) ->set($db->quoteName('new_url') . ' = ' . $db->quote($url)) ->set($db->quoteName('published') . ' = ' . (int) 1) ->set($db->quoteName('comment') . ' = ' . $db->quote($comment)) ->where($db->quoteName('id') . ' IN (' . implode(',', $pks) . ')'); $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } } return true; } /** * Method to batch update URLs to have new redirect urls and comments. Note will publish any unpublished URLs. * * @param array &$pks An array of link ids. * @param string $url The new URL to set for the redirect. * @param string $comment A comment for the redirect links. * * @return boolean Returns true on success, false on failure. * * @since 3.6.0 */ public function duplicateUrls(&$pks, $url, $comment = null) { $user = JFactory::getUser(); $db = $this->getDbo(); // Sanitize the ids. $pks = (array) $pks; $pks = ArrayHelper::toInteger($pks); // Access checks. if (!$user->authorise('core.edit', 'com_redirect')) { $pks = array(); $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDIT_NOT_PERMITTED')); return false; } if (!empty($pks)) { $date = JFactory::getDate()->toSql(); // Update the link rows. $query = $db->getQuery(true) ->update($db->quoteName('#__redirect_links')) ->set($db->quoteName('new_url') . ' = ' . $db->quote($url)) ->set($db->quoteName('modified_date') . ' = ' . $db->quote($date)) ->set($db->quoteName('published') . ' = ' . 1) ->where($db->quoteName('id') . ' IN (' . implode(',', $pks) . ')'); if (!empty($comment)) { $query->set($db->quoteName('comment') . ' = ' . $db->quote($comment)); } $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } } return true; } } PKb��\����~~(components/com_redirect/models/links.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Methods supporting a list of redirect links. * * @since 1.6 */ class RedirectModelLinks extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'state', 'a.state', 'old_url', 'a.old_url', 'new_url', 'a.new_url', 'referer', 'a.referer', 'hits', 'a.hits', 'created_date', 'a.created_date', 'published', 'a.published', 'header', 'a.header', 'http_status', ); } parent::__construct($config); } /** * Removes all of the unpublished redirects from the table. * * @return boolean result of operation * * @since 3.5 */ public function purge() { $db = $this->getDbo(); $query = $db->getQuery(true); $query->delete('#__redirect_links')->where($db->qn('published') . '= 0'); $db->setQuery($query); try { $db->execute(); } catch (Exception $e) { return false; } return true; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.old_url', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.state', $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'string')); $this->setState('filter.http_status', $this->getUserStateFromRequest($this->context . '.filter.http_status', 'filter_http_status', '', 'cmd')); // Load the parameters. $params = JComponentHelper::getParams('com_redirect'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.state'); $id .= ':' . $this->getState('filter.http_status'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.*' ) ); $query->from($db->quoteName('#__redirect_links', 'a')); // Filter by published state $state = $this->getState('filter.state'); if (is_numeric($state)) { $query->where($db->quoteName('a.published') . ' = ' . (int) $state); } elseif ($state === '') { $query->where($db->quoteName('a.published') . ' IN (0,1)'); } // Filter the items over the HTTP status code header. if ($httpStatusCode = $this->getState('filter.http_status')) { $query->where($db->quoteName('a.header') . ' = ' . (int) $httpStatusCode); } // Filter the items over the search string if set. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where($db->quoteName('a.id') . ' = ' . (int) substr($search, 3)); } else { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where( '(' . $db->quoteName('old_url') . ' LIKE ' . $search . ' OR ' . $db->quoteName('new_url') . ' LIKE ' . $search . ' OR ' . $db->quoteName('comment') . ' LIKE ' . $search . ' OR ' . $db->quoteName('referer') . ' LIKE ' . $search . ')' ); } } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.old_url')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Add the entered URLs into the database * * @param array $batch_urls Array of URLs to enter into the database * * @return boolean */ public function batchProcess($batch_urls) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $params = JComponentHelper::getParams('com_redirect'); $state = (int) $params->get('defaultImportState', 0); $columns = array( $db->quoteName('old_url'), $db->quoteName('new_url'), $db->quoteName('referer'), $db->quoteName('comment'), $db->quoteName('hits'), $db->quoteName('published'), $db->quoteName('created_date') ); $query->columns($columns); foreach ($batch_urls as $batch_url) { $old_url = $batch_url[0]; // Destination URL can also be an external URL if (!empty($batch_url[1])) { $new_url = $batch_url[1]; } else { $new_url = ''; } $query->insert($db->quoteName('#__redirect_links'), false) ->values( $db->quote($old_url) . ', ' . $db->quote($new_url) . ' ,' . $db->quote('') . ', ' . $db->quote('') . ', 0, ' . $state . ', ' . $db->quote(JFactory::getDate()->toSql()) ); } $db->setQuery($query); $db->execute(); return true; } } PKb��\�.���&components/com_redirect/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Redirect master display controller. * * @since 1.6 */ class RedirectController extends JControllerLegacy { /** * @var string The default view. * @since 1.6 */ protected $default_view = 'links'; /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached. * @param mixed $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { JLoader::register('RedirectHelper', JPATH_ADMINISTRATOR . '/components/com_redirect/helpers/redirect.php'); // Load the submenu. RedirectHelper::addSubmenu($this->input->get('view', 'links')); $view = $this->input->get('view', 'links'); $layout = $this->input->get('layout', 'default'); $id = $this->input->getInt('id'); // Check for edit form. if ($view == 'link' && $layout == 'edit' && !$this->checkEditId('com_redirect.edit.link', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_redirect&view=links', false)); return false; } parent::display(); } } PKb��\��GG$components/com_redirect/redirect.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_redirect * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; if (!JFactory::getUser()->authorise('core.manage', 'com_redirect')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Redirect'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\�ְ���/components/com_installer/controllers/update.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Installer Update Controller * * @since 1.6 */ class InstallerControllerUpdate extends JControllerLegacy { /** * Update a set of extensions. * * @return void * * @since 1.6 */ public function update() { // Check for request forgeries. $this->checkToken(); /** @var InstallerModelUpdate $model */ $model = $this->getModel('update'); $uid = $this->input->get('cid', array(), 'array'); $uid = ArrayHelper::toInteger($uid, array()); // Get the minimum stability. $component = JComponentHelper::getComponent('com_installer'); $params = $component->params; $minimum_stability = (int) $params->get('minimum_stability', JUpdater::STABILITY_STABLE); $model->update($uid, $minimum_stability); $app = JFactory::getApplication(); $redirect_url = $app->getUserState('com_installer.redirect_url'); // Don't redirect to an external URL. if (!JUri::isInternal($redirect_url)) { $redirect_url = ''; } if (empty($redirect_url)) { $redirect_url = JRoute::_('index.php?option=com_installer&view=update', false); } else { // Wipe out the user state when we're going to redirect. $app->setUserState('com_installer.redirect_url', ''); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); } $this->setRedirect($redirect_url); } /** * Find new updates. * * @return void * * @since 1.6 */ public function find() { $this->checkToken('request'); // Get the caching duration. $component = JComponentHelper::getComponent('com_installer'); $params = $component->params; $cache_timeout = (int) $params->get('cachetimeout', 6); $cache_timeout = 3600 * $cache_timeout; // Get the minimum stability. $minimum_stability = (int) $params->get('minimum_stability', JUpdater::STABILITY_STABLE); // Find updates. /** @var InstallerModelUpdate $model */ $model = $this->getModel('update'); $disabledUpdateSites = $model->getDisabledUpdateSites(); if ($disabledUpdateSites) { $updateSitesUrl = JRoute::_('index.php?option=com_installer&view=updatesites'); $this->setMessage(JText::sprintf('COM_INSTALLER_MSG_UPDATE_SITES_COUNT_CHECK', $updateSitesUrl), 'warning'); } $model->findUpdates(0, $cache_timeout, $minimum_stability); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=update', false)); } /** * Purges updates. * * @return void * * @since 1.6 */ public function purge() { // Check for request forgeries. $this->checkToken(); $model = $this->getModel('update'); $model->purge(); /** * We no longer need to enable update sites in Joomla! 3.4 as we now allow the users to manage update sites * themselves. * $model->enableSites(); */ $this->setRedirect(JRoute::_('index.php?option=com_installer&view=update', false), $model->_message); } /** * Fetch and report updates in JSON format, for AJAX requests * * @return void * * @since 2.5 */ public function ajax() { $app = JFactory::getApplication(); if (!JSession::checkToken('get')) { $app->setHeader('status', 403, true); $app->sendHeaders(); echo JText::_('JINVALID_TOKEN_NOTICE'); $app->close(); } $eid = $this->input->getInt('eid', 0); $skip = $this->input->get('skip', array(), 'array'); $cache_timeout = $this->input->getInt('cache_timeout', 0); $minimum_stability = $this->input->getInt('minimum_stability', -1); $component = JComponentHelper::getComponent('com_installer'); $params = $component->params; if ($cache_timeout == 0) { $cache_timeout = (int) $params->get('cachetimeout', 6); $cache_timeout = 3600 * $cache_timeout; } if ($minimum_stability < 0) { $minimum_stability = (int) $params->get('minimum_stability', JUpdater::STABILITY_STABLE); } /** @var InstallerModelUpdate $model */ $model = $this->getModel('update'); $model->findUpdates($eid, $cache_timeout, $minimum_stability); $model->setState('list.start', 0); $model->setState('list.limit', 0); if ($eid != 0) { $model->setState('filter.extension_id', $eid); } $updates = $model->getItems(); if (!empty($skip)) { $unfiltered_updates = $updates; $updates = array(); foreach ($unfiltered_updates as $update) { if (!in_array($update->extension_id, $skip)) { $updates[] = $update; } } } echo json_encode($updates); $app->close(); } } PKb��\��k���2components/com_installer/controllers/languages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License, see LICENSE.php */ defined('_JEXEC') or die; /** * Languages Installer Controller * * @since 2.5.7 */ class InstallerControllerLanguages extends JControllerLegacy { /** * Finds new Languages. * * @return void * * @since 2.5.7 */ public function find() { // Purge the updates list $model = $this->getModel('update'); $model->purge(); // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Get the caching duration $component = JComponentHelper::getComponent('com_installer'); $params = $component->params; $cache_timeout = $params->get('cachetimeout', 6, 'int'); $cache_timeout = 3600 * $cache_timeout; // Find updates $model = $this->getModel('languages'); if (!$model->findLanguages($cache_timeout)) { $this->setError($model->getError()); $this->setMessage($this->getError(), 'error'); } $this->setRedirect(JRoute::_('index.php?option=com_installer&view=languages', false)); } /** * Purge the updates list. * * @return void * * @since 2.5.7 */ public function purge() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Purge updates $model = $this->getModel('update'); $model->purge(); $model->enableSites(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=languages', false), $model->_message); } /** * Install languages. * * @return void * * @since 2.5.7 */ public function install() { $model = $this->getModel('languages'); // Get array of selected languages $lids = $this->input->get('cid', array(), 'array'); JArrayHelper::toInteger($lids, array()); if (!$lids) { // No languages have been selected $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_DISCOVER_NOEXTENSIONSELECTED')); } else { // Install selected languages $model->install($lids); } $this->setRedirect(JRoute::_('index.php?option=com_installer&view=languages', false)); } } PKb��\+�3�**1components/com_installer/controllers/discover.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Discover Installation Controller * * @since 1.6 */ class InstallerControllerDiscover extends JControllerLegacy { /** * Refreshes the cache of discovered extensions. * * @return void * * @since 1.6 */ public function refresh() { $this->checkToken(); $model = $this->getModel('discover'); $model->discover(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=discover', false)); } /** * Install a discovered extension. * * @return void * * @since 1.6 */ public function install() { $this->checkToken(); $this->getModel('discover')->discover_install(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=discover', false)); } /** * Clean out the discovered extension cache. * * @return void * * @since 1.6 */ public function purge() { $this->checkToken(); $model = $this->getModel('discover'); $model->purge(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=discover', false), $model->_message); } } PKb��\��d�dd/components/com_installer/controllers/manage.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Installer Manage Controller * * @since 1.6 */ class InstallerControllerManage extends JControllerLegacy { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { parent::__construct($config); $this->registerTask('unpublish', 'publish'); $this->registerTask('publish', 'publish'); } /** * Enable/Disable an extension (if supported). * * @return void * * @since 1.6 */ public function publish() { // Check for request forgeries. $this->checkToken(); $ids = $this->input->get('cid', array(), 'array'); $values = array('publish' => 1, 'unpublish' => 0); $task = $this->getTask(); $value = ArrayHelper::getValue($values, $task, 0, 'int'); if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_INSTALLER_ERROR_NO_EXTENSIONS_SELECTED')); } else { // Get the model. /** @var InstallerModelManage $model */ $model = $this->getModel('manage'); // Change the state of the records. if (!$model->publish($ids, $value)) { JError::raiseWarning(500, implode('<br />', $model->getErrors())); } else { if ($value == 1) { $ntext = 'COM_INSTALLER_N_EXTENSIONS_PUBLISHED'; } elseif ($value == 0) { $ntext = 'COM_INSTALLER_N_EXTENSIONS_UNPUBLISHED'; } $this->setMessage(JText::plural($ntext, count($ids))); } } $this->setRedirect(JRoute::_('index.php?option=com_installer&view=manage', false)); } /** * Remove an extension (Uninstall). * * @return void * * @since 1.5 */ public function remove() { // Check for request forgeries. $this->checkToken(); $eid = $this->input->get('cid', array(), 'array'); /** @var InstallerModelManage $model */ $model = $this->getModel('manage'); $eid = ArrayHelper::toInteger($eid, array()); $model->remove($eid); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=manage', false)); } /** * Refreshes the cached metadata about an extension. * * Useful for debugging and testing purposes when the XML file might change. * * @return void * * @since 1.6 */ public function refresh() { // Check for request forgeries. $this->checkToken(); $uid = $this->input->get('cid', array(), 'array'); $model = $this->getModel('manage'); $uid = ArrayHelper::toInteger($uid, array()); $model->refresh($uid); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=manage', false)); } } PKb��\Zڹ���0components/com_installer/controllers/install.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Installer controller for Joomla! installer class. * * @since 1.5 */ class InstallerControllerInstall extends JControllerLegacy { /** * Install an extension. * * @return boolean * * @since 1.5 */ public function install() { // Check for request forgeries. $this->checkToken(); /** @var InstallerModelInstall $model */ $model = $this->getModel('install'); // TODO: Reset the users acl here as well to kill off any missing bits. $result = $model->install(); $app = JFactory::getApplication(); $redirect_url = $app->getUserState('com_installer.redirect_url'); if (!$redirect_url) { $redirect_url = base64_decode($app->input->get('return')); } // Don't redirect to an external URL. if (!JUri::isInternal($redirect_url)) { $redirect_url = ''; } if (empty($redirect_url)) { $redirect_url = JRoute::_('index.php?option=com_installer&view=install', false); } else { // Wipe out the user state when we're going to redirect. $app->setUserState('com_installer.redirect_url', ''); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); } $this->setRedirect($redirect_url); return $result; } /** * Install an extension from drag & drop ajax upload. * * @return void * * @since 3.7.0 */ public function ajax_upload() { $app = JFactory::getApplication(); $message = $app->getUserState('com_installer.message'); // Do install $result = $this->install(); // Get redirect URL $redirect = $this->redirect; // Push message queue to session because we will redirect page by Javascript, not $app->redirect(). // The "application.queue" is only set in redirect() method, so we must manually store it. $app->getSession()->set('application.queue', $app->getMessageQueue()); header('Content-Type: application/json'); echo new JResponseJson(array('redirect' => $redirect), $message, !$result); exit(); } } PKb��\ �*^^1components/com_installer/controllers/database.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Installer Database Controller * * @since 2.5 */ class InstallerControllerDatabase extends JControllerLegacy { /** * Tries to fix missing database updates * * @return void * * @since 2.5 * @todo Purge updates has to be replaced with an events system */ public function fix() { // Check for request forgeries. $this->checkToken(); $model = $this->getModel('database'); $model->fix(); // Purge updates JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_joomlaupdate/models', 'JoomlaupdateModel'); $updateModel = JModelLegacy::getInstance('default', 'JoomlaupdateModel'); $updateModel->purge(); // Refresh versionable assets cache JFactory::getApplication()->flushAssets(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=database', false)); } } PKb��\���P@@4components/com_installer/controllers/updatesites.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Installer Update Sites Controller * * @package Joomla.Administrator * @subpackage com_installer * @since 3.4 */ class InstallerControllerUpdatesites extends JControllerLegacy { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 3.4 */ public function __construct($config = array()) { parent::__construct($config); $this->registerTask('unpublish', 'publish'); $this->registerTask('publish', 'publish'); $this->registerTask('delete', 'delete'); $this->registerTask('rebuild', 'rebuild'); } /** * Enable/Disable an extension (if supported). * * @return void * * @since 3.4 * * @throws Exception on error */ public function publish() { // Check for request forgeries. $this->checkToken(); $ids = $this->input->get('cid', array(), 'array'); $values = array('publish' => 1, 'unpublish' => 0); $task = $this->getTask(); $value = ArrayHelper::getValue($values, $task, 0, 'int'); if (empty($ids)) { throw new Exception(JText::_('COM_INSTALLER_ERROR_NO_UPDATESITES_SELECTED'), 500); } // Get the model. $model = $this->getModel('Updatesites'); // Change the state of the records. if (!$model->publish($ids, $value)) { throw new Exception(implode('<br />', $model->getErrors()), 500); } $ntext = ($value == 0) ? 'COM_INSTALLER_N_UPDATESITES_UNPUBLISHED' : 'COM_INSTALLER_N_UPDATESITES_PUBLISHED'; $this->setMessage(JText::plural($ntext, count($ids))); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=updatesites', false)); } /** * Deletes an update site (if supported). * * @return void * * @since 3.6 * * @throws Exception on error */ public function delete() { // Check for request forgeries. $this->checkToken(); $ids = $this->input->get('cid', array(), 'array'); if (empty($ids)) { throw new Exception(JText::_('COM_INSTALLER_ERROR_NO_UPDATESITES_SELECTED'), 500); } // Delete the records. $this->getModel('Updatesites')->delete($ids); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=updatesites', false)); } /** * Rebuild update sites tables. * * @return void * * @since 3.6 */ public function rebuild() { // Check for request forgeries. $this->checkToken(); // Rebuild the update sites. $this->getModel('Updatesites')->rebuild(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=updatesites', false)); } } PKb��\��_MM#components/com_installer/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="preferences" label="COM_INSTALLER_PREFERENCES_LABEL" description="COM_INSTALLER_PREFERENCES_DESCRIPTION" > <field name="show_jed_info" type="radio" label="COM_INSTALLER_SHOW_JED_INFORMATION_LABEL" description="COM_INSTALLER_SHOW_JED_INFORMATION_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">COM_INSTALLER_SHOW_JED_INFORMATION_SHOW_MESSAGE</option> <option value="0">COM_INSTALLER_SHOW_JED_INFORMATION_HIDE_MESSAGE</option> </field> <field name="cachetimeout" type="integer" label="COM_INSTALLER_CACHETIMEOUT_LABEL" description="COM_INSTALLER_CACHETIMEOUT_DESC" first="0" last="24" step="1" default="6" /> <field name="minimum_stability" type="list" label="COM_INSTALLER_MINIMUM_STABILITY_LABEL" description="COM_INSTALLER_MINIMUM_STABILITY_DESC" default="4" > <option value="0">COM_INSTALLER_MINIMUM_STABILITY_DEV</option> <option value="1">COM_INSTALLER_MINIMUM_STABILITY_ALPHA</option> <option value="2">COM_INSTALLER_MINIMUM_STABILITY_BETA</option> <option value="3">COM_INSTALLER_MINIMUM_STABILITY_RC</option> <option value="4">COM_INSTALLER_MINIMUM_STABILITY_STABLE</option> </field> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_installer" section="component" /> </fieldset> </config> PKb��\g?vv#components/com_installer/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_installer"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKb��\�A6 &components/com_installer/installer.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_installer</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_INSTALLER_XML_DESCRIPTION</description> <administration> <files folder="admin"> <filename>config.xml</filename> <filename>controller.php</filename> <filename>installer.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_installer.ini</language> <language tag="en-GB">language/en-GB.com_installer.sys.ini</language> </languages> </administration> </extension> PKb��\(��i��;components/com_installer/views/default/tmpl/default_ftp.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset title="<?php echo JText::_('COM_INSTALLER_MSG_DESCFTPTITLE'); ?>"> <legend><?php echo JText::_('COM_INSTALLER_MSG_DESCFTPTITLE'); ?></legend> <?php echo JText::_('COM_INSTALLER_MSG_DESCFTP'); ?> <?php if ($this->ftp instanceof Exception) : ?> <p><?php echo JText::_($this->ftp->getMessage()); ?></p> <?php endif; ?> <table class="adminform"> <tbody> <tr> <td width="120"> <label for="username"><?php echo JText::_('JGLOBAL_USERNAME'); ?></label> </td> <td> <input type="text" id="username" name="username" class="input_box" size="70" value="" /> </td> </tr> <tr> <td width="120"> <label for="password"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></label> </td> <td> <input type="password" id="password" name="password" class="input_box" size="70" value="" /> </td> </tr> </tbody> </table> </fieldset> PKb��\��Kb��?components/com_installer/views/default/tmpl/default_message.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $state = $this->get('State'); $message1 = $state->get('message'); $message2 = $state->get('extension_message'); ?> <?php if ($message1) : ?> <div class="row-fluid"> <div class="span12"> <strong><?php echo $message1; ?></strong> </div> </div> <?php endif; ?> <?php if ($message2) : ?> <div class="row-fluid"> <div class="span12"> <?php echo $message2; ?> </div> </div> <?php endif; ?> PKb��\�`�HH/components/com_installer/views/default/view.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Extension Manager Default View * * @since 1.5 */ class InstallerViewDefault extends JViewLegacy { /** * Constructor. * * @param array $config Configuration array * * @since 1.5 */ public function __construct($config = null) { $app = JFactory::getApplication(); parent::__construct($config); $this->_addPath('template', $this->_basePath . '/views/default/tmpl'); $this->_addPath('template', JPATH_THEMES . '/' . $app->getTemplate() . '/html/com_installer/default'); } /** * Display the view. * * @param string $tpl Template * * @return void * * @since 1.5 */ public function display($tpl = null) { // Get data from the model. $state = $this->get('State'); // Are there messages to display? $showMessage = false; if (is_object($state)) { $message1 = $state->get('message'); $message2 = $state->get('extension_message'); $showMessage = ($message1 || $message2); } $this->showMessage = $showMessage; $this->state = &$state; $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_installer'); JToolbarHelper::title(JText::_('COM_INSTALLER_HEADER_' . $this->getName()), 'puzzle install'); if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_installer'); JToolbarHelper::divider(); } // Render side bar. $this->sidebar = JHtmlSidebar::render(); } } PKb��\�+�HH8components/com_installer/views/warnings/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div id="installer-warnings" class="clearfix"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=warnings'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php if (count($this->messages)) : ?> <?php echo JHtml::_('bootstrap.startAccordion', 'warnings', array('active' => 'warning0')); ?> <?php $i = 0; ?> <?php foreach ($this->messages as $message) : ?> <?php echo JHtml::_('bootstrap.addSlide', 'warnings', $message['message'], 'warning' . ($i++)); ?> <?php echo $message['description']; ?> <?php echo JHtml::_('bootstrap.endSlide'); ?> <?php endforeach; ?> <?php echo JHtml::_('bootstrap.addSlide', 'warnings', JText::_('COM_INSTALLER_MSG_WARNINGFURTHERINFO'), 'furtherinfo'); ?> <?php echo JText::_('COM_INSTALLER_MSG_WARNINGFURTHERINFODESC'); ?> <?php echo JHtml::_('bootstrap.endSlide'); ?> <?php echo JHtml::_('bootstrap.endAccordion'); ?> <?php endif; ?> <div> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </div> </form> </div> PKb��\2~�!��5components/com_installer/views/warnings/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('InstallerViewDefault', dirname(__DIR__) . '/default/view.php'); /** * Extension Manager Warning View * * @since 1.6 */ class InstallerViewWarnings extends InstallerViewDefault { /** * Display the view * * @param string $tpl Template * * @return void * * @since 1.6 */ public function display($tpl = null) { $items = $this->get('Items'); $this->messages = &$items; parent::display($tpl); if (count($items) > 0) { JFactory::getApplication()->enqueueMessage(JText::_('COM_INSTALLER_MSG_WARNINGS_NOTICE'), 'warning'); } else { JFactory::getApplication()->enqueueMessage(JText::_('COM_INSTALLER_MSG_WARNINGS_NONE'), 'notice'); } } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { parent::addToolbar(); JToolbarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_WARNINGS'); } } PKb��\Zı�((9components/com_installer/views/languages/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <div id="installer-languages" class="clearfix"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=languages'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this, 'options' => array('filterButton' => false))); ?> <div class="clearfix"></div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped"> <thead> <tr> <th width="5%"></th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'name', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_LANGUAGE_TAG', 'element', $listDirn, $listOrder); ?> </th> <th width="5%" class="center"> <?php echo JText::_('JVERSION'); ?> </th> <th width="40%" class="nowrap hidden-phone"> <?php echo JText::_('COM_INSTALLER_HEADING_DETAILS_URL'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="6"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $version = new JVersion; $currentShortVersion = preg_replace('#^([0-9\.]+)(|.*)$#', '$1', $version->getShortVersion()); $i = 0; foreach ($this->items as $language) : preg_match('#^pkg_([a-z]{2,3}-[A-Z]{2})$#', $language->element, $element); $language->code = $element[1]; ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php $buttonText = (isset($this->installedLang[0][$language->code]) || isset($this->installedLang[1][$language->code])) ? 'REINSTALL' : 'INSTALL'; ?> <?php $onclick = 'document.getElementById(\'install_url\').value = \'' . $language->detailsurl . '\'; Joomla.submitbutton(\'install.install\');'; ?> <input type="button" class="btn btn-small" value="<?php echo JText::_('COM_INSTALLER_' . $buttonText . '_BUTTON'); ?>" onclick="<?php echo $onclick; ?>" /> </td> <td> <?php echo $language->name; ?> </td> <td> <?php echo $language->code; ?> </td> <td class="center"> <?php $minorVersion = $version::MAJOR_VERSION . '.' . $version::MINOR_VERSION; ?> <?php // Display a Note if language pack version is not equal to Joomla version ?> <?php if (strpos($language->version, $minorVersion) !== 0 || strpos($language->version, $currentShortVersion) !== 0) : ?> <span class="label label-warning hasTooltip" title="<?php echo JText::_('JGLOBAL_LANGUAGE_VERSION_NOT_PLATFORM'); ?>"><?php echo $language->version; ?></span> <?php else : ?> <span class="label label-success"><?php echo $language->version; ?></span> <?php endif; ?> </td> <td class="small hidden-phone"> <a href="<?php echo $language->detailsurl; ?>" target="_blank"><?php echo $language->detailsurl; ?></a> </td> </tr> <?php $i++; ?> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="return" value="<?php echo base64_encode('index.php?option=com_installer&view=languages') ?>" /> <input type="hidden" id="install_url" name="install_url" /> <input type="hidden" name="installtype" value="url" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> PKb��\��(��@components/com_installer/views/languages/tmpl/default_filter.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip'); ?> <div id="filter-bar" class="btn-toolbar"> <div class="btn-group pull-right hidden-phone"> <label for="limit" class="element-invisible"><?php echo JText::_('JFIELD_PLG_SEARCH_SEARCHLIMIT_DESC');?></label> <?php echo $this->pagination->getLimitBox(); ?> </div> <div class="filter-search btn-group pull-left"> <label for="filter_search" class="element-invisible"><?php echo JText::_('JSEARCH_FILTER_LABEL');?></label> <input type="text" name="filter_search" id="filter_search" placeholder="<?php echo JText::_('JSEARCH_FILTER'); ?>" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" class="hasTooltip" title="<?php echo JHtml::tooltipText('COM_INSTALLER_LANGUAGES_FILTER_SEARCH_DESC'); ?>" /> </div> <div class="btn-group pull-left hidden-phone"> <button type="submit" class="btn hasTooltip" title="<?php echo JHtml::tooltipText('JSEARCH_FILTER_SUBMIT'); ?>"><span class="icon-search"></span></button> <button type="button" class="btn hasTooltip" title="<?php echo JHtml::tooltipText('JSEARCH_FILTER_CLEAR'); ?>" onclick="document.getElementById('filter_search').value='';this.form.submit();"><span class="icon-remove"></span></button> </div> </div> <div class="clearfix"> </div> PKb��\ �]76components/com_installer/views/languages/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('InstallerViewDefault', dirname(__DIR__) . '/default/view.php'); /** * Extension Manager Language Install View * * @since 2.5.7 */ class InstallerViewLanguages extends InstallerViewDefault { /** * @var object item list */ protected $items; /** * @var object pagination information */ protected $pagination; /** * @var object model state */ protected $state; /** * Display the view. * * @param null $tpl template to display * * @return mixed|void */ public function display($tpl = null) { // Get data from the model. $this->state = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); $this->installedLang = JLanguageHelper::getInstalledLanguages(); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } parent::display($tpl); } /** * Add the page title and toolbar. * * @return void */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_installer'); JToolBarHelper::title(JText::_('COM_INSTALLER_HEADER_' . $this->getName()), 'puzzle install'); if ($canDo->get('core.admin')) { parent::addToolbar(); // TODO: this help screen will need to be created. JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_LANGUAGES'); } } } PKb��\��m��;components/com_installer/views/updatesites/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <div id="installer-manage" class="clearfix"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=updatesites'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"></div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped"> <thead> <tr> <th width="1%" class="center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'enabled', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_UPDATESITE_NAME', 'update_site_name', $listDirn, $listOrder); ?> </th> <th class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_NAME', 'name', $listDirn, $listOrder); ?> </th> <th class="hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_LOCATION', 'client_translated', $listDirn, $listOrder); ?> </th> <th class="hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_TYPE', 'type_translated', $listDirn, $listOrder); ?> </th> <th class="hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_FOLDER', 'folder_translated', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'update_site_id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="8"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; if ($item->enabled == 2) echo ' protected'; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->update_site_id); ?> </td> <td class="center"> <?php if (!$item->element) : ?> <strong>X</strong> <?php else : ?> <?php echo JHtml::_('InstallerHtml.Updatesites.state', $item->enabled, $i, $item->enabled < 2, 'cb'); ?> <?php endif; ?> </td> <td> <label for="cb<?php echo $i; ?>"> <?php echo JText::_($item->update_site_name); ?> <br /> <span class="small break-word"> <a href="<?php echo $item->location; ?>" target="_blank" rel="noopener noreferrer"><?php echo $this->escape($item->location); ?></a> </span> </label> </td> <td class="hidden-phone"> <span class="bold hasTooltip" title="<?php echo JHtml::_('tooltipText', $item->name, $item->description, 0); ?>"> <?php echo $item->name; ?> </span> </td> <td class="hidden-phone hidden-tablet"> <?php echo $item->client_translated; ?> </td> <td class="hidden-phone"> <?php echo $item->type_translated; ?> </td> <td class="hidden-phone hidden-tablet"> <?php echo $item->folder_translated; ?> </td> <td class="hidden-phone"> <?php echo $item->update_site_id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> PKb��\��x6 6 8components/com_installer/views/updatesites/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('InstallerViewDefault', dirname(__DIR__) . '/default/view.php'); /** * Extension Manager Update Sites View * * @package Joomla.Administrator * @subpackage com_installer * @since 3.4 */ class InstallerViewUpdatesites extends InstallerViewDefault { protected $items; protected $pagination; protected $form; protected $state; /** * Display the view * * @param string $tpl Template * * @return mixed|void * * @since 3.4 * * @throws Exception on errors */ public function display($tpl = null) { // Get data from the model $this->state = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // Display the view parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 3.4 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_installer'); if ($canDo->get('core.edit.state')) { JToolbarHelper::publish('updatesites.publish', 'JTOOLBAR_ENABLE', true); JToolbarHelper::unpublish('updatesites.unpublish', 'JTOOLBAR_DISABLE', true); JToolbarHelper::divider(); } if ($canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'updatesites.delete', 'JTOOLBAR_DELETE'); JToolbarHelper::divider(); } if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::custom('updatesites.rebuild', 'refresh.png', 'refresh_f2.png', 'JTOOLBAR_REBUILD', false); } JHtmlSidebar::setAction('index.php?option=com_installer&view=updatesites'); parent::addToolbar(); JToolbarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_UPDATESITES'); } } PKb��\!�խH H 8components/com_installer/views/database/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <div id="installer-database" class="clearfix"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=database'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php if ($this->errorCount === 0) : ?> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'other')); ?> <?php else : ?> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'problems')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'problems', JText::plural('COM_INSTALLER_MSG_N_DATABASE_ERROR_PANEL', $this->errorCount)); ?> <fieldset class="panelform"> <ul> <?php if (!$this->filterParams) : ?> <li><?php echo JText::_('COM_INSTALLER_MSG_DATABASE_FILTER_ERROR'); ?></li> <?php endif; ?> <?php if ($this->schemaVersion != $this->changeSet->getSchema()) : ?> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_SCHEMA_ERROR', $this->schemaVersion, $this->changeSet->getSchema()); ?></li> <?php endif; ?> <?php if (version_compare($this->updateVersion, JVERSION) != 0) : ?> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_UPDATEVERSION_ERROR', $this->updateVersion, JVERSION); ?></li> <?php endif; ?> <?php foreach ($this->errors as $line => $error) : ?> <?php $key = 'COM_INSTALLER_MSG_DATABASE_' . $error->queryType; $msgs = $error->msgElements; $file = basename($error->file); $msg0 = isset($msgs[0]) ? $msgs[0] : ' '; $msg1 = isset($msgs[1]) ? $msgs[1] : ' '; $msg2 = isset($msgs[2]) ? $msgs[2] : ' '; $message = JText::sprintf($key, $file, $msg0, $msg1, $msg2); ?> <li><?php echo $message; ?></li> <?php endforeach; ?> </ul> </fieldset> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'other', JText::_('COM_INSTALLER_MSG_DATABASE_INFO')); ?> <div class="control-group" > <fieldset class="panelform"> <ul> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_SCHEMA_VERSION', $this->schemaVersion); ?></li> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_UPDATE_VERSION', $this->updateVersion); ?></li> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_DRIVER', JFactory::getDbo()->name); ?></li> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_CHECKED_OK', count($this->results['ok'])); ?></li> <li><?php echo JText::sprintf('COM_INSTALLER_MSG_DATABASE_SKIPPED', count($this->results['skipped'])); ?></li> </ul> </fieldset> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> PKb��\��`r��5components/com_installer/views/database/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('InstallerViewDefault', dirname(__DIR__) . '/default/view.php'); /** * Extension Manager Database View * * @since 1.6 */ class InstallerViewDatabase extends InstallerViewDefault { /** * Display the view. * * @param string $tpl Template * * @return void * * @since 1.6 */ public function display($tpl = null) { // Set variables $app = JFactory::getApplication(); // Get data from the model. $this->state = $this->get('State'); $this->changeSet = $this->get('Items'); $this->errors = $this->changeSet->check(); $this->results = $this->changeSet->getStatus(); $this->schemaVersion = $this->get('SchemaVersion'); $this->updateVersion = $this->get('UpdateVersion'); $this->filterParams = $this->get('DefaultTextFilters'); $this->schemaVersion = $this->schemaVersion ?: JText::_('JNONE'); $this->updateVersion = $this->updateVersion ?: JText::_('JNONE'); $this->pagination = $this->get('Pagination'); $this->errorCount = count($this->errors); if ($this->schemaVersion != $this->changeSet->getSchema()) { $this->errorCount++; } if (!$this->filterParams) { $this->errorCount++; } if (version_compare($this->updateVersion, JVERSION) != 0) { $this->errorCount++; } if ($this->errorCount === 0) { $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_DATABASE_OK'), 'notice'); } else { $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_DATABASE_ERRORS'), 'warning'); } parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { /* * Set toolbar items for the page. */ JToolbarHelper::custom('database.fix', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_DATABASE_FIX', false); JToolbarHelper::divider(); parent::addToolbar(); JToolbarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_DATABASE'); } } PKb��\�ĒO^^6components/com_installer/views/manage/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <div id="installer-manage" class="clearfix"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=manage'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php if ($this->showMessage) : ?> <?php echo $this->loadTemplate('message'); ?> <?php endif; ?> <?php if ($this->ftp) : ?> <?php echo $this->loadTemplate('ftp'); ?> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"></div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('COM_INSTALLER_MSG_MANAGE_NOEXTENSION'); ?> </div> <?php else : ?> <table class="table table-striped" id="manageList"> <thead> <tr> <th width="1%" class="nowrap"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'status', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_NAME', 'name', $listDirn, $listOrder); ?> </th> <th> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_LOCATION', 'client_translated', $listDirn, $listOrder); ?> </th> <th> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_TYPE', 'type_translated', $listDirn, $listOrder); ?> </th> <th width="10%" class="hidden-phone"> <?php echo JText::_('JVERSION'); ?> </th> <th width="10%" class="hidden-phone hidden-tablet"> <?php echo JText::_('JDATE'); ?> </th> <th width="15%" class="hidden-phone hidden-tablet"> <?php echo JText::_('JAUTHOR'); ?> </th> <th class="hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_FOLDER', 'folder_translated', $listDirn, $listOrder); ?> </th> <th class="hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_PACKAGE_ID', 'package_id', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_ID', 'extension_id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="11"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; if ($item->status == 2) echo ' protected'; ?>"> <td> <?php echo JHtml::_('grid.id', $i, $item->extension_id); ?> </td> <td class="center"> <?php if (!$item->element) : ?> <strong>X</strong> <?php else : ?> <?php echo JHtml::_('InstallerHtml.Manage.state', $item->status, $i, $item->status < 2, 'cb'); ?> <?php endif; ?> </td> <td> <label for="cb<?php echo $i; ?>"> <span class="bold hasTooltip" title="<?php echo JHtml::_('tooltipText', $item->name, $item->description, 0); ?>"> <?php echo $item->name; ?> </span> </label> </td> <td> <?php echo $item->client_translated; ?> </td> <td> <?php echo $item->type_translated; ?> </td> <td class="hidden-phone"> <?php echo @$item->version != '' ? $item->version : ' '; ?> </td> <td class="hidden-phone hidden-tablet"> <?php echo @$item->creationDate != '' ? $item->creationDate : ' '; ?> </td> <td class="hidden-phone hidden-tablet"> <span class="editlinktip hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('COM_INSTALLER_AUTHOR_INFORMATION'), $item->author_info, 0); ?>"> <?php echo @$item->author != '' ? $item->author : ' '; ?> </span> </td> <td class="hidden-phone"> <?php echo $item->folder_translated; ?> </td> <td class="hidden-phone"> <?php echo $item->package_id ?: ' '; ?> </td> <td class="hidden-phone"> <?php echo $item->extension_id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> <!-- End Content --> </div> </form> </div> PKb��\įAg}}3components/com_installer/views/manage/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('InstallerViewDefault', dirname(__DIR__) . '/default/view.php'); /** * Extension Manager Manage View * * @since 1.6 */ class InstallerViewManage extends InstallerViewDefault { protected $items; protected $pagination; protected $form; protected $state; /** * Display the view. * * @param string $tpl Template * * @return mixed|void * * @since 1.6 */ public function display($tpl = null) { // Get data from the model. $this->state = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // Display the view. parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = JHelperContent::getActions('com_installer'); if ($canDo->get('core.edit.state')) { JToolbarHelper::publish('manage.publish', 'JTOOLBAR_ENABLE', true); JToolbarHelper::unpublish('manage.unpublish', 'JTOOLBAR_DISABLE', true); JToolbarHelper::divider(); } JToolbarHelper::custom('manage.refresh', 'refresh', 'refresh', 'JTOOLBAR_REFRESH_CACHE', true); JToolbarHelper::divider(); if ($canDo->get('core.delete')) { JToolbarHelper::deleteList('COM_INSTALLER_CONFIRM_UNINSTALL', 'manage.remove', 'JTOOLBAR_UNINSTALL'); JToolbarHelper::divider(); } JHtmlSidebar::setAction('index.php?option=com_installer&view=manage'); parent::addToolbar(); JToolbarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_MANAGE'); } } PKb��\D�ݸ��8components/com_installer/views/discover/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.multiselect'); JHtml::_('bootstrap.tooltip'); JHtml::_('formbehavior.chosen', 'select'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <div id="installer-discover" class="clearfix"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=discover'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php if ($this->showMessage) : ?> <?php echo $this->loadTemplate('message'); ?> <?php endif; ?> <?php if ($this->ftp) : ?> <?php echo $this->loadTemplate('ftp'); ?> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"></div> <div class="alert alert-no-items alert-info"> <?php echo JText::_('COM_INSTALLER_MSG_DISCOVER_DESCRIPTION'); ?> </div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped"> <thead> <tr> <th width="1%" class="nowrap center"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_NAME', 'name', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_LOCATION', 'client_translated', $listDirn, $listOrder); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_TYPE', 'type_translated', $listDirn, $listOrder); ?> </th> <th width="10%" class="hidden-phone"> <?php echo JText::_('JVERSION'); ?> </th> <th width="10%" class="hidden-phone hidden-tablet"> <?php echo JText::_('JDATE'); ?> </th> <th width="15%" class="hidden-phone hidden-tablet"> <?php echo JText::_('JAUTHOR'); ?> </th> <th class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_FOLDER', 'folder_translated', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'extension_id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="9"><?php echo $this->pagination->getListFooter(); ?></td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->extension_id); ?> </td> <td> <label for="cb<?php echo $i;?>"> <span class="bold hasTooltip" title="<?php echo JHtml::_('tooltipText', $item->name, $item->description, 0); ?>"><?php echo $item->name; ?></span> </label> </td> <td> <?php echo $item->client_translated; ?> </td> <td> <?php echo $item->type_translated; ?> </td> <td class="hidden-phone"> <?php echo @$item->version != '' ? $item->version : ' '; ?> </td> <td class="hidden-phone hidden-tablet"> <?php echo @$item->creationDate != '' ? $item->creationDate : ' '; ?> </td> <td class="hidden-phone hidden-tablet"> <span class="editlinktip hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('COM_INSTALLER_AUTHOR_INFORMATION'), $item->author_info, 0); ?>"> <?php echo @$item->author != '' ? $item->author : ' '; ?> </span> </td> <td class="hidden-phone"> <?php echo $item->folder_translated; ?> </td> <td class="hidden-phone"> <?php echo $item->extension_id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> PKb��\U��~ZZ=components/com_installer/views/discover/tmpl/default_item.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <tr class="<?php echo 'row' . $this->item->index % 2; ?>" <?php echo $this->item->style; ?>> <td> <input type="checkbox" id="cb<?php echo $this->item->index; ?>" name="eid[]" value="<?php echo $this->item->extension_id; ?>" onclick="Joomla.isChecked(this.checked);" <?php echo $this->item->cbd; ?> /> <!-- <input type="checkbox" id="cb<?php echo $this->item->index; ?>" name="eid" value="<?php echo $this->item->extension_id; ?>" onclick="Joomla.isChecked(this.checked);" <?php echo $this->item->cbd; ?> />--> <span class="bold"><?php echo $this->item->name; ?></span> </td> <td> <?php echo $this->item->type ?> </td> <td class="center"> <?php if (!$this->item->element) : ?> <strong>X</strong> <?php else : ?> <a href="index.php?option=com_installer&type=manage&task=<?php echo $this->item->task; ?>&eid[]=<?php echo $this->item->extension_id; ?>&limitstart=<?php echo $this->pagination->limitstart; ?>&<?php echo JSession::getFormToken(); ?>=1"><?php echo JHtml::_('image', 'images/' . $this->item->img, $this->item->alt, array('title' => $this->item->action)); ?></a> <?php endif; ?> </td> <td class="center"><?php echo @$this->item->folder != '' ? $this->item->folder : 'N/A'; ?></td> <td class="center"><?php echo @$this->item->client != '' ? $this->item->client : 'N/A'; ?></td> <td> <span class="editlinktip hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('COM_INSTALLER_AUTHOR_INFORMATION'), $this->item->author_info, 0); ?>"> <?php echo @$this->item->author != '' ? $this->item->author : ' '; ?> </span> </td> </tr> PKb��\,� X 5components/com_installer/views/discover/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('InstallerViewDefault', dirname(__DIR__) . '/default/view.php'); /** * Extension Manager Discover View * * @since 1.6 */ class InstallerViewDiscover extends InstallerViewDefault { /** * Display the view. * * @param string $tpl Template * * @return void * * @since 1.6 */ public function display($tpl = null) { // Run discover from the model. if (!$this->checkExtensions()) { $this->getModel('discover')->discover(); } // Get data from the model. $this->state = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 3.1 */ protected function addToolbar() { /* * Set toolbar items for the page. */ JToolbarHelper::custom('discover.install', 'upload', 'upload', 'JTOOLBAR_INSTALL', true); JToolbarHelper::custom('discover.refresh', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_DISCOVER', false); JToolbarHelper::divider(); JHtmlSidebar::setAction('index.php?option=com_installer&view=discover'); parent::addToolbar(); JToolbarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_DISCOVER'); } /** * Check extensions. * * Checks uninstalled extensions in extensions table. * * @return boolean True if there are discovered extensions on the database. * * @since 3.5 */ public function checkExtensions() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('*') ->from($db->quoteName('#__extensions')) ->where($db->quoteName('state') . ' = -1'); $db->setQuery($query); $discoveredExtensions = $db->loadObjectList(); return (count($discoveredExtensions) === 0) ? false : true; } } PKb��\���7components/com_installer/views/install/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // MooTools is loaded for B/C for extensions generating JavaScript in their install scripts, this call will be removed at 4.0 JHtml::_('behavior.framework', true); JHtml::_('bootstrap.tooltip'); JFactory::getDocument()->addScriptDeclaration( ' Joomla.submitbutton4 = function() { var form = document.getElementById("adminForm"); // do field validation if (form.install_url.value == "" || form.install_url.value == "http://" || form.install_url.value == "https://") { alert("' . JText::_('COM_INSTALLER_MSG_INSTALL_ENTER_A_URL', true) . '"); } else { JoomlaInstaller.showLoading(); form.installtype.value = "url"; form.submit(); } }; Joomla.submitbuttonInstallWebInstaller = function() { var form = document.getElementById("adminForm"); form.install_url.value = "https://appscdn.joomla.org/webapps/jedapps/webinstaller.xml"; Joomla.submitbutton4(); }; // Add spindle-wheel for installations: jQuery(document).ready(function($) { var outerDiv = $("#installer-install"); JoomlaInstaller.getLoadingOverlay() .css("top", outerDiv.position().top - $(window).scrollTop()) .css("left", "0") .css("width", "100%") .css("height", "100%") .css("display", "none") .css("margin-top", "-10px"); }); var JoomlaInstaller = { getLoadingOverlay: function () { return jQuery("#loading"); }, showLoading: function () { this.getLoadingOverlay().css("display", "block"); }, hideLoading: function () { this.getLoadingOverlay().css("display", "none"); } }; ' ); JFactory::getDocument()->addStyleDeclaration( ' #loading { background: rgba(255, 255, 255, .8) url(\'' . JHtml::_('image', 'jui/ajax-loader.gif', '', null, true, true) . '\') 50% 15% no-repeat; position: fixed; opacity: 0.8; -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity = 80); filter: alpha(opacity = 80); overflow: hidden; } ' ); ?> <script type="text/javascript"> // Set the first tab to active if there is no other active tab jQuery(document).ready(function($) { var hasTab = function(href){ return $('a[data-toggle="tab"]a[href*="' + href + '"]').length; }; if (!hasTab(localStorage.getItem('tab-href'))) { var tabAnchor = $("#myTabTabs li:first a"); window.localStorage.setItem('tab-href', tabAnchor.attr('href')); tabAnchor.click(); } }); </script> <div id="installer-install" class="clearfix"> <form enctype="multipart/form-data" action="<?php echo JRoute::_('index.php?option=com_installer&view=install'); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal"> <?php if (!empty($this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <!-- Render messages set by extension install scripts here --> <?php if ($this->showMessage) : ?> <?php echo $this->loadTemplate('message'); ?> <?php elseif ($this->showJedAndWebInstaller) : ?> <div class="alert alert-info j-jed-message" style="margin-bottom: 40px; line-height: 2em; color:#333333;"> <?php echo JHtml::_( 'link', JRoute::_('index.php?option=com_config&view=component&component=com_installer&path=&return=' . urlencode(base64_encode(JUri::getInstance()))), '<span class="element-invisible">' . str_replace('"', '"', JText::_('COM_INSTALLER_SHOW_JED_INFORMATION_TOOLTIP')) . '</span>', 'class="alert-options hasTooltip icon-options" data-dismiss="alert" title="' . str_replace('"', '"', JText::_('COM_INSTALLER_SHOW_JED_INFORMATION_TOOLTIP')) . '"' ); ?> <p><?php echo JText::_('COM_INSTALLER_INSTALL_FROM_WEB_INFO'); ?> <?php echo JText::_('COM_INSTALLER_INSTALL_FROM_WEB_TOS'); ?></p> <input class="btn" type="button" value="<?php echo JText::_('COM_INSTALLER_INSTALL_FROM_WEB_ADD_TAB'); ?>" onclick="Joomla.submitbuttonInstallWebInstaller()"/> </div> <?php endif; ?> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab'); ?> <?php // Show installation tabs at the start ?> <?php $firstTab = JEventDispatcher::getInstance()->trigger('onInstallerViewBeforeFirstTab', array()); ?> <?php // Show installation tabs ?> <?php $tabs = JEventDispatcher::getInstance()->trigger('onInstallerAddInstallationTab', array()); ?> <?php foreach ($tabs as $tab) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', $tab['name'], $tab['label']); ?> <fieldset class="uploadform"> <?php echo $tab['content']; ?> </fieldset> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endforeach; ?> <?php // Show installation tabs at the end ?> <?php $lastTab = JEventDispatcher::getInstance()->trigger('onInstallerViewAfterLastTab', array()); ?> <?php $tabs = array_merge($firstTab, $tabs, $lastTab); ?> <?php if (!$tabs) : ?> <?php JFactory::getApplication()->enqueueMessage(JText::_('COM_INSTALLER_NO_INSTALLATION_PLUGINS_FOUND'), 'warning'); ?> <?php endif; ?> <?php if ($this->ftp) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'ftp', JText::_('COM_INSTALLER_MSG_DESCFTPTITLE')); ?> <?php echo $this->loadTemplate('ftp'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php endif; ?> <input type="hidden" name="installtype" value=""/> <input type="hidden" name="task" value="install.install"/> <?php echo JHtml::_('form.token'); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> </div> </form> </div> <div id="loading"></div> PKb��\of**4components/com_installer/views/install/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('InstallerViewDefault', dirname(__DIR__) . '/default/view.php'); /** * Extension Manager Install View * * @since 1.5 */ class InstallerViewInstall extends InstallerViewDefault { /** * Display the view * * @param string $tpl Template * * @return void * * @since 1.5 */ public function display($tpl = null) { $paths = new stdClass; $paths->first = ''; $state = $this->get('state'); $this->paths = &$paths; $this->state = &$state; $this->showJedAndWebInstaller = JComponentHelper::getParams('com_installer')->get('show_jed_info', 1); JPluginHelper::importPlugin('installer'); $dispatcher = JEventDispatcher::getInstance(); $dispatcher->trigger('onInstallerBeforeDisplay', array(&$this->showJedAndWebInstaller, $this)); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { parent::addToolbar(); JToolbarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_INSTALL'); } } PKb��\K=�6components/com_installer/views/update/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('bootstrap.tooltip'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <div id="installer-update" class="clearfix"> <form action="<?php echo JRoute::_('index.php?option=com_installer&view=update'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php if ($this->showMessage) : ?> <?php echo $this->loadTemplate('message'); ?> <?php endif; ?> <?php if ($this->ftp) : ?> <?php echo $this->loadTemplate('ftp'); ?> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"></div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items alert-info"> <?php echo JText::_('COM_INSTALLER_MSG_UPDATE_NOUPDATES'); ?> </div> <?php else : ?> <table class="table table-striped"> <thead> <tr> <th width="1%" class="nowrap"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_NAME', 'u.name', $listDirn, $listOrder); ?> </th> <th class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_LOCATION', 'client_translated', $listDirn, $listOrder); ?> </th> <th class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_TYPE', 'type_translated', $listDirn, $listOrder); ?> </th> <th class="nowrap hidden-phone center"> <?php echo JText::_('COM_INSTALLER_CURRENT_VERSION'); ?> </th> <th class="nowrap center"> <?php echo JText::_('COM_INSTALLER_NEW_VERSION'); ?> </th> <th class="nowrap hidden-phone center"> <?php echo JHtml::_('searchtools.sort', 'COM_INSTALLER_HEADING_FOLDER', 'folder_translated', $listDirn, $listOrder); ?> </th> <th class="nowrap hidden-phone center"> <?php echo JText::_('COM_INSTALLER_HEADING_INSTALLTYPE'); ?> </th> <th width="40%" class="nowrap hidden-phone hidden-tablet"> <?php echo JText::_('COM_INSTALLER_HEADING_DETAILSURL'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="9"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : ?> <?php $client = $item->client_id ? JText::_('JADMINISTRATOR') : JText::_('JSITE'); $manifest = json_decode($item->manifest_cache); $current_version = isset($manifest->version) ? $manifest->version : JText::_('JLIB_UNKNOWN'); ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php echo JHtml::_('grid.id', $i, $item->update_id); ?> </td> <td> <label for="cb<?php echo $i; ?>"> <span class="editlinktip hasTooltip" title="<?php echo JHtml::_('tooltipText', JText::_('JGLOBAL_DESCRIPTION'), $item->description ?: JText::_('COM_INSTALLER_MSG_UPDATE_NODESC'), 0); ?>"> <?php echo $this->escape($item->name); ?> </span> </label> </td> <td class="center"> <?php echo $item->client_translated; ?> </td> <td class="center"> <?php echo $item->type_translated; ?> </td> <td class="hidden-phone center"> <span class="label label-warning"><?php echo $item->current_version; ?></span> </td> <td class="center"> <span class="label label-success"><?php echo $item->version; ?></span> </td> <td class="hidden-phone center"> <?php echo $item->folder_translated; ?> </td> <td class="hidden-phone center"> <?php echo $item->install_type; ?> </td> <td class="hidden-phone hidden-tablet"> <span class="break-word"> <?php echo $item->detailsurl; ?> <?php if (isset($item->infourl)) : ?> <br /> <a href="<?php echo $item->infourl; ?>" target="_blank" rel="noopener noreferrer"><?php echo $this->escape($item->infourl); ?></a> <?php endif; ?> </span> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> PKb��\� ���3components/com_installer/views/update/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('InstallerViewDefault', dirname(__DIR__) . '/default/view.php'); /** * Extension Manager Update View * * @since 1.6 */ class InstallerViewUpdate extends InstallerViewDefault { /** * List of update items. * * @var array */ protected $items; /** * Model state object. * * @var object */ protected $state; /** * List pagination. * * @var JPagination */ protected $pagination; /** * Display the view. * * @param string $tpl Template * * @return void * * @since 1.6 */ public function display($tpl = null) { // Get data from the model. $this->state = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); $paths = new stdClass; $paths->first = ''; $this->paths = &$paths; if (count($this->items) > 0) { JFactory::getApplication()->enqueueMessage(JText::_('COM_INSTALLER_MSG_WARNINGS_UPDATE_NOTICE'), 'warning'); } parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JToolbarHelper::custom('update.update', 'upload', 'upload', 'COM_INSTALLER_TOOLBAR_UPDATE', true); JToolbarHelper::custom('update.find', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_FIND_UPDATES', false); JToolbarHelper::custom('update.purge', 'purge', 'purge', 'COM_INSTALLER_TOOLBAR_PURGE', false); JToolbarHelper::divider(); JHtmlSidebar::setAction('index.php?option=com_installer&view=manage'); parent::addToolbar(); JToolbarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_UPDATE'); } } PKb��\��R��0components/com_installer/helpers/html/manage.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Installer HTML class. * * @since 2.5 */ abstract class InstallerHtmlManage { /** * Returns a published state on a grid. * * @param integer $value The state value. * @param integer $i The row index. * @param boolean $enabled An optional setting for access control on the action. * @param string $checkbox An optional prefix for checkboxes. * * @return string The Html code * * @see JHtmlJGrid::state * * @since 2.5 */ public static function state($value, $i, $enabled = true, $checkbox = 'cb') { $states = array( 2 => array( '', 'COM_INSTALLER_EXTENSION_PROTECTED', '', 'COM_INSTALLER_EXTENSION_PROTECTED', true, 'protected', 'protected', ), 1 => array( 'unpublish', 'COM_INSTALLER_EXTENSION_ENABLED', 'COM_INSTALLER_EXTENSION_DISABLE', 'COM_INSTALLER_EXTENSION_ENABLED', true, 'publish', 'publish', ), 0 => array( 'publish', 'COM_INSTALLER_EXTENSION_DISABLED', 'COM_INSTALLER_EXTENSION_ENABLE', 'COM_INSTALLER_EXTENSION_DISABLED', true, 'unpublish', 'unpublish', ), ); return JHtml::_('jgrid.state', $states, $value, $i, 'manage.', $enabled, true, $checkbox); } } PKb��\Q�1\\.components/com_installer/helpers/installer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Installer helper. * * @since 1.6 */ class InstallerHelper { /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void */ public static function addSubmenu($vName = 'install') { JHtmlSidebar::addEntry( JText::_('COM_INSTALLER_SUBMENU_INSTALL'), 'index.php?option=com_installer', $vName == 'install' ); JHtmlSidebar::addEntry( JText::_('COM_INSTALLER_SUBMENU_UPDATE'), 'index.php?option=com_installer&view=update', $vName == 'update' ); JHtmlSidebar::addEntry( JText::_('COM_INSTALLER_SUBMENU_MANAGE'), 'index.php?option=com_installer&view=manage', $vName == 'manage' ); JHtmlSidebar::addEntry( JText::_('COM_INSTALLER_SUBMENU_DISCOVER'), 'index.php?option=com_installer&view=discover', $vName == 'discover' ); JHtmlSidebar::addEntry( JText::_('COM_INSTALLER_SUBMENU_DATABASE'), 'index.php?option=com_installer&view=database', $vName == 'database' ); JHtmlSidebar::addEntry( JText::_('COM_INSTALLER_SUBMENU_WARNINGS'), 'index.php?option=com_installer&view=warnings', $vName == 'warnings' ); JHtmlSidebar::addEntry( JText::_('COM_INSTALLER_SUBMENU_LANGUAGES'), 'index.php?option=com_installer&view=languages', $vName == 'languages' ); JHtmlSidebar::addEntry( JText::_('COM_INSTALLER_SUBMENU_UPDATESITES'), 'index.php?option=com_installer&view=updatesites', $vName == 'updatesites' ); } /** * Get a list of filter options for the extension types. * * @return array An array of stdClass objects. * * @since 3.0 */ public static function getExtensionTypes() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('DISTINCT type') ->from('#__extensions'); $db->setQuery($query); $types = $db->loadColumn(); $options = array(); foreach ($types as $type) { $options[] = JHtml::_('select.option', $type, JText::_('COM_INSTALLER_TYPE_' . strtoupper($type))); } return $options; } /** * Get a list of filter options for the extension types. * * @return array An array of stdClass objects. * * @since 3.0 */ public static function getExtensionGroupes() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('DISTINCT folder') ->from('#__extensions') ->where('folder != ' . $db->quote('')) ->order('folder'); $db->setQuery($query); $folders = $db->loadColumn(); $options = array(); foreach ($folders as $folder) { $options[] = JHtml::_('select.option', $folder, $folder); } return $options; } /** * Gets a list of the actions that can be performed. * * @return JObject * * @since 1.6 * @deprecated 3.2 Use JHelperContent::getActions() instead */ public static function getActions() { // Log usage of deprecated function try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions return JHelperContent::getActions('com_installer'); } /** * Get a list of filter options for the application clients. * * @return array An array of JHtmlOption elements. * * @since 3.5 */ public static function getClientOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '0', JText::_('JSITE')); $options[] = JHtml::_('select.option', '1', JText::_('JADMINISTRATOR')); return $options; } /** * Get a list of filter options for the application statuses. * * @return array An array of JHtmlOption elements. * * @since 3.5 */ public static function getStateOptions() { // Build the filter options. $options = array(); $options[] = JHtml::_('select.option', '0', JText::_('JDISABLED')); $options[] = JHtml::_('select.option', '1', JText::_('JENABLED')); $options[] = JHtml::_('select.option', '2', JText::_('JPROTECTED')); $options[] = JHtml::_('select.option', '3', JText::_('JUNPROTECTED')); return $options; } } PKb��\`�r|ii&components/com_installer/installer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); if (!JFactory::getUser()->authorise('core.manage', 'com_installer')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Installer'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKb��\����(@(@*components/com_installer/models/update.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.updater.update'); use Joomla\Utilities\ArrayHelper; use Joomla\CMS\Installer\InstallerHelper; /** * Installer Update Model * * @since 1.6 */ class InstallerModelUpdate extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'name', 'u.name', 'client_id', 'u.client_id', 'client_translated', 'type', 'u.type', 'type_translated', 'folder', 'u.folder', 'folder_translated', 'extension_id', 'u.extension_id', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'u.name', $direction = 'asc') { $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.client_id', $this->getUserStateFromRequest($this->context . '.filter.client_id', 'filter_client_id', null, 'int')); $this->setState('filter.type', $this->getUserStateFromRequest($this->context . '.filter.type', 'filter_type', '', 'string')); $this->setState('filter.folder', $this->getUserStateFromRequest($this->context . '.filter.folder', 'filter_folder', '', 'string')); $app = JFactory::getApplication(); $this->setState('message', $app->getUserState('com_installer.message')); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); parent::populateState($ordering, $direction); } /** * Method to get the database query * * @return JDatabaseQuery The database query * * @since 1.6 */ protected function getListQuery() { $db = $this->getDbo(); // Grab updates ignoring new installs $query = $db->getQuery(true) ->select('u.*') ->select($db->quoteName('e.manifest_cache')) ->from($db->quoteName('#__updates', 'u')) ->join('LEFT', $db->quoteName('#__extensions', 'e') . ' ON ' . $db->quoteName('e.extension_id') . ' = ' . $db->quoteName('u.extension_id')) ->where($db->quoteName('u.extension_id') . ' != ' . $db->quote(0)); // Process select filters. $clientId = $this->getState('filter.client_id'); $type = $this->getState('filter.type'); $folder = $this->getState('filter.folder'); $extensionId = $this->getState('filter.extension_id'); if ($type) { $query->where($db->quoteName('u.type') . ' = ' . $db->quote($type)); } if ($clientId != '') { $query->where($db->quoteName('u.client_id') . ' = ' . (int) $clientId); } if ($folder != '' && in_array($type, array('plugin', 'library', ''))) { $query->where($db->quoteName('u.folder') . ' = ' . $db->quote($folder == '*' ? '' : $folder)); } if ($extensionId) { $query->where($db->quoteName('u.extension_id') . ' = ' . $db->quote((int) $extensionId)); } else { $query->where($db->quoteName('u.extension_id') . ' != ' . $db->quote(0)) ->where($db->quoteName('u.extension_id') . ' != ' . $db->quote(700)); } // Process search filter. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'eid:') !== false) { $query->where($db->quoteName('u.extension_id') . ' = ' . (int) substr($search, 4)); } else { if (stripos($search, 'uid:') !== false) { $query->where($db->quoteName('u.update_site_id') . ' = ' . (int) substr($search, 4)); } elseif (stripos($search, 'id:') !== false) { $query->where($db->quoteName('u.update_id') . ' = ' . (int) substr($search, 3)); } else { $query->where($db->quoteName('u.name') . ' LIKE ' . $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true)) . '%')); } } } return $query; } /** * Translate a list of objects * * @param array $items The array of objects * * @return array The array of translated objects * * @since 3.5 */ protected function translate(&$items) { foreach ($items as &$item) { $item->client_translated = $item->client_id ? JText::_('JADMINISTRATOR') : JText::_('JSITE'); $manifest = json_decode($item->manifest_cache); $item->current_version = isset($manifest->version) ? $manifest->version : JText::_('JLIB_UNKNOWN'); $item->type_translated = JText::_('COM_INSTALLER_TYPE_' . strtoupper($item->type)); $item->folder_translated = $item->folder ?: JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); $item->install_type = $item->extension_id ? JText::_('COM_INSTALLER_MSG_UPDATE_UPDATE') : JText::_('COM_INSTALLER_NEW_INSTALL'); } return $items; } /** * Returns an object list * * @param string $query The query * @param int $limitstart Offset * @param int $limit The number of records * * @return array * * @since 3.5 */ protected function _getList($query, $limitstart = 0, $limit = 0) { $db = $this->getDbo(); $listOrder = $this->getState('list.ordering', 'u.name'); $listDirn = $this->getState('list.direction', 'asc'); // Process ordering. if (in_array($listOrder, array('client_translated', 'folder_translated', 'type_translated'))) { $db->setQuery($query); $result = $db->loadObjectList(); $this->translate($result); $result = ArrayHelper::sortObjects($result, $listOrder, strtolower($listDirn) === 'desc' ? -1 : 1, true, true); $total = count($result); if ($total < $limitstart) { $limitstart = 0; $this->setState('list.start', 0); } return array_slice($result, $limitstart, $limit ?: null); } else { $query->order($db->quoteName($listOrder) . ' ' . $db->escape($listDirn)); $result = parent::_getList($query, $limitstart, $limit); $this->translate($result); return $result; } } /** * Get the count of disabled update sites * * @return integer * * @since 3.4 */ public function getDisabledUpdateSites() { $db = $this->getDbo(); $query = $db->getQuery(true) ->select('COUNT(*)') ->from($db->quoteName('#__update_sites')) ->where($db->quoteName('enabled') . ' = 0'); $db->setQuery($query); return $db->loadResult(); } /** * Finds updates for an extension. * * @param int $eid Extension identifier to look for * @param int $cache_timeout Cache timout * @param int $minimum_stability Minimum stability for updates {@see JUpdater} (0=dev, 1=alpha, 2=beta, 3=rc, 4=stable) * * @return boolean Result * * @since 1.6 */ public function findUpdates($eid = 0, $cache_timeout = 0, $minimum_stability = JUpdater::STABILITY_STABLE) { JUpdater::getInstance()->findUpdates($eid, $cache_timeout, $minimum_stability); return true; } /** * Removes all of the updates from the table. * * @return boolean result of operation * * @since 1.6 */ public function purge() { $db = $this->getDbo(); // Note: TRUNCATE is a DDL operation // This may or may not mean depending on your database $db->setQuery('TRUNCATE TABLE #__updates'); try { $db->execute(); } catch (JDatabaseExceptionExecuting $e) { $this->_message = JText::_('JLIB_INSTALLER_FAILED_TO_PURGE_UPDATES'); return false; } // Reset the last update check timestamp $query = $db->getQuery(true) ->update($db->quoteName('#__update_sites')) ->set($db->quoteName('last_check_timestamp') . ' = ' . $db->quote(0)); $db->setQuery($query); $db->execute(); $this->_message = JText::_('JLIB_INSTALLER_PURGED_UPDATES'); return true; } /** * Enables any disabled rows in #__update_sites table * * @return boolean result of operation * * @since 1.6 */ public function enableSites() { $db = $this->getDbo(); $query = $db->getQuery(true) ->update($db->quoteName('#__update_sites')) ->set($db->quoteName('enabled') . ' = 1') ->where($db->quoteName('enabled') . ' = 0'); $db->setQuery($query); try { $db->execute(); } catch (JDatabaseExceptionExecuting $e) { $this->_message .= JText::_('COM_INSTALLER_FAILED_TO_ENABLE_UPDATES'); return false; } if ($rows = $db->getAffectedRows()) { $this->_message .= JText::plural('COM_INSTALLER_ENABLED_UPDATES', $rows); } return true; } /** * Update function. * * Sets the "result" state with the result of the operation. * * @param array $uids Array[int] List of updates to apply * @param int $minimum_stability The minimum allowed stability for installed updates {@see JUpdater} * * @return void * * @since 1.6 */ public function update($uids, $minimum_stability = JUpdater::STABILITY_STABLE) { $result = true; foreach ($uids as $uid) { $update = new JUpdate; $instance = JTable::getInstance('update'); $instance->load($uid); $update->loadFromXml($instance->detailsurl, $minimum_stability); $update->set('extra_query', $instance->extra_query); $this->preparePreUpdate($update, $instance); // Install sets state and enqueues messages $res = $this->install($update); if ($res) { $instance->delete($uid); } $result = $res & $result; } // Clear the cached extension data and menu cache $this->cleanCache('_system', 0); $this->cleanCache('_system', 1); $this->cleanCache('com_modules', 0); $this->cleanCache('com_modules', 1); $this->cleanCache('com_plugins', 0); $this->cleanCache('com_plugins', 1); $this->cleanCache('mod_menu', 0); $this->cleanCache('mod_menu', 1); // Set the final state $this->setState('result', $result); } /** * Handles the actual update installation. * * @param JUpdate $update An update definition * * @return boolean Result of install * * @since 1.6 */ private function install($update) { $app = JFactory::getApplication(); if (!isset($update->get('downloadurl')->_data)) { JError::raiseWarning('', JText::_('COM_INSTALLER_INVALID_EXTENSION_UPDATE')); return false; } $url = trim($update->downloadurl->_data); $sources = $update->get('downloadSources', array()); if ($extra_query = $update->get('extra_query')) { $url .= (strpos($url, '?') === false) ? '?' : '&'; $url .= $extra_query; } $mirror = 0; while (!($p_file = InstallerHelper::downloadPackage($url)) && isset($sources[$mirror])) { $name = $sources[$mirror]; $url = trim($name->url); if ($extra_query) { $url .= (strpos($url, '?') === false) ? '?' : '&'; $url .= $extra_query; } $mirror++; } // Was the package downloaded? if (!$p_file) { JError::raiseWarning('', JText::sprintf('COM_INSTALLER_PACKAGE_DOWNLOAD_FAILED', $url)); return false; } $config = JFactory::getConfig(); $tmp_dest = $config->get('tmp_path'); // Unpack the downloaded package file $package = InstallerHelper::unpack($tmp_dest . '/' . $p_file); // Get an installer instance $installer = JInstaller::getInstance(); $update->set('type', $package['type']); // Check the package $check = InstallerHelper::isChecksumValid($package['packagefile'], $update); // The validation was not successful. Just a warning for now. // TODO: In Joomla 4 this will abort the installation if ($check === InstallerHelper::HASH_NOT_VALIDATED) { $app->enqueueMessage(JText::_('COM_INSTALLER_INSTALL_CHECKSUM_WRONG'), 'error'); } // Install the package if (!$installer->update($package['dir'])) { // There was an error updating the package $app->enqueueMessage( JText::sprintf('COM_INSTALLER_MSG_UPDATE_ERROR', JText::_('COM_INSTALLER_TYPE_TYPE_' . strtoupper($package['type'])) ), 'error' ); $result = false; } else { // Package updated successfully $app->enqueueMessage( JText::sprintf('COM_INSTALLER_MSG_UPDATE_SUCCESS', JText::_('COM_INSTALLER_TYPE_TYPE_' . strtoupper($package['type'])) ) ); $result = true; } // Quick change $this->type = $package['type']; // TODO: Reconfigure this code when you have more battery life left $this->setState('name', $installer->get('name')); $this->setState('result', $result); $app->setUserState('com_installer.message', $installer->message); $app->setUserState('com_installer.extension_message', $installer->get('extension_message')); // Cleanup the install files if (!is_file($package['packagefile'])) { $config = JFactory::getConfig(); $package['packagefile'] = $config->get('tmp_path') . '/' . $package['packagefile']; } InstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']); return $result; } /** * Method to get the row form. * * @param array $data Data for the form. * @param boolean $loadData True if the form is to load its own data (default case), false if not. * * @return mixed A JForm object on success, false on failure * * @since 2.5.2 */ public function getForm($data = array(), $loadData = true) { // Get the form. JForm::addFormPath(JPATH_COMPONENT . '/models/forms'); JForm::addFieldPath(JPATH_COMPONENT . '/models/fields'); $form = JForm::getInstance('com_installer.update', 'update', array('load_data' => $loadData)); // Check for an error. if ($form == false) { $this->setError($form->getMessage()); return false; } // Check the session for previously entered form data. $data = $this->loadFormData(); // Bind the form data if present. if (!empty($data)) { $form->bind($data); } return $form; } /** * Method to get the data that should be injected in the form. * * @return mixed The data for the form. * * @since 2.5.2 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState($this->context, array()); return $data; } /** * Method to add parameters to the update * * @param JUpdate $update An update definition * @param JTableUpdate $table The update instance from the database * * @return void * * @since 3.7.0 */ protected function preparePreUpdate($update, $table) { jimport('joomla.filesystem.file'); switch ($table->type) { // Components could have a helper which adds additional data case 'component': $ename = str_replace('com_', '', $table->element); $fname = $ename . '.php'; $cname = ucfirst($ename) . 'Helper'; $path = JPATH_ADMINISTRATOR . '/components/' . $table->element . '/helpers/' . $fname; if (JFile::exists($path)) { require_once $path; if (class_exists($cname) && is_callable(array($cname, 'prepareUpdate'))) { call_user_func_array(array($cname, 'prepareUpdate'), array(&$update, &$table)); } } break; // Modules could have a helper which adds additional data case 'module': $cname = str_replace('_', '', $table->element) . 'Helper'; $path = ($table->client_id ? JPATH_ADMINISTRATOR : JPATH_SITE) . '/modules/' . $table->element . '/helper.php'; if (JFile::exists($path)) { require_once $path; if (class_exists($cname) && is_callable(array($cname, 'prepareUpdate'))) { call_user_func_array(array($cname, 'prepareUpdate'), array(&$update, &$table)); } } break; // If we have a plugin, we can use the plugin trigger "onInstallerBeforePackageDownload" // But we should make sure, that our plugin is loaded, so we don't need a second "installer" plugin case 'plugin': $cname = str_replace('plg_', '', $table->element); JPluginHelper::importPlugin($table->folder, $cname); break; } } } PKb��\z�Iع�-components/com_installer/models/languages.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.updater.update'); use Joomla\String\StringHelper; /** * Languages Installer Model * * @since 2.5.7 */ class InstallerModelLanguages extends JModelList { /** * Language count * * @var integer * @since 3.7.0 */ private $languageCount; /** * Constructor override, defines a whitelist of column filters. * * @param array $config An optional associative array of configuration settings. * * @since 2.5.7 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'name', 'element', ); } parent::__construct($config); } /** * Get the Update Site * * @since 3.7.0 * * @return string The URL of the Accredited Languagepack Updatesite XML */ private function getUpdateSite() { $db = $this->getDbo(); $query = $db->getQuery(true) ->select($db->qn('us.location')) ->from($db->qn('#__extensions', 'e')) ->where($db->qn('e.type') . ' = ' . $db->q('package')) ->where($db->qn('e.element') . ' = ' . $db->q('pkg_en-GB')) ->where($db->qn('e.client_id') . ' = 0') ->join('LEFT', $db->qn('#__update_sites_extensions', 'use') . ' ON ' . $db->qn('use.extension_id') . ' = ' . $db->qn('e.extension_id')) ->join('LEFT', $db->qn('#__update_sites', 'us') . ' ON ' . $db->qn('us.update_site_id') . ' = ' . $db->qn('use.update_site_id')); return $db->setQuery($query)->loadResult(); } /** * Method to get an array of data items. * * @return mixed An array of data items on success, false on failure. * * @since 3.7.0 */ public function getItems() { // Get a storage key. $store = $this->getStoreId(); // Try to load the data from internal storage. if (isset($this->cache[$store])) { return $this->cache[$store]; } try { // Load the list items and add the items to the internal cache. $this->cache[$store] = $this->getLanguages(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } return $this->cache[$store]; } /** * Gets an array of objects from the updatesite. * * @return object[] An array of results. * * @since 3.0 * @throws RuntimeException */ protected function getLanguages() { $updateSite = $this->getUpdateSite(); $http = new JHttp; try { $response = $http->get($updateSite); } catch (RuntimeException $e) { $response = null; } if ($response === null || $response->code !== 200) { JFactory::getApplication()->enqueueMessage(JText::_('COM_INSTALLER_MSG_WARNING_NO_LANGUAGES_UPDATESERVER'), 'warning'); return; } $updateSiteXML = simplexml_load_string($response->body); $languages = array(); $search = strtolower($this->getState('filter.search')); foreach ($updateSiteXML->extension as $extension) { $language = new stdClass; foreach ($extension->attributes() as $key => $value) { $language->$key = (string) $value; } if ($search) { if (strpos(strtolower($language->name), $search) === false && strpos(strtolower($language->element), $search) === false) { continue; } } $languages[$language->name] = $language; } // Workaround for php 5.3 $that = $this; // Sort the array by value of subarray usort( $languages, function($a, $b) use ($that) { $ordering = $that->getState('list.ordering'); if (strtolower($that->getState('list.direction')) === 'asc') { return StringHelper::strcmp($a->$ordering, $b->$ordering); } else { return StringHelper::strcmp($b->$ordering, $a->$ordering); } } ); // Count the non-paginated list $this->languageCount = count($languages); $limit = ($this->getState('list.limit') > 0) ? $this->getState('list.limit') : $this->languageCount; return array_slice($languages, $this->getStart(), $limit); } /** * Returns a record count for the updatesite. * * @param JDatabaseQuery|string $query The query. * * @return integer Number of rows for query. * * @since 3.7.0 */ protected function _getListCount($query) { return $this->languageCount; } /** * Method to get a store id based on model configuration state. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 2.5.7 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('filter.search'); return parent::getStoreId($id); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering list order * @param string $direction direction in the list * * @return void * * @since 2.5.7 */ protected function populateState($ordering = 'name', $direction = 'asc') { $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('extension_message', JFactory::getApplication()->getUserState('com_installer.extension_message')); parent::populateState($ordering, $direction); } /** * Method to compare two languages in order to sort them. * * @param object $lang1 The first language. * @param object $lang2 The second language. * * @return integer * * @since 3.7.0 */ protected function compareLanguages($lang1, $lang2) { return strcmp($lang1->name, $lang2->name); } } PKb��\w!�uu,components/com_installer/models/discover.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; JLoader::register('InstallerModel', __DIR__ . '/extension.php'); /** * Installer Discover Model * * @since 1.6 */ class InstallerModelDiscover extends InstallerModel { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 3.5 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'name', 'client_id', 'client', 'client_translated', 'type', 'type_translated', 'folder', 'folder_translated', 'extension_id', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 3.1 */ protected function populateState($ordering = 'name', $direction = 'asc') { $app = JFactory::getApplication(); // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.client_id', $this->getUserStateFromRequest($this->context . '.filter.client_id', 'filter_client_id', null, 'int')); $this->setState('filter.type', $this->getUserStateFromRequest($this->context . '.filter.type', 'filter_type', '', 'string')); $this->setState('filter.folder', $this->getUserStateFromRequest($this->context . '.filter.folder', 'filter_folder', '', 'string')); $this->setState('message', $app->getUserState('com_installer.message')); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); parent::populateState($ordering, $direction); } /** * Method to get the database query. * * @return JDatabaseQuery the database query * * @since 3.1 */ protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true) ->select('*') ->from($db->quoteName('#__extensions')) ->where($db->quoteName('state') . ' = -1'); // Process select filters. $type = $this->getState('filter.type'); $clientId = $this->getState('filter.client_id'); $folder = $this->getState('filter.folder'); if ($type) { $query->where($db->quoteName('type') . ' = ' . $db->quote($type)); } if ($clientId != '') { $query->where($db->quoteName('client_id') . ' = ' . (int) $clientId); } if ($folder != '' && in_array($type, array('plugin', 'library', ''))) { $query->where($db->quoteName('folder') . ' = ' . $db->quote($folder == '*' ? '' : $folder)); } // Process search filter. $search = $this->getState('filter.search'); if (!empty($search)) { if (stripos($search, 'id:') === 0) { $query->where($db->quoteName('extension_id') . ' = ' . (int) substr($search, 3)); } } // Note: The search for name, ordering and pagination are processed by the parent InstallerModel class (in extension.php). return $query; } /** * Discover extensions. * * Finds uninstalled extensions * * @return void * * @since 1.6 */ public function discover() { // Purge the list of discovered extensions and fetch them again. $this->purge(); $results = JInstaller::getInstance()->discover(); // Get all templates, including discovered ones $db = $this->getDbo(); $query = $db->getQuery(true) ->select($db->quoteName(array('extension_id', 'element', 'folder', 'client_id', 'type'))) ->from($db->quoteName('#__extensions')); $db->setQuery($query); $installedtmp = $db->loadObjectList(); $extensions = array(); foreach ($installedtmp as $install) { $key = implode(':', array($install->type, $install->element, $install->folder, $install->client_id)); $extensions[$key] = $install; } foreach ($results as $result) { // Check if we have a match on the element $key = implode(':', array($result->type, $result->element, $result->folder, $result->client_id)); if (!array_key_exists($key, $extensions)) { // Put it into the table $result->check(); $result->store(); } } } /** * Installs a discovered extension. * * @return void * * @since 1.6 */ public function discover_install() { $app = JFactory::getApplication(); $input = $app->input; $eid = $input->get('cid', 0, 'array'); if (is_array($eid) || $eid) { if (!is_array($eid)) { $eid = array($eid); } $eid = ArrayHelper::toInteger($eid); $failed = false; foreach ($eid as $id) { $installer = new JInstaller; $result = $installer->discover_install($id); if (!$result) { $failed = true; $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_DISCOVER_INSTALLFAILED') . ': ' . $id); } } // TODO - We are only receiving the message for the last JInstaller instance $this->setState('action', 'remove'); $this->setState('name', $installer->get('name')); $app->setUserState('com_installer.message', $installer->message); $app->setUserState('com_installer.extension_message', $installer->get('extension_message')); if (!$failed) { $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_DISCOVER_INSTALLSUCCESSFUL')); } } else { $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_DISCOVER_NOEXTENSIONSELECTED')); } } /** * Cleans out the list of discovered extensions. * * @return boolean True on success * * @since 1.6 */ public function purge() { $db = $this->getDbo(); $query = $db->getQuery(true) ->delete($db->quoteName('#__extensions')) ->where($db->quoteName('state') . ' = -1'); $db->setQuery($query); try { $db->execute(); } catch (JDatabaseExceptionExecuting $e) { $this->_message = JText::_('COM_INSTALLER_MSG_DISCOVER_FAILEDTOPURGEEXTENSIONS'); return false; } $this->_message = JText::_('COM_INSTALLER_MSG_DISCOVER_PURGEDDISCOVEREDEXTENSIONS'); return true; } } PKb��\<�tO#O#*components/com_installer/models/manage.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('InstallerModel', __DIR__ . '/extension.php'); /** * Installer Manage Model * * @since 1.5 */ class InstallerModelManage extends InstallerModel { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'status', 'name', 'client_id', 'client', 'client_translated', 'type', 'type_translated', 'folder', 'folder_translated', 'package_id', 'extension_id', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'name', $direction = 'asc') { $app = JFactory::getApplication(); // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.client_id', $this->getUserStateFromRequest($this->context . '.filter.client_id', 'filter_client_id', null, 'int')); $this->setState('filter.status', $this->getUserStateFromRequest($this->context . '.filter.status', 'filter_status', '', 'string')); $this->setState('filter.type', $this->getUserStateFromRequest($this->context . '.filter.type', 'filter_type', '', 'string')); $this->setState('filter.folder', $this->getUserStateFromRequest($this->context . '.filter.folder', 'filter_folder', '', 'string')); $this->setState('message', $app->getUserState('com_installer.message')); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); parent::populateState($ordering, $direction); } /** * Enable/Disable an extension. * * @param array $eid Extension ids to un/publish * @param int $value Publish value * * @return boolean True on success * * @since 1.5 */ public function publish(&$eid = array(), $value = 1) { $user = JFactory::getUser(); if (!$user->authorise('core.edit.state', 'com_installer')) { JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); return false; } $result = true; /* * Ensure eid is an array of extension ids * TODO: If it isn't an array do we want to set an error and fail? */ if (!is_array($eid)) { $eid = array($eid); } // Get a table object for the extension type $table = JTable::getInstance('Extension'); JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_templates/tables'); // Enable the extension in the table and store it in the database foreach ($eid as $i => $id) { $table->load($id); if ($table->type == 'template') { $style = JTable::getInstance('Style', 'TemplatesTable'); if ($style->load(array('template' => $table->element, 'client_id' => $table->client_id, 'home' => 1))) { JError::raiseNotice(403, JText::_('COM_INSTALLER_ERROR_DISABLE_DEFAULT_TEMPLATE_NOT_PERMITTED')); unset($eid[$i]); continue; } } if ($table->protected == 1) { $result = false; JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } else { $table->enabled = $value; } $context = $this->option . '.' . $this->name; JPluginHelper::importPlugin('extension'); JEventDispatcher::getInstance()->trigger('onExtensionChangeState', array($context, $eid, $value)); if (!$table->store()) { $this->setError($table->getError()); $result = false; } } // Clear the cached extension data and menu cache $this->cleanCache('_system', 0); $this->cleanCache('_system', 1); $this->cleanCache('com_modules', 0); $this->cleanCache('com_modules', 1); $this->cleanCache('mod_menu', 0); $this->cleanCache('mod_menu', 1); return $result; } /** * Refreshes the cached manifest information for an extension. * * @param int $eid extension identifier (key in #__extensions) * * @return boolean result of refresh * * @since 1.6 */ public function refresh($eid) { if (!is_array($eid)) { $eid = array($eid => 0); } // Get an installer object for the extension type $installer = JInstaller::getInstance(); $result = 0; // Uninstall the chosen extensions foreach ($eid as $id) { $result |= $installer->refreshManifestCache($id); } return $result; } /** * Remove (uninstall) an extension * * @param array $eid An array of identifiers * * @return boolean True on success * * @since 1.5 */ public function remove($eid = array()) { $user = JFactory::getUser(); if (!$user->authorise('core.delete', 'com_installer')) { JError::raiseWarning(403, JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); return false; } /* * Ensure eid is an array of extension ids in the form id => client_id * TODO: If it isn't an array do we want to set an error and fail? */ if (!is_array($eid)) { $eid = array($eid => 0); } // Get an installer object for the extension type $installer = JInstaller::getInstance(); $row = JTable::getInstance('extension'); // Uninstall the chosen extensions $msgs = array(); $result = false; foreach ($eid as $id) { $id = trim($id); $row->load($id); $result = false; $langstring = 'COM_INSTALLER_TYPE_TYPE_' . strtoupper($row->type); $rowtype = JText::_($langstring); if (strpos($rowtype, $langstring) !== false) { $rowtype = $row->type; } if ($row->type) { $result = $installer->uninstall($row->type, $id); // Build an array of extensions that failed to uninstall if ($result === false) { // There was an error in uninstalling the package $msgs[] = JText::sprintf('COM_INSTALLER_UNINSTALL_ERROR', $rowtype); continue; } // Package uninstalled successfully $msgs[] = JText::sprintf('COM_INSTALLER_UNINSTALL_SUCCESS', $rowtype); $result = true; continue; } // There was an error in uninstalling the package $msgs[] = JText::sprintf('COM_INSTALLER_UNINSTALL_ERROR', $rowtype); } $msg = implode('<br />', $msgs); $app = JFactory::getApplication(); $app->enqueueMessage($msg); $this->setState('action', 'remove'); $this->setState('name', $installer->get('name')); $app->setUserState('com_installer.message', $installer->message); $app->setUserState('com_installer.extension_message', $installer->get('extension_message')); // Clear the cached extension data and menu cache $this->cleanCache('_system', 0); $this->cleanCache('_system', 1); $this->cleanCache('com_modules', 0); $this->cleanCache('com_modules', 1); $this->cleanCache('com_plugins', 0); $this->cleanCache('com_plugins', 1); $this->cleanCache('mod_menu', 0); $this->cleanCache('mod_menu', 1); return $result; } /** * Method to get the database query * * @return JDatabaseQuery The database query * * @since 1.6 */ protected function getListQuery() { $query = $this->getDbo()->getQuery(true) ->select('*') ->select('2*protected+(1-protected)*enabled AS status') ->from('#__extensions') ->where('state = 0'); // Process select filters. $status = $this->getState('filter.status'); $type = $this->getState('filter.type'); $clientId = $this->getState('filter.client_id'); $folder = $this->getState('filter.folder'); if ($status != '') { if ($status == '2') { $query->where('protected = 1'); } elseif ($status == '3') { $query->where('protected = 0'); } else { $query->where('protected = 0') ->where('enabled = ' . (int) $status); } } if ($type) { $query->where('type = ' . $this->_db->quote($type)); } if ($clientId != '') { $query->where('client_id = ' . (int) $clientId); } if ($folder != '') { $query->where('folder = ' . $this->_db->quote($folder == '*' ? '' : $folder)); } // Process search filter (extension id). $search = $this->getState('filter.search'); if (!empty($search) && stripos($search, 'id:') === 0) { $query->where('extension_id = ' . (int) substr($search, 3)); } // Note: The search for name, ordering and pagination are processed by the parent InstallerModel class (in extension.php). return $query; } } PKb��\�iO>(+(++components/com_installer/models/install.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Extension Manager Install Model * * @since 1.5 */ class InstallerModelInstall extends JModelLegacy { /** * @var object JTable object */ protected $_table = null; /** * @var object JTable object */ protected $_url = null; /** * Model context string. * * @var string */ protected $_context = 'com_installer.install'; /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @return void * * @since 1.6 */ protected function populateState() { $app = JFactory::getApplication('administrator'); $this->setState('message', $app->getUserState('com_installer.message')); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); parent::populateState(); } /** * Install an extension from either folder, URL or upload. * * @return boolean result of install. * * @since 1.5 */ public function install() { $this->setState('action', 'install'); // Set FTP credentials, if given. JClientHelper::setCredentialsFromRequest('ftp'); $app = JFactory::getApplication(); // Load installer plugins for assistance if required: JPluginHelper::importPlugin('installer'); $dispatcher = JEventDispatcher::getInstance(); $package = null; // This event allows an input pre-treatment, a custom pre-packing or custom installation. // (e.g. from a JSON description). $results = $dispatcher->trigger('onInstallerBeforeInstallation', array($this, &$package)); if (in_array(true, $results, true)) { return true; } if (in_array(false, $results, true)) { return false; } $installType = $app->input->getWord('installtype'); if ($package === null) { switch ($installType) { case 'folder': // Remember the 'Install from Directory' path. $app->getUserStateFromRequest($this->_context . '.install_directory', 'install_directory'); $package = $this->_getPackageFromFolder(); break; case 'upload': $package = $this->_getPackageFromUpload(); break; case 'url': $package = $this->_getPackageFromUrl(); break; default: $app->setUserState('com_installer.message', JText::_('COM_INSTALLER_NO_INSTALL_TYPE_FOUND')); return false; break; } } // This event allows a custom installation of the package or a customization of the package: $results = $dispatcher->trigger('onInstallerBeforeInstaller', array($this, &$package)); if (in_array(true, $results, true)) { return true; } if (in_array(false, $results, true)) { if (in_array($installType, array('upload', 'url'))) { JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']); } return false; } // Get an installer instance. $installer = JInstaller::getInstance(); /* * Check for a Joomla core package. * To do this we need to set the source path to find the manifest (the same first step as JInstaller::install()) * * This must be done before the unpacked check because JInstallerHelper::detectType() returns a boolean false since the manifest * can't be found in the expected location. */ if (is_array($package) && isset($package['dir']) && is_dir($package['dir'])) { $installer->setPath('source', $package['dir']); if (!$installer->findManifest()) { // If a manifest isn't found at the source, this may be a Joomla package; check the package directory for the Joomla manifest if (file_exists($package['dir'] . '/administrator/manifests/files/joomla.xml')) { // We have a Joomla package if (in_array($installType, array('upload', 'url'))) { JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']); } $app->enqueueMessage( JText::sprintf('COM_INSTALLER_UNABLE_TO_INSTALL_JOOMLA_PACKAGE', JRoute::_('index.php?option=com_joomlaupdate')), 'warning' ); return false; } } } // Was the package unpacked? if (!$package || !$package['type']) { if (in_array($installType, array('upload', 'url'))) { JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']); } $app->enqueueMessage(JText::_('COM_INSTALLER_UNABLE_TO_FIND_INSTALL_PACKAGE'), 'error'); return false; } // Install the package. if (!$installer->install($package['dir'])) { // There was an error installing the package. $msg = JText::sprintf('COM_INSTALLER_INSTALL_ERROR', JText::_('COM_INSTALLER_TYPE_TYPE_' . strtoupper($package['type']))); $result = false; $msgType = 'error'; } else { // Package installed successfully. $msg = JText::sprintf('COM_INSTALLER_INSTALL_SUCCESS', JText::_('COM_INSTALLER_TYPE_TYPE_' . strtoupper($package['type']))); $result = true; $msgType = 'message'; } // This event allows a custom a post-flight: $dispatcher->trigger('onInstallerAfterInstaller', array($this, &$package, $installer, &$result, &$msg)); // Set some model state values. $app = JFactory::getApplication(); $app->enqueueMessage($msg, $msgType); $this->setState('name', $installer->get('name')); $this->setState('result', $result); $app->setUserState('com_installer.message', $installer->message); $app->setUserState('com_installer.extension_message', $installer->get('extension_message')); $app->setUserState('com_installer.redirect_url', $installer->get('redirect_url')); // Cleanup the install files. if (!is_file($package['packagefile'])) { $config = JFactory::getConfig(); $package['packagefile'] = $config->get('tmp_path') . '/' . $package['packagefile']; } JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']); // Clear the cached extension data and menu cache $this->cleanCache('_system', 0); $this->cleanCache('_system', 1); $this->cleanCache('com_modules', 0); $this->cleanCache('com_modules', 1); $this->cleanCache('com_plugins', 0); $this->cleanCache('com_plugins', 1); $this->cleanCache('mod_menu', 0); $this->cleanCache('mod_menu', 1); return $result; } /** * Works out an installation package from a HTTP upload. * * @return package definition or false on failure. */ protected function _getPackageFromUpload() { // Get the uploaded file information. $input = JFactory::getApplication()->input; // Do not change the filter type 'raw'. We need this to let files containing PHP code to upload. See JInputFiles::get. $userfile = $input->files->get('install_package', null, 'raw'); // Make sure that file uploads are enabled in php. if (!(bool) ini_get('file_uploads')) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLFILE')); return false; } // Make sure that zlib is loaded so that the package can be unpacked. if (!extension_loaded('zlib')) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLZLIB')); return false; } // If there is no uploaded file, we have a problem... if (!is_array($userfile)) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_NO_FILE_SELECTED')); return false; } // Is the PHP tmp directory missing? if ($userfile['error'] && ($userfile['error'] == UPLOAD_ERR_NO_TMP_DIR)) { JError::raiseWarning( '', JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR') . '<br />' . JText::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSET') ); return false; } // Is the max upload size too small in php.ini? if ($userfile['error'] && ($userfile['error'] == UPLOAD_ERR_INI_SIZE)) { JError::raiseWarning( '', JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR') . '<br />' . JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZE') ); return false; } // Check if there was a different problem uploading the file. if ($userfile['error'] || $userfile['size'] < 1) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR')); return false; } // Build the appropriate paths. $config = JFactory::getConfig(); $tmp_dest = $config->get('tmp_path') . '/' . $userfile['name']; $tmp_src = $userfile['tmp_name']; // Move uploaded file. jimport('joomla.filesystem.file'); JFile::upload($tmp_src, $tmp_dest, false, true); // Unpack the downloaded package file. $package = JInstallerHelper::unpack($tmp_dest, true); return $package; } /** * Install an extension from a directory * * @return array Package details or false on failure * * @since 1.5 */ protected function _getPackageFromFolder() { $input = JFactory::getApplication()->input; // Get the path to the package to install. $p_dir = $input->getString('install_directory'); $p_dir = JPath::clean($p_dir); // Did you give us a valid directory? if (!is_dir($p_dir)) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_PLEASE_ENTER_A_PACKAGE_DIRECTORY')); return false; } // Detect the package type $type = JInstallerHelper::detectType($p_dir); // Did you give us a valid package? if (!$type) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_PATH_DOES_NOT_HAVE_A_VALID_PACKAGE')); } $package['packagefile'] = null; $package['extractdir'] = null; $package['dir'] = $p_dir; $package['type'] = $type; return $package; } /** * Install an extension from a URL. * * @return Package details or false on failure. * * @since 1.5 */ protected function _getPackageFromUrl() { $input = JFactory::getApplication()->input; // Get the URL of the package to install. $url = $input->getString('install_url'); // Did you give us a URL? if (!$url) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_ENTER_A_URL')); return false; } // Handle updater XML file case: if (preg_match('/\.xml\s*$/', $url)) { jimport('joomla.updater.update'); $update = new JUpdate; $update->loadFromXml($url); $package_url = trim($update->get('downloadurl', false)->_data); if ($package_url) { $url = $package_url; } unset($update); } // Download the package at the URL given. $p_file = JInstallerHelper::downloadPackage($url); // Was the package downloaded? if (!$p_file) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_INVALID_URL')); return false; } $config = JFactory::getConfig(); $tmp_dest = $config->get('tmp_path'); // Unpack the downloaded package file. $package = JInstallerHelper::unpack($tmp_dest . '/' . $p_file, true); return $package; } } PKb��\`B�K��-components/com_installer/models/extension.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Extension Manager Abstract Extension Model. * * @since 1.5 */ class InstallerModel extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'name', 'client_id', 'client', 'client_translated', 'enabled', 'type', 'type_translated', 'folder', 'folder_translated', 'extension_id', ); } parent::__construct($config); } /** * Returns an object list * * @param string $query The query * @param int $limitstart Offset * @param int $limit The number of records * * @return array */ protected function _getList($query, $limitstart = 0, $limit = 0) { $listOrder = $this->getState('list.ordering', 'name'); $listDirn = $this->getState('list.direction', 'asc'); // Replace slashes so preg_match will work $search = $this->getState('filter.search'); $search = str_replace('/', ' ', $search); $db = $this->getDbo(); // Define which fields have to be processed in a custom way because of translation. $customOrderFields = array('name', 'client_translated', 'type_translated', 'folder_translated'); // Process searching, ordering and pagination for fields that need to be translated. if (in_array($listOrder, $customOrderFields) || (!empty($search) && stripos($search, 'id:') !== 0)) { // Get results from database and translate them. $db->setQuery($query); $result = $db->loadObjectList(); $this->translate($result); // Process searching. if (!empty($search) && stripos($search, 'id:') !== 0) { $escapedSearchString = $this->refineSearchStringToRegex($search, '/'); // By default search only the extension name field. $searchFields = array('name'); // If in update sites view search also in the update site name field. if ($this instanceof InstallerModelUpdatesites) { $searchFields[] = 'update_site_name'; } foreach ($result as $i => $item) { // Check if search string exists in any of the fields to be searched. $found = 0; foreach ($searchFields as $key => $field) { if (!$found && preg_match('/' . $escapedSearchString . '/i', $item->{$field})) { $found = 1; } } // If search string was not found in any of the fields searched remove it from results array. if (!$found) { unset($result[$i]); } } } // Process ordering. // Sort array object by selected ordering and selected direction. Sort is case insensative and using locale sorting. $result = ArrayHelper::sortObjects($result, $listOrder, strtolower($listDirn) == 'desc' ? -1 : 1, false, true); // Process pagination. $total = count($result); $this->cache[$this->getStoreId('getTotal')] = $total; if ($total <= $limitstart) { $limitstart = 0; $this->setState('list.limitstart', 0); } return array_slice($result, $limitstart, $limit ?: null); } // Process searching, ordering and pagination for regular database fields. $query->order($db->quoteName($listOrder) . ' ' . $db->escape($listDirn)); $result = parent::_getList($query, $limitstart, $limit); $this->translate($result); return $result; } /** * Translate a list of objects * * @param array $items The array of objects * * @return array The array of translated objects */ protected function translate(&$items) { $lang = JFactory::getLanguage(); foreach ($items as &$item) { if (strlen($item->manifest_cache) && $data = json_decode($item->manifest_cache)) { foreach ($data as $key => $value) { if ($key == 'type') { // Ignore the type field continue; } $item->$key = $value; } } $item->author_info = @$item->authorEmail . '<br />' . @$item->authorUrl; $item->client = $item->client_id ? JText::_('JADMINISTRATOR') : JText::_('JSITE'); $item->client_translated = $item->client; $item->type_translated = JText::_('COM_INSTALLER_TYPE_' . strtoupper($item->type)); $item->folder_translated = @$item->folder ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); $path = $item->client_id ? JPATH_ADMINISTRATOR : JPATH_SITE; switch ($item->type) { case 'component': $extension = $item->element; $source = JPATH_ADMINISTRATOR . '/components/' . $extension; $lang->load("$extension.sys", JPATH_ADMINISTRATOR, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); break; case 'file': $extension = 'files_' . $item->element; $lang->load("$extension.sys", JPATH_SITE, null, false, true); break; case 'library': $parts = explode('/', $item->element); $vendor = (isset($parts[1]) ? $parts[0] : null); $extension = 'lib_' . ($vendor ? implode('_', $parts) : $item->element); if (!$lang->load("$extension.sys", $path, null, false, true)) { $source = $path . '/libraries/' . ($vendor ? $vendor . '/' . $parts[1] : $item->element); $lang->load("$extension.sys", $source, null, false, true); } break; case 'module': $extension = $item->element; $source = $path . '/modules/' . $extension; $lang->load("$extension.sys", $path, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); break; case 'plugin': $extension = 'plg_' . $item->folder . '_' . $item->element; $source = JPATH_PLUGINS . '/' . $item->folder . '/' . $item->element; $lang->load("$extension.sys", JPATH_ADMINISTRATOR, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); break; case 'template': $extension = 'tpl_' . $item->element; $source = $path . '/templates/' . $item->element; $lang->load("$extension.sys", $path, null, false, true) || $lang->load("$extension.sys", $source, null, false, true); break; case 'package': default: $extension = $item->element; $lang->load("$extension.sys", JPATH_SITE, null, false, true); break; } // Translate the extension name if possible $item->name = JText::_($item->name); settype($item->description, 'string'); if (!in_array($item->type, array('language'))) { $item->description = JText::_($item->description); } } } } PKb��\�X)��,components/com_installer/models/database.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; JLoader::register('InstallerModel', __DIR__ . '/extension.php'); JLoader::register('JoomlaInstallerScript', JPATH_ADMINISTRATOR . '/components/com_admin/script.php'); /** * Installer Database Model * * @since 1.6 */ class InstallerModelDatabase extends InstallerModel { protected $_context = 'com_installer.discover'; /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'name', $direction = 'asc') { $app = JFactory::getApplication(); $this->setState('message', $app->getUserState('com_installer.message')); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); $app->setUserState('com_installer.message', ''); $app->setUserState('com_installer.extension_message', ''); // Prepare the utf8mb4 conversion check table $this->prepareUtf8mb4StatusTable(); parent::populateState($ordering, $direction); } /** * Fixes database problems. * * @return void */ public function fix() { if (!$changeSet = $this->getItems()) { return false; } $changeSet->fix(); $this->fixSchemaVersion($changeSet); $this->fixUpdateVersion(); $installer = new JoomlaInstallerScript; $installer->deleteUnexistingFiles(); $this->fixDefaultTextFilters(); /* * Finally, if the schema updates succeeded, make sure the database is * converted to utf8mb4 or, if not suported by the server, compatible to it. */ $statusArray = $changeSet->getStatus(); if (count($statusArray['error']) == 0) { $installer->convertTablesToUtf8mb4(false); } } /** * Gets the changeset object. * * @return JSchemaChangeset */ public function getItems() { $folder = JPATH_ADMINISTRATOR . '/components/com_admin/sql/updates/'; try { $changeSet = JSchemaChangeset::getInstance($this->getDbo(), $folder); } catch (RuntimeException $e) { JFactory::getApplication()->enqueueMessage($e->getMessage(), 'warning'); return false; } return $changeSet; } /** * Method to get a JPagination object for the data set. * * @return boolean * * @since 3.0.1 */ public function getPagination() { return true; } /** * Get version from #__schemas table. * * @return mixed the return value from the query, or null if the query fails. * * @throws Exception */ public function getSchemaVersion() { $db = $this->getDbo(); $query = $db->getQuery(true) ->select('version_id') ->from($db->quoteName('#__schemas')) ->where('extension_id = 700'); $db->setQuery($query); $result = $db->loadResult(); return $result; } /** * Fix schema version if wrong. * * @param JSchemaChangeSet $changeSet Schema change set. * * @return mixed string schema version if success, false if fail. */ public function fixSchemaVersion($changeSet) { // Get correct schema version -- last file in array. $schema = $changeSet->getSchema(); // Check value. If ok, don't do update. if ($schema == $this->getSchemaVersion()) { return $schema; } // Delete old row. $db = $this->getDbo(); $query = $db->getQuery(true) ->delete($db->quoteName('#__schemas')) ->where($db->quoteName('extension_id') . ' = 700'); $db->setQuery($query); $db->execute(); // Add new row. $query->clear() ->insert($db->quoteName('#__schemas')) ->columns($db->quoteName('extension_id') . ',' . $db->quoteName('version_id')) ->values('700, ' . $db->quote($schema)); $db->setQuery($query); try { $db->execute(); } catch (JDatabaseExceptionExecuting $e) { return false; } return $schema; } /** * Get current version from #__extensions table. * * @return mixed version if successful, false if fail. */ public function getUpdateVersion() { $table = JTable::getInstance('Extension'); $table->load('700'); $cache = new Registry($table->manifest_cache); return $cache->get('version'); } /** * Fix Joomla version in #__extensions table if wrong (doesn't equal JVersion short version). * * @return mixed string update version if success, false if fail. */ public function fixUpdateVersion() { $table = JTable::getInstance('Extension'); $table->load('700'); $cache = new Registry($table->manifest_cache); $updateVersion = $cache->get('version'); $cmsVersion = new JVersion; if ($updateVersion == $cmsVersion->getShortVersion()) { return $updateVersion; } $cache->set('version', $cmsVersion->getShortVersion()); $table->manifest_cache = $cache->toString(); if ($table->store()) { return $cmsVersion->getShortVersion(); } return false; } /** * For version 2.5.x only * Check if com_config parameters are blank. * * @return string default text filters (if any). */ public function getDefaultTextFilters() { $table = JTable::getInstance('Extension'); $table->load($table->find(array('name' => 'com_config'))); return $table->params; } /** * For version 2.5.x only * Check if com_config parameters are blank. If so, populate with com_content text filters. * * @return mixed boolean true if params are updated, null otherwise. */ public function fixDefaultTextFilters() { $table = JTable::getInstance('Extension'); $table->load($table->find(array('name' => 'com_config'))); // Check for empty $config and non-empty content filters. if (!$table->params) { // Get filters from com_content and store if you find them. $contentParams = JComponentHelper::getParams('com_content'); if ($contentParams->get('filters')) { $newParams = new Registry; $newParams->set('filters', $contentParams->get('filters')); $table->params = (string) $newParams; $table->store(); return true; } } } /** * Prepare the table to save the status of utf8mb4 conversion * Make sure it contains 1 initialized record if there is not * already exactly 1 record. * * @return void * * @since 3.5 */ private function prepareUtf8mb4StatusTable() { $db = JFactory::getDbo(); $serverType = $db->getServerType(); if ($serverType != 'mysql') { return; } $creaTabSql = 'CREATE TABLE IF NOT EXISTS ' . $db->quoteName('#__utf8_conversion') . ' (' . $db->quoteName('converted') . ' tinyint(4) NOT NULL DEFAULT 0' . ') ENGINE=InnoDB'; if ($db->hasUTF8mb4Support()) { $creaTabSql = $creaTabSql . ' DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;'; } else { $creaTabSql = $creaTabSql . ' DEFAULT CHARSET=utf8 DEFAULT COLLATE=utf8_unicode_ci;'; } $db->setQuery($creaTabSql)->execute(); $db->setQuery('SELECT COUNT(*) FROM ' . $db->quoteName('#__utf8_conversion') . ';'); $count = $db->loadResult(); if ($count > 1) { // Table messed up somehow, clear it $db->setQuery('DELETE FROM ' . $db->quoteName('#__utf8_conversion') . ';') ->execute(); $db->setQuery('INSERT INTO ' . $db->quoteName('#__utf8_conversion') . ' (' . $db->quoteName('converted') . ') VALUES (0);' )->execute(); } elseif ($count == 0) { // Record missing somehow, fix this $db->setQuery('INSERT INTO ' . $db->quoteName('#__utf8_conversion') . ' (' . $db->quoteName('converted') . ') VALUES (0);' )->execute(); } } } PKb��\�e�,components/com_installer/models/warnings.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Installer Warnings Model * * @since 1.6 */ class InstallerModelWarnings extends JModelList { /** * Extension Type * @var string */ public $type = 'warnings'; /** * Return the byte value of a particular string. * * @param string $val String optionally with G, M or K suffix * * @return integer size in bytes * * @since 1.6 */ public function return_bytes($val) { if (empty($val)) { return 0; } $val = trim($val); preg_match('#([0-9]+)[\s]*([a-z]+)#i', $val, $matches); $last = ''; if (isset($matches[2])) { $last = $matches[2]; } if (isset($matches[1])) { $val = (int) $matches[1]; } switch (strtolower($last)) { case 'g': case 'gb': $val *= 1024; case 'm': case 'mb': $val *= 1024; case 'k': case 'kb': $val *= 1024; } return (int) $val; } /** * Load the data. * * @return array Messages * * @since 1.6 */ public function getItems() { static $messages; if ($messages) { return $messages; } $messages = array(); $file_uploads = ini_get('file_uploads'); if (!$file_uploads) { $messages[] = array('message' => JText::_('COM_INSTALLER_MSG_WARNINGS_FILEUPLOADSDISABLED'), 'description' => JText::_('COM_INSTALLER_MSG_WARNINGS_FILEUPLOADISDISABLEDDESC')); } $upload_dir = ini_get('upload_tmp_dir'); if (!$upload_dir) { $messages[] = array('message' => JText::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSET'), 'description' => JText::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSETDESC')); } else { if (!is_writeable($upload_dir)) { $messages[] = array('message' => JText::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLE'), 'description' => JText::sprintf('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLEDESC', $upload_dir)); } } $config = JFactory::getConfig(); $tmp_path = $config->get('tmp_path'); if (!$tmp_path) { $messages[] = array('message' => JText::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSET'), 'description' => JText::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSETDESC')); } else { if (!is_writeable($tmp_path)) { $messages[] = array('message' => JText::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLE'), 'description' => JText::sprintf('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLEDESC', $tmp_path)); } } $memory_limit = $this->return_bytes(ini_get('memory_limit')); if ($memory_limit < (8 * 1024 * 1024) && $memory_limit != -1) { // 8MB $messages[] = array('message' => JText::_('COM_INSTALLER_MSG_WARNINGS_LOWMEMORYWARN'), 'description' => JText::_('COM_INSTALLER_MSG_WARNINGS_LOWMEMORYDESC')); } elseif ($memory_limit < (16 * 1024 * 1024) && $memory_limit != -1) { // 16MB $messages[] = array('message' => JText::_('COM_INSTALLER_MSG_WARNINGS_MEDMEMORYWARN'), 'description' => JText::_('COM_INSTALLER_MSG_WARNINGS_MEDMEMORYDESC')); } $post_max_size = $this->return_bytes(ini_get('post_max_size')); $upload_max_filesize = $this->return_bytes(ini_get('upload_max_filesize')); if ($post_max_size < $upload_max_filesize) { $messages[] = array('message' => JText::_('COM_INSTALLER_MSG_WARNINGS_UPLOADBIGGERTHANPOST'), 'description' => JText::_('COM_INSTALLER_MSG_WARNINGS_UPLOADBIGGERTHANPOSTDESC')); } if ($post_max_size < (8 * 1024 * 1024)) // 8MB { $messages[] = array('message' => JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZE'), 'description' => JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZEDESC')); } if ($upload_max_filesize < (8 * 1024 * 1024)) // 8MB { $messages[] = array('message' => JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZE'), 'description' => JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZEDESC')); } return $messages; } } PKb��\�GA�~7~7/components/com_installer/models/updatesites.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('InstallerModel', __DIR__ . '/extension.php'); /** * Installer Update Sites Model * * @since 3.4 */ class InstallerModelUpdatesites extends InstallerModel { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 3.4 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'update_site_name', 'name', 'client_id', 'client', 'client_translated', 'status', 'type', 'type_translated', 'folder', 'folder_translated', 'update_site_id', 'enabled', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 3.4 */ protected function populateState($ordering = 'name', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.client_id', $this->getUserStateFromRequest($this->context . '.filter.client_id', 'filter_client_id', null, 'int')); $this->setState('filter.enabled', $this->getUserStateFromRequest($this->context . '.filter.enabled', 'filter_enabled', '', 'string')); $this->setState('filter.type', $this->getUserStateFromRequest($this->context . '.filter.type', 'filter_type', '', 'string')); $this->setState('filter.folder', $this->getUserStateFromRequest($this->context . '.filter.folder', 'filter_folder', '', 'string')); parent::populateState($ordering, $direction); } /** * Enable/Disable an extension. * * @param array $eid Extension ids to un/publish * @param int $value Publish value * * @return boolean True on success * * @since 3.4 * * @throws Exception on ACL error */ public function publish(&$eid = array(), $value = 1) { if (!JFactory::getUser()->authorise('core.edit.state', 'com_installer')) { throw new Exception(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'), 403); } $result = true; // Ensure eid is an array of extension ids if (!is_array($eid)) { $eid = array($eid); } // Get a table object for the extension type $table = JTable::getInstance('Updatesite'); // Enable the update site in the table and store it in the database foreach ($eid as $i => $id) { $table->load($id); $table->enabled = $value; if (!$table->store()) { $this->setError($table->getError()); $result = false; } } return $result; } /** * Deletes an update site. * * @param array $ids Extension ids to delete. * * @return void * * @since 3.6 * * @throws Exception on ACL error */ public function delete($ids = array()) { if (!JFactory::getUser()->authorise('core.delete', 'com_installer')) { throw new Exception(JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED'), 403); } // Ensure eid is an array of extension ids if (!is_array($ids)) { $ids = array($ids); } $db = JFactory::getDbo(); $app = JFactory::getApplication(); $count = 0; // Gets the update site names. $query = $db->getQuery(true) ->select($db->qn(array('update_site_id', 'name'))) ->from($db->qn('#__update_sites')) ->where($db->qn('update_site_id') . ' IN (' . implode(', ', $ids) . ')'); $db->setQuery($query); $updateSitesNames = $db->loadObjectList('update_site_id'); // Gets Joomla core update sites Ids. $joomlaUpdateSitesIds = $this->getJoomlaUpdateSitesIds(0); // Enable the update site in the table and store it in the database foreach ($ids as $i => $id) { // Don't allow to delete Joomla Core update sites. if (in_array((int) $id, $joomlaUpdateSitesIds)) { $app->enqueueMessage(JText::sprintf('COM_INSTALLER_MSG_UPDATESITES_DELETE_CANNOT_DELETE', $updateSitesNames[$id]->name), 'error'); continue; } // Delete the update site from all tables. try { $query = $db->getQuery(true) ->delete($db->qn('#__update_sites')) ->where($db->qn('update_site_id') . ' = ' . (int) $id); $db->setQuery($query); $db->execute(); $query = $db->getQuery(true) ->delete($db->qn('#__update_sites_extensions')) ->where($db->qn('update_site_id') . ' = ' . (int) $id); $db->setQuery($query); $db->execute(); $query = $db->getQuery(true) ->delete($db->qn('#__updates')) ->where($db->qn('update_site_id') . ' = ' . (int) $id); $db->setQuery($query); $db->execute(); $count++; } catch (RuntimeException $e) { $app->enqueueMessage(JText::sprintf('COM_INSTALLER_MSG_UPDATESITES_DELETE_ERROR', $updateSitesNames[$id]->name, $e->getMessage()), 'error'); } } if ($count > 0) { $app->enqueueMessage(JText::plural('COM_INSTALLER_MSG_UPDATESITES_N_DELETE_UPDATESITES_DELETED', $count), 'message'); } } /** * Rebuild update sites tables. * * @return void * * @since 3.6 * * @throws Exception on ACL error */ public function rebuild() { if (!JFactory::getUser()->authorise('core.admin', 'com_installer')) { throw new Exception(JText::_('COM_INSTALLER_MSG_UPDATESITES_REBUILD_NOT_PERMITTED'), 403); } $db = JFactory::getDbo(); $app = JFactory::getApplication(); // Check if Joomla Extension plugin is enabled. if (!JPluginHelper::isEnabled('extension', 'joomla')) { $query = $db->getQuery(true) ->select($db->quoteName('extension_id')) ->from($db->quoteName('#__extensions')) ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) ->where($db->quoteName('element') . ' = ' . $db->quote('joomla')) ->where($db->quoteName('folder') . ' = ' . $db->quote('extension')); $db->setQuery($query); $pluginId = (int) $db->loadResult(); $link = JRoute::_('index.php?option=com_plugins&task=plugin.edit&extension_id=' . $pluginId); $app->enqueueMessage(JText::sprintf('COM_INSTALLER_MSG_UPDATESITES_REBUILD_EXTENSION_PLUGIN_NOT_ENABLED', $link), 'error'); return; } $clients = array(JPATH_SITE, JPATH_ADMINISTRATOR); $extensionGroupFolders = array('components', 'modules', 'plugins', 'templates', 'language', 'manifests'); $pathsToSearch = array(); // Identifies which folders to search for manifest files. foreach ($clients as $clientPath) { foreach ($extensionGroupFolders as $extensionGroupFolderName) { // Components, modules, plugins, templates, languages and manifest (files, libraries, etc) if ($extensionGroupFolderName != 'plugins') { foreach (glob($clientPath . '/' . $extensionGroupFolderName . '/*', GLOB_NOSORT | GLOB_ONLYDIR) as $extensionFolderPath) { $pathsToSearch[] = $extensionFolderPath; } } // Plugins (another directory level is needed) else { foreach (glob($clientPath . '/' . $extensionGroupFolderName . '/*', GLOB_NOSORT | GLOB_ONLYDIR) as $pluginGroupFolderPath) { foreach (glob($pluginGroupFolderPath . '/*', GLOB_NOSORT | GLOB_ONLYDIR) as $extensionFolderPath) { $pathsToSearch[] = $extensionFolderPath; } } } } } // Gets Joomla core update sites Ids. $joomlaUpdateSitesIds = implode(', ', $this->getJoomlaUpdateSitesIds(0)); // Delete from all tables (except joomla core update sites). $query = $db->getQuery(true) ->delete($db->quoteName('#__update_sites')) ->where($db->quoteName('update_site_id') . ' NOT IN (' . $joomlaUpdateSitesIds . ')'); $db->setQuery($query); $db->execute(); $query = $db->getQuery(true) ->delete($db->quoteName('#__update_sites_extensions')) ->where($db->quoteName('update_site_id') . ' NOT IN (' . $joomlaUpdateSitesIds . ')'); $db->setQuery($query); $db->execute(); $query = $db->getQuery(true) ->delete($db->quoteName('#__updates')) ->where($db->quoteName('update_site_id') . ' NOT IN (' . $joomlaUpdateSitesIds . ')'); $db->setQuery($query); $db->execute(); $count = 0; // Gets Joomla core extension Ids. $joomlaCoreExtensionIds = implode(', ', $this->getJoomlaUpdateSitesIds(1)); // Search for updateservers in manifest files inside the folders to search. foreach ($pathsToSearch as $extensionFolderPath) { $tmpInstaller = new JInstaller; $tmpInstaller->setPath('source', $extensionFolderPath); // Main folder manifests (higher priority) $parentXmlfiles = JFolder::files($tmpInstaller->getPath('source'), '.xml$', false, true); // Search for children manifests (lower priority) $allXmlFiles = JFolder::files($tmpInstaller->getPath('source'), '.xml$', 1, true); // Create an unique array of files ordered by priority $xmlfiles = array_unique(array_merge($parentXmlfiles, $allXmlFiles)); if (!empty($xmlfiles)) { foreach ($xmlfiles as $file) { // Is it a valid Joomla installation manifest file? $manifest = $tmpInstaller->isManifest($file); if (!is_null($manifest)) { // Search if the extension exists in the extensions table. Excluding joomla core extensions (id < 10000) and discovered extensions. $query = $db->getQuery(true) ->select($db->quoteName('extension_id')) ->from($db->quoteName('#__extensions')) ->where('(' . $db->quoteName('name') . ' = ' . $db->quote($manifest->name) . ' OR ' . $db->quoteName('name') . ' = ' . $db->quote($manifest->packagename) . ')' ) ->where($db->quoteName('type') . ' = ' . $db->quote($manifest['type'])) ->where($db->quoteName('extension_id') . ' NOT IN (' . $joomlaCoreExtensionIds . ')') ->where($db->quoteName('state') . ' != -1'); $db->setQuery($query); $eid = (int) $db->loadResult(); if ($eid && $manifest->updateservers) { // Set the manifest object and path $tmpInstaller->manifest = $manifest; $tmpInstaller->setPath('manifest', $file); // Load the extension plugin (if not loaded yet). JPluginHelper::importPlugin('extension', 'joomla'); // Fire the onExtensionAfterUpdate JEventDispatcher::getInstance()->trigger('onExtensionAfterUpdate', array('installer' => $tmpInstaller, 'eid' => $eid)); $count++; } } } } } if ($count > 0) { $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_UPDATESITES_REBUILD_SUCCESS'), 'message'); } else { $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_UPDATESITES_REBUILD_MESSAGE'), 'message'); } } /** * Fetch the Joomla update sites ids. * * @param integer $column Column to return. 0 for update site ids, 1 for extension ids. * * @return array Array with joomla core update site ids. * * @since 3.6.0 */ protected function getJoomlaUpdateSitesIds($column = 0) { $db = JFactory::getDbo(); // Fetch the Joomla core update sites ids and their extension ids. We search for all except the core joomla extension with update sites. $query = $db->getQuery(true) ->select($db->quoteName(array('use.update_site_id', 'e.extension_id'))) ->from($db->quoteName('#__update_sites_extensions', 'use')) ->join('LEFT', $db->quoteName('#__update_sites', 'us') . ' ON ' . $db->qn('us.update_site_id') . ' = ' . $db->qn('use.update_site_id')) ->join('LEFT', $db->quoteName('#__extensions', 'e') . ' ON ' . $db->qn('e.extension_id') . ' = ' . $db->qn('use.extension_id')) ->where('(' . '(' . $db->qn('e.type') . ' = ' . $db->quote('file') . ' AND ' . $db->qn('e.element') . ' = ' . $db->quote('joomla') . ')' . ' OR (' . $db->qn('e.type') . ' = ' . $db->quote('package') . ' AND ' . $db->qn('e.element') . ' = ' . $db->quote('pkg_en-GB') . ')' . ' OR (' . $db->qn('e.type') . ' = ' . $db->quote('component') . ' AND ' . $db->qn('e.element') . ' = ' . $db->quote('com_joomlaupdate') . ')' . ')' ); $db->setQuery($query); return $db->loadColumn($column); } /** * Method to get the database query * * @return JDatabaseQuery The database query * * @since 3.4 */ protected function getListQuery() { $query = JFactory::getDbo()->getQuery(true) ->select( array( 's.update_site_id', 's.name AS update_site_name', 's.type AS update_site_type', 's.location', 's.enabled', 'e.extension_id', 'e.name', 'e.type', 'e.element', 'e.folder', 'e.client_id', 'e.state', 'e.manifest_cache', ) ) ->from('#__update_sites AS s') ->innerJoin('#__update_sites_extensions AS se ON (se.update_site_id = s.update_site_id)') ->innerJoin('#__extensions AS e ON (e.extension_id = se.extension_id)') ->where('state = 0'); // Process select filters. $enabled = $this->getState('filter.enabled'); $type = $this->getState('filter.type'); $clientId = $this->getState('filter.client_id'); $folder = $this->getState('filter.folder'); if ($enabled != '') { $query->where('s.enabled = ' . (int) $enabled); } if ($type) { $query->where('e.type = ' . $this->_db->quote($type)); } if ($clientId != '') { $query->where('e.client_id = ' . (int) $clientId); } if ($folder != '' && in_array($type, array('plugin', 'library', ''))) { $query->where('e.folder = ' . $this->_db->quote($folder == '*' ? '' : $folder)); } // Process search filter (update site id). $search = $this->getState('filter.search'); if (!empty($search) && stripos($search, 'id:') === 0) { $query->where('s.update_site_id = ' . (int) substr($search, 3)); } // Note: The search for name, ordering and pagination are processed by the parent InstallerModel class (in extension.php). return $query; } } PKb��\�ɿ�'components/com_installer/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_installer * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Installer Controller * * @since 1.5 */ class InstallerController extends JControllerLegacy { /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { JLoader::register('InstallerHelper', JPATH_ADMINISTRATOR . '/components/com_installer/helpers/installer.php'); // Get the document object. $document = JFactory::getDocument(); // Set the default view name and format from the Request. $vName = $this->input->get('view', 'install'); $vFormat = $document->getType(); $lName = $this->input->get('layout', 'default', 'string'); // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { $ftp = JClientHelper::setCredentialsFromRequest('ftp'); $view->ftp = &$ftp; // Get the model for the view. $model = $this->getModel($vName); // Push the model into the view (as default). $view->setModel($model, true); $view->setLayout($lName); // Push document object into the view. $view->document = $document; // Load the submenu. InstallerHelper::addSubmenu($vName); $view->display(); } return $this; } } PKc��\�#��E2E22components/com_joomlaupdate/controllers/update.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * The Joomla! update controller for the Update view * * @since 2.5.4 */ class JoomlaupdateControllerUpdate extends JControllerLegacy { /** * Performs the download of the update package * * @return void * * @since 2.5.4 */ public function download() { $this->checkToken(); $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'joomla_update.php'; JLog::addLogger($options, JLog::INFO, array('Update', 'databasequery', 'jerror')); $user = JFactory::getUser(); try { JLog::add(JText::sprintf('COM_JOOMLAUPDATE_UPDATE_LOG_START', $user->id, $user->name, JVERSION), JLog::INFO, 'Update'); } catch (RuntimeException $exception) { // Informational log only } $this->_applyCredentials(); /** @var JoomlaupdateModelDefault $model */ $model = $this->getModel('Default'); $result = $model->download(); $file = $result['basename']; $message = null; $messageType = null; // The validation was not successful for now just a warning. // TODO: In Joomla 4 this will abort the installation if ($result['check'] === false) { $message = JText::_('COM_JOOMLAUPDATE_VIEW_UPDATE_CHECKSUM_WRONG'); $messageType = 'warning'; try { JLog::add($message, JLog::INFO, 'Update'); } catch (RuntimeException $exception) { // Informational log only } } if ($file) { JFactory::getApplication()->setUserState('com_joomlaupdate.file', $file); $url = 'index.php?option=com_joomlaupdate&task=update.install&' . JFactory::getSession()->getFormToken() . '=1'; try { JLog::add(JText::sprintf('COM_JOOMLAUPDATE_UPDATE_LOG_FILE', $file), JLog::INFO, 'Update'); } catch (RuntimeException $exception) { // Informational log only } } else { JFactory::getApplication()->setUserState('com_joomlaupdate.file', null); $url = 'index.php?option=com_joomlaupdate'; $message = JText::_('COM_JOOMLAUPDATE_VIEW_UPDATE_DOWNLOADFAILED'); $messageType = 'error'; } $this->setRedirect($url, $message, $messageType); } /** * Start the installation of the new Joomla! version * * @return void * * @since 2.5.4 */ public function install() { $this->checkToken('get'); $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'joomla_update.php'; JLog::addLogger($options, JLog::INFO, array('Update', 'databasequery', 'jerror')); try { JLog::add(JText::_('COM_JOOMLAUPDATE_UPDATE_LOG_INSTALL'), JLog::INFO, 'Update'); } catch (RuntimeException $exception) { // Informational log only } $this->_applyCredentials(); /** @var JoomlaupdateModelDefault $model */ $model = $this->getModel('Default'); $file = JFactory::getApplication()->getUserState('com_joomlaupdate.file', null); $model->createRestorationFile($file); $this->display(); } /** * Finalise the upgrade by running the necessary scripts * * @return void * * @since 2.5.4 */ public function finalise() { /* * Finalize with login page. Used for pre-token check versions * to allow updates without problems but with a maximum of security. */ if (!JSession::checkToken('get')) { $this->setRedirect('index.php?option=com_joomlaupdate&view=update&layout=finaliseconfirm'); return false; } $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'joomla_update.php'; JLog::addLogger($options, JLog::INFO, array('Update', 'databasequery', 'jerror')); try { JLog::add(JText::_('COM_JOOMLAUPDATE_UPDATE_LOG_FINALISE'), JLog::INFO, 'Update'); } catch (RuntimeException $exception) { // Informational log only } $this->_applyCredentials(); /** @var JoomlaupdateModelDefault $model */ $model = $this->getModel('Default'); $model->finaliseUpgrade(); $url = 'index.php?option=com_joomlaupdate&task=update.cleanup&' . JFactory::getSession()->getFormToken() . '=1'; $this->setRedirect($url); } /** * Clean up after ourselves * * @return void * * @since 2.5.4 */ public function cleanup() { /* * Cleanup with login page. Used for pre-token check versions to be able to update * from =< 3.2.7 to allow updates without problems but with a maximum of security. */ if (!JSession::checkToken('get')) { $this->setRedirect('index.php?option=com_joomlaupdate&view=update&layout=finaliseconfirm'); return false; } $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'joomla_update.php'; JLog::addLogger($options, JLog::INFO, array('Update', 'databasequery', 'jerror')); try { JLog::add(JText::_('COM_JOOMLAUPDATE_UPDATE_LOG_CLEANUP'), JLog::INFO, 'Update'); } catch (RuntimeException $exception) { // Informational log only } $this->_applyCredentials(); /** @var JoomlaupdateModelDefault $model */ $model = $this->getModel('Default'); $model->cleanUp(); $url = 'index.php?option=com_joomlaupdate&view=default&layout=complete'; $this->setRedirect($url); try { JLog::add(JText::sprintf('COM_JOOMLAUPDATE_UPDATE_LOG_COMPLETE', JVERSION), JLog::INFO, 'Update'); } catch (RuntimeException $exception) { // Informational log only } } /** * Purges updates. * * @return void * * @since 3.0 */ public function purge() { // Check for request forgeries $this->checkToken(); // Purge updates /** @var JoomlaupdateModelDefault $model */ $model = $this->getModel('Default'); $model->purge(); $url = 'index.php?option=com_joomlaupdate'; $this->setRedirect($url, $model->_message); } /** * Uploads an update package to the temporary directory, under a random name * * @return void * * @since 3.6.0 */ public function upload() { // Check for request forgeries $this->checkToken(); // Did a non Super User tried to upload something (a.k.a. pathetic hacking attempt)? JFactory::getUser()->authorise('core.admin') or jexit(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')); $this->_applyCredentials(); /** @var JoomlaupdateModelDefault $model */ $model = $this->getModel('Default'); try { $model->upload(); } catch (RuntimeException $e) { $url = 'index.php?option=com_joomlaupdate'; $this->setRedirect($url, $e->getMessage(), 'error'); } $token = JSession::getFormToken(); $url = 'index.php?option=com_joomlaupdate&task=update.captive&' . $token . '=1'; $this->setRedirect($url); } /** * Checks there is a valid update package and redirects to the captive view for super admin authentication. * * @return array * * @since 3.6.0 */ public function captive() { // Check for request forgeries $this->checkToken('get'); // Did a non Super User tried to upload something (a.k.a. pathetic hacking attempt)? if (!JFactory::getUser()->authorise('core.admin')) { throw new RuntimeException(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } // Do I really have an update package? $tempFile = JFactory::getApplication()->getUserState('com_joomlaupdate.temp_file', null); JLoader::import('joomla.filesystem.file'); if (empty($tempFile) || !JFile::exists($tempFile)) { throw new RuntimeException(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } $this->input->set('view', 'upload'); $this->input->set('layout', 'captive'); $this->display(); } /** * Checks the admin has super administrator privileges and then proceeds with the update. * * @return array * * @since 3.6.0 */ public function confirm() { // Check for request forgeries $this->checkToken(); // Did a non Super User tried to upload something (a.k.a. pathetic hacking attempt)? if (!JFactory::getUser()->authorise('core.admin')) { throw new RuntimeException(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } // Get the model /** @var JoomlaupdateModelDefault $model */ $model = $this->getModel('default'); // Get the captive file before the session resets $tempFile = JFactory::getApplication()->getUserState('com_joomlaupdate.temp_file', null); // Do I really have an update package? if (!$model->captiveFileExists()) { throw new RuntimeException(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } // Try to log in $credentials = array( 'username' => $this->input->post->get('username', '', 'username'), 'password' => $this->input->post->get('passwd', '', 'raw'), 'secretkey' => $this->input->post->get('secretkey', '', 'raw'), ); $result = $model->captiveLogin($credentials); if (!$result) { $model->removePackageFiles(); throw new RuntimeException(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } // Set the update source in the session JFactory::getApplication()->setUserState('com_joomlaupdate.file', basename($tempFile)); try { JLog::add(JText::sprintf('COM_JOOMLAUPDATE_UPDATE_LOG_FILE', $tempFile), JLog::INFO, 'Update'); } catch (RuntimeException $exception) { // Informational log only } // Redirect to the actual update page $url = 'index.php?option=com_joomlaupdate&task=update.install&' . JFactory::getSession()->getFormToken() . '=1'; $this->setRedirect($url); } /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JoomlaupdateControllerUpdate This object to support chaining. * * @since 2.5.4 */ public function display($cachable = false, $urlparams = array()) { // Get the document object. $document = JFactory::getDocument(); // Set the default view name and format from the Request. $vName = $this->input->get('view', 'update'); $vFormat = $document->getType(); $lName = $this->input->get('layout', 'default', 'string'); // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { // Get the model for the view. /** @var JoomlaupdateModelDefault $model */ $model = $this->getModel('Default'); // Push the model into the view (as default). $view->setModel($model, true); $view->setLayout($lName); // Push document object into the view. $view->document = $document; $view->display(); } return $this; } /** * Applies FTP credentials to Joomla! itself, when required * * @return void * * @since 2.5.4 */ protected function _applyCredentials() { JFactory::getApplication()->getUserStateFromRequest('com_joomlaupdate.method', 'method', 'direct', 'cmd'); if (!JClientHelper::hasCredentials('ftp')) { $user = JFactory::getApplication()->getUserStateFromRequest('com_joomlaupdate.ftp_user', 'ftp_user', null, 'raw'); $pass = JFactory::getApplication()->getUserStateFromRequest('com_joomlaupdate.ftp_pass', 'ftp_pass', null, 'raw'); if ($user != '' && $pass != '') { // Add credentials to the session if (!JClientHelper::setCredentials('ftp', $user, $pass)) { JError::raiseWarning(500, JText::_('JLIB_CLIENT_ERROR_HELPER_SETCREDENTIALSFROMREQUEST_FAILED')); } } } } /** * Checks the admin has super administrator privileges and then proceeds with the final & cleanup steps. * * @return array * * @since 3.6.3 */ public function finaliseconfirm() { // Check for request forgeries $this->checkToken(); // Did a non Super User try do this? if (!JFactory::getUser()->authorise('core.admin')) { throw new RuntimeException(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } // Get the model /** @var JoomlaupdateModelDefault $model */ $model = $this->getModel('default'); // Try to log in $credentials = array( 'username' => $this->input->post->get('username', '', 'username'), 'password' => $this->input->post->get('passwd', '', 'raw'), 'secretkey' => $this->input->post->get('secretkey', '', 'raw'), ); $result = $model->captiveLogin($credentials); // The login fails? if (!$result) { JFactory::getApplication()->enqueueMessage(JText::_('JGLOBAL_AUTH_INVALID_PASS'), 'warning'); $this->setRedirect('index.php?option=com_joomlaupdate&view=update&layout=finaliseconfirm'); return false; } // Redirect back to the actual finalise page $this->setRedirect('index.php?option=com_joomlaupdate&task=update.finalise&' . JFactory::getSession()->getFormToken() . '=1'); } } PKc��\�Eg���,components/com_joomlaupdate/joomlaupdate.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_joomlaupdate</name> <author>Joomla! Project</author> <creationDate>February 2012</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.6.2</version> <description>COM_JOOMLAUPDATE_XML_DESCRIPTION</description> <media destination="com_joomlaupdate" folder="media"> <folder>js</folder> </media> <administration> <menu img="class:joomlaupdate">com_joomlaupdate</menu> <files folder="admin"> <filename>access.xml</filename> <filename>config.xml</filename> <filename>controller.php</filename> <filename>joomlaupdate.php</filename> <filename>restore.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_joomlaupdate.ini</language> <language tag="en-GB">language/en-GB.com_joomlaupdate.sys.ini</language> </languages> </administration> <updateservers> <server type="extension" name="Joomla! Update Component Update Site">https://update.joomla.org/core/extensions/com_joomlaupdate.xml</server> </updateservers> </extension> PKc��\'?+U>>,components/com_joomlaupdate/joomlaupdate.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; if (!JFactory::getUser()->authorise('core.admin')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Joomlaupdate'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKc��\W�Fq��&components/com_joomlaupdate/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="sources" label="COM_JOOMLAUPDATE_CONFIG_SOURCES_LABEL" description="COM_JOOMLAUPDATE_CONFIG_SOURCES_DESC" > <field name="updatesource" type="list" label="COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_LABEL" description="COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_DESC" default="default" > <!-- Note: Changed the values lts to default and sts to next with 3.4.0 --> <!-- Eliminated the 'nochange' option with 3.4.0 --> <!-- All invalid/unsupported/obsolete options equated to default in code with 3.4.0 --> <option value="default">COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_DEFAULT</option> <option value="next">COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_NEXT</option> <option value="testing">COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_TESTING</option> <option value="custom">COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_CUSTOM</option> </field> <field name="customurl" type="text" label="COM_JOOMLAUPDATE_CONFIG_CUSTOMURL_LABEL" description="COM_JOOMLAUPDATE_CONFIG_CUSTOMURL_DESC" default="" length="50" showon="updatesource:custom" /> </fieldset> </config> PKc��\�8u�yy&components/com_joomlaupdate/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_joomlaupdate"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKc��\en��;components/com_joomlaupdate/views/default/tmpl/complete.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <fieldset> <legend> <?php echo JText::_('COM_JOOMLAUPDATE_VIEW_COMPLETE_HEADING'); ?> </legend> <p class="alert alert-success"> <?php echo JText::sprintf('COM_JOOMLAUPDATE_VIEW_COMPLETE_MESSAGE', JVERSION); ?> </p> </fieldset> <form action="<?php echo JRoute::_('index.php?option=com_joomlaupdate'); ?>" method="post" id="adminForm"> <input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKc��\�����:components/com_joomlaupdate/views/default/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** @var JoomlaupdateViewDefault $this */ JHtml::_('jquery.framework'); JHtml::_('bootstrap.tooltip'); JHtml::_('formbehavior.chosen', 'select'); JHtml::_('script', 'com_joomlaupdate/default.js', array('version' => 'auto', 'relative' => true)); JFactory::getDocument()->addScriptDeclaration(" jQuery(document).ready(function($) { $('#extraction_method').change(function(e){ extractionMethodHandler('#extraction_method', 'row_ftp'); }); $('#upload_method').change(function(e){ extractionMethodHandler('#upload_method', 'upload_ftp'); }); $('button.submit').on('click', function() { $('div.download_message').show(); }); });"); ?> <div id="joomlaupdate-wrapper"> <?php if ($this->showUploadAndUpdate) : ?> <?php echo JHtml::_('bootstrap.startTabSet', 'joomlaupdate-tabs', array('active' => 'online-update')); ?> <?php echo JHtml::_('bootstrap.addTab', 'joomlaupdate-tabs', 'online-update', JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_TAB_ONLINE')); ?> <?php endif; ?> <form enctype="multipart/form-data" action="index.php" method="post" id="adminForm" class="form-horizontal"> <?php if ($this->selfUpdate) : ?> <?php // If we have a self update notice to install it first! ?> <?php JFactory::getApplication()->enqueueMessage(JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALL_SELF_UPDATE_FIRST'), 'error'); ?> <?php echo $this->loadTemplate('updatemefirst'); ?> <?php else : ?> <?php if (!isset($this->updateInfo['object']->downloadurl->_data) && $this->updateInfo['installed'] < $this->updateInfo['latest']) : ?> <?php // If we have no download URL we can't reinstall or update ?> <?php echo $this->loadTemplate('nodownload'); ?> <?php elseif (!$this->updateInfo['hasUpdate']) : ?> <?php // If we have no update we can reinstall the core ?> <?php echo $this->loadTemplate('reinstall'); ?> <?php else : ?> <?php // Ok let's show the update template ?> <?php echo $this->loadTemplate('update'); ?> <?php endif; ?> <?php endif; ?> <input type="hidden" name="task" value="update.download" /> <input type="hidden" name="option" value="com_joomlaupdate" /> <?php echo JHtml::_('form.token'); ?> </form> <?php // Only Super Users have access to the Update & Install for obvious security reasons ?> <?php if ($this->showUploadAndUpdate) : ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'joomlaupdate-tabs', 'upload-update', JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_TAB_UPLOAD')); ?> <?php echo $this->loadTemplate('upload'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> <?php endif; ?> <div class="download_message" style="display: none"> <p></p> <p class="nowarning"> <?php echo JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_DOWNLOAD_IN_PROGRESS'); ?> </p> <div class="joomlaupdate_spinner"></div> </div> <div id="loading"></div> </div> PKc��\�� ���7components/com_joomlaupdate/views/default/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Joomla! Update's Default View * * @since 2.5.4 */ class JoomlaupdateViewDefault extends JViewLegacy { /** * An array with the Joomla! update information. * * @var array * * @since 3.6.0 */ protected $updateInfo = null; /** * The form field for the extraction select * * @var string * * @since 3.6.0 */ protected $methodSelect = null; /** * The form field for the upload select * * @var string * * @since 3.6.0 */ protected $methodSelectUpload = null; /** * Renders the view * * @param string $tpl Template name * * @return void * * @since 2.5.4 */ public function display($tpl = null) { // Get data from the model. $this->state = $this->get('State'); // Load useful classes. /** @var JoomlaupdateModelDefault $model */ $model = $this->getModel(); $this->loadHelper('select'); // Assign view variables. $ftp = $model->getFTPOptions(); $defaultMethod = $ftp['enabled'] ? 'hybrid' : 'direct'; $this->updateInfo = $model->getUpdateInformation(); $this->methodSelect = JoomlaupdateHelperSelect::getMethods($defaultMethod); $this->methodSelectUpload = JoomlaupdateHelperSelect::getMethods($defaultMethod, 'method', 'upload_method'); // Set the toolbar information. JToolbarHelper::title(JText::_('COM_JOOMLAUPDATE_OVERVIEW'), 'loop install'); JToolbarHelper::custom('update.purge', 'loop', 'loop', 'COM_JOOMLAUPDATE_TOOLBAR_CHECK', false); // Add toolbar buttons. if (JFactory::getUser()->authorise('core.admin')) { JToolbarHelper::preferences('com_joomlaupdate'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_COMPONENTS_JOOMLA_UPDATE'); if (!is_null($this->updateInfo['object'])) { // Show the message if an update is found. JFactory::getApplication()->enqueueMessage(JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATE_NOTICE'), 'warning'); } $this->ftpFieldsDisplay = $this->ftp['enabled'] ? '' : 'style = "display: none"'; $params = JComponentHelper::getParams('com_joomlaupdate'); switch ($params->get('updatesource', 'default')) { // "Minor & Patch Release for Current version AND Next Major Release". case 'sts': case 'next': $this->langKey = 'COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_NEXT'; $this->updateSourceKey = JText::_('COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_NEXT'); break; // "Testing" case 'testing': $this->langKey = 'COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_TESTING'; $this->updateSourceKey = JText::_('COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_TESTING'); break; // "Custom" case 'custom': $this->langKey = 'COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_CUSTOM'; $this->updateSourceKey = JText::_('COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_CUSTOM'); break; /** * "Minor & Patch Release for Current version (recommended and default)". * The commented "case" below are for documenting where 'default' and legacy options falls * case 'default': * case 'lts': * case 'nochange': */ default: $this->langKey = 'COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_DEFAULT'; $this->updateSourceKey = JText::_('COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_DEFAULT'); } $this->warnings = array(); /** @var InstallerModelWarnings $warningsModel */ $warningsModel = $this->getModel('warnings'); if (is_object($warningsModel) && $warningsModel instanceof JModelLegacy) { $language = JFactory::getLanguage(); $language->load('com_installer', JPATH_ADMINISTRATOR, 'en-GB', false, true); $language->load('com_installer', JPATH_ADMINISTRATOR, null, true); $this->warnings = $warningsModel->getItems(); } $this->selfUpdate = $this->checkForSelfUpdate(); // Only Super Users have access to the Update & Install for obvious security reasons $this->showUploadAndUpdate = JFactory::getUser()->authorise('core.admin'); // Remove temporary files $model->removePackageFiles(); // Render the view. parent::display($tpl); } /** * Makes sure that the Joomla! Update Component Update is in the database and check if there is a new version. * * @return boolean True if there is an update else false * * @since 3.6.3 */ private function checkForSelfUpdate() { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('extension_id')) ->from($db->quoteName('#__extensions')) ->where($db->quoteName('element') . ' = ' . $db->quote('com_joomlaupdate')); $db->setQuery($query); try { // Get the component extension ID $joomlaUpdateComponentId = $db->loadResult(); } catch (RuntimeException $e) { // Something is wrong here! $joomlaUpdateComponentId = 0; JFactory::getApplication()->enqueueMessage($e->getMessage(), 'error'); } // Try the update only if we have an extension id if ($joomlaUpdateComponentId != 0) { // Allways force to check for an update! $cache_timeout = 0; $updater = JUpdater::getInstance(); $updater->findUpdates($joomlaUpdateComponentId, $cache_timeout, JUpdater::STABILITY_STABLE); // Fetch the update information from the database. $query = $db->getQuery(true) ->select('*') ->from($db->quoteName('#__updates')) ->where($db->quoteName('extension_id') . ' = ' . $db->quote($joomlaUpdateComponentId)); $db->setQuery($query); try { $joomlaUpdateComponentObject = $db->loadObject(); } catch (RuntimeException $e) { // Something is wrong here! $joomlaUpdateComponentObject = null; JFactory::getApplication()->enqueueMessage($e->getMessage(), 'error'); } if (is_null($joomlaUpdateComponentObject)) { // No Update great! return false; } return true; } } } PKc��\C��6h h 9components/com_joomlaupdate/views/update/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include jQuery. JHtml::_('jquery.framework'); // Load the scripts JHtml::_('script', 'com_joomlaupdate/json2.js', array('version' => 'auto', 'relative' => true)); JHtml::_('script', 'com_joomlaupdate/encryption.js', array('version' => 'auto', 'relative' => true)); JHtml::_('script', 'com_joomlaupdate/update.js', array('version' => 'auto', 'relative' => true)); $password = JFactory::getApplication()->getUserState('com_joomlaupdate.password', null); $filesize = JFactory::getApplication()->getUserState('com_joomlaupdate.filesize', null); $ajaxUrl = JUri::base() . 'components/com_joomlaupdate/restore.php'; $returnUrl = 'index.php?option=com_joomlaupdate&task=update.finalise&' . JFactory::getSession()->getFormToken() . '=1'; JFactory::getDocument()->addScriptDeclaration( " var joomlaupdate_password = '$password'; var joomlaupdate_totalsize = '$filesize'; var joomlaupdate_ajax_url = '$ajaxUrl'; var joomlaupdate_return_url = '$returnUrl'; jQuery(document).ready(function(){ window.pingExtract(); }); " ); ?> <p class="nowarning"><?php echo JText::_('COM_JOOMLAUPDATE_VIEW_UPDATE_INPROGRESS'); ?></p> <div id="update-progress"> <div id="extprogress"> <div id="progress" class="progress progress-striped active"> <div id="progress-bar" class="bar bar-success" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div> </div> <div class="extprogrow"> <span class="extlabel"><?php echo JText::_('COM_JOOMLAUPDATE_VIEW_UPDATE_PERCENT'); ?></span> <span class="extvalue" id="extpercent"></span> </div> <div class="extprogrow"> <span class="extlabel"><?php echo JText::_('COM_JOOMLAUPDATE_VIEW_UPDATE_BYTESREAD'); ?></span> <span class="extvalue" id="extbytesin"></span> </div> <div class="extprogrow"> <span class="extlabel"><?php echo JText::_('COM_JOOMLAUPDATE_VIEW_UPDATE_BYTESEXTRACTED'); ?></span> <span class="extvalue" id="extbytesout"></span> </div> <div class="extprogrow"> <span class="extlabel"><?php echo JText::_('COM_JOOMLAUPDATE_VIEW_UPDATE_FILESEXTRACTED'); ?></span> <span class="extvalue" id="extfiles"></span> </div> </div> </div> PKc��\�b����6components/com_joomlaupdate/views/update/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Joomla! Update's Update View * * @since 2.5.4 */ class JoomlaupdateViewUpdate extends JViewLegacy { /** * Renders the view. * * @param string $tpl Template name. * * @return void */ public function display($tpl = null) { JFactory::getApplication()->input->set('hidemainmenu', true); // Set the toolbar information. JToolbarHelper::title(JText::_('COM_JOOMLAUPDATE_OVERVIEW'), 'loop install'); // Import com_login's model JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_login/models', 'LoginModel'); // Render the view. parent::display($tpl); } } PKc��\oJ���4components/com_joomlaupdate/helpers/joomlaupdate.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Joomla! update helper. * * @since 2.5.4 */ class JoomlaupdateHelper { /** * Gets a list of the actions that can be performed. * * @return JObject * * @since 2.5.4 * @deprecated 3.2 Use JHelperContent::getActions() instead */ public static function getActions() { // Log usage of deprecated function try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions return JHelperContent::getActions('com_joomlaupdate'); } } PKc��\r�C=��.components/com_joomlaupdate/helpers/select.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Joomla! update selection list helper. * * @since 2.5.4 */ class JoomlaupdateHelperSelect { /** * Returns an HTML select element with the different extraction modes * * @param string $default The default value of the select element * @param string $name The name of the form field * @param string $id The id of the select field * * @return string * * @since 2.5.4 */ public static function getMethods($default = 'hybrid', $name = 'method', $id = 'extraction_method') { $options = array(); $options[] = JHtml::_('select.option', 'direct', JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_METHOD_DIRECT')); $options[] = JHtml::_('select.option', 'hybrid', JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_METHOD_HYBRID')); $options[] = JHtml::_('select.option', 'ftp', JText::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_METHOD_FTP')); return JHtml::_('select.genericlist', $options, $name, '', 'value', 'text', $default, $id); } } PKc��\��\�"�"0components/com_joomlaupdate/helpers/download.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Smart download helper. Automatically uses cURL or URL fopen() wrappers to * fetch the package. * * @since 2.5.4 */ class AdmintoolsHelperDownload { /** * Downloads from a URL and saves the result as a local file. * * @param string $url The URL to download from. * @param string $target The file path to download to. * * @return bool True on success * * @since 2.5.4 */ public static function download($url, $target) { jimport('joomla.filesystem.file'); // Make sure the target does not exist. if (JFile::exists($target)) { if (!@unlink($target)) { JFile::delete($target); } } // Try to open the output file for writing. $fp = @fopen($target, 'wb'); if ($fp === false) { // The file can not be opened for writing. Let's try a hack. $empty = ''; if ( JFile::write($target, $empty) ) { if ( self::chmod($target, 511) ) { $fp = @fopen($target, 'wb'); } } } $result = false; if ($fp !== false) { // First try to download directly to file if $fp !== false $adapters = self::getAdapters(); $result = false; while (!empty($adapters) && ($result === false)) { // Run the current download method. $method = 'get' . strtoupper(array_shift($adapters)); $result = self::$method($url, $fp); // Check if we have a download. if ($result === true) { // The download is complete, close the file pointer. @fclose($fp); // If the filesize is not at least 1 byte, we consider it failed. clearstatcache(); $filesize = @filesize($target); if ($filesize <= 0) { $result = false; $fp = @fopen($target, 'wb'); } } } // If we have no download, close the file pointer. if ($result === false) { @fclose($fp); } } if ($result === false) { // Delete the target file if it exists. if (file_exists($target)) { if ( !@unlink($target) ) { JFile::delete($target); } } // Download and write using JFile::write(). $result = JFile::write($target, self::downloadAndReturn($url)); } return $result; } /** * Downloads from a URL and returns the result as a string. * * @param string $url The URL to download from. * * @return mixed Result string on success, false on failure. * * @since 2.5.4 */ public static function downloadAndReturn($url) { $adapters = self::getAdapters(); $result = false; while (!empty($adapters) && ($result === false)) { // Run the current download method $method = 'get' . strtoupper(array_shift($adapters)); $result = self::$method($url, null); } return $result; } /** * Does the server support PHP's cURL extension? * * @return bool True if it is supported * * @since 2.5.4 */ private static function hasCURL() { static $result = null; if (is_null($result)) { $result = function_exists('curl_init'); } return $result; } /** * Downloads the contents of a URL and writes them to disk (if $fp is not null) * or returns them as a string (if $fp is null). * * @param string $url The URL to download from. * @param resource $fp The file pointer to download to. Omit to return the contents. * @param boolean $nofollow Should we follow 301/302/307 redirection HTTP headers? * * @return bool|string False on failure, true on success ($fp not null) or the URL contents (if $fp is null). * * @since 2.5.4 */ private static function &getCURL($url, $fp = null, $nofollow = false) { $ch = curl_init($url); if ( !@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1) && !$nofollow ) { // Safe Mode is enabled. We have to fetch the headers and // parse any redirections present in there. curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Get the headers. $data = curl_exec($ch); curl_close($ch); // Init $newURL = $url; // Parse the headers. $lines = explode("\n", $data); foreach ($lines as $line) { if (substr($line, 0, 9) == "Location:") { $newURL = trim(substr($line, 9)); } } if ($url != $newURL) { return self::getCURL($newURL, $fp); } else { return self::getCURL($newURL, $fp, true); } } else { @curl_setopt($ch, CURLOPT_MAXREDIRS, 20); if (function_exists('set_time_limit')) { set_time_limit(0); } } curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_USERAGENT, 'Joomla/' . JVERSION); if (is_resource($fp)) { curl_setopt($ch, CURLOPT_FILE, $fp); } else { curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); } $result = curl_exec($ch); curl_close($ch); return $result; } /** * Does the server support URL fopen() wrappers? * * @return bool * * @since 2.5.4 */ private static function hasFOPEN() { static $result = null; if (is_null($result)) { // If we are not allowed to use ini_get, we assume that URL fopen is // disabled. if (!function_exists('ini_get')) { $result = false; } else { $result = ini_get('allow_url_fopen'); } } return $result; } /** * Download from a URL using URL fopen() wrappers. * * @param string $url The URL to download from. * @param resource $fp The file pointer to download to; leave null to return the d/l file as a string. * * @return bool|string False on failure, true on success ($fp not null) or the URL contents (if $fp is null). * * @since 2.5.4 */ private static function &getFOPEN($url, $fp = null) { $result = false; // Open the URL for reading if (function_exists('stream_context_create')) { $opts = stream_context_get_options(stream_context_get_default()); $opts['http']['user_agent'] = 'Joomla/' . JVERSION; $context = stream_context_create($opts); $ih = @fopen($url, 'r', false, $context); } else { // PHP 4 way (actually, it's just a fallback) if ( function_exists('ini_set') ) { ini_set('user_agent', 'Joomla/' . JVERSION); } $ih = @fopen($url, 'r'); } // If fopen() fails, abort if ( !is_resource($ih) ) { return $result; } // Try to download $bytes = 0; $result = true; $return = ''; while (!feof($ih) && $result) { $contents = fread($ih, 4096); if ($contents === false) { @fclose($ih); $result = false; return $result; } else { $bytes += strlen($contents); if (is_resource($fp)) { $result = @fwrite($fp, $contents); } else { $return .= $contents; unset($contents); } } } @fclose($ih); if (is_resource($fp)) { return $result; } elseif ( $result === true ) { return $return; } else { return $result; } } /** * Detect and return available download "adapters" (not really adapters, as * we don't follow the Adapter pattern, yet).. * * @return array * * @since 2.5.4 */ private static function getAdapters() { // Detect available adapters. $adapters = array(); if (self::hasCURL()) { $adapters[] = 'curl'; } if (self::hasFOPEN()) { $adapters[] = 'fopen'; } return $adapters; } /** * Change the permissions of a file, optionally using FTP. * * @param string $path Absolute path to file. * @param int $mode Permissions, e.g. 0755. * * @return boolean True on success. * * @since 2.5.4 */ private static function chmod($path, $mode) { if (is_string($mode)) { $mode = octdec($mode); if ( ($mode < 0600) || ($mode > 0777) ) { $mode = 0755; } } $ftpOptions = JClientHelper::getCredentials('ftp'); // Check to make sure the path valid and clean $path = JPath::clean($path); if ($ftpOptions['enabled'] == 1) { // Connect the FTP client $ftp = JClientFtp::getInstance( $ftpOptions['host'], $ftpOptions['port'], array(), $ftpOptions['user'], $ftpOptions['pass'] ); } if (@chmod($path, $mode)) { $ret = true; } elseif ($ftpOptions['enabled'] == 1) { // Translate path and delete $path = JPath::clean(str_replace(JPATH_ROOT, $ftpOptions['root'], $path), '/'); // FTP connector throws an error $ret = $ftp->chmod($path, $mode); } else { return false; } return $ret; } } PKc��\�b�C�@�@'components/com_joomlaupdate/restore.phpnu�[���<?php /** * Akeeba Restore * * An archive extraction engine for ZIP, JPA and JPS archives. * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version */ /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ define('_AKEEBA_RESTORATION', 1); defined('DS') or define('DS', DIRECTORY_SEPARATOR); // Unarchiver run states define('AK_STATE_NOFILE', 0); // File header not read yet define('AK_STATE_HEADER', 1); // File header read; ready to process data define('AK_STATE_DATA', 2); // Processing file data define('AK_STATE_DATAREAD', 3); // Finished processing file data; ready to post-process define('AK_STATE_POSTPROC', 4); // Post-processing define('AK_STATE_DONE', 5); // Done with post-processing /* Windows system detection */ if (!defined('_AKEEBA_IS_WINDOWS')) { if (function_exists('php_uname')) { define('_AKEEBA_IS_WINDOWS', stristr(php_uname(), 'windows')); } else { define('_AKEEBA_IS_WINDOWS', DIRECTORY_SEPARATOR == '\\'); } } // Get the file's root if (!defined('KSROOTDIR')) { define('KSROOTDIR', dirname(__FILE__)); } if (!defined('KSLANGDIR')) { define('KSLANGDIR', KSROOTDIR); } // Make sure the locale is correct for basename() to work if (function_exists('setlocale')) { @setlocale(LC_ALL, 'en_US.UTF8'); } // fnmatch not available on non-POSIX systems // Thanks to soywiz@php.net for this usefull alternative function [http://gr2.php.net/fnmatch] if (!function_exists('fnmatch')) { function fnmatch($pattern, $string) { return @preg_match( '/^' . strtr(addcslashes($pattern, '/\\.+^$(){}=!<>|'), array('*' => '.*', '?' => '.?')) . '$/i', $string ); } } // Unicode-safe binary data length function if (!function_exists('akstringlen')) { if (function_exists('mb_strlen')) { function akstringlen($string) { return mb_strlen($string, '8bit'); } } else { function akstringlen($string) { return strlen($string); } } } if (!function_exists('aksubstr')) { if (function_exists('mb_strlen')) { function aksubstr($string, $start, $length = null) { return mb_substr($string, $start, $length, '8bit'); } } else { function aksubstr($string, $start, $length = null) { return substr($string, $start, $length); } } } /** * Gets a query parameter from GET or POST data * * @param $key * @param $default */ function getQueryParam($key, $default = null) { $value = $default; if (array_key_exists($key, $_REQUEST)) { $value = $_REQUEST[$key]; } if (get_magic_quotes_gpc() && !is_null($value)) { $value = stripslashes($value); } return $value; } // Debugging function function debugMsg($msg) { if (!defined('KSDEBUG')) { return; } $fp = fopen('debug.txt', 'at'); fwrite($fp, $msg . "\n"); fclose($fp); // Echo to stdout if KSDEBUGCLI is defined if (defined('KSDEBUGCLI')) { echo $msg . "\n"; } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * The base class of Akeeba Engine objects. Allows for error and warnings logging * and propagation. Largely based on the Joomla! 1.5 JObject class. */ abstract class AKAbstractObject { /** @var array The queue size of the $_errors array. Set to 0 for infinite size. */ protected $_errors_queue_size = 0; /** @var array The queue size of the $_warnings array. Set to 0 for infinite size. */ protected $_warnings_queue_size = 0; /** @var array An array of errors */ private $_errors = array(); /** @var array An array of warnings */ private $_warnings = array(); /** * Public constructor, makes sure we are instantiated only by the factory class */ public function __construct() { /* // Assisted Singleton pattern if(function_exists('debug_backtrace')) { $caller=debug_backtrace(); if( ($caller[1]['class'] != 'AKFactory') && ($caller[2]['class'] != 'AKFactory') && ($caller[3]['class'] != 'AKFactory') && ($caller[4]['class'] != 'AKFactory') ) { var_dump(debug_backtrace()); trigger_error("You can't create direct descendants of ".__CLASS__, E_USER_ERROR); } } */ } /** * Get the most recent error message * * @param integer $i Optional error index * * @return string Error message */ public function getError($i = null) { return $this->getItemFromArray($this->_errors, $i); } /** * Returns the last item of a LIFO string message queue, or a specific item * if so specified. * * @param array $array An array of strings, holding messages * @param int $i Optional message index * * @return mixed The message string, or false if the key doesn't exist */ private function getItemFromArray($array, $i = null) { // Find the item if ($i === null) { // Default, return the last item $item = end($array); } else if (!array_key_exists($i, $array)) { // If $i has been specified but does not exist, return false return false; } else { $item = $array[$i]; } return $item; } /** * Return all errors, if any * * @return array Array of error messages */ public function getErrors() { return $this->_errors; } /** * Resets all error messages */ public function resetErrors() { $this->_errors = array(); } /** * Get the most recent warning message * * @param integer $i Optional warning index * * @return string Error message */ public function getWarning($i = null) { return $this->getItemFromArray($this->_warnings, $i); } /** * Return all warnings, if any * * @return array Array of error messages */ public function getWarnings() { return $this->_warnings; } /** * Resets all warning messages */ public function resetWarnings() { $this->_warnings = array(); } /** * Propagates errors and warnings to a foreign object. The foreign object SHOULD * implement the setError() and/or setWarning() methods but DOESN'T HAVE TO be of * AKAbstractObject type. For example, this can even be used to propagate to a * JObject instance in Joomla!. Propagated items will be removed from ourselves. * * @param object $object The object to propagate errors and warnings to. */ public function propagateToObject(&$object) { // Skip non-objects if (!is_object($object)) { return; } if (method_exists($object, 'setError')) { if (!empty($this->_errors)) { foreach ($this->_errors as $error) { $object->setError($error); } $this->_errors = array(); } } if (method_exists($object, 'setWarning')) { if (!empty($this->_warnings)) { foreach ($this->_warnings as $warning) { $object->setWarning($warning); } $this->_warnings = array(); } } } /** * Propagates errors and warnings from a foreign object. Each propagated list is * then cleared on the foreign object, as long as it implements resetErrors() and/or * resetWarnings() methods. * * @param object $object The object to propagate errors and warnings from */ public function propagateFromObject(&$object) { if (method_exists($object, 'getErrors')) { $errors = $object->getErrors(); if (!empty($errors)) { foreach ($errors as $error) { $this->setError($error); } } if (method_exists($object, 'resetErrors')) { $object->resetErrors(); } } if (method_exists($object, 'getWarnings')) { $warnings = $object->getWarnings(); if (!empty($warnings)) { foreach ($warnings as $warning) { $this->setWarning($warning); } } if (method_exists($object, 'resetWarnings')) { $object->resetWarnings(); } } } /** * Add an error message * * @param string $error Error message */ public function setError($error) { if ($this->_errors_queue_size > 0) { if (count($this->_errors) >= $this->_errors_queue_size) { array_shift($this->_errors); } } $this->_errors[] = $error; } /** * Add an error message * * @param string $error Error message */ public function setWarning($warning) { if ($this->_warnings_queue_size > 0) { if (count($this->_warnings) >= $this->_warnings_queue_size) { array_shift($this->_warnings); } } $this->_warnings[] = $warning; } /** * Sets the size of the error queue (acts like a LIFO buffer) * * @param int $newSize The new queue size. Set to 0 for infinite length. */ protected function setErrorsQueueSize($newSize = 0) { $this->_errors_queue_size = (int) $newSize; } /** * Sets the size of the warnings queue (acts like a LIFO buffer) * * @param int $newSize The new queue size. Set to 0 for infinite length. */ protected function setWarningsQueueSize($newSize = 0) { $this->_warnings_queue_size = (int) $newSize; } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * The superclass of all Akeeba Kickstart parts. The "parts" are intelligent stateful * classes which perform a single procedure and have preparation, running and * finalization phases. The transition between phases is handled automatically by * this superclass' tick() final public method, which should be the ONLY public API * exposed to the rest of the Akeeba Engine. */ abstract class AKAbstractPart extends AKAbstractObject { /** * Indicates whether this part has finished its initialisation cycle * * @var boolean */ protected $isPrepared = false; /** * Indicates whether this part has more work to do (it's in running state) * * @var boolean */ protected $isRunning = false; /** * Indicates whether this part has finished its finalization cycle * * @var boolean */ protected $isFinished = false; /** * Indicates whether this part has finished its run cycle * * @var boolean */ protected $hasRan = false; /** * The name of the engine part (a.k.a. Domain), used in return table * generation. * * @var string */ protected $active_domain = ""; /** * The step this engine part is in. Used verbatim in return table and * should be set by the code in the _run() method. * * @var string */ protected $active_step = ""; /** * A more detailed description of the step this engine part is in. Used * verbatim in return table and should be set by the code in the _run() * method. * * @var string */ protected $active_substep = ""; /** * Any configuration variables, in the form of an array. * * @var array */ protected $_parametersArray = array(); /** @var string The database root key */ protected $databaseRoot = array(); /** @var array An array of observers */ protected $observers = array(); /** @var int Last reported warnings's position in array */ private $warnings_pointer = -1; /** * The public interface to an engine part. This method takes care for * calling the correct method in order to perform the initialisation - * run - finalisation cycle of operation and return a proper response array. * * @return array A Response Array */ final public function tick() { // Call the right action method, depending on engine part state switch ($this->getState()) { case "init": $this->_prepare(); break; case "prepared": $this->_run(); break; case "running": $this->_run(); break; case "postrun": $this->_finalize(); break; } // Send a Return Table back to the caller $out = $this->_makeReturnTable(); return $out; } /** * Returns the state of this engine part. * * @return string The state of this engine part. It can be one of * error, init, prepared, running, postrun, finished. */ final public function getState() { if ($this->getError()) { return "error"; } if (!($this->isPrepared)) { return "init"; } if (!($this->isFinished) && !($this->isRunning) && !($this->hasRun) && ($this->isPrepared)) { return "prepared"; } if (!($this->isFinished) && $this->isRunning && !($this->hasRun)) { return "running"; } if (!($this->isFinished) && !($this->isRunning) && $this->hasRun) { return "postrun"; } if ($this->isFinished) { return "finished"; } } /** * Runs the preparation for this part. Should set _isPrepared * to true */ abstract protected function _prepare(); /** * Runs the main functionality loop for this part. Upon calling, * should set the _isRunning to true. When it finished, should set * the _hasRan to true. If an error is encountered, setError should * be used. */ abstract protected function _run(); /** * Runs the finalisation process for this part. Should set * _isFinished to true. */ abstract protected function _finalize(); /** * Constructs a Response Array based on the engine part's state. * * @return array The Response Array for the current state */ final protected function _makeReturnTable() { // Get a list of warnings $warnings = $this->getWarnings(); // Report only new warnings if there is no warnings queue size if ($this->_warnings_queue_size == 0) { if (($this->warnings_pointer > 0) && ($this->warnings_pointer < (count($warnings)))) { $warnings = array_slice($warnings, $this->warnings_pointer + 1); $this->warnings_pointer += count($warnings); } else { $this->warnings_pointer = count($warnings); } } $out = array( 'HasRun' => (!($this->isFinished)), 'Domain' => $this->active_domain, 'Step' => $this->active_step, 'Substep' => $this->active_substep, 'Error' => $this->getError(), 'Warnings' => $warnings ); return $out; } /** * Returns a copy of the class's status array * * @return array */ public function getStatusArray() { return $this->_makeReturnTable(); } /** * Sends any kind of setup information to the engine part. Using this, * we avoid passing parameters to the constructor of the class. These * parameters should be passed as an indexed array and should be taken * into account during the preparation process only. This function will * set the error flag if it's called after the engine part is prepared. * * @param array $parametersArray The parameters to be passed to the * engine part. */ final public function setup($parametersArray) { if ($this->isPrepared) { $this->setState('error', "Can't modify configuration after the preparation of " . $this->active_domain); } else { $this->_parametersArray = $parametersArray; if (array_key_exists('root', $parametersArray)) { $this->databaseRoot = $parametersArray['root']; } } } /** * Sets the engine part's internal state, in an easy to use manner * * @param string $state One of init, prepared, running, postrun, finished, error * @param string $errorMessage The reported error message, should the state be set to error */ protected function setState($state = 'init', $errorMessage = 'Invalid setState argument') { switch ($state) { case 'init': $this->isPrepared = false; $this->isRunning = false; $this->isFinished = false; $this->hasRun = false; break; case 'prepared': $this->isPrepared = true; $this->isRunning = false; $this->isFinished = false; $this->hasRun = false; break; case 'running': $this->isPrepared = true; $this->isRunning = true; $this->isFinished = false; $this->hasRun = false; break; case 'postrun': $this->isPrepared = true; $this->isRunning = false; $this->isFinished = false; $this->hasRun = true; break; case 'finished': $this->isPrepared = true; $this->isRunning = false; $this->isFinished = true; $this->hasRun = false; break; case 'error': default: $this->setError($errorMessage); break; } } final public function getDomain() { return $this->active_domain; } final public function getStep() { return $this->active_step; } final public function getSubstep() { return $this->active_substep; } /** * Attaches an observer object * * @param AKAbstractPartObserver $obs */ function attach(AKAbstractPartObserver $obs) { $this->observers["$obs"] = $obs; } /** * Detaches an observer object * * @param AKAbstractPartObserver $obs */ function detach(AKAbstractPartObserver $obs) { delete($this->observers["$obs"]); } /** * Sets the BREAKFLAG, which instructs this engine part that the current step must break immediately, * in fear of timing out. */ protected function setBreakFlag() { AKFactory::set('volatile.breakflag', true); } final protected function setDomain($new_domain) { $this->active_domain = $new_domain; } final protected function setStep($new_step) { $this->active_step = $new_step; } final protected function setSubstep($new_substep) { $this->active_substep = $new_substep; } /** * Notifies observers each time something interesting happened to the part * * @param mixed $message The event object */ protected function notify($message) { foreach ($this->observers as $obs) { $obs->update($this, $message); } } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * The base class of unarchiver classes */ abstract class AKAbstractUnarchiver extends AKAbstractPart { /** @var array List of the names of all archive parts */ public $archiveList = array(); /** @var int The total size of all archive parts */ public $totalSize = array(); /** @var array Which files to rename */ public $renameFiles = array(); /** @var array Which directories to rename */ public $renameDirs = array(); /** @var array Which files to skip */ public $skipFiles = array(); /** @var string Archive filename */ protected $filename = null; /** @var integer Current archive part number */ protected $currentPartNumber = -1; /** @var integer The offset inside the current part */ protected $currentPartOffset = 0; /** @var bool Should I restore permissions? */ protected $flagRestorePermissions = false; /** @var AKAbstractPostproc Post processing class */ protected $postProcEngine = null; /** @var string Absolute path to prepend to extracted files */ protected $addPath = ''; /** @var string Absolute path to remove from extracted files */ protected $removePath = ''; /** @var integer Chunk size for processing */ protected $chunkSize = 524288; /** @var resource File pointer to the current archive part file */ protected $fp = null; /** @var int Run state when processing the current archive file */ protected $runState = null; /** @var stdClass File header data, as read by the readFileHeader() method */ protected $fileHeader = null; /** @var int How much of the uncompressed data we've read so far */ protected $dataReadLength = 0; /** @var array Unwriteable files in these directories are always ignored and do not cause errors when not extracted */ protected $ignoreDirectories = array(); /** * Public constructor */ public function __construct() { parent::__construct(); } /** * Wakeup function, called whenever the class is unserialized */ public function __wakeup() { if ($this->currentPartNumber >= 0) { $this->fp = @fopen($this->archiveList[$this->currentPartNumber], 'rb'); if ((is_resource($this->fp)) && ($this->currentPartOffset > 0)) { @fseek($this->fp, $this->currentPartOffset); } } } /** * Sleep function, called whenever the class is serialized */ public function shutdown() { if (is_resource($this->fp)) { $this->currentPartOffset = @ftell($this->fp); @fclose($this->fp); } } /** * Is this file or directory contained in a directory we've decided to ignore * write errors for? This is useful to let the extraction work despite write * errors in the log, logs and tmp directories which MIGHT be used by the system * on some low quality hosts and Plesk-powered hosts. * * @param string $shortFilename The relative path of the file/directory in the package * * @return boolean True if it belongs in an ignored directory */ public function isIgnoredDirectory($shortFilename) { // return false; if (substr($shortFilename, -1) == '/') { $check = rtrim($shortFilename, '/'); } else { $check = dirname($shortFilename); } return in_array($check, $this->ignoreDirectories); } /** * Implements the abstract _prepare() method */ final protected function _prepare() { parent::__construct(); if (count($this->_parametersArray) > 0) { foreach ($this->_parametersArray as $key => $value) { switch ($key) { // Archive's absolute filename case 'filename': $this->filename = $value; // Sanity check if (!empty($value)) { $value = strtolower($value); if (strlen($value) > 6) { if ( (substr($value, 0, 7) == 'http://') || (substr($value, 0, 8) == 'https://') || (substr($value, 0, 6) == 'ftp://') || (substr($value, 0, 7) == 'ssh2://') || (substr($value, 0, 6) == 'ssl://') ) { $this->setState('error', 'Invalid archive location'); } } } break; // Should I restore permissions? case 'restore_permissions': $this->flagRestorePermissions = $value; break; // Should I use FTP? case 'post_proc': $this->postProcEngine = AKFactory::getpostProc($value); break; // Path to add in the beginning case 'add_path': $this->addPath = $value; $this->addPath = str_replace('\\', '/', $this->addPath); $this->addPath = rtrim($this->addPath, '/'); if (!empty($this->addPath)) { $this->addPath .= '/'; } break; // Path to remove from the beginning case 'remove_path': $this->removePath = $value; $this->removePath = str_replace('\\', '/', $this->removePath); $this->removePath = rtrim($this->removePath, '/'); if (!empty($this->removePath)) { $this->removePath .= '/'; } break; // Which files to rename (hash array) case 'rename_files': $this->renameFiles = $value; break; // Which files to rename (hash array) case 'rename_dirs': $this->renameDirs = $value; break; // Which files to skip (indexed array) case 'skip_files': $this->skipFiles = $value; break; // Which directories to ignore when we can't write files in them (indexed array) case 'ignoredirectories': $this->ignoreDirectories = $value; break; } } } $this->scanArchives(); $this->readArchiveHeader(); $errMessage = $this->getError(); if (!empty($errMessage)) { $this->setState('error', $errMessage); } else { $this->runState = AK_STATE_NOFILE; $this->setState('prepared'); } } /** * Scans for archive parts */ private function scanArchives() { if (defined('KSDEBUG')) { @unlink('debug.txt'); } debugMsg('Preparing to scan archives'); $privateArchiveList = array(); // Get the components of the archive filename $dirname = dirname($this->filename); $base_extension = $this->getBaseExtension(); $basename = basename($this->filename, $base_extension); $this->totalSize = 0; // Scan for multiple parts until we don't find any more of them $count = 0; $found = true; $this->archiveList = array(); while ($found) { ++$count; $extension = substr($base_extension, 0, 2) . sprintf('%02d', $count); $filename = $dirname . DIRECTORY_SEPARATOR . $basename . $extension; $found = file_exists($filename); if ($found) { debugMsg('- Found archive ' . $filename); // Add yet another part, with a numeric-appended filename $this->archiveList[] = $filename; $filesize = @filesize($filename); $this->totalSize += $filesize; $privateArchiveList[] = array($filename, $filesize); } else { debugMsg('- Found archive ' . $this->filename); // Add the last part, with the regular extension $this->archiveList[] = $this->filename; $filename = $this->filename; $filesize = @filesize($filename); $this->totalSize += $filesize; $privateArchiveList[] = array($filename, $filesize); } } debugMsg('Total archive parts: ' . $count); $this->currentPartNumber = -1; $this->currentPartOffset = 0; $this->runState = AK_STATE_NOFILE; // Send start of file notification $message = new stdClass; $message->type = 'totalsize'; $message->content = new stdClass; $message->content->totalsize = $this->totalSize; $message->content->filelist = $privateArchiveList; $this->notify($message); } /** * Returns the base extension of the file, e.g. '.jpa' * * @return string */ private function getBaseExtension() { static $baseextension; if (empty($baseextension)) { $basename = basename($this->filename); $lastdot = strrpos($basename, '.'); $baseextension = substr($basename, $lastdot); } return $baseextension; } /** * Concrete classes are supposed to use this method in order to read the archive's header and * prepare themselves to the point of being ready to extract the first file. */ protected abstract function readArchiveHeader(); protected function _run() { if ($this->getState() == 'postrun') { return; } $this->setState('running'); $timer = AKFactory::getTimer(); $status = true; while ($status && ($timer->getTimeLeft() > 0)) { switch ($this->runState) { case AK_STATE_NOFILE: debugMsg(__CLASS__ . '::_run() - Reading file header'); $status = $this->readFileHeader(); if ($status) { // Send start of file notification $message = new stdClass; $message->type = 'startfile'; $message->content = new stdClass; $message->content->realfile = $this->fileHeader->file; $message->content->file = $this->fileHeader->file; $message->content->uncompressed = $this->fileHeader->uncompressed; if (array_key_exists('realfile', get_object_vars($this->fileHeader))) { $message->content->realfile = $this->fileHeader->realFile; } if (array_key_exists('compressed', get_object_vars($this->fileHeader))) { $message->content->compressed = $this->fileHeader->compressed; } else { $message->content->compressed = 0; } debugMsg(__CLASS__ . '::_run() - Preparing to extract ' . $message->content->realfile); $this->notify($message); } else { debugMsg(__CLASS__ . '::_run() - Could not read file header'); } break; case AK_STATE_HEADER: case AK_STATE_DATA: debugMsg(__CLASS__ . '::_run() - Processing file data'); $status = $this->processFileData(); break; case AK_STATE_DATAREAD: case AK_STATE_POSTPROC: debugMsg(__CLASS__ . '::_run() - Calling post-processing class'); $this->postProcEngine->timestamp = $this->fileHeader->timestamp; $status = $this->postProcEngine->process(); $this->propagateFromObject($this->postProcEngine); $this->runState = AK_STATE_DONE; break; case AK_STATE_DONE: default: if ($status) { debugMsg(__CLASS__ . '::_run() - Finished extracting file'); // Send end of file notification $message = new stdClass; $message->type = 'endfile'; $message->content = new stdClass; if (array_key_exists('realfile', get_object_vars($this->fileHeader))) { $message->content->realfile = $this->fileHeader->realFile; } else { $message->content->realfile = $this->fileHeader->file; } $message->content->file = $this->fileHeader->file; if (array_key_exists('compressed', get_object_vars($this->fileHeader))) { $message->content->compressed = $this->fileHeader->compressed; } else { $message->content->compressed = 0; } $message->content->uncompressed = $this->fileHeader->uncompressed; $this->notify($message); } $this->runState = AK_STATE_NOFILE; break; } } $error = $this->getError(); if (!$status && ($this->runState == AK_STATE_NOFILE) && empty($error)) { debugMsg(__CLASS__ . '::_run() - Just finished'); // We just finished $this->setState('postrun'); } elseif (!empty($error)) { debugMsg(__CLASS__ . '::_run() - Halted with an error:'); debugMsg($error); $this->setState('error', $error); } } /** * Concrete classes must use this method to read the file header * * @return bool True if reading the file was successful, false if an error occurred or we reached end of archive */ protected abstract function readFileHeader(); /** * Concrete classes must use this method to process file data. It must set $runState to AK_STATE_DATAREAD when * it's finished processing the file data. * * @return bool True if processing the file data was successful, false if an error occurred */ protected abstract function processFileData(); protected function _finalize() { // Nothing to do $this->setState('finished'); } /** * Opens the next part file for reading */ protected function nextFile() { debugMsg('Current part is ' . $this->currentPartNumber . '; opening the next part'); ++$this->currentPartNumber; if ($this->currentPartNumber > (count($this->archiveList) - 1)) { $this->setState('postrun'); return false; } else { if (is_resource($this->fp)) { @fclose($this->fp); } debugMsg('Opening file ' . $this->archiveList[$this->currentPartNumber]); $this->fp = @fopen($this->archiveList[$this->currentPartNumber], 'rb'); if ($this->fp === false) { debugMsg('Could not open file - crash imminent'); $this->setError(AKText::sprintf('ERR_COULD_NOT_OPEN_ARCHIVE_PART', $this->archiveList[$this->currentPartNumber])); } fseek($this->fp, 0); $this->currentPartOffset = 0; return true; } } /** * Returns true if we have reached the end of file * * @param $local bool True to return EOF of the local file, false (default) to return if we have reached the end of * the archive set * * @return bool True if we have reached End Of File */ protected function isEOF($local = false) { $eof = @feof($this->fp); if (!$eof) { // Border case: right at the part's end (eeeek!!!). For the life of me, I don't understand why // feof() doesn't report true. It expects the fp to be positioned *beyond* the EOF to report // true. Incredible! :( $position = @ftell($this->fp); $filesize = @filesize($this->archiveList[$this->currentPartNumber]); if ($filesize <= 0) { // 2Gb or more files on a 32 bit version of PHP tend to get screwed up. Meh. $eof = false; } elseif ($position >= $filesize) { $eof = true; } } if ($local) { return $eof; } else { return $eof && ($this->currentPartNumber >= (count($this->archiveList) - 1)); } } /** * Tries to make a directory user-writable so that we can write a file to it * * @param $path string A path to a file */ protected function setCorrectPermissions($path) { static $rootDir = null; if (is_null($rootDir)) { $rootDir = rtrim(AKFactory::get('kickstart.setup.destdir', ''), '/\\'); } $directory = rtrim(dirname($path), '/\\'); if ($directory != $rootDir) { // Is this an unwritable directory? if (!is_writeable($directory)) { $this->postProcEngine->chmod($directory, 0755); } } $this->postProcEngine->chmod($path, 0644); } /** * Reads data from the archive and notifies the observer with the 'reading' message * * @param $fp * @param $length */ protected function fread($fp, $length = null) { if (is_numeric($length)) { if ($length > 0) { $data = fread($fp, $length); } else { $data = fread($fp, PHP_INT_MAX); } } else { $data = fread($fp, PHP_INT_MAX); } if ($data === false) { $data = ''; } // Send start of file notification $message = new stdClass; $message->type = 'reading'; $message->content = new stdClass; $message->content->length = strlen($data); $this->notify($message); return $data; } /** * Removes the configured $removePath from the path $path * * @param string $path The path to reduce * * @return string The reduced path */ protected function removePath($path) { if (empty($this->removePath)) { return $path; } if (strpos($path, $this->removePath) === 0) { $path = substr($path, strlen($this->removePath)); $path = ltrim($path, '/\\'); } return $path; } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * File post processor engines base class */ abstract class AKAbstractPostproc extends AKAbstractObject { /** @var int The UNIX timestamp of the file's desired modification date */ public $timestamp = 0; /** @var string The current (real) file path we'll have to process */ protected $filename = null; /** @var int The requested permissions */ protected $perms = 0755; /** @var string The temporary file path we gave to the unarchiver engine */ protected $tempFilename = null; /** * Processes the current file, e.g. moves it from temp to final location by FTP */ abstract public function process(); /** * The unarchiver tells us the path to the filename it wants to extract and we give it * a different path instead. * * @param string $filename The path to the real file * @param int $perms The permissions we need the file to have * * @return string The path to the temporary file */ abstract public function processFilename($filename, $perms = 0755); /** * Recursively creates a directory if it doesn't exist * * @param string $dirName The directory to create * @param int $perms The permissions to give to that directory */ abstract public function createDirRecursive($dirName, $perms); abstract public function chmod($file, $perms); abstract public function unlink($file); abstract public function rmdir($directory); abstract public function rename($from, $to); } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * Descendants of this class can be used in the unarchiver's observer methods (attach, detach and notify) * * @author Nicholas * */ abstract class AKAbstractPartObserver { abstract public function update($object, $message); } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * Direct file writer */ class AKPostprocDirect extends AKAbstractPostproc { public function process() { $restorePerms = AKFactory::get('kickstart.setup.restoreperms', false); if ($restorePerms) { @chmod($this->filename, $this->perms); } else { if (@is_file($this->filename)) { @chmod($this->filename, 0644); } else { @chmod($this->filename, 0755); } } if ($this->timestamp > 0) { @touch($this->filename, $this->timestamp); } return true; } public function processFilename($filename, $perms = 0755) { $this->perms = $perms; $this->filename = $filename; return $filename; } public function createDirRecursive($dirName, $perms) { if (AKFactory::get('kickstart.setup.dryrun', '0')) { return true; } if (@mkdir($dirName, 0755, true)) { @chmod($dirName, 0755); return true; } $root = AKFactory::get('kickstart.setup.destdir'); $root = rtrim(str_replace('\\', '/', $root), '/'); $dir = rtrim(str_replace('\\', '/', $dirName), '/'); if (strpos($dir, $root) === 0) { $dir = ltrim(substr($dir, strlen($root)), '/'); $root .= '/'; } else { $root = ''; } if (empty($dir)) { return true; } $dirArray = explode('/', $dir); $path = ''; foreach ($dirArray as $dir) { $path .= $dir . '/'; $ret = is_dir($root . $path) ? true : @mkdir($root . $path); if (!$ret) { // Is this a file instead of a directory? if (is_file($root . $path)) { @unlink($root . $path); $ret = @mkdir($root . $path); } if (!$ret) { $this->setError(AKText::sprintf('COULDNT_CREATE_DIR', $path)); return false; } } // Try to set new directory permissions to 0755 @chmod($root . $path, $perms); } return true; } public function chmod($file, $perms) { if (AKFactory::get('kickstart.setup.dryrun', '0')) { return true; } return @chmod($file, $perms); } public function unlink($file) { return @unlink($file); } public function rmdir($directory) { return @rmdir($directory); } public function rename($from, $to) { return @rename($from, $to); } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * FTP file writer */ class AKPostprocFTP extends AKAbstractPostproc { /** @var bool Should I use FTP over implicit SSL? */ public $useSSL = false; /** @var bool use Passive mode? */ public $passive = true; /** @var string FTP host name */ public $host = ''; /** @var int FTP port */ public $port = 21; /** @var string FTP user name */ public $user = ''; /** @var string FTP password */ public $pass = ''; /** @var string FTP initial directory */ public $dir = ''; /** @var resource The FTP handle */ private $handle = null; /** @var string The temporary directory where the data will be stored */ private $tempDir = ''; public function __construct() { parent::__construct(); $this->useSSL = AKFactory::get('kickstart.ftp.ssl', false); $this->passive = AKFactory::get('kickstart.ftp.passive', true); $this->host = AKFactory::get('kickstart.ftp.host', ''); $this->port = AKFactory::get('kickstart.ftp.port', 21); if (trim($this->port) == '') { $this->port = 21; } $this->user = AKFactory::get('kickstart.ftp.user', ''); $this->pass = AKFactory::get('kickstart.ftp.pass', ''); $this->dir = AKFactory::get('kickstart.ftp.dir', ''); $this->tempDir = AKFactory::get('kickstart.ftp.tempdir', ''); $connected = $this->connect(); if ($connected) { if (!empty($this->tempDir)) { $tempDir = rtrim($this->tempDir, '/\\') . '/'; $writable = $this->isDirWritable($tempDir); } else { $tempDir = ''; $writable = false; } if (!$writable) { // Default temporary directory is the current root $tempDir = KSROOTDIR; if (empty($tempDir)) { // Oh, we have no directory reported! $tempDir = '.'; } $absoluteDirToHere = $tempDir; $tempDir = rtrim(str_replace('\\', '/', $tempDir), '/'); if (!empty($tempDir)) { $tempDir .= '/'; } $this->tempDir = $tempDir; // Is this directory writable? $writable = $this->isDirWritable($tempDir); } if (!$writable) { // Nope. Let's try creating a temporary directory in the site's root. $tempDir = $absoluteDirToHere . '/kicktemp'; $trustMeIKnowWhatImDoing = 500 + 10 + 1; // working around overzealous scanners written by bozos $this->createDirRecursive($tempDir, $trustMeIKnowWhatImDoing); // Try making it writable... $this->fixPermissions($tempDir); $writable = $this->isDirWritable($tempDir); } // Was the new directory writable? if (!$writable) { // Let's see if the user has specified one $userdir = AKFactory::get('kickstart.ftp.tempdir', ''); if (!empty($userdir)) { // Is it an absolute or a relative directory? $absolute = false; $absolute = $absolute || (substr($userdir, 0, 1) == '/'); $absolute = $absolute || (substr($userdir, 1, 1) == ':'); $absolute = $absolute || (substr($userdir, 2, 1) == ':'); if (!$absolute) { // Make absolute $tempDir = $absoluteDirToHere . $userdir; } else { // it's already absolute $tempDir = $userdir; } // Does the directory exist? if (is_dir($tempDir)) { // Yeah. Is it writable? $writable = $this->isDirWritable($tempDir); } } } $this->tempDir = $tempDir; if (!$writable) { // No writable directory found!!! $this->setError(AKText::_('FTP_TEMPDIR_NOT_WRITABLE')); } else { AKFactory::set('kickstart.ftp.tempdir', $tempDir); $this->tempDir = $tempDir; } } } public function connect() { // Connect to server, using SSL if so required if ($this->useSSL) { $this->handle = @ftp_ssl_connect($this->host, $this->port); } else { $this->handle = @ftp_connect($this->host, $this->port); } if ($this->handle === false) { $this->setError(AKText::_('WRONG_FTP_HOST')); return false; } // Login if (!@ftp_login($this->handle, $this->user, $this->pass)) { $this->setError(AKText::_('WRONG_FTP_USER')); @ftp_close($this->handle); return false; } // Change to initial directory if (!@ftp_chdir($this->handle, $this->dir)) { $this->setError(AKText::_('WRONG_FTP_PATH1')); @ftp_close($this->handle); return false; } // Enable passive mode if the user requested it if ($this->passive) { @ftp_pasv($this->handle, true); } else { @ftp_pasv($this->handle, false); } // Try to download ourselves $testFilename = defined('KSSELFNAME') ? KSSELFNAME : basename(__FILE__); $tempHandle = fopen('php://temp', 'r+'); if (@ftp_fget($this->handle, $tempHandle, $testFilename, FTP_ASCII, 0) === false) { $this->setError(AKText::_('WRONG_FTP_PATH2')); @ftp_close($this->handle); fclose($tempHandle); return false; } fclose($tempHandle); return true; } private function isDirWritable($dir) { $fp = @fopen($dir . '/kickstart.dat', 'wb'); if ($fp === false) { return false; } else { @fclose($fp); unlink($dir . '/kickstart.dat'); return true; } } public function createDirRecursive($dirName, $perms) { // Strip absolute filesystem path to website's root $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { // UNIXize the paths $removePath = str_replace('\\', '/', $removePath); $dirName = str_replace('\\', '/', $dirName); // Make sure they both end in a slash $removePath = rtrim($removePath, '/\\') . '/'; $dirName = rtrim($dirName, '/\\') . '/'; // Process the path removal $left = substr($dirName, 0, strlen($removePath)); if ($left == $removePath) { $dirName = substr($dirName, strlen($removePath)); } } if (empty($dirName)) { $dirName = ''; } // 'cause the substr() above may return FALSE. $check = '/' . trim($this->dir, '/') . '/' . trim($dirName, '/'); if ($this->is_dir($check)) { return true; } $alldirs = explode('/', $dirName); $previousDir = '/' . trim($this->dir); foreach ($alldirs as $curdir) { $check = $previousDir . '/' . $curdir; if (!$this->is_dir($check)) { // Proactively try to delete a file by the same name @ftp_delete($this->handle, $check); if (@ftp_mkdir($this->handle, $check) === false) { // If we couldn't create the directory, attempt to fix the permissions in the PHP level and retry! $this->fixPermissions($removePath . $check); if (@ftp_mkdir($this->handle, $check) === false) { // Can we fall back to pure PHP mode, sire? if (!@mkdir($check)) { $this->setError(AKText::sprintf('FTP_CANT_CREATE_DIR', $check)); return false; } else { // Since the directory was built by PHP, change its permissions $trustMeIKnowWhatImDoing = 500 + 10 + 1; // working around overzealous scanners written by bozos @chmod($check, $trustMeIKnowWhatImDoing); return true; } } } @ftp_chmod($this->handle, $perms, $check); } $previousDir = $check; } return true; } private function is_dir($dir) { return @ftp_chdir($this->handle, $dir); } private function fixPermissions($path) { // Turn off error reporting if (!defined('KSDEBUG')) { $oldErrorReporting = @error_reporting(E_NONE); } // Get UNIX style paths $relPath = str_replace('\\', '/', $path); $basePath = rtrim(str_replace('\\', '/', KSROOTDIR), '/'); $basePath = rtrim($basePath, '/'); if (!empty($basePath)) { $basePath .= '/'; } // Remove the leading relative root if (substr($relPath, 0, strlen($basePath)) == $basePath) { $relPath = substr($relPath, strlen($basePath)); } $dirArray = explode('/', $relPath); $pathBuilt = rtrim($basePath, '/'); foreach ($dirArray as $dir) { if (empty($dir)) { continue; } $oldPath = $pathBuilt; $pathBuilt .= '/' . $dir; if (is_dir($oldPath . $dir)) { $trustMeIKnowWhatImDoing = 500 + 10 + 1; // working around overzealous scanners written by bozos @chmod($oldPath . $dir, $trustMeIKnowWhatImDoing); } else { $trustMeIKnowWhatImDoing = 500 + 10 + 1; // working around overzealous scanners written by bozos if (@chmod($oldPath . $dir, $trustMeIKnowWhatImDoing) === false) { @unlink($oldPath . $dir); } } } // Restore error reporting if (!defined('KSDEBUG')) { @error_reporting($oldErrorReporting); } } function __wakeup() { $this->connect(); } public function process() { if (is_null($this->tempFilename)) { // If an empty filename is passed, it means that we shouldn't do any post processing, i.e. // the entity was a directory or symlink return true; } $remotePath = dirname($this->filename); $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { $removePath = ltrim($removePath, "/"); $remotePath = ltrim($remotePath, "/"); $left = substr($remotePath, 0, strlen($removePath)); if ($left == $removePath) { $remotePath = substr($remotePath, strlen($removePath)); } } $absoluteFSPath = dirname($this->filename); $relativeFTPPath = trim($remotePath, '/'); $absoluteFTPPath = '/' . trim($this->dir, '/') . '/' . trim($remotePath, '/'); $onlyFilename = basename($this->filename); $remoteName = $absoluteFTPPath . '/' . $onlyFilename; $ret = @ftp_chdir($this->handle, $absoluteFTPPath); if ($ret === false) { $ret = $this->createDirRecursive($absoluteFSPath, 0755); if ($ret === false) { $this->setError(AKText::sprintf('FTP_COULDNT_UPLOAD', $this->filename)); return false; } $ret = @ftp_chdir($this->handle, $absoluteFTPPath); if ($ret === false) { $this->setError(AKText::sprintf('FTP_COULDNT_UPLOAD', $this->filename)); return false; } } $ret = @ftp_put($this->handle, $remoteName, $this->tempFilename, FTP_BINARY); if ($ret === false) { // If we couldn't create the file, attempt to fix the permissions in the PHP level and retry! $this->fixPermissions($this->filename); $this->unlink($this->filename); $fp = @fopen($this->tempFilename, 'rb'); if ($fp !== false) { $ret = @ftp_fput($this->handle, $remoteName, $fp, FTP_BINARY); @fclose($fp); } else { $ret = false; } } @unlink($this->tempFilename); if ($ret === false) { $this->setError(AKText::sprintf('FTP_COULDNT_UPLOAD', $this->filename)); return false; } $restorePerms = AKFactory::get('kickstart.setup.restoreperms', false); if ($restorePerms) { @ftp_chmod($this->_handle, $this->perms, $remoteName); } else { @ftp_chmod($this->_handle, 0644, $remoteName); } return true; } /* * Tries to fix directory/file permissions in the PHP level, so that * the FTP operation doesn't fail. * @param $path string The full path to a directory or file */ public function unlink($file) { $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { $left = substr($file, 0, strlen($removePath)); if ($left == $removePath) { $file = substr($file, strlen($removePath)); } } $check = '/' . trim($this->dir, '/') . '/' . trim($file, '/'); return @ftp_delete($this->handle, $check); } public function processFilename($filename, $perms = 0755) { // Catch some error conditions... if ($this->getError()) { return false; } // If a null filename is passed, it means that we shouldn't do any post processing, i.e. // the entity was a directory or symlink if (is_null($filename)) { $this->filename = null; $this->tempFilename = null; return null; } // Strip absolute filesystem path to website's root $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { $left = substr($filename, 0, strlen($removePath)); if ($left == $removePath) { $filename = substr($filename, strlen($removePath)); } } // Trim slash on the left $filename = ltrim($filename, '/'); $this->filename = $filename; $this->tempFilename = tempnam($this->tempDir, 'kickstart-'); $this->perms = $perms; if (empty($this->tempFilename)) { // Oops! Let's try something different $this->tempFilename = $this->tempDir . '/kickstart-' . time() . '.dat'; } return $this->tempFilename; } public function close() { @ftp_close($this->handle); } public function chmod($file, $perms) { return @ftp_chmod($this->handle, $perms, $file); } public function rmdir($directory) { $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { $left = substr($directory, 0, strlen($removePath)); if ($left == $removePath) { $directory = substr($directory, strlen($removePath)); } } $check = '/' . trim($this->dir, '/') . '/' . trim($directory, '/'); return @ftp_rmdir($this->handle, $check); } public function rename($from, $to) { $originalFrom = $from; $originalTo = $to; $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { $left = substr($from, 0, strlen($removePath)); if ($left == $removePath) { $from = substr($from, strlen($removePath)); } } $from = '/' . trim($this->dir, '/') . '/' . trim($from, '/'); if (!empty($removePath)) { $left = substr($to, 0, strlen($removePath)); if ($left == $removePath) { $to = substr($to, strlen($removePath)); } } $to = '/' . trim($this->dir, '/') . '/' . trim($to, '/'); $result = @ftp_rename($this->handle, $from, $to); if ($result !== true) { return @rename($from, $to); } else { return true; } } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * FTP file writer */ class AKPostprocSFTP extends AKAbstractPostproc { /** @var bool Should I use FTP over implicit SSL? */ public $useSSL = false; /** @var bool use Passive mode? */ public $passive = true; /** @var string FTP host name */ public $host = ''; /** @var int FTP port */ public $port = 21; /** @var string FTP user name */ public $user = ''; /** @var string FTP password */ public $pass = ''; /** @var string FTP initial directory */ public $dir = ''; /** @var resource SFTP resource handle */ private $handle = null; /** @var resource SSH2 connection resource handle */ private $_connection = null; /** @var string Current remote directory, including the remote directory string */ private $_currentdir; /** @var string The temporary directory where the data will be stored */ private $tempDir = ''; public function __construct() { parent::__construct(); $this->host = AKFactory::get('kickstart.ftp.host', ''); $this->port = AKFactory::get('kickstart.ftp.port', 22); if (trim($this->port) == '') { $this->port = 22; } $this->user = AKFactory::get('kickstart.ftp.user', ''); $this->pass = AKFactory::get('kickstart.ftp.pass', ''); $this->dir = AKFactory::get('kickstart.ftp.dir', ''); $this->tempDir = AKFactory::get('kickstart.ftp.tempdir', ''); $connected = $this->connect(); if ($connected) { if (!empty($this->tempDir)) { $tempDir = rtrim($this->tempDir, '/\\') . '/'; $writable = $this->isDirWritable($tempDir); } else { $tempDir = ''; $writable = false; } if (!$writable) { // Default temporary directory is the current root $tempDir = KSROOTDIR; if (empty($tempDir)) { // Oh, we have no directory reported! $tempDir = '.'; } $absoluteDirToHere = $tempDir; $tempDir = rtrim(str_replace('\\', '/', $tempDir), '/'); if (!empty($tempDir)) { $tempDir .= '/'; } $this->tempDir = $tempDir; // Is this directory writable? $writable = $this->isDirWritable($tempDir); } if (!$writable) { // Nope. Let's try creating a temporary directory in the site's root. $tempDir = $absoluteDirToHere . '/kicktemp'; $trustMeIKnowWhatImDoing = 500 + 10 + 1; // working around overzealous scanners written by bozos $this->createDirRecursive($tempDir, $trustMeIKnowWhatImDoing); // Try making it writable... $this->fixPermissions($tempDir); $writable = $this->isDirWritable($tempDir); } // Was the new directory writable? if (!$writable) { // Let's see if the user has specified one $userdir = AKFactory::get('kickstart.ftp.tempdir', ''); if (!empty($userdir)) { // Is it an absolute or a relative directory? $absolute = false; $absolute = $absolute || (substr($userdir, 0, 1) == '/'); $absolute = $absolute || (substr($userdir, 1, 1) == ':'); $absolute = $absolute || (substr($userdir, 2, 1) == ':'); if (!$absolute) { // Make absolute $tempDir = $absoluteDirToHere . $userdir; } else { // it's already absolute $tempDir = $userdir; } // Does the directory exist? if (is_dir($tempDir)) { // Yeah. Is it writable? $writable = $this->isDirWritable($tempDir); } } } $this->tempDir = $tempDir; if (!$writable) { // No writable directory found!!! $this->setError(AKText::_('SFTP_TEMPDIR_NOT_WRITABLE')); } else { AKFactory::set('kickstart.ftp.tempdir', $tempDir); $this->tempDir = $tempDir; } } } public function connect() { $this->_connection = false; if (!function_exists('ssh2_connect')) { $this->setError(AKText::_('SFTP_NO_SSH2')); return false; } $this->_connection = @ssh2_connect($this->host, $this->port); if (!@ssh2_auth_password($this->_connection, $this->user, $this->pass)) { $this->setError(AKText::_('SFTP_WRONG_USER')); $this->_connection = false; return false; } $this->handle = @ssh2_sftp($this->_connection); // I must have an absolute directory if (!$this->dir) { $this->setError(AKText::_('SFTP_WRONG_STARTING_DIR')); return false; } // Change to initial directory if (!$this->sftp_chdir('/')) { $this->setError(AKText::_('SFTP_WRONG_STARTING_DIR')); unset($this->_connection); unset($this->handle); return false; } // Try to download ourselves $testFilename = defined('KSSELFNAME') ? KSSELFNAME : basename(__FILE__); $basePath = '/' . trim($this->dir, '/'); if (@fopen("ssh2.sftp://{$this->handle}$basePath/$testFilename", 'r+') === false) { $this->setError(AKText::_('SFTP_WRONG_STARTING_DIR')); unset($this->_connection); unset($this->handle); return false; } return true; } /** * Changes to the requested directory in the remote server. You give only the * path relative to the initial directory and it does all the rest by itself, * including doing nothing if the remote directory is the one we want. * * @param string $dir The (realtive) remote directory * * @return bool True if successful, false otherwise. */ private function sftp_chdir($dir) { // Strip absolute filesystem path to website's root $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { // UNIXize the paths $removePath = str_replace('\\', '/', $removePath); $dir = str_replace('\\', '/', $dir); // Make sure they both end in a slash $removePath = rtrim($removePath, '/\\') . '/'; $dir = rtrim($dir, '/\\') . '/'; // Process the path removal $left = substr($dir, 0, strlen($removePath)); if ($left == $removePath) { $dir = substr($dir, strlen($removePath)); } } if (empty($dir)) { // Because the substr() above may return FALSE. $dir = ''; } // Calculate "real" (absolute) SFTP path $realdir = substr($this->dir, -1) == '/' ? substr($this->dir, 0, strlen($this->dir) - 1) : $this->dir; $realdir .= '/' . $dir; $realdir = substr($realdir, 0, 1) == '/' ? $realdir : '/' . $realdir; if ($this->_currentdir == $realdir) { // Already there, do nothing return true; } $result = @ssh2_sftp_stat($this->handle, $realdir); if ($result === false) { return false; } else { // Update the private "current remote directory" variable $this->_currentdir = $realdir; return true; } } private function isDirWritable($dir) { if (@fopen("ssh2.sftp://{$this->handle}$dir/kickstart.dat", 'wb') === false) { return false; } else { @ssh2_sftp_unlink($this->handle, $dir . '/kickstart.dat'); return true; } } public function createDirRecursive($dirName, $perms) { // Strip absolute filesystem path to website's root $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { // UNIXize the paths $removePath = str_replace('\\', '/', $removePath); $dirName = str_replace('\\', '/', $dirName); // Make sure they both end in a slash $removePath = rtrim($removePath, '/\\') . '/'; $dirName = rtrim($dirName, '/\\') . '/'; // Process the path removal $left = substr($dirName, 0, strlen($removePath)); if ($left == $removePath) { $dirName = substr($dirName, strlen($removePath)); } } if (empty($dirName)) { $dirName = ''; } // 'cause the substr() above may return FALSE. $check = '/' . trim($this->dir, '/ ') . '/' . trim($dirName, '/'); if ($this->is_dir($check)) { return true; } $alldirs = explode('/', $dirName); $previousDir = '/' . trim($this->dir, '/ '); foreach ($alldirs as $curdir) { if (!$curdir) { continue; } $check = $previousDir . '/' . $curdir; if (!$this->is_dir($check)) { // Proactively try to delete a file by the same name @ssh2_sftp_unlink($this->handle, $check); if (@ssh2_sftp_mkdir($this->handle, $check) === false) { // If we couldn't create the directory, attempt to fix the permissions in the PHP level and retry! $this->fixPermissions($check); if (@ssh2_sftp_mkdir($this->handle, $check) === false) { // Can we fall back to pure PHP mode, sire? if (!@mkdir($check)) { $this->setError(AKText::sprintf('FTP_CANT_CREATE_DIR', $check)); return false; } else { // Since the directory was built by PHP, change its permissions $trustMeIKnowWhatImDoing = 500 + 10 + 1; // working around overzealous scanners written by bozos @chmod($check, $trustMeIKnowWhatImDoing); return true; } } } @ssh2_sftp_chmod($this->handle, $check, $perms); } $previousDir = $check; } return true; } private function is_dir($dir) { return $this->sftp_chdir($dir); } private function fixPermissions($path) { // Turn off error reporting if (!defined('KSDEBUG')) { $oldErrorReporting = @error_reporting(E_NONE); } // Get UNIX style paths $relPath = str_replace('\\', '/', $path); $basePath = rtrim(str_replace('\\', '/', KSROOTDIR), '/'); $basePath = rtrim($basePath, '/'); if (!empty($basePath)) { $basePath .= '/'; } // Remove the leading relative root if (substr($relPath, 0, strlen($basePath)) == $basePath) { $relPath = substr($relPath, strlen($basePath)); } $dirArray = explode('/', $relPath); $pathBuilt = rtrim($basePath, '/'); foreach ($dirArray as $dir) { if (empty($dir)) { continue; } $oldPath = $pathBuilt; $pathBuilt .= '/' . $dir; if (is_dir($oldPath . '/' . $dir)) { $trustMeIKnowWhatImDoing = 500 + 10 + 1; // working around overzealous scanners written by bozos @chmod($oldPath . '/' . $dir, $trustMeIKnowWhatImDoing); } else { $trustMeIKnowWhatImDoing = 500 + 10 + 1; // working around overzealous scanners written by bozos if (@chmod($oldPath . '/' . $dir, $trustMeIKnowWhatImDoing) === false) { @unlink($oldPath . $dir); } } } // Restore error reporting if (!defined('KSDEBUG')) { @error_reporting($oldErrorReporting); } } function __wakeup() { $this->connect(); } /* * Tries to fix directory/file permissions in the PHP level, so that * the FTP operation doesn't fail. * @param $path string The full path to a directory or file */ public function process() { if (is_null($this->tempFilename)) { // If an empty filename is passed, it means that we shouldn't do any post processing, i.e. // the entity was a directory or symlink return true; } $remotePath = dirname($this->filename); $absoluteFSPath = dirname($this->filename); $absoluteFTPPath = '/' . trim($this->dir, '/') . '/' . trim($remotePath, '/'); $onlyFilename = basename($this->filename); $remoteName = $absoluteFTPPath . '/' . $onlyFilename; $ret = $this->sftp_chdir($absoluteFTPPath); if ($ret === false) { $ret = $this->createDirRecursive($absoluteFSPath, 0755); if ($ret === false) { $this->setError(AKText::sprintf('SFTP_COULDNT_UPLOAD', $this->filename)); return false; } $ret = $this->sftp_chdir($absoluteFTPPath); if ($ret === false) { $this->setError(AKText::sprintf('SFTP_COULDNT_UPLOAD', $this->filename)); return false; } } // Create the file $ret = $this->write($this->tempFilename, $remoteName); // If I got a -1 it means that I wasn't able to open the file, so I have to stop here if ($ret === -1) { $this->setError(AKText::sprintf('SFTP_COULDNT_UPLOAD', $this->filename)); return false; } if ($ret === false) { // If we couldn't create the file, attempt to fix the permissions in the PHP level and retry! $this->fixPermissions($this->filename); $this->unlink($this->filename); $ret = $this->write($this->tempFilename, $remoteName); } @unlink($this->tempFilename); if ($ret === false) { $this->setError(AKText::sprintf('SFTP_COULDNT_UPLOAD', $this->filename)); return false; } $restorePerms = AKFactory::get('kickstart.setup.restoreperms', false); if ($restorePerms) { $this->chmod($remoteName, $this->perms); } else { $this->chmod($remoteName, 0644); } return true; } private function write($local, $remote) { $fp = @fopen("ssh2.sftp://{$this->handle}$remote", 'w'); $localfp = @fopen($local, 'rb'); if ($fp === false) { return -1; } if ($localfp === false) { @fclose($fp); return -1; } $res = true; while (!feof($localfp) && ($res !== false)) { $buffer = @fread($localfp, 65567); $res = @fwrite($fp, $buffer); } @fclose($fp); @fclose($localfp); return $res; } public function unlink($file) { $check = '/' . trim($this->dir, '/') . '/' . trim($file, '/'); return @ssh2_sftp_unlink($this->handle, $check); } public function chmod($file, $perms) { return @ssh2_sftp_chmod($this->handle, $file, $perms); } public function processFilename($filename, $perms = 0755) { // Catch some error conditions... if ($this->getError()) { return false; } // If a null filename is passed, it means that we shouldn't do any post processing, i.e. // the entity was a directory or symlink if (is_null($filename)) { $this->filename = null; $this->tempFilename = null; return null; } // Strip absolute filesystem path to website's root $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { $left = substr($filename, 0, strlen($removePath)); if ($left == $removePath) { $filename = substr($filename, strlen($removePath)); } } // Trim slash on the left $filename = ltrim($filename, '/'); $this->filename = $filename; $this->tempFilename = tempnam($this->tempDir, 'kickstart-'); $this->perms = $perms; if (empty($this->tempFilename)) { // Oops! Let's try something different $this->tempFilename = $this->tempDir . '/kickstart-' . time() . '.dat'; } return $this->tempFilename; } public function close() { unset($this->_connection); unset($this->handle); } public function rmdir($directory) { $check = '/' . trim($this->dir, '/') . '/' . trim($directory, '/'); return @ssh2_sftp_rmdir($this->handle, $check); } public function rename($from, $to) { $from = '/' . trim($this->dir, '/') . '/' . trim($from, '/'); $to = '/' . trim($this->dir, '/') . '/' . trim($to, '/'); $result = @ssh2_sftp_rename($this->handle, $from, $to); if ($result !== true) { return @rename($from, $to); } else { return true; } } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * Hybrid direct / FTP mode file writer */ class AKPostprocHybrid extends AKAbstractPostproc { /** @var bool Should I use the FTP layer? */ public $useFTP = false; /** @var bool Should I use FTP over implicit SSL? */ public $useSSL = false; /** @var bool use Passive mode? */ public $passive = true; /** @var string FTP host name */ public $host = ''; /** @var int FTP port */ public $port = 21; /** @var string FTP user name */ public $user = ''; /** @var string FTP password */ public $pass = ''; /** @var string FTP initial directory */ public $dir = ''; /** @var resource The FTP handle */ private $handle = null; /** @var string The temporary directory where the data will be stored */ private $tempDir = ''; /** @var null The FTP connection handle */ private $_handle = null; /** * Public constructor. Tries to connect to the FTP server. */ public function __construct() { parent::__construct(); $this->useFTP = true; $this->useSSL = AKFactory::get('kickstart.ftp.ssl', false); $this->passive = AKFactory::get('kickstart.ftp.passive', true); $this->host = AKFactory::get('kickstart.ftp.host', ''); $this->port = AKFactory::get('kickstart.ftp.port', 21); $this->user = AKFactory::get('kickstart.ftp.user', ''); $this->pass = AKFactory::get('kickstart.ftp.pass', ''); $this->dir = AKFactory::get('kickstart.ftp.dir', ''); $this->tempDir = AKFactory::get('kickstart.ftp.tempdir', ''); if (trim($this->port) == '') { $this->port = 21; } // If FTP is not configured, skip it altogether if (empty($this->host) || empty($this->user) || empty($this->pass)) { $this->useFTP = false; } // Try to connect to the FTP server $connected = $this->connect(); // If the connection fails, skip FTP altogether if (!$connected) { $this->useFTP = false; } if ($connected) { if (!empty($this->tempDir)) { $tempDir = rtrim($this->tempDir, '/\\') . '/'; $writable = $this->isDirWritable($tempDir); } else { $tempDir = ''; $writable = false; } if (!$writable) { // Default temporary directory is the current root $tempDir = KSROOTDIR; if (empty($tempDir)) { // Oh, we have no directory reported! $tempDir = '.'; } $absoluteDirToHere = $tempDir; $tempDir = rtrim(str_replace('\\', '/', $tempDir), '/'); if (!empty($tempDir)) { $tempDir .= '/'; } $this->tempDir = $tempDir; // Is this directory writable? $writable = $this->isDirWritable($tempDir); } if (!$writable) { // Nope. Let's try creating a temporary directory in the site's root. $tempDir = $absoluteDirToHere . '/kicktemp'; $trustMeIKnowWhatImDoing = 500 + 10 + 1; // working around overzealous scanners written by bozos $this->createDirRecursive($tempDir, $trustMeIKnowWhatImDoing); // Try making it writable... $this->fixPermissions($tempDir); $writable = $this->isDirWritable($tempDir); } // Was the new directory writable? if (!$writable) { // Let's see if the user has specified one $userdir = AKFactory::get('kickstart.ftp.tempdir', ''); if (!empty($userdir)) { // Is it an absolute or a relative directory? $absolute = false; $absolute = $absolute || (substr($userdir, 0, 1) == '/'); $absolute = $absolute || (substr($userdir, 1, 1) == ':'); $absolute = $absolute || (substr($userdir, 2, 1) == ':'); if (!$absolute) { // Make absolute $tempDir = $absoluteDirToHere . $userdir; } else { // it's already absolute $tempDir = $userdir; } // Does the directory exist? if (is_dir($tempDir)) { // Yeah. Is it writable? $writable = $this->isDirWritable($tempDir); } } } $this->tempDir = $tempDir; if (!$writable) { // No writable directory found!!! $this->setError(AKText::_('FTP_TEMPDIR_NOT_WRITABLE')); } else { AKFactory::set('kickstart.ftp.tempdir', $tempDir); $this->tempDir = $tempDir; } } } /** * Tries to connect to the FTP server * * @return bool */ public function connect() { if (!$this->useFTP) { return false; } // Connect to server, using SSL if so required if ($this->useSSL) { $this->handle = @ftp_ssl_connect($this->host, $this->port); } else { $this->handle = @ftp_connect($this->host, $this->port); } if ($this->handle === false) { $this->setError(AKText::_('WRONG_FTP_HOST')); return false; } // Login if (!@ftp_login($this->handle, $this->user, $this->pass)) { $this->setError(AKText::_('WRONG_FTP_USER')); @ftp_close($this->handle); return false; } // Change to initial directory if (!@ftp_chdir($this->handle, $this->dir)) { $this->setError(AKText::_('WRONG_FTP_PATH1')); @ftp_close($this->handle); return false; } // Enable passive mode if the user requested it if ($this->passive) { @ftp_pasv($this->handle, true); } else { @ftp_pasv($this->handle, false); } // Try to download ourselves $testFilename = defined('KSSELFNAME') ? KSSELFNAME : basename(__FILE__); $tempHandle = fopen('php://temp', 'r+'); if (@ftp_fget($this->handle, $tempHandle, $testFilename, FTP_ASCII, 0) === false) { $this->setError(AKText::_('WRONG_FTP_PATH2')); @ftp_close($this->handle); fclose($tempHandle); return false; } fclose($tempHandle); return true; } /** * Is the directory writeable? * * @param string $dir The directory ti check * * @return bool */ private function isDirWritable($dir) { $fp = @fopen($dir . '/kickstart.dat', 'wb'); if ($fp === false) { return false; } @fclose($fp); unlink($dir . '/kickstart.dat'); return true; } /** * Create a directory, recursively * * @param string $dirName The directory to create * @param int $perms The permissions to give to the directory * * @return bool */ public function createDirRecursive($dirName, $perms) { // Strip absolute filesystem path to website's root $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { // UNIXize the paths $removePath = str_replace('\\', '/', $removePath); $dirName = str_replace('\\', '/', $dirName); // Make sure they both end in a slash $removePath = rtrim($removePath, '/\\') . '/'; $dirName = rtrim($dirName, '/\\') . '/'; // Process the path removal $left = substr($dirName, 0, strlen($removePath)); if ($left == $removePath) { $dirName = substr($dirName, strlen($removePath)); } } // 'cause the substr() above may return FALSE. if (empty($dirName)) { $dirName = ''; } $check = '/' . trim($this->dir, '/') . '/' . trim($dirName, '/'); $checkFS = $removePath . trim($dirName, '/'); if ($this->is_dir($check)) { return true; } $alldirs = explode('/', $dirName); $previousDir = '/' . trim($this->dir); $previousDirFS = rtrim($removePath, '/\\'); foreach ($alldirs as $curdir) { $check = $previousDir . '/' . $curdir; $checkFS = $previousDirFS . '/' . $curdir; if (!is_dir($checkFS) && !$this->is_dir($check)) { // Proactively try to delete a file by the same name if (!@unlink($checkFS) && $this->useFTP) { @ftp_delete($this->handle, $check); } $createdDir = @mkdir($checkFS, 0755); if (!$createdDir && $this->useFTP) { $createdDir = @ftp_mkdir($this->handle, $check); } if ($createdDir === false) { // If we couldn't create the directory, attempt to fix the permissions in the PHP level and retry! $this->fixPermissions($checkFS); $createdDir = @mkdir($checkFS, 0755); if (!$createdDir && $this->useFTP) { $createdDir = @ftp_mkdir($this->handle, $check); } if ($createdDir === false) { $this->setError(AKText::sprintf('FTP_CANT_CREATE_DIR', $check)); return false; } } if (!@chmod($checkFS, $perms) && $this->useFTP) { @ftp_chmod($this->handle, $perms, $check); } } $previousDir = $check; $previousDirFS = $checkFS; } return true; } private function is_dir($dir) { if ($this->useFTP) { return @ftp_chdir($this->handle, $dir); } return false; } /** * Tries to fix directory/file permissions in the PHP level, so that * the FTP operation doesn't fail. * * @param $path string The full path to a directory or file */ private function fixPermissions($path) { // Turn off error reporting if (!defined('KSDEBUG')) { $oldErrorReporting = error_reporting(0); } // Get UNIX style paths $relPath = str_replace('\\', '/', $path); $basePath = rtrim(str_replace('\\', '/', KSROOTDIR), '/'); $basePath = rtrim($basePath, '/'); if (!empty($basePath)) { $basePath .= '/'; } // Remove the leading relative root if (substr($relPath, 0, strlen($basePath)) == $basePath) { $relPath = substr($relPath, strlen($basePath)); } $dirArray = explode('/', $relPath); $pathBuilt = rtrim($basePath, '/'); foreach ($dirArray as $dir) { if (empty($dir)) { continue; } $oldPath = $pathBuilt; $pathBuilt .= '/' . $dir; if (is_dir($oldPath . $dir)) { $trustMeIKnowWhatImDoing = 500 + 10 + 1; // working around overzealous scanners written by bozos @chmod($oldPath . $dir, $trustMeIKnowWhatImDoing); } else { $trustMeIKnowWhatImDoing = 500 + 10 + 1; // working around overzealous scanners written by bozos if (@chmod($oldPath . $dir, $trustMeIKnowWhatImDoing) === false) { @unlink($oldPath . $dir); } } } // Restore error reporting if (!defined('KSDEBUG')) { @error_reporting($oldErrorReporting); } } /** * Called after unserialisation, tries to reconnect to FTP */ function __wakeup() { if ($this->useFTP) { $this->connect(); } } function __destruct() { if (!$this->useFTP) { @ftp_close($this->handle); } } /** * Post-process an extracted file, using FTP or direct file writes to move it * * @return bool */ public function process() { if (is_null($this->tempFilename)) { // If an empty filename is passed, it means that we shouldn't do any post processing, i.e. // the entity was a directory or symlink return true; } $remotePath = dirname($this->filename); $removePath = AKFactory::get('kickstart.setup.destdir', ''); $root = rtrim($removePath, '/\\'); if (!empty($removePath)) { $removePath = ltrim($removePath, "/"); $remotePath = ltrim($remotePath, "/"); $left = substr($remotePath, 0, strlen($removePath)); if ($left == $removePath) { $remotePath = substr($remotePath, strlen($removePath)); } } $absoluteFSPath = dirname($this->filename); $relativeFTPPath = trim($remotePath, '/'); $absoluteFTPPath = '/' . trim($this->dir, '/') . '/' . trim($remotePath, '/'); $onlyFilename = basename($this->filename); $remoteName = $absoluteFTPPath . '/' . $onlyFilename; // Does the directory exist? if (!is_dir($root . '/' . $absoluteFSPath)) { $ret = $this->createDirRecursive($absoluteFSPath, 0755); if (($ret === false) && ($this->useFTP)) { $ret = @ftp_chdir($this->handle, $absoluteFTPPath); } if ($ret === false) { $this->setError(AKText::sprintf('FTP_COULDNT_UPLOAD', $this->filename)); return false; } } if ($this->useFTP) { $ret = @ftp_chdir($this->handle, $absoluteFTPPath); } // Try copying directly $ret = @copy($this->tempFilename, $root . '/' . $this->filename); if ($ret === false) { $this->fixPermissions($this->filename); $this->unlink($this->filename); $ret = @copy($this->tempFilename, $root . '/' . $this->filename); } if ($this->useFTP && ($ret === false)) { $ret = @ftp_put($this->handle, $remoteName, $this->tempFilename, FTP_BINARY); if ($ret === false) { // If we couldn't create the file, attempt to fix the permissions in the PHP level and retry! $this->fixPermissions($this->filename); $this->unlink($this->filename); $fp = @fopen($this->tempFilename, 'rb'); if ($fp !== false) { $ret = @ftp_fput($this->handle, $remoteName, $fp, FTP_BINARY); @fclose($fp); } else { $ret = false; } } } @unlink($this->tempFilename); if ($ret === false) { $this->setError(AKText::sprintf('FTP_COULDNT_UPLOAD', $this->filename)); return false; } $restorePerms = AKFactory::get('kickstart.setup.restoreperms', false); $perms = $restorePerms ? $this->perms : 0644; $ret = @chmod($root . '/' . $this->filename, $perms); if ($this->useFTP && ($ret === false)) { @ftp_chmod($this->_handle, $perms, $remoteName); } return true; } public function unlink($file) { $ret = @unlink($file); if (!$ret && $this->useFTP) { $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { $left = substr($file, 0, strlen($removePath)); if ($left == $removePath) { $file = substr($file, strlen($removePath)); } } $check = '/' . trim($this->dir, '/') . '/' . trim($file, '/'); $ret = @ftp_delete($this->handle, $check); } return $ret; } /** * Create a temporary filename * * @param string $filename The original filename * @param int $perms The file permissions * * @return string */ public function processFilename($filename, $perms = 0755) { // Catch some error conditions... if ($this->getError()) { return false; } // If a null filename is passed, it means that we shouldn't do any post processing, i.e. // the entity was a directory or symlink if (is_null($filename)) { $this->filename = null; $this->tempFilename = null; return null; } // Strip absolute filesystem path to website's root $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { $left = substr($filename, 0, strlen($removePath)); if ($left == $removePath) { $filename = substr($filename, strlen($removePath)); } } // Trim slash on the left $filename = ltrim($filename, '/'); $this->filename = $filename; $this->tempFilename = tempnam($this->tempDir, 'kickstart-'); $this->perms = $perms; if (empty($this->tempFilename)) { // Oops! Let's try something different $this->tempFilename = $this->tempDir . '/kickstart-' . time() . '.dat'; } return $this->tempFilename; } /** * Closes the FTP connection */ public function close() { if (!$this->useFTP) { @ftp_close($this->handle); } } public function chmod($file, $perms) { if (AKFactory::get('kickstart.setup.dryrun', '0')) { return true; } $ret = @chmod($file, $perms); if (!$ret && $this->useFTP) { // Strip absolute filesystem path to website's root $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { $left = substr($file, 0, strlen($removePath)); if ($left == $removePath) { $file = substr($file, strlen($removePath)); } } // Trim slash on the left $file = ltrim($file, '/'); $ret = @ftp_chmod($this->handle, $perms, $file); } return $ret; } public function rmdir($directory) { $ret = @rmdir($directory); if (!$ret && $this->useFTP) { $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { $left = substr($directory, 0, strlen($removePath)); if ($left == $removePath) { $directory = substr($directory, strlen($removePath)); } } $check = '/' . trim($this->dir, '/') . '/' . trim($directory, '/'); $ret = @ftp_rmdir($this->handle, $check); } return $ret; } public function rename($from, $to) { $ret = @rename($from, $to); if (!$ret && $this->useFTP) { $originalFrom = $from; $originalTo = $to; $removePath = AKFactory::get('kickstart.setup.destdir', ''); if (!empty($removePath)) { $left = substr($from, 0, strlen($removePath)); if ($left == $removePath) { $from = substr($from, strlen($removePath)); } } $from = '/' . trim($this->dir, '/') . '/' . trim($from, '/'); if (!empty($removePath)) { $left = substr($to, 0, strlen($removePath)); if ($left == $removePath) { $to = substr($to, strlen($removePath)); } } $to = '/' . trim($this->dir, '/') . '/' . trim($to, '/'); $ret = @ftp_rename($this->handle, $from, $to); } return $ret; } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * JPA archive extraction class */ class AKUnarchiverJPA extends AKAbstractUnarchiver { protected $archiveHeaderData = array(); protected function readArchiveHeader() { debugMsg('Preparing to read archive header'); // Initialize header data array $this->archiveHeaderData = new stdClass(); // Open the first part debugMsg('Opening the first part'); $this->nextFile(); // Fail for unreadable files if ($this->fp === false) { debugMsg('Could not open the first part'); return false; } // Read the signature $sig = fread($this->fp, 3); if ($sig != 'JPA') { // Not a JPA file debugMsg('Invalid archive signature'); $this->setError(AKText::_('ERR_NOT_A_JPA_FILE')); return false; } // Read and parse header length $header_length_array = unpack('v', fread($this->fp, 2)); $header_length = $header_length_array[1]; // Read and parse the known portion of header data (14 bytes) $bin_data = fread($this->fp, 14); $header_data = unpack('Cmajor/Cminor/Vcount/Vuncsize/Vcsize', $bin_data); // Load any remaining header data (forward compatibility) $rest_length = $header_length - 19; if ($rest_length > 0) { $junk = fread($this->fp, $rest_length); } else { $junk = ''; } // Temporary array with all the data we read $temp = array( 'signature' => $sig, 'length' => $header_length, 'major' => $header_data['major'], 'minor' => $header_data['minor'], 'filecount' => $header_data['count'], 'uncompressedsize' => $header_data['uncsize'], 'compressedsize' => $header_data['csize'], 'unknowndata' => $junk ); // Array-to-object conversion foreach ($temp as $key => $value) { $this->archiveHeaderData->{$key} = $value; } debugMsg('Header data:'); debugMsg('Length : ' . $header_length); debugMsg('Major : ' . $header_data['major']); debugMsg('Minor : ' . $header_data['minor']); debugMsg('File count : ' . $header_data['count']); debugMsg('Uncompressed size : ' . $header_data['uncsize']); debugMsg('Compressed size : ' . $header_data['csize']); $this->currentPartOffset = @ftell($this->fp); $this->dataReadLength = 0; return true; } /** * Concrete classes must use this method to read the file header * * @return bool True if reading the file was successful, false if an error occurred or we reached end of archive */ protected function readFileHeader() { // If the current part is over, proceed to the next part please if ($this->isEOF(true)) { debugMsg('Archive part EOF; moving to next file'); $this->nextFile(); } $this->currentPartOffset = ftell($this->fp); debugMsg("Reading file signature; part {$this->currentPartNumber}, offset {$this->currentPartOffset}"); // Get and decode Entity Description Block $signature = fread($this->fp, 3); $this->fileHeader = new stdClass(); $this->fileHeader->timestamp = 0; // Check signature if ($signature != 'JPF') { if ($this->isEOF(true)) { // This file is finished; make sure it's the last one $this->nextFile(); if (!$this->isEOF(false)) { debugMsg('Invalid file signature before end of archive encountered'); $this->setError(AKText::sprintf('INVALID_FILE_HEADER', $this->currentPartNumber, $this->currentPartOffset)); return false; } // We're just finished return false; } else { $screwed = true; if (AKFactory::get('kickstart.setup.ignoreerrors', false)) { debugMsg('Invalid file block signature; launching heuristic file block signature scanner'); $screwed = !$this->heuristicFileHeaderLocator(); if (!$screwed) { $signature = 'JPF'; } else { debugMsg('Heuristics failed. Brace yourself for the imminent crash.'); } } if ($screwed) { debugMsg('Invalid file block signature'); // This is not a file block! The archive is corrupt. $this->setError(AKText::sprintf('INVALID_FILE_HEADER', $this->currentPartNumber, $this->currentPartOffset)); return false; } } } // This a JPA Entity Block. Process the header. $isBannedFile = false; // Read length of EDB and of the Entity Path Data $length_array = unpack('vblocksize/vpathsize', fread($this->fp, 4)); // Read the path data if ($length_array['pathsize'] > 0) { $file = fread($this->fp, $length_array['pathsize']); } else { $file = ''; } // Handle file renaming $isRenamed = false; if (is_array($this->renameFiles) && (count($this->renameFiles) > 0)) { if (array_key_exists($file, $this->renameFiles)) { $file = $this->renameFiles[$file]; $isRenamed = true; } } // Handle directory renaming $isDirRenamed = false; if (is_array($this->renameDirs) && (count($this->renameDirs) > 0)) { if (array_key_exists(dirname($file), $this->renameDirs)) { $file = rtrim($this->renameDirs[dirname($file)], '/') . '/' . basename($file); $isRenamed = true; $isDirRenamed = true; } } // Read and parse the known data portion $bin_data = fread($this->fp, 14); $header_data = unpack('Ctype/Ccompression/Vcompsize/Vuncompsize/Vperms', $bin_data); // Read any unknown data $restBytes = $length_array['blocksize'] - (21 + $length_array['pathsize']); if ($restBytes > 0) { // Start reading the extra fields while ($restBytes >= 4) { $extra_header_data = fread($this->fp, 4); $extra_header = unpack('vsignature/vlength', $extra_header_data); $restBytes -= 4; $extra_header['length'] -= 4; switch ($extra_header['signature']) { case 256: // File modified timestamp if ($extra_header['length'] > 0) { $bindata = fread($this->fp, $extra_header['length']); $restBytes -= $extra_header['length']; $timestamps = unpack('Vmodified', substr($bindata, 0, 4)); $filectime = $timestamps['modified']; $this->fileHeader->timestamp = $filectime; } break; default: // Unknown field if ($extra_header['length'] > 0) { $junk = fread($this->fp, $extra_header['length']); $restBytes -= $extra_header['length']; } break; } } if ($restBytes > 0) { $junk = fread($this->fp, $restBytes); } } $compressionType = $header_data['compression']; // Populate the return array $this->fileHeader->file = $file; $this->fileHeader->compressed = $header_data['compsize']; $this->fileHeader->uncompressed = $header_data['uncompsize']; switch ($header_data['type']) { case 0: $this->fileHeader->type = 'dir'; break; case 1: $this->fileHeader->type = 'file'; break; case 2: $this->fileHeader->type = 'link'; break; } switch ($compressionType) { case 0: $this->fileHeader->compression = 'none'; break; case 1: $this->fileHeader->compression = 'gzip'; break; case 2: $this->fileHeader->compression = 'bzip2'; break; } $this->fileHeader->permissions = $header_data['perms']; // Find hard-coded banned files if ((basename($this->fileHeader->file) == ".") || (basename($this->fileHeader->file) == "..")) { $isBannedFile = true; } // Also try to find banned files passed in class configuration if ((count($this->skipFiles) > 0) && (!$isRenamed)) { if (in_array($this->fileHeader->file, $this->skipFiles)) { $isBannedFile = true; } } // If we have a banned file, let's skip it if ($isBannedFile) { debugMsg('Skipping file ' . $this->fileHeader->file); // Advance the file pointer, skipping exactly the size of the compressed data $seekleft = $this->fileHeader->compressed; while ($seekleft > 0) { // Ensure that we can seek past archive part boundaries $curSize = @filesize($this->archiveList[$this->currentPartNumber]); $curPos = @ftell($this->fp); $canSeek = $curSize - $curPos; if ($canSeek > $seekleft) { $canSeek = $seekleft; } @fseek($this->fp, $canSeek, SEEK_CUR); $seekleft -= $canSeek; if ($seekleft) { $this->nextFile(); } } $this->currentPartOffset = @ftell($this->fp); $this->runState = AK_STATE_DONE; return true; } // Remove the removePath, if any $this->fileHeader->file = $this->removePath($this->fileHeader->file); // Last chance to prepend a path to the filename if (!empty($this->addPath) && !$isDirRenamed) { $this->fileHeader->file = $this->addPath . $this->fileHeader->file; } // Get the translated path name $restorePerms = AKFactory::get('kickstart.setup.restoreperms', false); if ($this->fileHeader->type == 'file') { // Regular file; ask the postproc engine to process its filename if ($restorePerms) { $this->fileHeader->realFile = $this->postProcEngine->processFilename($this->fileHeader->file, $this->fileHeader->permissions); } else { $this->fileHeader->realFile = $this->postProcEngine->processFilename($this->fileHeader->file); } } elseif ($this->fileHeader->type == 'dir') { $dir = $this->fileHeader->file; // Directory; just create it if ($restorePerms) { $this->postProcEngine->createDirRecursive($this->fileHeader->file, $this->fileHeader->permissions); } else { $this->postProcEngine->createDirRecursive($this->fileHeader->file, 0755); } $this->postProcEngine->processFilename(null); } else { // Symlink; do not post-process $this->postProcEngine->processFilename(null); } $this->createDirectory(); // Header is read $this->runState = AK_STATE_HEADER; $this->dataReadLength = 0; return true; } protected function heuristicFileHeaderLocator() { $ret = false; $fullEOF = false; while (!$ret && !$fullEOF) { $this->currentPartOffset = @ftell($this->fp); if ($this->isEOF(true)) { $this->nextFile(); } if ($this->isEOF(false)) { $fullEOF = true; continue; } // Read 512Kb $chunk = fread($this->fp, 524288); $size_read = mb_strlen($chunk, '8bit'); //$pos = strpos($chunk, 'JPF'); $pos = mb_strpos($chunk, 'JPF', 0, '8bit'); if ($pos !== false) { // We found it! $this->currentPartOffset += $pos + 3; @fseek($this->fp, $this->currentPartOffset, SEEK_SET); $ret = true; } else { // Not yet found :( $this->currentPartOffset = @ftell($this->fp); } } return $ret; } /** * Creates the directory this file points to */ protected function createDirectory() { if (AKFactory::get('kickstart.setup.dryrun', '0')) { return true; } // Do we need to create a directory? if (empty($this->fileHeader->realFile)) { $this->fileHeader->realFile = $this->fileHeader->file; } $lastSlash = strrpos($this->fileHeader->realFile, '/'); $dirName = substr($this->fileHeader->realFile, 0, $lastSlash); $perms = $this->flagRestorePermissions ? $this->fileHeader->permissions : 0755; $ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($dirName); if (($this->postProcEngine->createDirRecursive($dirName, $perms) == false) && (!$ignore)) { $this->setError(AKText::sprintf('COULDNT_CREATE_DIR', $dirName)); return false; } else { return true; } } /** * Concrete classes must use this method to process file data. It must set $runState to AK_STATE_DATAREAD when * it's finished processing the file data. * * @return bool True if processing the file data was successful, false if an error occurred */ protected function processFileData() { switch ($this->fileHeader->type) { case 'dir': return $this->processTypeDir(); break; case 'link': return $this->processTypeLink(); break; case 'file': switch ($this->fileHeader->compression) { case 'none': return $this->processTypeFileUncompressed(); break; case 'gzip': case 'bzip2': return $this->processTypeFileCompressedSimple(); break; } break; default: debugMsg('Unknown file type ' . $this->fileHeader->type); break; } } /** * Process the file data of a directory entry * * @return bool */ private function processTypeDir() { // Directory entries in the JPA do not have file data, therefore we're done processing the entry $this->runState = AK_STATE_DATAREAD; return true; } /** * Process the file data of a link entry * * @return bool */ private function processTypeLink() { $readBytes = 0; $toReadBytes = 0; $leftBytes = $this->fileHeader->compressed; $data = ''; while ($leftBytes > 0) { $toReadBytes = ($leftBytes > $this->chunkSize) ? $this->chunkSize : $leftBytes; $mydata = $this->fread($this->fp, $toReadBytes); $reallyReadBytes = akstringlen($mydata); $data .= $mydata; $leftBytes -= $reallyReadBytes; if ($reallyReadBytes < $toReadBytes) { // We read less than requested! Why? Did we hit local EOF? if ($this->isEOF(true) && !$this->isEOF(false)) { // Yeap. Let's go to the next file $this->nextFile(); } else { debugMsg('End of local file before reading all data with no more parts left. The archive is corrupt or truncated.'); // Nope. The archive is corrupt $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } } } $filename = isset($this->fileHeader->realFile) ? $this->fileHeader->realFile : $this->fileHeader->file; if (!AKFactory::get('kickstart.setup.dryrun', '0')) { // Try to remove an existing file or directory by the same name if (file_exists($filename)) { @unlink($filename); @rmdir($filename); } // Remove any trailing slash if (substr($filename, -1) == '/') { $filename = substr($filename, 0, -1); } // Create the symlink - only possible within PHP context. There's no support built in the FTP protocol, so no postproc use is possible here :( @symlink($data, $filename); } $this->runState = AK_STATE_DATAREAD; return true; // No matter if the link was created! } private function processTypeFileUncompressed() { // Uncompressed files are being processed in small chunks, to avoid timeouts if (($this->dataReadLength == 0) && !AKFactory::get('kickstart.setup.dryrun', '0')) { // Before processing file data, ensure permissions are adequate $this->setCorrectPermissions($this->fileHeader->file); } // Open the output file if (!AKFactory::get('kickstart.setup.dryrun', '0')) { $ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($this->fileHeader->file); if ($this->dataReadLength == 0) { $outfp = @fopen($this->fileHeader->realFile, 'wb'); } else { $outfp = @fopen($this->fileHeader->realFile, 'ab'); } // Can we write to the file? if (($outfp === false) && (!$ignore)) { // An error occurred debugMsg('Could not write to output file'); $this->setError(AKText::sprintf('COULDNT_WRITE_FILE', $this->fileHeader->realFile)); return false; } } // Does the file have any data, at all? if ($this->fileHeader->compressed == 0) { // No file data! if (!AKFactory::get('kickstart.setup.dryrun', '0') && is_resource($outfp)) { @fclose($outfp); } $this->runState = AK_STATE_DATAREAD; return true; } // Reference to the global timer $timer = AKFactory::getTimer(); $toReadBytes = 0; $leftBytes = $this->fileHeader->compressed - $this->dataReadLength; // Loop while there's data to read and enough time to do it while (($leftBytes > 0) && ($timer->getTimeLeft() > 0)) { $toReadBytes = ($leftBytes > $this->chunkSize) ? $this->chunkSize : $leftBytes; $data = $this->fread($this->fp, $toReadBytes); $reallyReadBytes = akstringlen($data); $leftBytes -= $reallyReadBytes; $this->dataReadLength += $reallyReadBytes; if ($reallyReadBytes < $toReadBytes) { // We read less than requested! Why? Did we hit local EOF? if ($this->isEOF(true) && !$this->isEOF(false)) { // Yeap. Let's go to the next file $this->nextFile(); } else { // Nope. The archive is corrupt debugMsg('Not enough data in file. The archive is truncated or corrupt.'); $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } } if (!AKFactory::get('kickstart.setup.dryrun', '0')) { if (is_resource($outfp)) { @fwrite($outfp, $data); } } } // Close the file pointer if (!AKFactory::get('kickstart.setup.dryrun', '0')) { if (is_resource($outfp)) { @fclose($outfp); } } // Was this a pre-timeout bail out? if ($leftBytes > 0) { $this->runState = AK_STATE_DATA; } else { // Oh! We just finished! $this->runState = AK_STATE_DATAREAD; $this->dataReadLength = 0; } return true; } private function processTypeFileCompressedSimple() { if (!AKFactory::get('kickstart.setup.dryrun', '0')) { // Before processing file data, ensure permissions are adequate $this->setCorrectPermissions($this->fileHeader->file); // Open the output file $outfp = @fopen($this->fileHeader->realFile, 'wb'); // Can we write to the file? $ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($this->fileHeader->file); if (($outfp === false) && (!$ignore)) { // An error occurred debugMsg('Could not write to output file'); $this->setError(AKText::sprintf('COULDNT_WRITE_FILE', $this->fileHeader->realFile)); return false; } } // Does the file have any data, at all? if ($this->fileHeader->compressed == 0) { // No file data! if (!AKFactory::get('kickstart.setup.dryrun', '0')) { if (is_resource($outfp)) { @fclose($outfp); } } $this->runState = AK_STATE_DATAREAD; return true; } // Simple compressed files are processed as a whole; we can't do chunk processing $zipData = $this->fread($this->fp, $this->fileHeader->compressed); while (akstringlen($zipData) < $this->fileHeader->compressed) { // End of local file before reading all data, but have more archive parts? if ($this->isEOF(true) && !$this->isEOF(false)) { // Yeap. Read from the next file $this->nextFile(); $bytes_left = $this->fileHeader->compressed - akstringlen($zipData); $zipData .= $this->fread($this->fp, $bytes_left); } else { debugMsg('End of local file before reading all data with no more parts left. The archive is corrupt or truncated.'); $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } } if ($this->fileHeader->compression == 'gzip') { $unzipData = gzinflate($zipData); } elseif ($this->fileHeader->compression == 'bzip2') { $unzipData = bzdecompress($zipData); } unset($zipData); // Write to the file. if (!AKFactory::get('kickstart.setup.dryrun', '0') && is_resource($outfp)) { @fwrite($outfp, $unzipData, $this->fileHeader->uncompressed); @fclose($outfp); } unset($unzipData); $this->runState = AK_STATE_DATAREAD; return true; } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * ZIP archive extraction class * * Since the file data portion of ZIP and JPA are similarly structured (it's empty for dirs, * linked node name for symlinks, dumped binary data for no compressions and dumped gzipped * binary data for gzip compression) we just have to subclass AKUnarchiverJPA and change the * header reading bits. Reusable code ;) */ class AKUnarchiverZIP extends AKUnarchiverJPA { var $expectDataDescriptor = false; protected function readArchiveHeader() { debugMsg('Preparing to read archive header'); // Initialize header data array $this->archiveHeaderData = new stdClass(); // Open the first part debugMsg('Opening the first part'); $this->nextFile(); // Fail for unreadable files if ($this->fp === false) { debugMsg('The first part is not readable'); return false; } // Read a possible multipart signature $sigBinary = fread($this->fp, 4); $headerData = unpack('Vsig', $sigBinary); // Roll back if it's not a multipart archive if ($headerData['sig'] == 0x04034b50) { debugMsg('The archive is not multipart'); fseek($this->fp, -4, SEEK_CUR); } else { debugMsg('The archive is multipart'); } $multiPartSigs = array( 0x08074b50, // Multi-part ZIP 0x30304b50, // Multi-part ZIP (alternate) 0x04034b50 // Single file ); if (!in_array($headerData['sig'], $multiPartSigs)) { debugMsg('Invalid header signature ' . dechex($headerData['sig'])); $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } $this->currentPartOffset = @ftell($this->fp); debugMsg('Current part offset after reading header: ' . $this->currentPartOffset); $this->dataReadLength = 0; return true; } /** * Concrete classes must use this method to read the file header * * @return bool True if reading the file was successful, false if an error occurred or we reached end of archive */ protected function readFileHeader() { // If the current part is over, proceed to the next part please if ($this->isEOF(true)) { debugMsg('Opening next archive part'); $this->nextFile(); } $this->currentPartOffset = ftell($this->fp); if ($this->expectDataDescriptor) { // The last file had bit 3 of the general purpose bit flag set. This means that we have a // 12 byte data descriptor we need to skip. To make things worse, there might also be a 4 // byte optional data descriptor header (0x08074b50). $junk = @fread($this->fp, 4); $junk = unpack('Vsig', $junk); if ($junk['sig'] == 0x08074b50) { // Yes, there was a signature $junk = @fread($this->fp, 12); debugMsg('Data descriptor (w/ header) skipped at ' . (ftell($this->fp) - 12)); } else { // No, there was no signature, just read another 8 bytes $junk = @fread($this->fp, 8); debugMsg('Data descriptor (w/out header) skipped at ' . (ftell($this->fp) - 8)); } // And check for EOF, too if ($this->isEOF(true)) { debugMsg('EOF before reading header'); $this->nextFile(); } } // Get and decode Local File Header $headerBinary = fread($this->fp, 30); $headerData = unpack('Vsig/C2ver/vbitflag/vcompmethod/vlastmodtime/vlastmoddate/Vcrc/Vcompsize/Vuncomp/vfnamelen/veflen', $headerBinary); // Check signature if (!($headerData['sig'] == 0x04034b50)) { debugMsg('Not a file signature at ' . (ftell($this->fp) - 4)); // The signature is not the one used for files. Is this a central directory record (i.e. we're done)? if ($headerData['sig'] == 0x02014b50) { debugMsg('EOCD signature at ' . (ftell($this->fp) - 4)); // End of ZIP file detected. We'll just skip to the end of file... while ($this->nextFile()) { }; @fseek($this->fp, 0, SEEK_END); // Go to EOF return false; } else { debugMsg('Invalid signature ' . dechex($headerData['sig']) . ' at ' . ftell($this->fp)); $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } } // If bit 3 of the bitflag is set, expectDataDescriptor is true $this->expectDataDescriptor = ($headerData['bitflag'] & 4) == 4; $this->fileHeader = new stdClass(); $this->fileHeader->timestamp = 0; // Read the last modified data and time $lastmodtime = $headerData['lastmodtime']; $lastmoddate = $headerData['lastmoddate']; if ($lastmoddate && $lastmodtime) { // ----- Extract time $v_hour = ($lastmodtime & 0xF800) >> 11; $v_minute = ($lastmodtime & 0x07E0) >> 5; $v_seconde = ($lastmodtime & 0x001F) * 2; // ----- Extract date $v_year = (($lastmoddate & 0xFE00) >> 9) + 1980; $v_month = ($lastmoddate & 0x01E0) >> 5; $v_day = $lastmoddate & 0x001F; // ----- Get UNIX date format $this->fileHeader->timestamp = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); } $isBannedFile = false; $this->fileHeader->compressed = $headerData['compsize']; $this->fileHeader->uncompressed = $headerData['uncomp']; $nameFieldLength = $headerData['fnamelen']; $extraFieldLength = $headerData['eflen']; // Read filename field $this->fileHeader->file = fread($this->fp, $nameFieldLength); // Handle file renaming $isRenamed = false; if (is_array($this->renameFiles) && (count($this->renameFiles) > 0)) { if (array_key_exists($this->fileHeader->file, $this->renameFiles)) { $this->fileHeader->file = $this->renameFiles[$this->fileHeader->file]; $isRenamed = true; } } // Handle directory renaming $isDirRenamed = false; if (is_array($this->renameDirs) && (count($this->renameDirs) > 0)) { if (array_key_exists(dirname($this->fileHeader->file), $this->renameDirs)) { $file = rtrim($this->renameDirs[dirname($this->fileHeader->file)], '/') . '/' . basename($this->fileHeader->file); $isRenamed = true; $isDirRenamed = true; } } // Read extra field if present if ($extraFieldLength > 0) { $extrafield = fread($this->fp, $extraFieldLength); } debugMsg('*' . ftell($this->fp) . ' IS START OF ' . $this->fileHeader->file . ' (' . $this->fileHeader->compressed . ' bytes)'); // Decide filetype -- Check for directories $this->fileHeader->type = 'file'; if (strrpos($this->fileHeader->file, '/') == strlen($this->fileHeader->file) - 1) { $this->fileHeader->type = 'dir'; } // Decide filetype -- Check for symbolic links if (($headerData['ver1'] == 10) && ($headerData['ver2'] == 3)) { $this->fileHeader->type = 'link'; } switch ($headerData['compmethod']) { case 0: $this->fileHeader->compression = 'none'; break; case 8: $this->fileHeader->compression = 'gzip'; break; } // Find hard-coded banned files if ((basename($this->fileHeader->file) == ".") || (basename($this->fileHeader->file) == "..")) { $isBannedFile = true; } // Also try to find banned files passed in class configuration if ((count($this->skipFiles) > 0) && (!$isRenamed)) { if (in_array($this->fileHeader->file, $this->skipFiles)) { $isBannedFile = true; } } // If we have a banned file, let's skip it if ($isBannedFile) { // Advance the file pointer, skipping exactly the size of the compressed data $seekleft = $this->fileHeader->compressed; while ($seekleft > 0) { // Ensure that we can seek past archive part boundaries $curSize = @filesize($this->archiveList[$this->currentPartNumber]); $curPos = @ftell($this->fp); $canSeek = $curSize - $curPos; if ($canSeek > $seekleft) { $canSeek = $seekleft; } @fseek($this->fp, $canSeek, SEEK_CUR); $seekleft -= $canSeek; if ($seekleft) { $this->nextFile(); } } $this->currentPartOffset = @ftell($this->fp); $this->runState = AK_STATE_DONE; return true; } // Remove the removePath, if any $this->fileHeader->file = $this->removePath($this->fileHeader->file); // Last chance to prepend a path to the filename if (!empty($this->addPath) && !$isDirRenamed) { $this->fileHeader->file = $this->addPath . $this->fileHeader->file; } // Get the translated path name if ($this->fileHeader->type == 'file') { $this->fileHeader->realFile = $this->postProcEngine->processFilename($this->fileHeader->file); } elseif ($this->fileHeader->type == 'dir') { $this->fileHeader->timestamp = 0; $dir = $this->fileHeader->file; $this->postProcEngine->createDirRecursive($this->fileHeader->file, 0755); $this->postProcEngine->processFilename(null); } else { // Symlink; do not post-process $this->fileHeader->timestamp = 0; $this->postProcEngine->processFilename(null); } $this->createDirectory(); // Header is read $this->runState = AK_STATE_HEADER; return true; } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * JPS archive extraction class */ class AKUnarchiverJPS extends AKUnarchiverJPA { /** * Header data for the archive * * @var array */ protected $archiveHeaderData = array(); /** * Plaintext password from which the encryption key will be derived with PBKDF2 * * @var string */ protected $password = ''; /** * Which hash algorithm should I use for key derivation with PBKDF2. * * @var string */ private $pbkdf2Algorithm = 'sha1'; /** * How many iterations should I use for key derivation with PBKDF2 * * @var int */ private $pbkdf2Iterations = 1000; /** * Should I use a static salt for key derivation with PBKDF2? * * @var bool */ private $pbkdf2UseStaticSalt = 0; /** * Static salt for key derivation with PBKDF2 * * @var string */ private $pbkdf2StaticSalt = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /** * How much compressed data I have read since the last file header read * * @var int */ private $compressedSizeReadSinceLastFileHeader = 0; public function __construct() { parent::__construct(); $this->password = AKFactory::get('kickstart.jps.password', ''); } public function __wakeup() { parent::__wakeup(); // Make sure the decryption is all set up (required!) AKEncryptionAES::setPbkdf2Algorithm($this->pbkdf2Algorithm); AKEncryptionAES::setPbkdf2Iterations($this->pbkdf2Iterations); AKEncryptionAES::setPbkdf2UseStaticSalt($this->pbkdf2UseStaticSalt); AKEncryptionAES::setPbkdf2StaticSalt($this->pbkdf2StaticSalt); } protected function readArchiveHeader() { // Initialize header data array $this->archiveHeaderData = new stdClass(); // Open the first part $this->nextFile(); // Fail for unreadable files if ($this->fp === false) { return false; } // Read the signature $sig = fread($this->fp, 3); if ($sig != 'JPS') { // Not a JPA file $this->setError(AKText::_('ERR_NOT_A_JPS_FILE')); return false; } // Read and parse the known portion of header data (5 bytes) $bin_data = fread($this->fp, 5); $header_data = unpack('Cmajor/Cminor/cspanned/vextra', $bin_data); // Is this a v2 archive? $versionHumanReadable = $header_data['major'] . '.' . $header_data['minor']; $isV2Archive = version_compare($versionHumanReadable, '2.0', 'ge'); // Load any remaining header data $rest_length = $header_data['extra']; if ($isV2Archive && $rest_length) { // V2 archives only have one kind of extra header if (!$this->readKeyExpansionExtraHeader()) { return false; } } elseif ($rest_length > 0) { $junk = fread($this->fp, $rest_length); } // Temporary array with all the data we read $temp = array( 'signature' => $sig, 'major' => $header_data['major'], 'minor' => $header_data['minor'], 'spanned' => $header_data['spanned'] ); // Array-to-object conversion foreach ($temp as $key => $value) { $this->archiveHeaderData->{$key} = $value; } $this->currentPartOffset = @ftell($this->fp); $this->dataReadLength = 0; return true; } /** * Concrete classes must use this method to read the file header * * @return bool True if reading the file was successful, false if an error occurred or we reached end of archive */ protected function readFileHeader() { // If the current part is over, proceed to the next part please if ($this->isEOF(true)) { $this->nextFile(); } $this->currentPartOffset = ftell($this->fp); // Get and decode Entity Description Block $signature = fread($this->fp, 3); // Check for end-of-archive siganture if ($signature == 'JPE') { $this->setState('postrun'); return true; } $this->fileHeader = new stdClass(); $this->fileHeader->timestamp = 0; // Check signature if ($signature != 'JPF') { if ($this->isEOF(true)) { // This file is finished; make sure it's the last one $this->nextFile(); if (!$this->isEOF(false)) { $this->setError(AKText::sprintf('INVALID_FILE_HEADER', $this->currentPartNumber, $this->currentPartOffset)); return false; } // We're just finished return false; } else { fseek($this->fp, -6, SEEK_CUR); $signature = fread($this->fp, 3); if ($signature == 'JPE') { return false; } $this->setError(AKText::sprintf('INVALID_FILE_HEADER', $this->currentPartNumber, $this->currentPartOffset)); return false; } } // This a JPS Entity Block. Process the header. $isBannedFile = false; // Make sure the decryption is all set up AKEncryptionAES::setPbkdf2Algorithm($this->pbkdf2Algorithm); AKEncryptionAES::setPbkdf2Iterations($this->pbkdf2Iterations); AKEncryptionAES::setPbkdf2UseStaticSalt($this->pbkdf2UseStaticSalt); AKEncryptionAES::setPbkdf2StaticSalt($this->pbkdf2StaticSalt); // Read and decrypt the header $edbhData = fread($this->fp, 4); $edbh = unpack('vencsize/vdecsize', $edbhData); $bin_data = fread($this->fp, $edbh['encsize']); // Add the header length to the data read $this->compressedSizeReadSinceLastFileHeader += $edbh['encsize'] + 4; // Decrypt and truncate $bin_data = AKEncryptionAES::AESDecryptCBC($bin_data, $this->password); $bin_data = substr($bin_data, 0, $edbh['decsize']); // Read length of EDB and of the Entity Path Data $length_array = unpack('vpathsize', substr($bin_data, 0, 2)); // Read the path data $file = substr($bin_data, 2, $length_array['pathsize']); // Handle file renaming $isRenamed = false; if (is_array($this->renameFiles) && (count($this->renameFiles) > 0)) { if (array_key_exists($file, $this->renameFiles)) { $file = $this->renameFiles[$file]; $isRenamed = true; } } // Handle directory renaming $isDirRenamed = false; if (is_array($this->renameDirs) && (count($this->renameDirs) > 0)) { if (array_key_exists(dirname($file), $this->renameDirs)) { $file = rtrim($this->renameDirs[dirname($file)], '/') . '/' . basename($file); $isRenamed = true; $isDirRenamed = true; } } // Read and parse the known data portion $bin_data = substr($bin_data, 2 + $length_array['pathsize']); $header_data = unpack('Ctype/Ccompression/Vuncompsize/Vperms/Vfilectime', $bin_data); $this->fileHeader->timestamp = $header_data['filectime']; $compressionType = $header_data['compression']; // Populate the return array $this->fileHeader->file = $file; $this->fileHeader->uncompressed = $header_data['uncompsize']; switch ($header_data['type']) { case 0: $this->fileHeader->type = 'dir'; break; case 1: $this->fileHeader->type = 'file'; break; case 2: $this->fileHeader->type = 'link'; break; } switch ($compressionType) { case 0: $this->fileHeader->compression = 'none'; break; case 1: $this->fileHeader->compression = 'gzip'; break; case 2: $this->fileHeader->compression = 'bzip2'; break; } $this->fileHeader->permissions = $header_data['perms']; // Find hard-coded banned files if ((basename($this->fileHeader->file) == ".") || (basename($this->fileHeader->file) == "..")) { $isBannedFile = true; } // Also try to find banned files passed in class configuration if ((count($this->skipFiles) > 0) && (!$isRenamed)) { if (in_array($this->fileHeader->file, $this->skipFiles)) { $isBannedFile = true; } } // If we have a banned file, let's skip it if ($isBannedFile) { $done = false; while (!$done) { // Read the Data Chunk Block header $binMiniHead = fread($this->fp, 8); if (in_array(substr($binMiniHead, 0, 3), array('JPF', 'JPE'))) { // Not a Data Chunk Block header, I am done skipping the file @fseek($this->fp, -8, SEEK_CUR); // Roll back the file pointer $done = true; // Mark as done continue; // Exit loop } else { // Skip forward by the amount of compressed data $miniHead = unpack('Vencsize/Vdecsize', $binMiniHead); @fseek($this->fp, $miniHead['encsize'], SEEK_CUR); $this->compressedSizeReadSinceLastFileHeader += 8 + $miniHead['encsize']; } } $this->currentPartOffset = @ftell($this->fp); $this->runState = AK_STATE_DONE; $this->fileHeader->compressed = $this->compressedSizeReadSinceLastFileHeader; $this->compressedSizeReadSinceLastFileHeader = 0; return true; } // Remove the removePath, if any $this->fileHeader->file = $this->removePath($this->fileHeader->file); // Last chance to prepend a path to the filename if (!empty($this->addPath) && !$isDirRenamed) { $this->fileHeader->file = $this->addPath . $this->fileHeader->file; } // Get the translated path name $restorePerms = AKFactory::get('kickstart.setup.restoreperms', false); if ($this->fileHeader->type == 'file') { // Regular file; ask the postproc engine to process its filename if ($restorePerms) { $this->fileHeader->realFile = $this->postProcEngine->processFilename($this->fileHeader->file, $this->fileHeader->permissions); } else { $this->fileHeader->realFile = $this->postProcEngine->processFilename($this->fileHeader->file); } } elseif ($this->fileHeader->type == 'dir') { $dir = $this->fileHeader->file; $this->fileHeader->realFile = $dir; // Directory; just create it if ($restorePerms) { $this->postProcEngine->createDirRecursive($this->fileHeader->file, $this->fileHeader->permissions); } else { $this->postProcEngine->createDirRecursive($this->fileHeader->file, 0755); } $this->postProcEngine->processFilename(null); } else { // Symlink; do not post-process $this->postProcEngine->processFilename(null); } $this->fileHeader->compressed = $this->compressedSizeReadSinceLastFileHeader; $this->compressedSizeReadSinceLastFileHeader = 0; $this->createDirectory(); // Header is read $this->runState = AK_STATE_HEADER; $this->dataReadLength = 0; return true; } /** * Creates the directory this file points to */ protected function createDirectory() { if (AKFactory::get('kickstart.setup.dryrun', '0')) { return true; } // Do we need to create a directory? $lastSlash = strrpos($this->fileHeader->realFile, '/'); $dirName = substr($this->fileHeader->realFile, 0, $lastSlash); $perms = 0755; $ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($dirName); if (($this->postProcEngine->createDirRecursive($dirName, $perms) == false) && (!$ignore)) { $this->setError(AKText::sprintf('COULDNT_CREATE_DIR', $dirName)); return false; } return true; } /** * Concrete classes must use this method to process file data. It must set $runState to AK_STATE_DATAREAD when * it's finished processing the file data. * * @return bool True if processing the file data was successful, false if an error occurred */ protected function processFileData() { switch ($this->fileHeader->type) { case 'dir': return $this->processTypeDir(); break; case 'link': return $this->processTypeLink(); break; case 'file': switch ($this->fileHeader->compression) { case 'none': return $this->processTypeFileUncompressed(); break; case 'gzip': case 'bzip2': return $this->processTypeFileCompressedSimple(); break; } break; } } /** * Process the file data of a directory entry * * @return bool */ private function processTypeDir() { // Directory entries in the JPA do not have file data, therefore we're done processing the entry $this->runState = AK_STATE_DATAREAD; return true; } /** * Process the file data of a link entry * * @return bool */ private function processTypeLink() { // Does the file have any data, at all? if ($this->fileHeader->uncompressed == 0) { // No file data! $this->runState = AK_STATE_DATAREAD; return true; } // Read the mini header $binMiniHeader = fread($this->fp, 8); $reallyReadBytes = akstringlen($binMiniHeader); if ($reallyReadBytes < 8) { // We read less than requested! Why? Did we hit local EOF? if ($this->isEOF(true) && !$this->isEOF(false)) { // Yeap. Let's go to the next file $this->nextFile(); // Retry reading the header $binMiniHeader = fread($this->fp, 8); $reallyReadBytes = akstringlen($binMiniHeader); // Still not enough data? If so, the archive is corrupt or missing parts. if ($reallyReadBytes < 8) { $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } } else { // Nope. The archive is corrupt $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } } // Read the encrypted data $miniHeader = unpack('Vencsize/Vdecsize', $binMiniHeader); $toReadBytes = $miniHeader['encsize']; $data = $this->fread($this->fp, $toReadBytes); $reallyReadBytes = akstringlen($data); $this->compressedSizeReadSinceLastFileHeader += 8 + $miniHeader['encsize']; if ($reallyReadBytes < $toReadBytes) { // We read less than requested! Why? Did we hit local EOF? if ($this->isEOF(true) && !$this->isEOF(false)) { // Yeap. Let's go to the next file $this->nextFile(); // Read the rest of the data $toReadBytes -= $reallyReadBytes; $restData = $this->fread($this->fp, $toReadBytes); $reallyReadBytes = akstringlen($data); if ($reallyReadBytes < $toReadBytes) { $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } $data .= $restData; } else { // Nope. The archive is corrupt $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } } // Decrypt the data $data = AKEncryptionAES::AESDecryptCBC($data, $this->password); // Is the length of the decrypted data less than expected? $data_length = akstringlen($data); if ($data_length < $miniHeader['decsize']) { $this->setError(AKText::_('ERR_INVALID_JPS_PASSWORD')); return false; } // Trim the data $data = substr($data, 0, $miniHeader['decsize']); if (!AKFactory::get('kickstart.setup.dryrun', '0')) { // Try to remove an existing file or directory by the same name if (file_exists($this->fileHeader->file)) { @unlink($this->fileHeader->file); @rmdir($this->fileHeader->file); } // Remove any trailing slash if (substr($this->fileHeader->file, -1) == '/') { $this->fileHeader->file = substr($this->fileHeader->file, 0, -1); } // Create the symlink - only possible within PHP context. There's no support built in the FTP protocol, so no postproc use is possible here :( @symlink($data, $this->fileHeader->file); } $this->runState = AK_STATE_DATAREAD; return true; // No matter if the link was created! } private function processTypeFileUncompressed() { // Uncompressed files are being processed in small chunks, to avoid timeouts if (($this->dataReadLength == 0) && !AKFactory::get('kickstart.setup.dryrun', '0')) { // Before processing file data, ensure permissions are adequate $this->setCorrectPermissions($this->fileHeader->file); } // Open the output file if (!AKFactory::get('kickstart.setup.dryrun', '0')) { $ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($this->fileHeader->file); if ($this->dataReadLength == 0) { $outfp = @fopen($this->fileHeader->realFile, 'wb'); } else { $outfp = @fopen($this->fileHeader->realFile, 'ab'); } // Can we write to the file? if (($outfp === false) && (!$ignore)) { // An error occurred $this->setError(AKText::sprintf('COULDNT_WRITE_FILE', $this->fileHeader->realFile)); return false; } } // Does the file have any data, at all? if ($this->fileHeader->uncompressed == 0) { // No file data! if (!AKFactory::get('kickstart.setup.dryrun', '0') && is_resource($outfp)) { @fclose($outfp); } $this->runState = AK_STATE_DATAREAD; return true; } $this->setError('An uncompressed file was detected; this is not supported by this archive extraction utility'); return false; } private function processTypeFileCompressedSimple() { $timer = AKFactory::getTimer(); // Files are being processed in small chunks, to avoid timeouts if (($this->dataReadLength == 0) && !AKFactory::get('kickstart.setup.dryrun', '0')) { // Before processing file data, ensure permissions are adequate $this->setCorrectPermissions($this->fileHeader->file); } // Open the output file if (!AKFactory::get('kickstart.setup.dryrun', '0')) { // Open the output file $outfp = @fopen($this->fileHeader->realFile, 'wb'); // Can we write to the file? $ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($this->fileHeader->file); if (($outfp === false) && (!$ignore)) { // An error occurred $this->setError(AKText::sprintf('COULDNT_WRITE_FILE', $this->fileHeader->realFile)); return false; } } // Does the file have any data, at all? if ($this->fileHeader->uncompressed == 0) { // No file data! if (!AKFactory::get('kickstart.setup.dryrun', '0')) { if (is_resource($outfp)) { @fclose($outfp); } } $this->runState = AK_STATE_DATAREAD; return true; } $leftBytes = $this->fileHeader->uncompressed - $this->dataReadLength; // Loop while there's data to write and enough time to do it while (($leftBytes > 0) && ($timer->getTimeLeft() > 0)) { // Read the mini header $binMiniHeader = fread($this->fp, 8); $reallyReadBytes = akstringlen($binMiniHeader); if ($reallyReadBytes < 8) { // We read less than requested! Why? Did we hit local EOF? if ($this->isEOF(true) && !$this->isEOF(false)) { // Yeap. Let's go to the next file $this->nextFile(); // Retry reading the header $binMiniHeader = fread($this->fp, 8); $reallyReadBytes = akstringlen($binMiniHeader); // Still not enough data? If so, the archive is corrupt or missing parts. if ($reallyReadBytes < 8) { $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } } else { // Nope. The archive is corrupt $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } } // Read the encrypted data $miniHeader = unpack('Vencsize/Vdecsize', $binMiniHeader); $toReadBytes = $miniHeader['encsize']; $data = $this->fread($this->fp, $toReadBytes); $reallyReadBytes = akstringlen($data); $this->compressedSizeReadSinceLastFileHeader += $miniHeader['encsize'] + 8; if ($reallyReadBytes < $toReadBytes) { // We read less than requested! Why? Did we hit local EOF? if ($this->isEOF(true) && !$this->isEOF(false)) { // Yeap. Let's go to the next file $this->nextFile(); // Read the rest of the data $toReadBytes -= $reallyReadBytes; $restData = $this->fread($this->fp, $toReadBytes); $reallyReadBytes = akstringlen($restData); if ($reallyReadBytes < $toReadBytes) { $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } if (akstringlen($data) == 0) { $data = $restData; } else { $data .= $restData; } } else { // Nope. The archive is corrupt $this->setError(AKText::_('ERR_CORRUPT_ARCHIVE')); return false; } } // Decrypt the data $data = AKEncryptionAES::AESDecryptCBC($data, $this->password); // Is the length of the decrypted data less than expected? $data_length = akstringlen($data); if ($data_length < $miniHeader['decsize']) { $this->setError(AKText::_('ERR_INVALID_JPS_PASSWORD')); return false; } // Trim the data $data = substr($data, 0, $miniHeader['decsize']); // Decompress $data = gzinflate($data); $unc_len = akstringlen($data); // Write the decrypted data if (!AKFactory::get('kickstart.setup.dryrun', '0')) { if (is_resource($outfp)) { @fwrite($outfp, $data, akstringlen($data)); } } // Update the read length $this->dataReadLength += $unc_len; $leftBytes = $this->fileHeader->uncompressed - $this->dataReadLength; } // Close the file pointer if (!AKFactory::get('kickstart.setup.dryrun', '0')) { if (is_resource($outfp)) { @fclose($outfp); } } // Was this a pre-timeout bail out? if ($leftBytes > 0) { $this->runState = AK_STATE_DATA; } else { // Oh! We just finished! $this->runState = AK_STATE_DATAREAD; $this->dataReadLength = 0; } return true; } private function readKeyExpansionExtraHeader() { $signature = fread($this->fp, 4); if ($signature != "JH\x00\x01") { // Not a valid JPS file $this->setError(AKText::_('ERR_NOT_A_JPS_FILE')); return false; } $bin_data = fread($this->fp, 8); $header_data = unpack('vlength/Calgo/Viterations/CuseStaticSalt', $bin_data); if ($header_data['length'] != 76) { // Not a valid JPS file $this->setError(AKText::_('ERR_NOT_A_JPS_FILE')); return false; } switch ($header_data['algo']) { case 0: $algorithm = 'sha1'; break; case 1: $algorithm = 'sha256'; break; case 2: $algorithm = 'sha512'; break; default: // Not a valid JPS file $this->setError(AKText::_('ERR_NOT_A_JPS_FILE')); return false; break; } $this->pbkdf2Algorithm = $algorithm; $this->pbkdf2Iterations = $header_data['iterations']; $this->pbkdf2UseStaticSalt = $header_data['useStaticSalt']; $this->pbkdf2StaticSalt = fread($this->fp, 64); return true; } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * Timer class */ class AKCoreTimer extends AKAbstractObject { /** @var int Maximum execution time allowance per step */ private $max_exec_time = null; /** @var int Timestamp of execution start */ private $start_time = null; /** * Public constructor, creates the timer object and calculates the execution time limits * * @return AECoreTimer */ public function __construct() { parent::__construct(); // Initialize start time $this->start_time = $this->microtime_float(); // Get configured max time per step and bias $config_max_exec_time = AKFactory::get('kickstart.tuning.max_exec_time', 14); $bias = AKFactory::get('kickstart.tuning.run_time_bias', 75) / 100; // Get PHP's maximum execution time (our upper limit) if (@function_exists('ini_get')) { $php_max_exec_time = @ini_get("maximum_execution_time"); if ((!is_numeric($php_max_exec_time)) || ($php_max_exec_time == 0)) { // If we have no time limit, set a hard limit of about 10 seconds // (safe for Apache and IIS timeouts, verbose enough for users) $php_max_exec_time = 14; } } else { // If ini_get is not available, use a rough default $php_max_exec_time = 14; } // Apply an arbitrary correction to counter CMS load time $php_max_exec_time--; // Apply bias $php_max_exec_time = $php_max_exec_time * $bias; $config_max_exec_time = $config_max_exec_time * $bias; // Use the most appropriate time limit value if ($config_max_exec_time > $php_max_exec_time) { $this->max_exec_time = $php_max_exec_time; } else { $this->max_exec_time = $config_max_exec_time; } } /** * Returns the current timestampt in decimal seconds */ private function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float) $usec + (float) $sec); } /** * Wake-up function to reset internal timer when we get unserialized */ public function __wakeup() { // Re-initialize start time on wake-up $this->start_time = $this->microtime_float(); } /** * Gets the number of seconds left, before we hit the "must break" threshold * * @return float */ public function getTimeLeft() { return $this->max_exec_time - $this->getRunningTime(); } /** * Gets the time elapsed since object creation/unserialization, effectively how * long Akeeba Engine has been processing data * * @return float */ public function getRunningTime() { return $this->microtime_float() - $this->start_time; } /** * Enforce the minimum execution time */ public function enforce_min_exec_time() { // Try to get a sane value for PHP's maximum_execution_time INI parameter if (@function_exists('ini_get')) { $php_max_exec = @ini_get("maximum_execution_time"); } else { $php_max_exec = 10; } if (($php_max_exec == "") || ($php_max_exec == 0)) { $php_max_exec = 10; } // Decrease $php_max_exec time by 500 msec we need (approx.) to tear down // the application, as well as another 500msec added for rounding // error purposes. Also make sure this is never gonna be less than 0. $php_max_exec = max($php_max_exec * 1000 - 1000, 0); // Get the "minimum execution time per step" Akeeba Backup configuration variable $minexectime = AKFactory::get('kickstart.tuning.min_exec_time', 0); if (!is_numeric($minexectime)) { $minexectime = 0; } // Make sure we are not over PHP's time limit! if ($minexectime > $php_max_exec) { $minexectime = $php_max_exec; } // Get current running time $elapsed_time = $this->getRunningTime() * 1000; // Only run a sleep delay if we haven't reached the minexectime execution time if (($minexectime > $elapsed_time) && ($elapsed_time > 0)) { $sleep_msec = $minexectime - $elapsed_time; if (function_exists('usleep')) { usleep(1000 * $sleep_msec); } elseif (function_exists('time_nanosleep')) { $sleep_sec = floor($sleep_msec / 1000); $sleep_nsec = 1000000 * ($sleep_msec - ($sleep_sec * 1000)); time_nanosleep($sleep_sec, $sleep_nsec); } elseif (function_exists('time_sleep_until')) { $until_timestamp = time() + $sleep_msec / 1000; time_sleep_until($until_timestamp); } elseif (function_exists('sleep')) { $sleep_sec = ceil($sleep_msec / 1000); sleep($sleep_sec); } } elseif ($elapsed_time > 0) { // No sleep required, even if user configured us to be able to do so. } } /** * Reset the timer. It should only be used in CLI mode! */ public function resetTime() { $this->start_time = $this->microtime_float(); } /** * @param int $max_exec_time */ public function setMaxExecTime($max_exec_time) { $this->max_exec_time = $max_exec_time; } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * A filesystem scanner which uses opendir() */ class AKUtilsLister extends AKAbstractObject { public function &getFiles($folder, $pattern = '*') { // Initialize variables $arr = array(); $false = false; if (!is_dir($folder)) { return $false; } $handle = @opendir($folder); // If directory is not accessible, just return FALSE if ($handle === false) { $this->setWarning('Unreadable directory ' . $folder); return $false; } while (($file = @readdir($handle)) !== false) { if (!fnmatch($pattern, $file)) { continue; } if (($file != '.') && ($file != '..')) { $ds = ($folder == '') || ($folder == '/') || (@substr($folder, -1) == '/') || (@substr($folder, -1) == DIRECTORY_SEPARATOR) ? '' : DIRECTORY_SEPARATOR; $dir = $folder . $ds . $file; $isDir = is_dir($dir); if (!$isDir) { $arr[] = $dir; } } } @closedir($handle); return $arr; } public function &getFolders($folder, $pattern = '*') { // Initialize variables $arr = array(); $false = false; if (!is_dir($folder)) { return $false; } $handle = @opendir($folder); // If directory is not accessible, just return FALSE if ($handle === false) { $this->setWarning('Unreadable directory ' . $folder); return $false; } while (($file = @readdir($handle)) !== false) { if (!fnmatch($pattern, $file)) { continue; } if (($file != '.') && ($file != '..')) { $ds = ($folder == '') || ($folder == '/') || (@substr($folder, -1) == '/') || (@substr($folder, -1) == DIRECTORY_SEPARATOR) ? '' : DIRECTORY_SEPARATOR; $dir = $folder . $ds . $file; $isDir = is_dir($dir); if ($isDir) { $arr[] = $dir; } } } @closedir($handle); return $arr; } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * A simple INI-based i18n engine */ class AKText extends AKAbstractObject { /** * The default (en_GB) translation used when no other translation is available * * @var array */ private $default_translation = array( 'AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => "Invalid FTP host or port", 'FTPBROWSER_ERROR_USERPASS' => "Invalid FTP username or password", 'FTPBROWSER_ERROR_NOACCESS' => "Directory doesn't exist or you don't have enough permissions to access it", 'FTPBROWSER_ERROR_UNSUPPORTED' => "Sorry, your FTP server doesn't support our FTP directory browser.", 'FTPBROWSER_LBL_GOPARENT' => "<up one level>", 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => "Directory doesn't exist or you don't have enough permissions to access it", 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'BTN_SHOW_FINE_TUNE' => 'Show advanced options (for experts)', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s frontend', 'BTN_SITEBE' => 'Visit your site\'s backend', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occurred', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.', 'RENAME_FILES' => 'Rename server configuration files', 'RESTORE_PERMISSIONS' => 'Restore file permissions', ); /** * The array holding the translation keys * * @var array */ private $strings; /** * The currently detected language (ISO code) * * @var string */ private $language; /* * Initializes the translation engine * @return AKText */ public function __construct() { // Start with the default translation $this->strings = $this->default_translation; // Try loading the translation file in English, if it exists $this->loadTranslation('en-GB'); // Try loading the translation file in the browser's preferred language, if it exists $this->getBrowserLanguage(); if (!is_null($this->language)) { $this->loadTranslation(); } } private function loadTranslation($lang = null) { if (defined('KSLANGDIR')) { $dirname = KSLANGDIR; } else { $dirname = KSROOTDIR; } $basename = basename(__FILE__, '.php') . '.ini'; if (empty($lang)) { $lang = $this->language; } $translationFilename = $dirname . DIRECTORY_SEPARATOR . $lang . '.' . $basename; if (!@file_exists($translationFilename) && ($basename != 'kickstart.ini')) { $basename = 'kickstart.ini'; $translationFilename = $dirname . DIRECTORY_SEPARATOR . $lang . '.' . $basename; } if (!@file_exists($translationFilename)) { return; } $temp = self::parse_ini_file($translationFilename, false); if (!is_array($this->strings)) { $this->strings = array(); } if (empty($temp)) { $this->strings = array_merge($this->default_translation, $this->strings); } else { $this->strings = array_merge($this->strings, $temp); } } /** * A PHP based INI file parser. * * Thanks to asohn ~at~ aircanopy ~dot~ net for posting this handy function on * the parse_ini_file page on http://gr.php.net/parse_ini_file * * @param string $file Filename to process * @param bool $process_sections True to also process INI sections * * @return array An associative array of sections, keys and values * @access private */ public static function parse_ini_file($file, $process_sections = false, $raw_data = false) { $process_sections = ($process_sections !== true) ? false : true; if (!$raw_data) { $ini = @file($file); } else { $ini = $file; } if (count($ini) == 0) { return array(); } $sections = array(); $values = array(); $result = array(); $globals = array(); $i = 0; if (!empty($ini)) { foreach ($ini as $line) { $line = trim($line); $line = str_replace("\t", " ", $line); // Comments if (!preg_match('/^[a-zA-Z0-9[]/', $line)) { continue; } // Sections if ($line{0} == '[') { $tmp = explode(']', $line); $sections[] = trim(substr($tmp[0], 1)); $i++; continue; } // Key-value pair list($key, $value) = explode('=', $line, 2); $key = trim($key); $value = trim($value); if (strstr($value, ";")) { $tmp = explode(';', $value); if (count($tmp) == 2) { if ((($value{0} != '"') && ($value{0} != "'")) || preg_match('/^".*"\s*;/', $value) || preg_match('/^".*;[^"]*$/', $value) || preg_match("/^'.*'\s*;/", $value) || preg_match("/^'.*;[^']*$/", $value) ) { $value = $tmp[0]; } } else { if ($value{0} == '"') { $value = preg_replace('/^"(.*)".*/', '$1', $value); } elseif ($value{0} == "'") { $value = preg_replace("/^'(.*)'.*/", '$1', $value); } else { $value = $tmp[0]; } } } $value = trim($value); $value = trim($value, "'\""); if ($i == 0) { if (substr($line, -1, 2) == '[]') { $globals[$key][] = $value; } else { $globals[$key] = $value; } } else { if (substr($line, -1, 2) == '[]') { $values[$i - 1][$key][] = $value; } else { $values[$i - 1][$key] = $value; } } } } for ($j = 0; $j < $i; $j++) { if ($process_sections === true) { $result[$sections[$j]] = $values[$j]; } else { $result[] = $values[$j]; } } return $result + $globals; } public function getBrowserLanguage() { // Detection code from Full Operating system language detection, by Harald Hope // Retrieved from http://techpatterns.com/downloads/php_language_detection.php $user_languages = array(); //check to see if language is set if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) { $languages = strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]); // $languages = ' fr-ch;q=0.3, da, en-us;q=0.8, en;q=0.5, fr;q=0.3'; // need to remove spaces from strings to avoid error $languages = str_replace(' ', '', $languages); $languages = explode(",", $languages); foreach ($languages as $language_list) { // pull out the language, place languages into array of full and primary // string structure: $temp_array = array(); // slice out the part before ; on first step, the part before - on second, place into array $temp_array[0] = substr($language_list, 0, strcspn($language_list, ';'));//full language $temp_array[1] = substr($language_list, 0, 2);// cut out primary language if ((strlen($temp_array[0]) == 5) && ((substr($temp_array[0], 2, 1) == '-') || (substr($temp_array[0], 2, 1) == '_'))) { $langLocation = strtoupper(substr($temp_array[0], 3, 2)); $temp_array[0] = $temp_array[1] . '-' . $langLocation; } //place this array into main $user_languages language array $user_languages[] = $temp_array; } } else// if no languages found { $user_languages[0] = array('', ''); //return blank array. } $this->language = null; $basename = basename(__FILE__, '.php') . '.ini'; // Try to match main language part of the filename, irrespective of the location, e.g. de_DE will do if de_CH doesn't exist. if (class_exists('AKUtilsLister')) { $fs = new AKUtilsLister(); $iniFiles = $fs->getFiles(KSROOTDIR, '*.' . $basename); if (empty($iniFiles) && ($basename != 'kickstart.ini')) { $basename = 'kickstart.ini'; $iniFiles = $fs->getFiles(KSROOTDIR, '*.' . $basename); } } else { $iniFiles = null; } if (is_array($iniFiles)) { foreach ($user_languages as $languageStruct) { if (is_null($this->language)) { // Get files matching the main lang part $iniFiles = $fs->getFiles(KSROOTDIR, $languageStruct[1] . '-??.' . $basename); if (count($iniFiles) > 0) { $filename = $iniFiles[0]; $filename = substr($filename, strlen(KSROOTDIR) + 1); $this->language = substr($filename, 0, 5); } else { $this->language = null; } } } } if (is_null($this->language)) { // Try to find a full language match foreach ($user_languages as $languageStruct) { if (@file_exists($languageStruct[0] . '.' . $basename) && is_null($this->language)) { $this->language = $languageStruct[0]; } else { } } } else { // Do we have an exact match? foreach ($user_languages as $languageStruct) { if (substr($this->language, 0, strlen($languageStruct[1])) == $languageStruct[1]) { if (file_exists($languageStruct[0] . '.' . $basename)) { $this->language = $languageStruct[0]; } } } } // Now, scan for full language based on the partial match } public static function sprintf($key) { $text = self::getInstance(); $args = func_get_args(); if (count($args) > 0) { $args[0] = $text->_($args[0]); return @call_user_func_array('sprintf', $args); } return ''; } /** * Singleton pattern for Language * * @return AKText The global AKText instance */ public static function &getInstance() { static $instance; if (!is_object($instance)) { $instance = new AKText(); } return $instance; } public static function _($string) { $text = self::getInstance(); $key = strtoupper($string); $key = substr($key, 0, 1) == '_' ? substr($key, 1) : $key; if (isset ($text->strings[$key])) { $string = $text->strings[$key]; } else { if (defined($string)) { $string = constant($string); } } return $string; } public function dumpLanguage() { $out = ''; foreach ($this->strings as $key => $value) { $out .= "$key=$value\n"; } return $out; } public function asJavascript() { $out = ''; foreach ($this->strings as $key => $value) { $key = addcslashes($key, '\\\'"'); $value = addcslashes($value, '\\\'"'); if (!empty($out)) { $out .= ",\n"; } $out .= "'$key':\t'$value'"; } return $out; } public function resetTranslation() { $this->strings = $this->default_translation; } public function addDefaultLanguageStrings($stringList = array()) { if (!is_array($stringList)) { return; } if (empty($stringList)) { return; } $this->strings = array_merge($stringList, $this->strings); } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * The Akeeba Kickstart Factory class * This class is reponssible for instanciating all Akeeba Kicsktart classes */ class AKFactory { /** @var array A list of instantiated objects */ private $objectlist = array(); /** @var array Simple hash data storage */ private $varlist = array(); /** @var self Static instance */ private static $instance = null; /** Private constructor makes sure we can't directly instantiate the class */ private function __construct() { } /** * Gets a serialized snapshot of the Factory for safekeeping (hibernate) * * @return string The serialized snapshot of the Factory */ public static function serialize() { $engine = self::getUnarchiver(); $engine->shutdown(); $serialized = serialize(self::getInstance()); if (function_exists('base64_encode') && function_exists('base64_decode')) { $serialized = base64_encode($serialized); } return $serialized; } /** * Gets the unarchiver engine */ public static function &getUnarchiver($configOverride = null) { static $class_name; if (!empty($configOverride)) { if ($configOverride['reset']) { $class_name = null; } } if (empty($class_name)) { $filetype = self::get('kickstart.setup.filetype', null); if (empty($filetype)) { $filename = self::get('kickstart.setup.sourcefile', null); $basename = basename($filename); $baseextension = strtoupper(substr($basename, -3)); switch ($baseextension) { case 'JPA': $filetype = 'JPA'; break; case 'JPS': $filetype = 'JPS'; break; case 'ZIP': $filetype = 'ZIP'; break; default: die('Invalid archive type or extension in file ' . $filename); break; } } $class_name = 'AKUnarchiver' . ucfirst($filetype); } $destdir = self::get('kickstart.setup.destdir', null); if (empty($destdir)) { $destdir = KSROOTDIR; } $object = self::getClassInstance($class_name); if ($object->getState() == 'init') { $sourcePath = self::get('kickstart.setup.sourcepath', ''); $sourceFile = self::get('kickstart.setup.sourcefile', ''); if (!empty($sourcePath)) { $sourceFile = rtrim($sourcePath, '/\\') . '/' . $sourceFile; } // Initialize the object –– Any change here MUST be reflected to echoHeadJavascript (default values) $config = array( 'filename' => $sourceFile, 'restore_permissions' => self::get('kickstart.setup.restoreperms', 0), 'post_proc' => self::get('kickstart.procengine', 'direct'), 'add_path' => self::get('kickstart.setup.targetpath', $destdir), 'remove_path' => self::get('kickstart.setup.removepath', ''), 'rename_files' => self::get('kickstart.setup.renamefiles', array( '.htaccess' => 'htaccess.bak', 'php.ini' => 'php.ini.bak', 'web.config' => 'web.config.bak', '.user.ini' => '.user.ini.bak' )), 'skip_files' => self::get('kickstart.setup.skipfiles', array( basename(__FILE__), 'kickstart.php', 'abiautomation.ini', 'htaccess.bak', 'php.ini.bak', 'cacert.pem' )), 'ignoredirectories' => self::get('kickstart.setup.ignoredirectories', array( 'tmp', 'log', 'logs' )), ); if (!defined('KICKSTART')) { // In restore.php mode we have to exclude the restoration.php files $moreSkippedFiles = array( // Akeeba Backup for Joomla! 'administrator/components/com_akeeba/restoration.php', // Joomla! Update 'administrator/components/com_joomlaupdate/restoration.php', // Akeeba Backup for WordPress 'wp-content/plugins/akeebabackupwp/app/restoration.php', 'wp-content/plugins/akeebabackupcorewp/app/restoration.php', 'wp-content/plugins/akeebabackup/app/restoration.php', 'wp-content/plugins/akeebabackupwpcore/app/restoration.php', // Akeeba Solo 'app/restoration.php', ); $config['skip_files'] = array_merge($config['skip_files'], $moreSkippedFiles); } if (!empty($configOverride)) { $config = array_merge($config, $configOverride); } $object->setup($config); } return $object; } // ======================================================================== // Public factory interface // ======================================================================== public static function get($key, $default = null) { $self = self::getInstance(); if (array_key_exists($key, $self->varlist)) { return $self->varlist[$key]; } else { return $default; } } /** * Gets a single, internally used instance of the Factory * * @param string $serialized_data [optional] Serialized data to spawn the instance from * * @return AKFactory A reference to the unique Factory object instance */ protected static function &getInstance($serialized_data = null) { if (!is_object(self::$instance) || !is_null($serialized_data)) { if (!is_null($serialized_data)) { self::$instance = unserialize($serialized_data); } else { self::$instance = new self(); } } return self::$instance; } /** * Internal function which instanciates a class named $class_name. * The autoloader * * @param string $class_name * * @return object */ protected static function &getClassInstance($class_name) { $self = self::getInstance(); if (!isset($self->objectlist[$class_name])) { $self->objectlist[$class_name] = new $class_name; } return $self->objectlist[$class_name]; } // ======================================================================== // Public hash data storage interface // ======================================================================== /** * Regenerates the full Factory state from a serialized snapshot (resume) * * @param string $serialized_data The serialized snapshot to resume from */ public static function unserialize($serialized_data) { if (function_exists('base64_encode') && function_exists('base64_decode')) { $serialized_data = base64_decode($serialized_data); } self::getInstance($serialized_data); } /** * Reset the internal factory state, freeing all previously created objects */ public static function nuke() { self::$instance = null; } // ======================================================================== // Akeeba Kickstart classes // ======================================================================== public static function set($key, $value) { $self = self::getInstance(); $self->varlist[$key] = $value; } /** * Gets the post processing engine * * @param string $proc_engine */ public static function &getPostProc($proc_engine = null) { static $class_name; if (empty($class_name)) { if (empty($proc_engine)) { $proc_engine = self::get('kickstart.procengine', 'direct'); } $class_name = 'AKPostproc' . ucfirst($proc_engine); } return self::getClassInstance($class_name); } /** * Get the a reference to the Akeeba Engine's timer * * @return AKCoreTimer */ public static function &getTimer() { return self::getClassInstance('AKCoreTimer'); } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * Interface for AES encryption adapters */ interface AKEncryptionAESAdapterInterface { /** * Decrypts a string. Returns the raw binary ciphertext, zero-padded. * * @param string $plainText The plaintext to encrypt * @param string $key The raw binary key (will be zero-padded or chopped if its size is different than the block size) * * @return string The raw encrypted binary string. */ public function decrypt($plainText, $key); /** * Returns the encryption block size in bytes * * @return int */ public function getBlockSize(); /** * Is this adapter supported? * * @return bool */ public function isSupported(); } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * Abstract AES encryption class */ abstract class AKEncryptionAESAdapterAbstract { /** * Trims or zero-pads a key / IV * * @param string $key The key or IV to treat * @param int $size The block size of the currently used algorithm * * @return null|string Null if $key is null, treated string of $size byte length otherwise */ public function resizeKey($key, $size) { if (empty($key)) { return null; } $keyLength = strlen($key); if (function_exists('mb_strlen')) { $keyLength = mb_strlen($key, 'ASCII'); } if ($keyLength == $size) { return $key; } if ($keyLength > $size) { if (function_exists('mb_substr')) { return mb_substr($key, 0, $size, 'ASCII'); } return substr($key, 0, $size); } return $key . str_repeat("\0", ($size - $keyLength)); } /** * Returns null bytes to append to the string so that it's zero padded to the specified block size * * @param string $string The binary string which will be zero padded * @param int $blockSize The block size * * @return string The zero bytes to append to the string to zero pad it to $blockSize */ protected function getZeroPadding($string, $blockSize) { $stringSize = strlen($string); if (function_exists('mb_strlen')) { $stringSize = mb_strlen($string, 'ASCII'); } if ($stringSize == $blockSize) { return ''; } if ($stringSize < $blockSize) { return str_repeat("\0", $blockSize - $stringSize); } $paddingBytes = $stringSize % $blockSize; return str_repeat("\0", $blockSize - $paddingBytes); } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ class Mcrypt extends AKEncryptionAESAdapterAbstract implements AKEncryptionAESAdapterInterface { protected $cipherType = MCRYPT_RIJNDAEL_128; protected $cipherMode = MCRYPT_MODE_CBC; public function decrypt($cipherText, $key) { $iv_size = $this->getBlockSize(); $key = $this->resizeKey($key, $iv_size); $iv = substr($cipherText, 0, $iv_size); $cipherText = substr($cipherText, $iv_size); $plainText = mcrypt_decrypt($this->cipherType, $key, $cipherText, $this->cipherMode, $iv); return $plainText; } public function isSupported() { if (!function_exists('mcrypt_get_key_size')) { return false; } if (!function_exists('mcrypt_get_iv_size')) { return false; } if (!function_exists('mcrypt_create_iv')) { return false; } if (!function_exists('mcrypt_encrypt')) { return false; } if (!function_exists('mcrypt_decrypt')) { return false; } if (!function_exists('mcrypt_list_algorithms')) { return false; } if (!function_exists('hash')) { return false; } if (!function_exists('hash_algos')) { return false; } $algorightms = mcrypt_list_algorithms(); if (!in_array('rijndael-128', $algorightms)) { return false; } if (!in_array('rijndael-192', $algorightms)) { return false; } if (!in_array('rijndael-256', $algorightms)) { return false; } $algorightms = hash_algos(); if (!in_array('sha256', $algorightms)) { return false; } return true; } public function getBlockSize() { return mcrypt_get_iv_size($this->cipherType, $this->cipherMode); } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ class OpenSSL extends AKEncryptionAESAdapterAbstract implements AKEncryptionAESAdapterInterface { /** * The OpenSSL options for encryption / decryption * * @var int */ protected $openSSLOptions = 0; /** * The encryption method to use * * @var string */ protected $method = 'aes-128-cbc'; public function __construct() { $this->openSSLOptions = OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING; } public function decrypt($cipherText, $key) { $iv_size = $this->getBlockSize(); $key = $this->resizeKey($key, $iv_size); $iv = substr($cipherText, 0, $iv_size); $cipherText = substr($cipherText, $iv_size); $plainText = openssl_decrypt($cipherText, $this->method, $key, $this->openSSLOptions, $iv); return $plainText; } public function isSupported() { if (!function_exists('openssl_get_cipher_methods')) { return false; } if (!function_exists('openssl_random_pseudo_bytes')) { return false; } if (!function_exists('openssl_cipher_iv_length')) { return false; } if (!function_exists('openssl_encrypt')) { return false; } if (!function_exists('openssl_decrypt')) { return false; } if (!function_exists('hash')) { return false; } if (!function_exists('hash_algos')) { return false; } $algorightms = openssl_get_cipher_methods(); if (!in_array('aes-128-cbc', $algorightms)) { return false; } $algorightms = hash_algos(); if (!in_array('sha256', $algorightms)) { return false; } return true; } /** * @return int */ public function getBlockSize() { return openssl_cipher_iv_length($this->method); } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * AES implementation in PHP (c) Chris Veness 2005-2016. * Right to use and adapt is granted for under a simple creative commons attribution * licence. No warranty of any form is offered. * * Heavily modified for Akeeba Backup by Nicholas K. Dionysopoulos * Also added AES-128 CBC mode (with mcrypt and OpenSSL) on top of AES CTR */ class AKEncryptionAES { // Sbox is pre-computed multiplicative inverse in GF(2^8) used in SubBytes and KeyExpansion [�5.1.1] protected static $Sbox = array(0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16); // Rcon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in GF(2^8)] [�5.2] protected static $Rcon = array( array(0x00, 0x00, 0x00, 0x00), array(0x01, 0x00, 0x00, 0x00), array(0x02, 0x00, 0x00, 0x00), array(0x04, 0x00, 0x00, 0x00), array(0x08, 0x00, 0x00, 0x00), array(0x10, 0x00, 0x00, 0x00), array(0x20, 0x00, 0x00, 0x00), array(0x40, 0x00, 0x00, 0x00), array(0x80, 0x00, 0x00, 0x00), array(0x1b, 0x00, 0x00, 0x00), array(0x36, 0x00, 0x00, 0x00)); protected static $passwords = array(); /** * The algorithm to use for PBKDF2. Must be a supported hash_hmac algorithm. Default: sha1 * * @var string */ private static $pbkdf2Algorithm = 'sha1'; /** * Number of iterations to use for PBKDF2 * * @var int */ private static $pbkdf2Iterations = 1000; /** * Should we use a static salt for PBKDF2? * * @var int */ private static $pbkdf2UseStaticSalt = 0; /** * The static salt to use for PBKDF2 * * @var string */ private static $pbkdf2StaticSalt = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /** * Encrypt a text using AES encryption in Counter mode of operation * - see http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf * * Unicode multi-byte character safe * * @param string $plaintext Source text to be encrypted * @param string $password The password to use to generate a key * @param int $nBits Number of bits to be used in the key (128, 192, or 256) * * @return string Encrypted text */ public static function AESEncryptCtr($plaintext, $password, $nBits) { $blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES if (!($nBits == 128 || $nBits == 192 || $nBits == 256)) { return ''; } // standard allows 128/192/256 bit keys // note PHP (5) gives us plaintext and password in UTF8 encoding! // use AES itself to encrypt password to get cipher key (using plain password as source for // key expansion) - gives us well encrypted key $nBytes = $nBits / 8; // no bytes in key $pwBytes = array(); for ($i = 0; $i < $nBytes; $i++) { $pwBytes[$i] = ord(substr($password, $i, 1)) & 0xff; } $key = self::Cipher($pwBytes, self::KeyExpansion($pwBytes)); $key = array_merge($key, array_slice($key, 0, $nBytes - 16)); // expand key to 16/24/32 bytes long // initialise counter block (NIST SP800-38A �B.2): millisecond time-stamp for nonce in // 1st 8 bytes, block counter in 2nd 8 bytes $counterBlock = array(); $nonce = floor(microtime(true) * 1000); // timestamp: milliseconds since 1-Jan-1970 $nonceSec = floor($nonce / 1000); $nonceMs = $nonce % 1000; // encode nonce with seconds in 1st 4 bytes, and (repeated) ms part filling 2nd 4 bytes for ($i = 0; $i < 4; $i++) { $counterBlock[$i] = self::urs($nonceSec, $i * 8) & 0xff; } for ($i = 0; $i < 4; $i++) { $counterBlock[$i + 4] = $nonceMs & 0xff; } // and convert it to a string to go on the front of the ciphertext $ctrTxt = ''; for ($i = 0; $i < 8; $i++) { $ctrTxt .= chr($counterBlock[$i]); } // generate key schedule - an expansion of the key into distinct Key Rounds for each round $keySchedule = self::KeyExpansion($key); $blockCount = ceil(strlen($plaintext) / $blockSize); $ciphertxt = array(); // ciphertext as array of strings for ($b = 0; $b < $blockCount; $b++) { // set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes) // done in two stages for 32-bit ops: using two words allows us to go past 2^32 blocks (68GB) for ($c = 0; $c < 4; $c++) { $counterBlock[15 - $c] = self::urs($b, $c * 8) & 0xff; } for ($c = 0; $c < 4; $c++) { $counterBlock[15 - $c - 4] = self::urs($b / 0x100000000, $c * 8); } $cipherCntr = self::Cipher($counterBlock, $keySchedule); // -- encrypt counter block -- // block size is reduced on final block $blockLength = $b < $blockCount - 1 ? $blockSize : (strlen($plaintext) - 1) % $blockSize + 1; $cipherByte = array(); for ($i = 0; $i < $blockLength; $i++) { // -- xor plaintext with ciphered counter byte-by-byte -- $cipherByte[$i] = $cipherCntr[$i] ^ ord(substr($plaintext, $b * $blockSize + $i, 1)); $cipherByte[$i] = chr($cipherByte[$i]); } $ciphertxt[$b] = implode('', $cipherByte); // escape troublesome characters in ciphertext } // implode is more efficient than repeated string concatenation $ciphertext = $ctrTxt . implode('', $ciphertxt); $ciphertext = base64_encode($ciphertext); return $ciphertext; } /** * AES Cipher function: encrypt 'input' with Rijndael algorithm * * @param array $input Message as byte-array (16 bytes) * @param array $w key schedule as 2D byte-array (Nr+1 x Nb bytes) - * generated from the cipher key by KeyExpansion() * * @return string Ciphertext as byte-array (16 bytes) */ protected static function Cipher($input, $w) { // main Cipher function [�5.1] $Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES) $Nr = count($w) / $Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys $state = array(); // initialise 4xNb byte-array 'state' with input [�3.4] for ($i = 0; $i < 4 * $Nb; $i++) { $state[$i % 4][floor($i / 4)] = $input[$i]; } $state = self::AddRoundKey($state, $w, 0, $Nb); for ($round = 1; $round < $Nr; $round++) { // apply Nr rounds $state = self::SubBytes($state, $Nb); $state = self::ShiftRows($state, $Nb); $state = self::MixColumns($state); $state = self::AddRoundKey($state, $w, $round, $Nb); } $state = self::SubBytes($state, $Nb); $state = self::ShiftRows($state, $Nb); $state = self::AddRoundKey($state, $w, $Nr, $Nb); $output = array(4 * $Nb); // convert state to 1-d array before returning [�3.4] for ($i = 0; $i < 4 * $Nb; $i++) { $output[$i] = $state[$i % 4][floor($i / 4)]; } return $output; } protected static function AddRoundKey($state, $w, $rnd, $Nb) { // xor Round Key into state S [�5.1.4] for ($r = 0; $r < 4; $r++) { for ($c = 0; $c < $Nb; $c++) { $state[$r][$c] ^= $w[$rnd * 4 + $c][$r]; } } return $state; } protected static function SubBytes($s, $Nb) { // apply SBox to state S [�5.1.1] for ($r = 0; $r < 4; $r++) { for ($c = 0; $c < $Nb; $c++) { $s[$r][$c] = self::$Sbox[$s[$r][$c]]; } } return $s; } protected static function ShiftRows($s, $Nb) { // shift row r of state S left by r bytes [�5.1.2] $t = array(4); for ($r = 1; $r < 4; $r++) { for ($c = 0; $c < 4; $c++) { $t[$c] = $s[$r][($c + $r) % $Nb]; } // shift into temp copy for ($c = 0; $c < 4; $c++) { $s[$r][$c] = $t[$c]; } // and copy back } // note that this will work for Nb=4,5,6, but not 7,8 (always 4 for AES): return $s; // see fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.311.pdf } protected static function MixColumns($s) { // combine bytes of each col of state S [�5.1.3] for ($c = 0; $c < 4; $c++) { $a = array(4); // 'a' is a copy of the current column from 's' $b = array(4); // 'b' is a�{02} in GF(2^8) for ($i = 0; $i < 4; $i++) { $a[$i] = $s[$i][$c]; $b[$i] = $s[$i][$c] & 0x80 ? $s[$i][$c] << 1 ^ 0x011b : $s[$i][$c] << 1; } // a[n] ^ b[n] is a�{03} in GF(2^8) $s[0][$c] = $b[0] ^ $a[1] ^ $b[1] ^ $a[2] ^ $a[3]; // 2*a0 + 3*a1 + a2 + a3 $s[1][$c] = $a[0] ^ $b[1] ^ $a[2] ^ $b[2] ^ $a[3]; // a0 * 2*a1 + 3*a2 + a3 $s[2][$c] = $a[0] ^ $a[1] ^ $b[2] ^ $a[3] ^ $b[3]; // a0 + a1 + 2*a2 + 3*a3 $s[3][$c] = $a[0] ^ $b[0] ^ $a[1] ^ $a[2] ^ $b[3]; // 3*a0 + a1 + a2 + 2*a3 } return $s; } /** * Key expansion for Rijndael Cipher(): performs key expansion on cipher key * to generate a key schedule * * @param array $key Cipher key byte-array (16 bytes) * * @return array Key schedule as 2D byte-array (Nr+1 x Nb bytes) */ protected static function KeyExpansion($key) { // generate Key Schedule from Cipher Key [�5.2] // block size (in words): no of columns in state (fixed at 4 for AES) $Nb = 4; // key length (in words): 4/6/8 for 128/192/256-bit keys $Nk = (int) (count($key) / 4); // no of rounds: 10/12/14 for 128/192/256-bit keys $Nr = $Nk + 6; $w = array(); $temp = array(); for ($i = 0; $i < $Nk; $i++) { $r = array($key[4 * $i], $key[4 * $i + 1], $key[4 * $i + 2], $key[4 * $i + 3]); $w[$i] = $r; } for ($i = $Nk; $i < ($Nb * ($Nr + 1)); $i++) { $w[$i] = array(); for ($t = 0; $t < 4; $t++) { $temp[$t] = $w[$i - 1][$t]; } if ($i % $Nk == 0) { $temp = self::SubWord(self::RotWord($temp)); for ($t = 0; $t < 4; $t++) { $rConIndex = (int) ($i / $Nk); $temp[$t] ^= self::$Rcon[$rConIndex][$t]; } } else if ($Nk > 6 && $i % $Nk == 4) { $temp = self::SubWord($temp); } for ($t = 0; $t < 4; $t++) { $w[$i][$t] = $w[$i - $Nk][$t] ^ $temp[$t]; } } return $w; } protected static function SubWord($w) { // apply SBox to 4-byte word w for ($i = 0; $i < 4; $i++) { $w[$i] = self::$Sbox[$w[$i]]; } return $w; } /* * Unsigned right shift function, since PHP has neither >>> operator nor unsigned ints * * @param a number to be shifted (32-bit integer) * @param b number of bits to shift a to the right (0..31) * @return a right-shifted and zero-filled by b bits */ protected static function RotWord($w) { // rotate 4-byte word w left by one byte $tmp = $w[0]; for ($i = 0; $i < 3; $i++) { $w[$i] = $w[$i + 1]; } $w[3] = $tmp; return $w; } protected static function urs($a, $b) { $a &= 0xffffffff; $b &= 0x1f; // (bounds check) if ($a & 0x80000000 && $b > 0) { // if left-most bit set $a = ($a >> 1) & 0x7fffffff; // right-shift one bit & clear left-most bit $a = $a >> ($b - 1); // remaining right-shifts } else { // otherwise $a = ($a >> $b); // use normal right-shift } return $a; } /** * Decrypt a text encrypted by AES in counter mode of operation * * @param string $ciphertext Source text to be decrypted * @param string $password The password to use to generate a key * @param int $nBits Number of bits to be used in the key (128, 192, or 256) * * @return string Decrypted text */ public static function AESDecryptCtr($ciphertext, $password, $nBits) { $blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES if (!($nBits == 128 || $nBits == 192 || $nBits == 256)) { return ''; } // standard allows 128/192/256 bit keys $ciphertext = base64_decode($ciphertext); // use AES to encrypt password (mirroring encrypt routine) $nBytes = $nBits / 8; // no bytes in key $pwBytes = array(); for ($i = 0; $i < $nBytes; $i++) { $pwBytes[$i] = ord(substr($password, $i, 1)) & 0xff; } $key = self::Cipher($pwBytes, self::KeyExpansion($pwBytes)); $key = array_merge($key, array_slice($key, 0, $nBytes - 16)); // expand key to 16/24/32 bytes long // recover nonce from 1st element of ciphertext $counterBlock = array(); $ctrTxt = substr($ciphertext, 0, 8); for ($i = 0; $i < 8; $i++) { $counterBlock[$i] = ord(substr($ctrTxt, $i, 1)); } // generate key schedule $keySchedule = self::KeyExpansion($key); // separate ciphertext into blocks (skipping past initial 8 bytes) $nBlocks = ceil((strlen($ciphertext) - 8) / $blockSize); $ct = array(); for ($b = 0; $b < $nBlocks; $b++) { $ct[$b] = substr($ciphertext, 8 + $b * $blockSize, 16); } $ciphertext = $ct; // ciphertext is now array of block-length strings // plaintext will get generated block-by-block into array of block-length strings $plaintxt = array(); for ($b = 0; $b < $nBlocks; $b++) { // set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes) for ($c = 0; $c < 4; $c++) { $counterBlock[15 - $c] = self::urs($b, $c * 8) & 0xff; } for ($c = 0; $c < 4; $c++) { $counterBlock[15 - $c - 4] = self::urs(($b + 1) / 0x100000000 - 1, $c * 8) & 0xff; } $cipherCntr = self::Cipher($counterBlock, $keySchedule); // encrypt counter block $plaintxtByte = array(); for ($i = 0; $i < strlen($ciphertext[$b]); $i++) { // -- xor plaintext with ciphered counter byte-by-byte -- $plaintxtByte[$i] = $cipherCntr[$i] ^ ord(substr($ciphertext[$b], $i, 1)); $plaintxtByte[$i] = chr($plaintxtByte[$i]); } $plaintxt[$b] = implode('', $plaintxtByte); } // join array of blocks into single plaintext string $plaintext = implode('', $plaintxt); return $plaintext; } /** * AES decryption in CBC mode. This is the standard mode (the CTR methods * actually use Rijndael-128 in CTR mode, which - technically - isn't AES). * * It supports AES-128 only. It assumes that the last 4 bytes * contain a little-endian unsigned long integer representing the unpadded * data length. * * @since 3.0.1 * @author Nicholas K. Dionysopoulos * * @param string $ciphertext The data to encrypt * @param string $password Encryption password * * @return string The plaintext */ public static function AESDecryptCBC($ciphertext, $password) { $adapter = self::getAdapter(); if (!$adapter->isSupported()) { return false; } // Read the data size $data_size = unpack('V', substr($ciphertext, -4)); // Do I have a PBKDF2 salt? $salt = substr($ciphertext, -92, 68); $rightStringLimit = -4; $params = self::getKeyDerivationParameters(); $keySizeBytes = $params['keySize']; $algorithm = $params['algorithm']; $iterations = $params['iterations']; $useStaticSalt = $params['useStaticSalt']; if (substr($salt, 0, 4) == 'JPST') { // We have a stored salt. Retrieve it and tell decrypt to process the string minus the last 44 bytes // (4 bytes for JPST, 16 bytes for the salt, 4 bytes for JPIV, 16 bytes for the IV, 4 bytes for the // uncompressed string length - note that using PBKDF2 means we're also using a randomized IV per the // format specification). $salt = substr($salt, 4); $rightStringLimit -= 68; $key = self::pbkdf2($password, $salt, $algorithm, $iterations, $keySizeBytes); } elseif ($useStaticSalt) { // We have a static salt. Use it for PBKDF2. $key = self::getStaticSaltExpandedKey($password); } else { // Get the expanded key from the password. THIS USES THE OLD, INSECURE METHOD. $key = self::expandKey($password); } // Try to get the IV from the data $iv = substr($ciphertext, -24, 20); if (substr($iv, 0, 4) == 'JPIV') { // We have a stored IV. Retrieve it and tell mdecrypt to process the string minus the last 24 bytes // (4 bytes for JPIV, 16 bytes for the IV, 4 bytes for the uncompressed string length) $iv = substr($iv, 4); $rightStringLimit -= 20; } else { // No stored IV. Do it the dumb way. $iv = self::createTheWrongIV($password); } // Decrypt $plaintext = $adapter->decrypt($iv . substr($ciphertext, 0, $rightStringLimit), $key); // Trim padding, if necessary if (strlen($plaintext) > $data_size) { $plaintext = substr($plaintext, 0, $data_size); } return $plaintext; } /** * That's the old way of creating an IV that's definitely not cryptographically sound. * * DO NOT USE, EVER, UNLESS YOU WANT TO DECRYPT LEGACY DATA * * @param string $password The raw password from which we create an IV in a super bozo way * * @return string A 16-byte IV string */ public static function createTheWrongIV($password) { static $ivs = array(); $key = md5($password); if (!isset($ivs[$key])) { $nBytes = 16; // AES uses a 128 -bit (16 byte) block size, hence the IV size is always 16 bytes $pwBytes = array(); for ($i = 0; $i < $nBytes; $i++) { $pwBytes[$i] = ord(substr($password, $i, 1)) & 0xff; } $iv = self::Cipher($pwBytes, self::KeyExpansion($pwBytes)); $newIV = ''; foreach ($iv as $int) { $newIV .= chr($int); } $ivs[$key] = $newIV; } return $ivs[$key]; } /** * Expand the password to an appropriate 128-bit encryption key * * @param string $password * * @return string * * @since 5.2.0 * @author Nicholas K. Dionysopoulos */ public static function expandKey($password) { // Try to fetch cached key or create it if it doesn't exist $nBits = 128; $lookupKey = md5($password . '-' . $nBits); if (array_key_exists($lookupKey, self::$passwords)) { $key = self::$passwords[$lookupKey]; return $key; } // use AES itself to encrypt password to get cipher key (using plain password as source for // key expansion) - gives us well encrypted key. $nBytes = $nBits / 8; // Number of bytes in key $pwBytes = array(); for ($i = 0; $i < $nBytes; $i++) { $pwBytes[$i] = ord(substr($password, $i, 1)) & 0xff; } $key = self::Cipher($pwBytes, self::KeyExpansion($pwBytes)); $key = array_merge($key, array_slice($key, 0, $nBytes - 16)); // expand key to 16/24/32 bytes long $newKey = ''; foreach ($key as $int) { $newKey .= chr($int); } $key = $newKey; self::$passwords[$lookupKey] = $key; return $key; } /** * Returns the correct AES-128 CBC encryption adapter * * @return AKEncryptionAESAdapterInterface * * @since 5.2.0 * @author Nicholas K. Dionysopoulos */ public static function getAdapter() { static $adapter = null; if (is_object($adapter) && ($adapter instanceof AKEncryptionAESAdapterInterface)) { return $adapter; } $adapter = new OpenSSL(); if (!$adapter->isSupported()) { $adapter = new Mcrypt(); } return $adapter; } /** * @return string */ public static function getPbkdf2Algorithm() { return self::$pbkdf2Algorithm; } /** * @param string $pbkdf2Algorithm * @return void */ public static function setPbkdf2Algorithm($pbkdf2Algorithm) { self::$pbkdf2Algorithm = $pbkdf2Algorithm; } /** * @return int */ public static function getPbkdf2Iterations() { return self::$pbkdf2Iterations; } /** * @param int $pbkdf2Iterations * @return void */ public static function setPbkdf2Iterations($pbkdf2Iterations) { self::$pbkdf2Iterations = $pbkdf2Iterations; } /** * @return int */ public static function getPbkdf2UseStaticSalt() { return self::$pbkdf2UseStaticSalt; } /** * @param int $pbkdf2UseStaticSalt * @return void */ public static function setPbkdf2UseStaticSalt($pbkdf2UseStaticSalt) { self::$pbkdf2UseStaticSalt = $pbkdf2UseStaticSalt; } /** * @return string */ public static function getPbkdf2StaticSalt() { return self::$pbkdf2StaticSalt; } /** * @param string $pbkdf2StaticSalt * @return void */ public static function setPbkdf2StaticSalt($pbkdf2StaticSalt) { self::$pbkdf2StaticSalt = $pbkdf2StaticSalt; } /** * Get the parameters fed into PBKDF2 to expand the user password into an encryption key. These are the static * parameters (key size, hashing algorithm and number of iterations). A new salt is used for each encryption block * to minimize the risk of attacks against the password. * * @return array */ public static function getKeyDerivationParameters() { return array( 'keySize' => 16, 'algorithm' => self::$pbkdf2Algorithm, 'iterations' => self::$pbkdf2Iterations, 'useStaticSalt' => self::$pbkdf2UseStaticSalt, 'staticSalt' => self::$pbkdf2StaticSalt, ); } /** * PBKDF2 key derivation function as defined by RSA's PKCS #5: https://www.ietf.org/rfc/rfc2898.txt * * Test vectors can be found here: https://www.ietf.org/rfc/rfc6070.txt * * This implementation of PBKDF2 was originally created by https://defuse.ca * With improvements by http://www.variations-of-shadow.com * Modified for Akeeba Engine by Akeeba Ltd (removed unnecessary checks to make it faster) * * @param string $password The password. * @param string $salt A salt that is unique to the password. * @param string $algorithm The hash algorithm to use. Default is sha1. * @param int $count Iteration count. Higher is better, but slower. Default: 1000. * @param int $key_length The length of the derived key in bytes. * * @return string A string of $key_length bytes */ public static function pbkdf2($password, $salt, $algorithm = 'sha1', $count = 1000, $key_length = 16) { if (function_exists("hash_pbkdf2")) { return hash_pbkdf2($algorithm, $password, $salt, $count, $key_length, true); } $hash_length = akstringlen(hash($algorithm, "", true)); $block_count = ceil($key_length / $hash_length); $output = ""; for ($i = 1; $i <= $block_count; $i++) { // $i encoded as 4 bytes, big endian. $last = $salt . pack("N", $i); // First iteration $xorResult = hash_hmac($algorithm, $last, $password, true); $last = $xorResult; // Perform the other $count - 1 iterations for ($j = 1; $j < $count; $j++) { $last = hash_hmac($algorithm, $last, $password, true); $xorResult ^= $last; } $output .= $xorResult; } return aksubstr($output, 0, $key_length); } /** * Get the expanded key from the user supplied password using a static salt. The results are cached for performance * reasons. * * @param string $password The user-supplied password, UTF-8 encoded. * * @return string The expanded key */ private static function getStaticSaltExpandedKey($password) { $params = self::getKeyDerivationParameters(); $keySizeBytes = $params['keySize']; $algorithm = $params['algorithm']; $iterations = $params['iterations']; $staticSalt = $params['staticSalt']; $lookupKey = "PBKDF2-$algorithm-$iterations-" . md5($password . $staticSalt); if (!array_key_exists($lookupKey, self::$passwords)) { self::$passwords[$lookupKey] = self::pbkdf2($password, $staticSalt, $algorithm, $iterations, $keySizeBytes); } return self::$passwords[$lookupKey]; } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ /** * The Master Setup will read the configuration parameters from restoration.php or * the JSON-encoded "configuration" input variable and return the status. * * @return bool True if the master configuration was applied to the Factory object */ function masterSetup() { // ------------------------------------------------------------ // 1. Import basic setup parameters // ------------------------------------------------------------ $ini_data = null; // In restore.php mode, require restoration.php or fail if (!defined('KICKSTART')) { // This is the standalone mode, used by Akeeba Backup Professional. It looks for a restoration.php // file to perform its magic. If the file is not there, we will abort. $setupFile = 'restoration.php'; if (!file_exists($setupFile)) { AKFactory::set('kickstart.enabled', false); return false; } // Load restoration.php. It creates a global variable named $restoration_setup require_once $setupFile; $ini_data = $restoration_setup; if (empty($ini_data)) { // No parameters fetched. Darn, how am I supposed to work like that?! AKFactory::set('kickstart.enabled', false); return false; } AKFactory::set('kickstart.enabled', true); } else { // Maybe we have $restoration_setup defined in the head of kickstart.php global $restoration_setup; if (!empty($restoration_setup) && !is_array($restoration_setup)) { $ini_data = AKText::parse_ini_file($restoration_setup, false, true); } elseif (is_array($restoration_setup)) { $ini_data = $restoration_setup; } } // Import any data from $restoration_setup if (!empty($ini_data)) { foreach ($ini_data as $key => $value) { AKFactory::set($key, $value); } AKFactory::set('kickstart.enabled', true); } // Reinitialize $ini_data $ini_data = null; // ------------------------------------------------------------ // 2. Explode JSON parameters into $_REQUEST scope // ------------------------------------------------------------ // Detect a JSON string in the request variable and store it. $json = getQueryParam('json', null); // Remove everything from the request, post and get arrays if (!empty($_REQUEST)) { foreach ($_REQUEST as $key => $value) { unset($_REQUEST[$key]); } } if (!empty($_POST)) { foreach ($_POST as $key => $value) { unset($_POST[$key]); } } if (!empty($_GET)) { foreach ($_GET as $key => $value) { unset($_GET[$key]); } } // Decrypt a possibly encrypted JSON string $password = AKFactory::get('kickstart.security.password', null); if (!empty($json)) { if (!empty($password)) { $json = AKEncryptionAES::AESDecryptCtr($json, $password, 128); if (empty($json)) { die('###{"status":false,"message":"Invalid login"}###'); } } // Get the raw data $raw = json_decode($json, true); if (!empty($password) && (empty($raw))) { die('###{"status":false,"message":"Invalid login"}###'); } // Pass all JSON data to the request array if (!empty($raw)) { foreach ($raw as $key => $value) { $_REQUEST[$key] = $value; } } } elseif (!empty($password)) { die('###{"status":false,"message":"Invalid login"}###'); } // ------------------------------------------------------------ // 3. Try the "factory" variable // ------------------------------------------------------------ // A "factory" variable will override all other settings. $serialized = getQueryParam('factory', null); if (!is_null($serialized)) { // Get the serialized factory AKFactory::unserialize($serialized); AKFactory::set('kickstart.enabled', true); return true; } // ------------------------------------------------------------ // 4. Try the configuration variable for Kickstart // ------------------------------------------------------------ if (defined('KICKSTART')) { $configuration = getQueryParam('configuration'); if (!is_null($configuration)) { // Let's decode the configuration from JSON to array $ini_data = json_decode($configuration, true); } else { // Neither exists. Enable Kickstart's interface anyway. $ini_data = array('kickstart.enabled' => true); } // Import any INI data we might have from other sources if (!empty($ini_data)) { foreach ($ini_data as $key => $value) { AKFactory::set($key, $value); } AKFactory::set('kickstart.enabled', true); return true; } } } /** * Akeeba Restore * A JSON-powered JPA, JPS and ZIP archive extraction library * * @copyright 2008-2017 Nicholas K. Dionysopoulos / Akeeba Ltd. * @license GNU GPL v2 or - at your option - any later version * @package akeebabackup * @subpackage kickstart */ // Mini-controller for restore.php if (!defined('KICKSTART')) { // The observer class, used to report number of files and bytes processed class RestorationObserver extends AKAbstractPartObserver { public $compressedTotal = 0; public $uncompressedTotal = 0; public $filesProcessed = 0; public function update($object, $message) { if (!is_object($message)) { return; } if (!array_key_exists('type', get_object_vars($message))) { return; } if ($message->type == 'startfile') { $this->filesProcessed++; $this->compressedTotal += $message->content->compressed; $this->uncompressedTotal += $message->content->uncompressed; } } public function __toString() { return __CLASS__; } } // Import configuration masterSetup(); $retArray = array( 'status' => true, 'message' => null ); $enabled = AKFactory::get('kickstart.enabled', false); if ($enabled) { $task = getQueryParam('task'); switch ($task) { case 'ping': // ping task - realy does nothing! $timer = AKFactory::getTimer(); $timer->enforce_min_exec_time(); break; /** * There are two separate steps here since we were using an inefficient restoration intialization method in * the past. Now both startRestore and stepRestore are identical. The difference in behavior depends * exclusively on the calling Javascript. If no serialized factory was passed in the request then we start a * new restoration. If a serialized factory was passed in the request then the restoration is resumed. For * this reason we should NEVER call AKFactory::nuke() in startRestore anymore: that would simply reset the * extraction engine configuration which was done in masterSetup() leading to an error about the file being * invalid (since no file is found). */ case 'startRestore': case 'stepRestore': $engine = AKFactory::getUnarchiver(); // Get the engine $observer = new RestorationObserver(); // Create a new observer $engine->attach($observer); // Attach the observer $engine->tick(); $ret = $engine->getStatusArray(); if ($ret['Error'] != '') { $retArray['status'] = false; $retArray['done'] = true; $retArray['message'] = $ret['Error']; } elseif (!$ret['HasRun']) { $retArray['files'] = $observer->filesProcessed; $retArray['bytesIn'] = $observer->compressedTotal; $retArray['bytesOut'] = $observer->uncompressedTotal; $retArray['status'] = true; $retArray['done'] = true; } else { $retArray['files'] = $observer->filesProcessed; $retArray['bytesIn'] = $observer->compressedTotal; $retArray['bytesOut'] = $observer->uncompressedTotal; $retArray['status'] = true; $retArray['done'] = false; $retArray['factory'] = AKFactory::serialize(); } break; case 'finalizeRestore': $root = AKFactory::get('kickstart.setup.destdir'); // Remove the installation directory recursive_remove_directory($root . '/installation'); $postproc = AKFactory::getPostProc(); /** * Should I rename the htaccess.bak and web.config.bak files back to their live filenames...? */ $renameFiles = AKFactory::get('kickstart.setup.postrenamefiles', true); if ($renameFiles) { // Rename htaccess.bak to .htaccess if (file_exists($root . '/htaccess.bak')) { if (file_exists($root . '/.htaccess')) { $postproc->unlink($root . '/.htaccess'); } $postproc->rename($root . '/htaccess.bak', $root . '/.htaccess'); } // Rename htaccess.bak to .htaccess if (file_exists($root . '/web.config.bak')) { if (file_exists($root . '/web.config')) { $postproc->unlink($root . '/web.config'); } $postproc->rename($root . '/web.config.bak', $root . '/web.config'); } } // Remove restoration.php $basepath = KSROOTDIR; $basepath = rtrim(str_replace('\\', '/', $basepath), '/'); if (!empty($basepath)) { $basepath .= '/'; } $postproc->unlink($basepath . 'restoration.php'); // Import a custom finalisation file $filename = dirname(__FILE__) . '/restore_finalisation.php'; if (file_exists($filename)) { // opcode cache busting before including the filename if (function_exists('opcache_invalidate')) { opcache_invalidate($filename); } if (function_exists('apc_compile_file')) { apc_compile_file($filename); } if (function_exists('wincache_refresh_if_changed')) { wincache_refresh_if_changed(array($filename)); } if (function_exists('xcache_asm')) { xcache_asm($filename); } include_once $filename; } // Run a custom finalisation script if (function_exists('finalizeRestore')) { finalizeRestore($root, $basepath); } break; default: // Invalid task! $enabled = false; break; } } // Maybe we weren't authorized or the task was invalid? if (!$enabled) { // Maybe the user failed to enter any information $retArray['status'] = false; $retArray['message'] = AKText::_('ERR_INVALID_LOGIN'); } // JSON encode the message $json = json_encode($retArray); // Do I have to encrypt? $password = AKFactory::get('kickstart.security.password', null); if (!empty($password)) { $json = AKEncryptionAES::AESEncryptCtr($json, $password, 128); } // Return the message echo "###$json###"; } // ------------ lixlpixel recursive PHP functions ------------- // recursive_remove_directory( directory to delete, empty ) // expects path to directory and optional TRUE / FALSE to empty // of course PHP has to have the rights to delete the directory // you specify and all files and folders inside the directory // ------------------------------------------------------------ function recursive_remove_directory($directory) { // if the path has a slash at the end we remove it here if (substr($directory, -1) == '/') { $directory = substr($directory, 0, -1); } // if the path is not valid or is not a directory ... if (!file_exists($directory) || !is_dir($directory)) { // ... we return false and exit the function return false; // ... if the path is not readable } elseif (!is_readable($directory)) { // ... we return false and exit the function return false; // ... else if the path is readable } else { // we open the directory $handle = opendir($directory); $postproc = AKFactory::getPostProc(); // and scan through the items inside while (false !== ($item = readdir($handle))) { // if the filepointer is not the current directory // or the parent directory if ($item != '.' && $item != '..') { // we build the new path to delete $path = $directory . '/' . $item; // if the new path is a directory if (is_dir($path)) { // we call this function with the new path recursive_remove_directory($path); // if the new path is a file } else { // we remove the file $postproc->unlink($path); } } } // close the directory closedir($handle); // try to delete the now empty directory if (!$postproc->rmdir($directory)) { // return false if not possible return false; } // return success return true; } } PKc��\s7���i�i.components/com_joomlaupdate/models/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); /** * Joomla! update overview Model * * @since 2.5.4 */ class JoomlaupdateModelDefault extends JModelLegacy { /** * Detects if the Joomla! update site currently in use matches the one * configured in this component. If they don't match, it changes it. * * @return void * * @since 2.5.4 */ public function applyUpdateSite() { // Determine the intended update URL. $params = JComponentHelper::getParams('com_joomlaupdate'); switch ($params->get('updatesource', 'nochange')) { // "Minor & Patch Release for Current version AND Next Major Release". case 'sts': case 'next': $updateURL = 'https://update.joomla.org/core/sts/list_sts.xml'; break; // "Testing" case 'testing': $updateURL = 'https://update.joomla.org/core/test/list_test.xml'; break; // "Custom" // TODO: check if the customurl is valid and not just "not empty". case 'custom': if (trim($params->get('customurl', '')) != '') { $updateURL = trim($params->get('customurl', '')); } else { return JError::raiseWarning(403, JText::_('COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_CUSTOM_ERROR')); } break; /** * "Minor & Patch Release for Current version (recommended and default)". * The commented "case" below are for documenting where 'default' and legacy options falls * case 'default': * case 'lts': * case 'nochange': */ default: $updateURL = 'https://update.joomla.org/core/list.xml'; } $db = $this->getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('us') . '.*') ->from($db->quoteName('#__update_sites_extensions') . ' AS ' . $db->quoteName('map')) ->join( 'INNER', $db->quoteName('#__update_sites') . ' AS ' . $db->quoteName('us') . ' ON (' . 'us.update_site_id = map.update_site_id)' ) ->where('map.extension_id = ' . $db->quote(700)); $db->setQuery($query); $update_site = $db->loadObject(); if ($update_site->location != $updateURL) { // Modify the database record. $update_site->last_check_timestamp = 0; $update_site->location = $updateURL; $db->updateObject('#__update_sites', $update_site, 'update_site_id'); // Remove cached updates. $query->clear() ->delete($db->quoteName('#__updates')) ->where($db->quoteName('extension_id') . ' = ' . $db->quote('700')); $db->setQuery($query); $db->execute(); } } /** * Makes sure that the Joomla! update cache is up-to-date. * * @param boolean $force Force reload, ignoring the cache timeout. * * @return void * * @since 2.5.4 */ public function refreshUpdates($force = false) { if ($force) { $cache_timeout = 0; } else { $update_params = JComponentHelper::getParams('com_installer'); $cache_timeout = $update_params->get('cachetimeout', 6, 'int'); $cache_timeout = 3600 * $cache_timeout; } $updater = JUpdater::getInstance(); $reflection = new ReflectionObject($updater); $reflectionMethod = $reflection->getMethod('findUpdates'); $methodParameters = $reflectionMethod->getParameters(); if (count($methodParameters) >= 4) { // Reinstall support is available in JUpdater $updater->findUpdates(700, $cache_timeout, JUpdater::STABILITY_STABLE, true); } else { $updater->findUpdates(700, $cache_timeout, JUpdater::STABILITY_STABLE); } } /** * Returns an array with the Joomla! update information. * * @return array * * @since 2.5.4 */ public function getUpdateInformation() { // Initialise the return array. $ret = array( 'installed' => JVERSION, 'latest' => null, 'object' => null, 'hasUpdate' => false, ); // Fetch the update information from the database. $db = $this->getDbo(); $query = $db->getQuery(true) ->select('*') ->from($db->quoteName('#__updates')) ->where($db->quoteName('extension_id') . ' = ' . $db->quote(700)); $db->setQuery($query); $updateObject = $db->loadObject(); if (is_null($updateObject)) { $ret['latest'] = JVERSION; return $ret; } $ret['latest'] = $updateObject->version; $ret['hasUpdate'] = $updateObject->version != JVERSION; // Fetch the full update details from the update details URL. jimport('joomla.updater.update'); $update = new JUpdate; $update->loadFromXML($updateObject->detailsurl); $ret['object'] = $update; return $ret; } /** * Returns an array with the configured FTP options. * * @return array * * @since 2.5.4 */ public function getFTPOptions() { $config = JFactory::getConfig(); return array( 'host' => $config->get('ftp_host'), 'port' => $config->get('ftp_port'), 'username' => $config->get('ftp_user'), 'password' => $config->get('ftp_pass'), 'directory' => $config->get('ftp_root'), 'enabled' => $config->get('ftp_enable'), ); } /** * Removes all of the updates from the table and enable all update streams. * * @return boolean Result of operation. * * @since 3.0 */ public function purge() { $db = $this->getDbo(); // Modify the database record $update_site = new stdClass; $update_site->last_check_timestamp = 0; $update_site->enabled = 1; $update_site->update_site_id = 1; $db->updateObject('#__update_sites', $update_site, 'update_site_id'); $query = $db->getQuery(true) ->delete($db->quoteName('#__updates')) ->where($db->quoteName('update_site_id') . ' = ' . $db->quote('1')); $db->setQuery($query); if ($db->execute()) { $this->_message = JText::_('COM_JOOMLAUPDATE_CHECKED_UPDATES'); return true; } else { $this->_message = JText::_('COM_JOOMLAUPDATE_FAILED_TO_CHECK_UPDATES'); return false; } } /** * Downloads the update package to the site. * * @return boolean|string False on failure, basename of the file in any other case. * * @since 2.5.4 */ public function download() { $updateInfo = $this->getUpdateInformation(); $packageURL = trim($updateInfo['object']->downloadurl->_data); $sources = $updateInfo['object']->get('downloadSources', array()); $headers = get_headers($packageURL, 1); // Follow the Location headers until the actual download URL is known while (isset($headers['Location'])) { $packageURL = $headers['Location']; $headers = get_headers($packageURL, 1); } // Remove protocol, path and query string from URL $basename = basename($packageURL); if (strpos($basename, '?') !== false) { $basename = substr($basename, 0, strpos($basename, '?')); } // Find the path to the temp directory and the local package. $config = JFactory::getConfig(); $tempdir = $config->get('tmp_path'); $target = $tempdir . '/' . $basename; $response = array(); // Do we have a cached file? $exists = JFile::exists($target); if (!$exists) { // Not there, let's fetch it. $mirror = 0; while (!($download = $this->downloadPackage($packageURL, $target)) && isset($sources[$mirror])) { $name = $sources[$mirror]; $packageURL = trim($name->url); $mirror++; } $response['basename'] = $download; } else { // Is it a 0-byte file? If so, re-download please. $filesize = @filesize($target); if (empty($filesize)) { $mirror = 0; while (!($download = $this->downloadPackage($packageURL, $target)) && isset($sources[$mirror])) { $name = $sources[$mirror]; $packageURL = trim($name->url); $mirror++; } $response['basename'] = $download; } // Yes, it's there, skip downloading. $response['basename'] = $basename; } $response['check'] = $this->isChecksumValid($target, $updateInfo['object']); return $response; } /** * Return the result of the checksum of a package with the SHA256/SHA384/SHA512 tags in the update server manifest * * @param string $packagefile Location of the package to be installed * @param JUpdate $updateObject The Update Object * * @return boolean False in case the validation did not work; true in any other case. * * @note This method has been forked from (JInstallerHelper::isChecksumValid) so it * does not depend on an up-to-date InstallerHelper at the update time * * @since 3.9.0 */ private function isChecksumValid($packagefile, $updateObject) { $hashes = array('sha256', 'sha384', 'sha512'); foreach ($hashes as $hash) { if ($updateObject->get($hash, false)) { $hashPackage = hash_file($hash, $packagefile); $hashRemote = $updateObject->$hash->_data; if ($hashPackage !== $hashRemote) { // Return false in case the hash did not match return false; } } } // Well nothing was provided or all worked return true; } /** * Downloads a package file to a specific directory * * @param string $url The URL to download from * @param string $target The directory to store the file * * @return boolean True on success * * @since 2.5.4 */ protected function downloadPackage($url, $target) { JLoader::import('helpers.download', JPATH_COMPONENT_ADMINISTRATOR); try { JLog::add(JText::sprintf('COM_JOOMLAUPDATE_UPDATE_LOG_URL', $url), JLog::INFO, 'Update'); } catch (RuntimeException $exception) { // Informational log only } // Get the handler to download the package try { $http = JHttpFactory::getHttp(null, array('curl', 'stream')); } catch (RuntimeException $e) { return false; } jimport('joomla.filesystem.file'); // Make sure the target does not exist. JFile::delete($target); // Download the package try { $result = $http->get($url); } catch (RuntimeException $e) { return false; } if (!$result || ($result->code != 200 && $result->code != 310)) { return false; } // Write the file to disk JFile::write($target, $result->body); return basename($target); } /** * Create restoration file. * * @param string $basename Optional base path to the file. * * @return boolean True if successful; false otherwise. * * @since 2.5.4 */ public function createRestorationFile($basename = null) { // Get a password $password = JUserHelper::genRandomPassword(32); $app = JFactory::getApplication(); $app->setUserState('com_joomlaupdate.password', $password); // Do we have to use FTP? $method = JFactory::getApplication()->getUserStateFromRequest('com_joomlaupdate.method', 'method', 'direct', 'cmd'); // Get the absolute path to site's root. $siteroot = JPATH_SITE; // If the package name is not specified, get it from the update info. if (empty($basename)) { $updateInfo = $this->getUpdateInformation(); $packageURL = $updateInfo['object']->downloadurl->_data; $basename = basename($packageURL); } // Get the package name. $config = JFactory::getConfig(); $tempdir = $config->get('tmp_path'); $file = $tempdir . '/' . $basename; $filesize = @filesize($file); $app->setUserState('com_joomlaupdate.password', $password); $app->setUserState('com_joomlaupdate.filesize', $filesize); $data = "<?php\ndefined('_AKEEBA_RESTORATION') or die('Restricted access');\n"; $data .= '$restoration_setup = array(' . "\n"; $data .= <<<ENDDATA 'kickstart.security.password' => '$password', 'kickstart.tuning.max_exec_time' => '5', 'kickstart.tuning.run_time_bias' => '75', 'kickstart.tuning.min_exec_time' => '0', 'kickstart.procengine' => '$method', 'kickstart.setup.sourcefile' => '$file', 'kickstart.setup.destdir' => '$siteroot', 'kickstart.setup.restoreperms' => '0', 'kickstart.setup.filetype' => 'zip', 'kickstart.setup.dryrun' => '0', 'kickstart.setup.renamefiles' => array(), 'kickstart.setup.postrenamefiles' => false ENDDATA; if ($method != 'direct') { /* * Fetch the FTP parameters from the request. Note: The password should be * allowed as raw mode, otherwise something like !@<sdf34>43H% would be * sanitised to !@43H% which is just plain wrong. */ $ftp_host = $app->input->get('ftp_host', ''); $ftp_port = $app->input->get('ftp_port', '21'); $ftp_user = $app->input->get('ftp_user', ''); $ftp_pass = addcslashes($app->input->get('ftp_pass', '', 'raw'), "'\\"); $ftp_root = $app->input->get('ftp_root', ''); // Is the tempdir really writable? $writable = @is_writeable($tempdir); if ($writable) { // Let's be REALLY sure. $fp = @fopen($tempdir . '/test.txt', 'w'); if ($fp === false) { $writable = false; } else { fclose($fp); unlink($tempdir . '/test.txt'); } } // If the tempdir is not writable, create a new writable subdirectory. if (!$writable) { $FTPOptions = JClientHelper::getCredentials('ftp'); $ftp = JClientFtp::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']); $dest = JPath::clean(str_replace(JPATH_ROOT, $FTPOptions['root'], $tempdir . '/admintools'), '/'); if (!@mkdir($tempdir . '/admintools')) { $ftp->mkdir($dest); } if (!@chmod($tempdir . '/admintools', 511)) { $ftp->chmod($dest, 511); } $tempdir .= '/admintools'; } // Just in case the temp-directory was off-root, try using the default tmp directory. $writable = @is_writeable($tempdir); if (!$writable) { $tempdir = JPATH_ROOT . '/tmp'; // Does the JPATH_ROOT/tmp directory exist? if (!is_dir($tempdir)) { JFolder::create($tempdir, 511); $htaccessContents = "order deny,allow\ndeny from all\nallow from none\n"; JFile::write($tempdir . '/.htaccess', $htaccessContents); } // If it exists and it is unwritable, try creating a writable admintools subdirectory. if (!is_writable($tempdir)) { $FTPOptions = JClientHelper::getCredentials('ftp'); $ftp = JClientFtp::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']); $dest = JPath::clean(str_replace(JPATH_ROOT, $FTPOptions['root'], $tempdir . '/admintools'), '/'); if (!@mkdir($tempdir . '/admintools')) { $ftp->mkdir($dest); } if (!@chmod($tempdir . '/admintools', 511)) { $ftp->chmod($dest, 511); } $tempdir .= '/admintools'; } } // If we still have no writable directory, we'll try /tmp and the system's temp-directory. $writable = @is_writeable($tempdir); if (!$writable) { if (@is_dir('/tmp') && @is_writable('/tmp')) { $tempdir = '/tmp'; } else { // Try to find the system temp path. $tmpfile = @tempnam('dummy', ''); $systemp = @dirname($tmpfile); @unlink($tmpfile); if (!empty($systemp)) { if (@is_dir($systemp) && @is_writable($systemp)) { $tempdir = $systemp; } } } } $data .= <<<ENDDATA , 'kickstart.ftp.ssl' => '0', 'kickstart.ftp.passive' => '1', 'kickstart.ftp.host' => '$ftp_host', 'kickstart.ftp.port' => '$ftp_port', 'kickstart.ftp.user' => '$ftp_user', 'kickstart.ftp.pass' => '$ftp_pass', 'kickstart.ftp.dir' => '$ftp_root', 'kickstart.ftp.tempdir' => '$tempdir' ENDDATA; } $data .= ');'; // Remove the old file, if it's there... $configpath = JPATH_COMPONENT_ADMINISTRATOR . '/restoration.php'; if (JFile::exists($configpath)) { JFile::delete($configpath); } // Write new file. First try with JFile. $result = JFile::write($configpath, $data); // In case JFile used FTP but direct access could help. if (!$result) { if (function_exists('file_put_contents')) { $result = @file_put_contents($configpath, $data); if ($result !== false) { $result = true; } } else { $fp = @fopen($configpath, 'wt'); if ($fp !== false) { $result = @fwrite($fp, $data); if ($result !== false) { $result = true; } @fclose($fp); } } } return $result; } /** * Runs the schema update SQL files, the PHP update script and updates the * manifest cache and #__extensions entry. Essentially, it is identical to * JInstallerFile::install() without the file copy. * * @return boolean True on success. * * @since 2.5.4 */ public function finaliseUpgrade() { $installer = JInstaller::getInstance(); $manifest = $installer->isManifest(JPATH_MANIFESTS . '/files/joomla.xml'); if ($manifest === false) { $installer->abort(JText::_('JLIB_INSTALLER_ABORT_DETECTMANIFEST')); return false; } $installer->manifest = $manifest; $installer->setUpgrade(true); $installer->setOverwrite(true); $installer->extension = JTable::getInstance('extension'); $installer->extension->load(700); $installer->setAdapter($installer->extension->type); $installer->setPath('manifest', JPATH_MANIFESTS . '/files/joomla.xml'); $installer->setPath('source', JPATH_MANIFESTS . '/files'); $installer->setPath('extension_root', JPATH_ROOT); // Run the script file. JLoader::register('JoomlaInstallerScript', JPATH_ADMINISTRATOR . '/components/com_admin/script.php'); $manifestClass = new JoomlaInstallerScript; ob_start(); ob_implicit_flush(false); if ($manifestClass && method_exists($manifestClass, 'preflight')) { if ($manifestClass->preflight('update', $installer) === false) { $installer->abort(JText::_('JLIB_INSTALLER_ABORT_FILE_INSTALL_CUSTOM_INSTALL_FAILURE')); return false; } } // Create msg object; first use here. $msg = ob_get_contents(); ob_end_clean(); // Get a database connector object. $db = $this->getDbo(); /* * Check to see if a file extension by the same name is already installed. * If it is, then update the table because if the files aren't there * we can assume that it was (badly) uninstalled. * If it isn't, add an entry to extensions. */ $query = $db->getQuery(true) ->select($db->quoteName('extension_id')) ->from($db->quoteName('#__extensions')) ->where($db->quoteName('type') . ' = ' . $db->quote('file')) ->where($db->quoteName('element') . ' = ' . $db->quote('joomla')); $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { // Install failed, roll back changes. $installer->abort( JText::sprintf('JLIB_INSTALLER_ABORT_FILE_ROLLBACK', JText::_('JLIB_INSTALLER_UPDATE'), $e->getMessage()) ); return false; } $id = $db->loadResult(); $row = JTable::getInstance('extension'); if ($id) { // Load the entry and update the manifest_cache. $row->load($id); // Update name. $row->set('name', 'files_joomla'); // Update manifest. $row->manifest_cache = $installer->generateManifestCache(); if (!$row->store()) { // Install failed, roll back changes. $installer->abort( JText::sprintf('JLIB_INSTALLER_ABORT_FILE_ROLLBACK', JText::_('JLIB_INSTALLER_UPDATE'), $row->getError()) ); return false; } } else { // Add an entry to the extension table with a whole heap of defaults. $row->set('name', 'files_joomla'); $row->set('type', 'file'); $row->set('element', 'joomla'); // There is no folder for files so leave it blank. $row->set('folder', ''); $row->set('enabled', 1); $row->set('protected', 0); $row->set('access', 0); $row->set('client_id', 0); $row->set('params', ''); $row->set('system_data', ''); $row->set('manifest_cache', $installer->generateManifestCache()); if (!$row->store()) { // Install failed, roll back changes. $installer->abort(JText::sprintf('JLIB_INSTALLER_ABORT_FILE_INSTALL_ROLLBACK', $row->getError())); return false; } // Set the insert id. $row->set('extension_id', $db->insertid()); // Since we have created a module item, we add it to the installation step stack // so that if we have to rollback the changes we can undo it. $installer->pushStep(array('type' => 'extension', 'extension_id' => $row->extension_id)); } $result = $installer->parseSchemaUpdates($manifest->update->schemas, $row->extension_id); if ($result === false) { // Install failed, rollback changes. $installer->abort(JText::sprintf('JLIB_INSTALLER_ABORT_FILE_UPDATE_SQL_ERROR', $db->stderr(true))); return false; } // Start Joomla! 1.6. ob_start(); ob_implicit_flush(false); if ($manifestClass && method_exists($manifestClass, 'update')) { if ($manifestClass->update($installer) === false) { // Install failed, rollback changes. $installer->abort(JText::_('JLIB_INSTALLER_ABORT_FILE_INSTALL_CUSTOM_INSTALL_FAILURE')); return false; } } // Append messages. $msg .= ob_get_contents(); ob_end_clean(); // Clobber any possible pending updates. $update = JTable::getInstance('update'); $uid = $update->find( array('element' => 'joomla', 'type' => 'file', 'client_id' => '0', 'folder' => '') ); if ($uid) { $update->delete($uid); } // And now we run the postflight. ob_start(); ob_implicit_flush(false); if ($manifestClass && method_exists($manifestClass, 'postflight')) { $manifestClass->postflight('update', $installer); } // Append messages. $msg .= ob_get_contents(); ob_end_clean(); if ($msg != '') { $installer->set('extension_message', $msg); } // Refresh versionable assets cache. JFactory::getApplication()->flushAssets(); return true; } /** * Removes the extracted package file. * * @return void * * @since 2.5.4 */ public function cleanUp() { // Remove the update package. $config = JFactory::getConfig(); $tempdir = $config->get('tmp_path'); $file = JFactory::getApplication()->getUserState('com_joomlaupdate.file', null); $target = $tempdir . '/' . $file; if (!@unlink($target)) { JFile::delete($target); } // Remove the restoration.php file. $target = JPATH_COMPONENT_ADMINISTRATOR . '/restoration.php'; if (!@unlink($target)) { JFile::delete($target); } // Remove joomla.xml from the site's root. $target = JPATH_ROOT . '/joomla.xml'; if (!@unlink($target)) { JFile::delete($target); } // Unset the update filename from the session. JFactory::getApplication()->setUserState('com_joomlaupdate.file', null); } /** * Uploads what is presumably an update ZIP file under a mangled name in the temporary directory. * * @return void * * @since 3.6.0 */ public function upload() { // Get the uploaded file information. $input = JFactory::getApplication()->input; // Do not change the filter type 'raw'. We need this to let files containing PHP code to upload. See JInputFiles::get. $userfile = $input->files->get('install_package', null, 'raw'); // Make sure that file uploads are enabled in php. if (!(bool) ini_get('file_uploads')) { throw new RuntimeException(JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLFILE'), 500); } // Make sure that zlib is loaded so that the package can be unpacked. if (!extension_loaded('zlib')) { throw new RuntimeException('COM_INSTALLER_MSG_INSTALL_WARNINSTALLZLIB', 500); } // If there is no uploaded file, we have a problem... if (!is_array($userfile)) { throw new RuntimeException(JText::_('COM_INSTALLER_MSG_INSTALL_NO_FILE_SELECTED'), 500); } // Is the PHP tmp directory missing? if ($userfile['error'] && ($userfile['error'] == UPLOAD_ERR_NO_TMP_DIR)) { throw new RuntimeException( JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR') . '<br />' . JText::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSET'), 500 ); } // Is the max upload size too small in php.ini? if ($userfile['error'] && ($userfile['error'] == UPLOAD_ERR_INI_SIZE)) { throw new RuntimeException( JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR') . '<br />' . JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZE'), 500 ); } // Check if there was a different problem uploading the file. if ($userfile['error'] || $userfile['size'] < 1) { throw new RuntimeException(JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR'), 500); } // Build the appropriate paths. $config = JFactory::getConfig(); $tmp_dest = tempnam($config->get('tmp_path'), 'ju'); $tmp_src = $userfile['tmp_name']; // Move uploaded file. jimport('joomla.filesystem.file'); if (version_compare(JVERSION, '3.4.0', 'ge')) { $result = JFile::upload($tmp_src, $tmp_dest, false, true); } else { // Old Joomla! versions didn't have UploadShield and don't need the fourth parameter to accept uploads $result = JFile::upload($tmp_src, $tmp_dest); } if (!$result) { throw new RuntimeException(JText::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR'), 500); } JFactory::getApplication()->setUserState('com_joomlaupdate.temp_file', $tmp_dest); } /** * Checks the super admin credentials are valid for the currently logged in users * * @param array $credentials The credentials to authenticate the user with * * @return boolean * * @since 3.6.0 */ public function captiveLogin($credentials) { // Make sure the username matches $username = isset($credentials['username']) ? $credentials['username'] : null; $user = JFactory::getUser(); if (strtolower($user->username) != strtolower($username)) { return false; } // Make sure the user is authorised if (!$user->authorise('core.admin')) { return false; } // Get the global JAuthentication object. $authenticate = JAuthentication::getInstance(); $response = $authenticate->authenticate($credentials); if ($response->status !== JAuthentication::STATUS_SUCCESS) { return false; } return true; } /** * Does the captive (temporary) file we uploaded before still exist? * * @return boolean * * @since 3.6.0 */ public function captiveFileExists() { $file = JFactory::getApplication()->getUserState('com_joomlaupdate.temp_file', null); JLoader::import('joomla.filesystem.file'); if (empty($file) || !JFile::exists($file)) { return false; } return true; } /** * Remove the captive (temporary) file we uploaded before and the . * * @return void * * @since 3.6.0 */ public function removePackageFiles() { $files = array( JFactory::getApplication()->getUserState('com_joomlaupdate.temp_file', null), JFactory::getApplication()->getUserState('com_joomlaupdate.file', null), ); JLoader::import('joomla.filesystem.file'); foreach ($files as $file) { if (JFile::exists($file)) { if (!@unlink($file)) { JFile::delete($file); } } } } } PKc��\�T�##*components/com_joomlaupdate/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Joomla! Update Controller * * @since 2.5.4 */ class JoomlaupdateController extends JControllerLegacy { /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached. * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 2.5.4 */ public function display($cachable = false, $urlparams = false) { // Get the document object. $document = JFactory::getDocument(); // Set the default view name and format from the Request. $vName = $this->input->get('view', 'default'); $vFormat = $document->getType(); $lName = $this->input->get('layout', 'default', 'string'); // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { $ftp = JClientHelper::setCredentialsFromRequest('ftp'); $view->ftp = &$ftp; // Get the model for the view. /** @var JoomlaupdateModelDefault $model */ $model = $this->getModel('default'); // Push the Installer Warnings model into the view, if we can load it static::addModelPath(JPATH_ADMINISTRATOR . '/components/com_installer/models', 'InstallerModel'); $warningsModel = $this->getModel('warnings', 'InstallerModel'); if (is_object($warningsModel)) { $view->setModel($warningsModel, false); } // Perform update source preference check and refresh update information. $model->applyUpdateSite(); $model->refreshUpdates(); // Push the model into the view (as default). $view->setModel($model, true); $view->setLayout($lName); // Push document object into the view. $view->document = $document; $view->display(); } return $this; } } PKc��\����AA components/com_search/search.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_search * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; if (!JFactory::getUser()->authorise('core.manage', 'com_search')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Search'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKc��\��'���.components/com_search/controllers/searches.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_search * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Methods supporting a list of search terms. * * @since 1.6 */ class SearchControllerSearches extends JControllerLegacy { /** * Method to reset the search log table. * * @return boolean */ public function reset() { // Check for request forgeries. $this->checkToken(); $model = $this->getModel('Searches'); if (!$model->reset()) { JError::raiseWarning(500, $model->getError()); } $this->setRedirect('index.php?option=com_search&view=searches'); } /** * Method to toggle the view of results. * * @return boolean */ public function toggleResults() { // Check for request forgeries. $this->checkToken(); if ($this->getModel('Searches')->getState('show_results', 1, 'int') === 0) { $this->setRedirect('index.php?option=com_search&view=searches&show_results=1'); } else { $this->setRedirect('index.php?option=com_search&view=searches&show_results=0'); } } } PKc��\Uj� components/com_search/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="component" label="COM_SEARCH_FIELDSET_SEARCH_OPTIONS_LABEL"> <field name="enabled" type="radio" label="COM_SEARCH_CONFIG_GATHER_SEARCH_STATISTICS_LABEL" description="COM_SEARCH_CONFIG_GATHER_SEARCH_STATISTICS_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="search_phrases" type="radio" label="COM_SEARCH_FIELD_SEARCH_PHRASES_LABEL" description="COM_SEARCH_FIELD_SEARCH_PHRASES_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="search_areas" type="radio" label="COM_SEARCH_FIELD_SEARCH_AREAS_LABEL" description="COM_SEARCH_FIELD_SEARCH_AREAS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="show_date" type="radio" label="COM_SEARCH_CONFIG_FIELD_CREATED_DATE_LABEL" description="COM_SEARCH_CONFIG_FIELD_CREATED_DATE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="opensearch_name" type="text" label="COM_SEARCH_CONFIG_FIELD_OPENSEARCH_NAME_LABEL" description="COM_SEARCH_CONFIG_FIELD_OPENSEARCH_NAME_DESC" default="" /> <field name="opensearch_description" type="textarea" label="COM_SEARCH_CONFIG_FIELD_OPENSEARCH_DESCRIPTON_LABEL" description="COM_SEARCH_CONFIG_FIELD_OPENSEARCH_DESCRIPTON_DESC" default="" cols="30" rows="2" /> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_search" section="component" /> </fieldset> </config> PKc��\*�{ components/com_search/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_search"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> </section> </access> PKc��\�^fcc components/com_search/search.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_search</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_SEARCH_XML_DESCRIPTION</description> <files folder="site"> <filename>controller.php</filename> <filename>router.php</filename> <filename>search.php</filename> <folder>models</folder> <folder>views</folder> </files> <languages folder="site"> <language tag="en-GB">language/en-GB.com_search.ini</language> </languages> <administration> <menu link="option=com_search" img="class:search">Search</menu> <files folder="admin"> <filename>config.xml</filename> <filename>controller.php</filename> <filename>search.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_search.ini</language> <language tag="en-GB">language/en-GB.com_search.sys.ini</language> </languages> </administration> </extension> PKc��\z�T5components/com_search/views/searches/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_search * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <form action="<?php echo JRoute::_('index.php?option=com_search&view=searches'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this, 'options' => array('filterButton' => false))); ?> <div class="clearfix"> </div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped"> <thead> <tr> <th class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'COM_SEARCH_HEADING_PHRASE', 'a.search_term', $listDirn, $listOrder); ?> </th> <th width="15%" class="nowrap"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap center"> <?php echo JText::_('COM_SEARCH_HEADING_RESULTS'); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="3"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : ?> <tr class="row<?php echo $i % 2; ?>"> <td class="break-word"> <?php echo $this->escape($item->search_term); ?> </td> <td> <?php echo (int) $item->hits; ?> </td> <?php if ($this->state->get('show_results')) : ?> <td class="center btns"> <a class="badge <?php if ($item->returns > 0) echo 'badge-success'; ?>" target="_blank" href="<?php echo JUri::root(); ?>index.php?option=com_search&view=search&searchword=<?php echo JFilterOutput::stringURLSafe($item->search_term); ?>"> <?php echo $item->returns; ?><span class="icon-out-2" aria-hidden="true"></span><span class="element-invisible"><?php echo JText::_('JBROWSERTARGET_NEW'); ?></span></a> </td> <?php else : ?> <td class="center"> <?php echo JText::_('COM_SEARCH_NO_RESULTS'); ?> </td> <?php endif; ?> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKc��\#�V� � 2components/com_search/views/searches/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_search * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of search terms. * * @since 1.5 */ class SearchViewSearches extends JViewLegacy { protected $enabled; protected $items; protected $pagination; protected $state; /** * Display the view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { $app = JFactory::getApplication(); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); $this->enabled = $this->state->params->get('enabled'); $this->canDo = JHelperContent::getActions('com_search'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // Check if plugin is enabled if ($this->enabled) { $app->enqueueMessage(JText::_('COM_SEARCH_LOGGING_ENABLED'), 'notice'); } else { $app->enqueueMessage(JText::_('COM_SEARCH_LOGGING_DISABLED'), 'warning'); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $canDo = $this->canDo; JToolbarHelper::title(JText::_('COM_SEARCH_MANAGER_SEARCHES'), 'search'); $showResults = $this->state->get('show_results', 1, 'int'); if ($showResults === 0) { JToolbarHelper::custom('searches.toggleresults', 'zoom-in.png', null, 'COM_SEARCH_SHOW_SEARCH_RESULTS', false); } else { JToolbarHelper::custom('searches.toggleresults', 'zoom-out.png', null, 'COM_SEARCH_HIDE_SEARCH_RESULTS', false); } if ($canDo->get('core.edit.state')) { JToolbarHelper::custom('searches.reset', 'refresh.png', 'refresh_f2.png', 'JSEARCH_RESET', false); } JToolbarHelper::divider(); if ($canDo->get('core.admin') || $canDo->get('core.options')) { JToolbarHelper::preferences('com_search'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_COMPONENTS_SEARCH'); } } PKc��\G�j�(((components/com_search/helpers/search.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_search * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\String\StringHelper; /** * Search component helper. * * @since 1.5 */ class SearchHelper { /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void * * @since 1.6 */ public static function addSubmenu($vName) { // Not required. } /** * Gets a list of the actions that can be performed. * * @return JObject * * @deprecated 3.2 Use JHelperContent::getActions() instead. */ public static function getActions() { // Log usage of deprecated function. try { JLog::add( sprintf('%s() is deprecated. Use JHelperContent::getActions() with new arguments order instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } // Get list of actions. return JHelperContent::getActions('com_search'); } /** * Sanitise search word. * * @param string &$searchword Search word to be sanitised. * @param string $searchphrase Either 'all', 'any' or 'exact'. * * @return boolean True if search word needs to be sanitised. */ public static function santiseSearchWord(&$searchword, $searchphrase) { $ignored = false; $lang = JFactory::getLanguage(); $tag = $lang->getTag(); $search_ignore = $lang->getIgnoredSearchWords(); // Deprecated in 1.6 use $lang->getIgnoredSearchWords instead. $ignoreFile = JLanguageHelper::getLanguagePath() . '/' . $tag . '/' . $tag . '.ignore.php'; if (file_exists($ignoreFile)) { include $ignoreFile; } // Check for words to ignore. $aterms = explode(' ', StringHelper::strtolower($searchword)); // First case is single ignored word. if (count($aterms) == 1 && in_array(StringHelper::strtolower($searchword), $search_ignore)) { $ignored = true; } // Filter out search terms that are too small. $lower_limit = $lang->getLowerLimitSearchWord(); foreach ($aterms as $aterm) { if (StringHelper::strlen($aterm) < $lower_limit) { $search_ignore[] = $aterm; } } // Next is to remove ignored words from type 'all' or 'any' (not exact) searches with multiple words. if (count($aterms) > 1 && $searchphrase != 'exact') { $pruned = array_diff($aterms, $search_ignore); $searchword = implode(' ', $pruned); } return $ignored; } /** * Does search word need to be limited? * * @param string &$searchword Search word to be checked. * * @return boolean True if search word should be limited; false otherwise. * * @since 1.5 */ public static function limitSearchWord(&$searchword) { $restriction = false; $lang = JFactory::getLanguage(); // Limit searchword to a maximum of characters. $upper_limit = $lang->getUpperLimitSearchWord(); if (StringHelper::strlen($searchword) > $upper_limit) { $searchword = StringHelper::substr($searchword, 0, $upper_limit - 1); $restriction = true; } // Searchword must contain a minimum of characters. if ($searchword && StringHelper::strlen($searchword) < $lang->getLowerLimitSearchWord()) { $searchword = ''; $restriction = true; } return $restriction; } /** * Logs a search term. * * @param string $search_term The term being searched. * * @return void * * @since 1.5 * @deprecated 4.0 Use \Joomla\CMS\Helper\SearchHelper::logSearch() instead. */ public static function logSearch($search_term) { try { JLog::add( sprintf('%s() is deprecated. Use \Joomla\CMS\Helper\SearchHelper::logSearch() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } \Joomla\CMS\Helper\SearchHelper::logSearch($search_term, 'com_search'); } /** * Prepares results from search for display. * * @param string $text The source string. * @param string $searchword The searchword to select around. * * @return string * * @since 1.5 */ public static function prepareSearchContent($text, $searchword) { // Strips tags won't remove the actual jscript. $text = preg_replace("'<script[^>]*>.*?</script>'si", '', $text); $text = preg_replace('/{.+?}/', '', $text); // $text = preg_replace('/<a\s+.*?href="([^"]+)"[^>]*>([^<]+)<\/a>/is','\2', $text); // Replace line breaking tags with whitespace. $text = preg_replace("'<(br[^/>]*?/|hr[^/>]*?/|/(div|h[1-6]|li|p|td))>'si", ' ', $text); return self::_smartSubstr(strip_tags($text), $searchword); } /** * Checks an object for search terms (after stripping fields of HTML). * * @param object $object The object to check. * @param string $searchTerm Search words to check for. * @param array $fields List of object variables to check against. * * @return boolean True if searchTerm is in object, false otherwise. */ public static function checkNoHtml($object, $searchTerm, $fields) { $searchRegex = array( '#<script[^>]*>.*?</script>#si', '#<style[^>]*>.*?</style>#si', '#<!.*?(--|]])>#si', '#<[^>]*>#i' ); $terms = explode(' ', $searchTerm); if (empty($fields)) { return false; } foreach ($fields as $field) { if (!isset($object->$field)) { continue; } $text = self::remove_accents($object->$field); foreach ($searchRegex as $regex) { $text = preg_replace($regex, '', $text); } foreach ($terms as $term) { $term = self::remove_accents($term); if (StringHelper::stristr($text, $term) !== false) { return true; } } } return false; } /** * Transliterates given text to ASCII. * * @param string $str String to remove accents from. * * @return string * * @since 3.2 */ public static function remove_accents($str) { $str = JLanguageTransliterate::utf8_latin_to_ascii($str); // @TODO: remove other prefixes as well? return preg_replace("/[\"'^]([a-z])/ui", '\1', $str); } /** * Returns substring of characters around a searchword. * * @param string $text The source string. * @param integer $searchword Number of chars to return. * * @return string * * @since 1.5 */ public static function _smartSubstr($text, $searchword) { $lang = JFactory::getLanguage(); $length = $lang->getSearchDisplayedCharactersNumber(); $ltext = self::remove_accents($text); $textlen = StringHelper::strlen($ltext); $lsearchword = StringHelper::strtolower(self::remove_accents($searchword)); $wordfound = false; $pos = 0; while ($wordfound === false && $pos < $textlen) { if (($wordpos = @StringHelper::strpos($ltext, ' ', $pos + $length)) !== false) { $chunk_size = $wordpos - $pos; } else { $chunk_size = $length; } $chunk = StringHelper::substr($ltext, $pos, $chunk_size); $wordfound = StringHelper::strpos(StringHelper::strtolower($chunk), $lsearchword); if ($wordfound === false) { $pos += $chunk_size + 1; } } if ($wordfound !== false) { return (($pos > 0) ? '... ' : '') . StringHelper::substr($text, $pos, $chunk_size) . ' ...'; } else { if (($wordpos = @StringHelper::strpos($text, ' ', $length)) !== false) { return StringHelper::substr($text, 0, $wordpos) . ' ...'; } else { return StringHelper::substr($text, 0, $length); } } } } PKc��\�|&components/com_search/helpers/site.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_search * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Mock JSite class used to fool the frontend search plugins because they route the results. * * @since 1.5 */ class JSite extends JObject { /** * False method to fool the frontend search plugins. * * @return JSite * * @since 1.5 */ public function getMenu() { $result = new JSite; return $result; } /** * False method to fool the frontend search plugins. * * @return array * * @since 1.5 */ public function getItems() { return array(); } } PKc��\mᣴ��)components/com_search/models/searches.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_search * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Methods supporting a list of search terms. * * @since 1.6 */ class SearchModelSearches extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @see JController * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'search_term', 'a.search_term', 'hits', 'a.hits', ); } parent::__construct($config); } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @param string $ordering An optional ordering field. * @param string $direction An optional direction (asc|desc). * * @return void * * @since 1.6 */ protected function populateState($ordering = 'a.hits', $direction = 'asc') { // Load the filter state. $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); // Special state for toggle results button. $this->setState('show_results', $this->getUserStateFromRequest($this->context . '.show_results', 'show_results', 1, 'int')); // Load the parameters. $params = JComponentHelper::getParams('com_search'); $this->setState('params', $params); // List state information. parent::populateState($ordering, $direction); } /** * Method to get a store id based on model configuration state. * * This is necessary because the model is used by the component and * different modules that might need different sets of data or different * ordering requirements. * * @param string $id A prefix for the store id. * * @return string A store id. * * @since 1.6 */ protected function getStoreId($id = '') { // Compile the store id. $id .= ':' . $this->getState('show_results'); $id .= ':' . $this->getState('filter.search'); return parent::getStoreId($id); } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery * * @since 1.6 */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select( $this->getState( 'list.select', 'a.*' ) ); $query->from($db->quoteName('#__core_log_searches', 'a')); // Filter by search in title if ($search = $this->getState('filter.search')) { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); $query->where($db->quoteName('a.search_term') . ' LIKE ' . $search); } // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.hits')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); return $query; } /** * Override the parent getItems to inject optional data. * * @return mixed An array of objects on success, false on failure. * * @since 1.6 */ public function getItems() { $items = parent::getItems(); // Determine if number of results for search item should be calculated // by default it is `off` as it is highly query intensive if ($this->getState('show_results')) { JPluginHelper::importPlugin('search'); $app = JFactory::getApplication(); if (!class_exists('JSite')) { // This fools the routers in the search plugins into thinking it's in the frontend JLoader::register('JSite', JPATH_ADMINISTRATOR . '/components/com_search/helpers/site.php'); } foreach ($items as &$item) { $results = $app->triggerEvent('onContentSearch', array($item->search_term)); $item->returns = 0; foreach ($results as $result) { $item->returns += count($result); } } } return $items; } /** * Method to reset the seach log table. * * @return boolean * * @since 1.6 */ public function reset() { $db = $this->getDbo(); $query = $db->getQuery(true) ->delete($db->quoteName('#__core_log_searches')); $db->setQuery($query); try { $db->execute(); } catch (RuntimeException $e) { $this->setError($e->getMessage()); return false; } return true; } } PKc��\\�\tt$components/com_search/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_search * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Search master display controller. * * @since 1.6 */ class SearchController extends JControllerLegacy { /** * @var string The default view. * @since 1.6 */ protected $default_view = 'searches'; /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return SearchController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { JLoader::register('SearchHelper', JPATH_ADMINISTRATOR . '/components/com_search/helpers/search.php'); // Load the submenu. SearchHelper::addSubmenu($this->input->get('view', 'searches')); return parent::display(); } } PKc��\���ss.components/com_media/controllers/file.json.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); /** * File Media Controller * * @since 1.6 */ class MediaControllerFile extends JControllerLegacy { /** * Upload a file * * @return void * * @since 1.5 */ public function upload() { $params = JComponentHelper::getParams('com_media'); // Check for request forgeries if (!JSession::checkToken('request')) { $response = array( 'status' => '0', 'message' => JText::_('JINVALID_TOKEN'), 'error' => JText::_('JINVALID_TOKEN') ); echo json_encode($response); return; } // Get the user $user = JFactory::getUser(); JLog::addLogger(array('text_file' => 'upload.error.php'), JLog::ALL, array('upload')); // Get some data from the request $file = $this->input->files->get('Filedata', '', 'array'); $folder = $this->input->get('folder', '', 'path'); // Instantiate the media helper $mediaHelper = new JHelperMedia; if ($_SERVER['CONTENT_LENGTH'] > ($params->get('upload_maxsize', 0) * 1024 * 1024) || $_SERVER['CONTENT_LENGTH'] > $mediaHelper->toBytes(ini_get('upload_max_filesize')) || $_SERVER['CONTENT_LENGTH'] > $mediaHelper->toBytes(ini_get('post_max_size')) || $_SERVER['CONTENT_LENGTH'] > $mediaHelper->toBytes(ini_get('memory_limit'))) { $response = array( 'status' => '0', 'message' => JText::_('COM_MEDIA_ERROR_WARNFILETOOLARGE'), 'error' => JText::_('COM_MEDIA_ERROR_WARNFILETOOLARGE') ); echo json_encode($response); return; } // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); if (isset($file['name'])) { // Make the filename safe $file['name'] = JFile::makeSafe($file['name']); // We need a URL safe name $fileparts = pathinfo(COM_MEDIA_BASE . '/' . $folder . '/' . $file['name']); // Transform filename to punycode $fileparts['filename'] = JStringPunycode::toPunycode($fileparts['filename']); $tempExt = !empty($fileparts['extension']) ? strtolower($fileparts['extension']) : ''; // Transform filename to punycode, then neglect otherthan non-alphanumeric characters & underscores. Also transform extension to lowercase $safeFileName = preg_replace(array("/[\\s]/", '/[^a-zA-Z0-9_\-]/'), array('_', ''), $fileparts['filename']) . '.' . $tempExt; // Create filepath with safe-filename $files['final'] = $fileparts['dirname'] . DIRECTORY_SEPARATOR . $safeFileName; $file['name'] = $safeFileName; $filepath = JPath::clean($files['final']); if (!$mediaHelper->canUpload($file, 'com_media') || strpos(realpath($fileparts['dirname']), JPath::clean(realpath(COM_MEDIA_BASE))) !== 0) { try { JLog::add('Invalid: ' . $filepath, JLog::INFO, 'upload'); } catch (RuntimeException $exception) { // Informational log only } $response = array( 'status' => '0', 'message' => JText::_('COM_MEDIA_ERROR_UNABLE_TO_UPLOAD_FILE'), 'error' => JText::_('COM_MEDIA_ERROR_UNABLE_TO_UPLOAD_FILE') ); echo json_encode($response); return; } // Trigger the onContentBeforeSave event. JPluginHelper::importPlugin('content'); $dispatcher = JEventDispatcher::getInstance(); $object_file = new JObject($file); $object_file->filepath = $filepath; $result = $dispatcher->trigger('onContentBeforeSave', array('com_media.file', &$object_file, true)); if (in_array(false, $result, true)) { // There are some errors in the plugins try { JLog::add( 'Errors before save: ' . $object_file->filepath . ' : ' . implode(', ', $object_file->getErrors()), JLog::INFO, 'upload' ); } catch (RuntimeException $exception) { // Informational log only } $response = array( 'status' => '0', 'message' => JText::plural('COM_MEDIA_ERROR_BEFORE_SAVE', count($errors = $object_file->getErrors()), implode('<br />', $errors)), 'error' => JText::plural('COM_MEDIA_ERROR_BEFORE_SAVE', count($errors = $object_file->getErrors()), implode('<br />', $errors)) ); echo json_encode($response); return; } if (JFile::exists($object_file->filepath)) { // File exists try { JLog::add('File exists: ' . $object_file->filepath . ' by user_id ' . $user->id, JLog::INFO, 'upload'); } catch (RuntimeException $exception) { // Informational log only } $response = array( 'status' => '0', 'message' => JText::_('COM_MEDIA_ERROR_FILE_EXISTS'), 'error' => JText::_('COM_MEDIA_ERROR_FILE_EXISTS'), 'location' => str_replace(JPATH_ROOT, '', $filepath) ); echo json_encode($response); return; } elseif (!$user->authorise('core.create', 'com_media')) { // File does not exist and user is not authorised to create try { JLog::add('Create not permitted: ' . $object_file->filepath . ' by user_id ' . $user->id, JLog::INFO, 'upload'); } catch (RuntimeException $exception) { // Informational log only } $response = array( 'status' => '0', 'error' => JText::_('COM_MEDIA_ERROR_CREATE_NOT_PERMITTED'), 'message' => JText::_('COM_MEDIA_ERROR_CREATE_NOT_PERMITTED') ); echo json_encode($response); return; } if (!JFile::upload($object_file->tmp_name, $object_file->filepath)) { // Error in upload try { JLog::add('Error on upload: ' . $object_file->filepath, JLog::INFO, 'upload'); } catch (RuntimeException $exception) { // Informational log only } $response = array( 'status' => '0', 'message' => JText::_('COM_MEDIA_ERROR_UNABLE_TO_UPLOAD_FILE'), 'error' => JText::_('COM_MEDIA_ERROR_UNABLE_TO_UPLOAD_FILE') ); echo json_encode($response); return; } else { // Trigger the onContentAfterSave event. $dispatcher->trigger('onContentAfterSave', array('com_media.file', &$object_file, true)); try { JLog::add($folder, JLog::INFO, 'upload'); } catch (RuntimeException $exception) { // Informational log only } $returnUrl = str_replace(JPATH_ROOT, '', $object_file->filepath); $response = array( 'status' => '1', 'message' => JText::sprintf('COM_MEDIA_UPLOAD_COMPLETE', $returnUrl), 'error' => JText::sprintf('COM_MEDIA_UPLOAD_COMPLETE', $returnUrl), 'location' => str_replace('\\', '/', $returnUrl) ); echo json_encode($response); return; } } else { $response = array( 'status' => '0', 'error' => JText::_('COM_MEDIA_ERROR_BAD_REQUEST'), 'message' => JText::_('COM_MEDIA_ERROR_BAD_REQUEST') ); echo json_encode($response); return; } } } PKc��\MT���(�()components/com_media/controllers/file.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); /** * Media File Controller * * @since 1.5 */ class MediaControllerFile extends JControllerLegacy { /** * The folder we are uploading into * * @var string */ protected $folder = ''; /** * Upload one or more files * * @return boolean * * @since 1.5 */ public function upload() { // Check for request forgeries $this->checkToken('request'); $params = JComponentHelper::getParams('com_media'); // Get some data from the request $files = $this->input->files->get('Filedata', array(), 'array'); $return = JFactory::getSession()->get('com_media.return_url'); $this->folder = $this->input->get('folder', '', 'path'); // Don't redirect to an external URL. if (!JUri::isInternal($return)) { $return = ''; } // Set the redirect if ($return) { $this->setRedirect($return . '&folder=' . $this->folder); } else { $this->setRedirect('index.php?option=com_media&folder=' . $this->folder); } if (!$files) { // If we could not get any data from the request we can not upload it. JFactory::getApplication()->enqueueMessage(JText::_('COM_MEDIA_ERROR_WARNFILENOTSAFE'), 'error'); return false; } // Authorize the user if (!$this->authoriseUser('create')) { return false; } // If there are no files to upload - then bail if (empty($files)) { return false; } // Total length of post back data in bytes. $contentLength = (int) $_SERVER['CONTENT_LENGTH']; // Instantiate the media helper $mediaHelper = new JHelperMedia; // Maximum allowed size of post back data in MB. $postMaxSize = $mediaHelper->toBytes(ini_get('post_max_size')); // Maximum allowed size of script execution in MB. $memoryLimit = $mediaHelper->toBytes(ini_get('memory_limit')); // Check for the total size of post back data. if (($postMaxSize > 0 && $contentLength > $postMaxSize) || ($memoryLimit != -1 && $contentLength > $memoryLimit)) { JError::raiseWarning(100, JText::_('COM_MEDIA_ERROR_WARNUPLOADTOOLARGE')); return false; } $uploadMaxSize = $params->get('upload_maxsize', 0) * 1024 * 1024; $uploadMaxFileSize = $mediaHelper->toBytes(ini_get('upload_max_filesize')); // Perform basic checks on file info before attempting anything foreach ($files as &$file) { // Make the filename safe $file['name'] = JFile::makeSafe($file['name']); // We need a url safe name $fileparts = pathinfo(COM_MEDIA_BASE . '/' . $this->folder . '/' . $file['name']); if (strpos(realpath($fileparts['dirname']), JPath::clean(realpath(COM_MEDIA_BASE))) !== 0) { JError::raiseWarning(100, JText::_('COM_MEDIA_ERROR_WARNINVALID_FOLDER')); return false; } // Transform filename to punycode, check extension and transform it to lowercase $fileparts['filename'] = JStringPunycode::toPunycode($fileparts['filename']); $tempExt = !empty($fileparts['extension']) ? strtolower($fileparts['extension']) : ''; // Neglect other than non-alphanumeric characters, hyphens & underscores. $safeFileName = preg_replace(array("/[\\s]/", '/[^a-zA-Z0-9_\-]/'), array('_', ''), $fileparts['filename']) . '.' . $tempExt; $file['name'] = $safeFileName; $file['filepath'] = JPath::clean(implode(DIRECTORY_SEPARATOR, array(COM_MEDIA_BASE, $this->folder, $file['name']))); if (($file['error'] == 1) || ($uploadMaxSize > 0 && $file['size'] > $uploadMaxSize) || ($uploadMaxFileSize > 0 && $file['size'] > $uploadMaxFileSize)) { // File size exceed either 'upload_max_filesize' or 'upload_maxsize'. JError::raiseWarning(100, JText::_('COM_MEDIA_ERROR_WARNFILETOOLARGE')); return false; } if (JFile::exists($file['filepath'])) { // A file with this name already exists JError::raiseWarning(100, JText::_('COM_MEDIA_ERROR_FILE_EXISTS')); return false; } if (!isset($file['name'])) { // No filename (after the name was cleaned by JFile::makeSafe) $this->setRedirect('index.php', JText::_('COM_MEDIA_INVALID_REQUEST'), 'error'); return false; } } // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); JPluginHelper::importPlugin('content'); $dispatcher = JEventDispatcher::getInstance(); foreach ($files as &$file) { // The request is valid $err = null; if (!MediaHelper::canUpload($file, $err)) { // The file can't be uploaded return false; } // Trigger the onContentBeforeSave event. $object_file = new JObject($file); $result = $dispatcher->trigger('onContentBeforeSave', array('com_media.file', &$object_file, true)); if (in_array(false, $result, true)) { // There are some errors in the plugins JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_SAVE', count($errors = $object_file->getErrors()), implode('<br />', $errors))); return false; } if (!JFile::upload($object_file->tmp_name, $object_file->filepath)) { // Error in upload JError::raiseWarning(100, JText::_('COM_MEDIA_ERROR_UNABLE_TO_UPLOAD_FILE')); return false; } // Trigger the onContentAfterSave event. $dispatcher->trigger('onContentAfterSave', array('com_media.file', &$object_file, true)); $this->setMessage(JText::sprintf('COM_MEDIA_UPLOAD_COMPLETE', substr($object_file->filepath, strlen(COM_MEDIA_BASE)))); } return true; } /** * Check that the user is authorized to perform this action * * @param string $action - the action to be peformed (create or delete) * * @return boolean * * @since 1.6 */ protected function authoriseUser($action) { if (!JFactory::getUser()->authorise('core.' . strtolower($action), 'com_media')) { // User is not authorised JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_' . strtoupper($action) . '_NOT_PERMITTED')); return false; } return true; } /** * Deletes paths from the current path * * @return boolean * * @since 1.5 */ public function delete() { $this->checkToken('request'); $user = JFactory::getUser(); // Get some data from the request $tmpl = $this->input->get('tmpl'); $paths = $this->input->get('rm', array(), 'array'); $folder = $this->input->get('folder', '', 'path'); $redirect = 'index.php?option=com_media&folder=' . $folder; if ($tmpl == 'component') { // We are inside the iframe $redirect .= '&view=mediaList&tmpl=component'; } $this->setRedirect($redirect); // Just return if there's nothing to do if (empty($paths)) { $this->setMessage(JText::_('JERROR_NO_ITEMS_SELECTED'), 'error'); return true; } if (!$user->authorise('core.delete', 'com_media')) { // User is not authorised to delete JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED')); return false; } // Need this to enqueue messages. $app = JFactory::getApplication(); // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); JPluginHelper::importPlugin('content'); $dispatcher = JEventDispatcher::getInstance(); $ret = true; $safePaths = array_intersect($paths, array_map(array('JFile', 'makeSafe'), $paths)); foreach ($safePaths as $key => $path) { $fullPath = implode(DIRECTORY_SEPARATOR, array(COM_MEDIA_BASE, $folder, $path)); if (strpos(realpath($fullPath), JPath::clean(realpath(COM_MEDIA_BASE))) !== 0) { unset($safePaths[$key]); } } $unsafePaths = array_diff($paths, $safePaths); foreach ($unsafePaths as $path) { $path = JPath::clean(implode(DIRECTORY_SEPARATOR, array($folder, $path))); $path = htmlspecialchars($path, ENT_COMPAT, 'UTF-8'); $app->enqueueMessage(JText::sprintf('COM_MEDIA_ERROR_UNABLE_TO_DELETE_FILE_WARNFILENAME', $path), 'error'); } foreach ($safePaths as $path) { $fullPath = JPath::clean(implode(DIRECTORY_SEPARATOR, array(COM_MEDIA_BASE, $folder, $path))); $object_file = new JObject(array('filepath' => $fullPath)); if (is_file($object_file->filepath)) { // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger('onContentBeforeDelete', array('com_media.file', &$object_file)); if (in_array(false, $result, true)) { // There are some errors in the plugins $errors = $object_file->getErrors(); JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_DELETE', count($errors), implode('<br />', $errors))); continue; } $ret &= JFile::delete($object_file->filepath); // Trigger the onContentAfterDelete event. $dispatcher->trigger('onContentAfterDelete', array('com_media.file', &$object_file)); $app->enqueueMessage(JText::sprintf('COM_MEDIA_DELETE_COMPLETE', substr($object_file->filepath, strlen(COM_MEDIA_BASE)))); } elseif (is_dir($object_file->filepath)) { $contents = JFolder::files($object_file->filepath, '.', true, false, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html')); if (!empty($contents)) { // This makes no sense... $folderPath = substr($object_file->filepath, strlen(COM_MEDIA_BASE)); JError::raiseWarning(100, JText::sprintf('COM_MEDIA_ERROR_UNABLE_TO_DELETE_FOLDER_NOT_EMPTY', $folderPath)); continue; } // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger('onContentBeforeDelete', array('com_media.folder', &$object_file)); if (in_array(false, $result, true)) { // There are some errors in the plugins $errors = $object_file->getErrors(); JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_DELETE', count($errors), implode('<br />', $errors))); continue; } $ret &= !JFolder::delete($object_file->filepath); // Trigger the onContentAfterDelete event. $dispatcher->trigger('onContentAfterDelete', array('com_media.folder', &$object_file)); $app->enqueueMessage(JText::sprintf('COM_MEDIA_DELETE_COMPLETE', substr($object_file->filepath, strlen(COM_MEDIA_BASE)))); } } return $ret; } } PKc��\rK�a��+components/com_media/controllers/folder.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); /** * Folder Media Controller * * @since 1.5 */ class MediaControllerFolder extends JControllerLegacy { /** * Deletes paths from the current path * * @return boolean * * @since 1.5 */ public function delete() { $this->checkToken('request'); $user = JFactory::getUser(); // Get some data from the request $tmpl = $this->input->get('tmpl'); $paths = $this->input->get('rm', array(), 'array'); $folder = $this->input->get('folder', '', 'path'); $redirect = 'index.php?option=com_media&folder=' . $folder; if ($tmpl == 'component') { // We are inside the iframe $redirect .= '&view=mediaList&tmpl=component'; } $this->setRedirect($redirect); // Just return if there's nothing to do if (empty($paths)) { $this->setMessage(JText::_('JERROR_NO_ITEMS_SELECTED'), 'error'); return true; } if (!$user->authorise('core.delete', 'com_media')) { // User is not authorised to delete JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED')); return false; } // Need this to enqueue messages. $app = JFactory::getApplication(); // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); JPluginHelper::importPlugin('content'); $dispatcher = JEventDispatcher::getInstance(); $ret = true; $safePaths = array_intersect($paths, array_map(array('JFile', 'makeSafe'), $paths)); $unsafePaths = array_diff($paths, $safePaths); foreach ($unsafePaths as $path) { $path = JPath::clean(implode(DIRECTORY_SEPARATOR, array($folder, $path))); $path = htmlspecialchars($path, ENT_COMPAT, 'UTF-8'); $app->enqueueMessage(JText::sprintf('COM_MEDIA_ERROR_UNABLE_TO_DELETE_FILE_WARNFILENAME', $path), 'error'); } foreach ($safePaths as $path) { $fullPath = JPath::clean(implode(DIRECTORY_SEPARATOR, array(COM_MEDIA_BASE, $folder, $path))); if (strpos(realpath($fullPath), JPath::clean(realpath(COM_MEDIA_BASE))) !== 0) { JError::raiseWarning(100, JText::_('COM_MEDIA_ERROR_WARNINVALID_FOLDER')); continue; } $object_file = new JObject(array('filepath' => $fullPath)); if (is_file($object_file->filepath)) { // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger('onContentBeforeDelete', array('com_media.file', &$object_file)); if (in_array(false, $result, true)) { // There are some errors in the plugins $errors = $object_file->getErrors(); JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_DELETE', count($errors), implode('<br />', $errors))); continue; } $ret &= JFile::delete($object_file->filepath); // Trigger the onContentAfterDelete event. $dispatcher->trigger('onContentAfterDelete', array('com_media.file', &$object_file)); $app->enqueueMessage(JText::sprintf('COM_MEDIA_DELETE_COMPLETE', substr($object_file->filepath, strlen(COM_MEDIA_BASE)))); } elseif (is_dir($object_file->filepath)) { $contents = JFolder::files($object_file->filepath, '.', true, false, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html')); if (!empty($contents)) { // This makes no sense... $folderPath = substr($object_file->filepath, strlen(COM_MEDIA_BASE)); JError::raiseWarning(100, JText::sprintf('COM_MEDIA_ERROR_UNABLE_TO_DELETE_FOLDER_NOT_EMPTY', $folderPath)); continue; } // Trigger the onContentBeforeDelete event. $result = $dispatcher->trigger('onContentBeforeDelete', array('com_media.folder', &$object_file)); if (in_array(false, $result, true)) { // There are some errors in the plugins $errors = $object_file->getErrors(); JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_DELETE', count($errors), implode('<br />', $errors))); continue; } $ret &= !JFolder::delete($object_file->filepath); // Trigger the onContentAfterDelete event. $dispatcher->trigger('onContentAfterDelete', array('com_media.folder', &$object_file)); $app->enqueueMessage(JText::sprintf('COM_MEDIA_DELETE_COMPLETE', substr($object_file->filepath, strlen(COM_MEDIA_BASE)))); } } return $ret; } /** * Create a folder * * @return boolean * * @since 1.5 */ public function create() { // Check for request forgeries $this->checkToken(); $user = JFactory::getUser(); $folder = $this->input->get('foldername', ''); $folderCheck = (string) $this->input->get('foldername', null, 'raw'); $parent = $this->input->get('folderbase', '', 'path'); $this->setRedirect('index.php?option=com_media&folder=' . $parent . '&tmpl=' . $this->input->get('tmpl', 'index')); if (strlen($folder) > 0) { if (!$user->authorise('core.create', 'com_media')) { // User is not authorised to create JError::raiseWarning(403, JText::_('COM_MEDIA_ERROR_CREATE_NOT_PERMITTED')); return false; } // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); $this->input->set('folder', $parent); if (($folderCheck !== null) && ($folder !== $folderCheck)) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_MEDIA_ERROR_UNABLE_TO_CREATE_FOLDER_WARNDIRNAME'), 'warning'); return false; } $path = JPath::clean(COM_MEDIA_BASE . '/' . $parent . '/' . $folder); if (strpos(realpath(COM_MEDIA_BASE . '/' . $parent), JPath::clean(realpath(COM_MEDIA_BASE))) !== 0) { $app = JFactory::getApplication(); $app->enqueueMessage(JText::_('COM_MEDIA_ERROR_WARNINVALID_FOLDER'), 'error'); return false; } if (!is_dir($path) && !is_file($path)) { // Trigger the onContentBeforeSave event. $object_file = new JObject(array('filepath' => $path)); JPluginHelper::importPlugin('content'); $dispatcher = JEventDispatcher::getInstance(); $result = $dispatcher->trigger('onContentBeforeSave', array('com_media.folder', &$object_file, true)); if (in_array(false, $result, true)) { // There are some errors in the plugins JError::raiseWarning(100, JText::plural('COM_MEDIA_ERROR_BEFORE_SAVE', count($errors = $object_file->getErrors()), implode('<br />', $errors))); return false; } if (JFolder::create($object_file->filepath)) { $data = "<html>\n<body bgcolor=\"#FFFFFF\">\n</body>\n</html>"; JFile::write($object_file->filepath . '/index.html', $data); // Trigger the onContentAfterSave event. $dispatcher->trigger('onContentAfterSave', array('com_media.folder', &$object_file, true)); $this->setMessage(JText::sprintf('COM_MEDIA_CREATE_COMPLETE', substr($object_file->filepath, strlen(COM_MEDIA_BASE)))); } } $this->input->set('folder', ($parent) ? $parent . '/' . $folder : $folder); } else { // File name is of zero length (null). JError::raiseWarning(100, JText::_('COM_MEDIA_ERROR_UNABLE_TO_CREATE_FOLDER_WARNDIRNAME')); return false; } return true; } } PKc��\������components/com_media/media.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_media</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_MEDIA_XML_DESCRIPTION</description> <files folder="site"> <filename>controller.php</filename> <filename>media.php</filename> <folder>helpers</folder> </files> <languages folder="site"> <language tag="en-GB">language/en-GB.com_media.ini</language> </languages> <administration> <files folder="admin"> <filename>config.xml</filename> <filename>controller.php</filename> <filename>media.php</filename> <folder>controllers</folder> <folder>helpers</folder> <folder>layouts</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_media.ini</language> <language tag="en-GB">language/en-GB.com_media.sys.ini</language> </languages> </administration> </extension> PKc��\���}4components/com_media/layouts/toolbar/uploadmedia.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $title = JText::_('JTOOLBAR_UPLOAD'); ?> <button data-toggle="collapse" data-target="#collapseUpload" class="btn btn-small btn-success"> <span class="icon-plus icon-white" title="<?php echo $title; ?>"></span> <?php echo $title; ?> </button> PKc��\��K���2components/com_media/layouts/toolbar/newfolder.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $title = JText::_('COM_MEDIA_CREATE_NEW_FOLDER'); ?> <button data-toggle="collapse" data-target="#collapseFolder" class="btn btn-small"> <span class="icon-folder" title="<?php echo $title; ?>"></span> <?php echo $title; ?> </button> PKc��\2]C��4components/com_media/layouts/toolbar/deletemedia.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $title = JText::_('JTOOLBAR_DELETE'); JText::script('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST'); ?> <script type="text/javascript"> (function($){ // if any media is selected then only allow to submit otherwise show message deleteMedia = function(){ if ( $('#folderframe').contents().find('input:checked[name="rm[]"]').length == 0){ alert(Joomla.JText._('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST')); return false; } MediaManager.submit('folder.delete'); }; })(jQuery); </script> <button onclick="deleteMedia()" class="btn btn-small"> <span class="icon-remove" title="<?php echo $title; ?>"></span> <?php echo $title; ?> </button> PKc��\(:�Jcomponents/com_media/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="component" label="COM_MEDIA_FIELDSET_OPTIONS_LABEL"> <field name="upload_extensions" type="text" label="COM_MEDIA_FIELD_LEGAL_EXTENSIONS_LABEL" description="COM_MEDIA_FIELD_LEGAL_EXTENSIONS_DESC" size="50" default="bmp,csv,doc,gif,ico,jpg,jpeg,odg,odp,ods,odt,pdf,png,ppt,txt,xcf,xls,BMP,CSV,DOC,GIF,ICO,JPG,JPEG,ODG,ODP,ODS,ODT,PDF,PNG,PPT,TXT,XCF,XLS" /> <field name="upload_maxsize" type="number" label="COM_MEDIA_FIELD_MAXIMUM_SIZE_LABEL" description="COM_MEDIA_FIELD_MAXIMUM_SIZE_DESC" validate="number" min="0" size="50" default="10" /> <field name="spacer1" type="spacer" label="COM_MEDIA_FOLDERS_PATH_LABEL" class="text" /> <field name="file_path" type="text" label="COM_MEDIA_FIELD_PATH_FILE_FOLDER_LABEL" description="COM_MEDIA_FIELD_PATH_FILE_FOLDER_DESC" size="50" default="images" /> <field name="image_path" type="text" label="COM_MEDIA_FIELD_PATH_IMAGE_FOLDER_LABEL" description="COM_MEDIA_FIELD_PATH_IMAGE_FOLDER_DESC" size="50" default="images" /> <field name="restrict_uploads" type="radio" label="COM_MEDIA_FIELD_RESTRICT_UPLOADS_LABEL" description="COM_MEDIA_FIELD_RESTRICT_UPLOADS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="check_mime" type="radio" label="COM_MEDIA_FIELD_CHECK_MIME_LABEL" description="COM_MEDIA_FIELD_CHECK_MIME_DESC" class="btn-group btn-group-yesno" default="1" showon="restrict_uploads:1" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="image_extensions" type="text" label="COM_MEDIA_FIELD_LEGAL_IMAGE_EXTENSIONS_LABEL" description="COM_MEDIA_FIELD_LEGAL_IMAGE_EXTENSIONS_DESC" size="50" default="bmp,gif,jpg,png" showon="restrict_uploads:1" /> <field name="ignore_extensions" type="text" label="COM_MEDIA_FIELD_IGNORED_EXTENSIONS_LABEL" description="COM_MEDIA_FIELD_IGNORED_EXTENSIONS_DESC" size="50" /> <field name="upload_mime" type="text" label="COM_MEDIA_FIELD_LEGAL_MIME_TYPES_LABEL" description="COM_MEDIA_FIELD_LEGAL_MIME_TYPES_DESC" size="50" default="image/jpeg,image/gif,image/png,image/bmp,application/msword,application/excel,application/pdf,application/powerpoint,text/plain,application/x-zip" showon="restrict_uploads:1" /> <field name="upload_mime_illegal" type="text" label="COM_MEDIA_FIELD_ILLEGAL_MIME_TYPES_LABEL" description="COM_MEDIA_FIELD_ILLEGAL_MIME_TYPES_DESC" size="50" default="text/html" showon="restrict_uploads:1" /> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_media" section="component" /> </fieldset> </config> PKc��\��b�hhcomponents/com_media/access.xmlnu�[���<?xml version="1.0" encoding="utf-8" ?> <access component="com_media"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> </section> </access> PKc��\�g@���8components/com_media/views/medialist/tmpl/thumbs_img.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; $user = JFactory::getUser(); $params = new Registry; $dispatcher = JEventDispatcher::getInstance(); $dispatcher->trigger('onContentBeforeDisplay', array('com_media.file', &$this->_tmp_img, &$params)); ?> <li class="imgOutline thumbnail height-80 width-80 center"> <?php if ($user->authorise('core.delete', 'com_media')):?> <a class="close delete-item" target="_top" href="index.php?option=com_media&task=file.delete&tmpl=index&<?php echo JSession::getFormToken(); ?>=1&folder=<?php echo $this->state->folder; ?>&rm[]=<?php echo $this->_tmp_img->name; ?>" rel="<?php echo $this->_tmp_img->name; ?>" title="<?php echo JText::_('JACTION_DELETE'); ?>">×</a> <input class="pull-left" type="checkbox" name="rm[]" value="<?php echo $this->_tmp_img->name; ?>" /> <div class="clearfix"></div> <?php endif; ?> <div class="height-50"> <a class="img-preview" href="<?php echo COM_MEDIA_BASEURL . '/' . $this->_tmp_img->path_relative; ?>" title="<?php echo $this->_tmp_img->name; ?>" > <?php echo JHtml::_('image', COM_MEDIA_BASEURL . '/' . $this->_tmp_img->path_relative, JText::sprintf('COM_MEDIA_IMAGE_TITLE', $this->_tmp_img->title, JHtml::_('number.bytes', $this->_tmp_img->size)), array('width' => $this->_tmp_img->width_60, 'height' => $this->_tmp_img->height_60)); ?> </a> </div> <div class="small"> <a href="<?php echo COM_MEDIA_BASEURL . '/' . $this->_tmp_img->path_relative; ?>" title="<?php echo $this->_tmp_img->name; ?>" class="preview"><?php echo JHtml::_('string.truncate', $this->_tmp_img->name, 10, false); ?></a> </div> </li> <?php $dispatcher->trigger('onContentAfterDisplay', array('com_media.file', &$this->_tmp_img, &$params)); PKc��\킸��;components/com_media/views/medialist/tmpl/thumbs_folder.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $user = JFactory::getUser(); ?> <li class="imgOutline thumbnail height-80 width-80 center"> <?php if ($user->authorise('core.delete', 'com_media')):?> <a class="close delete-item" target="_top" href="index.php?option=com_media&task=folder.delete&tmpl=index&<?php echo JSession::getFormToken(); ?>=1&folder=<?php echo $this->state->folder; ?>&rm[]=<?php echo $this->_tmp_folder->name; ?>" rel="<?php echo $this->_tmp_folder->name; ?> :: <?php echo $this->_tmp_folder->files + $this->_tmp_folder->folders; ?>" title="<?php echo JText::_('JACTION_DELETE');?>">×</a> <input class="pull-left" type="checkbox" name="rm[]" value="<?php echo $this->_tmp_folder->name; ?>" /> <div class="clearfix"></div> <?php endif;?> <div class="height-50"> <a href="index.php?option=com_media&view=mediaList&tmpl=component&folder=<?php echo $this->_tmp_folder->path_relative; ?>" target="folderframe"> <span class="icon-folder-2"></span> </a> </div> <div class="small"> <a href="index.php?option=com_media&view=mediaList&tmpl=component&folder=<?php echo $this->_tmp_folder->path_relative; ?>" target="folderframe"><?php echo JHtml::_('string.truncate', $this->_tmp_folder->name, 10, false); ?></a> </div> </li> PKc��\U���9components/com_media/views/medialist/tmpl/details_doc.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; JHtml::_('bootstrap.tooltip'); $user = JFactory::getUser(); $params = new Registry; $dispatcher = JEventDispatcher::getInstance(); $dispatcher->trigger('onContentBeforeDisplay', array('com_media.file', &$this->_tmp_doc, &$params, 0)); ?> <tr> <td> <a title="<?php echo $this->escape($this->_tmp_doc->name); ?>"> <?php echo JHtml::_('image', $this->_tmp_doc->icon_16, $this->escape($this->_tmp_doc->title), null, true, true) ? JHtml::_('image', $this->_tmp_doc->icon_16, $this->_tmp_doc->title, array('width' => 16, 'height' => 16), true) : JHtml::_('image', 'media/con_info.png', $this->escape($this->_tmp_doc->title), array('width' => 16, 'height' => 16), true);?> </a> </td> <td class="description" title="<?php echo $this->escape($this->_tmp_doc->name); ?>"> <?php echo $this->escape($this->_tmp_doc->title); ?> </td> <td>  </td> <td class="filesize"> <?php echo JHtml::_('number.bytes', $this->_tmp_doc->size); ?> </td> <?php if ($user->authorise('core.delete', 'com_media')):?> <td> <a class="delete-item" target="_top" href="index.php?option=com_media&task=file.delete&tmpl=index&<?php echo JSession::getFormToken(); ?>=1&folder=<?php echo rawurlencode($this->state->folder); ?>&rm[]=<?php echo $this->escape($this->_tmp_doc->name); ?>" rel="<?php echo $this->escape($this->_tmp_doc->name); ?>"><span class="icon-remove hasTooltip" title="<?php echo JHtml::_('tooltipText', 'JACTION_DELETE');?>"></span></a> <input type="checkbox" name="rm[]" value="<?php echo $this->escape($this->_tmp_doc->name); ?>" /> </td> <?php endif;?> </tr> <?php $dispatcher->trigger('onContentAfterDisplay', array('com_media.file', &$this->_tmp_doc, &$params, 0)); PKc��\BAl���5components/com_media/views/medialist/tmpl/details.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $params = JComponentHelper::getParams('com_media'); $path = 'file_path'; JHtml::_('jquery.framework'); JHtml::_('behavior.core'); $doc = JFactory::getDocument(); // Need to override this core function because we use a different form id $doc->addScriptDeclaration( " Joomla.isChecked = function( isitchecked, form ) { if ( typeof form === 'undefined' ) { form = document.getElementById( 'mediamanager-form' ); } form.boxchecked.value += isitchecked ? 1 : -1; // If we don't have a checkall-toggle, done. if ( !form.elements[ 'checkall-toggle' ] ) return; // Toggle main toggle checkbox depending on checkbox selection var c = true, i, e, n; for ( i = 0, n = form.elements.length; i < n; i++ ) { e = form.elements[ i ]; if ( e.type == 'checkbox' && e.name != 'checkall-toggle' && !e.checked ) { c = false; break; } } form.elements[ 'checkall-toggle' ].checked = c; }; " ); $doc->addScriptDeclaration( " jQuery(document).ready(function($){ window.parent.document.updateUploader(); $('.img-preview, .preview').each(function(index, value) { $(this).on('click', function(e) { window.parent.jQuery('#imagePreviewSrc').attr('src', $(this).attr('href')); window.parent.jQuery('#imagePreview').modal('show'); return false; }); }); $('.video-preview').each(function(index, value) { $(this).unbind('click'); $(this).on('click', function(e) { e.preventDefault(); window.parent.jQuery('#videoPreview').modal('show'); var elementInitialised = window.parent.jQuery('#mejsPlayer').attr('src'); if (!elementInitialised) { window.parent.jQuery('#mejsPlayer').attr('src', $(this).attr('href')); window.parent.jQuery('#mejsPlayer').mediaelementplayer(); } window.parent.jQuery('#mejsPlayer')[0].player.media.setSrc($(this).attr('href')); return false; }); }); }); " ); ?> <form target="_parent" action="index.php?option=com_media&tmpl=index&folder=<?php echo rawurlencode($this->state->folder); ?>" method="post" id="mediamanager-form" name="mediamanager-form"> <div class="muted"> <p> <span class="icon-folder"></span> <?php echo $params->get($path, 'images'), ($this->escape($this->state->folder) != '') ? '/' . $this->escape($this->state->folder) : ''; ?> </p> </div> <div class="manager"> <table class="table table-striped table-condensed"> <thead> <tr> <?php if ($this->canDelete) : ?> <th width="1%"> <?php echo JHtml::_('grid.checkall'); ?> </th> <?php endif; ?> <th width="1%"><?php echo JText::_('JGLOBAL_PREVIEW'); ?></th> <th><?php echo JText::_('COM_MEDIA_NAME'); ?></th> <th width="15%"><?php echo JText::_('COM_MEDIA_PIXEL_DIMENSIONS'); ?></th> <th width="8%"><?php echo JText::_('COM_MEDIA_FILESIZE'); ?></th> <?php if ($this->canDelete) : ?> <th width="8%"> <?php echo JText::_('JACTION_DELETE'); ?> </th> <?php endif; ?> </tr> </thead> <tbody> <?php echo $this->loadTemplate('up'), $this->loadTemplate('folders'), $this->loadTemplate('docs'), $this->loadTemplate('videos'), $this->loadTemplate('imgs'); ?> </tbody> </table> </div> <input type="hidden" name="task" value="list" /> <input type="hidden" name="username" value="" /> <input type="hidden" name="password" value="" /> <input type="hidden" name="boxchecked" value="" /> <?php echo JHtml::_('form.token'); ?> </form> PKc��\�ځְ�7components/com_media/views/medialist/tmpl/thumbs_up.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <?php if ($this->state->folder != '') : ?> <li class="imgOutline thumbnail height-80 width-80 center"> <div class="imgTotal"> <div class="imgBorder"> <a class="btn" href="index.php?option=com_media&view=mediaList&tmpl=component&folder=<?php echo rawurlencode($this->state->parent); ?>" target="folderframe"> <span class="icon-arrow-up"></span></a> </div> </div> <div class="controls"> <span> </span> </div> <div class="imginfoBorder"> <a href="index.php?option=com_media&view=mediaList&tmpl=component&folder=<?php echo rawurlencode($this->state->parent); ?>" target="folderframe">..</a> </div> </li> <?php endif; ?> PKc��\�l�-5components/com_media/views/medialist/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; PKc��\�J0��8components/com_media/views/medialist/tmpl/details_up.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $user = JFactory::getUser(); ?> <?php if ($this->state->folder != '') : ?> <tr> <?php if ($this->canDelete) : ?> <td> </td> <?php endif; ?> <td class="imgTotal"> <a href="index.php?option=com_media&view=mediaList&tmpl=component&folder=<?php echo rawurlencode($this->state->parent); ?>" target="folderframe"> <span class="icon-arrow-up"></span></a> </td> <td class="description"> <a href="index.php?option=com_media&view=mediaList&tmpl=component&folder=<?php echo rawurlencode($this->state->parent); ?>" target="folderframe">..</a> </td> <td> </td> <td> </td> <?php if ($user->authorise('core.delete', 'com_media')) : ?> <td> </td> <?php endif; ?> </tr> <?php endif; ?> PKc��\TFs��4components/com_media/views/medialist/tmpl/thumbs.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $params = JComponentHelper::getParams('com_media'); $path = 'file_path'; JHtml::_('jquery.framework'); JHtml::_('behavior.core'); $doc = JFactory::getDocument(); // Need to override this core function because we use a different form id $doc->addScriptDeclaration( " Joomla.isChecked = function( isitchecked, form ) { if ( typeof form === 'undefined' ) { form = document.getElementById( 'mediamanager-form' ); } form.boxchecked.value += isitchecked ? 1 : -1; // If we don't have a checkall-toggle, done. if ( !form.elements[ 'checkall-toggle' ] ) return; // Toggle main toggle checkbox depending on checkbox selection var c = true, i, e, n; for ( i = 0, n = form.elements.length; i < n; i++ ) { e = form.elements[ i ]; if ( e.type == 'checkbox' && e.name != 'checkall-toggle' && !e.checked ) { c = false; break; } } form.elements[ 'checkall-toggle' ].checked = c; }; " ); $doc->addScriptDeclaration( " jQuery(document).ready(function($){ window.parent.document.updateUploader(); $('.img-preview, .preview').each(function(index, value) { $(this).on('click', function(e) { window.parent.jQuery('#imagePreviewSrc').attr('src', $(this).attr('href')); window.parent.jQuery('#imagePreview').modal('show'); return false; }); }); $('.video-preview').each(function(index, value) { $(this).unbind('click'); $(this).on('click', function(e) { e.preventDefault(); window.parent.jQuery('#videoPreview').modal('show'); var elementInitialised = window.parent.jQuery('#mejsPlayer').attr('src'); if (!elementInitialised) { window.parent.jQuery('#mejsPlayer').attr('src', $(this).attr('href')); window.parent.jQuery('#mejsPlayer').mediaelementplayer(); } window.parent.jQuery('#mejsPlayer')[0].player.media.setSrc($(this).attr('href')); return false; }); }); }); " ); ?> <form target="_parent" action="index.php?option=com_media&tmpl=index&folder=<?php echo rawurlencode($this->state->folder); ?>" method="post" id="mediamanager-form" name="mediamanager-form"> <div class="muted breadcrumbs"> <p> <span class="icon-folder"></span> <?php echo $params->get($path, 'images'), ($this->escape($this->state->folder) != '') ? '/' . $this->escape($this->state->folder) : ''; ?> </p> </div> <div> <label class="checkbox btn"> <?php echo JHtml::_('grid.checkall'); ?> <?php echo JText::_('JGLOBAL_CHECK_ALL'); ?> </label> </div> <ul class="manager thumbnails thumbnails-media"> <?php echo $this->loadTemplate('up'), $this->loadTemplate('folders'), $this->loadTemplate('docs'), $this->loadTemplate('videos'), $this->loadTemplate('imgs'); ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="username" value="" /> <input type="hidden" name="password" value="" /> <input type="hidden" name="boxchecked" value="" /> <?php echo JHtml::_('form.token'); ?> </ul> </form> PKc��\�ܶ..<components/com_media/views/medialist/tmpl/details_folder.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $user = JFactory::getUser(); JHtml::_('bootstrap.tooltip'); ?> <tr> <td class="imgTotal"> <a href="index.php?option=com_media&view=mediaList&tmpl=component&folder=<?php echo rawurlencode($this->_tmp_folder->path_relative); ?>" target="folderframe"> <span class="icon-folder-2"></span></a> </td> <td class="description"> <a href="index.php?option=com_media&view=mediaList&tmpl=component&folder=<?php echo rawurlencode($this->_tmp_folder->path_relative); ?>" target="folderframe"><?php echo $this->escape($this->_tmp_folder->name); ?></a> </td> <td>  </td> <td>  </td> <?php if ($user->authorise('core.delete', 'com_media')):?> <td> <a class="delete-item" target="_top" href="index.php?option=com_media&task=folder.delete&tmpl=index&folder=<?php echo rawurlencode($this->state->folder); ?>&<?php echo JSession::getFormToken(); ?>=1&rm[]=<?php echo $this->_tmp_folder->name; ?>" rel="<?php echo $this->_tmp_folder->name; ?>' :: <?php echo $this->_tmp_folder->files + $this->_tmp_folder->folders; ?>"><span class="icon-remove hasTooltip" title="<?php echo JHtml::_('tooltipText', 'JACTION_DELETE');?>"></span></a> <input type="checkbox" name="rm[]" value="<?php echo $this->_tmp_folder->name; ?>" /> </td> <?php endif;?> </tr> PKc��\����8components/com_media/views/medialist/tmpl/thumbs_doc.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; $user = JFactory::getUser(); $params = new Registry; $dispatcher = JEventDispatcher::getInstance(); $dispatcher->trigger('onContentBeforeDisplay', array('com_media.file', &$this->_tmp_doc, &$params)); ?> <li class="imgOutline thumbnail height-80 width-80 center"> <?php if ($user->authorise('core.delete', 'com_media')):?> <a class="close delete-item" target="_top" href="index.php?option=com_media&task=file.delete&tmpl=index&<?php echo JSession::getFormToken(); ?>=1&folder=<?php echo $this->state->folder; ?>&rm[]=<?php echo $this->_tmp_doc->name; ?>" rel="<?php echo $this->_tmp_doc->name; ?>" title="<?php echo JText::_('JACTION_DELETE');?>">×</a> <input class="pull-left" type="checkbox" name="rm[]" value="<?php echo $this->_tmp_doc->name; ?>" /> <div class="clearfix"></div> <?php endif;?> <div class="height-50"> <a style="display: block; width: 100%; height: 100%" title="<?php echo $this->_tmp_doc->name; ?>" > <?php echo JHtml::_('image', $this->_tmp_doc->icon_32, $this->_tmp_doc->name, null, true, true) ? JHtml::_('image', $this->_tmp_doc->icon_32, $this->_tmp_doc->title, null, true) : JHtml::_('image', 'media/con_info.png', $this->_tmp_doc->name, null, true); ?></a> </div> <div class="small" title="<?php echo $this->_tmp_doc->name; ?>" > <?php echo JHtml::_('string.truncate', $this->_tmp_doc->name, 10, false); ?> </div> </li> <?php $dispatcher->trigger('onContentAfterDisplay', array('com_media.file', &$this->_tmp_doc, &$params)); PKc��\���B B 9components/com_media/views/medialist/tmpl/details_img.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; JHtml::_('bootstrap.tooltip'); $user = JFactory::getUser(); $params = new Registry; $dispatcher = JEventDispatcher::getInstance(); $dispatcher->trigger('onContentBeforeDisplay', array('com_media.file', &$this->_tmp_img, &$params, 0)); ?> <tr> <td> <a class="img-preview" href="<?php echo COM_MEDIA_BASEURL . '/' . str_replace('%2F', '/', rawurlencode($this->_tmp_img->path_relative)); ?>" title="<?php echo $this->escape($this->_tmp_img->name); ?>"><?php echo JHtml::_('image', COM_MEDIA_BASEURL . '/' . $this->escape($this->_tmp_img->path_relative), JText::sprintf('COM_MEDIA_IMAGE_TITLE', $this->_tmp_img->title, JHtml::_('number.bytes', $this->_tmp_img->size)), array('width' => $this->_tmp_img->width_16, 'height' => $this->_tmp_img->height_16)); ?></a> </td> <td class="description"> <a href="<?php echo COM_MEDIA_BASEURL . '/' . str_replace('%2F', '/', rawurlencode($this->_tmp_img->path_relative)); ?>" title="<?php echo $this->escape($this->_tmp_img->name); ?>" class="preview"><?php echo $this->escape($this->_tmp_img->title); ?></a> </td> <td class="dimensions"> <?php echo JText::sprintf('COM_MEDIA_IMAGE_DIMENSIONS', $this->_tmp_img->width, $this->_tmp_img->height); ?> </td> <td class="filesize"> <?php echo JHtml::_('number.bytes', $this->_tmp_img->size); ?> </td> <?php if ($user->authorise('core.delete', 'com_media')):?> <td> <a class="delete-item" target="_top" href="index.php?option=com_media&task=file.delete&tmpl=index&<?php echo JSession::getFormToken(); ?>=1&folder=<?php echo rawurlencode($this->state->folder); ?>&rm[]=<?php echo $this->escape($this->_tmp_img->name); ?>" rel="<?php echo $this->escape($this->_tmp_img->name); ?>"><span class="icon-remove hasTooltip" title="<?php echo JHtml::_('tooltipText', 'JACTION_DELETE');?>"></span></a> <input type="checkbox" name="rm[]" value="<?php echo $this->escape($this->_tmp_img->name); ?>" /> </td> <?php endif;?> </tr> <?php $dispatcher->trigger('onContentAfterDisplay', array('com_media.file', &$this->_tmp_img, &$params, 0)); PKc��\�O�__2components/com_media/views/medialist/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Media component * * @since 1.0 */ class MediaViewMediaList extends JViewLegacy { /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.0 */ public function display($tpl = null) { $app = JFactory::getApplication(); if (!$app->isClient('administrator')) { return $app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'warning'); } // Do not allow cache $app->allowCache(false); $this->images = $this->get('images'); $this->documents = $this->get('documents'); $this->folders = $this->get('folders'); $this->videos = $this->get('videos'); $this->state = $this->get('state'); // Check for invalid folder name if (empty($this->state->folder)) { $dirname = JFactory::getApplication()->input->getPath('folder', ''); if (!empty($dirname)) { $dirname = htmlspecialchars($dirname, ENT_COMPAT, 'UTF-8'); JError::raiseWarning(100, JText::sprintf('COM_MEDIA_ERROR_UNABLE_TO_BROWSE_FOLDER_WARNDIRNAME', $dirname)); } } $user = JFactory::getUser(); $this->canDelete = $user->authorise('core.delete', 'com_media'); parent::display($tpl); } } PKc��\�W4�DD<components/com_media/views/imageslist/tmpl/default_image.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Registry\Registry; $params = new Registry; $dispatcher = JEventDispatcher::getInstance(); $dispatcher->trigger('onContentBeforeDisplay', array('com_media.file', &$this->_tmp_img, &$params, 0)); ?> <li class="imgOutline thumbnail height-80 width-80 center"> <a class="img-preview" href="javascript:ImageManager.populateFields('<?php echo $this->escape($this->_tmp_img->path_relative); ?>')" title="<?php echo $this->escape($this->_tmp_img->name); ?>" > <div class="height-50"> <?php echo JHtml::_('image', $this->baseURL . '/' . $this->escape($this->_tmp_img->path_relative), JText::sprintf('COM_MEDIA_IMAGE_TITLE', $this->escape($this->_tmp_img->title), JHtml::_('number.bytes', $this->_tmp_img->size)), array('width' => $this->_tmp_img->width_60, 'height' => $this->_tmp_img->height_60)); ?> </div> <div class="small"> <?php echo JHtml::_('string.truncate', $this->escape($this->_tmp_img->name), 10, false); ?> </div> </a> </li> <?php $dispatcher->trigger('onContentAfterDisplay', array('com_media.file', &$this->_tmp_img, &$params, 0)); PKc��\����ff=components/com_media/views/imageslist/tmpl/default_folder.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $input = JFactory::getApplication()->input; ?> <li class="imgOutline thumbnail height-80 width-80 center"> <a href="index.php?option=com_media&view=imagesList&tmpl=component&folder=<?php echo rawurlencode($this->_tmp_folder->path_relative); ?>&asset=<?php echo $input->getCmd('asset'); ?>&author=<?php echo $input->getCmd('author'); ?>" target="imageframe"> <div class="height-50"> <span class="icon-folder-2"></span> </div> <div class="small"> <?php echo JHtml::_('string.truncate', $this->escape($this->_tmp_folder->name), 10, false); ?> </div> </a> </li> PKc��\��==6components/com_media/views/imageslist/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $lang = JFactory::getLanguage(); JHtml::_('stylesheet', 'media/popup-imagelist.css', array('version' => 'auto', 'relative' => true)); if ($lang->isRtl()) { JHtml::_('stylesheet', 'media/popup-imagelist_rtl.css', array('version' => 'auto', 'relative' => true)); } JFactory::getDocument()->addScriptDeclaration('var ImageManager = window.parent.ImageManager;'); if ($lang->isRtl()) { JFactory::getDocument()->addStyleDeclaration( ' @media (max-width: 767px) { li.imgOutline.thumbnail.height-80.width-80.center { float: right; } } ' ); } else { JFactory::getDocument()->addStyleDeclaration( ' @media (max-width: 767px) { li.imgOutline.thumbnail.height-80.width-80.center { float: left; } } ' ); } ?> <?php if (count($this->images) > 0 || count($this->folders) > 0) : ?> <ul class="manager thumbnails thumbnails-media"> <?php for ($i = 0, $n = count($this->folders); $i < $n; $i++) : $this->setFolder($i); echo $this->loadTemplate('folder'); endfor; ?> <?php for ($i = 0, $n = count($this->images); $i < $n; $i++) : $this->setImage($i); echo $this->loadTemplate('image'); endfor; ?> </ul> <?php else : ?> <div id="media-noimages"> <div class="alert alert-info"><?php echo JText::_('COM_MEDIA_NO_IMAGES_FOUND'); ?></div> </div> <?php endif; ?> PKc��\a� y��3components/com_media/views/imageslist/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Media component * * @since 1.0 */ class MediaViewImagesList extends JViewLegacy { /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.0 */ public function display($tpl = null) { // Do not allow cache JFactory::getApplication()->allowCache(false); $images = $this->get('images'); $folders = $this->get('folders'); $state = $this->get('state'); $this->baseURL = COM_MEDIA_BASEURL; $this->images = &$images; $this->folders = &$folders; $this->state = &$state; parent::display($tpl); } /** * Set the active folder * * @param integer $index Folder position * * @return void * * @since 1.0 */ public function setFolder($index = 0) { if (isset($this->folders[$index])) { $this->_tmp_folder = &$this->folders[$index]; } else { $this->_tmp_folder = new JObject; } } /** * Set the active image * * @param integer $index Image position * * @return void * * @since 1.0 */ public function setImage($index = 0) { if (isset($this->images[$index])) { $this->_tmp_img = &$this->images[$index]; } else { $this->_tmp_img = new JObject; } } } PKc��\�l�#��<components/com_media/views/media/tmpl/default_navigation.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $app = JFactory::getApplication(); $style = $app->getUserStateFromRequest('media.list.layout', 'layout', 'thumbs', 'word'); ?> <div class="media btn-group"> <a href="#" id="thumbs" onclick="MediaManager.setViewType('thumbs')" class="btn <?php echo ($style == 'thumbs') ? 'active' : ''; ?>"> <span class="icon-grid-view-2"></span> <?php echo JText::_('COM_MEDIA_THUMBNAIL_VIEW'); ?></a> <a href="#" id="details" onclick="MediaManager.setViewType('details')" class="btn <?php echo ($style == 'details') ? 'active' : ''; ?>"> <span class="icon-list-view"></span> <?php echo JText::_('COM_MEDIA_DETAIL_VIEW'); ?></a> </div> PKc��\����1components/com_media/views/media/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $user = JFactory::getUser(); $input = JFactory::getApplication()->input; $lang = JFactory::getLanguage(); $style = JFactory::getApplication()->getUserStateFromRequest('media.list.layout', 'layout', 'thumbs', 'word'); if (DIRECTORY_SEPARATOR == '\\') { $base = str_replace(DIRECTORY_SEPARATOR, "\\\\", COM_MEDIA_BASE); } else { $base = COM_MEDIA_BASE; } JFactory::getDocument()->addScriptDeclaration( " var basepath = '" . $base . "'; var viewstyle = '" . $style . "'; " ); JHtml::_('behavior.keepalive'); JHtml::_('bootstrap.framework'); JHtml::_('script', 'media/mediamanager.min.js', array('version' => 'auto', 'relative' => true)); JHtml::_('script', 'media/mediaelement-and-player.js', array('version' => 'auto', 'relative' => true)); JHtml::_('stylesheet', 'media/mediaelementplayer.css', array('version' => 'auto', 'relative' => true)); JHtml::_('stylesheet', 'system/mootree.css', array('version' => 'auto', 'relative' => true)); if ($lang->isRtl()) { JHtml::_('stylesheet', 'system/mootree_rtl.css', array('version' => 'auto', 'relative' => true)); } ?> <div class="row-fluid"> <!-- Begin Sidebar --> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> <div class="j-toggle-sidebar-header"> <h3><?php echo JText::_('COM_MEDIA_FOLDERS'); ?> </h3> </div> <div id="treeview" class="sidebar"> <div id="media-tree_tree" class="tree-holder"> <?php echo $this->loadTemplate('folders'); ?> </div> </div> </div> <!-- End Sidebar --> <!-- Begin Content --> <div id="j-main-container" class="span10"> <?php echo $this->loadTemplate('navigation'); ?> <?php if (($user->authorise('core.create', 'com_media')) and $this->require_ftp) : ?> <form action="index.php?option=com_media&task=ftpValidate" name="ftpForm" id="ftpForm" method="post"> <fieldset title="<?php echo JText::_('COM_MEDIA_DESCFTPTITLE'); ?>"> <legend><?php echo JText::_('COM_MEDIA_DESCFTPTITLE'); ?></legend> <?php echo JText::_('COM_MEDIA_DESCFTP'); ?> <label for="username"><?php echo JText::_('JGLOBAL_USERNAME'); ?></label> <input type="text" id="username" name="username" size="70" value="" /> <label for="password"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></label> <input type="password" id="password" name="password" size="70" value="" /> </fieldset> </form> <?php endif; ?> <form action="index.php?option=com_media" name="adminForm" id="mediamanager-form" method="post" enctype="multipart/form-data" > <input type="hidden" name="task" value="" /> <input type="hidden" name="cb1" id="cb1" value="0" /> <input class="update-folder" type="hidden" name="folder" id="folder" value="<?php echo $this->escape($this->state->folder); ?>" /> </form> <?php if ($user->authorise('core.create', 'com_media')) : ?> <!-- File Upload Form --> <div id="collapseUpload" class="collapse"> <form action="<?php echo JUri::base(); ?>index.php?option=com_media&task=file.upload&tmpl=component&<?php echo $this->session->getName() . '=' . $this->session->getId(); ?>&<?php echo JSession::getFormToken(); ?>=1&format=html" id="uploadForm" class="form-inline" name="uploadForm" method="post" enctype="multipart/form-data"> <div id="uploadform" class="uploadform"> <fieldset id="upload-noflash" class="actions"> <label for="upload-file" class="control-label"><?php echo JText::_('COM_MEDIA_UPLOAD_FILE'); ?></label> <input required type="file" id="upload-file" name="Filedata[]" multiple /> <button class="btn btn-primary" id="upload-submit"><span class="icon-upload icon-white"></span> <?php echo JText::_('COM_MEDIA_START_UPLOAD'); ?></button> <p class="help-block"> <?php $cMax = (int) $this->config->get('upload_maxsize'); ?> <?php $maxSize = JUtility::getMaxUploadSize($cMax . 'MB'); ?> <?php echo JText::sprintf('JGLOBAL_MAXIMUM_UPLOAD_SIZE_LIMIT', JHtml::_('number.bytes', $maxSize)); ?> </p> </fieldset> <input class="update-folder" type="hidden" name="folder" id="folder" value="<?php echo $this->escape($this->state->folder); ?>" /> <?php JFactory::getSession()->set('com_media.return_url', 'index.php?option=com_media'); ?> </div> </form> </div> <div id="collapseFolder" class="collapse"> <form action="index.php?option=com_media&task=folder.create&tmpl=<?php echo $input->getCmd('tmpl', 'index'); ?>" name="folderForm" id="folderForm" class="form-inline" method="post"> <div class="path"> <input type="text" id="folderpath" readonly="readonly" class="update-folder" /> <input required type="text" id="foldername" name="foldername" /> <input class="update-folder" type="hidden" name="folderbase" id="folderbase" value="<?php echo $this->escape($this->state->folder); ?>" /> <button type="submit" class="btn"><span class="icon-folder-open"></span> <?php echo JText::_('COM_MEDIA_CREATE_FOLDER'); ?></button> </div> <?php echo JHtml::_('form.token'); ?> </form> </div> <?php endif; ?> <form action="index.php?option=com_media&task=folder.create&tmpl=<?php echo $input->getCmd('tmpl', 'index'); ?>" name="folderForm" id="folderForm" method="post"> <div id="folderview"> <div class="view"> <iframe class="thumbnail" src="index.php?option=com_media&view=mediaList&tmpl=component&folder=<?php echo $this->escape($this->state->folder); ?>" id="folderframe" name="folderframe" width="100%" height="500px" marginwidth="0" marginheight="0" scrolling="auto"></iframe> </div> <?php echo JHtml::_('form.token'); ?> </div> </form> </div> <?php // Pre render all the bootstrap modals on the parent window echo JHtml::_( 'bootstrap.renderModal', 'imagePreview', array( 'title' => JText::_('COM_MEDIA_PREVIEW'), 'footer' => '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>', ), '<div id="image" style="text-align:center;"><img id="imagePreviewSrc" src="../media/jui/img/alpha.png" alt="preview" style="max-width:100%; max-height:300px;"/></div>' ); echo JHtml::_( 'bootstrap.renderModal', 'videoPreview', array( 'title' => JText::_('COM_MEDIA_PREVIEW'), 'footer' => '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>', ), '<div id="videoPlayer" style="z-index: -100;"><video id="mejsPlayer" style="height: 250px;"/></div>' ); ?> <!-- End Content --> </div> PKc��\_\v>>9components/com_media/views/media/tmpl/default_folders.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Set up the sanitised target for the ul $ulTarget = str_replace('/', '-', $this->folders['data']->relative); ?> <ul class="nav nav-list" id="collapseFolder-<?php echo $ulTarget; ?>"> <?php if (isset($this->folders['children'])) : foreach ($this->folders['children'] as $folder) : // Get a sanitised name for the target $target = str_replace('/', '-', $folder['data']->relative); ?> <li id="<?php echo $target; ?>" class="folder"> <a href="index.php?option=com_media&view=mediaList&tmpl=component&folder=<?php echo rawurlencode($folder['data']->relative); ?>" target="folderframe" class="folder-url" > <span class="icon-folder"></span> <?php echo $this->escape($folder['data']->name); ?> </a> <?php echo $this->getFolderLevel($folder); ?> </li> <?php endforeach; endif; ?> </ul> PKc��\&�&�� � .components/com_media/views/media/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Media component * * @since 1.0 */ class MediaViewMedia extends JViewLegacy { /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.0 */ public function display($tpl = null) { $app = JFactory::getApplication(); $config = JComponentHelper::getParams('com_media'); if (!$app->isClient('administrator')) { return $app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'warning'); } /* * Display form for FTP credentials? * Don't set them here, as there are other functions called before this one if there is any file write operation */ $ftp = !JClientHelper::hasCredentials('ftp'); $session = JFactory::getSession(); $state = $this->get('state'); $this->session = $session; $this->config = &$config; $this->state = &$state; $this->require_ftp = $ftp; $this->folders_id = ' id="media-tree"'; $this->folders = $this->get('folderTree'); $this->sidebar = JHtmlSidebar::render(); // Set the toolbar $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); $user = JFactory::getUser(); // Set the titlebar text JToolbarHelper::title(JText::_('COM_MEDIA'), 'images mediamanager'); // Add an upload button if ($user->authorise('core.create', 'com_media')) { // Instantiate a new JLayoutFile instance and render the layout $layout = new JLayoutFile('toolbar.uploadmedia'); $bar->appendButton('Custom', $layout->render(array()), 'upload'); JToolbarHelper::divider(); } // Add a create folder button if ($user->authorise('core.create', 'com_media')) { // Instantiate a new JLayoutFile instance and render the layout $layout = new JLayoutFile('toolbar.newfolder'); $bar->appendButton('Custom', $layout->render(array()), 'create'); JToolbarHelper::divider(); } // Add a delete button if ($user->authorise('core.delete', 'com_media')) { // Instantiate a new JLayoutFile instance and render the layout $layout = new JLayoutFile('toolbar.deletemedia'); $bar->appendButton('Custom', $layout->render(array()), 'delete'); JToolbarHelper::divider(); } // Add a preferences button if ($user->authorise('core.admin', 'com_media') || $user->authorise('core.options', 'com_media')) { JToolbarHelper::preferences('com_media'); JToolbarHelper::divider(); } JToolbarHelper::help('JHELP_CONTENT_MEDIA_MANAGER'); } /** * Display a folder level * * @param array $folder Array with folder data * * @return string * * @since 1.0 */ protected function getFolderLevel($folder) { $this->folders_id = null; $txt = null; if (isset($folder['children']) && count($folder['children'])) { $tmp = $this->folders; $this->folders = $folder; $txt = $this->loadTemplate('folders'); $this->folders = $tmp; } return $txt; } } PKc��\�ꎗw w 2components/com_media/views/images/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $user = JFactory::getUser(); $input = JFactory::getApplication()->input; $params = JComponentHelper::getParams('com_media'); $lang = JFactory::getLanguage(); $onClick = ''; $fieldInput = $this->state->get('field.id'); $isMoo = $input->getInt('ismoo', 1); $author = $input->getCmd('author'); $asset = $input->getCmd('asset'); JHtml::_('formbehavior.chosen', 'select'); // Load tooltip instance without HTML support because we have a HTML tag in the tip JHtml::_('bootstrap.tooltip', '.noHtmlTip', array('html' => false)); // Include jQuery JHtml::_('behavior.core'); JHtml::_('jquery.framework'); JHtml::_('script', 'media/popup-imagemanager.min.js', array('version' => 'auto', 'relative' => true)); JHtml::_('stylesheet', 'media/popup-imagemanager.css', array('version' => 'auto', 'relative' => true)); if ($lang->isRtl()) { JHtml::_('stylesheet', 'media/popup-imagemanager_rtl.css', array('version' => 'auto', 'relative' => true)); } JFactory::getDocument()->addScriptOptions( 'mediamanager', array( 'base' => $params->get('image_path', 'images') . '/', 'asset' => $asset, 'author' => $author ) ); /** * Mootools compatibility * * There is an extra option passed in the URL for the iframe &ismoo=0 for the bootstrap fields. * By default the value will be 1 or defaults to mootools behaviour * * This should be removed when mootools won't be shipped by Joomla. */ if (!empty($fieldInput)) // Media Form Field { if ($isMoo) { $onClick = "window.parent.jInsertFieldValue(document.getElementById('f_url').value, '" . $fieldInput . "');window.parent.jModalClose();window.parent.jQuery('.modal.in').modal('hide');"; } } else // XTD Image plugin { $onClick = 'ImageManager.onok();window.parent.jModalClose();'; } ?> <div class="container-popup"> <form action="index.php?option=com_media&asset=<?php echo $asset; ?>&author=<?php echo $author; ?>" class="form-horizontal" id="imageForm" method="post" enctype="multipart/form-data"> <div id="messages" style="display: none;"> <span id="message"></span><?php echo JHtml::_('image', 'media/dots.gif', '...', array('width' => 22, 'height' => 12), true); ?> </div> <div class="well"> <div class="row-fluid"> <div class="span8 control-group"> <div class="control-label"> <label for="folder"><?php echo JText::_('COM_MEDIA_DIRECTORY'); ?></label> </div> <div class="controls"> <?php echo $this->folderList; ?> <button class="btn" type="button" id="upbutton" title="<?php echo JText::_('COM_MEDIA_DIRECTORY_UP'); ?>"><?php echo JText::_('COM_MEDIA_UP'); ?></button> </div> </div> <div class="span4 control-group"> <div class="pull-right"> <button class="btn btn-success button-save-selected" type="button" <?php if (!empty($onClick)) : // This is for Mootools compatibility ?>onclick="<?php echo $onClick; ?>"<?php endif; ?> data-dismiss="modal"><?php echo JText::_('COM_MEDIA_INSERT'); ?></button> <button class="btn button-cancel" type="button" onclick="window.parent.jQuery('.modal.in').modal('hide');<?php if (!empty($onClick)) : // This is for Mootools compatibility ?>parent.jModalClose();<?php endif ?>" data-dismiss="modal"><?php echo JText::_('JCANCEL'); ?></button> </div> </div> </div> </div> <iframe id="imageframe" name="imageframe" src="index.php?option=com_media&view=imagesList&tmpl=component&folder=<?php echo rawurlencode($this->state->folder); ?>&asset=<?php echo $asset; ?>&author=<?php echo $author; ?>"></iframe> <div class="well"> <div class="row-fluid"> <div class="span12 control-group"> <div class="control-label"> <label for="f_url"><?php echo JText::_('COM_MEDIA_IMAGE_URL'); ?></label> </div> <div class="controls"> <input type="text" id="f_url" value="" /> </div> </div> </div> </div> <?php if (!$this->state->get('field.id')) : ?> <div class="well"> <div class="row-fluid"> <div class="span6 control-group"> <div class="control-label"> <label title="<?php echo JText::_('COM_MEDIA_ALIGN_DESC'); ?>" class="noHtmlTip" for="f_align"><?php echo JText::_('COM_MEDIA_ALIGN'); ?></label> </div> <div class="controls"> <select size="1" id="f_align"> <option value="" selected="selected"><?php echo JText::_('COM_MEDIA_NOT_SET'); ?></option> <option value="left"><?php echo JText::_('JGLOBAL_LEFT'); ?></option> <option value="center"><?php echo JText::_('JGLOBAL_CENTER'); ?></option> <option value="right"><?php echo JText::_('JGLOBAL_RIGHT'); ?></option> </select> </div> </div> </div> <div class="row-fluid"> <div class="span6 control-group"> <div class="control-label"> <label for="f_alt"><?php echo JText::_('COM_MEDIA_IMAGE_DESCRIPTION'); ?></label> </div> <div class="controls"> <input type="text" id="f_alt" value="" /> </div> </div> <div class="span6 control-group"> <div class="control-label"> <label for="f_title"><?php echo JText::_('COM_MEDIA_TITLE'); ?></label> </div> <div class="controls"> <input type="text" id="f_title" value="" /> </div> </div> </div> <div class="row-fluid"> <div class="span6 control-group"> <div class="control-label"> <label for="f_caption"><?php echo JText::_('COM_MEDIA_CAPTION'); ?></label> </div> <div class="controls"> <input type="text" id="f_caption" value="" /> </div> </div> <div class="span6 control-group"> <div class="control-label"> <label title="<?php echo JText::_('COM_MEDIA_CAPTION_CLASS_DESC'); ?>" class="noHtmlTip" for="f_caption_class"><?php echo JText::_('COM_MEDIA_CAPTION_CLASS_LABEL'); ?></label> </div> <div class="controls"> <input type="text" list="d_caption_class" id="f_caption_class" value="" /> <datalist id="d_caption_class"> <option value="text-left"> <option value="text-center"> <option value="text-right"> </datalist> </div> </div> </div> <input type="hidden" id="dirPath" name="dirPath" /> <input type="hidden" id="f_file" name="f_file" /> <input type="hidden" id="tmpl" name="component" /> </div> <?php endif; ?> </form> <?php if ($user->authorise('core.create', 'com_media')) : ?> <form action="<?php echo JUri::base(); ?>index.php?option=com_media&task=file.upload&tmpl=component&<?php echo $this->session->getName() . '=' . $this->session->getId(); ?>&<?php echo JSession::getFormToken(); ?>=1&asset=<?php echo $asset; ?>&author=<?php echo $author; ?>&view=images" id="uploadForm" class="form-horizontal" name="uploadForm" method="post" enctype="multipart/form-data"> <div id="uploadform" class="well"> <fieldset id="upload-noflash" class="actions"> <div class="control-group"> <div class="control-label"> <label for="upload-file" class="control-label"><?php echo JText::_('COM_MEDIA_UPLOAD_FILE'); ?></label> </div> <div class="controls"> <input required type="file" id="upload-file" name="Filedata[]" multiple /><button class="btn btn-primary" id="upload-submit"><span class="icon-upload icon-white"></span> <?php echo JText::_('COM_MEDIA_START_UPLOAD'); ?></button> <p class="help-block"> <?php $cMax = (int) $this->config->get('upload_maxsize'); ?> <?php $maxSize = JUtility::getMaxUploadSize($cMax . 'MB'); ?> <?php echo JText::sprintf('JGLOBAL_MAXIMUM_UPLOAD_SIZE_LIMIT', JHtml::_('number.bytes', $maxSize)); ?> </p> </div> </div> </fieldset> <?php JFactory::getSession()->set('com_media.return_url', 'index.php?option=com_media&view=images&tmpl=component&fieldid=' . $input->getCmd('fieldid', '') . '&e_name=' . $input->getCmd('e_name') . '&asset=' . $asset . '&author=' . $author); ?> </div> </form> <?php endif; ?> </div> PKc��\qR}}��/components/com_media/views/images/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Media component * * @since 1.0 */ class MediaViewImages extends JViewLegacy { /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.0 */ public function display($tpl = null) { $config = JComponentHelper::getParams('com_media'); /* * Display form for FTP credentials? * Don't set them here, as there are other functions called before this one if there is any file write operation */ $ftp = !JClientHelper::hasCredentials('ftp'); $this->session = JFactory::getSession(); $this->config = $config; $this->state = $this->get('state'); $this->folderList = $this->get('folderList'); $this->require_ftp = $ftp; parent::display($tpl); } } PKc��\8}�]99&components/com_media/helpers/media.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Media helper class. * * @since 1.6 * @deprecated 4.0 Use JHelperMedia instead */ abstract class MediaHelper { /** * Checks if the file is an image * * @param string $fileName The filename * * @return boolean * * @since 1.5 * @deprecated 4.0 Use JHelperMedia::isImage instead */ public static function isImage($fileName) { try { JLog::add( sprintf('%s() is deprecated. Use JHelperMedia::isImage() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } $mediaHelper = new JHelperMedia; return $mediaHelper->isImage($fileName); } /** * Gets the file extension for the purpose of using an icon. * * @param string $fileName The filename * * @return string File extension * * @since 1.5 * @deprecated 4.0 Use JHelperMedia::getTypeIcon instead */ public static function getTypeIcon($fileName) { try { JLog::add( sprintf('%s() is deprecated. Use JHelperMedia::getTypeIcon() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } $mediaHelper = new JHelperMedia; return $mediaHelper->getTypeIcon($fileName); } /** * Checks if the file can be uploaded * * @param array $file File information * @param string $error An error message to be returned * * @return boolean * * @since 1.5 * @deprecated 4.0 Use JHelperMedia::canUpload instead */ public static function canUpload($file, $error = '') { try { JLog::add( sprintf('%s() is deprecated. Use JHelperMedia::canUpload() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } $mediaHelper = new JHelperMedia; return $mediaHelper->canUpload($file, 'com_media'); } /** * Method to parse a file size * * @param integer $size The file size in bytes * * @return string The converted file size * * @since 1.6 * @deprecated 4.0 Use JHtml::_('number.bytes') instead */ public static function parseSize($size) { try { JLog::add( sprintf("%s() is deprecated. Use JHtml::_('number.bytes') instead.", __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } return JHtml::_('number.bytes', $size); } /** * Calculate the size of a resized image * * @param integer $width Image width * @param integer $height Image height * @param integer $target Target size * * @return array The new width and height * * @since 3.2 * @deprecated 4.0 Use JHelperMedia::imageResize instead */ public static function imageResize($width, $height, $target) { try { JLog::add( sprintf('%s() is deprecated. Use JHelperMedia::imageResize() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } $mediaHelper = new JHelperMedia; return $mediaHelper->imageResize($width, $height, $target); } /** * Counts the files and directories in a directory that are not php or html files. * * @param string $dir Directory name * * @return array The number of files and directories in the given directory * * @since 1.5 * @deprecated 4.0 Use JHelperMedia::countFiles instead */ public static function countFiles($dir) { try { JLog::add( sprintf('%s() is deprecated. Use JHelperMedia::countFiles() instead.', __METHOD__), JLog::WARNING, 'deprecated' ); } catch (RuntimeException $exception) { // Informational log only } $mediaHelper = new JHelperMedia; return $mediaHelper->countFiles($dir); } } PKc��\���Lcomponents/com_media/media.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $input = JFactory::getApplication()->input; $user = JFactory::getUser(); $asset = $input->get('asset'); $author = $input->get('author'); // Access check. if (!$user->authorise('core.manage', 'com_media') && (!$asset || (!$user->authorise('core.edit', $asset) && !$user->authorise('core.create', $asset) && count($user->getAuthorisedCategories($asset, 'core.create')) == 0) && !($user->id == $author && $user->authorise('core.edit.own', $asset)))) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $params = JComponentHelper::getParams('com_media'); // Load the helper class JLoader::register('MediaHelper', JPATH_ADMINISTRATOR . '/components/com_media/helpers/media.php'); // Set the path definitions $popup_upload = $input->get('pop_up', null); $path = 'file_path'; $view = $input->get('view'); if (substr(strtolower($view), 0, 6) == 'images' || $popup_upload == 1) { $path = 'image_path'; } define('COM_MEDIA_BASE', JPATH_ROOT . '/' . $params->get($path, 'images')); define('COM_MEDIA_BASEURL', JUri::root() . $params->get($path, 'images')); $controller = JControllerLegacy::getInstance('Media', array('base_path' => JPATH_COMPONENT_ADMINISTRATOR)); $controller->execute($input->get('task')); $controller->redirect(); PKc��\�V�,components/com_media/models/forms/index.htmlnu�[���<!DOCTYPE html><title></title> PKc��\N����$components/com_media/models/list.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); /** * Media Component List Model * * @since 1.5 */ class MediaModelList extends JModelLegacy { /** * Method to get model state variables * * @param string $property Optional parameter name * @param mixed $default Optional default value * * @return object The property where specified, the state object where omitted * * @since 1.5 */ public function getState($property = null, $default = null) { static $set; if (!$set) { $input = JFactory::getApplication()->input; $folder = $input->get('folder', '', 'path'); $this->setState('folder', $folder); $parent = str_replace("\\", '/', dirname($folder)); $parent = ($parent == '.') ? null : $parent; $this->setState('parent', $parent); $set = true; } return parent::getState($property, $default); } /** * Get the images on the current folder * * @return array * * @since 1.5 */ public function getImages() { $list = $this->getList(); return $list['images']; } /** * Get the folders on the current folder * * @return array * * @since 1.5 */ public function getFolders() { $list = $this->getList(); return $list['folders']; } /** * Get the documents on the current folder * * @return array * * @since 1.5 */ public function getDocuments() { $list = $this->getList(); return $list['docs']; } /** * Build imagelist * * @return array * * @since 1.5 */ public function getList() { static $list; // Only process the list once per request if (is_array($list)) { return $list; } // Get current path from request $current = (string) $this->getState('folder'); $basePath = COM_MEDIA_BASE . ((strlen($current) > 0) ? '/' . $current : ''); $mediaBase = str_replace(DIRECTORY_SEPARATOR, '/', COM_MEDIA_BASE . '/'); // Reset base path if (strpos(realpath($basePath), JPath::clean(realpath(COM_MEDIA_BASE))) !== 0) { $basePath = COM_MEDIA_BASE; } $images = array (); $folders = array (); $docs = array (); $videos = array (); $fileList = false; $folderList = false; if (file_exists($basePath)) { // Get the list of files and folders from the given folder $fileList = JFolder::files($basePath); $folderList = JFolder::folders($basePath); } // Iterate over the files if they exist if ($fileList !== false) { $tmpBaseObject = new JObject; foreach ($fileList as $file) { if (is_file($basePath . '/' . $file) && substr($file, 0, 1) != '.' && strtolower($file) !== 'index.html') { $tmp = clone $tmpBaseObject; $tmp->name = $file; $tmp->title = $file; $tmp->path = str_replace(DIRECTORY_SEPARATOR, '/', JPath::clean($basePath . '/' . $file)); $tmp->path_relative = str_replace($mediaBase, '', $tmp->path); $tmp->size = filesize($tmp->path); $ext = strtolower(JFile::getExt($file)); switch ($ext) { // Image case 'jpg': case 'png': case 'gif': case 'xcf': case 'odg': case 'bmp': case 'jpeg': case 'ico': $info = @getimagesize($tmp->path); $tmp->width = @$info[0]; $tmp->height = @$info[1]; $tmp->type = @$info[2]; $tmp->mime = @$info['mime']; if (($info[0] > 60) || ($info[1] > 60)) { $dimensions = MediaHelper::imageResize($info[0], $info[1], 60); $tmp->width_60 = $dimensions[0]; $tmp->height_60 = $dimensions[1]; } else { $tmp->width_60 = $tmp->width; $tmp->height_60 = $tmp->height; } if (($info[0] > 16) || ($info[1] > 16)) { $dimensions = MediaHelper::imageResize($info[0], $info[1], 16); $tmp->width_16 = $dimensions[0]; $tmp->height_16 = $dimensions[1]; } else { $tmp->width_16 = $tmp->width; $tmp->height_16 = $tmp->height; } $images[] = $tmp; break; // Video case 'mp4': $tmp->icon_32 = 'media/mime-icon-32/' . $ext . '.png'; $tmp->icon_16 = 'media/mime-icon-16/' . $ext . '.png'; $videos[] = $tmp; break; // Non-image document default: $tmp->icon_32 = 'media/mime-icon-32/' . $ext . '.png'; $tmp->icon_16 = 'media/mime-icon-16/' . $ext . '.png'; $docs[] = $tmp; break; } } } } // Iterate over the folders if they exist if ($folderList !== false) { $tmpBaseObject = new JObject; foreach ($folderList as $folder) { $tmp = clone $tmpBaseObject; $tmp->name = basename($folder); $tmp->path = str_replace(DIRECTORY_SEPARATOR, '/', JPath::clean($basePath . '/' . $folder)); $tmp->path_relative = str_replace($mediaBase, '', $tmp->path); $count = MediaHelper::countFiles($tmp->path); $tmp->files = $count[0]; $tmp->folders = $count[1]; $folders[] = $tmp; } } $list = array('folders' => $folders, 'docs' => $docs, 'images' => $images, 'videos' => $videos); return $list; } /** * Get the videos on the current folder * * @return array * * @since 3.5 */ public function getVideos() { $list = $this->getList(); return $list['videos']; } } PKc��\��'components/com_media/models/manager.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Media Component Manager Model * * @since 1.5 */ class MediaModelManager extends JModelLegacy { /** * Method to get model state variables * * @param string $property Optional parameter name * @param mixed $default Optional default value * * @return object The property where specified, the state object where omitted * * @since 1.5 */ public function getState($property = null, $default = null) { static $set; if (!$set) { $input = JFactory::getApplication()->input; $folder = $input->get('folder', '', 'path'); $this->setState('folder', $folder); $fieldid = $input->get('fieldid', ''); $this->setState('field.id', $fieldid); $parent = str_replace("\\", '/', dirname($folder)); $parent = ($parent == '.') ? null : $parent; $this->setState('parent', $parent); $set = true; } return parent::getState($property, $default); } /** * Get a select field with a list of available folders * * @param string $base The image directory to display * * @return html * * @since 1.5 */ public function getFolderList($base = null) { // Get some paths from the request if (empty($base)) { $base = COM_MEDIA_BASE; } // Corrections for windows paths $base = str_replace(DIRECTORY_SEPARATOR, '/', $base); $com_media_base_uni = str_replace(DIRECTORY_SEPARATOR, '/', COM_MEDIA_BASE); // Get the list of folders jimport('joomla.filesystem.folder'); $folders = JFolder::folders($base, '.', true, true); $document = JFactory::getDocument(); $document->setTitle(JText::_('COM_MEDIA_INSERT_IMAGE')); // Build the array of select options for the folder list $options[] = JHtml::_('select.option', '', '/'); foreach ($folders as $folder) { $folder = str_replace($com_media_base_uni, '', str_replace(DIRECTORY_SEPARATOR, '/', $folder)); $value = substr($folder, 1); $text = str_replace(DIRECTORY_SEPARATOR, '/', $folder); $options[] = JHtml::_('select.option', $value, $text); } // Sort the folder list array if (is_array($options)) { sort($options); } // Get asset and author id (use integer filter) $input = JFactory::getApplication()->input; $asset = $input->get('asset', 0, 'integer'); // For new items the asset is a string. JAccess always checks type first // so both string and integer are supported. if ($asset == 0) { $asset = htmlspecialchars(json_encode(trim($input->get('asset', 0, 'cmd'))), ENT_COMPAT, 'UTF-8'); } $author = $input->get('author', 0, 'integer'); // Create the dropdown folder select list $attribs = 'size="1" onchange="ImageManager.setFolder(this.options[this.selectedIndex].value, ' . $asset . ', ' . $author . ')" '; $list = JHtml::_('select.genericlist', $options, 'folderlist', $attribs, 'value', 'text', $base); return $list; } /** * Get the folder tree * * @param mixed $base Base folder | null for using base media folder * * @return array * * @since 1.5 */ public function getFolderTree($base = null) { // Get some paths from the request if (empty($base)) { $base = COM_MEDIA_BASE; } $mediaBase = str_replace(DIRECTORY_SEPARATOR, '/', COM_MEDIA_BASE . '/'); // Get the list of folders jimport('joomla.filesystem.folder'); $folders = JFolder::folders($base, '.', true, true); $tree = array(); foreach ($folders as $folder) { $folder = str_replace(DIRECTORY_SEPARATOR, '/', $folder); $name = substr($folder, strrpos($folder, '/') + 1); $relative = str_replace($mediaBase, '', $folder); $absolute = $folder; $path = explode('/', $relative); $node = (object) array('name' => $name, 'relative' => $relative, 'absolute' => $absolute); $tmp = &$tree; for ($i = 0, $n = count($path); $i < $n; $i++) { if (!isset($tmp['children'])) { $tmp['children'] = array(); } if ($i == $n - 1) { // We need to place the node $tmp['children'][$relative] = array('data' => $node, 'children' => array()); break; } if (array_key_exists($key = implode('/', array_slice($path, 0, $i + 1)), $tmp['children'])) { $tmp = &$tmp['children'][$key]; } } } $tree['data'] = (object) array('name' => JText::_('COM_MEDIA_MEDIA'), 'relative' => '', 'absolute' => $base); return $tree; } } PKc��\z��}}#components/com_media/controller.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_media * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Media Manager Component Controller * * @since 1.5 */ class MediaController extends JControllerLegacy { /** * Method to display a view. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. * * @return JController This object to support chaining. * * @since 1.5 */ public function display($cachable = false, $urlparams = false) { JPluginHelper::importPlugin('content'); $vType = JFactory::getDocument()->getType(); $vName = $this->input->get('view', 'media'); switch ($vName) { case 'images': $vLayout = $this->input->get('layout', 'default', 'string'); $mName = 'manager'; break; case 'imagesList': $mName = 'list'; $vLayout = $this->input->get('layout', 'default', 'string'); break; case 'mediaList': $app = JFactory::getApplication(); $mName = 'list'; $vLayout = $app->getUserStateFromRequest('media.list.layout', 'layout', 'thumbs', 'word'); break; case 'media': default: $vName = 'media'; $vLayout = $this->input->get('layout', 'default', 'string'); $mName = 'manager'; break; } // Get/Create the view $view = $this->getView($vName, $vType, '', array('base_path' => JPATH_COMPONENT_ADMINISTRATOR)); // Get/Create the model if ($model = $this->getModel($mName)) { // Push the model into the view (as default) $view->setModel($model, true); } // Set the layout $view->setLayout($vLayout); // Display the view $view->display(); return $this; } /** * Validate FTP credentials * * @return void * * @since 1.5 */ public function ftpValidate() { // Set FTP credentials, if given JClientHelper::setCredentialsFromRequest('ftp'); } } PKc��\x�Q��,components/com_newsfeeds/tables/newsfeed.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\String\StringHelper; /** * Newsfeed Table class. * * @since 1.6 */ class NewsfeedsTableNewsfeed extends JTable { /** * Ensure the params, metadata and images are json encoded in the bind method * * @var array * @since 3.3 */ protected $_jsonEncode = array('params', 'metadata', 'images'); /** * Constructor * * @param JDatabaseDriver &$db A database connector object */ public function __construct(&$db) { parent::__construct('#__newsfeeds', 'id', $db); $this->setColumnAlias('title', 'name'); JTableObserverTags::createObserver($this, array('typeAlias' => 'com_newsfeeds.newsfeed')); JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_newsfeeds.newsfeed')); } /** * Overloaded check method to ensure data integrity. * * @return boolean True on success. */ public function check() { // Check for valid name. if (trim($this->name) == '') { $this->setError(JText::_('COM_NEWSFEEDS_WARNING_PROVIDE_VALID_NAME')); return false; } if (empty($this->alias)) { $this->alias = $this->name; } $this->alias = JApplicationHelper::stringURLSafe($this->alias, $this->language); if (trim(str_replace('-', '', $this->alias)) == '') { $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); } // Check the publish down date is not earlier than publish up. if ((int) $this->publish_down > 0 && $this->publish_down < $this->publish_up) { $this->setError(JText::_('JGLOBAL_START_PUBLISH_AFTER_FINISH')); return false; } // Clean up keywords -- eliminate extra spaces between phrases // and cr (\r) and lf (\n) characters from string if not empty if (!empty($this->metakey)) { // Array of characters to remove $bad_characters = array("\n", "\r", "\"", '<', '>'); // Remove bad characters $after_clean = StringHelper::str_ireplace($bad_characters, '', $this->metakey); // Create array using commas as delimiter $keys = explode(',', $after_clean); $clean_keys = array(); foreach ($keys as $key) { if (trim($key)) { // Ignore blank keywords $clean_keys[] = trim($key); } } // Put array back together delimited by ", " $this->metakey = implode(', ', $clean_keys); } // Clean up description -- eliminate quotes and <> brackets if (!empty($this->metadesc)) { // Only process if not empty $bad_characters = array("\"", '<', '>'); $this->metadesc = StringHelper::str_ireplace($bad_characters, '', $this->metadesc); } return true; } /** * Overriden JTable::store to set modified data. * * @param boolean $updateNulls True to update fields even if they are null. * * @return boolean True on success. * * @since 1.6 */ public function store($updateNulls = false) { $date = JFactory::getDate(); $user = JFactory::getUser(); $this->modified = $date->toSql(); if ($this->id) { // Existing item $this->modified_by = $user->get('id'); } else { // New newsfeed. A feed created and created_by field can be set by the user, // so we don't touch either of these if they are set. if (!(int) $this->created) { $this->created = $date->toSql(); } if (empty($this->created_by)) { $this->created_by = $user->get('id'); } } // Verify that the alias is unique $table = JTable::getInstance('Newsfeed', 'NewsfeedsTable', array('dbo' => $this->_db)); if ($table->load(array('alias' => $this->alias, 'catid' => $this->catid)) && ($table->id != $this->id || $this->id == 0)) { $this->setError(JText::_('COM_NEWSFEEDS_ERROR_UNIQUE_ALIAS')); return false; } // Save links as punycode. $this->link = JStringPunycode::urlToPunycode($this->link); return parent::store($updateNulls); } } PKc��\贝���2components/com_newsfeeds/controllers/newsfeeds.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Newsfeeds list controller class. * * @since 1.6 */ class NewsfeedsControllerNewsfeeds extends JControllerAdmin { /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'Newsfeed', $prefix = 'NewsfeedsModel', $config = array('ignore_request' => true)) { return parent::getModel($name, $prefix, $config); } /** * Function that allows child controller access to model data * after the item has been deleted. * * @param JModelLegacy $model The data model object. * @param integer $ids The validated data. * * @return void * * @since 3.1 */ protected function postDeleteHook(JModelLegacy $model, $ids = null) { } } PKc��\9�ٲ��1components/com_newsfeeds/controllers/newsfeed.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Newsfeed controller class. * * @since 1.6 */ class NewsfeedsControllerNewsfeed extends JControllerForm { /** * Method override to check if you can add a new record. * * @param array $data An array of input data. * * @return boolean * * @since 1.6 */ protected function allowAdd($data = array()) { $categoryId = ArrayHelper::getValue($data, 'catid', $this->input->getInt('filter_category_id'), 'int'); $allow = null; if ($categoryId) { // If the category has been passed in the URL check it. $allow = JFactory::getUser()->authorise('core.create', $this->option . '.category.' . $categoryId); } if ($allow === null) { // In the absence of better information, revert to the component permissions. return parent::allowAdd($data); } else { return $allow; } } /** * Method to check if you can edit a record. * * @param array $data An array of input data. * @param string $key The name of the key for the primary key. * * @return boolean * * @since 1.6 */ protected function allowEdit($data = array(), $key = 'id') { $recordId = (int) isset($data[$key]) ? $data[$key] : 0; // Since there is no asset tracking, fallback to the component permissions. if (!$recordId) { return parent::allowEdit($data, $key); } // Get the item. $item = $this->getModel()->getItem($recordId); // Since there is no item, return false. if (empty($item)) { return false; } $user = JFactory::getUser(); // Check if can edit own core.edit.own. $canEditOwn = $user->authorise('core.edit.own', $this->option . '.category.' . (int) $item->catid) && $item->created_by == $user->id; // Check the category core.edit permissions. return $canEditOwn || $user->authorise('core.edit', $this->option . '.category.' . (int) $item->catid); } /** * Method to run batch operations. * * @param object $model The model. * * @return boolean True if successful, false otherwise and internal error is set. * * @since 2.5 */ public function batch($model = null) { $this->checkToken(); // Set the model $model = $this->getModel('Newsfeed', '', array()); // Preset the redirect $this->setRedirect(JRoute::_('index.php?option=com_newsfeeds&view=newsfeeds' . $this->getRedirectToListAppend(), false)); return parent::batch($model); } /** * Function that allows child controller access to model data after the data has been saved. * * @param JModelLegacy $model The data model object. * @param array $validData The validated data. * * @return void * * @since 3.1 */ protected function postSaveHook(JModelLegacy $model, $validData = array()) { } } PKc��\�C�ii&components/com_newsfeeds/newsfeeds.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('behavior.tabstate'); if (!JFactory::getUser()->authorise('core.manage', 'com_newsfeeds')) { throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403); } $controller = JControllerLegacy::getInstance('Newsfeeds'); $controller->execute(JFactory::getApplication()->input->get('task')); $controller->redirect(); PKc��\v��M�-�-#components/com_newsfeeds/config.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="newsfeed" label="COM_NEWSFEEDS_FIELD_CONFIG_NEWSFEED_SETTINGS_LABEL" description="COM_NEWSFEEDS_FIELD_CONFIG_NEWSFEED_SETTINGS_DESC" > <field name="newsfeed_layout" type="componentlayout" label="JGLOBAL_FIELD_LAYOUT_LABEL" description="JGLOBAL_FIELD_LAYOUT_DESC" menuitems="true" extension="com_newsfeeds" view="newsfeed" /> <field name="save_history" type="radio" label="JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL" description="JGLOBAL_SAVE_HISTORY_OPTIONS_DESC" default="0" class="btn-group btn-group-yesno" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="history_limit" type="number" label="JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL" description="JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC" default="5" filter="integer" showon="save_history:1" /> <field name="show_feed_image" type="radio" label="COM_NEWSFEEDS_FIELD_SHOW_FEED_IMAGE_LABEL" description="COM_NEWSFEEDS_FIELD_SHOW_FEED_IMAGE_DESC" id="show_feed_image" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_feed_description" type="radio" label="COM_NEWSFEEDS_FIELD_SHOW_FEED_DESCRIPTION_LABEL" description="COM_NEWSFEEDS_FIELD_SHOW_FEED_DESCRIPTION_DESC" id="show_feed_description" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_item_description" type="radio" label="COM_NEWSFEEDS_FIELD_SHOW_ITEM_DESCRIPTION_LABEL" description="COM_NEWSFEEDS_FIELD_SHOW_ITEM_DESCRIPTION_DESC" id="show_item_description" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="feed_character_count" type="number" label="COM_NEWSFEEDS_FIELD_CHARACTER_COUNT_LABEL" description="COM_NEWSFEEDS_FIELD_CHARACTER_COUNT_DESC" id="feed_character_count" default="0" size="6" /> <field name="feed_display_order" type="list" label="COM_NEWSFEEDS_FIELD_FEED_DISPLAY_ORDER_LABEL" description="COM_NEWSFEEDS_FIELD_FEED_DISPLAY_ORDER_DESC" id="feed_display_order" > <option value="des">JGLOBAL_MOST_RECENT_FIRST</option> <option value="asc">JGLOBAL_OLDEST_FIRST</option> </field> <field name="float_first" type="list" label="COM_NEWSFEEDS_FLOAT_FIRST_LABEL" description="COM_NEWSFEEDS_FLOAT_DESC" > <option value="right">COM_NEWSFEEDS_RIGHT</option> <option value="left">COM_NEWSFEEDS_LEFT</option> <option value="none">COM_NEWSFEEDS_NONE</option> </field> <field name="float_second" type="list" label="COM_NEWSFEEDS_FLOAT_SECOND_LABEL" description="COM_NEWSFEEDS_FLOAT_DESC" > <option value="right">COM_NEWSFEEDS_RIGHT</option> <option value="left">COM_NEWSFEEDS_LEFT</option> <option value="none">COM_NEWSFEEDS_NONE</option> </field> <field name="show_tags" type="radio" label="COM_NEWSFEEDS_FIELD_SHOW_TAGS_LABEL" description="COM_NEWSFEEDS_FIELD_SHOW_TAGS_DESC" id="show_tags" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="category" label="JCATEGORY" description="COM_NEWSFEEDS_FIELD_CONFIG_CATEGORY_SETTINGS_DESC" > <field name="category_layout" type="componentlayout" label="JGLOBAL_FIELD_LAYOUT_LABEL" description="JGLOBAL_FIELD_LAYOUT_DESC" menuitems="true" extension="com_newsfeeds" view="category" /> <field name="show_category_title" type="radio" label="JGLOBAL_SHOW_CATEGORY_TITLE" description="JGLOBAL_SHOW_CATEGORY_TITLE_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_description" type="radio" label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL" description="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_DESC" id="show_description" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_description_image" type="radio" label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL" description="JGLOBAL_SHOW_CATEGORY_IMAGE_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="maxLevel" type="list" label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL" description="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_DESC" default="-1" > <option value="0">JNONE</option> <option value="-1">JALL</option> <option value="1">J1</option> <option value="2">J2</option> <option value="3">J3</option> <option value="4">J4</option> <option value="5">J5</option> </field> <field name="show_empty_categories" type="radio" label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL" description="COM_NEWSFEEDS_SHOW_EMPTY_CATEGORIES_DESC" default="0" class="btn-group btn-group-yesno" showon="maxLevel:-1,1,2,3,4,5" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_subcat_desc" type="radio" label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL" description="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_DESC" default="1" class="btn-group btn-group-yesno" showon="maxLevel:-1,1,2,3,4,5" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_cat_items" type="radio" label="COM_NEWSFEEDS_FIELD_SHOW_CAT_ITEMS_LABEL" description="COM_NEWSFEEDS_FIELD_SHOW_CAT_ITEMS_DESC" id="show_cat_items" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_cat_tags" type="radio" label="COM_NEWSFEEDS_FIELD_SHOW_CAT_TAGS_LABEL" description="COM_NEWSFEEDS_FIELD_SHOW_CAT_TAGS_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="categories" label="JCATEGORIES" description="COM_NEWSFEEDS_CATEGORIES_DESC" > <field name="show_base_description" type="radio" label="JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_LABEL" description="JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="maxLevelcat" type="list" label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL" description="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_DESC" default="-1" > <option value="-1">JALL</option> <option value="0">JNONE</option> <option value="1">J1</option> <option value="2">J2</option> <option value="3">J3</option> <option value="4">J4</option> <option value="5">J5</option> </field> <field name="show_empty_categories_cat" type="radio" label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL" description="COM_NEWSFEEDS_SHOW_EMPTY_CATEGORIES_DESC" default="0" class="btn-group btn-group-yesno" showon="maxLevelcat:-1,1,2,3,4,5" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_subcat_desc_cat" type="radio" label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL" description="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_DESC" default="1" class="btn-group btn-group-yesno" showon="maxLevelcat:-1,1,2,3,4,5" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_cat_items_cat" type="radio" label="COM_NEWSFEEDS_FIELD_SHOW_CAT_ITEMS_LABEL" description="COM_NEWSFEEDS_FIELD_SHOW_CAT_ITEMS_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="listlayout" label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="COM_NEWSFEEDS_FIELD_CONFIG_LIST_SETTINGS_DESC" > <field name="filter_field" type="radio" label="JGLOBAL_FILTER_FIELD_LABEL" description="JGLOBAL_FILTER_FIELD_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_pagination_limit" type="radio" label="JGLOBAL_DISPLAY_SELECT_LABEL" description="JGLOBAL_DISPLAY_SELECT_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_headings" type="radio" label="JGLOBAL_SHOW_HEADINGS_LABEL" description="JGLOBAL_SHOW_HEADINGS_DESC" id="show_headings" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_articles" type="radio" label="COM_NEWSFEEDS_FIELD_NUM_ARTICLES_COLUMN_LABEL" description="COM_NEWSFEEDS_FIELD_NUM_ARTICLES_COLUMN_DESC" id="show_articles" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_link" type="radio" label="COM_NEWSFEEDS_FIELD_SHOW_LINKS_LABEL" description="COM_NEWSFEEDS_FIELD_SHOW_LINKS_DESC" id="show_link" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_pagination" type="list" label="JGLOBAL_PAGINATION_LABEL" description="JGLOBAL_PAGINATION_DESC" default="2" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> <option value="2">JGLOBAL_AUTO</option> </field> <field name="show_pagination_results" type="radio" label="JGLOBAL_PAGINATION_RESULTS_LABEL" description="JGLOBAL_PAGINATION_RESULTS_DESC" default="1" class="btn-group btn-group-yesno" showon="show_pagination:1,2" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="integration" label="JGLOBAL_INTEGRATION_LABEL" description="COM_NEWSFEEDS_CONFIG_INTEGRATION_SETTINGS_DESC" > <field name="integration_sef" type="note" label="JGLOBAL_SEF_TITLE" /> <field name="sef_advanced" type="radio" class="btn-group btn-group-yesno btn-group-reversed" default="0" label="JGLOBAL_SEF_ADVANCED_LABEL" description="JGLOBAL_SEF_ADVANCED_DESC" filter="integer" > <option value="0">JGLOBAL_SEF_ADVANCED_LEGACY</option> <option value="1">JGLOBAL_SEF_ADVANCED_MODERN</option> </field> <field name="sef_ids" type="radio" class="btn-group btn-group-yesno" default="0" label="JGLOBAL_SEF_NOIDS_LABEL" description="JGLOBAL_SEF_NOIDS_DESC" showon="sef_advanced:1" filter="integer"> <option value="1">JYES</option> <option value="0">JNO</option> </field> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_newsfeeds" section="component" /> </fieldset> </config> PKc��\�)�&&5components/com_newsfeeds/sql/uninstall.mysql.utf8.sqlnu�[���DROP TABLE IF EXISTS `#__newsfeeds`; PKc��\H�gL||3components/com_newsfeeds/sql/install.mysql.utf8.sqlnu�[���-- -- Table structure for table `#__newsfeeds` -- CREATE TABLE IF NOT EXISTS `#__newsfeeds` ( `catid` int(11) NOT NULL DEFAULT 0, `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL DEFAULT '', `alias` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '', `link` varchar(2048) NOT NULL DEFAULT '', `published` tinyint(1) NOT NULL DEFAULT 0, `numarticles` int(10) unsigned NOT NULL DEFAULT 1, `cache_time` int(10) unsigned NOT NULL DEFAULT 3600, `checked_out` int(10) unsigned NOT NULL DEFAULT 0, `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `ordering` int(11) NOT NULL DEFAULT 0, `rtl` tinyint(4) NOT NULL DEFAULT 0, `access` int(10) unsigned NOT NULL DEFAULT 0, `language` char(7) NOT NULL DEFAULT '', `params` text NOT NULL, `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created_by` int(10) unsigned NOT NULL DEFAULT 0, `created_by_alias` varchar(255) NOT NULL DEFAULT '', `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified_by` int(10) unsigned NOT NULL DEFAULT 0, `metakey` text NOT NULL, `metadesc` text NOT NULL, `metadata` text NOT NULL, `xreference` varchar(50) NOT NULL COMMENT 'A reference to enable linkages to external data sets.', `publish_up` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `publish_down` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `description` text NOT NULL, `version` int(10) unsigned NOT NULL DEFAULT 1, `hits` int(10) unsigned NOT NULL DEFAULT 0, `images` text NOT NULL, PRIMARY KEY (`id`), KEY `idx_access` (`access`), KEY `idx_checkout` (`checked_out`), KEY `idx_state` (`published`), KEY `idx_catid` (`catid`), KEY `idx_createdby` (`created_by`), KEY `idx_language` (`language`), KEY `idx_xreference` (`xreference`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci; PKc��\�x��#components/com_newsfeeds/access.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <access component="com_newsfeeds"> <section name="component"> <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> <action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_COMPONENT_DESC" /> </section> <section name="category"> <action name="core.create" title="JACTION_CREATE" description="COM_CATEGORIES_ACCESS_CREATE_DESC" /> <action name="core.delete" title="JACTION_DELETE" description="COM_CATEGORIES_ACCESS_DELETE_DESC" /> <action name="core.edit" title="JACTION_EDIT" description="COM_CATEGORIES_ACCESS_EDIT_DESC" /> <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_CATEGORIES_ACCESS_EDITSTATE_DESC" /> <action name="core.edit.own" title="JACTION_EDITOWN" description="COM_CATEGORIES_ACCESS_EDITOWN_DESC" /> </section> </access>PKc��\�����Dcomponents/com_newsfeeds/views/newsfeeds/tmpl/default_batch_body.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $published = $this->state->get('filter.published'); ?> <div class="container-fluid"> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.item', 'com_newsfeeds'); ?> </div> </div> <?php endif; ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.tag'); ?> </div> </div> </div> </div> PKc��\�Z8��Fcomponents/com_newsfeeds/views/newsfeeds/tmpl/default_batch_footer.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; ?> <button type="button" class="btn" onclick="document.getElementById('batch-category-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value='';document.getElementById('batch-tag-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button type="submit" class="btn btn-success" onclick="Joomla.submitbutton('newsfeed.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> PKc��\C��n��7components/com_newsfeeds/views/newsfeeds/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('NewsfeedsHelperRoute', JPATH_ROOT . '/components/com_newsfeeds/helpers/route.php'); JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.core'); JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); JHtml::_('bootstrap.popover', '.hasPopover', array('placement' => 'bottom')); JHtml::_('formbehavior.chosen', 'select'); // Special case for the search field tooltip. $searchFilterDesc = $this->filterForm->getFieldAttribute('search', 'description', null, 'filter'); JHtml::_('bootstrap.tooltip', '#filter_search', array('title' => JText::_($searchFilterDesc), 'placement' => 'bottom')); $app = JFactory::getApplication(); $function = $app->input->getCmd('function', 'jSelectNewsfeed'); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?> <div class="container-popup"> <form action="<?php echo JRoute::_('index.php?option=com_newsfeeds&view=newsfeeds&layout=modal&tmpl=component&function=' . $function); ?>" method="post" name="adminForm" id="adminForm" class="form-inline"> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped table-condensed"> <thead> <tr> <th width="1%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="nowrap title"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.name', $listDirn, $listOrder); ?> </th> <th width="15%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <th width="15%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'language_title', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="5"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php $iconStates = array( -2 => 'icon-trash', 0 => 'icon-unpublish', 1 => 'icon-publish', 2 => 'icon-archive', ); ?> <?php foreach ($this->items as $i => $item) : ?> <?php if ($item->language && JLanguageMultilang::isEnabled()) { $tag = strlen($item->language); if ($tag == 5) { $lang = substr($item->language, 0, 2); } elseif ($tag == 6) { $lang = substr($item->language, 0, 3); } else { $lang = ''; } } elseif (!JLanguageMultilang::isEnabled()) { $lang = ''; } ?> <tr class="row<?php echo $i % 2; ?>"> <td class="center"> <span class="<?php echo $iconStates[$this->escape($item->published)]; ?>" aria-hidden="true"></span> </td> <td> <a href="javascript:void(0)" onclick="if (window.parent) window.parent.<?php echo $this->escape($function); ?>('<?php echo $item->id; ?>', '<?php echo $this->escape(addslashes($item->name)); ?>', '<?php echo $this->escape($item->catid); ?>', null, '<?php echo $this->escape(NewsfeedsHelperRoute::getNewsfeedRoute($item->id, $item->catid, $item->language)); ?>', '<?php echo $this->escape($lang); ?>', null);"> <?php echo $this->escape($item->name); ?></a> <div class="small"> <?php echo JText::_('JCATEGORY') . ': ' . $this->escape($item->category_title); ?> </div> </td> <td class="small hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <td class="small hidden-phone"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="forcedLanguage" value="<?php echo $app->input->get('forcedLanguage', '', 'CMD'); ?>" /> <?php echo JHtml::_('form.token'); ?> </form> </div> PKc��\k��!P P 9components/com_newsfeeds/views/newsfeeds/tmpl/default.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); JHtml::_('formbehavior.chosen', 'select'); $user = JFactory::getUser(); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $saveOrder = $listOrder == 'a.ordering'; $assoc = JLanguageAssociations::isEnabled(); if ($saveOrder) { $saveOrderingUrl = 'index.php?option=com_newsfeeds&task=newsfeeds.saveOrderAjax&tmpl=component'; JHtml::_('sortablelist.sortable', 'newsfeedList', 'adminForm', strtolower($listDirn), $saveOrderingUrl); } ?> <form action="<?php echo JRoute::_('index.php?option=com_newsfeeds&view=newsfeeds'); ?>" method="post" name="adminForm" id="adminForm"> <?php if (!empty( $this->sidebar)) : ?> <div id="j-sidebar-container" class="span2"> <?php echo $this->sidebar; ?> </div> <div id="j-main-container" class="span10"> <?php else : ?> <div id="j-main-container"> <?php endif; ?> <?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?> <div class="clearfix"></div> <?php if (empty($this->items)) : ?> <div class="alert alert-no-items"> <?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?> </div> <?php else : ?> <table class="table table-striped" id="newsfeedList"> <thead> <tr> <th width="1%" class="nowrap center hidden-phone"> <?php echo JHtml::_('searchtools.sort', '', 'a.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?> </th> <th width="1%"> <?php echo JHtml::_('grid.checkall'); ?> </th> <th width="5%" class="nowrap center"> <?php echo JHtml::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?> </th> <th class="title"> <?php echo JHtml::_('searchtools.sort', 'JGLOBAL_TITLE', 'a.name', $listDirn, $listOrder); ?> </th> <th width="5%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ACCESS', 'access_level', $listDirn, $listOrder); ?> </th> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'COM_NEWSFEEDS_NUM_ARTICLES_HEADING', 'numarticles', $listDirn, $listOrder); ?> </th> <th width="5%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_NEWSFEEDS_CACHE_TIME_HEADING', 'a.cache_time', $listDirn, $listOrder); ?> </th> <?php if ($assoc) : ?> <th width="5%" class="nowrap hidden-phone hidden-tablet"> <?php echo JHtml::_('searchtools.sort', 'COM_NEWSFEEDS_HEADING_ASSOCIATION', 'association', $listDirn, $listOrder); ?> </th> <?php endif; ?> <th width="10%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_LANGUAGE', 'language_title', $listDirn, $listOrder); ?> </th> <th width="1%" class="nowrap hidden-phone"> <?php echo JHtml::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="11"> <?php echo $this->pagination->getListFooter(); ?> </td> </tr> </tfoot> <tbody> <?php foreach ($this->items as $i => $item) : $ordering = ($listOrder == 'a.ordering'); $canCreate = $user->authorise('core.create', 'com_newsfeeds.category.' . $item->catid); $canEdit = $user->authorise('core.edit', 'com_newsfeeds.category.' . $item->catid); $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id') || $item->checked_out == 0; $canEditOwn = $user->authorise('core.edit.own', 'com_newsfeeds.category.' . $item->catid) && $item->created_by == $user->id; $canChange = $user->authorise('core.edit.state', 'com_newsfeeds.category.' . $item->catid) && $canCheckin; ?> <tr class="row<?php echo $i % 2; ?>" sortable-group-id="<?php echo $item->catid; ?>"> <td class="order nowrap center hidden-phone"> <?php $iconClass = ''; if (!$canChange) { $iconClass = ' inactive'; } elseif (!$saveOrder) { $iconClass = ' inactive tip-top hasTooltip" title="' . JHtml::_('tooltipText', 'JORDERINGDISABLED'); } ?> <span class="sortable-handler<?php echo $iconClass ?>"> <span class="icon-menu" aria-hidden="true"></span> </span> <?php if ($canChange && $saveOrder) : ?> <input type="text" style="display:none" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order" /> <?php endif; ?> </td> <td class="center"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td class="center"> <div class="btn-group"> <?php echo JHtml::_('jgrid.published', $item->published, $i, 'newsfeeds.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> <?php // Create dropdown items and render the dropdown list. if ($canChange) { JHtml::_('actionsdropdown.' . ((int) $item->published === 2 ? 'un' : '') . 'archive', 'cb' . $i, 'newsfeeds'); JHtml::_('actionsdropdown.' . ((int) $item->published === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'newsfeeds'); echo JHtml::_('actionsdropdown.render', $this->escape($item->name)); } ?> </div> </td> <td class="nowrap has-context"> <div class="pull-left"> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'newsfeeds.', $canCheckin); ?> <?php endif; ?> <?php if ($canEdit || $canEditOwn) : ?> <a href="<?php echo JRoute::_('index.php?option=com_newsfeeds&task=newsfeed.edit&id=' . (int) $item->id); ?>"> <?php echo $this->escape($item->name); ?></a> <?php else : ?> <?php echo $this->escape($item->name); ?> <?php endif; ?> <span class="small"> <?php echo JText::sprintf('JGLOBAL_LIST_ALIAS', $this->escape($item->alias)); ?> </span> <div class="small"> <?php echo JText::_('JCATEGORY') . ': ' . $this->escape($item->category_title); ?> </div> </div> </td> <td class="small hidden-phone"> <?php echo $this->escape($item->access_level); ?> </td> <td class="hidden-phone"> <?php echo (int) $item->numarticles; ?> </td> <td class="hidden-phone hidden-tablet"> <?php echo (int) $item->cache_time; ?> </td> <?php if ($assoc) : ?> <td class="hidden-phone hidden-tablet"> <?php if ($item->association) : ?> <?php echo JHtml::_('newsfeed.association', $item->id); ?> <?php endif; ?> </td> <?php endif; ?> <td class="small hidden-phone"> <?php echo JLayoutHelper::render('joomla.content.language', $item); ?> </td> <td class="hidden-phone"> <?php echo (int) $item->id; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php // Load the batch processing form if user is allowed ?> <?php if ($user->authorise('core.create', 'com_newsfeeds') && $user->authorise('core.edit', 'com_newsfeeds') && $user->authorise('core.edit.state', 'com_newsfeeds')) : ?> <?php echo JHtml::_( 'bootstrap.renderModal', 'collapseModal', array( 'title' => JText::_('COM_NEWSFEEDS_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer'), ), $this->loadTemplate('batch_body') ); ?> <?php endif; ?> <?php endif; ?> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <?php echo JHtml::_('form.token'); ?> </div> </form> PKc��\7A���?components/com_newsfeeds/views/newsfeeds/tmpl/default_batch.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * * @deprecated 3.4 Use default_batch_body and default_batch_footer */ defined('_JEXEC') or die; $published = $this->state->get('filter.published'); ?> <div class="modal hide fade" id="collapseModal"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3><?php echo JText::_('COM_NEWSFEEDS_BATCH_OPTIONS'); ?></h3> </div> <div class="modal-body modal-batch"> <p><?php echo JText::_('COM_NEWSFEEDS_BATCH_TIP'); ?></p> <div class="row-fluid"> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.language'); ?> </div> </div> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.access'); ?> </div> </div> </div> <div class="row-fluid"> <?php if ($published >= 0) : ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.item', 'com_newsfeeds'); ?> </div> </div> <?php endif; ?> <div class="control-group span6"> <div class="controls"> <?php echo JHtml::_('batch.tag'); ?> </div> </div> </div> </div> <div class="modal-footer"> <button class="btn" type="button" onclick="document.getElementById('batch-category-id').value='';document.getElementById('batch-access').value='';document.getElementById('batch-language-id').value='';document.getElementById('batch-tag-id').value=''" data-dismiss="modal"> <?php echo JText::_('JCANCEL'); ?> </button> <button class="btn btn-primary" type="submit" onclick="Joomla.submitbutton('newsfeed.batch');"> <?php echo JText::_('JGLOBAL_BATCH_PROCESS'); ?> </button> </div> </div> PKc��\�Dꋸ�6components/com_newsfeeds/views/newsfeeds/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View class for a list of newsfeeds. * * @since 1.6 */ class NewsfeedsViewNewsfeeds extends JViewLegacy { /** * The list of newsfeeds * * @var JObject * @since 1.6 */ protected $items; /** * The pagination object * * @var JPagination * @since 1.6 */ protected $pagination; /** * The model state * * @var JObject * @since 1.6 */ protected $state; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->state = $this->get('State'); $this->filterForm = $this->get('FilterForm'); $this->activeFilters = $this->get('ActiveFilters'); // Modal layout doesn't need the submenu. if ($this->getLayout() !== 'modal') { NewsfeedsHelper::addSubmenu('newsfeeds'); } // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } // We don't need toolbar in the modal layout. if ($this->getLayout() !== 'modal') { $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); } else { // In article associations modal we need to remove language filter if forcing a language. // We also need to change the category filter to show show categories with All or the forced language. if ($forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'CMD')) { // If the language is forced we can't allow to select the language, so transform the language selector filter into a hidden field. $languageXml = new SimpleXMLElement('<field name="language" type="hidden" default="' . $forcedLanguage . '" />'); $this->filterForm->setField($languageXml, 'filter', true); // Also, unset the active language filter so the search tools is not open by default with this filter. unset($this->activeFilters['language']); // One last changes needed is to change the category filter to just show categories with All language or with the forced language. $this->filterForm->setFieldAttribute('category_id', 'language', '*,' . $forcedLanguage, 'filter'); } } parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { $state = $this->get('State'); $canDo = JHelperContent::getActions('com_newsfeeds', 'category', $state->get('filter.category_id')); $user = JFactory::getUser(); // Get the toolbar object instance $bar = JToolbar::getInstance('toolbar'); JToolbarHelper::title(JText::_('COM_NEWSFEEDS_MANAGER_NEWSFEEDS'), 'feed newsfeeds'); if (count($user->getAuthorisedCategories('com_newsfeeds', 'core.create')) > 0) { JToolbarHelper::addNew('newsfeed.add'); } if ($canDo->get('core.edit') || $canDo->get('core.edit.own')) { JToolbarHelper::editList('newsfeed.edit'); } if ($canDo->get('core.edit.state')) { JToolbarHelper::publish('newsfeeds.publish', 'JTOOLBAR_PUBLISH', true); JToolbarHelper::unpublish('newsfeeds.unpublish', 'JTOOLBAR_UNPUBLISH', true); JToolbarHelper::archiveList('newsfeeds.archive'); } if ($canDo->get('core.admin')) { JToolbarHelper::checkin('newsfeeds.checkin'); } // Add a batch button if ($user->authorise('core.create', 'com_newsfeeds') && $user->authorise('core.edit', 'com_newsfeeds') && $user->authorise('core.edit.state', 'com_newsfeeds')) { $title = JText::_('JTOOLBAR_BATCH'); // Instantiate a new JLayoutFile instance and render the batch button $layout = new JLayoutFile('joomla.toolbar.batch'); $dhtml = $layout->render(array('title' => $title)); $bar->appendButton('Custom', $dhtml, 'batch'); } if ($state->get('filter.published') == -2 && $canDo->get('core.delete')) { JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'newsfeeds.delete', 'JTOOLBAR_EMPTY_TRASH'); } elseif ($canDo->get('core.edit.state')) { JToolbarHelper::trash('newsfeeds.trash'); } if ($user->authorise('core.admin', 'com_newsfeeds') || $user->authorise('core.options', 'com_newsfeeds')) { JToolbarHelper::preferences('com_newsfeeds'); } JToolbarHelper::help('JHELP_COMPONENTS_NEWSFEEDS_FEEDS'); } /** * Returns an array of fields the table can be sorted by * * @return array Array containing the field name to sort by as the key and display text as value * * @since 3.0 */ protected function getSortFields() { return array( 'a.ordering' => JText::_('JGRID_HEADING_ORDERING'), 'a.published' => JText::_('JSTATUS'), 'a.name' => JText::_('JGLOBAL_TITLE'), 'category_title' => JText::_('JCATEGORY'), 'a.access' => JText::_('JGRID_HEADING_ACCESS'), 'numarticles' => JText::_('COM_NEWSFEEDS_NUM_ARTICLES_HEADING'), 'a.cache_time' => JText::_('COM_NEWSFEEDS_CACHE_TIME_HEADING'), 'a.language' => JText::_('JGRID_HEADING_LANGUAGE'), 'a.id' => JText::_('JGRID_HEADING_ID') ); } } PKc��\�5�oo=components/com_newsfeeds/views/newsfeed/tmpl/edit_display.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->fieldset = 'jbasic'; echo JLayoutHelper::render('joomla.edit.fieldset', $this); PKc��\��[���=components/com_newsfeeds/views/newsfeed/tmpl/modal_params.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : ?> <div class="tab-pane" id="params-<?php echo $name; ?>"> <?php if (isset($fieldSet->description) && trim($fieldSet->description)) : ?> <p class="alert alert-info"><?php echo $this->escape(JText::_($fieldSet->description)); ?></p> <?php endif; ?> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <div class="control-group"> <div class="control-label"><?php echo $field->label; ?></div> <div class="controls"><?php echo $field->input; ?></div> </div> <?php endforeach; ?> </div> <?php endforeach; ?> PKc��\�_��WWBcomponents/com_newsfeeds/views/newsfeed/tmpl/edit_associations.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.associations', $this); PKc��\��oPP5components/com_newsfeeds/views/newsfeed/tmpl/edit.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.formvalidator'); JHtml::_('behavior.keepalive'); JHtml::_('formbehavior.chosen', '#jform_catid', null, array('disable_search_threshold' => 0 )); JHtml::_('formbehavior.chosen', '#jform_tags', null, array('placeholder_text_multiple' => JText::_('JGLOBAL_TYPE_OR_SELECT_SOME_TAGS'))); JHtml::_('formbehavior.chosen', 'select'); $app = JFactory::getApplication(); $input = $app->input; $assoc = JLanguageAssociations::isEnabled(); JFactory::getDocument()->addScriptDeclaration(' Joomla.submitbutton = function(task) { if (task == "newsfeed.cancel" || document.formvalidator.isValid(document.getElementById("newsfeed-form"))) { Joomla.submitform(task, document.getElementById("newsfeed-form")); // @deprecated 4.0 The following js is not needed since 3.7.0. if (task !== "newsfeed.apply") { window.parent.jQuery("#newsfeedEdit' . $this->item->id . 'Modal").modal("hide"); } } }; '); // Fieldsets to not automatically render by /layouts/joomla/edit/params.php $this->ignore_fieldsets = array('images', 'jbasic', 'jmetadata', 'item_associations'); // In case of modal $isModal = $input->get('layout') == 'modal' ? true : false; $layout = $isModal ? 'modal' : 'edit'; $tmpl = $isModal || $input->get('tmpl', '', 'cmd') === 'component' ? '&tmpl=component' : ''; ?> <form action="<?php echo JRoute::_('index.php?option=com_newsfeeds&layout=' . $layout . $tmpl . '&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="newsfeed-form" class="form-validate"> <?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?> <div class="form-horizontal"> <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'details')); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'details', empty($this->item->id) ? JText::_('COM_NEWSFEEDS_NEW_NEWSFEED') : JText::_('COM_NEWSFEEDS_EDIT_NEWSFEED')); ?> <div class="row-fluid"> <div class="span9"> <div class="form-vertical"> <?php echo $this->form->renderField('link'); ?> <?php echo $this->form->renderField('description'); ?> </div> </div> <div class="span3"> <?php echo JLayoutHelper::render('joomla.edit.global', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'images', JText::_('JGLOBAL_FIELDSET_IMAGE_OPTIONS')); ?> <div class="row-fluid"> <div class="span6"> <?php echo $this->form->renderField('images'); ?> <?php foreach ($this->form->getGroup('images') as $field) : ?> <?php echo $field->renderField(); ?> <?php endforeach; ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'attrib-jbasic', JText::_('JGLOBAL_FIELDSET_DISPLAY_OPTIONS')); ?> <?php echo $this->loadTemplate('display'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php echo JLayoutHelper::render('joomla.edit.params', $this); ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'publishing', JText::_('JGLOBAL_FIELDSET_PUBLISHING')); ?> <div class="row-fluid form-horizontal-desktop"> <div class="span6"> <?php echo JLayoutHelper::render('joomla.edit.publishingdata', $this); ?> </div> <div class="span6"> <?php echo JLayoutHelper::render('joomla.edit.metadata', $this); ?> </div> </div> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php if ( ! $isModal && $assoc) : ?> <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'associations', JText::_('JGLOBAL_FIELDSET_ASSOCIATIONS')); ?> <?php echo $this->loadTemplate('associations'); ?> <?php echo JHtml::_('bootstrap.endTab'); ?> <?php elseif ($isModal && $assoc) : ?> <div class="hidden"><?php echo $this->loadTemplate('associations'); ?></div> <?php endif; ?> <?php echo JHtml::_('bootstrap.endTabSet'); ?> </div> <input type="hidden" name="task" value="" /> <input type="hidden" name="forcedLanguage" value="<?php echo $input->get('forcedLanguage', '', 'cmd'); ?>" /> <?php echo JHtml::_('form.token'); ?> </form> PKc��\��[���<components/com_newsfeeds/views/newsfeed/tmpl/edit_params.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $fieldSets = $this->form->getFieldsets('params'); foreach ($fieldSets as $name => $fieldSet) : ?> <div class="tab-pane" id="params-<?php echo $name; ?>"> <?php if (isset($fieldSet->description) && trim($fieldSet->description)) : ?> <p class="alert alert-info"><?php echo $this->escape(JText::_($fieldSet->description)); ?></p> <?php endif; ?> <?php foreach ($this->form->getFieldset($name) as $field) : ?> <div class="control-group"> <div class="control-label"><?php echo $field->label; ?></div> <div class="controls"><?php echo $field->input; ?></div> </div> <?php endforeach; ?> </div> <?php endforeach; ?> PKc��\�_��WWCcomponents/com_newsfeeds/views/newsfeed/tmpl/modal_associations.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.associations', $this); PKc��\���xx6components/com_newsfeeds/views/newsfeed/tmpl/modal.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JHtml::_('bootstrap.tooltip', '.hasTooltip', array('placement' => 'bottom')); // @deprecated 4.0 the function parameter, the inline js and the buttons are not needed since 3.7.0. $function = JFactory::getApplication()->input->getCmd('function', 'jEditNewsfeed_' . (int) $this->item->id); // Function to update input title when changed JFactory::getDocument()->addScriptDeclaration(' function jEditNewsfeedModal() { if (window.parent && document.formvalidator.isValid(document.getElementById("newsfeed-form"))) { return window.parent.' . $this->escape($function) . '(document.getElementById("jform_name").value); } } '); ?> <button id="applyBtn" type="button" class="hidden" onclick="Joomla.submitbutton('newsfeed.apply'); jEditNewsfeedModal();"></button> <button id="saveBtn" type="button" class="hidden" onclick="Joomla.submitbutton('newsfeed.save'); jEditNewsfeedModal();"></button> <button id="closeBtn" type="button" class="hidden" onclick="Joomla.submitbutton('newsfeed.cancel');"></button> <div class="container-popup"> <?php $this->setLayout('edit'); ?> <?php echo $this->loadTemplate(); ?> </div> PKc��\�f�!SS>components/com_newsfeeds/views/newsfeed/tmpl/edit_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.metadata', $this); PKc��\�5�oo>components/com_newsfeeds/views/newsfeed/tmpl/modal_display.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; $this->fieldset = 'jbasic'; echo JLayoutHelper::render('joomla.edit.fieldset', $this); PKc��\�f�!SS?components/com_newsfeeds/views/newsfeed/tmpl/modal_metadata.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; echo JLayoutHelper::render('joomla.edit.metadata', $this); PKc��\LĮ��5components/com_newsfeeds/views/newsfeed/view.html.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * View to edit a newsfeed. * * @since 1.6 */ class NewsfeedsViewNewsfeed extends JViewLegacy { /** * The item object for the newsfeed * * @var JObject * @since 1.6 */ protected $item; /** * The form object for the newsfeed * * @var JForm * @since 1.6 */ protected $form; /** * The model state of the newsfeed * * @var JObject * @since 1.6 */ protected $state; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return mixed A string if successful, otherwise an Error object. * * @since 1.6 */ public function display($tpl = null) { $this->state = $this->get('State'); $this->item = $this->get('Item'); $this->form = $this->get('Form'); // Check for errors. if (count($errors = $this->get('Errors'))) { throw new Exception(implode("\n", $errors), 500); } // If we are forcing a language in modal (used for associations). if ($this->getLayout() === 'modal' && $forcedLanguage = JFactory::getApplication()->input->get('forcedLanguage', '', 'cmd')) { // Set the language field to the forcedLanguage and disable changing it. $this->form->setValue('language', null, $forcedLanguage); $this->form->setFieldAttribute('language', 'readonly', 'true'); // Only allow to select categories with All language or with the forced language. $this->form->setFieldAttribute('catid', 'language', '*,' . $forcedLanguage); // Only allow to select tags with All language or with the forced language. $this->form->setFieldAttribute('tags', 'language', '*,' . $forcedLanguage); } $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @return void * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); $user = JFactory::getUser(); $isNew = ($this->item->id == 0); $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); // Since we don't track these assets at the item level, use the category id. $canDo = JHelperContent::getActions('com_newsfeeds', 'category', $this->item->catid); JToolbarHelper::title($isNew ? JText::_('COM_NEWSFEEDS_MANAGER_NEWSFEED_NEW') : JText::_('COM_NEWSFEEDS_MANAGER_NEWSFEED_EDIT'), 'feed newsfeeds'); // If not checked out, can save the item. if (!$checkedOut && ($canDo->get('core.edit') || count($user->getAuthorisedCategories('com_newsfeeds', 'core.create')) > 0)) { JToolbarHelper::apply('newsfeed.apply'); JToolbarHelper::save('newsfeed.save'); } if (!$checkedOut && count($user->getAuthorisedCategories('com_newsfeeds', 'core.create')) > 0) { JToolbarHelper::save2new('newsfeed.save2new'); } // If an existing item, can save to a copy. if (!$isNew && $canDo->get('core.create')) { JToolbarHelper::save2copy('newsfeed.save2copy'); } if (!$isNew && JLanguageAssociations::isEnabled() && JComponentHelper::isEnabled('com_associations')) { JToolbarHelper::custom('newsfeed.editAssociations', 'contract', 'contract', 'JTOOLBAR_ASSOCIATIONS', false, false); } if (empty($this->item->id)) { JToolbarHelper::cancel('newsfeed.cancel'); } else { if (JComponentHelper::isEnabled('com_contenthistory') && $this->state->params->get('save_history', 0) && $canDo->get('core.edit')) { JToolbarHelper::versions('com_newsfeeds.newsfeed', $this->item->id); } JToolbarHelper::cancel('newsfeed.cancel', 'JTOOLBAR_CLOSE'); } JToolbarHelper::divider(); JToolbarHelper::help('JHELP_COMPONENTS_NEWSFEEDS_FEEDS_EDIT'); } } PKc��\�E���.components/com_newsfeeds/helpers/newsfeeds.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Newsfeeds component helper. * * @since 1.6 */ class NewsfeedsHelper extends JHelperContent { public static $extension = 'com_newsfeeds'; /** * Configure the Linkbar. * * @param string $vName The name of the active view. * * @return void */ public static function addSubmenu($vName) { JHtmlSidebar::addEntry( JText::_('COM_NEWSFEEDS_SUBMENU_NEWSFEEDS'), 'index.php?option=com_newsfeeds&view=newsfeeds', $vName == 'newsfeeds' ); JHtmlSidebar::addEntry( JText::_('COM_NEWSFEEDS_SUBMENU_CATEGORIES'), 'index.php?option=com_categories&extension=com_newsfeeds', $vName == 'categories' ); } /** * Adds Count Items for Category Manager. * * @param stdClass[] &$items The category objects * * @return stdClass[] * * @since 3.5 */ public static function countItems(&$items) { $config = (object) array( 'related_tbl' => 'newsfeeds', 'state_col' => 'published', 'group_col' => 'catid', 'relation_type' => 'category_or_group', ); return parent::countRelations($items, $config); } /** * Adds Count Items for Tag Manager. * * @param stdClass[] &$items The tag objects * @param string $extension The name of the active view. * * @return stdClass[] * * @since 3.6 */ public static function countTagItems(&$items, $extension) { $parts = explode('.', $extension); $section = count($parts) > 1 ? $parts[1] : null; $config = (object) array( 'related_tbl' => ($section === 'category' ? 'categories' : 'newsfeeds'), 'state_col' => 'published', 'group_col' => 'tag_id', 'extension' => $extension, 'relation_type' => 'tag_assigments', ); return parent::countRelations($items, $config); } } PKc��\�GCI 2components/com_newsfeeds/helpers/html/newsfeed.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; JLoader::register('NewsfeedsHelper', JPATH_ADMINISTRATOR . '/components/com_newsfeeds/helpers/newsfeeds.php'); /** * Utility class for creating HTML Grids. * * @since 1.5 */ class JHtmlNewsfeed { /** * Get the associated language flags * * @param int $newsfeedid The item id to search associations * * @return string The language HTML * * @throws Exception Throws a 500 Exception on Database failure */ public static function association($newsfeedid) { // Defaults $html = ''; // Get the associations if ($associations = JLanguageAssociations::getAssociations('com_newsfeeds', '#__newsfeeds', 'com_newsfeeds.item', $newsfeedid)) { foreach ($associations as $tag => $associated) { $associations[$tag] = (int) $associated->id; } // Get the associated newsfeed items $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('c.id, c.name as title') ->select('l.sef as lang_sef, lang_code') ->from('#__newsfeeds as c') ->select('cat.title as category_title') ->join('LEFT', '#__categories as cat ON cat.id=c.catid') ->where('c.id IN (' . implode(',', array_values($associations)) . ')') ->where('c.id != ' . $newsfeedid) ->join('LEFT', '#__languages as l ON c.language=l.lang_code') ->select('l.image') ->select('l.title as language_title'); $db->setQuery($query); try { $items = $db->loadObjectList('id'); } catch (RuntimeException $e) { throw new Exception($e->getMessage(), 500); } if ($items) { foreach ($items as &$item) { $text = strtoupper($item->lang_sef); $url = JRoute::_('index.php?option=com_newsfeeds&task=newsfeed.edit&id=' . (int) $item->id); $tooltip = htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8') . '<br />' . JText::sprintf('JCATEGORY_SPRINTF', $item->category_title); $classes = 'hasPopover label label-association label-' . $item->lang_sef; $item->link = '<a href="' . $url . '" title="' . $item->language_title . '" class="' . $classes . '" data-content="' . $tooltip . '" data-placement="top">' . $text . '</a>'; } } JHtml::_('bootstrap.popover'); $html = JLayoutHelper::render('joomla.content.associations', $items); } return $html; } } PKc��\Y�p���&components/com_newsfeeds/newsfeeds.xmlnu�[���<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.1" method="upgrade"> <name>com_newsfeeds</name> <author>Joomla! Project</author> <creationDate>April 2006</creationDate> <copyright>(C) 2005 - 2019 Open Source Matters. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>3.0.0</version> <description>COM_NEWSFEEDS_XML_DESCRIPTION</description> <install> <!-- Runs on install --> <sql> <file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file> </sql> </install> <uninstall> <!-- Runs on uninstall --> <sql> <file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file> </sql> </uninstall> <files folder="site"> <filename>controller.php</filename> <filename>metadata.xml</filename> <filename>newsfeeds.php</filename> <filename>router.php</filename> <folder>helpers</folder> <folder>models</folder> <folder>views</folder> </files> <languages folder="site"> <language tag="en-GB">language/en-GB.com_newsfeeds.ini</language> </languages> <administration> <menu img="class:newsfeeds">com_newsfeeds</menu> <submenu> <!-- Note that all & must be escaped to & for the file to be valid XML and be parsed by the installer --> <menu link="option=com_newsfeeds" view="feeds" img="class:newsfeeds" alt="Newsfeeds/Feeds">com_newsfeeds_feeds</menu> <menu link="option=com_categories&extension=com_newsfeeds" view="categories" img="class:newsfeeds-cat" alt="Newsfeeds/Categories">com_newsfeeds_categories</menu> </submenu> <files folder="admin"> <filename>access.xml</filename> <filename>config.xml</filename> <filename>controller.php</filename> <filename>newsfeeds.php</filename> <folder>controllers</folder> <folder>elements</folder> <folder>helpers</folder> <folder>models</folder> <folder>tables</folder> <folder>views</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB.com_newsfeeds.ini</language> <language tag="en-GB">language/en-GB.com_newsfeeds.sys.ini</language> </languages> </administration> </extension> PKc��\�f��4components/com_newsfeeds/models/fields/newsfeeds.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; JFormHelper::loadFieldClass('list'); /** * News Feed List field. * * @since 1.6 */ class JFormFieldNewsfeeds extends JFormFieldList { /** * The form field type. * * @var string * @since 1.6 */ protected $type = 'Newsfeeds'; /** * Method to get the field options. * * @return array The field option objects. * * @since 1.6 */ protected function getOptions() { $options = array(); $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('id As value, name As text') ->from('#__newsfeeds AS a') ->order('a.name'); // Get the options. $db->setQuery($query); try { $options = $db->loadObjectList(); } catch (RuntimeException $e) { JError::raiseWarning(500, $db->getMessage()); } // Merge any additional options in the XML definition. $options = array_merge(parent::getOptions(), $options); return $options; } } PKc��\�)��<'<'9components/com_newsfeeds/models/fields/modal/newsfeed.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; use Joomla\CMS\Language\LanguageHelper; /** * Supports a modal newsfeeds picker. * * @since 1.6 */ class JFormFieldModal_Newsfeed extends JFormField { /** * The form field type. * * @var string * @since 1.6 */ protected $type = 'Modal_Newsfeed'; /** * Method to get the field input markup. * * @return string The field input markup. * * @since 1.6 */ protected function getInput() { $allowNew = ((string) $this->element['new'] == 'true'); $allowEdit = ((string) $this->element['edit'] == 'true'); $allowClear = ((string) $this->element['clear'] != 'false'); $allowSelect = ((string) $this->element['select'] != 'false'); $allowPropagate = ((string) $this->element['propagate'] == 'true'); $languages = LanguageHelper::getContentLanguages(array(0, 1)); // Load language JFactory::getLanguage()->load('com_newsfeeds', JPATH_ADMINISTRATOR); // The active newsfeed id field. $value = (int) $this->value > 0 ? (int) $this->value : ''; // Create the modal id. $modalId = 'Newsfeed_' . $this->id; // Add the modal field script to the document head. JHtml::_('jquery.framework'); JHtml::_('script', 'system/modal-fields.js', array('version' => 'auto', 'relative' => true)); // Script to proxy the select modal function to the modal-fields.js file. if ($allowSelect) { static $scriptSelect = null; if (is_null($scriptSelect)) { $scriptSelect = array(); } if (!isset($scriptSelect[$this->id])) { JFactory::getDocument()->addScriptDeclaration(" function jSelectNewsfeed_" . $this->id . "(id, title, object) { window.processModalSelect('Newsfeed', '" . $this->id . "', id, title, '', object); } " ); JText::script('JGLOBAL_ASSOCIATIONS_PROPAGATE_FAILED'); $scriptSelect[$this->id] = true; } } // Setup variables for display. $linkNewsfeeds = 'index.php?option=com_newsfeeds&view=newsfeeds&layout=modal&tmpl=component&' . JSession::getFormToken() . '=1'; $linkNewsfeed = 'index.php?option=com_newsfeeds&view=newsfeed&layout=modal&tmpl=component&' . JSession::getFormToken() . '=1'; $modalTitle = JText::_('COM_NEWSFEEDS_CHANGE_FEED'); if (isset($this->element['language'])) { $linkNewsfeeds .= '&forcedLanguage=' . $this->element['language']; $linkNewsfeed .= '&forcedLanguage=' . $this->element['language']; $modalTitle .= ' — ' . $this->element['label']; } $urlSelect = $linkNewsfeeds . '&function=jSelectNewsfeed_' . $this->id; $urlEdit = $linkNewsfeed . '&task=newsfeed.edit&id=\' + document.getElementById("' . $this->id . '_id").value + \''; $urlNew = $linkNewsfeed . '&task=newsfeed.add'; if ($value) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('name')) ->from($db->quoteName('#__newsfeeds')) ->where($db->quoteName('id') . ' = ' . (int) $value); $db->setQuery($query); try { $title = $db->loadResult(); } catch (RuntimeException $e) { JError::raiseWarning(500, $e->getMessage()); } } $title = empty($title) ? JText::_('COM_NEWSFEEDS_SELECT_A_FEED') : htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); // The current newsfeed display field. $html = '<span class="input-append">'; $html .= '<input class="input-medium" id="' . $this->id . '_name" type="text" value="' . $title . '" disabled="disabled" size="35" />'; // Select newsfeed button if ($allowSelect) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? ' hidden' : '') . '"' . ' id="' . $this->id . '_select"' . ' data-toggle="modal"' . ' data-target="#ModalSelect' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_NEWSFEEDS_CHANGE_FEED') . '">' . '<span class="icon-file" aria-hidden="true"></span> ' . JText::_('JSELECT') . '</button>'; } // New newsfeed button if ($allowNew) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? ' hidden' : '') . '"' . ' id="' . $this->id . '_new"' . ' data-toggle="modal"' . ' data-target="#ModalNew' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_NEWSFEEDS_NEW_NEWSFEED') . '">' . '<span class="icon-new" aria-hidden="true"></span> ' . JText::_('JACTION_CREATE') . '</button>'; } // Edit newsfeed button if ($allowEdit) { $html .= '<button' . ' type="button"' . ' class="btn hasTooltip' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_edit"' . ' data-toggle="modal"' . ' data-target="#ModalEdit' . $modalId . '"' . ' title="' . JHtml::tooltipText('COM_NEWSFEEDS_EDIT_NEWSFEED') . '">' . '<span class="icon-edit" aria-hidden="true"></span> ' . JText::_('JACTION_EDIT') . '</button>'; } // Clear newsfeed button if ($allowClear) { $html .= '<button' . ' type="button"' . ' class="btn' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_clear"' . ' onclick="window.processModalParent(\'' . $this->id . '\'); return false;">' . '<span class="icon-remove" aria-hidden="true"></span>' . JText::_('JCLEAR') . '</button>'; } // Propagate newsfeed button if ($allowPropagate && count($languages) > 2) { // Strip off language tag at the end $tagLength = (int) strlen($this->element['language']); $callbackFunctionStem = substr("jSelectNewsfeed_" . $this->id, 0, -$tagLength); $html .= '<a' . ' class="btn hasTooltip' . ($value ? '' : ' hidden') . '"' . ' id="' . $this->id . '_propagate"' . ' href="#"' . ' title="' . JHtml::tooltipText('JGLOBAL_ASSOCIATIONS_PROPAGATE_TIP') . '"' . ' onclick="Joomla.propagateAssociation(\'' . $this->id . '\', \'' . $callbackFunctionStem . '\');">' . '<span class="icon-refresh" aria-hidden="true"></span>' . JText::_('JGLOBAL_ASSOCIATIONS_PROPAGATE_BUTTON') . '</a>'; } $html .= '</span>'; // Select newsfeed modal if ($allowSelect) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalSelect' . $modalId, array( 'title' => $modalTitle, 'url' => $urlSelect, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn" data-dismiss="modal">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>', ) ); } // New newsfeed modal if ($allowNew) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalNew' . $modalId, array( 'title' => JText::_('COM_NEWSFEEDS_NEW_NEWSFEED'), 'backdrop' => 'static', 'keyboard' => false, 'closeButton' => false, 'url' => $urlNew, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'newsfeed\', \'cancel\', \'newsfeed-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'newsfeed\', \'save\', \'newsfeed-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JSAVE') . '</button>' . '<button type="button" class="btn btn-success"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'add\', \'newsfeed\', \'apply\', \'newsfeed-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JAPPLY') . '</button>', ) ); } // Edit newsfeed modal. if ($allowEdit) { $html .= JHtml::_( 'bootstrap.renderModal', 'ModalEdit' . $modalId, array( 'title' => JText::_('COM_NEWSFEEDS_EDIT_NEWSFEED'), 'backdrop' => 'static', 'keyboard' => false, 'closeButton' => false, 'url' => $urlEdit, 'height' => '400px', 'width' => '800px', 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="btn"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'newsfeed\', \'cancel\', \'newsfeed-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" class="btn btn-primary"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'newsfeed\', \'save\', \'newsfeed-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JSAVE') . '</button>' . '<button type="button" class="btn btn-success"' . ' onclick="window.processModalEdit(this, \'' . $this->id . '\', \'edit\', \'newsfeed\', \'apply\', \'newsfeed-form\', \'jform_id\', \'jform_name\'); return false;">' . JText::_('JAPPLY') . '</button>', ) ); } // Add class='required' for client side validation $class = $this->required ? ' class="required modal-value"' : ''; $html .= '<input type="hidden" id="' . $this->id . '_id"' . $class . ' data-required="' . (int) $this->required . '" name="' . $this->name . '" data-text="' . htmlspecialchars(JText::_('COM_NEWSFEEDS_SELECT_A_FEED', true), ENT_COMPAT, 'UTF-8') . '" value="' . $value . '" />'; return $html; } /** * Method to get the field label markup. * * @return string The field label markup. * * @since 3.4 */ protected function getLabel() { return str_replace($this->id, $this->id . '_id', parent::getLabel()); } } PKc��\�q�#�#-components/com_newsfeeds/models/newsfeeds.phpnu�[���<?php /** * @package Joomla.Administrator * @subpackage com_newsfeeds * * @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\Utilities\ArrayHelper; /** * Methods supporting a list of newsfeed records. * * @since 1.6 */ class NewsfeedsModelNewsfeeds extends JModelList { /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @since 1.6 */ public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'name', 'a.name', 'alias', 'a.alias', 'checked_out', 'a.checked_out', 'checked_out_time', 'a.checked_out_time', 'catid', 'a.catid', 'category_id', 'category_title', 'published', 'a.published', 'access', 'a.access', 'access_level', 'created', 'a.created', 'created_by', 'a.created_by', 'ordering', 'a.ordering', 'language', 'a.language', 'language_title', 'publish_up', 'a.publish_up', 'publish_down', 'a.publish_down', 'cache_time', 'a.cache_time', 'numarticles', 'tag', 'level', 'c.level', 'tag', ); $assoc = JLanguageAssociations::isEnabled(); if ($assoc)
/home/poliximo/public_html/4690b/../cli/../215f5/../da45a/administrator.zip