3 declare(strict_types=0);
31 private int $mode = self::MODE_EXPORT;
64 $this->log = $DIC->logger()->crs();
65 $this->setting = $DIC->settings();
66 $this->course_obj = $a_course_obj;
70 $this->course_members_array = array_flip($this->course_members->getParticipants());
72 $this->md_obj =
new ilMD($this->course_obj->getId(), 0,
'crs');
76 public function setMode(
int $a_mode): void
78 $this->mode = $a_mode;
88 parent::startParsing();
92 $identifier_ids =
$general->getIdentifierIds();
93 if (!isset($identifier_ids[0])) {
96 $identifier =
$general->getIdentifier($identifier_ids[0]);
97 $identifier->setEntry(
100 $identifier->update();
108 $this->sax_controller->setHandlers($a_xml_parser);
109 $this->sax_controller->setDefaultElementHandler($this);
110 $this->sax_controller->setElementHandler(
119 public function handlerBeginTag($a_xml_parser,
string $a_name, array $a_attribs): void
122 if ($this->in_meta_data) {
123 parent::handlerBeginTag($a_xml_parser, $a_name, $a_attribs);
129 if (strlen($a_attribs[
'importId'] ??
'')) {
130 $this->log->write(
"CourseXMLParser: importId = " . $a_attribs[
'importId']);
131 $this->course_obj->setImportId($a_attribs[
'importId']);
134 if (strlen($a_attribs[
'showMembers'] ??
'')) {
135 $this->course_obj->setShowMembers(
136 $a_attribs[
'showMembers'] ==
'Yes' 142 if ($id_data = $this->
__parseId($a_attribs[
'id'] ??
'')) {
143 if ($id_data[
'local'] or $id_data[
'imported']) {
150 if ($id_data = $this->
__parseId($a_attribs[
'id'] ??
'')) {
151 if ($id_data[
'local'] or $id_data[
'imported']) {
158 if ($id_data = $this->
__parseId($a_attribs[
'id'] ??
'')) {
159 if ($id_data[
'local'] or $id_data[
'imported']) {
166 if ($id_data = $this->
__parseId($a_attribs[
'id'] ??
'')) {
167 if ($id_data[
'local'] or $id_data[
'imported']) {
174 if ($id_data = $this->
__parseId($a_attribs[
'id'] ??
'')) {
175 if ($id_data[
'local'] or $id_data[
'imported']) {
182 if ($id_data = $this->
__parseId($a_attribs[
'id'] ??
'')) {
183 if ($id_data[
'local'] or $id_data[
'imported']) {
184 $this->course_obj->setOwner((
int) ($id_data[
'usr_id'] ?? 0));
185 $this->course_obj->updateOwner();
193 $this->in_availability =
true;
197 if ($this->in_availability) {
198 $this->course_obj->setOfflineStatus(
true);
199 } elseif ($this->in_registration) {
206 if ($this->in_availability) {
207 $this->course_obj->setOfflineStatus(
false);
208 } elseif ($this->in_registration) {
213 case 'TemporarilyAvailable':
214 if ($this->in_availability) {
215 $this->course_obj->setOfflineStatus(
false);
216 } elseif ($this->in_registration) {
237 case 'Responsibility':
244 $this->in_registration =
true;
246 switch ($a_attribs[
'registrationType'] ??
'') {
260 $this->course_obj->setSubscriptionMaxMembers((
int) ($a_attribs[
'maxMembers'] ?? 0));
261 $this->course_obj->enableSubscriptionMembershipLimitation($this->course_obj->getSubscriptionMaxMembers() > 0);
262 $this->course_obj->enableWaitingList(($a_attribs[
'waitingList'] ?? null) ==
'Yes' ?
true :
false);
269 $this->course_obj->setOrderType(
279 $this->in_meta_data =
true;
280 parent::handlerBeginTag($a_xml_parser, $a_name, $a_attribs);
283 case 'ContainerSetting':
284 $this->current_container_setting = ($a_attribs[
'id'] ??
'');
288 $this->in_period =
true;
289 $this->in_period_with_time = (bool) ($a_attribs[
'withTime'] ??
false);
292 case 'WaitingListAutoFill':
293 case 'CancellationEnd':
295 case 'StatusDetermination':
296 case 'MailToMembersType':
300 if (array_key_exists(
'status', $a_attribs)) {
301 $this->course_obj->setAutoNotification((
bool) $a_attribs[
'status']);
306 $this->course_obj->setEnableCourseMap((
bool) $a_attribs[
'enabled'] ??
false);
307 $this->course_obj->setLatitude((
string) $a_attribs[
'latitude'] ??
'');
308 $this->course_obj->setLongitude((
string) $a_attribs[
'longitude'] ??
'');
309 $this->course_obj->setLocationZoom((
int) $a_attribs[
'location_zoom'] ?? 0);
312 case 'TutorialSupportBlock':
313 if (isset($a_attribs[
'active'])) {
314 $this->course_obj->setTutorialSupportBlockSettingValue((
int) $a_attribs[
'active']);
319 if (isset($a_attribs[
'active'])) {
320 $this->course_obj->enableSessionLimit((
bool) $a_attribs[
'active']);
322 if (isset($a_attribs[
'previous'])) {
323 $this->course_obj->setNumberOfPreviousSessions((
int) $a_attribs[
'previous']);
325 if (isset($a_attribs[
'next'])) {
326 $this->course_obj->setNumberOfNextSessions((
int) $a_attribs[
'next']);
334 $fields = explode(
'_', $a_id);
336 if (!is_array($fields) or
337 $fields[0] !=
'il' or
338 !is_numeric($fields[1]) or
339 $fields[2] !=
'usr' or
340 !is_numeric($fields[3])) {
344 return array(
'imported' =>
true,
350 return array(
'imported' =>
false,
352 'usr_id' => (
int) $fields[3]
361 private function handleAdmin(array $a_attribs, array $id_data): void
363 if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] ==
'Attach') {
365 if (!array_key_exists($id_data[
'usr_id'], $this->course_members_array)) {
368 if (isset($a_attribs[
'notification']) && $a_attribs[
'notification'] ==
'Yes') {
369 $this->course_members->updateNotification($id_data[
'usr_id'],
true);
371 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] ==
'Yes') {
372 $this->course_members->updatePassed($id_data[
'usr_id'],
true);
374 if (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] ==
'Yes') {
376 $this->course_members->updateContact($id_data[
'usr_id'],
true);
378 $this->course_members_array[$id_data[
'usr_id']] =
"added";
381 if (isset($a_attribs[
'notification']) && $a_attribs[
'notification'] ==
'Yes') {
382 $this->course_members->updateNotification($id_data[
'usr_id'],
true);
384 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] ==
'Yes') {
385 $this->course_members->updatePassed($id_data[
'usr_id'],
true);
387 if (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] ==
'Yes') {
388 $this->course_members->updateContact($id_data[
'usr_id'],
true);
389 } elseif (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] ==
'No') {
390 $this->course_members->updateContact($id_data[
'usr_id'],
false);
392 $this->course_members->updateBlocked($id_data[
'usr_id'],
false);
394 } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] ==
'Detach' && $this->course_members->isAdmin($id_data[
'usr_id'])) {
396 $this->course_members->delete($id_data[
'usr_id']);
400 private function handleTutor(array $a_attribs, array $id_data): void
402 if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] ==
'Attach') {
404 if (!array_key_exists($id_data[
'usr_id'], $this->course_members_array)) {
407 if (isset($a_attribs[
'notification']) && $a_attribs[
'notification'] ==
'Yes') {
408 $this->course_members->updateNotification($id_data[
'usr_id'],
true);
410 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] ==
'Yes') {
411 $this->course_members->updatePassed($id_data[
'usr_id'],
true);
413 if (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] ==
'Yes') {
415 $this->course_members->updateContact($id_data[
'usr_id'],
true);
417 $this->course_members_array[$id_data[
'usr_id']] =
"added";
419 if (isset($a_attribs[
'notification']) && $a_attribs[
'notification'] ==
'Yes') {
420 $this->course_members->updateNotification($id_data[
'usr_id'],
true);
422 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] ==
'Yes') {
423 $this->course_members->updatePassed($id_data[
'usr_id'],
true);
425 if (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] ==
'Yes') {
426 $this->course_members->updateContact($id_data[
'usr_id'],
true);
427 } elseif (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] ==
'No') {
428 $this->course_members->updateContact($id_data[
'usr_id'],
false);
430 $this->course_members->updateBlocked($id_data[
'usr_id'],
false);
432 } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] ==
'Detach' && $this->course_members->isTutor($id_data[
'usr_id'])) {
434 $this->course_members->delete($id_data[
'usr_id']);
443 if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] ==
'Attach') {
445 if (!array_key_exists($id_data[
'usr_id'], $this->course_members_array)) {
448 if (isset($a_attribs[
'blocked']) && $a_attribs[
'blocked'] ==
'Yes') {
449 $this->course_members->updateBlocked($id_data[
'usr_id'],
true);
451 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] ==
'Yes') {
452 $this->course_members->updatePassed($id_data[
'usr_id'],
true);
454 $this->course_members_array[$id_data[
'usr_id']] =
"added";
457 if (isset($a_attribs[
'blocked']) && $a_attribs[
'blocked'] ==
'Yes') {
458 $this->course_members->updateBlocked($id_data[
'usr_id'],
true);
460 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] ==
'Yes') {
461 $this->course_members->updatePassed($id_data[
'usr_id'],
true);
464 } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] ==
'Detach' && $this->course_members->isMember($id_data[
'usr_id'])) {
466 $this->course_members->delete($id_data[
'usr_id']);
475 if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] ==
'Attach') {
477 if (!$this->course_members->isSubscriber($id_data[
'usr_id'])) {
479 $this->course_members->addSubscriber($id_data[
'usr_id']);
481 $this->course_members->updateSubscriptionTime($id_data[
'usr_id'], (
int) ($a_attribs[
'subscriptionTime'] ?? 0));
482 } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] ==
'Detach' && $this->course_members->isSubscriber($id_data[
'usr_id'])) {
484 $this->course_members->deleteSubscriber($id_data[
"usr_id"]);
493 if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] ==
'Attach') {
495 if (!$this->course_waiting_list->isOnList($id_data[
'usr_id'])) {
497 $this->course_waiting_list->addToList($id_data[
'usr_id']);
499 $this->course_waiting_list->updateSubscriptionTime($id_data[
'usr_id'], (
int) ($a_attribs[
'subscriptionTime'] ?? 0));
500 } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] ==
'Detach' && $this->course_waiting_list->isOnList($id_data[
'usr_id'])) {
502 $this->course_waiting_list->removeFromList($id_data[
'usr_id']);
511 $this->cdata = $this->
trimAndStrip((
string) $this->cdata);
512 if ($this->in_meta_data) {
513 parent::handlerEndTag($a_xml_parser, $a_name);
519 $this->log->write(
'CourseXMLParser: import_id = ' . $this->course_obj->getImportId());
524 $this->course_obj->readContainerSettings();
525 if ($this->
getMode() === self::MODE_SOAP) {
526 $this->course_obj->MDUpdateListener(
'General');
527 $this->adv_md_handler->save();
531 if ($transl->getDefaultTitle() !==
"") {
532 $this->course_obj->setTitle($transl->getDefaultTitle());
534 if ($transl->getDefaultDescription() !==
"") {
535 $this->course_obj->setDescription($transl->getDefaultDescription());
537 $this->course_obj->update();
544 $this->in_availability =
false;
548 $this->in_registration =
false;
552 if ($this->in_availability) {
553 $this->course_obj->setActivationStart((
int) trim($this->cdata));
555 if ($this->in_registration) {
556 $this->course_obj->setSubscriptionStart((
int) trim($this->cdata));
558 if ($this->in_period) {
559 if ((
int) $this->cdata) {
560 if ($this->in_period_with_time) {
561 $this->period_start = new \ilDateTime((
int) $this->cdata,
IL_CAL_UNIX);
563 $this->period_start = new \ilDate((
int) $this->cdata,
IL_CAL_UNIX);
570 if ($this->in_availability) {
571 $this->course_obj->setActivationEnd((
int) trim($this->cdata));
573 if ($this->in_registration) {
574 $this->course_obj->setSubscriptionEnd((
int) trim($this->cdata));
576 if ($this->in_period) {
577 if ((
int) $this->cdata) {
578 if ($this->in_period_with_time) {
579 $this->period_end = new \ilDateTime((
int) $this->cdata,
IL_CAL_UNIX);
581 $this->period_end = new \ilDate((
int) $this->cdata,
IL_CAL_UNIX);
588 $this->course_obj->setSyllabus(trim($this->cdata));
592 $this->course_obj->setTargetGroup(trim($this->cdata));
595 case 'ImportantInformation':
596 $this->course_obj->setImportantInformation(trim($this->cdata));
600 $this->course_obj->setViewMode((
int) trim($this->cdata));
604 $this->course_obj->setContactName(trim($this->cdata));
607 case 'Responsibility':
608 $this->course_obj->setContactResponsibility(trim($this->cdata));
612 $this->course_obj->setContactPhone(trim($this->cdata));
616 $this->course_obj->setContactEmail(trim($this->cdata));
620 $this->course_obj->setContactConsultation(trim($this->cdata));
624 $this->course_obj->setSubscriptionPassword(trim($this->cdata));
628 $this->in_meta_data =
false;
629 parent::handlerEndTag($a_xml_parser, $a_name);
632 case 'ContainerSetting':
633 if ($this->current_container_setting) {
635 $this->course_obj->getId(),
643 $this->in_period =
false;
645 $this->course_obj->setCoursePeriod($this->period_start, $this->period_end);
647 $this->log->warning(
'invalid course period given');
651 case 'WaitingListAutoFill':
652 $this->course_obj->setWaitingListAutoFill((
bool) $this->cdata);
655 case 'CancellationEnd':
656 if ((
int) $this->cdata) {
657 $this->course_obj->setCancellationEnd(
new ilDate((
int) $this->cdata,
IL_CAL_UNIX));
662 if ((
int) $this->cdata) {
663 $this->course_obj->setSubscriptionMinMembers((
int) $this->cdata);
668 $this->course_obj->setTimingMode((
int) $this->cdata);
671 case 'StatusDetermination':
672 $this->course_obj->setStatusDetermination((
int) $this->cdata);
675 case 'MailToMembersType':
676 $this->course_obj->setMailToMembersType((
int) $this->cdata);
687 if ($this->in_meta_data) {
688 parent::handlerCharacterData($a_xml_parser, $a_data);
690 if ($a_data !=
"\n") {
692 $a_data = preg_replace(
"/\t+/",
" ", $a_data);
694 $this->cdata .= $a_data;
static _writeImportId(int $obj_id, string $import_id)
write import id to db (static)
handlerBeginTag($a_xml_parser, string $a_name, array $a_attribs)
trimAndStrip(string $input)
const IL_CRS_SUBSCRIPTION_DIRECT
const IL_CRS_SUBSCRIPTION_DEACTIVATED
handleWaitingList(array $a_attribs, array $id_data)
attach or detach members from waitinglist
handleAdmin(array $a_attribs, array $id_data)
attach or detach admin from course member
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
trimAndStripAttribs(array $attribs)
ilCourseWaitingList $course_waiting_list
setHandlers($a_xml_parser)
array $course_members_array
static _importContainerSortingSettings(array $attibs, int $obj_id)
sorting import for all container objects
handleSubscriber(array $a_attribs, array $id_data)
attach or detach members from subscribers
const IL_CRS_SUBSCRIPTION_PASSWORD
const IL_CRS_SUBSCRIPTION_LIMITED
static _getInstanceByObjId(int $a_obj_id)
ilSaxController $sax_controller
bool $in_period_with_time
ilAdvancedMDValueParser $adv_md_handler
static getInstance(int $obj_id)
string $current_container_setting
handlerEndTag($a_xml_parser, string $a_name)
handleTutor(array $a_attribs, array $id_data)
static _writeContainerSetting(int $a_id, string $a_keyword, string $a_value)
const IL_CRS_SUBSCRIPTION_UNLIMITED
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Interface definition for sax subset parsers.
Controller class for sax element handlers.
static _getImportedUserId(string $i2_id)
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
__construct(Container $dic, ilPlugin $plugin)
const IL_CRS_SUBSCRIPTION_CONFIRMATION
handleMember(array $a_attribs, array $id_data)
attach or detach user/member/admin from course member
ilCourseParticipants $course_members
__construct(ilObjCourse $a_course_obj, string $a_xml_file='')
static getInstanceByObjId(int $a_obj_id)
handlerCharacterData($a_xml_parser, string $a_data)
Character data handler.
static _lookupLogin(int $a_user_id)