Passed
Push — master ( b266b2...0410fc )
by Andreas
09:54
created

midgard_admin_asgard_handler_shell   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Test Coverage

Coverage 86%

Importance

Changes 0
Metric Value
eloc 44
c 0
b 0
f 0
dl 0
loc 74
ccs 43
cts 50
cp 0.86
rs 10
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A _show_shell() 0 9 2
A _prepare_toolbar() 0 25 1
A _handler_shell() 0 30 4
1
<?php
2
/**
3
 * @package midgard.admin.asgard
4
 * @author CONTENT CONTROL http://www.contentcontrol-berlin.de/
5
 * @copyright CONTENT CONTROL http://www.contentcontrol-berlin.de/
6
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License
7
 */
8
9
use midcom\datamanager\datamanager;
10
use Symfony\Component\HttpFoundation\Request;
11
12
/**
13
 * Shell interface
14
 *
15
 * @package midgard.admin.asgard
16
 */
17
class midgard_admin_asgard_handler_shell extends midcom_baseclasses_components_handler
18
{
19
    use midgard_admin_asgard_handler;
20
21
    private bool $ajax;
22
23 1
    public function _handler_shell(Request $request, array &$data)
24
    {
25 1
        midcom::get()->auth->require_user_do('midgard.admin.asgard:manage_objects', null, 'midgard_admin_asgard_plugin');
26
27 1
        $controller = datamanager::from_schemadb($this->_config->get('schemadb_shell'))
0 ignored issues
show
Bug introduced by
It seems like $this->_config->get('schemadb_shell') can also be of type false; however, parameter $path of midcom\datamanager\datamanager::from_schemadb() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

27
        $controller = datamanager::from_schemadb(/** @scrutinizer ignore-type */ $this->_config->get('schemadb_shell'))
Loading history...
28 1
            ->get_controller();
29
30 1
        switch ($controller->handle($request)) {
31 1
            case 'save':
32
                $data['code'] = $controller->get_form_values()['code'];
33
                break;
34
35 1
            case 'edit':
36 1
                foreach ($controller->get_errors() as $error) {
37
                    midcom::get()->uimessages->add($this->_l10n->get($this->_component), $error, 'error');
38
                }
39
        }
40
41 1
        $data['controller'] = $controller;
42 1
        $data['view_title'] = $this->_l10n->get('shell');
43
44 1
        midcom::get()->head->add_jsfile(MIDCOM_STATIC_URL . '/midgard.admin.asgard/shell.js');
45
46 1
        $data['asgard_toolbar'] = $this->_prepare_toolbar();
47
48
        // Set the breadcrumb data
49 1
        $this->add_breadcrumb($this->router->generate('welcome'), $this->_l10n->get($this->_component));
50 1
        $this->add_breadcrumb($this->router->generate('shell'), $data['view_title']);
51 1
        $this->ajax = $request->query->has('ajax');
52 1
        return $this->get_response();
53
    }
54
55 1
    private function _prepare_toolbar() : midgard_admin_asgard_toolbar
56
    {
57 1
        $toolbar = new midgard_admin_asgard_toolbar();
58 1
        $buttons = [
59 1
            [
60 1
                MIDCOM_TOOLBAR_LABEL => $this->_l10n->get('save in browser'),
61 1
                MIDCOM_TOOLBAR_GLYPHICON => 'floppy-o',
62 1
                MIDCOM_TOOLBAR_ACCESSKEY => 's',
63 1
                MIDCOM_TOOLBAR_OPTIONS => ['id' => 'save-script']
64 1
            ],
65 1
            [
66 1
                MIDCOM_TOOLBAR_LABEL => $this->_l10n->get('restore from browser'),
67 1
                MIDCOM_TOOLBAR_GLYPHICON => 'recycle',
68 1
                MIDCOM_TOOLBAR_ACCESSKEY => 'r',
69 1
                MIDCOM_TOOLBAR_OPTIONS => ['id' => 'restore-script']
70 1
            ],
71 1
            [
72 1
                MIDCOM_TOOLBAR_LABEL => $this->_l10n->get('clear all'),
73 1
                MIDCOM_TOOLBAR_GLYPHICON => 'trash',
74 1
                MIDCOM_TOOLBAR_ACCESSKEY => 'r',
75 1
                MIDCOM_TOOLBAR_OPTIONS => ['id' => 'clear-script']
76 1
            ]
77 1
        ];
78 1
        $toolbar->add_items($buttons);
79 1
        return $toolbar;
80
    }
81
82 1
    public function _show_shell(string $handler_id, array &$data)
83
    {
84 1
        if (!$this->ajax) {
85 1
            midcom_show_style('midgard_admin_asgard_shell');
86
        } else {
87
            midcom::get()->cache->content->enable_live_mode();
88
            ob_implicit_flush();
89
            midcom_show_style('midgard_admin_asgard_shell_runner');
90
            ob_implicit_flush(false);
91
        }
92
    }
93
}
94