diff --git a/db/update17.0.sql b/db/update17.0.sql index 832ca723af..362a0073ff 100644 --- a/db/update17.0.sql +++ b/db/update17.0.sql @@ -11,3 +11,5 @@ DELETE FROM `zt_workflowaction` WHERE `module`='task' AND `action`='browse'; DELETE FROM `zt_workflowaction` WHERE `module`='build' AND `action`='browse'; ALTER TABLE `zt_projectproduct` MODIFY COLUMN `plan` varchar(255) NOT NULL; + +UPDATE `zt_project` SET status = 'closed' WHERE status='done'; diff --git a/module/doc/control.php b/module/doc/control.php index 263aacc735..8b4b0922fe 100755 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -827,19 +827,56 @@ class doc extends control } /** - * Ajax get doclib whitelist. + * Ajax get whitelist. * * @param int $doclibID * @param string $acl open|custom|private + * @param string $control user|group * @access public * @return string */ - public function ajaxGetWhitelist($doclibID, $acl) + public function ajaxGetWhitelist($doclibID, $acl = '', $control = '') { - $doclib = $this->doc->getLibById($doclibID); - $users = $this->user->getPairs('noletter|noempty|noclosed'); - + $doclib = $this->doc->getLibById($doclibID); + $users = $this->user->getPairs('noletter|noempty|noclosed'); $selectedUser = $doclib->users; + + if($control == 'group') + { + $groups = $this->loadModel('group')->getPairs(); + $selectedGroup = $doclib->groups; + if($doclib->acl == 'custom') + { + foreach($groups as $groupID => $group) + { + if(strpos($doclib->groups, (string)$groupID) === false) unset($groups[$groupID]); + } + return print(html::select('groups[]', $groups, $selectedGroup, "class='form-control chosen' multiple")); + } + if($doclib->acl == 'open') return print(html::select('groups[]', $groups, $selectedGroup, "class='form-control chosen' multiple")); + if($doclib->acl == 'private') echo 'private'; + if($doclib->acl == 'default') echo 'default'; + return false; + } + + if($control == 'user') + { + foreach($users as $account => $user) + { + if(($doclib->acl == 'custom' or $doclib->acl == 'private') and strpos($doclib->users, (string)$account) === false ) unset($users[$account]); + } + + if($doclib->acl == 'custom') + { + return print(html::select('users[]', $users, $selectedUser, "multiple class='form-control")); + } + if($doclib->acl == 'open') return print(html::select('users[]', $users, $selectedUser, "multiple class='form-control")); + if($doclib->acl == 'private') echo 'private'; + if($doclib->acl == 'default') echo 'default'; + return false; + } + + /* Sync whitelist when doclib permissions changed. */ if($doclib->acl != 'custom' and !empty($doclib->project) and $acl == 'custom') { $project = $this->loadModel('project')->getById($doclib->project); diff --git a/module/doc/js/common.js b/module/doc/js/common.js index 48edfdbc1d..dfa45c85a3 100644 --- a/module/doc/js/common.js +++ b/module/doc/js/common.js @@ -21,15 +21,18 @@ function loadModules(libID) */ function toggleAcl(acl, type) { + var libID = $('#lib').val(); if(acl == 'custom') { $('#whiteListBox').removeClass('hidden'); $('#groupBox').removeClass('hidden'); + if(type == 'doc') loadWhitelist(libID); } else if(acl == 'private') { $('#whiteListBox').removeClass('hidden'); $('#groupBox').addClass('hidden'); + if(type == 'doc') loadWhitelist(libID); } else { @@ -78,6 +81,61 @@ function loadDocModule(libID) $('#module_chosen').remove(); $('#module').chosen(); }); + + loadWhitelist(libID); +} + +/** + * Load whitelist by libID. + * + * @param int $libID + * @access public + * @return void + */ +function loadWhitelist(libID) +{ + var groupLink = createLink('doc', 'ajaxGetWhitelist', 'libID=' + libID + '&acl=&control=group'); + var userLink = createLink('doc', 'ajaxGetWhitelist', 'libID=' + libID + '&acl=&control=user'); + $.post(groupLink, function(groups) + { + if(!(groups == 'default' || groups == 'private')) + { + $('#groups').replaceWith(groups); + $('#groups_chosen').remove(); + $('#groups').chosen(); + } + }); + + $.post(userLink, function(users) + { + if(users != 'default') + { + if(users == 'private') + { + $('#aclopen').parent('.radio-inline').addClass('hidden'); + $('#aclcustom').parent('.radio-inline').addClass('hidden'); + $('#aclprivate').prop('checked', true); + } + else + { + $('#aclopen').parent('.radio-inline').removeClass('hidden'); + $('#aclcustom').parent('.radio-inline').removeClass('hidden'); + $('#aclprivate').prop('checked', false); + + $('#users').replaceWith(users); + $('#users_chosen').remove(); + $('#whiteListBox .picker').remove(); + if($('#users option').length < maxCount) + { + $('#users').chosen(); + } + else + { + $('#users').picker(); + } + } + } + }); } /** diff --git a/module/doc/model.php b/module/doc/model.php index bd8dcd90f5..6798d9e23f 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -1084,7 +1084,7 @@ class docModel extends model if(strpos(",{$object->users},", $account) !== false) return true; } - if(strpos($extra, 'notdoc') === false) + if(strpos($extra, 'notdoc') !== false) { static $extraDocLibs; if($extraDocLibs === null) $extraDocLibs = $this->getPrivLibsByDoc(); @@ -1118,7 +1118,7 @@ class docModel extends model if($extraDocLibs === null) $extraDocLibs = $this->getPrivLibsByDoc(); static $libs; - if($libs === null) $libs = $this->getLibs('all', 'notdoc'); + if($libs === null) $libs = $this->getLibs('all'); if(isset($libs[$object->lib]) and isset($extraDocLibs[$object->lib])) unset($extraDocLibs[$object->lib]); if($object->acl == 'open' and !isset($extraDocLibs[$object->lib])) return true; diff --git a/module/doc/view/create.html.php b/module/doc/view/create.html.php index 6be6f00aaa..380295240f 100644 --- a/module/doc/view/create.html.php +++ b/module/doc/view/create.html.php @@ -10,6 +10,7 @@ * @link http://www.zentao.net */ ?> +config->maxCount);?> doc->officeTypes, $docType) !== false):?>