1<?php
2
3use ILIAS\Modules\OrgUnit\ARHelper\BaseCommands;
4
5/**
6 * Class ilOrgUnitDefaultPermissionFormGUI
7 *
8 * @author Fabian Schmid <fs@studer-raimann.ch>
9 */
10class ilOrgUnitDefaultPermissionFormGUI extends ilPropertyFormGUI
11{
12    const F_OPERATIONS = 'operations';
13    /**
14     * @var \ILIAS\Modules\OrgUnit\ARHelper\BaseCommands
15     */
16    protected $parent_gui;
17    /**
18     * @var \ilOrgUnitPermission[]
19     */
20    protected $ilOrgUnitPermissions = [];
21
22
23    /**
24     * ilOrgUnitDefaultPermissionFormGUI constructor.
25     *
26     * @param \ILIAS\Modules\OrgUnit\ARHelper\BaseCommands $parent_gui
27     * @param ilOrgUnitPermission[]                        $ilOrgUnitPermissionsFilter
28     */
29    public function __construct(BaseCommands $parent_gui, array $ilOrgUnitPermissionsFilter)
30    {
31        $this->parent_gui = $parent_gui;
32        $this->ilOrgUnitPermissions = $ilOrgUnitPermissionsFilter;
33        $this->dic()->ctrl()->saveParameter($parent_gui, 'arid');
34        $this->setFormAction($this->dic()->ctrl()->getFormAction($this->parent_gui));
35        $this->initFormElements();
36        $this->initButtons();
37        $this->setTarget('_top');
38        parent::__construct();
39    }
40
41
42    /**
43     * @return int ID of the object
44     */
45    public function saveObject()
46    {
47        if (!$this->fillObject()) {
48            return false;
49        }
50        foreach ($this->ilOrgUnitPermissions as $ilOrgUnitPermission) {
51            $ilOrgUnitPermission->update();
52        }
53
54        return true;
55    }
56
57
58    protected function initButtons()
59    {
60        $this->setTitle($this->txt("form_title_org_default_permissions_"
61            . BaseCommands::CMD_UPDATE));
62        $this->addCommandButton(BaseCommands::CMD_UPDATE, $this->txt('save', true));
63        $this->addCommandButton(BaseCommands::CMD_CANCEL, $this->txt(BaseCommands::CMD_CANCEL));
64    }
65
66
67    protected function initFormElements()
68    {
69        foreach ($this->ilOrgUnitPermissions as $ilOrgUnitPermission) {
70            $header = new ilFormSectionHeaderGUI();
71            $context = $ilOrgUnitPermission->getContext()->getContext();
72            $header->setTitle($this->txt("obj_{$context}", false));
73            $this->addItem($header);
74
75            // Checkboxes
76            foreach ($ilOrgUnitPermission->getPossibleOperations() as $operation) {
77                $title = $this->txt("org_op_{$operation->getOperationString()}", false);
78                $id = $operation->getOperationId();
79                $cb = new ilCheckboxInputGUI($title, "operations[{$context}][{$id}]");
80                $this->addItem($cb);
81            }
82        }
83    }
84
85
86    public function fillForm()
87    {
88        $operations = array();
89        foreach ($this->ilOrgUnitPermissions as $ilOrgUnitPermission) {
90            $context = $ilOrgUnitPermission->getContext()->getContext();
91            foreach ($ilOrgUnitPermission->getPossibleOperations() as $operation) {
92                $id = $operation->getOperationId();
93                $operations["operations[{$context}][{$id}]"] = $ilOrgUnitPermission->isOperationIdSelected($operation->getOperationId());
94            }
95        }
96        $this->setValuesByArray($operations);
97    }
98
99
100    protected function fillObject()
101    {
102        if (!$this->checkInput()) {
103            return false;
104        }
105        $sent_operation_ids = $this->getInput(self::F_OPERATIONS);
106        foreach ($this->ilOrgUnitPermissions as $ilOrgUnitPermission) {
107            $operations = [];
108            $context = $ilOrgUnitPermission->getContext()->getContext();
109            foreach ($ilOrgUnitPermission->getPossibleOperations() as $operation) {
110                $id = $operation->getOperationId();
111                if ($sent_operation_ids[$context][$id]) {
112                    $operations[] = ilOrgUnitOperation::find($id);
113                }
114            }
115            $ilOrgUnitPermission->setOperations($operations);
116        }
117
118        return true;
119    }
120
121
122    /**
123     * @return \ilOrgUnitPermission[]
124     */
125    public function getIlOrgUnitPermissions()
126    {
127        return $this->ilOrgUnitPermissions;
128    }
129
130
131    /**
132     * @param \ilOrgUnitPermission[] $ilOrgUnitPermissions
133     */
134    public function setIlOrgUnitPermissions($ilOrgUnitPermissions)
135    {
136        $this->ilOrgUnitPermissions = $ilOrgUnitPermissions;
137    }
138
139
140    /**
141     * @return \ILIAS\DI\Container
142     */
143    protected function dic()
144    {
145        return $GLOBALS["DIC"];
146    }
147
148
149    /**
150     * @param $key
151     *
152     * @return mixed
153     */
154    protected function txt($key)
155    {
156        return $this->parent_gui->txt($key);
157    }
158}
159