24 include_once
'./Services/Calendar/classes/class.ilCalendarRecurrence.php';
25 include_once
'./Services/Booking/classes/class.ilBookingEntry.php';
26 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourAppointments.php';
66 $this->user_id = $ilUser->getId();
82 $ilHelp->setScreenIdComponent(
"cal");
84 switch($this->ctrl->getNextClass())
86 case "ilpublicuserprofilegui":
87 include_once(
'./Services/User/classes/class.ilPublicUserProfileGUI.php');
90 $ret = $ilCtrl->forwardCommand($profile);
91 $tpl->setContent(
$ret);
94 case 'ilrepositorysearchgui':
96 include_once(
'./Services/Search/classes/class.ilRepositorySearchGUI.php');
101 $rep_search->setCallback(
103 'assignUsersToAppointments',
106 $ilCtrl->setParameter($this,
'assignM',1);
107 $ilCtrl->setReturn($this,
'appointmentList');
108 $ilTabs->activateSubTab(
'cal_ch_app_list');
112 $rep_search->setCallback(
114 'assignUsersToGroup',
117 $ilCtrl->saveParameter($this,
'grp_id');
118 $ilCtrl->setReturn($this,
'groupList');
119 $ilTabs->activateSubTab(
'cal_ch_app_grp');
123 $rep_search->setCallback(
125 'assignUsersToAppointment',
128 $ilCtrl->saveParameter($this,
'apps');
129 $ilCtrl->setReturn($this,
'appointmentList');
130 $ilTabs->activateSubTab(
'cal_ch_app_list');
132 $ilCtrl->forwardCommand($rep_search);
136 $tpl->setTitle($this->lng->txt(
"cal_ch_form_header"));
141 $ilCtrl->setParameter($this,
'user_id', $this->user_id);
144 $cmd = $this->ctrl->getCmd(
'appointmentList');
170 $GLOBALS[
'ilCtrl']->redirect($this,
'appointmentList');
173 $ilCtrl->setCmdClass(
'ilrepositorysearchgui');
191 include_once
'./Services/User/classes/class.ilObjUser.php';
194 ilUtil::sendInfo($this->lng->txt(
'cal_ch_user_assignment_failed_info').
'<br />'.implode(
'<br />', $users),
true);
206 $unassigned_users = array();
209 $unassigned_users = array_unique(array_merge($unassigned_users,$this->
assignUsersToAppointment($users,$app,
false)));
213 $ilCtrl->redirect($this,
'appointmentList');
235 include_once
'./Services/Booking/classes/class.ilBookingEntry.php';
238 $assigned_users = array();
239 foreach($users as $user)
241 if(
$booking->getCurrentNumberOfBookings($app) >=
$booking->getNumberOfBookings())
247 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourUtils.php';
249 $assigned_users[] = $user;
253 $unassigned_users = array_diff($users, $assigned_users);
258 $ilCtrl->redirect($this,
'appointmentList');
262 return $unassigned_users;
282 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourAppointments.php';
283 include_once
'./Services/Booking/classes/class.ilBookingEntry.php';
290 $assigned_users = array();
291 foreach($apps as $app)
294 foreach($users as $user)
296 if(
$booking->getCurrentNumberOfBookings($app) >=
$booking->getNumberOfBookings())
302 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourUtils.php';
304 $assigned_users[] = $user;
310 $ilCtrl->redirect($this,
'bookingList');
320 global $ilToolbar, $ilTabs,
$tpl;
322 $ilToolbar->setFormAction($this->ctrl->getFormAction($this));
323 $ilToolbar->addButton($this->lng->txt(
'cal_ch_add_grp'),$this->ctrl->getLinkTarget($this,
'addGroup'));
326 $ilTabs->activateSubTab(
'cal_ch_app_grp');
328 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroupTableGUI.php';
329 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroups.php';
333 $tpl->setContent($gtbl->getHTML());
343 global $ilTabs,
$tpl;
346 $ilTabs->activateSubTab(
'cal_ch_app_grp');
352 $tpl->setContent($form->getHTML());
361 if($form->checkInput())
363 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroup.php';
365 $group->setTitle($form->getInput(
'title'));
366 $group->setMaxAssignments($form->getInput(
'multiple'));
371 $GLOBALS[
'ilCtrl']->redirect($this,
'groupList');
387 $ilCtrl->setParameter($this,
'grp_id',(
int)
$_REQUEST[
'grp_id']);
389 $ilTabs->activateSubTab(
'cal_ch_app_grp');
395 $tpl->setContent($form->getHTML());
408 $ilCtrl->setParameter($this,
'grp_id',(
int)
$_REQUEST[
'grp_id']);
411 if($form->checkInput())
413 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroup.php';
415 $group->setTitle($form->getInput(
'title'));
416 $group->setMaxAssignments($form->getInput(
'multiple'));
421 $GLOBALS[
'ilCtrl']->redirect($this,
'groupList');
437 $ilCtrl->setParameter($this,
'grp_id',(
int)
$_REQUEST[
'grp_id']);
438 $groups = array((
int) $_REQUEST[
'grp_id']);
441 $ilTabs->activateSubTab(
'cal_ch_app_grp');
444 include_once
'./Services/Utilities/classes/class.ilConfirmationGUI.php';
446 $confirm->setFormAction($ilCtrl->getFormAction($this));
447 $confirm->setHeaderText(
$GLOBALS[
'lng']->txt(
'cal_ch_grp_delete_sure'));
448 $confirm->setConfirm(
$GLOBALS[
'lng']->txt(
'delete'),
'deleteGroup');
449 $confirm->setCancel(
$GLOBALS[
'lng']->txt(
'cancel'),
'groupList');
451 foreach($groups as $grp_id)
453 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroup.php';
456 $confirm->addItem(
'groups[]', $grp_id, $group->getTitle());
458 $tpl->setContent($confirm->getHTML());
468 foreach((array)
$_REQUEST[
'groups'] as $grp_id)
470 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroup.php';
475 $ilCtrl->redirect($this,
'groupList');
483 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroup.php';
486 include_once
'Services/Form/classes/class.ilPropertyFormGUI.php';
488 $form->setFormAction(
$GLOBALS[
'ilCtrl']->getFormAction($this));
492 $form->setTitle(
$GLOBALS[
'lng']->txt(
'cal_ch_grp_update_tbl'));
493 $form->addCommandButton(
'updateGroup',
$GLOBALS[
'lng']->txt(
'save'));
494 $form->addCommandButton(
'groupList',
$GLOBALS[
'lng']->txt(
'cancel'));
498 $form->setTitle(
$GLOBALS[
'lng']->txt(
'cal_ch_grp_add_tbl'));
499 $form->addCommandButton(
'saveGroup',
$GLOBALS[
'lng']->txt(
'save'));
500 $form->addCommandButton(
'appointmentList',
$GLOBALS[
'lng']->txt(
'cancel'));
504 $title->setMaxLength(128);
506 $title->setRequired(
true);
507 $title->setValue($group->getTitle());
508 $form->addItem($title);
511 $multiple->setRequired(
true);
512 $multiple->setMinValue(1);
513 $multiple->setSize(1);
514 $multiple->setMaxLength(2);
515 $multiple->setInfo(
$GLOBALS[
'lng']->txt(
'cal_ch_grp_multiple_info'));
516 $multiple->setValue($group->getMaxAssignments());
517 $form->addItem($multiple);
527 global $ilToolbar, $ilTabs,
$tpl;
530 $ilTabs->activateSubTab(
'cal_ch_app_bookings');
532 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourBookingTableGUI.php';
535 $tpl->setContent($btable->getHTML());
551 global $ilTabs,
$tpl;
554 $ilTabs->activateSubTab(
'cal_ch_app_bookings');
556 include_once(
'./Services/Utilities/classes/class.ilConfirmationGUI.php');
559 $confirm->setFormAction($this->ctrl->getFormAction($this));
561 if($a_send_notification)
564 $confirm->setHeaderText($this->lng->txt(
'cal_ch_cancel_booking_sure'));
565 $confirm->setConfirm($this->lng->txt(
'cal_ch_reject_booking'),
'rejectBooking');
570 $confirm->setHeaderText($this->lng->txt(
'cal_ch_delete_booking_sure'));
571 $confirm->setConfirm($this->lng->txt(
'cal_ch_delete_booking'),
'deleteBooking');
574 $confirm->setCancel($this->lng->txt(
'cancel'),
'bookingList');
576 include_once
'Services/Calendar/classes/class.ilCalendarEntry.php';
577 foreach((array)
$_REQUEST[
'bookuser'] as $bookuser)
579 $ids = explode(
'_',$bookuser);
581 include_once
'./Services/Calendar/classes/class.ilCalendarEntry.php';
582 include_once
'./Services/User/classes/class.ilUserUtil.php';
597 $tpl->setContent($confirm->getHTML());
616 foreach((array)
$_REQUEST[
'bookuser'] as $bookuser)
618 $ids = explode(
'_',$bookuser);
620 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourUtils.php';
623 if($a_send_notification)
631 $ilCtrl->redirect($this,
'bookingList');
641 global $ilToolbar, $ilHelp, $ilTabs;
643 $ilHelp->setScreenId(
"consultation_hours");
645 $ilToolbar->setFormAction($this->ctrl->getFormAction($this));
646 $ilToolbar->addButton($this->lng->txt(
'cal_ch_add_sequence'),$this->ctrl->getLinkTarget($this,
'createSequence'));
649 $ilTabs->activateSubTab(
'cal_ch_app_list');
651 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHoursTableGUI.php';
654 $this->tpl->setContent($tbl->getHTML());
666 $this->form->getItemByPostVar(
'bo')->setValue($this->booking->getNumberOfBookings());
667 $this->form->getItemByPostVar(
'ap')->setValue(1);
668 $this->form->getItemByPostVar(
'du')->setMinutes(15);
669 $this->form->getItemByPostVar(
'st')->setDate(
672 $this->tpl->setContent($this->form->getHTML());
682 include_once
'./Services/Form/classes/class.ilPropertyFormGUI.php';
684 include_once(
'./Services/YUI/classes/class.ilYuiUtil.php');
688 $this->form->setFormAction($this->ctrl->getFormAction($this));
692 case self::MODE_CREATE:
693 $this->form->setTitle($this->lng->txt(
'cal_ch_add_sequence'));
694 $this->form->addCommandButton(
'saveSequence', $this->lng->txt(
'save'));
695 $this->form->addCommandButton(
'appointmentList', $this->lng->txt(
'cancel'));
706 case self::MODE_MULTI:
707 $this->form->setTitle($this->lng->txt(
'cal_ch_multi_edit_sequence'));
708 $this->form->addCommandButton(
'updateMulti', $this->lng->txt(
'save'));
709 $this->form->addCommandButton(
'appointmentList', $this->lng->txt(
'cancel'));
714 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroups.php';
717 $group =
new ilSelectInputGUI($this->lng->txt(
'cal_ch_grp_selection'),
'grp');
719 $group->setRequired(
false);
720 $this->form->addItem($group);
726 $ti->setMaxLength(128);
727 $ti->setRequired(
true);
728 $this->form->addItem($ti);
730 if($a_mode != self::MODE_MULTI)
733 include_once
'./Services/Form/classes/class.ilDateTimeInputGUI.php';
736 $dur->setMinuteStepSize(5);
737 $this->form->addItem($dur);
742 $du->setShowHours(
true);
743 $this->form->addItem($du);
746 $nu =
new ilNumberInputGUI($this->lng->txt(
'cal_ch_num_appointments'),
'ap');
747 $nu->
setInfo($this->lng->txt(
'cal_ch_num_appointments_info'));
749 $nu->setMaxLength(2);
750 $nu->setRequired(
true);
752 $this->form->addItem($nu);
755 include_once(
'./Services/Calendar/classes/Form/class.ilRecurrenceInputGUI.php');
764 $this->form->addItem($rec);
770 $nu->setMaxLength(2);
772 $nu->setRequired(
true);
773 $this->form->addItem($nu);
777 $dead->
setInfo($this->lng->txt(
'cal_ch_deadline_info'));
778 $dead->setShowMinutes(
false);
779 $dead->setShowHours(
true);
780 $dead->setShowDays(
true);
781 $this->form->addItem($dead);
786 $lo->setMaxLength(128);
787 $this->form->addItem($lo);
793 $this->form->addItem($de);
796 $tgt =
new ilTextInputGUI($this->lng->txt(
'cal_ch_target_object'),
'tgt');
797 $tgt->
setInfo($this->lng->txt(
'cal_ch_target_object_info'));
799 $tgt->setMaxLength(128);
800 $this->form->addItem($tgt);
809 global $ilObjDataCache;
813 if($this->form->checkInput())
815 $this->form->setValuesByPost();
819 $booking->setNumberOfBookings($this->form->getInput(
'bo'));
821 $deadline = $this->form->getInput(
'dead');
822 $deadline = $deadline[
'dd'] * 24 + $deadline[
'hh'];
823 $booking->setDeadlineHours($deadline);
826 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroups.php';
829 $booking->setBookingGroup((
int) $this->form->getInput(
'grp'));
832 $tgt = explode(
',',$this->form->getInput(
'tgt'));
834 foreach((array) $tgt as
$ref_id)
840 $obj_id = $ilObjDataCache->lookupObjId($ref_id);
842 $valid_types = array(
'crs',
'grp');
843 if(!$obj_id or !in_array($type, $valid_types))
846 $this->tpl->setContent($this->form->getHTML());
850 $obj_ids[] = $obj_id;
852 $booking->setTargetObjIds($obj_ids);
858 $this->ctrl->redirect($this,
'appointmentList');
862 $this->form->setValuesByPost();
863 $this->tpl->setContent($this->form->getHTML());
874 include_once
'./Services/Calendar/classes/class.ilDateList.php';
876 $start = clone $this->form->getItemByPostVar(
'st')->getDate();
877 for($i = 0; $i < $this->form->getItemByPostVar(
'ap')->getValue(); $i++)
879 $concurrent_dates->add(clone $start);
881 $start->increment(
ilDateTime::MINUTE,$this->form->getItemByPostVar(
'du')->getMinutes());
882 $start->increment(
ilDateTime::HOUR,$this->form->getItemByPostVar(
'du')->getHours());
883 #$start = new ilDateTime(,IL_CAL_UNIX);
886 include_once
'./Services/Calendar/classes/class.ilCalendarUtil.php';
890 include_once
'./Services/Calendar/classes/class.ilCalendarCategoryAssignments.php';
891 include_once
'./Services/Calendar/classes/class.ilCalendarEntry.php';
892 include_once
'./Services/Calendar/classes/class.ilCalendarRecurrenceCalculator.php';
893 include_once
'./Services/Booking/classes/class.ilBookingPeriod.php';
894 foreach($concurrent_dates as $dt)
897 $end->increment(
ilDateTime::MINUTE,$this->form->getItemByPostVar(
'du')->getMinutes());
898 $end->increment(
ilDateTime::HOUR,$this->form->getItemByPostVar(
'du')->getHours());
902 $this->form->getItemByPostVar(
'frequence')->getRecurrence()
907 $limit->increment(ilDAteTime::YEAR,1);
911 foreach($date_list as $app_start)
913 $app_end = clone $app_start;
914 $app_end->increment(
ilDateTime::MINUTE,$this->form->getItemByPostVar(
'du')->getMinutes());
915 $app_end->increment(
ilDateTime::HOUR,$this->form->getItemByPostVar(
'du')->getHours());
919 $entry->setContextId($booking->
getId());
920 $entry->setTitle($this->form->getInput(
'ti'));
921 $entry->setSubtitle(
"#consultationhour#");
922 $entry->setDescription($this->form->getInput(
'de'));
923 $entry->setLocation($this->form->getInput(
'lo'));
924 $entry->setStart($app_start);
925 $entry->setEnd($app_end);
944 $ilCtrl->setParameter($this,
'user_id',
'');
945 $ilTabs->addTab(
'consultation_hours_'.$ilUser->getId(), $this->lng->txt(
'cal_ch_ch'), $this->ctrl->getLinkTarget($this,
'appointmentList'));
949 $ilCtrl->setParameter($this,
'user_id', $user_id);
950 $ilTabs->addTab(
'consultation_hours_'.$user_id, $this->lng->txt(
'cal_ch_ch').
': '.$login, $this->ctrl->getLinkTarget($this,
'appointmentList'));
952 $ilCtrl->setParameter($this,
'user_id',
'');
954 $ilTabs->addTab(
'ch_settings', $this->lng->txt(
'settings'), $this->ctrl->getLinkTarget($this,
'settings'));
956 $ilTabs->activateTab(
'consultation_hours_'.$this->
getUserId());
968 $ilCtrl->setParameter($this,
'user_id',$this->
getUserId());
969 $ilTabs->addSubTab(
'cal_ch_app_list',$this->lng->txt(
'cal_ch_app_list'),$ilCtrl->getLinkTarget($this,
'appointmentList'));
970 $ilTabs->addSubTab(
'cal_ch_app_grp',$this->lng->txt(
'cal_ch_app_grp'),$ilCtrl->getLinkTarget($this,
'groupList'));
971 $ilTabs->addSubTab(
'cal_ch_app_bookings',$this->lng->txt(
'cal_ch_app_bookings'),$ilCtrl->getLinkTarget($this,
'bookingList'));
995 $hidden->setValue(implode(
';',
$_REQUEST[
'apps']));
996 $this->form->addItem($hidden);
998 include_once
'Services/Calendar/classes/class.ilCalendarEntry.php';
1000 $first = array_shift(
$_REQUEST[
'apps']);
1003 $this->form->getItemByPostVar(
'ti')->setValue($entry->getTitle());
1004 $this->form->getItemByPostVar(
'lo')->setValue($entry->getLocation());
1005 $this->form->getItemByPostVar(
'de')->setValue($entry->getDescription());
1007 include_once
'Services/Booking/classes/class.ilBookingEntry.php';
1010 $this->form->getItemByPostVar(
'bo')->setValue(
$booking->getNumberOfBookings());
1013 foreach(
$booking->getTargetObjIds() as $obj_id)
1016 $ref_ids[] = end($refs);
1018 $this->form->getItemByPostVar(
'tgt')->setValue(implode(
',',$ref_ids));
1020 $deadline =
$booking->getDeadlineHours();
1021 $this->form->getItemByPostVar(
'dead')->setDays(floor($deadline/24));
1022 $this->form->getItemByPostVar(
'dead')->setHours($deadline%24);
1026 $this->form->getItemByPostVar(
'grp')->setValue(
$booking->getBookingGroup());
1029 $this->tpl->setContent($this->form->getHTML());
1038 global $ilObjDataCache;
1042 if($this->form->checkInput())
1044 $this->form->setValuesByPost();
1045 $apps = explode(
';',
$_POST[
'apps']);
1047 include_once
'Services/Booking/classes/class.ilBookingEntry.php';
1048 include_once
'Services/Calendar/classes/class.ilCalendarEntry.php';
1053 $first = array_shift($first);
1055 #if($this->form->getInput('bo') < $entry->getNumberOfBookings())
1065 $booking->setNumberOfBookings($this->form->getInput(
'bo'));
1067 $deadline = $this->form->getInput(
'dead');
1068 $deadline = $deadline[
'dd']*24+$deadline[
'hh'];
1069 $booking->setDeadlineHours($deadline);
1071 $tgt = explode(
',',$this->form->getInput(
'tgt'));
1073 foreach((array) $tgt as
$ref_id)
1079 $obj_id = $ilObjDataCache->lookupObjId($ref_id);
1081 $valid_types = array(
'crs',
'grp');
1082 if(!$obj_id or !in_array($type, $valid_types))
1088 $obj_ids[] = $obj_id;
1090 $booking->setTargetObjIds($obj_ids);
1092 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroups.php';
1095 $booking->setBookingGroup($this->form->getInput(
'grp'));
1101 $title = $this->form->getInput(
'ti');
1102 $location = $this->form->getInput(
'lo');
1103 $description = $this->form->getInput(
'de');
1105 foreach($apps as $item_id)
1108 $entry->setContextId(
$booking->getId());
1109 $entry->setTitle($title);
1111 $entry->setDescription($description);
1118 $this->ctrl->redirect($this,
'appointmentList');
1120 $this->tpl->setContent($this->form->getHTML());
1136 include_once(
'./Services/Utilities/classes/class.ilConfirmationGUI.php');
1139 $this->ctrl->saveParameter($this,array(
'seed',
'app_id',
'dt'));
1142 $confirm->setFormAction($this->ctrl->getFormAction($this));
1143 $confirm->setHeaderText($this->lng->txt(
'cal_delete_app_sure'));
1144 $confirm->setCancel($this->lng->txt(
'cancel'),
'cancel');
1146 include_once
'Services/Calendar/classes/class.ilCalendarEntry.php';
1148 $bookings_available = array();
1149 foreach((array)
$_REQUEST[
'apps'] as $entry_id)
1154 include_once
'./Services/Booking/classes/class.ilBookingEntry.php';
1161 if($bookings_available)
1163 ilUtil::sendInfo($this->lng->txt(
'cal_ch_delete_app_booking_info').
'<br />'.implode(
'<br />',$bookings_available));
1166 $confirm->setConfirm($this->lng->txt(
'delete'),
'delete');
1167 $confirm->setCancel($this->lng->txt(
'cancel'),
'appointmentList');
1169 $tpl->setContent($confirm->getHTML());
1175 public function delete()
1177 if(!isset(
$_POST[
'apps']))
1183 include_once
'Services/Calendar/classes/class.ilCalendarEntry.php';
1184 include_once
'Services/Calendar/classes/class.ilCalendarCategoryAssignments.php';
1185 foreach(
$_POST[
'apps'] as $entry_id)
1193 include_once
'./Services/Calendar/classes/ConsultationHours/class.ilConsultationHourUtils.php';
1198 include_once
'./Services/Calendar/classes/class.ilCalendarEntry.php';
1208 $this->ctrl->redirect($this,
'appointmentList');
1218 $ilTabs->clearTargets();
1222 include_once
'Services/User/classes/class.ilPublicUserProfileGUI.php';
1225 $tpl->setContent($ilCtrl->getHTML($profile));
1238 $url = $this->ctrl->getLinkTargetByClass(
'ilCalendarMonthGUI');
1241 else if(isset(
$_GET[
'panel']))
1243 $url = $this->ctrl->getLinkTargetByClass(
'ilCalendarPresentationGUI');
1248 $url = $this->ctrl->getLinkTarget($this,
'appointmentList');
1258 global
$tpl, $ilTabs, $ilHelp;
1260 $ilHelp->setScreenId(
"consultation_hours_settings");
1261 $ilTabs->activateTab(
'ch_settings');
1264 $tpl->setContent($form->getHTML());
1275 include_once
'./Services/Form/classes/class.ilPropertyFormGUI.php';
1278 $form->setFormAction($this->ctrl->getFormAction($this));
1280 $mng =
new ilTextInputGUI($this->lng->txt(
'cal_ch_manager'),
'mng');
1281 $mng->
setInfo($this->lng->txt(
'cal_ch_manager_info'));
1282 $form->addItem($mng);
1286 $form->setTitle($this->lng->txt(
'settings'));
1287 $form->addCommandButton(
'updateSettings', $this->lng->txt(
'save'));
1300 if($form->checkInput())
1302 $mng = $form->getInput(
'mng');
1306 $ilCtrl->redirect($this,
'settings');
1310 $ilTabs->activateTab(
'ch_settings');
1313 $field = $form->getItemByPostVar(
'mng');
1314 $field->setValue($mng);
1315 $tpl->setContent($form->getHTML());