/** * check condition * @param type $a_exc_id * @param type $a_operator * @param type $a_value * @param type $a_usr_id * @return boolean */ public static function checkCondition($a_exc_id, $a_operator, $a_value, $a_usr_id) { include_once './Services/AccessControl/classes/class.ilConditionHandler.php'; include_once './Modules/Exercise/classes/class.ilExerciseMembers.php'; switch ($a_operator) { case ilConditionHandler::OPERATOR_PASSED: if (ilExerciseMembers::_lookupStatus($a_exc_id, $a_usr_id) == "passed") { return true; } else { return false; } break; case ilConditionHandler::OPERATOR_FAILED: return ilExerciseMembers::_lookupStatus($a_exc_id, $a_usr_id) == 'failed'; default: return true; } return true; }
public function removeTeamMemberObject() { global $ilUser; $ids = $_POST["id"]; if (!sizeof($ids)) { ilUtil::sendFailure($this->lng->txt("select_one"), true); $this->ctrl->redirect($this, "submissionScreenTeam"); } $team_id = $this->ass->getTeamId($ilUser->getId()); $members = $this->ass->getTeamMembers($team_id); $team_deleted = false; if (sizeof($members) <= sizeof($ids)) { if (sizeof($members) == 1 && $members[0] == $ilUser->getId()) { $team_deleted = true; } else { ilUtil::sendFailure($this->lng->txt("exc_team_at_least_one"), true); $this->ctrl->redirect($this, "submissionScreenTeam"); } } foreach ($ids as $user_id) { $this->ass->removeTeamMember($team_id, $user_id, $this->ref_id); ilExAssignment::updateStatusReturnedForUser($this->ass->getId(), $user_id, 0); ilExerciseMembers::_writeReturned($this->object->getId(), $user_id, 0); // :TODO: log, notification } ilUtil::sendSuccess($this->lng->txt("settings_saved"), true); if (!$team_deleted) { $this->ctrl->redirect($this, "submissionScreenTeam"); } else { $this->ctrl->redirect($this, "showOverview"); } }
/** * Get members for object * @param int $a_obj_id * @return array */ protected static function getMembers($a_obj_id) { include_once './Modules/Exercise/classes/class.ilExerciseMembers.php'; return ilExerciseMembers::_getMembers($a_obj_id); }
/** * Get participant ids for given object * * @param int $a_ref_id * @return array */ public static function getParticipantsForObject($a_ref_id) { global $tree; $obj_id = ilObject::_lookupObjectId($a_ref_id); $obj_type = ilObject::_lookupType($obj_id); // try to get participants from (parent) course/group switch ($obj_type) { case "crs": include_once "Modules/Course/classes/class.ilCourseParticipants.php"; $member_obj = ilCourseParticipants::_getInstanceByObjId($obj_id); return $member_obj->getMembers(); case "grp": include_once "Modules/Group/classes/class.ilGroupParticipants.php"; $member_obj = ilGroupParticipants::_getInstanceByObjId($obj_id); return $member_obj->getMembers(); default: // walk path to find course or group object and use members of that object $path = $tree->getPathId($a_ref_id); array_pop($path); foreach (array_reverse($path) as $path_ref_id) { $type = ilObject::_lookupType($path_ref_id, true); if ($type == "crs" || $type == "grp") { return self::getParticipantsForObject($path_ref_id); } } break; } $a_users = null; // no participants possible: use tracking/object data where possible switch ($obj_type) { case "sahs": include_once "./Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php"; $subtype = ilObjSAHSLearningModule::_lookupSubType($obj_id); if ($subtype == "scorm2004") { // based on cmi_node/cp_node, used for scorm tracking data views include_once "./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php"; $mod = new ilObjSCORM2004LearningModule($obj_id, false); $all = $mod->getTrackedUsers(""); if ($all) { $a_users = array(); foreach ($all as $item) { $a_users[] = $item["user_id"]; } } } else { include_once "./Modules/ScormAicc/classes/SCORM/class.ilObjSCORMTracking.php"; $a_users = ilObjSCORMTracking::_getTrackedUsers($obj_id); } break; case "exc": include_once "./Modules/Exercise/classes/class.ilExerciseMembers.php"; include_once "./Modules/Exercise/classes/class.ilObjExercise.php"; $exc = new ilObjExercise($obj_id, false); $members = new ilExerciseMembers($exc); $a_users = $members->getMembers(); break; case "tst": include_once "./Services/Tracking/classes/class.ilLPStatusTestFinished.php"; $a_users = ilLPStatusTestFinished::getParticipants($obj_id); break; default: // no sensible data: return null break; } return $a_users; }
/** * Get multi feedback files (of uploader) * * @param int $a_user_id user id of uploader * @return array array of user files (keys: lastname, firstname, user_id, login, file) */ function getMultiFeedbackFiles($a_user_id = 0) { global $ilUser; if ($a_user_id == 0) { $a_user_id = $ilUser->getId(); } $mf_files = array(); // get members $exc = new ilObjExercise($this->getExerciseId(), false); include_once "./Modules/Exercise/classes/class.ilExerciseMembers.php"; $exmem = new ilExerciseMembers($exc); $mems = $exmem->getMembers(); // read mf directory include_once "./Modules/Exercise/classes/class.ilFSStorageExercise.php"; $storage = new ilFSStorageExercise($this->getExerciseId(), $this->getId()); $mfu = $storage->getMultiFeedbackUploadPath($ilUser->getId()); // get subdir that starts with multi_feedback $subdirs = ilUtil::getDir($mfu); $subdir = "notfound"; foreach ($subdirs as $s => $j) { if ($j["type"] == "dir" && substr($s, 0, 14) == "multi_feedback") { $subdir = $s; } } $items = ilUtil::getDir($mfu . "/" . $subdir); foreach ($items as $k => $i) { // check directory if ($i["type"] == "dir" && !in_array($k, array(".", ".."))) { // check if valid member id is given $parts = explode("_", $i["entry"]); $user_id = (int) $parts[count($parts) - 1]; if (in_array($user_id, $mems)) { // read dir of user $name = ilObjUser::_lookupName($user_id); $files = ilUtil::getDir($mfu . "/" . $subdir . "/" . $k); foreach ($files as $k2 => $f) { // append files to array if ($f["type"] == "file" && substr($k2, 0, 1) != ".") { $mf_files[] = array("lastname" => $name["lastname"], "firstname" => $name["firstname"], "login" => $name["login"], "user_id" => $name["user_id"], "full_path" => $mfu . "/" . $subdir . "/" . $k . "/" . $k2, "file" => $k2); } } } } } return $mf_files; }
/** * Create member status record for a new assignment for all participants */ static function createNewAssignmentRecords($a_ass_id, $a_exc) { global $ilDB; include_once "./Modules/Exercise/classes/class.ilExerciseMembers.php"; $exmem = new ilExerciseMembers($a_exc); $mems = $exmem->getMembers(); foreach ($mems as $mem) { $ilDB->replace("exc_mem_ass_status", array("ass_id" => array("integer", $a_ass_id), "usr_id" => array("integer", $mem)), array("status" => array("text", "notgraded"))); } }
/** * Returns an array containing all variables and values which can be exchanged in the certificate * The values should be calculated from real data. The $params parameter array should contain all * necessary information to calculate the values. * * @param array $params An array of parameters to calculate the certificate parameter values * @return array The certificate variables */ public function getCertificateVariablesForPresentation($params = array()) { global $lng; $user_id = $params["user_id"]; include_once 'Services/Tracking/classes/class.ilLPMarks.php'; $mark = ilLPMarks::_lookupMark($user_id, $this->object->getId()); include_once 'Modules/Exercise/classes/class.ilExerciseMembers.php'; $status = ilExerciseMembers::_lookupStatus($this->object->getId(), $user_id); $user_data = ilObjUser::_lookupFields($user_id); $completion_date = $this->getUserCompletionDate($user_id); $vars = $this->getBaseVariablesForPresentation($user_data, null, $completion_date); $vars["RESULT_PASSED"] = ilUtil::prepareFormOutput($lng->txt("exc_" . $status)); $vars["RESULT_MARK"] = ilUtil::prepareFormOutput($mark); $vars["EXERCISE_TITLE"] = ilUtil::prepareFormOutput($this->object->getTitle()); foreach ($vars as $id => $caption) { $insert_tags["[" . $id . "]"] = $caption; } return $insert_tags; }
/** * Check if given user has certificate to show/download * * @param int $a_user_id * @return bool */ function hasUserCertificate($a_user_id) { // show certificate? include_once "Services/Certificate/classes/class.ilCertificate.php"; if (ilCertificate::isActive() && ilCertificate::isObjectActive($this->getId())) { $certificate_visible = $this->getCertificateVisibility(); // if not never if ($certificate_visible != 2) { // if passed only include_once 'Modules/Exercise/classes/class.ilExerciseMembers.php'; $status = ilExerciseMembers::_lookupStatus($this->getId(), $a_user_id); if ($certificate_visible == 1 && $status == "passed") { return true; } else { if ($certificate_visible == 0 && $status != "notgraded") { return true; } } } } return false; }
/** * Fill table row */ protected function fillRow($d) { global $lng, $ilCtrl; $user_id = $d["user_id"]; foreach ($this->ass_data as $ass) { // grade $this->tpl->setCurrentBlock("grade"); $status = ilExAssignment::lookupStatusOfUser($ass["id"], $user_id); $this->tpl->setVariable("SEL_" . strtoupper($status), ' selected="selected" '); $this->tpl->setVariable("TXT_NOTGRADED", $lng->txt("exc_notgraded")); $this->tpl->setVariable("TXT_PASSED", $lng->txt("exc_passed")); $this->tpl->setVariable("TXT_FAILED", $lng->txt("exc_failed")); switch ($status) { case "passed": $pic = "scorm/passed.svg"; break; case "failed": $pic = "scorm/failed.svg"; break; default: $pic = "scorm/not_attempted.svg"; break; } $this->tpl->setVariable("IMG_STATUS", ilUtil::getImagePath($pic)); $this->tpl->setVariable("ALT_STATUS", $lng->txt("exc_" . $status)); // mark $mark = ilExAssignment::lookupMarkOfUser($ass["id"], $user_id); $this->tpl->setVariable("VAL_ONLY_MARK", $mark); $this->tpl->parseCurrentBlock(); } // exercise total // mark input $this->tpl->setCurrentBlock("mark_input"); $this->tpl->setVariable("TXT_MARK", $lng->txt("exc_mark")); $this->tpl->setVariable("NAME_MARK", "mark[" . $user_id . "]"); include_once 'Services/Tracking/classes/class.ilLPMarks.php'; $mark = ilLPMarks::_lookupMark($user_id, $this->exc_id); $this->tpl->setVariable("VAL_MARK", ilUtil::prepareFormOutput($mark)); $this->tpl->parseCurrentBlock(); $this->tpl->setCurrentBlock("grade"); $status = ilExerciseMembers::_lookupStatus($this->exc_id, $user_id); $this->tpl->setVariable("SEL_" . strtoupper($status), ' selected="selected" '); switch ($status) { case "passed": $pic = "scorm/passed.svg"; break; case "failed": $pic = "scorm/failed.svg"; break; default: $pic = "scorm/not_attempted.svg"; break; } $this->tpl->setVariable("IMG_STATUS", ilUtil::getImagePath($pic)); $this->tpl->setVariable("ALT_STATUS", $lng->txt("exc_" . $status)); // mark /*$this->tpl->setVariable("TXT_MARK", $lng->txt("exc_mark")); $this->tpl->setVariable("NAME_MARK", "mark[".$d["id"]."]"); $mark = ilExAssignment::lookupMarkOfUser($ass["id"], $user_id); $this->tpl->setVariable("VAL_MARK", ilUtil::prepareFormOutput($mark));*/ $this->tpl->parseCurrentBlock(); // name $this->tpl->setVariable("TXT_NAME", $d["lastname"] . ", " . $d["firstname"] . " [" . $d["login"] . "]"); $this->tpl->setVariable("VAL_ID", $user_id); $ilCtrl->setParameter($this->parent_obj, "part_id", $user_id); $this->tpl->setVariable("LINK_NAME", $ilCtrl->getLinkTarget($this->parent_obj, "showParticipant")); // comment $this->tpl->setVariable("ID_COMMENT", $user_id); $c = ilLPMarks::_lookupComment($user_id, $this->exc_id); $this->tpl->setVariable("VAL_COMMENT", ilUtil::prepareFormOutput($c)); }
/** * create xml for files per assignment * * @param integer $ex_id exercise id * @param array $assignments assignment id */ private function handleAssignmentMembers($ex_id, $assignment_id) { $this->xmlStartTag("Members"); include_once "./Modules/Exercise/classes/class.ilExerciseMembers.php"; $members = ilExerciseMembers::_getMembers($ex_id); if (count($members)) { foreach ($members as $member_id) { $this->xmlStartTag("Member", array("usr_id" => "il_" . IL_INST_ID . "_usr_" . $member_id)); $this->attachMarking($member_id, $assignment_id); $this->xmlEndTag("Member"); } } $this->xmlEndTag("Members"); }
/** * create xml for files per assignment * * @param integer $ex_id exercise id * @param array $assignments assignment id */ private function handleAssignmentMembers($ex_id, $assignments) { $this->xmlStartTag("Members"); include_once "./Modules/Exercise/classes/class.ilExerciseMembers.php"; $members = ilExerciseMembers::_getMembers($ex_id); if (count($members)) { foreach ($members as $member_id) { $this->xmlStartTag("Member", array("usr_id" => "il_" . IL_INST_ID . "_usr_" . $member_id)); if (count($assignments) > 0) { foreach ($assignments as $assignment) { $this->attachMarking($member_id, $assignment["id"]); //todo: handle only first assignment, must be fixed when for dtd break; } } $this->xmlEndTag("Member"); } } $this->xmlEndTag("Members"); }
/** * Get members for object * @param int $a_obj_id * @return array */ protected static function getMembers($a_obj_id) { global $ilObjDataCache; switch ($ilObjDataCache->lookupType($a_obj_id)) { case 'crs': include_once 'Modules/Course/classes/class.ilCourseParticipants.php'; $member_obj = ilCourseParticipants::_getInstanceByObjId($a_obj_id); return $member_obj->getMembers(); case 'exc': include_once './Modules/Exercise/classes/class.ilExerciseMembers.php'; return ilExerciseMembers::_getMembers($a_obj_id); case 'grp': include_once './Modules/Group/classes/class.ilObjGroup.php'; return ilObjGroup::_getMembers($a_obj_id); } return array(); }
/** * update member object according to given action * * @param int $user_id * @param string $action can be Attach or Detach */ private function updateMember($user_id, $action) { if (!is_int($user_id) || $user_id <= 0) { return; } $memberObject = new ilExerciseMembers($this->exercise); if ($action == "Attach" && !$memberObject->isAssigned($user_id)) { $memberObject->assignMember($user_id); } if ($action == "Detach" && $memberObject->isAssigned($user_id)) { $memberObject->deassignMember($user_id); } }