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)