25 include_once(
"Services/MetaData/classes/class.ilMDSaxParser.php");
26 include_once(
"Services/MetaData/classes/class.ilMD.php");
27 include_once(
'Services/Utilities/interfaces/interface.ilSaxSubsetParser.php');
28 include_once(
'Services/Utilities/classes/class.ilSaxController.php');
29 include_once
'Modules/Course/classes/class.ilCourseParticipants.php';
30 include_once
'Modules/Course/classes/class.ilCourseWaitingList.php';
31 include_once
'Modules/Course/classes/class.ilCourseConstants.php';
74 $this->log = $DIC->logger()->crs();
76 $this->course_obj = $a_course_obj;
80 $this->course_members_array = array_flip($this->course_members->getParticipants());
82 $this->md_obj =
new ilMD($this->course_obj->getId(), 0,
'crs');
96 $this->sax_controller->setHandlers($a_xml_parser);
97 $this->sax_controller->setDefaultElementHandler($this);
99 include_once(
'Services/AdvancedMetaData/classes/class.ilAdvancedMDValueParser.php');
100 $this->sax_controller->setElementHandler(
118 if ($this->in_meta_data) {
119 parent::handlerBeginTag($a_xml_parser, $a_name, $a_attribs);
126 if (strlen($a_attribs[
'importId'])) {
127 $this->log->write(
"CourseXMLParser: importId = " . $a_attribs[
'importId']);
128 $this->course_obj->setImportId($a_attribs[
'importId']);
131 if (strlen($a_attribs[
'showMembers'])) {
132 $this->course_obj->setShowMembers(
133 $a_attribs[
'showMembers'] ==
'Yes' ?
true :
false 139 if ($id_data = $this->
__parseId($a_attribs[
'id'])) {
140 if ($id_data[
'local'] or $id_data[
'imported']) {
147 if ($id_data = $this->
__parseId($a_attribs[
'id'])) {
148 if ($id_data[
'local'] or $id_data[
'imported']) {
155 if ($id_data = $this->
__parseId($a_attribs[
'id'])) {
156 if ($id_data[
'local'] or $id_data[
'imported']) {
163 if ($id_data = $this->
__parseId($a_attribs[
'id'])) {
164 if ($id_data[
'local'] or $id_data[
'imported']) {
171 if ($id_data = $this->
__parseId($a_attribs[
'id'])) {
172 if ($id_data[
'local'] or $id_data[
'imported']) {
179 if ($id_data = $this->
__parseId($a_attribs[
'id'])) {
180 if ($id_data[
'local'] or $id_data[
'imported']) {
181 $this->course_obj->setOwner($id_data[
'usr_id']);
182 $this->course_obj->updateOwner();
189 $this->in_settings =
true;
192 $this->in_availability =
true;
196 if ($this->in_availability) {
197 $this->course_obj->setOfflineStatus(
true);
198 } elseif ($this->in_registration) {
205 if ($this->in_availability) {
206 $this->course_obj->setOfflineStatus(
false);
207 } elseif ($this->in_registration) {
212 case 'TemporarilyAvailable':
213 if ($this->in_availability) {
214 $this->course_obj->setOfflineStatus(
false);
215 } elseif ($this->in_registration) {
236 case 'Responsibility':
243 $this->in_registration =
true;
245 switch ($a_attribs[
'registrationType']) {
259 $this->course_obj->setSubscriptionMaxMembers((
int) $a_attribs[
'maxMembers']);
260 $this->course_obj->enableSubscriptionMembershipLimitation($this->course_obj->getSubscriptionMaxMembers() > 0);
261 $this->course_obj->setSubscriptionNotify($a_attribs[
'notification'] ==
'Yes' ?
true :
false);
262 $this->course_obj->enableWaitingList($a_attribs[
'waitingList'] ==
'Yes' ?
true :
false);
266 include_once
'./Services/Container/classes/class.ilContainerSortingSettings.php';
270 $this->course_obj->setOrderType(
280 $this->in_meta_data =
true;
281 parent::handlerBeginTag($a_xml_parser, $a_name, $a_attribs);
284 case 'ContainerSetting':
285 $this->current_container_setting = $a_attribs[
'id'];
289 $this->in_period =
true;
290 $this->in_period_with_time = $a_attribs[
'withTime'];
293 case 'WaitingListAutoFill':
294 case 'CancellationEnd':
299 if (array_key_exists(
'status', $a_attribs)) {
300 $this->course_obj->setAutoNotification((
bool) $a_attribs[
'status']);
316 if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] ==
'Attach') {
318 if (!array_key_exists($id_data[
'usr_id'], $this->course_members_array)) {
320 $this->course_members->add($id_data[
'usr_id'],
IL_CRS_MEMBER);
321 if ($a_attribs[
'blocked'] ==
'Yes') {
322 $this->course_members->updateBlocked($id_data[
'usr_id'],
true);
324 if ($a_attribs[
'passed'] ==
'Yes') {
325 $this->course_members->updatePassed($id_data[
'usr_id'],
true);
327 $this->course_members_array[$id_data[
'usr_id']] =
"added";
330 if ($a_attribs[
'blocked'] ==
'Yes') {
331 $this->course_members->updateBlocked($id_data[
'usr_id'],
true);
333 if ($a_attribs[
'passed'] ==
'Yes') {
334 $this->course_members->updatePassed($id_data[
'usr_id'],
true);
337 } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] ==
'Detach' && $this->course_members->isMember($id_data[
'usr_id'])) {
339 $this->course_members->delete($id_data[
'usr_id']);
355 $rbacadmin = $DIC[
'rbacadmin'];
357 if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] ==
'Attach') {
359 if (!array_key_exists($id_data[
'usr_id'], $this->course_members_array)) {
361 $this->course_members->add($id_data[
'usr_id'],
IL_CRS_ADMIN);
362 if ($a_attribs[
'notification'] ==
'Yes') {
363 $this->course_members->updateNotification($id_data[
'usr_id'],
true);
365 if ($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 ($a_attribs[
'notification'] ==
'Yes') {
376 $this->course_members->updateNotification($id_data[
'usr_id'],
true);
378 if ($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']);
404 if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] ==
'Attach') {
406 if (!array_key_exists($id_data[
'usr_id'], $this->course_members_array)) {
408 $this->course_members->add($id_data[
'usr_id'],
IL_CRS_TUTOR);
409 if ($a_attribs[
'notification'] ==
'Yes') {
410 $this->course_members->updateNotification($id_data[
'usr_id'],
true);
412 if ($a_attribs[
'passed'] ==
'Yes') {
413 $this->course_members->updatePassed($id_data[
'usr_id'],
true);
415 if (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] ==
'Yes') {
417 $this->course_members->updateContact($id_data[
'usr_id'],
true);
419 $this->course_members_array[$id_data[
'usr_id']] =
"added";
421 if ($a_attribs[
'notification'] ==
'Yes') {
422 $this->course_members->updateNotification($id_data[
'usr_id'],
true);
424 if ($a_attribs[
'passed'] ==
'Yes') {
425 $this->course_members->updatePassed($id_data[
'usr_id'],
true);
427 if (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] ==
'Yes') {
428 $this->course_members->updateContact($id_data[
'usr_id'],
true);
429 } elseif (isset($a_attribs[
'contact']) && $a_attribs[
'contact'] ==
'No') {
430 $this->course_members->updateContact($id_data[
'usr_id'],
false);
432 $this->course_members->updateBlocked($id_data[
'usr_id'],
false);
434 } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] ==
'Detach' && $this->course_members->isTutor($id_data[
'usr_id'])) {
436 $this->course_members->delete($id_data[
'usr_id']);
450 if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] ==
'Attach') {
452 if (!$this->course_members->isSubscriber($id_data[
'usr_id'])) {
454 $this->course_members->addSubscriber($id_data[
'usr_id']);
456 $this->course_members->updateSubscriptionTime($id_data[
'usr_id'], $a_attribs[
'subscriptionTime']);
457 } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] ==
'Detach' && $this->course_members->isSubscriber($id_data[
'usr_id'])) {
459 $this->course_members->deleteSubscriber($id_data[
"usr_id"]);
471 if (!isset($a_attribs[
'action']) || $a_attribs[
'action'] ==
'Attach') {
473 if (!$this->course_waiting_list->isOnList($id_data[
'usr_id'])) {
475 $this->course_waiting_list->addToList($id_data[
'usr_id']);
477 $this->course_waiting_list->updateSubscriptionTime($id_data[
'usr_id'], $a_attribs[
'subscriptionTime']);
478 } elseif (isset($a_attribs[
'action']) && $a_attribs[
'action'] ==
'Detach' && $this->course_waiting_list->isOnList($id_data[
'usr_id'])) {
480 $this->course_waiting_list->removeFromList($id_data[
'usr_id']);
493 if ($this->in_meta_data) {
494 parent::handlerEndTag($a_xml_parser, $a_name);
500 $this->log->write(
'CourseXMLParser: import_id = ' . $this->course_obj->getImportId());
501 $this->course_obj->MDUpdateListener(
'General');
502 $this->course_obj->update();
503 $this->adv_md_handler->save();
507 $this->in_settings =
false;
511 $this->in_availability =
false;
515 $this->in_registration =
false;
520 if ($this->in_availability) {
521 $this->course_obj->setActivationStart(trim($this->cdata));
523 if ($this->in_registration) {
524 $this->course_obj->setSubscriptionStart(trim($this->cdata));
526 if ($this->in_period) {
527 if ((
int) $this->cdata) {
528 if ($this->in_period_with_time) {
529 $this->period_start = new \ilDateTime((
int) $this->cdata,
IL_CAL_UNIX);
531 $this->period_start = new \ilDate((
int) $this->cdata,
IL_CAL_UNIX);
538 if ($this->in_availability) {
539 $this->course_obj->setActivationEnd(trim($this->cdata));
541 if ($this->in_registration) {
542 $this->course_obj->setSubscriptionEnd(trim($this->cdata));
544 if ($this->in_period) {
545 if ((
int) $this->cdata) {
546 if ($this->in_period_with_time) {
547 $this->period_end = new \ilDateTime((
int) $this->cdata,
IL_CAL_UNIX);
550 $this->period_end = new \ilDate((
int) $this->cdata,
IL_CAL_UNIX);
557 $this->course_obj->setSyllabus(trim($this->cdata));
561 $this->course_obj->setTargetGroup(trim($this->cdata));
564 case 'ImportantInformation':
565 $this->course_obj->setImportantInformation(trim($this->cdata));
569 $this->course_obj->setViewMode(trim($this->cdata));
573 $this->course_obj->setContactName(trim($this->cdata));
576 case 'Responsibility':
577 $this->course_obj->setContactResponsibility(trim($this->cdata));
581 $this->course_obj->setContactPhone(trim($this->cdata));
585 $this->course_obj->setContactEmail(trim($this->cdata));
589 $this->course_obj->setContactConsultation(trim($this->cdata));
593 $this->course_obj->setSubscriptionPassword(trim($this->cdata));
597 $this->in_meta_data =
false;
598 parent::handlerEndTag($a_xml_parser, $a_name);
601 case 'ContainerSetting':
602 if ($this->current_container_setting) {
604 $this->course_obj->getId(),
612 $this->in_period =
false;
614 $this->course_obj->setCoursePeriod($this->period_start, $this->period_end);
616 $this->log->warning(
'invalid course period given');
620 case 'WaitingListAutoFill':
621 $this->course_obj->setWaitingListAutoFill($this->cdata);
624 case 'CancellationEnd':
625 if ((
int) $this->cdata) {
626 $this->course_obj->setCancellationEnd(
new ilDate((
int) $this->cdata,
IL_CAL_UNIX));
631 if ((
int) $this->cdata) {
632 $this->course_obj->setSubscriptionMinMembers((
int) $this->cdata);
637 $this->course_obj->setViewMode((
int) $this->cdata);
641 $this->course_obj->setTimingMode((
int) $this->cdata);
658 if ($this->in_meta_data) {
659 parent::handlerCharacterData($a_xml_parser, $a_data);
661 if ($a_data !=
"\n") {
663 $a_data = preg_replace(
"/\t+/",
" ", $a_data);
665 $this->cdata .= $a_data;
676 $fields = explode(
'_', $a_id);
678 if (!is_array($fields) or
679 $fields[0] !=
'il' or
680 !is_numeric($fields[1]) or
681 $fields[2] !=
'usr' or
682 !is_numeric($fields[3])) {
686 return array(
'imported' =>
true,
691 return array(
'imported' =>
false,
693 'usr_id' => $fields[3]);
static _lookupLogin($a_user_id)
lookup login
__construct($a_course_obj, $a_xml_file='')
Constructor.
const IL_CRS_SUBSCRIPTION_LIMITED
static _importContainerSortingSettings($attibs, $obj_id)
sorting import for all container objects
handleMember($a_attribs, $id_data)
attach or detach user/member/admin from course member
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
setHandlers($a_xml_parser)
set event handlers
handleAdmin($a_attribs, $id_data)
attach or detach admin from course member
$current_container_setting
const IL_CRS_SUBSCRIPTION_CONFIRMATION
handleWaitingList($a_attribs, $id_data)
attach or detach members from waitinglist
static _getImportedUserId($i2_id)
handlerBeginTag($a_xml_parser, $a_name, $a_attribs)
handler for begin of element
handlerEndTag($a_xml_parser, $a_name)
handler for end of element
const IL_CRS_SUBSCRIPTION_PASSWORD
const IL_CRS_SUBSCRIPTION_UNLIMITED
handleTutor($a_attribs, $id_data)
attach or detach admin from course member
const IL_CRS_ADMIN
Base class for course and group participants.
Interface definition for sax subset parsers.
Controller class for sax element handlers.
__construct(Container $dic, ilPlugin $plugin)
static _writeImportId($a_obj_id, $a_import_id)
write import id to db (static)
static _writeContainerSetting($a_id, $a_keyword, $a_value)
const IL_CRS_SUBSCRIPTION_DIRECT
static getInstanceByObjId($a_obj_id)
Get singleton instance.
handlerCharacterData($a_xml_parser, $a_data)
handler for character data
handleSubscriber($a_attribs, $id_data)
attach or detach members from subscribers
const IL_CRS_SUBSCRIPTION_DEACTIVATED