4 require_once
"./Services/Object/classes/class.ilObject.php";
5 require_once
"./Modules/Exercise/classes/class.ilFileDataExercise.php";
6 require_once
"./Modules/Exercise/classes/class.ilExerciseMembers.php";
55 $this->
ilObject($a_id,$a_call_by_reference);
59 function setDate($a_hour,$a_minutes,$a_day,$a_month,$a_year)
61 $this->hour = (int) $a_hour;
62 $this->minutes = (int) $a_minutes;
63 $this->day = (int) $a_day;
64 $this->month = (int) $a_month;
65 $this->year = (int) $a_year;
66 $this->timestamp = mktime($this->hour,$this->minutes,0,$this->month,$this->day,$this->year);
75 $this->timestamp = $a_timestamp;
79 $this->instruction = $a_instruction;
93 $this->pass_mode = $a_val;
103 return $this->pass_mode;
113 $this->pass_nr = $a_val;
123 return $this->pass_nr;
133 $this->show_submissions = $a_val;
143 return $this->show_submissions;
154 return $this->hour == (int) date(
"H",$this->timestamp) and
155 $this->minutes == (int) date(
"i",$this->timestamp) and
156 $this->day == (int) date(
"d",$this->timestamp) and
157 $this->month == (int) date(
"m",$this->timestamp) and
158 $this->year == (int) date(
"Y",$this->timestamp);
165 function deliverFile($a_http_post_files, $a_ass_id, $user_id, $unzip =
false)
169 include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
171 $deliver_result = $storage->deliverFile($a_http_post_files, $user_id, $unzip);
175 $next_id = $ilDB->nextId(
"exc_returned");
176 $query = sprintf(
"INSERT INTO exc_returned ".
177 "(returned_id, obj_id, user_id, filename, filetitle, mimetype, ts, ass_id) ".
178 "VALUES (%s, %s, %s, %s, %s, %s, %s, %s)",
179 $ilDB->quote($next_id,
"integer"),
180 $ilDB->quote($this->
getId(),
"integer"),
181 $ilDB->quote($user_id,
"integer"),
182 $ilDB->quote($deliver_result[
"fullname"],
"text"),
183 $ilDB->quote($a_http_post_files[
"name"],
"text"),
184 $ilDB->quote($deliver_result[
"mimetype"],
"text"),
186 $ilDB->quote($a_ass_id,
"integer")
188 $ilDB->manipulate(
$query);
194 $user_ids = array($user_id);
202 foreach($user_ids as $user_id)
204 if (!$this->members_obj->isAssigned($user_id))
206 $this->members_obj->assignMember($user_id);
221 if ($unzipUploadedFile && preg_match(
"/zip/", $a_http_post_files[
"type"]) == 1)
231 $this->file_obj->storeUploadedFile($a_http_post_files,
true);
237 $this->file_obj->unlinkFiles($a_files);
251 $ilDB->insert(
"exc_data", array(
252 "obj_id" => array(
"integer", $this->
getId()),
254 "time_stamp" => array(
"integer", $this->
getTimestamp()),
255 "pass_mode" => array(
"text", $this->
getPassMode()),
256 "pass_nr" => array(
"text", $this->
getPassNr()),
280 $new_obj->saveData();
289 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
296 include_once(
'Services/Tracking/classes/class.ilLPObjSettings.php');
298 $obj_settings->cloneSettings($new_obj->getId());
299 unset($obj_settings);
321 $user_ids = array($user_id);
324 foreach($user_ids as $user_id)
338 require_once
"./Services/Utilities/classes/class.ilUtil.php";
352 if (!parent::delete())
357 $ilDB->manipulate(
"DELETE FROM exc_data ".
358 "WHERE obj_id = ".$ilDB->quote($this->getId(),
"integer"));
366 include_once
"./Services/Notification/classes/class.ilNotification.php";
382 function notify($a_event,$a_ref_id,$a_node_id,$a_params = 0)
395 $query =
"SELECT * FROM exc_data ".
396 "WHERE obj_id = ".$ilDB->quote($this->
getId(),
"integer");
399 while(
$row = $ilDB->fetchObject(
$res))
403 $pm = (
$row->pass_mode ==
"")
406 $this->setPassMode($pm);
408 if (
$row->pass_mode ==
"nr")
446 $ilDB->update(
"exc_data", array(
448 "time_stamp" => array(
"integer", $this->
getTimestamp()),
449 "pass_mode" => array(
"text", $this->
getPassMode()),
450 "pass_nr" => array(
"integer", $this->
getPassNr()),
454 "obj_id" => array(
"integer", $this->
getId())
461 #$this->members_obj->update();
470 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
473 include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
475 $files = $storage->getFiles();
479 include_once
"./Services/Mail/classes/class.ilFileDataMail.php";
484 $mfile_obj->copyAttachmentFile($file[
"fullpath"], $file[
"name"]);
485 $file_names[] = $file[
"name"];
489 include_once
"Services/Mail/classes/class.ilMail.php";
492 $message = $tmp_mail_obj->sendMail(
495 count($file_names) ? $file_names : array(),array(
"normal"));
497 unset($tmp_mail_obj);
499 if(count($file_names))
501 $mfile_obj->unlinkFiles($file_names);
507 foreach($a_members as $member_id => $value)
525 "WHERE obj_id= ".$ilDB->quote($exc_id,
"integer").
526 " AND usr_id= ".$ilDB->quote($member_id,
"integer");
528 $set = $ilDB->query($q);
529 if ($rec = $ilDB->fetchAssoc($set))
540 $lng->loadLanguageModule(
"exc");
542 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
545 $body = $ass->getInstruction();
547 if ($ass->getDeadline() == 0)
549 $body .= $lng->txt(
"exc_edit_until") .
": ".
550 $lng->txt(
"exc_no_deadline_specified");
554 $body .= $lng->txt(
"exc_edit_until") .
": ".
558 $body .= ILIAS_HTTP_PATH.
561 "_".$this->getRefId().
"&client_id=".CLIENT_ID;
570 if ($a_ass_title !=
"")
572 $subject.=
": ".$a_ass_title;
580 foreach($a_members as $member_id => $value)
583 $tmp_members[] = $tmp_obj->getLogin();
588 return implode(
',',$tmp_members ? $tmp_members : array());
595 $a_usr_id = $a_usr_id ? $a_usr_id : $ilUser->getId();
631 include_once (
"Services/Utilities/classes/class.ilFileUtils.php");
638 foreach ($filearray[
"file"] as $key =>
$filename)
641 $a_http_post_files[
"type"] =
"other";
642 $a_http_post_files[
"tmp_name"] = $filearray[
"path"][$key].
"/".
$filename;
643 $a_http_post_files[
"error"] = 0;
644 $a_http_post_files[
"size"] = filesize($filearray[
"path"][$key].
"/".
$filename);
646 if ($storageMethod ==
"deliverFile")
648 $this->$storageMethod($a_http_post_files, $a_ass_id, $ilUser->id,
true);
650 else if ($storageMethod ==
"storeUploadedFile")
652 $this->file_obj->$storageMethod($a_http_post_files,
true,
true);
681 $ex_pos = strrpos($a_filename,
"/exercise/");
684 $a_filename = CLIENT_DATA_DIR.substr($a_filename, $ex_pos);
695 if (is_array($a_array))
697 foreach ($a_array as $k => $v)
699 if ($v[
"filename"] !=
"")
718 $a_user_id = $ilUser->getId();
721 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
724 $passed_all_mandatory =
true;
725 $failed_a_mandatory =
false;
728 $passed_at_least_one =
false;
733 if ($a[
"mandatory"] && ($stat ==
"failed" || $stat ==
"notgraded"))
735 $passed_all_mandatory =
false;
737 if ($a[
"mandatory"] && ($stat ==
"failed"))
739 $failed_a_mandatory =
true;
741 if ($stat ==
"passed")
745 if ($stat ==
"notgraded")
751 if (count($ass) == 0)
753 $passed_all_mandatory =
false;
759 $overall_stat =
"notgraded";
760 if ($failed_a_mandatory)
763 $overall_stat =
"failed";
765 else if ($passed_all_mandatory && $cnt_passed > 0)
768 $overall_stat =
"passed";
775 $overall_stat =
"notgraded";
777 if ($failed_a_mandatory || ($cnt_passed + $cnt_notgraded < $min_nr))
780 $overall_stat =
"failed";
782 else if ($passed_all_mandatory && $cnt_passed >= $min_nr)
785 $overall_stat =
"passed";
790 "overall_status" => $overall_stat,
791 "failed_a_mandatory" => $failed_a_mandatory);
806 $a_user_id = $ilUser->getId();
811 include_once(
"./Modules/Exercise/classes/class.ilExerciseMembers.php");
813 $st[
"overall_status"]);
821 if (!is_object($this->members_obj));
826 $mems = $this->members_obj->getMembers();
827 foreach ($mems as $mem)
838 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
841 include_once
"./Services/Excel/classes/class.ilExcelWriterAdapter.php";
844 $workbook = $adapter->getWorkbook();
845 $workbook->setVersion(8);
846 include_once (
"./Services/Excel/classes/class.ilExcelUtils.php");
851 $mainworksheet = $workbook->addWorksheet();
856 foreach ($ass_data as $ass)
858 $mainworksheet->writeString(0, $cnt, $cnt);
865 $getmems = $this->mem_obj->getMembers();
867 foreach ($getmems as $user_id)
875 foreach ($mems as $user_id =>
$d)
880 $mainworksheet->writeString($row_cnt, 0,
885 foreach ($ass_data as $ass)
902 $worksheet2 = $workbook->addWorksheet();
907 foreach ($ass_data as $ass)
909 $worksheet2->writeString(0, $cnt, $cnt);
918 foreach ($mems as $user_id =>
$d)
924 $worksheet2->writeString($row_cnt, 0,
929 foreach ($ass_data as $ass)
931 $worksheet2->writeString($row_cnt, $col_cnt,
937 include_once
'Services/Tracking/classes/class.ilLPMarks.php';
938 $worksheet2->writeString($row_cnt, $col_cnt,
955 $user_ids = $a_user_id;
956 if(!is_array($user_ids))
958 $user_ids = array($user_ids);
961 include_once(
"./Modules/Exercise/classes/class.ilExerciseMailNotification.php");
964 $not->setAssignmentId($a_ass_id);
965 $not->setObjId($this->
getId());
970 $not->setRecipients($user_ids);
998 $this->completion_by_submission = (bool)$bool;
1019 include_once
'Modules/Exercise/classes/class.ilExAssignment.php';
1025 $user_ids = array($ilUser->getId());
1028 $res = $ilDB->query(
1029 'SELECT returned_id'.
1030 ' FROM exc_returned'.
1031 ' WHERE obj_id = '.$ilDB->quote($this->getId(),
'integer').
1032 ' AND ass_id = '.$ilDB->quote($ass_id,
'integer').
1033 ' AND '.$ilDB->in(
'user_id', $user_ids,
'',
'integer')
1036 if($ilDB->numRows(
$res))
1042 $status =
'notgraded';
1044 foreach($user_ids as $user_id)
1061 $set = $ilDB->query(
"SELECT obj_id, status FROM exc_members".
1062 " WHERE usr_id = ".$ilDB->quote($a_user_id,
"integer").
1063 " AND (status = ".$ilDB->quote(
"passed",
"text").
1064 " OR status = ".$ilDB->quote(
"failed",
"text").
")");
1067 while(
$row = $ilDB->fetchAssoc($set))
1069 $all[
$row[
"obj_id"]] = ($row[
"status"] ==
"passed");
1086 $next_id = $ilDB->nextId(
"exc_returned");
1087 $query = sprintf(
"INSERT INTO exc_returned ".
1088 "(returned_id, obj_id, user_id, filetitle, ass_id, ts, atext) ".
1089 "VALUES (%s, %s, %s, %s, %s, %s, %s)",
1090 $ilDB->quote($next_id,
"integer"),
1091 $ilDB->quote($this->
getId(),
"integer"),
1092 $ilDB->quote($user_id,
"integer"),
1093 $ilDB->quote($a_wsp_id,
"text"),
1094 $ilDB->quote($a_ass_id,
"integer"),
1096 $ilDB->quote($a_text,
"text")
1098 $ilDB->manipulate(
$query);
1099 if (!$this->members_obj->isAssigned($user_id))
1101 $this->members_obj->assignMember($user_id);
1121 $ilDB->manipulate(
"DELETE FROM exc_returned".
1122 " WHERE obj_id = ".$ilDB->quote($this->getId(),
"integer").
1123 " AND user_id = ".$ilDB->quote($user_id,
"integer").
1124 " AND ass_id = ".$ilDB->quote($a_ass_id,
"integer").
1125 " AND returned_id = ".$ilDB->quote($a_returned_id,
"integer"));
1168 $ilDB->manipulate(
"UPDATE exc_returned".
1169 " SET atext = ".$ilDB->quote($a_text,
"text").
1170 ", ts = ".$ilDB->quote(
ilUtil::now(),
"timestamp").
1171 " WHERE returned_id = ".$ilDB->quote(
$id,
"integer"));
1181 $set = $ilDB->query(
"SELECT obj_id".
1182 " FROM exc_returned".
1183 " WHERE returned_id = ".$ilDB->quote($a_returned_id,
"integer"));
1184 $row = $ilDB->fetchAssoc($set);
1185 return (
int)
$row[
"obj_id"];
1195 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
1209 $set = $ilDB->query(
"SELECT obj_id, ass_id".
1210 " FROM exc_returned".
1211 " WHERE user_id = ".$ilDB->quote($a_user_id,
"integer").
1212 " AND filetitle = ".$ilDB->quote($a_filetitle,
"text"));
1214 while(
$row = $ilDB->fetchAssoc($set))
1229 return (strlen($this->certificate_visibility)) ? $this->certificate_visibility : 0;
1240 $this->certificate_visibility = $a_value;
1253 $affectedRows = $ilDB->manipulateF(
"UPDATE exc_data SET certificate_visibility = %s WHERE obj_id = %s",
1254 array(
'integer',
'integer'),
1255 array($a_value, $this->
getId())
1268 include_once
"Services/Certificate/classes/class.ilCertificate.php";
1273 if($certificate_visible != 2)
1276 include_once
'Modules/Exercise/classes/class.ilExerciseMembers.php';
1278 if($certificate_visible == 1 && $status ==
"passed")
1283 else if($certificate_visible == 0 && $status !=
"notgraded")