87 $this->db = $DIC->database();
88 $this->lng = $DIC->language();
89 $this->
user = $DIC->user();
90 $this->app_event_handler = $DIC[
"ilAppEventHandler"];
91 $this->
setType(self::TYPE_UPLOAD);
106 $ilDB = $DIC->database();
108 $set =
$ilDB->query(
"SELECT * FROM exc_assignment " .
109 " WHERE exc_id = " .
$ilDB->quote($a_exc_id,
"integer") .
110 " ORDER BY order_nr ASC");
114 while ($rec =
$ilDB->fetchAssoc($set)) {
116 $rec[
"order_val"] = $order_val;
119 $ass->initFromDB($rec);
137 $db = $DIC->database();
140 $result_order_val =
$db->query(
" 142 FROM exc_ass_file_order 143 WHERE assignment_id = {$db->quote($a_ass_id, 'integer')} 144 AND filename = {$db->quote($a_file_data['entry'], 'string')} 149 while (
$row =
$db->fetchAssoc($result_order_val)) {
150 $order_val = (int)
$row[
'order_nr'];
151 $order_id = (int)
$row[
'id'];
153 return array($order_val, $order_id);
158 return $this->type == self::TYPE_UPLOAD_TEAM;
188 $this->exc_id = $a_val;
208 $this->start_time = $a_val;
228 $this->deadline = $a_val;
251 if ($this->
getType() == self::TYPE_UPLOAD_TEAM) {
252 include_once(
"./Modules/Exercise/classes/class.ilExAssignmentTeam.php");
258 $a_user_id = $team_id;
262 $set =
$ilDB->query(
"SELECT tstamp FROM exc_idl" .
263 " WHERE ass_id = " .
$ilDB->quote($this->getId(),
"integer") .
264 " AND member_id = " .
$ilDB->quote($a_user_id,
"integer") .
265 " AND is_team = " .
$ilDB->quote($is_team,
"integer"));
281 $set =
$ilDB->query(
"SELECT MAX(tstamp) FROM exc_idl" .
282 " WHERE ass_id = " .
$ilDB->quote($this->getId(),
"integer"));
284 return $row[
"tstamp"];
294 if ($a_val !== null) {
295 $a_val = (int) $a_val;
297 $this->deadline2 = $a_val;
317 $this->instruction = $a_val;
337 $this->title = $a_val;
357 $this->mandatory = $a_val;
377 $this->order_nr = $a_val;
398 $this->type = (int) $a_value;
400 if ($this->type == self::TYPE_UPLOAD_TEAM) {
424 if (in_array((
int) $a_value,
array(self::TYPE_UPLOAD, self::TYPE_BLOG,
425 self::TYPE_PORTFOLIO, self::TYPE_UPLOAD_TEAM, self::TYPE_TEXT))) {
438 $this->peer = (bool) $a_value;
458 $this->peer_min = (int) $a_value;
478 $this->peer_unlock = (bool) $a_value;
498 $this->peer_dl = $a_val;
518 $this->peer_valid = (int) $a_value;
538 $this->peer_rating = (bool) $a_val;
558 $this->peer_text = (bool) $a_val;
578 $this->peer_file = (bool) $a_val;
598 $this->peer_personal = (bool) $a_val;
618 $a_value = (is_numeric($a_value) && (int) $a_value > 0)
621 $this->peer_char = $a_value;
641 $a_value = is_numeric($a_value)
644 $this->crit_cat = $a_value;
654 return $this->crit_cat;
659 include_once
"Modules/Exercise/classes/class.ilExcCriteria.php";
661 if ($this->crit_cat) {
666 if ($this->peer_rating) {
670 if ($this->peer_text) {
672 if ($this->peer_char) {
673 $crit->setMinChars($this->peer_char);
678 if ($this->peer_file) {
693 $this->feedback_file = (
string) $a_value;
713 $this->feedback_cron = (
string) $a_value;
733 $this->feedback_date = (int) $a_value;
753 $this->team_tutor = (bool) $a_value;
773 if ($a_value !== null) {
774 $a_value = (int) $a_value;
776 $this->max_file = $a_value;
796 $this->portfolio_template = $a_val;
818 "SELECT * FROM exc_assignment " .
819 " WHERE id = " .
$ilDB->quote($this->getId(),
"integer")
821 $rec =
$ilDB->fetchAssoc($set);
824 if (is_array($rec)) {
837 $this->
setId($a_set[
"id"]);
846 $this->
setType($a_set[
"type"]);
882 $next_id =
$ilDB->nextId(
"exc_assignment");
884 "id" =>
array(
"integer", $next_id),
910 "portfolio_template" =>
array(
"integer", $this->getPortFolioTemplateId()),
914 $this->
setId($next_id);
916 $exc->updateAllUsersStatus();
917 self::createNewAssignmentRecords($next_id, $exc);
957 "portfolio_template" =>
array(
"integer", $this->getPortFolioTemplateId()),
966 $exc->updateAllUsersStatus();
974 public function delete()
981 "DELETE FROM exc_assignment WHERE " .
982 " id = " .
$ilDB->quote($this->getId(),
"integer")
985 $exc->updateAllUsersStatus();
998 $ilDB = $DIC->database();
1002 $set =
$ilDB->query(
"SELECT * FROM exc_assignment " .
1003 " WHERE exc_id = " .
$ilDB->quote($a_exc_id,
"integer") .
1004 " ORDER BY order_nr ASC");
1008 while ($rec =
$ilDB->fetchAssoc($set)) {
1011 "exc_id" => $rec[
"exc_id"],
1012 "deadline" => $rec[
"time_stamp"],
1013 "deadline2" => $rec[
"deadline2"],
1014 "instruction" => $rec[
"instruction"],
1015 "title" => $rec[
"title"],
1016 "start_time" => $rec[
"start_time"],
1017 "order_val" => $order_val,
1018 "mandatory" => $rec[
"mandatory"],
1019 "type" => $rec[
"type"],
1020 "peer" => $rec[
"peer"],
1021 "peer_min" => $rec[
"peer_min"],
1022 "peer_dl" => $rec[
"peer_dl"],
1023 "peer_file" => $rec[
"peer_file"],
1024 "peer_prsl" => $rec[
"peer_prsl"],
1025 "fb_file" => $rec[
"fb_file"],
1026 "fb_date" => $rec[
"fb_date"],
1027 "fb_cron" => $rec[
"fb_cron"],
1042 $ass_data = self::getInstancesByExercise($a_old_exc_id);
1043 foreach ($ass_data as
$d) {
1046 $new_ass->setExerciseId($a_new_exc_id);
1047 $new_ass->setTitle($d->getTitle());
1048 $new_ass->setDeadline($d->getDeadline());
1049 $new_ass->setExtendedDeadline($d->getExtendedDeadline());
1050 $new_ass->setInstruction($d->getInstruction());
1051 $new_ass->setMandatory($d->getMandatory());
1052 $new_ass->setOrderNr($d->getOrderNr());
1053 $new_ass->setStartTime($d->getStartTime());
1054 $new_ass->setType($d->getType());
1055 $new_ass->setPeerReview($d->getPeerReview());
1056 $new_ass->setPeerReviewMin($d->getPeerReviewMin());
1057 $new_ass->setPeerReviewDeadline($d->getPeerReviewDeadline());
1058 $new_ass->setPeerReviewFileUpload($d->hasPeerReviewFileUpload());
1059 $new_ass->setPeerReviewPersonalized($d->hasPeerReviewPersonalized());
1060 $new_ass->setPeerReviewValid($d->getPeerReviewValid());
1061 $new_ass->setPeerReviewChars($d->getPeerReviewChars());
1062 $new_ass->setPeerReviewText($d->hasPeerReviewText());
1063 $new_ass->setPeerReviewRating($d->hasPeerReviewRating());
1064 $new_ass->setPeerReviewCriteriaCatalogue($d->getPeerReviewCriteriaCatalogue());
1065 $new_ass->setPeerReviewSimpleUnlock($d->getPeerReviewSimpleUnlock());
1066 $new_ass->setFeedbackFile($d->getFeedbackFile());
1067 $new_ass->setFeedbackDate($d->getFeedbackDate());
1068 $new_ass->setFeedbackCron($d->hasFeedbackCron());
1069 $new_ass->setTeamTutor($d->getTeamTutor());
1070 $new_ass->setMaxFile($d->getMaxFile());
1071 $new_ass->setMinCharLimit($d->getMinCharLimit());
1072 $new_ass->setMaxCharLimit($d->getMaxCharLimit());
1073 $new_ass->setPortfolioTemplateId($d->getPortfolioTemplateId());
1077 if ($d->getPeerReviewCriteriaCatalogue() &&
1078 array_key_exists($d->getPeerReviewCriteriaCatalogue(), $a_crit_cat_map)) {
1079 $new_ass->setPeerReviewCriteriaCatalogue($a_crit_cat_map[$d->getPeerReviewCriteriaCatalogue()]);
1086 include_once(
"./Modules/Exercise/classes/class.ilFSWebStorageExercise.php");
1089 $new_web_storage->
create();
1090 if (is_dir($old_web_storage->getPath())) {
1095 include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
1099 if (is_dir($old_storage->getGlobalFeedbackPath())) {
1110 $this->log->debug(
"getting files from class.ilExAssignment using ilFSWebStorageExercise");
1111 include_once(
"./Modules/Exercise/classes/class.ilFSWebStorageExercise.php");
1113 return $storage->getFiles();
1124 $set =
$ilDB->query(
1125 "SELECT filename, order_nr, id FROM exc_ass_file_order " .
1126 " WHERE assignment_id = " .
$ilDB->quote($this->getId(),
"integer")
1130 while ($rec =
$ilDB->fetchAssoc($set)) {
1131 $data[$rec[
'filename']] = $rec;
1144 $ilDB = $DIC->database();
1146 $set =
$ilDB->query(
1147 "SELECT MAX(order_nr) mnr FROM exc_assignment " .
1148 " WHERE exc_id = " .
$ilDB->quote($a_exc_id,
"integer")
1150 while ($rec =
$ilDB->fetchAssoc($set)) {
1151 return (
int) $rec[
"mnr"];
1165 $ilDB = $DIC->database();
1167 $query =
"SELECT id FROM exc_assignment " .
1168 "WHERE start_time <= " .
$ilDB->quote(
time(),
'integer') .
' ' .
1169 "AND time_stamp >= " .
$ilDB->quote(
time(),
'integer') .
' ' .
1170 "AND id = " .
$ilDB->quote($a_ass_id,
'integer');
1173 return $res->numRows() ? true :
false;
1186 $ilDB = $DIC->database();
1188 $query =
"SELECT exc_id FROM exc_assignment " .
1189 "WHERE id = " .
$ilDB->quote($a_ass_id,
'integer');
1192 return (
int)
$res[
"exc_id"];
1198 private static function lookup($a_id, $a_field)
1202 $ilDB = $DIC->database();
1204 $set =
$ilDB->query(
1205 "SELECT " . $a_field .
" FROM exc_assignment " .
1206 " WHERE id = " .
$ilDB->quote($a_id,
"integer")
1209 $rec =
$ilDB->fetchAssoc($set);
1211 return $rec[$a_field];
1219 return self::lookup($a_id,
"title");
1227 return self::lookup($a_id,
"type");
1237 $ilDB = $DIC->database();
1239 $result_order =
array();
1242 foreach ($a_order as $k => $v) {
1245 $t =
"UPDATE exc_assignment SET " .
1246 " order_nr = " .
$ilDB->quote($nr,
"integer") .
1247 " WHERE id = " .
$ilDB->quote((
int) $k,
"integer") .
1248 " AND exc_id = " .
$ilDB->quote((
int) $a_ex_id,
"integer")
1261 $ilDB = $DIC->database();
1263 $set =
$ilDB->query(
1264 "SELECT id FROM exc_assignment " .
1265 " WHERE exc_id = " .
$ilDB->quote($a_ex_id,
"integer") .
1266 " ORDER BY time_stamp ASC" 1269 while ($rec =
$ilDB->fetchAssoc($set)) {
1271 "UPDATE exc_assignment SET " .
1272 " order_nr = " .
$ilDB->quote($nr,
"integer") .
1273 " WHERE id = " .
$ilDB->quote($rec[
"id"],
"integer")
1286 $ilDB = $DIC->database();
1288 $set =
$ilDB->query(
1289 "SELECT count(*) cntm FROM exc_assignment " .
1290 " WHERE exc_id = " .
$ilDB->quote($a_ex_id,
"integer") .
1291 " AND mandatory = " .
$ilDB->quote(1,
"integer")
1293 $rec =
$ilDB->fetchAssoc($set);
1294 return $rec[
"cntm"];
1306 $ilDB = $DIC->database();
1307 $lng = $DIC->language();
1310 $user_ids = self::getTeamMembersByAssignmentId($ass_id, $member_id);
1312 $user_ids =
array($member_id);
1315 $q=
"SELECT exc_mem_ass_status.status_time, exc_returned.ts " .
1316 "FROM exc_mem_ass_status, exc_returned " .
1317 "WHERE exc_mem_ass_status.status_time < exc_returned.ts " .
1318 "AND NOT exc_mem_ass_status.status_time IS NULL " .
1319 "AND exc_returned.ass_id = exc_mem_ass_status.ass_id " .
1320 "AND exc_returned.user_id = exc_mem_ass_status.usr_id " .
1321 "AND exc_returned.ass_id=" .
$ilDB->quote($ass_id,
"integer") .
1322 " AND " .
$ilDB->in(
"exc_returned.user_id", $user_ids,
"",
"integer");
1324 $usr_set =
$ilDB->query($q);
1326 $array =
$ilDB->fetchAssoc($usr_set);
1328 if (count($array)==0) {
1345 $set =
$ilDB->query(
"SELECT ud.usr_id, ud.lastname, ud.firstname, ud.login" .
1346 " FROM exc_members excm" .
1347 " JOIN usr_data ud ON (ud.usr_id = excm.usr_id)" .
1348 " WHERE excm.obj_id = " .
$ilDB->quote($this->getExerciseId(),
"integer"));
1349 while ($rec =
$ilDB->fetchAssoc($set)) {
1350 $mem[$rec[
"usr_id"]] =
1352 "name" => $rec[
"lastname"] .
", " . $rec[
"firstname"],
1353 "login" => $rec[
"login"],
1354 "usr_id" => $rec[
"usr_id"],
1355 "lastname" => $rec[
"lastname"],
1356 "firstname" => $rec[
"firstname"]
1360 include_once
"Modules/Exercise/classes/class.ilExSubmission.php";
1362 $q =
"SELECT * FROM exc_mem_ass_status " .
1363 "WHERE ass_id = " .
$ilDB->quote($this->
getId(),
"integer");
1364 $set =
$ilDB->query($q);
1365 while ($rec =
$ilDB->fetchAssoc($set)) {
1366 if (isset($mem[$rec[
"usr_id"]])) {
1369 $mem[$rec[
"usr_id"]][
"sent_time"] = $rec[
"sent_time"];
1370 $mem[$rec[
"usr_id"]][
"submission"] = $sub->getLastSubmission();
1371 $mem[$rec[
"usr_id"]][
"status_time"] = $rec[
"status_time"];
1372 $mem[$rec[
"usr_id"]][
"feedback_time"] = $rec[
"feedback_time"];
1373 $mem[$rec[
"usr_id"]][
"notice"] = $rec[
"notice"];
1374 $mem[$rec[
"usr_id"]][
"status"] = $rec[
"status"];
1375 $mem[$rec[
"usr_id"]][
"mark"] = $rec[
"mark"];
1376 $mem[$rec[
"usr_id"]][
"comment"] = $rec[
"u_comment"];
1389 $ilDB = $DIC->database();
1391 $ass_data = self::getAssignmentDataOfExercise($a_exc_id);
1392 foreach ($ass_data as $ass) {
1395 "ass_id" =>
array(
"integer", $ass[
"id"]),
1396 "usr_id" =>
array(
"integer", $a_user_id)
1398 "status" =>
array(
"text",
"notgraded")
1410 $ilDB = $DIC->database();
1412 include_once(
"./Modules/Exercise/classes/class.ilExerciseMembers.php");
1414 $mems = $exmem->getMembers();
1416 foreach ($mems as $mem) {
1418 "ass_id" =>
array(
"integer", $a_ass_id),
1419 "usr_id" =>
array(
"integer", $mem)
1421 "status" =>
array(
"text",
"notgraded")
1433 include_once(
"./Modules/Exercise/classes/class.ilFSWebStorageExercise.php");
1436 $storage->uploadAssignmentFiles($a_files);
1453 $deliverFilename = trim(str_replace(
" ",
"_", $this->
getTitle() .
"_" . $this->
getId()));
1455 $deliverFilename =
"multi_feedback_" . $deliverFilename;
1464 $mfdir = $tmpdir .
"/" . $deliverFilename;
1468 include_once(
"./Modules/Exercise/classes/class.ilExerciseMembers.php");
1470 $mems = $exmem->getMembers();
1472 $mems = $DIC->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
1473 'edit_submissions_grades',
1474 'edit_submissions_grades',
1478 foreach ($mems as $mem) {
1480 $subdir =
$name[
"lastname"] .
"_" .
$name[
"firstname"] .
"_" .
$name[
"login"] .
"_" .
$name[
"user_id"];
1487 $tmpzipfile = $tmpdir .
"/multi_feedback.zip";
1506 include_once(
"./Modules/Exercise/exceptions/class.ilExerciseException.php");
1507 if (!is_file($a_file[
"tmp_name"])) {
1511 include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
1513 $mfu = $storage->getMultiFeedbackUploadPath(
$ilUser->getId());
1515 ilUtil::moveUploadedFile($a_file[
"tmp_name"],
"multi_feedback.zip", $mfu .
"/" .
"multi_feedback.zip");
1518 $subdir =
"notfound";
1519 foreach ($subdirs as
$s => $j) {
1520 if ($j[
"type"] ==
"dir" && substr(
$s, 0, 14) ==
"multi_feedback") {
1525 if (!is_dir($mfu .
"/" . $subdir)) {
1542 if ($a_user_id == 0) {
1543 $a_user_id =
$ilUser->getId();
1546 $mf_files =
array();
1550 include_once(
"./Modules/Exercise/classes/class.ilExerciseMembers.php");
1552 $mems = $exmem->getMembers();
1555 include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
1557 $mfu = $storage->getMultiFeedbackUploadPath(
$ilUser->getId());
1561 $subdir =
"notfound";
1562 foreach ($subdirs as
$s => $j) {
1563 if ($j[
"type"] ==
"dir" && substr(
$s, 0, 14) ==
"multi_feedback") {
1569 foreach ($items as $k =>
$i) {
1571 if (
$i[
"type"] ==
"dir" && !in_array($k,
array(
".",
".."))) {
1573 $parts = explode(
"_",
$i[
"entry"]);
1574 $user_id = (int) $parts[count($parts) - 1];
1575 if (in_array($user_id, $mems)) {
1579 foreach (
$files as $k2 => $f) {
1581 if ($f[
"type"] ==
"file" && substr($k2, 0, 1) !=
".") {
1582 $mf_files[] =
array(
1583 "lastname" =>
$name[
"lastname"],
1584 "firstname" =>
$name[
"firstname"],
1585 "login" =>
$name[
"login"],
1586 "user_id" =>
$name[
"user_id"],
1587 "full_path" => $mfu .
"/" . $subdir .
"/" . $k .
"/" . $k2,
1608 include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
1610 $mfu = $storage->getMultiFeedbackUploadPath(
$ilUser->getId());
1626 include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
1628 $fstorage->create();
1630 $team_map =
array();
1633 foreach ($mf_files as $f) {
1634 $user_id = $f[
"user_id"];
1635 $file_path = $f[
"full_path"];
1636 $file_name = $f[
"file"];
1639 if ($a_files[$user_id][md5($file_name)] !=
"") {
1641 $feedback_id = $submission->getFeedbackId();
1642 $noti_rec_ids = $submission->getUserIds();
1645 $fb_path = $fstorage->getFeedbackPath($feedback_id);
1646 $target = $fb_path .
"/" . $file_name;
1653 if ($noti_rec_ids) {
1654 foreach ($noti_rec_ids as $user_id) {
1663 (
int) $this->
getId()
1685 $dl_id = $this->
getId() .
"0";
1686 $fbdl_id = $this->
getId() .
"1";
1688 $context_ids =
array($dl_id, $fbdl_id);
1691 if ($a_event !=
"delete") {
1692 include_once
"Services/Calendar/classes/class.ilCalendarAppointmentTemplate.php";
1697 $app->setSubtitle(
"cal_exc_deadline");
1699 $app->setFullday(
false);
1709 $app->setSubtitle(
"cal_exc_peer_review_deadline");
1711 $app->setFullday(
false);
1718 include_once
"Modules/Exercise/classes/class.ilObjExercise.php";
1721 $ilAppEventHandler->raise(
1723 $a_event .
'Assignment',
1726 'obj_id' => $exc->getId(),
1727 'context_ids' => $context_ids,
1728 'appointments' => $apps)
1737 $ilDB = $DIC->database();
1741 $set =
$ilDB->query(
"SELECT id,fb_file,time_stamp,deadline2 FROM exc_assignment" .
1742 " WHERE fb_cron = " .
$ilDB->quote(1,
"integer") .
1743 " AND fb_date = " .
$ilDB->quote(self::FEEDBACK_DATE_DEADLINE,
"integer") .
1744 " AND time_stamp IS NOT NULL" .
1745 " AND time_stamp > " .
$ilDB->quote(0,
"integer") .
1746 " AND time_stamp < " .
$ilDB->quote(
time(),
"integer") .
1747 " AND fb_cron_done = " .
$ilDB->quote(0,
"integer"));
1748 while (
$row =
$ilDB->fetchAssoc($set)) {
1749 $max = max(
$row[
'time_stamp'],
$row[
'deadline2']);
1751 if (trim(
$row[
"fb_file"]) && $max <=
time()) {
1763 $ilDB = $DIC->database();
1765 $ass =
new self($a_ass_id);
1768 if (!$ass->hasFeedbackCron() || !$ass->getFeedbackFile()) {
1774 $set =
$ilDB->query(
"SELECT fb_cron_done" .
1775 " FROM exc_assignment" .
1776 " WHERE id = " .
$ilDB->quote($a_ass_id,
"integer"));
1778 if (
$row[
"fb_cron_done"]) {
1783 include_once
"./Services/Notification/classes/class.ilSystemNotification.php";
1785 $ntf->setLangModules(
array(
"exc"));
1786 $ntf->setObjId($ass->getExerciseId());
1787 $ntf->setSubjectLangId(
"exc_feedback_notification_subject");
1788 $ntf->setIntroductionLangId(
"exc_feedback_notification_body");
1789 $ntf->addAdditionalInfo(
"exc_assignment", $ass->getTitle());
1790 $ntf->setGotoLangId(
"exc_feedback_notification_link");
1791 $ntf->setReasonLangId(
"exc_feedback_notification_reason");
1794 include_once
"./Modules/Exercise/classes/class.ilExerciseMembers.php";
1797 $ilDB->manipulate(
"UPDATE exc_assignment" .
1798 " SET fb_cron_done = " .
$ilDB->quote(1,
"integer") .
1799 " WHERE id = " .
$ilDB->quote($a_ass_id,
"integer"));
1801 $ntf->sendMail(
array($a_user_id));
1818 $deadline = max($this->deadline, $this->deadline2, $idl);
1819 return ($deadline -
time() <= 0);
1827 $idl = (bool) $a_include_personal
1832 $deadline = max($this->deadline, $this->deadline2, $idl);
1851 return (
time() - $this->start_time <= 0);
1861 include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
1863 return $storage->getGlobalFeedbackPath();
1875 if (ilUtil::moveUploadedFile($a_file[
"tmp_name"], $a_file[
"name"],
$path .
"/" . $a_file[
"name"])) {
1900 $a_user_id =
$ilUser->getId();
1902 if (!array_key_exists($a_user_id, $this->member_status)) {
1903 include_once
"Modules/Exercise/classes/class.ilExAssignmentMemberStatus.php";
1906 return $this->member_status[$a_user_id];
1917 include_once
"Modules/Exercise/classes/class.ilExSubmission.php";
1919 $id = $file[
"returned_id"];
1929 if ($file[
"late"] &&
1936 elseif (!$file[
"late"] &&
1941 } elseif ($last_deadline && $uploaded > $last_deadline) {
1945 if ($late !== null) {
1946 $ilDB->manipulate(
"UPDATE exc_returned" .
1947 " SET late = " .
$ilDB->quote($late,
"integer") .
1948 " WHERE returned_id = " .
$ilDB->quote(
$id,
"integer"));
1963 if (!is_numeric(
$id)) {
1971 "ass_id" =>
array(
"integer", $this->
getId()),
1972 "member_id" =>
array(
"integer",
$id),
1973 "is_team" =>
array(
"integer", $is_team)
1987 $set =
$ilDB->query(
"SELECT * FROM exc_idl" .
1988 " WHERE ass_id = " .
$ilDB->quote($this->getId(),
"integer"));
1989 while (
$row =
$ilDB->fetchAssoc($set)) {
1990 if (
$row[
"is_team"]) {
1991 $row[
"member_id"] =
"t" .
$row[
"member_id"];
1994 $res[
$row[
"member_id"]] = $row[
"tstamp"];
2010 include_once
"Modules/Exercise/classes/class.ilExPeerReview.php";
2012 if ($peer_review->hasPeerReviewGroups()) {
2029 $db = $DIC->database();
2031 asort($a_order, SORT_NUMERIC);
2034 foreach ($a_order as $k => $v) {
2037 $t =
"UPDATE exc_ass_file_order SET " .
2038 " order_nr = " .
$db->quote($nr,
"integer") .
2039 " WHERE id = " .
$db->quote((
int) $k,
"integer") .
2040 " AND assignment_id = " .
$db->quote((
int) $a_ass_id,
"integer")
2055 $db = $DIC->database();
2064 if (!self::instructionFileExistsInDb(
$filename, $a_ass_id)) {
2065 if ($a_order_nr == 0) {
2066 $order_val = self::instructionFileOrderGetMax($a_ass_id);
2067 $order = $order_val + 10;
2069 $order = $a_order_nr;
2072 $id =
$db->nextID(
'exc_ass_file_order');
2073 $db->manipulate(
"INSERT INTO exc_ass_file_order " .
2074 "(id, assignment_id, filename, order_nr) VALUES (" .
2075 $db->quote(
$id,
"integer") .
"," .
2076 $db->quote($a_ass_id,
"integer") .
"," .
2078 $db->quote($order,
"integer") .
2088 $db = $DIC->database();
2091 foreach ($a_file as $k => $v) {
2093 "DELETE FROM exc_ass_file_order " .
2095 "WHERE filename = " .
$db->quote($v,
"string") .
2096 " AND assignment_id = " .
$db->quote($a_ass_id,
'integer')
2110 $db = $DIC->database();
2114 "DELETE FROM exc_ass_file_order" .
2115 " WHERE assignment_id = " .
$db->quote((
int) $a_ass_id,
'integer') .
2116 " AND filename = " .
$db->quote($a_new_name,
'string')
2120 "UPDATE exc_ass_file_order SET" .
2121 " filename = " .
$db->quote($a_new_name,
'string') .
2122 " WHERE assignment_id = " .
$db->quote((
int) $a_ass_id,
'integer') .
2123 " AND filename = " .
$db->quote($a_old_name,
'string')
2137 $db = $DIC->database();
2141 "SELECT id FROM exc_ass_file_order" .
2142 " WHERE assignment_id = " .
$db->quote((
int) $a_ass_id,
'integer') .
2143 " AND filename = " .
$db->quote($a_filename,
'string')
2154 $db = $DIC->database();
2156 $files = array_map(
function ($v) {
2160 $set =
$db->query(
"SELECT * FROM exc_ass_file_order " .
2161 " WHERE assignment_id = " .
$db->quote($this->getId(),
"integer") .
2162 " ORDER BY order_nr");
2164 $numbered_files =
array();
2165 while ($rec =
$db->fetchAssoc($set)) {
2167 if (in_array($rec[
"filename"],
$files)) {
2169 "UPDATE exc_ass_file_order SET " .
2171 " WHERE assignment_id = " .
$db->quote($this->
getId(),
"integer") .
2172 " AND id = " .
$db->quote($rec[
"id"],
"integer")
2175 $numbered_files[] = $rec[
"filename"];
2178 "DELETE FROM exc_ass_file_order " .
2179 " WHERE assignment_id = " .
$db->quote($this->getId(),
"integer") .
2180 " AND id = " .
$db->quote($rec[
"id"],
"integer")
2185 if (!in_array($f, $numbered_files)) {
2186 self::instructionFileInsertOrder($f, $this->
getId());
2201 foreach ($a_entries as $k => $e) {
2202 $a_entries[$k][
"order_val"] = $order[$e[
"file"]][
"order_nr"];
2203 $a_entries[$k][
"order_id"] = $order[$e[
"file"]][
"id"];
2217 $db = $DIC->database();
2221 "SELECT max(order_nr) as max_order FROM exc_ass_file_order WHERE assignment_id = %s",
2223 array(
$db->quote($a_ass_id,
'integer'))
2227 $order_val = (int)
$row[
'max_order'];
2240 $this->min_char_limit = $a_val;
2259 $this->max_char_limit = $a_val;
getPortfolioTemplateId()
Get portfolio template id.
getLastPersonalDeadline()
Get last/final personal deadline (of assignment)
getPeerReview()
Get peer review status.
static getInstanceByType($a_type)
fileAddOrder($a_entries=array())
static _lookupName($a_user_id)
lookup user name
Exercise assignment member status.
getInstructionFilesOrder()
getPeerReviewCriteriaCatalogueItems()
static getSafeFilename($a_initial_filename)
getMemberStatus($a_user_id=null)
getPersonalDeadline($a_user_id)
Get individual deadline.
saveMultiFeedbackFiles($a_files, ilObjExercise $a_exc)
Save multi feedback files.
const FEEDBACK_DATE_SUBMISSION
static getAssignmentDataOfExercise($a_exc_id)
Get assignments data of an exercise in an array.
static countMandatory($a_ex_id)
Order assignments by deadline date.
static sendFeedbackNotifications($a_ass_id, $a_user_id=null)
getMemberListData()
get member list data
setMaxFile($a_value)
Set max number of uploads.
getFeedbackDate()
Get (global) feedback file availability date.
setFeedbackFile($a_value)
Set (global) feedback file.
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
setPeerReviewMin($a_value)
Set peer review minimum.
setMaxCharLimit($a_val)
Set limit maximum characters.
const IL_CAL_TRANSLATION_SYSTEM
static getTeamId($a_assignment_id, $a_user_id, $a_create_on_demand=false)
Get team id for member id.
static getPendingFeedbackNotifications()
setTeamTutor($a_value)
Set team management by tutor.
setPortfolioTemplateId($a_val)
Set portfolio template id.
sendMultiFeedbackStructureFile(ilObjExercise $exercise)
Create member status record for a new assignment for all participants.
setPeerReviewFileUpload($a_val)
Set peer review file upload.
static instructionFileInsertOrder($a_filename, $a_ass_id, $a_order_nr=0)
Store the file order in the database.
getStartTime()
Get start time (timestamp)
getId()
Get assignment id.
static instructionFileOrderGetMax($a_ass_id)
initFromDB(array $a_set)
Import DB record.
setMinCharLimit($a_val)
Set limit minimum characters.
getGlobalFeedbackFilePath()
getMaxCharLimit()
get limit maximum characters return int max limit
setPeerReview($a_value)
Toggle peer review.
setPeerReviewDeadline($a_val)
Set peer review deadline (timestamp)
getDeadline()
Get deadline (timestamp)
static unzip($a_file, $overwrite=false, $a_flat=false)
unzip file
hasPeerReviewRating()
Get peer review rating status.
static getDir($a_dir, $a_rec=false, $a_sub_dir="")
get directory
hasFeedbackCron()
Get (global) feedback file cron status.
setPeerReviewValid($a_value)
Set peer review validation.
setType($a_value)
Set type.
Apointment templates are used for automatic generated apointments.
setTitle($a_val)
Set title.
setOrderNr($a_val)
Set order nr.
recalculateLateSubmissions()
static lookup($a_id, $a_field)
Private lookup.
static getASCIIFilename($a_filename)
convert utf8 to ascii filename
const PEER_REVIEW_VALID_ALL
setInstruction($a_val)
Set instruction.
handleCalendarEntries($a_event)
Handle calendar entries for deadline(s)
getTeamTutor()
Get team management by tutor.
const PEER_REVIEW_VALID_ONE
uploadMultiFeedbackFile($a_file)
Upload multi feedback file.
static lookupAssignmentOnline($a_ass_id)
Check if assignment is online.
setStartTime($a_val)
Set start time (timestamp)
getExerciseId()
Get exercise id.
getPeerReviewValid()
Get peer review validatiob.
setDeadline($a_val)
Set deadline (timestamp)
foreach($_POST as $key=> $value) $res
static saveAssOrderOfExercise($a_ex_id, $a_order)
Save ordering of all assignments of an exercise.
hasPeerReviewPersonalized()
Get peer review personalized status.
create()
Create directory.
getId()
get object id public
static getInstancesByParentId($a_parent_id)
setPeerReviewCriteriaCatalogue($a_value)
Set peer review criteria catalogue id.
static lookupUpdatedSubmission($ass_id, $member_id)
Check whether student has upload new files after tutor has set the exercise to another than notgraded...
setPeerReviewPersonalized($a_val)
Set peer review personalized.
setPeerReviewRating($a_val)
Set peer review rating.
static getInstancesByExercise($a_exc_id)
uploadAssignmentFiles($a_files)
Upload assignment files (from creation form)
setPeerReviewSimpleUnlock($a_value)
Set peer review simple unlock.
hasPeerReviewText()
Get peer review text status.
static instructionFileGetFileOrderData($a_file_data, $a_ass_id)
static instructionFileExistsInDb($a_filename, $a_ass_id)
setPeerReviewText($a_val)
Set peer review text.
handleGlobalFeedbackFileUpload(array $a_file)
setExerciseId($a_val)
Set exercise id.
getFeedbackFile()
Get (global) feedback file.
get($a_format, $a_format_str='', $a_tz='')
get formatted date
static zip($a_dir, $a_file, $compress_content=false)
zips given directory/file into given zip.file
Create styles array
The data for the language used.
getMandatory()
Get mandatory.
getPeerReviewMin()
Get peer review minimum.
getExtendedDeadline()
Get extended deadline (timestamp)
sendFeedbackFileNotification($a_feedback_file, $a_user_id, $a_ass_id, $a_is_text_feedback=false)
Send feedback file notification to user.
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
static cloneAssignmentsOfExercise($a_old_exc_id, $a_new_exc_id, array $a_crit_cat_map)
Clone assignments of exercise.
deleteGlobalFeedbackFile()
setFeedbackCron($a_value)
Toggle (global) feedback file cron.
static ilTempnam($a_temp_path=null)
Create a temporary file in an ILIAS writable directory.
afterDeadlineStrict($a_include_personal=true)
const FEEDBACK_DATE_DEADLINE
static lookupType($a_id)
Lookup type.
static saveInstructionFilesOrderOfAssignment($a_ass_id, $a_order)
Save ordering of instruction files for an assignment.
clearMultiFeedbackDirectory()
Clear multi feedback directory.
create()
Create directory.
setFeedbackDate($a_value)
Set (global) feedback file availability date.
static lookupMaxOrderNrForEx($a_exc_id)
Select the maximum order nr for an exercise.
getMultiFeedbackFiles($a_user_id=0)
Get multi feedback files (of uploader)
getInstruction()
Get instruction.
getPeerReviewSimpleUnlock()
Get peer review simple unlock.
setPeerReviewChars($a_value)
Set peer review minimum characters.
getRefId()
get reference id public
setId($a_val)
Set assignment id.
getPeerReviewDeadline()
Get peer review deadline (timestamp)
const PEER_REVIEW_VALID_NONE
getMinCharLimit()
Get limit minimum characters.
hasPeerReviewFileUpload()
Get peer review file upload status.
static lookupExerciseId($a_ass_id)
Lookup excercise id for assignment id.
static getLogger($a_component_id)
Get component logger.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
getPeerReviewChars()
Get peer review minimum characters.
static getAllAssignmentFiles($a_exc_id, $a_ass_id)
getMaxFile()
Get max number of uploads.
static createNewUserRecords($a_user_id, $a_exc_id)
Create member status record for a new participant for all assignments.
setMandatory($a_val)
Set mandatory.
static orderAssByDeadline($a_ex_id)
Order assignments by deadline date.
setIndividualDeadline($id, ilDateTime $date)
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
getPeerReviewCriteriaCatalogue()
Get peer review criteria catalogue id.
Wrapper classes for system notifications.
setExtendedDeadline($a_val)
Set extended deadline (timestamp)
getGlobalFeedbackFileStoragePath()
static renameInstructionFile($a_old_name, $a_new_name, $a_ass_id)
static instructionFileDeleteOrder($a_ass_id, $a_file)
static _getMembers($a_obj_id)
isValidType($a_value)
Is given type valid?
static createNewAssignmentRecords($a_ass_id, $a_exc)
Create member status record for a new assignment for all participants.
__construct($a_id=0)
Constructor.
for($i=6; $i< 13; $i++) for($i=1; $i< 13; $i++) $d
static lookupTitle($a_id)
Lookup title.
getOrderNr()
Get order nr.
fixInstructionFileOrdering()
static deliverFile( $a_file, $a_filename, $a_mime='', $isInline=false, $removeAfterDelivery=false, $a_exit_after=true)
deliver file for download via browser.
Exercise exceptions class.