diff --git a/module/api/control.php b/module/api/control.php index 0e1463bf0c..42132bb929 100755 --- a/module/api/control.php +++ b/module/api/control.php @@ -431,8 +431,11 @@ class api extends control return $this->sendSuccess(array('message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => "redirectParentWindow($id)")); } - $type = !empty($lib->product) ? 'product' : 'project'; - $this->lang->api->aclList['default'] = sprintf($this->lang->doclib->aclList['default'], $this->lang->{$type}->common); + $type = 'nolink'; + if(!empty($lib->product)) $type = 'product'; + if(!empty($lib->project)) $type = 'project'; + if($type != 'nolink') $this->lang->api->aclList['default'] = sprintf($this->lang->doclib->aclList['default'], $this->lang->{$type}->common); + if($type == 'nolink') unset($this->lang->api->aclList['default']); $this->view->lib = $lib; $this->view->type = $type; diff --git a/module/doc/lang/de.php b/module/doc/lang/de.php index 535afaa67e..72a4b24420 100644 --- a/module/doc/lang/de.php +++ b/module/doc/lang/de.php @@ -55,6 +55,11 @@ $lang->doclib->tabList['custom'] = 'Custom'; $lang->doclib->nameList['custom'] = 'Custom Name'; +$lang->doclib->apiNameUnique = array(); +$lang->doclib->apiNameUnique['product'] = 'In the api library of the same ' . $lang->productCommon . ', '; +$lang->doclib->apiNameUnique['project'] = 'In the api library of the same ' . $lang->projectCommon . ', '; +$lang->doclib->apiNameUnique['nolink'] = 'In the no linked api library, '; + /* Fields. */ $lang->doc->common = 'Dok'; $lang->doc->id = 'ID'; diff --git a/module/doc/lang/en.php b/module/doc/lang/en.php index 79a4187793..df47d47232 100644 --- a/module/doc/lang/en.php +++ b/module/doc/lang/en.php @@ -55,6 +55,11 @@ $lang->doclib->tabList['custom'] = 'Custom'; $lang->doclib->nameList['custom'] = 'Custom Name'; +$lang->doclib->apiNameUnique = array(); +$lang->doclib->apiNameUnique['product'] = 'In the api library of the same ' . $lang->productCommon . ', '; +$lang->doclib->apiNameUnique['project'] = 'In the api library of the same ' . $lang->projectCommon . ', '; +$lang->doclib->apiNameUnique['nolink'] = 'In the no linked api library, '; + /* Fields. */ $lang->doc->common = 'Document'; $lang->doc->id = 'ID'; diff --git a/module/doc/lang/fr.php b/module/doc/lang/fr.php index aadd86f0fc..e1b1f24863 100644 --- a/module/doc/lang/fr.php +++ b/module/doc/lang/fr.php @@ -55,6 +55,11 @@ $lang->doclib->tabList['custom'] = 'Personnelle'; $lang->doclib->nameList['custom'] = 'Nom personnalisé'; +$lang->doclib->apiNameUnique = array(); +$lang->doclib->apiNameUnique['product'] = 'In the api library of the same ' . $lang->productCommon . ', '; +$lang->doclib->apiNameUnique['project'] = 'In the api library of the same ' . $lang->projectCommon . ', '; +$lang->doclib->apiNameUnique['nolink'] = 'In the no linked api library, '; + /* Fields. */ $lang->doc->common = 'Gestion Documentaire'; $lang->doc->id = 'ID'; diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index b8a3f9c381..e9b9b1b862 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -55,6 +55,11 @@ $lang->doclib->tabList['custom'] = '自定义'; $lang->doclib->nameList['custom'] = '自定义文档库名称'; +$lang->doclib->apiNameUnique = array(); +$lang->doclib->apiNameUnique['product'] = '同一' . $lang->productCommon . '下的接口库中'; +$lang->doclib->apiNameUnique['project'] = '同一' . $lang->projectCommon . '下的接口库中'; +$lang->doclib->apiNameUnique['nolink'] = '无关联接口库中'; + /* 字段列表。*/ $lang->doc->common = '文档'; $lang->doc->id = 'ID'; diff --git a/module/doc/model.php b/module/doc/model.php index 574d7235a4..38527dfe6d 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -210,7 +210,11 @@ class docModel extends model $execution = $this->loadModel('execution')->getByID($lib->execution); $lib->project = $execution->project; } - if($this->post->libType == 'api') $lib->type = 'api'; + if($this->post->libType == 'api') + { + $lib->type = 'api'; + $this->checkApiLibName($lib, $this->post->type); + } $lib->name = trim($lib->name); //Temporary treatment: Code for bug #15528. $this->dao->insert(TABLE_DOCLIB)->data($lib)->autoCheck() @@ -228,13 +232,15 @@ class docModel extends model */ public function createApiLib() { + $libType = $this->post->libType; + $data = fixer::input('post') ->trim('name') ->join('groups', ',') ->join('users', ',') - ->setForce('product', $this->post->libType == 'product' ? $this->post->product : 0) - ->setForce('project', $this->post->libType == 'project' ? $this->post->project : 0) - ->setForce('execution', $this->post->libType == 'project' ? $this->post->execution : 0) + ->setForce('product', $libType == 'product' ? $this->post->product : 0) + ->setForce('project', $libType == 'project' ? $this->post->project : 0) + ->setForce('execution', $libType == 'project' ? $this->post->execution : 0) ->add('addedBy', $this->app->user->account) ->add('addedDate', helper::now()) ->remove('uid,contactListMenu,libType') @@ -248,13 +254,16 @@ class docModel extends model $this->lang->doclib->project = $this->lang->api->project; $this->lang->doclib->product = $this->lang->api->product; - if($this->post->libType == 'product') $this->config->api->createlib->requiredFields .= ',product'; - if($this->post->libType == 'project') $this->config->api->createlib->requiredFields .= ',project'; + if($libType == 'product') $this->config->api->createlib->requiredFields .= ',product'; + if($libType == 'project') $this->config->api->createlib->requiredFields .= ',project'; + + $this->checkApiLibName($data, $libType); + + if(dao::isError()) return false; $data->type = static::DOC_TYPE_API; $this->dao->insert(TABLE_DOCLIB)->data($data)->autoCheck() ->batchCheck($this->config->api->createlib->requiredFields, 'notempty') - ->check('name', 'unique', "`type` = '" . static::DOC_TYPE_API . "'") ->exec(); return $this->dao->lastInsertID(); @@ -269,14 +278,15 @@ class docModel extends model */ public function updateApiLib($id) { - $oldLib = $this->getLibById($id); + $oldLib = $this->getLibById($id); + $libType = $this->post->libType; $data = fixer::input('post') ->trim('name') ->join('groups', ',') ->join('users', ',') - ->setForce('product', $this->post->libType == 'product' ? $this->post->product : 0) - ->setForce('project', $this->post->libType == 'project' ? $this->post->project : 0) + ->setForce('product', $libType == 'product' ? $this->post->product : 0) + ->setForce('project', $libType == 'project' ? $this->post->project : 0) ->remove('uid,contactListMenu,libType') ->get(); @@ -288,8 +298,13 @@ class docModel extends model $this->lang->doclib->project = $this->lang->api->project; $this->lang->doclib->product = $this->lang->api->product; - if($this->post->libType == 'product') $this->config->api->createlib->requiredFields .= ',product'; - if($this->post->libType == 'project') $this->config->api->createlib->requiredFields .= ',project'; + if($libType == 'product') $this->config->api->createlib->requiredFields .= ',product'; + if($libType == 'project') $this->config->api->createlib->requiredFields .= ',project'; + + $data->id = $id; + $this->checkApiLibName($data, $libType); + + if(dao::isError()) return false; $data->type = static::DOC_TYPE_API; $this->dao->update(TABLE_DOCLIB)->data($data)->autoCheck() @@ -336,6 +351,17 @@ class docModel extends model } if($oldLib->acl != $lib->acl and $lib->acl == 'open') $lib->users = ''; + if($oldLib->type == 'api') + { + $type = 'nolink'; + if(!empty($oldLib->product)) $type = 'product'; + if(!empty($oldLib->project)) $type = 'project'; + $lib->id = $libID; + $lib->product = $oldLib->product; + $lib->project = $oldLib->project; + $this->checkApiLibName($lib, $type); + } + $lib->name = trim($lib->name); //Temporary treatment: Code for bug #15528. $this->dao->update(TABLE_DOCLIB)->data($lib)->autoCheck() ->batchCheck($this->config->doc->editlib->requiredFields, 'notempty') @@ -2984,4 +3010,29 @@ class docModel extends model } return $modules; } + + /** + * Check api library name. + * + * @param object $lib + * @param string $libType + * @access public + * @return void + */ + public function checkApiLibName($lib, $libType) + { + $sameNames = $this->dao->select('*') + ->from(TABLE_DOCLIB) + ->where('`product`')->eq($lib->product) + ->andWhere('`project`')->eq($lib->project) + ->andWhere('`name`')->eq($lib->name) + ->andWhere('`type`')->eq('api') + ->beginIF(isset($lib->id)) + ->andWhere('`id`')->ne($lib->id) + ->fi() + ->fetchAll(); + if(count($sameNames) > 0 and $libType == 'product') dao::$errors['name'] = $this->lang->doclib->apiNameUnique[$libType] . sprintf($this->lang->error->unique, $this->lang->doclib->name, $lib->name); + if(count($sameNames) > 0 and $libType == 'project') dao::$errors['name'] = $this->lang->doclib->apiNameUnique[$libType] . sprintf($this->lang->error->unique, $this->lang->doclib->name, $lib->name); + if(count($sameNames) > 0 and $libType == 'nolink') dao::$errors['name'] = $this->lang->doclib->apiNameUnique[$libType] . sprintf($this->lang->error->unique, $this->lang->doclib->name, $lib->name); + } }