40         $this->db = $DIC->database();
    41         $this->
user = $DIC->user();
    42         $this->assignment = $a_assignment;
    43         $this->assignment_id = $a_assignment->
getId();
    51         $set = 
$ilDB->query(
"SELECT count(*) cnt" .
    52             " FROM exc_assignment_peer" .
    53             " WHERE ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer"));
    54         $cnt = 
$ilDB->fetchAssoc($set);
    55         return (
bool) $cnt[
"cnt"];
    60         $set = $this->db->queryF(
    61             "SELECT id FROM exc_assignment_peer " .
    62             " WHERE ass_id = %s AND giver_id = %s  AND peer_id = %s",
    63             [
"integer",
"integer",
"integer"],
    64             [$this->assignment_id, $giver_id, $peer_id]
    66         $rec = $this->db->fetchAssoc($set);
    67         return $rec[
"id"] ?? 0;
    80         $set = 
$ilDB->query(
"SELECT DISTINCT(user_id)" .
    81             " FROM exc_returned" .
    82             " WHERE ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer") .
    83             " AND (filename IS NOT NULL OR atext IS NOT NULL)");
    84         while ($row = 
$ilDB->fetchAssoc($set)) {
    85             $user_ids[] = (
int) $row[
"user_id"];
    96         if (!$this->assignment->afterDeadlineStrict()) {
   105             foreach ($user_ids as $rater_id) {
   106                 foreach ($distribution->getPeersOfRater($rater_id) as $peer_id) {
   107                     $next_id = 
$ilDB->nextId(
"exc_assignment_peer");
   108                     $ilDB->manipulate(
"INSERT INTO exc_assignment_peer" .
   109                         " (id, ass_id, giver_id, peer_id)" .
   110                         " VALUES (" . 
$ilDB->quote($next_id, 
"integer") .
   111                         ", " . 
$ilDB->quote($this->assignment_id, 
"integer") .
   112                         ", " . 
$ilDB->quote($rater_id, 
"integer") .
   113                         ", " . 
$ilDB->quote($peer_id, 
"integer") . 
")");
   131                 foreach (array_keys($reviews) as $giver_id) {
   134                     foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
   135                         $crit->setPeerReviewContext($this->assignment, $giver_id, $peer_id);
   136                         $crit->resetReview();
   142             $ilDB->manipulate(
"DELETE FROM exc_assignment_peer" .
   143                 " WHERE ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer"));
   155             $peer_ids = $invalid_peer_ids = $invalid_giver_ids = $all_reviews = array();
   157                 $peer_ids[] = $peer_id;
   159                 if (!in_array($peer_id, $all_valid) ||
   160                     !in_array($peer_id, $all_exc)) {
   161                     $invalid_peer_ids[] = $peer_id;
   163                 foreach ($reviews as $giver_id => 
$valid) {
   164                     if (!in_array($giver_id, $all_valid) ||
   165                         !in_array($peer_id, $all_exc)) {
   166                         $invalid_giver_ids[] = $giver_id;
   168                         $all_reviews[$peer_id][$giver_id] = 
$valid;
   172             $invalid_giver_ids = array_unique($invalid_giver_ids);
   174             $missing_user_ids = array();
   175             foreach ($all_valid as $user_id) {
   177                 if (!in_array($user_id, $peer_ids)) {
   178                     $missing_user_ids[] = $user_id;
   182             $not_returned_ids = array();
   183             foreach ($all_exc as $user_id) {
   184                 if (!in_array($user_id, $all_valid)) {
   185                     $not_returned_ids[] = $user_id;
   190                 "invalid" => (count($missing_user_ids) ||
   191                     count($invalid_peer_ids) ||
   192                     count($invalid_giver_ids)),
   193                 "missing_user_ids" => $missing_user_ids,
   194                 "not_returned_ids" => $not_returned_ids,
   195                 "invalid_peer_ids" => $invalid_peer_ids,
   196                 "invalid_giver_ids" => $invalid_giver_ids,
   197                 "reviews" => $all_reviews);
   209             if ($item[
"peer_id"] == $a_peer_id) {
   216         $data = $peer[
"pcomment"];
   218             $items = unserialize(
$data, [
'allowed_classes' => 
false]);
   219             if (!is_array($items)) {
   221                 $items = array(
"text" => 
$data);
   236             $set = 
$ilDB->query(
"SELECT *" .
   237                 " FROM exc_assignment_peer" .
   238                 " WHERE giver_id = " . 
$ilDB->quote($a_user_id, 
"integer") .
   239                 " AND ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer") .
   240                 " ORDER BY peer_id");
   241             while ($row = 
$ilDB->fetchAssoc($set)) {
   242                 $row[
"seq"] = ++$idx;
   255             if ($peer[
"peer_id"] == $a_peer_id) {
   256                 return (
int) $peer[
"seq"];
   267         $data = $a_data[
"pcomment"];
   270                 $values = unserialize(
$data, [
'allowed_classes' => 
false]);
   273             if (!is_array($values)) {
   275                 $values = array(
"text" => 
$data);
   279         foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
   280             $crit_id = $crit->getId()
   283             $crit->setPeerReviewContext(
   288             if (!$crit->validate($values[$crit_id] ?? null)) {
   291             if ($crit->hasValue($values[$crit_id] ?? null)) {
   301         bool $a_only_valid = 
false   308         $set = 
$ilDB->query(
"SELECT *" .
   309             " FROM exc_assignment_peer" .
   310             " WHERE peer_id = " . 
$ilDB->quote($a_user_id, 
"integer") .
   311             " AND ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer") .
   312             " ORDER BY peer_id");
   313         while ($row = 
$ilDB->fetchAssoc($set)) {
   314             if (!$a_only_valid ||
   318                 $row[
"seq"] = ++$idx;
   328         bool $only_valid = 
true   334         bool $a_only_valid = 
true   340         $set = 
$ilDB->query(
"SELECT *" .
   341             " FROM exc_assignment_peer" .
   342             " WHERE ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer") .
   343             " ORDER BY peer_id");
   344         while ($row = 
$ilDB->fetchAssoc($set)) {
   346             if (!$a_only_valid ||
   348                 $res[$row[
"peer_id"]][$row[
"giver_id"]] = 
$valid;
   361         $set = 
$ilDB->query(
"SELECT ass_id" .
   362             " FROM exc_assignment_peer" .
   363             " WHERE giver_id = " . 
$ilDB->quote($ilUser->getId(), 
"integer") .
   364             " AND peer_id = " . 
$ilDB->quote($a_peer_id, 
"integer") .
   365             " AND ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer"));
   366         $row = 
$ilDB->fetchAssoc($set);
   367         return ((
int) ($row[
"ass_id"] ?? 0) > 0);
   376         $ilDB->manipulate(
"UPDATE exc_assignment_peer" .
   378             " WHERE giver_id = " . 
$ilDB->quote($ilUser->getId(), 
"integer") .
   379             " AND peer_id = " . 
$ilDB->quote($a_peer_id, 
"integer") .
   380             " AND ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer"));
   391             "pcomment" => serialize($a_values),
   392             "peer_id" => $a_peer_id,
   393             "giver_id" => $ilUser->getId()
   397         $sql = 
"UPDATE exc_assignment_peer" .
   399             ",pcomment  = " . 
$ilDB->quote(serialize($a_values), 
"text") .
   400             ",is_valid = " . 
$ilDB->quote((
int) 
$valid, 
"integer") .
   401             " WHERE giver_id = " . 
$ilDB->quote($ilUser->getId(), 
"integer") .
   402             " AND peer_id = " . 
$ilDB->quote($a_peer_id, 
"integer") .
   403             " AND ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer");
   405         $ilDB->manipulate($sql);
   409         bool $a_validate = 
true,
   410         int $a_user_id = null
   416             $a_user_id = $ilUser->
getId();
   421         $set = 
$ilDB->query(
"SELECT *" .
   422             " FROM exc_assignment_peer" .
   423             " WHERE ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer") .
   424             " AND giver_id = " . 
$ilDB->quote($a_user_id, 
"integer"));
   425         while ($row = 
$ilDB->fetchAssoc($set)) {
   440         $set = 
$ilDB->query(
"SELECT COUNT(DISTINCT(user_id)) cnt" .
   441             " FROM exc_returned" .
   442             " WHERE ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer"));
   443         $cnt = 
$ilDB->fetchAssoc($set);
   444         $cnt = (
int) $cnt[
"cnt"];
   458         if ($this->assignment->getPeerReviewSimpleUnlock() == 2) {
   460         } elseif ($this->assignment->getPeerReviewSimpleUnlock() == 0) {
   461             $needed = $this->assignment->getPeerReviewMin();
   466         $min = min($max, $needed);
   478         if (!$this->assignment->afterDeadlineStrict()) {
   490         switch ($this->assignment->getPeerReviewValid()) {
   492                 return (
bool) $no_of_feedbacks;
   496                 $min = min($max, $this->assignment->getPeerReviewMin());
   498                 return (($min - $no_of_feedbacks) < 1);
   507         $ilDB = $DIC->database();
   511             "SELECT DISTINCT(giver_id) FROM exc_assignment_peer " .
   512             " WHERE ass_id = " . 
$ilDB->quote($a_ass_id, 
"integer") .
   513             " AND tstamp is NULL"   516         while ($row = 
$ilDB->fetchAssoc($set)) {
   517             $user_ids[] = $row[
"giver_id"];
 
static getLogger(string $a_component_id)
Get component logger. 
 
countGivenFeedback(bool $a_validate=true, int $a_user_id=null)
 
getPeerReviewsByPeerId(int $a_user_id, bool $a_only_valid=false)
 
isFeedbackValidForPassed(int $a_user_id)
 
static lookupGiversWithPendingFeedback(int $a_ass_id)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
ilExAssignment $assignment
 
static now()
Return current timestamp in Y-m-d H:i:s format. 
 
const PEER_REVIEW_VALID_ALL
 
const PEER_REVIEW_VALID_ONE
 
updatePeerReviewTimestamp(int $a_peer_id)
 
getNumberOfMissingFeedbacksForReceived()
 
getPeerMaskedId(int $a_giver_id, int $a_peer_id)
 
validatePeerReview(array $a_data)
 
getPeerReviewsByGiver(int $a_user_id)
 
getPeerReviewValues(int $a_giver_id, int $a_peer_id)
 
getReviewId(int $giver_id, int $peer_id)
 
hasPeerReviewAccess(int $a_peer_id)
 
updatePeerReview(int $a_peer_id, array $a_values)
 
getValidPeerReviewUsers()
 
Calculates peer review distribution (rater to peer assignments) 
 
const PEER_REVIEW_VALID_NONE
 
getAllPeerReviews(bool $a_only_valid=true)
 
countReceivedFeedbacks(int $user_id, bool $only_valid=true)
 
static _getMembers(int $a_obj_id)
 
getMaxPossibleFeedbacks()
 
__construct(ilExAssignment $a_assignment)
 
validatePeerReviewGroups()