/** * Constructor */ function __construct($a_parent_obj, $a_parent_cmd, $a_exc, $a_mem_obj) { global $ilCtrl, $lng, $ilAccess, $lng; $this->exc = $a_exc; $this->exc_id = $this->exc->getId(); include_once "./Modules/Exercise/classes/class.ilExAssignment.php"; $this->setId("exc_grades_" . $this->exc_id); $this->mem_obj = $a_mem_obj; $mems = $this->mem_obj->getMembers(); $data = array(); foreach ($mems as $d) { $data[$d] = ilObjUser::_lookupName($d); $data[$d]["user_id"] = $d; } parent::__construct($a_parent_obj, $a_parent_cmd); $this->setData($data); $this->ass_data = ilExAssignment::getAssignmentDataOfExercise($this->exc_id); //var_dump($data); $this->setTitle($lng->txt("exc_grades")); $this->setTopCommands(true); //$this->setLimit(9999); // $this->addColumn("", "", "1", true); $this->addColumn($this->lng->txt("name"), "lastname"); $cnt = 1; foreach ($this->ass_data as $ass) { $ilCtrl->setParameter($this->parent_obj, "ass_id", $ass["id"]); $cnt_str = '<a href="' . $ilCtrl->getLinkTarget($this->parent_obj, "members") . '">' . $cnt . '</a>'; if ($ass["mandatory"]) { $this->addColumn("<u>" . $cnt_str . "</u>", "", "", false, "", $ass["title"] . " " . "(" . $lng->txt("exc_mandatory") . ")"); } else { $this->addColumn($cnt_str, "", "", false, "", $ass["title"]); } $cnt++; } $ilCtrl->setParameter($this->parent_obj, "ass_id", ""); $this->addColumn($this->lng->txt("exc_total_exc"), ""); $this->addColumn($this->lng->txt("exc_comment_for_learner"), "", "1%"); // $this->addColumn($this->lng->txt("exc_grading"), "solved_time"); // $this->addColumn($this->lng->txt("mail"), "feedback_time"); $this->setDefaultOrderField("lastname"); $this->setDefaultOrderDirection("asc"); $this->setEnableHeader(true); $this->setFormAction($ilCtrl->getFormAction($a_parent_obj)); $this->setRowTemplate("tpl.exc_grades_row.html", "Modules/Exercise"); //$this->disable("footer"); $this->setEnableTitle(true); // $this->setSelectAllCheckbox("assid"); // START PATCH RUBRIC CPKN 2015 include_once 'Services/Object/classes/class.ilObjectLP.php'; $olp = ilObjectLP::getInstance($this->exc_id); $lp_mode = $olp->getCurrentMode(); if (count($mems) > 0 && $lp_mode != 92) { $this->addCommandButton("saveGrades", $lng->txt("exc_save_changes")); } // END PATCH RUBRIC CPKN 2015 }
/** * Constructor */ function __construct($a_parent_obj, $a_parent_cmd, $a_exc, $a_part_id) { global $ilCtrl, $lng, $ilAccess, $lng; $this->exc = $a_exc; $this->exc_id = $this->exc->getId(); include_once "./Modules/Exercise/classes/class.ilExAssignment.php"; $this->part_id = $a_part_id; $this->setId("exc_part_" . $this->exc_id . "_" . $this->part_id); include_once "./Services/User/classes/class.ilObjUser.php"; if ($this->part_id > 0) { $name = ilObjUser::_lookupName($this->part_id); if (trim($name["login"])) { $this->user = new ilObjUser($this->part_id); } else { $ilCtrl->setParameter($a_parent_obj, "part_id", ""); $ilCtrl->redirect($a_parent_obj, $a_parent_cmd); } } parent::__construct($a_parent_obj, $a_parent_cmd); //$this->setData(ilExAssignment::getMemberListData($this->exc_id, $this->ass_id)); $data = ilExAssignment::getAssignmentDataOfExercise($this->exc_id); $this->setData($data); //var_dump($data); if ($this->part_id > 0) { $this->setTitle($lng->txt("exc_participant") . ": " . $name["lastname"] . ", " . $name["firstname"] . " [" . $name["login"] . "]"); } else { $this->setTitle($lng->txt("exc_participant")); } $this->setTopCommands(true); //$this->setLimit(9999); // $this->addColumn("", "", "1", true); $this->addColumn($this->lng->txt("exc_assignment"), "order_val"); $this->addColumn($this->lng->txt("exc_submission"), "submission"); $this->addColumn($this->lng->txt("exc_grading"), "solved_time"); // $this->addColumn($this->lng->txt("mail"), "feedback_time"); $this->addColumn($this->lng->txt("feedback"), "feedback_time"); $this->setDefaultOrderField("order_val"); $this->setDefaultOrderDirection("asc"); $this->setEnableHeader(true); $this->setFormAction($ilCtrl->getFormAction($a_parent_obj)); $this->setRowTemplate("tpl.exc_participant_row.html", "Modules/Exercise"); //$this->disable("footer"); $this->setEnableTitle(true); // $this->setSelectAllCheckbox("assid"); if ($this->part_id > 0) { $this->addCommandButton("saveStatusParticipant", $lng->txt("exc_save_changes")); } include_once "Services/Form/classes/class.ilPropertyFormGUI.php"; include_once "Services/UIComponent/Overlay/classes/class.ilOverlayGUI.php"; $this->overlay_tpl = new ilTemplate("tpl.exc_learner_comment_overlay.html", true, true, "Modules/Exercise"); }
/** * Constructor */ function __construct($a_parent_obj, $a_parent_cmd, $a_exc) { global $ilCtrl, $lng, $ilAccess, $lng; $this->exc = $a_exc; $this->setId("excass" . $a_exc->getId()); parent::__construct($a_parent_obj, $a_parent_cmd); $this->setTitle($lng->txt("exc_assignments")); $this->setTopCommands(true); // if you add pagination and disable the unlimited setting: // fix saving of ordering of single pages! $this->setLimit(9999); $this->addColumn("", "", "1", true); $this->addColumn($this->lng->txt("title"), "title"); $this->addColumn($this->lng->txt("exc_assignment_type"), "type"); $this->addColumn($this->lng->txt("exc_presentation_order"), "order_val"); $this->addColumn($this->lng->txt("exc_start_time"), "start_time"); $this->addColumn($this->lng->txt("exc_deadline"), "deadline"); $this->addColumn($this->lng->txt("exc_mandatory"), "mandatory"); $this->addColumn($this->lng->txt("exc_peer_review"), "peer"); $this->addColumn($this->lng->txt("exc_instruction"), "", "30%"); $this->addColumn($this->lng->txt("actions")); $this->setDefaultOrderField("val_order"); $this->setDefaultOrderDirection("asc"); //$this->setDefaultOrderField("name"); //$this->setDefaultOrderDirection("asc"); $this->setEnableHeader(true); $this->setFormAction($ilCtrl->getFormAction($a_parent_obj)); $this->setRowTemplate("tpl.exc_assignments_row.html", "Modules/Exercise"); //$this->disable("footer"); $this->setEnableTitle(true); $this->setSelectAllCheckbox("id"); $this->addMultiCommand("confirmAssignmentsDeletion", $lng->txt("delete")); $this->addCommandButton("orderAssignmentsByDeadline", $lng->txt("exc_order_by_deadline")); $this->addCommandButton("saveAssignmentOrder", $lng->txt("exc_save_order")); //$this->addCommandButton("addAssignment", $lng->txt("exc_add_assignment")); $types_map = array(ilExAssignment::TYPE_UPLOAD => $lng->txt("exc_type_upload"), ilExAssignment::TYPE_UPLOAD_TEAM => $lng->txt("exc_type_upload_team"), ilExAssignment::TYPE_BLOG => $lng->txt("exc_type_blog"), ilExAssignment::TYPE_PORTFOLIO => $lng->txt("exc_type_portfolio"), ilExAssignment::TYPE_TEXT => $lng->txt("exc_type_text")); include_once "./Modules/Exercise/classes/class.ilExAssignment.php"; $data = ilExAssignment::getAssignmentDataOfExercise($this->exc->getId()); foreach ($data as $idx => $row) { // #14450 if ($row["peer"]) { $data[$idx]["peer_invalid"] = true; $ass = new ilExAssignment($row["id"]); $peer_reviews = $ass->validatePeerReviewGroups(); $data[$idx]["peer_invalid"] = $peer_reviews["invalid"]; } $data[$idx]["type"] = $types_map[$row["type"]]; } $this->setData($data); }
/** * Constructor * * @param ilExercise $exercise existing exercise object * @param string $a_xml_file xml data * @param int $obj_id obj id of exercise which is to be updated * @access public */ function ilExerciseXMLParser(&$exercise, $a_xml_data, $obj_id = -1) { // @todo: needs to be revised for multiple assignments per exercise parent::ilSaxParser(); $this->exercise = $exercise; // get all assignments and choose first one if exists, otherwise create $assignments = ilExAssignment::getAssignmentDataOfExercise($exercise->getId()); if (count($assignments) > 0) { $this->assignment = new ilExAssignment($assignments[0]["id"]); } else { $this->assignment = new ilExAssignment(); $this->assignment->setExerciseId($exercise->getId()); $this->assignment->save(); } include_once "./Modules/Exercise/classes/class.ilFSStorageExercise.php"; $this->storage = new ilFSStorageExercise($this->exercise->getId(), $this->assignment->getId()); $this->storage->create(); $this->storage->init(); $this->setXMLContent($a_xml_data); $this->obj_id = $obj_id; $this->result = false; }
/** * Show overview of assignments */ function showOverviewObject() { global $tpl, $ilTabs, $ilUser, $ilToolbar; $this->checkPermission("read"); include_once "./Services/Tracking/classes/class.ilLearningProgress.php"; ilLearningProgress::_tracProgress($ilUser->getId(), $this->object->getId(), $this->object->getRefId(), 'exc'); $ilTabs->activateTab("content"); $this->addContentSubTabs("content"); // show certificate? if ($this->object->hasUserCertificate($ilUser->getId())) { include_once "./Modules/Exercise/classes/class.ilExerciseCertificateAdapter.php"; include_once "./Services/Certificate/classes/class.ilCertificate.php"; $adapter = new ilExerciseCertificateAdapter($this->object); if (ilCertificate::_isComplete($adapter)) { $ilToolbar->addButton($this->lng->txt("certificate"), $this->ctrl->getLinkTarget($this, "outCertificate")); } } include_once "./Modules/Exercise/classes/class.ilExAssignment.php"; include_once "./Services/Accordion/classes/class.ilAccordionGUI.php"; $acc = new ilAccordionGUI(); $acc->setId("exc_ow_" . $this->object->getId()); $ass_data = ilExAssignment::getAssignmentDataOfExercise($this->object->getId()); include_once "./Modules/Exercise/classes/class.ilExAssignmentGUI.php"; $ass_gui = new ilExAssignmentGUI($this->object); foreach ($ass_data as $ass) { // incoming assignment deeplink $force_open = false; if (isset($_GET["ass_id_goto"]) && (int) $_GET["ass_id_goto"] == $ass["id"]) { $force_open = true; } $acc->addItem($ass_gui->getOverviewHeader($ass), $ass_gui->getOverviewBody($ass), $force_open); } if (count($ass_data) < 2) { $acc->setBehaviour("FirstOpen"); } else { $acc->setUseSessionStorage(true); } $tpl->setContent($acc->getHTML()); }
/** * Create member status record for a new participant for all assignments */ static function createNewUserRecords($a_user_id, $a_exc_id) { global $ilDB; $ass_data = ilExAssignment::getAssignmentDataOfExercise($a_exc_id); foreach ($ass_data as $ass) { //echo "-".$ass["id"]."-".$a_user_id."-"; $ilDB->replace("exc_mem_ass_status", array("ass_id" => array("integer", $ass["id"]), "usr_id" => array("integer", $a_user_id)), array("status" => array("text", "notgraded"))); } }
/** * Exports grades as excel */ function exportGradesExcel() { include_once "./Modules/Exercise/classes/class.ilExAssignment.php"; $ass_data = ilExAssignment::getAssignmentDataOfExercise($this->getId()); include_once "./Services/Excel/classes/class.ilExcelWriterAdapter.php"; $excelfile = ilUtil::ilTempnam(); $adapter = new ilExcelWriterAdapter($excelfile, FALSE); $workbook = $adapter->getWorkbook(); $workbook->setVersion(8); // Use Excel97/2000 Format include_once "./Services/Excel/classes/class.ilExcelUtils.php"; // // status // $mainworksheet = $workbook->addWorksheet(); // header row $mainworksheet->writeString(0, 0, ilExcelUtils::_convert_text($this->lng->txt("name"))); $cnt = 1; foreach ($ass_data as $ass) { $mainworksheet->writeString(0, $cnt, $cnt); $cnt++; } $mainworksheet->writeString(0, $cnt, ilExcelUtils::_convert_text($this->lng->txt("exc_total_exc"))); // data rows $this->mem_obj = new ilExerciseMembers($this); $getmems = $this->mem_obj->getMembers(); $mems = array(); foreach ($getmems as $user_id) { $mems[$user_id] = ilObjUser::_lookupName($user_id); } $mems = ilUtil::sortArray($mems, "lastname", "asc", false, true); $data = array(); $row_cnt = 1; foreach ($mems as $user_id => $d) { $col_cnt = 1; // name $mainworksheet->writeString($row_cnt, 0, ilExcelUtils::_convert_text($d["lastname"] . ", " . $d["firstname"] . " [" . $d["login"] . "]")); reset($ass_data); foreach ($ass_data as $ass) { $status = ilExAssignment::lookupStatusOfUser($ass["id"], $user_id); $mainworksheet->writeString($row_cnt, $col_cnt, ilExcelUtils::_convert_text($this->lng->txt("exc_" . $status))); $col_cnt++; } // total status $status = ilExerciseMembers::_lookupStatus($this->getId(), $user_id); $mainworksheet->writeString($row_cnt, $col_cnt, ilExcelUtils::_convert_text($this->lng->txt("exc_" . $status))); $row_cnt++; } // // mark // $worksheet2 = $workbook->addWorksheet(); // header row $worksheet2->writeString(0, 0, ilExcelUtils::_convert_text($this->lng->txt("name"))); $cnt = 1; foreach ($ass_data as $ass) { $worksheet2->writeString(0, $cnt, $cnt); $cnt++; } $worksheet2->writeString(0, $cnt, ilExcelUtils::_convert_text($this->lng->txt("exc_total_exc"))); // data rows $data = array(); $row_cnt = 1; reset($mems); foreach ($mems as $user_id => $d) { $col_cnt = 1; $d = ilObjUser::_lookupName($user_id); // name $worksheet2->writeString($row_cnt, 0, ilExcelUtils::_convert_text($d["lastname"] . ", " . $d["firstname"] . " [" . $d["login"] . "]")); reset($ass_data); foreach ($ass_data as $ass) { $worksheet2->writeString($row_cnt, $col_cnt, ilExcelUtils::_convert_text(ilExAssignment::lookupMarkOfUser($ass["id"], $user_id))); $col_cnt++; } // total mark include_once 'Services/Tracking/classes/class.ilLPMarks.php'; $worksheet2->writeString($row_cnt, $col_cnt, ilExcelUtils::_convert_text(ilLPMarks::_lookupMark($user_id, $this->getId()))); $row_cnt++; } $workbook->close(); $exc_name = ilUtil::getASCIIFilename(preg_replace("/\\s/", "_", $this->getTitle())); ilUtil::deliverFile($excelfile, $exc_name . ".xls", "application/vnd.ms-excel"); }
/** * Prepare For a Regrade of a Rubric * @param $obj_id * @param $usr_id * @return bool */ public static function _prepareForRegrade($obj_id, $usr_id) { global $ilDB, $ilUser; $delete_date = date("Y-m-d H:i:s"); //try and set deleted on any criteria in rubric_data table where deleted is not null. $affected_rows = $ilDB->manipulate("UPDATE rubric_data d INNER JOIN rubric r on d.rubric_id = r.rubric_id SET d.deleted =\r\n " . $ilDB->quote($delete_date, "timestamp") . " WHERE d.deleted IS NULL AND d.usr_id = " . $ilDB->quote($usr_id, "integer") . " AND r.obj_id = " . $ilDB->quote($obj_id, "integer")); if ($affected_rows > 0) { //there was a mark prior, we should proceed with preparing things for a regrade. include_once 'Services/Tracking/classes/class.ilLPMarks.php'; include_once "./Modules/Exercise/classes/class.ilExAssignment.php"; include_once "./Services/Tracking/classes/class.ilLPStatus.php"; //grab everything from ut_lp_marks for the users obj_id and usr_id, that way we can save it for our own use. $marks = new ilLPMarks($obj_id, $usr_id); $status = ilLPStatus::_lookupStatus($obj_id, $usr_id); $completed = $marks->getCompleted(); $mark = $marks->getMark(); $comments = $marks->getComment(); //Save the UT LP marks for this object. We're using Delete Date for the Create Date so we can inner join to the delete up above so we have a //record of all marks. $id = $ilDB->nextID('rubric_grade_hist'); $ilDB->manipulateF("INSERT INTO rubric_grade_hist(rubric_history_id,rubric_id,obj_id,usr_id,status,mark,completed,comments,owner,create_date,last_update) VALUES " . " (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", array("integer", "integer", "integer", "integer", "integer", "float", "integer", "text", "integer", "date", "date"), array($id, self::_lookupRubricId($obj_id), $obj_id, $usr_id, $status, $mark, $completed, $comments, $ilUser->getId(), $delete_date, $delete_date)); //now that a record is saved delete it from marks, status and exercise. $marks->_deleteForUsers($obj_id, array($usr_id)); ilLPStatus::writeStatus($obj_id, $usr_id, ilLPStatus::LP_STATUS_IN_PROGRESS_NUM); //Remove from Ex Assignment $ass_id = array_shift(ilExAssignment::getAssignmentDataOfExercise($obj_id)); $assignment = new ilExAssignment($ass_id['id']); $assignment->updateMarkOfUser($ass_id['id'], $usr_id, ''); $assignment->updateStatusOfUser($ass_id['id'], $usr_id, 'notgraded'); return true; } else { //there were no marks to begin with OR this was already marked for regrade, so go no further. return false; } }
public static function getAdoptableTeamAssignments($a_exercise_id, $a_exclude_ass_id = null, $a_user_id = null) { $res = array(); $data = ilExAssignment::getAssignmentDataOfExercise($a_exercise_id); foreach ($data as $row) { if ($a_exclude_ass_id && $row["id"] == $a_exclude_ass_id) { continue; } if ($row["type"] == ilExAssignment::TYPE_UPLOAD_TEAM) { $map = ilExAssignment::getAssignmentTeamMap($row["id"]); if ($a_user_id && !array_key_exists($a_user_id, $map)) { continue; } if (sizeof($map)) { $user_team = null; if ($a_user_id) { $user_team_id = $map[$a_user_id]; $user_team = array(); foreach ($map as $user_id => $team_id) { if ($user_id != $a_user_id && $user_team_id == $team_id) { $user_team[] = $user_id; } } } if (!$a_user_id || sizeof($user_team)) { $res[$row["id"]] = array("title" => $row["title"], "teams" => sizeof(array_flip($map))); if ($a_user_id) { $res[$row["id"]]["user_team"] = $user_team; } } } } } return ilUtil::sortArray($res, "title", "asc", false, true); }
function start() { $this->__buildHeader(); $attribs = array("obj_id" => "il_" . IL_INST_ID . "_exc_" . $this->exercise->getId()); if ($this->exercise->getOwner()) { $attribs["owner"] = "il_" . IL_INST_ID . "_usr_" . $this->exercise->getOwner(); } $this->xmlStartTag("Exercise", $attribs); //todo: create new dtd for new assignment structure $this->xmlElement("Title", null, $this->exercise->getTitle()); $this->xmlElement("Description", null, $this->exercise->getDescription()); //$this->xmlElement("Instruction", null,$this->exercise->getInstruction()); //$this->xmlElement("DueDate", null,$this->exercise->getTimestamp()); //todo: as a workaround use first assignment for compatibility with old exercise dtd $assignments = ilExAssignment::getAssignmentDataOfExercise($this->exercise->getId()); if (count($assignments) > 0) { foreach ($assignments as $assignment) { $this->xmlStartTag("Assignment"); $this->xmlElement("Instruction", null, $assignment["instruction"]); $this->xmlElement("DueDate", null, $assignment["deadline"]); $this->handleAssignmentFiles($this->exercise->getId(), $assignment["id"]); if ($this->attachMembers) { $this->handleAssignmentMembers($this->exercise->getId(), $assignment["id"]); } $this->xmlEndTag("Assignment"); } } $this->xmlEndTag("Exercise"); $this->__buildFooter(); return true; }
function __updateUserRubric($user_id, $obj_id, $passing_grade_minimum) { $form = $this->initEditUserForm($user_id, $obj_id); if ($form->checkInput()) { include_once 'Services/Tracking/classes/class.ilLPMarks.php'; $marks = new ilLPMarks($obj_id, $user_id); $marks->setMark($form->getInput("mark")); $marks->setComment($form->getInput("comment")); $marks->setCompleted(1); $do_lp = true; $marks->update(); // if assignment, updated exc_mem_ass_status $obj_type = ilObject::_lookupType($obj_id); if ($obj_type == 'exc') { include_once "./Modules/Exercise/classes/class.ilExAssignment.php"; // do we have an ass id? $ass_id = 0; if (isset($_GET['ass_id'])) { // yes, came from submission and grades $ass_id = $_GET['ass_id']; } else { // no, we need to get it $ass_ids = ilExAssignment::getAssignmentDataOfExercise($obj_id); $ass_id = $ass_ids[0]['id']; } if ($marks->getMark() >= $passing_grade_minimum) { ilExAssignment::updateStatusOfUser($ass_id, $user_id, 'passed'); } else { ilExAssignment::updateStatusOfUser($ass_id, $user_id, 'failed'); } ilExAssignment::updateMarkOfUser($ass_id, $user_id, $marks->getMark()); } else { include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($obj_id, $user_id); } include_once "./Services/Tracking/classes/class.ilLPStatus.php"; if ($marks->getMark() >= $passing_grade_minimum) { ilLPStatus::writeStatus($obj_id, $user_id, ilLPStatus::LP_STATUS_COMPLETED_NUM, false, true); } else { ilLPStatus::writeStatus($obj_id, $user_id, ilLPStatus::LP_STATUS_FAILED_NUM, false, true); } } }