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
4require_once "./Services/Object/classes/class.ilObject.php";
5require_once "./Modules/Exercise/classes/class.ilExerciseMembers.php";
6
20{
23 var $files;
24
26 var $hour;
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 {
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
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?>
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
for($col=0; $col< 50; $col++) $d
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
Create PDF certificates.
static isObjectActive($a_obj_id)
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
Exercise assignment.
getExerciseId()
Get exercise id.
getId()
Get assignment id.
getInstruction()
Get instruction.
static getInstancesByExercise($a_exc_id)
static cloneAssignmentsOfExercise($a_old_exc_id, $a_new_exc_id, array $a_crit_cat_map)
Clone assignments of exercise.
getMemberStatus($a_user_id=null)
getDeadline()
Get deadline (timestamp)
static getInstancesByParentId($a_parent_id)
Class ilExerciseMembers.
static _writeReturned($a_obj_id, $a_user_id, $a_status)
Write returned status.
static _lookupStatus($a_obj_id, $a_user_id)
Lookup current status (notgraded|passed|failed)
static _writeStatus($a_obj_id, $a_user_id, $a_status)
Write user status.
This class handles all operations on files (attachments) in directory ilias_data/mail.
static _lookupMark($a_usr_id, $a_obj_id)
This class handles base functions for mail handling.
static removeForObject($type, $id)
Remove all notifications for given object.
Class ilObjExercise.
static _lookupFinishedUserExercises($a_user_id)
Get all exercises for user.
hasAddToDesktop()
Add to desktop after hand-in.
sendFeedbackFileNotification($a_feedback_file, $a_user_id, $a_ass_id, $a_is_text_feedback=false)
Send feedback file notification to user.
setTimestamp($a_timestamp)
determinStatusOfUser($a_user_id=0)
Determine status of user.
updateAllUsersStatus()
Update status of all users.
setPassNr($a_val)
Set number of assignments that must be passed to pass the exercise.
getShowSubmissions()
Get whether submissions of learners should be shown to other learners after deadline.
setShowSubmissions($a_val)
Set whether submissions of learners should be shown to other learners after deadline.
__construct($a_id=0, $a_call_by_reference=true)
Constructor @access public.
processExerciseStatus(ilExAssignment $a_ass, array $a_user_ids, $a_has_submitted, array $a_valid_submissions=null)
update()
update object in db
saveCertificateVisibility($a_value)
Saves the visibility settings of the certificate.
setTutorFeedback($a_value)
updateUserStatus($a_user_id=0)
Update exercise status of user.
setCertificateVisibility($a_value)
Sets the visibility settings of the certificate.
exportGradesExcel()
Exports grades as excel.
setPassMode($a_val)
Set pass mode (all | nr)
setInstruction($a_instruction)
getPassNr()
Get number of assignments that must be passed to pass the exercise.
hasUserCertificate($a_user_id)
Check if given user has certificate to show/download.
setDate($a_hour, $a_minutes, $a_day, $a_month, $a_year)
getCertificateVisibility()
Returns the visibility settings of the certificate.
read()
read object data from db into object
sendAssignment(ilExAssignment $a_ass, $a_members)
send exercise per mail to members
cloneObject($a_target_id, $a_copy_id=0, $a_omit_tree=false)
Clone exercise (no member data)
setCompletionBySubmission($bool)
Enabled/Disable completion by submission.
isCompletionBySubmissionEnabled()
Checks whether completion by submission is enabled or not.
getPassMode()
Get pass mode (all | nr)
static _lookupName($a_user_id)
lookup user name
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
Class ilObject Basic functions for all objects.
getRefId()
get reference id @access public
getId()
get object id @access public
getTitle()
get object title @access public
ILIAS Setting Class.
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
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
$ret
Definition: parser.php:6
if(!file_exists("$old.txt")) if( $old===$new) if(file_exists("$new.txt")) $file
global $ilDB
$ilUser
Definition: imgupload.php:18