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