1<?php 2 3/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */ 4 5/** 6 * Class ilDataCollectionField 7 * 8 * @author Martin Studer <ms@studer-raimann.ch> 9 * @author Fabian Schmid <fs@studer-raimann.ch> 10 * 11 * @deprecated REFACTOR 12 */ 13class ilBiblEntryTableGUI extends ilTable2GUI 14{ 15 use \ILIAS\Modules\OrgUnit\ARHelper\DIC; 16 /** 17 * @var \ilBiblFieldFilterInterface[] 18 */ 19 protected $filter_objects = array(); 20 /** 21 * @var array 22 */ 23 protected $applied_filter = array(); 24 /** 25 * @var \ilBiblFactoryFacade 26 */ 27 protected $facade; 28 /** 29 * @var \ilObjBibliographicGUI 30 */ 31 protected $parent_obj; 32 33 34 /** 35 * ilBiblEntryTableGUI constructor. 36 * 37 * @param \ilObjBibliographicGUI $a_parent_obj 38 * @param \ilBiblFactoryFacade $facade 39 */ 40 public function __construct(ilObjBibliographicGUI $a_parent_obj, ilBiblFactoryFacade $facade) 41 { 42 $this->facade = $facade; 43 $this->setId('tbl_bibl_overview'); 44 $this->setPrefix('tbl_bibl_overview'); 45 $this->setFormName('tbl_bibl_overview'); 46 parent::__construct($a_parent_obj); 47 $this->parent_obj = $a_parent_obj; 48 49 //Number of records 50 $this->setEnableNumInfo(true); 51 $this->setShowRowsSelector(true); 52 53 $this->setEnableHeader(false); 54 $this->setFormAction($this->ctrl()->getFormAction($a_parent_obj)); 55 $this->setRowTemplate('tpl.bibliographic_record_table_row.html', 'Modules/Bibliographic'); 56 // enable sorting by alphabet -- therefore an unvisible column 'content' is added to the table, and the array-key 'content' is also delivered in setData 57 $this->addColumn($this->lng()->txt('a'), 'content', 'auto'); 58 $this->initFilter(); 59 $this->initData(); 60 $this->setOrderField('content'); 61 $this->setDefaultOrderField('content'); 62 } 63 64 65 public function initFilter() 66 { 67 $available_fields_for_object = $this->facade->fieldFactory()->getAvailableFieldsForObjId($this->facade->iliasObjId()); 68 69 foreach ($available_fields_for_object as $available_field) { 70 $filter = $this->facade->filterFactory()->findByFieldId($available_field->getId()); 71 if (!empty($filter)) { 72 $filter_presentation = new ilBiblFieldFilterPresentationGUI($filter, $this->facade); 73 $field = $filter_presentation->getFilterItem(); 74 $this->addAndReadFilterItem($field); 75 $this->filter_objects[$field->getPostVar()] = $filter; 76 } 77 } 78 } 79 80 81 /** 82 * @param $field 83 */ 84 protected function addAndReadFilterItem(ilTableFilterItem $field) 85 { 86 $this->addFilterItem($field); 87 $field->readFromSession(); 88 if ($field instanceof ilCheckboxInputGUI) { 89 $this->applied_filter[$field->getPostVar()] = $field->getChecked(); 90 ; 91 } else { 92 $this->applied_filter[$field->getPostVar()] = $field->getValue(); 93 } 94 } 95 96 97 /** 98 * @param array $a_set 99 */ 100 public function fillRow($a_set) 101 { 102 $ilBiblEntry = $this->facade->entryFactory()->findByIdAndTypeString($a_set['entry_id'], $a_set['entry_type']); 103 //TODO instanciate presentation gui class 104 $ilBiblOverviewGUI = new ilBiblEntryTablePresentationGUI($ilBiblEntry, $this->facade); 105 $this->tpl->setVariable('SINGLE_ENTRY', ilBiblEntryDetailPresentationGUI::prepareLatex($ilBiblOverviewGUI->getHtml())); 106 //Detail-Link 107 $this->ctrl->setParameter($this->parent_obj, ilObjBibliographicGUI::P_ENTRY_ID, $a_set['entry_id']); 108 $this->tpl->setVariable('DETAIL_LINK', $this->ctrl->getLinkTarget($this->parent_obj, 'showDetails')); 109 // generate/render links to libraries 110 $libraries = $this->facade->libraryFactory()->getAll(); 111 $arr_library_link = array(); 112 foreach ($libraries as $library) { 113 if ($library->getShowInList()) { 114 $presentation = new ilBiblLibraryPresentationGUI($library, $this->facade); 115 $arr_library_link[] = $presentation->getButton($this->facade, $ilBiblEntry); 116 } 117 } 118 if (count($arr_library_link)) { 119 $this->tpl->setVariable('LIBRARY_LINK', implode('<br/>', $arr_library_link)); 120 } 121 } 122 123 124 protected function initData() 125 { 126 global $DIC; 127 $query = new ilBiblTableQueryInfo(); 128 /** 129 * @var $filter \ilBiblFieldFilterInterface 130 */ 131 foreach ($this->applied_filter as $field_name => $field_value) { 132 if (!$field_value || count($field_value) == 0) { 133 continue; 134 } 135 $filter = $this->filter_objects[$field_name]; 136 $filter_info = new ilBiblTableQueryFilter(); 137 $filter_info->setFieldName($field_name); 138 switch ($filter->getFilterType()) { 139 case ilBiblFieldFilterInterface::FILTER_TYPE_MULTI_SELECT_INPUT: 140 $filter_info->setFieldValue($field_value); 141 $filter_info->setOperator("IN"); 142 break; 143 case ilBiblFieldFilterInterface::FILTER_TYPE_SELECT_INPUT: 144 $filter_info->setFieldValue($field_value); 145 $filter_info->setOperator("="); 146 break; 147 case ilBiblFieldFilterInterface::FILTER_TYPE_TEXT_INPUT: 148 $filter_info->setFieldValue("%{$field_value}%"); 149 $filter_info->setOperator("LIKE"); 150 break; 151 } 152 153 $query->addFilter($filter_info); 154 } 155 156 $entries = array(); 157 $object_id = $this->facade->iliasObjId(); 158 foreach ($this->facade->entryFactory() 159 ->filterEntryIdsForTableAsArray($object_id, $query) as $entry) { 160 $ilBibliographicEntry = $this->facade->entryFactory()->findByIdAndTypeString($entry['entry_id'], $entry['entry_type']); 161 $entry['content'] = strip_tags($ilBibliographicEntry->getOverview()); 162 $entries[] = $entry; 163 } 164 165 $this->setData($entries); 166 } 167} 168