コード例 #1
0
 /**
  * Import relevant properties from given exercise
  *
  * @param ilObjExercise $a_test
  * @return object
  */
 public static function createFromExercise(ilObjExercise $a_exercise, $a_user_id)
 {
     global $lng;
     $lng->loadLanguageModule("exercise");
     $newObj = new self();
     $newObj->setTitle($a_exercise->getTitle());
     $newObj->setDescription($a_exercise->getDescription());
     include_once "Services/Tracking/classes/class.ilLPMarks.php";
     $lp_marks = new ilLPMarks($a_exercise->getId(), $a_user_id);
     $newObj->setProperty("issued_on", new ilDate($lp_marks->getStatusChanged(), IL_CAL_DATETIME));
     // create certificate
     include_once "Services/Certificate/classes/class.ilCertificate.php";
     include_once "Modules/Exercise/classes/class.ilExerciseCertificateAdapter.php";
     $certificate = new ilCertificate(new ilExerciseCertificateAdapter($a_exercise));
     $certificate = $certificate->outCertificate(array("user_id" => $a_user_id), false);
     // save pdf file
     if ($certificate) {
         // we need the object id for storing the certificate file
         $newObj->create();
         $path = self::initStorage($newObj->getId(), "certificate");
         $file_name = "exc_" . $a_exercise->getId() . "_" . $a_user_id . ".pdf";
         if (file_put_contents($path . $file_name, $certificate)) {
             $newObj->setProperty("file", $file_name);
             $newObj->update();
             return $newObj;
         }
         // file creation failed, so remove to object, too
         $newObj->delete();
     }
     // remove if certificate works
     $newObj->create();
     return $newObj;
 }
コード例 #2
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;
 }
コード例 #3
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;
 }
コード例 #4
0
 /**
  * Import record
  *
  * @param
  * @return
  */
 function importRecord($a_entity, $a_types, $a_rec, $a_mapping, $a_schema_version)
 {
     //echo $a_entity;
     //var_dump($a_rec);
     switch ($a_entity) {
         case "exc":
             include_once "./Modules/Exercise/classes/class.ilObjExercise.php";
             if ($new_id = $a_mapping->getMapping('Services/Container', 'objs', $a_rec['Id'])) {
                 $newObj = ilObjectFactory::getInstanceByObjId($new_id, false);
             } else {
                 $newObj = new ilObjExercise();
                 $newObj->setType("exc");
                 $newObj->create(true);
             }
             $newObj->setTitle($a_rec["Title"]);
             $newObj->setDescription($a_rec["Description"]);
             $newObj->setPassMode($a_rec["PassMode"]);
             $newObj->setPassNr($a_rec["PassNr"]);
             $newObj->setShowSubmissions($a_rec["ShowSubmissions"]);
             $newObj->update();
             $newObj->saveData();
             //var_dump($a_rec);
             $this->current_exc = $newObj;
             $a_mapping->addMapping("Modules/Exercise", "exc", $a_rec["Id"], $newObj->getId());
             //var_dump($a_mapping->mappings["Services/News"]["news_context"]);
             break;
         case "exc_assignment":
             $exc_id = $a_mapping->getMapping("Modules/Exercise", "exc", $a_rec["ExerciseId"]);
             if ($exc_id > 0) {
                 if (is_object($this->current_exc) && $this->current_exc->getId() == $exc_id) {
                     $exc = $this->current_exc;
                 } else {
                     include_once "./Modules/Exercise/classes/class.ilObjExercise.php";
                     $exc = new ilObjExercise($exc_id, false);
                 }
                 include_once "./Modules/Exercise/classes/class.ilExAssignment.php";
                 $ass = new ilExAssignment();
                 $ass->setExerciseId($exc_id);
                 if ($a_rec["StartTime"] != "") {
                     $start = new ilDateTime($a_rec["StartTime"], IL_CAL_DATETIME, "UTC");
                     $ass->setStartTime($start->get(IL_CAL_UNIX));
                 }
                 if ($a_rec["Deadline"] != "") {
                     $deadline = new ilDateTime($a_rec["Deadline"], IL_CAL_DATETIME, "UTC");
                     $ass->setDeadline($deadline->get(IL_CAL_UNIX));
                 }
                 //var_dump($a_rec);
                 $ass->setInstruction($a_rec["Instruction"]);
                 $ass->setTitle($a_rec["Title"]);
                 $ass->setMandatory($a_rec["Mandatory"]);
                 $ass->setOrderNr($a_rec["OrderNr"]);
                 // 4.2
                 $ass->setType($a_rec["Type"]);
                 // 4.4
                 $ass->setPeerReview($a_rec["Peer"]);
                 $ass->setPeerReviewMin($a_rec["PeerMin"]);
                 $ass->setPeerReviewDeadline($a_rec["PeerDeadline"]);
                 $ass->setFeedbackFile($a_rec["FeedbackFile"]);
                 $ass->setFeedbackCron($a_rec["FeedbackCron"]);
                 $ass->setFeedbackDate($a_rec["FeedbackDate"]);
                 // 5.0
                 $ass->setPeerReviewFileUpload($a_rec["PeerFile"]);
                 $ass->setPeerReviewPersonalized($a_rec["PeerPersonal"]);
                 $ass->save();
                 include_once "./Modules/Exercise/classes/class.ilFSStorageExercise.php";
                 $fstorage = new ilFSStorageExercise($exc_id, $ass->getId());
                 $fstorage->create();
                 // assignment files
                 $dir = str_replace("..", "", $a_rec["Dir"]);
                 if ($dir != "" && $this->getImportDirectory() != "") {
                     $source_dir = $this->getImportDirectory() . "/" . $dir;
                     $target_dir = $fstorage->getPath();
                     ilUtil::rCopy($source_dir, $target_dir);
                 }
                 // (4.4) global feedback file
                 $dir = str_replace("..", "", $a_rec["FeedbackDir"]);
                 if ($dir != "" && $this->getImportDirectory() != "") {
                     $source_dir = $this->getImportDirectory() . "/" . $dir;
                     $target_dir = $fstorage->getGlobalFeedbackPath();
                     ilUtil::rCopy($source_dir, $target_dir);
                 }
                 $a_mapping->addMapping("Modules/Exercise", "exc_assignment", $a_rec["Id"], $ass->getId());
             }
             break;
     }
 }
コード例 #5
0
 /**
  * Handle calendar entries for deadline(s)
  * 
  * @param string $a_event
  */
 protected function handleCalendarEntries($a_event)
 {
     global $ilAppEventHandler;
     $dl_id = $this->getId() . "0";
     $fbdl_id = $this->getId() . "1";
     $context_ids = array($dl_id, $fbdl_id);
     $apps = array();
     if ($a_event != "delete") {
         include_once "Services/Calendar/classes/class.ilCalendarAppointmentTemplate.php";
         if ($this->getDeadline()) {
             $app = new ilCalendarAppointmentTemplate($dl_id);
             $app->setTranslationType(IL_CAL_TRANSLATION_SYSTEM);
             $app->setSubtitle("cal_exc_deadline");
             $app->setTitle($this->getTitle());
             $app->setFullday(false);
             $app->setStart(new ilDateTime($this->getDeadline(), IL_CAL_UNIX));
             $apps[] = $app;
         }
         if ($this->getPeerReview() && $this->getPeerReviewDeadline()) {
             $app = new ilCalendarAppointmentTemplate($fbdl_id);
             $app->setTranslationType(IL_CAL_TRANSLATION_SYSTEM);
             $app->setSubtitle("cal_exc_peer_review_deadline");
             $app->setTitle($this->getTitle());
             $app->setFullday(false);
             $app->setStart(new ilDateTime($this->getPeerReviewDeadline(), IL_CAL_UNIX));
             $apps[] = $app;
         }
     }
     include_once "Modules/Exercise/classes/class.ilObjExercise.php";
     $exc = new ilObjExercise($this->getExerciseId(), false);
     $ilAppEventHandler->raise('Modules/Exercise', $a_event . 'Assignment', array('object' => $exc, 'obj_id' => $exc->getId(), 'context_ids' => $context_ids, 'appointments' => $apps));
 }
コード例 #6
0
 protected function createPortfolioFromTemplateProcess($a_process_form = true)
 {
     global $ilSetting, $ilUser, $ilAccess;
     $title = trim($_REQUEST["pt"]);
     $prtt_id = (int) $_REQUEST["prtt"];
     // valid template?
     include_once "Modules/Portfolio/classes/class.ilObjPortfolioTemplate.php";
     $templates = array_keys(ilObjPortfolioTemplate::getAvailablePortfolioTemplates());
     if (!sizeof($templates) || !in_array($prtt_id, $templates)) {
         $this->toRepository();
     }
     unset($templates);
     // build page recipe (aka import form values)
     $recipe = null;
     if ($a_process_form) {
         $this->ctrl->setParameter($this, "prtt", $prtt_id);
         $form = $this->initCreatePortfolioFromTemplateForm($prtt_id, $title);
         if ($form->checkInput()) {
             include_once "Modules/Portfolio/classes/class.ilPortfolioTemplatePage.php";
             foreach (ilPortfolioTemplatePage::getAllPages($prtt_id) as $page) {
                 switch ($page["type"]) {
                     case ilPortfolioTemplatePage::TYPE_BLOG_TEMPLATE:
                         if (!$ilSetting->get('disable_wsp_blogs')) {
                             $field_id = "blog_" . $page["id"];
                             switch ($form->getInput($field_id)) {
                                 case "blog_create":
                                     $recipe[$page["id"]] = array("blog", "create", trim($form->getInput($field_id . "_create_title")));
                                     break;
                                 case "blog_resuse":
                                     $recipe[$page["id"]] = array("blog", "reuse", (int) $form->getInput($field_id . "_reuse_blog"));
                                     break;
                                 case "blog_ignore":
                                     $recipe[$page["id"]] = array("blog", "ignore");
                                     break;
                             }
                         }
                         break;
                 }
             }
             $recipe["skills"] = (array) $form->getInput("skill_ids");
         } else {
             $form->setValuesByPost();
             return $this->createPortfolioFromTemplate($form);
         }
     }
     $source = new ilObjPortfolioTemplate($prtt_id, false);
     // create portfolio
     include_once "Modules/Portfolio/classes/class.ilObjPortfolio.php";
     $target = new ilObjPortfolio();
     $target->setTitle($title);
     $target->create();
     $target_id = $target->getId();
     $source->clonePagesAndSettings($source, $target, $recipe);
     // link portfolio to exercise assignment
     $exc_ref_id = (int) $_REQUEST["exc_id"];
     $ass_id = (int) $_REQUEST["ass_id"];
     if ($exc_ref_id && $ass_id && $ilAccess->checkAccess("read", "", $exc_ref_id)) {
         include_once "Modules/Exercise/classes/class.ilObjExercise.php";
         include_once "Modules/Exercise/classes/class.ilExAssignment.php";
         $exc = new ilObjExercise($exc_ref_id);
         $ass = new ilExAssignment($ass_id);
         if ($ass->getExerciseId() == $exc->getId() && $ass->getType() == ilExAssignment::TYPE_PORTFOLIO) {
             $exc->addResourceObject($target_id, $ass_id, $ilUser->getId());
         }
     }
     ilUtil::sendSuccess($this->lng->txt("prtf_portfolio_created"), true);
     $this->ctrl->setParameter($this, "prt_id", $target_id);
     $this->ctrl->redirect($this, "view");
 }