| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376 |
- <?php
- /**
- * The privbypackage view file of project module of ZenTaoPMS.
- * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
- * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
- * @author Yuting Wang<wangyuting@easycorp.ltd>
- * @package project
- * @link https://www.zentao.net
- */
- namespace zin;
- jsVar('window.selectedPrivIdList', $selectedPrivList);
- jsVar('allPrivList', $allPrivList);
- jsVar('groupID', $groupID);
- jsVar('projectID', $projectID);
- jsVar('type', $type);
- if($group->role == 'limited')
- {
- div
- (
- setID('featureBar'),
- menu
- (
- setClass('nav nav-feature w-full'),
- li
- (
- setclass('nav-item'),
- a
- (
- setclass('active'),
- span($group->name)
- )
- )
- )
- );
- form
- (
- setID('managePrivForm'),
- setClass('gap-0' . ($app->getClientLang() == 'en' ? ' en-priv' : '')),
- set::actions(array()),
- div
- (
- setID('mainContent'),
- setClass('main main-content manageLimitGroup'),
- h::table
- (
- setClass('table table-hover table-striped table-bordered'),
- h::thead
- (
- h::tr
- (
- h::th($lang->group->module),
- h::th($lang->group->method)
- )
- ),
- h::tr
- (
- setClass(cycle('even, bg-gray')),
- h::th
- (
- setClass('text-right w-40'),
- $lang->my->common
- ),
- h::td
- (
- setID('my'),
- checkbox
- (
- setID('my-limited'),
- set::labelClass('priv nowrap'),
- set::name('actions[my][]'),
- set::value('limited'),
- set::checked(isset($groupPrivs['my']['limited'])),
- set::text($lang->my->limited)
- )
- ),
- formHidden('noChecked', '')
- )
- )
- ),
- toolbar
- (
- setClass('form-actions w-1/2'),
- btn(set(array('text' => $lang->save, 'btnType' => 'submit', 'type' => 'primary', 'onclick' => 'setNoChecked()'))),
- btn(set(array('text' => $lang->goback, 'url' => inlink('group', "project={$projectID}"), 'back' => true)))
- )
- );
- }
- else
- {
- $params = "projectID={$projectID}&groupID=$groupID&type=byPackage";
- $getPrivsItemsHtml = function($privs, $moduleName, $packageID, $groupPrivs)
- {
- global $lang;
- $html = '';
- foreach($privs as $privID => $priv)
- {
- $privMethod = isset($groupPrivs[$priv->module][$priv->method]) ? $priv->method : '';
- $checked = $priv->method == $privMethod;
- $checkID = "actions[{$priv->module}]{$priv->method}";
- $html .= "<div class='group-item' data-module='$moduleName' data-package='$packageID' data-divid='{$moduleName}{$packageID}' data-id='$privID'><div class='checkbox-primary'>";
- $html .= "<input type='checkbox' id='$checkID' value='$priv->method' name='actions[{$priv->module}][]' data-id='$privID'". ($checked ? ' checked' : '') . ">";
- $html .= "<label class='nowrap' for='$checkID'>$priv->name</label>";
- $html .= '</div></div>';
- }
- return $html;
- };
- $getPackagesBoxHtml = function($subsetName, $packages, $groupPrivs) use ($getPrivsItemsHtml)
- {
- global $lang;
- $html = '';
- foreach($packages as $packageID => $package)
- {
- $packagePrivs = $package->allCount;
- $packageSelect = $package->selectCount;
- $checked = $packagePrivs == $packageSelect;
- $checkID = "allCheckerModule{$subsetName}Package{$packageID}";
- $html .= "<div class='package' data-module='$subsetName' data-package='$packageID' all-privs='$packagePrivs' select-privs='$packageSelect' data-divid='{$subsetName}{$packageID}'>";
- $html .= "<div class='checkbox-primary checkbox-inline checkbox-left check-all'>";
- $html .= "<input type='checkbox' id='$checkID' value='1'". ($checked ? ' checked' : '') . ">";
- $html .= "<label class='" . (!empty($packageSelect) && $packagePrivs != $packageSelect ? 'text-left checkbox-indeterminate-block' : 'text-left') . "' for='$checkID'>{$lang->group->package->$packageID}</label>";
- $html .= '</div>';
- $html .= '<i class="icon priv-toggle"></i>';
- $html .= '</div>';
- $html .= "<div class='privs hidden' data-module='$subsetName' data-package='$packageID' data-divid='{$subsetName}{$packageID}'>";
- $html .= '<div class="arrow"></div>';
- $html .= '<div class="popover-content">';
- $html .= $getPrivsItemsHtml($package->privs, $subsetName, $packageID, $groupPrivs);
- $html .= '</div>';
- $html .= '</div>';
- }
- return $html;
- };
- $privBodyHtml = array();
- foreach($subsets as $subsetName => $subset)
- {
- if($subset->allCount == 0) continue;
- $subsetTitle = isset($lang->$subsetName) && isset($lang->$subsetName->common) ? $lang->$subsetName->common : $subsetName;
- $privBodyHtml[] = "<tr zui-key='$subsetName'>";
- $checked = $subset->selectCount && $subset->selectCount == $subset->allCount;
- $checkID = "allChecker{$subsetName}";
- $privBodyHtml[] = "<th class='text-middle text-left module' data-module='$subsetName' all-privs='$subset->allCount' select-privs='$subset->selectCount'>";
- $privBodyHtml[] = '<div class="checkbox-inline checkbox-left check-all"><div class="checkbox-primary">';
- $privBodyHtml[] = "<input type='checkbox' id='$checkID' value='1'" . ($checked ? ' checked' : '') . ">";
- $privBodyHtml[] = "<label for='$checkID' class='" . ($subset->selectCount && $subset->selectCount != $subset->allCount ? 'text-left checkbox-indeterminate-block' : 'text-left') . "'>{$subsetTitle}</label>";
- $privBodyHtml[] = '</div></div>';
- $privBodyHtml[] = '</th>';
- $privBodyHtml[] = "<td class='td-sm text-middle text-left package-column' data-module='$subsetName'>";
- $privBodyHtml[] = $getPackagesBoxHtml($subsetName, $packages[$subsetName], $groupPrivs);
- $privBodyHtml[] = '</td>';
- $privBodyHtml[] = '</tr>';
- }
- $dependTree = null;
- foreach($relatedPrivData['depend'] as $dependPrivs)
- {
- $dependTree[] = checkboxGroup
- (
- set::title(array('text' => $dependPrivs['text'], 'id' => "dependPrivs[{$dependPrivs['id']}]", 'name' => 'dependPrivs[]', 'data-id' => $dependPrivs['id'], 'data-has-children' => !empty($dependPrivs['children']), 'disabled' => true, 'checked' => true)),
- !empty($dependPrivs['children']) ? set::items($dependPrivs['children']) : null
- );
- }
- $recommendTree = null;
- foreach($relatedPrivData['recommend'] as $recommendPrivs)
- {
- $recommendTree[] = checkboxGroup
- (
- set::title(array('text' => $recommendPrivs['text'], 'id' => "recommendPrivs[{$recommendPrivs['id']}]", 'name' => 'recommendPrivs[]', 'data-id' => $recommendPrivs['id'], 'data-has-children' => !empty($recommendPrivs['children']))),
- !empty($recommendPrivs['children']) ? set::items($recommendPrivs['children']) : null
- );
- }
- div
- (
- setID('featureBar'),
- menu
- (
- setClass('nav nav-feature w-full'),
- li
- (
- span
- (
- icon('lock mr-2'),
- $group->name
- )
- ),
- li
- (
- span
- (
- set::className('text-md text-gray'),
- html($lang->arrow)
- )
- ),
- li
- (
- setclass('nav-item'),
- a
- (
- setclass(empty($nav) ? 'active' : ''),
- set::href(inlink('managepriv', sprintf($params, ''))),
- span($lang->group->all)
- )
- )
- )
- );
- formBase
- (
- setID('managePrivForm'),
- setClass('gap-0' . ($app->getClientLang() == 'en' ? ' en-priv' : '')),
- formHidden('actions[][]', ''),
- formHidden('noChecked', ''),
- set::actions(array()),
- div
- (
- setID('managePrivFormContainer'),
- setClass('flex'),
- div
- (
- setClass('main main-content canvas'),
- h::table
- (
- setID('privPackageList'),
- setClass('table table-striped table-bordered'),
- on::click()->call('handlePrivPackageListClick', jsRaw('event')),
- h::thead
- (
- h::tr
- (
- h::th
- (
- setClass('module'),
- $lang->group->module
- ),
- h::th
- (
- setClass('package'),
- $lang->privpackage->common
- )
- )
- ),
- h::tbody(html($privBodyHtml))
- )
- ),
- div
- (
- setClass('side relative'),
- on::click('.recommend input[type=checkbox]')->call('handleSideRecommentCheckClick', jsRaw('$this')),
- div
- (
- setClass('btn-group absolute top-0.5 right-full z-10 mr-8'),
- setID('switchBtnGroup'),
- a
- (
- setClass('btn switchBtn text-primary'),
- set::href(inlink('managePriv', "projectID=$projectID&groupID=$groupID&type=byPackage")),
- html("<i class='icon-has-authority-pack'></i>")
- ),
- a
- (
- setClass('btn switchBtn'),
- set::href(inlink('managePriv', "projectID=$projectID&groupID=$groupID&type=byGroup")),
- html("<i class='icon-without-authority-pack'></i>")
- )
- ),
- div
- (
- setClass('priv-panel'),
- div
- (
- setClass('panel-title'),
- $lang->group->dependentPrivs,
- icon
- (
- 'help',
- set('data-toggle', 'tooltip'),
- set('data-title', $lang->group->dependPrivTips),
- set('data-placement', 'right'),
- set('data-type', 'white'),
- set('data-class-name', 'text-gray border border-light w-40'),
- setClass('text-gray')
- )
- ),
- div
- (
- setClass('panel-content'),
- div
- (
- setClass('menuTree depend menu-active-primary menu-hover-primary'),
- setClass(count($relatedPrivData['depend']) == 0 ? 'hidden' : ''),
- $dependTree
- ),
- div
- (
- setClass('table-empty-tip text-center'),
- setClass(count($relatedPrivData['depend']) > 0 ? 'hidden' : ''),
- span
- (
- setClass('text-gray'),
- $lang->noData
- )
- )
- )
- ),
- div
- (
- setClass('priv-panel mt-m'),
- div
- (
- setClass('panel-title'),
- $lang->group->recommendPrivs,
- icon
- (
- 'help',
- set('data-toggle', 'tooltip'),
- set('data-title', $lang->group->recommendPrivTips),
- set('data-placement', 'right'),
- set('data-type', 'white'),
- set('data-class-name', 'text-gray border border-light w-40'),
- setClass('text-gray')
- )
- ),
- div
- (
- setClass('panel-content'),
- div
- (
- setClass('menuTree recommend menu-active-primary menu-hover-primary'),
- setClass(count($relatedPrivData['recommend']) == 0 ? 'hidden' : ''),
- $recommendTree
- ),
- div
- (
- setClass('table-empty-tip text-center'),
- setClass(count($relatedPrivData['recommend']) > 0 ? 'hidden' : ''),
- span
- (
- setClass('text-gray'),
- $lang->noData
- )
- )
- )
- )
- )
- ),
- toolbar
- (
- setClass('form-actions priv-footer'),
- checkbox
- (
- setID('allChecker'),
- set::rootClass('check-all'),
- set::text($lang->selectAll)
- ),
- btn(set(array('text' => $lang->save, 'btnType' => 'submit', 'type' => 'primary', 'onclick' => 'setNoChecked()'))),
- btn(set(array('text' => $lang->goback, 'url' => inlink('group', "project={$projectID}"), 'back' => true)))
- )
- );
- }
- /* ====== Render page ====== */
- render();
|