diff --git a/administrator/components/com_installer/config.xml b/administrator/components/com_installer/config.xml index c741282ab4970..5d26167e0f8be 100644 --- a/administrator/components/com_installer/config.xml +++ b/administrator/components/com_installer/config.xml @@ -5,6 +5,18 @@ label="COM_INSTALLER_PREFERENCES_LABEL" description="COM_INSTALLER_PREFERENCES_DESCRIPTION" > + + + + + default="6" />
input->getWord('installtype')) + // 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; + } + elseif (in_array(false, $results, true)) + { + return false; + } + + if ($package === null) + { + switch ($app->input->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; + } + } + + // 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; + } + elseif (in_array(false, $results, true)) { - 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; + return false; } // Was the package unpacked? @@ -120,6 +154,9 @@ public function install() $result = true; } + // 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); @@ -255,6 +292,19 @@ protected function _getPackageFromUrl() 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; + } + } + // Download the package at the URL given $p_file = JInstallerHelper::downloadPackage($url); diff --git a/administrator/components/com_installer/views/install/tmpl/default.php b/administrator/components/com_installer/views/install/tmpl/default.php index 94202e193407c..b7c3ce53b613a 100644 --- a/administrator/components/com_installer/views/install/tmpl/default.php +++ b/administrator/components/com_installer/views/install/tmpl/default.php @@ -8,9 +8,11 @@ */ defined('_JEXEC') or die; + +JHtml::_('bootstrap.tooltip'); ?> -
+
sidebar)) : ?>
@@ -70,15 +106,42 @@ showMessage) : ?> loadTemplate('message'); ?> + showJedAndWebInstaller) : ?> +
+ ">× + Joomla Extension Directory now available with Install from Web on this page: and enjoy" + echo preg_replace( + '#([^<]*)([^<]*)([^<]*)([^<]*)([^<]*)([^<]*)#', + '\1' + . '' . '\2' . '' + . '\3' + . '' . '\4' . '' + . '\5' + . '' + . '\7', + str_replace('"', '"', JText::_('COM_INSTALLER_INSTALL_FROM_WEB_INFORMATION')) + ) + + /* results in: + Joomla Extension Directory + now available with Install from Web on this page:   + + */ + ?> +
'upload')); ?> - + trigger('onInstallerViewBeforeFirstTab', array()); ?> + +
- +
- +
@@ -117,8 +180,11 @@
+ + trigger('onInstallerViewAfterLastTab', array()); ?> + ftp) : ?> loadTemplate('ftp'); ?> diff --git a/administrator/components/com_installer/views/install/view.html.php b/administrator/components/com_installer/views/install/view.html.php index 8735383ad8c38..b5e4173209731 100644 --- a/administrator/components/com_installer/views/install/view.html.php +++ b/administrator/components/com_installer/views/install/view.html.php @@ -38,6 +38,13 @@ public function display($tpl = null) $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); } diff --git a/administrator/language/en-GB/en-GB.com_installer.ini b/administrator/language/en-GB/en-GB.com_installer.ini index 23d3513b7585a..7d75c0889d165 100644 --- a/administrator/language/en-GB/en-GB.com_installer.ini +++ b/administrator/language/en-GB/en-GB.com_installer.ini @@ -14,6 +14,7 @@ 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 successfully enabled." COM_INSTALLER_EXTENSION_UNPUBLISHED="Extension successfully disabled." @@ -38,6 +39,8 @@ COM_INSTALLER_INSTALL_DIRECTORY="Install Directory" COM_INSTALLER_INSTALL_ERROR="Error installing %s" COM_INSTALLER_INSTALL_FROM_DIRECTORY="Install from Directory" COM_INSTALLER_INSTALL_FROM_URL="Install from URL" +COM_INSTALLER_INSTALL_FROM_WEB="Install from Web" +COM_INSTALLER_INSTALL_FROM_WEB_INFORMATION="Joomla! Extensions Directory now available with Install from Web on this page: " COM_INSTALLER_INSTALL_SUCCESS="Installing %s was successful." COM_INSTALLER_INSTALL_URL="Install URL" COM_INSTALLER_INVALID_EXTENSION_UPDATE="Invalid extension update" @@ -125,6 +128,11 @@ COM_INSTALLER_NO_INSTALL_TYPE_FOUND="No Install Type Found" COM_INSTALLER_PACKAGE_DOWNLOAD_FAILED="Package download failed: %s" COM_INSTALLER_PACKAGE_FILE="Package File" COM_INSTALLER_PURGED_UPDATES="Purged updates" +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" @@ -165,12 +173,21 @@ COM_INSTALLER_UNINSTALL_ERROR="Error uninstalling %s." COM_INSTALLER_UNINSTALL_LANGUAGE="A language should always have been installed as a package.
To uninstall a language, filter type by package and uninstall the package." COM_INSTALLER_UNINSTALL_SUCCESS="Uninstalling %s was successful." 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_WEB_CONFIRM="Please confirm the installation by clicking on 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="Cannot connect to the Joomla! server. Please try again later." +COM_INSTALLER_WEBINSTALLER_LOAD_APPS="Click to load extensions browser" +COM_INSTALLER_WEBINSTALLER_INSTALL_OBSOLETE="The Install from Web plugin has become obsolete and 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_XML_DESCRIPTION="Installer component for adding, removing and upgrading extensions" JLIB_RULES_SETTING_NOTES="1. If you change the setting, it will apply to this component. Note that:
Inherited means that the permissions from global configuration and parent group will be used.
Denied means that no matter what the global configuration or parent group settings are, the group being edited cannot take this action on this component.
Allowed means that the group being edited will be able to take this action for this component (but if this is in conflict with the global configuration or parent group it will have no impact; a conflict will be indicated by Not Allowed (Locked) under Calculated Settings).
2. If you select a new setting, click Save to refresh the calculated settings." COM_INSTALLER_PREFERENCES_LABEL="Preferences" diff --git a/administrator/language/en-GB/en-GB.plg_installer_webinstaller.ini b/administrator/language/en-GB/en-GB.plg_installer_webinstaller.ini new file mode 100644 index 0000000000000..2022446c8f600 --- /dev/null +++ b/administrator/language/en-GB/en-GB.plg_installer_webinstaller.ini @@ -0,0 +1,11 @@ +; Joomla! Project +; Copyright (C) 2005 - 2013 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_TAB_POSITION_DESC="Indicate whether to place the Install from Web tab first or last" +PLG_INSTALLER_WEBINSTALLER_TAB_POSITION_LABEL="Tab Position" +PLG_INSTALLER_WEBINSTALLER_TAB_POSITION_FIRST="First" +PLG_INSTALLER_WEBINSTALLER_TAB_POSITION_LAST="Last" +PLG_INSTALLER_WEBINSTALLER_XML_DESCRIPTION="This plugin offers functionality for the 'Install from Web' tab." diff --git a/administrator/language/en-GB/en-GB.plg_installer_webinstaller.sys.ini b/administrator/language/en-GB/en-GB.plg_installer_webinstaller.sys.ini new file mode 100644 index 0000000000000..7d9476fd80351 --- /dev/null +++ b/administrator/language/en-GB/en-GB.plg_installer_webinstaller.sys.ini @@ -0,0 +1,7 @@ +; Joomla! Project +; Copyright (C) 2005 - 2013 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." diff --git a/administrator/templates/hathor/html/com_installer/install/default_form.php b/administrator/templates/hathor/html/com_installer/install/default_form.php index 29eb5e6fcc5da..98d52aebcd0c9 100644 --- a/administrator/templates/hathor/html/com_installer/install/default_form.php +++ b/administrator/templates/hathor/html/com_installer/install/default_form.php @@ -8,9 +8,12 @@ */ defined('_JEXEC') or die; + +JHtml::_('bootstrap.tooltip'); + ?> @@ -65,10 +77,41 @@
+ + showJedAndWebInstaller && !$this->showMessage) : ?> +
+ ">× + Joomla Extension Directory now available with Install from Web on this page: and enjoy" + echo preg_replace( + '#([^<]*)([^<]*)([^<]*)([^<]*)([^<]*)([^<]*)#', + '\1' + . '' . '\2' . '' + . '\3' + . '' . '\4' . '' + . '\5' + . '' + . '\7', + str_replace('"', '"', JText::_('COM_INSTALLER_INSTALL_FROM_WEB_INFORMATION')) + ) + + /* results in: + Joomla Extension Directory + now available with Install from Web on this page:   + + */ + ?> +
+ + ftp) : ?> loadTemplate('ftp'); ?>
+ + trigger('onInstallerViewBeforeFirstTab', array()); ?> +
@@ -88,6 +131,9 @@
+ + trigger('onInstallerViewAfterLastTab', array()); ?> + diff --git a/libraries/cms/installer/helper.php b/libraries/cms/installer/helper.php index a0f2daf02973e..90f13c8c239bc 100644 --- a/libraries/cms/installer/helper.php +++ b/libraries/cms/installer/helper.php @@ -53,7 +53,7 @@ public static function downloadPackage($url, $target = false) } elseif (200 != $response->code) { - JLog::add(JText::_('JLIB_INSTALLER_ERROR_DOWNLOAD_SERVER_CONNECT'), JLog::WARNING, 'jerror'); + JLog::add(JText::sprintf('JLIB_INSTALLER_ERROR_DOWNLOAD_SERVER_CONNECT', $response->code), JLog::WARNING, 'jerror'); return false; } diff --git a/media/jui/img/ajax-loader.gif b/media/jui/img/ajax-loader.gif new file mode 100644 index 0000000000000..0ca7ada960568 Binary files /dev/null and b/media/jui/img/ajax-loader.gif differ