]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
[ERP-51] Показывает права в одной таблице origin/feature_smirnov_erp-51_show_auth_export
authorAlexander Smirnov <fredeom@mail.ru>
Mon, 16 Sep 2024 08:57:31 +0000 (11:57 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Mon, 16 Sep 2024 08:57:31 +0000 (11:57 +0300)
erp24/controllers/AuthController.php
erp24/views/auth/menu-export.php [new file with mode: 0644]
erp24/web/js/auth/menu.js

index 3c5a673a68bb2d4308f88f131cb06feb2ca625f9..f4d06822783a616352e2c2dbbe595a891c57a687 100644 (file)
@@ -219,4 +219,44 @@ class AuthController extends BaseController
         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
diff --git a/erp24/views/auth/menu-export.php b/erp24/views/auth/menu-export.php
new file mode 100644 (file)
index 0000000..dcf9d69
--- /dev/null
@@ -0,0 +1,64 @@
+<?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
index 13ee2b9b4a1b6c57b23dbe545e0fd87022fa7db3..6d3eae806a2f9119c0a68450f823fc67c01c8c42 100644 (file)
@@ -1,3 +1,5 @@
+/* jshint esversion: 6 */
+
 const param = $('meta[name=csrf-param]').attr('content');
 const token = $('meta[name=csrf-token]').attr('content');