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