diff --git a/.github/workflows/cy.yml b/.github/workflows/cy.yml index 197bb86ef6d..554e345accd 100644 --- a/.github/workflows/cy.yml +++ b/.github/workflows/cy.yml @@ -10,7 +10,7 @@ jobs: composer: runs-on: ubuntu-latest container: - image: joomlaprojects/docker-images:php8.2 + image: joomlaprojects/docker-images:php8.3 steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-dependencies @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest needs: composer container: - image: joomlaprojects/docker-images:php8.2 + image: joomlaprojects/docker-images:php8.3 steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-dependencies @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest needs: phpcs container: - image: joomlaprojects/docker-images:php8.2 + image: joomlaprojects/docker-images:php8.3 steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-dependencies @@ -45,7 +45,7 @@ jobs: runs-on: ubuntu-latest needs: npm container: - image: joomlaprojects/docker-images:cypress8.2 + image: joomlaprojects/docker-images:cypress8.3 steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-dependencies @@ -55,7 +55,7 @@ jobs: - name: Build and prepare Joomla run: | vendor/bin/robo build - curl https://joomla.org/latest -L --output joomla.zip + curl "https://downloads.joomla.org/cms/joomla5/5-4-0/Joomla_5-4-0-Stable-Full_Package.zip?format=zip" -L --output joomla.zip mkdir joomla cp joomla.zip joomla/joomla.zip cd joomla diff --git a/src/administrator/components/com_weblinks/script.php b/src/administrator/components/com_weblinks/script.php index b212c09f5f7..112e17efc19 100644 --- a/src/administrator/components/com_weblinks/script.php +++ b/src/administrator/components/com_weblinks/script.php @@ -1,332 +1,261 @@ getDatabase(); - $folders = [ - '/administrator/components/com_weblinks/helpers/html', - '/administrator/components/com_weblinks/sql/updates/sqlsrv', + $types = [ + [ + 'alias' => 'com_weblinks.category', + 'title' => 'Category', + 'json' => json_encode([ + 'special' => [ + 'dbtable' => '#__categories', + 'key' => 'id', + 'type' => 'Category', + 'prefix' => 'JTable', + 'config' => 'array()', + ], + 'common' => [ + 'dbtable' => '#__ucm_content', + 'key' => 'ucm_id', + 'type' => 'Corecontent', + 'prefix' => 'JTable', + 'config' => 'array()', + ], + ]), + ], + [ + 'alias' => 'com_weblinks.weblink', + 'title' => 'Web Link', + 'json' => json_encode([ + 'special' => [ + 'dbtable' => '#__weblinks', + 'key' => 'id', + 'type' => 'Weblink', + 'prefix' => 'JTable', + 'config' => 'array()', + ], + 'common' => [ + 'dbtable' => '#__ucm_content', + 'key' => 'ucm_id', + 'type' => 'Corecontent', + 'prefix' => 'JTable', + 'config' => 'array()', + ], + ]), + ], ]; - foreach ($files as $file) { - if (is_file(JPATH_ROOT . $file)) { - File::delete(JPATH_ROOT . $file); - } - } + foreach ($types as $type) { + $query = $db->getQuery(true) + ->select($db->quoteName(['type_id', 'type_alias', 'rules', 'type', 'params'])) + ->from($db->quoteName('#__content_types')) + ->where($db->quoteName('type_alias') . ' = ' . $db->quote($type['alias'])); - foreach ($folders as $folder) { - if (is_dir(JPATH_ROOT . $folder)) { - Folder::delete(JPATH_ROOT . $folder); + $db->setQuery($query); + + try { + $row = $db->loadObject(); + } catch (\RuntimeException $e) { + // Query failed; skip this type defensively. + continue; } - } - return true; - } + $needsUpsert = false; - /** - * Function to perform changes during install - * - * @param JInstallerAdapterComponent $parent The class calling this method - * - * @return void - * - * @since 3.4 - */ - public function install($parent) - { - // Initialize a new category - $category = new Category($this->getDatabase()); - $category->setDispatcher(new Dispatcher()); - - // Check if the Uncategorised category exists before adding it - if (!$category->load(['extension' => 'com_weblinks', 'title' => 'Uncategorised'])) { - $category->extension = 'com_weblinks'; - $category->title = 'Uncategorised'; - $category->description = ''; - $category->published = 1; - $category->access = 1; - $category->params = '{"category_layout":"","image":""}'; - $category->metadata = '{"author":"","robots":""}'; - $category->metadesc = ''; - $category->metakey = ''; - $category->language = '*'; - $category->checked_out_time = null; - $category->version = 1; - $category->hits = 0; - $category->modified_user_id = 0; - $category->checked_out = null; - - // Set the location in the tree - $category->setLocation(1, 'last-child'); - - // Check to make sure our data is valid - if (!$category->check()) { - Factory::getApplication()->enqueueMessage(Text::sprintf('COM_WEBLINKS_ERROR_INSTALL_CATEGORY', $category->getError())); - - return; - } + if (! $row) { + $needsUpsert = true; + } else { + $storedJson = ''; - // Now store the category - if (!$category->store(true)) { - Factory::getApplication()->enqueueMessage(Text::sprintf('COM_WEBLINKS_ERROR_INSTALL_CATEGORY', $category->getError())); + if (isset($row->rules) && $row->rules !== '') { + $storedJson = $row->rules; + } elseif (isset($row->type) && $row->type !== '') { + $storedJson = $row->type; + } elseif (isset($row->params) && $row->params !== '') { + $storedJson = $row->params; + } - return; + if (! $this->isValidUcmJson($storedJson)) { + $needsUpsert = true; + } } - // Build the path for our category - $category->rebuildPath($category->id); + if ($needsUpsert) { + if (! empty($row) && isset($row->type_id)) { + $updated = $this->updateContentTypeRow($db, (int) $row->type_id, $type['json']); + if (! $updated) { + $this->replaceContentTypeRow($db, $type['alias'], $type['title'], $type['json']); + } + } else { + $this->insertContentTypeRow($db, $type['alias'], $type['title'], $type['json']); + } + } } } /** - * Method to run after the install routine. - * - * @param string $type The action being performed - * @param JInstallerAdapterComponent $parent The class calling this method + * Validate the UCM JSON string. * - * @return void - * - * @since 3.4.1 + * @param string $json + * @return bool */ - public function postflight($type, $parent) + private function isValidUcmJson(string $json): bool { - // Only execute database changes on MySQL databases - $dbName = $this->getDatabase()->name; + if ($json === '') { + return false; + } - if (strpos($dbName, 'mysql') !== false) { - // Add Missing Table Columns if needed - $this->addColumnsIfNeeded(); + $data = json_decode($json, true); + + if (! is_array($data)) { + return false; + } - // Drop the Table Columns if needed - $this->dropColumnsIfNeeded(); + if (isset($data['special']['prefix'])) { + return true; + } + + if (isset($data['common']) && is_array($data['common'])) { + foreach ($data['common'] as $v) { + if (is_array($v) && isset($v['prefix'])) { + return true; + } + } } - // Insert missing UCM Records if needed - $this->insertMissingUcmRecords(); + return false; } /** - * Method to insert missing records for the UCM tables + * Attempt to update content types row's JSON columns. * - * @return void - * - * @since 3.4.1 + * @param DatabaseInterface $db + * @param int $typeId + * @param string $json + * @return bool */ - private function insertMissingUcmRecords() + private function updateContentTypeRow(DatabaseInterface $db, int $typeId, string $json): bool { - // Insert the rows in the #__content_types table if they don't exist already - $db = $this->getDatabase(); - - // Get the type ID for a Weblink - $query = $db->getQuery(true); - $query->select($db->quoteName('type_id')) - ->from($db->quoteName('#__content_types')) - ->where($db->quoteName('type_alias') . ' = ' . $db->quote('com_weblinks.weblink')); - $db->setQuery($query); - - $weblinkTypeId = $db->loadResult(); - - // Get the type ID for a Weblink Category - $query->clear('where'); - $query->where($db->quoteName('type_alias') . ' = ' . $db->quote('com_weblinks.category')); - $db->setQuery($query); - - $categoryTypeId = $db->loadResult(); - - // Set the table columns to insert table to - $columnsArray = [ - $db->quoteName('type_title'), - $db->quoteName('type_alias'), - $db->quoteName('table'), - $db->quoteName('rules'), - $db->quoteName('field_mappings'), - $db->quoteName('router'), - $db->quoteName('content_history_options'), - ]; + $fieldsToTry = ['rules', 'type', 'params']; - // If we have no type id for com_weblinks.weblink insert it - if (!$weblinkTypeId) { - // Insert the data. - $query->clear(); - $query->insert($db->quoteName('#__content_types')); - $query->columns($columnsArray); - $query->values( - $db->quote('Weblink') . ', ' - . $db->quote('com_weblinks.weblink') . ', ' - . $db->quote( - '{"special":{"dbtable":"#__weblinks","key":"id","type":"Weblink","prefix":"WeblinksTable","config":"array()"}, - "common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}' - ) . ', ' - . $db->quote('') . ', ' - . $db->quote( - '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias", - "core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits", - "core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", - "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"url", - "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", - "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special":{}}' - ) . ', ' - . $db->quote('WeblinksHelperRoute::getWeblinkRoute') . ', ' - . $db->quote( - '{"formFile":"administrator\\/components\\/com_weblinks\\/models\\/forms\\/weblink.xml", - "hideFields":["asset_id","checked_out","checked_out_time","version","featured","images"], "ignoreChanges":["modified_by", - "modified", "checked_out", "checked_out_time", "version", "hits"], "convertToInt":["publish_up", "publish_down", "featured", - "ordering"], "displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}, - {"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, - {"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"}, - {"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ]}' - ) - ); + foreach ($fieldsToTry as $field) { + $upd = $db->getQuery(true) + ->update($db->quoteName('#__content_types')) + ->set($db->quoteName($field) . ' = ' . $db->quote($json)) + ->where($db->quoteName('type_id') . ' = ' . $db->quote($typeId)); - $db->setQuery($query); - $db->execute(); - } + $db->setQuery($upd); - // If we have no type id for com_weblinks.category insert it - if (!$categoryTypeId) { - // Insert the data. - $query->clear(); - $query->insert($db->quoteName('#__content_types')); - $query->columns($columnsArray); - $query->values( - $db->quote('Weblinks Category') . ', ' - . $db->quote('com_weblinks.category') . ', ' - . $db->quote(' - {"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"}, - "common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}') . ', ' - . $db->quote('') . ', ' - . $db->quote(' - {"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias", - "core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", - "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", - "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", - "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", - "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, - "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}') . ', ' - . $db->quote('WeblinksHelperRoute::getCategoryRoute') . ', ' - . $db->quote(' - {"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", - "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], - "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", - "hits", "path"],"convertToInt":["publish_up", "publish_down"], - "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id", - "displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id", - "displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id", - "displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id", - "displayColumn":"title"}]}') - ); + try { + $db->execute(); - $db->setQuery($query); - $db->execute(); + return true; + } catch (\RuntimeException $e) { + // try next field + } } + + return false; } /** - * Method to drop columns from #__weblinks if they still there. - * - * @return void + * Insert a content type row. * - * @since 3.4.1 + * @param DatabaseInterface $db + * @param string $alias + * @param string $title + * @param string $json + * @return void */ - private function dropColumnsIfNeeded() + private function insertContentTypeRow(DatabaseInterface $db, string $alias, string $title, string $json): void { - $oldColumns = [ - 'sid', - 'date', - 'archived', - 'approved', - ]; - - $db = $this->getDatabase(); - $table = $db->getTableColumns('#__weblinks'); - - $columns = array_intersect($oldColumns, array_keys($table)); - - foreach ($columns as $column) { - $sql = 'ALTER TABLE ' . $db->quoteName('#__weblinks') . ' DROP COLUMN ' . $db->quoteName($column); - $db->setQuery($sql); + $ins = $db->getQuery(true) + ->insert($db->quoteName('#__content_types')) + ->columns([ + $db->quoteName('created_user_id'), + $db->quoteName('created_time'), + $db->quoteName('modified_user_id'), + $db->quoteName('modified_time'), + $db->quoteName('type_alias'), + $db->quoteName('type_title'), + $db->quoteName('rules'), + ]) + ->values(implode(',', [ + (int) 0, + $db->quote(date('Y-m-d H:i:s')), + (int) 0, + $db->quote(date('Y-m-d H:i:s')), + $db->quote($alias), + $db->quote($title), + $db->quote($json), + ])); + + $db->setQuery($ins); + + try { $db->execute(); + } catch (\RuntimeException $e) { + // Intentionally not throwing to avoid breaking installation process. } } /** - * Method to add columns from #__weblinks if they are missing. + * Replace the content type row as a last resort. * - * @return void - * - * @since 3.4.1 + * @param DatabaseInterface $db + * @param string $alias + * @param string $title + * @param string $json + * @return void */ - private function addColumnsIfNeeded() + private function replaceContentTypeRow(DatabaseInterface $db, string $alias, string $title, string $json): void { - $db = $this->getDatabase(); - $table = $db->getTableColumns('#__weblinks'); + $replace = 'REPLACE INTO ' . $db->quoteName('#__content_types') + . ' (type_alias, type_title, rules) VALUES (' + . $db->quote($alias) . ', ' + . $db->quote($title) . ', ' + . $db->quote($json) . ')'; - if (!\array_key_exists('version', $table)) { - $sql = 'ALTER TABLE ' . $db->quoteName('#__weblinks') . ' ADD COLUMN ' . $db->quoteName('version') . " int unsigned NOT NULL DEFAULT '1'"; - $db->setQuery($sql); - $db->execute(); - } + $db->setQuery($replace); - if (!\array_key_exists('images', $table)) { - $sql = 'ALTER TABLE ' . $db->quoteName('#__weblinks') . ' ADD COLUMN ' . $db->quoteName('images') . ' text NOT NULL'; - $db->setQuery($sql); + try { $db->execute(); + } catch (\RuntimeException $e) { + // Skip failure. } } -} +} \ No newline at end of file diff --git a/src/administrator/components/com_weblinks/sql/install.mysql.sql b/src/administrator/components/com_weblinks/sql/install.mysql.sql index 937cbf15f6b..85666d3d162 100644 --- a/src/administrator/components/com_weblinks/sql/install.mysql.sql +++ b/src/administrator/components/com_weblinks/sql/install.mysql.sql @@ -3,8 +3,8 @@ -- INSERT INTO `#__content_types` (`type_title`, `type_alias`, `table`, `rules`, `field_mappings`, `router`, `content_history_options`) VALUES -('Weblink', 'com_weblinks.weblink', '{"special":{"dbtable":"#__weblinks","key":"id","type":"Weblink","prefix":"WeblinksTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"url", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special":{}}', 'WeblinksHelperRoute::getWeblinkRoute', '{"formFile":"administrator\\/components\\/com_weblinks\\/models\\/forms\\/weblink.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","featured","images"], "ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"], "convertToInt":["publish_up", "publish_down", "featured", "ordering"], "displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ]}'), -('Weblinks Category', 'com_weblinks.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}', 'WeblinksHelperRoute::getCategoryRoute', '{"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}'); +('Weblink', 'com_weblinks.weblink', '{"special":{"dbtable":"#__weblinks","key":"id","type":"WeblinkTable","prefix":"Joomla\\Component\\Weblinks\\Administrator\\Table\\","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"Joomla\\CMS\\Table\\","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"url", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special":{}}', 'WeblinksHelperRoute::getWeblinkRoute', '{"formFile":"administrator\\/components\\/com_weblinks\\/models\\/forms\\/weblink.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","featured","images"], "ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"], "convertToInt":["publish_up", "publish_down", "featured", "ordering"], "displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ]}'), +('Weblinks Category', 'com_weblinks.category', '{"special":{"dbtable":"#__categories","key":"id","type":"CategoryTable","prefix":"Joomla\\Component\\Categories\\Administrator\\Table\\","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"Joomla\\CMS\\Table\\","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}', 'WeblinksHelperRoute::getCategoryRoute', '{"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}'); -- -- Table structure for table `#__weblinks` diff --git a/src/administrator/components/com_weblinks/sql/install.postgresql.sql b/src/administrator/components/com_weblinks/sql/install.postgresql.sql index bd8c110ca03..448c7a26791 100644 --- a/src/administrator/components/com_weblinks/sql/install.postgresql.sql +++ b/src/administrator/components/com_weblinks/sql/install.postgresql.sql @@ -2,8 +2,8 @@ -- Insert data into table #__content_types for UCM functions -- INSERT INTO "#__content_types" ("type_title", "type_alias", "table", "rules", "field_mappings", "router", "content_history_options") VALUES -('Weblink', 'com_weblinks.weblink', '{"special":{"dbtable":"#__weblinks","key":"id","type":"Weblink","prefix":"WeblinksTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special":{}}', 'WeblinksHelperRoute::getWeblinkRoute', '{"formFile":"administrator\\/components\\/com_weblinks\\/models\\/forms\\/weblink.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","featured","images"], "ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"], "convertToInt":["publish_up", "publish_down", "featured", "ordering"], "displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ]}'), -('Weblinks Category', 'com_weblinks.category', '{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}', 'WeblinksHelperRoute::getCategoryRoute', '{"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}'); +('Weblink', 'com_weblinks.weblink', '{"special":{"dbtable":"#__weblinks","key":"id","type":"WeblinkTable","prefix":"Joomla\\Component\\Weblinks\\Administrator\\Table\\","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"Joomla\\CMS\\Table\\","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"urls", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special":{}}', 'WeblinksHelperRoute::getWeblinkRoute', '{"formFile":"administrator\\/components\\/com_weblinks\\/models\\/forms\\/weblink.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","featured","images"], "ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"], "convertToInt":["publish_up", "publish_down", "featured", "ordering"], "displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ]}'), +('Weblinks Category', 'com_weblinks.category', '{"special":{"dbtable":"#__categories","key":"id","type":"CategoryTable","prefix":"Joomla\\Component\\Categories\\Administrator\\Table\\","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"Joomla\\CMS\\Table\\","config":"array()"}}', '', '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}', 'WeblinksHelperRoute::getCategoryRoute', '{"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}'); -- -- Table: #__weblinks diff --git a/src/administrator/components/com_weblinks/sql/updates/mysql/5.0.1.sql b/src/administrator/components/com_weblinks/sql/updates/mysql/5.0.1.sql new file mode 100644 index 00000000000..312da4f4a21 --- /dev/null +++ b/src/administrator/components/com_weblinks/sql/updates/mysql/5.0.1.sql @@ -0,0 +1,15 @@ +UPDATE `#__content_types` +SET `table` = JSON_SET(`table`, + '$.special.type', 'WeblinkTable', + '$.special.prefix', 'Joomla\\Component\\Weblinks\\Administrator\\Table\\', + '$.dbtable.prefix', 'Joomla\\CMS\\Table\\' +) +WHERE `type_alias` = 'com_weblinks.weblink'; + +UPDATE `#__content_types` +SET `table` = JSON_SET(`table`, + '$.special.type', 'CategoryTable', + '$.special.prefix', 'Joomla\\Component\\Categories\\Administrator\\Table\\', + '$.dbtable.prefix', 'Joomla\\CMS\\Table\\' +) +WHERE `type_alias` = 'com_weblinks.category'; diff --git a/src/administrator/components/com_weblinks/sql/updates/postgresql/5.0.1.sql b/src/administrator/components/com_weblinks/sql/updates/postgresql/5.0.1.sql new file mode 100644 index 00000000000..fa4a8406fa2 --- /dev/null +++ b/src/administrator/components/com_weblinks/sql/updates/postgresql/5.0.1.sql @@ -0,0 +1,15 @@ +UPDATE "#__content_types" +SET "table" = jsonb_set( + jsonb_set("table"::jsonb, '{special,type}', '"WeblinkTable"'), + '{special,prefix}', '"Joomla\\Component\\Weblinks\\Administrator\\Table\\"', + '{dbtable,prefix}', '"Joomla\\CMS\\Table\\"' +) +WHERE "type_alias" = 'com_weblinks.weblink'; + +UPDATE "#__content_types" +SET "table" = jsonb_set( + jsonb_set("table"::jsonb, '{special,type}', '"CategoryTable"'), + '{special,prefix}', '"Joomla\\Component\\Categories\\Administrator\\Table\\"', + '{dbtable,prefix}', '"Joomla\\CMS\\Table\\"' +) +WHERE "type_alias" = 'com_weblinks.category';