1<?php
2/**
3 * Class ilBiblAdminFieldTableGUI
4 * @author: Benjamin Seglias   <bs@studer-raimann.ch>
5 */
6
7class ilBiblAdminFieldTableGUI extends ilTable2GUI
8{
9    use \ILIAS\Modules\OrgUnit\ARHelper\DIC;
10
11    const TBL_ID = 'tbl_bibl_fields';
12    /**
13     * @var \ilBiblAdminFactoryFacadeInterface
14     */
15    protected $facade;
16    /**
17     * @var ilBiblAdminFieldGUI
18     */
19    protected $parent_obj;
20    /**
21     * @var array
22     */
23    protected $filter = [];
24    /**
25     * @var int
26     */
27    protected $position_index = 1;
28
29    /**
30     * ilBiblAdminFieldTableGUI constructor.
31     * @param object                             $a_parent_obj
32     * @param \ilBiblAdminFactoryFacadeInterface $facade
33     */
34    public function __construct($a_parent_obj, ilBiblAdminFactoryFacadeInterface $facade)
35    {
36        $this->facade     = $facade;
37        $this->parent_obj = $a_parent_obj;
38
39        $this->setId(self::TBL_ID);
40        $this->setPrefix(self::TBL_ID);
41        $this->setFormName(self::TBL_ID);
42        $this->ctrl()->saveParameter($a_parent_obj, $this->getNavParameter());
43
44        parent::__construct($a_parent_obj);
45        $this->parent_obj = $a_parent_obj;
46        $this->setRowTemplate('tpl.bibl_administration_fields_list_row.html', 'Modules/Bibliographic');
47
48        $this->setFormAction($this->ctrl()->getFormAction($this->parent_obj));
49
50        $this->setExternalSorting(true);
51
52        $this->setDefaultOrderField("identifier");
53        $this->setDefaultOrderDirection("asc");
54        $this->setExternalSegmentation(true);
55        $this->setEnableHeader(true);
56
57        $this->initColumns();
58
59        if ($this->parent_obj->checkPermissionBoolAndReturn('write')) {
60            $this->addCommandButton(ilBiblAdminFieldGUI::CMD_SAVE, $this->lng()->txt("save"));
61        }
62
63        $this->addFilterItems();
64        $this->parseData();
65    }
66
67    protected function initColumns()
68    {
69        $this->addColumn($this->lng()->txt('order'));
70        $this->addColumn($this->lng()->txt('identifier'));
71        $this->addColumn($this->lng()->txt('translation'));
72        $this->addColumn($this->lng()->txt('standard'));
73        $this->addColumn($this->lng()->txt('actions'), '', '150px');
74    }
75
76    protected function addFilterItems()
77    {
78        $field = new ilTextInputGUI($this->lng()->txt('identifier'), 'identifier');
79        $this->addAndReadFilterItem($field);
80    }
81
82    /**
83     * @param $field
84     */
85    protected function addAndReadFilterItem(ilFormPropertyGUI $field)
86    {
87        $this->addFilterItem($field);
88        $field->readFromSession();
89        if ($field instanceof ilCheckboxInputGUI) {
90            $this->filter[$field->getPostVar()] = $field->getChecked();
91        } else {
92            $this->filter[$field->getPostVar()] = $field->getValue();
93        }
94    }
95
96    /**
97     * Fills table rows with content from $a_set.
98     * @param array $a_set
99     */
100    public function fillRow($a_set)
101    {
102        $field = $this->facade->fieldFactory()->findById($a_set['id']);
103
104        $this->tpl->setVariable('FIELD_ID', $field->getId());
105        $this->tpl->setCurrentBlock("POSITION");
106        $this->tpl->setVariable('POSITION_VALUE', $this->position_index);
107        $this->tpl->parseCurrentBlock();
108
109        $this->tpl->setCurrentBlock("IDENTIFIER");
110        $this->tpl->setVariable('IDENTIFIER_VALUE', $field->getIdentifier());
111        $this->tpl->parseCurrentBlock();
112
113        $this->tpl->setCurrentBlock("TRANSLATION");
114        $this->tpl->setVariable('VAL_TRANSLATION', $this->facade->translationFactory()->translate($field));
115        $this->tpl->parseCurrentBlock();
116
117        $this->tpl->setCurrentBlock("STANDARD");
118        if ($field->getIsStandardField()) {
119            $this->tpl->setVariable('IS_STANDARD_VALUE', $this->lng()->txt('standard'));
120        } else {
121            $this->tpl->setVariable('IS_STANDARD_VALUE', $this->lng()->txt('custom'));
122        }
123
124        $this->tpl->parseCurrentBlock();
125        if ($this->parent_obj->checkPermissionBoolAndReturn('write')) {
126            $this->addActionMenu($field);
127        }
128
129        $this->position_index++;
130    }
131
132    /**
133     * @param \ilBiblFieldInterface $field
134     */
135    protected function addActionMenu(ilBiblFieldInterface $field)
136    {
137        $selectionList = new ilAdvancedSelectionListGUI();
138        $selectionList->setListTitle($this->lng->txt('actions'));
139        $selectionList->setId($field->getIdentifier());
140
141        $this->ctrl()
142             ->setParameter($this->parent_obj, ilBiblAdminRisFieldGUI::FIELD_IDENTIFIER, $field->getId());
143        $this->ctrl()
144             ->setParameterByClass(ilBiblTranslationGUI::class, ilBiblAdminRisFieldGUI::FIELD_IDENTIFIER, $field->getId());
145
146        $txt = $this->lng()->txt('translate');
147        $selectionList->addItem($txt, '', $this->ctrl()
148                                               ->getLinkTargetByClass(ilBiblTranslationGUI::class, ilBiblTranslationGUI::CMD_DEFAULT));
149
150        $this->tpl->setVariable('VAL_ACTIONS', $selectionList->getHTML());
151    }
152
153    protected function parseData()
154    {
155        $this->determineOffsetAndOrder();
156        $this->determineLimit();
157
158        $q = new ilBiblTableQueryInfo();
159
160        foreach ($this->filter as $filter_key => $filter_value) {
161            switch ($filter_key) {
162                case 'identifier':
163                    $filter = new ilBiblTableQueryFilter();
164                    $filter->setFieldName($filter_key);
165                    $filter->setFieldValue('%' . $filter_value . '%');
166                    $filter->setOperator("LIKE");
167                    $q->addFilter($filter);
168                    break;
169            }
170        }
171        $q->setSortingColumn('position');
172        $q->setSortingDirection('ASC');
173
174        $data = $this->facade->fieldFactory()
175                             ->filterAllFieldsForTypeAsArray($this->facade->type(), $q);
176
177        $this->setData($data);
178    }
179}
180