ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilDclCache.php
Go to the documentation of this file.
1 <?php
2 require_once('./Modules/DataCollection/classes/Fields/Reference/class.ilDclReferenceRecordFieldModel.php');
3 require_once('./Modules/DataCollection/classes/Fields/Rating/class.ilDclRatingRecordFieldModel.php');
4 require_once('./Modules/DataCollection/classes/Fields/IliasReference/class.ilDclIliasReferenceRecordFieldModel.php');
5 require_once('./Modules/DataCollection/classes/Fields/Formula/class.ilDclFormulaRecordFieldModel.php');
6 require_once('./Modules/DataCollection/classes/Fields/Text/class.ilDclTextRecordFieldModel.php');
7 require_once('./Modules/DataCollection/classes/Fields/NReference/class.ilDclNReferenceRecordFieldModel.php');
8 require_once('./Modules/DataCollection/classes/Fields/class.ilDclFieldFactory.php');
9 
16 class ilDclCache {
17 
18  const TYPE_DATACOLLECTION = 'dcl';
19  const TYPE_TABLE = 'table';
20  const TYPE_FIELD = 'field';
21  const TYPE_RECORD = 'record';
22  const TYPE_TABLEVIEW = 'tableview';
23 
27  protected static $tables_cache;
31  protected static $fields_cache;
35  protected static $records_cache;
41  protected static $record_field_cache;
42 
46  protected static $field_representation_cache;
47 
51  protected static $record_representation_cache;
55  protected static $field_properties_cache;
56 
60  protected static $datatype_cache;
61 
75  protected static $clone_mapping;
76 
77  public static function setCloneOf($old, $new, $type) {
78  if (!self::$clone_mapping) {
79  self::initCloneMapping();
80  }
81  self::$clone_mapping[$type][$old] = $new;
82  }
83 
84  protected static function initCloneMapping() {
85  self::$clone_mapping = array(
86  self::TYPE_DATACOLLECTION => array(),
87  self::TYPE_TABLE => array(),
88  self::TYPE_FIELD => array(),
89  self::TYPE_RECORD => array(),
90  self::TYPE_TABLEVIEW => array(),
91  );
92  }
93 
94  public static function getCloneOf($id, $type) {
95  $type_cache = self::$clone_mapping[$type];
96  if (!is_array($type_cache)) {
97  return false;
98  }
99 
100  if (isset($type_cache[$id])) {
101  $clone_id = $type_cache[$id];
102  } else {
103  foreach ($type_cache as $key => $mapping) {
104  if ($mapping == $id) {
105  $clone_id = $key;
106  }
107  }
108  }
109 
110  if (!$clone_id) {
111  return false;
112  }
113 
114 
115  switch ($type) {
116  case self::TYPE_DATACOLLECTION:
117  return new ilObjDataCollection($clone_id);
118  case self::TYPE_FIELD:
119  return self::getFieldCache($clone_id);
120  case self::TYPE_TABLE:
121  return self::getTableCache($clone_id);
122  case self::TYPE_RECORD:
123  return self::getRecordCache($clone_id);
124  }
125  }
126 
132  public static function getTableCache($table_id = 0) {
133  if ($table_id == 0) {
134  return new ilDclTable();
135  }
136  $tables_cache = &self::$tables_cache;
137  if (!isset($tables_cache[$table_id])) {
138  $tables_cache[$table_id] = new ilDclTable($table_id);
139  }
140 
141  return $tables_cache[$table_id];
142  }
143 
144 
150  public static function getFieldCache($field_id = 0) {
151  $fields_cache = &self::$fields_cache;
152  if (!isset($fields_cache[$field_id])) {
154  }
155 
156  return $fields_cache[$field_id];
157  }
158 
159 
165  public static function getRecordCache($record_id = 0) {
166  $records_cache = &self::$records_cache;
167  if (!isset($records_cache[$record_id])) {
169  }
170 
171  return $records_cache[$record_id];
172  }
173 
174 
181  public static function getRecordFieldCache($record, $field) {
182  $fid = $field->getId();
183  $rid = $record->getId();
184  if (!isset(self::$record_field_cache[$rid])) {
185  self::$record_field_cache[$rid] = array();
186  self::$record_field_cache[$rid][$fid] = ilDclFieldFactory::getRecordFieldInstance($field, $record);
187  } elseif (!isset(self::$record_field_cache[$rid][$fid])) {
188  self::$record_field_cache[$rid][$fid] = ilDclFieldFactory::getRecordFieldInstance($field, $record);
189  }
190 
191  return self::$record_field_cache[$rid][$fid];
192  }
193 
194 
201  public static function getFieldRepresentation(ilDclBaseFieldModel $field) {
202  if(!isset(self::$field_representation_cache[$field->getId()])) {
203  self::$field_representation_cache[$field->getId()] = ilDclFieldFactory::getFieldRepresentationInstance($field);
204  }
205  return self::$field_representation_cache[$field->getId()];
206  }
207 
208 
216  public static function getRecordRepresentation(ilDclBaseRecordFieldModel $record_field) {
217  if($record_field == null) {
218  throw new ilDclException("Cannot get Representation of null object!");
219  }
220 
221  if(!isset(self::$record_representation_cache[$record_field->getId()])) {
222  self::$record_representation_cache[$record_field->getId()] = ilDclFieldFactory::getRecordRepresentationInstance($record_field);
223  }
224  return self::$record_representation_cache[$record_field->getId()];
225  }
226 
227 
234  public static function getFieldProperties($field_id) {
235  if(!isset(self::$field_properties_cache[$field_id])) {
236  self::$field_properties_cache[$field_id] = array();
237  $result = ilDclFieldProperty::where(array('field_id'=>$field_id))->get();
238  foreach($result as $prop) {
239  self::$field_properties_cache[$field_id][$prop->getName()] = $prop;
240  }
241  }
242  return self::$field_properties_cache[$field_id];
243  }
244 
245 
250  public static function preloadFieldProperties(array $fields) {
251  foreach($fields as $field_key => $field) {
252  if(isset(self::$field_properties_cache[$field->getId()])) {
253  unset($fields[$field_key]);
254  }
255  }
256 
257  if(count($fields) > 0) {
258  $field_ids = array();
259  foreach ($fields as $field) {
260  $field_ids[] = $field->getId();
261  }
262  $result = ilDclFieldProperty::where(array('field_id'=>$field_ids), 'IN')->get();
263  foreach($result as $prop) {
264  if(!isset(self::$field_properties_cache[$prop->getFieldId()])) {
265  self::$field_properties_cache[$prop->getFieldId()] = array();
266  }
267  self::$field_properties_cache[$prop->getFieldId()][$prop->getName()] = $prop;
268  }
269  }
270  }
271 
272 
281  public static function getDatatype($datatyp_id) {
282  if(self::$datatype_cache == NULL) {
283  self::$datatype_cache = ilDclDatatype::getAllDatatype();
284  }
285 
286  if(!isset(self::$datatype_cache[$datatyp_id])) {
287  return new ilDclDatatype();
288  }
289  return self::$datatype_cache[$datatyp_id];
290  }
291 
292 
298  public static function buildFieldFromRecord($rec) {
299  $fields_cache = &self::$fields_cache;
300  if (isset($fields_cache[$rec["id"]])) {
301  return $fields_cache[$rec["id"]];
302  }
304  $field->setId($rec["id"]);
305  $field->setTableId($rec["table_id"]);
306  $field->setTitle($rec["title"]);
307  $field->setDescription($rec["description"]);
308  $field->setDatatypeId($rec["datatype_id"]);
309  $field->setRequired($rec["required"]);
310  $field->setUnique($rec["is_unique"]);
311  $field->setLocked($rec["is_locked"]);
312  $fields_cache[$rec["id"]] = $field;
313 
314  return $field;
315  }
316 
317 
321  public static function resetCache() {
322  self::$fields_cache = array();
323  self::$record_field_cache = array();
324  self::$records_cache = array();
325  }
326 }
Class ilDclBaseFieldModel.
static getCloneOf($id, $type)
const TYPE_DATACOLLECTION
static setCloneOf($old, $new, $type)
static $field_representation_cache
static buildFieldFromRecord($rec)
$result
static getFieldProperties($field_id)
Cache Field properties.
static getAllDatatype()
Get all possible Datatypes.
static preloadFieldProperties(array $fields)
Preloads field properties.
static getFieldCache($field_id=0)
static getFieldRepresentationInstance(ilDclBaseFieldModel $field)
Returns FieldRepresentation from BaseFieldModel.
static initCloneMapping()
const TYPE_TABLEVIEW
static getTableCache($table_id=0)
Class ilDclBaseFieldModel.
static where($where, $operator=null)
static $field_properties_cache
static getRecordFieldInstance(ilDclBaseFieldModel $field, ilDclBaseRecordModel $record)
Creates a RecordField instance and loads the field and record representation.
static resetCache()
Resets all the cache fields.
static getFieldRepresentation(ilDclBaseFieldModel $field)
static $clone_mapping
static $tables_cache
static getFieldModelInstance($field_id, $datatype=null)
Get FieldModel from field-id and datatype.
static getRecordCache($record_id=0)
static $record_representation_cache
static getRecordRepresentation(ilDclBaseRecordFieldModel $record_field)
Returns a record representation.
$old
Create styles array
The data for the language used.
static getRecordRepresentationInstance(ilDclBaseRecordFieldModel $record_field)
Get RecordRepresentation from RecordFieldModel.
Class ilDclDatatype.
static getFieldModelInstanceByClass(ilDclBaseFieldModel $field, $field_id=null)
Gets the correct instance of a fieldModel class Checks if a field is a plugin a replaces the fieldMod...
static getRecordFieldCache($record, $field)
Class ilDclException.
static $records_cache
static $datatype_cache
static getRecordModelInstance($record_id)
Creates a RecordModel instance.
static $fields_cache
static $record_field_cache
static getDatatype($datatyp_id)
Get cached datatypes.
Class ilObjDataCollection.
Class ilDclCache.