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);
 
  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);
 
  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);
 
  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");
 
  883        $ilDB->insert(
"exc_assignment", array(
 
  884            "id" => array(
"integer", $next_id),
 
  886            "time_stamp" => array(
"integer", $this->
getDeadline()),
 
  889            "title" => array(
"text", $this->
getTitle()),
 
  890            "start_time" => array(
"integer", $this->
getStartTime()),
 
  891            "order_nr" => array(
"integer", $this->
getOrderNr()),
 
  893            "type" => array(
"integer", $this->
getType()),
 
  908            "team_tutor" => array(
"integer", $this->
getTeamTutor()),
 
  909            "max_file" => array(
"integer", $this->
getMaxFile()),
 
  910            "portfolio_template" => array(
"integer", $this->getPortFolioTemplateId()),
 
  914        $this->
setId($next_id);
 
  916        $exc->updateAllUsersStatus();
 
  933            "time_stamp" => array(
"integer", $this->
getDeadline()),
 
  936            "title" => array(
"text", $this->
getTitle()),
 
  937            "start_time" => array(
"integer", $this->
getStartTime()),
 
  938            "order_nr" => array(
"integer", $this->
getOrderNr()),
 
  940            "type" => array(
"integer", $this->
getType()),
 
  955            "team_tutor" => array(
"integer", $this->
getTeamTutor()),
 
  956            "max_file" => array(
"integer", $this->
getMaxFile()),
 
  957            "portfolio_template" => array(
"integer", $this->getPortFolioTemplateId()),
 
  962            "id" => array(
"integer", $this->
getId()),
 
  966        $exc->updateAllUsersStatus();
 
  974    public function delete()
 
  981            "DELETE FROM exc_assignment WHERE " .
 
  982            " id = " . 
$ilDB->quote($this->getId(), 
"integer")
 
  985        $exc->updateAllUsersStatus();
 
 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"],
 
 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())) {
 
 1091                ilUtil::rCopy($old_web_storage->getPath(), $new_web_storage->getPath());
 
 1095            include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
 
 1098            $new_storage->create();
 
 1099            if (is_dir($old_storage->getGlobalFeedbackPath())) {
 
 1100                ilUtil::rCopy($old_storage->getGlobalFeedbackPath(), $new_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;
 
 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"];
 
 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;
 
 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)
 
 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];
 
 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")
 
 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")
 
 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"];
 
 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"];
 
 1392        foreach ($ass_data as $ass) {
 
 1394            $ilDB->replace(
"exc_mem_ass_status", array(
 
 1395                "ass_id" => array(
"integer", $ass[
"id"]),
 
 1396                "usr_id" => array(
"integer", $a_user_id)
 
 1398                "status" => array(
"text", 
"notgraded")
 
 1412        include_once(
"./Modules/Exercise/classes/class.ilExerciseMembers.php");
 
 1414        $mems = $exmem->getMembers();
 
 1416        foreach ($mems as $mem) {
 
 1417            $ilDB->replace(
"exc_mem_ass_status", array(
 
 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)
 
 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()) {
 
 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);
 
 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";
 
 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"];
 
 2010            include_once 
"Modules/Exercise/classes/class.ilExPeerReview.php";
 
 2012            if ($peer_review->hasPeerReviewGroups()) {
 
 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")
 
 2064            if (!self::instructionFileExistsInDb(
$filename, $a_ass_id)) {
 
 2065                if ($a_order_nr == 0) {
 
 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") .
 
 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')
 
 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')
 
 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')
 
 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)) {
 
 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"];
 
 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;
 
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_TRANSLATION_SYSTEM
Apointment templates are used for automatic generated apointments.
@classDescription Date and time handling
get($a_format, $a_format_str='', $a_tz='')
get formatted date
Exercise assignment member status.
static getTeamId($a_assignment_id, $a_user_id, $a_create_on_demand=false)
Get team id for member id.
getMinCharLimit()
Get limit minimum characters.
static orderAssByDeadline($a_ex_id)
Order assignments by deadline date.
getPersonalDeadline($a_user_id)
Get individual deadline.
deleteGlobalFeedbackFile()
hasPeerReviewText()
Get peer review text status.
afterDeadlineStrict($a_include_personal=true)
getPeerReviewChars()
Get peer review minimum characters.
hasPeerReviewPersonalized()
Get peer review personalized status.
setDeadline($a_val)
Set deadline (timestamp)
static lookupMaxOrderNrForEx($a_exc_id)
Select the maximum order nr for an exercise.
static instructionFileInsertOrder($a_filename, $a_ass_id, $a_order_nr=0)
Store the file order in the database.
setOrderNr($a_val)
Set order nr.
clearMultiFeedbackDirectory()
Clear multi feedback directory.
getLastPersonalDeadline()
Get last/final personal deadline (of assignment)
setPeerReviewRating($a_val)
Set peer review rating.
setPeerReview($a_value)
Toggle peer review.
setPortfolioTemplateId($a_val)
Set portfolio template id.
getFeedbackDate()
Get (global) feedback file availability date.
getPeerReviewValid()
Get peer review validatiob.
fixInstructionFileOrdering()
getMemberListData()
get member list data
getMultiFeedbackFiles($a_user_id=0)
Get multi feedback files (of uploader)
getExerciseId()
Get exercise id.
static saveInstructionFilesOrderOfAssignment($a_ass_id, $a_order)
Save ordering of instruction files for an assignment.
static lookup($a_id, $a_field)
Private lookup.
setTeamTutor($a_value)
Set team management by tutor.
setFeedbackCron($a_value)
Toggle (global) feedback file cron.
setTitle($a_val)
Set title.
fileAddOrder($a_entries=array())
uploadMultiFeedbackFile($a_file)
Upload multi feedback file.
handleCalendarEntries($a_event)
Handle calendar entries for deadline(s)
static renameInstructionFile($a_old_name, $a_new_name, $a_ass_id)
getId()
Get assignment id.
getInstruction()
Get instruction.
getInstructionFilesOrder()
static lookupUpdatedSubmission($ass_id, $member_id)
Check whether student has upload new files after tutor has set the exercise to another than notgraded...
static instructionFileGetFileOrderData($a_file_data, $a_ass_id)
static countMandatory($a_ex_id)
Order assignments by deadline date.
const PEER_REVIEW_VALID_NONE
getTeamTutor()
Get team management by tutor.
getPeerReviewMin()
Get peer review minimum.
static getInstancesByExercise($a_exc_id)
setPeerReviewPersonalized($a_val)
Set peer review personalized.
const PEER_REVIEW_VALID_ALL
isValidType($a_value)
Is given type valid?
setPeerReviewValid($a_value)
Set peer review validation.
handleGlobalFeedbackFileUpload(array $a_file)
setPeerReviewText($a_val)
Set peer review text.
setPeerReviewSimpleUnlock($a_value)
Set peer review simple unlock.
getMaxFile()
Get max number of uploads.
static lookupExerciseId($a_ass_id)
Lookup excercise id for assignment id.
saveMultiFeedbackFiles($a_files, ilObjExercise $a_exc)
Save multi feedback files.
setExtendedDeadline($a_val)
Set extended deadline (timestamp)
setIndividualDeadline($id, ilDateTime $date)
setPeerReviewMin($a_value)
Set peer review minimum.
setInstruction($a_val)
Set instruction.
static createNewAssignmentRecords($a_ass_id, $a_exc)
Create member status record for a new assignment for all participants.
static getPendingFeedbackNotifications()
initFromDB(array $a_set)
Import DB record.
uploadAssignmentFiles($a_files)
Upload assignment files (from creation form)
__construct($a_id=0)
Constructor.
getPeerReview()
Get peer review status.
hasPeerReviewFileUpload()
Get peer review file upload status.
static sendFeedbackNotifications($a_ass_id, $a_user_id=null)
sendMultiFeedbackStructureFile(ilObjExercise $exercise)
Create member status record for a new assignment for all participants.
static cloneAssignmentsOfExercise($a_old_exc_id, $a_new_exc_id, array $a_crit_cat_map)
Clone assignments of exercise.
static getAssignmentDataOfExercise($a_exc_id)
Get assignments data of an exercise in an array.
setId($a_val)
Set assignment id.
setPeerReviewChars($a_value)
Set peer review minimum characters.
setMaxCharLimit($a_val)
Set limit maximum characters.
hasFeedbackCron()
Get (global) feedback file cron status.
recalculateLateSubmissions()
getStartTime()
Get start time (timestamp)
setMaxFile($a_value)
Set max number of uploads.
getMemberStatus($a_user_id=null)
setStartTime($a_val)
Set start time (timestamp)
setMinCharLimit($a_val)
Set limit minimum characters.
setPeerReviewCriteriaCatalogue($a_value)
Set peer review criteria catalogue id.
getPeerReviewSimpleUnlock()
Get peer review simple unlock.
getGlobalFeedbackFileStoragePath()
static instructionFileExistsInDb($a_filename, $a_ass_id)
const FEEDBACK_DATE_DEADLINE
static instructionFileOrderGetMax($a_ass_id)
getPeerReviewDeadline()
Get peer review deadline (timestamp)
getMaxCharLimit()
get limit maximum characters return int max limit
const PEER_REVIEW_VALID_ONE
getOrderNr()
Get order nr.
getGlobalFeedbackFilePath()
setPeerReviewDeadline($a_val)
Set peer review deadline (timestamp)
setFeedbackDate($a_value)
Set (global) feedback file availability date.
static lookupTitle($a_id)
Lookup title.
getFeedbackFile()
Get (global) feedback file.
getPeerReviewCriteriaCatalogue()
Get peer review criteria catalogue id.
setPeerReviewFileUpload($a_val)
Set peer review file upload.
getPortfolioTemplateId()
Get portfolio template id.
getPeerReviewCriteriaCatalogueItems()
static createNewUserRecords($a_user_id, $a_exc_id)
Create member status record for a new participant for all assignments.
setType($a_value)
Set type.
const FEEDBACK_DATE_SUBMISSION
static lookupAssignmentOnline($a_ass_id)
Check if assignment is online.
getDeadline()
Get deadline (timestamp)
static instructionFileDeleteOrder($a_ass_id, $a_file)
getExtendedDeadline()
Get extended deadline (timestamp)
setExerciseId($a_val)
Set exercise id.
static saveAssOrderOfExercise($a_ex_id, $a_order)
Save ordering of all assignments of an exercise.
static lookupType($a_id)
Lookup type.
setFeedbackFile($a_value)
Set (global) feedback file.
setMandatory($a_val)
Set mandatory.
getMandatory()
Get mandatory.
hasPeerReviewRating()
Get peer review rating status.
static getAllAssignmentFiles($a_exc_id, $a_ass_id)
static getInstancesByParentId($a_parent_id)
static getInstanceByType($a_type)
Exercise exceptions class.
static _getMembers($a_obj_id)
static getLogger($a_component_id)
Get component logger.
sendFeedbackFileNotification($a_feedback_file, $a_user_id, $a_ass_id, $a_is_text_feedback=false)
Send feedback file notification to user.
static _lookupName($a_user_id)
lookup user name
getRefId()
get reference id @access public
getId()
get object id @access public
Wrapper classes for system notifications.
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
static zip($a_dir, $a_file, $compress_content=false)
zips given directory/file into given zip.file
static getSafeFilename($a_initial_filename)
static getDir($a_dir, $a_rec=false, $a_sub_dir="")
get directory
static ilTempnam($a_temp_path=null)
Create a temporary file in an ILIAS writable directory.
static deliverFile( $a_file, $a_filename, $a_mime='', $isInline=false, $removeAfterDelivery=false, $a_exit_after=true)
deliver file for download via browser.
static getASCIIFilename($a_filename)
convert utf8 to ascii filename
static unzip($a_file, $overwrite=false, $a_flat=false)
unzip file
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
for( $i=6;$i< 13;$i++) for($i=1; $i< 13; $i++) $d
if(!file_exists("$old.txt")) if( $old===$new) if(file_exists("$new.txt")) $file
foreach($_POST as $key=> $value) $res