/** * Determines whether the current user is allowed to make course / class * requests: they must have the necessary capability at the site level, * in some course, or some curriculum involved in a course-curriculum association * * @uses $CFG * @uses $DB * @uses $USER * @return boolean True if allowed, otherwise false */ function block_courserequest_can_do_request() { global $CFG, $DB, $USER; require_once $CFG->dirroot . '/local/elisprogram/lib/data/course.class.php'; $context = context_system::instance(); //handle system context in case no courses are set up if (has_capability('block/courserequest:request', $context)) { return true; } if ($course_contexts = get_contexts_by_capability_for_user('course', 'block/courserequest:request', $USER->id)) { $course_filter = $course_contexts->get_filter('id', 'course'); $filter_sql = $course_filter->get_sql(false, 'course'); // *TBV* $params = array(); $where = ''; if (isset($filter_sql['where'])) { $where = 'WHERE ' . $filter_sql['where']; $params = $filter_sql['where_parameters']; } //this will handle both the course and curriculum cases $course_sql = 'SELECT * FROM {' . course::TABLE . "} course {$where}"; if ($DB->record_exists_sql($course_sql, $params)) { return true; } } //access denied return false; }
/** * Adds controls specific to this filter in the form. * @param object $mform a MoodleForm object to setup */ function setupForm(&$mform) { global $USER; $choices_array = array(); //figure out which capability to check if ($this->execution_mode == php_report::EXECUTION_MODE_SCHEDULED) { $capability = 'block/php_report:schedule'; } else { $capability = 'block/php_report:view'; } //obtain all course contexts where this user can view reports $contexts = get_contexts_by_capability_for_user('user', $capability, $USER->id); $context_array = array('contexts' => $contexts); if ($records = cluster_get_listing('name', 'ASC', 0, 0, '', '', $context_array)) { foreach ($records as $record) { if ($record->parent == 0) { $choices_array[$record->id] = $record->name; $child_array = $this->find_child_clusters($records, $record->id); $choices_array = $this->merge_array_keep_keys($choices_array, $child_array); } } } //explicitly set the list of available options $this->_options = $choices_array; parent::setupForm($mform); }
/** * Override this method to return the main pulldown option * @return array List of options keyed on id */ function get_main_options() { global $USER; $courses_array = array('0' => get_string('selectacourse', 'block_curr_admin')); // Fetch array of allowed classes $contexts = get_contexts_by_capability_for_user('class', 'block/php_report:view', $USER->id); if ($records = cmclass_get_listing('crsname', 'ASC', 0, 0, '', '', 0, false, $contexts)) { $allowed_courses = array(); foreach ($records as $record) { if (!in_array($record->courseid, $allowed_courses)) { $allowed_courses[] = $record->courseid; } } sort($allowed_courses); // Fetch array of all courses $course_list = course_get_listing('name', 'ASC', 0, 0, '', ''); foreach ($course_list as $course_obj) { // Only show courses that are associated with an allowed class if (in_array($course_obj->id, $allowed_courses)) { $courses_array[$course_obj->id] = strlen($course_obj->name) > 80 ? substr($course_obj->name, 0, 80) . '...' : $course_obj->name; } } } return $courses_array; }
public static function get_contexts($capability) { if (!isset(coursepage::$contexts[$capability])) { global $USER; coursepage::$contexts[$capability] = get_contexts_by_capability_for_user('course', $capability, $USER->id); } return coursepage::$contexts[$capability]; }
static function get_contexts($capability) { if (!isset(bulkuserpage::$contexts[$capability])) { global $USER; bulkuserpage::$contexts[$capability] = get_contexts_by_capability_for_user('user', $capability, $USER->id); } return bulkuserpage::$contexts[$capability]; }
static function get_contexts($capability) { if (!isset(curriculumpage::$contexts[$capability])) { global $USER; curriculumpage::$contexts[$capability] = get_contexts_by_capability_for_user('curriculum', $capability, $USER->id); } return curriculumpage::$contexts[$capability]; }
/** * Adds fields to this form which are relevant to the course, either * new or old, that a class is being requested for, including any associated * validation rules */ protected function add_course_info() { global $PAGE, $USER; $PAGE->requires->js('/blocks/courserequest/forms.js'); $mform =& $this->_form; $mform->addElement('header', 'courseheader', get_string('createcourseheader', 'block_courserequest')); $courses = array(0 => get_string('newcourse', 'block_courserequest')); /* * Get all courses the current user has access to: * Access is allowed if you have the correct capability at the system, curriculum, or course level */ $course_contexts = get_contexts_by_capability_for_user('course', 'block/courserequest:request', $USER->id); // this will actually handle all cases because it handles curricula explicitly $eliscourses = course_get_listing('crs.name', 'ASC', 0, 0, '', '', $course_contexts); $eliscourses = $eliscourses ? $eliscourses : array(); foreach ($eliscourses as $course) { $courses[$course->id] = '(' . $course->idnumber . ') ' . $course->name; } $mform->addElement('select', 'courseid', get_string('course', 'block_courserequest'), $courses, array('onchange' => 'handle_course_change()')); // If this user has approval permission then let's give them the class id field so we can skip the approval page $syscontext = context_system::instance(); if (has_capability('block/courserequest:approve', $syscontext)) { // indicate that course idnumber is required $label = '<span class="required">' . get_string('courseidnumber', 'block_courserequest') . '*</span>'; $mform->addElement('text', 'crsidnumber', $label); $mform->addRule('crsidnumber', null, 'maxlength', 100); $mform->setType('crsidnumber', PARAM_TEXT); $mform->disabledIf('crsidnumber', 'courseid', 'gt', '0'); } // indicate that course name is required $label = '<span class="required">' . get_string('title', 'block_courserequest') . '*</span>'; $mform->addElement('text', 'title', $label); $mform->setType('title', PARAM_RAW); // only needed for new courses $mform->disabledIf('title', 'courseid', 'gt', '0'); $usecoursefields = get_config('block_courserequest', 'use_course_fields'); if (!empty($usecoursefields)) { // add course-level custom fields to the interface $this->add_custom_fields('course', true); } }
/** * Constructor * @param string $name the name of the filter instance * @param string $label the label of the filter instance * @param boolean $advanced advanced form element flag * @param string $field user table filed name * @param array $options select options */ function generalized_filter_clusterselect($uniqueid, $alias, $name, $label, $advanced, $field, $options = array()) { global $USER; //figure out which capability to check if ($this->execution_mode == php_report::EXECUTION_MODE_SCHEDULED) { $capability = 'local/elisreports:schedule'; } else { $capability = 'local/elisreports:view'; } //obtain all cluster contexts where this user can view reports $contexts = get_contexts_by_capability_for_user('cluster', $capability, $USER->id); //set up cluster listing $choices_array = array(); if ($records = $this->cluster_dropdown_get_listing($contexts)) { foreach ($records as $record) { if (empty($choices_array[$record->id])) { //if (count($choices_array) > 1) { // $choices_array[-$record->id] = $cluster_group_separator; //} $ancestors = $record->depth - 1; // shorten really long cluster names $clstname = strlen($record->name) > 100 ? substr($record->name, 0, 100) . '...' : $record->name; $choices_array[$record->id] = $ancestors ? str_repeat('- ', $ancestors) . $clstname : $clstname; //merge in child clusters $child_array = $this->find_child_clusters($records, $record->id, $ancestors); $choices_array = $this->merge_array_keep_keys($choices_array, $child_array); } } } //explicitly set the list of available options $this->_options = $choices_array; //expected by the parent class $options['choices'] = $choices_array; $options['numeric'] = true; parent::generalized_filter_equalityselect($uniqueid, $alias, $name, $label, $advanced, $field, $options); }
function definition() { global $USER, $CFG, $COURSE, $CURMAN; parent::definition(); if (!empty($this->_customdata['obj'])) { $obj = $this->_customdata['obj']; if (empty($obj->startdate) || $obj->startdate == 0) { $this->set_data(array('disablestart' => '1')); } if (empty($obj->enddate) || $obj->enddate == 0) { $this->set_data(array('disableend' => '1')); } if (isset($obj->starttimeminute) && isset($obj->starttimehour)) { $this->set_data(array('starttime' => array('minute' => $obj->starttimeminute, 'hour' => $obj->starttimehour))); } if (isset($obj->endtimeminute) && isset($obj->endtimehour)) { $this->set_data(array('endtime' => array('minute' => $obj->endtimeminute, 'hour' => $obj->endtimehour))); } } $mform =& $this->_form; $mform->addElement('hidden', 'id'); // If there is no custom data for the course, create some if (empty($this->_customdata['obj']->course->name) || empty($this->_customdata['obj']->id)) { $courses = array(); if (!empty($USER->id)) { $contexts = get_contexts_by_capability_for_user('course', 'block/curr_admin:class:create', $USER->id); // get listing of available ELIS courses $courses = course_get_listing('name', 'ASC', 0, 0, '', '', $contexts); } // Add course select $attributes = array('onchange' => 'update_trk_multiselect(); '); $selections = array(); if (!empty($courses)) { foreach ($courses as $course) { $selections[$course->id] = '(' . $course->idnumber . ')' . $course->name; } } $mform->addElement('select', 'courseid', get_string('course', 'block_curr_admin') . ':', $selections, $attributes); $mform->setHelpButton('courseid', array('cmclassform/course', get_string('course', 'block_curr_admin'), 'block_curr_admin')); $firstcourse = reset($courses); $this->firstcourse = $firstcourse; if (false !== $firstcourse && empty($this->_customdata['obj']->id)) { $this->add_track_multi_select($firstcourse->id); } elseif (!empty($courses)) { $this->add_track_multi_select($this->_customdata['obj']->courseid); } } else { $extra_params = array(); $mform->addElement('static', 'courseid', get_string('course', 'block_curr_admin') . ':'); // Get current action and set param accordingly $current_action = optional_param('action', 'view', PARAM_ALPHA); $extra_params['action'] = $current_action; $extra_params['s'] = 'crs'; // Want to set the url for the course $extra_params['id'] = $this->_customdata['obj']->courseid; // Course id $course_url = $this->get_moodle_url($extra_params); $course_name = '(' . $this->_customdata['obj']->course->idnumber . ')' . '<a href="' . $course_url . '" >' . $this->_customdata['obj']->course->name . '</a>'; $this->set_data(array('courseid' => $course_name)); $mform->setHelpButton('courseid', array('cmclassform/course', get_string('course', 'block_curr_admin'), 'block_curr_admin')); $this->add_track_multi_select($this->_customdata['obj']->courseid); } if (!empty($this->_customdata['obj']->courseid)) { $mform->freeze('courseid'); } else { $mform->addRule('courseid', get_string('required'), 'required', NULL, 'client'); } // Done adding course select //get_string('general'); $mform->addElement('text', 'idnumber', get_string('class_idnumber', 'block_curr_admin') . ':'); $mform->addRule('idnumber', get_string('required'), 'required', NULL, 'client'); $mform->setType('idnumber', PARAM_TEXT); $mform->setHelpButton('idnumber', array('cmclassform/idnumber', get_string('class_idnumber', 'block_curr_admin'), 'block_curr_admin')); $mform->addElement('date_selector', 'startdate', get_string('class_startdate', 'block_curr_admin') . ':', array('optional' => true, 'disabled' => 'disabled')); $mform->setHelpButton('startdate', array('cmclassform/startdate', get_string('class_startdate', 'block_curr_admin'), 'block_curr_admin')); $mform->addElement('date_selector', 'enddate', get_string('class_enddate', 'block_curr_admin') . ':', array('optional' => true)); // They may very likely be a much better way of checking for this... if (empty($obj->starttimehour) and empty($obj->starttimeminute)) { $mform->addElement('time_selector', 'starttime', get_string('class_starttime', 'block_curr_admin') . ':', array('optional' => true, 'checked' => 'checked', 'display_12h' => $CURMAN->config->time_format_12h)); } else { $mform->addElement('time_selector', 'starttime', get_string('class_starttime', 'block_curr_admin') . ':', array('optional' => true, 'checked' => 'unchecked', 'display_12h' => $CURMAN->config->time_format_12h)); } $mform->setHelpButton('starttime', array('cmclassform/starttime', get_string('class_starttime', 'block_curr_admin'), 'block_curr_admin')); // Do the same thing for the endtime if (empty($obj->endtimehour) and empty($obj->endtimeminute)) { $mform->addElement('time_selector', 'endtime', get_string('class_endtime', 'block_curr_admin') . ':', array('optional' => true, 'checked' => 'checked', 'display_12h' => $CURMAN->config->time_format_12h)); } else { $mform->addElement('time_selector', 'endtime', get_string('class_endtime', 'block_curr_admin') . ':', array('optional' => true, 'checked' => 'unchecked', 'display_12h' => $CURMAN->config->time_format_12h)); } $mform->addElement('text', 'maxstudents', get_string('class_maxstudents', 'block_curr_admin') . ':'); $mform->setType('maxstudents', PARAM_INT); $mform->setHelpButton('maxstudents', array('cmclassform/maxstudents', get_string('class_maxstudents', 'block_curr_admin'), 'block_curr_admin')); // Environment selector $envs = environment_get_listing(); $envs = $envs ? $envs : array(); $o_envs = array(get_string('none', 'block_curr_admin')); foreach ($envs as $env) { $o_envs[$env->id] = $env->name; } $mform->addElement('select', 'environmentid', get_string('environment', 'block_curr_admin') . ':', $o_envs); $mform->setHelpButton('environmentid', array('cmclassform/environment', get_string('environment', 'block_curr_admin'), 'block_curr_admin')); // Course selector if (empty($this->_customdata['obj']->moodlecourseid)) { $this->add_moodle_course_select(); } else { global $CURMAN; $coursename = $CURMAN->db->get_field('course', 'fullname', 'id', $this->_customdata['obj']->moodlecourseid); $mform->addElement('static', 'class_attached_course', get_string('class_attached_course', 'block_curr_admin') . ':', "<a href=\"{$CFG->wwwroot}/course/view.php?id={$this->_customdata['obj']->moodlecourseid}\">{$coursename}</a>"); $mform->setHelpButton('class_attached_course', array('cmclassform/moodlecourseid', get_string('moodlecourse', 'block_curr_admin'), 'block_curr_admin')); $mform->addElement('hidden', 'moodlecourseid'); } $mform->addElement('checkbox', 'enrol_from_waitlist', get_string('waitlistenrol', 'block_curr_admin') . ':'); $mform->setHelpButton('enrol_from_waitlist', array('cmclassform/waitlistenrol', get_string('waitlistenrol', 'block_curr_admin'), 'block_curr_admin')); // custom fields $fields = field::get_for_context_level('class'); $fields = $fields ? $fields : array(); $lastcat = null; $context = isset($this->_customdata['obj']) && isset($this->_customdata['obj']->id) ? get_context_instance(context_level_base::get_custom_context_level('class', 'block_curr_admin'), $this->_customdata['obj']->id) : get_context_instance(CONTEXT_SYSTEM); require_once CURMAN_DIRLOCATION . '/plugins/manual/custom_fields.php'; foreach ($fields as $rec) { $field = new field($rec); if (!isset($field->owners['manual'])) { continue; } if ($lastcat != $rec->categoryid) { $lastcat = $rec->categoryid; $mform->addElement('header', "category_{$lastcat}", htmlspecialchars($rec->categoryname)); } manual_field_add_form_element($this, $context, $field); } $this->add_action_buttons(); }
require_once $CFG->dirroot . '/local/elisprogram/lib/setup.php'; require_once $CFG->dirroot . '/local/elisprogram/lib/contexts.php'; require_once $CFG->dirroot . '/local/elisprogram/lib/data/pmclass.class.php'; if (!isloggedin() || isguestuser()) { mtrace("ERROR: must be logged in!"); exit; } $ids = array(); if (array_key_exists('id', $_REQUEST)) { $dirtyids = $_REQUEST['id']; if (is_array($dirtyids)) { foreach ($dirtyids as $dirty) { $ids[] = clean_param($dirty, PARAM_INT); } } else { $ids[] = clean_param($dirtyids, PARAM_INT); } } else { $ids[] = 0; } // Must have blank value as the default here (instead of zero) or it breaks the gas guage report $choices_array = array(array('', get_string('anyvalue', 'filters'))); if (!empty($ids)) { $contexts = get_contexts_by_capability_for_user('class', 'local/elisreports:view', $USER->id); $records = pmclass_get_listing('idnumber', 'ASC', 0, 0, '', '', $ids, false, $contexts); foreach ($records as $record) { $choices_array[] = array($record->id, $record->idnumber); } unset($records); } echo json_encode($choices_array);
/** * Determines whether the current user can view this report, based on being logged in * and php_report:view capability * * @return boolean True if permitted, otherwise false */ function can_view_report() { //make sure context libraries are loaded $this->require_dependencies(); //make sure the current user can view reports in at least one curriculum context $contexts = get_contexts_by_capability_for_user('curriculum', $this->access_capability, $this->userid); return !$contexts->is_empty(); }
function can_do_add() { global $USER; if (!empty($USER->id)) { $contexts = get_contexts_by_capability_for_user('course', 'local/elisprogram:class_create', $USER->id); return !$contexts->is_empty(); } return false; }
/** * Tests contexts in userset data object. * * Covers: * local/elisprogram/lib/data/userset.class.php:334 * local/elisprogram/lib/data/userset.class.php:453 * local/elisprogram/lib/data/userset.class.php:561 * local/elisprogram/lib/data/userset.class.php:595 * local/elisprogram/lib/data/userset.class.php:616 * local/elisprogram/lib/data/userset.class.php:721 * local/elisprogram/lib/data/userset.class.php:755 * local/elisprogram/lib/data/userset.class.php:847 * local/elisprogram/lib/data/userset.class.php:901 */ public function test_usersetcontexts() { global $USER, $DB; require_once elispm::file('plugins/usetclassify/usersetclassification.class.php'); require_once elispm::file('plugins/usetclassify/lib.php'); $this->setup_users(); $this->setup_usersets(); // TEST local/elisprogram/lib/data/userset.class.php:334. $res = userset::get_allowed_clusters(1); // TEST local/elisprogram/lib/data/userset.class.php:453. $ussfilter = new usersubset_filter('id', new field_filter('id', 1)); $res = $ussfilter->get_sql(); // TEST // local/elisprogram/lib/data/userset.class.php:561 // local/elisprogram/lib/data/userset.class.php:595 // local/elisprogram/lib/data/userset.class.php:616 // local/elisprogram/lib/data/userset.class.php:721 // local/elisprogram/lib/data/userset.class.php:755. $field = new field(array('shortname' => USERSET_CLASSIFICATION_FIELD)); $field->load(); $userset = $this->create_userset($field); // Get a role to assign. $rolesctx = $DB->get_records('role_context_levels', array('contextlevel' => CONTEXT_ELIS_USERSET)); foreach ($rolesctx as $i => $rolectx) { $roleid = $rolectx->roleid; } // Add userset_view capability to our role. $usersetcontext = \local_elisprogram\context\userset::instance($userset->id); $rc = new stdClass(); $rc->contextid = $usersetcontext->id; $rc->roleid = $roleid; $rc->capability = 'local/elisprogram:userset_view'; $rc->permission = 1; $rc->timemodified = time(); $rc->modifierid = 0; $DB->insert_record('role_capabilities', $rc); $rc = new stdClass(); $rc->contextid = $usersetcontext->id; $rc->roleid = $roleid; $rc->capability = 'local/elisprogram:userset_enrol_userset_user'; $rc->permission = 1; $rc->timemodified = time(); $rc->modifierid = 0; $DB->insert_record('role_capabilities', $rc); // Assign role. $user = new user(103); $muser = $user->get_moodleuser(); $raid = role_assign($roleid, $muser->id, $usersetcontext->id); $this->setUser(100); // Assign other user to userset. $clst = new clusterassignment(); $clst->clusterid = $userset->id; $clst->userid = 104; $clst->plugin = 'manual'; $clst->save(); // Get cluster listing. $capability = 'local/elisprogram:userset_view'; $contexts = get_contexts_by_capability_for_user('cluster', $capability, 100); $extrafilters = array('contexts' => $contexts, 'classification' => 'test field data'); $res = cluster_get_listing('name', 'ASC', 0, 0, '', '', $extrafilters, 104); $res = cluster_count_records('', '', $extrafilters); // TEST local/elisprogram/lib/data/userset.class.php:847. cluster_get_non_child_clusters(1); // TEST local/elisprogram/lib/data/userset.class.php:901. cluster_get_possible_sub_clusters(1); $this->setUser(null); }
function transform_grouping_header_label($grouping_current, $grouping, $datum, $export_format) { global $DB; $params = array(); $labels = array(); //obtain an sql clause that filters out users you shouldn't see $contexts = get_contexts_by_capability_for_user('user', $this->access_capability, $this->userid); //$permissions_filter = $contexts->sql_filter_for_context_level('u.id', 'user'); $filter_obj = $contexts->get_filter('id', 'user'); $filter_sql = $filter_obj->get_sql(false, 'u', SQL_PARAMS_NAMED); $permissions_filter1 = 'TRUE'; if (isset($filter_sql['where'])) { $permissions_filter1 = $filter_sql['where']; $params = array_merge($params, $filter_sql['where_parameters']); } $filter_sql = $filter_obj->get_sql(false, 'u', SQL_PARAMS_NAMED); $permissions_filter2 = 'TRUE'; if (isset($filter_sql['where'])) { $permissions_filter2 = $filter_sql['where']; $params = array_merge($params, $filter_sql['where_parameters']); } $filter_sql = $filter_obj->get_sql(false, 'u', SQL_PARAMS_NAMED); $permissions_filter3 = 'TRUE'; if (isset($filter_sql['where'])) { $permissions_filter3 = $filter_sql['where']; $params = array_merge($params, $filter_sql['where_parameters']); } $filter_sql = $filter_obj->get_sql(false, 'u', SQL_PARAMS_NAMED); $permissions_filter4 = 'TRUE'; if (isset($filter_sql['where'])) { $permissions_filter4 = $filter_sql['where']; $params = array_merge($params, $filter_sql['where_parameters']); } $filter_sql = $filter_obj->get_sql(false, 'u', SQL_PARAMS_NAMED); $permissions_filter5 = 'TRUE'; if (isset($filter_sql['where'])) { // TBD $permissions_filter5 = $filter_sql['where']; $params = array_merge($params, $filter_sql['where_parameters']); } $class_join = $this->get_class_join_sql(); //dynamically hande the class start / end date condition $startdate_condition = $this->get_class_startdate_condition(); $status_clause = ''; $status_sql = ''; $status_join = ''; $status_where = ''; // Check if we need to check status if ($value = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'filter-completionstatus', $this->filter)) { $status = $value[0]['value']; } if (isset($status)) { $status_clause = $this->get_class_status_sql($status); $status_sql = ' AND EXISTS (SELECT stu.userid FROM {' . student::TABLE . '} stu ' . $this->get_class_join_sql('WHERE', false) . " AND stu.userid = u.id\n {$status_clause})"; $status_join = ' JOIN {' . student::TABLE . '} stu ON stu.userid = u.id '; if (!empty($class_join)) { $status_join .= 'AND stu.classid = cls.id '; } $status_where = $this->get_class_status_sql($status); } else { $status = STUSTATUS_PASSED; } $ccc_sql = $this->get_course_class_condition_sql(); // Determine if we are filtering by one or more custom field values $filtering_cur_customfield = false; /** * This section handles updating all curriculum custom fields with an additional condition, * attaching the filter condition to the outer curriculum in the case where we are displaying * some curriculum field, such as name or a custom field datum */ //find a curriculum customfield filters foreach ($this->filter->_fields as $key => $value) { if (strpos($key, 'filter-ccc-curriculum-customfield-') === 0) { //determine if a session value is set for this field if ($test_customfield = php_report_filtering_get_active_filter_values($this->get_report_shortname(), $key, $this->filter)) { //signal that we are filtering by curriculum customfields $filtering_cur_customfield = true; break; } } } /** * Calculate the total number of distinct users in the report */ if ($this->_show_curricula) { //we are showing curricula, so we need to figure out which users have //appropriate credits //subquery to retreive the number of credits $subquery = '(SELECT SUM(stu.credits) FROM {' . student::TABLE . '} stu JOIN {' . pmclass::TABLE . "} cls ON stu.classid = cls.id {$ccc_sql}\n LEFT JOIN ({" . curriculumcourse::TABLE . '} curcrs JOIN {' . curriculumstudent::TABLE . '} curstu ON curcrs.curriculumid = curstu.curriculumid) ON cls.courseid = curcrs.courseid AND stu.userid = curstu.userid WHERE curstu.id IS NULL AND stu.completestatusid = ' . STUSTATUS_PASSED . "\n AND {$startdate_condition}\n AND stu.userid = u.id)"; //subquery to determine if one or more credit has been awarded $exists_query = 'SELECT * FROM {' . student::TABLE . '} stu JOIN {' . pmclass::TABLE . "} cls\n ON stu.classid = cls.id {$ccc_sql}\n LEFT JOIN ({" . curriculumcourse::TABLE . '} curcrs JOIN {' . curriculumstudent::TABLE . "} curstu\n ON curcrs.curriculumid = curstu.curriculumid)\n ON cls.courseid = curcrs.courseid\n AND stu.userid = curstu.userid\n WHERE curstu.id IS NULL\n AND {$startdate_condition}\n AND stu.userid = u.id"; //subquery to determine if the current user has no class enrolments $stu_not_exists_query = 'SELECT * FROM {' . student::TABLE . '} stu JOIN {' . pmclass::TABLE . "} cls\n ON stu.classid = cls.id {$ccc_sql}\n WHERE u.id = stu.userid\n AND {$startdate_condition} "; //subquery to determine if the current user has no curriculum assignments $curr_not_exists_query = 'SELECT * FROM {' . curriculumstudent::TABLE . '} curstu WHERE u.id = curstu.userid'; $sql = 'SELECT COUNT(DISTINCT u.id) FROM (SELECT u.id FROM {' . user::TABLE . '} u JOIN {' . curriculumstudent::TABLE . '} curstu ON u.id = curstu.userid JOIN {' . curriculum::TABLE . "} cur\n ON curstu.curriculumid = cur.id\n " . (empty($class_join) && empty($status_join) ? 'INNER JOIN {' . student::TABLE . '} stu' : '') . "\n {$class_join}\n " . (empty($class_join) ? $status_join : '') . "\n WHERE " . table_report::PARAMETER_TOKEN . "\n {$status_where}\n {$status_sql}\n AND {$permissions_filter1}\n\n UNION ALL\n\n SELECT u.id FROM {" . user::TABLE . '} u LEFT JOIN {' . curriculumstudent::TABLE . '} curstu ON curstu.id = 0 LEFT JOIN {' . curriculum::TABLE . "} cur\n ON cur.id = 0\n " . (empty($class_join) && empty($status_join) ? 'INNER JOIN {' . student::TABLE . '} stu' : '') . "\n {$class_join}\n " . (empty($class_join) ? $status_join : '') . "\n WHERE (EXISTS ({$exists_query}) OR\n (NOT EXISTS ({$stu_not_exists_query})\n AND NOT EXISTS ({$curr_not_exists_query})\n ))\n {$status_where}\n AND " . table_report::PARAMETER_TOKEN . "\n {$status_sql}\n AND {$permissions_filter2}\n ) u"; } else { //we are not showing curricula, so this is a simple count of users //based on filters $sql = 'SELECT COUNT(DISTINCT u.id) FROM {' . user::TABLE . "} u\n " . (empty($class_join) && empty($status_join) ? 'INNER JOIN {' . student::TABLE . '} stu' : '') . "\n {$class_join}\n " . (empty($class_join) ? $status_join : '') . "\n WHERE " . table_report::PARAMETER_TOKEN . "\n {$status_where}\n {$status_sql}\n AND {$permissions_filter1}"; } //add filtering to query list($sql, $params) = $this->get_complete_sql_query(false, $sql, $params); //obtain the actual number $num_users = $DB->get_field_sql($sql, $params); //create the header item if ($export_format == table_report::$EXPORT_FORMAT_HTML) { $text_label = get_string('grouping_learners', $this->languagefile); } else { $text_label = get_string('grouping_learners_csv', $this->languagefile); } $labels[] = $this->add_grouping_header($text_label, $num_users, $export_format); /** * Calculate the total number of distinct credits in the report */ if ($this->_show_curricula || $filtering_cur_customfield) { //we are showing curricula, so we need to account for curriculum and //non-curriculum cases //calculate the appropriate filter caluse list($filter_clause, $filter_params) = $this->get_filter_condition(''); if (empty($filter_clause)) { $filter_clause = 'TRUE'; } $params = array_merge($params, $filter_params); if (!$this->_show_curricula && $filtering_cur_customfield) { //special case: filtering by customfields when showing no curriculum info $filter_clause = str_replace('u.id = cca.userid', 'u.id = cca.userid AND curcrs.curriculumid = cca.curriculumid', $filter_clause); } $curriculum_sql = 'SELECT SUM(c.credits) FROM ( SELECT DISTINCT u.id AS userid, cls.id AS classid, stu.credits FROM {' . user::TABLE . '} u JOIN {' . student::TABLE . "} stu ON u.id = stu.userid {$status_clause}\n JOIN {" . pmclass::TABLE . '} cls ON stu.classid = cls.id JOIN {' . curriculumcourse::TABLE . '} curcrs ON cls.courseid = curcrs.courseid JOIN {' . curriculumstudent::TABLE . '} curstu ON u.id = curstu.userid JOIN {' . curriculum::TABLE . '} cur ON curstu.curriculumid = cur.id AND curcrs.curriculumid = curstu.curriculumid WHERE stu.completestatusid = ' . STUSTATUS_PASSED . "\n AND {$filter_clause}\n AND {$permissions_filter3}\n AND {$startdate_condition}) c"; //obtain the actual number $curriculum_num = $DB->get_field_sql($curriculum_sql, $params); if ($filtering_cur_customfield) { //if we are filtering by curriculum customfields, there will never be any non-curriculum results $noncurriculum_num = 0; } else { $noncurriculum_sql = 'SELECT SUM(stu.credits) FROM {' . user::TABLE . '} u JOIN {' . student::TABLE . "} stu ON u.id = stu.userid {$status_clause}\n JOIN {" . pmclass::TABLE . "} cls ON stu.classid = cls.id {$ccc_sql}\n LEFT JOIN (\n {" . curriculumcourse::TABLE . '} curcrs JOIN {' . curriculumstudent::TABLE . '} curstu ON curcrs.curriculumid = curstu.curriculumid ) ON cls.courseid = curcrs.courseid AND stu.userid = curstu.userid LEFT JOIN {' . curriculum::TABLE . '} cur ON cur.id = 0 WHERE curstu.id IS NULL AND stu.userid = u.id AND stu.completestatusid = ' . STUSTATUS_PASSED . ' AND ' . table_report::PARAMETER_TOKEN . "\n AND {$permissions_filter4}\n AND {$startdate_condition}"; //add filtering to the query list($noncurriculum_sql, $noncurriculum_params) = $this->get_complete_sql_query(false, $noncurriculum_sql, $params); //obtain the actual number $noncurriculum_num = $DB->get_field_sql($noncurriculum_sql, $noncurriculum_params); } //total credits is the sum of curriculum and non-curriculum credits $num_credits = (double) $curriculum_num + (double) $noncurriculum_num; } else { //we are not showing curricula, so this is simply an aggregation over class //enrolments, based on filters $sql = 'SELECT SUM(stu.credits) FROM {' . user::TABLE . '} u JOIN {' . student::TABLE . "} stu ON u.id = stu.userid {$status_clause}\n JOIN {" . pmclass::TABLE . "} cls ON stu.classid = cls.id {$ccc_sql}\n WHERE stu.completestatusid = " . STUSTATUS_PASSED . ' AND ' . table_report::PARAMETER_TOKEN . "\n AND {$permissions_filter5}\n AND {$startdate_condition}"; list($sql, $params) = $this->get_complete_sql_query(false, $sql, $params); $num_credits = $DB->get_field_sql($sql, $params); } //show number of credits to two decimals $num_credits = $this->format_credits($num_credits); //create the header item $text_label = get_string('grouping_credits', $this->languagefile); $labels[] = $this->add_grouping_header($text_label, $num_credits, $export_format); return $labels; }
/** * Specifies whether a course-level custom field is accessible to the * current user in at least once course context * * @param array $owners shortname-indexed collection of all field owners * * @return boolean true if accessible, otherwise false */ function block_php_report_field_accessible($owners) { global $USER, $CFG; require_once $CFG->dirroot . '/curriculum/lib/contexts.php'; if ($view_capability = block_php_report_field_capability($owners)) { //make sure the user has the view capability in some course $contexts = get_contexts_by_capability_for_user('course', $view_capability, $USER->id); return !$contexts->is_empty(); } else { //data error return false; } }
/** * Determines whether the current user can view this report, * based on being logged in and php_report:view capability * * @param none * @return boolean - true if permitted, otherwise false */ function can_view_report() { //Check for report view capability if (!isloggedin() || isguestuser()) { return false; } //make sure context libraries are loaded $this->require_dependencies(); //make sure the current user can view reports in at least one context $contexts = get_contexts_by_capability_for_user('user', $this->access_capability, $this->userid); return !$contexts->is_empty(); }
/** * Determines whether the current user can view this report, based on being logged in * and php_report:view capability * @return boolean True if permitted, otherwise false */ function can_view_report() { //Check for report view capability if (!isloggedin() || isguestuser()) { return false; } $this->require_dependencies(); // make sure the current user has the capability for SOME user $contexts = get_contexts_by_capability_for_user('user', $this->access_capability, $this->userid); if (!$contexts->is_empty()) { return true; } // Since user is logged-in AND HAVE VALID PM/CM userid, then they should // always be able to see their own courses/classes, but NOT schedule if ($this->execution_mode != php_report::EXECUTION_MODE_SCHEDULED && cm_get_crlmuserid($this->userid)) { return true; } return false; }
/** * Calculate the total credits for the current user * @param string array $grouping_current Mapping of field names to current values in the grouping * @param table_report_grouping $grouping Object containing all info about the current * level of grouping being handled * @param stdClass $datum The most recent record encountered * @param string $export_format The format being used to render the report * @uses $DB * @return string The format total of credits */ function get_total_credits($grouping_current, $grouping, $datum, $export_format) { global $DB; $params = array(); //obtain an sql clause that filters out users you shouldn't see $contexts = get_contexts_by_capability_for_user('user', $this->access_capability, $this->userid); //$permissions_filter = $contexts->sql_filter_for_context_level('u.id', 'user'); $filter_obj = $contexts->get_filter('id', 'user'); $filter_sql = $filter_obj->get_sql(false, 'u', SQL_PARAMS_NAMED); $permissions_filter = 'TRUE'; if (isset($filter_sql['where'])) { $permissions_filter = $filter_sql['where']; $params = array_merge($params, $filter_sql['where_parameters']); } //dynamically hande the class start / end date condition $startdate_condition = $this->get_class_startdate_condition(); $ccc_sql = $this->get_course_class_condition_sql(); $status_clause = ''; $status_sql = ''; // Check if we need to check status if ($value = php_report_filtering_get_active_filter_values($this->parentname, 'filter-completionstatus', $this->filter)) { $status = $value[0]['value']; } if (isset($status)) { $status_clause = $this->get_class_status_sql($status); $status_sql = ' AND EXISTS (SELECT stu.userid FROM {' . student::TABLE . '} stu' . $this->get_class_join_sql('WHERE') . ' AND stu.userid = u.id' . $status_clause . ')'; } else { $status = STUSTATUS_PASSED; } // Determine if we are filtering by one or more custom field values $filtering_cur_customfield = false; /** * This section handles updating all curriculum custom fields with an additional condition, * attaching the filter condition to the outer curriculum in the case where we are displaying * some curriculum field, such as name or a custom field datum */ //find a curriculum customfield filters foreach ($this->filter->_fields as $key => $value) { if (strpos($key, 'filter-ccc-curriculum-customfield-') === 0) { //determine if a session value is set for this field if ($test_customfield = php_report_filtering_get_active_filter_values($this->get_report_shortname(), $key, $this->filter)) { //signal that we are filtering by curriculum customfields $filtering_cur_customfield = true; break; } } } //calculate the appropriate filter clause - moved up from within next if block list($filter_clause, $filter_params) = $this->get_filter_condition(''); if (empty($filter_clause)) { $filter_clause = 'TRUE'; } else { $params = array_merge($params, $filter_params); } //error_log("UCCDR::get_total_credits() - filter_clause = {$filter_clause}"); /** * Calculate the total number of distinct credits in the report */ if ($this->_show_curricula || $filtering_cur_customfield) { //we are showing curricula, so we need to account for curriculum and //non-curriculum cases if (!$this->_show_curricula && $filtering_cur_customfield) { //special case: filtering by customfields when showing no curriculum info $filter_clause = str_replace('u.id = cca.userid', 'u.id = cca.userid AND curcrs.curriculumid = cca.curriculumid', $filter_clause); } $curriculum_sql = 'SELECT SUM(credits) FROM ( SELECT DISTINCT u.id AS userid, cls.id AS classid, stu.credits FROM {' . user::TABLE . '} u JOIN {' . student::TABLE . '} stu ON u.id = stu.userid {$status_clause} JOIN {' . pmclass::TABLE . '} cls ON stu.classid = cls.id JOIN {' . curriculumcourse::TABLE . '} curcrs ON cls.courseid = curcrs.courseid JOIN {' . curriculumstudent::TABLE . '} curstu ON u.id = curstu.userid JOIN {' . curriculum::TABLE . '} cur ON curstu.curriculumid = cur.id AND curcrs.curriculumid = curstu.curriculumid WHERE stu.completestatusid = ' . STUSTATUS_PASSED . "\n AND {$filter_clause}\n {$ccc_sql}\n AND {$permissions_filter}\n AND {$startdate_condition}) c"; //obtain the actual number $curriculum_num = $DB->get_field_sql($curriculum_sql, $params); if ($filtering_cur_customfield) { //if we are filtering by curriculum customfields, there will never be any non-curriculum results $noncurriculum_num = 0; } else { $noncurriculum_sql = 'SELECT SUM(stu.credits) FROM {' . user::TABLE . '} u JOIN {' . student::TABLE . "} stu\n ON u.id = stu.userid {$status_clause}\n JOIN {" . pmclass::TABLE . '} cls ON stu.classid = cls.id LEFT JOIN ({' . curriculumcourse::TABLE . '} curcrs JOIN {' . curriculumstudent::TABLE . '} curstu ON curcrs.curriculumid = curstu.curriculumid) ON cls.courseid = curcrs.courseid AND stu.userid = curstu.userid LEFT JOIN {' . curriculum::TABLE . '} cur ON cur.id = 0 WHERE curstu.id IS NULL AND stu.userid = u.id AND stu.completestatusid = ' . STUSTATUS_PASSED . ' AND ' . table_report::PARAMETER_TOKEN . "\n AND {$filter_clause}\n {$ccc_sql}\n AND {$permissions_filter}\n AND {$startdate_condition}"; //add filtering to the query $noncurriculum_sql = $this->get_complete_sql_query(false, $noncurriculum_sql, $params); if (!empty($noncurriculum_sql) && !empty($noncurriculum_sql[0])) { $params = array_merge($params, $noncurriculum_sql[1]); } //obtain the actual number $noncurriculum_num = $DB->get_field_sql($noncurriculum_sql[0], $params); } //total credits is the sum of curriculum and non-curriculum credits $num_credits = (double) $curriculum_num + (double) $noncurriculum_num; } else { //we are not showing curricula, so this is simply an aggregation over class //enrolments, based on filters $sql = 'SELECT SUM(stu.credits) FROM {' . user::TABLE . '} u JOIN {' . student::TABLE . "} stu\n ON u.id = stu.userid {$status_clause}\n JOIN {" . pmclass::TABLE . '} cls ON stu.classid = cls.id WHERE stu.completestatusid = ' . STUSTATUS_PASSED . ' AND ' . table_report::PARAMETER_TOKEN . "\n AND {$filter_clause}\n {$ccc_sql}\n AND {$permissions_filter}\n AND {$startdate_condition}"; $sql = $this->get_complete_sql_query(false, $sql, $params); if (!empty($sql) && !empty($sql[0])) { $params = array_merge($params, $sql[1]); } $num_credits = $DB->get_field_sql($sql[0], $params); } //show number of credits to two decimals $num_credits = $this->format_credits($num_credits); return $num_credits; }
/** * items in the form * * @uses $USER */ public function definition() { global $USER; $fields = field::get_for_context_level('track'); foreach ($fields as $rec) { $field = new field($rec); if (strcmp($field->datatype, "num") == 0) { $fieldname = "field_{$field->shortname}"; if (isset($this->_customdata['obj']->{$fieldname})) { $formatnum = $field->format_number($this->_customdata['obj']->{$fieldname}); $this->_customdata['obj']->{$fieldname} = $formatnum; } } } $this->set_data($this->_customdata['obj']); $mform =& $this->_form; $mform->addElement('hidden', 'id'); $mform->setType('id', PARAM_INT); $curs = array(); if (!empty($USER->id)) { // TBD: and/or capability 'local/elisprogram:track_edit|view' ? // This is necessary for creating a new track but will prevent a parent programs from appearing // when the user has track edit permissions but not track creation permission -- ELIS-5954 $contexts = get_contexts_by_capability_for_user('curriculum', 'local/elisprogram:track_create', $USER->id); $curs = curriculum_get_listing('name', 'ASC', 0, 0, '', '', $contexts); } if (empty($this->_customdata['obj']->id)) { $curid_options = array(); if (!empty($curs)) { foreach ($curs as $cur) { $curid_options[$cur->id] = '(' . $cur->idnumber . ') ' . $cur->name; } } $mform->addElement('select', 'curid', get_string('curriculum', 'local_elisprogram') . ':', $curid_options); $mform->addRule('curid', get_string('required'), 'required', NULL, 'client'); $mform->addHelpButton('curid', 'trackform:curriculum_curid', 'local_elisprogram'); } else { // Track editing, do not allow the user to change curriculum // Make sure that the parent program for this track is always included otherwise the display is messed up // and hitting the form Cancel button causes a DB error -- ELIS-5954 $track = new track($this->_customdata['obj']->id); $curs = curriculum_get_listing('name', 'ASC', 0, 0, $track->curriculum->name); $mform->addElement('static', 'curidstatic', get_string('curriculum', 'local_elisprogram') . ':', $curs[$this->_customdata['obj']->curid]->name); $mform->addHelpButton('curidstatic', 'trackform:curriculum_curidstatic', 'local_elisprogram'); $mform->addElement('hidden', 'curid'); $mform->setType('curid', PARAM_INT); } $mform->addElement('text', 'idnumber', get_string('track_idnumber', 'local_elisprogram') . ':'); $mform->setType('idnumber', PARAM_TEXT); $mform->addRule('idnumber', get_string('required'), 'required', NULL, 'client'); $mform->addRule('idnumber', null, 'maxlength', 100); $mform->addHelpButton('idnumber', 'trackform:track_idnumber', 'local_elisprogram'); $mform->addElement('text', 'name', get_string('track_name', 'local_elisprogram') . ':'); $mform->setType('name', PARAM_TEXT); $mform->addRule('name', null, 'maxlength', 255); $mform->addRule('name', get_string('required'), 'required', NULL, 'client'); $mform->addHelpButton('name', 'trackform:track_name', 'local_elisprogram'); $mform->addElement('textarea', 'description', get_string('track_description', 'local_elisprogram') . ':'); $mform->setType('description', PARAM_CLEAN); $mform->addHelpButton('description', 'trackform:track_description', 'local_elisprogram'); $mform->addElement('date_selector', 'startdate', get_string('track_startdate', 'local_elisprogram') . ':', array('optional' => true)); $mform->addElement('date_selector', 'enddate', get_string('track_enddate', 'local_elisprogram') . ':', array('optional' => true)); $mform->addHelpButton('startdate', 'trackform:track_startdate', 'local_elisprogram'); if (!empty($this->_customdata['obj']->id)) { $trackassignobj = new trackassignment(array('trackid' => $this->_customdata['obj']->id)); } // Only show auto-create checkbox if the track does not have any classes assigned if (!isset($trackassignobj) || 0 == $trackassignobj->count_assigned_classes_from_track()) { $mform->addElement('checkbox', 'autocreate', get_string('track_autocreate', 'local_elisprogram') . ':'); $mform->addHelpButton('autocreate', 'trackform:track_autocreate', 'local_elisprogram'); } // custom fields $this->add_custom_fields('track', 'local/elisprogram:track_edit', 'local/elisprogram:track_view', 'curriculum'); $this->add_action_buttons(); }
static function get_contexts($capability) { if (!isset(self::$contexts[$capability])) { global $USER; self::$contexts[$capability] = get_contexts_by_capability_for_user('cluster', $capability, $USER->id); } return self::$contexts[$capability]; }
/** * Gets the autocomplete search SQL for the autocomplete UI * Note that this is the SQL used to select a value, not the SQL used in the report SQL * @param string $q The query string * @return string The SQL query */ public function get_search_results($q) { global $CFG, $DB, $USER; $q = explode(' ', $q); // Get enabled instance and custom fields. $displayinstancefields = $this->get_display_instance_fields(); $searchinstancefields = $this->get_search_instance_fields(); $displaycustomfields = $this->get_display_custom_fields(); $searchcustomfields = $this->get_search_custom_fields(); $configuredforcedcustomvals = $this->get_configured_forced_custom_vals(); if (empty($searchcustomfields) && empty($searchinstancefields)) { echo get_string('filt_autoc_no_fields_enabled', 'local_eliscore'); die; } // Assemble SELECT. $select = array('i.id'); foreach ($displayinstancefields as $field => $label) { $select[] = 'i.' . $field; } foreach ($displaycustomfields as $fieldinfo) { $select[] = 'f' . $fieldinfo['fieldid'] . '.data as ' . strtolower($fieldinfo['shortname']); } $select = 'SELECT ' . implode(',', $select); // Assemble FROM/JOINs. $joins = array('JOIN {context} c ON c.instanceid=i.id AND c.contextlevel=' . $this->contextlevel); foreach ($displaycustomfields as $fieldinfo) { $table = $this->custom_fields_data_tables[$fieldinfo['datatype']]; $alias = 'f' . $fieldinfo['fieldid']; $joins[] = ' LEFT JOIN {' . $table . '} ' . $alias . ' ON ' . $alias . '.contextid=c.id AND ' . $alias . '.fieldid=' . $fieldinfo['fieldid']; } foreach ($this->forced_custom_vals as $fieldshortname => $forcedval) { if (isset($this->custom_fields[$fieldshortname]) && !isset($displaycustomfields[$fieldshortname])) { $fieldinfo = $this->custom_fields[$fieldshortname]; $table = $this->custom_fields_data_tables[$fieldinfo['datatype']]; $alias = 'f' . $fieldinfo['fieldid']; $joins[] = ' LEFT JOIN {' . $table . '} ' . $alias . ' ON ' . $alias . '.contextid=c.id AND ' . $alias . '.fieldid=' . $fieldinfo['fieldid']; } } if ($this->config_allowed() !== true) { foreach ($configuredforcedcustomvals as $fieldshortname => $fieldinfo) { if (!isset($this->custom_fields[$fieldshortname]) && !isset($displaycustomfields[$fieldshortname])) { $table = $this->custom_fields_data_tables[$fieldinfo['datatype']]; $alias = 'f' . $fieldinfo['fieldid']; $joins[] = ' LEFT JOIN {' . $table . '} ' . $alias . ' ON ' . $alias . '.contextid=c.id AND ' . $alias . '.fieldid=' . $fieldinfo['fieldid']; } } } $from = 'FROM {' . $this->instancetable . '} i ' . implode(' ', $joins); // Assemble WHERE. $search = array(); $searchparams = array(); foreach ($q as $i => $qword) { // Add search SQL for each instance field. $searchbyfield = array(); foreach ($searchinstancefields as $field => $label) { $searchbyfield[] = 'i.' . $field . ' LIKE ?'; $searchparams[] = '%' . $qword . '%'; } // Add search SQL for each custom field. foreach ($searchcustomfields as $fieldinfo) { $searchbyfield[] = 'f' . $fieldinfo['fieldid'] . '.data LIKE ?'; $searchparams[] = '%' . $qword . '%'; } $search[] = implode(' OR ', $searchbyfield); } // Get code-forced custom vals. foreach ($this->forced_custom_vals as $fieldshortname => $forcedval) { if (isset($this->custom_fields[$fieldshortname])) { $fieldinfo = $this->custom_fields[$fieldshortname]; $search[] = 'f' . $fieldinfo['fieldid'] . '.data = ?'; $searchparams[] = $forcedval; } } // Get configured forced custom vals. if ($this->config_allowed() !== true) { foreach ($configuredforcedcustomvals as $fieldshortname => $fieldinfo) { if (isset($USER->profile[$fieldshortname])) { $search[] = 'f' . $fieldinfo['fieldid'] . '.data = ?'; $searchparams[] = $USER->profile[$fieldshortname]; } } } if (!empty($this->_restriction_sql)) { $search[] = $this->_restriction_sql; } // Construct permissions SQL filter. $contextname = $this->context_level_map[$this->contextlevel]; $permsfilter = array(); $permparams = array(); // Obtain all course contexts where this user can view reports. $contexts = get_contexts_by_capability_for_user($contextname, $this->parent_report_instance->access_capability, $this->parent_report_instance->userid); $filterobj = $contexts->get_filter('id', $contextname); $filtersql = $filterobj->get_sql(false, ''); if (isset($filtersql['where'])) { $permsfilter[] = $filtersql['where']; $permparams = $filtersql['where_parameters']; if (!is_array($permparams)) { $permparams = array(); } // ELIS-5807 -- Always be sure to include the user accessing the filter in the results! if ($contextname === 'user' && ($cmuserid = cm_get_crlmuserid($USER->id))) { $permsfilter[] = 'i.id = ?'; $permparams[] = $cmuserid; } } if (!empty($permsfilter)) { $search[] = '(' . implode(') OR (', $permsfilter) . ')'; } $where = 'WHERE (' . implode(') AND (', $search) . ')'; // Assemble + run the query. $sql = $select . ' ' . $from . ' ' . $where . ' GROUP BY i.id LIMIT 0,20'; $params = array_merge($searchparams, $permparams); return $DB->get_records_sql($sql, $params); }
function transform_grouping_header_label($grouping_current, $grouping, $datum, $export_format) { global $CURMAN, $CFG; $labels = array(); //dependencies require_once $CFG->dirroot . '/curriculum/config.php'; require_once $CFG->dirroot . '/curriculum/lib/contexts.php'; //obtain an sql clause that filters out users you shouldn't see $contexts = get_contexts_by_capability_for_user('user', $this->access_capability, $this->userid); $permissions_filter = $contexts->sql_filter_for_context_level('u.id', 'user'); $class_join = $this->get_class_join_sql(); //dynamically hande the class start / end date condition $startdate_condition = $this->get_class_startdate_condition(); $status_clause = ''; $status_sql = ''; $status_join = ''; $status_where = ''; // Check if we need to check status if ($value = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'filter-completionstatus', $this->filter)) { $status = $value[0]['value']; } if (isset($status)) { $status_clause = $this->get_class_status_sql($status); $status_sql = ' AND EXISTS (SELECT stu.userid ' . 'FROM ' . $CURMAN->db->prefix_table(STUTABLE) . ' stu ' . $this->get_class_join_sql('WHERE') . ' AND stu.userid = u.id' . $status_clause . ')'; $status_join = " JOIN {$CURMAN->db->prefix_table(STUTABLE)} stu\n ON stu.userid = u.id "; if (!empty($class_join)) { $status_join .= 'AND stu.classid = cls.id '; } $status_where = $this->get_class_status_sql($status); } else { $status = STUSTATUS_PASSED; } $ccc_sql = $this->get_course_class_condition_sql(); // Determine if we are filtering by one or more custom field values $filtering_cur_customfield = false; /** * This section handles updating all curriculum custom fields with an additional condition, * attaching the filter condition to the outer curriculum in the case where we are displaying * some curriculum field, such as name or a custom field datum */ //find a curriculum customfield filters foreach ($this->filter->_fields as $key => $value) { if (strpos($key, 'filter-ccc-curriculum-customfield-') === 0) { //determine if a session value is set for this field if ($test_customfield = php_report_filtering_get_active_filter_values($this->get_report_shortname(), $key, $this->filter)) { //signal that we are filtering by curriculum customfields $filtering_cur_customfield = true; break; } } } /** * Calculate the total number of distinct users in the report */ if ($this->_show_curricula) { //we are showing curricula, so we need to figure out which users have //appropriate credits //subquery to retreive the number of credits $subquery = "(SELECT SUM(stu.credits)\n FROM {$CURMAN->db->prefix_table(STUTABLE)} stu\n JOIN {$CURMAN->db->prefix_table(CLSTABLE)} cls\n ON stu.classid = cls.id {$ccc_sql}\n LEFT JOIN ({$CURMAN->db->prefix_table(CURCRSTABLE)} curcrs\n JOIN {$CURMAN->db->prefix_table(CURASSTABLE)} curstu\n ON curcrs.curriculumid = curstu.curriculumid)\n ON cls.courseid = curcrs.courseid\n AND stu.userid = curstu.userid\n WHERE curstu.id IS NULL\n AND stu.completestatusid = " . STUSTATUS_PASSED . "\n AND {$startdate_condition}\n AND stu.userid = u.id)"; //subquery to determine if one or more credit has been awarded $exists_query = "SELECT *\n FROM {$CURMAN->db->prefix_table(STUTABLE)} stu\n JOIN {$CURMAN->db->prefix_table(CLSTABLE)} cls\n ON stu.classid = cls.id {$ccc_sql}\n LEFT JOIN ({$CURMAN->db->prefix_table(CURCRSTABLE)} curcrs\n JOIN {$CURMAN->db->prefix_table(CURASSTABLE)} curstu\n ON curcrs.curriculumid = curstu.curriculumid)\n ON cls.courseid = curcrs.courseid\n AND stu.userid = curstu.userid\n WHERE curstu.id IS NULL\n AND {$startdate_condition}\n AND stu.userid = u.id"; //subquery to determine if the current user has no class enrolments $stu_not_exists_query = "SELECT *\n FROM {$CURMAN->db->prefix_table(STUTABLE)} stu\n JOIN {$CURMAN->db->prefix_table(CLSTABLE)} cls\n ON stu.classid = cls.id {$ccc_sql}\n WHERE u.id = stu.userid\n AND {$startdate_condition} "; //subquery to determine if the current user has no curriculum assignments $curr_not_exists_query = "SELECT *\n FROM {$CURMAN->db->prefix_table(CURASSTABLE)} curstu\n WHERE u.id = curstu.userid"; $sql = "SELECT COUNT(DISTINCT u.id)\n FROM\n (SELECT u.id\n FROM {$CURMAN->db->prefix_table(USRTABLE)} u\n JOIN {$CURMAN->db->prefix_table(CURASSTABLE)} curstu\n ON u.id = curstu.userid\n JOIN {$CURMAN->db->prefix_table(CURTABLE)} cur\n ON curstu.curriculumid = cur.id\n {$class_join}\n {$status_join}\n WHERE " . table_report::PARAMETER_TOKEN . "\n {$status_where}\n {$status_sql}\n AND {$permissions_filter}\n\n UNION ALL\n\n SELECT u.id\n FROM {$CURMAN->db->prefix_table(USRTABLE)} u\n LEFT JOIN {$CURMAN->db->prefix_table(CURASSTABLE)} curstu\n ON curstu.id = 0\n LEFT JOIN {$CURMAN->db->prefix_table(CURTABLE)} cur\n ON cur.id = 0\n {$class_join}\n {$status_join}\n WHERE (EXISTS ({$exists_query})\n OR (NOT EXISTS ({$stu_not_exists_query}) AND NOT EXISTS ({$curr_not_exists_query})\n )) \n {$status_where}\n AND " . table_report::PARAMETER_TOKEN . "\n {$status_sql}\n AND {$permissions_filter}\n ) u"; } else { //we are not showing curricula, so this is a simple count of users //based on filters $sql = "SELECT COUNT(DISTINCT u.id)\n FROM {$CURMAN->db->prefix_table(USRTABLE)} u\n {$class_join}\n {$status_join}\n WHERE " . table_report::PARAMETER_TOKEN . "\n {$status_where}\n {$status_sql}\n AND {$permissions_filter}"; } //add filtering to query $sql = $this->get_complete_sql_query(false, $sql); //obtain the actual number $num_users = get_field_sql($sql); //create the header item if ($export_format == table_report::$EXPORT_FORMAT_HTML) { $text_label = get_string('grouping_learners', $this->languagefile); } else { $text_label = get_string('grouping_learners_csv', $this->languagefile); } $labels[] = $this->add_grouping_header($text_label, $num_users, $export_format); /** * Calculate the total number of distinct credits in the report */ if ($this->_show_curricula || $filtering_cur_customfield) { //we are showing curricula, so we need to account for curriculum and //non-curriculum cases //calculate the appropriate filter caluse $filter_clause = $this->get_filter_condition(''); if (!$this->_show_curricula && $filtering_cur_customfield) { //special case: filtering by customfields when showing no curriculum info $filter_clause = str_replace('u.id = cca.userid', 'u.id = cca.userid AND curcrs.curriculumid = cca.curriculumid', $filter_clause); } $curriculum_sql = "SELECT SUM(credits) FROM (\n SELECT DISTINCT u.id AS userid, cls.id AS classid, stu.credits\n FROM {$CURMAN->db->prefix_table(USRTABLE)} u\n JOIN {$CURMAN->db->prefix_table(STUTABLE)} stu\n ON u.id = stu.userid {$status_clause}\n JOIN {$CURMAN->db->prefix_table(CLSTABLE)} cls\n ON stu.classid = cls.id\n JOIN {$CURMAN->db->prefix_table(CURCRSTABLE)} curcrs\n ON cls.courseid = curcrs.courseid\n JOIN {$CURMAN->db->prefix_table(CURASSTABLE)} curstu\n ON u.id = curstu.userid\n JOIN {$CURMAN->db->prefix_table(CURTABLE)} cur\n ON curstu.curriculumid = cur.id\n AND curcrs.curriculumid = curstu.curriculumid\n WHERE stu.completestatusid = " . STUSTATUS_PASSED . "\n AND {$filter_clause}\n AND {$permissions_filter}\n AND {$startdate_condition}) c"; //obtain the actual number $curriculum_num = get_field_sql($curriculum_sql); if ($filtering_cur_customfield) { //if we are filtering by curriculum customfields, there will never be any non-curriculum results $noncurriculum_num = 0; } else { $noncurriculum_sql = "SELECT SUM(stu.credits)\n FROM {$CURMAN->db->prefix_table(USRTABLE)} u\n JOIN {$CURMAN->db->prefix_table(STUTABLE)} stu\n ON u.id = stu.userid {$status_clause}\n JOIN {$CURMAN->db->prefix_table(CLSTABLE)} cls\n ON stu.classid = cls.id {$ccc_sql}\n LEFT JOIN ({$CURMAN->db->prefix_table(CURCRSTABLE)} curcrs\n JOIN {$CURMAN->db->prefix_table(CURASSTABLE)} curstu\n ON curcrs.curriculumid = curstu.curriculumid)\n ON cls.courseid = curcrs.courseid\n AND stu.userid = curstu.userid\n LEFT JOIN {$CURMAN->db->prefix_table(CURTABLE)} cur\n ON cur.id = 0\n WHERE curstu.id IS NULL\n AND stu.userid = u.id\n AND stu.completestatusid = " . STUSTATUS_PASSED . "\n AND " . table_report::PARAMETER_TOKEN . "\n AND {$permissions_filter}\n AND {$startdate_condition}"; //add filtering to the query $noncurriculum_sql = $this->get_complete_sql_query(false, $noncurriculum_sql); //obtain the actual number $noncurriculum_num = get_field_sql($noncurriculum_sql); } //total credits is the sum of curriculum and non-curriculum credits $num_credits = (double) $curriculum_num + (double) $noncurriculum_num; } else { //we are not showing curricula, so this is simply an aggregation over class //enrolments, based on filters $sql = "SELECT SUM(stu.credits)\n FROM {$CURMAN->db->prefix_table(USRTABLE)} u\n JOIN {$CURMAN->db->prefix_table(STUTABLE)} stu\n ON u.id = stu.userid {$status_clause}\n JOIN {$CURMAN->db->prefix_table(CLSTABLE)} cls\n ON stu.classid = cls.id {$ccc_sql}\n WHERE stu.completestatusid = " . STUSTATUS_PASSED . "\n AND " . table_report::PARAMETER_TOKEN . "\n AND {$permissions_filter}\n AND {$startdate_condition}"; $sql = $this->get_complete_sql_query(false, $sql); $num_credits = get_field_sql($sql); } //show number of credits to two decimals $num_credits = $this->format_credits($num_credits); //create the header item $text_label = get_string('grouping_credits', $this->languagefile); $labels[] = $this->add_grouping_header($text_label, $num_credits, $export_format); return $labels; }
/** * Determines whether the current user can view this report, based on being logged in * and php_report:view capability * * @return boolean True if permitted, otherwise false */ function can_view_report() { //Check for report view capability if (!isloggedin() || isguestuser()) { return false; } if ($this->execution_mode == php_report::EXECUTION_MODE_SCHEDULED) { $this->require_dependencies(); //when scheduling, make sure the current user has the scheduling capability for SOME user $contexts = get_contexts_by_capability_for_user('user', $this->access_capability, $this->userid); return !$contexts->is_empty(); } // Since user is logged in they should always be able to see their own courses/classes return true; }
function action_copycurredit() { global $CFG, $USER, $CURMAN; require_js($CFG->wwwroot . '/curriculum/js/clustercurriculumpage.js'); $id = $this->required_param('id', PARAM_INT); // Create a list of curricula to be excluded $curriculumshown = array(); $table = new stdClass(); $table->head = array(get_string('clustcpyclustname', 'block_curr_admin'), get_string('clustcpycurname', 'block_curr_admin'), get_string('clustcpyadd', 'block_curr_admin'), get_string('clustcpytrkcpy', 'block_curr_admin'), get_string('clustcpycrscpy', 'block_curr_admin'), get_string('clustcpyclscpy', 'block_curr_admin'), get_string('clustcpymdlclscpy', 'block_curr_admin')); $table->class = 'cluster_copy_curriculum'; // Get all clusters $sort = 'name'; $dir = 'ASC'; $clusters = cluster_get_listing($sort, $dir, 0); $clusterlist = array(); $sql = 'SELECT * from ' . $CURMAN->db->prefix_table('crlm_cluster'); // Exclude clusters the user does not have the capability to manage/see $context = get_contexts_by_capability_for_user('cluster', 'block/curr_admin:cluster:view', $USER->id); foreach ($clusters as $clusid => $clusdata) { $haspermission = $context->context_allowed($clusid, 'cluster'); if (!$haspermission) { unset($clusters[$clusid]); } } echo '<form action="index.php" method="post">'; $mdlcrsoptions = array('copyalways' => get_string('currcopy_mdlcrs_copyalways', 'block_curr_admin'), 'copyautocreated' => get_string('currcopy_mdlcrs_copyautocreated', 'block_curr_admin'), 'autocreatenew' => get_string('currcopy_mdlcrs_autocreatenew', 'block_curr_admin'), 'link' => get_string('currcopy_mdlcrs_link', 'block_curr_admin')); $contexts = curriculumpage::get_contexts('block/curr_admin:associate'); foreach ($clusters as $clusid => $clusdata) { $assocurr = clustercurriculum::get_curricula($clusid); if (!empty($assocurr)) { $first = true; foreach ($assocurr as $assocurrrec) { // Add to list of curricula to exclude $curriculumshown[] = $assocurrrec->curriculumid; // Skip over this clusters associated curricula if ($clusid == $id) { continue; } // Skip over curricula that user cannot associate if (!$contexts->context_allowed($assocurrrec->curriculumid, 'curriculum')) { continue; } if ($first) { $curname = format_string($clusdata->name); $first = false; } else { $curname = ''; } $table->data[] = array($curname, format_string($assocurrrec->name), print_checkbox(self::CPY_CURR_PREFIX . $assocurrrec->curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_TRK_PREFIX . $assocurrrec->curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_CRS_PREFIX . $assocurrrec->curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_CLS_PREFIX . $assocurrrec->curriculumid, 1, false, '', '', '', true), choose_from_menu($mdlcrsoptions, self::CPY_CURR_MDLCRS_PREFIX . $assocurrrec->curriculumid, '', '', '', 0, true)); $table->rowclass[] = 'clus_cpy_row'; } } } // Add unassociated row to table $table->data[] = array(get_string('unassociated', 'block_curr_admin'), '', '', '', '', '', ''); $table->rowclass[] = 'clus_cpy_row unassigned'; // Get all curriculums, removing curricula that have already // been listed $curriculums = curriculum_get_listing($sort, $dir, 0, 0, '', '', $contexts); foreach ($curriculums as $curriculumid => $curriculumdata) { if (false === array_search($curriculumid, $curriculumshown)) { $table->data[] = array('', format_string($curriculumdata->name), print_checkbox(self::CPY_CURR_PREFIX . $curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_TRK_PREFIX . $curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_CRS_PREFIX . $curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_CLS_PREFIX . $curriculumid, 1, false, '', '', '', true), choose_from_menu($mdlcrsoptions, self::CPY_CURR_MDLCRS_PREFIX . $curriculumid, '', '', '', 0, true)); $table->rowclass[] = 'clus_cpy_row'; } } $currselectall = '<div class="currselectall">' . '<a id="clus_currcpy_select_all" onclick="cluster_copycurriculum_set_all_selected()">' . get_string('selectall') . '</a></div>'; $trkselectall = '<div class="trkselectall">' . '<a id="clus_trkcpy_select_all" onclick="cluster_copytrack_set_all_selected()">' . get_string('selectall') . '</a></div>'; $crsselectall = '<div class="crsselectall">' . '<a id="clus_crscpy_select_all" onclick="cluster_copycourse_set_all_selected()">' . get_string('selectall') . '</a></div>'; $clsselectall = '<div class="clsselectall">' . '<a id="clus_crscpy_select_all" onclick="cluster_copyclass_set_all_selected()">' . get_string('selectall') . '</a></div>'; $table->data[] = array('', '', $currselectall, $trkselectall, $crsselectall, $clsselectall); $table->rowclass[] = 'clus_cpy_row select_all_row'; echo print_table($table, true); echo '<div class="clus_curr_cpy_save_exit">'; echo '<input type="submit" name="save" value="' . get_string('saveexit', 'block_curr_admin') . '">'; echo '<div class="hidden">'; echo '<input type="hidden" name="id" value="' . $id . '">'; echo '<input type="hidden" name="s" value="clstcur">'; echo '<input type="hidden" name="action" value="copycurr">'; echo '<input type="hidden" name="sesskey" value="' . $USER->sesskey . '">'; echo '</div>'; echo '</div>'; echo '</form>'; }
/** * items in the form * * @uses $USER */ public function definition() { global $USER; $this->set_data($this->_customdata['obj']); $mform =& $this->_form; $mform->addElement('hidden', 'id'); $curs = array(); if (!empty($USER->id)) { // TBD: and/or capability 'block/curr_admin:curriculum:edit|view' ? // WAS: 'block/curr_admin:track:create' ??? $contexts = get_contexts_by_capability_for_user('curriculum', 'block/curr_admin:curriculum:view', $USER->id); $curs = curriculum_get_listing('name', 'ASC', 0, 0, '', '', $contexts); } if (empty($this->_customdata['obj']->id)) { $curid_options = array(); if (!empty($curs)) { foreach ($curs as $cur) { $curid_options[$cur->id] = '(' . $cur->idnumber . ') ' . $cur->name; } } $mform->addElement('select', 'curid', get_string('curriculum', 'block_curr_admin') . ':', $curid_options); $mform->addRule('curid', get_string('required'), 'required', NULL, 'client'); $mform->setHelpButton('curid', array('trackform/curriculum', get_string('curriculum', 'block_curr_admin'), 'block_curr_admin')); } else { // Track editing, do not allow the user to change curriculum $mform->addElement('static', 'curidstatic', get_string('curriculum', 'block_curr_admin') . ':', $curs[$this->_customdata['obj']->curid]->name); $mform->setHelpButton('curidstatic', array('trackform/curriculum', get_string('curriculum', 'block_curr_admin'), 'block_curr_admin')); $mform->addElement('hidden', 'curid'); } $mform->addElement('text', 'idnumber', get_string('track_idnumber', 'block_curr_admin') . ':'); $mform->setType('idnumber', PARAM_TEXT); $mform->addRule('idnumber', get_string('required'), 'required', NULL, 'client'); $mform->addRule('idnumber', null, 'maxlength', 100); $mform->setHelpButton('idnumber', array('trackform/idnumber', get_string('track_idnumber', 'block_curr_admin'), 'block_curr_admin')); $mform->addElement('text', 'name', get_string('track_name', 'block_curr_admin') . ':'); $mform->setType('name', PARAM_TEXT); $mform->addRule('name', null, 'maxlength', 255); $mform->addRule('name', get_string('required'), 'required', NULL, 'client'); $mform->setHelpButton('name', array('trackform/name', get_string('track_name', 'block_curr_admin'), 'block_curr_admin')); $mform->addElement('textarea', 'description', get_string('track_description', 'block_curr_admin') . ':'); $mform->setType('description', PARAM_CLEAN); $mform->setHelpButton('description', array('trackform/description', get_string('track_description', 'block_curr_admin'), 'block_curr_admin')); $mform->addElement('date_selector', 'startdate', get_string('track_startdate', 'block_curr_admin') . ':', array('optional' => true)); $mform->addElement('date_selector', 'enddate', get_string('track_enddate', 'block_curr_admin') . ':', array('optional' => true)); $mform->setHelpButton('startdate', array('trackform/startdate', get_string('startdate', 'block_curr_admin'), 'block_curr_admin')); if (!empty($this->_customdata['obj']->id)) { $trackassignobj = new trackassignmentclass(array('trackid' => $this->_customdata['obj']->id)); } // Only show auto-create checkbox if the track does not have any classes assigned if (!isset($trackassignobj) or 0 == $trackassignobj->count_assigned_classes_from_track()) { $mform->addElement('checkbox', 'autocreate', get_string('track_autocreate', 'block_curr_admin') . ':'); $mform->setHelpButton('autocreate', array('trackform/autocreate', get_string('track_autocreate', 'block_curr_admin'), 'block_curr_admin')); } // custom fields $fields = field::get_for_context_level('track'); $fields = $fields ? $fields : array(); $lastcat = null; $context = isset($this->_customdata['obj']) && isset($this->_customdata['obj']->id) ? get_context_instance(context_level_base::get_custom_context_level('track', 'block_curr_admin'), $this->_customdata['obj']->id) : get_context_instance(CONTEXT_SYSTEM); require_once CURMAN_DIRLOCATION . '/plugins/manual/custom_fields.php'; foreach ($fields as $rec) { $field = new field($rec); if (!isset($field->owners['manual'])) { continue; } if ($lastcat != $rec->categoryid) { $lastcat = $rec->categoryid; $mform->addElement('header', "category_{$lastcat}", htmlspecialchars($rec->categoryname)); } manual_field_add_form_element($this, $context, $field); } $this->add_action_buttons(); }
function definition() { global $USER, $CFG, $DB, $PAGE; parent::definition(); if (!empty($this->_customdata['obj'])) { $obj = $this->_customdata['obj']; if (empty($obj->startdate) || $obj->startdate == 0) { $this->set_data(array('disablestart' => '1')); } if (empty($obj->enddate) || $obj->enddate == 0) { $this->set_data(array('disableend' => '1')); } if (isset($obj->starttimeminute) && isset($obj->starttimehour) && $obj->starttimeminute < 61 && $obj->starttimehour < 25) { $this->set_data(array('starttime' => array('minute' => $obj->starttimeminute, 'hour' => $obj->starttimehour))); } if (isset($obj->endtimeminute) && isset($obj->endtimehour) && $obj->endtimeminute < 61 && $obj->endtimehour < 25) { $this->set_data(array('endtime' => array('minute' => $obj->endtimeminute, 'hour' => $obj->endtimehour))); } } $mform =& $this->_form; $mform->addElement('hidden', 'id'); $mform->setType('id', PARAM_INT); // If there is no custom data for the course, create some if (empty($this->_customdata['obj']->course->name) || empty($this->_customdata['obj']->id)) { $courses = array(); if (!empty($USER->id)) { // This is necessary for creating a new class instance but will prevent a parent course from appearing // when the user has class edit permissions but not class creation permission -- ELIS-5954 $contexts = get_contexts_by_capability_for_user('course', 'local/elisprogram:class_create', $USER->id); // get listing of available ELIS courses $courses = course_get_listing('name', 'ASC', 0, 0, '', '', $contexts); // Detect if we are editing an existing class instance by checking for an value in the 'id' element $elm = $mform->_elements[$mform->_elementIndex['id']]; $id = $elm->getValue(); if (!empty($id)) { // Make sure that the parent course for this class is always included otherwise the display is messed up // and hitting the form Cancel button causes a DB error -- ELIS-5954 $pmclass = new pmclass($id); $courses = array_merge($courses, course_get_listing('name', 'ASC', 0, 0, $pmclass->course->idnumber)); } } // Add course select $attributes = array('onchange' => 'update_trk_multiselect(); update_crs_template();'); $selections = array(); if (!empty($courses)) { foreach ($courses as $course) { $selections[$course->id] = '(' . $course->idnumber . ')' . $course->name; } } $mform->addElement('select', 'courseid', get_string('course', 'local_elisprogram') . ':', $selections, $attributes); $mform->addHelpButton('courseid', 'pmclassform:course', 'local_elisprogram'); $firstcourse = reset($courses); $this->firstcourse = $firstcourse; if (false !== $firstcourse && empty($this->_customdata['obj']->id)) { $this->add_track_multi_select($firstcourse->id); } elseif (!empty($courses)) { $this->add_track_multi_select($this->_customdata['obj']->courseid); } } else { $extra_params = array(); $mform->addElement('static', 'courseid', get_string('course', 'local_elisprogram') . ':'); // Get current action and set param accordingly $current_action = optional_param('action', 'view', PARAM_ALPHA); $extra_params['action'] = $current_action; $extra_params['s'] = 'crs'; // Want to set the url for the course $extra_params['id'] = $this->_customdata['obj']->courseid; // Course id $course_url = $this->get_moodle_url($extra_params); $course_name = '(' . $this->_customdata['obj']->course->idnumber . ')' . '<a href="' . $course_url . '" >' . $this->_customdata['obj']->course->name . '</a>'; $this->set_data(array('courseid' => $course_name)); $mform->addHelpButton('courseid', 'pmclassform:course', 'local_elisprogram'); $this->add_track_multi_select($this->_customdata['obj']->courseid); } if (!empty($this->_customdata['obj']->courseid)) { $mform->freeze('courseid'); } else { $mform->addRule('courseid', get_string('required'), 'required', NULL, 'client'); } // Done adding course select // Set any associated Moodle course for this class instance if (empty($this->_customdata['obj']->moodlecourseid) && !empty($this->_customdata['obj']->id)) { $this->_customdata['obj']->moodlecourseid = moodle_get_course($this->_customdata['obj']->id); } $mform->addElement('text', 'idnumber', get_string('class_idnumber', 'local_elisprogram') . ':'); $mform->setType('idnumber', PARAM_TEXT); $mform->addRule('idnumber', get_string('required'), 'required', NULL, 'client'); $mform->addRule('idnumber', null, 'maxlength', 100, 'client'); $mform->addHelpButton('idnumber', 'pmclassform:class_idnumber', 'local_elisprogram'); $mform->addElement('date_selector', 'startdate', get_string('class_startdate', 'local_elisprogram') . ':', array('optional' => true, 'disabled' => 'disabled')); $mform->addHelpButton('startdate', 'pmclassform:class_startdate', 'local_elisprogram'); $mform->addElement('date_selector', 'enddate', get_string('class_enddate', 'local_elisprogram') . ':', array('optional' => true)); if (!isset($obj->starttimehour) || $obj->starttimehour >= 25 || !isset($obj->starttimeminute) || $obj->starttimeminute >= 61) { $mform->addElement('time_selector', 'starttime', get_string('class_starttime', 'local_elisprogram') . ':', array('optional' => true, 'checked' => 'checked', 'display_12h' => elis::$config->local_elisprogram->time_format_12h)); } else { $mform->addElement('time_selector', 'starttime', get_string('class_starttime', 'local_elisprogram') . ':', array('optional' => true, 'checked' => 'unchecked', 'display_12h' => elis::$config->local_elisprogram->time_format_12h)); } $mform->addHelpButton('starttime', 'pmclassform:class_starttime', 'local_elisprogram'); // Do the same thing for the endtime if (!isset($obj->endtimehour) || $obj->endtimehour >= 25 || !isset($obj->endtimeminute) || $obj->endtimeminute >= 61) { $mform->addElement('time_selector', 'endtime', get_string('class_endtime', 'local_elisprogram') . ':', array('optional' => true, 'checked' => 'checked', 'display_12h' => elis::$config->local_elisprogram->time_format_12h)); } else { $mform->addElement('time_selector', 'endtime', get_string('class_endtime', 'local_elisprogram') . ':', array('optional' => true, 'checked' => 'unchecked', 'display_12h' => elis::$config->local_elisprogram->time_format_12h)); } $mform->addElement('text', 'maxstudents', get_string('class_maxstudents', 'local_elisprogram') . ':'); $mform->setType('maxstudents', PARAM_INT); $mform->addHelpButton('maxstudents', 'pmclassform:class_maxstudents', 'local_elisprogram'); // Course selector if (empty($this->_customdata['obj']->moodlecourseid)) { $this->add_moodle_course_select(); } else { $PAGE->requires->js('/local/elisprogram/js/classform.js'); $courseSelected = array(); $coursename = $DB->get_field('course', 'fullname', array('id' => $this->_customdata['obj']->moodlecourseid)); $courseSelected[] = $mform->createElement('static', 'class_attached_course', get_string('class_attached_course', 'local_elisprogram') . ':', "<a href=\"{$CFG->wwwroot}/course/view.php?id={$this->_customdata['obj']->moodlecourseid}\">{$coursename}</a>"); //only show checkbox if current action is edit $current_action = optional_param('action', 'view', PARAM_ALPHA); if ($current_action == 'edit') { $options = array(); //set group to null $options['group'] = null; $options['onclick'] = "return class_confirm_unlink(this,'" . get_string('class_unlink_confirm', 'local_elisprogram') . "')"; $courseSelected[] = $mform->createElement('advcheckbox', 'unlink_attached_course', get_string('class_unlink_attached_course', 'local_elisprogram') . ':', get_string('class_unlink_attached_course', 'local_elisprogram'), $options); } $mform->addGroup($courseSelected, 'courseSelected', get_string('class_attached_course', 'local_elisprogram') . ':'); $mform->addHelpButton('courseSelected', 'pmclassform:moodlecourse', 'local_elisprogram'); $mform->addElement('hidden', 'moodlecourseid'); $mform->setType('moodlecourseid', PARAM_INT); } $mform->addElement('advcheckbox', 'enrol_from_waitlist', get_string('waitlistenrol', 'local_elisprogram') . ':'); $mform->addHelpButton('enrol_from_waitlist', 'pmclassform:waitlistenrol', 'local_elisprogram'); // custom fields $this->add_custom_fields('class', 'local/elisprogram:class_edit', 'local/elisprogram:class_view', 'course'); $this->add_action_buttons(); }
if (array_key_exists('id', $_REQUEST)) { $dirtyids = $_REQUEST['id']; if (is_array($dirtyids)) { foreach ($dirtyids as $dirty) { $ids[] = clean_param($dirty, PARAM_INT); } } else { $ids[] = clean_param($dirtyids, PARAM_INT); } } else { $ids[] = 0; } // Must have blank value as the default here (instead of zero) or it breaks the gas guage report $choices_array = array(array('', get_string('anyvalue', 'filters'))); if (sizeof($ids) > 0) { $contexts = get_contexts_by_capability_for_user('course', 'block/php_report:view', $USER->id); foreach ($ids as $id) { $records = false; if ($id > 0) { $records = curriculumcourse_get_listing($id, 'crs.name'); $idfield = 'courseid'; $namefield = 'coursename'; } else { if ($id == 0) { $records = course_get_listing(); $idfield = 'id'; $namefield = 'name'; } } if (is_array($records)) { foreach ($records as $record) {
/** * Specifies available report filters * (empty by default but can be implemented by child class) * * @param boolean $init_data If true, signal the report to load the * actual content of the filter objects * * @return array The list of available filters */ function get_filters($init_data = true) { $segchoices = array(); $filters = array(); $this->can_view = array(); //make sure the current user can view reports in at least one curriculum context $curr_contexts = get_contexts_by_capability_for_user('curriculum', $this->access_capability, $this->userid); $course_contexts = get_contexts_by_capability_for_user('course', $this->access_capability, $this->userid); $cluster_contexts = get_contexts_by_capability_for_user('cluster', $this->access_capability, $this->userid); if (!$curr_contexts->is_empty()) { $this->can_view['curriculum'] = TRUE; } else { $this->can_view['curriculum'] = FALSE; } if (!$course_contexts->is_empty()) { $this->can_view['course'] = TRUE; } else { $this->can_view['course'] = FALSE; } if (!$cluster_contexts->is_empty()) { $this->can_view['cluster'] = TRUE; } else { $this->can_view['cluster'] = FALSE; } // Segment filter options according to capabilities if ($this->can_view['course']) { $segchoices['course'] = get_string('course', 'rlreport_resource_usage'); $segdef = 'course'; } if ($this->can_view['curriculum']) { $segchoices['curriculum'] = get_string('curriculum', 'rlreport_resource_usage'); $segdef = 'curriculum'; } if ($this->can_view['cluster']) { $segchoices['cluster'] = get_string('cluster', 'rlreport_resource_usage'); if ($segdef != 'curriculum' && $segdef != 'course') { $segdef = 'cluster'; } } // Add filter for date range - start and end $filters[] = new generalized_filter_entry('daterange', 'cls', 'activitydate', get_string('filter_date_range', 'rlreport_resource_usage'), false, 'date'); $filters[] = new generalized_filter_entry('daterange', 'cls', 'activitydate', get_string('filter_date_range', 'rlreport_resource_usage'), false, 'date'); // Add filter for course/curriculum/cluster segmentation $filters[] = new generalized_filter_entry('segmentedby', 'status', 'segment', get_string('filter_segmented_by', 'rlreport_resource_usage'), false, 'radiobuttons', array('choices' => $segchoices, 'checked' => $segdef, 'heading' => get_string('filter_segmented_by', 'rlreport_resource_usage'), 'footer' => '<br>')); // Add filter for choice to show average grades //$filters[] = new generalized_filter_entry('showaveragegrades', '', '', get_string('filter_average_grades', 'rlreport_resource_usage'), false, 'yesno', array('numeric' => true)); $filters[] = new generalized_filter_entry('showaveragegrades', '', '', get_string('filter_average_grades', 'rlreport_resource_usage'), false, 'radiobuttons', array('choices' => array('1' => get_string('yes', 'rlreport_resource_usage'), '0' => get_string('no', 'rlreport_resource_usage')), 'checked' => '1', 'heading' => get_string('filter_average_grades', 'rlreport_resource_usage'))); return $filters; }
/** * Determines the list of clusters the current user has the permissions to view * * @return int array The ids of the applicable clusters */ public static function get_viewable_clusters($capabilities = null) { global $USER; if ($capabilities === null) { $capabilities = array('block/curr_admin:cluster:view', 'block/curr_admin:cluster:edit'); } if (!is_array($capabilities)) { $capabilities = array($capabilities); } $clusters = array(); //retrieve the context at which the current user has the sufficient capability foreach ($capabilities as $capability) { $contexts = get_contexts_by_capability_for_user('cluster', $capability, $USER->id); //convert context sets to cluster ids $clusters[] = empty($contexts->contexts['cluster']) ? array() : $contexts->contexts['cluster']; } //merge the sets to get our final result $result = array_unique(call_user_func_array('array_merge', $clusters)); return $result; }
/** * Specifies whether a course-level custom field is accessible to the * current user in at least once course context * * @param array $owners shortname-indexed collection of all field owners * * @return boolean true if accessible, otherwise false */ public function field_accessible($field) { global $CFG, $USER; $owners = $field->owners; require_once $CFG->dirroot . '/local/elisprogram/lib/contexts.php'; if (!in_array($field->shortname, $this->_field_exceptions) && ($view_capability = self::field_capability($owners))) { //make sure the user has the view capability in some course $contexts = get_contexts_by_capability_for_user('course', $view_capability, $USER->id); return !$contexts->is_empty(); } else { //data error return false; } }