From c64a87041ad344fd7f333562c9f4164b175bd7ef Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 3 Aug 2023 22:23:48 +0900 Subject: [PATCH] Generate sequential mid instead of random characters --- modules/menu/menu.admin.controller.php | 22 ++---------------- modules/module/module.model.php | 31 ++++++++++++++++++++++++++ modules/module/queries/getMidInfo.xml | 23 ++++++++++--------- 3 files changed, 45 insertions(+), 31 deletions(-) diff --git a/modules/menu/menu.admin.controller.php b/modules/menu/menu.admin.controller.php index f3570eb7c..0d3c4bbf2 100644 --- a/modules/menu/menu.admin.controller.php +++ b/modules/menu/menu.admin.controller.php @@ -674,8 +674,7 @@ class menuAdminController extends menu // if mid is empty, auto create mid if(!$request->module_id) { - $randomMid = $this->_makeRandomMid(); - $request->module_id = $cmArgs->module.'_'.$randomMid; + $request->module_id = ModuleModel::getNextAvailableMid($cmArgs->module); } $cmArgs->mid = $request->module_id; @@ -1261,8 +1260,7 @@ class menuAdminController extends menu $moduleInfo = $oModuleModel->getModuleInfoByMid($originMenu['url']); $args->module_type = $moduleInfo->module; - $randomMid = $this->_makeRandomMid(); - $args->module_id = $moduleInfo->module.'_'.$randomMid; + $args->module_id = ModuleModel::getNextAvailableMid($moduleInfo->module); $args->layout_srl = $moduleInfo->layout_srl; $oModuleAdminController = getAdminController('module'); @@ -1329,22 +1327,6 @@ class menuAdminController extends menu } } - private function _makeRandomMid() - { - $time = $_SERVER['REQUEST_TIME']; - $randomString = ""; - for($i=0;$i<4;$i++) - { - $case = rand(0, 1); - if($case) $doc = rand(65, 90); - else $doc = rand(97, 122); - - $randomString .= chr($doc); - } - - return $randomString.substr($time, -2); - } - /** * Arrange menu items * @return void|object diff --git a/modules/module/module.model.php b/modules/module/module.model.php index d71d7f8c6..672eb7925 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -529,6 +529,37 @@ class ModuleModel extends Module return $target_module_info[0]; } + /** + * Get the next available mid with the given prefix. + * + * @param string $prefix + * @return string + */ + public static function getNextAvailableMid($prefix) + { + $prefix = trim($prefix); + if (!$prefix) + { + return ''; + } + + $args = new stdClass; + $args->mid_prefix = $prefix; + $output = executeQueryArray('module.getMidInfo', $args, ['mid']); + + $max = 0; + $len = strlen($prefix); + foreach ($output->data as $info) + { + $suffix = substr($info->mid, $len); + if (ctype_digit($suffix)) + { + $max = max($max, intval($suffix)); + } + } + return $prefix . ($max + 1); + } + /** * @brief Get a complete list of mid, which is created in the DB */ diff --git a/modules/module/queries/getMidInfo.xml b/modules/module/queries/getMidInfo.xml index 1a88a6353..9eaaeba47 100644 --- a/modules/module/queries/getMidInfo.xml +++ b/modules/module/queries/getMidInfo.xml @@ -1,13 +1,14 @@ - - - - - - - - - - - + +
+ + + + + + + + + +