Passed
Push — master ( 72cab2...77b286 )
by Andreas
65:38 queued 23:02
created

midcom_helper_toolbar_node::_check_index()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 4
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * @package midcom.helper
4
 * @author The Midgard Project, http://www.midgard-project.org
5
 * @copyright The Midgard Project, http://www.midgard-project.org
6
 * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License
7
 */
8
9
/**
10
 * This class is a node (topic) toolbar class.
11
 *
12
 * @package midcom.helper
13
 */
14
class midcom_helper_toolbar_node extends midcom_helper_toolbar_view
15
{
16
    /**
17
     * @var midcom_db_topic
18
     */
19
    private $topic;
20
21 338
    public function __construct(midcom_db_topic $topic)
22
    {
23 338
        $this->topic = $topic;
24 338
        $config = midcom::get()->config;
25 338
        parent::__construct($config->get('toolbars_node_style_class'), $config->get('toolbars_node_style_id'));
26 338
        $this->label = midcom::get()->i18n->get_string('folder', 'midcom');
27 338
    }
28
29 2
    protected function _check_index($index, bool $raise_error = true) : ?int
30
    {
31 2
        $this->add_commands();
32 2
        return parent::_check_index($index, $raise_error);
33
    }
34
35 8
    public function render() : string
36
    {
37 8
        $this->add_commands();
38 8
        return parent::render();
39
    }
40
41 8
    public function is_rendered() : bool
42
    {
43 8
        $this->add_commands();
44 8
        return parent::is_rendered();
45
    }
46
47 100
    public function add_item(array $item, $before = -1)
48
    {
49 100
        $this->add_commands();
50 100
        parent::add_item($item, $before);
51 100
    }
52
53 108
    private function add_commands()
54
    {
55 108
        if (!empty($this->items) || empty($this->topic->id)) {
56 58
            return;
57
        }
58 108
        $topics = midcom_core_context::get()->get_key(MIDCOM_CONTEXT_URLTOPICS);
59 108
        $urltopic = end($topics);
0 ignored issues
show
Bug introduced by
It seems like $topics can also be of type false; however, parameter $array of end() does only seem to accept array, 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

59
        $urltopic = end(/** @scrutinizer ignore-type */ $topics);
Loading history...
60 108
        if (!$urltopic) {
61 108
            $urltopic = $this->topic;
62
        }
63 108
        $buttons = [];
64 108
        $workflow = new midcom\workflow\datamanager;
65 108
        if (   $this->topic->can_do('midgard:update')
66 108
            && $this->topic->can_do('midcom.admin.folder:topic_management')) {
67 97
            $buttons[] = $workflow->get_button("__ais/folder/edit/", [
68 97
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('edit folder', 'midcom.admin.folder'),
69 97
                MIDCOM_TOOLBAR_ACCESSKEY => 'g',
70
            ]);
71 97
            $buttons[] = $workflow->get_button("__ais/folder/metadata/{$urltopic->guid}/", [
72 97
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('edit folder metadata', 'midcom.admin.folder'),
73 97
                MIDCOM_TOOLBAR_GLYPHICON => 'database',
74
            ]);
75
        }
76
77 108
        if (   $urltopic->can_do('midgard:update')
78 108
            && $urltopic->can_do('midcom.admin.folder:topic_management')) {
79
            // Allow to move other than root folder
80 97
            if ($urltopic->guid !== midcom::get()->config->get('midcom_root_topic_guid')) {
81 97
                $viewer = new midcom\workflow\viewer;
82 97
                $buttons[] = $viewer->get_button("__ais/folder/move/{$urltopic->guid}/", [
83 97
                    MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('move', 'midcom.admin.folder'),
84 97
                    MIDCOM_TOOLBAR_GLYPHICON => 'arrows',
85
                ]);
86
            }
87
        }
88
89 108
        if (   $this->topic->can_do('midgard:update')
90 108
            && $this->topic->can_do('midcom.admin.folder:topic_management')) {
91 97
            $viewer = new midcom\workflow\viewer;
92 97
            $buttons[] = $viewer->get_button("__ais/folder/order/", [
93 97
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('order navigation', 'midcom.admin.folder'),
94 97
                MIDCOM_TOOLBAR_GLYPHICON => 'sort',
95 97
                MIDCOM_TOOLBAR_ACCESSKEY => 'o',
96
            ]);
97
98 97
            $buttons[] = [
99 97
                MIDCOM_TOOLBAR_URL => midcom_connection::get_url('self') . "__mfa/asgard/object/open/{$this->topic->guid}/",
100 97
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('manage object', 'midgard.admin.asgard'),
101 97
                MIDCOM_TOOLBAR_GLYPHICON => 'cog',
102 97
                MIDCOM_TOOLBAR_ENABLED => midcom::get()->auth->can_user_do('midgard.admin.asgard:access', null, 'midgard_admin_asgard_plugin') && midcom::get()->auth->can_user_do('midgard.admin.asgard:manage_objects', null, 'midgard_admin_asgard_plugin'),
103
            ];
104
        }
105 108
        $buttons = array_merge($buttons, $this->get_approval_controls($this->topic, false));
106 108
        if (   $this->topic->can_do('midcom.admin.folder:template_management')
107 108
            && midcom::get()->auth->can_user_do('midgard.admin.asgard:manage_objects', null, 'midgard_admin_asgard_plugin')) {
108 97
            $enabled = false;
109 97
            $styleeditor_url = '';
110 97
            if ($this->topic->style != '') {
111
                if ($style_id = midcom_db_style::id_from_path($this->topic->style)) {
112
                    try {
113
                        $style = midcom_db_style::get_cached($style_id);
114
                        $styleeditor_url = midcom_connection::get_url('self') . "__mfa/asgard/object/view/{$style->guid}/";
115
                        $enabled = true;
116
                    } catch (midcom_error $e) {
117
                        $e->log();
118
                    }
119
                }
120
            }
121
122 97
            $buttons[] = [
123 97
                MIDCOM_TOOLBAR_URL => $styleeditor_url,
124 97
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('edit layout template', 'midcom.admin.folder'),
125 97
                MIDCOM_TOOLBAR_GLYPHICON => 'file-o',
126 97
                MIDCOM_TOOLBAR_ACCESSKEY => 't',
127 97
                MIDCOM_TOOLBAR_ENABLED => $enabled,
128
            ];
129
        }
130
131 108
        if (   $this->topic->can_do('midgard:create')
132 108
            && $this->topic->can_do('midcom.admin.folder:topic_management')) {
133 97
            $buttons[] = $workflow->get_button("__ais/folder/create/", [
134 97
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('create subfolder', 'midcom.admin.folder'),
135 97
                MIDCOM_TOOLBAR_GLYPHICON => 'folder',
136 97
                MIDCOM_TOOLBAR_ACCESSKEY => 'f',
137
            ]);
138
        }
139 108
        if (   $urltopic->guid !== midcom::get()->config->get('midcom_root_topic_guid')
140 108
            && $urltopic->can_do('midgard:delete')
141 108
            && $urltopic->can_do('midcom.admin.folder:topic_management')) {
142 97
            $workflow = new midcom\workflow\delete(['object' => $urltopic, 'recursive' => true]);
143 97
            $buttons[] = $workflow->get_button("__ais/folder/delete/", [
144 97
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('delete folder', 'midcom.admin.folder')
145
            ]);
146
        }
147 108
        $this->items = array_map([$this, 'clean_item'], $buttons);
148 108
    }
149
}
150