ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilObjExercise.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 require_once "./Services/Object/classes/class.ilObject.php";
5 require_once "./Modules/Exercise/classes/class.ilExerciseMembers.php";
6 
19 class ilObjExercise extends ilObject
20 {
21  var $file_obj;
23  var $files;
24 
26  var $hour;
27  var $minutes;
28  var $day;
29  var $month;
30  var $year;
33 
34  var $tutor_feedback = 7; // [int]
35 
39 
48  protected $completion_by_submission = false;
49 
56  function __construct($a_id = 0,$a_call_by_reference = true)
57  {
58  $this->setPassMode("all");
59  $this->type = "exc";
60  parent::__construct($a_id,$a_call_by_reference);
61  }
62 
63  // SET, GET METHODS
64  function setDate($a_hour,$a_minutes,$a_day,$a_month,$a_year)
65  {
66  $this->hour = (int) $a_hour;
67  $this->minutes = (int) $a_minutes;
68  $this->day = (int) $a_day;
69  $this->month = (int) $a_month;
70  $this->year = (int) $a_year;
71  $this->timestamp = mktime($this->hour,$this->minutes,0,$this->month,$this->day,$this->year);
72  return true;
73  }
74  function getTimestamp()
75  {
76  return $this->timestamp;
77  }
78  function setTimestamp($a_timestamp)
79  {
80  $this->timestamp = $a_timestamp;
81  }
82  function setInstruction($a_instruction)
83  {
84  $this->instruction = $a_instruction;
85  }
86  function getInstruction()
87  {
88  return $this->instruction;
89  }
90 
96  function setPassMode($a_val)
97  {
98  $this->pass_mode = $a_val;
99  }
100 
106  function getPassMode()
107  {
108  return $this->pass_mode;
109  }
110 
116  function setPassNr($a_val)
117  {
118  $this->pass_nr = $a_val;
119  }
120 
126  function getPassNr()
127  {
128  return $this->pass_nr;
129  }
130 
136  function setShowSubmissions($a_val)
137  {
138  $this->show_submissions = $a_val;
139  }
140 
147  {
148  return $this->show_submissions;
149  }
150 
151 
152 /* function getFiles()
153  {
154  return $this->files;
155  }*/
156 
157  function checkDate()
158  {
159  return $this->hour == (int) date("H",$this->timestamp) and
160  $this->minutes == (int) date("i",$this->timestamp) and
161  $this->day == (int) date("d",$this->timestamp) and
162  $this->month == (int) date("m",$this->timestamp) and
163  $this->year == (int) date("Y",$this->timestamp);
164 
165  }
166 
168  {
169  return $this->tutor_feedback & self::TUTOR_FEEDBACK_TEXT;
170  }
171 
173  {
174  return $this->tutor_feedback & self::TUTOR_FEEDBACK_MAIL;
175  }
176 
178  {
179  return $this->tutor_feedback & self::TUTOR_FEEDBACK_FILE;
180  }
181 
182  protected function getTutorFeedback()
183  {
184  return $this->tutor_feedback;
185  }
186 
187  public function setTutorFeedback($a_value)
188  {
189  $this->tutor_feedback = $a_value;
190  }
191 
192  function saveData()
193  {
194  global $ilDB;
195 
196  $ilDB->insert("exc_data", array(
197  "obj_id" => array("integer", $this->getId()),
198  "instruction" => array("clob", $this->getInstruction()),
199  "time_stamp" => array("integer", $this->getTimestamp()),
200  "pass_mode" => array("text", $this->getPassMode()),
201  "pass_nr" => array("text", $this->getPassNr()),
202  "show_submissions" => array("integer", (int) $this->getShowSubmissions()),
203  'compl_by_submission' => array('integer', (int)$this->isCompletionBySubmissionEnabled()),
204  "certificate_visibility" => array("integer", (int)$this->getCertificateVisibility()),
205  "tfeedback" => array("integer", (int)$this->getTutorFeedback())
206  ));
207  return true;
208  }
209 
217  public function cloneObject($a_target_id,$a_copy_id = 0, $a_omit_tree = false)
218  {
219  global $ilDB;
220 
221  // Copy settings
222  $new_obj = parent::cloneObject($a_target_id,$a_copy_id, $a_omit_tree);
223  $new_obj->setInstruction($this->getInstruction());
224  $new_obj->setTimestamp($this->getTimestamp());
225  $new_obj->setPassMode($this->getPassMode());
226  $new_obj->saveData();
227  $new_obj->setPassNr($this->getPassNr());
228  $new_obj->setShowSubmissions($this->getShowSubmissions());
229  $new_obj->setCompletionBySubmission($this->isCompletionBySubmissionEnabled());
230  $new_obj->setTutorFeedback($this->getTutorFeedback());
231  $new_obj->update();
232 
233  // Copy criteria catalogues
234  $crit_cat_map = array();
235  include_once("./Modules/Exercise/classes/class.ilExcCriteriaCatalogue.php");
236  foreach(ilExcCriteriaCatalogue::getInstancesByParentId($this->getId()) as $crit_cat)
237  {
238  $new_id = $crit_cat->cloneObject($new_obj->getId());
239  $crit_cat_map[$crit_cat->getId()] = $new_id;
240  }
241 
242  // Copy assignments
243  include_once("./Modules/Exercise/classes/class.ilExAssignment.php");
244  ilExAssignment::cloneAssignmentsOfExercise($this->getId(), $new_obj->getId(), $crit_cat_map);
245 
246  // Copy learning progress settings
247  include_once('Services/Tracking/classes/class.ilLPObjSettings.php');
248  $obj_settings = new ilLPObjSettings($this->getId());
249  $obj_settings->cloneSettings($new_obj->getId());
250  unset($obj_settings);
251 
252  // #18945
253  include_once "./Services/Certificate/classes/class.ilCertificate.php";
254  include_once "./Modules/Exercise/classes/class.ilExerciseCertificateAdapter.php";
255  $cert = new ilCertificate(new ilExerciseCertificateAdapter($this));
256  $newcert = new ilCertificate(new ilExerciseCertificateAdapter($new_obj));
257  $cert->cloneCertificate($newcert);
258 
259  return $new_obj;
260  }
261 
268  function delete()
269  {
270  global $ilDB, $ilAppEventHandler;
271 
272  // always call parent delete function first!!
273  if (!parent::delete())
274  {
275  return false;
276  }
277  // put here course specific stuff
278  $ilDB->manipulate("DELETE FROM exc_data ".
279  "WHERE obj_id = ".$ilDB->quote($this->getId(), "integer"));
280 
281  include_once "Modules/Exercise/classes/class.ilExcCriteriaCatalogue.php";
283 
284  // remove all notifications
285  include_once "./Services/Notification/classes/class.ilNotification.php";
287 
288  $ilAppEventHandler->raise('Modules/Exercise',
289  'delete',
290  array('obj_id'=>$this->getId()));
291 
292  return true;
293  }
294 
295  function read()
296  {
297  global $ilDB;
298 
299  parent::read();
300 
301  $query = "SELECT * FROM exc_data ".
302  "WHERE obj_id = ".$ilDB->quote($this->getId(), "integer");
303 
304  $res = $ilDB->query($query);
305  while($row = $ilDB->fetchObject($res))
306  {
307  $this->setInstruction($row->instruction);
308  $this->setTimestamp($row->time_stamp);
309  $pm = ($row->pass_mode == "")
310  ? "all"
311  : $row->pass_mode;
312  $this->setPassMode($pm);
313  $this->setShowSubmissions($row->show_submissions);
314  if ($row->pass_mode == "nr")
315  {
316  $this->setPassNr($row->pass_nr);
317  }
318  $this->setCompletionBySubmission($row->compl_by_submission == 1 ? true : false);
319  $this->setCertificateVisibility($row->certificate_visibility);
320  $this->setTutorFeedback($row->tfeedback);
321  }
322 
323  $this->members_obj = new ilExerciseMembers($this);
324 
325  return true;
326  }
327 
328  function update()
329  {
330  global $ilDB;
331 
332  parent::update();
333 
334  if ($this->getPassMode() == "all")
335  {
336  $pass_nr = null;
337  }
338  else
339  {
340  $pass_nr = $this->getPassNr();
341  }
342 
343  $ilDB->update("exc_data", array(
344  "instruction" => array("clob", $this->getInstruction()),
345  "time_stamp" => array("integer", $this->getTimestamp()),
346  "pass_mode" => array("text", $this->getPassMode()),
347  "pass_nr" => array("integer", $this->getPassNr()),
348  "show_submissions" => array("integer", (int) $this->getShowSubmissions()),
349  'compl_by_submission' => array('integer', (int)$this->isCompletionBySubmissionEnabled()),
350  'tfeedback' => array('integer', (int)$this->getTutorFeedback()),
351  ), array(
352  "obj_id" => array("integer", $this->getId())
353  ));
354 
355  $this->updateAllUsersStatus();
356 
357  return true;
358  }
359 
363  function sendAssignment(ilExAssignment $a_ass, $a_members)
364  {
365  global $lng, $ilUser;
366 
367  $lng->loadLanguageModule("exc");
368 
369  // subject
370  $subject = $a_ass->getTitle()
371  ? $this->getTitle().": ".$a_ass->getTitle()
372  : $this->getTitle();
373 
374 
375  // body
376 
377  $body = $a_ass->getInstruction();
378  $body .= "\n\n";
379 
380  $body .= $lng->txt("exc_edit_until").": ";
381  $body .= (!$a_ass->getDeadline())
382  ? $lng->txt("exc_no_deadline_specified")
384  $body .= "\n\n";
385 
386  include_once "Services/Link/classes/class.ilLink.php";
387  $body .= ilLink::_getLink($this->getRefId(), "exc");
388 
389 
390  // files
391  $file_names = array();
392  include_once("./Modules/Exercise/classes/class.ilFSStorageExercise.php");
393  $storage = new ilFSStorageExercise($a_ass->getExerciseId(), $a_ass->getId());
394  $files = $storage->getFiles();
395  if(count($files))
396  {
397  include_once "./Services/Mail/classes/class.ilFileDataMail.php";
398  $mfile_obj = new ilFileDataMail($GLOBALS['DIC']['ilUser']->getId());
399  foreach($files as $file)
400  {
401  $mfile_obj->copyAttachmentFile($file["fullpath"], $file["name"]);
402  $file_names[] = $file["name"];
403  }
404  }
405 
406  // recipients
407  $recipients = array();
408  foreach($a_members as $member_id)
409  {
410  $tmp_obj = ilObjectFactory::getInstanceByObjId($member_id);
411  $recipients[] = $tmp_obj->getLogin();
412  unset($tmp_obj);
413  }
414  $recipients = implode("," ,$recipients);
415 
416  // send mail
417  include_once "Services/Mail/classes/class.ilMail.php";
418  $tmp_mail_obj = new ilMail($ilUser->getId());
419  $message = $tmp_mail_obj->sendMail(
420  $recipients,
421  "",
422  "",
423  $subject,
424  $body,
425  $file_names,
426  array("normal")
427  );
428  unset($tmp_mail_obj);
429 
430  // remove tmp files
431  if(sizeof($file_names))
432  {
433  $mfile_obj->unlinkFiles($file_names);
434  unset($mfile_obj);
435  }
436 
437  // set recipients mail status
438  foreach($a_members as $member_id)
439  {
440  $member_status = $a_ass->getMemberStatus($member_id);
441  $member_status->setSent(true);
442  $member_status->update();
443  }
444 
445  return true;
446  }
447 
451  function determinStatusOfUser($a_user_id = 0)
452  {
453  global $ilUser;
454 
455  if ($a_user_id == 0)
456  {
457  $a_user_id = $ilUser->getId();
458  }
459 
460  include_once("./Modules/Exercise/classes/class.ilExAssignment.php");
462 
463  $passed_all_mandatory = true;
464  $failed_a_mandatory = false;
465  $cnt_passed = 0;
466  $cnt_notgraded = 0;
467  $passed_at_least_one = false;
468 
469  foreach ($ass as $a)
470  {
471  $stat = $a->getMemberStatus($a_user_id)->getStatus();
472  if ($a->getMandatory() && ($stat == "failed" || $stat == "notgraded"))
473  {
474  $passed_all_mandatory = false;
475  }
476  if ($a->getMandatory() && ($stat == "failed"))
477  {
478  $failed_a_mandatory = true;
479  }
480  if ($stat == "passed")
481  {
482  $cnt_passed++;
483  }
484  if ($stat == "notgraded")
485  {
486  $cnt_notgraded++;
487  }
488  }
489 
490  if (count($ass) == 0)
491  {
492  $passed_all_mandatory = false;
493  }
494 
495  if ($this->getPassMode() != "nr")
496  {
497 //echo "5";
498  $overall_stat = "notgraded";
499  if ($failed_a_mandatory)
500  {
501 //echo "6";
502  $overall_stat = "failed";
503  }
504  else if ($passed_all_mandatory && $cnt_passed > 0)
505  {
506 //echo "7";
507  $overall_stat = "passed";
508  }
509  }
510  else
511  {
512 //echo "8";
513  $min_nr = $this->getPassNr();
514  $overall_stat = "notgraded";
515 //echo "*".$cnt_passed."*".$cnt_notgraded."*".$min_nr."*";
516  if ($failed_a_mandatory || ($cnt_passed + $cnt_notgraded < $min_nr))
517  {
518 //echo "9";
519  $overall_stat = "failed";
520  }
521  else if ($passed_all_mandatory && $cnt_passed >= $min_nr)
522  {
523 //echo "A";
524  $overall_stat = "passed";
525  }
526  }
527 
528  $ret = array(
529  "overall_status" => $overall_stat,
530  "failed_a_mandatory" => $failed_a_mandatory);
531 //echo "<br>p:".$cnt_passed.":ng:".$cnt_notgraded;
532 //var_dump($ret);
533  return $ret;
534  }
535 
539  function updateUserStatus($a_user_id = 0)
540  {
541  global $ilUser;
542 
543  if ($a_user_id == 0)
544  {
545  $a_user_id = $ilUser->getId();
546  }
547 
548  $st = $this->determinStatusOfUser($a_user_id);
549 
550  include_once("./Modules/Exercise/classes/class.ilExerciseMembers.php");
551  ilExerciseMembers::_writeStatus($this->getId(), $a_user_id,
552  $st["overall_status"]);
553  }
554 
559  {
560  if (!is_object($this->members_obj))
561  {
562  $this->members_obj = new ilExerciseMembers($this);
563  }
564 
565  $mems = $this->members_obj->getMembers();
566  foreach ($mems as $mem)
567  {
568  $this->updateUserStatus($mem);
569  }
570  }
571 
575  function exportGradesExcel()
576  {
577  include_once("./Modules/Exercise/classes/class.ilExAssignment.php");
578  $ass_data = ilExAssignment::getInstancesByExercise($this->getId());
579 
580  include_once "./Services/Excel/classes/class.ilExcel.php";
581  $excel = new ilExcel();
582  $excel->addSheet($this->lng->txt("exc_status"));
583 
584 
585  //
586  // status
587  //
588 
589  // header row
590  $row = $cnt = 1;
591  $excel->setCell($row, 0, $this->lng->txt("name"));
592  foreach ($ass_data as $ass)
593  {
594  $excel->setCell($row, $cnt++, $cnt-1);
595  }
596  $excel->setCell($row, $cnt++, $this->lng->txt("exc_total_exc"));
597  $excel->setCell($row, $cnt++, $this->lng->txt("exc_mark"));
598  $excel->setCell($row++, $cnt, $this->lng->txt("exc_comment_for_learner"));
599  $excel->setBold("A1:".$excel->getColumnCoord($cnt)."1");
600 
601  // data rows
602  $mem_obj = new ilExerciseMembers($this);
603  $mems = array();
604  foreach($mem_obj->getMembers() as $user_id)
605  {
606  $mems[$user_id] = ilObjUser::_lookupName($user_id);
607  }
608  $mems = ilUtil::sortArray($mems, "lastname", "asc", false, true);
609 
610  include_once 'Services/Tracking/classes/class.ilLPMarks.php';
611  foreach ($mems as $user_id => $d)
612  {
613  $col = 0;
614 
615  // name
616  $excel->setCell($row, $col++, $d["lastname"].", ".$d["firstname"]." [".$d["login"]."]");
617 
618  reset($ass_data);
619  foreach ($ass_data as $ass)
620  {
621  $status = $ass->getMemberStatus($user_id)->getStatus();
622  $excel->setCell($row, $col++, $this->lng->txt("exc_".$status));
623  }
624 
625  // total status
626  $status = ilExerciseMembers::_lookupStatus($this->getId(), $user_id);
627  $excel->setCell($row, $col++, $this->lng->txt("exc_".$status));
628 
629  // #18096
630  $marks_obj = new ilLPMarks($this->getId(), $user_id);
631  $excel->setCell($row, $col++, $marks_obj->getMark());
632  $excel->setCell($row++, $col, $marks_obj->getComment());
633  }
634 
635 
636  //
637  // mark
638  //
639 
640  $excel->addSheet($this->lng->txt("exc_mark"));
641 
642  // header row
643  $row = $cnt = 1;
644  $excel->setCell($row, 0, $this->lng->txt("name"));
645  foreach ($ass_data as $ass)
646  {
647  $excel->setCell($row, $cnt++, $cnt-1);
648  }
649  $excel->setCell($row++, $cnt++, $this->lng->txt("exc_total_exc"));
650  $excel->setBold("A1:".$excel->getColumnCoord($cnt)."1");
651 
652  // data rows
653  reset($mems);
654  foreach ($mems as $user_id => $d)
655  {
656  $col = 0;
657 
658  // name
659  $d = ilObjUser::_lookupName($user_id);
660  $excel->setCell($row, $col++, $d["lastname"].", ".$d["firstname"]." [".$d["login"]."]");
661 
662  reset($ass_data);
663  foreach ($ass_data as $ass)
664  {
665  $excel->setCell($row, $col++, $ass->getMemberStatus($user_id)->getMark());
666  }
667 
668  // total mark
669  $excel->setCell($row++, $col, ilLPMarks::_lookupMark($user_id, $this->getId()));
670  }
671 
672  $exc_name = ilUtil::getASCIIFilename(preg_replace("/\s/", "_", $this->getTitle()));
673  $excel->sendToClient($exc_name);
674  }
675 
679  function sendFeedbackFileNotification($a_feedback_file, $a_user_id, $a_ass_id, $a_is_text_feedback = false)
680  {
681  $user_ids = $a_user_id;
682  if(!is_array($user_ids))
683  {
684  $user_ids = array($user_ids);
685  }
686 
687  include_once("./Modules/Exercise/classes/class.ilExerciseMailNotification.php");
688 
689  $type = (bool)$a_is_text_feedback
692 
693  $not = new ilExerciseMailNotification();
694  $not->setType($type);
695  $not->setAssignmentId($a_ass_id);
696  $not->setObjId($this->getId());
697  if ($this->getRefId() > 0)
698  {
699  $not->setRefId($this->getRefId());
700  }
701  $not->setRecipients($user_ids);
702  $not->send();
703  }
704 
714  {
716  }
717 
727  public function setCompletionBySubmission($bool)
728  {
729  $this->completion_by_submission = (bool)$bool;
730 
731  return $this;
732  }
733 
734  public function processExerciseStatus(ilExAssignment $a_ass, array $a_user_ids, $a_has_submitted, array $a_valid_submissions = null)
735  {
736  $a_has_submitted = (bool)$a_has_submitted;
737 
738  include_once("./Modules/Exercise/classes/class.ilExerciseMembers.php");
739  foreach($a_user_ids as $user_id)
740  {
741  $member_status = $a_ass->getMemberStatus($user_id);
742  $member_status->setReturned($a_has_submitted);
743  $member_status->update();
744 
745  ilExerciseMembers::_writeReturned($this->getId(), $user_id, $a_has_submitted);
746  }
747 
748  // re-evaluate exercise status
750  {
751  foreach($a_user_ids as $user_id)
752  {
753  $status = 'notgraded';
754  if($a_has_submitted)
755  {
756  if(!is_array($a_valid_submissions) ||
757  $a_valid_submissions[$user_id])
758  {
759  $status = 'passed';
760  }
761  }
762 
763  $member_status = $a_ass->getMemberStatus($user_id);
764  $member_status->setStatus($status);
765  $member_status->update();
766  }
767  }
768  }
769 
776  public static function _lookupFinishedUserExercises($a_user_id)
777  {
778  global $ilDB;
779 
780  $set = $ilDB->query("SELECT obj_id, status FROM exc_members".
781  " WHERE usr_id = ".$ilDB->quote($a_user_id, "integer").
782  " AND (status = ".$ilDB->quote("passed", "text").
783  " OR status = ".$ilDB->quote("failed", "text").")");
784 
785  $all = array();
786  while($row = $ilDB->fetchAssoc($set))
787  {
788  $all[$row["obj_id"]] = ($row["status"] == "passed");
789  }
790  return $all;
791  }
792 
793 
801  {
802  return (strlen($this->certificate_visibility)) ? $this->certificate_visibility : 0;
803  }
804 
811  function setCertificateVisibility($a_value)
812  {
813  $this->certificate_visibility = $a_value;
814  }
815 
822  function saveCertificateVisibility($a_value)
823  {
824  global $ilDB;
825 
826  $affectedRows = $ilDB->manipulateF("UPDATE exc_data SET certificate_visibility = %s WHERE obj_id = %s",
827  array('integer', 'integer'),
828  array($a_value, $this->getId())
829  );
830  }
831 
838  function hasUserCertificate($a_user_id)
839  {
840  // show certificate?
841  include_once "Services/Certificate/classes/class.ilCertificate.php";
843  {
844  $certificate_visible = $this->getCertificateVisibility();
845  // if not never
846  if($certificate_visible != 2)
847  {
848  // if passed only
849  include_once 'Modules/Exercise/classes/class.ilExerciseMembers.php';
850  $status = ilExerciseMembers::_lookupStatus($this->getId(), $a_user_id);
851  if($certificate_visible == 1 && $status == "passed")
852  {
853  return true;
854  }
855  // always (excluding notgraded)
856  else if($certificate_visible == 0 && $status != "notgraded")
857  {
858  return true;
859  }
860  }
861  }
862  return false;
863  }
864 
870  function hasAddToDesktop()
871  {
872  $exc_set = new ilSetting("excs");
873  return (bool)$exc_set->get("add_to_pd", true);
874  }
875 }
876 
877 ?>
static _lookupName($a_user_id)
lookup user name
ILIAS Setting Class.
setCompletionBySubmission($bool)
Enabled/Disable completion by submission.
getMemberStatus($a_user_id=null)
determinStatusOfUser($a_user_id=0)
Determine status of user.
static removeForObject($type, $id)
Remove all notifications for given object.
Exercise assignment.
getPassMode()
Get pass mode (all | nr)
Class ilExerciseMembers.
getCertificateVisibility()
Returns the visibility settings of the certificate.
This class handles all operations on files (attachments) in directory ilias_data/mail.
getId()
Get assignment id.
Class ilObject Basic functions for all objects.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
getDeadline()
Get deadline (timestamp)
setDate($a_hour, $a_minutes, $a_day, $a_month, $a_year)
const IL_CAL_UNIX
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static getASCIIFilename($a_filename)
convert utf8 to ascii filename
setInstruction($a_instruction)
static _writeStatus($a_obj_id, $a_user_id, $a_status)
Write user status.
for($col=0; $col< 50; $col++) $d
getShowSubmissions()
Get whether submissions of learners should be shown to other learners after deadline.
static _writeReturned($a_obj_id, $a_user_id, $a_status)
Write returned status.
setCertificateVisibility($a_value)
Sets the visibility settings of the certificate.
updateAllUsersStatus()
Update status of all users.
getExerciseId()
Get exercise id.
Class ilObjExercise.
setPassMode($a_val)
Set pass mode (all | nr)
getId()
get object id public
setTimestamp($a_timestamp)
__construct($a_id=0, $a_call_by_reference=true)
Constructor public.
This class handles base functions for mail handling.
static _lookupStatus($a_obj_id, $a_user_id)
Lookup current status (notgraded|passed|failed)
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
static getInstancesByExercise($a_exc_id)
static formatDate(ilDateTime $date)
Format a date public.
getTitle()
get object title public
getFiles()
Get assignment files.
Date and time handling
$ilUser
Definition: imgupload.php:18
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
Create styles array
The data for the language used.
setTutorFeedback($a_value)
sendFeedbackFileNotification($a_feedback_file, $a_user_id, $a_ass_id, $a_is_text_feedback=false)
Send feedback file notification to user.
hasAddToDesktop()
Add to desktop after hand-in.
static cloneAssignmentsOfExercise($a_old_exc_id, $a_new_exc_id, array $a_crit_cat_map)
Clone assignments of exercise.
isCompletionBySubmissionEnabled()
Checks whether completion by submission is enabled or not.
static _lookupFinishedUserExercises($a_user_id)
Get all exercises for user.
static isObjectActive($a_obj_id)
updateUserStatus($a_user_id=0)
Update exercise status of user.
setShowSubmissions($a_val)
Set whether submissions of learners should be shown to other learners after deadline.
static getInstancesByParentId($a_parent_id)
getInstruction()
Get instruction.
sendAssignment(ilExAssignment $a_ass, $a_members)
send exercise per mail to members
saveCertificateVisibility($a_value)
Saves the visibility settings of the certificate.
global $ilDB
$ret
Definition: parser.php:6
getRefId()
get reference id public
exportGradesExcel()
Exports grades as excel.
Create PDF certificates.
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
getPassNr()
Get number of assignments that must be passed to pass the exercise.
static _lookupMark($a_usr_id, $a_obj_id)
hasUserCertificate($a_user_id)
Check if given user has certificate to show/download.
processExerciseStatus(ilExAssignment $a_ass, array $a_user_ids, $a_has_submitted, array $a_valid_submissions=null)
cloneObject($a_target_id, $a_copy_id=0, $a_omit_tree=false)
Clone exercise (no member data)
setPassNr($a_val)
Set number of assignments that must be passed to pass the exercise.