ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilDclCache.php
Go to the documentation of this file.
1<?php
2require_once('./Modules/DataCollection/classes/Fields/Reference/class.ilDclReferenceRecordFieldModel.php');
3require_once('./Modules/DataCollection/classes/Fields/Rating/class.ilDclRatingRecordFieldModel.php');
4require_once('./Modules/DataCollection/classes/Fields/IliasReference/class.ilDclIliasReferenceRecordFieldModel.php');
5require_once('./Modules/DataCollection/classes/Fields/Formula/class.ilDclFormulaRecordFieldModel.php');
6require_once('./Modules/DataCollection/classes/Fields/Text/class.ilDclTextRecordFieldModel.php');
7require_once('./Modules/DataCollection/classes/Fields/NReference/class.ilDclNReferenceRecordFieldModel.php');
8require_once('./Modules/DataCollection/classes/Fields/class.ilDclFieldFactory.php');
9
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
47
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) {
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) {
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);
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 }
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) {
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) {
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) {
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}
$result
static where($where, $operator=null)
An exception for terminatinating execution or to throw for unit testing.
Class ilDclBaseFieldModel.
Class ilDclCache.
static getDatatype($datatyp_id)
Get cached datatypes.
static getRecordFieldCache($record, $field)
static getFieldProperties($field_id)
Cache Field properties.
const TYPE_TABLEVIEW
static $field_properties_cache
static getTableCache($table_id=0)
static $field_representation_cache
static $tables_cache
static getRecordCache($record_id=0)
static $fields_cache
static resetCache()
Resets all the cache fields.
static $record_field_cache
static getRecordRepresentation(ilDclBaseRecordFieldModel $record_field)
Returns a record representation.
static $clone_mapping
static $records_cache
static getCloneOf($id, $type)
const TYPE_DATACOLLECTION
static initCloneMapping()
static buildFieldFromRecord($rec)
static $datatype_cache
static setCloneOf($old, $new, $type)
static getFieldCache($field_id=0)
static preloadFieldProperties(array $fields)
Preloads field properties.
static getFieldRepresentation(ilDclBaseFieldModel $field)
static $record_representation_cache
Class ilDclDatatype.
static getAllDatatype()
Get all possible Datatypes.
Class ilDclException.
static getRecordRepresentationInstance(ilDclBaseRecordFieldModel $record_field)
Get RecordRepresentation from RecordFieldModel.
static getFieldModelInstance($field_id, $datatype=null)
Get FieldModel from field-id and datatype.
static getFieldRepresentationInstance(ilDclBaseFieldModel $field)
Returns FieldRepresentation from BaseFieldModel.
static getRecordFieldInstance(ilDclBaseFieldModel $field, ilDclBaseRecordModel $record)
Creates a RecordField instance and loads the field and record representation.
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 getRecordModelInstance($record_id)
Creates a RecordModel instance.
Class ilDclBaseFieldModel.
Class ilObjDataCollection.
$old