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);
   313                 if (isset($a_attribs[
'active'])) {
   314                     $this->course_obj->enableSessionLimit((
bool) $a_attribs[
'active']);
   316                 if (isset($a_attribs[
'previous'])) {
   317                     $this->course_obj->setNumberOfPreviousSessions((
int) $a_attribs[
'previous']);
   319                 if (isset($a_attribs[
'next'])) {
   320                     $this->course_obj->setNumberOfNextSessions((
int) $a_attribs[
'next']);
   328         $fields = explode(
'_', $a_id);
   330         if (!is_array($fields) or
   331             $fields[0] != 
'il' or
   332             !is_numeric($fields[1]) or
   333             $fields[2] != 
'usr' or
   334             !is_numeric($fields[3])) {
   338             return array(
'imported' => 
true,
   344             return array(
'imported' => 
false,
   346                          'usr_id' => (
int) $fields[3]
   355     private function handleAdmin(array $a_attribs, array $id_data): void
   357         if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] == 
'Attach') {
   359             if (!array_key_exists($id_data[
'usr_id'], $this->course_members_array)) {
   362                 if (isset($a_attribs[
'notification']) && $a_attribs[
'notification'] == 
'Yes') {
   363                     $this->course_members->updateNotification($id_data[
'usr_id'], 
true);
   365                 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] == 
'Yes') {
   366                     $this->course_members->updatePassed($id_data[
'usr_id'], 
true);
   368                 if (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] == 
'Yes') {
   370                     $this->course_members->updateContact($id_data[
'usr_id'], 
true);
   372                 $this->course_members_array[$id_data[
'usr_id']] = 
"added";
   375                 if (isset($a_attribs[
'notification']) && $a_attribs[
'notification'] == 
'Yes') {
   376                     $this->course_members->updateNotification($id_data[
'usr_id'], 
true);
   378                 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] == 
'Yes') {
   379                     $this->course_members->updatePassed($id_data[
'usr_id'], 
true);
   381                 if (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] == 
'Yes') {
   382                     $this->course_members->updateContact($id_data[
'usr_id'], 
true);
   383                 } elseif (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] == 
'No') {
   384                     $this->course_members->updateContact($id_data[
'usr_id'], 
false);
   386                 $this->course_members->updateBlocked($id_data[
'usr_id'], 
false);
   388         } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] == 
'Detach' && $this->course_members->isAdmin($id_data[
'usr_id'])) {
   390             $this->course_members->delete($id_data[
'usr_id']);
   394     private function handleTutor(array $a_attribs, array $id_data): void
   396         if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] == 
'Attach') {
   398             if (!array_key_exists($id_data[
'usr_id'], $this->course_members_array)) {
   401                 if (isset($a_attribs[
'notification']) && $a_attribs[
'notification'] == 
'Yes') {
   402                     $this->course_members->updateNotification($id_data[
'usr_id'], 
true);
   404                 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] == 
'Yes') {
   405                     $this->course_members->updatePassed($id_data[
'usr_id'], 
true);
   407                 if (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] == 
'Yes') {
   409                     $this->course_members->updateContact($id_data[
'usr_id'], 
true);
   411                 $this->course_members_array[$id_data[
'usr_id']] = 
"added";
   413                 if (isset($a_attribs[
'notification']) && $a_attribs[
'notification'] == 
'Yes') {
   414                     $this->course_members->updateNotification($id_data[
'usr_id'], 
true);
   416                 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] == 
'Yes') {
   417                     $this->course_members->updatePassed($id_data[
'usr_id'], 
true);
   419                 if (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] == 
'Yes') {
   420                     $this->course_members->updateContact($id_data[
'usr_id'], 
true);
   421                 } elseif (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] == 
'No') {
   422                     $this->course_members->updateContact($id_data[
'usr_id'], 
false);
   424                 $this->course_members->updateBlocked($id_data[
'usr_id'], 
false);
   426         } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] == 
'Detach' && $this->course_members->isTutor($id_data[
'usr_id'])) {
   428             $this->course_members->delete($id_data[
'usr_id']);
   437         if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] == 
'Attach') {
   439             if (!array_key_exists($id_data[
'usr_id'], $this->course_members_array)) {
   442                 if (isset($a_attribs[
'blocked']) && $a_attribs[
'blocked'] == 
'Yes') {
   443                     $this->course_members->updateBlocked($id_data[
'usr_id'], 
true);
   445                 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] == 
'Yes') {
   446                     $this->course_members->updatePassed($id_data[
'usr_id'], 
true);
   448                 $this->course_members_array[$id_data[
'usr_id']] = 
"added";
   451                 if (isset($a_attribs[
'blocked']) && $a_attribs[
'blocked'] == 
'Yes') {
   452                     $this->course_members->updateBlocked($id_data[
'usr_id'], 
true);
   454                 if (isset($a_attribs[
'passed']) && $a_attribs[
'passed'] == 
'Yes') {
   455                     $this->course_members->updatePassed($id_data[
'usr_id'], 
true);
   458         } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] == 
'Detach' && $this->course_members->isMember($id_data[
'usr_id'])) {
   460             $this->course_members->delete($id_data[
'usr_id']);
   469         if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] == 
'Attach') {
   471             if (!$this->course_members->isSubscriber($id_data[
'usr_id'])) {
   473                 $this->course_members->addSubscriber($id_data[
'usr_id']);
   475             $this->course_members->updateSubscriptionTime($id_data[
'usr_id'], (
int) ($a_attribs[
'subscriptionTime'] ?? 0));
   476         } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] == 
'Detach' && $this->course_members->isSubscriber($id_data[
'usr_id'])) {
   478             $this->course_members->deleteSubscriber($id_data[
"usr_id"]);
   487         if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] == 
'Attach') {
   489             if (!$this->course_waiting_list->isOnList($id_data[
'usr_id'])) {
   491                 $this->course_waiting_list->addToList($id_data[
'usr_id']);
   493             $this->course_waiting_list->updateSubscriptionTime($id_data[
'usr_id'], (
int) ($a_attribs[
'subscriptionTime'] ?? 0));
   494         } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] == 
'Detach' && $this->course_waiting_list->isOnList($id_data[
'usr_id'])) {
   496             $this->course_waiting_list->removeFromList($id_data[
'usr_id']);
   505         $this->cdata = $this->
trimAndStrip((
string) $this->cdata);
   506         if ($this->in_meta_data) {
   507             parent::handlerEndTag($a_xml_parser, $a_name);
   513                 $this->log->write(
'CourseXMLParser: import_id = ' . $this->course_obj->getImportId());
   518                 $this->course_obj->readContainerSettings();
   519                 if ($this->
getMode() === self::MODE_SOAP) {
   520                     $this->course_obj->MDUpdateListener(
'General');
   521                     $this->adv_md_handler->save();
   525                 if ($transl->getDefaultTitle() !== 
"") {
   526                     $this->course_obj->setTitle($transl->getDefaultTitle());
   528                 if ($transl->getDefaultDescription() !== 
"") {
   529                     $this->course_obj->setDescription($transl->getDefaultDescription());
   531                 $this->course_obj->update();
   538                 $this->in_availability = 
false;
   542                 $this->in_registration = 
false;
   546                 if ($this->in_availability) {
   547                     $this->course_obj->setActivationStart((
int) trim($this->cdata));
   549                 if ($this->in_registration) {
   550                     $this->course_obj->setSubscriptionStart((
int) trim($this->cdata));
   552                 if ($this->in_period) {
   553                     if ((
int) $this->cdata) {
   554                         if ($this->in_period_with_time) {
   555                             $this->period_start = new \ilDateTime((
int) $this->cdata, 
IL_CAL_UNIX);
   557                             $this->period_start = new \ilDate((
int) $this->cdata, 
IL_CAL_UNIX);
   564                 if ($this->in_availability) {
   565                     $this->course_obj->setActivationEnd((
int) trim($this->cdata));
   567                 if ($this->in_registration) {
   568                     $this->course_obj->setSubscriptionEnd((
int) trim($this->cdata));
   570                 if ($this->in_period) {
   571                     if ((
int) $this->cdata) {
   572                         if ($this->in_period_with_time) {
   573                             $this->period_end = new \ilDateTime((
int) $this->cdata, 
IL_CAL_UNIX);
   575                             $this->period_end = new \ilDate((
int) $this->cdata, 
IL_CAL_UNIX);
   582                 $this->course_obj->setSyllabus(trim($this->cdata));
   586                 $this->course_obj->setTargetGroup(trim($this->cdata));
   589             case 'ImportantInformation':
   590                 $this->course_obj->setImportantInformation(trim($this->cdata));
   594                 $this->course_obj->setViewMode((
int) trim($this->cdata));
   598                 $this->course_obj->setContactName(trim($this->cdata));
   601             case 'Responsibility':
   602                 $this->course_obj->setContactResponsibility(trim($this->cdata));
   606                 $this->course_obj->setContactPhone(trim($this->cdata));
   610                 $this->course_obj->setContactEmail(trim($this->cdata));
   614                 $this->course_obj->setContactConsultation(trim($this->cdata));
   618                 $this->course_obj->setSubscriptionPassword(trim($this->cdata));
   622                 $this->in_meta_data = 
false;
   623                 parent::handlerEndTag($a_xml_parser, $a_name);
   626             case 'ContainerSetting':
   627                 if ($this->current_container_setting) {
   629                         $this->course_obj->getId(),
   637                 $this->in_period = 
false;
   639                     $this->course_obj->setCoursePeriod($this->period_start, $this->period_end);
   641                     $this->log->warning(
'invalid course period given');
   645             case 'WaitingListAutoFill':
   646                 $this->course_obj->setWaitingListAutoFill((
bool) $this->cdata);
   649             case 'CancellationEnd':
   650                 if ((
int) $this->cdata) {
   651                     $this->course_obj->setCancellationEnd(
new ilDate((
int) $this->cdata, 
IL_CAL_UNIX));
   656                 if ((
int) $this->cdata) {
   657                     $this->course_obj->setSubscriptionMinMembers((
int) $this->cdata);
   662                 $this->course_obj->setTimingMode((
int) $this->cdata);
   665             case 'StatusDetermination':
   666                 $this->course_obj->setStatusDetermination((
int) $this->cdata);
   669             case 'MailToMembersType':
   670                 $this->course_obj->setMailToMembersType((
int) $this->cdata);
   681         if ($this->in_meta_data) {
   682             parent::handlerCharacterData($a_xml_parser, $a_data);
   684         if ($a_data != 
"\n") {
   686             $a_data = preg_replace(
"/\t+/", 
" ", $a_data);
   688             $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)
 
const IL_CRS_SUBSCRIPTION_CONFIRMATION
 
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins 
 
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)