Completed
Push — master ( d22395...24bd03 )
by Andreas
13:45
created

midcom_helper_toolbar_node::is_rendered()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
ccs 0
cts 3
cp 0
crap 2
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
     *
18
     * @var midcom_db_topic
19
     */
20
    private $topic;
21
22 338
    public function __construct(midcom_db_topic $topic)
23
    {
24 338
        $this->topic = $topic;
25 338
        $config = midcom::get()->config;
26 338
        parent::__construct($config->get('toolbars_node_style_class'), $config->get('toolbars_node_style_id'));
27 338
        $this->label = midcom::get()->i18n->get_string('folder', 'midcom');
28 338
    }
29
30 2
    protected function _check_index($index, $raise_error = true)
31
    {
32 2
        $this->add_commands();
33 2
        return parent::_check_index($index, $raise_error);
34
    }
35
36
    public function is_rendered() : bool
37
    {
38
        $this->add_commands();
39
        return parent::is_rendered();
40
    }
41
42 2
    private function add_commands()
43
    {
44 2
        if (!empty($this->items) || empty($this->topic->id)) {
45 1
            return;
46
        }
47 1
        $topics = midcom_core_context::get()->get_key(MIDCOM_CONTEXT_URLTOPICS);
48 1
        $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

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