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)
{