42         $this->db = $DIC->database();
    43         $this->
user = $DIC->user();
    44         $this->assignment = $a_assignment;
    45         $this->assignment_id = $a_assignment->
getId();
    47         $this->domain = $DIC->exercise()->internal()->domain();
    54         $set = 
$ilDB->query(
"SELECT count(*) cnt" .
    55             " FROM exc_assignment_peer" .
    56             " WHERE ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer"));
    57         $cnt = 
$ilDB->fetchAssoc($set);
    58         return (
bool) $cnt[
"cnt"];
    63         $set = $this->db->queryF(
    64             "SELECT id FROM exc_assignment_peer " .
    65             " WHERE ass_id = %s AND giver_id = %s  AND peer_id = %s",
    66             [
"integer",
"integer",
"integer"],
    67             [$this->assignment_id, $giver_id, $peer_id]
    69         $rec = $this->db->fetchAssoc($set);
    70         return $rec[
"id"] ?? 0;
    78         return $this->domain->submission($this->assignment_id)->getUsersWithSubmission();
    86         if (!$this->assignment->afterDeadlineStrict()) {
    95             foreach ($user_ids as $rater_id) {
    96                 foreach ($distribution->getPeersOfRater($rater_id) as $peer_id) {
    97                     $next_id = 
$ilDB->nextId(
"exc_assignment_peer");
    98                     $ilDB->manipulate(
"INSERT INTO exc_assignment_peer" .
    99                         " (id, ass_id, giver_id, peer_id)" .
   100                         " VALUES (" . 
$ilDB->quote($next_id, 
"integer") .
   101                         ", " . 
$ilDB->quote($this->assignment_id, 
"integer") .
   102                         ", " . 
$ilDB->quote($rater_id, 
"integer") .
   103                         ", " . 
$ilDB->quote($peer_id, 
"integer") . 
")");
   121                 foreach (array_keys($reviews) as $giver_id) {
   124                     foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
   125                         $crit->setPeerReviewContext($this->assignment, $giver_id, $peer_id);
   126                         $crit->resetReview();
   132             $ilDB->manipulate(
"DELETE FROM exc_assignment_peer" .
   133                 " WHERE ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer"));
   145             $peer_ids = $invalid_peer_ids = $invalid_giver_ids = $all_reviews = array();
   147                 $peer_ids[] = $peer_id;
   149                 if (!in_array($peer_id, $all_valid) ||
   150                     !in_array($peer_id, $all_exc)) {
   151                     $invalid_peer_ids[] = $peer_id;
   153                 foreach ($reviews as $giver_id => 
$valid) {
   154                     if (!in_array($giver_id, $all_valid) ||
   155                         !in_array($peer_id, $all_exc)) {
   156                         $invalid_giver_ids[] = $giver_id;
   158                         $all_reviews[$peer_id][$giver_id] = 
$valid;
   162             $invalid_giver_ids = array_unique($invalid_giver_ids);
   164             $missing_user_ids = array();
   167                 if (!in_array($user_id, $peer_ids)) {
   172             $not_returned_ids = array();
   173             foreach ($all_exc as $user_id) {
   174                 if (!in_array($user_id, $all_valid)) {
   180                 "invalid" => (count($missing_user_ids) ||
   181                     count($invalid_peer_ids) ||
   182                     count($invalid_giver_ids)),
   183                 "missing_user_ids" => $missing_user_ids,
   184                 "not_returned_ids" => $not_returned_ids,
   185                 "invalid_peer_ids" => $invalid_peer_ids,
   186                 "invalid_giver_ids" => $invalid_giver_ids,
   187                 "reviews" => $all_reviews);
   199             if ($item[
"peer_id"] == $a_peer_id) {
   206         $data = $peer[
"pcomment"];
   208             $items = unserialize(
$data, [
'allowed_classes' => 
false]);
   209             if (!is_array($items)) {
   211                 $items = array(
"text" => 
$data);
   226             $set = 
$ilDB->query(
"SELECT *" .
   227                 " FROM exc_assignment_peer" .
   228                 " WHERE giver_id = " . 
$ilDB->quote($a_user_id, 
"integer") .
   229                 " AND ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer") .
   230                 " ORDER BY peer_id");
   231             while ($row = 
$ilDB->fetchAssoc($set)) {
   232                 $row[
"seq"] = ++$idx;
   245             if ($peer[
"peer_id"] == $a_peer_id) {
   246                 return (
int) $peer[
"seq"];
   257         $data = $a_data[
"pcomment"];
   260                 $values = unserialize(
$data, [
'allowed_classes' => 
false]);
   263             if (!is_array($values)) {
   265                 $values = array(
"text" => 
$data);
   269         foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
   270             $crit_id = $crit->getId()
   273             $crit->setPeerReviewContext(
   278             if (!$crit->validate($values[$crit_id] ?? null)) {
   281             if ($crit->hasValue($values[$crit_id] ?? null)) {
   291         bool $a_only_valid = 
false   298         $set = 
$ilDB->query(
"SELECT *" .
   299             " FROM exc_assignment_peer" .
   300             " WHERE peer_id = " . 
$ilDB->quote($a_user_id, 
"integer") .
   301             " AND ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer") .
   302             " ORDER BY peer_id");
   303         while ($row = 
$ilDB->fetchAssoc($set)) {
   304             if (!$a_only_valid ||
   308                 $row[
"seq"] = ++$idx;
   318         bool $only_valid = 
true   324         bool $a_only_valid = 
true   330         $set = 
$ilDB->query(
"SELECT *" .
   331             " FROM exc_assignment_peer" .
   332             " WHERE ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer") .
   333             " ORDER BY peer_id");
   334         while ($row = 
$ilDB->fetchAssoc($set)) {
   336             if (!$a_only_valid ||
   338                 $res[$row[
"peer_id"]][$row[
"giver_id"]] = 
$valid;
   351         $set = 
$ilDB->query(
"SELECT ass_id" .
   352             " FROM exc_assignment_peer" .
   353             " WHERE giver_id = " . 
$ilDB->quote($ilUser->getId(), 
"integer") .
   354             " AND peer_id = " . 
$ilDB->quote($a_peer_id, 
"integer") .
   355             " AND ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer"));
   356         $row = 
$ilDB->fetchAssoc($set);
   357         return ((
int) ($row[
"ass_id"] ?? 0) > 0);
   366         $ilDB->manipulate(
"UPDATE exc_assignment_peer" .
   368             " WHERE giver_id = " . 
$ilDB->quote($ilUser->getId(), 
"integer") .
   369             " AND peer_id = " . 
$ilDB->quote($a_peer_id, 
"integer") .
   370             " AND ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer"));
   381             "pcomment" => serialize($a_values),
   382             "peer_id" => $a_peer_id,
   383             "giver_id" => $ilUser->getId()
   387         $sql = 
"UPDATE exc_assignment_peer" .
   389             ",pcomment  = " . 
$ilDB->quote(serialize($a_values), 
"text") .
   390             ",is_valid = " . 
$ilDB->quote((
int) 
$valid, 
"integer") .
   391             " WHERE giver_id = " . 
$ilDB->quote($ilUser->getId(), 
"integer") .
   392             " AND peer_id = " . 
$ilDB->quote($a_peer_id, 
"integer") .
   393             " AND ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer");
   395         $ilDB->manipulate($sql);
   399         bool $a_validate = 
true,
   400         int $a_user_id = null
   406             $a_user_id = $ilUser->
getId();
   411         $set = 
$ilDB->query(
"SELECT *" .
   412             " FROM exc_assignment_peer" .
   413             " WHERE ass_id = " . 
$ilDB->quote($this->assignment_id, 
"integer") .
   414             " AND giver_id = " . 
$ilDB->quote($a_user_id, 
"integer"));
   415         while ($row = 
$ilDB->fetchAssoc($set)) {
   427         return (count($this->domain->submission($this->assignment_id)->getUsersWithSubmission()) - 1);
   440         if ($this->assignment->getPeerReviewSimpleUnlock() == 2) {
   442         } elseif ($this->assignment->getPeerReviewSimpleUnlock() == 0) {
   443             $needed = $this->assignment->getPeerReviewMin();
   448         $min = min($max, $needed);
   460         if (!$this->assignment->afterDeadlineStrict()) {
   472         switch ($this->assignment->getPeerReviewValid()) {
   474                 return (
bool) $no_of_feedbacks;
   478                 $min = min($max, $this->assignment->getPeerReviewMin());
   480                 return (($min - $no_of_feedbacks) < 1);
   489         $ilDB = $DIC->database();
   493             "SELECT DISTINCT(giver_id) FROM exc_assignment_peer " .
   494             " WHERE ass_id = " . 
$ilDB->quote($a_ass_id, 
"integer") .
   495             " AND tstamp is NULL"   498         while ($row = 
$ilDB->fetchAssoc($set)) {
   499             $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)
 
InternalDomainService $domain
 
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()