diff --git a/administrator/components/com_admin/sql/updates/mysql/3.7.0-2017-03-03.sql b/administrator/components/com_admin/sql/updates/mysql/3.7.0-2017-03-03.sql new file mode 100644 index 0000000000000..ada236b5889cf --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/3.7.0-2017-03-03.sql @@ -0,0 +1,5 @@ +ALTER TABLE `#__languages` MODIFY `asset_id` int(10) unsigned NOT NULL DEFAULT 0; +ALTER TABLE `#__menu_types` MODIFY `asset_id` int(10) unsigned NOT NULL DEFAULT 0; + +ALTER TABLE `#__content` MODIFY `xreference` varchar(50) NOT NULL DEFAULT ''; +ALTER TABLE `#__newsfeeds` MODIFY `xreference` varchar(50) NOT NULL DEFAULT ''; diff --git a/administrator/components/com_admin/sql/updates/postgresql/3.7.0-2017-03-03.sql b/administrator/components/com_admin/sql/updates/postgresql/3.7.0-2017-03-03.sql new file mode 100644 index 0000000000000..806caf88b09f8 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/3.7.0-2017-03-03.sql @@ -0,0 +1,5 @@ +ALTER TABLE "#__extensions" ALTER COLUMN "custom_data" DROP DEFAULT; +ALTER TABLE "#__extensions" ALTER COLUMN "system_data" DROP DEFAULT; +ALTER TABLE "#__updates" ALTER COLUMN "data" DROP DEFAULT; + +ALTER TABLE "#__newsfeeds" ALTER COLUMN "xreference" SET DEFAULT ''; diff --git a/administrator/components/com_admin/sql/updates/sqlazure/3.7.0-2017-03-03.sql b/administrator/components/com_admin/sql/updates/sqlazure/3.7.0-2017-03-03.sql new file mode 100644 index 0000000000000..94af5bdc08153 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/sqlazure/3.7.0-2017-03-03.sql @@ -0,0 +1,31 @@ +CREATE PROCEDURE "#removeDefault" +( + @table NVARCHAR(100), + @column NVARCHAR(100) +) +AS +BEGIN + DECLARE @constraintName AS nvarchar(100) + DECLARE @constraintQuery AS nvarchar(1000) + SELECT @constraintName = name FROM sys.default_constraints + WHERE parent_object_id = object_id(@table) + AND parent_column_id = columnproperty(object_id(@table), @column, 'ColumnId') + SET @constraintQuery = 'ALTER TABLE [' + @table + '] DROP CONSTRAINT [' + @constraintName + ']' + EXECUTE sp_executesql @constraintQuery +END; + +EXECUTE "#removeDefault" "#__extensions", 'system_data'; +EXECUTE "#removeDefault" "#__updates", 'data'; + +ALTER TABLE "#__content" ADD DEFAULT ('') FOR "xreference"; +ALTER TABLE "#__newsfeeds" ADD DEFAULT ('') FOR "xreference"; + +-- Delete wrong unique index +DROP INDEX "idx_access" ON "#__languages"; + +-- Add missing unique index +ALTER TABLE "#__languages" ADD CONSTRAINT "#__languages$idx_langcode" UNIQUE ("lang_code") ON [PRIMARY]; + +-- Add missing index keys +CREATE INDEX "idx_access" ON "#__languages" ("access"); +CREATE INDEX "idx_ordering" ON "#__languages" ("ordering"); diff --git a/administrator/components/com_installer/models/discover.php b/administrator/components/com_installer/models/discover.php index 8b8f6bc496274..1403e816f4e93 100644 --- a/administrator/components/com_installer/models/discover.php +++ b/administrator/components/com_installer/models/discover.php @@ -166,6 +166,7 @@ public function discover() if (!array_key_exists($key, $extensions)) { // Put it into the table + $result->check(); $result->store(); } } diff --git a/administrator/components/com_installer/models/languages.php b/administrator/components/com_installer/models/languages.php index fc01a9a946186..2a6611c75a165 100644 --- a/administrator/components/com_installer/models/languages.php +++ b/administrator/components/com_installer/models/languages.php @@ -143,14 +143,17 @@ protected function getLanguages() $languages[$language->name] = $language; } + // Workaround for php 5.3 + $that = $this; + // Sort the array by value of subarray usort( $languages, - function($a, $b) + function($a, $b) use ($that) { - $ordering = $this->getState('list.ordering'); + $ordering = $that->getState('list.ordering'); - if (strtolower($this->getState('list.direction')) === 'asc') + if (strtolower($that->getState('list.direction')) === 'asc') { return StringHelper::strcmp($a->$ordering, $b->$ordering); } diff --git a/installation/sql/mysql/joomla.sql b/installation/sql/mysql/joomla.sql index e0228bd9655d3..4e14962548424 100644 --- a/installation/sql/mysql/joomla.sql +++ b/installation/sql/mysql/joomla.sql @@ -343,7 +343,7 @@ CREATE TABLE IF NOT EXISTS `#__content` ( `metadata` text NOT NULL, `featured` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT 'Set if article is featured.', `language` char(7) NOT NULL COMMENT 'The language code for the article.', - `xreference` varchar(50) NOT NULL COMMENT 'A reference to enable linkages to external data sets.', + `xreference` varchar(50) NOT NULL DEFAULT '' COMMENT 'A reference to enable linkages to external data sets.', PRIMARY KEY (`id`), KEY `idx_access` (`access`), KEY `idx_checkout` (`checked_out`), @@ -655,7 +655,7 @@ INSERT INTO `#__extensions` (`extension_id`, `package_id`, `name`, `type`, `elem CREATE TABLE IF NOT EXISTS `#__fields` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `asset_id` int(10) NOT NULL DEFAULT 0, + `asset_id` int(10) unsigned NOT NULL DEFAULT 0, `context` varchar(255) NOT NULL DEFAULT '', `group_id` int(10) NOT NULL DEFAULT 0, `title` varchar(255) NOT NULL DEFAULT '', @@ -707,7 +707,7 @@ CREATE TABLE `#__fields_categories` ( CREATE TABLE IF NOT EXISTS `#__fields_groups` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `asset_id` int(10) NOT NULL DEFAULT 0, + `asset_id` int(10) unsigned NOT NULL DEFAULT 0, `context` varchar(255) NOT NULL DEFAULT '', `title` varchar(255) NOT NULL DEFAULT '', `note` varchar(255) NOT NULL DEFAULT '', @@ -1307,7 +1307,7 @@ CREATE TABLE IF NOT EXISTS `#__finder_types` ( CREATE TABLE IF NOT EXISTS `#__languages` ( `lang_id` int(11) unsigned NOT NULL AUTO_INCREMENT, - `asset_id` int(11) NOT NULL, + `asset_id` int(10) unsigned NOT NULL DEFAULT 0, `lang_code` char(7) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `title` varchar(50) NOT NULL, `title_native` varchar(50) NOT NULL, @@ -1411,7 +1411,7 @@ INSERT INTO `#__menu` (`id`, `menutype`, `title`, `alias`, `note`, `path`, `link CREATE TABLE IF NOT EXISTS `#__menu_types` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `asset_id` int(11) NOT NULL, + `asset_id` int(10) unsigned NOT NULL DEFAULT 0, `menutype` varchar(24) NOT NULL, `title` varchar(48) NOT NULL, `description` varchar(255) NOT NULL DEFAULT '', @@ -1577,7 +1577,7 @@ CREATE TABLE IF NOT EXISTS `#__newsfeeds` ( `metakey` text NOT NULL, `metadesc` text NOT NULL, `metadata` text NOT NULL, - `xreference` varchar(50) NOT NULL COMMENT 'A reference to enable linkages to external data sets.', + `xreference` varchar(50) NOT NULL DEFAULT '' COMMENT 'A reference to enable linkages to external data sets.', `publish_up` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `publish_down` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `description` text NOT NULL, diff --git a/installation/sql/postgresql/joomla.sql b/installation/sql/postgresql/joomla.sql index d32dba6a042c1..04a745b3cb8f4 100644 --- a/installation/sql/postgresql/joomla.sql +++ b/installation/sql/postgresql/joomla.sql @@ -479,8 +479,8 @@ CREATE TABLE "#__extensions" ( "protected" smallint DEFAULT 0 NOT NULL, "manifest_cache" text NOT NULL, "params" text NOT NULL, - "custom_data" text DEFAULT '' NOT NULL, - "system_data" text DEFAULT '' NOT NULL, + "custom_data" text NOT NULL, + "system_data" text NOT NULL, "checked_out" integer DEFAULT 0 NOT NULL, "checked_out_time" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "ordering" bigint DEFAULT 0, @@ -1548,7 +1548,7 @@ CREATE TABLE "#__newsfeeds" ( "metakey" text NOT NULL, "metadesc" text NOT NULL, "metadata" text NOT NULL, - "xreference" varchar(50) NOT NULL, + "xreference" varchar(50) NOT NULL DEFAULT '', "publish_up" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "publish_down" timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, "description" text NOT NULL, @@ -1863,7 +1863,7 @@ CREATE TABLE "#__updates" ( "folder" varchar(20) DEFAULT '', "client_id" smallint DEFAULT 0, "version" varchar(32) DEFAULT '', - "data" text DEFAULT '' NOT NULL, + "data" text NOT NULL, "detailsurl" text NOT NULL, "infourl" text NOT NULL, "extra_query" varchar(1000) DEFAULT '', diff --git a/installation/sql/sqlazure/joomla.sql b/installation/sql/sqlazure/joomla.sql index 576abce7d12f1..af0a014762cda 100644 --- a/installation/sql/sqlazure/joomla.sql +++ b/installation/sql/sqlazure/joomla.sql @@ -491,7 +491,7 @@ CREATE TABLE "#__content" ( "metadata" nvarchar(max) NOT NULL, "featured" tinyint NOT NULL DEFAULT 0, "language" nvarchar(7) NOT NULL, - "xreference" nvarchar(50) NOT NULL, + "xreference" nvarchar(50) NOT NULL DEFAULT '', CONSTRAINT "PK_#__content_id" PRIMARY KEY CLUSTERED ( "id" ASC @@ -671,7 +671,7 @@ CREATE TABLE "#__extensions" ( "manifest_cache" nvarchar(max) NOT NULL, "params" nvarchar(max) NOT NULL, "custom_data" nvarchar(max) NOT NULL, - "system_data" nvarchar(max) NOT NULL DEFAULT '', + "system_data" nvarchar(max) NOT NULL, "checked_out" bigint NOT NULL DEFAULT 0, "checked_out_time" datetime2(0) NOT NULL DEFAULT '1900-01-01 00:00:00', "ordering" int NULL DEFAULT 0, @@ -880,7 +880,7 @@ SET IDENTITY_INSERT "#__extensions" OFF; CREATE TABLE "#__fields" ( "id" int IDENTITY(1,1) NOT NULL, - "asset_id" int NOT NULL DEFAULT 0, + "asset_id" bigint NOT NULL DEFAULT 0, "context" nvarchar(255) NOT NULL DEFAULT '', "group_id" int NOT NULL DEFAULT 0, "title" nvarchar(255) NOT NULL DEFAULT '', @@ -949,7 +949,7 @@ WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW CREATE TABLE "#__fields_groups" ( "id" int IDENTITY(1,1) NOT NULL, - "asset_id" int NOT NULL DEFAULT 0, + "asset_id" bigint NOT NULL DEFAULT 0, "context" nvarchar(255) NOT NULL DEFAULT '', "title" nvarchar(255) NOT NULL DEFAULT '', "note" nvarchar(255) NOT NULL DEFAULT '', @@ -1890,20 +1890,14 @@ CREATE TABLE "#__languages" ( "published" int NOT NULL DEFAULT 0, "access" bigint NOT NULL DEFAULT 0, "ordering" int NOT NULL DEFAULT 0, - CONSTRAINT "PK_#__languages_lang_id" PRIMARY KEY CLUSTERED -( - "lang_id" ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], - CONSTRAINT "#__languages$idx_sef" UNIQUE NONCLUSTERED -( - "sef" ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY]; + CONSTRAINT "PK_#__languages_lang_id" PRIMARY KEY ("lang_id") ON [PRIMARY], + CONSTRAINT "#__languages$idx_sef" UNIQUE ("sef") ON [PRIMARY], + CONSTRAINT "#__languages$idx_langcode" UNIQUE ("lang_code") ON [PRIMARY] +) +ON [PRIMARY]; -CREATE UNIQUE INDEX "idx_access" ON "#__languages" -( - "access" ASC -)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF); +CREATE INDEX "idx_ordering" ON "#__languages" ("ordering"); +CREATE INDEX "idx_access" ON "#__languages" ("access"); -- -- Dumping data for table `#__languages` @@ -2247,7 +2241,7 @@ CREATE TABLE "#__newsfeeds" ( "metakey" nvarchar(max) NOT NULL, "metadesc" nvarchar(max) NOT NULL, "metadata" nvarchar(max) NOT NULL, - "xreference" nvarchar(50) NOT NULL, + "xreference" nvarchar(50) NOT NULL DEFAULT '', "publish_up" datetime2(0) NOT NULL DEFAULT '1900-01-01 00:00:00', "publish_down" datetime2(0) NOT NULL DEFAULT '1900-01-01 00:00:00', "description" nvarchar(max) NOT NULL, @@ -2735,7 +2729,7 @@ CREATE TABLE "#__updates" ( "folder" nvarchar(20) DEFAULT '', "client_id" smallint DEFAULT 0, "version" nvarchar(32) DEFAULT '', - "data" nvarchar(max) NOT NULL DEFAULT '', + "data" nvarchar(max) NOT NULL, "detailsurl" nvarchar(max) NOT NULL, "infourl" nvarchar(max) NOT NULL, "extra_query" nvarchar(1000) NULL DEFAULT '', diff --git a/libraries/cms/installer/adapter/language.php b/libraries/cms/installer/adapter/language.php index 3138e941dd541..1569640cc054f 100644 --- a/libraries/cms/installer/adapter/language.php +++ b/libraries/cms/installer/adapter/language.php @@ -292,7 +292,7 @@ protected function _install($cname, $basePath, $clientId, &$element) $row->set('params', $this->parent->getParams()); $row->set('manifest_cache', $this->parent->generateManifestCache()); - if (!$row->store()) + if (!$row->check() || !$row->store()) { // Install failed, roll back changes $this->parent->abort(JText::sprintf('JLIB_INSTALLER_ABORT', $row->getError())); @@ -537,7 +537,7 @@ public function update() // Update an entry to the extension table $row = JTable::getInstance('extension'); - $eid = $row->find(array('element' => strtolower($this->get('tag')), 'type' => 'language', 'client_id' => $clientId)); + $eid = $row->find(array('element' => $this->get('tag'), 'type' => 'language', 'client_id' => $clientId)); if ($eid) { @@ -564,7 +564,7 @@ public function update() // Clean installed languages cache. JFactory::getCache()->clean('com_languages'); - if (!$row->store()) + if (!$row->check() || !$row->store()) { // Install failed, roll back changes $this->parent->abort(JText::sprintf('JLIB_INSTALLER_ABORT', $row->getError())); @@ -794,6 +794,7 @@ public function discover_install() // @todo remove code: $this->parent->extension->params = $this->parent->getParams(); try { + $this->parent->extension->check(); $this->parent->extension->store(); } catch (RuntimeException $e) diff --git a/libraries/joomla/table/extension.php b/libraries/joomla/table/extension.php index b6ec83341a794..6599c5f8c42c3 100644 --- a/libraries/joomla/table/extension.php +++ b/libraries/joomla/table/extension.php @@ -49,6 +49,19 @@ public function check() return false; } + if (!$this->extension_id) + { + if (!$this->custom_data) + { + $this->custom_data = ''; + } + + if (!$this->system_data) + { + $this->system_data = ''; + } + } + return true; } diff --git a/libraries/joomla/table/update.php b/libraries/joomla/table/update.php index 1d23878be1d23..9ac2ffa22f987 100644 --- a/libraries/joomla/table/update.php +++ b/libraries/joomla/table/update.php @@ -49,6 +49,11 @@ public function check() return false; } + if (!$this->update_id && !$this->data) + { + $this->data = ''; + } + return true; } diff --git a/libraries/joomla/updater/updater.php b/libraries/joomla/updater/updater.php index b75b9ffd183ea..63d451c4ff7c3 100644 --- a/libraries/joomla/updater/updater.php +++ b/libraries/joomla/updater/updater.php @@ -157,6 +157,7 @@ public function findUpdates($eid = 0, $cacheTimeout = 0, $minimum_stability = se /** @var JTableUpdate $update */ foreach ($updateObjects as $update) { + $update->check(); $update->store(); } }