AAAAPKٝ>\) .htaccessnuW+A Order allow,deny Deny from all PKٝ>\)views/discover/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\Vviews/discover/index.htmlnuW+A PKٝ>\peeviews/discover/view.html.phpnuW+Astate = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); /* * Set toolbar items for the page */ JToolBarHelper::custom('discover.install', 'upload', 'upload', 'JTOOLBAR_INSTALL', true, false); JToolBarHelper::custom('discover.refresh', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_DISCOVER', false, false); JToolBarHelper::custom('discover.purge', 'purge', 'purge', 'JTOOLBAR_PURGE_CACHE', false, false); JToolBarHelper::divider(); parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_DISCOVER'); } } PKٝ>\H$views/discover/tmpl/default_item.phpnuW+A item->index % 2; ?>" item->style; ?>> pagination->getRowOffset($this->item->index); ?> item->cbd; ?> /> item->name; ?> item->type ?> item->element) : ?> X item->img, $this->item->alt, array('title' => $this->item->action)); ?> item->folder != '' ? $this->item->folder : 'N/A'; ?> item->client != '' ? $this->item->client : 'N/A'; ?> item->author != '' ? $this->item->author : ' '; ?> PKٝ>\views/discover/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
showMessage) : ?> loadTemplate('message'); ?> ftp) : ?> loadTemplate('ftp'); ?> items)) : ?> items as $i => $item): ?>
pagination->getListFooter(); ?>
extension_id); ?> name; ?> type); ?> version != '' ? $item->version : ' '; ?> creationDate != '' ? $item->creationDate : ' '; ?> folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> client; ?> author != '' ? $item->author : ' '; ?> extension_id ?>

PKٝ>\)views/discover/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\Vviews/discover/tmpl/index.htmlnuW+A PKٝ>\Vviews/index.htmlnuW+A PKٝ>\Vviews/manage/index.htmlnuW+A PKٝ>\Vviews/manage/tmpl/index.htmlnuW+A PKٝ>\)views/manage/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\l{{views/manage/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
showMessage) : ?> loadTemplate('message'); ?> ftp) : ?> loadTemplate('ftp'); ?> loadTemplate('filter'); ?> items)) : ?> items as $i => $item): ?>
pagination->getListFooter(); ?>
extension_id); ?> name; ?> client; ?> element) : ?> X status, $i, $item->status < 2, 'cb'); ?> type); ?> version != '' ? $item->version : ' '; ?> system_data) : ?> createCompatibilityInfo($item->system_data)) : ?> creationDate != '' ? $item->creationDate : ' '; ?> author != '' ? $item->author : ' '; ?> folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> extension_id ?>
PKٝ>\ٚhff$views/manage/tmpl/default_filter.phpnuW+A
form->getFieldSet('select') as $field): ?> hidden): ?> label; ?> input; ?>
PKٝ>\)views/manage/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\~f= = views/manage/view.html.phpnuW+Astate = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $this->form = $this->get('Form'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } //Check if there are no matching items if(!count($this->items)){ JFactory::getApplication()->enqueueMessage( JText::_('COM_INSTALLER_MSG_MANAGE_NOEXTENSION') , 'warning' ); } // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); // Display the view parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); 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('', 'manage.remove', 'JTOOLBAR_UNINSTALL'); JToolBarHelper::divider(); } parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_MANAGE'); } /** * Creates the content for the tooltip which shows compatibility information * * @var string $system_data System_data information * * @since 2.5.28 * * @return string Content for tooltip */ protected function createCompatibilityInfo($system_data) { $system_data = json_decode($system_data); if (empty($system_data->compatibility)) { return ''; } $compatibility = $system_data->compatibility; $info = JText::sprintf('COM_INSTALLER_COMPATIBILITY_TOOLTIP_INSTALLED', $compatibility->installed->version, implode(', ', $compatibility->installed->value) ) . '
' . JText::sprintf('COM_INSTALLER_COMPATIBILITY_TOOLTIP_AVAILABLE', $compatibility->available->version, implode(', ', $compatibility->available->value) ); return $info; } } PKٝ>\)views/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\%views/database/view.html.phpnuW+Astate = $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) ? $this->schemaVersion : JText::_('JNONE'); $this->updateVersion = ($this->updateVersion) ? $this->updateVersion : JText::_('JNONE'); $this->pagination = $this->get('Pagination'); $this->errorCount = count($this->errors); $errors = 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++; } parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); /* * Set toolbar items for the page */ JToolBarHelper::custom('database.fix', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_DATABASE_FIX', false, false); JToolBarHelper::divider(); parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_DATABASE'); } } PKٝ>\Vviews/database/tmpl/index.htmlnuW+A PKٝ>\  views/database/tmpl/default.phpnuW+A
errorCount === 0) : ?>

1)); ?>

1)); ?> errorCount); ?>
    filterParams) : ?>
  • schemaVersion != $this->changeSet->getSchema()) : ?>
  • schemaVersion, $this->changeSet->getSchema()); ?>
  • updateVersion, JVERSION) != 0) : ?>
  • updateVersion, JVERSION); ?>
  • errors as $line => $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); ?>
  • schemaVersion); ?>
  • updateVersion); ?>
  • name); ?>
  • results['ok'])); ?>
  • results['skipped'])); ?>
PKٝ>\)views/database/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\Vviews/database/index.htmlnuW+A PKٝ>\)views/database/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\JN&views/default/tmpl/default_message.phpnuW+Aget('State'); $message1 = $state->get('message'); $message2 = $state->get('extension_message'); ?>
PKٝ>\Vviews/default/tmpl/index.htmlnuW+A PKٝ>\$>"views/default/tmpl/default_ftp.phpnuW+A
ftp instanceof Exception): ?>

ftp->getMessage()); ?>

PKٝ>\)views/default/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\gviews/default/view.phpnuW+A_addPath('template', $this->_basePath . '/views/default/tmpl'); $this->_addPath('template', JPATH_THEMES.'/'.$app->getTemplate().'/html/com_installer/default'); } /** * @since 1.5 */ 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->assignRef('state', $state); JHtml::_('behavior.tooltip'); $this->addToolbar(); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); JToolBarHelper::title(JText::_('COM_INSTALLER_HEADER_' . $this->getName()), 'install.png'); if ($canDo->get('core.admin')) { JToolBarHelper::preferences('com_installer'); JToolBarHelper::divider(); } // Document $document = JFactory::getDocument(); $document->setTitle(JText::_('COM_INSTALLER_TITLE_' . $this->getName())); } } PKٝ>\)views/default/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\Vviews/default/index.htmlnuW+A PKٝ>\ڮGviews/languages/view.html.phpnuW+Astate = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); return false; } parent::display($tpl); } /** * Add the page title and toolbar. * * @return void */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); JToolBarHelper::title(JText::_('COM_INSTALLER_HEADER_' . $this->getName()), 'install.png'); if ($canDo->get('core.admin')) { JToolBarHelper::custom('languages.install', 'upload', 'upload', 'COM_INSTALLER_TOOLBAR_INSTALL', true, false); JToolBarHelper::custom('languages.find', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_FIND_LANGUAGES', false, false); JToolBarHelper::custom('languages.purge', 'purge', 'purge', 'JTOOLBAR_PURGE_CACHE', false, false); JToolBarHelper::divider(); parent::addToolbar(); // TODO: this help screen will need to be created JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_LANGUAGES'); } } }PKٝ>\Vviews/languages/tmpl/index.htmlnuW+A PKٝ>\w6 views/languages/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $ver = new JVersion; ?>
items) || $this->escape($this->state->get('filter.search'))) : ?> loadTemplate('filter'); ?>
items as $i => $language) : ?> version, 0, 3) == $ver->RELEASE) : ?>
pagination->getListFooter(); ?>
update_id, false, 'cid'); ?> name; ?> version; ?> type)); ?> detailsurl; ?> update_id; ?>

PKٝ>\<'views/languages/tmpl/default_filter.phpnuW+A
PKٝ>\)views/languages/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\)views/languages/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\Vviews/languages/index.htmlnuW+A PKٝ>\)views/install/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\Vviews/install/index.htmlnuW+A PKٝ>\iviews/install/tmpl/default.phpnuW+A showMessage) : ?> loadTemplate('message'); ?> loadTemplate('form'); ?> PKٝ>\UD ? ? #views/install/tmpl/default_form.phpnuW+A
ftp) : ?> loadTemplate('ftp'); ?>
PKٝ>\Vviews/install/tmpl/index.htmlnuW+A PKٝ>\)views/install/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\{2views/install/view.html.phpnuW+Afirst = ''; $state = $this->get('state'); $this->assignRef('paths', $paths); $this->assignRef('state', $state); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_INSTALL'); } } PKٝ>\)views/warnings/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\LOB%%views/warnings/view.html.phpnuW+Aget('Items'); $this->assignRef('messages', $items); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_WARNINGS'); } } PKٝ>\Vviews/warnings/index.htmlnuW+A PKٝ>\)views/warnings/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\cחviews/warnings/tmpl/default.phpnuW+A
messages)) { echo '

'. JText::_('COM_INSTALLER_MSG_WARNINGS_NONE').'

'; } 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 '
'.$message['description'].'
'; } echo JHtml::_('sliders.panel', JText::_('COM_INSTALLER_MSG_WARNINGFURTHERINFO'), 'furtherinfo-pane'); echo '
'. JText::_('COM_INSTALLER_MSG_WARNINGFURTHERINFODESC') .'
'; echo JHtml::_('sliders.end'); } ?>
PKٝ>\Vviews/warnings/tmpl/index.htmlnuW+A PKٝ>\Vviews/update/index.htmlnuW+A PKٝ>\)views/update/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\Vviews/update/tmpl/index.htmlnuW+A PKٝ>\x'rviews/update/tmpl/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
showMessage) : ?> loadTemplate('message'); ?> ftp) : ?> loadTemplate('ftp'); ?> items)) : ?> items as $i=>$item): $client = $item->client_id ? JText::_('JADMINISTRATOR') : JText::_('JSITE'); ?>
pagination->getListFooter(); ?>
update_id); ?> escape($item->name); ?> extension_id ? JText::_('COM_INSTALLER_MSG_UPDATE_UPDATE') : JText::_('COM_INSTALLER_NEW_INSTALL') ?> type) ?> version ?> folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> detailsurl ?> infourl)) : ?>
escape($item->infourl);?>

PKٝ>\)views/update/tmpl/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\7ffviews/update/view.html.phpnuW+Astate = $this->get('State'); $this->items = $this->get('Items'); $this->pagination = $this->get('Pagination'); $paths = new stdClass(); $paths->first = ''; $this->assignRef('paths', $paths); parent::display($tpl); } /** * Add the page title and toolbar. * * @since 1.6 */ protected function addToolbar() { $canDo = InstallerHelper::getActions(); JToolBarHelper::custom('update.update', 'upload', 'upload', 'COM_INSTALLER_TOOLBAR_UPDATE', true, false); JToolBarHelper::custom('update.find', 'refresh', 'refresh', 'COM_INSTALLER_TOOLBAR_FIND_UPDATES', false, false); JToolBarHelper::custom('update.purge', 'purge', 'purge', 'JTOOLBAR_PURGE_CACHE', false, false); JToolBarHelper::divider(); parent::addToolbar(); JToolBarHelper::help('JHELP_EXTENSIONS_EXTENSION_MANAGER_UPDATE'); } } PKٝ>\ĜS installer.xmlnuW+A com_installer Joomla! Project April 2006 (C) 2005 - 2014 Open Source Matters. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org 2.5.0 COM_INSTALLER_XML_DESCRIPTION config.xml controller.php index.html installer.php controllers helpers models views language/en-GB.com_installer.ini PKٝ>\4/+ access.xmlnuW+A
PKٝ>\@/controller.phpnuW+AgetType(); $lName = JRequest::getCmd('layout', 'default'); // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { $ftp = JClientHelper::setCredentialsFromRequest('ftp'); $view->assignRef('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->assignRef('document', $document); // Load the submenu. InstallerHelper::addSubmenu($vName); $view->display(); } return $this; } } PKٝ>\rb?? installer.phpnuW+Aauthorise('core.manage', 'com_installer')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } $controller = JControllerLegacy::getInstance('Installer'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); PKٝ>\Vhelpers/index.htmlnuW+A PKٝ>\)helpers/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\)helpers/html/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\Vhelpers/html/index.htmlnuW+A PKٝ>\U@helpers/html/manage.phpnuW+A array( '', 'COM_INSTALLER_EXTENSION_PROTECTED', '', 'COM_INSTALLER_EXTENSION_PROTECTED', false, 'protected', 'protected' ), 1 => array( 'unpublish', 'COM_INSTALLER_EXTENSION_ENABLED', 'COM_INSTALLER_EXTENSION_DISABLE', 'COM_INSTALLER_EXTENSION_ENABLED', false, 'publish', 'publish' ), 0 => array( 'publish', 'COM_INSTALLER_EXTENSION_DISABLED', 'COM_INSTALLER_EXTENSION_ENABLE', 'COM_INSTALLER_EXTENSION_DISABLED', false, 'unpublish', 'unpublish' ), ); return JHtml::_('jgrid.state', $states, $value, $i, 'manage.', $enabled, true, $checkbox); } } PKٝ>\FAhelpers/installer.phpnuW+Aset($action->name, $user->authorise($action->name, $assetName)); } return $result; } } PKٝ>\ViW config.xmlnuW+A
PKٝ>\J|%%models/update.phpnuW+AsetState('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('name', 'asc'); } /** * Method to get the database query * * @return JDatabaseQuery The database query * @since 1.6 */ protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true); // grab updates ignoring new installs $query->select('*')->from('#__updates')->where('extension_id != 0'); $query->order($this->getState('list.ordering').' '.$this->getState('list.direction')); // Filter by extension_id if ($eid = $this->getState('filter.extension_id')) { $query->where($db->nq('extension_id') . ' = ' . $db->q((int) $eid)); } else { $query->where($db->nq('extension_id').' != '.$db->q(0)); $query->where($db->nq('extension_id').' != '.$db->q(700)); } return $query; } /** * Finds updates for an extension. * * @param int Extension identifier to look for * @return boolean Result * @since 1.6 */ public function findUpdates($eid=0, $cache_timeout = 0) { $updater = JUpdater::getInstance(); $results = $updater->findUpdates($eid, $cache_timeout); return true; } /** * Removes all of the updates from the table. * * @return boolean result of operation * @since 1.6 */ public function purge() { $db = JFactory::getDBO(); // Note: TRUNCATE is a DDL operation // This may or may not mean depending on your database $db->setQuery('TRUNCATE TABLE #__updates'); if ($db->Query()) { // Reset the last update check timestamp $query = $db->getQuery(true); $query->update($db->nq('#__update_sites')); $query->set($db->nq('last_check_timestamp').' = '.$db->q(0)); $db->setQuery($query); $db->query(); $this->_message = JText::_('COM_INSTALLER_PURGED_UPDATES'); return true; } else { $this->_message = JText::_('COM_INSTALLER_FAILED_TO_PURGE_UPDATES'); return false; } } /** * Enables any disabled rows in #__update_sites table * * @return boolean result of operation * @since 1.6 */ public function enableSites() { $db = JFactory::getDBO(); $db->setQuery('UPDATE #__update_sites SET enabled = 1 WHERE enabled = 0'); if ($db->Query()) { if ($rows = $db->getAffectedRows()) { $this->_message .= JText::plural('COM_INSTALLER_ENABLED_UPDATES', $rows); } return true; } else { $this->_message .= JText::_('COM_INSTALLER_FAILED_TO_ENABLE_UPDATES'); return false; } } /** * Update function. * * Sets the "result" state with the result of the operation. * * @param Array[int] List of updates to apply * @since 1.6 */ public function update($uids) { $result = true; foreach($uids as $uid) { $update = new JUpdate(); $instance = JTable::getInstance('update'); $instance->load($uid); $update->loadFromXML($instance->detailsurl); // install sets state and enqueues messages $res = $this->install($update); if ($res) { $instance->delete($uid); } $result = $res & $result; } // Set the final state $this->setState('result', $result); } /** * Handles the actual update installation. * * @param JUpdate An update definition * @return boolean Result of install * @since 1.6 */ private function install($update) { $app = JFactory::getApplication(); if (isset($update->get('downloadurl')->_data)) { $url = trim($update->downloadurl->_data); } else { JError::raiseWarning('', JText::_('COM_INSTALLER_INVALID_EXTENSION_UPDATE')); return false; } $p_file = JInstallerHelper::downloadPackage($url); // 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 = JInstallerHelper::unpack($tmp_dest . '/' . $p_file); // Get an installer instance $installer = JInstaller::getInstance(); $update->set('type', $package['type']); // Install the package if (!$installer->update($package['dir'])) { // There was an error updating the package $msg = JText::sprintf('COM_INSTALLER_MSG_UPDATE_ERROR', JText::_('COM_INSTALLER_TYPE_TYPE_'.strtoupper($package['type']))); $result = false; } else { // Package updated successfully $msg = JText::sprintf('COM_INSTALLER_MSG_UPDATE_SUCCESS', JText::_('COM_INSTALLER_TYPE_TYPE_'.strtoupper($package['type']))); $result = true; } // Quick change $this->type = $package['type']; // Set some model state values $app->enqueueMessage($msg); // 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']; } JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']); return $result; } } PKٝ>\Vmodels/index.htmlnuW+A PKٝ>\tI@models/fields/search.phpnuW+Aname . '" id="' . $this->id . '" value="' . htmlspecialchars($this->value) . '" title="' . JText::_('JSEARCH_FILTER') . '" onchange="this.form.submit();" />'; $html.= ''; $html.= ''; return $html; } } PKٝ>\)models/fields/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\Vmodels/fields/index.htmlnuW+A PKٝ>\yU;models/fields/client.phpnuW+Aelement['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; $options = array(); foreach ($this->element->children() as $option) { $options[] = JHtml::_('select.option', $option->attributes('value'), JText::_(trim($option->data()))); } $options[] = JHtml::_('select.option', '0', JText::sprintf('JSITE')); $options[] = JHtml::_('select.option', '1', JText::sprintf('JADMINISTRATOR')); $return = JHtml::_('select.genericlist', $options, $this->name, $onchange, 'value', 'text', $this->value, $this->id); return $return; } } PKٝ>\$.ȳmodels/fields/group.phpnuW+Aelement['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; $options = array(); foreach ($this->element->children() as $option) { $options[] = JHtml::_('select.option', (string)$option->attributes()->value, JText::_(trim((string) $option))); } $dbo = JFactory::getDbo(); $query = $dbo->getQuery(true); $query->select('DISTINCT folder'); $query->from('#__extensions'); $query->where('folder != '.$dbo->quote('')); $query->order('folder'); $dbo->setQuery((string)$query); $folders = $dbo->loadColumn(); foreach($folders as $folder) { $options[] = JHtml::_('select.option', $folder, $folder); } $return = JHtml::_('select.genericlist', $options, $this->name, $onchange, 'value', 'text', $this->value, $this->id); return $return; } } PKٝ>\Woomodels/fields/type.phpnuW+Aelement['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : ''; $options = array(); foreach ($this->element->children() as $option) { $options[] = JHtml::_('select.option', $option->attributes('value'), JText::_(trim((string) $option))); } $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('type')->from('#__extensions'); $db->setQuery($query); $types = array_unique($db->loadColumn()); foreach($types as $type) { $options[] = JHtml::_('select.option', $type, JText::_('COM_INSTALLER_TYPE_'. strtoupper($type))); } $return = JHtml::_('select.genericlist', $options, $this->name, $onchange, 'value', 'text', $this->value, $this->id); return $return; } } PKٝ>\)models/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\D##models/manage.phpnuW+AgetUserState($this->context.'.data'); $filters = $data['filters']; } else { $app->setUserState($this->context.'.data', array('filters'=>$filters)); } $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', ''); $this->setState('filter.search', isset($filters['search']) ? $filters['search'] : ''); $this->setState('filter.status', isset($filters['status']) ? $filters['status'] : ''); $this->setState('filter.type', isset($filters['type']) ? $filters['type'] : ''); $this->setState('filter.group', isset($filters['group']) ? $filters['group'] : ''); $this->setState('filter.client_id', isset($filters['client_id']) ? $filters['client_id'] : ''); parent::populateState('name', 'asc'); } /** * Enable/Disable an extension. * * @return boolean True on success * @since 1.5 */ function publish(&$eid = array(), $value = 1) { // Initialise variables. $user = JFactory::getUser(); if ($user->authorise('core.edit.state', 'com_installer')) { $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 database connector $db = JFactory::getDBO(); // 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; } if (!$table->store()) { $this->setError($table->getError()); $result = false; } } } else { $result = false; JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED')); } return $result; } /** * Refreshes the cached manifest information for an extension. * * @param int extension identifier (key in #__extensions) * @return boolean result of refresh * @since 1.6 */ function refresh($eid) { if (!is_array($eid)) { $eid = array($eid => 0); } // Get a database connector $db = JFactory::getDBO(); // Get an installer object for the extension type $installer = JInstaller::getInstance(); $row = JTable::getInstance('extension'); $result = 0; // Uninstall the chosen extensions foreach($eid as $id) { $result|= $installer->refreshManifestCache($id); } return $result; } /** * Remove (uninstall) an extension * * @param array An array of identifiers * @return boolean True on success * @since 1.5 */ function remove($eid = array()) { // Initialise variables. $user = JFactory::getUser(); if ($user->authorise('core.delete', 'com_installer')) { // Initialise variables. $failed = array(); /* * 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 a database connector $db = JFactory::getDBO(); // Get an installer object for the extension type $installer = JInstaller::getInstance(); $row = JTable::getInstance('extension'); // Uninstall the chosen extensions foreach($eid as $id) { $id = trim($id); $row->load($id); if ($row->type) { $result = $installer->uninstall($row->type, $id); // Build an array of extensions that failed to uninstall if ($result === false) { $failed[] = $id; } } else { $failed[] = $id; } } $langstring = 'COM_INSTALLER_TYPE_TYPE_'. strtoupper($row->type); $rowtype = JText::_($langstring); if(strpos($rowtype, $langstring) !== false) { $rowtype = $row->type; } if (count($failed)) { // There was an error in uninstalling the package $msg = JText::sprintf('COM_INSTALLER_UNINSTALL_ERROR', $rowtype); $result = false; } else { // Package uninstalled sucessfully $msg = JText::sprintf('COM_INSTALLER_UNINSTALL_SUCCESS', $rowtype); $result = true; } $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')); return $result; } else { $result = false; JError::raiseWarning(403, JText::_('JERROR_CORE_DELETE_NOT_PERMITTED')); } } /** * Method to get the database query * * @return JDatabaseQuery The database query * @since 1.6 */ protected function getListQuery() { $status = $this->getState('filter.status'); $type = $this->getState('filter.type'); $client = $this->getState('filter.client_id'); $group = $this->getState('filter.group'); $query = JFactory::getDBO()->getQuery(true); $query->select('*'); $query->select('2*protected+(1-protected)*enabled as status'); $query->from('#__extensions'); $query->where('state=0'); if ($status != '') { if ($status == '2') { $query->where('protected = 1'); } else { $query->where('protected = 0'); $query->where('enabled=' . intval($status)); } } if ($type) { $query->where('type=' . $this->_db->Quote($type)); } if ($client != '') { $query->where('client_id=' . intval($client)); } if ($group != '' && in_array($type, array('plugin', 'library', ''))) { $query->where('folder=' . $this->_db->Quote($group == '*' ? '' : $group)); } // Filter by search in id $search = $this->getState('filter.search'); if (!empty($search) && stripos($search, 'id:') === 0) { $query->where('extension_id = '.(int) substr($search, 3)); } return $query; } /** * 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) { // Get the form. $app = JFactory::getApplication(); JForm::addFormPath(JPATH_COMPONENT . '/models/forms'); JForm::addFieldPath(JPATH_COMPONENT . '/models/fields'); $form = JForm::getInstance('com_installer.manage', 'manage', 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 1.6 */ protected function loadFormData() { // Check the session for previously entered form data. $data = JFactory::getApplication()->getUserState('com_installer.manage.data', array()); return $data; } } PKٝ>\ˬvmodels/warnings.phpnuW+AJText::_('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 < (4 * 1024 * 1024)) // 4MB { $messages[] = array('message'=>JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZE'), 'description'=>JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZEDESC')); } if($upload_max_filesize < (4 * 1024 * 1024)) // 4MB { $messages[] = array('message'=>JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZE'), 'description'=>JText::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZEDESC')); } return $messages; } } PKٝ>\֪models/database.phpnuW+AsetState('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('name', 'asc'); } /** * * Fixes database problems */ public function fix() { $changeSet = $this->getItems(); $changeSet->fix(); $this->fixSchemaVersion($changeSet); $this->fixUpdateVersion(); $installer = new joomlaInstallerScript(); $installer->deleteUnexistingFiles(); $this->fixDefaultTextFilters(); } /** * * Gets the changeset object * * @return JSchemaChangeset */ public function getItems() { $folder = JPATH_ADMINISTRATOR . '/components/com_admin/sql/updates/'; $changeSet = JSchemaChangeset::getInstance(JFactory::getDbo(), $folder); return $changeSet; } 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 = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('version_id')->from($db->qn('#__schemas')) ->where('extension_id = 700'); $db->setQuery($query); $result = $db->loadResult(); if ($db->getErrorNum()) { throw new Exception('Database error - getSchemaVersion'); } return $result; } /** * Fix schema version if wrong * * @param JSchemaChangeSet * * @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(); $db = JFactory::getDbo(); $result = false; // Check value. If ok, don't do update $version = $this->getSchemaVersion(); if ($version == $schema) { $result = $version; } else { // Delete old row $query = $db->getQuery(true); $query->delete($db->qn('#__schemas')); $query->where($db->qn('extension_id') . ' = 700'); $db->setQuery($query); $db->query(); // Add new row $query = $db->getQuery(true); $query->insert($db->qn('#__schemas')); $query->set($db->qn('extension_id') . '= 700'); $query->set($db->qn('version_id') . '= ' . $db->q($schema)); $db->setQuery($query); if ($db->query()) { $result = $schema; } } return $result; } /** * 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 JRegistry($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 JRegistry($table->manifest_cache); $updateVersion = $cache->get('version'); $cmsVersion = new JVersion(); if ($updateVersion == $cmsVersion->getShortVersion()) { return $updateVersion; } else { $cache->set('version', $cmsVersion->getShortVersion()); $table->manifest_cache = $cache->toString(); if ($table->store()) { return $cmsVersion->getShortVersion(); } else { 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 JRegistry(); $newParams->set('filters', $contentParams->get('filters')); $table->params = (string) $newParams; $table->store(); return true; } } } } PKٝ>\##models/discover.phpnuW+AsetState('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('name', 'asc'); } /** * Method to get the database query. * * @return JDatabaseQuery the database query * @since 1.6 */ protected function getListQuery() { $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('*'); $query->from('#__extensions'); $query->where('state=-1'); return $query; } /** * Discover extensions. * * Finds uninstalled extensions * * @since 1.6 */ function discover() { $installer = JInstaller::getInstance(); $results = $installer->discover(); // Get all templates, including discovered ones $query = 'SELECT extension_id, element, folder, client_id, type FROM #__extensions'; $dbo = JFactory::getDBO(); $dbo->setQuery($query); $installedtmp = $dbo->loadObjectList(); $extensions = array(); foreach($installedtmp as $install) { $key = implode(':', array($install->type, $install->element, $install->folder, $install->client_id)); $extensions[$key] = $install; } unset($installedtmp); 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)) { $result->store(); // put it into the table } } } /** * Installs a discovered extension. * * @since 1.6 */ function discover_install() { $app = JFactory::getApplication(); $installer = JInstaller::getInstance(); $eid = JRequest::getVar('cid', 0); if (is_array($eid) || $eid) { if (!is_array($eid)) { $eid = array($eid); } JArrayHelper::toInteger($eid); $app = JFactory::getApplication(); $failed = false; foreach($eid as $id) { $result = $installer->discover_install($id); if (!$result) { $failed = true; $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_DISCOVER_INSTALLFAILED').': '. $id); } } $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. * * @since 1.6 */ function purge() { $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->delete(); $query->from('#__extensions'); $query->where('state = -1'); $db->setQuery((string)$query); if ($db->Query()) { $this->_message = JText::_('COM_INSTALLER_MSG_DISCOVER_PURGEDDISCOVEREDEXTENSIONS'); return true; } else { $this->_message = JText::_('COM_INSTALLER_MSG_DISCOVER_FAILEDTOPURGEEXTENSIONS'); return false; } } } PKٝ>\)models/forms/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\Vmodels/forms/index.htmlnuW+A PKٝ>\;l,,models/forms/manage.xmlnuW+A
PKٝ>\PΉmodels/install.phpnuW+AsetState('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', ''); // Recall the 'Install from Directory' path. $path = $app->getUserStateFromRequest($this->_context.'.install_directory', 'install_directory', $app->getCfg('tmp_path')); $this->setState('install.directory', $path); parent::populateState(); } /** * Install an extension from either folder, url or upload. * * @return boolean result of install * @since 1.5 */ function install() { $this->setState('action', 'install'); // Set FTP credentials, if given. JClientHelper::setCredentialsFromRequest('ftp'); $app = JFactory::getApplication(); switch(JRequest::getWord('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; } // Was the package unpacked? if (!$package) { $app->setUserState('com_installer.message', JText::_('COM_INSTALLER_UNABLE_TO_FIND_INSTALL_PACKAGE')); return false; } // Get an installer instance $installer = JInstaller::getInstance(); // 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; } else { // Package installed sucessfully $msg = JText::sprintf('COM_INSTALLER_INSTALL_SUCCESS', JText::_('COM_INSTALLER_TYPE_TYPE_'.strtoupper($package['type']))); $result = true; } // Set some model state values $app = JFactory::getApplication(); $app->enqueueMessage($msg); $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']); 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 $userfile = JRequest::getVar('install_package', null, 'files', 'array'); // 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; } // Check if there was a 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'); $uploaded = JFile::upload($tmp_src, $tmp_dest); // Unpack the downloaded package file $package = JInstallerHelper::unpack($tmp_dest); return $package; } /** * Install an extension from a directory * * @return Package details or false on failure * @since 1.5 */ protected function _getPackageFromFolder() { // Get the path to the package to install $p_dir = JRequest::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')); return false; } $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() { // Get a database connector $db = JFactory::getDbo(); // Get the URL of the package to install $url = JRequest::getString('install_url'); // Did you give us a URL? if (!$url) { JError::raiseWarning('', JText::_('COM_INSTALLER_MSG_INSTALL_ENTER_A_URL')); return false; } // 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); return $package; } } PKٝ>\J7LlNNmodels/extension.phpnuW+AgetState('list.ordering'); $search = $this->getState('filter.search'); // Replace slashes so preg_match will work $search = str_replace('/', ' ', $search); $db = $this->getDbo(); if ($ordering == 'name' || (!empty($search) && stripos($search, 'id:') !== 0)) { $db->setQuery($query); $result = $db->loadObjectList(); $lang = JFactory::getLanguage(); $this->translate($result); if (!empty($search)) { foreach($result as $i=>$item) { if (!preg_match("/$search/i", $item->name)) { unset($result[$i]); } } } JArrayHelper::sortObjects($result, $this->getState('list.ordering'), $this->getState('list.direction') == 'desc' ? -1 : 1, true, $lang->getLocale()); $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 ? $limit : null); } else { $query->order($db->quoteName($ordering) . ' ' . $this->getState('list.direction')); $result = parent::_getList($query, $limitstart, $limit); $this->translate($result); return $result; } } /** * Translate a list of objects * * @param array The array of objects * @return array The array of translated objects */ private function translate(&$items) { $lang = JFactory::getLanguage(); foreach($items as &$item) { if (strlen($item->manifest_cache)) { $data = json_decode($item->manifest_cache); if ($data) { foreach($data as $key => $value) { if ($key == 'type') { // ignore the type field continue; } $item->$key = $value; } } } $item->author_info = @$item->authorEmail .'
'. @$item->authorUrl; $item->client = $item->client_id ? JText::_('JADMINISTRATOR') : JText::_('JSITE'); $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': $extension = 'lib_' . $item->element; $lang->load("$extension.sys", JPATH_SITE, 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 'package': $extension = $item->element; $lang->load("$extension.sys", JPATH_SITE, 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; } if (!in_array($item->type, array('language', 'template', 'library'))) { $item->name = JText::_($item->name); } settype($item->description, 'string'); if (!in_array($item->type, array('language'))) { $item->description = JText::_($item->description); } } } } PKٝ>\wmodels/languages.phpnuW+AgetQuery(true); // Select the required fields from the updates table $query->select('update_id, name, version, detailsurl, type'); $query->from('#__updates'); // This Where clause will avoid to list languages already installed. $query->where('extension_id = 0'); // Filter by search in title $search = $this->getState('filter.search'); if (!empty($search)) { $search = $db->Quote('%' . $db->escape($search, true) . '%'); $query->where('(name LIKE ' . $search . ')'); } // Add the list ordering clause. $listOrder = $this->state->get('list.ordering'); $orderDirn = $this->state->get('list.direction'); $query->order($db->escape($listOrder) . ' ' . $db->escape($orderDirn)); return $query; } /** * 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. */ 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 null $ordering list order * @param null $direction direction in the list * * @return void */ protected function populateState($ordering = 'name', $direction = 'asc') { // Initialise variables. $app = JFactory::getApplication(); $value = $app->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); $this->setState('filter.search', $value); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); parent::populateState($ordering, $direction); } /** * Method to find available languages in the Accredited Languages Update Site. * * @param int $cache_timeout time before refreshing the cached updates * * @return bool */ public function findLanguages($cache_timeout = 0) { $updater = JUpdater::getInstance(); /* * The following function uses extension_id 600, that is the english language extension id. * In #__update_sites_extensions you should have 600 linked to the Accredited Translations Repo */ $updater->findUpdates(array(600), $cache_timeout); return true; } /** * Install languages in the system. * * @param array $lids array of language ids selected in the list * * @return bool */ public function install($lids) { $app = JFactory::getApplication(); $installer = JInstaller::getInstance(); // Loop through every selected language foreach ($lids as $id) { // Loads the update database object that represents the language $language = JTable::getInstance('update'); $language->load($id); // Get the url to the XML manifest file of the selected language $remote_manifest = $this->_getLanguageManifest($id); if (!$remote_manifest) { // Could not find the url, the information in the update server may be corrupt $message = JText::sprintf('COM_INSTALLER_MSG_LANGUAGES_CANT_FIND_REMOTE_MANIFEST', $language->name); $message .= ' ' . JText::_('COM_INSTALLER_MSG_LANGUAGES_TRY_LATER'); $app->enqueueMessage($message); continue; } // Based on the language XML manifest get the url of the package to download $package_url = $this->_getPackageUrl($remote_manifest); if (!$package_url) { // Could not find the url , maybe the url is wrong in the update server, or there is not internet access $message = JText::sprintf('COM_INSTALLER_MSG_LANGUAGES_CANT_FIND_REMOTE_PACKAGE', $language->name); $message .= ' ' . JText::_('COM_INSTALLER_MSG_LANGUAGES_TRY_LATER'); $app->enqueueMessage($message); continue; } // Download the package to the tmp folder $package = $this->_downloadPackage($package_url); // Install the package if (!$installer->install($package['dir'])) { // There was an error installing the package $message = JText::sprintf('COM_INSTALLER_INSTALL_ERROR', $language->name); $message .= ' ' . JText::_('COM_INSTALLER_MSG_LANGUAGES_TRY_LATER'); $app->enqueueMessage($message); continue; } // Package installed successfully $app->enqueueMessage(JText::sprintf('COM_INSTALLER_INSTALL_SUCCESS', $language->name)); // Cleanup the install files in tmp folder if (!is_file($package['packagefile'])) { $config = JFactory::getConfig(); $package['packagefile'] = $config->get('tmp_path') . '/' . $package['packagefile']; } JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']); // Delete the installed language from the list $language->delete($id); } } /** * Gets the manifest file of a selected language from a the language list in a update server. * * @param int $uid the id of the language in the #__updates table * * @return string */ protected function _getLanguageManifest($uid) { $instance = JTable::getInstance('update'); $instance->load($uid); $detailurl = trim($instance->detailsurl); return $detailurl; } /** * Finds the url of the package to download. * * @param string $remote_manifest url to the manifest XML file of the remote package * * @return string|bool */ protected function _getPackageUrl( $remote_manifest ) { $update = new JUpdate; $update->loadFromXML($remote_manifest); $package_url = trim($update->get('downloadurl', false)->_data); return $package_url; } /** * Download a language package from an URL and unpack it in the tmp folder. * * @param string $url url of the package * * @return array|bool Package details or false on failure */ protected function _downloadPackage($url) { // Download the package from the given URL $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); return $package; } } PKٝ>\V index.htmlnuW+A PKٝ>\S\aacontrollers/languages.phpnuW+Aparams; $cache_timeout = $params->get('cachetimeout', 6, 'int'); $cache_timeout = 3600 * $cache_timeout; // Find updates $model = $this->getModel('languages'); $model->findLanguages($cache_timeout); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=languages', false)); } /** * Purgue the updates list. * * @return void */ 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 */ public function install() { $model = $this->getModel('languages'); // Get array of selected languages $lids = JRequest::getVar('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)); } } PKٝ>\Scontrollers/discover.phpnuW+AgetModel('discover'); $model->discover(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=discover', false)); } /** * Install a discovered extension. * * @since 1.6 */ function install() { $model = $this->getModel('discover'); $model->discover_install(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=discover', false)); } /** * Clean out the discovered extension cache. * * @since 1.6 */ function purge() { $model = $this->getModel('discover'); $model->purge(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=discover', false), $model->_message); } } PKٝ>\controllers/install.phpnuW+AgetModel('install'); if ($model->install()) { $cache = JFactory::getCache('mod_menu'); $cache->clean(); // TODO: Reset the users acl here as well to kill off any missing bits } $app = JFactory::getApplication(); $redirect_url = $app->getUserState('com_installer.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); } } PKٝ>\)controllers/.htaccessnuW+A Order allow,deny Deny from all PKٝ>\}s=oocontrollers/database.phpnuW+AgetModel('database'); $model->fix(); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=database', false)); } } PKٝ>\3& & controllers/manage.phpnuW+AregisterTask('unpublish', 'publish'); $this->registerTask('publish', 'publish'); } /** * Enable/Disable an extension (if supported). * * @since 1.6 */ public function publish() { // Check for request forgeries. JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Initialise variables. $user = JFactory::getUser(); $ids = JRequest::getVar('cid', array(), '', 'array'); $values = array('publish' => 1, 'unpublish' => 0); $task = $this->getTask(); $value = JArrayHelper::getValue($values, $task, 0, 'int'); if (empty($ids)) { JError::raiseWarning(500, JText::_('COM_INSTALLER_ERROR_NO_EXTENSIONS_SELECTED')); } else { // Get the model. $model = $this->getModel('manage'); // Change the state of the records. if (!$model->publish($ids, $value)) { JError::raiseWarning(500, implode('
', $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 JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $eid = JRequest::getVar('cid', array(), '', 'array'); $model = $this->getModel('manage'); JArrayHelper::toInteger($eid, array()); $result = $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. * * @since 1.6 */ function refresh() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $uid = JRequest::getVar('cid', array(), '', 'array'); $model = $this->getModel('manage'); JArrayHelper::toInteger($uid, array()); $result = $model->refresh($uid); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=manage', false)); } } PKٝ>\Vcontrollers/index.htmlnuW+A PKٝ>\9ZOOcontrollers/update.phpnuW+AgetModel('update'); $uid = JRequest::getVar('cid', array(), '', 'array'); JArrayHelper::toInteger($uid, array()); if ($model->update($uid)) { $cache = JFactory::getCache('mod_menu'); $cache->clean(); } $app = JFactory::getApplication(); $redirect_url = $app->getUserState('com_installer.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. * * @since 1.6 */ function find() { // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Get the caching duration jimport('joomla.application.component.helper'); $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('update'); $result = $model->findUpdates(0, $cache_timeout); $this->setRedirect(JRoute::_('index.php?option=com_installer&view=update', false)); //$view->display(); } /** * Purges updates. * * @since 1.6 */ function purge() { // Purge updates // Check for request forgeries JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); $model = $this->getModel('update'); $model->purge(); $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 */ function ajax() { // Note: we don't do a token check as we're fetching information // asynchronously. This means that between requests the token might // change, making it impossible for AJAX to work. $eid = JRequest::getInt('eid', 0); $skip = JRequest::getVar('skip', array(), 'default', 'array'); $cache_timeout = JRequest::getInt('cache_timeout', 0); if($cache_timeout == 0) { jimport('joomla.application.component.helper'); $component = JComponentHelper::getComponent('com_installer'); $params = $component->params; $cache_timeout = $params->get('cachetimeout', 6, 'int'); $cache_timeout = 3600 * $cache_timeout; } $model = $this->getModel('update'); $result = $model->findUpdates($eid, $cache_timeout); $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); JFactory::getApplication()->close(); } } PKB\)default/.htaccessnuW+A Order allow,deny Deny from all PKB\Xdefault/default_ftp.phpnuW+A
ftp instanceof Exception): ?>

ftp->getMessage()); ?>

PKB\Vdefault/index.htmlnuW+A PKB\Vupdate/index.htmlnuW+A PKB\)update/.htaccessnuW+A Order allow,deny Deny from all PKB\]p!!update/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
showMessage) : ?> loadTemplate('message'); ?> ftp) : ?> loadTemplate('ftp'); ?> items)) : ?> items as $i=>$item): $client = $item->client_id ? JText::_('JADMINISTRATOR') : JText::_('JSITE'); ?>
update_id); ?> name; ?> extension_id ? JText::_('COM_INSTALLER_MSG_UPDATE_UPDATE') : JText::_('COM_INSTALLER_NEW_INSTALL') ?> type) ?> version ?> folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> detailsurl ?> infourl)) : ?>
infourl;?>
pagination->getListFooter(); ?>

PKB\)discover/.htaccessnuW+A Order allow,deny Deny from all PKB\n sdiscover/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
showMessage) : ?> loadTemplate('message'); ?> ftp) : ?> loadTemplate('ftp'); ?> items)) : ?> items as $i => $item): ?>
extension_id); ?> name; ?> type); ?> version != '' ? $item->version : ' '; ?> creationDate != '' ? $item->creationDate : ' '; ?> folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> client; ?> author != '' ? $item->author : ' '; ?> extension_id ?>
pagination->getListFooter(); ?>

PKB\Vdiscover/index.htmlnuW+A PKB\Vmanage/index.htmlnuW+A PKB\manage/default_filter.phpnuW+A
form->getFieldSet('select') as $field): ?> form->setFieldAttribute($field->fieldname, 'onchange', '', 'filters');?> hidden): ?> label; ?> input; ?>
PKB\)manage/.htaccessnuW+A Order allow,deny Deny from all PKB\o=__manage/default.phpnuW+Aescape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); ?>
showMessage) : ?> loadTemplate('message'); ?> ftp) : ?> loadTemplate('ftp'); ?> loadTemplate('filter'); ?> items)) : ?> items as $i => $item): ?>
extension_id); ?> name; ?> client; ?> element) : ?> X status, $i, $item->status < 2, 'cb'); ?> type); ?> version != '' ? $item->version : ' '; ?> creationDate != '' ? $item->creationDate : ' '; ?> author != '' ? $item->author : ' '; ?> folder != '' ? $item->folder : JText::_('COM_INSTALLER_TYPE_NONAPPLICABLE'); ?> extension_id ?>
pagination->getListFooter(); ?>
PKٝ>\) .htaccessnuW+APKٝ>\)views/discover/.htaccessnuW+APKٝ>\Vviews/discover/index.htmlnuW+APKٝ>\peeviews/discover/view.html.phpnuW+APKٝ>\H$views/discover/tmpl/default_item.phpnuW+APKٝ>\views/discover/tmpl/default.phpnuW+APKٝ>\)views/discover/tmpl/.htaccessnuW+APKٝ>\Vviews/discover/tmpl/index.htmlnuW+APKٝ>\V views/index.htmlnuW+APKٝ>\Vc views/manage/index.htmlnuW+APKٝ>\V views/manage/tmpl/index.htmlnuW+APKٝ>\)4!views/manage/tmpl/.htaccessnuW+APKٝ>\l{{!views/manage/tmpl/default.phpnuW+APKٝ>\ٚhff$3views/manage/tmpl/default_filter.phpnuW+APKٝ>\)7views/manage/.htaccessnuW+APKٝ>\~f= = E8views/manage/view.html.phpnuW+APKٝ>\)Cviews/.htaccessnuW+APKٝ>\%Dviews/database/view.html.phpnuW+APKٝ>\VxLviews/database/tmpl/index.htmlnuW+APKٝ>\  Lviews/database/tmpl/default.phpnuW+APKٝ>\)SYviews/database/tmpl/.htaccessnuW+APKٝ>\VZviews/database/index.htmlnuW+APKٝ>\)Zviews/database/.htaccessnuW+APKٝ>\JN&N[views/default/tmpl/default_message.phpnuW+APKٝ>\VC^views/default/tmpl/index.htmlnuW+APKٝ>\$>"^views/default/tmpl/default_ftp.phpnuW+APKٝ>\)cviews/default/tmpl/.htaccessnuW+APKٝ>\gvdviews/default/view.phpnuW+APKٝ>\)kviews/default/.htaccessnuW+APKٝ>\VVlviews/default/index.htmlnuW+APKٝ>\ڮGlviews/languages/view.html.phpnuW+APKٝ>\Vtviews/languages/tmpl/index.htmlnuW+APKٝ>\w6 euviews/languages/tmpl/default.phpnuW+APKٝ>\<'views/languages/tmpl/default_filter.phpnuW+APKٝ>\)̅views/languages/tmpl/.htaccessnuW+APKٝ>\)views/languages/.htaccessnuW+APKٝ>\Vaviews/languages/index.htmlnuW+APKٝ>\)ʇviews/install/.htaccessnuW+APKٝ>\Vviews/install/index.htmlnuW+APKٝ>\iviews/install/tmpl/default.phpnuW+APKٝ>\UD ? ? #views/install/tmpl/default_form.phpnuW+APKٝ>\Vviews/install/tmpl/index.htmlnuW+APKٝ>\)views/install/tmpl/.htaccessnuW+APKٝ>\{2˙views/install/view.html.phpnuW+APKٝ>\)views/warnings/.htaccessnuW+APKٝ>\LOB%%aviews/warnings/view.html.phpnuW+APKٝ>\Vҡviews/warnings/index.htmlnuW+APKٝ>\):views/warnings/tmpl/.htaccessnuW+APKٝ>\cחviews/warnings/tmpl/default.phpnuW+APKٝ>\VNviews/warnings/tmpl/index.htmlnuW+APKٝ>\Vviews/update/index.htmlnuW+APKٝ>\)!views/update/.htaccessnuW+APKٝ>\Vviews/update/tmpl/index.htmlnuW+APKٝ>\x'rQviews/update/tmpl/default.phpnuW+APKٝ>\)"views/update/tmpl/.htaccessnuW+APKٝ>\7ffviews/update/view.html.phpnuW+APKٝ>\ĜS installer.xmlnuW+APKٝ>\4/+ access.xmlnuW+APKٝ>\@/ controller.phpnuW+APKٝ>\rb?? installer.phpnuW+APKٝ>\VOhelpers/index.htmlnuW+APKٝ>\)helpers/.htaccessnuW+APKٝ>\)phelpers/html/.htaccessnuW+APKٝ>\V5helpers/html/index.htmlnuW+APKٝ>\U@helpers/html/manage.phpnuW+APKٝ>\FAhelpers/installer.phpnuW+APKٝ>\ViW config.xmlnuW+APKٝ>\J|%%models/update.phpnuW+APKٝ>\V~models/index.htmlnuW+APKٝ>\tI@models/fields/search.phpnuW+APKٝ>\)models/fields/.htaccessnuW+APKٝ>\Vsmodels/fields/index.htmlnuW+APKٝ>\yU;models/fields/client.phpnuW+APKٝ>\$.ȳmodels/fields/group.phpnuW+APKٝ>\Woomodels/fields/type.phpnuW+APKٝ>\)_models/.htaccessnuW+APKٝ>\D##models/manage.phpnuW+APKٝ>\ˬv8models/warnings.phpnuW+APKٝ>\֪LHmodels/database.phpnuW+APKٝ>\##^models/discover.phpnuW+APKٝ>\)nmodels/forms/.htaccessnuW+APKٝ>\Vkomodels/forms/index.htmlnuW+APKٝ>\;l,,omodels/forms/manage.xmlnuW+APKٝ>\PΉDumodels/install.phpnuW+APKٝ>\J7LlNNYmodels/extension.phpnuW+APKٝ>\wmodels/languages.phpnuW+APKٝ>\V Bindex.htmlnuW+APKٝ>\S\aacontrollers/languages.phpnuW+APKٝ>\SEcontrollers/discover.phpnuW+APKٝ>\controllers/install.phpnuW+APKٝ>\)mcontrollers/.htaccessnuW+APKٝ>\}s=oo1controllers/database.phpnuW+APKٝ>\3& & controllers/manage.phpnuW+APKٝ>\VTcontrollers/index.htmlnuW+APKٝ>\9ZOOcontrollers/update.phpnuW+APKB\)Ndefault/.htaccessnuW+APKB\Xdefault/default_ftp.phpnuW+APKB\Videfault/index.htmlnuW+APKB\Vupdate/index.htmlnuW+APKB\)*update/.htaccessnuW+APKB\]p!!update/default.phpnuW+APKB\)Ldiscover/.htaccessnuW+APKB\n s discover/default.phpnuW+APKB\Vdiscover/index.htmlnuW+APKB\Vmanage/index.htmlnuW+APKB\manage/default_filter.phpnuW+APKB\)manage/.htaccessnuW+APKB\o=__manage/default.phpnuW+APKll$u/