From e6591f64d8cc39d660e04674270d631d478645bd Mon Sep 17 00:00:00 2001 From: tianshujie Date: Thu, 6 Apr 2023 08:57:42 +0800 Subject: [PATCH 1/8] * Fix bug #33759. --- module/project/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/project/model.php b/module/project/model.php index a17f9401e6..be1553d3e5 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -672,7 +672,7 @@ class projectModel extends model } elseif($module == 'doc') { - $link = helper::createLink($module, 'tablecontents', "type=project&objectID=%s") . '#app=project'; + $link = helper::createLink($module, 'projectSpace', "objectID=%s") . '#app=project'; } elseif($module == 'build') { From 75d07972abbe652bf94e88ac6613f6582cd27d51 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Thu, 6 Apr 2023 09:14:00 +0800 Subject: [PATCH 2/8] * Code for task #89915. --- module/doc/view/lefttree.html.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/module/doc/view/lefttree.html.php b/module/doc/view/lefttree.html.php index 4509f9db44..cde1a26cb0 100644 --- a/module/doc/view/lefttree.html.php +++ b/module/doc/view/lefttree.html.php @@ -229,6 +229,7 @@ $(function() if(typeof item.hasAction == 'undefined') item.hasAction = true; if(typeof item.active == 'undefined') item.active = 0; if(typeof docID != 'undefined' && item.id == docID) item.active = 1; + if(['text', 'word', 'ppt', 'excel'].indexOf(item.type) !== -1) item.hasAction = false; var objectType = config.currentModule == 'api' ? item.objectType : item.type; var libClass = ['lib', 'annex', 'api', 'execution'].indexOf(objectType) !== -1 ? 'lib' : ''; @@ -252,7 +253,7 @@ $(function() } $item += '
' + (versionName || versionLang) + '
'; } - if(['text', 'word', 'ppt', 'excel'].indexOf(item.type) === -1 && ((libClass != 'lib' && hasModulePriv) || (libClass == 'lib' && hasLibPriv))) $item += ''; + if((libClass != 'lib' && hasModulePriv) || (libClass == 'lib' && hasLibPriv)) $item += ''; $item += ''; $item += ''; if(item.versions) versionsData[item.id] = item.versions; @@ -324,7 +325,8 @@ $(function() if(!$(this).hasClass('lib')) libClass = '.moduleDorpdown'; $(this).find('.icon').removeClass('hidden'); - $(this).addClass('show-icon'); if($(libClass).find('li').length == 0) return false; + $(this).addClass('show-icon'); + if($(libClass).find('li').length == 0) return false; }).on('mouseout', 'a', function() { From f3897e5dc814fa78397ac9a6f92ea6fe933f9139 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Thu, 6 Apr 2023 09:23:32 +0800 Subject: [PATCH 3/8] * Fixed an error message when clicking level 1.5 and then clicking Level 2.5. --- module/product/model.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module/product/model.php b/module/product/model.php index 48346ef137..5dc9dc142b 100755 --- a/module/product/model.php +++ b/module/product/model.php @@ -2448,8 +2448,7 @@ class productModel extends model } else if($module == 'doc') { - if($method == 'create' or $method == 'edit') $method = 'tableContents'; - $link = helper::createLink('doc', $method, "type=product&objectID=%s&from=product"); + $link = helper::createLink('doc', 'productSpace', "objectID=%s"); } elseif($module == 'design') { From 9484c73fba24d9760be522b044c2950599d03c65 Mon Sep 17 00:00:00 2001 From: guofeilong Date: Thu, 6 Apr 2023 09:28:51 +0800 Subject: [PATCH 4/8] * Adjust code . --- module/doc/view/lefttree.html.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/module/doc/view/lefttree.html.php b/module/doc/view/lefttree.html.php index cde1a26cb0..bd0bd40ee1 100644 --- a/module/doc/view/lefttree.html.php +++ b/module/doc/view/lefttree.html.php @@ -53,6 +53,7 @@ i.btn-info, i.btn-info:hover {border: none; background: #fff; box-shadow: unset; #leftBar .selectBox #currentItem {width: 150px; display: flex; align-items: center;} [lang^=zh] #leftBar .selectBox #currentItem {width: 180px;} #leftBar .selectBox #currentItem > .text {overflow: hidden; text-align: left; flex: 0 1 100%;} +.dropdown-in-tree {max-height: 293px; overflow-y: auto;} Date: Thu, 6 Apr 2023 09:31:31 +0800 Subject: [PATCH 5/8] * Add version for api lib. --- module/api/control.php | 2 +- module/api/model.php | 32 -------------------------------- module/doc/model.php | 27 +++++++++++++++++++++++++-- 3 files changed, 26 insertions(+), 35 deletions(-) diff --git a/module/api/control.php b/module/api/control.php index d901593d20..0bfb2eae9e 100755 --- a/module/api/control.php +++ b/module/api/control.php @@ -125,7 +125,7 @@ class api extends control $this->view->objectID = $objectID; $this->view->moduleID = $moduleID; $this->view->version = $version; - $this->view->libTree = $this->api->getLibTree($libID, $libs, $moduleID, $objectID, $browseType); + $this->view->libTree = $this->doc->getLibTree($libID, $libs, 'api', $moduleID, $objectID, $browseType); $this->view->users = $this->user->getPairs('noclosed,noletter'); $this->view->objectDropdown = isset($libs[$libID]) ? $this->generateLibsDropMenu($libs[$libID], $release) : ''; diff --git a/module/api/model.php b/module/api/model.php index 44b23d3c87..19cdfd9aac 100644 --- a/module/api/model.php +++ b/module/api/model.php @@ -1032,36 +1032,4 @@ class apiModel extends model return array($normalObjects, $closedObjects); } - - /** - * Get lib tree. - * - * @param int $libID - * @param int $libs - * @param int $moduleID - * @param int $objectID - * @param string $browseType bySearch - * @access public - * @return array - */ - public function getLibTree($libID, $libs, $moduleID, $objectID = 0, $browseType = '') - { - $libTree = $this->loadModel('doc')->getLibTree($libID, $libs, 'api', $moduleID, $objectID, $browseType); - $releases = $this->getReleaseByQuery(array_keys($libs), null, 'lib_asc, id_desc'); - - foreach($libTree as &$tree) - { - $tree->versions = array(); - foreach($releases as $index => $release) - { - if($tree->id == $release->lib) - { - $tree->versions[] = $release; - unset($releases[$index]); - } - } - } - - return $libTree; - } } diff --git a/module/doc/model.php b/module/doc/model.php index 148fee61b9..be7346bb8a 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -2861,8 +2861,9 @@ class docModel extends model ->fetchPairs(); } - $libTree = array($type => array()); - $apiLibs = array(); + $libTree = array($type => array()); + $apiLibs = array(); + $apiLibIDList = array(); foreach($libs as $lib) { $item = new stdclass(); @@ -2920,6 +2921,8 @@ class docModel extends model $libTree['execution'][$executionID]->active = $item->active ? 1 : $libTree['execution'][$executionID]->active; $libTree['execution'][$executionID]->children[] = $item; } + + if($lib->type == 'api') $apiLibIDList[] = $lib->id; } if(in_array($type, array('product', 'project', 'execution'))) @@ -2949,6 +2952,26 @@ class docModel extends model $libTree[$type] = array_merge($libTree[$type], $apiLibs); } + /* Add release for api. */ + $releases = $this->loadModel('api')->getReleaseByQuery($apiLibIDList); + foreach($libTree as &$libList) + { + foreach($libList as &$lib) + { + if(!is_object($lib) or $lib->type != 'api') continue; + + $lib->versions = array(); + foreach($releases as $index => $release) + { + if($lib->id == $release->lib) + { + $lib->versions[] = $release; + unset($releases[$index]); + } + } + } + } + if($type != 'project') $libTree = array_values($libTree[$type]); return $libTree; } From 47780015f8d6d404fb8463cfe58173e959be3999 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Thu, 6 Apr 2023 10:27:21 +0800 Subject: [PATCH 6/8] =?UTF-8?q?*=20Fixed=20the=20bottom=20paging=20style?= =?UTF-8?q?=20problem=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/api/css/releases.css | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/module/api/css/releases.css b/module/api/css/releases.css index 24e4509c99..2d9d871192 100644 --- a/module/api/css/releases.css +++ b/module/api/css/releases.css @@ -1,6 +1,4 @@ .c-date {width: 150px;} .c-actions {width: 60px;} -tbody tr td {white-space:nowrap; overflow:hidden; text-overflow:ellipsis;} - -.m-api-releases {padding-bottom: 0px !important;} +tbody tr td {white-space: nowrap; overflow: hidden; text-overflow: clip;} From 56791f12efb494003d85ca63494024c3ce367dc2 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 6 Apr 2023 10:29:23 +0800 Subject: [PATCH 7/8] * code for task #89916. --- module/common/model.php | 171 ++++++++++++------------ module/doc/control.php | 86 +++++++++--- module/doc/js/common.js | 9 +- module/doc/js/selectlibtype.js | 33 +---- module/doc/lang/zh-cn.php | 16 ++- module/doc/model.php | 15 ++- module/doc/view/createtexttype.html.php | 4 +- module/doc/view/selectlibtype.html.php | 124 +++++++++++++++-- 8 files changed, 297 insertions(+), 161 deletions(-) diff --git a/module/common/model.php b/module/common/model.php index d583121d92..677d16ae56 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -605,102 +605,99 @@ class commonModel extends model if($objectType == 'kanbanspace') $createMethod = 'createSpace'; if(strpos('|bug|execution|kanbanspace|', "|$objectType|") !== false) $needPrintDivider = true; - if(common::hasPriv($module, $createMethod)) + if($objectType == 'doc' and !common::hasPriv('doc', 'tableContents')) continue; + + $hasPriv = common::hasPriv($module, $createMethod); + if($objectType == 'doc' and !$hasPriv and common::hasPriv('api', 'create')) $hasPriv = true; + if(!$hasPriv) continue; + + /* Determines whether to print a divider. */ + if($needPrintDivider and $showCreateList) { - if($objectType == 'doc' and !common::hasPriv('doc', 'tableContents')) continue; + $html .= '
  • '; + $needPrintDivider = false; + } - /* Determines whether to print a divider. */ - if($needPrintDivider and $showCreateList) - { - $html .= '
  • '; - $needPrintDivider = false; - } + $showCreateList = true; + $isOnlyBody = false; + $attr = ''; - $showCreateList = true; - $isOnlyBody = false; - $attr = ''; - - $params = ''; - switch($objectType) - { - case 'doc': - $params = "objectType=&objectID=0&libID=0"; - $createMethod = 'selectLibType'; - $isOnlyBody = true; - $attr = "class='iframe' data-width='700px'"; - break; - case 'project': + $params = ''; + switch($objectType) + { + case 'doc': + $params = "objectType=&objectID=0&libID=0"; + $createMethod = 'selectLibType'; + $isOnlyBody = true; + $attr = "class='iframe' data-width='700px'"; + break; + case 'project': + $params = "model=scrum&programID=0©ProjectID=0&extra=from=global"; + if($config->vision == 'lite') + { + $params = "model=kanban"; + } + elseif(!defined('TUTORIAL')) + { + $params = "programID=0&from=global"; + $createMethod = 'createGuide'; + $attr = 'data-toggle="modal"'; + } + break; + case 'bug': + $params = "productID=$productID&branch=&extras=from=global"; + break; + case 'story': + if(!$productID and $config->vision == 'lite') + { + $module = 'project'; + $params = "model=kanban"; + } + else + { + $params = "productID=$productID&branch=0&moduleID=0&storyID=0&objectID=0&bugID=0&planID=0&todoID=0&extra=from=global"; if($config->vision == 'lite') { - $params = "model=kanban"; - } - else if(!defined('TUTORIAL')) - { - $params = "programID=0&from=global"; - $createMethod = 'createGuide'; - $attr = 'data-toggle="modal"'; - } - else - { - $params = "model=scrum&programID=0©ProjectID=0&extra=from=global"; - } + $projectID = isset($_SESSION['project']) ? $_SESSION['project'] : 0; + $projects = $app->dbh->query("SELECT t2.id FROM " . TABLE_PROJECTPRODUCT . " AS t1 LEFT JOIN " . TABLE_PROJECT . " AS t2 ON t1.project = t2.id WHERE t1.`product` = '{$productID}' and t2.`type` = 'project' and t2.id " . helper::dbIN($app->user->view->projects) . " ORDER BY `order` desc")->fetchAll(); - break; - case 'bug': - $params = "productID=$productID&branch=&extras=from=global"; - break; - case 'story': - if(!$productID and $config->vision == 'lite') - { - $module = 'project'; - $params = "model=kanban"; + $projectIdList = array(); + foreach($projects as $project) $projectIdList[$project->id] = $project->id; + if($projectID and !isset($projectIdList[$projectID])) $projectID = 0; + if(empty($projectID)) $projectID = key($projectIdList); + + $params = "productID={$productID}&branch=0&moduleID=0&storyID=0&objectID={$projectID}&bugID=0&planID=0&todoID=0&extra=from=global"; } - else - { - $params = "productID=$productID&branch=0&moduleID=0&storyID=0&objectID=0&bugID=0&planID=0&todoID=0&extra=from=global"; - if($config->vision == 'lite') - { - $projectID = isset($_SESSION['project']) ? $_SESSION['project'] : 0; - $projects = $app->dbh->query("SELECT t2.id FROM " . TABLE_PROJECTPRODUCT . " AS t1 LEFT JOIN " . TABLE_PROJECT . " AS t2 ON t1.project = t2.id WHERE t1.`product` = '{$productID}' and t2.`type` = 'project' and t2.id " . helper::dbIN($app->user->view->projects) . " ORDER BY `order` desc")->fetchAll(); + } - $projectIdList = array(); - foreach($projects as $project) $projectIdList[$project->id] = $project->id; - if($projectID and !isset($projectIdList[$projectID])) $projectID = 0; - if(empty($projectID)) $projectID = key($projectIdList); - - $params = "productID={$productID}&branch=0&moduleID=0&storyID=0&objectID={$projectID}&bugID=0&planID=0&todoID=0&extra=from=global"; - } - } - - break; - case 'task': - $params = "executionID=0&storyID=0&moduleID=0&taskID=0&todoID=0&extra=from=global"; - break; - case 'testcase': - $params = "productID=$productID&branch=&moduleID=0&from=¶m=0&storyID=0&extras=from=global"; - break; - case 'execution': - $projectID = isset($_SESSION['project']) ? $_SESSION['project'] : 0; - $params = "projectID={$projectID}&executionID=0©ExecutionID=0&planID=0&confirm=no&productID=0&extra=from=global"; - break; - case 'product': - $params = "programID=&extra=from=global"; - break; - case 'program': - $params = "parentProgramID=0&extra=from=global"; - break; - case 'kanbanspace': - $isOnlyBody = true; - $attr = "class='iframe' data-width='75%'"; - break; - case 'kanban': - $isOnlyBody = true; - $attr = "class='iframe' data-width='75%'"; - break; - } - - $html .= '
  • ' . html::a(helper::createLink($module, $createMethod, $params, '', $isOnlyBody), " " . $lang->createObjects[$objectType], '', "$attr data-app=''") . '
  • '; + break; + case 'task': + $params = "executionID=0&storyID=0&moduleID=0&taskID=0&todoID=0&extra=from=global"; + break; + case 'testcase': + $params = "productID=$productID&branch=&moduleID=0&from=¶m=0&storyID=0&extras=from=global"; + break; + case 'execution': + $projectID = isset($_SESSION['project']) ? $_SESSION['project'] : 0; + $params = "projectID={$projectID}&executionID=0©ExecutionID=0&planID=0&confirm=no&productID=0&extra=from=global"; + break; + case 'product': + $params = "programID=&extra=from=global"; + break; + case 'program': + $params = "parentProgramID=0&extra=from=global"; + break; + case 'kanbanspace': + $isOnlyBody = true; + $attr = "class='iframe' data-width='75%'"; + break; + case 'kanban': + $isOnlyBody = true; + $attr = "class='iframe' data-width='75%'"; + break; } + + $html .= '
  • ' . html::a(helper::createLink($module, $createMethod, $params, '', $isOnlyBody), " " . $lang->createObjects[$objectType], '', "$attr data-app=''") . '
  • '; } if(!$showCreateList) return ''; diff --git a/module/doc/control.php b/module/doc/control.php index a681df9fd4..0e3aaa0304 100755 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -381,17 +381,27 @@ class doc extends control $this->config->showMainMenu = (strpos($this->config->doc->textTypes, $docType) === false or $from == 'template'); + $lib = $libID ? $this->doc->getLibByID($libID) : ''; + if(empty($objectID) and $lib) $objectID = zget($lib, $lib->type, 0); + /* Get libs and the default lib id. */ $gobackLink = ($objectID == 0 and $libID == 0) ? $this->createLink('doc', 'tableContents', "type=$linkType") : ''; $unclosed = strpos($this->config->doc->custom->showLibs, 'unclosed') !== false ? 'unclosedProject' : ''; $libs = $this->doc->getLibs($objectType, $extra = "withObject,$unclosed", $libID, $objectID); if(!$libID and !empty($libs)) $libID = key($libs); + if(empty($lib) and $libID) $lib = $this->doc->getLibByID($libID); - $lib = $this->doc->getLibByID($libID); $objects = array(); if($objectType == 'project') { $objects = $this->project->getPairsByProgram('', 'all', false, 'order_asc', 'kanban'); + if($lib->type == 'execution') + { + $execution = $this->loadModel('execution')->getById($lib->execution); + $objectID = $execution->project; + $libs = $this->doc->getLibs('execution', $extra = "withObject,$unclosed", $libID, $lib->execution); + $this->view->execution = $execution; + } $this->view->executions = array(0 => '') + $this->loadModel('execution')->getPairs($objectID, 'sprint,stage', 'multiple,leaf,noprefix'); } elseif($objectType == 'execution') @@ -619,6 +629,7 @@ class doc extends control $libID = $docLib->id; $type = $docLib->type; $objectID = $docLib->$type; + if($this->app->tab != 'execution' and $type == 'execution') $type = 'project'; } $browseLink = inLink('objectLibs', "type=$type&objectID=$objectID&libID=$libID&docID=$docID"); @@ -824,16 +835,26 @@ class doc extends control /** * Ajax get modules by object. * - * @param string $objectType + * @param string $objectType project|product|custom|mine * @param int $objectID + * @param string $docType doc|api * @access public * @return void */ - public function ajaxGetModules($objectType, $objectID) + public function ajaxGetModules($objectType, $objectID, $docType = 'doc') { - $unclosed = strpos($this->config->doc->custom->showLibs, 'unclosed') !== false ? 'unclosedProject' : ''; - $libs = $this->doc->getLibs($objectType, $extra = "withObject,$unclosed", '', $objectID); - $moduleOptionMenu = $this->doc->getLibsOptionMenu($libs); + if($docType == 'doc') + { + $unclosed = strpos($this->config->doc->custom->showLibs, 'unclosed') !== false ? 'unclosedProject' : ''; + $libPairs = $this->doc->getLibs($objectType, $extra = "withObject,$unclosed", '', $objectID); + } + elseif($docType == 'api') + { + $libs = $this->doc->getApiLibs('', $objectType, $objectID); + $libPairs = array(); + foreach($libs as $libID => $lib) $libPairs[$libID] = $lib->name; + } + $moduleOptionMenu = $this->doc->getLibsOptionMenu($libPairs, $docType); return print(html::select('module', $moduleOptionMenu, '', "class='form-control'")); } @@ -896,16 +917,28 @@ class doc extends control /** * AJAX: Get libs by type. * - * @param string $type + * @param string $space mine|product|project|nolink|custom + * @param string $docType doc|api * @access public * @return void */ - public function ajaxGetLibsByType($type) + public function ajaxGetLibsByType($space, $docType = 'doc') { - $unclosed = strpos($this->config->doc->custom->showLibs, 'unclosed') !== false ? 'unclosedProject' : ''; - $libs = $this->doc->getLibs($type, "withObject,$unclosed"); + $libPairs = array(); + if($docType == 'doc') + { + $unclosed = strpos($this->config->doc->custom->showLibs, 'unclosed') !== false ? 'unclosedProject' : ''; + $libPairs = $this->doc->getLibs($space, "withObject,$unclosed"); + } + elseif($docType == 'api') + { + $libs = $this->doc->getApiLibs('', 'nolink'); + $libPairs = array(); + foreach($libs as $libID => $lib) $libPairs[$libID] = $lib->name; + } - return print(html::select('lib', $libs, '', 'class="form-control"')); + $moduleOptionMenu = $this->doc->getLibsOptionMenu($libPairs, $docType); + return print(html::select('module', $moduleOptionMenu, '', "class='form-control'")); } /** @@ -1418,25 +1451,34 @@ class doc extends control { if($_POST) { + $response = array(); + if(empty($_POST['module'])) + { + $response['result'] = 'fail'; + $response['message']['module'] = sprintf($this->lang->error->notempty, $this->lang->doc->libAndModule); + return $this->send($response); + } + + if(strpos($this->post->module, '_') !== false) list($libID, $moduleID) = explode('_', $this->post->module); $response['message'] = $this->lang->saveSuccess; $response['result'] = 'success'; $response['closeModal'] = true; - $response['callback'] = "redirectParentWindow(\"{$this->post->objectType}\", \"{$this->post->lib}\", \"{$this->post->type}\")"; + $response['callback'] = "redirectParentWindow(\"{$this->post->space}\", {$libID}, {$moduleID}, \"{$this->post->type}\")"; return $this->send($response); } - unset($this->lang->doc->libTypeList['book']); + $spaceList = $this->lang->doc->spaceList; + $typeList = $this->lang->doc->types; + if(!common::hasPriv('doc', 'create')) unset($spaceList['mine'], $spaceList['custom'], $typeList['doc']); + if(!common::hasPriv('api', 'create')) unset($spaceList['api'], $typeList['api']); - $globalTypeList = $this->lang->doc->libTypeList; - $globalTypeList = $this->config->vision == 'lite' ? $globalTypeList : $globalTypeList + $this->lang->doc->libGlobalList; + $products = $this->loadModel('product')->getPairs(); + $projects = $this->project->getPairsByProgram('', 'all', false, 'order_asc', 'kanban'); - $defaultType = key($globalTypeList); - $unclosed = strpos($this->config->doc->custom->showLibs, 'unclosed') !== false ? 'unclosedProject' : ''; - $libs = $this->doc->getLibs($defaultType, "withObject,$unclosed"); - - $this->view->globalTypeList = $globalTypeList; - $this->view->defaultType = $defaultType; - $this->view->libs = $libs; + $this->view->spaceList = $spaceList; + $this->view->typeList = $typeList; + $this->view->products = $products; + $this->view->projects = $projects; $this->display(); } diff --git a/module/doc/js/common.js b/module/doc/js/common.js index 4d81139b9f..35720e4b12 100644 --- a/module/doc/js/common.js +++ b/module/doc/js/common.js @@ -6,10 +6,11 @@ * @access public * @return void */ -function loadObjectModules(objectType, objectID) +function loadObjectModules(objectType, objectID, docType) { - var link = createLink('doc', 'ajaxGetModules', 'objectType=' + objectType + '&objectID=' + objectID); - $('#moduleBox').load(link, function(){$('#moduleBox').find('select').chosen()}); + if(typeof docType == 'undefined') docType = 'doc'; + var link = createLink('doc', 'ajaxGetModules', 'objectType=' + objectType + '&objectID=' + objectID + '&type=' + docType); + $('#moduleBox').load(link, function(){$('#moduleBox').find('select').picker(); $('#moduleLabel').remove();}); } /** @@ -22,7 +23,7 @@ function loadObjectModules(objectType, objectID) function loadExecutions(projectID) { var link = createLink('project', 'ajaxGetExecutions', "projectID=" + projectID + "&executionID=0&mode=multiple,leaf,noprefix"); - $('#executionBox').load(link, function(){$('#executionBox').find('select').attr('data-placeholder', holders.execution).attr('onchange', "loadObjectModules('execution', this.value)").chosen()}); + $('#executionBox').load(link, function(){$('#executionBox').find('select').attr('data-placeholder', holders.execution).attr('onchange', "loadObjectModules('execution', this.value)").picker()}); loadObjectModules('project', projectID); } diff --git a/module/doc/js/selectlibtype.js b/module/doc/js/selectlibtype.js index e8b8ae5c76..c35c113429 100644 --- a/module/doc/js/selectlibtype.js +++ b/module/doc/js/selectlibtype.js @@ -1,8 +1,3 @@ -$(function() -{ - loadDocLibs(defaultType); -}) - /** * Redirect the parent window. * @@ -12,14 +7,14 @@ $(function() * @access public * @return void */ -function redirectParentWindow(objectType, libID, docType) +function redirectParentWindow(objectType, libID, moduleID, docType) { if(objectType == 'api') { parent.$.closeModal(function() { new parent.$.zui.ModalTrigger({ - iframe : createLink('api', 'create', 'libID=' + libID), + iframe : createLink('api', 'create', 'libID=' + libID + '&moduleID=' + moduleID), width: '85%' }).show(); }); @@ -27,7 +22,7 @@ function redirectParentWindow(objectType, libID, docType) } config.onlybody = 'no'; - var link = createLink('doc', 'create', 'objectType=' + objectType + '&objectID=0&libID=' + libID + '&moduleID=0&docType=' + docType) + '#app=doc'; + var link = createLink('doc', 'create', 'objectType=' + objectType + '&objectID=0&libID=' + libID + '&moduleID=' + moduleID + '&docType=' + docType) + '#app=doc'; window.parent.$.apps.open(link); } @@ -37,24 +32,8 @@ function redirectParentWindow(objectType, libID, docType) * @param string type * @return void */ -function loadDocLibs(type) +function loadDocLibs(space, type) { - $.get(createLink('doc', 'ajaxGetLibsByType', "type=" + type), function(data) - { - $('#lib').replaceWith(data); - $('#lib_chosen').remove(); - $('#lib').chosen(); - $('#lib').siblings('div').css('width', 'calc(100% - 25px)'); - - if($('#lib').find('option').length == 0) - { - $('#submit').attr('disabled', 'disabled'); - } - else - { - $('#submit').removeAttr('disabled'); - } - }) - - $('#docType').toggleClass('hidden', type == 'api'); + var link = createLink('doc', 'ajaxGetLibsByType', "space=" + space + "&type=" + type); + $('#moduleBox').load(link, function(){$('#moduleBox').find('select').picker(); $('#moduleLabel').remove();}); } diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index 36dc342099..022a94d5d2 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -216,6 +216,18 @@ $lang->doc->statusList['draft'] = "草稿"; $lang->doc->aclList['open'] = "公开(有所属库权限即可访问)"; $lang->doc->aclList['private'] = "私有(仅创建者和白名单用户可访问)"; +$lang->doc->space = '所属空间'; +$lang->doc->spaceList['mine'] = '我的空间'; +$lang->doc->spaceList['product'] = '产品空间'; +$lang->doc->spaceList['project'] = '项目空间'; +$lang->doc->spaceList['api'] = '接口空间'; +$lang->doc->spaceList['custom'] = '团队空间'; + +$lang->doc->apiType = '接口类型'; +$lang->doc->apiTypeList['product'] = '产品接口'; +$lang->doc->apiTypeList['project'] = '项目接口'; +$lang->doc->apiTypeList['nolink'] = '无关联接口'; + $lang->doc->typeList['html'] = '富文本'; $lang->doc->typeList['markdown'] = 'Markdown'; $lang->doc->typeList['url'] = '链接'; @@ -229,8 +241,8 @@ $lang->doc->createList['word'] = 'Word'; $lang->doc->createList['ppt'] = 'PPT'; $lang->doc->createList['excel'] = 'Excel'; -$lang->doc->types['text'] = '文档'; -$lang->doc->types['url'] = '链接'; +$lang->doc->types['doc'] = 'WIKI文档'; +$lang->doc->types['api'] = '接口文档'; $lang->doc->contentTypeList['html'] = 'HTML'; $lang->doc->contentTypeList['markdown'] = 'MarkDown'; diff --git a/module/doc/model.php b/module/doc/model.php index 6948a52e0f..ec527d9a5b 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -38,7 +38,7 @@ class docModel extends model * Get api Libraries. * * @param int $appendLib - * @param string $appendLib + * @param string $objectType * @param int $objectID * @return array */ @@ -52,6 +52,7 @@ class docModel extends model ->beginIF($objectType == 'nolink') ->andWhere('product')->eq(0) ->andWhere('project')->eq(0) + ->andWhere('execution')->eq(0) ->fi() ->orderBy('`order`_asc, id_desc') ->fetchAll('id'); @@ -3000,17 +3001,23 @@ class docModel extends model * Get option menu for libs. * * @param array $libs + * @param string $docType * @access public * @return array */ - public function getLibsOptionMenu($libs) + public function getLibsOptionMenu($libs, $docType = 'doc') { $this->loadModel('tree'); $modules = array(); foreach($libs as $libID => $libName) { - if(strpos($libName, '/') !== false) list($objectName, $libName) = explode('/', $libName); - $moduleOptionMenu = $this->tree->getOptionMenu($libID, 'doc', $startModuleID = 0); + if(strpos($libName, '/') !== false) + { + $pausedLibName = explode('/', $libName); + $libName = array_pop($pausedLibName); + $objectName = array_pop($pausedLibName); + } + $moduleOptionMenu = $this->tree->getOptionMenu($libID, $docType, $startModuleID = 0); foreach($moduleOptionMenu as $moduleID => $moduleName) $modules["{$libID}_{$moduleID}"] = $libName . $moduleName; if(empty($moduleOptionMenu)) $modules["{$libID}_0"] = $libName . $moduleName; } diff --git a/module/doc/view/createtexttype.html.php b/module/doc/view/createtexttype.html.php index 2ed7f917fa..29fef3b581 100644 --- a/module/doc/view/createtexttype.html.php +++ b/module/doc/view/createtexttype.html.php @@ -68,10 +68,10 @@ doc->project;?> - + project : $objectID, "class='form-control chosen' onchange=loadExecutions(this.value)");?> app->tab == 'doc'):?> doc->execution?> - doc->placeholder->execution}' onchange='loadObjectModules(\"execution\", this.value)'")?> + doc->placeholder->execution}' onchange='loadObjectModules(\"execution\", this.value)'")?> diff --git a/module/doc/view/selectlibtype.html.php b/module/doc/view/selectlibtype.html.php index 756978bc8a..2e3f6c395b 100644 --- a/module/doc/view/selectlibtype.html.php +++ b/module/doc/view/selectlibtype.html.php @@ -19,27 +19,125 @@
    + - - - - - - + + - doc->types as $typeKey => $typeName) $typeKeyList[$typeKey] = $typeKey; - ?> - + + + + + + + + + + + + + + + - + + + + +
    doc->libType;?>
    doc->lib;?>doc->space?>
    doc->type;?>doc->types, 'text');?>
    doc->nextStep);?>doc->libAndModule?>
    doc->nextStep, 'disabled');?>
    - +doc->placeholder);?> + From 7d976a5f1c3aa296f9321d841eee21537f6a3fc7 Mon Sep 17 00:00:00 2001 From: caoyanyi Date: Thu, 6 Apr 2023 10:38:44 +0800 Subject: [PATCH 8/8] * Modify order for menu. --- module/api/model.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/api/model.php b/module/api/model.php index 19cdfd9aac..513e95076e 100644 --- a/module/api/model.php +++ b/module/api/model.php @@ -994,6 +994,7 @@ class apiModel extends model ->andWhere('t1.vision')->eq($this->config->vision) ->andWhere('t1.deleted')->eq(0) ->andWhere('t2.id')->in(array_keys($libs)) + ->orderBy('id_desc') ->fetchAll('id'); foreach($products as $id => $product) @@ -1015,7 +1016,7 @@ class apiModel extends model ->andWhere('t1.deleted')->eq(0) ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->projects)->fi() ->andWhere('t2.id')->in(array_keys($libs)) - ->orderBy('t1.hasProduct_asc') + ->orderBy('t1.hasProduct_asc, id_desc') ->fetchAll('id'); foreach($projects as $id => $project)