/** * checks wether a user may invoke a command or not * (this method is called by ilAccessHandler::checkAccess) * * @param string $a_cmd command (not permission!) * @param string $a_permission permission * @param int $a_ref_id reference id * @param int $a_obj_id object id * @param int $a_user_id user id (if not provided, current user is taken) * * @return boolean true, if everything is ok */ function _checkAccess($a_cmd, $a_permission, $a_ref_id, $a_obj_id, $a_user_id = "") { global $ilUser, $lng, $rbacsystem, $ilAccess, $ilias; if ($a_user_id == "") { $a_user_id = $ilUser->getId(); } if ($ilUser->getId() == $a_user_id) { $participants = ilCourseParticipant::_getInstanceByObjId($a_obj_id, $a_user_id); } else { $participants = ilCourseParticipants::_getInstanceByObjId($a_obj_id); } switch ($a_cmd) { case "view": if ($participants->isBlocked($a_user_id) and $participants->isAssigned($a_user_id)) { $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("crs_status_blocked")); return false; } break; case 'leave': // Regular member if ($a_permission == 'leave') { include_once './Modules/Course/classes/class.ilCourseParticipants.php'; if (!$participants->isAssigned($a_user_id)) { return false; } } // Waiting list if ($a_permission == 'join') { include_once './Modules/Course/classes/class.ilCourseWaitingList.php'; if (!ilCourseWaitingList::_isOnList($a_user_id, $a_obj_id)) { return false; } return true; } break; } switch ($a_permission) { case 'visible': $visible = null; $active = self::_isActivated($a_obj_id, $visible); $tutor = $rbacsystem->checkAccessOfUser($a_user_id, 'write', $a_ref_id); if (!$active) { $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("offline")); } if (!$tutor and !$active && !$visible) { return false; } break; case 'read': $tutor = $rbacsystem->checkAccessOfUser($a_user_id, 'write', $a_ref_id); if ($tutor) { return true; } $active = self::_isActivated($a_obj_id); if (!$active) { $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("offline")); return false; } if ($participants->isBlocked($a_user_id) and $participants->isAssigned($a_user_id)) { $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("crs_status_blocked")); return false; } break; case 'join': if (!self::_registrationEnabled($a_obj_id)) { return false; } include_once './Modules/Course/classes/class.ilCourseWaitingList.php'; if (ilCourseWaitingList::_isOnList($a_user_id, $a_obj_id)) { return false; } if ($participants->isAssigned($a_user_id)) { return false; } break; } return true; }
/** * Get item properties * * @return array array of property arrays: * "alert" (boolean) => display as an alert property (usually in red) * "property" (string) => property name * "value" (string) => property value */ function getProperties() { global $lng, $ilUser; $props = parent::getProperties(); // offline include_once 'Modules/Course/classes/class.ilObjCourseAccess.php'; if (ilObjCourseAccess::_isOffline($this->obj_id)) { $showRegistrationInfo = false; $props[] = array("alert" => true, "property" => $lng->txt("status"), "value" => $lng->txt("offline")); } // blocked include_once 'Modules/Course/classes/class.ilCourseParticipant.php'; $members = ilCourseParticipant::_getInstanceByObjId($this->obj_id, $ilUser->getId()); if ($members->isBlocked($ilUser->getId()) and $members->isAssigned($ilUser->getId())) { $props[] = array("alert" => true, "property" => $lng->txt("member_status"), "value" => $lng->txt("crs_status_blocked")); } // pending subscription include_once 'Modules/Course/classes/class.ilCourseParticipants.php'; if (ilCourseParticipants::_isSubscriber($this->obj_id, $ilUser->getId())) { $props[] = array("alert" => true, "property" => $lng->txt("member_status"), "value" => $lng->txt("crs_status_pending")); } include_once './Modules/Course/classes/class.ilObjCourseAccess.php'; $info = ilObjCourseAccess::lookupRegistrationInfo($this->obj_id); if ($info['reg_info_list_prop']) { $props[] = array('alert' => false, 'newline' => true, 'property' => $info['reg_info_list_prop']['property'], 'value' => $info['reg_info_list_prop']['value']); } if ($info['reg_info_list_prop_limit']) { $props[] = array('alert' => false, 'newline' => false, 'property' => $info['reg_info_list_prop_limit']['property'], 'propertyNameVisible' => strlen($info['reg_info_list_prop_limit']['property']) ? true : false, 'value' => $info['reg_info_list_prop_limit']['value']); } // waiting list include_once './Modules/Course/classes/class.ilCourseWaitingList.php'; if (ilCourseWaitingList::_isOnList($ilUser->getId(), $this->obj_id)) { $props[] = array("alert" => true, "property" => $lng->txt('member_status'), "value" => $lng->txt('on_waiting_list')); } // check for certificates include_once "./Modules/Course/classes/class.ilCourseCertificateAdapter.php"; if (ilCourseCertificateAdapter::_hasUserCertificate($ilUser->getId(), $this->obj_id)) { $lng->loadLanguageModule('certificate'); $cmd_link = "ilias.php?baseClass=ilRepositoryGUI&ref_id=" . $this->ref_id . "&cmd=deliverCertificate"; $props[] = array("alert" => false, "property" => $lng->txt("passed"), "value" => '<a href="' . $cmd_link . '">' . $lng->txt("download_certificate") . '</a>'); } return $props; }
/** * Get tabs */ function getTabs(&$tabs_gui) { global $rbacsystem, $ilAccess, $ilUser, $lng, $ilHelp; $ilHelp->setScreenIdComponent("crs"); $this->ctrl->setParameter($this, "ref_id", $this->ref_id); if ($ilAccess->checkAccess('read', '', $this->ref_id)) { $tabs_gui->addTab('view_content', $lng->txt("content"), $this->ctrl->getLinkTarget($this, '')); } // learning objectives if ($ilAccess->checkAccess('write', '', $this->ref_id)) { include_once './Modules/Course/classes/class.ilCourseObjective.php'; if ($this->object->getViewMode() == IL_CRS_VIEW_OBJECTIVE or ilCourseObjective::_getCountObjectives($this->object->getId())) { $tabs_gui->addTarget('crs_objectives', $this->ctrl->getLinkTargetByClass('illoeditorgui', ''), 'illoeditorgui'); } } if ($ilAccess->checkAccess('visible', '', $this->ref_id)) { //$next_class = $this->ctrl->getNextClass($this); // this is not nice. tabs should be displayed in ilcoursegui // not via ilrepositorygui, then next_class == ilinfoscreengui // could be checked $force_active = strtolower($_GET["cmdClass"]) == "ilinfoscreengui" || strtolower($_GET["cmdClass"]) == "ilnotegui" ? true : false; $tabs_gui->addTarget("info_short", $this->ctrl->getLinkTargetByClass(array("ilobjcoursegui", "ilinfoscreengui"), "showSummary"), "infoScreen", "", "", $force_active); } if ($ilAccess->checkAccess('write', '', $this->ref_id)) { $force_active = strtolower($_GET["cmdClass"]) == "ilconditionhandlergui" && $_GET["item_id"] == "" ? true : false; $tabs_gui->addTarget("settings", $this->ctrl->getLinkTarget($this, "edit"), array("edit", "editMapSettings", "editCourseIcons", "listStructure"), "", "", $force_active); } $is_participant = ilCourseParticipants::_isParticipant($this->ref_id, $ilUser->getId()); include_once './Services/Mail/classes/class.ilMail.php'; $mail = new ilMail($GLOBALS['ilUser']->getId()); // member list if ($ilAccess->checkAccess('write', '', $this->ref_id)) { $tabs_gui->addTarget("members", $this->ctrl->getLinkTarget($this, "members"), "members", get_class($this)); } elseif ($this->object->getShowMembers() == $this->object->SHOW_MEMBERS_ENABLED and $is_participant) { $tabs_gui->addTarget("members", $this->ctrl->getLinkTarget($this, "membersGallery"), "members", get_class($this)); } elseif ($this->object->getMailToMembersType() == ilCourseConstants::MAIL_ALLOWED_ALL and $GLOBALS['rbacsystem']->checkAccess('internal_mail', $mail->getMailObjectReferenceId()) and $is_participant) { $tabs_gui->addTarget("members", $this->ctrl->getLinkTarget($this, "mailMembers"), "members", get_class($this)); } // learning progress include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php'; if (ilLearningProgressAccess::checkAccess($this->object->getRefId(), $is_participant)) { $tabs_gui->addTarget('learning_progress', $this->ctrl->getLinkTargetByClass(array('ilobjcoursegui', 'illearningprogressgui'), ''), '', array('illplistofobjectsgui', 'illplistofsettingsgui', 'illearningprogressgui', 'illplistofprogressgui')); } // license overview include_once "Services/License/classes/class.ilLicenseAccess.php"; if ($ilAccess->checkAccess('edit_permission', '', $this->ref_id) and ilLicenseAccess::_isEnabled()) { $tabs_gui->addTarget("licenses", $this->ctrl->getLinkTargetByClass('illicenseoverviewgui', ''), "", "illicenseoverviewgui"); } // lom meta data if ($ilAccess->checkAccess('write', '', $this->ref_id)) { $tabs_gui->addTarget("meta_data", $this->ctrl->getLinkTargetByClass(array('ilobjcoursegui', 'ilmdeditorgui'), 'listSection'), "", "ilmdeditorgui"); } if ($ilAccess->checkAccess('write', '', $this->object->getRefId())) { $tabs_gui->addTarget('export', $this->ctrl->getLinkTargetByClass('ilexportgui', ''), 'export', 'ilexportgui'); } if ($ilAccess->checkAccess('edit_permission', '', $this->ref_id)) { $tabs_gui->addTarget("perm_settings", $this->ctrl->getLinkTargetByClass(array(get_class($this), 'ilpermissiongui'), "perm"), array("perm", "info", "owner"), 'ilpermissiongui'); } if ($this->ctrl->getTargetScript() == "adm_object.php") { $tabs_gui->addTarget("show_owner", $this->ctrl->getLinkTarget($this, "owner"), "owner", get_class($this)); if ($this->tree->getSavedNodeData($this->ref_id)) { $tabs_gui->addTarget("trash", $this->ctrl->getLinkTarget($this, "trash"), "trash", get_class($this)); } } // Join/Leave if ($ilAccess->checkAccess('join', '', $this->ref_id) and !$this->object->getMemberObject()->isAssigned()) { include_once './Modules/Course/classes/class.ilCourseWaitingList.php'; if (ilCourseWaitingList::_isOnList($ilUser->getId(), $this->object->getId())) { $tabs_gui->addTab('leave', $this->lng->txt('membership_leave'), $this->ctrl->getLinkTargetByClass('ilcourseregistrationgui', 'show', '')); } else { $tabs_gui->addTarget("join", $this->ctrl->getLinkTargetByClass('ilcourseregistrationgui', "show"), 'show', ""); } } if ($ilAccess->checkAccess('leave', '', $this->object->getRefId()) and $this->object->getMemberObject()->isMember()) { $tabs_gui->addTarget("crs_unsubscribe", $this->ctrl->getLinkTarget($this, "unsubscribe"), 'leave', ""); } }