Esempio n. 1
0
    /**
     * Renders workshop message
     *
     * @param workshop_message $message to display
     * @return string html code
     */
    protected function render_workshop_message(workshop_message $message) {

        $text   = $message->get_message();
        $url    = $message->get_action_url();
        $label  = $message->get_action_label();

        if (empty($text) and empty($label)) {
            return '';
        }

        switch ($message->get_type()) {
        case workshop_message::TYPE_OK:
            $sty = 'ok';
            break;
        case workshop_message::TYPE_ERROR:
            $sty = 'error';
            break;
        default:
            $sty = 'info';
        }

        $o = html_writer::tag('span', $message->get_message());

        if (!is_null($url) and !is_null($label)) {
            $o .= $this->output->single_button($url, $label, 'get');
        }

        return $this->output->container($o, array('message', $sty));
    }
Esempio n. 2
0
 /**
  * Prints user interface - current allocation and a form to edit it
  */
 public function ui()
 {
     global $PAGE, $DB;
     $output = $PAGE->get_renderer('workshopallocation_manual');
     $page = optional_param('page', 0, PARAM_INT);
     $perpage = get_user_preferences('workshopallocation_manual_perpage', 10);
     $groupid = groups_get_activity_group($this->workshop->cm, true);
     $hlauthorid = -1;
     // highlight this author
     $hlreviewerid = -1;
     // highlight this reviewer
     $message = new workshop_message();
     $m = optional_param('m', '', PARAM_ALPHANUMEXT);
     // message code
     if ($m) {
         $m = explode('-', $m);
         switch ($m[0]) {
             case self::MSG_ADDED:
                 $hlauthorid = $m[1];
                 $hlreviewerid = $m[2];
                 $message = new workshop_message(get_string('allocationadded', 'workshopallocation_manual'), workshop_message::TYPE_OK);
                 break;
             case self::MSG_EXISTS:
                 $hlauthorid = $m[1];
                 $hlreviewerid = $m[2];
                 $message = new workshop_message(get_string('allocationexists', 'workshopallocation_manual'), workshop_message::TYPE_INFO);
                 break;
             case self::MSG_NOSUBMISSION:
                 $hlauthorid = $m[1];
                 $message = new workshop_message(get_string('nosubmissionfound', 'workshop'), workshop_message::TYPE_ERROR);
                 break;
             case self::MSG_CONFIRM_DEL:
                 $hlauthorid = $m[2];
                 $hlreviewerid = $m[3];
                 if ($m[4] == 0) {
                     $message = new workshop_message(get_string('areyousuretodeallocate', 'workshopallocation_manual'), workshop_message::TYPE_INFO);
                 } else {
                     $message = new workshop_message(get_string('areyousuretodeallocategraded', 'workshopallocation_manual'), workshop_message::TYPE_ERROR);
                 }
                 $url = new moodle_url($PAGE->url, array('mode' => 'del', 'what' => $m[1], 'confirm' => 1, 'sesskey' => sesskey()));
                 $label = get_string('iamsure', 'workshop');
                 $message->set_action($url, $label);
                 break;
             case self::MSG_DELETED:
                 $hlauthorid = $m[1];
                 $hlreviewerid = $m[2];
                 $message = new workshop_message(get_string('assessmentdeleted', 'workshop'), workshop_message::TYPE_OK);
                 break;
             case self::MSG_DELETE_ERROR:
                 $hlauthorid = $m[1];
                 $hlreviewerid = $m[2];
                 $message = new workshop_message(get_string('assessmentnotdeleted', 'workshop'), workshop_message::TYPE_ERROR);
                 break;
         }
     }
     // fetch the list of ids of all workshop participants
     $numofparticipants = $this->workshop->count_participants(false, $groupid);
     $participants = $this->workshop->get_participants(false, $groupid, $perpage * $page, $perpage);
     if ($hlauthorid > 0 and $hlreviewerid > 0) {
         // display just those two users
         $participants = array_intersect_key($participants, array($hlauthorid => null, $hlreviewerid => null));
         $button = $output->single_button($PAGE->url, get_string('showallparticipants', 'workshopallocation_manual'), 'get');
     } else {
         $button = '';
     }
     // this will hold the information needed to display user names and pictures
     $userinfo = $participants;
     // load the participants' submissions
     $submissions = $this->workshop->get_submissions(array_keys($participants));
     $allnames = get_all_user_name_fields();
     foreach ($submissions as $submission) {
         if (!isset($userinfo[$submission->authorid])) {
             $userinfo[$submission->authorid] = new stdclass();
             $userinfo[$submission->authorid]->id = $submission->authorid;
             $userinfo[$submission->authorid]->picture = $submission->authorpicture;
             $userinfo[$submission->authorid]->imagealt = $submission->authorimagealt;
             $userinfo[$submission->authorid]->email = $submission->authoremail;
             foreach ($allnames as $addname) {
                 $temp = 'author' . $addname;
                 $userinfo[$submission->authorid]->{$addname} = $submission->{$temp};
             }
         }
     }
     // get current reviewers
     $reviewers = array();
     if ($submissions) {
         list($submissionids, $params) = $DB->get_in_or_equal(array_keys($submissions), SQL_PARAMS_NAMED);
         $picturefields = user_picture::fields('r', array(), 'reviewerid');
         $sql = "SELECT a.id AS assessmentid, a.submissionid, {$picturefields},\n                           s.id AS submissionid, s.authorid\n                      FROM {workshop_assessments} a\n                      JOIN {user} r ON (a.reviewerid = r.id)\n                      JOIN {workshop_submissions} s ON (a.submissionid = s.id)\n                     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]->picture = $reviewer->picture;
                 $userinfo[$reviewer->reviewerid]->imagealt = $reviewer->imagealt;
                 $userinfo[$reviewer->reviewerid]->email = $reviewer->email;
                 foreach ($allnames as $addname) {
                     $userinfo[$reviewer->reviewerid]->{$addname} = $reviewer->{$addname};
                 }
             }
         }
     }
     // get current reviewees
     $reviewees = array();
     if ($participants) {
         list($participantids, $params) = $DB->get_in_or_equal(array_keys($participants), SQL_PARAMS_NAMED);
         $namefields = get_all_user_name_fields(true, 'e');
         $params['workshopid'] = $this->workshop->id;
         $sql = "SELECT a.id AS assessmentid, a.submissionid,\n                           u.id AS reviewerid,\n                           s.id AS submissionid,\n                           e.id AS revieweeid, e.lastname, e.firstname, {$namefields}, e.picture, e.imagealt, e.email\n                      FROM {user} u\n                      JOIN {workshop_assessments} a ON (a.reviewerid = u.id)\n                      JOIN {workshop_submissions} s ON (a.submissionid = s.id)\n                      JOIN {user} e ON (s.authorid = e.id)\n                     WHERE u.id {$participantids} AND s.workshopid = :workshopid AND s.example = 0";
         $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;
                 $userinfo[$reviewee->revieweeid]->email = $reviewee->email;
                 foreach ($allnames as $addname) {
                     $userinfo[$reviewee->revieweeid]->{$addname} = $reviewee->{$addname};
                 }
             }
         }
     }
     // the information about the allocations
     $allocations = array();
     foreach ($participants as $participant) {
         $allocations[$participant->id] = new stdClass();
         $allocations[$participant->id]->userid = $participant->id;
         $allocations[$participant->id]->submissionid = null;
         $allocations[$participant->id]->reviewedby = array();
         $allocations[$participant->id]->reviewerof = array();
     }
     unset($participants);
     foreach ($submissions as $submission) {
         $allocations[$submission->authorid]->submissionid = $submission->id;
         $allocations[$submission->authorid]->submissiontitle = $submission->title;
         $allocations[$submission->authorid]->submissiongrade = $submission->grade;
     }
     unset($submissions);
     foreach ($reviewers as $reviewer) {
         $allocations[$reviewer->authorid]->reviewedby[$reviewer->reviewerid] = $reviewer->assessmentid;
     }
     unset($reviewers);
     foreach ($reviewees as $reviewee) {
         $allocations[$reviewee->reviewerid]->reviewerof[$reviewee->revieweeid] = $reviewee->assessmentid;
     }
     unset($reviewees);
     // prepare data to be rendered
     $data = new workshopallocation_manual_allocations();
     $data->workshop = $this->workshop;
     $data->allocations = $allocations;
     $data->userinfo = $userinfo;
     $data->authors = $this->workshop->get_potential_authors();
     $data->reviewers = $this->workshop->get_potential_reviewers();
     $data->hlauthorid = $hlauthorid;
     $data->hlreviewerid = $hlreviewerid;
     $data->selfassessment = $this->workshop->useselfassessment;
     // prepare the group selector
     $groupselector = $output->container(groups_print_activity_menu($this->workshop->cm, $PAGE->url, true), 'groupwidget');
     // prepare paging bar
     $pagingbar = new paging_bar($numofparticipants, $page, $perpage, $PAGE->url, 'page');
     $pagingbarout = $output->render($pagingbar);
     $perpageselector = $output->perpage_selector($perpage);
     return $groupselector . $pagingbarout . $output->render($message) . $output->render($data) . $button . $pagingbarout . $perpageselector;
 }
Esempio n. 3
0
    /**
     * Prints user interface - current allocation and a form to edit it
     */
    public function ui() {
        global $PAGE, $DB;

        $output     = $PAGE->get_renderer('workshopallocation_manual');

        $pagingvar  = 'page';
        $page       = optional_param($pagingvar, 0, PARAM_INT);
        $perpage    = 10;   // todo let the user modify this

        $hlauthorid     = -1;           // highlight this author
        $hlreviewerid   = -1;           // highlight this reviewer

        $message        = new workshop_message();

        $m  = optional_param('m', '', PARAM_ALPHANUMEXT);   // message code
        if ($m) {
            $m = explode('-', $m);
            switch ($m[0]) {
            case self::MSG_ADDED:
                $hlauthorid     = $m[1];
                $hlreviewerid   = $m[2];
                $message        = new workshop_message(get_string('allocationadded', 'workshopallocation_manual'),
                    workshop_message::TYPE_OK);
                break;
            case self::MSG_EXISTS:
                $hlauthorid     = $m[1];
                $hlreviewerid   = $m[2];
                $message        = new workshop_message(get_string('allocationexists', 'workshopallocation_manual'),
                    workshop_message::TYPE_INFO);
                break;
            case self::MSG_NOSUBMISSION:
                $hlauthorid     = $m[1];
                $message        = new workshop_message(get_string('nosubmissionfound', 'workshop'),
                    workshop_message::TYPE_ERROR);
                break;
            case self::MSG_CONFIRM_DEL:
                $hlauthorid     = $m[2];
                $hlreviewerid   = $m[3];
                if ($m[4] == 0) {
                    $message    = new workshop_message(get_string('areyousuretodeallocate', 'workshopallocation_manual'),
                        workshop_message::TYPE_INFO);
                } else {
                    $message    = new workshop_message(get_string('areyousuretodeallocategraded', 'workshopallocation_manual'),
                        workshop_message::TYPE_ERROR);
                }
                $url = new moodle_url($PAGE->url, array('mode' => 'del', 'what' => $m[1], 'confirm' => 1, 'sesskey' => sesskey()));
                $label = get_string('iamsure', 'workshop');
                $message->set_action($url, $label);
                break;
            case self::MSG_DELETED:
                $hlauthorid     = $m[1];
                $hlreviewerid   = $m[2];
                $message        = new workshop_message(get_string('assessmentdeleted', 'workshop'),
                    workshop_message::TYPE_OK);
                break;
            case self::MSG_DELETE_ERROR:
                $hlauthorid     = $m[1];
                $hlreviewerid   = $m[2];
                $message        = new workshop_message(get_string('assessmentnotdeleted', 'workshop'),
                    workshop_message::TYPE_ERROR);
                break;
            }
        }

        // 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 two users
            $participants = array_intersect_key($participants, array($hlauthorid => null, $hlreviewerid => null));
            $button = $output->single_button($PAGE->url, get_string('showallparticipants', 'workshopallocation_manual'), 'get');
        } else {
            // slice the list of participants according to the current page
            $participants = array_slice($participants, $page * $perpage, $perpage, true);
            $button = '';
        }

        // this will hold the information needed to display user names and pictures
        $userinfo = $DB->get_records_list('user', 'id', array_keys($participants), '', user_picture::fields());

        // load the participants' submissions
        $submissions = $this->workshop->get_submissions(array_keys($participants));
        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;
                $userinfo[$submission->authorid]->email     = $submission->authoremail;
            }
        }

        // 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, r.email,
                           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;
                    $userinfo[$reviewer->reviewerid]->email     = $reviewer->email;
                }
            }
        }

        // get current reviewees
        $reviewees = array();
        if ($participants) {
            list($participantids, $params) = $DB->get_in_or_equal(array_keys($participants), SQL_PARAMS_NAMED);
            $params['workshopid'] = $this->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, e.email
                      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 AND s.example = 0";
            $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;
                    $userinfo[$reviewee->revieweeid]->email     = $reviewee->email;
                }
            }
        }

        // the information about the allocations
        $allocations = array();

        foreach ($participants as $participant) {
            $allocations[$participant->id] = new stdClass();
            $allocations[$participant->id]->userid = $participant->id;
            $allocations[$participant->id]->submissionid = null;
            $allocations[$participant->id]->reviewedby = array();
            $allocations[$participant->id]->reviewerof = array();
        }
        unset($participants);

        foreach ($submissions as $submission) {
            $allocations[$submission->authorid]->submissionid = $submission->id;
            $allocations[$submission->authorid]->submissiontitle = $submission->title;
            $allocations[$submission->authorid]->submissiongrade = $submission->grade;
        }
        unset($submissions);
        foreach($reviewers as $reviewer) {
            $allocations[$reviewer->authorid]->reviewedby[$reviewer->reviewerid] = $reviewer->assessmentid;
        }
        unset($reviewers);
        foreach($reviewees as $reviewee) {
            $allocations[$reviewee->reviewerid]->reviewerof[$reviewee->revieweeid] = $reviewee->assessmentid;
        }
        unset($reviewees);

        // prepare data to be rendered
        $data                   = new workshopallocation_manual_allocations();
        $data->allocations      = $allocations;
        $data->userinfo         = $userinfo;
        $data->authors          = $this->workshop->get_potential_authors();
        $data->reviewers        = $this->workshop->get_potential_reviewers();
        $data->hlauthorid       = $hlauthorid;
        $data->hlreviewerid     = $hlreviewerid;
        $data->selfassessment   = $this->workshop->useselfassessment;

        // prepare paging bar
        $pagingbar              = new paging_bar($numofparticipants, $page, $perpage, $PAGE->url, $pagingvar);
        $pagingbarout           = $output->render($pagingbar);

        return $pagingbarout . $output->render($message) . $output->render($data) . $button . $pagingbarout;
    }
Esempio n. 4
0
    /**
     * Returns the HTML code to print the user interface
     */
    public function ui() {
        global $PAGE;

        $output = $PAGE->get_renderer('mod_workshop');

        $m = optional_param('m', null, PARAM_INT);  // status message code
        $message = new workshop_message();
        if ($m == self::MSG_SUCCESS) {
            $message->set_text(get_string('randomallocationdone', 'workshopallocation_random'));
            $message->set_type(workshop_message::TYPE_OK);
        }

        $out  = $output->container_start('random-allocator');
        $out .= $output->render($message);
        // the nasty hack follows to bypass the sad fact that moodle quickforms do not allow to actually
        // return the HTML content, just to display it
        ob_start();
        $this->mform->display();
        $out .= ob_get_contents();
        ob_end_clean();

        // if there are some not-grouped participant in a group mode, warn the user
        $gmode = $this->get_group_mode();
        if (VISIBLEGROUPS == $gmode or SEPARATEGROUPS == $gmode) {
            $nogroupusers = $this->workshop->get_ungrouped_users(); //this function exists for a reason
            if (!empty($nogroupusers)) {
                $list = array();
                foreach ($nogroupusers as $nogroupuser) {
                    $list[] = fullname($nogroupuser);
                }
                $a = implode(', ', $list);
                $out .= $output->box(get_string('nogroupusers', 'workshopallocation_random', $a), 'generalbox warning nogroupusers');
            }
        }

        // TODO $out .= $output->heading(get_string('stats', 'workshopallocation_random'));

        $out .= $output->container_end();

        return $out;
    }
Esempio n. 5
0
    /**
     * Prints user interface - current allocation and a form to edit it
     */
    public function ui() {
        global $PAGE, $DB;

        $output     = $PAGE->get_renderer('workshopallocation_manual');

        $pagingvar  = 'page';
        $page       = optional_param($pagingvar, 0, PARAM_INT);
        $perpage    = 10;   // todo let the user modify this

        $hlauthorid     = -1;           // highlight this author
        $hlreviewerid   = -1;           // highlight this reviewer

        $message        = new workshop_message();

        $m  = optional_param('m', '', PARAM_ALPHANUMEXT);   // message code
        if ($m) {
            $m = explode('-', $m);
            switch ($m[0]) {
            case self::MSG_ADDED:
                $hlauthorid     = $m[1];
                $hlreviewerid   = $m[2];
                $message        = new workshop_message(get_string('allocationadded', 'workshopallocation_manual'),
                    workshop_message::TYPE_OK);
                break;
            case self::MSG_EXISTS:
                $hlauthorid     = $m[1];
                $hlreviewerid   = $m[2];
                $message        = new workshop_message(get_string('allocationexists', 'workshopallocation_manual'),
                    workshop_message::TYPE_INFO);
                break;
            case self::MSG_NOSUBMISSION:
                $hlauthorid     = $m[1];
                $message        = new workshop_message(get_string('nosubmissionfound', 'workshop'),
                    workshop_message::TYPE_ERROR);
                break;
            case self::MSG_CONFIRM_DEL:
                $hlauthorid     = $m[2];
                $hlreviewerid   = $m[3];
                if ($m[4] == 0) {
                    $message    = new workshop_message(get_string('areyousuretodeallocate', 'workshopallocation_manual'),
                        workshop_message::TYPE_INFO);
                } else {
                    $message    = new workshop_message(get_string('areyousuretodeallocategraded', 'workshopallocation_manual'),
                        workshop_message::TYPE_ERROR);
                }
                $url = new moodle_url($PAGE->url, array('mode' => 'del', 'what' => $m[1], 'confirm' => 1, 'sesskey' => sesskey()));
                $label = get_string('iamsure', 'workshop');
                $message->set_action($url, $label);
                break;
            case self::MSG_DELETED:
                $hlauthorid     = $m[1];
                $hlreviewerid   = $m[2];
                $message        = new workshop_message(get_string('assessmentdeleted', 'workshop'),
                    workshop_message::TYPE_OK);
                break;
            case self::MSG_DELETE_ERROR:
                $hlauthorid     = $m[1];
                $hlreviewerid   = $m[2];
                $message        = new workshop_message(get_string('assessmentnotdeleted', 'workshop'),
                    workshop_message::TYPE_ERROR);
                break;
            }
        }

        // 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);

		// TEAMMODE :: Morgan Harris
		// this introduces a new variable, $gradeitems, that replaces $participants in some cases
		// basically in team mode you get a list of *groups* not people
		
		$useridstr = implode(array_keys($participants),",");
		$sql = <<<SQL
SELECT g.id, g.name
FROM {groups} g
JOIN {groups_members} m ON m.groupid = g.id
WHERE g.courseid = {$this->workshop->cm->course} AND m.userid IN ($useridstr)
GROUP BY g.id, g.name
ORDER BY g.name
SQL;
		$rslt = $DB->get_records_sql($sql);
			
		$gradeitems = $rslt;

        $numofparticipants = count($gradeitems);  // we will need later for the pagination

        if ($hlauthorid > 0 and $hlreviewerid > 0) {
            // display just those two users
            // todo: figure out a sensible way to GROUPMOD this
            $participants = array_intersect_key($participants, array($hlauthorid => null, $hlreviewerid => null));
            $button = $output->single_button($PAGE->url, get_string('showallparticipants', 'workshopallocation_manual'), 'get');
        } else {
            // slice the list of participants according to the current page
            $gradeitems = array_slice($gradeitems, $page * $perpage, $perpage, true);
            $button = '';
        }

        // this will hold the information needed to display user names and pictures
        $userinfo = $DB->get_records_list('user', 'id', array_keys($participants), '', user_picture::fields());

	    $groupinfo = $DB->get_records_list('groups', 'id', array_keys($gradeitems));

        // load the participants' submissions
	    $submissions = $this->workshop->get_submissions_grouped();
        
        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;
                $userinfo[$submission->authorid]->email     = $submission->authoremail;
            }
        }

        // get current reviewers
        $reviewers = array();
        if ($submissions) {
			$keys = array_keys( $submissions );
            list($submissionids, $params) = $DB->get_in_or_equal($keys, SQL_PARAMS_NAMED);
            $sql = "SELECT a.id AS assessmentid, a.submissionid,
                           r.id AS reviewerid, r.lastname, r.firstname, r.picture, r.imagealt, r.email,
                           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;
                    $userinfo[$reviewer->reviewerid]->email     = $reviewer->email;
                }
            }
        }

        // the information about the allocations
        $allocations = array();

        foreach ($gradeitems as $participant) {
            $allocations[$participant->id] = new stdClass();
        	$allocations[$participant->id]->groupid = $participant->id;
        	$allocations[$participant->id]->group = $participant;
            $allocations[$participant->id]->submissionid = null;
            $allocations[$participant->id]->reviewedby = array();
            $allocations[$participant->id]->reviewerof = array();
            
        }
        unset($participants);

		//as we're iterating over this list, we also need to check if all the names are unique for our upload script
		$allgroupnames = array();

        foreach ($submissions as $submission) {
	        $id = $submission->group->id;
            $allocations[$id]->submissionid = $submission->id;
            $allocations[$id]->submissiontitle = $submission->title;
            $allocations[$id]->submissiongrade = $submission->grade;
            $allocations[$id]->userid = $submission->authorid;
			$allgroupnames[$id] = $submission->group->name;
        }
		
		$duplicategroupnames = array_unique(array_diff_assoc($allgroupnames,array_unique($allgroupnames)));
        
        foreach($reviewers as $reviewer) {
			$id = $submissions[$reviewer->submissionid];
            $allocations[$id->group->id]->reviewedby[$reviewer->reviewerid] = $reviewer->assessmentid;
        }
        unset($reviewers);

		unset($submissions);
        
        foreach($userinfo as $k => $u) {
	        $userinfo[$k]->groups = groups_get_all_groups($this->workshop->cm->course, $u->id, $this->workshop->cm->groupingid, 'g.id');
        }

        // prepare data to be rendered
        $data                   = new workshopallocation_teammode_manual_allocations();
        $data->allocations      = $allocations;
        $data->gradeitems		= $gradeitems;
        $data->userinfo         = $userinfo;
		$data->groupduplicates  = $duplicategroupnames;
        $data->authors          = $this->workshop->get_potential_authors();
        $data->reviewers        = $this->workshop->get_potential_reviewers();
        $data->hlauthorid       = $hlauthorid;
        $data->hlreviewerid     = $hlreviewerid;
        $data->selfassessment   = $this->workshop->useselfassessment;
        $data->gradeitems		= $gradeitems;

        // prepare paging bar
        $pagingbar              = new paging_bar($numofparticipants, $page, $perpage, $PAGE->url, $pagingvar);
        $pagingbarout           = $output->render($pagingbar);

        return $pagingbarout . $output->render($message) . $output->render($data) . $button . $pagingbarout;
    }
Esempio n. 6
0
 /**
  * Returns the HTML code to print the user interface
  */
 public function ui()
 {
     global $PAGE;
     $output = $PAGE->get_renderer('mod_workshop');
     $m = optional_param('m', null, PARAM_INT);
     // status message code
     $message = new workshop_message();
     if ($m == self::MSG_SUCCESS) {
         $message->set_text(get_string('randomallocationdone', 'workshopallocation_random'));
         $message->set_type(workshop_message::TYPE_OK);
     }
     $out = $output->container_start('random-allocator');
     $out .= $output->render($message);
     // the nasty hack follows to bypass the sad fact that moodle quickforms do not allow to actually
     // return the HTML content, just to display it
     ob_start();
     $this->mform->display();
     $out .= ob_get_contents();
     ob_end_clean();
     $out .= $output->container_end();
     // TODO $out .= $output->heading(get_string('stats', 'workshopallocation_random'));
     return $out;
 }