ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
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
110 {
111 return $this->selected_only;
112 }
113
121 public function parse()
122 {
123 switch($this->mode)
124 {
126 return $this->parseEditor();
127
129 return $this->parseSearch();
130
131 case self::MODE_INFO:
132 return $this->parseInfoPage();
133
135 return $this->parseRecordSelection();
136
138 return $this->parseFilter();
139
141 return $this->parseTableHead();
142
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?>
$section
Definition: Utf8Test.php:84
const IL_CAL_UNIX
static getInstance()
Get singleton.
static getInstance($a_field_id, $a_type=null)
Get definition instance by type.
static getInstancesByRecordId($a_record_id, $a_only_searchable=false)
Get definitions by record id.
parseRecordSelection($a_sec_head="")
Parse property form in editor mode.
importEditFormPostValues()
Load edit form values from post.
getFilterElements()
Get SQL conditions for current filter value(s)
__construct($a_mode, $a_obj_type='', $a_obj_id='', $a_sub_type='', $a_sub_id='')
Constructor.
showECSStart($def)
Show special form for ecs start.
setInfoObject($info)
get info sections
writeEditForm()
Write edit form values to db.
importFilter()
Import filter (post) values.
setSelectedOnly($a_val)
Set selected only flag.
parseFilter()
Parse property for filter (table)
parseTableHead()
Parse property for table head.
parseDuration($u_start, $u_end)
parse hours and minutes from duration
getSelectedOnly()
Get selected only flag.
handleECSDefinitions($a_definition)
handle ecs definitions
importSearchForm()
Load edit form values from post.
setPropertyForm($form)
set property form object
setSearchValues($a_values)
Set values for search form.
saveSelection()
Save selection per object.
parseEditor()
Parse property form in editor mode.
static _lookupTitle($a_record_id)
Lookup title.
static _getActivatedRecordsByObjectType($a_obj_type, $a_sub_type="")
Get activated records by object type.
static _getSelectedRecordsByObject($a_obj_type, $a_obj_id, $a_sub_type="")
Get selected records by object.
static saveObjRecSelection($a_obj_id, $a_sub_type="", array $a_records=null, $a_delete_before=true)
Save repository object record selection.
static getObjRecSelection($a_obj_id, $a_sub_type="")
Get repository object record selection.
static getInstancesForObjectId($a_obj_id, $a_obj_type=null)
Get instances for given object id.
This class represents a checkbox property in a property form.
This class represents a date/time property in a property form.
@classDescription Date and time handling
This class represents a duration (typical hh:mm:ss) property in a property form.
static _getInstance()
Get Singleton instance.
static getInstance()
Get singleton instance.
This class represents a section header in a property form.
This class represents a selection list property in a property form.
This class represents a text property in a property form.
static stripSlashesArray($a_arr, $a_strip_html=true, $a_allow="")
Strip slashes from array.
$_POST['username']
Definition: cron.php:12
$valid
global $ilUser
Definition: imgupload.php:15