diff --git a/administrator/components/com_installer/models/update.php b/administrator/components/com_installer/models/update.php index e1bbde987e7ee..e0e1f43cc8114 100644 --- a/administrator/components/com_installer/models/update.php +++ b/administrator/components/com_installer/models/update.php @@ -400,8 +400,19 @@ private function install($update) if (!isset($update->get('downloadurl')->_data)) { - JError::raiseWarning('', JText::_('COM_INSTALLER_INVALID_EXTENSION_UPDATE')); - + JError::raiseWarning('', JText::sprintf('COM_INSTALLER_INVALID_EXTENSION_UPDATE', $update->packageName)); + if ($update->noPhpMatch) + { + JError::raiseWarning('', JText::sprintf('COM_INSTALLER_EXTENSION_UPDATE_NO_PHP_MATCH', $update->packageName)); + } + if ($update->noStabilityMatch) + { + JError::raiseWarning('', JText::sprintf('COM_INSTALLER_EXTENSION_UPDATE_NO_STABILITY_MATCH', $update->packageName)); + } + if ($update->noDbMatch) + { + JError::raiseWarning('', JText::sprintf('COM_INSTALLER_EXTENSION_UPDATE_NO_DB_MATCH', $update->packageName)); + } return false; } diff --git a/administrator/language/en-GB/en-GB.com_installer.ini b/administrator/language/en-GB/en-GB.com_installer.ini index a0e31bd8676c3..710e7ec549084 100644 --- a/administrator/language/en-GB/en-GB.com_installer.ini +++ b/administrator/language/en-GB/en-GB.com_installer.ini @@ -26,6 +26,9 @@ 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_EXTENSION_UPDATE_NO_DB_MATCH="No file in %s upgrade match the website Database requirements" +COM_INSTALLER_EXTENSION_UPDATE_NO_PHP_MATCH="No file in %s upgrade match the website PHP requirements" +COM_INSTALLER_EXTENSION_UPDATE_NO_STABILITY_MATCH="No file in %s upgrade match the website Minimum Stability requirements" COM_INSTALLER_FAILED_TO_ENABLE_UPDATES=", failed to enable updates" COM_INSTALLER_FILTER_LABEL="Search by Extension Name" COM_INSTALLER_HEADER_DATABASE="Extensions: Database" @@ -75,7 +78,7 @@ COM_INSTALLER_INSTALL_FROM_WEB_TOS="By selecting "_QQ_"Add Install from Web tab" COM_INSTALLER_INSTALL_LANGUAGE_SUCCESS="Installation of the %s 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_INVALID_EXTENSION_UPDATE="%s : 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" diff --git a/libraries/src/Updater/Update.php b/libraries/src/Updater/Update.php index dced0de77cf75..098609e6a334c 100644 --- a/libraries/src/Updater/Update.php +++ b/libraries/src/Updater/Update.php @@ -264,6 +264,10 @@ public function _startElement($parser, $name, $attrs = array()) // Don't do anything case 'UPDATES': + // Set flags for future possible invalid extension message + $this->noPhpMatch = true; + $this->noStabilityMatch = true; + $this->noDbMatch = true; break; // For everything else there's...the default! @@ -305,6 +309,12 @@ public function _endElement($parser, $name) { // Closing update, find the latest version and check case 'UPDATE': + // Retrieve and save type and name of package from xml update file for invalid extension error message + if (!isset($this->packageName)) + { + $this->packageName = $this->currentUpdate->type->_data . ' ' . $this->currentUpdate->name->_data; + } + $product = strtolower(InputFilter::getInstance()->clean(Version::PRODUCT, 'cmd')); // Support for the min_dev_level and max_dev_level attributes is deprecated, a regexp should be used instead @@ -342,6 +352,7 @@ public function _endElement($parser, $name) if (!isset($this->currentUpdate->php_minimum) || version_compare(PHP_VERSION, $this->currentUpdate->php_minimum->_data, '>=')) { $phpMatch = true; + $this->noPhpMatch = false; } $dbMatch = false; @@ -366,6 +377,10 @@ public function _endElement($parser, $name) // Set to true if the tag is not set $dbMatch = true; } + if ($dbMatch) + { + $this->noDbMatch = false; + } // Check minimum stability $stabilityMatch = true; @@ -374,6 +389,10 @@ public function _endElement($parser, $name) { $stabilityMatch = false; } + else + { + $this->noStabilityMatch = false; + } if ($phpMatch && $stabilityMatch && $dbMatch) {