Documentation/Index/JSMenuAsCustomWidget: CustomJSMenu.inc

Plik CustomJSMenu.inc, 2.6 KB (dodany przez TS, 4 years temu)
xx
Line 
1<?php
2
3/**
4 * CustomJSMenu jako custom widget
5 *
6 * @author Tomasz Świenty
7 * @version 0.1
8 * @copyright Copyright (c) eDokumenty
9 */
10final class CustomJSMenu {
11
12
13    /**
14     * @var string[]
15     */
16    private static $cMethods = [
17        'execute'
18    ];
19
20
21    /**
22     * @return string[]
23     */
24    public function getCallableMethods() {
25
26        return self::$cMethods;
27
28    }
29
30
31    /**
32     * @param $params
33     * @return string|true
34     */
35    public function execute($params) {
36
37        $pData = JSON::toArray($params);
38
39        return print_r($pData, TRUE);
40
41    }
42
43
44    /**
45     * @param $args
46     * @return bool
47     */
48    public static function init($args) {
49
50        if (!isset($args['menu']) OR !$args['menu'] instanceof JSMenu) {
51            return FALSE;
52        }
53
54        $HWND = App::registerClass('./scripts/CustomJSMenu.inc', __CLASS__);
55
56        // menu drugiego poziomu
57        $newSubMenu = new JSMenu($args['menu']->name.'newSubMenu');
58        $newSubMenu->width = 260;
59        $newSubMenu->addItem('document', Translator::translate('Nowy dokument'), NULL, 'on', TRUE);
60        $newSubMenu->addItem('report', Translator::translate('Nowy raport'), NULL, 'on', TRUE);
61        $newSubMenu->onChange = '(value) => {alert(value);}';
62
63        $args['menu']->addItem('new', Translator::translate('Nowy'), NULL, 'on', TRUE, $newSubMenu);
64        $args['menu']->addItem('edit', Translator::translate('Edycja)'), NULL, 'on', TRUE);
65        $args['menu']->onChange = '
66            (value) => {
67                let params = '.(isset($args['params']) ? $args['params'] : '\'{}\'').'.parseJSON();
68                let keyval = (typeof params[\'keyval\'] !== \'undefined\') ? params[\'keyval\'] : [];
69                let js_after = (typeof params[\'js_after\'] !== \'undefined\') ? params[\'js_after\'] : () => {};               
70
71                if (value === \'new\') {
72                    $A1(\''.$HWND.'\', null, '.(int)array_search('execute', self::$cMethods).', ({contid:keyval, js_after:js_after}).toJSONString(), \'alert(text);\');
73                }
74               
75                if (value === \'edit\') {
76                    // moze byc wiele zaznaczonych -> edytuj tylko pierwszego klienta
77                    if (keyval.length) {
78                        App.openDialogByCls(\'CONTACT_EDIT\', keyval.shift());
79                    } else {
80                        WidgetException(null, \'Wybierz klienta z listy\');
81                    }
82                }               
83            }';
84
85    }
86
87
88}
89
90if (isset($args)) {
91    CustomJSMenu::init($args);
92}