ILIAS  trunk Revision v11.0_alpha-1715-g7fc467680fb
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
Supplier.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
29 
30 class Supplier implements SupplierInterface
31 {
32  protected \ilObjUser $user;
36 
37  protected string $type;
38  protected int $ref_id;
39 
43  protected array $columns = [];
44 
45  public function __construct(
46  \ilObjUser $user,
47  UIFactory $ui_factory,
48  DataFactory $data_factory,
49  StaticURL $static_url,
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) {
122  $translations = \ilAdvancedMDFieldTranslations::getInstanceByRecordId($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 }
Class ilAdvancedMDFieldTranslations.
getADTDefinition()
Get ADT definition instance.
static _getSelectedRecordsByObject(string $a_obj_type, int $a_id, string $a_sub_type="", bool $is_ref_id=true)
$url
Definition: shib_logout.php:66
static getInstancesByRecordId( $a_record_id, $a_only_searchable=false, string $language='')
Get definitions by record id.
static _lookupObjId(int $ref_id)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
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)
static _lookupTitle(int $obj_id)
__construct(\ilObjUser $user, UIFactory $ui_factory, DataFactory $data_factory, StaticURL $static_url, string $type, int $ref_id, string ... $sub_types)
Definition: Supplier.php:45
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
initColumn(\ilAdvancedMDFieldTranslations $translations, \ilAdvancedMDFieldDefinition $def)
Definition: Supplier.php:132
getData(SubObjectIDInterface ... $sub_object_ids)
Definition: Supplier.php:71
getTitleForLanguage(int $field_id, string $language)
foreach($mandatory_scripts as $file) $timestamp
Definition: buildRTE.php:70
initData(\ilAdvancedMDFieldDefinition $def, \ilADTPresentationBridge $presentation)
Definition: Supplier.php:185
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
ADT presentation bridge base class.
static _lookupType(int $id, bool $reference=false)