ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilAdvancedMDRecordGUI.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
15 {
16  const MODE_EDITOR = 1;
17  const MODE_SEARCH = 2;
18  const MODE_INFO = 3;
19 
20  // glossary
21  const MODE_REC_SELECTION = 4; // record selection (per object)
22  const MODE_FILTER = 5; // filter (as used e.g. in tables)
23  const MODE_TABLE_HEAD = 6; // table header (columns)
24  const MODE_TABLE_CELLS = 7; // table cells
25 
26  protected $lng;
27 
28  private $mode;
29  private $obj_type;
30  private $sub_type;
31  private $obj_id;
32 
33  private $form;
34  private $search_values = array();
35 
36  protected $editor_form; // [array]
37 
46  public function __construct($a_mode,$a_obj_type = '',$a_obj_id = '', $a_sub_type = '', $a_sub_id = '')
47  {
48  global $lng;
49 
50  $this->lng = $lng;
51  $this->mode = $a_mode;
52  $this->obj_type = $a_obj_type;
53  $this->obj_id = $a_obj_id;
54  $this->sub_type = $a_sub_type;
55  $this->sub_id = $a_sub_id;
56  }
57 
65  public function setPropertyForm($form)
66  {
67  $this->form = $form;
68  }
69 
76  public function setSearchValues($a_values)
77  {
78  $this->search_values = $a_values;
79  }
80 
81 
89  public function setInfoObject($info)
90  {
91  $this->info = $info;
92  }
93 
99  function setSelectedOnly($a_val)
100  {
101  $this->selected_only = $a_val;
102  }
103 
109  function getSelectedOnly()
110  {
111  return $this->selected_only;
112  }
113 
121  public function parse()
122  {
123  switch($this->mode)
124  {
125  case self::MODE_EDITOR:
126  return $this->parseEditor();
127 
128  case self::MODE_SEARCH:
129  return $this->parseSearch();
130 
131  case self::MODE_INFO:
132  return $this->parseInfoPage();
133 
134  case self::MODE_REC_SELECTION:
135  return $this->parseRecordSelection();
136 
137  case self::MODE_FILTER:
138  return $this->parseFilter();
139 
140  case self::MODE_TABLE_HEAD:
141  return $this->parseTableHead();
142 
143  case self::MODE_TABLE_CELLS:
144  return $this->parseTableCells();
145 
146  default:
147  die('Not implemented yet');
148  }
149  }
150 
151 
152  //
153  // editor
154  //
155 
159  protected function parseEditor()
160  {
161  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecord.php');
162  if ($this->getSelectedOnly())
163  {
164  $recs = ilAdvancedMDRecord::_getSelectedRecordsByObject($this->obj_type, $this->obj_id, $this->sub_type);
165  }
166  else
167  {
168  $recs = ilAdvancedMDRecord::_getActivatedRecordsByObjectType($this->obj_type, $this->sub_type);
169  }
170 
171  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDValues.php');
172  $this->editor_form = array();
173 
174  foreach($recs as $record_obj)
175  {
176  /* :TODO:
177  if($this->handleECSDefinitions($def))
178  {
179  continue;
180  }
181  */
182 
183  $record_id = $record_obj->getRecordId();
184 
185  $values = new ilAdvancedMDValues($record_id, $this->obj_id, $this->sub_type, $this->sub_id);
186  $values->read();
187 
188  $adt_group_form = ilADTFactory::getInstance()->getFormBridgeForInstance($values->getADTGroup());
189  $adt_group_form->setForm($this->form);
190  $adt_group_form->setTitle($record_obj->getTitle());
191  $adt_group_form->setInfo($record_obj->getDescription());
192 
193  foreach($values->getDefinitions() as $def)
194  {
195  $element = $adt_group_form->getElement($def->getFieldId());
196  $element->setTitle($def->getTitle());
197  $element->setInfo($def->getDescription());
198 
199  // definition may customize ADT form element
200  $def->prepareElementForEditor($element);
201 
202  if($values->isDisabled($def->getFieldId()))
203  {
204  $element->setDisabled(true);
205  }
206  }
207 
208  $adt_group_form->addToForm();
209 
210  $this->editor_form[$record_id] = array("values"=>$values, "form"=>$adt_group_form);
211  }
212  }
213 
219  public function importEditFormPostValues()
220  {
221  // #13774
222  if(!is_array($this->editor_form))
223  {
224  return false;
225  }
226 
227  $valid = true;
228 
229  foreach($this->editor_form as $item)
230  {
231  $item["form"]->importFromPost();
232  if(!$item["form"]->validate())
233  {
234  $valid = false;
235  }
236  }
237 
238  return $valid;
239  }
240 
246  public function writeEditForm()
247  {
248  if(!sizeof($this->editor_form))
249  {
250  return false;
251  }
252 
253  foreach($this->editor_form as $item)
254  {
255  $item["values"]->write();
256  }
257 
258  return true;
259  }
260 
261 
262  //
263  // search
264  //
265 
269  private function parseSearch()
270  {
271  // this is NOT used for the global search, see ilLuceneAdvancedSearchFields::getFormElement()
272  // (so searchable flag is NOT relevant)
273  //
274  // current usage: wiki page element "[amd] page list"
275 
276  $this->lng->loadLanguageModule('search');
277 
278  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecord.php');
279  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php');
280  if ($this->getSelectedOnly())
281  {
282  $recs = ilAdvancedMDRecord::_getSelectedRecordsByObject($this->obj_type, $this->obj_id, $this->sub_type);
283  }
284  else
285  {
286  $recs = ilAdvancedMDRecord::_getActivatedRecordsByObjectType($this->obj_type, $this->sub_type);
287  }
288 
289  $this->search_form = array();
290  foreach($recs as $record)
291  {
293  $section->setTitle($record->getTitle());
294  $section->setInfo($record->getDescription());
295  $this->form->addItem($section);
296 
297  foreach(ilAdvancedMDFieldDefinition::getInstancesByRecordId($record->getRecordId(), true) as $field)
298  {
299  $field_form = ilADTFactory::getInstance()->getSearchBridgeForDefinitionInstance($field->getADTDefinition(), true, false);
300  $field_form->setForm($this->form);
301  $field_form->setElementId("advmd[".$field->getFieldId()."]");
302  $field_form->setTitle($field->getTitle());
303 
304  if(is_array($this->search_form_values) &&
305  isset($this->search_form_values[$field->getFieldId()]))
306  {
307  $field->setSearchValueSerialized($field_form, $this->search_form_values[$field->getFieldId()]);
308  }
309 
310  $field->prepareElementForSearch($field_form);
311 
312  $field_form->addToForm();
313 
314  $this->search_form[$field->getFieldId()] = array("def"=>$field, "value"=>$field_form);
315  }
316  }
317  }
318 
324  public function importSearchForm()
325  {
326  if(!sizeof($this->search_form))
327  {
328  return false;
329  }
330 
331  $valid = true;
332  $res = array();
333 
334  foreach($this->search_form as $field_id => $item)
335  {
336  $item["value"]->importFromPost();
337  if(!$item["value"]->validate())
338  {
339  $valid = false;
340  }
341  $value = $item["def"]->getSearchValueSerialized($item["value"]);
342  if($value !== null)
343  {
344  $res[$field_id] = $value;
345  }
346  }
347 
348  if($valid)
349  {
350  return $res;
351  }
352  }
353 
354  public function setSearchFormValues(array $a_values)
355  {
356  $this->search_form_values = $a_values;
357  }
358 
359 
360  //
361  // infoscreen
362  //
363 
364  private function parseInfoPage()
365  {
366  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDValues.php');
367  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecord.php');
368  include_once('Services/ADT/classes/class.ilADTFactory.php');
369 
370  foreach(ilAdvancedMDValues::getInstancesForObjectId($this->obj_id, $this->obj_type) as $record_id => $a_values)
371  {
372  // this correctly binds group and definitions
373  $a_values->read();
374 
375  $this->info->addSection(ilAdvancedMDRecord::_lookupTitle($record_id));
376 
377  $defs = $a_values->getDefinitions();
378  foreach($a_values->getADTGroup()->getElements() as $element_id => $element)
379  {
380  if(!$element->isNull())
381  {
382  $this->info->addProperty($defs[$element_id]->getTitle(),
383  ilADTFactory::getInstance()->getPresentationBridgeForInstance($element)->getHTML());
384  }
385  }
386  }
387  }
388 
389 
390  //
391  // :TODO: ECS
392  //
393 
401  private function handleECSDefinitions($a_definition)
402  {
403  include_once('./Services/WebServices/ECS/classes/class.ilECSDataMappingSettings.php');
404  include_once('./Services/WebServices/ECS/classes/class.ilECSServerSettings.php');
405 
406  if(ilECSServerSettings::getInstance()->activeServerExists() or
407  ($this->obj_type != 'crs' and $this->obj_type != 'rcrs')
408  )
409  {
410  return false;
411  }
412  return false;
413  /*
414  $mapping = ilECSDataMappingSettings::_getInstance();
415 
416  if($mapping->getMappingByECSName(ilECSDataMappingSetting::MAPPING_IMPORT_RCRS, 'begin') == $a_definition->getFieldId())
417  {
418  $this->showECSStart($a_definition);
419  return true;
420  }
421  if($mapping->getMappingByECSName(ilECSDataMappingSetting::MAPPING_IMPORT_RCRS, 'end') == $a_definition->getFieldId())
422  {
423  return true;
424  }
425  if($mapping->getMappingByECSName(ilECSDataMappingSetting::MAPPING_IMPORT_RCRS, 'cycle') == $a_definition->getFieldId())
426  {
427  return true;
428  }
429  if($mapping->getMappingByECSName(ilECSDataMappingSetting::MAPPING_IMPORT_RCRS, 'room') == $a_definition->getFieldId())
430  {
431  return true;
432  }
433  */
434  }
435 
442  private function showECSStart($def)
443  {
444  global $ilUser;
445 
446  $this->lng->loadLanguageModule('ecs');
447 
448  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDValue.php');
449  $value_start = ilAdvancedMDValue::_getInstance($this->obj_id,$def->getFieldId());
450 
451  $unixtime = $value_start->getValue() ? $value_start->getValue() : mktime(8,0,0,date('m'),date('d'),date('Y'));
452 
453  $time = new ilDateTimeInputGUI($this->lng->txt('ecs_event_appointment'),'md['.$def->getFieldId().']');
454  $time->setShowTime(true);
455  $time->setDate(new ilDateTime($unixtime,IL_CAL_UNIX));
456  $time->enableDateActivation($this->lng->txt('enabled'),
457  'md_activated['.$def->getFieldId().']',
458  $value_start->getValue() ? true : false);
459  $time->setDisabled($value_start->isDisabled());
460 
462  if($field_id = $mapping->getMappingByECSName(0,'end'))
463  {
464  $value_end = ilAdvancedMDValue::_getInstance($this->obj_id,$field_id);
465 
466  list($hours,$minutes) = $this->parseDuration($value_start->getValue(),$value_end->getValue());
467 
468  $duration = new ilDurationInputGUI($this->lng->txt('ecs_duration'),'ecs_duration');
469  $duration->setHours($hours);
470  $duration->setMinutes($minutes);
471  #$duration->setInfo($this->lng->txt('ecs_duration_info'));
472  $duration->setShowHours(true);
473  $duration->setShowMinutes(true);
474  $time->addSubItem($duration);
475  }
476 
477  if($field_id = $mapping->getMappingByECSName(0,'cycle'))
478  {
479  $value = ilAdvancedMDValue::_getInstance($this->obj_id,$field_id);
480  $cycle_def = ilAdvancedMDFieldDefinition::getInstance($field_id);
481  switch($cycle_def->getFieldType())
482  {
484  $text = new ilTextInputGUI($cycle_def->getTitle(),'md['.$cycle_def->getFieldId().']');
485  $text->setValue($value->getValue());
486  $text->setSize(20);
487  $text->setMaxLength(512);
488  $text->setDisabled($value->isDisabled());
489  $time->addSubItem($text);
490  break;
491 
493  $select = new ilSelectInputGUI($cycle_def->getTitle(),'md['.$cycle_def->getFieldId().']');
494  $select->setOptions($cycle_def->getFieldValuesForSelect());
495  $select->setValue($value->getValue());
496  $select->setDisabled($value->isDisabled());
497  $time->addSubItem($select);
498  break;
499  }
500  }
501  if($field_id = $mapping->getMappingByECSName(0,'room'))
502  {
503  $value = ilAdvancedMDValue::_getInstance($this->obj_id,$field_id);
504  $room_def = ilAdvancedMDFieldDefinition::getInstance($field_id);
505  switch($room_def->getFieldType())
506  {
508  $text = new ilTextInputGUI($room_def->getTitle(),'md['.$room_def->getFieldId().']');
509  $text->setValue($value->getValue());
510  $text->setSize(20);
511  $text->setMaxLength(512);
512  $text->setDisabled($value->isDisabled());
513  $time->addSubItem($text);
514  break;
515 
517  $select = new ilSelectInputGUI($room_def->getTitle(),'md['.$room_def->getFieldId().']');
518  $select->setOptions($cycle_def->getFieldValuesForSelect());
519  $select->setValue($value->getValue());
520  $select->setDisabled($value->isDisabled());
521  $time->addSubItem($select);
522  break;
523  }
524  }
525  $this->form->addItem($time);
526  }
527 
535  protected function parseDuration($u_start,$u_end)
536  {
537  if($u_start >= $u_end)
538  {
539  return array(0,0);
540  }
541  $diff = $u_end - $u_start;
542  $hours = (int) ($diff / (60 * 60));
543  $min = (int) (($diff % 3600) / 60);
544  return array($hours,$min);
545  }
546 
547 
548  //
549  // glossary
550  //
551 
558  public function parseRecordSelection($a_sec_head = "")
559  {
560  global $ilUser;
561 
562  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecord.php');
563  $first = true;
564  foreach(ilAdvancedMDRecord::_getActivatedRecordsByObjectType($this->obj_type, $this->sub_type) as $record_obj)
565  {
566  $selected = ilAdvancedMDRecord::getObjRecSelection($this->obj_id, $this->sub_type);
567  if ($first)
568  {
569  $first = false;
571  $sec_tit = ($a_sec_head == "")
572  ? $this->lng->txt("meta_adv_records")
573  : $a_sec_head;
574  $section->setTitle($sec_tit);
575  $this->form->addItem($section);
576  }
577 
578  // checkbox for each active record
579  $cb = new ilCheckboxInputGUI($record_obj->getTitle(), "amet_use_rec[]");
580  $cb->setInfo($record_obj->getDescription());
581  $cb->setValue($record_obj->getRecordId());
582  if (in_array($record_obj->getRecordId(), $selected))
583  {
584  $cb->setChecked(true);
585  }
586  $this->form->addItem($cb);
587  }
588  }
589 
596  function saveSelection()
597  {
598  $sel = ilUtil::stripSlashesArray($_POST["amet_use_rec"]);
599  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecord.php');
600  ilAdvancedMDRecord::saveObjRecSelection($this->obj_id, $this->sub_type, $sel);
601  }
602 
608  function setTableGUI($a_val)
609  {
610  $this->table_gui = $a_val;
611  }
612 
618  function getTableGUI()
619  {
620  return $this->table_gui;
621  }
622 
628  function setRowData($a_val)
629  {
630  $this->row_data = $a_val;
631  }
632 
638  function getRowData()
639  {
640  return $this->row_data;
641  }
642 
649  private function parseFilter()
650  {
651  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecord.php');
652  if ($this->getSelectedOnly())
653  {
654  $recs = ilAdvancedMDRecord::_getSelectedRecordsByObject($this->obj_type, $this->obj_id, $this->sub_type);
655  }
656  else
657  {
658  $recs = ilAdvancedMDRecord::_getActivatedRecordsByObjectType($this->obj_type, $this->sub_type);
659  }
660 
661  $this->adt_search = array();
662 
663  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php');
664  foreach($recs as $record_obj)
665  {
666  $record_id = $record_obj->getRecordId();
667 
669  foreach($defs as $def)
670  {
671  // :TODO: not all types supported yet
672  if(!in_array($def->getType(), array(
678  {
679  continue;
680  }
681 
682  /* :TODO:
683  if($this->handleECSDefinitions($def))
684  {
685  continue;
686  }
687  */
688 
689  $this->adt_search[$def->getFieldId()] = ilADTFactory::getInstance()->getSearchBridgeForDefinitionInstance($def->getADTDefinition(), true, false);
690  $this->adt_search[$def->getFieldId()]->setTableGUI($this->table_gui);
691  $this->adt_search[$def->getFieldId()]->setTitle($def->getTitle());
692  $this->adt_search[$def->getFieldId()]->setElementId('md_'.$def->getFieldId());
693 
694  $this->adt_search[$def->getFieldId()]->loadFilter();
695  $this->adt_search[$def->getFieldId()]->addToForm();
696  }
697  }
698  }
699 
703  public function importFilter()
704  {
705  if(!is_array($this->adt_search))
706  {
707  return;
708  }
709 
710  foreach($this->adt_search as $element)
711  {
712  $element->importFromPost();
713  }
714  }
715 
721  public function getFilterElements()
722  {
723  if(!is_array($this->adt_search))
724  {
725  return;
726  }
727 
728  $res = array();
729 
730  foreach($this->adt_search as $def_id => $element)
731  {
732  if(!$element->isNull())
733  {
734  $res[$def_id] = $element;
735  }
736  }
737 
738  return $res;
739  }
740 
741 
742  //
743  // :TODO: OBSOLETE? not used in glossary
744  //
745 
749  private function parseTableHead()
750  {
751  global $ilUser;
752 
753  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecord.php');
754  if ($this->getSelectedOnly())
755  {
756  $recs = ilAdvancedMDRecord::_getSelectedRecordsByObject($this->obj_type, $this->obj_id, $this->sub_type);
757  }
758  else
759  {
760  $recs = ilAdvancedMDRecord::_getActivatedRecordsByObjectType($this->obj_type, $this->sub_type);
761  }
762  foreach($recs as $record_obj)
763  {
764  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php');
765  foreach(ilAdvancedMDFieldDefinition::_getDefinitionsByRecordId($record_obj->getRecordId()) as $def)
766  {
767  if($this->handleECSDefinitions($def))
768  {
769  continue;
770  }
771 
772  $this->table_gui->addColumn($def->getTitle(),'md_'.$def->getFieldId());
773  }
774  }
775  }
776 
780  private function parseTableCells()
781  {
782  global $ilUser;
783 
784  $data = $this->getRowData();
785 
786  $html = "";
787 
788  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecord.php');
789  if ($this->getSelectedOnly())
790  {
791  $recs = ilAdvancedMDRecord::_getSelectedRecordsByObject($this->obj_type, $this->obj_id, $this->sub_type);
792  }
793  else
794  {
795  $recs = ilAdvancedMDRecord::_getActivatedRecordsByObjectType($this->obj_type, $this->sub_type);
796  }
797  foreach($recs as $record_obj)
798  {
799  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php');
800  foreach(ilAdvancedMDFieldDefinition::_getDefinitionsByRecordId($record_obj->getRecordId()) as $def)
801  {
802  if($this->handleECSDefinitions($def))
803  {
804  continue;
805  }
806 
807  $html.= "<td class='std'>".$data['md_'.$def->getFieldId()]."</td>";
808  }
809  }
810  return $html;
811  }
812 
813 }
814 
815 
816 ?>
parseDuration($u_start, $u_end)
parse hours and minutes from duration
This class represents a duration (typical hh:mm:ss) property in a property form.
importSearchForm()
Load edit form values from post.
parseTableCells()
Parse table cells.
$_POST['username']
Definition: cron.php:12
This class represents a selection list property in a property form.
getFilterElements()
Get SQL conditions for current filter value(s)
setPropertyForm($form)
set property form object
importEditFormPostValues()
Load edit form values from post.
This class represents a section header in a property form.
static getInstance()
Get singleton instance.
$valid
handleECSDefinitions($a_definition)
handle ecs definitions
setHours($a_hours)
Set Hours.
This class represents a checkbox property in a property form.
parseRecordSelection($a_sec_head="")
Parse property form in editor mode.
parseTableHead()
Parse property for table head.
writeEditForm()
Write edit form values to db.
const IL_CAL_UNIX
static getInstance()
Get singleton.
static _getActivatedRecordsByObjectType($a_obj_type, $a_sub_type="")
Get activated records by object type.
static saveObjRecSelection($a_obj_id, $a_sub_type="", array $a_records=null, $a_delete_before=true)
Save repository object record selection.
getSelectedOnly()
Get selected only flag.
This class represents a date/time property in a property form.
setInfo($a_info)
Set Information Text.
$section
Definition: Utf8Test.php:84
static getInstancesByRecordId($a_record_id, $a_only_searchable=false)
Get definitions by record id.
setInfoObject($info)
get info sections
__construct($a_mode, $a_obj_type='', $a_obj_id='', $a_sub_type='', $a_sub_id='')
Constructor.
static getInstance($a_field_id, $a_type=null)
Get definition instance by type.
This class represents a text property in a property form.
Date and time handling
static _getSelectedRecordsByObject($a_obj_type, $a_obj_id, $a_sub_type="")
Get selected records by object.
setSearchValues($a_values)
Set values for search form.
static _lookupTitle($a_record_id)
Lookup title.
static getInstancesForObjectId($a_obj_id, $a_obj_type=null)
Get instances for given object id.
parseFilter()
Parse property for filter (table)
static stripSlashesArray($a_arr, $a_strip_html=true, $a_allow="")
Strip slashes from array.
showECSStart($def)
Show special form for ecs start.
global $ilUser
Definition: imgupload.php:15
parseEditor()
Parse property form in editor mode.
static _getInstance()
Get Singleton instance.
saveSelection()
Save selection per object.
static getObjRecSelection($a_obj_id, $a_sub_type="")
Get repository object record selection.
importFilter()
Import filter (post) values.
setSelectedOnly($a_val)
Set selected only flag.