ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilDataCollectionDataSet.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once("./Services/DataSet/classes/class.ilDataSet.php");
5require_once('./Modules/DataCollection/classes/Helpers/class.ilDclCache.php');
6require_once('class.ilObjDataCollection.php');
7
15
19 protected $db;
23 protected $data = array();
29 protected $record_field_ids_2_storage = array();
49 protected $caches = array(
50 'dcl' => array(),
51 'il_dcl_table' => array(),
52 'il_dcl_field' => array(),
53 'il_dcl_field_prop' => array(),
54 'il_dcl_record' => array(),
55 'il_dcl_record_field' => array(),
56 'il_dcl_stloc1_value' => array(),
57 'il_dcl_stloc2_value' => array(),
58 'il_dcl_stloc3_value' => array(),
59 'il_dcl_tfield_set' => array(),
60 'il_dcl_tableview' => array(),
61 'il_dcl_tview_set' => array(),
62 );
76 protected $import_record_field_cache = array();
80 protected $user;
84 protected $import_temp_refs = array();
88 protected $import_temp_refs_props = array();
92 protected $import_temp_new_mob_ids = array();
93
94
95 public function __construct() {
96 global $DIC;
97 $ilDB = $DIC['ilDB'];
98 $ilUser = $DIC['ilUser'];
99 parent::__construct();
100 $this->db = $ilDB;
101 $this->user = $ilUser;
102 }
103
104
108 public function getSupportedVersions() {
109 return array( '4.5.0' );
110 }
111
112
121 public function getCache($a_entity) {
122 if (!in_array($a_entity, array_keys($this->caches))) {
123 throw new ilException("Entity '$a_entity' does not exist in Cache");
124 }
125
126 return $this->caches[$a_entity];
127 }
128
129
136 public function getXmlNamespace($a_entity, $a_schema_version) {
137 return 'http://www.ilias.de/xml/Modules/DataCollection/' . $a_entity;
138 }
139
140
148 public function importRecord($a_entity, $a_types, $a_rec, $a_mapping, $a_schema_version) {
149 switch ($a_entity) {
150 case 'dcl':
151 if($new_id = $a_mapping->getMapping('Services/Container','objs',$a_rec['id']))
152 {
153 $new_obj = ilObjectFactory::getInstanceByObjId($new_id,false);
154 }
155 else
156 {
157 $new_obj = new ilObjDataCollection();
158 $new_obj->create(true);
159 }
160 $new_obj->setTitle($a_rec['title']);
161 $new_obj->setDescription($a_rec['description']);
162 $new_obj->setApproval($a_rec['approval']);
163 $new_obj->setPublicNotes($a_rec['public_notes']);
164 $new_obj->setNotification($a_rec['notification']);
165 $new_obj->setPublicNotes($a_rec['public_notes']);
166 $new_obj->setOnline(false);
167 $new_obj->setRating($a_rec['rating']);
168 $new_obj->update(); //clone mode, so no table will be created
169 $this->import_dc_object = $new_obj;
170 $a_mapping->addMapping('Modules/DataCollection', 'dcl', $a_rec['id'], $new_obj->getId());
171 break;
172 case 'il_dcl_table':
173 $table = new ilDclTable();//($this->count_imported_tables > 0) ? new ilDclTable() : ilDclCache::getTableCache($this->import_dc_object->getMainTableId());
174 $table->setTitle($a_rec['title']);
175 $table->setObjId($this->import_dc_object->getId());
176 $table->setDescription($a_rec['description']);
177 $table->setAddPerm($a_rec['add_perm']);
178 $table->setEditPerm($a_rec['edit_perm']);
179 $table->setDeletePerm($a_rec['delete_perm']);
180 $table->setEditByOwner($a_rec['edit_by_owner']);
181 $table->setLimited($a_rec['limited']);
182 $table->setLimitStart($a_rec['limit_start']);
183 $table->setLimitEnd($a_rec['limit_end']);
184 $table->setIsVisible($a_rec['is_visible']);
185 $table->setExportEnabled($a_rec['export_enabled']);
186 $table->setImportEnabled($a_rec['import_enabled']);
187 $table->setDefaultSortField($a_rec['default_sort_field_id']);
188 $table->setDefaultSortFieldOrder($a_rec['default_sort_field_order']);
189 $table->setPublicCommentsEnabled($a_rec['public_comments']);
190 $table->setViewOwnRecordsPerm($a_rec['view_own_records_perm']);
191 $table->setDeleteByOwner($a_rec['delete_by_owner']);
192 $table->setSaveConfirmation($a_rec['save_confirmation']);
193 $table->setOrder($a_rec['table_order']);
194 $table->doCreate(false, false); // false => Do not create views! They are imported later
195 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_table', $a_rec['id'], $table->getId());
196 break;
197 case 'il_dcl_tableview':
198 $new_table_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_table', $a_rec['table_id']);
199 if ($new_table_id) {
200 $tableview = new ilDclTableView();
201 $tableview->setTitle($a_rec['title']);
202 $tableview->setTableId($new_table_id);
203 $tableview->setDescription($a_rec['description']);
204 $tableview->setTableviewOrder($a_rec['tableview_order']);
205 if(!is_array($a_rec['roles']))
206 $a_rec['roles'] = json_decode($a_rec['roles']);
207 $tableview->setRoles($a_rec['roles']);
208 $tableview->create(false); //do not create default setting as they are imported too
209 }
210 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_tableview', $a_rec['id'], $tableview->getId());
211 $a_mapping->addMapping('Services/COPage', 'pg', 'dclf:'.$a_rec['id'], 'dclf:'.$tableview->getId());
212 break;
213 case 'il_dcl_field':
214 $new_table_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_table', $a_rec['table_id']);
215 if ($new_table_id) {
216 $field = new ilDclBaseFieldModel();
217 $field->setTableId($new_table_id);
218 $field->setDatatypeId($a_rec['datatype_id']);
219 $field->setTitle($a_rec['title']);
220 $field->setDescription($a_rec['description']);
221 $field->setRequired($a_rec['required']);
222 $field->setUnique($a_rec['is_unique']);
223 $field->setLocked($a_rec['is_locked']);
224 $field->doCreate();
225 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['id'], $field->getId());
226 // Check if this field was used as default order by, if so, update to new id
227 $table = ilDclCache::getTableCache($new_table_id);
228 if ($table && $table->getDefaultSortField() == $a_rec['id']) {
229 $table->setDefaultSortField($field->getId());
230 $table->doUpdate();
231 }
232 }
233 break;
234 case 'il_dcl_tfield_set':
235 $new_table_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_table', $a_rec['table_id']);
236 $new_field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['field']);
237 if ($new_table_id) {
238 $setting = ilDclTableFieldSetting::getInstance($new_table_id, $new_field_id ? $new_field_id : $a_rec['field']);
239 $setting->setFieldOrder($a_rec['field_order']);
240 $setting->setExportable($a_rec['exportable']);
241 $setting->store();
242 }
243 break;
244 case 'il_dcl_tview_set':
245 $new_tableview_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_tableview', $a_rec['tableview_id']);
246 $new_field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['field']);
247 if ($new_tableview_id) {
248 $setting = new ilDclTableViewFieldSetting();
249 $setting->setTableviewId($new_tableview_id);
250 $setting->setVisible($a_rec['visible']);
251 $setting->setField($new_field_id ? $new_field_id : $a_rec['field']);
252 $setting->setInFilter($a_rec['in_filter']);
253 $setting->setFilterValue($a_rec['filter_value'] ? $a_rec['filter_value'] : null);
254 $setting->setFilterChangeable($a_rec['filter_changeable']);
255 $setting->create();
256 }
257 break;
258 case 'il_dcl_record':
259 $new_table_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_table', $a_rec['table_id']);
260 if ($new_table_id) {
261 $record = new ilDclBaseRecordModel();
262 $record->setTableId($new_table_id);
263 $datetime = new ilDateTime(time(), IL_CAL_UNIX);
264 $record->setCreateDate($datetime);
265 $record->setLastUpdate($datetime);
266 $record->setOwner($this->user->getId());
267 $record->setLastEditBy($this->user->getId());
268 $record->doCreate();
269 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_record', $a_rec['id'], $record->getId());
270 }
271 break;
272 case 'il_dcl_view':
273 $new_table_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_table', $a_rec['table_id']);
274 if ($new_table_id) {
275 //if import contains il_dcl_view, it must origin from an earlier ILIAS Version and therefore contains no tableviews
276 //->create standard view
277 $tableview = ilDclTableView::createOrGetStandardView($new_table_id);
278 if ($a_rec['type'] == 0 && $a_rec['formtype'] == 0) { //set page_object to tableview
279 // This mapping is needed for the import handled by Services/COPage
280 $a_mapping->addMapping('Services/COPage', 'pg', 'dclf:' . $a_rec['id'], 'dclf:' . $tableview->getId());
281 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_view', $a_rec['id'], $tableview->getId());
282 } else {
283 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_view', $a_rec['id'],
284 array('type' => $a_rec['type'], 'table_id' => $new_table_id, 'tableview_id' => $tableview->getId()));
285 }
286 }
287 break;
288 case 'il_dcl_viewdefinition':
289 $map = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_view', $a_rec['view_id']);
290 $new_field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['field']);
291 $field = ($new_field_id) ? $new_field_id : $a_rec['field'];
292 switch ($map['type']) {
293 case 1: //visible
294 $viewfield_setting = ilDclTableViewFieldSetting::getInstance($map['tableview_id'], $field);
295 $viewfield_setting->setVisible($a_rec['is_set']);
296 $viewfield_setting->store();
297 break;
298 case 3: //in_filter
299 $viewfield_setting = ilDclTableViewFieldSetting::getInstance($map['tableview_id'], $field);
300 $viewfield_setting->setInFilter($a_rec['is_set']);
301 $viewfield_setting->store();
302 break;
303 case 4: //exportable
304 $tablefield_setting = ilDclTableFieldSetting::getInstance($map['table_id'], $field);
305 $tablefield_setting->setExportable($a_rec['is_set']);
306 $tablefield_setting->setFieldOrder($a_rec['field_order']);
307 $tablefield_setting->store();
308 break;
309
310 }
311 break;
312 case 'il_dcl_field_prop':
313 $new_field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['field_id']);
314 if ($new_field_id) {
315 $prop = new ilDclFieldProperty();
316 $prop->setFieldId($new_field_id);
317
318 // OLD IMPORT! Backwards-compatibility
319 $name = $a_rec['name'];
320 if(!isset($name) && isset($a_rec['datatype_prop_id'])) {
321 $properties = array(
322 1 => 'length',
323 2 => 'regex',
324 3 => 'table_id',
325 4 => 'url',
326 5 => 'text_area',
327 6 => 'reference_link',
328 7 => 'width',
329 8 => 'height',
330 9 => 'learning_progress',
331 10 => 'ILIAS_reference_link',
332 11 => 'multiple_selection',
333 12 => 'expression',
334 13 => 'display_action_menu',
335 14 => 'link_detail_page',
336 15 => 'link_detail_page'
337 );
338
339 $name = $properties[$a_rec['datatype_prop_id']];
340 }
341
342 $prop->setName($name);
343 // For field references, we need to get the new field id of the referenced field
344 // If the field_id does not yet exist (e.g. referenced table not yet created), store temp info and fix before finishing import
345 $value = $a_rec['value'];
347 $fix_refs = false;
348
349 if (in_array($prop->getName(), $refs)) {
350 $new_field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['value']);
351 if ($new_field_id === false) {
352 $value = NULL;
353 $fix_refs = true;
354 } else {
355 $value = $new_field_id;
356 }
357 }
358 $prop->setValue($value);
359 $prop->save();
360 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_field_prop', $a_rec['id'], $prop->getId());
361 if ($fix_refs) {
362 $this->import_temp_refs_props[$prop->getId()] = $a_rec['value'];
363 }
364 }
365 break;
366 case 'il_dcl_record_field':
367 $record_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_record', $a_rec['record_id']);
368 $field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_field', $a_rec['field_id']);
369 if ($record_id && $field_id) {
370 $record = ilDclCache::getRecordCache($record_id);
371 $field = ilDclCache::getFieldCache($field_id);
372 $record_field = new ilDclBaseRecordFieldModel($record, $field);
373 $a_mapping->addMapping('Modules/DataCollection', 'il_dcl_record_field', $a_rec['id'], $record_field->getId());
374 $this->import_record_field_cache[$record_field->getId()] = $record_field;
375 }
376 break;
377 case 'il_dcl_stloc1_value':
378 case 'il_dcl_stloc2_value':
379 case 'il_dcl_stloc3_value':
380 $new_record_field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_record_field', $a_rec['record_field_id']);
381 if ($new_record_field_id) {
383 $record_field = $this->import_record_field_cache[$new_record_field_id];
384 if (is_object($record_field)) {
385 // Need to rewrite internal references and lookup new objects if MOB or File
386 // For some fieldtypes it's better to reset the value, e.g. ILIAS_REF
387 switch ($record_field->getField()->getDatatypeId()) {
389 // Check if we got a mapping from old object
390 $new_mob_id = $a_mapping->getMapping('Services/MediaObjects', 'mob', $a_rec['value']);
391 $value = ($new_mob_id) ? (int)$new_mob_id : NULL;
392 $this->import_temp_new_mob_ids[] = $new_mob_id;
393 break;
395 $new_file_id = $a_mapping->getMapping('Modules/File', 'file', $a_rec['value']);
396 $value = ($new_file_id) ? (int)$new_file_id : NULL;
397 break;
400 // If we are referencing to a record from a table that is not yet created, return value is always false because the record does exist neither
401 // Solution: Temporary store all references and fix them before finishing the import.
402 $new_record_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_record', $a_rec['value']);
403 if ($new_record_id === false) {
404 $this->import_temp_refs[$new_record_field_id] = $a_rec['value'];
405 }
406 $value = ($new_record_id) ? (int)$new_record_id : NULL;
407 break;
409 $value = NULL;
410 break;
411 default:
412 $value = $a_rec['value'];
413 if ($a_entity == 'il_dcl_stloc3_value' && (is_null($value) || empty($value))) {
414 $value = '0000-00-00 00:00:00';
415 }
416 }
417 $record_field->setValue($value, true);
418 $record_field->doUpdate();
419 }
420 }
421 break;
422 }
423 }
424
425
431 public function beforeFinishImport(ilImportMapping $a_mapping) {
432 foreach ($this->import_temp_new_mob_ids as $new_mob_id) {
433 ilObjMediaObject::_saveUsage($new_mob_id, "dcl:html", $a_mapping->getTargetId());
434 }
435 foreach ($this->import_temp_refs as $record_field_id => $old_record_id) {
436 $new_record_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_record', $old_record_id);
437 $value = ($new_record_id) ? (int)$new_record_id : NULL;
439 $record_field = $this->import_record_field_cache[$record_field_id];
440 $record_field->setValue($value, true);
441 $record_field->doUpdate();
442 }
443 foreach ($this->import_temp_refs_props as $field_prop_id => $old_field_id) {
444 $new_field_id = $a_mapping->getMapping('Modules/DataCollection', 'il_dcl_field', $old_field_id);
445 $value = ($new_field_id) ? (int)$new_field_id : NULL;
446 $field_prop = new ilDclFieldProperty($field_prop_id);
447 $field_prop->setValue($value);
448 $field_prop->update();
449 }
450 }
451
452
461 protected function getTypes($a_entity, $a_version) {
462 switch ($a_entity) {
463 case 'dcl':
464 return array(
465 "id" => "integer",
466 "title" => "text",
467 "description" => "text",
468 'is_online' => 'integer',
469 'rating' => 'integer',
470 'public_notes' => 'integer',
471 'approval' => 'integer',
472 'notification' => 'integer',
473 );
474 case 'il_dcl_table':
475 return array(
476 'id' => 'integer',
477 'obj_id' => 'integer',
478 'title' => 'text',
479 'add_perm' => 'integer',
480 'edit_perm' => 'integer',
481 'delete_perm' => 'integer',
482 'edit_by_owner' => 'integer',
483 'limited' => 'integer',
484 'limit_start' => 'text',
485 'limit_end' => 'text',
486 'is_visible' => 'integer',
487 'export_enabled' => 'integer',
488 'import_enabled' => 'integer',
489 'default_sort_field_id' => 'text',
490 'default_sort_field_order' => 'text',
491 'description' => 'text',
492 'public_comments' => 'integer',
493 'view_own_records_perm' => 'integer',
494 'delete_by_owner' => 'integer',
495 'save_confirmation' => 'integer',
496 'table_order' => 'integer',
497 );
498 case 'il_dcl_tableview':
499 return array(
500 'id' => 'integer',
501 'table_id' => 'integer',
502 'title' => 'text',
503 'roles' => 'text',
504 'description' => 'text',
505 'tableview_order' => 'integer',
506 );
507 case 'il_dcl_field':
508 return array(
509 'id' => 'integer',
510 'table_id' => 'integer',
511 'title' => 'text',
512 'description' => 'text',
513 'datatype_id' => 'integer',
514 'required' => 'integer',
515 'is_unique' => 'integer',
516 'is_locked' => 'integer',
517 );
518 case 'il_dcl_tview_set':
519 return array(
520 'id' => 'integer',
521 'tableview_id' => 'integer',
522 'field' => 'text',
523 'visible' => 'integer',
524 'in_filter' => 'integer',
525 'filter_value' => 'text',
526 'filter_changeable' => 'integer',
527 );
528 case 'il_dcl_tfield_set':
529 return array(
530 'id' => 'integer',
531 'table_id' => 'integer',
532 'field' => 'text',
533 'field_order' => 'integer',
534 'exportable' => 'integer',
535 );
536 case 'il_dcl_field_prop':
537 return array(
538 'id' => 'integer',
539 'field_id' => 'integer',
540 'name' => 'text',
541 'value' => 'integer',
542 );
543 case 'il_dcl_record':
544 return array(
545 'id' => 'integer',
546 'table_id' => 'integer',
547 );
548 case 'il_dcl_record_field':
549 return array(
550 'id' => 'integer',
551 'record_id' => 'integer',
552 'field_id' => 'integer',
553 );
554 case 'il_dcl_stloc1_value':
555 return array(
556 'id' => 'integer',
557 'record_field_id' => 'integer',
558 'value' => 'text',
559 );
560 case 'il_dcl_stloc2_value':
561 return array(
562 'id' => 'integer',
563 'record_field_id' => 'integer',
564 'value' => 'text',
565 );
566 case 'il_dcl_stloc3_value':
567 return array(
568 'id' => 'integer',
569 'record_field_id' => 'integer',
570 'value' => 'text',
571 );
572 default:
573 return array();
574 }
575 }
576
577
588 protected function getDependencies($a_entity, $a_version, $a_rec, $a_ids) {
589 if (!$a_rec && !$a_ids) {
590 return false;
591 }
592 switch ($a_entity) {
593 case 'dcl':
594 $set = $this->db->query('SELECT * FROM il_dcl_table WHERE obj_id = ' . $this->db->quote($a_rec['id'], 'integer') . ' ORDER BY id');
595 $ids = $this->buildCache('il_dcl_table', $set);
596
597 return array(
598 'il_dcl_table' => array( 'ids' => $ids ),
599 );
600 break;
601 case 'il_dcl_table':
602 $set = $this->db->query('SELECT * FROM il_dcl_record WHERE table_id = ' . $this->db->quote($a_rec['id'], 'integer'));
603 $ids_records = $this->buildCache('il_dcl_record', $set);
604 $set = $this->db->query('SELECT * FROM il_dcl_field WHERE table_id = ' . $this->db->quote($a_rec['id'], 'integer'));
605 $ids_fields = $this->buildCache('il_dcl_field', $set);
606 $set = $this->db->query('SELECT * FROM il_dcl_tableview WHERE table_id = ' . $this->db->quote($a_rec['id'], 'integer'));
607 $ids_tableviews = $this->buildCache('il_dcl_tableview', $set);
608 $set = $this->db->query('SELECT * FROM il_dcl_tfield_set WHERE table_id = ' . $this->db->quote($a_rec['id'], 'integer'));
609 $ids_tablefield_settings = $this->buildCache('il_dcl_tfield_set', $set);
610
611 return array(
612 'il_dcl_field' => array( 'ids' => $ids_fields ),
613 'il_dcl_record' => array( 'ids' => $ids_records ),
614 'il_dcl_tableview' => array( 'ids' => $ids_tableviews ),
615 'il_dcl_tfield_set' => array( 'ids' => $ids_tablefield_settings ),
616 );
617 case 'il_dcl_field':
618 $set = $this->db->query('SELECT * FROM il_dcl_field_prop WHERE field_id = ' . $this->db->quote($a_rec['id'], 'integer'));
619 $ids = $this->buildCache('il_dcl_field_prop', $set);
620
621 return array(
622 'il_dcl_field_prop' => array( 'ids' => $ids ),
623 );
624 case 'il_dcl_record':
625 $sql = 'SELECT rf.*, d.storage_location FROM il_dcl_record_field AS rf' . ' INNER JOIN il_dcl_field AS f ON (f.id = rf.field_id)'
626 . ' INNER JOIN il_dcl_datatype AS d ON (f.datatype_id = d.id) ' . ' WHERE rf.record_id = '
627 . $this->db->quote($a_rec['id'], 'integer');
628 $set = $this->db->query($sql);
629 $ids = $this->buildCache('il_dcl_record_field', $set);
630
631 $set = $this->db->query($sql);
632 while ($rec = $this->db->fetchObject($set)) {
633 $this->record_field_ids_2_storage[$rec->id] = ilDclCache::getFieldCache($rec->field_id)->getStorageLocation();
634 }
635 // Also build a cache of all values, no matter in which table they are (il_dcl_stloc(1|2|3)_value)
636 $sql =
637 'SELECT rf.id AS record_field_id, st1.value AS value1, st2.value AS value2, st3.value AS value3 FROM il_dcl_record_field AS rf '
638 . 'LEFT JOIN il_dcl_stloc1_value AS st1 ON (st1.record_field_id = rf.id) '
639 . 'LEFT JOIN il_dcl_stloc2_value AS st2 ON (st2.record_field_id = rf.id) '
640 . 'LEFT JOIN il_dcl_stloc3_value AS st3 ON (st3.record_field_id = rf.id) ' . 'WHERE rf.record_id = '
641 . $this->db->quote($a_rec['id'], 'integer');
642 $set = $this->db->query($sql);
643
644 while ($rec = $this->db->fetchObject($set)) {
645 $stloc = $this->record_field_ids_2_storage[$rec->record_field_id];
646 $value = "value{$stloc}";
647 // Save reocrd field id. Internal ID is not used currently
648 $this->caches["il_dcl_stloc{$stloc}_value"][$rec->record_field_id] = array(
649 'record_field_id' => $rec->record_field_id,
650 'value' => $rec->{$value}
651 );
652 }
653
654 return array(
655 'il_dcl_record_field' => array( 'ids' => $ids )
656 );
657 case 'il_dcl_tableview':
658 $set = $this->db->query('SELECT * FROM il_dcl_tview_set WHERE tableview_id = ' . $this->db->quote($a_rec['id'], 'integer'));
659 $ids = $this->buildCache('il_dcl_tview_set', $set);
660
661 return array(
662 'il_dcl_tview_set' => array( 'ids' => $ids )
663 );
664 case 'il_dcl_record_field':
665 $record_field_id = $a_rec['id'];
666 $storage_loc = $this->record_field_ids_2_storage[$record_field_id];
667
668 return array(
669 "il_dcl_stloc{$storage_loc}_value" => array( 'ids' => array( $record_field_id ) )
670 );
671 }
672
673 return false;
674 }
675
676
684 public function readData($a_entity, $a_version, $a_ids) {
685 $this->data = array();
686 if (!is_array($a_ids)) {
687 $a_ids = array( $a_ids );
688 }
689 $this->_readData($a_entity, $a_ids);
690 }
691
692
699 protected function _readData($a_entity, $a_ids) {
700 switch ($a_entity) {
701 case 'dcl':
702 foreach ($a_ids as $dcl_id) {
703 if (ilObject::_lookupType($dcl_id) == 'dcl') {
704 $obj = new ilObjDataCollection($dcl_id, false);
705 $data = array(
706 'id' => $dcl_id,
707 'title' => $obj->getTitle(),
708 'description' => $obj->getDescription(),
709 'is_online' => $obj->getOnline(),
710 'rating' => $obj->getRating(),
711 'public_notes' => $obj->getPublicNotes(),
712 'approval' => $obj->getApproval(),
713 'notification' => $obj->getNotification(),
714 );
715 $this->caches['dcl'][$dcl_id] = $data;
716 $this->data[] = $data;
717 }
718 }
719 break;
720 default:
721 $data = $this->getCache($a_entity);
722 foreach ($a_ids as $id) {
723 $this->data[] = $data[$id];
724 }
725 }
726 }
727
728
738 protected function buildCache($a_entity, $set) {
739 $fields = array_keys($this->getTypes($a_entity, ''));
740 $ids = array();
741 while ($rec = $this->db->fetchObject($set)) {
742 $data = array();
743 foreach ($fields as $field) {
744 $data[$field] = $rec->{$field};
745 }
746 $id = $rec->id;
747 $this->caches[$a_entity][$id] = $data;
748 $ids[] = $id;
749 }
750
751 return $ids;
752 }
753}
user()
Definition: user.php:4
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
DataCollection dataset class.
_readData($a_entity, $a_ids)
Build data array, data is read from cache except dcl object itself.
buildCache($a_entity, $set)
Helper method to build cache for data of all entities.
getDependencies($a_entity, $a_version, $a_rec, $a_ids)
Return dependencies form entities to other entities (in our case these are all the DB relations)
getCache($a_entity)
Get cached data from a given entity.
getTypes($a_entity, $a_version)
Map XML attributes of entities to datatypes (text, integer...)
getXmlNamespace($a_entity, $a_schema_version)
readData($a_entity, $a_version, $a_ids)
Read data from Cache for a given entity and ID(s)
A dataset contains in data in a common structure that can be shared and transformed for different pur...
@classDescription Date and time handling
Class ilDclBaseFieldModel.
Class ilDclBaseRecordModel.
static getTableCache($table_id=0)
static getRecordCache($record_id=0)
static getFieldCache($field_id=0)
Class ilDclFieldProperty.
static getInstance($table_id, $field)
Class ilDclTableViewFieldSetting.
static getInstance($tableview_id, $field_id)
Class ilDclTableView.
static createOrGetStandardView($table_id, $create_default_settings=true)
Class ilDclBaseFieldModel.
Base class for ILIAS Exception handling.
getMapping($a_comp, $a_entity, $a_old_id)
Get a mapping.
getTargetId()
get target id
Class ilObjDataCollection.
static _saveUsage($a_mob_id, $a_type, $a_id, $a_usage_hist_nr=0, $a_lang="-")
Save usage of mob within another container (e.g.
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
static _lookupType($a_id, $a_reference=false)
lookup object type
global $ilDB
global $DIC
$ilUser
Definition: imgupload.php:18