1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once "./Services/Repository/classes/class.ilObjectPluginListGUI.php";
5
6/**
7 * Class ilObjCloudListGUI
8 *
9 * @author  Timon Amstutz <timon.amstutz@ilub.unibe.ch>
10 * $Id:
11 *
12 * @extends ilObjectListGUI
13 */
14class ilObjCloudListGUI extends ilObjectListGUI
15{
16
17    /**
18     * initialisation
19     */
20    public function init()
21    {
22        global $DIC;
23        $lng = $DIC['lng'];
24
25        $this->copy_enabled = false;
26        $this->delete_enabled = true;
27        $this->cut_enabled = false;
28        $this->subscribe_enabled = true;
29        $this->link_enabled = false;
30        $this->info_screen_enabled = true;
31        $this->timings_enabled = true;
32        $this->type = "cld";
33        $this->gui_class_name = "ilobjcloudgui";
34
35        // general commands array
36        include_once('./Modules/Cloud/classes/class.ilObjCloudAccess.php');
37        $this->commands = ilObjCloudAccess::_getCommands();
38        $lng->loadLanguageModule("cld");
39    }
40
41
42    public function getCommands()
43    {
44        $object = ilObjectFactory::getInstanceByRefId($this->ref_id);
45        $header_action_gui = ilCloudConnector::getHeaderActionGUIClass(ilCloudConnector::getServiceClass($object->getServiceName(), $object->getId(), false));
46        $custom_urls = [];
47
48        if (method_exists($header_action_gui, "getCustomListActions")) {
49            // Fetch custom actions
50            $custom_list_actions = $header_action_gui->getCustomListActions();
51
52            if (is_array($custom_list_actions)) {
53                // Fetch custom URLs from the custom actions, if available
54                $this->fetchCustomUrlsFromCustomActions($custom_list_actions, $custom_urls);
55                // Adjust commands of this object by adding the new custom ones
56                $this->commands = array_merge($this->commands, $custom_list_actions);
57            }
58        }
59
60        // Generate ilias link, check permissions, etc...
61        $ref_commands = parent::getCommands();
62
63        // Remove recently added custom actions from dynamic field "commands" as
64        // it may pass onto other ListGUIs and mess them up
65        if (method_exists($header_action_gui, "getCustomListActions")) {
66            $this->neutralizeCommands($this->commands, $custom_list_actions);
67        }
68
69        // Inject custom urls, if avilable
70        if (!empty($custom_urls)) {
71            $this->injectCustomUrlsInCommands($custom_urls, $ref_commands);
72        }
73
74        return $ref_commands;
75    }
76
77
78    /**
79     * @return array
80     */
81    public function getProperties()
82    {
83        global $DIC;
84        $lng = $DIC['lng'];
85
86        $props = array();
87        include_once('./Modules/Cloud/classes/class.ilObjCloudAccess.php');
88        if (!ilObjCloudAccess::checkAuthStatus($this->obj_id)) {
89            $props[] = array(
90                "alert" => true,
91                "property" => $lng->txt("status"),
92                "value" => $lng->txt("cld_not_authenticated_offline"),
93            );
94        } else {
95            if (!ilObjCloudAccess::checkOnline($this->obj_id)) {
96                $props[] = array(
97                    "alert" => true,
98                    "property" => $lng->txt("status"),
99                    "value" => $lng->txt("offline"),
100                );
101            }
102        }
103
104        return $props;
105    }
106
107
108    /**
109     * Remove recently added custom actions from dynamic field "commands" as
110     * it may pass onto other ListGUIs and mess them up
111     *
112     * @param array $commands
113     * @param array $custom_list_actions
114     */
115    private function neutralizeCommands(array &$commands, array $custom_list_actions)
116    {
117        foreach ($custom_list_actions as $custom_list_action) {
118            for ($i = 0; $i < count($commands); $i++) {
119                if ($commands[$i]["lang_var"] == $custom_list_action["lang_var"]) {
120                    unset($commands[$i]);
121                }
122            }
123        }
124    }
125
126
127    /**
128     * Inject predefined custom URLs into ref_commands and change its destination
129     *
130     * @param $custom_urls
131     * @param $ref_commands
132     */
133    private function injectCustomUrlsInCommands($custom_urls, &$ref_commands)
134    {
135        foreach ($custom_urls as $custom_url) {
136            foreach ($ref_commands as &$ref_command) {
137                if ($custom_url["id"] === $ref_command["lang_var"]) {
138                    $ref_command["link"] = $custom_url["link"];
139                }
140            }
141        }
142    }
143
144
145    /**
146     * Fetches custom URLs from predefined actions and structures them appropriately
147     *
148     * @param array $custom_list_actions
149     * @param       $custom_urls
150     */
151    private function fetchCustomUrlsFromCustomActions(array $custom_list_actions, &$custom_urls)
152    {
153        foreach ($custom_list_actions as $custom_list_action) {
154            if (array_key_exists("custom_url", $custom_list_action)) {
155                array_push(
156                    $custom_urls,
157                    [
158                        "id" => $custom_list_action["lang_var"],
159                        "link" => $custom_list_action["custom_url"],
160                    ]
161                );
162            }
163        }
164    }
165}
166