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);
}
Example #10
0
 /**
  * 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);