CrmMenu::deleteAll(['parent_id' => $id]);
return $this->redirect('menu');
}
+
+ public function actionMenuExport() {
+ $adminGroupMap = ArrayHelper::map(AdminGroup::find()->all(), 'id', 'name');
+ $cellMap = [];
+ $adminGroups = [];
+ foreach (AdminGroupRbacConfig::find()->all() as /** @var AdminGroupRbacConfig $agrc */ $agrc) {
+ $adminGroups[$agrc->admin_group_id] = true;
+ $groups = explode(',', $agrc->config);
+ foreach($groups as $group) {
+ if (!empty($group)) {
+ $cellMap[$group][] = $agrc->admin_group_id;
+ }
+ }
+ }
+
+ $permissions = [];
+ foreach (CrmMenu::find()->all() as $menu) {
+ $permission = 'menu' . $menu->url;
+ $permissions[$permission] = $menu->name;
+ $crmMenuPermissions = CrmMenuPermission::find()->where(['menu_id' => $menu->id])->all();
+ foreach ($crmMenuPermissions as $menuPermission) {
+ $permissions[$menuPermission->alias] = $menu->name . ': ' . $menuPermission->name;
+ }
+ if ($menu->dynamic_list) {
+ $list = UniversalCatalog::getDynamicList($menu->dynamic_list);
+ if (isset($list)) {
+ foreach ($list as $item => $name) {
+ $url = 'menu' . $menu->url . "_" . $item;
+ $permissions[$url] = $menu->name . ': ' . $name;
+ foreach ($crmMenuPermissions as $menuPermission) {
+ $permissions[$menuPermission->alias . $item] = $menu->name . ': ' . $name . ': ' . $menuPermission->name;
+ }
+ }
+ }
+ }
+ }
+
+ return $this->render('menu-export', compact('cellMap', 'adminGroups', 'adminGroupMap',
+ 'permissions'));
+ }
}
\ No newline at end of file
--- /dev/null
+<?php
+
+/** @var $cellMap array */
+/** @var $adminGroups array */
+/** @var $adminGroupMap array */
+/** @var $permissions array */
+
+$this->registerJsFile('/js/xlsx.full.min.js', ['position' => \yii\web\View::POS_END]);
+$this->registerCss(".hidden { display: none; }");
+
+?>
+
+<div class="authMenuExport m-5">
+
+ <button id="button" onclick="htmlTableToExcel()" class="btn btn-success">Экспортировать таблицу в EXCEL</button>
+
+ <button onclick="$('.hidden').toggle();" class="btn btn-secondary">Показать скрытые поля</button>
+
+ <div class="table-responsive">
+ <table id="tblToExcl" class="table">
+ <thead>
+ <tr>
+ <?php foreach (array_keys($adminGroups) as $adminGroupIndex => $adminGroup): ?>
+ <?php if ($adminGroupIndex == 0): ?>
+ <th></th><th></th>
+ <?php endif; ?>
+ <th><?= $adminGroupMap[$adminGroup] ?? '' ?></th>
+ <?php endforeach; ?>
+ </tr>
+ </thead>
+ <tbody>
+ <?php foreach (array_keys($cellMap) as $permIndex => $perm): ?>
+ <?php if ($permIndex % 21 == 20): ?>
+ <tr>
+ <?php foreach (array_keys($adminGroups) as $adminGroupIndex => $adminGroup): ?>
+ <?php if ($adminGroupIndex == 0): ?>
+ <th></th><th></th>
+ <?php endif; ?>
+ <th><?= $adminGroupMap[$adminGroup] ?? '' ?></th>
+ <?php endforeach; ?>
+ </tr>
+ <?php endif; ?>
+ <tr class="<?= ($permissions[$perm] ?? '')== '' ? 'hidden' : ''?>">
+ <td><?= $permissions[$perm] ?? '' ?></td>
+ <td><?= $perm ?></td>
+ <?php foreach (array_keys($adminGroups) as $adminGroup): ?>
+ <td><?= in_array($adminGroup, $cellMap[$perm]) ? 'X' : '' ?></td>
+ <?php endforeach; ?>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+ </div>
+ <script>
+ function htmlTableToExcel() {
+ const type = 'xlsx';
+ var data = document.getElementById('tblToExcl');
+ var excelFile = XLSX.utils.table_to_book(data, {sheet: "sheet1"});
+ XLSX.write(excelFile, { bookType: type, bookSST: true, type: 'base64' });
+ moment.locale('ru');
+ XLSX.writeFile(excelFile, 'AuthMenuCurrentTable_' + moment().format('L') + '.' + type);
+ }
+ </script>
+</div>
\ No newline at end of file