private function get_my_courses_with_reviews($sessions) { global $USER; //$mycourses = enrol_get_my_courses(); $courseswithreviews = array(); foreach ($sessions as $session) { $reviewcourses = array(); $subjectreviews = progressreview_controller::get_reviews($session->id, null, null, $USER->id, PROGRESSREVIEW_SUBJECT); $tutorreviews = progressreview_controller::get_reviews($session->id, null, null, $USER->id, PROGRESSREVIEW_TUTOR); foreach ($subjectreviews as $review) { $course = clone $review->get_course(); if (!array_key_exists($course->originalid, $reviewcourses)) { $course->id = $course->originalid; unset($course->originalid); $course->reviewtype = PROGRESSREVIEW_SUBJECT; $reviewcourses[$course->id] = $course; } } foreach ($tutorreviews as $review) { $course = clone $review->get_course(); if (!array_key_exists($course->originalid, $reviewcourses)) { $course->id = $course->originalid; unset($course->originalid); $course->reviewtype = PROGRESSREVIEW_TUTOR; $reviewcourses[$course->id] = $course; } } $session->courses = $reviewcourses; $courseswithreviews[] = $session; } return $courseswithreviews; }
/** * Defines the form's fields * * Defines a form with fields for entering a name, deadlines, scales (as csv lists), * dates for statistics, and whether the session is an induction review. * Also displays a checkbox for each installed subplugin, so that it can be set as active * for this session. */ protected function definition() { $mform =& $this->_form; $sessions = progressreview_controller::get_sessions(); $sessionoptions = array('' => get_string('choosedots')); foreach ($sessions as $session) { $sessionoptions[$session->id] = $session->name; } $strdeadlinesubject = get_string('deadline_subject', 'local_progressreview'); $strdeadlinetutor = get_string('deadline_tutor', 'local_progressreview'); $strdeadlineactive = get_string('deadline_active', 'local_progressreview'); $strlockafterdeadline = get_string('lockafterdeadline', 'local_progressreview'); $strscalebehaviour = get_string('scale_behaviour', 'local_progressreview'); $strscaleeffort = get_string('scale_effort', 'local_progressreview'); $strscalehomework = get_string('scale_homework', 'local_progressreview'); $strsnapshotdate = get_string('snapshotdate', 'local_progressreview'); $strprevioussession = get_string('showdatafrom', 'local_progressreview'); $strhomeworkstart = get_string('homeworkstart', 'local_progressreview'); $strinductionreview = get_string('inductionreview', 'local_progressreview'); $mform->addElement('hidden', 'editid'); $mform->addElement('header', 'general', get_string('general')); $mform->addElement('text', 'name', get_string('name', 'local_progressreview')); $mform->addElement('date_time_selector', 'deadline_subject', $strdeadlinesubject); $mform->addElement('date_time_selector', 'deadline_tutor', $strdeadlinetutor); $mform->addElement('date_time_selector', 'deadline_active', $strdeadlineactive); $mform->addElement('advcheckbox', 'lockafterdeadline', $strlockafterdeadline); $mform->addElement('text', 'scale_behaviour', $strscalebehaviour); $mform->addElement('text', 'scale_effort', $strscaleeffort); $mform->addElement('text', 'scale_homework', $strscalehomework); $mform->addElement('date_selector', 'homeworkstart', $strhomeworkstart); $mform->addElement('date_time_selector', 'snapshotdate', $strsnapshotdate); $mform->addElement('select', 'previoussession', $strprevioussession, $sessionoptions); $mform->addElement('advcheckbox', 'inductionreview', $strinductionreview); $mform->addHelpButton('homeworkstart', 'homeworkstart', 'local_progressreview'); $mform->setTypes(array('name' => PARAM_TEXT, 'deadline_subject' => PARAM_INT, 'deadline_tutor' => PARAM_INT, 'lockafterdeadline' => PARAM_BOOL, 'scale_behaviour' => PARAM_TEXT, 'scale_effort' => PARAM_TEXT, 'scale_homework' => PARAM_TEXT, 'homeworkstart' => PARAM_INT, 'snapshotdate' => PARAM_INT, 'previoussession' => PARAM_INT, 'inductionreview' => PARAM_BOOL)); $pluginnames = $this->get_plugin_names(); $mform->addElement('header', 'plugins', get_string('selectplugins', 'local_progressreview')); foreach ($pluginnames as $pluginname) { $mform->addElement('advcheckbox', 'plugins[' . $pluginname . ']', get_string('pluginname', 'progressreview_' . $pluginname)); } $mform->setDefault('plugins[tutor]', 1); $mform->setDefault('plugins[subject]', 1); $mform->disabledIf('plugins[tutor]', 'plugins[subject]'); $mform->disabledIf('plugins[subject]', 'plugins[tutor]'); $this->add_action_buttons(); }
/** * Returns a set of tabs for the index page * * Returns a set of tabs allowing navigation between management, * printing and plugin config pages from the index page, depending on * the user's capabilities. The current tab is highlighted. * * @param int $active * @return string HTML of the tabs */ public function tabs($active) { $tabs = array(); $tabs[] = new tabobject(1, new moodle_url('/local/progressreview/index.php'), get_string('manage', 'local_progressreview')); $tabs[] = new tabobject(2, new moodle_url('/local/progressreview/print.php'), get_string('print', 'local_progressreview')); $admin = has_capability('moodle/local_progressreview:manage', get_context_instance(CONTEXT_SYSTEM)); if ($admin) { $plugins = progressreview_controller::get_plugins_with_config(); if ($plugins) { $tabs[] = new tabobject(3, new moodle_url('/local/progressreview/plugins/index.php'), get_string('plugins', 'local_progressreview')); } } print_tabs(array($tabs), $active); }
if ($generate) { confirm_sesskey(); progressreview_controller::register_print_error_handler(); if ($disablememlimit) { ini_set('memory_limit', -1); ini_set('max_execution_time', 0); } $sessions = json_decode(optional_param('sessions', '[]', PARAM_RAW)); $students = json_decode(optional_param('students', '[]', PARAM_RAW)); $courses = json_decode(optional_param('courses', '[]', PARAM_RAW)); $teachers = json_decode(optional_param('teachers', '[]', PARAM_RAW)); $criteria = array(); $criteria = progressreview_controller::build_print_criteria($criteria, 'sessionid', $sessions); $criteria = progressreview_controller::build_print_criteria($criteria, 'studentid', $students); $criteria = progressreview_controller::build_print_criteria($criteria, 'courseid', $courses); $criteria = progressreview_controller::build_print_criteria($criteria, 'teacherid', $teachers); $subjectreviews = array(); $tutorreviews = array(); foreach ($criteria as $args) { $args = (array) $args; $args['type'] = PROGRESSREVIEW_SUBJECT; $newsubjectreviews = call_user_func_array('progressreview_controller::get_reviews', $args); if ($newsubjectreviews) { $subjectreviews = array_merge($subjectreviews, $newsubjectreviews); } $args['type'] = PROGRESSREVIEW_TUTOR; $newtutorreviews = call_user_func_array('progressreview_controller::get_reviews', $args); if ($newtutorreviews) { $tutorreviews = array_merge($tutorreviews, $newtutorreviews); } }
$student_b = $b->get_student(); $lastname = strcmp($student_a->lastname, $student_b->lastname); if ($lastname) { return $lastname; } else { return strcmp($student_a->firstname, $student_b->firstname); } }); $content .= $output->tutorgroup_list($tutorgroup); } } add_to_log($course->id, 'local_progressreview', 'view', $PAGE->url->out(), $studentid); if (isset($form)) { if (!empty($session->deadline_tutor)) { $deadline = userdate($session->deadline_tutor); $strdeadline = get_string('completetutorreviewsby', 'local_progressreview', $deadline); $content .= $OUTPUT->container($strdeadline, 'reviewnotes'); } if (!empty($session->previoussession)) { $previoussession = progressreview_controller::validate_session($session->previoussession); $strprevious = get_string('previousfigures', 'local_progressreview', $previoussession->name); $content .= $OUTPUT->container($strprevious, 'reviewnotes'); } ob_start(); $form->display(); $content .= str_replace('&', '&', ob_get_contents()); ob_end_clean(); } echo $OUTPUT->header(); echo $content; echo $OUTPUT->footer();
$excludes = $distributed_tutor_selector->find_users(); foreach ($excludes as $exclude) { $potential_tutor_selector->exclude(array_keys($exclude)); } $tutors = array(); if ($generate_tutor) { $tutors = $potential_tutor_selector->get_selected_users(); } else { if ($regenerate_tutor) { $tutors = $distributed_tutor_selector->get_selected_users(); } } if ($tutors) { add_to_log(SITEID, 'local_progressreview', 'update reviews', $PAGE->url->out(), count($tutors)); foreach ($tutors as $tutor) { progressreview_controller::generate_reviews_for_course($tutor->id, $session->id, PROGRESSREVIEW_TUTOR); } redirect($PAGE->url->out(), get_string('reviewsgenerated', 'local_progressreview')); exit; } add_to_log(SITEID, 'local_progressreview', 'view', $PAGE->url->out()); $tutor_selector = $output->course_selector_form($potential_tutor_selector, $distributed_tutor_selector, $session->id, PROGRESSREVIEW_TUTOR); $content .= $OUTPUT->heading(get_string('tutorreviews', 'local_progressreview'), 2); $content .= $tutor_selector; } echo $OUTPUT->header(); if (isset($form)) { $form->display(); } else { echo $content; }
$sessionid = required_param('sessionid', PARAM_INT); $courseid = required_param('courseid', PARAM_INT); $coursecontext = get_context_instance(CONTEXT_COURSE, $courseid); if (!($session = $DB->get_record('progressreview_session', array('id' => $sessionid)))) { print_error('invalidsession', 'local_progressreview'); } if (!($course = $DB->get_record('course', array('id' => $courseid)))) { print_error('invalidcourse', 'local_progressreview'); } require_login($course); require_capability('moodle/local_progressreview:write', $coursecontext); $urlparams = array('sessionid' => $sessionid, 'courseid' => $courseid); $PAGE->set_url('/local/progressreview/changescale.php', $urlparams); $PAGE->navbar->add(get_string('pluginname', 'local_progressreview')); $PAGE->navbar->add($session->name); $reviews = progressreview_controller::get_reviews($sessionid, null, $courseid); $scaleid = current($reviews)->get_plugin('subject')->get_scaleid(); $formdata = array('sessionid' => $sessionid, 'courseid' => $courseid, 'scaleid' => $scaleid); $form = new progressreview_changescale_form('', $formdata); $content = ''; if ($data = $form->get_data()) { $newscaleid = $data->scaleid; foreach ($reviews as $review) { $review->get_plugin('subject')->update(array('scaleid' => $newscaleid)); } $redirectparams = array('sessionid' => $sessionid, 'courseid' => $courseid); $redirecturl = new moodle_url('/local/progressreview/subjectreview.php', $redirectparams); redirect($redirecturl, get_string('changessaved'), 2); } echo $OUTPUT->header(); echo $content;
protected function definition() { global $OUTPUT, $PAGE; $mform = $this->_form; $progressreview = $this->_customdata['progressreview']; $student = $progressreview->get_student(); $session = $progressreview->get_session(); $mform->addElement('hidden', 'reviewid', $progressreview->id, array('id' => 'id_reviewid')); $mform->addElement('hidden', 'editid', $student->id, array('id' => 'id_editid')); $mform->addElement('hidden', 'courseid', $progressreview->get_course()->originalid, array('id' => 'id_courseid')); $mform->addElement('hidden', 'sessionid', $session->id, array('id' => 'id_sessionid')); $mform->addElement('hidden', 'teacherid', $progressreview->get_teacher()->originalid, array('id' => 'id_teacherid')); $mform->addElement('hidden', 'reviewtype', PROGRESSREVIEW_TUTOR, array('id' => 'id_reviewtype')); $mform->addElement('header', 'core', fullname($student)); $mform->addElement('html', $OUTPUT->user_picture($student)); $output = $PAGE->get_renderer('local_progressreview'); $reviews = progressreview_controller::get_reviews($session->id, $student->id); $table = $output->subject_review_table($reviews, false, PROGRESSREVIEW_SUBJECT); $mform->addElement('html', $table); $progressreview->get_plugin('tutor')->add_form_fields($mform); $strsave = get_string('saveand', 'local_progressreview'); $jsmodule = array('name' => 'local_progressreview', 'fullpath' => '/local/progressreview/module.js', 'requires' => array('base', 'node', 'io', 'json', 'transition'), 'strings' => array(array('autosaveactive', 'local_progressreview'), array('autosavefailed', 'local_progressreview'), array('autosaving', 'local_progressreview'))); $PAGE->requires->js_init_call('M.local_progressreview.init_autosave', array($strsave), false, $jsmodule); $plugins = $progressreview->get_plugins(); foreach ($plugins as $plugin) { $pluginname = $plugin->get_name(); $legend = get_string('pluginname', 'progressreview_' . $pluginname); if ($pluginname != 'tutor') { $mform->addElement('header', $pluginname . '_header', $legend); $plugin->add_form_fields($mform); } $plugin->require_js(); $modulename = 'M.progressreview_' . $pluginname; $PAGE->requires->js_init_call($modulename . '.init_autosave'); } $tutorgroup = progressreview_controller::get_reviews($progressreview->get_session()->id, null, $progressreview->get_course()->originalid, null, PROGRESSREVIEW_TUTOR); usort($tutorgroup, function ($a, $b) { $student_a = $a->get_student(); $student_b = $b->get_student(); $lastname = strcmp($student_a->lastname, $student_b->lastname); if ($lastname) { return $lastname; } else { return strcmp($student_a->firstname, $student_b->firstname); } }); $prev = null; $current = null; $next = null; $found = false; reset($tutorgroup); foreach ($tutorgroup as $review) { if ($found) { $next = $review; break; } if ($review->id == $progressreview->id) { $found = true; $prev = $current; $current = $review; continue; } if (!$found) { $current = $review; } } $mform->closeHeaderBefore('save'); $mform->addElement('button', 'save', get_string('saveand', 'local_progressreview')); $buttongroup = array(); if ($prev) { $prevstudent = $prev->get_student(); $mform->addElement('hidden', 'previd', $prevstudent->id); $buttongroup[] = $mform->createElement('submit', 'prev', $OUTPUT->larrow() . ' ' . fullname($prevstudent)); } else { $strstartofgroup = get_string('startofgroup', 'local_progressreview'); $buttongroup[] = $mform->createElement('submit', 'prev', $OUTPUT->larrow() . ' ' . $strstartofgroup, array('disabled' => 'disabled')); } $buttongroup[] = $mform->createElement('submit', 'save', get_string('returntolist', 'local_progressreview')); if ($next) { $nextstudent = $next->get_student(); $mform->addElement('hidden', 'nextid', $nextstudent->id); $buttongroup[] = $mform->createElement('submit', 'next', fullname($nextstudent) . ' ' . $OUTPUT->rarrow()); } else { $strendofgroup = get_string('endofgroup', 'local_progressreview'); $buttongroup[] = $mform->createElement('submit', 'next', $strendofgroup . ' ' . $OUTPUT->rarrow(), array('disabled' => 'disabled')); } $mform->addGroup($buttongroup, 'buttons'); $mform->addElement('html', $output->progress_indicator()); $mform->addElement('html', $output->error_indicator()); }
$coursecontext = get_context_instance(CONTEXT_COURSE, $courseid); require_capability('moodle/local_progressreview:write', $coursecontext); $progressreview = current(progressreview_controller::get_reviews($sessionid, $studentid, $courseid, $teacherid, $type)); $plugin = $progressreview->get_plugin($plugin); $plugin->validate(array($field => $value)); $plugin->autosave($field, $value); } catch (moodle_exception $e) { add_to_log($courseid, 'local_progressreview', 'update failed', '', get_class($e)); header('HTTP/1.1 400 Bad Request'); progressreview_controller::xhr_response($e); } catch (progressreview_invalidfield_exception $e) { add_to_log($courseid, 'local_progressreview', 'update failed', '', get_class($e)); header('HTTP/1.1 400 Bad Request'); progressreview_controller::xhr_response($e); } catch (dml_write_exception $e) { add_to_log($courseid, 'local_progressreview', 'update failed', '', get_class($e)); header('HTTP/1.1 400 Bad Request'); progressreview_controller::xhr_response($e); } catch (require_login_exception $e) { add_to_log($courseid, 'local_progressreview', 'update failed', '', get_class($e)); header('HTTP/1.1 403 Forbidden'); progressreview_controller::xhr_response($e); } catch (required_capability_exception $e) { add_to_log($courseid, 'local_progressreview', 'update failed', '', get_class($e)); header('HTTP/1.1 403 Forbidden'); progressreview_controller::xhr_response($e); } catch (progressreview_invalidvalue_exception $e) { add_to_log($courseid, 'local_progressreview', 'update failed', '', get_class($e)); header('HTTP/1.1 400 Bad Request'); progressreview_controller::xhr_response($e); }
/** * Returns (and sets if necessary) the previous review based on the previous session ID * * @return object the progressreview object representing the previous review */ public function get_previous() { if (is_null($this->previous_review)) { $this->previous_review = current(progressreview_controller::get_reviews($this->session->previoussession, $this->student->id, $this->course->originalid, $this->teacher->originalid, $this->type)); } return $this->previous_review; }
$PAGE->set_heading("{$SITE->shortname}: {$struser}"); $PAGE->navbar->add($struser); echo $OUTPUT->header(); echo $OUTPUT->heading(get_string('usernotavailable', 'error')); echo $OUTPUT->footer(); exit; } $PAGE->set_pagelayout('mydashboard'); $PAGE->set_pagetype('user-profile'); $strreviews = get_string('pluginname', 'local_progressreview'); $PAGE->set_heading(fullname($user) . ": {$strreviews}"); $PAGE->set_title(fullname($user) . ": {$strreviews}"); $PAGE->navigation->extend_for_user($user); $output = $PAGE->get_renderer('local_progressreview'); $subjectreviews = progressreview_controller::get_reviews($session->id, $user->id); $tutorreviews = progressreview_controller::get_reviews($session->id, $user->id, null, null, PROGRESSREVIEW_TUTOR); if ($tutorreview = @current($tutorreviews)) { $tutorplugins = $tutorreview->get_plugins(); $reviewdata = array(); $pluginrenderers = array(); foreach ($tutorplugins as $plugin) { $reviewdata[] = $plugin->get_review(); if (!($pluginrenderers[] = $PAGE->get_renderer('progressreview_' . $plugin->get_name()))) { throw new coding_exception('The progressreview_' . $plugin->get_name() . ' has no renderer. It must have a renderer with at least the review() method defined'); } } } add_to_log(SITEID, 'local_progressreview', 'view', $PAGE->url->out()); $content = $OUTPUT->heading(fullname($user) . ' - ' . get_string('pluginname', 'local_progressreview')); $content .= $output->user_session_links($user, $sessions, $sessionid);