From 7d41f219e1c87ed7d6e946a4ab52c170a0223353 Mon Sep 17 00:00:00 2001 From: MacWarrior Date: Thu, 29 Feb 2024 16:45:10 +0100 Subject: [PATCH] Installation : Fix SQL queries --------- Co-authored-by: clement-sanz --- upload/admin_area/category.php | 26 ++++++++----- .../styles/cb_2014/layout/category.html | 2 +- upload/cb_install/sql/5.5.0/00331.sql | 39 +++++++++---------- upload/cb_install/sql/5.5.0/00367.sql | 27 ++++++++----- upload/cb_install/sql/5.5.0/00376.sql | 18 +++++++++ upload/cb_install/sql/language_ENG.sql | 4 ++ upload/cb_install/sql/language_FRA.sql | 4 ++ upload/cb_install/sql/languages.sql | 4 +- upload/changelog/550.json | 2 +- upload/includes/classes/admin_tool.class.php | 36 +++++++++-------- upload/includes/classes/category.class.php | 17 ++++++++ upload/includes/classes/db.class.php | 13 +++++-- upload/includes/classes/update.class.php | 6 ++- upload/includes/functions_db.php | 6 +++ 14 files changed, 142 insertions(+), 62 deletions(-) create mode 100644 upload/cb_install/sql/5.5.0/00376.sql diff --git a/upload/admin_area/category.php b/upload/admin_area/category.php index 0750e4ce9..892fa39da 100644 --- a/upload/admin_area/category.php +++ b/upload/admin_area/category.php @@ -10,15 +10,21 @@ $type = $_GET['type'] ?? 'video'; assign('type', $type); -assign('display_type', $type .'s'); +assign('display_type', $type . 's'); /* Generating breadcrumb */ global $breadcrumb; -$breadcrumb[0] = ['title' => lang($type.'s'), 'url' => '']; -$breadcrumb[1] = ['title' => lang('manage_categories'), 'url' => DirPath::getUrl('admin_area') . 'category.php?type=' . $type]; +$breadcrumb[0] = [ + 'title' => lang($type . 's'), + 'url' => '' +]; +$breadcrumb[1] = [ + 'title' => lang('manage_categories'), + 'url' => DirPath::getUrl('admin_area') . 'category.php?type=' . $type +]; $version = Update::getInstance()->getDBVersion(); -if( !($version['version'] > '5.5.0' || ($version['version'] == '5.5.0' && $version['revision'] >= 323)) ) { - e('Your database is not up-to-date. Please update your database via this link : '.lang('update').'', 'e', false); +if (!($version['version'] > '5.5.0' || ($version['version'] == '5.5.0' && $version['revision'] >= 323))) { + e('Your database is not up-to-date. Please update your database via this link : ' . lang('update') . '', 'e', false); } else { //Making Category as Default if (isset($_GET['make_default'])) { @@ -32,7 +38,7 @@ 'category_type' => Category::getInstance()->getIdsCategoriesType($type), 'condition' => 'category_name like \'%' . mysql_clean($_POST['category_name']) . '%\'', 'first_only' => true - ])) && ($_POST['cur_name'] != $_POST['category_name']) ) { + ])) && ($_POST['cur_name'] != $_POST['category_name'])) { e(lang('add_cat_erro')); } elseif (!empty($_POST['category_id'])) { $id_category = $_POST['category_id']; @@ -42,7 +48,9 @@ } else { $params = $_POST; $params['id_category_type'] = Category::getInstance()->getIdsCategoriesType($type); - $id_category = Category::getInstance()->insert($params); + $next_order_place = Category::getInstance()->getNextOrderForParent($type, $_POST['parent_id']); + $params['category_order'] = $next_order_place; + Category::getInstance()->insert($params); } if (!empty($_FILES['category_thumb']['tmp_name'])) { @@ -63,7 +71,7 @@ } else { $breadcrumb[2] = [ 'title' => 'Editing : ' . display_clean($cat_details['category_name']), - 'url' => DirPath::getUrl('admin_area') . 'category.php?type=' . $type.'&category=' . display_clean($id_category) + 'url' => DirPath::getUrl('admin_area') . 'category.php?type=' . $type . '&category=' . display_clean($id_category) ]; } } @@ -77,7 +85,7 @@ if (isset($_POST['update_order'])) { foreach ($_POST['category_order'] as $key => $item) { Category::getInstance()->update([ - 'category_id' => $key, + 'category_id' => $key, 'category_order' => $item ]); } diff --git a/upload/admin_area/styles/cb_2014/layout/category.html b/upload/admin_area/styles/cb_2014/layout/category.html index 852ceb548..c29b4acd5 100644 --- a/upload/admin_area/styles/cb_2014/layout/category.html +++ b/upload/admin_area/styles/cb_2014/layout/category.html @@ -49,7 +49,7 @@

{lang($display_type)|capitalize} Categories
- +
diff --git a/upload/cb_install/sql/5.5.0/00331.sql b/upload/cb_install/sql/5.5.0/00331.sql index e49afcede..1a6d8c4a4 100644 --- a/upload/cb_install/sql/5.5.0/00331.sql +++ b/upload/cb_install/sql/5.5.0/00331.sql @@ -8,12 +8,12 @@ CREATE TABLE IF NOT EXISTS `{tbl_prefix}categories` `category_desc` TEXT NULL DEFAULT NULL, `date_added` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `category_thumb` MEDIUMTEXT NULL, - `is_default` ENUM ('yes','no') NOT NULL DEFAULT 'no' + `is_default` ENUM ('yes','no') NOT NULL DEFAULT 'no', + `old_category_id` INT(255) NULL ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_unicode_520_ci; -ALTER TABLE `{tbl_prefix}categories` - ADD CONSTRAINT `categorie_parent` FOREIGN KEY IF NOT EXISTS (`parent_id`) REFERENCES `{tbl_prefix}categories` (`category_id`) ON DELETE NO ACTION ON UPDATE NO ACTION; + ALTER TABLE `{tbl_prefix}categories` ADD FULLTEXT KEY `categorie` (`category_name`); CREATE TABLE IF NOT EXISTS `{tbl_prefix}categories_type` @@ -111,8 +111,8 @@ SET @type_category = ( FROM `{tbl_prefix}categories_type` WHERE name LIKE 'collection' ); -INSERT IGNORE INTO `{tbl_prefix}categories` (id_category_type, parent_id, category_name, category_order, category_desc, date_added, category_thumb, is_default) ( - SELECT @type_category, CASE WHEN parent_id != 0 THEN (CASE WHEN parent_id = category_id THEN NULL ELSE parent_id + @id_categ END) ELSE NULL END, category_name, category_order, category_desc, date_added, category_thumb, isdefault +INSERT IGNORE INTO `{tbl_prefix}categories` (id_category_type, parent_id, category_name, category_order, category_desc, date_added, category_thumb, is_default, old_category_id) ( + SELECT @type_category, CASE WHEN parent_id = '0' THEN NULL ELSE parent_id END, category_name, category_order, category_desc, date_added, category_thumb, isdefault, category_id FROM `{tbl_prefix}collection_categories` WHERE 1 ); @@ -143,14 +143,9 @@ SET @type_category = ( FROM `{tbl_prefix}categories_type` WHERE name LIKE 'video' ); -SET @id_categ = ( - SELECT max(category_id) - FROM `{tbl_prefix}categories` - WHERE 1 -); -INSERT IGNORE INTO `{tbl_prefix}categories` (id_category_type, parent_id, category_name, category_order, category_desc, date_added, category_thumb, is_default) ( - SELECT @type_category, CASE WHEN parent_id != 0 THEN parent_id + @id_categ ELSE NULL END, category_name, category_order, category_desc, date_added, category_thumb, isdefault +INSERT IGNORE INTO `{tbl_prefix}categories` (id_category_type, parent_id, category_name, category_order, category_desc, date_added, category_thumb, is_default, old_category_id) ( + SELECT @type_category, CASE WHEN parent_id = '0' THEN NULL ELSE parent_id END , category_name, category_order, category_desc, date_added, category_thumb, isdefault, category_id FROM `{tbl_prefix}video_categories` WHERE 1 ); @@ -161,7 +156,7 @@ INSERT IGNORE INTO `{tbl_prefix}videos_categories` (`id_category`, `id_video`) UNION ALL SELECT n + 1 FROM NumberSequence - WHERE n < (SELECT COUNT(*) FROM `{tbl_prefix}collection_categories`) + WHERE n < (SELECT COUNT(*) FROM `{tbl_prefix}video_categories`) ) SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(V.category, '#', seq.n+1), '#', -1) + @id_categ AS extracted_number @@ -188,12 +183,6 @@ SET @type_category = ( WHERE name LIKE 'user' ); -SET @id_categ = ( - SELECT max(category_id) - FROM `{tbl_prefix}categories` - WHERE 1 -); - INSERT IGNORE INTO `{tbl_prefix}categories` (id_category_type, parent_id, category_name, category_order, category_desc, date_added, category_thumb, is_default) ( SELECT @type_category, NULL, category_name, category_order, category_desc, date_added, category_thumb, isdefault FROM `{tbl_prefix}user_categories` @@ -206,7 +195,7 @@ INSERT IGNORE INTO `{tbl_prefix}users_categories` (`id_category`, `id_user`) UNION ALL SELECT n + 1 FROM NumberSequence - WHERE n < (SELECT COUNT(*) FROM `{tbl_prefix}collection_categories`) + WHERE n < (SELECT COUNT(*) FROM `{tbl_prefix}user_categories`) ) SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(U.category, '#', seq.n+1), '#', -1) + @id_categ AS extracted_number @@ -220,6 +209,16 @@ INSERT IGNORE INTO `{tbl_prefix}users_categories` (`id_category`, `id_user`) AND SUBSTRING_INDEX(SUBSTRING_INDEX(U.category, '#', seq.n+1), '#', -1) != '' ; +UPDATE `{tbl_prefix}categories` C + INNER JOIN `{tbl_prefix}categories` CP ON CP.old_category_id = C.parent_id AND CP.id_category_type = C.id_category_type +SET C.parent_id = CP.category_id +WHERE C.parent_id != 0 AND C.parent_id IS NOT NULL; + +ALTER TABLE `{tbl_prefix}categories` + ADD CONSTRAINT `categorie_parent` FOREIGN KEY IF NOT EXISTS (`parent_id`) REFERENCES `{tbl_prefix}categories` (`category_id`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +ALTER TABLE `{tbl_prefix}categories` DROP COLUMN IF EXISTS `old_category_id`; + ALTER TABLE `{tbl_prefix}collections` DROP COLUMN IF EXISTS `category`; ALTER TABLE `{tbl_prefix}playlists` DROP COLUMN IF EXISTS `category`; ALTER TABLE `{tbl_prefix}users` DROP COLUMN IF EXISTS `category`; diff --git a/upload/cb_install/sql/5.5.0/00367.sql b/upload/cb_install/sql/5.5.0/00367.sql index 30040dfc4..929a56115 100644 --- a/upload/cb_install/sql/5.5.0/00367.sql +++ b/upload/cb_install/sql/5.5.0/00367.sql @@ -1,5 +1,5 @@ -ALTER TABLE `{tbl_prefix}tools_status` RENAME `{tbl_prefix}tools_histo_status`; -ALTER TABLE `{tbl_prefix}tools_histo_status` RENAME COLUMN `id_tools_status` TO `id_tools_histo_status`; +ALTER TABLE IF EXISTS `{tbl_prefix}tools_status` RENAME `{tbl_prefix}tools_histo_status`; +ALTER TABLE `{tbl_prefix}tools_histo_status` RENAME COLUMN IF EXISTS `id_tools_status` TO `id_tools_histo_status`; SET @constraint_name = (SELECT CONSTRAINT_NAME FROM information_schema.key_column_usage @@ -7,12 +7,15 @@ SET @constraint_name = (SELECT CONSTRAINT_NAME AND TABLE_NAME = '{tbl_prefix}tools' AND REFERENCED_TABLE_NAME IS NOT NULL); -SET @sql = 'ALTER TABLE `{tbl_prefix}tools` DROP FOREIGN KEY @constraint_name;'; +SET @sql = 'ALTER TABLE `{tbl_prefix}tools` DROP FOREIGN KEY IF EXISTS @constraint_name;'; SET @sql = REPLACE(@sql, '@constraint_name', @constraint_name); - PREPARE alterTable FROM @sql; EXECUTE alterTable; -ALTER TABLE `{tbl_prefix}tools` DROP COLUMN id_tools_status, DROP COLUMN elements_total, DROP COLUMN elements_done; + +ALTER TABLE `{tbl_prefix}tools` + DROP COLUMN IF EXISTS id_tools_status, + DROP COLUMN IF EXISTS elements_total, + DROP COLUMN IF EXISTS elements_done; CREATE TABLE IF NOT EXISTS `{tbl_prefix}tools_histo` ( @@ -29,8 +32,8 @@ CREATE TABLE IF NOT EXISTS `{tbl_prefix}tools_histo` COLLATE utf8mb4_unicode_520_ci; ALTER TABLE `{tbl_prefix}tools_histo` - ADD CONSTRAINT `id_tools_histo` FOREIGN KEY (`id_tool`) REFERENCES `{tbl_prefix}tools` (`id_tool`) ON DELETE NO ACTION ON UPDATE NO ACTION, - ADD CONSTRAINT `id_tools_histo_status` FOREIGN KEY (`id_tools_histo_status`) REFERENCES `{tbl_prefix}tools_histo_status` (`id_tools_histo_status`) ON DELETE NO ACTION ON UPDATE NO ACTION; + ADD CONSTRAINT `id_tools_histo` FOREIGN KEY IF NOT EXISTS (`id_tool`) REFERENCES `{tbl_prefix}tools` (`id_tool`) ON DELETE NO ACTION ON UPDATE NO ACTION, + ADD CONSTRAINT `id_tools_histo_status` FOREIGN KEY IF NOT EXISTS (`id_tools_histo_status`) REFERENCES `{tbl_prefix}tools_histo_status` (`id_tools_histo_status`) ON DELETE NO ACTION ON UPDATE NO ACTION; CREATE TABLE IF NOT EXISTS `{tbl_prefix}tools_histo_log` ( @@ -44,7 +47,7 @@ CREATE TABLE IF NOT EXISTS `{tbl_prefix}tools_histo_log` COLLATE utf8mb4_unicode_520_ci; ALTER TABLE `{tbl_prefix}tools_histo_log` - ADD CONSTRAINT `id_tools_histo_log` FOREIGN KEY (`id_histo`) REFERENCES `{tbl_prefix}tools_histo` (`id_histo`) ON DELETE NO ACTION ON UPDATE NO ACTION; + ADD CONSTRAINT `id_tools_histo_log` FOREIGN KEY IF NOT EXISTS (`id_histo`) REFERENCES `{tbl_prefix}tools_histo` (`id_histo`) ON DELETE NO ACTION ON UPDATE NO ACTION; UPDATE `{tbl_prefix}tools` SET function_name = REPLACE(function_name, 'AdminTool::', ''); @@ -69,7 +72,13 @@ VALUES (@id_language_key, 'Afficher les derniers journaux', @language_id_fra); ALTER TABLE `{tbl_prefix}tools` ADD COLUMN IF NOT EXISTS `code` VARCHAR(32) NOT NULL; UPDATE `{tbl_prefix}tools` SET `code` = REPLACE( language_key_label,'_label', ''); -ALTER TABLE `{tbl_prefix}tools` ADD UNIQUE(`code`); +DELETE FROM `{tbl_prefix}tools` + WHERE `id_tool` NOT IN( + SELECT MIN(`id_tool`) + FROM `{tbl_prefix}tools` + GROUP BY `code` + ); +ALTER TABLE `{tbl_prefix}tools` ADD UNIQUE IF NOT EXISTS(`code`); SET @language_key = 'tool_started' COLLATE utf8mb4_unicode_520_ci; INSERT IGNORE INTO `{tbl_prefix}languages_keys` (`language_key`) VALUES (@language_key); diff --git a/upload/cb_install/sql/5.5.0/00376.sql b/upload/cb_install/sql/5.5.0/00376.sql new file mode 100644 index 000000000..0206dc8b3 --- /dev/null +++ b/upload/cb_install/sql/5.5.0/00376.sql @@ -0,0 +1,18 @@ +SET @language_id_eng = (SELECT `language_id` FROM `{tbl_prefix}languages` WHERE language_code = 'en'); +SET @language_id_fra = (SELECT `language_id` FROM `{tbl_prefix}languages` WHERE language_code = 'fr'); + +SET @language_key = 'update_category' COLLATE utf8mb4_unicode_520_ci; +INSERT IGNORE INTO `{tbl_prefix}languages_keys` (`language_key`) VALUES (@language_key); +SET @id_language_key = (SELECT id_language_key FROM `{tbl_prefix}languages_keys` WHERE `language_key` COLLATE utf8mb4_unicode_520_ci = @language_key); +INSERT IGNORE INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translation`, `language_id`) +VALUES (@id_language_key, 'Update category', @language_id_eng); +INSERT IGNORE INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translation`, `language_id`) +VALUES (@id_language_key, 'Mettre à jour la catégorie', @language_id_fra); + +SET @language_key = 'add_new_category' COLLATE utf8mb4_unicode_520_ci; +INSERT IGNORE INTO `{tbl_prefix}languages_keys` (`language_key`) VALUES (@language_key); +SET @id_language_key = (SELECT id_language_key FROM `{tbl_prefix}languages_keys` WHERE `language_key` COLLATE utf8mb4_unicode_520_ci = @language_key); +INSERT IGNORE INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translation`, `language_id`) +VALUES (@id_language_key, 'Add new category', @language_id_eng); +INSERT IGNORE INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translation`, `language_id`) +VALUES (@id_language_key, 'Ajouter une nouvelle catégorie', @language_id_fra); diff --git a/upload/cb_install/sql/language_ENG.sql b/upload/cb_install/sql/language_ENG.sql index 36565a4b0..d3af4cbbd 100644 --- a/upload/cb_install/sql/language_ENG.sql +++ b/upload/cb_install/sql/language_ENG.sql @@ -2229,3 +2229,7 @@ INSERT INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translatio VALUES ((SELECT id_language_key FROM `{tbl_prefix}languages_keys` WHERE `language_key` = 'select_as_default_x'), 'Select as default %s', @language_id); INSERT INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translation`, `language_id`) VALUES ((SELECT id_language_key FROM `{tbl_prefix}languages_keys` WHERE `language_key` = 'enable_x_field'), 'Enable %s field', @language_id); +INSERT INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translation`, `language_id`) +VALUES ((SELECT id_language_key FROM `{tbl_prefix}languages_keys` WHERE `language_key` = 'update_category'), 'Update category', @language_id); +INSERT INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translation`, `language_id`) +VALUES ((SELECT id_language_key FROM `{tbl_prefix}languages_keys` WHERE `language_key` = 'add_new_category'), 'Add new category', @language_id); diff --git a/upload/cb_install/sql/language_FRA.sql b/upload/cb_install/sql/language_FRA.sql index d878518f6..6a7e6e532 100644 --- a/upload/cb_install/sql/language_FRA.sql +++ b/upload/cb_install/sql/language_FRA.sql @@ -1391,3 +1391,7 @@ INSERT INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translatio VALUES ((SELECT id_language_key FROM `{tbl_prefix}languages_keys` WHERE `language_key` = 'select_as_default_x'), 'Sélectionner comme %s par défaut', @language_id); INSERT INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translation`, `language_id`) VALUES ((SELECT id_language_key FROM `{tbl_prefix}languages_keys` WHERE `language_key` = 'enable_x_field'), 'Activer le champ %s', @language_id); +INSERT INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translation`, `language_id`) +VALUES ((SELECT id_language_key FROM `{tbl_prefix}languages_keys` WHERE `language_key` = 'update_category'), 'Mettre à jour la catégorie', @language_id); +INSERT INTO `{tbl_prefix}languages_translations` (`id_language_key`, `translation`, `language_id`) +VALUES ((SELECT id_language_key FROM `{tbl_prefix}languages_keys` WHERE `language_key` = 'add_new_category'), 'Ajouter une nouvelle catégorie', @language_id); diff --git a/upload/cb_install/sql/languages.sql b/upload/cb_install/sql/languages.sql index a2d4387b4..b2d21e8fb 100644 --- a/upload/cb_install/sql/languages.sql +++ b/upload/cb_install/sql/languages.sql @@ -1119,4 +1119,6 @@ VALUES ('admin_setting'), ('default_x'), ('option_require_x_enabled'), ('select_as_default_x'), - ('enable_x_field'); + ('enable_x_field'), + ('update_category'), + ('add_new_category'); diff --git a/upload/changelog/550.json b/upload/changelog/550.json index cfcfda18d..7c3700adc 100644 --- a/upload/changelog/550.json +++ b/upload/changelog/550.json @@ -1,6 +1,6 @@ { "version":"5.5.0", - "revision":"375", + "revision":"376", "status":"dev", "detail":[ { diff --git a/upload/includes/classes/admin_tool.class.php b/upload/includes/classes/admin_tool.class.php index eba196a7d..672bfd0c0 100644 --- a/upload/includes/classes/admin_tool.class.php +++ b/upload/includes/classes/admin_tool.class.php @@ -81,27 +81,27 @@ public static function getTools(array $condition = []): array if (Update::IsCurrentDBVersionIsHigherOrEqualTo(self::MIN_VERSION_CODE, self::MIN_REVISION_CODE)) { $sql = 'SELECT tools.id_tool, language_key_label, language_key_description, elements_total, elements_done, COALESCE(NULLIF(language_key_title, \'\'), \'ready\') as language_key_title, function_name, CASE WHEN elements_total IS NULL OR elements_total = 0 THEN 0 ELSE elements_done * 100 / elements_total END AS pourcentage_progress, tools_histo.id_histo - FROM ' . cb_sql_table("tools") . ' + FROM ' . cb_sql_table('tools') . ' LEFT JOIN ( SELECT id_tool, MAX(date_start) AS max_date FROM ' . tbl('tools_histo') . ' GROUP BY id_tool ) tools_histo_max_date ON tools.id_tool = tools_histo_max_date.id_tool - LEFT JOIN ' . cb_sql_table("tools_histo") . ' ON tools.id_tool = tools_histo.id_tool AND tools_histo.date_start = tools_histo_max_date.max_date - left JOIN ' . cb_sql_table("tools_histo_status") . ' ON tools_histo_status.id_tools_histo_status = tools_histo.id_tools_histo_status + LEFT JOIN ' . cb_sql_table('tools_histo') . ' ON tools.id_tool = tools_histo.id_tool AND tools_histo.date_start = tools_histo_max_date.max_date + left JOIN ' . cb_sql_table('tools_histo_status') . ' ON tools_histo_status.id_tools_histo_status = tools_histo.id_tools_histo_status WHERE (tools_histo.id_tool IS NOT NULL OR tools_histo_max_date.id_tool IS NULL) ' . (!empty($where) ? 'AND ' . $where : '') . ' ORDER BY tools.id_tool;'; return Clipbucket_db::getInstance()->_select($sql); - } else { - $select = cb_sql_table("tools") . ' - LEFT JOIN ' . cb_sql_table("tools_status") . ' ON tools_status.id_tools_status = tools.id_tools_status'; - return Clipbucket_db::getInstance()->select($select, 'id_tool, language_key_label, language_key_description, elements_total, elements_done, language_key_title, function_name, - CASE WHEN elements_total IS NULL OR elements_total = 0 THEN 0 ELSE elements_done * 100 / elements_total END AS pourcentage_progress' - , $where - ); } + + $select = cb_sql_table('tools') . ' + LEFT JOIN ' . cb_sql_table('tools_status') . ' ON tools_status.id_tools_status = tools.id_tools_status'; + return Clipbucket_db::getInstance()->select($select, 'id_tool, language_key_label, language_key_description, elements_total, elements_done, language_key_title, function_name, + CASE WHEN elements_total IS NULL OR elements_total = 0 THEN 0 ELSE elements_done * 100 / elements_total END AS pourcentage_progress' + , $where + ); } /** @@ -227,7 +227,6 @@ public function repairVideoDuration() */ public function updateDataBaseVersion() { - $update = Update::getInstance(); $files = $update->getUpdateFiles(); @@ -237,6 +236,8 @@ public function updateDataBaseVersion() //update to current revision $sql = 'INSERT INTO ' . tbl('version') . ' SET version = \'' . mysql_clean(VERSION) . '\' , revision = ' . mysql_clean(REV) . ', id = 1 ON DUPLICATE KEY UPDATE version = \'' . mysql_clean(VERSION) . '\' , revision = ' . mysql_clean(REV); Clipbucket_db::getInstance()->mysqli->query($sql); + CacheRedis::flushAll(); + Update::getInstance()->flush(); } $this->array_loop = $files; $this->executeTool('execute_migration_SQL_file', true); @@ -420,7 +421,6 @@ public function cleanOrphanFiles() foreach ($empty_folders as $folder) { delete_empty_directories($folder); } - } /** @@ -551,7 +551,9 @@ public static function getTemp() */ public function addLog(string $msg) { - Clipbucket_db::getInstance()->insert(tbl('tools_histo_log'), ['id_histo', 'datetime', 'message'], [mysql_clean($this->id_histo), '|f|NOW()', $msg]); + if( !empty($this->id_histo) ){ + Clipbucket_db::getInstance()->insert(tbl('tools_histo_log'), ['id_histo', 'datetime', 'message'], [mysql_clean($this->id_histo), '|f|NOW()', $msg]); + } } /** @@ -559,7 +561,7 @@ public function addLog(string $msg) * @return array * @throws Exception */ - public function getLastLogs(int $max_id = 0) + public function getLastLogs(int $max_id = 0): array { $logs = Clipbucket_db::getInstance()->select(tbl('tools_histo_log'), 'datetime ,message', ' id_histo = ' . (!empty($this->id_histo) ? mysql_clean($this->id_histo) : '0') . ' AND id_log > ' . mysql_clean($max_id)); $max_id_log = Clipbucket_db::getInstance()->select(tbl('tools_histo_log'), 'MAX(id_log) as max_id_log', ' id_histo = ' . (!empty($this->id_histo) ? mysql_clean($this->id_histo) : '0')); @@ -577,7 +579,9 @@ public function getLastLogs(int $max_id = 0) */ private function updateToolHisto(array $fields, array $values) { - Clipbucket_db::getInstance()->update(tbl('tools_histo'), $fields, $values, 'id_tool = ' . mysql_clean($this->id_tool) . ' AND id_histo = ' . mysql_clean($this->id_histo)); + if( !empty($this->id_histo) ){ + Clipbucket_db::getInstance()->update(tbl('tools_histo'), $fields, $values, 'id_tool = ' . mysql_clean($this->id_tool) . ' AND id_histo = ' . mysql_clean($this->id_histo)); + } } @@ -593,7 +597,6 @@ public function recalculVideoFile() } /** - * @param $id_tool * @return void * @throws Exception */ @@ -605,7 +608,6 @@ public function cleanSessionTable() } /** - * @param $id_tool * @return void * @throws Exception */ diff --git a/upload/includes/classes/category.class.php b/upload/includes/classes/category.class.php index 11fffccd5..51673b3b4 100644 --- a/upload/includes/classes/category.class.php +++ b/upload/includes/classes/category.class.php @@ -510,6 +510,23 @@ private function setSQLValues(array $param): array return $sets; } + /** + * @param $type + * @param $parent_id + * @return int|mixed + * @throws Exception + */ + public function getNextOrderForParent($type, $parent_id): int + { + $categ_type_id = $this->getIdsCategoriesType($type); + $sql = 'SELECT MAX(category_order) + 1 AS next_order_place FROM ' . tbl($this->tablename) . ' + WHERE id_category_type = ' . mysql_clean($categ_type_id) . ' AND parent_id ' . ((empty($parent_id) || $parent_id == 'null') ? ' IS NULL ' : ' = ' . mysql_clean($parent_id)); + $results = Clipbucket_db::getInstance()->_select($sql); + if (!empty($results[0]['next_order_place'])) { + return $results[0]['next_order_place']; + } + return 0; + } } abstract class CBCategory diff --git a/upload/includes/classes/db.class.php b/upload/includes/classes/db.class.php index b7dcf8ecc..a7489dbfa 100644 --- a/upload/includes/classes/db.class.php +++ b/upload/includes/classes/db.class.php @@ -535,13 +535,17 @@ private function handleError($query) if ($this->getError() != '') { //customize exceptions if (preg_match('/language.*doesn\'t exist/', $this->getError())) { - throw new \Exception("lang_not_installed"); + throw new \Exception('lang_not_installed'); } if (preg_match('/version.*doesn\'t exist/', $this->getError())) { - throw new \Exception("version_not_installed"); + throw new \Exception('version_not_installed'); } if (preg_match('/doesn\'t exist/', $this->getError())) { - throw new \Exception("missing_table"); + error_log('SQL : ' . $query); + error_log('ERROR : ' . $this->getError()); + DiscordLog::sendDump('SQL : ' . $query); + DiscordLog::sendDump('ERROR : ' . $this->getError()); + throw new \Exception('missing_table'); } if (in_dev()) { @@ -550,6 +554,9 @@ private function handleError($query) error_log('SQL : ' . $query); error_log('ERROR : ' . $this->getError()); error_log(debug_backtrace_string()); + DiscordLog::sendDump('SQL : ' . $query); + DiscordLog::sendDump('ERROR : ' . $this->getError()); + DiscordLog::sendDump(debug_backtrace_string()); } else { e(lang('technical_error')); } diff --git a/upload/includes/classes/update.class.php b/upload/includes/classes/update.class.php index 16622b5ce..0d0c05b2f 100644 --- a/upload/includes/classes/update.class.php +++ b/upload/includes/classes/update.class.php @@ -45,6 +45,10 @@ private function getAllFields(): array }, $this->fields); } + public function flush(){ + $this->dbVersion = []; + } + public function getDBVersion(): array { if( empty($this->dbVersion) ){ @@ -750,7 +754,7 @@ public static function updateGitSources(): bool * @param $revision * @return bool */ - public static function IsCurrentDBVersionIsHigherOrEqualTo($version, $revision) + public static function IsCurrentDBVersionIsHigherOrEqualTo($version, $revision): bool { $version_db = Update::getInstance()->getDBVersion(); return ($version_db['version'] > $version || ($version_db['version'] == $version && $version_db['revision'] >= $revision)); diff --git a/upload/includes/functions_db.php b/upload/includes/functions_db.php index 8f4f20e5c..6086523f9 100644 --- a/upload/includes/functions_db.php +++ b/upload/includes/functions_db.php @@ -182,7 +182,10 @@ function execute_sql_file($path): bool if ($db->mysqli->error != '') { error_log('SQL : ' . $templine); error_log('ERROR : ' . $db->mysqli->error); + DiscordLog::sendDump('SQL : ' . $templine); + DiscordLog::sendDump('ERROR : ' . $db->mysqli->error); $db->mysqli->rollback(); + return false; } $templine = ''; @@ -194,6 +197,8 @@ function execute_sql_file($path): bool e('ERROR : ' . $e->getMessage()); error_log('SQL : ' . $templine); error_log('ERROR : ' . $e->getMessage()); + DiscordLog::sendDump('SQL : ' . $templine); + DiscordLog::sendDump('ERROR : ' . $db->mysqli->error); return false; } @@ -225,6 +230,7 @@ function execute_migration_SQL_file($path): bool } $db->mysqli->query($sql); CacheRedis::flushAll(); + Update::getInstance()->flush(); return true; }