ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
Supplier.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
24use ILIAS\UI\Factory as UIFactory;
25use ILIAS\Data\Factory as DataFactory;
27use ILIAS\StaticURL\Services as StaticURL;
29
31{
32 protected \ilObjUser $user;
33 protected UIFactory $ui_factory;
34 protected DataFactory $data_factory;
36
37 protected string $type;
38 protected int $ref_id;
39
43 protected array $columns = [];
44
45 public function __construct(
47 UIFactory $ui_factory,
48 DataFactory $data_factory,
50 string $type,
51 int $ref_id,
52 string ...$sub_types
53 ) {
54 $this->user = $user;
55 $this->ui_factory = $ui_factory;
56 $this->data_factory = $data_factory;
57 $this->static_url = $static_url;
58 $this->type = $type;
59 $this->ref_id = $ref_id;
60 $this->initColumns(...$sub_types);
61 }
62
66 public function getColumns(): array
67 {
68 return $this->columns;
69 }
70
71 public function getData(SubObjectIDInterface ...$sub_object_ids): DataInterface
72 {
73 $ids = [];
74 foreach ($sub_object_ids as $sub_object_id) {
75 $ids[$sub_object_id->subtype()][$sub_object_id->objID()][] = [
76 'obj_id' => $sub_object_id->objID(),
77 'sub_id' => $sub_object_id->subID()
78 ];
79 }
80
81 $data_array = [];
82 foreach ($ids as $sub_type => $id) {
83 $values = [];
84 foreach ($id as $obj_id => $records) {
85 $values = array_merge($values, \ilAdvancedMDValues::queryForRecords(
86 $this->ref_id,
87 $this->type,
88 $sub_type,
89 [$obj_id],
90 $sub_type,
91 $records,
92 'obj_id',
93 'sub_id'
94 ));
95 }
96
97 foreach ($this->getRecordIds($sub_type) as $record_id) {
99 foreach ($defs as $def) {
100 $key = Constants::ID_PREFIX . $def->getFieldId();
101 foreach ($values as $value) {
102 $obj_id = $value['obj_id'];
103 $sub_id = $value['sub_id'];
104 $presentation = $value['md_' . $def->getFieldId() . '_presentation'] ?? null;
105 if (!$presentation) {
106 continue;
107 }
108 $data_array[$sub_type][$obj_id][$sub_id][$key] = $this->initData($def, $presentation);
109 }
110 }
111 }
112 }
113
114 return new Data($data_array);
115 }
116
117 protected function initColumns(
118 string ...$sub_types
119 ): void {
120 foreach ($sub_types as $sub_type) {
121 foreach ($this->getRecordIds($sub_type) as $record_id) {
124 foreach ($defs as $def) {
125 $key = Constants::ID_PREFIX . $def->getFieldId();
126 $this->columns[$key] = $this->initColumn($translations, $def);
127 }
128 }
129 }
130 }
131
132 protected function initColumn(
133 \ilAdvancedMDFieldTranslations $translations,
135 ): Column {
136 $f = $this->ui_factory->table()->column();
137 $adt_def = $def->getADTDefinition();
138 $title = $translations->getTitleForLanguage($def->getFieldId(), $this->user->getLanguage());
139
140 switch ($def->getType()) {
141 case \ilAdvancedMDFieldDefinition::TYPE_INTEGER:
142 $column = $f->number($title)
143 ->withUnit($adt_def->getSuffix());
144 break;
145
146 case \ilAdvancedMDFieldDefinition::TYPE_FLOAT:
147 $column = $f->number($title)
148 ->withDecimals($adt_def->getDecimals())
149 ->withUnit($adt_def->getSuffix());
150 break;
151
152 case \ilAdvancedMDFieldDefinition::TYPE_DATE:
153 $column = $f->date(
154 $title,
155 $this->user->getDateFormat()
156 );
157 break;
158
159 case \ilAdvancedMDFieldDefinition::TYPE_DATETIME:
160 if ((int) $this->user->getTimeFormat() === \ilCalendarSettings::TIME_FORMAT_12) {
161 $format = $this->data_factory->dateFormat()->withTime12($this->user->getDateFormat());
162 } else {
163 $format = $this->data_factory->dateFormat()->withTime24($this->user->getDateFormat());
164 }
165 $column = $f->date($title, $format);
166 break;
167
168 case \ilAdvancedMDFieldDefinition::TYPE_INTERNAL_LINK:
169 case \ilAdvancedMDFieldDefinition::TYPE_EXTERNAL_LINK:
170 $column = $f->link($title);
171 break;
172
173 case \ilAdvancedMDFieldDefinition::TYPE_SELECT:
174 case \ilAdvancedMDFieldDefinition::TYPE_TEXT:
175 case \ilAdvancedMDFieldDefinition::TYPE_LOCATION:
176 case \ilAdvancedMDFieldDefinition::TYPE_SELECT_MULTI:
177 case \ilAdvancedMDFieldDefinition::TYPE_ADDRESS:
178 default:
179 $column = $f->text($title);
180 }
181
182 return $column;
183 }
184
185 protected function initData(
187 \ilADTPresentationBridge $presentation
188 ): mixed {
189 $adt = $presentation->getADT();
190
191 switch ($def->getType()) {
192 case \ilAdvancedMDFieldDefinition::TYPE_INTEGER:
193 case \ilAdvancedMDFieldDefinition::TYPE_FLOAT:
194 $val = $adt->getNumber();
195 break;
196
197 case \ilAdvancedMDFieldDefinition::TYPE_DATE:
198 case \ilAdvancedMDFieldDefinition::TYPE_DATETIME:
199 $timestamp = $adt->getDate()->getUnixTime();
200 $val = (new \DateTimeImmutable())->setTimestamp($timestamp);
201 break;
202
203 case \ilAdvancedMDFieldDefinition::TYPE_INTERNAL_LINK:
204 $target_ref_id = $adt->getTargetRefId();
205 $target_obj_id = \ilObject::_lookupObjId($target_ref_id);
206 $target_title = \ilObject::_lookupTitle($target_obj_id);
207 $target_type = \ilObject::_lookupType($target_obj_id);
208 $uri = $this->static_url->builder()->build(
209 $target_type,
210 $this->data_factory->refId($target_ref_id)
211 );
212 $val = $this->ui_factory->link()->standard($target_title, (string) $uri);
213 break;
214
215 case \ilAdvancedMDFieldDefinition::TYPE_EXTERNAL_LINK:
216 $title = $adt->getTitle();
217 $url = $adt->getUrl();
218 $val = $this->ui_factory->link()->standard($title, $url);
219 break;
220
221 case \ilAdvancedMDFieldDefinition::TYPE_SELECT:
222 case \ilAdvancedMDFieldDefinition::TYPE_TEXT:
223 case \ilAdvancedMDFieldDefinition::TYPE_LOCATION:
224 case \ilAdvancedMDFieldDefinition::TYPE_SELECT_MULTI:
225 case \ilAdvancedMDFieldDefinition::TYPE_ADDRESS:
226 default:
227 $val = $presentation->getList();
228 }
229
230 return $val;
231 }
232
236 protected function getRecordIds(string $sub_type): array
237 {
238 $ids = [];
240 $this->type,
241 $this->ref_id,
242 $sub_type,
243 $this->ref_id !== 0
244 ) as $record_obj) {
245 $ids[] = $record_obj->getRecordId();
246 }
247 return $ids;
248 }
249}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
foreach($mandatory_scripts as $file) $timestamp
Definition: buildRTE.php:70
initData(\ilAdvancedMDFieldDefinition $def, \ilADTPresentationBridge $presentation)
Definition: Supplier.php:185
getData(SubObjectIDInterface ... $sub_object_ids)
Definition: Supplier.php:71
__construct(\ilObjUser $user, UIFactory $ui_factory, DataFactory $data_factory, StaticURL $static_url, string $type, int $ref_id, string ... $sub_types)
Definition: Supplier.php:45
initColumn(\ilAdvancedMDFieldTranslations $translations, \ilAdvancedMDFieldDefinition $def)
Definition: Supplier.php:132
Builds a Color from either hex- or rgb values.
Definition: Factory.php:31
Builds data types.
Definition: Factory.php:36
Class Services.
Definition: Services.php:38
ADT presentation bridge base class.
static getInstancesByRecordId( $a_record_id, $a_only_searchable=false, string $language='')
Get definitions by record id.
getADTDefinition()
Get ADT definition instance.
Class ilAdvancedMDFieldTranslations.
getTitleForLanguage(int $field_id, string $language)
static _getSelectedRecordsByObject(string $a_obj_type, int $a_id, string $a_sub_type="", bool $is_ref_id=true)
static queryForRecords(int $adv_rec_obj_ref_id, string $adv_rec_obj_type, string $adv_rec_obj_subtype, array $a_obj_id, string $a_subtype, array $a_records, string $a_obj_id_key, string $a_obj_subid_key, ?array $a_amet_filter=null)
User class.
static _lookupType(int $id, bool $reference=false)
static _lookupObjId(int $ref_id)
static _lookupTitle(int $obj_id)
A Column describes the form of presentation for a certain aspect of data, i.e.
Definition: Column.php:28
$url
Definition: shib_logout.php:68