Completed
Push — master ( ee0f97...139edb )
by Andreas
21:43
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
     * @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, $raise_error = true)
30
    {
31 2
        $this->add_commands();
32 2
        return parent::_check_index($index, $raise_error);
33
    }
34
35
    public function render() : string
36
    {
37
        $this->add_commands();
38
        return parent::render();
39
    }
40
41
    public function is_rendered() : bool
42
    {
43
        $this->add_commands();
44
        return parent::is_rendered();
45
    }
46
47 100
    public function add_item($item, $before = -1)
48
    {
49 100
        $this->add_commands();
50 100
        parent::add_item($item, $before);
51 100
    }
52
53 101
    private function add_commands()
54
    {
55 101
        if (!empty($this->items) || empty($this->topic->id)) {
56 50
            return;
57
        }
58 101
        $topics = midcom_core_context::get()->get_key(MIDCOM_CONTEXT_URLTOPICS);
59 101
        $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 101
        if (!$urltopic) {
61 101
            $urltopic = $this->topic;
62
        }
63 101
        $buttons = [];
64 101
        $workflow = new midcom\workflow\datamanager;
65 101
        if (   $this->topic->can_do('midgard:update')
66 101
            && $this->topic->can_do('midcom.admin.folder:topic_management')) {
67 91
            $buttons[] = $workflow->get_button("__ais/folder/edit/", [
68 91
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('edit folder', 'midcom.admin.folder'),
69 91
                MIDCOM_TOOLBAR_ACCESSKEY => 'g',
70
            ]);
71 91
            $buttons[] = $workflow->get_button("__ais/folder/metadata/{$urltopic->guid}/", [
72 91
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('edit folder metadata', 'midcom.admin.folder'),
73 91
                MIDCOM_TOOLBAR_GLYPHICON => 'database',
74
            ]);
75
        }
76
77 101
        if (   $urltopic->can_do('midgard:update')
78 101
            && $urltopic->can_do('midcom.admin.folder:topic_management')) {
79
            // Allow to move other than root folder
80 91
            if ($urltopic->guid !== midcom::get()->config->get('midcom_root_topic_guid')) {
81 91
                $viewer = new midcom\workflow\viewer;
82 91
                $buttons[] = $viewer->get_button("__ais/folder/move/{$urltopic->guid}/", [
83 91
                    MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('move', 'midcom.admin.folder'),
84 91
                    MIDCOM_TOOLBAR_GLYPHICON => 'arrows',
85
                ]);
86
            }
87
        }
88
89 101
        if (   $this->topic->can_do('midgard:update')
90 101
            && $this->topic->can_do('midcom.admin.folder:topic_management')) {
91 91
            $viewer = new midcom\workflow\viewer;
92 91
            $buttons[] = $viewer->get_button("__ais/folder/order/", [
93 91
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('order navigation', 'midcom.admin.folder'),
94 91
                MIDCOM_TOOLBAR_GLYPHICON => 'sort',
95 91
                MIDCOM_TOOLBAR_ACCESSKEY => 'o',
96
            ]);
97
98 91
            $buttons[] = [
99 91
                MIDCOM_TOOLBAR_URL => midcom_connection::get_url('self') . "__mfa/asgard/object/open/{$this->topic->guid}/",
100 91
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('manage object', 'midgard.admin.asgard'),
101 91
                MIDCOM_TOOLBAR_GLYPHICON => 'cog',
102 91
                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 101
        $buttons = array_merge($buttons, $this->get_approval_controls($this->topic, false));
106 101
        if (   $this->topic->can_do('midcom.admin.folder:template_management')
107 101
            && midcom::get()->auth->can_user_do('midgard.admin.asgard:manage_objects', null, 'midgard_admin_asgard_plugin')) {
108 91
            $enabled = false;
109 91
            $styleeditor_url = '';
110 91
            if ($this->topic->style != '') {
111
                if ($style_id = midcom::get()->style->get_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 91
            $buttons[] = [
123 91
                MIDCOM_TOOLBAR_URL => $styleeditor_url,
124 91
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('edit layout template', 'midcom.admin.folder'),
125 91
                MIDCOM_TOOLBAR_GLYPHICON => 'file-o',
126 91
                MIDCOM_TOOLBAR_ACCESSKEY => 't',
127 91
                MIDCOM_TOOLBAR_ENABLED => $enabled,
128
            ];
129
        }
130
131 101
        if (   $this->topic->can_do('midgard:create')
132 101
            && $this->topic->can_do('midcom.admin.folder:topic_management')) {
133 91
            $buttons[] = $workflow->get_button("__ais/folder/create/", [
134 91
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('create subfolder', 'midcom.admin.folder'),
135 91
                MIDCOM_TOOLBAR_GLYPHICON => 'folder',
136 91
                MIDCOM_TOOLBAR_ACCESSKEY => 'f',
137
            ]);
138
        }
139 101
        if (   $urltopic->guid !== midcom::get()->config->get('midcom_root_topic_guid')
140 101
            && $urltopic->can_do('midgard:delete')
141 101
            && $urltopic->can_do('midcom.admin.folder:topic_management')) {
142 91
            $workflow = new midcom\workflow\delete(['object' => $urltopic, 'recursive' => true]);
143 91
            $buttons[] = $workflow->get_button("__ais/folder/delete/", [
144 91
                MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_string('delete folder', 'midcom.admin.folder')
145
            ]);
146
        }
147 101
        foreach ($buttons as $button) {
148 91
            $this->items[] = $this->clean_item($button);
149
        }
150 101
    }
151
}
152