コード例 #1
0
ファイル: lib.php プロジェクト: jamesmcq/elis
/**
 * 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;
}
コード例 #2
0
 /**
  * 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);
 }
コード例 #3
0
 /**
  * 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;
 }
コード例 #4
0
ファイル: coursepage.class.php プロジェクト: jamesmcq/elis
 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];
 }
コード例 #5
0
ファイル: bulkuserpage.class.php プロジェクト: jamesmcq/elis
 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];
 }
コード例 #6
0
 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];
 }
コード例 #7
0
ファイル: request_form.php プロジェクト: jamesmcq/elis
 /**
  * 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);
     }
 }
コード例 #8
0
ファイル: clusterselect.php プロジェクト: jamesmcq/elis
 /**
  * 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);
 }
コード例 #9
0
 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();
 }
コード例 #10
0
ファイル: childoptions.php プロジェクト: jamesmcq/elis
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();
 }
コード例 #12
0
ファイル: pmclasspage.class.php プロジェクト: jamesmcq/elis
 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;
 }
コード例 #13
0
 /**
  * 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);
 }
コード例 #14
0
 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;
 }
コード例 #15
0
/**
 * 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();
 }
コード例 #17
0
 /**
  * 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;
 }
コード例 #18
0
 /**
  * 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;
 }
コード例 #19
0
ファイル: trackform.class.php プロジェクト: jamesmcq/elis
 /**
  * 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();
 }
コード例 #20
0
ファイル: usersetpage.class.php プロジェクト: jamesmcq/elis
 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];
 }
コード例 #21
0
 /**
  * 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;
 }
コード例 #24
0
 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>';
 }
コード例 #25
0
 /**
  * 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();
 }
コード例 #26
0
ファイル: pmclassform.class.php プロジェクト: jamesmcq/elis
 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();
 }
コード例 #27
0
ファイル: courses.php プロジェクト: remotelearner/elis.cm
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) {
コード例 #28
0
 /**
  * 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;
 }
コード例 #29
0
 /**
  * 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;
 }
コード例 #30
0
 /**
  * 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;
     }
 }