ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilDclStandardField.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
16{
17 public function doRead()
18 {
19 global $DIC;
20 $ilLog = $DIC['ilLog'];
21 $message = "Standard fields cannot be read from DB";
23 $ilLog->write("[ilDclStandardField] " . $message);
24 }
25
26
27 public function doCreate()
28 {
29 global $DIC;
30 $ilLog = $DIC['ilLog'];
31 $message = "Standard fields cannot be written to DB";
33 $ilLog->write("[ilDclStandardField] " . $message);
34 }
35
36
37 public function doUpdate()
38 {
40 }
41
42
46 public function cloneStructure($original_record)
47 {
48 $this->setLocked($original_record->getLocked());
49 $this->setOrder($original_record->getOrder());
50 $this->setRequired($original_record->getRequired());
51 $this->setUnique($original_record->isUnique());
52 $this->setExportable($original_record->getExportable());
53
54 $this->doUpdate();
55 }
56
57
61 public function getLocked()
62 {
63 return true;
64 }
65
66
70 public static function _getStandardFieldsAsArray()
71 {
72
73 //TODO: this isn't particularly pretty especially as $lng is used in the model. On the long run the standard fields should be refactored into "normal" fields.
74 global $DIC;
75 $lng = $DIC['lng'];
76 $stdfields = array(
77 array(
78 "id" => "id",
79 "title" => $lng->txt("dcl_id"),
80 "description" => $lng->txt("dcl_id_description"),
81 "datatype_id" => ilDclDatatype::INPUTFORMAT_NUMBER,
82 "required" => true,
83 ),
84 array(
85 "id" => "create_date",
86 "title" => $lng->txt("dcl_creation_date"),
87 "description" => $lng->txt("dcl_creation_date_description"),
89 "required" => true,
90 ),
91 array(
92 "id" => "last_update",
93 "title" => $lng->txt("dcl_last_update"),
94 "description" => $lng->txt("dcl_last_update_description"),
96 "required" => true,
97 ),
98 array(
99 "id" => "owner",
100 "title" => $lng->txt("dcl_owner"),
101 "description" => $lng->txt("dcl_owner_description"),
102 "datatype_id" => ilDclDatatype::INPUTFORMAT_TEXT,
103 "required" => true,
104 ),
105 array(
106 "id" => "last_edit_by",
107 "title" => $lng->txt("dcl_last_edited_by"),
108 "description" => $lng->txt("dcl_last_edited_by_description"),
109 "datatype_id" => ilDclDatatype::INPUTFORMAT_TEXT,
110 "required" => true,
111 ),
112 array(
113 'id' => 'comments',
114 'title' => $lng->txt('dcl_comments'),
115 'description' => $lng->txt('dcl_comments_desc'),
116 'datatype_id' => ilDclDatatype::INPUTFORMAT_NONE,
117 'required' => false,
118 ),
119 );
120
121 return $stdfields;
122 }
123
124
130 public static function _getStandardFields($table_id)
131 {
132 $stdFields = array();
133 foreach (self::_getStandardFieldsAsArray() as $array) {
134 $array["table_id"] = $table_id;
135 //$array["datatype_id"] = self::_getDatatypeForId($array["id"]);
136 $field = new ilDclStandardField();
137 $field->buildFromDBRecord($array);
138 $stdFields[] = $field;
139 }
140
141 return $stdFields;
142 }
143
144
150 {
151 global $DIC;
152 $ilDB = $DIC['ilDB'];
153 $identifiers = '';
154 foreach (
155 array(
156 'dcl_id',
157 'dcl_creation_date',
158 'dcl_last_update',
159 'dcl_last_edited_by',
160 'dcl_comments',
161 ) as $id
162 ) {
163 $identifiers .= $ilDB->quote($id, 'text') . ',';
164 }
165 $identifiers = rtrim($identifiers, ',');
166 $sql = $ilDB->query(
167 'SELECT value FROM lng_data WHERE identifier IN (' . $identifiers
168 . ')'
169 );
170 $titles = array();
171 while ($rec = $ilDB->fetchAssoc($sql)) {
172 $titles[] = $rec['value'];
173 }
174
175 return $titles;
176 }
177
178
183 public static function _getImportableStandardFieldTitle()
184 {
185 global $DIC;
186 $ilDB = $DIC['ilDB'];
187 $identifiers = '';
188 foreach (array('dcl_owner') as $id) {
189 $identifiers .= $ilDB->quote($id, 'text') . ',';
190 }
191 $identifiers = rtrim($identifiers, ',');
192 $sql = $ilDB->query(
193 'SELECT value, identifier FROM lng_data WHERE identifier IN ('
194 . $identifiers . ')'
195 );
196 $titles = array();
197 while ($rec = $ilDB->fetchAssoc($sql)) {
198 $titles[$rec['identifier']][] = $rec['value'];
199 }
200
201 return $titles;
202 }
203
204
210 public static function _isStandardField($field_id)
211 {
212 $return = false;
213 foreach (self::_getStandardFieldsAsArray() as $field) {
214 if ($field["id"] == $field_id) {
215 $return = true;
216 }
217 }
218
219 return $return;
220 }
221
222
230 public static function _getDatatypeForId($id)
231 {
232 $datatype = null;
233 foreach (self::_getStandardFieldsAsArray() as $fields_data) {
234 if ($id == $fields_data['id']) {
235 $datatype = $fields_data['datatype_id'];
236 break;
237 }
238 }
239
240 return $datatype;
241 }
242
243
247 public function isStandardField()
248 {
249 return true;
250 }
251
252
256 public function isUnique()
257 {
258 return false;
259 }
260
261
270 public function getRecordQuerySortObject($direction = "asc", $sort_by_status = false)
271 {
272 $sql_obj = new ilDclRecordQueryObject();
273
274 $join_str = "";
275 if ($this->getId() == 'owner' || $this->getId() == 'last_edit_by') {
276 $join_str = "LEFT JOIN usr_data AS sort_usr_data_{$this->getId()} ON (sort_usr_data_{$this->getId()}.usr_id = record.{$this->getId()})";
277 $select_str = " sort_usr_data_{$this->getId()}.login AS field_{$this->getId()},";
278 } else {
279 $select_str = " record.{$this->getId()} AS field_{$this->getId()},";
280 }
281
282 $sql_obj->setSelectStatement($select_str);
283 $sql_obj->setJoinStatement($join_str);
284
285 if ($this->getId() !== "comments") {
286 $sql_obj->setOrderStatement("field_{$this->getId()} " . $direction);
287 }
288
289 return $sql_obj;
290 }
291
292
301 public function getRecordQueryFilterObject($filter_value = "", ilDclBaseFieldModel $sort_field = null)
302 {
303 global $DIC;
304 $ilDB = $DIC['ilDB'];
305
306 $where_additions = "";
307 $join_str = "";
309 $join_str = "INNER JOIN usr_data AS filter_usr_data_{$this->getId()} ON (filter_usr_data_{$this->getId()}.usr_id = record.{$this->getId()} AND filter_usr_data_{$this->getId()}.login LIKE "
310 . $ilDB->quote("%$filter_value%", 'text') . ") ";
311 } else {
313 $from = (isset($filter_value['from'])) ? $filter_value['from'] : null;
314 $to = (isset($filter_value['to'])) ? $filter_value['to'] : null;
315 if (is_numeric($from)) {
316 $where_additions .= " AND record.{$this->getId()} >= "
317 . $ilDB->quote($from, 'integer');
318 }
319 if (is_numeric($to)) {
320 $where_additions .= " AND record.{$this->getId()} <= "
321 . $ilDB->quote($to, 'integer');
322 }
323 } else {
325 $date_from = (isset($filter_value['from'])
326 && is_object($filter_value['from'])) ? $filter_value['from'] : null;
327 $date_to = (isset($filter_value['to'])
328 && is_object($filter_value['to'])) ? $filter_value['to'] : null;
329
330 // db->quote(.. date) at some point invokes ilDate->_toString, which adds a <br /> to the string,
331 // that's why strip_tags is used
332 if ($date_from) {
333 $where_additions .= " AND (record.{$this->getId()} >= "
334 . strip_tags($ilDB->quote($date_from, 'date')) . ")";
335 }
336 if ($date_to) {
337 $where_additions .= " AND (record.{$this->getId()} <= "
338 . strip_tags($ilDB->quote($date_to, 'date')) . ")";
339 }
340 }
341 }
342 }
343
344 $sql_obj = new ilDclRecordQueryObject();
345 $sql_obj->setJoinStatement($join_str);
346 $sql_obj->setWhereStatement($where_additions);
347
348 return $sql_obj;
349 }
350
351
355 public function getSortField()
356 {
357 if ($this->getId() == 'comments') {
358 return 'n_comments';
359 }
360 return parent::getSortField();
361 }
362
363
367 public function hasNumericSorting()
368 {
369 if ($this->getId() == 'comments') {
370 return true;
371 }
372
373 return parent::hasNumericSorting();
374 }
375
376
380 public function allowFilterInListView()
381 {
382 //comments are filterable if they are enabled in the tables settings
383 return $this->id != 'comments'
384 || ilDclCache::getTableCache($this->getTableId())->getPublicCommentsEnabled();
385 }
386
387
393 public function fillHeaderExcel(ilExcel $worksheet, &$row, &$col)
394 {
395 parent::fillHeaderExcel($worksheet, $row, $col);
396 if ($this->getId() == 'owner') {
397 global $DIC;
398 $lng = $DIC['lng'];
399 $worksheet->setCell($row, $col, $lng->txt("dcl_owner_name"));
400 $col++;
401 }
402 }
403
404
412 public function getValueFromExcel($excel, $row, $col)
413 {
414 $value = $excel->getCell($row, $col);
415 switch ($this->id) {
416 case 'owner':
417 return ilObjUser::_lookupId($value);
418 default:
419 return $value;
420 }
421 }
422
423
427 public function afterClone($records)
428 {
429 }
430}
An exception for terminatinating execution or to throw for unit testing.
Class ilDclBaseFieldModel.
updateTableFieldSetting()
update exportable and fieldorder
setRequired($a_required)
Set Required.
static getTableCache($table_id=0)
Class ilDclRecordQueryObject.
Class ilDclBaseFieldModel.
getRecordQuerySortObject($direction="asc", $sort_by_status=false)
Returns a query-object for building the record-loader-sql-query.
fillHeaderExcel(ilExcel $worksheet, &$row, &$col)
doCreate()
Create new field.
getValueFromExcel($excel, $row, $col)
static _isStandardField($field_id)
cloneStructure($original_record)
getRecordQueryFilterObject($filter_value="", ilDclBaseFieldModel $sort_field=null)
Returns a query-object for building the record-loader-sql-query.
static _getStandardFields($table_id)
static _getDatatypeForId($id)
gives you the datatype id of a specified standard field.
setCell($a_row, $a_col, $a_value, $a_datatype=null)
Set cell value.
static _lookupId($a_user_str)
Lookup id by login.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
catch(Exception $e) $message
$row
global $DIC
Definition: saml.php:7
$lng
$records
Definition: simple_test.php:22
global $ilDB
$from