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 
4 require_once("./Services/DataSet/classes/class.ilDataSet.php");
5 require_once('./Modules/DataCollection/classes/Helpers/class.ilDclCache.php');
6 require_once('class.ilObjDataCollection.php');
7 
15 
19  protected $db;
23  protected $data = 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  );
66  protected $import_dc_object;
70  protected $count_imported_tables = 0;
80  protected $user;
84  protected $import_temp_refs = 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 }
Add some data
getMapping($a_comp, $a_entity, $a_old_id)
Get a mapping.
_readData($a_entity, $a_ids)
Build data array, data is read from cache except dcl object itself.
Class ilDclBaseFieldModel.
static getInstance($table_id, $field)
readData($a_entity, $a_version, $a_ids)
Read data from Cache for a given entity and ID(s)
Base class for ILIAS Exception handling.
static getFieldCache($field_id=0)
Class ilDclFieldProperty.
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.
const IL_CAL_UNIX
static getTableCache($table_id=0)
Class ilDclBaseFieldModel.
user()
Definition: user.php:4
Class ilDclTableViewFieldSetting.
static getInstance($tableview_id, $field_id)
buildCache($a_entity, $set)
Helper method to build cache for data of all entities.
DataCollection dataset class.
static getRecordCache($record_id=0)
Class ilDclTableView.
Date and time handling
$ilUser
Definition: imgupload.php:18
getTargetId()
get target id
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
static createOrGetStandardView($table_id, $create_default_settings=true)
Class ilDclBaseRecordModel.
global $ilDB
global $DIC
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
getTypes($a_entity, $a_version)
Map XML attributes of entities to datatypes (text, integer...)
A dataset contains in data in a common structure that can be shared and transformed for different pur...
getXmlNamespace($a_entity, $a_schema_version)
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.
Class ilObjDataCollection.