19 declare(strict_types=0);
    62     public function __construct($a_data, 
int $a_id, 
bool $a_call_by_reference = 
true, 
bool $a_prepare_output = 
true)
    69         $this->
help = $DIC->help();
    70         $this->
logger = $DIC->logger()->crs();
    71         $this->navigation_history = $DIC[
'ilNavigationHistory'];
    72         $this->
ctrl->saveParameter($this, [
'ref_id']);
    73         $this->
lng->loadLanguageModule(
'crs');
    74         $this->
lng->loadLanguageModule(
'cert');
    75         $this->
lng->loadLanguageModule(
'obj');
    77         $this->
http = $DIC->http();
    79         $this->news = $DIC->news();
    94         $part->updateNotification(
    96             (bool) $this->
settings->get(
'mail_crs_admin_notification', 
'1')
    98         parent::afterImport($new_object);
   108         if (strtolower($this->std_request->getBaseClass()) === 
"iladministrationgui") {
   109             parent::viewObject();
   113         $this->tabs_gui->setTabActive(
'view_content');
   116         if (strtolower($this->std_request->getBaseClass()) === 
"iladministrationgui") {
   117             parent::viewObject();
   122         if ($this->
ctrl->getNextClass() != 
"ilcolumngui") {
   124                 $this->
user->getId(),
   125                 $this->
object->getId(),
   126                 $this->
object->getRefId(),
   132             $this->
ctrl->redirectByClass(ilMemberAgreementGUI::class);
   139             $stgui->enableDesktop($this->
object->getAboStatus(), $this);
   151             parent::renderObject();
   161         $this->tabs_gui->activateTab(
'view_content');
   162         parent::deleteObject(
$error);
   167         parent::renderObject();
   178         $this->
ctrl->redirectByClass([
   180             ilInfoScreenGUI::class
   190         $this->tabs_gui->setTabActive(
'info_short');
   194         $info->enablePrivateNotes();
   195         $info->enableFeedback();
   197         $info->enableBookingInfo(
true);
   198         if ($this->
access->checkAccess(
"write", 
"", $this->ref_id)) {
   199             $info->enableNewsEditing();
   203             strlen($this->
object->getImportantInformation()) ||
   204             strlen($this->
object->getSyllabus()) ||
   205             strlen((
string) $this->
object->getTargetGroup()) ||
   207             $info->addSection($this->
lng->txt(
'crs_general_informations'));
   210         if (strlen($this->
object->getImportantInformation())) {
   212                 $this->
lng->txt(
'crs_important_info'),
   218         if (strlen($this->
object->getSyllabus())) {
   219             $info->addProperty($this->
lng->txt(
'crs_syllabus'), nl2br(
   223         if (strlen((
string) $this->
object->getTargetGroup())) {
   225                 $this->
lng->txt(
'crs_target_group'),
   233             $tpl = 
new ilTemplate(
'tpl.event_info_file.html', 
true, 
true, 
'components/ILIAS/Course');
   235             foreach ($files as $file) {
   237                 $this->
ctrl->setParameter($this, 
'file_id', $file->getFileId());
   246                 $this->
lng->txt(
'crs_file_download'),
   253         $record_gui->
parse();
   256         $info->addMetaDataSections($this->
object->getId(), 0, $this->
object->getType());
   259         if ($this->
object->hasContactData()) {
   260             $info->addSection($this->
lng->txt(
"crs_contact"));
   262         if (strlen($this->
object->getContactName())) {
   264                 $this->
lng->txt(
"crs_contact_name"),
   265                 $this->
object->getContactName()
   268         if (strlen($this->
object->getContactResponsibility())) {
   270                 $this->
lng->txt(
"crs_contact_responsibility"),
   271                 $this->
object->getContactResponsibility()
   274         if (strlen($this->
object->getContactPhone())) {
   276                 $this->
lng->txt(
"crs_contact_phone"),
   277                 $this->
object->getContactPhone()
   280         if ($this->
object->getContactEmail()) {
   282             $has_mail_access = $this->rbacsystem->checkAccessOfUser(
   283                 $this->
user->getId(),
   287             $emails = explode(
",", $this->
object->getContactEmail());
   289             foreach ($emails as $email) {
   290                 $email = trim($email);
   291                 if (!$has_mail_access) {
   292                     $mailString .= $email . 
"<br />";
   295                 $etpl = 
new ilTemplate(
"tpl.crs_contact_email.html", 
true, 
true, 
'components/ILIAS/Course');
   309                             'ref_id' => $this->
object->getRefId(),
   314                 $etpl->setVariable(
"CONTACT_EMAIL", $email);
   315                 $mailString .= $etpl->get() . 
"<br />";
   317             $info->addProperty($this->
lng->txt(
"crs_contact_email"), $mailString);
   319         if (strlen($this->
object->getContactConsultation())) {
   321                 $this->
lng->txt(
"crs_contact_consultation"),
   322                 nl2br($this->
object->getContactConsultation())
   327         $conts = 
$parts->getContacts();
   329             $info->addSection($this->
lng->txt(
"crs_mem_contacts"));
   330             foreach ($conts as 
$c) {
   332                 $pgui->setBackUrl($this->
ctrl->getLinkTargetByClass(
"ilinfoscreengui"));
   333                 $pgui->setEmbedded(
true);
   334                 $info->addProperty(
"", $pgui->getHTML());
   339         $info->enableAvailability(
false);
   340         $this->
lng->loadLanguageModule(
"rep");
   341         $info->addSection($this->
lng->txt(
"rep_activation_availability"));
   342         $info->showLDAPRoleGroupMappingInfo();
   345         $info->addAccessPeriodProperty();
   348         switch ($this->
object->getSubscriptionLimitationType()) {
   350                 $txt = $this->
lng->txt(
"crs_info_reg_deactivated");
   354                 switch ($this->
object->getSubscriptionType()) {
   356                         $txt = $this->
lng->txt(
"crs_info_reg_confirmation");
   359                         $txt = $this->
lng->txt(
"crs_info_reg_direct");
   362                         $txt = $this->
lng->txt(
"crs_info_reg_password");
   368         $info->addProperty($this->
lng->txt(
"crs_info_reg"), 
$txt);
   370             if ($this->
object->getSubscriptionUnlimitedStatus()) {
   372                     $this->
lng->txt(
"crs_reg_until"),
   373                     $this->
lng->txt(
'crs_unlimited')
   375             } elseif ($this->
object->getSubscriptionStart() < time()) {
   377                     $this->
lng->txt(
"crs_reg_until"),
   378                     $this->
lng->txt(
'crs_to') . 
' ' .
   381             } elseif ($this->
object->getSubscriptionStart() > time()) {
   383                     $this->
lng->txt(
"crs_reg_until"),
   384                     $this->
lng->txt(
'crs_from') . 
' ' .
   388             if ($this->
object->isSubscriptionMembershipLimited()) {
   389                 if ($this->
object->getSubscriptionMinMembers()) {
   391                         $this->
lng->txt(
"mem_min_users"),
   392                         $this->
object->getSubscriptionMinMembers()
   395                 if ($this->
object->getSubscriptionMaxMembers()) {
   398                         $this->
lng->txt(
'mem_free_places'),
   399                         (string) ($reg_info[
'reg_info_free_places'] ?? 
'0')
   405         if ($this->
object->getCancellationEnd()) {
   407                 $this->
lng->txt(
'crs_cancellation_end'),
   414             !$this->
object->getCourseStart()->isNull()
   417                 $this->
lng->txt(
'crs_period'),
   419                     $this->
object->getCourseStart(),
   420                     $this->
object->getCourseEnd()
   431             $this->
lng->loadLanguageModule(
'ps');
   432             $info->addSection($this->
lng->txt(
'crs_user_agreement_info'));
   433             $info->addProperty($this->
lng->txt(
'ps_export_data'), $field_info->exportableFieldsToInfoString());
   436                 $info->addProperty($this->
lng->txt(
'ps_crs_user_fields'), $fields);
   439         $info->enableLearningProgress(
true);
   442         $this->
ctrl->forwardCommand($info);
   448         if ($noti->canCurrentUserEdit()) {
   450             if ($this->
http->wrapper()->query()->has(
'crs_ntf')) {
   451                 $crs_ntf = $this->
http->wrapper()->query()->retrieve(
   457                 $noti->activateUser();
   459                 $noti->deactivateUser();
   462         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"), 
true);
   463         $this->
ctrl->redirect($this, 
"");
   470         $this->tabs_gui->setTabActive(
'settings');
   471         $this->tabs_gui->setSubTabActive(
'crs_info_settings');
   476         $this->tpl->addBlockFile(
'ADM_CONTENT', 
'adm_content', 
'tpl.edit_info.html', 
'components/ILIAS/Course');
   477         $this->tpl->setVariable(
'INFO_TABLE', $a_form->getHTML());
   483         foreach ($files as $file) {
   484             $table_data[
'id'] = $file->getFileId();
   485             $table_data[
'filename'] = $file->getFileName();
   486             $table_data[
'filetype'] = $file->getFileType();
   487             $table_data[
'filesize'] = $file->getFileSize();
   489             $rows[] = $table_data;
   492         $table_gui->setTitle($this->
lng->txt(
"crs_info_download"));
   493         $table_gui->setData($rows);
   494         $table_gui->addCommandButton(
"cancel", $this->
lng->txt(
"cancel"));
   495         $table_gui->addMultiCommand(
"confirmDeleteInfoFiles", $this->
lng->txt(
"delete"));
   496         $table_gui->setSelectAllCheckbox(
"file_id");
   497         $this->tpl->setVariable(
'INFO_FILE_TABLE', $table_gui->getHTML());
   503         if ($this->
http->wrapper()->post()->has(
'file_id')) {
   504             $file_ids = $this->
http->wrapper()->post()->retrieve(
   506                 $this->
refinery->kindlyTo()->listOf(
   511         if (count($file_ids) === 0) {
   512             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'select_one'));
   518         $this->tabs_gui->setTabActive(
'settings');
   519         $this->tabs_gui->setSubTabActive(
'crs_info_settings');
   524         $c_gui->setFormAction($this->
ctrl->getFormAction($this, 
"deleteInfoFiles"));
   525         $c_gui->setHeaderText($this->
lng->txt(
"info_delete_sure"));
   526         $c_gui->setCancel($this->
lng->txt(
"cancel"), 
"editInfo");
   527         $c_gui->setConfirm($this->
lng->txt(
"confirm"), 
"deleteInfoFiles");
   530         foreach ($file_ids as $file_id) {
   532             $c_gui->addItem(
"file_id[]", $file_id, $file->getFileName());
   534         $this->tpl->setContent($c_gui->getHTML());
   540         if ($this->
http->wrapper()->post()->has(
'file_id')) {
   541             $file_ids = $this->
http->wrapper()->post()->retrieve(
   543                 $this->
refinery->kindlyTo()->listOf(
   549         if (count($file_ids) === 0) {
   550             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'select_one'));
   555         foreach ($file_ids as $file_id) {
   557             if ($this->
object->getId() == $file->getCourseId()) {
   561         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'settings_saved'));
   586         $tg = new \ilTextAreaInputGUI($this->
lng->txt(
'crs_target_group'), 
'target_group');
   587         $tg->setValue($this->
object->getTargetGroup() ?? 
"");
   592         $section->setTitle($this->
lng->txt(
'crs_info_download'));
   600         $section->setTitle($this->
lng->txt(
'crs_contact'));
   606         $text->setMaxLength(70);
   610         $text->setValue($this->
object->getContactResponsibility());
   612         $text->setMaxLength(70);
   618         $text->setMaxLength(40);
   623         $text->setInfo($this->
lng->txt(
'crs_contact_email_info'));
   625         $text->setMaxLength(255);
   640         $this->record_gui->parse();
   653             $this->
object->setImportantInformation((
string) 
$form->
getInput(
'important'));
   654             $this->
object->setSyllabus((
string) 
$form->
getInput(
'syllabus'));
   655             $this->
object->setTargetGroup((
string) 
$form->
getInput(
'target_group'));
   656             $this->
object->setContactName((
string) 
$form->
getInput(
'contact_name'));
   657             $this->
object->setContactResponsibility((
string) 
$form->
getInput(
'contact_responsibility'));
   658             $this->
object->setContactPhone((
string) 
$form->
getInput(
'contact_phone'));
   659             $this->
object->setContactEmail((
string) 
$form->
getInput(
'contact_email'));
   660             $this->
object->setContactConsultation((
string) 
$form->
getInput(
'contact_consultation'));
   667             $file_obj->setCourseId($this->
object->getId());
   668             $file_obj->setFileName((
string) $file_name);
   669             $file_obj->setFileSize((
int) $file_info[
'size']);
   670             $file_obj->setFileType((
string) $file_info[
'type']);
   671             $file_obj->setTemporaryName((
string) $file_info[
'tmp_name']);
   672             $file_obj->setErrorCode((
int) $file_info[
'error']);
   676             $file_obj->validate();
   677             $this->
object->validateInfoSettings();
   678             if (strlen($this->error->getMessage())) {
   681             if (!$this->record_gui->importEditFormPostValues()) {
   686                     $this->tpl->setOnScreenMessage(
'failure', $this->error->getMessage());
   692             $this->
object->update();
   694             $this->record_gui->writeEditForm();
   698             $ecs->handleContentUpdate();
   700             $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"crs_settings_saved"));
   703             $this->tpl->setOnScreenMessage(
   705                 $this->
lng->txt(
'settings_saved')
   719             $this->tpl->setOnScreenMessage(
'failure', 
$GLOBALS[
'DIC']->
language()->txt(
'err_check_input'));
   731             $min->setAlert($this->
lng->txt(
'crs_subscription_min_members_err'));
   732             $this->tpl->setOnScreenMessage(
'failure', 
$GLOBALS[
'DIC']->
language()->txt(
'err_check_input'));
   741             $this->tpl->setOnScreenMessage(
   743                 $GLOBALS[
'DIC']->
language()->txt(
'crs_tile_and_objective_view_not_supported')
   752             $this->tpl->setOnScreenMessage(
   754                 $GLOBALS[
'DIC']->
language()->txt(
'crs_tile_and_session_limit_not_supported')
   768         $this->
object->setCoursePeriod(
   769             $crs_period->getStart(),
   770             $crs_period->getEnd()
   775         if ($period->getStart() && $period->getEnd()) {
   776             $this->
object->setActivationStart($period->getStart()->get(
IL_CAL_UNIX));
   777             $this->
object->setActivationEnd($period->getEnd()->get(
IL_CAL_UNIX));
   778             $this->
object->setActivationVisibility((
int) 
$form->
getInput(
'activation_visibility'));
   780             $this->
object->setActivationStart(0);
   781             $this->
object->setActivationEnd(0);
   785         $this->
object->setSubscriptionPassword(
$form->
getInput(
'subscription_password'));
   786         $this->
object->setSubscriptionStart(0);
   787         $this->
object->setSubscriptionEnd(0);
   793         $this->
object->setSubscriptionType(
   798         if ($sub_reg_type !== ilCourseConstants::IL_CRS_SUBSCRIPTION_DEACTIVATED) {
   799             if ($sub_period->getStart() && $sub_period->getEnd()) {
   801                 $this->
object->setSubscriptionStart($sub_period->getStart()->get(
IL_CAL_UNIX));
   802                 $this->
object->setSubscriptionEnd($sub_period->getEnd()->get(
IL_CAL_UNIX));
   808             $this->
object->setSubscriptionLimitationType(ilCourseConstants::IL_CRS_SUBSCRIPTION_DEACTIVATED);
   812         $this->
object->enableRegistrationAccessCode((
bool) 
$form->
getInput(
'reg_code_enabled'));
   813         $this->
object->setRegistrationAccessCode(
$form->
getInput(
'reg_code'));
   819         $this->
object->enableSubscriptionMembershipLimitation((
bool) 
$form->
getInput(
'subscription_membership_limitation'));
   820         $this->
object->setSubscriptionMaxMembers((
int) 
$form->
getInput(
'subscription_max'));
   821         $this->
object->setSubscriptionMinMembers((
int) 
$form->
getInput(
'subscription_min'));
   824                 $this->
object->enableWaitingList(
true);
   825                 $this->
object->setWaitingListAutoFill(
true);
   829                 $this->
object->enableWaitingList(
true);
   830                 $this->
object->setWaitingListAutoFill(
false);
   834                 $this->
object->enableWaitingList(
false);
   835                 $this->
object->setWaitingListAutoFill(
false);
   838         $this->
object->handleAutoFill();
   840         $property_online = $this->
object->getObjectProperties()->getPropertyIsOnline();
   841         $online = 
$form->
getInput(
'activation_online') ? $property_online->withOnline() : $property_online->withOffline();
   842         $this->
object->getObjectProperties()->storePropertyIsOnline($online);
   844         $obj_service->commonSettings()->legacyForm(
$form, $this->
object)->saveTitleIconVisibility();
   845         $obj_service->commonSettings()->legacyForm(
$form, $this->
object)->saveTopActionsVisibility();
   847         $obj_service->commonSettings()->legacyForm(
$form, $this->
object)->saveIcon();
   848         $obj_service->commonSettings()->legacyForm(
$form, $this->
object)->saveTileImage();
   851         $this->
object->setViewMode((
int) 
$form->
getInput(
'view_mode'));
   854             $this->
object->setTimingMode((
int) 
$form->
getInput(
'timing_mode'));
   856         $this->
object->setTimingMode((
int) 
$form->
getInput(
'timing_mode'));
   857         $this->
object->setOrderType((
int) 
$form->
getInput(
'sorting'));
   861             "\n\n\nValue: " . (
int) 
$form->
getInput(
'tutorial_support_block_checkbox') . 
"\n\n\n"   863         $this->
object->setTutorialSupportBlockSettingValue(
   868         $this->
object->setShowMembers((
bool) 
$form->
getInput(
'show_members'));
   871             $this->
object->setShowMembersExport((
bool) 
$form->
getInput(
'show_members_export'));
   873         $this->
object->setMailToMembersType((
int) 
$form->
getInput(
'mail_type'));
   875         $this->
object->enableSessionLimit((
int) 
$form->
getInput(
'sl'));
   878         $this->
object->setNumberOfPreviousSessions(is_numeric($session_sp) ? (
int) $session_sp : -1);
   880         $this->
object->setNumberOfnextSessions(is_numeric($session_sn) ? (
int) $session_sn : -1);
   881         $this->
object->setAutoNotification(
$form->
getInput(
'auto_notification') == 1 ? true : 
false);
   884         $show_lp_sync_confirmation = 
false;
   887         if ($this->
http->wrapper()->post()->has(
'status_dt')) {
   888             $status_dt = $this->
http->wrapper()->post()->retrieve(
   896                 $show_lp_sync_confirmation = 
true;
   898                 $this->
object->setStatusDetermination($status_dt);
   902         $this->
object->update();
   914         if ($show_lp_sync_confirmation) {
   921         if (!$ecs->handleSettingsUpdate(
$form)) {
   923             $this->tpl->setOnScreenMessage(
'failure', 
$GLOBALS[
'DIC']->
language()->txt(
'err_check_input'));
   930             $sub_type === ilCourseConstants::IL_CRS_SUBSCRIPTION_DEACTIVATED &&
   932                 !is_null($sub_period->getStart()) ||
   933                 !is_null($sub_period->getEnd())
   936             $this->tpl->setOnScreenMessage(
   938                 $this->
lng->txt(
'crs_msg_no_self_registration_period_if_self_enrolment_disabled'),
   942             $this->tpl->setOnScreenMessage(
'failure', 
$GLOBALS[
'DIC']->
language()->txt(
'err_check_input'));
   963         if ($this->news->isGloballyActivated()) {
   973         $cgui->setFormAction($this->
ctrl->getFormAction($this, 
"setLPSync"));
   974         $cgui->setHeaderText($this->
lng->txt(
"crs_status_determination_sync"));
   975         $cgui->setCancel($this->
lng->txt(
"cancel"), 
"edit");
   976         $cgui->setConfirm($this->
lng->txt(
"confirm"), 
"setLPSync");
   977         $this->tpl->setContent($cgui->getHTML());
   983         $this->
object->update();
   984         $this->
object->syncMembersStatusWithLP();
   985         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"), 
true);
   986         $this->
ctrl->redirect($this, 
"edit");
   992         $this->tabs_gui->setSubTabActive(
'general');
   997             parent::editObject();
  1024         $this->initFormTitleDescription(
$form);
  1031         $this->
lng->loadLanguageModule(
'mem');
  1032         $cdur->enableToggleFullTime(
  1033             $this->
lng->txt(
'mem_period_without_time'),
  1034             !$this->
object->getCourseStartTimeIndication()
  1036         $cdur->setShowTime(
true);
  1037         $cdur->setInfo($this->
lng->txt(
'crs_period_info'));
  1038         $cdur->setStart($this->
object->getCourseStart());
  1039         $cdur->setEnd($this->
object->getCourseEnd());
  1044         $this->
lng->loadLanguageModule(
'rep');
  1047         $section->setTitle($this->
lng->txt(
'rep_activation_availability'));
  1051         $online->setChecked(!$this->
object->getOfflineStatus());
  1052         $online->setInfo($this->
lng->txt(
'crs_activation_online_info'));
  1056         $dur->setShowTime(
true);
  1062             $this->
lng->txt(
'rep_activation_limited_visibility'),
  1063             'activation_visibility'  1065         $visible->setInfo($this->
lng->txt(
'crs_activation_limited_visibility_info'));
  1066         $visible->setChecked((
bool) $this->
object->getActivationVisibility());
  1067         $dur->addSubItem($visible);
  1070         $section->setTitle($this->
lng->txt(
'crs_reg'));
  1075         $sdur->setShowTime(
true);
  1076         if ($this->
object->getSubscriptionStart()) {
  1079         if ($this->
object->getSubscriptionEnd()) {
  1084         $reg_proc->setValue(
  1086                 ? (
string) $this->
object->getSubscriptionType()
  1091             $this->
lng->txt(
'crs_subscription_options_direct'),
  1094         $reg_proc->addOption($opt);
  1097             $this->
lng->txt(
'crs_subscription_options_password'),
  1101         $pass = 
new ilTextInputGUI($this->
lng->txt(
"password"), 
'subscription_password');
  1102         $pass->setRequired(
true);
  1103         $pass->setInfo($this->
lng->txt(
'crs_reg_password_info'));
  1104         $pass->setSubmitFormOnEnter(
true);
  1106         $pass->setMaxLength(32);
  1107         $pass->setValue($this->
object->getSubscriptionPassword());
  1109         $opt->addSubItem($pass);
  1110         $reg_proc->addOption($opt);
  1113             $this->
lng->txt(
'crs_subscription_options_confirmation'),
  1116         $opt->setInfo($this->
lng->txt(
'crs_registration_confirmation_info'));
  1117         $reg_proc->addOption($opt);
  1120             $this->
lng->txt(
'crs_reg_selfreg'),
  1123         $opt_self_enrollment_enabled->addSubItem($reg_proc);
  1124         $opt_self_enrollment_enabled->addSubItem($sdur);
  1126             $this->
lng->txt(
'crs_reg_no_selfreg'),
  1129         $opt_self_enrollment_disabled->setInfo($this->
lng->txt(
'crs_registration_deactivated'));
  1131             $this->
lng->txt(
'crs_registration_type'),
  1132             'subscription_limitation_type'  1134         $reg_proc_subscription_reg_type->
setValue(
  1139         $reg_proc_subscription_reg_type->addOption($opt_self_enrollment_enabled);
  1140         $reg_proc_subscription_reg_type->addOption($opt_self_enrollment_disabled);
  1145         $reg_code->setChecked($this->
object->isRegistrationAccessCodeEnabled());
  1146         $reg_code->setValue(
'1');
  1147         $reg_code->setInfo($this->
lng->txt(
'crs_reg_code_enabled_info'));
  1150         if (!$this->
object->getRegistrationAccessCode()) {
  1154         $reg_link->setValue($this->
object->getRegistrationAccessCode());
  1158         $val = ilLink::_getLink(
  1159             $this->
object->getRefId(),
  1160             $this->
object->getType(),
  1162             'rcode' . $this->
object->getRegistrationAccessCode()
  1164         $link->setHtml(
'<span class="small">' . $val . 
'</span>');
  1165         $reg_code->addSubItem($link);
  1171         $cancel->
setInfo($this->
lng->txt(
'crs_cancellation_end_info'));
  1172         $cancel_end = $this->
object->getCancellationEnd();
  1174             $cancel->setDate($cancel_end);
  1180             $this->
lng->txt(
'crs_subscription_max_members_short'),
  1181             'subscription_membership_limitation'  1183         $lim->setInfo($this->
lng->txt(
'crs_subscription_max_members_short_info'));
  1184         $lim->setValue((
string) 1);
  1185         $lim->setChecked($this->
object->isSubscriptionMembershipLimited());
  1188         $min->setSubmitFormOnEnter(
true);
  1190         $min->setMaxLength(4);
  1191         $min->setValue($this->
object->getSubscriptionMinMembers() ?: 
'');
  1192         $min->setTitle($this->
lng->txt(
'crs_subscription_min_members'));
  1193         $min->setInfo($this->
lng->txt(
'crs_subscription_min_members_info'));
  1194         $lim->addSubItem($min);
  1197         $max->setSubmitFormOnEnter(
true);
  1199         $max->setMaxLength(4);
  1200         $max->setValue($this->
object->getSubscriptionMaxMembers() ?: 
'');
  1201         $max->setTitle($this->
lng->txt(
'crs_subscription_max_members'));
  1202         $max->setInfo($this->
lng->txt(
'crs_reg_max_info'));
  1204         $lim->addSubItem($max);
  1208         $wait->addOption($option);
  1210         $option = 
new ilRadioOption($this->
lng->txt(
'crs_waiting_list_no_autofill'), 
'1');
  1211         $option->
setInfo($this->
lng->txt(
'crs_wait_info'));
  1212         $wait->addOption($option);
  1214         $option = 
new ilRadioOption($this->
lng->txt(
'crs_waiting_list_autofill'), 
'2');
  1215         $option->
setInfo($this->
lng->txt(
'crs_waiting_list_autofill_info'));
  1216         $wait->addOption($option);
  1218         if ($this->
object->hasWaitingListAutoFill()) {
  1219             $wait->setValue(
'2');
  1220         } elseif ($this->
object->enabledWaitingList()) {
  1221             $wait->setValue(
'1');
  1223             $wait->setValue(
'0');
  1225         $lim->addSubItem($wait);
  1228         $pres->setTitle($this->
lng->txt(
'crs_view_mode'));
  1233         $form = $obj_service->commonSettings()->legacyForm(
$form, $this->
object)->addTitleIconVisibility();
  1236         $form = $obj_service->commonSettings()->legacyForm(
$form, $this->
object)->addTopActionsVisibility();
  1239         if ($setting->get(
"rep_breadcr_crs") && $setting->get(
"rep_breadcr_crs_overwrite")) {
  1240             $add = $setting->get(
"rep_breadcr_crs_default")
  1241                 ? 
" (" . $this->
lng->txt(
"crs_breadcrumb_crs_only") . 
")"  1242                 : 
" (" . $this->
lng->txt(
"crs_breadcrumb_full_path") . 
")";
  1244                 self::BREADCRUMB_DEFAULT => $this->
lng->txt(
"crs_sys_default") . $add,
  1245                 self::BREADCRUMB_CRS_ONLY => $this->
lng->txt(
"crs_breadcrumb_crs_only"),
  1246                 self::BREADCRUMB_FULL_PATH => $this->
lng->txt(
"crs_breadcrumb_full_path")
  1250             $si->setOptions($options);
  1255         $form = $obj_service->commonSettings()->legacyForm(
$form, $this->
object)->addIcon();
  1258         $form = $obj_service->commonSettings()->legacyForm(
$form, $this->
object)->addTileImage();
  1268             $this->
lng->txt(
'cntr_view_sessions'),
  1271         $opts->setInfo($this->
lng->txt(
'cntr_view_info_sessions'));
  1272         $view_type->addOption($opts);
  1276         $sess->setValue(
'1');
  1277         $sess->setChecked($this->
object->isSessionLimitEnabled());
  1278         $sess->setInfo($this->
lng->txt(
'sess_limit_info'));
  1281         #$prev->setSubmitFormOnEnter(true);  1282         $prev->setMinValue(0);
  1284             $this->
object->getNumberOfPreviousSessions() == -1 ?
  1286                 $this->
object->getNumberOfPreviousSessions()
  1289         $prev->setMaxLength(3);
  1290         $sess->addSubItem($prev);
  1293         #$next->setSubmitFormOnEnter(true);  1294         $next->setMinValue(0);
  1296             $this->
object->getNumberOfNextSessions() == -1 ?
  1298                 $this->
object->getNumberOfnextSessions()
  1301         $next->setMaxLength(3);
  1302         $sess->addSubItem($next);
  1304         $opts->addSubItem($sess);
  1307         $optsi->setInfo($this->
lng->txt(
'cntr_view_info_simple'));
  1308         $view_type->addOption($optsi);
  1311             $this->
lng->txt(
'cntr_view_by_type'),
  1314         $optbt->setInfo($this->
lng->txt(
'cntr_view_info_by_type'));
  1315         $view_type->addOption($optbt);
  1318             $this->
lng->txt(
'crs_view_objective'),
  1321         $opto->setInfo($this->
lng->txt(
'crs_view_info_objective'));
  1322         $view_type->addOption($opto);
  1325         $optt->setInfo($this->
lng->txt(
'crs_view_info_timing'));
  1332             $this->
lng->txt(
'crs_view_timing_absolute'),
  1335         $absolute->setInfo($this->
lng->txt(
'crs_view_info_timing_absolute'));
  1336         $timing->addOption($absolute);
  1339             $this->
lng->txt(
'crs_view_timing_relative'),
  1342         $relative->setInfo($this->
lng->txt(
'crs_view_info_timing_relative'));
  1343         $timing->addOption($relative);
  1345         $optt->addSubItem($timing);
  1348         $view_type->addOption($optt);
  1363             $this->
lng->txt(
'tutorial_support_block_setting_title'),
  1364             'tutorial_support_block_checkbox'  1367         $tutorial_support_panel_checkbox->setChecked((
bool) $this->
object->getTutorialSupportBlockSettingValue());
  1368         $tutorial_support_panel_checkbox->setInfo($this->
lng->txt(
'tutorial_support_block_byline'));
  1374             if ($olp->getCurrentMode()) {
  1376                 $lp_status->setTitle($this->
lng->txt(
'crs_course_status_of_users'));
  1381                 $lp_status_options->
setValue($this->
object->getStatusDetermination());
  1384                     $this->
lng->txt(
'crs_status_determination_lp'),
  1386                     $this->
lng->txt(
'crs_status_determination_lp_info')
  1388                 $lp_status_options->addOption($lp_option);
  1390                     $this->
lng->txt(
'crs_status_determination_manual'),
  1400         $feat->setTitle($this->
lng->txt(
'obj_features'));
  1410         $mem->setChecked($this->
object->getShowMembers());
  1411         $mem->setInfo($this->
lng->txt(
'crs_show_members_info'));
  1416             $part_list = 
new ilCheckboxInputGUI($this->
lng->txt(
'crs_show_member_export'), 
'show_members_export');
  1417             $part_list->setChecked($this->
object->getShowMembersExport());
  1418             $part_list->setInfo($this->
lng->txt(
'crs_show_member_export_info'));
  1419             $mem->addSubItem($part_list);
  1427             $this->
lng->txt(
'crs_mail_tutors_only'),
  1429             $this->
lng->txt(
'crs_mail_tutors_only_info')
  1431         $mail_type->addOption($mail_tutors);
  1434             $this->
lng->txt(
'crs_mail_all'),
  1436             $this->
lng->txt(
'crs_mail_all_info')
  1438         $mail_type->addOption($mail_all);
  1448         $not->setValue(
'1');
  1449         $not->setInfo($this->
lng->txt(
'crs_auto_notification_info'));
  1450         $not->setChecked($this->
object->getAutoNotification());
  1454         $desk->setChecked($this->
object->getAboStatus());
  1455         $desk->setInfo($this->
lng->txt(
'crs_add_remove_from_desktop_info'));
  1460         $ecs->addSettingsToForm(
$form, 
'crs');
  1467         if ($this->
http->wrapper()->query()->has(
'file_id')) {
  1468             $file_id = $this->
http->wrapper()->query()->retrieve(
  1481                 $this->tabs_gui->addSubTabTarget(
  1483                     $this->
ctrl->getLinkTarget($this, 
'edit'),
  1488                 $this->tabs_gui->addSubTabTarget(
  1489                     "crs_info_settings",
  1490                     $this->
ctrl->getLinkTarget($this, 
'editInfo'),
  1495                 $this->tabs_gui->addSubTabTarget(
  1497                     $this->
ctrl->getLinkTargetByClass(
'ilConditionHandlerGUI', 
'listConditions'),
  1499                     "ilConditionHandlerGUI"  1502                 $this->tabs_gui->addSubTabTarget(
  1503                     "crs_start_objects",
  1504                     $this->
ctrl->getLinkTargetByClass(
'ilContainerStartObjectsGUI', 
'listStructure'),
  1509                 $this->tabs_gui->addSubTabTarget(
  1511                     $this->
ctrl->getLinkTargetByClass(
'ilobjcoursegroupinggui', 
'listGroupings'),
  1516                 if ($lti_settings->hasSettingsAccess()) {
  1517                     $this->tabs_gui->addSubTabTarget(
  1519                         $this->
ctrl->getLinkTargetByClass(ilLTIProviderObjectSettingGUI::class)
  1525                     $this->tabs_gui->addSubTabTarget(
  1527                         $this->
ctrl->getLinkTarget($this, 
'editMapSettings'),
  1535                     $this->tabs_gui->addSubTabTarget(
  1536                         'crs_custom_user_fields',
  1537                         $this->
ctrl->getLinkTargetByClass(
'ilobjectcustomuserfieldsgui'),
  1539                         'ilobjectcustomuserfieldsgui'  1545                 if (
true === $validator->validate()) {
  1546                     $this->tabs_gui->addSubTabTarget(
  1548                         $this->
ctrl->getLinkTargetByClass(
"ilcertificategui", 
"certificateeditor"),
  1554                 if ($this->
object->getUseNews()) {
  1555                     $this->tabs_gui->addSubTab(
  1556                         'obj_news_settings',
  1557                         $this->
lng->txt(
"cont_news_settings"),
  1558                         $this->
ctrl->getLinkTargetByClass(
'ilcontainernewssettingsgui')
  1561                 if ($this->
object->getShowMembersExport()) {
  1562                     $this->tabs_gui->addSubTab(
  1564                         $this->
lng->txt(
'crs_show_member_export_settings'),
  1565                         $this->
ctrl->getLinkTargetByClass(
'ilmemberexportsettingsgui', 
'')
  1568                 $this->tabs_gui->addSubTabTarget(
  1569                     "obj_multilinguality",
  1570                     $this->
ctrl->getLinkTargetByClass(
"ilobjecttranslationgui", 
""),
  1572                     "ilobjecttranslationgui"  1595         foreach ($disabled_object_types as 
$type) {
  1596             unset($createble_object_types[$type]);
  1611         $new_object->getMemberObject()->updateNotification(
  1612             $this->
user->getId(),
  1613             $this->
settings->get(
'mail_crs_admin_notification', 
'1')
  1615         $new_object->getMemberObject()->updateContact($this->
user->getId(), 1);
  1622         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"crs_added"), 
true);
  1623         $this->
ctrl->setParameter($this, 
"ref_id", $new_object->
getRefId());
  1626             $this->
ctrl->getLinkTarget($this, 
"edit", 
"")
  1630     public function readMemberData(array $ids, array $selected_columns = null, 
bool $skip_names = 
false): array
  1637         if ($show_tracking) {
  1639             $show_tracking = $olp->isActive();
  1642         if ($show_tracking) {
  1649         if ($privacy->enabledCourseAccessTimes()) {
  1653         $do_prtf = (is_array($selected_columns) &&
  1654             in_array(
'prtf', $selected_columns) &&
  1659                 $this->
ctrl->getLinkTarget($this, 
"members")
  1664         foreach ($ids as $usr_id) {
  1674                 $tmp_data[
'firstname'] = $name[
'firstname'];
  1675                 $tmp_data[
'lastname'] = $name[
'lastname'];
  1676                 $tmp_data[
'login'] = $name[
'login'];
  1678             $tmp_data[
'passed'] = $this->
object->getMembersObject()->hasPassed($usr_id) ? 1 : 0;
  1680                 $tmp_data[
'passed_info'] = $this->
object->getMembersObject()->getPassedInfo($usr_id);
  1682             $tmp_data[
'notification'] = $this->
object->getMembersObject()->isNotificationEnabled($usr_id) ? 1 : 0;
  1683             $tmp_data[
'blocked'] = $this->
object->getMembersObject()->isBlocked($usr_id) ? 1 : 0;
  1684             $tmp_data[
'contact'] = $this->
object->getMembersObject()->isContact($usr_id) ? 1 : 0;
  1686             $tmp_data[
'usr_id'] = $usr_id;
  1688             if ($show_tracking) {
  1689                 if (in_array($usr_id, $completed)) {
  1691                 } elseif (in_array($usr_id, $in_progress)) {
  1693                 } elseif (in_array($usr_id, $failed)) {
  1700             if ($privacy->enabledCourseAccessTimes()) {
  1701                 if (isset($progress[$usr_id][
'ts']) && $progress[$usr_id][
'ts']) {
  1702                     $tmp_data[
'access_ut'] = $progress[$usr_id][
'ts'];
  1704                         $progress[$usr_id][
'ts'],
  1708                     $tmp_data[
'access_ut'] = 0;
  1709                     $tmp_data[
'access_time'] = $this->
lng->txt(
'no_date');
  1714                 $tmp_data[
'prtf'] = $all_prtf[$usr_id] ?? null;
  1717             $members[$usr_id] = $tmp_data;
  1734                 if ($marks->getCompleted() !== $a_has_passed) {
  1750             $this->
object->isSubscriptionMembershipLimited() &&
  1751             $this->
object->getSubscriptionMaxMembers() &&
  1752             $this->
object->getSubscriptionMaxMembers() <= $this->
object->getMembersObject()->getCountMembers()
  1754             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"crs_max_members_reached"));
  1758         if ($number = $this->
object->getMembersObject()->autoFillSubscribers()) {
  1759             $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"crs_number_users_added") . 
" " . $number);
  1761             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"crs_no_users_added"));
  1771         if ($this->
object->getMembersObject()->isLastAdmin($this->
user->getId())) {
  1772             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'crs_min_one_admin'));
  1777         $this->tabs_gui->setTabActive(
'crs_unsubscribe');
  1779         $cgui->setHeaderText($this->
lng->txt(
'crs_unsubscribe_sure'));
  1780         $cgui->setFormAction($this->
ctrl->getFormAction($this));
  1781         $cgui->setCancel($this->
lng->txt(
"cancel"), 
"cancel");
  1782         $cgui->setConfirm($this->
lng->txt(
"crs_unsubscribe"), 
"performUnsubscribe");
  1783         $this->tpl->setContent($cgui->getHTML());
  1794         $this->
getObject()->getMembersObject()->delete($this->
user->getId());
  1795         $this->
getObject()->getMembersObject()->sendUnsubscribeNotificationToAdmins($this->
user->getId());
  1796         $this->
getObject()->getMembersObject()->sendNotification(
  1798             $this->
user->getId()
  1800         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'crs_unsubscribed_from_crs'), 
true);
  1802         $this->
ctrl->setParameterByClass(
"ilrepositorygui", 
"ref_id", $this->tree->getParentId($this->ref_id));
  1803         $this->
ctrl->redirectByClass(
"ilrepositorygui", 
"");
  1809         if ($this->
access->checkAccess(
'visible', 
'', $this->ref_id)) {
  1810             $this->
tabs->addTarget(
  1812                 $this->
ctrl->getLinkTargetByClass(
  1813                     array(
"ilobjcoursegui", 
"ilinfoscreengui"),
  1820             $this->
access->checkAccess(
'leave', 
'', $this->object->getRefId()) &&
  1821             $this->
object->getMemberObject()->isMember()
  1823             $this->
tabs->addTarget(
  1825                 $this->
ctrl->getLinkTarget($this, 
"unsubscribe"),
  1834         $this->tabs_gui->addTab(
  1836             $this->
lng->txt(
"content"),
  1837             $this->
ctrl->getLinkTarget($this, 
"view")
  1843         $this->
help->setScreenIdComponent(
"crs");
  1844         $this->
ctrl->setParameter($this, 
"ref_id", $this->ref_id);
  1846         if ($this->
access->checkAccess(
'read', 
'', $this->ref_id)) {
  1848             $this->tabs_gui->activateTab(
'view_content');
  1849             if ($this->
object->isNewsTimelineEffective()) {
  1850                 if (!$this->
object->isNewsTimelineLandingPageEffective()) {
  1853                 $this->tabs_gui->addTab(
  1855                     $this->
lng->txt(
"cont_news_timeline_tab"),
  1856                     $this->
ctrl->getLinkTargetByClass(
"ilnewstimelinegui", 
"show")
  1858                 if ($this->
object->isNewsTimelineLandingPageEffective()) {
  1868             $this->
tabs->addTab(
  1870                 $this->
lng->txt(
'timings_timings'),
  1871                 $this->
ctrl->getLinkTargetByClass(
'ilcoursecontentgui', 
'manageTimings')
  1875             $this->
tabs->addTab(
  1877                 $this->
lng->txt(
'timings_timings'),
  1878                 $this->
ctrl->getLinkTargetByClass(
'ilcoursecontentgui', 
'managePersonalTimings')
  1883         if ($this->
access->checkAccess(
'write', 
'', $this->ref_id)) {
  1885                 $this->tabs_gui->addTarget(
  1887                     $this->
ctrl->getLinkTargetByClass(
'illoeditorgui', 
''),
  1894             $this->
access->checkAccess(
'visible', 
'', $this->ref_id) ||
  1895             $this->
access->checkAccess(
'join', 
'', $this->ref_id) ||
  1896             $this->
access->checkAccess(
'read', 
'', $this->ref_id)
  1899                 strcasecmp($this->
ctrl->getCmdClass(), ilInfoScreenGUI::class) === 0 ||
  1900                 strcasecmp($this->
ctrl->getCmdClass(), ilNoteGUI::class) === 0;
  1901             $this->tabs_gui->addTarget(
  1903                 $this->
ctrl->getLinkTargetByClass(
  1904                     array(
"ilobjcoursegui", 
"ilinfoscreengui"),
  1913         if ($this->
access->checkAccess(
'write', 
'', $this->ref_id)) {
  1915                 strcasecmp($this->
ctrl->getCmdClass(), ilConditionHandlerGUI::class) &&
  1916                 !$this->
http->wrapper()->query()->has(
'item_id');
  1917             $this->tabs_gui->addTarget(
  1919                 $this->
ctrl->getLinkTarget($this, 
"edit"),
  1920                 array(
"edit", 
"editMapSettings", 
"editCourseIcons", 
"listStructure"),
  1931         $membership_gui->addMemberTab($this->tabs_gui, $is_participant);
  1934         if ($this->
access->checkAccess(
'write', 
'', $this->ref_id)) {
  1936                 $this->tabs_gui->addTarget(
  1937                     "obj_tool_setting_badges",
  1938                     $this->
ctrl->getLinkTargetByClass(
"ilbadgemanagementgui", 
""),
  1940                     "ilbadgemanagementgui"  1947             $this->tabs_gui->addTarget(
  1948                 "obj_tool_setting_skills",
  1949                 $this->
ctrl->getLinkTargetByClass(array(
"ilcontainerskillgui", 
"ilcontskillpresentationgui"), 
""),
  1951                 array(
"ilcontainerskillgui", 
"ilcontskillpresentationgui", 
"ilcontskilladmingui")
  1961             $this->tabs_gui->addTarget(
  1962                 "obj_tool_setting_booking",
  1963                 $this->
ctrl->getLinkTargetByClass(array(
"ilbookinggatewaygui"), 
"")
  1969             $this->tabs_gui->addTarget(
  1970                 'learning_progress',
  1971                 $this->
ctrl->getLinkTargetByClass(array(
'ilobjcoursegui', 
'illearningprogressgui'), 
''),
  1973                 array(
'illplistofobjectsgui', 
'illplistofsettingsgui', 
'illearningprogressgui', 
'illplistofprogressgui')
  1978         if ($this->
access->checkAccess(
'write', 
'', $this->ref_id)) {
  1980             $mdtab = $mdgui->getTab();
  1982                 $this->tabs_gui->addTarget(
  1986                     "ilobjectmetadatagui"  1991         if ($this->
access->checkAccess(
'write', 
'', $this->object->getRefId())) {
  1992             $this->tabs_gui->addTarget(
  1994                 $this->
ctrl->getLinkTargetByClass(
'ilexportgui', 
''),
  2000         if ($this->
access->checkAccess(
'edit_permission', 
'', $this->ref_id)) {
  2001             $this->tabs_gui->addTarget(
  2003                 $this->
ctrl->getLinkTargetByClass(array(get_class($this), 
'ilpermissiongui'), 
"perm"),
  2004                 array(
"perm", 
"info", 
"owner"),
  2010         if ($this->
access->checkAccess(
'join', 
'', $this->ref_id) && !$this->
object->getMemberObject()->isAssigned()) {
  2012                 $this->tabs_gui->addTab(
  2014                     $this->
lng->txt(
'membership_leave'),
  2015                     $this->
ctrl->getLinkTargetByClass(
'ilcourseregistrationgui', 
'show', 
'')
  2018                 $this->tabs_gui->addTarget(
  2020                     $this->
ctrl->getLinkTargetByClass(
'ilcourseregistrationgui', 
"show"),
  2026         if ($this->
access->checkAccess(
'leave', 
'', $this->object->getRefId()) && $this->
object->getMemberObject()->isMember()) {
  2027             $this->tabs_gui->addTarget(
  2029                 $this->
ctrl->getLinkTarget($this, 
"unsubscribe"),
  2038         $next_class = $this->
ctrl->getNextClass($this);
  2039         $cmd = $this->
ctrl->getCmd();
  2045             $this->
access->checkAccess(
'read', 
'', $this->ref_id)) {
  2046             $this->navigation_history->addItem(
  2048                 ilLink::_getLink($this->ref_id, 
"crs"),
  2052         $header_action = 
true;
  2053         switch ($next_class) {
  2054             case strtolower(ilRepositoryTrashGUI::class):
  2055                 $ru = new \ilRepositoryTrashGUI($this);
  2056                 $this->
ctrl->setReturn($this, 
'trash');
  2057                 $this->
ctrl->forwardCommand($ru);
  2060             case 'illtiproviderobjectsettinggui':
  2063                 $this->tabs_gui->activateTab(
'settings');
  2064                 $this->tabs_gui->activateSubTab(
'lti_provider');
  2067                 $lti_gui->offerLTIRolesForSelection(
false);
  2068                 $this->
ctrl->forwardCommand($lti_gui);
  2071             case 'ilcoursemembershipgui':
  2073                 $this->tabs_gui->activateTab(
'members');
  2076                 $this->
ctrl->forwardCommand($mem_gui);
  2079             case "ilinfoscreengui":
  2083             case 'ilobjectmetadatagui':
  2084                 if (!$this->
access->checkAccess(
'write', 
'', $this->object->getRefId())) {
  2085                     $this->error->raiseError($this->
lng->txt(
'permission_denied'), $this->error->WARNING);
  2087                 $this->tabs_gui->setTabActive(
'meta_data');
  2089                 $this->
ctrl->forwardCommand($md_gui);
  2092             case 'ilcourseregistrationgui':
  2093                 $this->
ctrl->setReturn($this, 
'');
  2094                 $this->tabs_gui->setTabActive(
'join');
  2096                 $this->
ctrl->forwardCommand($registration);
  2099             case 'ilobjectcustomuserfieldsgui':
  2102                 $this->tabs_gui->activateTab(
'settings');
  2103                 $this->tabs_gui->activateSubTab(
'crs_custom_user_fields');
  2104                 $this->
ctrl->forwardCommand($cdf_gui);
  2107             case "ilcourseobjectivesgui":
  2109                 $this->
ctrl->setReturn($this, 
"");
  2111                 $this->
ctrl->forwardCommand($reg_gui);
  2114             case 'ilobjcoursegroupinggui':
  2116                 $this->
ctrl->setReturn($this, 
'edit');
  2118                 $this->tabs_gui->activateTab(
'settings');
  2119                 $this->tabs_gui->activateSubTab(
'groupings');
  2122                 if ($this->
http->wrapper()->query()->has(
'obj_id')) {
  2123                     $grouping_id = $this->
http->wrapper()->query()->retrieve(
  2129                 $this->
ctrl->forwardCommand($crs_grp_gui);
  2132             case "ilpropertyformgui":
  2139                 $this->
ctrl->setReturn($this, 
"");
  2140                 $this->tabs_gui->setTabActive(
'none');
  2149             case "ilconditionhandlergui":
  2152                 $this->tabs_gui->activateTab(
'settings');
  2153                 $this->tabs_gui->activateSubTab(
'preconditions');
  2155                 $this->
ctrl->forwardCommand($new_gui);
  2158             case "illearningprogressgui":
  2161                 if ($this->
http->wrapper()->query()->has(
'user_id')) {
  2169                     $this->
object->getRefId(),
  2172                 $this->
ctrl->forwardCommand($new_gui);
  2173                 $this->tabs_gui->setTabActive(
'learning_progress');
  2176             case 'ilpermissiongui':
  2177                 $this->tabs_gui->setTabActive(
'perm_settings');
  2179                 $this->
ctrl->forwardCommand($perm_gui);
  2182             case 'ilcalendarpresentationgui':
  2184                 $ret = $this->
ctrl->forwardCommand($cal);
  2185                 $header_action = 
false;
  2188             case 'ilcoursecontentgui':
  2189                 $this->
ctrl->setReturn($this, 
'members');
  2191                 $this->
ctrl->forwardCommand($course_content_obj);
  2194             case 'ilpublicuserprofilegui':
  2195                 $this->tpl->enableDragDropFileUpload(null);
  2197                 $this->tabs_gui->setTabActive(
'members');
  2200                 if ($this->
http->wrapper()->query()->has(
'user_id')) {
  2207                 $profile_gui->setBackUrl($this->
ctrl->getLinkTargetByClass([
"ilCourseMembershipGUI",
  2210                 $this->tabs_gui->setSubTabActive(
'crs_members_gallery');
  2211                 $html = $this->
ctrl->forwardCommand($profile_gui);
  2212                 $this->tpl->setVariable(
"ADM_CONTENT", 
$html);
  2215             case 'ilmemberagreementgui':
  2216                 $this->tabs_gui->clearTargets();
  2218                 $this->
ctrl->setReturn($this, 
'');
  2220                 $this->
ctrl->forwardCommand($agreement);
  2224             case "ilcontainerpagegui":
  2227                     $this->tpl->setContent($ret);
  2229                 $header_action = 
false;
  2232             case "ilcontainerstartobjectspagegui":
  2235                 $ret = $this->
ctrl->forwardCommand($pgui);
  2237                     $this->tpl->setContent($ret);
  2241             case 'ilobjectcopygui':
  2243                 $cp->setType(
'crs');
  2244                 $this->
ctrl->forwardCommand($cp);
  2247             case "ilobjectcontentstylesettingsgui":
  2254                 $settings_gui = $DIC->contentStyle()->gui()
  2255                     ->objectSettingsGUIForRefId(
  2257                         $this->
object->getRefId()
  2259                 $this->
ctrl->forwardCommand($settings_gui);
  2263                 $this->tabs_gui->setTabActive(
'export');
  2265                 $exp->addFormat(
'xml');
  2266                 $this->
ctrl->forwardCommand($exp);
  2269             case "ilcommonactiondispatchergui":
  2274             case 'ildidactictemplategui':
  2275                 $this->
ctrl->setReturn($this, 
'edit');
  2277                 $this->
ctrl->forwardCommand($did);
  2280             case "ilcertificategui":
  2281                 $this->tabs_gui->activateTab(
"settings");
  2283                 $this->tabs_gui->activateSubTab(
'certificate');
  2286                 $output_gui = $guiFactory->create($this->
object);
  2287                 $this->
ctrl->forwardCommand($output_gui);
  2290             case 'illoeditorgui':
  2291                 #$this->tabs_gui->clearTargets();  2292                 #$this->tabs_gui->setBackTarget($this->lng->txt('back'),$this->ctrl->getLinkTarget($this,''));  2293                 $this->tabs_gui->activateTab(
'crs_objectives');
  2296                 $this->
ctrl->forwardCommand($editor);
  2297                 if (strtolower($this->
ctrl->getCmdClass()) === 
"illopagegui") {
  2298                     $header_action = 
false;
  2302             case 'ilcontainerstartobjectsgui':
  2303                 $this->
ctrl->setReturn($this, 
'edit');
  2304                 $this->tabs_gui->clearTargets();
  2305                 $this->tabs_gui->setBackTarget(
  2306                     $this->
lng->txt(
"back_to_crs_content"),
  2307                     $this->
ctrl->getLinkTarget($this, 
"edit")
  2309                 $this->tabs_gui->addTab(
  2311                     $this->
lng->txt(
"crs_start_objects"),
  2312                     $this->
ctrl->getLinkTargetByClass(
"ilcontainerstartobjectsgui", 
"listStructure")
  2314                 $this->tabs_gui->activateTab(
"start");
  2315                 if (strtolower($this->
ctrl->getCmdClass()) ==
  2316                     "ilcontainerstartobjectspagegui") {
  2317                     $header_action = 
false;
  2321                 $ilHelp = $DIC[
'ilHelp'];
  2322                 $this->
help->setScreenIdComponent(
"crs");
  2324                 $this->
ctrl->forwardCommand($stgui);
  2327             case 'illomembertestresultgui':
  2328                 $GLOBALS[
'DIC'][
'ilCtrl']->setReturn($this, 
'members');
  2329                 $GLOBALS[
'DIC'][
'ilTabs']->clearTargets();
  2330                 $GLOBALS[
'DIC'][
'ilTabs']->setBackTarget(
  2331                     $GLOBALS[
'DIC'][
'lng']->txt(
'back'),
  2332                     $GLOBALS[
'DIC'][
'ilCtrl']->getLinkTarget($this, 
'members')
  2336                 if ($this->
http->wrapper()->query()->has(
'uid')) {
  2337                     $uid = $this->
http->wrapper()->query()->retrieve(
  2343                 $this->
ctrl->forwardCommand($result_view);
  2346             case 'ilmailmembersearchgui':
  2351                         $this->
access->checkAccess(
'manage_members', 
"", $this->
object->getRefId())) &&
  2352                     $this->rbac_system->checkAccess(
'internal_mail', $mail->getMailObjectReferenceId())) {
  2353                     $this->error->raiseError($this->
lng->txt(
"msg_no_perm_read"), $this->error->MESSAGE);
  2356                 $this->tabs_gui->setTabActive(
'members');
  2360                     $this->
object->getRefId(),
  2366                 $this->
ctrl->forwardCommand($mail_search);
  2369             case 'ilbadgemanagementgui':
  2370                 $this->tabs_gui->setTabActive(
'obj_tool_setting_badges');
  2372                 $this->
ctrl->forwardCommand($bgui);
  2375             case "ilcontainernewssettingsgui":
  2377                 $this->tabs_gui->activateTab(
'settings');
  2378                 $this->tabs_gui->activateSubTab(
'obj_news_settings');
  2380                 $news_set_gui->setTimeline(
true);
  2381                 $news_set_gui->setCronNotifications(
true);
  2382                 $news_set_gui->setHideByDate(
true);
  2383                 $this->
ctrl->forwardCommand($news_set_gui);
  2386             case "ilnewstimelinegui":
  2388                     $this->
ctrl->redirectByClass(self::class, 
"view");
  2390                 $this->tabs_gui->setTabActive(
'news_timeline');
  2392                     $this->
object->getRefId(),
  2393                     $this->
object->getNewsTimelineAutoEntries()
  2395                 $t->setUserEditAll($this->
access->checkAccess(
'write', 
'', $this->object->getRefId(), 
'grp'));
  2397                 $this->
ctrl->forwardCommand($t);
  2399                     $this->
user->getId(),
  2400                     $this->
object->getId(),
  2401                     $this->
object->getRefId(),
  2406             case 'ilmemberexportsettingsgui':
  2408                 $this->tabs_gui->activateTab(
'properties');
  2409                 $this->tabs_gui->activateSubTab(
'export_members');
  2411                 $this->
ctrl->forwardCommand($settings_gui);
  2414             case "ilcontainerskillgui":
  2415                 $this->tabs_gui->activateTab(
'obj_tool_setting_skills');
  2420             case 'ilobjecttranslationgui':
  2423                 $this->tabs_gui->activateTab(
"settings");
  2424                 $this->tabs_gui->activateSubTab(
"obj_multilinguality");
  2426                 $this->
ctrl->forwardCommand($transgui);
  2429             case "ilbookinggatewaygui":
  2430                 $this->tabs_gui->activateTab(
'obj_tool_setting_booking');
  2437                 if ($cmd == 
'infoScreenGoto') {
  2442                         $cmd = 
'infoScreen';
  2446                 if (!$this->creation_mode) {
  2447                     if ($cmd == 
"infoScreen") {
  2454                 if (!$this->creation_mode
  2455                     && $cmd != 
'infoScreen'  2456                     && $cmd != 
'sendfile'  2457                     && $cmd != 
'unsubscribe'  2458                     && $cmd != 
'deliverCertificate'  2459                     && $cmd != 
'performUnsubscribe'  2460                     && $cmd != 
'removeFromDesk'  2462                     && !$this->
access->checkAccess(
"read", 
'', $this->object->getRefId())
  2464                     || $cmd == 
'subscribe'  2465                     || $cmd === 
'leaveWaitList') {
  2466                     if ($this->rbac_system->checkAccess(
'join', $this->object->getRefId()) &&
  2468                         $this->
ctrl->redirectByClass(
"ilCourseRegistrationGUI");
  2475                 if ($cmd == 
'listObjectives') {
  2476                     $this->
ctrl->setReturn($this, 
"");
  2478                     $this->
ctrl->forwardCommand($obj_gui);
  2482                 if ($cmd == 
"" && $this->
object->isNewsTimelineLandingPageEffective()) {
  2483                     $this->
ctrl->redirectByClass(
"ilnewstimelinegui");
  2494         if ($header_action) {
  2501         if ($this->
access->checkAccess(
'write', 
'', $this->object->getRefId())) {
  2506         if (!$this->
object->getMemberObject()->isAssigned()) {
  2523             $this->
logger->warning(
'Missing course confirmation.');
  2528             $this->
logger->warning(
'Missing required fields');
  2536         return array(
"ilCourseRegisterGUI", 
'ilConditionHandlerGUI');
  2541         $this->
ctrl->redirectByClass(
'ilcoursemembershipgui');
  2544     public static function _goto($a_target, 
string $a_add = 
""): void
  2547         $main_tpl = $DIC->ui()->mainTemplate();
  2548         $ilAccess = $DIC[
'ilAccess'];
  2551         $ilUser = $DIC[
'ilUser'];
  2552         $http = $DIC->http();
  2553         $refinery = $DIC->refinery();
  2555         $a_target = (
int) $a_target;
  2557         if (substr($a_add, 0, 5) == 
'rcode') {
  2560                 if ($http->
wrapper()->query()->has(
'target')) {
  2561                     $target = $http->
wrapper()->query()->retrieve(
  2568                     "login.php?target=" . $target . 
"&cmd=force_login&lang=" .
  2569                     $ilUser->getCurrentLanguage()
  2581         if ($a_add == 
"mem" && $ilAccess->checkAccess(
"manage_members", 
"", $a_target)) {
  2589         if ($ilAccess->checkAccess(
"read", 
"", $a_target)) {
  2593             if ($ilAccess->checkAccess(
"visible", 
"", $a_target)) {
  2597                     $main_tpl->setOnScreenMessage(
'failure', sprintf(
  2598                         $lng->
txt(
"msg_no_perm_read_item"),
  2611         $this->tabs_gui->activateTab(
'settings');
  2612         $this->tabs_gui->activateSubTab(
'crs_map_settings');
  2615             !$this->
access->checkAccess(
"write", 
"", $this->object->getRefId())) {
  2619         $latitude = $this->
object->getLatitude();
  2620         $longitude = $this->
object->getLongitude();
  2621         $zoom = $this->
object->getLocationZoom();
  2624         if ($latitude == 0 && $longitude == 0 && $zoom == 0) {
  2626             $latitude = $def[
"latitude"];
  2627             $longitude = $def[
"longitude"];
  2628             $zoom = $def[
"zoom"];
  2637             $this->
lng->txt(
"crs_enable_map"),
  2640         $public->setValue(
"1");
  2641         $public->setChecked($this->
object->getEnableCourseMap());
  2646             $this->
lng->txt(
"crs_map_location"),
  2650         $loc_prop->setLongitude((
float) $longitude);
  2651         $loc_prop->setZoom((
int) $zoom);
  2656         $this->tpl->setVariable(
"ADM_CONTENT", 
$form->
getHTML());
  2666         if ($this->
http->wrapper()->post()->has(
'location')) {
  2667             $custom_transformer = $this->
refinery->custom()->transformation(
  2668                 fn($array) => $array
  2675         $enable_map = 
false;
  2676         if ($this->
http->wrapper()->post()->has(
'enable_map')) {
  2677             $enable_map = $this->
http->wrapper()->post()->retrieve(
  2679                 $this->
refinery->kindlyTo()->bool()
  2682         $this->
object->setLatitude(
$location[
'latitude']);
  2683         $this->
object->setLongitude(
$location[
'longitude']);
  2684         $this->
object->setLocationZoom(
$location[
'zoom']);
  2685         $this->
object->setEnableCourseMap($enable_map);
  2686         $this->
object->update();
  2687         $this->
ctrl->redirect($this, 
"editMapSettings");
  2697             'ilcoursecontentgui',
  2699             $this->
object->getAboStatus(),
  2700             $this->
object->getRefId(),
  2701             $this->
object->getId()
  2707         string $a_cmd_class,
  2710         int $a_course_ref_id,
  2711         int $a_course_obj_id,
  2712         int $a_parent_ref_id = 0
  2715         $lng = $DIC->language();
  2716         $ilAccess = $DIC->access();
  2719         if ($a_parent_ref_id == 0) {
  2720             $a_parent_ref_id = $a_course_ref_id;
  2725             $a_item_list_gui->addCommandLinkParameter(array(
'crs_show_result' => $a_course_ref_id));
  2730         $is_tutor = ($ilAccess->checkAccess(
  2746         $ilAccess = $DIC[
'ilAccess'];
  2748         $ilCtrl = $DIC[
'ilCtrl'];
  2750         if ($this->
object->getType() != 
'crs') {
  2753         if (!$this->
access->checkAccess(
  2756             $this->object->getRefId(),
  2758             $this->
object->getId()
  2762             if ($this->
object->enabledObjectiveView()) {
  2770             $this->tabs_gui->addSubTab(
  2773                 $this->
ctrl->getLinkTargetByClass(
"ilobjcoursegui", 
"view")
  2776             $this->tabs_gui->addSubTab(
  2779                 $this->
ctrl->getLinkTargetByClass(
"ilobjcoursegui", 
"disableAdministrationPanel")
  2791         $confirm->setHeaderText($this->
lng->txt(
'crs_objectives_reset_sure'));
  2792         $confirm->setFormAction($this->
ctrl->getFormAction($this));
  2793         $confirm->setConfirm($this->
lng->txt(
'reset'), 
'reset');
  2794         $confirm->setCancel($this->
lng->txt(
'cancel'), 
'cancel');
  2795         $this->tpl->setContent($confirm->getHTML());
  2810         $this->
user->deletePref(
'crs_objectives_force_details_' . $this->
object->getId());
  2811         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'crs_objectives_reseted'));
  2817         if ($this->
access->checkAccess(
'write', 
'', $this->object->getRefId())) {
  2821             $this->
object->getRefId(),
  2822             $this->
object->getId()
  2824         if (count($this->start_obj->getStartObjects()) &&
  2825             !$this->start_obj->allFullfilled($this->user->getId())) {
  2837         $link = chr(13) . chr(10) . chr(13) . chr(10);
  2838         $link .= $this->
lng->txt(
'crs_mail_permanent_link');
  2839         $link .= chr(13) . chr(10) . chr(13) . chr(10);
  2840         $link .= ilLink::_getLink($this->
object->getRefId());
  2841         return rawurlencode(base64_encode($link));
  2846         $lg = parent::initHeaderAction($sub_type, $sub_id);
  2852             if ($validator->isCertificateDownloadable($this->user->getId(), $this->
object->getId())) {
  2853                 $cert_url = $this->
ctrl->getLinkTarget($this, 
"deliverCertificate");
  2855                 $this->
lng->loadLanguageModule(
"certificate");
  2856                 $lg->addCustomCommand($cert_url, 
"download_certificate");
  2861                     $this->
lng->txt(
"download_certificate"),
  2871                 if (!$noti->isCurrentUserActive()) {
  2875                         $this->
lng->txt(
"crs_notification_deactivated")
  2878                     $this->
ctrl->setParameter($this, 
"crs_ntf", 1);
  2879                     $caption = 
"crs_activate_notification";
  2884                         $this->
lng->txt(
"crs_notification_activated")
  2887                     $this->
ctrl->setParameter($this, 
"crs_ntf", 0);
  2888                     $caption = 
"crs_deactivate_notification";
  2891                 if ($noti->canCurrentUserEdit()) {
  2892                     $lg->addCustomCommand(
  2893                         $this->
ctrl->getLinkTarget($this, 
"saveNotification"),
  2898                 $this->
ctrl->setParameter($this, 
"crs_ntf", 
"");
  2911         if ($this->
access->checkAccess(
'manage_members', 
'', $this->ref_id)) {
  2913             if ($this->
http->wrapper()->query()->has(
'member_id')) {
  2924         $objId = $this->
object->getId();
  2928         if (
false === $validator->isCertificateDownloadable(
$user_id, 
$objId)) {
  2929             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"permission_denied"), 
true);
  2930             $this->
ctrl->redirect($this);
  2940             $this->
lng->txt(
'error_creating_certificate_pdf')
  2947         $this->
ctrl->redirectByClass(array(
'ilrepositorygui', 
'ilobjcoursegui', 
'illoeditorgui'), 
'materials');
  2952         $post_position = (array) ($this->
http->request()->getParsedBody()[
'position'] ?? []);
  2953         if (isset($post_position[
'lobj'])) {
  2954             $lobj = $post_position[
'lobj'];
  2955             $objective_order = array();
  2956             foreach ($lobj as $objective_id => $materials) {
  2957                 $objective_order[$objective_id] = $materials[0];
  2958                 unset($lobj[$objective_id][0]);
  2961             asort($objective_order);
  2963             foreach (array_keys($objective_order) as $objective_id) {
  2965                 $obj->writePosition(++$pos);
  2969             foreach ($lobj as $objective_id => $materials) {
  2974                 foreach (array_keys($materials) as 
$ass_id) {
  2975                     $objmat->writePosition($ass_id, ++$pos);
  2979         parent::saveSortingObject();
  2985         if ($this->
http->wrapper()->query()->has(
'tid')) {
  2986             $tid = $this->
http->wrapper()->query()->retrieve(
  2990         } elseif ($this->
http->wrapper()->post()->has(
'tid')) {
  2991             $tid = $this->
http->wrapper()->post()->retrieve(
  3002         if ($this->
http->wrapper()->query()->has(
'tid')) {
  3003             $tid = $this->
http->wrapper()->query()->retrieve(
  3009         if ($this->
http->wrapper()->query()->has(
'objective_id')) {
  3010             $objective_id = $this->
http->wrapper()->query()->retrieve(
  3018             $this->
user->getId()
  3020         $passed = 
$res->getCompletedObjectiveIds();
  3022         $has_completed = 
false;
  3023         if ($objective_id) {
  3024             $objective_ids = array($objective_id);
  3025             if (in_array($objective_id, $passed)) {
  3026                 $has_completed = 
true;
  3033             if (count($objective_ids) === count($passed)) {
  3034                 $has_completed = 
true;
  3039         if ($has_completed) {
  3055         if ($a_objective_id) {
  3056             $question = $this->
lng->txt(
'crs_loc_objective_passed_confirmation');
  3058             $question = $this->
lng->txt(
'crs_loc_objectives_passed_confirmation');
  3061         $confirm->setHeaderText($question);
  3062         $confirm->addHiddenItem(
'objective_id', (
string) $a_objective_id);
  3063         $confirm->addHiddenItem(
'tid', (
string) $a_test_id);
  3064         $confirm->setConfirm($this->
lng->txt(
'crs_loc_tst_start'), 
'redirectLocToTestConfirmed');
  3065         $confirm->setCancel($this->
lng->txt(
'cancel'), 
'view');
  3068         $this->tpl->setContent($confirm->getHTML());
  3078         $crs_admin = $this->
object->getDefaultAdminRole();
  3079         $crs_member = $this->
object->getDefaultMemberRole();
  3080         $local_roles = $this->
object->getLocalCourseRoles(
false);
  3084         if (in_array($crs_member, $local_roles)) {
  3085             #$crs_roles[$crs_member] = ilObjRole::_getTranslation(array_search ($crs_member, $local_roles));  3086             #unset($local_roles[$crs_roles[$crs_member]]);  3089         foreach ($local_roles as $title => $role_id) {
  3097         if ($a_exclude !== []) {
  3098             foreach ($a_exclude as $excluded_role) {
  3099                 if (isset($crs_roles[$excluded_role])) {
  3100                     unset($crs_roles[$excluded_role]);
  3116         $this->
ctrl->redirectByClass(ilUsersGalleryGUI::class);
  3124         $this->
ctrl->setReturn($this, 
"view");
 static handleCode(int $a_ref_id, string $a_type, string $a_code)
 
redirectLocToTestConfirmedObject()
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static getInstance(int $a_ref_id, bool $a_include_auto_entries)
 
setPropertyForm(ilPropertyFormGUI $form)
 
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ilObjUser $user=null,)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
ilBadgeManagementGUI: ilPropertyFormGUI 
 
const IL_CRS_VIEW_TIMING_ABSOLUTE
 
setMessage(string $a_message)
 
const LP_MODE_MANUAL_BY_TUTOR
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
saveSortingSettings(ilPropertyFormGUI $form)
 
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
 
getFormAction(string $cmd, string $default_form_action="")
Get form action for command (command is method name without "Object", e.g. 
 
const IL_CRS_SUBSCRIPTION_DIRECT
 
GUI class for the workflow of copying objects. 
 
if($clientAssertionType !='urn:ietf:params:oauth:client-assertion-type:jwt-bearer'|| $grantType !='client_credentials') $parts
 
const IL_CRS_SUBSCRIPTION_DEACTIVATED
 
static _goto($a_target, string $a_add="")
 
confirmDeleteInfoFilesObject()
 
$location
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static lookupRegistrationInfo(int $a_obj_id)
 
prepareOutput(bool $show_sub_objects=true)
 
static _isActivated(int $a_obj_id)
Is activated. 
 
__construct($a_data, int $a_id, bool $a_call_by_reference=true, bool $a_prepare_output=true)
 
jump2UsersGalleryObject()
 
const LP_STATUS_NOT_ATTEMPTED
 
static _lookupInProgressForObject(int $a_obj_id, ?array $a_user_ids=null)
 
static _getInstanceByObjId(int $a_obj_id, int $a_usr_id)
 
static isActiveForRefId(int $ref_id)
 
static getInstanceByObjId(int $a_obj_id)
Get instance by obj type. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string. 
 
static _gotoRepositoryNode(int $ref_id, string $cmd="")
 
static _lookupName(int $a_user_id)
lookup user name 
 
This class is used for integration of the booking manager as a service into other repository objects...
 
static getValidFilename(string $a_filename)
 
static _readFilesByCourse(int $a_course_id)
 
static _getObjectiveIds(int $course_id, bool $a_activated_only=false)
 
viewObject()
viewObject container presentation for "administration -> repository, trash, permissions" ...
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
ilAdvancedMDRecordGUI $record_gui
 
enableSubscribe(bool $status)
 
setVariable(string $variable, $value='')
Sets the given variable to the given value. 
 
afterSave(ilObject $new_object)
 
static updateServiceSettingsForm(int $obj_id, ilPropertyFormGUI $form, array $services)
 
static checkAccess(int $a_ref_id, bool $a_allow_only_read=true)
check access to learning progress 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
updateLPFromStatus(int $a_member_id, bool $a_has_passed)
sync course status and lp status 
 
static _getFields(int $a_container_id, $a_sort=self::IL_CDF_SORT_NAME)
Get all fields of a container. 
 
const STATUS_DETERMINATION_LP
 
isActiveAdministrationPanel()
 
const LP_STATUS_IN_PROGRESS
 
deliverCertificateObject()
 
static _lookupContainerSetting(int $a_id, string $a_keyword, string $a_default_value=null)
 
static _lookupViewMode(int $a_id)
 
editObject(ilPropertyFormGUI $form=null)
 
static _lookupCompletedForObject(int $a_obj_id, ?array $a_user_ids=null)
 
static _lookupObjId(int $ref_id)
 
static deliverFileLegacy(string $a_file, ?string $a_filename=null, ?string $a_mime=null, ?bool $isInline=false, ?bool $removeAfterDelivery=false, ?bool $a_exit_after=true)
 
static _tracProgress(int $a_user_id, int $a_obj_id, int $a_ref_id, string $a_obj_type='')
 
setValue(string $a_value)
 
modifyItemGUI(ilObjectListGUI $a_item_list_gui, array $a_item_data)
 
deleteObject(bool $error=false)
 
const EXTERNAL_MAIL_PREFIX
 
const MESSAGE_TYPE_SUCCESS
 
static _enabledUserRelatedData()
 
static _checkRequired(int $a_usr_id, int $a_obj_id)
 
class ilCourseObjectiveMaterials 
 
performUnsubscribeObject()
 
GUI class for public user profile presentation. 
 
static _enabledLearningProgress()
 
ilContainerStartObjects $start_obj
 
const IL_CRS_SUBSCRIPTION_PASSWORD
 
Class ilMailMemberCourseRoles. 
 
static http()
Fetches the global http state from ILIAS. 
 
class ilobjcourseobjectivesgui 
 
const IL_CRS_SUBSCRIPTION_LIMITED
 
ilGlobalTemplateInterface $tpl
 
static _lookupTitle(int $obj_id)
 
static _getInstanceByObjId(int $a_obj_id)
 
const MAIL_ALLOWED_TUTORS
 
GUI class for LTI provider object settings. 
 
createMailSignature()
Create a course mail signature. 
 
static _getCountObjectives(int $a_obj_id, bool $a_activated_only=false)
 
addStandardContainerSubTabs(bool $a_include_view=true)
Add standard container subtabs for view, manage, oderdering and text/media editor link...
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static _getTranslation(string $a_role_title)
 
initDidacticTemplate(ilPropertyFormGUI $form)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
Validates if an active certificate is stored in the database and can be downloaded by the user...
 
static getDefaultSettings()
Get default longitude, latitude and zoom. 
 
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory) 
 
static _recordWriteEvent(int $obj_id, int $usr_id, string $action, ?int $parent_obj_id=null)
Records a write event. 
 
redirectLocToTestConfirmation(int $a_objective_id, int $a_test_id)
Show confirmation whether user wants to start a new run or resume a previous run. ...
 
const IL_CRS_VIEW_TIMING_RELATIVE
 
const IL_CRS_VIEW_BY_TYPE
 
renderAddNewItem(string ... $disabled_object_types)
 
readMemberData(array $ids, array $selected_columns=null, bool $skip_names=false)
 
afterImport(ilObject $new_object)
 
static _modifyItemGUI(ilObjectListGUI $a_item_list_gui, string $a_cmd_class, array $a_item_data, bool $a_abo_status, int $a_course_ref_id, int $a_course_obj_id, int $a_parent_ref_id=0)
 
static initServiceSettingsForm(int $obj_id, ilPropertyFormGUI $form, array $services)
 
const STATUS_DETERMINATION_MANUAL
 
Last visited history for repository items. 
 
ilNavigationHistory $navigation_history
 
getEditFormValues()
values are already set in initEditForm Returning an empty array avoid overriding these values...
 
setCustomRolesForSelection(array $a_roles)
Set custom roles for mapping to LTI roles. 
 
const AUTO_RATING_NEW_OBJECTS
 
Class ilObjCourseGroupingGUI. 
 
saveListPresentation(ilPropertyFormGUI $form)
 
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
 
static _writeContainerSetting(int $a_id, string $a_keyword, string $a_value)
 
const IL_CRS_VIEW_OBJECTIVE
 
static redirect(string $a_script)
 
setCurrentBlock(string $part=self::DEFAULT_BLOCK)
Sets the template to the given block. 
 
setObjParticipants(ilParticipants $objParticipants)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
buildAddNewItemElements(array $subtypes, string $create_target_class=ilRepositoryGUI::class, ?int $redirect_target_ref_id=null,)
 
static isActivated()
Checks whether Map feature is activated. 
 
addAdoptContentLinkToToolbar()
 
const IL_CRS_VIEW_SESSIONS
 
redirectLocToTestObject($a_force_new_run=null)
 
static _registrationEnabled(int $a_obj_id)
Registration enabled? Method is in Access class, since it is needed by Access/ListGUI. 
 
static generateCode()
Generate new registration key. 
 
Render add new item selector. 
 
initListPresentationForm(ilPropertyFormGUI $form)
Add list presentation settings to form. 
 
static _getInstanceByType(string $a_type)
Get Singleton Instance. 
 
const IL_CRS_SUBSCRIPTION_UNLIMITED
 
static isAccessible(int $ref_id)
 
static setBlockedForLP(bool $a_status)
Toggle LP blocking property status. 
 
initHeaderAction(?string $sub_type=null, ?int $sub_id=null)
 
initSortingForm(ilPropertyFormGUI $form, array $a_sorting_settings)
Append sorting settings to property form. 
 
static formatPeriod(ilDateTime $start, ilDateTime $end, bool $a_skip_starting_day=false, ilObjUser $user=null)
Format a period of two dates Shows: 14. 
 
__construct(Container $dic, ilPlugin $plugin)
 
getReturnLocation(string $cmd, string $default_location="")
Get return location for command (command is method name without "Object", e.g. 
 
const LP_CONTEXT_REPOSITORY
 
This class represents a text area property in a property form. 
 
const IL_CRS_SUBSCRIPTION_CONFIRMATION
 
Class ilCourseContentGUI. 
 
static getMailObjectRefId()
 
static _lookupProgressByObjId(int $a_obj_id)
lookup progress for a specific object 
 
setInfoObject(ilInfoScreenGUI $info)
get info sections 
 
ILIAS Container InternalGUIService $gui
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
setSubTabs(string $a_tab)
 
Class ilContainerGUI This is a base GUI class for all container objects in ILIAS: root folder...
 
static _isParticipant(int $a_ref_id, int $a_usr_id)
Static function to check if a user is a participant of the container object. 
 
getCreatableObjectTypes()
 
static getAvailablePortfolioLinksForUserIds(array $a_owner_ids, ?string $a_back_url=null)
 
static _lookupFailedForObject(int $a_obj_id, ?array $a_user_ids=null)
 
setCompleted(bool $a_status)
 
editInfoObject(ilPropertyFormGUI $a_form=null)
 
static _isOnList(int $a_usr_id, int $a_obj_id)
 
language()
 description: > Example for rendring a language glyph. 
 
static _hasAccepted(int $a_usr_id, int $a_obj_id)
Check if user has accepted agreement. 
 
parseCurrentBlock(string $block_name=self::DEFAULT_BLOCK)
Parses the given block. 
 
static _lookupType(int $id, bool $reference=false)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
const ORGU_POSITION_ACCESS
 
infoScreenObject()
this one is called from the info button in the repository not very nice to set cmdClass/Cmd manually...
 
const LP_STATUS_COMPLETED
 
const TYPE_UNSUBSCRIBE_MEMBER
 
static _catchupWriteEvents(int $obj_id, int $usr_id, ?string $timestamp=null)
Catches up with all write events which occured before the specified timestamp. 
 
addHeaderAction()
Add header action menu. 
 
static getInstance(int $obj_id)
 
static makeClickable(string $a_text, bool $detectGotoLinks=false)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static _fieldsToInfoString(int $a_obj_id)
 
kindlyTo()
Combined validations and transformations for primitive data types that establish a baseline for furth...
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
checkPermission(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
 
static _hasFields(int $a_container_id)
Check if there are any define fields. 
 
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call 
 
static deleteRuns(int $a_container_id, int $a_user_id)
 
Class ilContainerStartObjectsGUI. 
 
GUI class for object translation handling. 
 
Class ilECSCourseSettings. 
 
const CALENDAR_CONFIGURATION
 
static _gotoRepositoryRoot(bool $raise_error=false)
Goto repository root. 
 
static _updateStatus(int $a_obj_id, int $a_usr_id, ?object $a_obj=null, bool $a_percentage=false, bool $a_force_raise=false)
 
getLocalRoles(array $a_exclude=array())
 
downloadPdf(int $userId, int $objectId)
 
const BREADCRUMB_FULL_PATH
 
const BREADCRUMB_CRS_ONLY