]> git.mjollnir.org Git - moodle.git/commitdiff
A lot of work here and there
authorDavid Mudrak <david.mudrak@gmail.com>
Mon, 4 Jan 2010 18:08:13 +0000 (18:08 +0000)
committerDavid Mudrak <david.mudrak@gmail.com>
Mon, 4 Jan 2010 18:08:13 +0000 (18:08 +0000)
DB columns userid renamed to authorid or reviewerid to make the value
clear. Improved manual allocation UI. Raw grades are stored as numeric
values from 0.00000 to 100.00000 (instead of the current 0 to 1) to be
more precise. Started to work on the Grading report (it est the overall
report of all grades form submission and grades for assessments).

15 files changed:
mod/workshop/allocation/manual/lib.php
mod/workshop/allocation/manual/renderer.php
mod/workshop/allocation/random/lib.php
mod/workshop/allocation/random/simpletest/testallocator.php
mod/workshop/assessment.php
mod/workshop/develtools.php
mod/workshop/form/accumulative/lib.php
mod/workshop/form/accumulative/simpletest/teststrategy.php
mod/workshop/form/lib.php
mod/workshop/form/numerrors/lib.php
mod/workshop/form/numerrors/simpletest/teststrategy.php
mod/workshop/lib.php
mod/workshop/locallib.php
mod/workshop/submission.php
mod/workshop/view.php

index 147e8b0ac55af90164f45966990ae20d71236f4e..4b4c8707cbc22dcaf425b68f8c8f0f9517e73617 100644 (file)
@@ -33,9 +33,6 @@ require_once(dirname(dirname(dirname(__FILE__))) . '/locallib.php');    // works
  */
 class workshop_manual_allocator implements workshop_allocator {
 
-    /** participants per page */
-    const PERPAGE           = 30;
-
     /** constants that are used to pass status messages between init() and ui() */
     const MSG_ADDED         = 1;
     const MSG_NOSUBMISSION  = 2;
@@ -81,11 +78,11 @@ class workshop_manual_allocator implements workshop_allocator {
                 $res = $this->workshop->add_allocation($submission, $reviewerid);
                 if ($res == workshop::ALLOCATION_EXISTS) {
                     $m[] = self::MSG_EXISTS;
-                    $m[] = $submission->userid;
+                    $m[] = $submission->authorid;
                     $m[] = $reviewerid;
                 } else {
                     $m[] = self::MSG_ADDED;
-                    $m[] = $submission->userid;
+                    $m[] = $submission->authorid;
                     $m[] = $reviewerid;
                 }
             }
@@ -195,25 +192,35 @@ class workshop_manual_allocator implements workshop_allocator {
             }
         }
 
+        // fetch the list of ids of all workshop participants - this may get really long so fetch just id
+        $participants = get_users_by_capability($PAGE->context, array('mod/workshop:submit', 'mod/workshop:peerassess'),
+                                            'u.id', 'u.lastname,u.firstname,u.id', '', '', '', '', false, false, true);
+
+        $numofparticipants = count($participants);  // we will need later for the pagination
+
         if ($hlauthorid > 0 and $hlreviewerid > 0) {
-            // display just those users, no pagination
-            $participants = get_users_by_capability($PAGE->context, array('mod/workshop:submit', 'mod/workshop:peerassess'),
-                                                'u.id,u.lastname,u.firstname,u.picture,u.imagealt', 'u.lastname,u.firstname,u.id',
-                                                '', '', '', '', false, false, true);
+            // display just those two users
             $participants = array_intersect_key($participants, array($hlauthorid => null, $hlreviewerid => null));
         } else {
-            // the paginated list of users to be displayed in the middle column ("Participant")
-            $participants = get_users_by_capability($PAGE->context, array('mod/workshop:submit', 'mod/workshop:peerassess'),
-                                                'u.id,u.lastname,u.firstname,u.picture,u.imagealt', 'u.lastname,u.firstname,u.id',
-                                                $page * self::PERPAGE, self::PERPAGE, '', '', false, false, true);
+            // slice the list of participants according to the current page
+            $participants = array_slice($participants, $page * workshop::PERPAGE, workshop::PERPAGE, true);
         }
 
-
         // this will hold the information needed to display user names and pictures
-        $userinfo = $participants;
+        $userinfo = $DB->get_records_list('user', 'id', array_keys($participants), '', 'id,lastname,firstname,picture,imagealt');
 
         // load the participants' submissions
         $submissions = $this->workshop->get_submissions(array_keys($participants), false);
+        foreach ($submissions as $submission) {
+            if (!isset($userinfo[$submission->authorid])) {
+                $userinfo[$submission->authorid]            = new stdClass();
+                $userinfo[$submission->authorid]->id        = $submission->authorid;
+                $userinfo[$submission->authorid]->firstname = $submission->authorfirstname;
+                $userinfo[$submission->authorid]->lastname  = $submission->authorlastname;
+                $userinfo[$submission->authorid]->picture   = $submission->authorpicture;
+                $userinfo[$submission->authorid]->imagealt  = $submission->authorimagealt;
+            }
+        }
 
         // get current reviewers
         $reviewers = array();
@@ -221,9 +228,9 @@ class workshop_manual_allocator implements workshop_allocator {
             list($submissionids, $params) = $DB->get_in_or_equal(array_keys($submissions), SQL_PARAMS_NAMED);
             $sql = "SELECT a.id AS assessmentid, a.submissionid,
                            r.id AS reviewerid, r.lastname, r.firstname, r.picture, r.imagealt,
-                           s.id AS submissionid, s.userid AS authorid
+                           s.id AS submissionid, s.authorid
                       FROM {workshop_assessments} a
-                      JOIN {user} r ON (a.userid = r.id)
+                      JOIN {user} r ON (a.reviewerid = r.id)
                       JOIN {workshop_submissions} s ON (a.submissionid = s.id)
                      WHERE a.submissionid $submissionids";
             $reviewers = $DB->get_records_sql($sql, $params);
@@ -235,7 +242,6 @@ class workshop_manual_allocator implements workshop_allocator {
                     $userinfo[$reviewer->reviewerid]->lastname  = $reviewer->lastname;
                     $userinfo[$reviewer->reviewerid]->picture   = $reviewer->picture;
                     $userinfo[$reviewer->reviewerid]->imagealt  = $reviewer->imagealt;
-                    $userinfo[$reviewer->reviewerid]->firstname = $reviewer->firstname;
                 }
             }
         }
@@ -246,11 +252,11 @@ class workshop_manual_allocator implements workshop_allocator {
         $sql = "SELECT a.id AS assessmentid, a.submissionid,
                        u.id AS reviewerid,
                        s.id AS submissionid,
-                       r.id AS revieweeid, r.lastname, r.firstname, r.picture, r.imagealt
+                       e.id AS revieweeid, e.lastname, e.firstname, e.picture, e.imagealt
                   FROM {user} u
-                  JOIN {workshop_assessments} a ON (a.userid = u.id)
+                  JOIN {workshop_assessments} a ON (a.reviewerid = u.id)
                   JOIN {workshop_submissions} s ON (a.submissionid = s.id)
-                  JOIN {user} r ON (s.userid = r.id)
+                  JOIN {user} e ON (s.authorid = e.id)
                  WHERE u.id $participantids AND s.workshopid = :workshopid";
         $reviewees = $DB->get_records_sql($sql, $params);
         foreach ($reviewees as $reviewee) {
@@ -261,7 +267,6 @@ class workshop_manual_allocator implements workshop_allocator {
                 $userinfo[$reviewee->revieweeid]->lastname  = $reviewee->lastname;
                 $userinfo[$reviewee->revieweeid]->picture   = $reviewee->picture;
                 $userinfo[$reviewee->revieweeid]->imagealt  = $reviewee->imagealt;
-                $userinfo[$reviewee->revieweeid]->firstname = $reviewee->firstname;
             }
         }
 
@@ -276,6 +281,7 @@ class workshop_manual_allocator implements workshop_allocator {
             $allocations[$participant->id]->reviewerof = array();
         }
         unset($participants);
+
         foreach ($submissions as $submission) {
             $allocations[$submission->authorid]->submissionid = $submission->id;
             $allocations[$submission->authorid]->submissiontitle = $submission->title;
@@ -291,13 +297,8 @@ class workshop_manual_allocator implements workshop_allocator {
         }
         unset($reviewees);
 
-        // we have all data, let us pass it to the renderer and return the output
-        $wsoutput = $PAGE->theme->get_renderer('mod_workshop', $PAGE);
-        $uioutput = $PAGE->theme->get_renderer('workshopallocation_manual', $PAGE);
-
         // prepare data to be displayed
         $data                   = new stdClass();
-        $data->wsoutput         = $wsoutput;
         $data->allocations      = $allocations;
         $data->userinfo         = $userinfo;
         $data->authors          = $this->workshop->get_potential_authors($PAGE->context);
@@ -308,15 +309,19 @@ class workshop_manual_allocator implements workshop_allocator {
 
         // prepare paging bar
         $pagingbar              = new moodle_paging_bar();
-        $pagingbar->totalcount  = count($data->authors);
+        $pagingbar->totalcount  = $numofparticipants;
         $pagingbar->page        = $page;
-        $pagingbar->perpage     = self::PERPAGE;
+        $pagingbar->perpage     = workshop::PERPAGE;
         $pagingbar->baseurl     = $PAGE->url;
         $pagingbar->pagevar     = $pagingvar;
         $pagingbar->nocurr      = true;
 
         $pagingbarout = $OUTPUT->paging_bar($pagingbar);
 
+        // we have all data, let us pass it to the renderers and return the output
+        $wsoutput = $PAGE->theme->get_renderer('mod_workshop', $PAGE);
+        $uioutput = $PAGE->theme->get_renderer('workshopallocation_manual', $PAGE);
+
         return $pagingbarout . $wsoutput->status_message($msg) . $uioutput->display_allocations($data) . $pagingbarout;
     }
 
@@ -346,13 +351,13 @@ class workshop_manual_allocator implements workshop_allocator {
         $sql = "SELECT author.id AS authorid, author.firstname AS authorfirstname, author.lastname AS authorlastname,
                        author.picture AS authorpicture, author.imagealt AS authorimagealt,
                        s.id AS submissionid, s.title AS submissiontitle, s.grade AS submissiongrade,
-                       a.id AS assessmentid, a.timecreated AS timeallocated, a.userid AS reviewerid,
+                       a.id AS assessmentid, a.timecreated AS timeallocated, a.reviewerid,
                        reviewer.firstname AS reviewerfirstname, reviewer.lastname AS reviewerlastname,
                        reviewer.picture as reviewerpicture, reviewer.imagealt AS reviewerimagealt
                   FROM {user} author
-             LEFT JOIN {workshop_submissions} s ON (s.userid = author.id)
+             LEFT JOIN {workshop_submissions} s ON (s.authorid = author.id)
              LEFT JOIN {workshop_assessments} a ON (s.id = a.submissionid)
-             LEFT JOIN {user} reviewer ON (a.userid = reviewer.id)
+             LEFT JOIN {user} reviewer ON (a.reviewerid = reviewer.id)
                  WHERE (author.id $authorids OR reviewer.id $reviewerids) AND (s.id IS NULL OR s.workshopid = :workshopid)
               ORDER BY author.lastname,author.firstname,author.id,reviewer.lastname,reviewer.firstname,reviewer.id";
 
index 769bd5aabb6f935fc27fb7442188a5d75e1143a1..c5f1820f31c5439ecd3955bdc17619423a3e2e5f 100644 (file)
@@ -55,7 +55,6 @@ class moodle_workshopallocation_manual_renderer extends moodle_renderer_base  {
      * @return string html code
      */
     public function display_allocations(stdClass $data) {
-        $wsoutput           = $data->wsoutput;          // moodle_mod_workshop_renderer
         $allocations        = $data->allocations;       // array prepared array of all allocations data
         $userinfo           = $data->userinfo;          // names and pictures of all required users
         $authors            = $data->authors;           // array potential reviewees
@@ -64,11 +63,14 @@ class moodle_workshopallocation_manual_renderer extends moodle_renderer_base  {
         $hlreviewerid       = $data->hlreviewerid;      // int id of the reviewer to highlight
         $selfassessment     = $data->selfassessment;    // bool is the self-assessment allowed in this workshop?
 
-        $wsoutput = $this->page->theme->get_renderer('mod_workshop', $this->page);
         if (empty($allocations)) {
-            return $wsoutput->status_message((object)array('text' => get_string('nosubmissions', 'workshop')));
+            return $this->output->heading(get_string('nosubmissions', 'workshop'));
         }
 
+        // convert user collections into drop down menus
+        $authors    = array_map('fullname', $authors);
+        $reviewers  =  array_map('fullname', $reviewers);
+
         $table              = new html_table();
         $table->set_classes('allocations');
         $table->head        = array(get_string('participantreviewedby', 'workshop'),
@@ -134,7 +136,7 @@ class moodle_workshopallocation_manual_renderer extends moodle_renderer_base  {
                 $exclude[$allocation->userid] = true;
             }
             // todo add an option to exclude users without own submission
-            $options = $this->users_to_menu_options($reviewers, $exclude);
+            $options = array_diff_key($reviewers, $exclude);
             if ($options) {
                 $handler = new moodle_url($this->page->url,
                                             array('mode' => 'new', 'of' => $allocation->userid, 'sesskey' => sesskey()));
@@ -181,7 +183,7 @@ class moodle_workshopallocation_manual_renderer extends moodle_renderer_base  {
             $o .= $this->output->container(get_string('selfassessmentdisabled', 'workshop'), 'info');
         }
         // todo add an option to exclude users without own submission
-        $options = $this->users_to_menu_options($authors, $exclude);
+        $options = array_diff_key($authors, $exclude);
         if ($options) {
             $handler = new moodle_url($this->page->url,
                                         array('mode' => 'new', 'by' => $allocation->userid, 'sesskey' => sesskey()));
@@ -213,22 +215,6 @@ class moodle_workshopallocation_manual_renderer extends moodle_renderer_base  {
         return $o;
     }
 
-    /**
-     * Given a list of users, returns an array suitable to render the HTML select field
-     *
-     * @param array $users array of users or array of groups of users
-     * @return array of options to be passed to {@link html_select::make_ popup_form()}
-     */
-    protected function users_to_menu_options($users, array $exclude) {
-        $options = array(); // to be returned
-        foreach ($users as $user) {
-            if (!isset($exclude[$user->id])) {
-                $options[$user->id] = fullname($user);
-            }
-        }
-        return $options;
-    }
-
     /**
      * Generates an icon link to remove the allocation
      *
index d0212380cdc35d2ac311f75bfbcfb90dad9f2c1e..021754a89a5835ca5550dc9fb3a5e4570da57fb4 100644 (file)
@@ -246,7 +246,7 @@ class workshop_random_allocator implements workshop_allocator {
     }
 
     /**
-     * Flips the structure of submission so it is indexed by userid attribute
+     * Flips the structure of submission so it is indexed by authorid attribute
      *
      * It is the caller's responsibility to make sure the submissions are not teacher
      * examples so no user is the author of more submissions.
@@ -258,10 +258,10 @@ class workshop_random_allocator implements workshop_allocator {
         $byauthor = array();
         if (is_array($submissions)) {
             foreach ($submissions as $submissionid => $submission) {
-                if (isset($byauthor[$submission->userid])) {
+                if (isset($byauthor[$submission->authorid])) {
                     throw new moodle_exception('moresubmissionsbyauthor', 'workshop');
                 }
-                $byauthor[$submission->userid] = $submission;
+                $byauthor[$submission->authorid] = $submission;
             }
         }
         return $byauthor;
index 4a5be21845a679496d7ce4426dcdcc635a36626e..c3451fffaf89bc9227f10068dd97029bed6789ac 100644 (file)
@@ -126,23 +126,23 @@ class workshop_allocation_random_test extends UnitTestCase {
     public function test_index_submissions_by_authors() {
         // fixture setup
         $submissions = array(
-                676 => (object)array('id' => 676, 'userid' => 23),
-                121 => (object)array('id' => 121, 'userid' => 56),
+                676 => (object)array('id' => 676, 'authorid' => 23),
+                121 => (object)array('id' => 121, 'authorid' => 56),
                 );
         // exercise SUT
         $submissions = $this->allocator->index_submissions_by_authors($submissions);
         // verify
         $this->assertEqual(array(
-                23 => (object)array('id' => 676, 'userid' => 23),
-                56 => (object)array('id' => 121, 'userid' => 56),
+                23 => (object)array('id' => 676, 'authorid' => 23),
+                56 => (object)array('id' => 121, 'authorid' => 56),
                 ), $submissions);
     }
 
     public function test_index_submissions_by_authors_duplicate_author() {
         // fixture setup
         $submissions = array(
-                14 => (object)array('id' => 676, 'userid' => 3),
-                87 => (object)array('id' => 121, 'userid' => 3),
+                14 => (object)array('id' => 676, 'authorid' => 3),
+                87 => (object)array('id' => 121, 'authorid' => 3),
                 );
         // set expectation
         $this->expectException('moodle_exception');
index 2716750dd0e2440017f2d88ca083bc3fc595a2ea..6154a0100cf8cf00de0f6c665bcc40eb52d9ec20 100644 (file)
@@ -66,7 +66,7 @@ if ('preview' == $mode) {
     // we do not require 'mod/workshop:peerassess' here, we just check that the assessment record
     // has been prepared for the current user. So even a user without the peerassess capability
     // (like a 'teacher', for example) can become a reviewer
-    if ($USER->id !== $assessment->userid) {
+    if ($USER->id !== $assessment->reviewerid) {
         print_error('nopermissions', '', $workshop->view_url());
     }
     $PAGE->set_url($workshop->assess_url($assessment->id));
@@ -94,7 +94,7 @@ if ($mform->is_cancelled()) {
     if (!is_null($rawgrade) and isset($data->saveandclose)) {
         echo $OUTPUT->header();
         echo $OUTPUT->heading(get_string('assessmentresult', 'workshop'), 2);
-        echo $OUTPUT->box('Given grade: ' . sprintf("%01.2f", $rawgrade * 100) . ' %'); // todo more detailed info using own renderer
+        echo $OUTPUT->box('Given grade: ' . $rawgrade . ' %'); // todo more detailed info using own renderer, format grade
         echo $OUTPUT->continue_button($workshop->view_url());
         echo $OUTPUT->footer();
         die();  // bye-bye
@@ -113,7 +113,7 @@ echo $OUTPUT->heading(get_string('assessmentform', 'workshop'), 2);
 if ('assessment' === $mode) {
     if (has_capability('mod/workshop:viewauthornames', $PAGE->context)) {
         $showname   = true;
-        $author     = $workshop->user_info($submission->userid);
+        $author     = $workshop->user_info($submission->authorid);
     } else {
         $showname   = false;
         $author     = null;
index 3f7672ac489ea4eb12bf8c929e90642b46ff119b..7339077cbd9e12a93771813415f05fa9da3ca492 100644 (file)
@@ -63,7 +63,7 @@ case 'mksubmissions':
         $submission                 = new stdClass();
         $submission->workshopid     = $workshop->id;
         $submission->example        = 0;
-        $submission->userid         = $authorid;
+        $submission->authorid       = $authorid;
         $submission->timecreated    = $timenow;
         $submission->timemodified   = $timenow;
         $submission->title          = $author->firstname . '\'s submission';
index 98a40914c176eb3286f72089aad617b43d165621..bd19b46011756989d1e2a95af89704d9b943ee7e 100644 (file)
@@ -26,6 +26,7 @@
 defined('MOODLE_INTERNAL') || die();
 
 require_once(dirname(dirname(__FILE__)) . '/lib.php');  // interface definition
+require_once($CFG->libdir . '/gradelib.php');           // to handle float vs decimal issues
 
 /**
  * Accumulative grading strategy logic.
@@ -199,7 +200,7 @@ class workshop_accumulative_strategy implements workshop_strategy {
      *
      * @param stdClass $assessment Assessment being filled
      * @param stdClass $data       Raw data as returned by the assessment form
-     * @return float|null          Raw grade (0 to 1) for submission as suggested by the peer
+     * @return float|null          Raw grade (0.00000 to 100.00000) for submission as suggested by the peer
      */
     public function save_assessment(stdClass $assessment, stdClass $data) {
         global $DB;
@@ -355,12 +356,15 @@ class workshop_accumulative_strategy implements workshop_strategy {
     protected function get_current_assessment_data(stdClass $assessment) {
         global $DB;
 
+        if (empty($this->dimensions)) {
+            return array();
+        }
         list($dimsql, $dimparams) = $DB->get_in_or_equal(array_keys($this->dimensions), SQL_PARAMS_NAMED);
         // beware! the caller may rely on the returned array is indexed by dimensionid
         $sql = "SELECT dimensionid, *
                   FROM {workshop_grades}
                  WHERE assessmentid = :assessmentid AND strategy= :strategy AND dimensionid $dimsql";
-        $params = array('assessmentid' => $assessment->id, 'strategy' => 'acumulative');
+        $params = array('assessmentid' => $assessment->id, 'strategy' => 'accumulative');
         $params = array_merge($params, $dimparams);
 
         return $DB->get_records_sql($sql, $params);
@@ -370,7 +374,7 @@ class workshop_accumulative_strategy implements workshop_strategy {
      * Aggregates the assessment form data and sets the grade for the submission given by the peer
      *
      * @param stdClass $assessment Assessment record
-     * @return float|null          Raw grade (from 0 to 1) for submission as suggested by the peer
+     * @return float|null          Raw grade (from 0.00000 to 100.00000) for submission as suggested by the peer
      */
     protected function update_peer_grade(stdClass $assessment) {
         $grades     = $this->get_current_assessment_data($assessment);
@@ -386,7 +390,7 @@ class workshop_accumulative_strategy implements workshop_strategy {
      *
      * @param array $grades Grade records as returned by {@link get_current_assessment_data}
      * @uses $this->dimensions
-     * @return float|null   Raw grade (from 0 to 1) for submission as suggested by the peer
+     * @return float|null   Raw grade (from 0.00000 to 100.00000) for submission as suggested by the peer
      */
     protected function calculate_peer_grade(array $grades) {
 
@@ -407,11 +411,11 @@ class workshop_accumulative_strategy implements workshop_strategy {
             if ($dimension->grade < 0) {
                 // this is a scale
                 $scaleid    = -$dimension->grade;
-                $sumgrades  += $this->scale_to_grade($scaleid, $grade->grade) * $dimension->weight;
+                $sumgrades  += $this->scale_to_grade($scaleid, $grade->grade) * $dimension->weight * 100;
                 $sumweights += $dimension->weight;
             } else {
                 // regular grade
-                $sumgrades  += ($grade->grade / $dimension->grade) * $dimension->weight;
+                $sumgrades  += ($grade->grade / $dimension->grade) * $dimension->weight * 100;
                 $sumweights += $dimension->weight;
             }
         }
index b8888d17567b476c62b565f08bb6512030c5aebd..17a4dccaaa1c0f3b9eda6dfa4a3a399b9b0ff2f6 100644 (file)
@@ -99,7 +99,7 @@ class workshop_accumulative_strategy_test extends UnitTestCase {
         // excercise SUT
         $suggested = $this->strategy->calculate_peer_grade($grades);
         // validate
-        $this->assertEqual(grade_floatval(5/20), $suggested);
+        $this->assertEqual(grade_floatval(5/20 * 100), $suggested);
     }
 
     public function test_calculate_peer_grade_negative_weight() {
@@ -118,7 +118,7 @@ class workshop_accumulative_strategy_test extends UnitTestCase {
         // excercise SUT
         $suggested = $this->strategy->calculate_peer_grade($grades);
         // validate
-        $this->assertEqual(grade_floatval(5/20), $suggested);
+        $this->assertEqual(grade_floatval(5/20 * 100), $suggested);
     }
 
     public function test_calculate_peer_grade_three_numericals_same_weight() {
@@ -135,7 +135,7 @@ class workshop_accumulative_strategy_test extends UnitTestCase {
         $suggested = $this->strategy->calculate_peer_grade($grades);
 
         // validate
-        $this->assertEqual(grade_floatval((11/20 + 87/100 + 10/10)/3), $suggested);
+        $this->assertEqual(grade_floatval((11/20 + 87/100 + 10/10)/3 * 100), $suggested);
     }
 
     public function test_calculate_peer_grade_three_numericals_different_weights() {
@@ -152,7 +152,7 @@ class workshop_accumulative_strategy_test extends UnitTestCase {
         $suggested = $this->strategy->calculate_peer_grade($grades);
 
         // validate
-        $this->assertEqual(grade_floatval((7/15*3 + 66/80*1 + 4/5*2)/6), $suggested);
+        $this->assertEqual(grade_floatval((7/15*3 + 66/80*1 + 4/5*2)/6 * 100), $suggested);
     }
 
     public function test_calculate_peer_grade_one_scale_max() {
@@ -169,7 +169,7 @@ class workshop_accumulative_strategy_test extends UnitTestCase {
         $suggested = $this->strategy->calculate_peer_grade($grades);
 
         // validate
-        $this->assertEqual(1.00000, $suggested);
+        $this->assertEqual(100.00000, $suggested);
     }
 
     public function test_calculate_peer_grade_one_scale_min_with_scale_caching() {
@@ -210,7 +210,7 @@ class workshop_accumulative_strategy_test extends UnitTestCase {
         $suggested = $this->strategy->calculate_peer_grade($grades);
 
         // validate
-        $this->assertEqual(grade_floatval((1/2*2 + 4/6*3)/5), $suggested);
+        $this->assertEqual(grade_floatval((1/2*2 + 4/6*3)/5 * 100), $suggested);
     }
 
     public function test_calculate_peer_grade_scale_exception() {
index b8c3be5037a69137a6741cb3cf25bce95a2214a5..adf7a879e9925cd3d3236dca0d2cae9462f7b5cb 100644 (file)
@@ -70,7 +70,8 @@ interface workshop_strategy {
      * @see grade_floatval()
      * @param stdClass $assessment Assessment being filled
      * @param stdClass $data       Raw data as returned by the assessment form
-     * @return float|null          Raw grade (0 to 1) for submission as suggested by the peer or null if impossible to count
+     * @return float|null          Raw percentual grade (0.00000 to 100.00000) for submission
+     *                             as suggested by the peer or null if impossible to count
      */
     public function save_assessment(stdClass $assessment, stdClass $data);
 
index 8e432a57fbe1423c2bfd164ae455c9a78318ad0a..617d47e3c1c114c4238b64d5f6326fc339308d70 100644 (file)
@@ -235,7 +235,7 @@ class workshop_numerrors_strategy implements workshop_strategy {
      *
      * @param stdClass $assessment Assessment being filled
      * @param stdClass $data       Raw data as returned by the assessment form
-     * @return float|null          Raw grade (from 0 to 1) for submission as suggested by the peer
+     * @return float|null          Raw grade (from 0.00000 to 100.00000) for submission as suggested by the peer
      */
     public function save_assessment(stdClass $assessment, stdClass $data) {
         global $DB;
@@ -424,6 +424,9 @@ class workshop_numerrors_strategy implements workshop_strategy {
     protected function get_current_assessment_data(stdClass $assessment) {
         global $DB;
 
+        if (empty($this->dimensions)) {
+            return array();
+        }
         list($dimsql, $dimparams) = $DB->get_in_or_equal(array_keys($this->dimensions), SQL_PARAMS_NAMED);
         // beware! the caller may rely on the returned array is indexed by dimensionid
         $sql = "SELECT dimensionid, *
@@ -439,7 +442,7 @@ class workshop_numerrors_strategy implements workshop_strategy {
      * Aggregates the assessment form data and sets the grade for the submission given by the peer
      *
      * @param stdClass $assessment Assessment record
-     * @return float|null          Raw grade (0 to 1) for submission as suggested by the peer
+     * @return float|null          Raw grade (0.00000 to 100.00000) for submission as suggested by the peer
      */
     protected function update_peer_grade(stdClass $assessment) {
         $grades     = $this->get_current_assessment_data($assessment);
@@ -454,7 +457,7 @@ class workshop_numerrors_strategy implements workshop_strategy {
      * Calculates the aggregated grade given by the reviewer
      *
      * @param array $grades Grade records as returned by {@link get_current_assessment_data}
-     * @return float|null   Raw grade (0 to 1) for submission as suggested by the peer
+     * @return float|null   Raw grade (0.00000 to 100.00000) for submission as suggested by the peer
      */
     protected function calculate_peer_grade(array $grades) {
         if (empty($grades)) {
@@ -471,7 +474,7 @@ class workshop_numerrors_strategy implements workshop_strategy {
     }
 
     /**
-     * Returns a grade 0..1 for the given number of errors
+     * Returns a grade 0.00000 to 100.00000 for the given number of errors
      *
      * This is where we use the mapping table defined by the teacher. If a grade for the given
      * number of errors (negative assertions) is not defined, the most recently defined one is used.
@@ -487,21 +490,21 @@ class workshop_numerrors_strategy implements workshop_strategy {
      * With this mapping, one error is mapped to 100% grade and 4 errors is mapped to 60%.
      *
      * @param mixed $numerrors Number of errors
-     * @return float          Raw grade (0 to 1) for the given number of negative assertions
+     * @return float          Raw grade (0.00000 to 100.00000) for the given number of negative assertions
      */
     protected function errors_to_grade($numerrors) {
-        $grade = 100;
+        $grade = 100.00000;
         for ($i = 1; $i <= $numerrors; $i++) {
             if (isset($this->mappings[$i])) {
                 $grade = $this->mappings[$i]->grade;
             }
         }
-        if ($grade > 100) {
-            $grade = 100;
+        if ($grade > 100.00000) {
+            $grade = 100.00000;
         }
-        if ($grade < 0) {
-            $grade = 0;
+        if ($grade < 0.00000) {
+            $grade = 0.00000;
         }
-        return grade_floatval($grade/100);
+        return grade_floatval($grade);
     }
 }
index 943be186d5334f4bb00018a60ae1591eeaefd83d..7f03926dc125b895169ccb180fff64ecdd08554e 100644 (file)
@@ -110,7 +110,7 @@ class workshop_numerrors_strategy_test extends UnitTestCase {
         // excercise SUT
         $suggested = $this->strategy->calculate_peer_grade($grades);
         // validate
-        $this->assertEqual($suggested, 1.0);
+        $this->assertEqual($suggested, 100.00000);
     }
 
     public function test_calculate_peer_grade_one_error() {
@@ -133,7 +133,7 @@ class workshop_numerrors_strategy_test extends UnitTestCase {
         // excercise SUT
         $suggested = $this->strategy->calculate_peer_grade($grades);
         // validate
-        $this->assertEqual($suggested, 0.8);
+        $this->assertEqual($suggested, 80.00000);
     }
 
     public function test_calculate_peer_grade_three_errors_same_weight_a() {
@@ -157,7 +157,7 @@ class workshop_numerrors_strategy_test extends UnitTestCase {
         // excercise SUT
         $suggested = $this->strategy->calculate_peer_grade($grades);
         // validate
-        $this->assertEqual($suggested, 0.1);
+        $this->assertEqual($suggested, 10.00000);
     }
 
     public function test_calculate_peer_grade_three_errors_same_weight_b() {
@@ -181,7 +181,7 @@ class workshop_numerrors_strategy_test extends UnitTestCase {
         // excercise SUT
         $suggested = $this->strategy->calculate_peer_grade($grades);
         // validate
-        $this->assertEqual($suggested, 0);
+        $this->assertEqual($suggested, 0.00000);
     }
 
     public function test_calculate_peer_grade_one_error_weighted() {
@@ -205,7 +205,7 @@ class workshop_numerrors_strategy_test extends UnitTestCase {
         // excercise SUT
         $suggested = $this->strategy->calculate_peer_grade($grades);
         // validate
-        $this->assertEqual($suggested, 0.33);
+        $this->assertEqual($suggested, 33.00000);
     }
 
     public function test_calculate_peer_grade_zero_weight() {
@@ -229,7 +229,7 @@ class workshop_numerrors_strategy_test extends UnitTestCase {
         // excercise SUT
         $suggested = $this->strategy->calculate_peer_grade($grades);
         // validate
-        $this->assertEqual($suggested, 1.0);
+        $this->assertEqual($suggested, 100.00000);
     }
 
     public function test_calculate_peer_grade_sum_weight() {
@@ -257,6 +257,6 @@ class workshop_numerrors_strategy_test extends UnitTestCase {
         // excercise SUT
         $suggested = $this->strategy->calculate_peer_grade($grades);
         // validate
-        $this->assertEqual($suggested, 0.05);
+        $this->assertEqual($suggested, 5.00000);
     }
 }
index 1ea2bef1f3a904fac7a2a1a7cc28587ea98883f6..2ba5bddb6f46bed7ddd910cf67d69eb1a2163c67 100644 (file)
@@ -500,7 +500,7 @@ function workshop_get_file_info($browser, $areas, $course, $cm, $context, $filea
 
         $sql = 'SELECT s.id, u.lastname, u.firstname
                   FROM {workshop_submissions} s
-            INNER JOIN {user} u ON (s.userid = u.id)
+            INNER JOIN {user} u ON (s.authorid = u.id)
                  WHERE s.workshopid = ?';
         $params         = array($cm->instance);
         $authors        = $DB->get_records_sql($sql, $params);
index e914532304a1fbfdfdf5f5ba7ceb95d4d74aad39..08baea4ea701eaa1d414ddf796cef63d3c6d53b7 100644 (file)
@@ -52,6 +52,9 @@ class workshop {
     const PHASE_EVALUATION  = 40;
     const PHASE_CLOSED      = 50;
 
+    /** how many participants per page are displayed by various reports */
+    const PERPAGE           = 30;
+
     /** @var stdClass course module record */
     public $cm = null;
 
@@ -225,8 +228,7 @@ class workshop {
     public function get_allocations() {
         global $DB;
 
-        $sql = 'SELECT a.id, a.submissionid, a.userid AS reviewerid,
-                       s.userid AS authorid
+        $sql = 'SELECT a.id, a.submissionid, a.reviewerid, s.authorid
                   FROM {workshop_assessments} a
             INNER JOIN {workshop_submissions} s ON (a.submissionid = s.id)
                  WHERE s.example = 0 AND s.workshopid = :workshopid';
@@ -241,19 +243,22 @@ class workshop {
      * Fetches data from {workshop_submissions} and adds some useful information from other
      * tables. Does not return textual fields to prevent possible memory lack issues.
      *
-     * @param mixed $userid int|array|'all' If set to [array of] integer, return submission[s] of the given user[s] only
+     * @param mixed $authorid int|array|'all' If set to [array of] integer, return submission[s] of the given user[s] only
      * @param mixed $examples false|true|'all' Only regular submissions, only examples, all submissions
      * @return array
      */
-    public function get_submissions($userid='all', $examples=false) {
+    public function get_submissions($authorid='all', $examples=false) {
         global $DB;
 
-        $sql = 'SELECT s.id, s.workshopid, s.example, s.userid, s.timecreated, s.timemodified,
-                       s.title, s.grade, s.gradeover, s.gradeoverby, s.gradinggrade,
-                       u.lastname AS authorlastname, u.firstname AS authorfirstname, u.id AS authorid,
-                       u.picture AS authorpicture, u.imagealt AS authorimagealt
+        $sql = 'SELECT s.id, s.workshopid, s.example, s.authorid, s.timecreated, s.timemodified,
+                       s.title, s.grade, s.gradeover, s.gradeoverby,
+                       u.lastname AS authorlastname, u.firstname AS authorfirstname,
+                       u.picture AS authorpicture, u.imagealt AS authorimagealt,
+                       t.lastname AS overlastname, t.firstname AS overfirstname,
+                       t.picture AS overpicture, t.imagealt AS overimagealt
                   FROM {workshop_submissions} s
-            INNER JOIN {user} u ON (s.userid = u.id)
+            INNER JOIN {user} u ON (s.authorid = u.id)
+             LEFT JOIN {user} t ON (s.gradeoverby = u.id)
                  WHERE s.workshopid = :workshopid';
         $params = array('workshopid' => $this->id);
 
@@ -267,15 +272,15 @@ class workshop {
             throw new coding_exception('Illegal parameter value: $examples may be false|true|"all"');
         }
 
-        if ('all' === $userid) {
+        if ('all' === $authorid) {
             // no additional conditions
-        } elseif (is_array($userid)) {
-            list($usql, $uparams) = $DB->get_in_or_equal($userid, SQL_PARAMS_NAMED);
-            $sql .= " AND userid $usql";
+        } elseif (is_array($authorid)) {
+            list($usql, $uparams) = $DB->get_in_or_equal($authorid, SQL_PARAMS_NAMED);
+            $sql .= " AND authorid $usql";
             $params = array_merge($params, $uparams);
         } else {
-            $sql .= ' AND userid = :userid';
-            $params['userid'] = $userid;
+            $sql .= ' AND authorid = :authorid';
+            $params['authorid'] = $authorid;
         }
         $sql .= ' ORDER BY u.lastname, u.firstname';
 
@@ -295,7 +300,7 @@ class workshop {
                        u.lastname AS authorlastname, u.firstname AS authorfirstname, u.id AS authorid,
                        u.picture AS authorpicture, u.imagealt AS authorimagealt
                   FROM {workshop_submissions} s
-            INNER JOIN {user} u ON (s.userid = u.id)
+            INNER JOIN {user} u ON (s.authorid = u.id)
                  WHERE s.workshopid = :workshopid AND s.id = :id';
         $params = array('workshopid' => $this->id, 'id' => $id);
         return $DB->get_record_sql($sql, $params, MUST_EXIST);
@@ -307,19 +312,19 @@ class workshop {
      * @param int $id author id
      * @return stdClass|false
      */
-    public function get_submission_by_author($id) {
+    public function get_submission_by_author($authorid) {
         global $DB;
 
-        if (empty($id)) {
+        if (empty($authorid)) {
             return false;
         }
         $sql = 'SELECT s.*,
                        u.lastname AS authorlastname, u.firstname AS authorfirstname, u.id AS authorid,
                        u.picture AS authorpicture, u.imagealt AS authorimagealt
                   FROM {workshop_submissions} s
-            INNER JOIN {user} u ON (s.userid = u.id)
-                 WHERE s.example = 0 AND s.workshopid = :workshopid AND s.userid = :userid';
-        $params = array('workshopid' => $this->id, 'userid' => $id);
+            INNER JOIN {user} u ON (s.authorid = u.id)
+                 WHERE s.example = 0 AND s.workshopid = :workshopid AND s.authorid = :authorid';
+        $params = array('workshopid' => $this->id, 'authorid' => $authorid);
         return $DB->get_record_sql($sql, $params);
     }
 
@@ -335,15 +340,15 @@ class workshop {
     public function get_all_assessments() {
         global $DB;
 
-        $sql = 'SELECT a.id, a.submissionid, a.userid, a.timecreated, a.timemodified, a.timeagreed,
+        $sql = 'SELECT a.id, a.submissionid, a.reviewerid, a.timecreated, a.timemodified, a.timeagreed,
                        a.grade, a.gradinggrade, a.gradinggradeover, a.gradinggradeoverby,
                        reviewer.id AS reviewerid,reviewer.firstname AS reviewerfirstname,reviewer.lastname as reviewerlastname,
                        s.title,
                        author.id AS authorid, author.firstname AS authorfirstname,author.lastname AS authorlastname
                   FROM {workshop_assessments} a
-            INNER JOIN {user} reviewer ON (a.userid = reviewer.id)
+            INNER JOIN {user} reviewer ON (a.reviewerid = reviewer.id)
             INNER JOIN {workshop_submissions} s ON (a.submissionid = s.id)
-            INNER JOIN {user} author ON (s.userid = author.id)
+            INNER JOIN {user} author ON (s.authorid = author.id)
                  WHERE s.workshopid = :workshopid AND s.example = 0
               ORDER BY reviewer.lastname, reviewer.firstname';
         $params = array('workshopid' => $this->id);
@@ -365,9 +370,9 @@ class workshop {
                        s.title,
                        author.id AS authorid, author.firstname AS authorfirstname,author.lastname as authorlastname
                   FROM {workshop_assessments} a
-            INNER JOIN {user} reviewer ON (a.userid = reviewer.id)
+            INNER JOIN {user} reviewer ON (a.reviewerid = reviewer.id)
             INNER JOIN {workshop_submissions} s ON (a.submissionid = s.id)
-            INNER JOIN {user} author ON (s.userid = author.id)
+            INNER JOIN {user} author ON (s.authorid = author.id)
                  WHERE a.id = :id AND s.workshopid = :workshopid';
         $params = array('id' => $id, 'workshopid' => $this->id);
 
@@ -377,10 +382,10 @@ class workshop {
     /**
      * Get the complete information about all assessments allocated to the given reviewer
      *
-     * @param int $userid reviewer id
+     * @param int $reviewerid
      * @return array
      */
-    public function get_assessments_by_reviewer($userid) {
+    public function get_assessments_by_reviewer($reviewerid) {
         global $DB;
 
         $sql = 'SELECT a.*,
@@ -390,11 +395,11 @@ class workshop {
                        author.id AS authorid, author.firstname AS authorfirstname,author.lastname AS authorlastname,
                        author.picture AS authorpicture, author.imagealt AS authorimagealt
                   FROM {workshop_assessments} a
-            INNER JOIN {user} reviewer ON (a.userid = reviewer.id)
+            INNER JOIN {user} reviewer ON (a.reviewerid = reviewer.id)
             INNER JOIN {workshop_submissions} s ON (a.submissionid = s.id)
-            INNER JOIN {user} author ON (s.userid = author.id)
-                 WHERE s.example = 0 AND reviewer.id = :userid AND s.workshopid = :workshopid';
-        $params = array('userid' => $userid, 'workshopid' => $this->id);
+            INNER JOIN {user} author ON (s.authorid = author.id)
+                 WHERE s.example = 0 AND reviewer.id = :reviewerid AND s.workshopid = :workshopid';
+        $params = array('reviewerid' => $reviewerid, 'workshopid' => $this->id);
 
         return $DB->get_records_sql($sql, $params);
     }
@@ -410,14 +415,14 @@ class workshop {
     public function add_allocation(stdClass $submission, $reviewerid, $bulk=false) {
         global $DB;
 
-        if ($DB->record_exists('workshop_assessments', array('submissionid' => $submission->id, 'userid' => $reviewerid))) {
+        if ($DB->record_exists('workshop_assessments', array('submissionid' => $submission->id, 'reviewerid' => $reviewerid))) {
             return self::ALLOCATION_EXISTS;
         }
 
         $now = time();
         $assessment = new stdClass();
         $assessment->submissionid   = $submission->id;
-        $assessment->userid         = $reviewerid;
+        $assessment->reviewerid     = $reviewerid;
         $assessment->timecreated    = $now;
         $assessment->timemodified   = $now;
 
@@ -692,29 +697,29 @@ class workshop {
         $phase = new stdClass();
         $phase->title = get_string('phasesubmission', 'workshop');
         $phase->tasks = array();
-        if (has_capability('mod/workshop:submit', $context, $userid)) {
+        if (has_capability('moodle/course:manageactivities', $context, $userid)) {
             $task = new stdClass();
-            $task->title = get_string('tasksubmit', 'workshop');
-            $task->link = $this->submission_url();
-            if ($DB->record_exists('workshop_submissions', array('workshopid'=>$this->id, 'example'=>0, 'userid'=>$userid))) {
+            $task->title = get_string('taskinstructreviewers', 'workshop');
+            $task->link = $this->updatemod_url();
+            if (trim(strip_tags($this->instructreviewers))) {
                 $task->completed = true;
             } elseif ($this->phase >= self::PHASE_ASSESSMENT) {
                 $task->completed = false;
-            } else {
-                $task->completed = null;    // still has a chance to submit
             }
-            $phase->tasks['submit'] = $task;
+            $phase->tasks['instructreviewers'] = $task;
         }
-        if (has_capability('moodle/course:manageactivities', $context, $userid)) {
+        if (has_capability('mod/workshop:submit', $context, $userid)) {
             $task = new stdClass();
-            $task->title = get_string('taskinstructreviewers', 'workshop');
-            $task->link = $this->updatemod_url();
-            if (trim(strip_tags($this->instructreviewers))) {
+            $task->title = get_string('tasksubmit', 'workshop');
+            $task->link = $this->submission_url();
+            if ($DB->record_exists('workshop_submissions', array('workshopid'=>$this->id, 'example'=>0, 'authorid'=>$userid))) {
                 $task->completed = true;
             } elseif ($this->phase >= self::PHASE_ASSESSMENT) {
                 $task->completed = false;
+            } else {
+                $task->completed = null;    // still has a chance to submit
             }
-            $phase->tasks['instructreviewers'] = $task;
+            $phase->tasks['submit'] = $task;
         }
         $phases[self::PHASE_SUBMISSION] = $phase;
         if (has_capability('mod/workshop:allocate', $context, $userid)) {
@@ -896,7 +901,7 @@ class workshop {
      * Saves a raw grade for submission as calculated from the assessment form fields
      *
      * @param array $assessmentid assessment record id, must exists
-     * @param mixed $grade        raw percentual grade from 0 to 1
+     * @param mixed $grade        raw percentual grade from 0.00000 to 100.00000
      * @return false|float        the saved grade
      */
     public function set_peer_grade($assessmentid, $grade) {
@@ -932,14 +937,14 @@ class workshop {
         }
         $userswithsubmission = array();
         list($usql, $uparams) = $DB->get_in_or_equal($userids, SQL_PARAMS_NAMED);
-        $sql = "SELECT id,userid
+        $sql = "SELECT id,authorid
                   FROM {workshop_submissions}
-                 WHERE example = 0 AND workshopid = :workshopid AND userid $usql";
+                 WHERE example = 0 AND workshopid = :workshopid AND authorid $usql";
         $params = array('workshopid' => $this->id);
         $params = array_merge($params, $uparams);
         $submissions = $DB->get_records_sql($sql, $params);
         foreach ($submissions as $submission) {
-            $userswithsubmission[$submission->userid] = null;
+            $userswithsubmission[$submission->authorid] = true;
         }
 
         return $userswithsubmission;
index ca37e80ee9d5204253df1a02813853083b9cc91c..abd009f3d821db205e8c9b3e16d231307663a6d1 100644 (file)
@@ -51,14 +51,14 @@ if ($id) { // submission is specified
     if (!$submission = $workshop->get_submission_by_author($USER->id)) {
         $submission = new stdClass();
         $submission->id = null;
-        $submission->userid = $USER->id;
+        $submission->authorid = $USER->id;
     }
 }
 
-$ownsubmission  = $submission->userid == $USER->id;
+$ownsubmission  = $submission->authorid == $USER->id;
 $canviewall     = has_capability('mod/workshop:viewallsubmissions', $PAGE->context);
 $cansubmit      = has_capability('mod/workshop:submit', $PAGE->context);
-$isreviewer     = $DB->record_exists('workshop_assessments', array('submissionid' => $submission->id, 'userid' => $USER->id));
+$isreviewer     = $DB->record_exists('workshop_assessments', array('submissionid' => $submission->id, 'reviewerid' => $USER->id));
 
 if ($submission->id and ($ownsubmission or $canviewall or $isreviewer)) {
     // ok you can go
@@ -87,7 +87,7 @@ if ($mform->is_cancelled()) {
     if (empty($formdata->id)) {
         $formdata->workshopid     = $workshop->id;
         $formdata->example        = 0; // todo add examples support
-        $formdata->userid         = $USER->id;
+        $formdata->authorid       = $USER->id;
         $formdata->timecreated    = $timenow;
     }
     $formdata->timemodified       = $timenow;
index cf3e356130cc3e4c9b55360220700b672ddf4cfa..889dd9f3d856db1e8401f437ce9e7f9d63f22f4c 100644 (file)
@@ -154,8 +154,145 @@ case workshop::PHASE_ASSESSMENT:
             echo $OUTPUT->box_end();
         }
     }
-
+    break;
 case workshop::PHASE_EVALUATION:
+    $pagingvar  = 'page';
+    $page       = optional_param($pagingvar, 0, PARAM_INT);
+
+    if (has_capability('mod/workshop:viewallassessments', $PAGE->context)) {
+        $showauthornames = has_capability('mod/workshop:viewauthornames', $PAGE->context);
+        $showreviewernames = has_capability('mod/workshop:viewreviewernames', $PAGE->context);
+        // todo this is very similar to what allocation/manual/lib.php does - refactoring expectable
+
+        // fetch the list of ids of all workshop participants - this may get really long so fetch just id
+        $participants = get_users_by_capability($PAGE->context, array('mod/workshop:submit', 'mod/workshop:peerassess'),
+                                            'u.id', 'u.lastname,u.firstname,u.id', '', '', '', '', false, false, true);
+
+        $numofparticipants = count($participants);  // we will need later for the pagination
+
+        // slice the list of participants according to the current page
+        $participants = array_slice($participants, $page * workshop::PERPAGE, workshop::PERPAGE, true);
+
+        // this will hold the information needed to display user names and pictures
+        $userinfo = $DB->get_records_list('user', 'id', array_keys($participants), '', 'id,lastname,firstname,picture,imagealt');
+
+        // load the participants' submissions
+        $submissions = $workshop->get_submissions(array_keys($participants), false);
+        foreach ($submissions as $submission) {
+            if (!isset($userinfo[$submission->authorid])) {
+                $userinfo[$submission->authorid]            = new stdClass();
+                $userinfo[$submission->authorid]->id        = $submission->authorid;
+                $userinfo[$submission->authorid]->firstname = $submission->authorfirstname;
+                $userinfo[$submission->authorid]->lastname  = $submission->authorlastname;
+                $userinfo[$submission->authorid]->picture   = $submission->authorpicture;
+                $userinfo[$submission->authorid]->imagealt  = $submission->authorimagealt;
+            }
+            if (!isset($userinfo[$submission->gradeoverby])) {
+                $userinfo[$submission->gradeoverby]            = new stdClass();
+                $userinfo[$submission->gradeoverby]->id        = $submission->gradeoverby;
+                $userinfo[$submission->gradeoverby]->firstname = $submission->overfirstname;
+                $userinfo[$submission->gradeoverby]->lastname  = $submission->overlastname;
+                $userinfo[$submission->gradeoverby]->picture   = $submission->overpicture;
+                $userinfo[$submission->gradeoverby]->imagealt  = $submission->overimagealt;
+            }
+        }
+
+        // get current reviewers
+        $reviewers = array();
+        if ($submissions) {
+            list($submissionids, $params) = $DB->get_in_or_equal(array_keys($submissions), SQL_PARAMS_NAMED);
+            $sql = "SELECT a.id AS assessmentid, a.submissionid,
+                           r.id AS reviewerid, r.lastname, r.firstname, r.picture, r.imagealt,
+                           s.id AS submissionid, s.authorid
+                      FROM {workshop_assessments} a
+                      JOIN {user} r ON (a.reviewerid = r.id)
+                      JOIN {workshop_submissions} s ON (a.submissionid = s.id)
+                     WHERE a.submissionid $submissionids";
+            $reviewers = $DB->get_records_sql($sql, $params);
+            foreach ($reviewers as $reviewer) {
+                if (!isset($userinfo[$reviewer->reviewerid])) {
+                    $userinfo[$reviewer->reviewerid]            = new stdClass();
+                    $userinfo[$reviewer->reviewerid]->id        = $reviewer->reviewerid;
+                    $userinfo[$reviewer->reviewerid]->firstname = $reviewer->firstname;
+                    $userinfo[$reviewer->reviewerid]->lastname  = $reviewer->lastname;
+                    $userinfo[$reviewer->reviewerid]->picture   = $reviewer->picture;
+                    $userinfo[$reviewer->reviewerid]->imagealt  = $reviewer->imagealt;
+                }
+            }
+        }
+
+        // get current reviewees
+        list($participantids, $params) = $DB->get_in_or_equal(array_keys($participants), SQL_PARAMS_NAMED);
+        $params['workshopid'] = $workshop->id;
+        $sql = "SELECT a.id AS assessmentid, a.submissionid,
+                       u.id AS reviewerid,
+                       s.id AS submissionid,
+                       e.id AS revieweeid, e.lastname, e.firstname, e.picture, e.imagealt
+                  FROM {user} u
+                  JOIN {workshop_assessments} a ON (a.reviewerid = u.id)
+                  JOIN {workshop_submissions} s ON (a.submissionid = s.id)
+                  JOIN {user} e ON (s.authorid = e.id)
+                 WHERE u.id $participantids AND s.workshopid = :workshopid";
+        $reviewees = $DB->get_records_sql($sql, $params);
+        foreach ($reviewees as $reviewee) {
+            if (!isset($userinfo[$reviewee->revieweeid])) {
+                $userinfo[$reviewee->revieweeid]            = new stdClass();
+                $userinfo[$reviewee->revieweeid]->id        = $reviewee->revieweeid;
+                $userinfo[$reviewee->revieweeid]->firstname = $reviewee->firstname;
+                $userinfo[$reviewee->revieweeid]->lastname  = $reviewee->lastname;
+                $userinfo[$reviewee->revieweeid]->picture   = $reviewee->picture;
+                $userinfo[$reviewee->revieweeid]->imagealt  = $reviewee->imagealt;
+            }
+        }
+
+        // get the current grades for assessment
+        list($participantids, $params) = $DB->get_in_or_equal(array_keys($participants), SQL_PARAMS_NAMED);
+        $params['workshopid'] = $workshop->id;
+        $sql = "SELECT * FROM {workshop_evaluations} WHERE reviewerid $participantids AND workshopid = :workshopid";
+        $gradinggrades = $DB->get_records_sql($sql, $params);
+
+        // now populate the final data object to be rendered
+        $grades = array();
+
+        foreach ($participants as $participant) {
+            // set up default (null) values
+            $grades[$participant->id] = new stdClass;
+            $grades[$participant->id]->userid = $participant->id;
+            $grades[$participant->id]->submissionid = null;
+            $grades[$participant->id]->reviewedby = array();
+            $grades[$participant->id]->reviewerof = array();
+            $grades[$participant->id]->gradinggrade = null;
+        }
+        unset($participants);
+
+        foreach ($submissions as $submission) {
+            $grades[$submission->authorid]->submissionid = $submission->id;
+            $grades[$submission->authorid]->submissiontitle = $submission->title;
+            $grades[$submission->authorid]->submissiongrade = $submission->grade;
+            $grades[$submission->authorid]->submissiongradeover = $submission->gradeover;
+            $grades[$submission->authorid]->submissiongradeoverby = $submission->gradeoverby;
+        }
+        unset($submissions);
+
+        foreach($reviewers as $reviewer) {
+            $grades[$reviewer->authorid]->reviewedby[$reviewer->reviewerid] = $reviewer->assessmentid;
+        }
+        unset($reviewers);
+
+        foreach($reviewees as $reviewee) {
+            $grades[$reviewee->reviewerid]->reviewerof[$reviewee->revieweeid] = $reviewee->assessmentid;
+        }
+        unset($reviewees);
+
+        foreach ($gradinggrades as $gradinggrade) {
+            $grades[$gradinggrade->reviewerid]->gradinggrade = $gradinggrade->gradinggrade;
+        }
+
+        // we have all data, let us pass it to the renderer and return the output
+
+        print_object($grades); die(); // DONOTCOMMIT
+        break;
+    }
 case workshop::PHASE_CLOSED:
 default:
 }