From 6f79608c76fd7b102188df4ad73e3439364a8a00 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Fri, 3 Nov 2023 20:38:14 +0100 Subject: [PATCH 1/5] [ticket/17209] Move mentions migration to v400 PHPBB3-17209 --- .../db/migration/data/{v330 => v400}/add_mention_settings.php | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename phpBB/phpbb/db/migration/data/{v330 => v400}/add_mention_settings.php (100%) diff --git a/phpBB/phpbb/db/migration/data/v330/add_mention_settings.php b/phpBB/phpbb/db/migration/data/v400/add_mention_settings.php similarity index 100% rename from phpBB/phpbb/db/migration/data/v330/add_mention_settings.php rename to phpBB/phpbb/db/migration/data/v400/add_mention_settings.php From 98209b91ba39896fa9faaca67881f8d7e7a57bbe Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Fri, 3 Nov 2023 20:44:42 +0100 Subject: [PATCH 2/5] [ticket/17209] Add fallback for searching for roles for standard titles PHPBB3-17209 --- phpBB/phpbb/db/migration/tool/permission.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/phpBB/phpbb/db/migration/tool/permission.php b/phpBB/phpbb/db/migration/tool/permission.php index 80d64b403a..69f32fcb4c 100644 --- a/phpBB/phpbb/db/migration/tool/permission.php +++ b/phpBB/phpbb/db/migration/tool/permission.php @@ -256,6 +256,18 @@ class permission implements \phpbb\db\migration\tool\tool_interface $role_id = (int) $this->db->sql_fetchfield('role_id'); $this->db->sql_freeresult($result); + // Try falling back to searching by role description for standard role titles + if (!$role_id && preg_match('/ROLE_(?([A-Z]+_?)+)/', $role_name, $matches)) + { + $role_description = 'ROLE_DESCRIPTION_' . $matches['title']; + $sql = 'SELECT role_id + FROM ' . ACL_ROLES_TABLE . " + WHERE role_description = '" . $this->db->sql_escape($role_description) . "'"; + $result = $this->db->sql_query($sql); + $role_id = (int) $this->db->sql_fetchfield('role_id'); + $this->db->sql_freeresult($result); + } + return $role_id; } From 7efadf46a619b54a85db4bd3fa60340a43951b8e Mon Sep 17 00:00:00 2001 From: Marc Alexander <admin@m-a-styles.de> Date: Fri, 3 Nov 2023 20:46:59 +0100 Subject: [PATCH 3/5] [ticket/17209] Add checks for role exists before adding permissions PHPBB3-17209 --- .../data/v400/add_mention_settings.php | 81 ++++++++++++++----- 1 file changed, 63 insertions(+), 18 deletions(-) diff --git a/phpBB/phpbb/db/migration/data/v400/add_mention_settings.php b/phpBB/phpbb/db/migration/data/v400/add_mention_settings.php index c0e9a8cf58..e7355933dd 100644 --- a/phpBB/phpbb/db/migration/data/v400/add_mention_settings.php +++ b/phpBB/phpbb/db/migration/data/v400/add_mention_settings.php @@ -15,29 +15,74 @@ namespace phpbb\db\migration\data\v330; class add_mention_settings extends \phpbb\db\migration\migration { + public static function depends_on() + { + return ['\phpbb\db\migration\data\v400\dev']; + } + + public function effectively_installed(): bool + { + return $this->config->offsetExists('allow_mentions') + && $this->config->offsetExists('mention_batch_size') + && $this->config->offsetExists('mention_names_limit'); + } + public function update_data() { - return array( - array('config.add', array('allow_mentions', true)), - array('config.add', array('mention_batch_size', 50)), - array('config.add', array('mention_names_limit', 10)), + return [ + ['config.add', ['allow_mentions', true]], + ['config.add', ['mention_batch_size', 50]], + ['config.add', ['mention_names_limit', 10]], // Set up user permissions - array('permission.add', array('u_mention', true)), - array('permission.permission_set', array('ROLE_USER_FULL', 'u_mention')), - array('permission.permission_set', array('ROLE_USER_STANDARD', 'u_mention')), - array('permission.permission_set', array('ROLE_USER_LIMITED', 'u_mention')), - array('permission.permission_set', array('ROLE_USER_NOPM', 'u_mention')), - array('permission.permission_set', array('ROLE_USER_NOAVATAR', 'u_mention')), + ['permission.add', ['u_mention', true]], + ['if', [ + ['permission.role_exists', ['ROLE_USER_FULL']], + ['permission.permission_set', ['ROLE_USER_FULL', 'u_mention']], + ]], + ['if', [ + ['permission.role_exists', ['ROLE_USER_STANDARD']], + ['permission.permission_set', ['ROLE_USER_STANDARD', 'u_mention']], + ]], + ['if', [ + ['permission.role_exists', ['ROLE_USER_LIMITED']], + ['permission.permission_set', ['ROLE_USER_LIMITED', 'u_mention']], + ]], + ['if', [ + ['permission.role_exists', ['ROLE_USER_NOPM']], + ['permission.permission_set', ['ROLE_USER_NOPM', 'u_mention']], + ]], + ['if', [ + ['permission.role_exists', ['ROLE_USER_NOAVATAR']], + ['permission.permission_set', ['ROLE_USER_NOAVATAR', 'u_mention']], + ]], // Set up forum permissions - array('permission.add', array('f_mention', false)), - array('permission.permission_set', array('ROLE_FORUM_FULL', 'f_mention')), - array('permission.permission_set', array('ROLE_FORUM_STANDARD', 'f_mention')), - array('permission.permission_set', array('ROLE_FORUM_LIMITED', 'f_mention')), - array('permission.permission_set', array('ROLE_FORUM_ONQUEUE', 'f_mention')), - array('permission.permission_set', array('ROLE_FORUM_POLLS', 'f_mention')), - array('permission.permission_set', array('ROLE_FORUM_LIMITED_POLLS', 'f_mention')), - ); + ['permission.add', ['f_mention', false]], + ['if', [ + ['permission.role_exists', ['ROLE_FORUM_FULL']], + ['permission.permission_set', ['ROLE_FORUM_FULL', 'f_mention']], + ]], + ['if', [ + ['permission.role_exists', ['ROLE_FORUM_STANDARD']], + ['permission.permission_set', ['ROLE_FORUM_STANDARD', 'f_mention']], + ]], + ['if', [ + ['permission.role_exists', ['ROLE_FORUM_LIMITED']], + ['permission.permission_set', ['ROLE_FORUM_LIMITED', 'f_mention']], + ]], + ['if', [ + ['permission.role_exists', ['ROLE_FORUM_ONQUEUE']], + ['permission.permission_set', ['ROLE_FORUM_ONQUEUE', 'f_mention']], + ]], + ['if', [ + ['permission.role_exists', ['ROLE_FORUM_POLLS']], + ['permission.permission_set', ['ROLE_FORUM_POLLS', 'f_mention']], + ]], + ['if', [ + ['permission.role_exists', ['ROLE_FORUM_LIMITED_POLLS']], + ['permission.permission_set', ['ROLE_FORUM_LIMITED_POLLS', 'f_mention']], + ]], + ]; } } From 7d1e637a0ae3e21f5df081c029612998e90a5323 Mon Sep 17 00:00:00 2001 From: Marc Alexander <admin@m-a-styles.de> Date: Fri, 3 Nov 2023 20:50:39 +0100 Subject: [PATCH 4/5] [ticket/17209] Fix migration namespace PHPBB3-17209 --- phpBB/phpbb/db/migration/data/v400/add_mention_settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/phpbb/db/migration/data/v400/add_mention_settings.php b/phpBB/phpbb/db/migration/data/v400/add_mention_settings.php index e7355933dd..7aa2588722 100644 --- a/phpBB/phpbb/db/migration/data/v400/add_mention_settings.php +++ b/phpBB/phpbb/db/migration/data/v400/add_mention_settings.php @@ -11,7 +11,7 @@ * */ -namespace phpbb\db\migration\data\v330; +namespace phpbb\db\migration\data\v400; class add_mention_settings extends \phpbb\db\migration\migration { From f177cfa386d42cf84b911104cc43865dd53a21b6 Mon Sep 17 00:00:00 2001 From: Marc Alexander <admin@m-a-styles.de> Date: Fri, 3 Nov 2023 21:10:04 +0100 Subject: [PATCH 5/5] [ticket/17209] Check permission for existence in storage permission migration PHPBB3-17209 --- .../phpbb/db/migration/data/v400/add_storage_permission.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/phpBB/phpbb/db/migration/data/v400/add_storage_permission.php b/phpBB/phpbb/db/migration/data/v400/add_storage_permission.php index 3689764c72..7018d66801 100644 --- a/phpBB/phpbb/db/migration/data/v400/add_storage_permission.php +++ b/phpBB/phpbb/db/migration/data/v400/add_storage_permission.php @@ -43,7 +43,10 @@ class add_storage_permission extends migration ['permission.add', ['a_storage']], // Set permissions - ['permission.permission_set', ['ROLE_ADMIN_FULL', 'a_storage']], + ['if', [ + ['permission.role_exists', ['ROLE_ADMIN_FULL']], + ['permission.permission_set', ['ROLE_ADMIN_FULL', 'a_storage']], + ]], ]; } }