/**
  * 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);
 }
Ejemplo n.º 4
0
 /**
  * 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;
 }
Ejemplo n.º 5
0
 /**
  * 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());
 }
Ejemplo n.º 6
0
 /**
  * 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");
 }
Ejemplo n.º 8
0
 /**
  * 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;
     }
 }
Ejemplo n.º 9
0
 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);
 }
Ejemplo n.º 10
0
 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);
         }
     }
 }