* @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 .= "
';
}
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 .= "";
$html .= "
";
$html .= "";
$html .= "";
$html .= '
';
$html .= '
';
$html .= '
';
$html .= "";
$html .= '
';
$html .= '
';
$html .= $getPrivsItemsHtml($package->privs, $subsetName, $packageID, $groupPrivs);
$html .= '
';
$html .= '
';
}
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[] = "";
$checked = $subset->selectCount && $subset->selectCount == $subset->allCount;
$checkID = "allChecker{$subsetName}";
$privBodyHtml[] = "| ";
$privBodyHtml[] = '';
$privBodyHtml[] = ' | ';
$privBodyHtml[] = "";
$privBodyHtml[] = $getPackagesBoxHtml($subsetName, $packages[$subsetName], $groupPrivs);
$privBodyHtml[] = ' | ';
$privBodyHtml[] = '
';
}
$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("")
),
a
(
setClass('btn switchBtn'),
set::href(inlink('managePriv', "projectID=$projectID&groupID=$groupID&type=byGroup")),
html("")
)
),
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();