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  {
39  $this->updateTableFieldSetting();
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"),
88  "datatype_id" => ilDclDatatype::INPUTFORMAT_DATETIME,
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"),
95  "datatype_id" => ilDclDatatype::INPUTFORMAT_DATETIME,
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 
149  public static function _getNonImportableStandardFieldTitles()
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 }
getRecordQuerySortObject($direction="asc", $sort_by_status=false)
Returns a query-object for building the record-loader-sql-query.
Class ilDclBaseFieldModel.
getRecordQueryFilterObject($filter_value="", ilDclBaseFieldModel $sort_field=null)
Returns a query-object for building the record-loader-sql-query.
Class ilDclRecordQueryObject.
global $DIC
Definition: saml.php:7
static _lookupId($a_user_str)
Lookup id by login.
cloneStructure($original_record)
$from
$records
Definition: simple_test.php:22
static getTableCache($table_id=0)
static _getDatatypeForId($id)
gives you the datatype id of a specified standard field.
static _getStandardFields($table_id)
catch(Exception $e) $message
setRequired($a_required)
Set Required.
$lng
setCell($a_row, $a_col, $a_value, $a_datatype=null)
Set cell value.
Class ilDclBaseFieldModel.
fillHeaderExcel(ilExcel $worksheet, &$row, &$col)
static _isStandardField($field_id)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
updateTableFieldSetting()
update exportable and fieldorder
$row
global $ilDB
getValueFromExcel($excel, $row, $col)
getDatatypeId()
Get datatype_id.