diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index 5291a4f..581a020 100644 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -78,6 +78,17 @@ return [ ], ], ], + '^.*/api/admin/find/group.*$' => [ + [ + 'dest' => '\Modules\Admin\Controller:apiGroupFind', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => Controller::MODULE_NAME, + 'type' => PermissionType::READ, + 'state' => PermissionState::ACCOUNT, + ], + ], + ], '^.*/api/admin/account.*$' => [ [ @@ -129,4 +140,50 @@ return [ ], ], ], + + '^.*/api/admin/group/account.*$' => [ + [ + 'dest' => '\Modules\Admin\Controller:apiAddAccountToGroup', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => Controller::MODULE_NAME, + 'type' => PermissionType::MODIFY, + 'state' => PermissionState::MODULE, + ], + ], + ], + '^.*/api/admin/account/group.*$' => [ + [ + 'dest' => '\Modules\Admin\Controller:apiAddGroupToAccount', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => Controller::MODULE_NAME, + 'type' => PermissionType::MODIFY, + 'state' => PermissionState::MODULE, + ], + ], + ], + + '^.*/api/admin/group/permission.*$' => [ + [ + 'dest' => '\Modules\Admin\Controller:apiAddGroupPermission', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => Controller::MODULE_NAME, + 'type' => PermissionType::PERMISSION, + 'state' => PermissionState::MODULE, + ], + ], + ], + '^.*/api/admin/account/permission.*$' => [ + [ + 'dest' => '\Modules\Admin\Controller:apiAddAccountPermission', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => Controller::MODULE_NAME, + 'type' => PermissionType::PERMISSION, + 'state' => PermissionState::MODULE, + ], + ], + ], ]; diff --git a/Controller.php b/Controller.php index e7652ea..1ac2400 100644 --- a/Controller.php +++ b/Controller.php @@ -18,10 +18,12 @@ use Model\Message\FormValidation; use Modules\Admin\Models\Account; use Modules\Admin\Models\AccountMapper; +use Modules\Admin\Models\AccountPermission; use Modules\Admin\Models\AccountPermissionMapper; use Modules\Admin\Models\NullAccountPermission; use Modules\Admin\Models\Group; use Modules\Admin\Models\GroupMapper; +use Modules\Admin\Models\GroupPermission; use Modules\Admin\Models\GroupPermissionMapper; use Modules\Admin\Models\NullGroupPermission; use Modules\Admin\Models\PermissionState; @@ -42,6 +44,8 @@ use phpOMS\Utils\Parser\Markdown\Markdown; use phpOMS\Views\View; use phpOMS\DataStorage\Database\RelationType; use phpOMS\Module\InfoManager; +use phpOMS\Account\PermissionAbstract; +use phpOMS\Account\PermissionOwner; /** * Admin controller class. @@ -218,6 +222,9 @@ final class Controller extends ModuleAbstract implements WebInterface $view->addData('permissions', $permissions); + $accGrpSelector = new \Modules\Admin\Theme\Backend\Components\GroupTagSelector\GroupTagSelectorView($this->app, $request, $response); + $view->addData('grpSelector', $accGrpSelector); + return $view; } @@ -296,6 +303,12 @@ final class Controller extends ModuleAbstract implements WebInterface $view->addData('permissions', $permissions); + $accGrpSelector = new \Modules\Profile\Theme\Backend\Components\AccountGroupSelector\BaseView($this->app, $request, $response); + $view->addData('accGrpSelector', $accGrpSelector); + + $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app, $request, $response); + $view->addData('editor', $editor); + return $view; } @@ -318,6 +331,9 @@ final class Controller extends ModuleAbstract implements WebInterface $view->setTemplate('/Modules/Admin/Theme/Backend/groups-create'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1000103001, $request, $response)); + $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app, $request, $response); + $view->addData('editor', $editor); + return $view; } @@ -423,7 +439,9 @@ final class Controller extends ModuleAbstract implements WebInterface $data = \json_decode((string) $request->getData('settings'), true); } + $this->app->eventManager->trigger('PRE:Module:Admin-settings-set', '', $data); $this->app->appSettings->set($data, true); + $this->app->eventManager->trigger('POST:Module:Admin-settings-set', '', $data); $response->set($request->getUri()->__toString(), [ 'status' => NotificationLevel::OK, @@ -474,7 +492,9 @@ final class Controller extends ModuleAbstract implements WebInterface { $group = $this->updateGroupFromRequest($request); + $this->app->eventManager->trigger('PRE:Module:Admin-group-update', '', $group); GroupMapper::update($group); + $this->app->eventManager->trigger('POST:Module:Admin-group-update', '', $group); $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); $response->set($request->getUri()->__toString(), [ @@ -549,9 +569,9 @@ final class Controller extends ModuleAbstract implements WebInterface $group = $this->createGroupFromRequest($request); - $this->app->eventManager->trigger('PRE:Module:Admin-groupcreate', '', $group); + $this->app->eventManager->trigger('PRE:Module:Admin-group-create', '', $group); GroupMapper::create($group); - $this->app->eventManager->trigger('POST:Module:Admin-groupcreate', '', $group); + $this->app->eventManager->trigger('POST:Module:Admin-group-create', '', $group); $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); $response->set($request->getUri()->__toString(), [ @@ -600,9 +620,9 @@ final class Controller extends ModuleAbstract implements WebInterface { $group = GroupMapper::get((int) $request->getData('id')); - $this->app->eventManager->trigger('PRE:Module:Admin-groupdelete', '', $group); + $this->app->eventManager->trigger('PRE:Module:Admin-group-delete', '', $group); $status = GroupMapper::delete($group); - $this->app->eventManager->trigger('POST:Module:Admin-groupdelete', '', $group); + $this->app->eventManager->trigger('POST:Module:Admin-group-delete', '', $group); $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); $response->set($request->getUri()->__toString(), [ @@ -613,6 +633,29 @@ final class Controller extends ModuleAbstract implements WebInterface ]); } + /** + * Api method to find groups + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiGroupFind(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + $response->set( + $request->getUri()->__toString(), + \array_values( + GroupMapper::find((string) ($request->getData('search') ?? '')) + ) + ); + } + /** * Api method to get an accoung * @@ -709,11 +752,9 @@ final class Controller extends ModuleAbstract implements WebInterface $account = $this->createAccountFromRequest($request); - $this->app->eventManager->trigger('PRE:Module:Admin-accountcreate', '', $account); - + $this->app->eventManager->trigger('PRE:Module:Admin-account-create', '', $account); AccountMapper::create($account); - - $this->app->eventManager->trigger('POST:Module:Admin-accountcreate', '', $account); + $this->app->eventManager->trigger('POST:Module:Admin-account-create', '', $account); $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); $response->set($request->getUri()->__toString(), [ @@ -765,9 +806,9 @@ final class Controller extends ModuleAbstract implements WebInterface { $account = AccountMapper::get((int) ($request->getData('id'))); - $this->app->eventManager->trigger('PRE:Module:Admin-accountdelete', '', $account); + $this->app->eventManager->trigger('PRE:Module:Admin-account-delete', '', $account); $status = AccountMapper::delete($account); - $this->app->eventManager->trigger('POST:Module:Admin-accountdelete', '', $account); + $this->app->eventManager->trigger('POST:Module:Admin-account-delete', '', $account); $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); $response->set($request->getUri()->__toString(), [ @@ -794,7 +835,10 @@ final class Controller extends ModuleAbstract implements WebInterface public function apiAccountUpdate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { $account = $this->updateAccountFromRequest($request, true); - $status = AccountMapper::update($account); + + $this->app->eventManager->trigger('PRE:Module:Admin-account-update', '', $account); + $status = AccountMapper::update($account); + $this->app->eventManager->trigger('POST:Module:Admin-account-update', '', $account); $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); $response->set($request->getUri()->__toString(), [ @@ -857,6 +901,7 @@ final class Controller extends ModuleAbstract implements WebInterface return; } + $this->app->eventManager->trigger('PRE:Module:Admin-module-status', '', ['status' => $status, 'module' => $module]); switch ($status) { case ModuleStatusUpdateType::ACTIVATE: $done = $module === 'Admin' ? false : $this->app->moduleManager->activate($module); @@ -882,6 +927,7 @@ final class Controller extends ModuleAbstract implements WebInterface $done = false; $msg = 'Unknown module status change request.'; } + $this->app->eventManager->trigger('POST:Module:Admin-module-status', '', ['status' => $status, 'module' => $module]); $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); $response->set($request->getUri()->__toString(), [ @@ -891,4 +937,113 @@ final class Controller extends ModuleAbstract implements WebInterface 'response' => [] ]); } + + public function apiAddGroupPermission(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + if (!empty($val = $this->validatePermissionCreate($request))) { + $response->set('permission_create', new FormValidation($val)); + + return; + } + + $permission = $this->createPermissionFromRequest($request); + + $this->app->eventManager->trigger('PRE:Module:Admin-group-permission-create', '', $permission); + GroupMapper::create($permission); + $this->app->eventManager->trigger('POST:Module:Admin-group-permission-create', '', $permission); + + $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); + $response->set($request->getUri()->__toString(), [ + 'status' => NotificationLevel::OK, + 'title' => 'Group', + 'message' => 'Group permission successfully created.', + 'response' => $permission->jsonSerialize() + ]); + } + + /** + * Validate permission create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validatePermissionCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['permissionowner'] = !PermissionOwner::isValidValue($request->getData('permissionowner'))) + || ($val['permissionref'] = !\is_numeric($request->getData('permissionref'))) + ) { + return $val; + } + + return []; + } + + /** + * Method to create a permission from request. + * + * @param RequestAbstract $request Request + * + * @return GroupPermission + * + * @since 1.0.0 + */ + public function createPermissionFromRequest(RequestAbstract $request) : PermissionAbstract + { + $permission = $request->getData('permissionowner') === PermissionOwner::GROUP ? new GroupPermission((int) $request->getData('permissionref')) : new AccountPermission((int) $request->getData('permissionref')); + $permission->setUnit($request->getData('permissionunit') === null ? null : (int) $request->getData('permissionunit')); + $permission->setApp($request->getData('permissionapp') === null ? null : (string) $request->getData('permissionapp')); + $permission->setModule($request->getData('permissionmodule') === null ? null : (string) $request->getData('permissionmodule')); + $permission->setType($request->getData('permissiontype') === null ? null : (int) $request->getData('permissiontype')); + $permission->setElement($request->getData('permissionelement') === null ? null : (int) $request->getData('permissionelement')); + $permission->setComponent($request->getData('permissioncomponent') === null ? null : (int) $request->getData('permissioncomponent')); + $permission->setPermission( + (int) $request->getData('permissioncreate') + | (int) $request->getData('permissionread') + | (int) $request->getData('permissionupdate') + | (int) $request->getData('permissiondelete') + | (int) $request->getData('permissionpermission') + ); + + return $permission; + } + + public function apiAddGroupToAccount(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + $account = (int) $request->getData('account'); + $groups = \array_map('intval', $request->getDataList('igroup-idlist')); + + $this->app->eventManager->trigger('PRE:Module:Admin-account-group-add', '', ['account' => $account, 'groups' => $groups]); + $success = AccountMapper::createRelation('groups', $account, $groups); + $this->app->eventManager->trigger('POST:Module:Admin-account-group-add', '', ['account' => $account, 'groups' => $groups]); + + $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); + $response->set($request->getUri()->__toString(), [ + 'status' => 'ok', + 'title' => 'Account', + 'message' => 'Group added to account', + 'response' => [] + ]); + } + + public function apiAddAccountToGroup(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + $group = (int) $request->getData('group'); + $accounts = \array_map('intval', $request->getDataList('iaccount-idlist')); + + $this->app->eventManager->trigger('PRE:Module:Admin-group-account-add', '', ['group' => $group, 'accounts' => $accounts]); + $success = GroupMapper::createRelation('accounts', $group, $accounts); + $this->app->eventManager->trigger('POST:Module:Admin-group-account-add', '', ['group' => $group, 'accounts' => $accounts]); + + $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); + $response->set($request->getUri()->__toString(), [ + 'status' => 'ok', + 'title' => 'Group', + 'message' => 'Account added to group', + 'response' => [] + ]); + } } diff --git a/Models/AccountPermission.php b/Models/AccountPermission.php index 7958f54..04269f0 100644 --- a/Models/AccountPermission.php +++ b/Models/AccountPermission.php @@ -36,6 +36,18 @@ class AccountPermission extends PermissionAbstract */ private $account = 0; + /** + * Constructor. + * + * @param int $group Group id + * + * @since 1.0.0 + */ + public function __construct(int $account = 0) + { + $this->account = $account; + } + /** * Get account id * diff --git a/Models/GroupMapper.php b/Models/GroupMapper.php index 63f7fe8..a3db6a6 100644 --- a/Models/GroupMapper.php +++ b/Models/GroupMapper.php @@ -35,7 +35,7 @@ class GroupMapper extends DataMapperAbstract */ protected static $columns = [ 'group_id' => ['name' => 'group_id', 'type' => 'int', 'internal' => 'id'], - 'group_name' => ['name' => 'group_name', 'type' => 'string', 'internal' => 'name'], + 'group_name' => ['name' => 'group_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true], 'group_status' => ['name' => 'group_status', 'type' => 'int', 'internal' => 'status'], 'group_desc' => ['name' => 'group_desc', 'type' => 'string', 'internal' => 'description'], 'group_desc_raw' => ['name' => 'group_desc_raw', 'type' => 'string', 'internal' => 'descriptionRaw'], diff --git a/Models/GroupPermission.php b/Models/GroupPermission.php index ac355ff..d9983bb 100644 --- a/Models/GroupPermission.php +++ b/Models/GroupPermission.php @@ -36,6 +36,18 @@ class GroupPermission extends PermissionAbstract */ private $group = 0; + /** + * Constructor. + * + * @param int $group Group id + * + * @since 1.0.0 + */ + public function __construct(int $group = 0) + { + $this->group = $group; + } + /** * Get group id * diff --git a/Theme/Backend/Components/GroupTagSelector/GroupTagSelectorPopupView.php b/Theme/Backend/Components/GroupTagSelector/GroupTagSelectorPopupView.php new file mode 100644 index 0000000..4d1c774 --- /dev/null +++ b/Theme/Backend/Components/GroupTagSelector/GroupTagSelectorPopupView.php @@ -0,0 +1,47 @@ +setTemplate('/Modules/Admin/Theme/Backend/Components/GroupTagSelector/group-selector-popup'); + } + + public function setId(string $id) + { + $this->id = $id; + } + + public function getId() : string + { + return $this->id; + } + + public function render(...$data) : string + { + $this->id = $data[0] ?? $this->id; + return parent::render(); + } +} diff --git a/Theme/Backend/Components/GroupTagSelector/GroupTagSelectorView.php b/Theme/Backend/Components/GroupTagSelector/GroupTagSelectorView.php new file mode 100644 index 0000000..973992e --- /dev/null +++ b/Theme/Backend/Components/GroupTagSelector/GroupTagSelectorView.php @@ -0,0 +1,54 @@ +setTemplate('/Modules/Admin/Theme/Backend/Components/GroupTagSelector/group-selector'); + + $view = new GroupTagSelectorPopupView($app, $request, $response); + $this->addData('group-selector-popup', $view); + } + + public function getId() : string + { + return $this->id; + } + + public function isRequired() : bool + { + return $this->isRequired; + } + + public function render(...$data) : string + { + $this->id = $data[0]; + $this->isRequired = $data[1] ?? false; + $this->getData('group-selector-popup')->setId($this->id); + + return parent::render(); + } +} diff --git a/Theme/Backend/Components/GroupTagSelector/group-selector-popup.tpl.php b/Theme/Backend/Components/GroupTagSelector/group-selector-popup.tpl.php new file mode 100644 index 0000000..960c413 --- /dev/null +++ b/Theme/Backend/Components/GroupTagSelector/group-selector-popup.tpl.php @@ -0,0 +1,48 @@ + \ No newline at end of file diff --git a/Theme/Backend/Components/GroupTagSelector/group-selector.tpl.php b/Theme/Backend/Components/GroupTagSelector/group-selector.tpl.php new file mode 100644 index 0000000..fc94deb --- /dev/null +++ b/Theme/Backend/Components/GroupTagSelector/group-selector.tpl.php @@ -0,0 +1,49 @@ +
+
+ + + + + isRequired() ? ' required' : ''; ?>> + +
+
+
+
\ No newline at end of file diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php index 1e5ca35..4a02e7b 100644 --- a/Theme/Backend/Lang/en.lang.php +++ b/Theme/Backend/Lang/en.lang.php @@ -21,12 +21,16 @@ return [ 'AuditLog' => 'Audit Log', 'Available' => 'Available', 'All' => 'All', + 'App' => 'App', 'Area' => 'Area', 'Banned' => 'Banned', 'Cache' => 'Cache', 'Children' => 'Children', 'Close' => 'Close', + 'Comp' => 'Comp.', + 'Component' => 'Component', 'Country' => 'Country', + 'Create' => 'Create', 'Created' => 'Created', 'CreatedBy' => 'Created By', 'Currency' => 'Currency', @@ -36,6 +40,8 @@ return [ 'Description' => 'Description', 'Delete' => 'Delete', 'Deactivate' => 'Deactivate', + 'Ele' => 'Ele.', + 'Element' => 'Element', 'Email' => 'Email', 'EmailAdmin' => 'Email Admin', 'Fast' => 'Fast', @@ -88,11 +94,15 @@ return [ 'PasswordChangeInterval' => 'Password Change Interval (days)', 'PasswordHistory' => 'Password History', 'PasswordRegex' => 'Password Regex', + 'Perm' => 'Perm.', + 'Permission' => 'Permission', 'Permissions' => 'Permissions', 'Person' => 'Person', 'Profile' => 'Profile', + 'Read' => 'Read', 'RAddress' => 'Remote Address', 'ReCache' => 'Re-Cache', + 'Release' => 'Release', 'Reset' => 'Reset', 'Running' => 'Running', 'Short' => 'Short', @@ -107,7 +117,7 @@ return [ 'Specialchar' => 'Special character', 'Status' => 'Status', 'Total' => 'Total', - 'Release' => 'Release', + 'Type' => 'Type', 'Tablespoon' => 'Tablespoon', 'Teaspoon' => 'Teaspoon', 'Temperature' => 'Temperature', @@ -119,8 +129,9 @@ return [ 'Timeformat' => 'Timeformat', 'Timeout' => 'Timeout', 'Timezone' => 'Timezone', - 'Type' => 'Type', + 'Unit' => 'Unit', 'Uninstall' => 'Uninstall', + 'Update' => 'Update', 'Uppercase' => 'Uppercase', 'Username' => 'Username', 'Version' => 'Version', diff --git a/Theme/Backend/accounts-create.tpl.php b/Theme/Backend/accounts-create.tpl.php index 330e176..b37d1bc 100644 --- a/Theme/Backend/accounts-create.tpl.php +++ b/Theme/Backend/accounts-create.tpl.php @@ -54,62 +54,4 @@ echo $this->getData('nav')->render(); ?> - -
- - - - - -
getHtml('Groups') ?>
getHtml('ID', 0, 0); ?> - getHtml('Name') ?> -
getHtml('Empty', 0, 0); ?> -
- -
-

getHtml('Groups'); ?>

-
-
- - -
-
-
-
-
-
-
-
- -
- - - - - -
getHtml('Permissions') ?>
getHtml('ID', 0, 0); ?> - Unit - App - Module - Type - Ele. - Comp. - Perm. -
getHtml('Empty', 0, 0); ?> -
- -
-

getHtml('Permissions'); ?>

-
-
- - -
-
-
-
-
-
-
-
diff --git a/Theme/Backend/accounts-single.tpl.php b/Theme/Backend/accounts-single.tpl.php index 3b59cee..9f6faa1 100644 --- a/Theme/Backend/accounts-single.tpl.php +++ b/Theme/Backend/accounts-single.tpl.php @@ -113,16 +113,14 @@ echo $this->getData('nav')->render(); ?>

getHtml('Groups'); ?>

-
+
+
getData('grpSelector')->render('iGroup', true); ?>
- - - - -
+ +
@@ -137,13 +135,13 @@ echo $this->getData('nav')->render(); ?> getHtml('ID', 0, 0); ?> - Unit - App - Module - Type - Ele. - Comp. - Perm. + getHtml('Unit'); ?> + getHtml('App'); ?> + getHtml('Module'); ?> + getHtml('Type'); ?> + getHtml('Ele'); ?> + getHtml('Comp'); ?> + getHtml('Perm'); ?> $value) : $c++; $permission = $value->getPermission(); ?> @@ -171,16 +169,47 @@ echo $this->getData('nav')->render(); ?>

getHtml('Permissions'); ?>

-
+ - - +
+
+
+
+
+
+
+
+
+
+
+
+
+
- - - - -
+ + + + + + + + + + + + + + + + + + + + +
+ + +
diff --git a/Theme/Backend/groups-create.tpl.php b/Theme/Backend/groups-create.tpl.php index a1aa8a9..9caa20a 100644 --- a/Theme/Backend/groups-create.tpl.php +++ b/Theme/Backend/groups-create.tpl.php @@ -21,8 +21,8 @@ echo $this->getData('nav')->render(); ?>

getHtml('Group'); ?>

-
- + +
@@ -32,93 +32,12 @@ echo $this->getData('nav')->render(); ?>
-
-
+
getData('editor')->render('group-editor'); ?> +
getData('editor')->getData('text')->render('group-editor', 'description', 'fGroupCreate'); ?>
- -
- - - - - - $value) : $c++; ?> - -
getHtml('Parents') ?>
getHtml('ID', 0, 0); ?> - Name -
- - - -
getHtml('Empty', 0, 0); ?> - -
- -
-

getHtml('Parent'); ?>

-
-
- - -
-
-
-
-
-
-
-
- -
- - - - - -
getHtml('Permissions') ?>
getHtml('ID', 0, 0); ?> - Unit - App - Module - Type - Ele. - Comp. - Perm. -
getHtml('Empty', 0, 0); ?> -
- -
-

getHtml('Permissions'); ?>

-
-
- - -
-
-
-
-
-
-
-
- -
-
-

getHtml('Accounts'); ?>

-
-
- - -
-
-
-
-
-
-
-
\ No newline at end of file diff --git a/Theme/Backend/groups-single.tpl.php b/Theme/Backend/groups-single.tpl.php index 9d969d4..e0272fc 100644 --- a/Theme/Backend/groups-single.tpl.php +++ b/Theme/Backend/groups-single.tpl.php @@ -36,7 +36,7 @@ echo $this->getData('nav')->render(); ?>

getHtml('Group'); ?>

- +
@@ -48,9 +48,8 @@ echo $this->getData('nav')->render(); ?>
-
- +
getData('editor')->render('group-editor'); ?> +
getData('editor')->getData('text')->render('group-editor', 'description', 'fGroupEdit'); ?>
@@ -79,12 +78,14 @@ echo $this->getData('nav')->render(); ?>

getHtml('Accounts'); ?>

-
+
-
-
+
getData('accGrpSelector')->render('iAccount', true); ?> +
+ +
@@ -99,13 +100,13 @@ echo $this->getData('nav')->render(); ?> getHtml('ID', 0, 0); ?> - Unit - App - Module - Type - Ele. - Comp. - Perm. + getHtml('Unit'); ?> + getHtml('App'); ?> + getHtml('Module'); ?> + getHtml('Type'); ?> + getHtml('Ele'); ?> + getHtml('Comp'); ?> + getHtml('Perm'); ?> $value) : $c++; $permission = $value->getPermission(); ?> @@ -133,12 +134,47 @@ echo $this->getData('nav')->render(); ?>

getHtml('Permissions'); ?>

-
+ -
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + +