diff --git a/administrator/components/com_admin/sql/updates/mysql/3.2.1.sql b/administrator/components/com_admin/sql/updates/mysql/3.2.1.sql index 3de2ceb09daa7..6d2d3075fd116 100644 --- a/administrator/components/com_admin/sql/updates/mysql/3.2.1.sql +++ b/administrator/components/com_admin/sql/updates/mysql/3.2.1.sql @@ -1 +1,2 @@ -# Placeholder file for database changes for version 3.2.1 +ALTER TABLE `#__update_sites` ADD COLUMN `extra_query` VARCHAR(1000) DEFAULT ''; +ALTER TABLE `#__updates` ADD COLUMN `extra_query` VARCHAR(1000) DEFAULT ''; \ No newline at end of file diff --git a/administrator/components/com_admin/sql/updates/postgresql/3.2.1.sql b/administrator/components/com_admin/sql/updates/postgresql/3.2.1.sql index 3de2ceb09daa7..39c76b9355289 100644 --- a/administrator/components/com_admin/sql/updates/postgresql/3.2.1.sql +++ b/administrator/components/com_admin/sql/updates/postgresql/3.2.1.sql @@ -1 +1,2 @@ -# Placeholder file for database changes for version 3.2.1 +ALTER TABLE "#__update_sites" ADD COLUMN "extra_query" varchar(1000) DEFAULT ''; +ALTER TABLE "#__updates" ADD COLUMN "extra_query" varchar(1000) DEFAULT ''; \ No newline at end of file diff --git a/administrator/components/com_admin/sql/updates/sqlazure/3.2.1.sql b/administrator/components/com_admin/sql/updates/sqlazure/3.2.1.sql index 3de2ceb09daa7..b629a80676c11 100644 --- a/administrator/components/com_admin/sql/updates/sqlazure/3.2.1.sql +++ b/administrator/components/com_admin/sql/updates/sqlazure/3.2.1.sql @@ -1 +1,2 @@ -# Placeholder file for database changes for version 3.2.1 +ALTER TABLE [#__update_sites] ADD [extra_query] [nvarchar](1000) NULL DEFAULT ''; +ALTER TABLE [#__updates] ADD [extra_query] [nvarchar](1000) NULL DEFAULT ''; diff --git a/administrator/components/com_installer/models/update.php b/administrator/components/com_installer/models/update.php index a9eeca0ebe15c..353acf84d5519 100644 --- a/administrator/components/com_installer/models/update.php +++ b/administrator/components/com_installer/models/update.php @@ -237,6 +237,7 @@ public function update($uids) $instance = JTable::getInstance('update'); $instance->load($uid); $update->loadFromXML($instance->detailsurl); + $update->set('extra_query', $instance->extra_query); // Install sets state and enqueues messages $res = $this->install($update); @@ -268,6 +269,21 @@ private function install($update) if (isset($update->get('downloadurl')->_data)) { $url = $update->downloadurl->_data; + + $extra_query = $update->get('extra_query'); + if ($extra_query) + { + if (strpos($url, '?') === false) + { + $url .= '?'; + } + else + { + $url .= '&'; + } + + $url .= $extra_query; + } } else { diff --git a/installation/sql/mysql/joomla.sql b/installation/sql/mysql/joomla.sql index 36534a1eee4a3..3b3e4232eaf88 100644 --- a/installation/sql/mysql/joomla.sql +++ b/installation/sql/mysql/joomla.sql @@ -1759,6 +1759,7 @@ CREATE TABLE IF NOT EXISTS `#__updates` ( `data` text NOT NULL, `detailsurl` text NOT NULL, `infourl` text NOT NULL, + `extra_query` VARCHAR(1000) DEFAULT '', PRIMARY KEY (`update_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Available Updates'; @@ -1775,6 +1776,7 @@ CREATE TABLE IF NOT EXISTS `#__update_sites` ( `location` text NOT NULL, `enabled` int(11) DEFAULT 0, `last_check_timestamp` bigint(20) DEFAULT 0, + `extra_query` VARCHAR(1000) DEFAULT '', PRIMARY KEY (`update_site_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Update Sites'; diff --git a/installation/sql/postgresql/joomla.sql b/installation/sql/postgresql/joomla.sql index 7b440f7341d02..e93dc46c3b0d9 100644 --- a/installation/sql/postgresql/joomla.sql +++ b/installation/sql/postgresql/joomla.sql @@ -1685,6 +1685,7 @@ CREATE TABLE "#__updates" ( "data" text DEFAULT '' NOT NULL, "detailsurl" text NOT NULL, "infourl" text NOT NULL, + "extra_query" varchar(1000) DEFAULT '', PRIMARY KEY ("update_id") ); @@ -1700,6 +1701,7 @@ CREATE TABLE "#__update_sites" ( "location" text NOT NULL, "enabled" bigint DEFAULT 0, "last_check_timestamp" bigint DEFAULT 0, + "extra_query" varchar(1000) DEFAULT '', PRIMARY KEY ("update_site_id") ); diff --git a/installation/sql/sqlazure/joomla.sql b/installation/sql/sqlazure/joomla.sql index cf9c66e642b46..b4556ddbb104a 100644 --- a/installation/sql/sqlazure/joomla.sql +++ b/installation/sql/sqlazure/joomla.sql @@ -2732,6 +2732,7 @@ CREATE TABLE [#__update_sites]( [location] [nvarchar](max) NOT NULL, [enabled] [int] NULL DEFAULT 0, [last_check_timestamp] [int] NULL DEFAULT 0, + [extra_query] [nvarchar](1000) NULL DEFAULT '', CONSTRAINT [PK_#__update_sites_update_site_id] PRIMARY KEY CLUSTERED ( [update_site_id] ASC @@ -2786,6 +2787,7 @@ CREATE TABLE [#__updates]( [data] [nvarchar](max) NOT NULL DEFAULT '', [detailsurl] [nvarchar](max) NOT NULL, [infourl] [nvarchar](max) NOT NULL, + [extra_query] [nvarchar](1000) NULL DEFAULT '', CONSTRAINT [PK_#__updates_update_id] PRIMARY KEY CLUSTERED ( [update_id] ASC diff --git a/libraries/joomla/updater/update.php b/libraries/joomla/updater/update.php index 81017125ee56a..90586774840e7 100644 --- a/libraries/joomla/updater/update.php +++ b/libraries/joomla/updater/update.php @@ -138,6 +138,14 @@ class JUpdate extends JObject */ protected $targetplatform; + /** + * Extra query for download URLs + * + * @var string + * @since 13.1 + */ + protected $extra_query; + /** * Resource handle for the XML Parser * diff --git a/libraries/joomla/updater/updater.php b/libraries/joomla/updater/updater.php index abceeedefe481..9af6a69b37dd3 100644 --- a/libraries/joomla/updater/updater.php +++ b/libraries/joomla/updater/updater.php @@ -77,11 +77,11 @@ public function findUpdates($eid = 0, $cacheTimeout = 0) // Push it into an array if (!is_array($eid)) { - $query = 'SELECT DISTINCT update_site_id, type, location, last_check_timestamp FROM #__update_sites WHERE enabled = 1'; + $query = 'SELECT DISTINCT update_site_id, type, location, last_check_timestamp, extra_query FROM #__update_sites WHERE enabled = 1'; } else { - $query = 'SELECT DISTINCT update_site_id, type, location, last_check_timestamp FROM #__update_sites' . + $query = 'SELECT DISTINCT update_site_id, type, location, last_check_timestamp, extra_query FROM #__update_sites' . ' WHERE update_site_id IN' . ' (SELECT update_site_id FROM #__update_sites_extensions WHERE extension_id IN (' . implode(',', $eid) . '))'; } @@ -116,11 +116,13 @@ public function findUpdates($eid = 0, $cacheTimeout = 0) $results = JArrayHelper::arrayUnique(array_merge($results, $update_result['update_sites'])); $result_count = count($results); } + if (array_key_exists('updates', $update_result) && count($update_result['updates'])) { for ($k = 0, $count = count($update_result['updates']); $k < $count; $k++) { $current_update = &$update_result['updates'][$k]; + $current_update->extra_query = $result['extra_query']; $update = JTable::getInstance('update'); $extension = JTable::getInstance('extension'); $uid = $update @@ -140,6 +142,7 @@ public function findUpdates($eid = 0, $cacheTimeout = 0) 'folder' => strtolower($current_update->get('folder')) ) ); + if (!$uid) { // Set the extension id