function get_header_entries() { $header_array = array(); $show_after = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'showdr_sck', $this->filter); $date_range_after = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'showdr_sdt', $this->filter); $show_before = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'showdr_eck', $this->filter); $date_range_before = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'showdr_edt', $this->filter); // Add "after dates if available if (!empty($show_after[0]['value'])) { $after = !empty($date_range_after[0]['value']) ? $this->userdate($date_range_after[0]['value'], get_string('strftimedaydate')) : get_string('anytime', $this->lang_file); } else { $after = get_string('anytime', $this->lang_file); } // Add "after dates if available if (!empty($show_before[0]['value'])) { $before = !empty($date_range_before[0]['value']) ? $this->userdate($date_range_before[0]['value'], get_string('strftimedaydate')) : get_string('anytime', $this->lang_file); } else { $before = get_string('anytime', $this->lang_file); } // If both dates are the same, only show one if ($before == $after) { $before = ''; $splitter = ''; } else { $splitter = ' - '; } $header_obj = new stdClass(); $header_obj->label = get_string('header_date_range', $this->lang_file) . ': '; $header_obj->value = $after . $splitter . $before; $header_obj->css_identifier = ''; $header_array[] = $header_obj; return $header_array; }
/** * Constructs an appropriate order by clause for the main query * * @return string The appropriate order by clause */ function get_order_by_clause() { //always want to start by sorting on user info $result = " ORDER BY lastname, firstname, userid"; //determine whether we're showing the curriculum name $filters = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'filter-summarycolumns', $this->filter); $cols = $filters[0]['value']; if ($cols['cur_name']) { //also sort on curriculum name if displayed $result .= ", curid IS NULL, name"; } return $result; }
/** * Retrieves start and end settings from active filter (if exists) * and populates class properties: startdate and enddate * * @uses none * @param none * @return none */ function get_filter_values() { $start_enabled = php_report_filtering_get_active_filter_values($this->get_report_shortname(), nonstarter_report::datefilterid . '_sck', $this->filter); $start = 0; if (!empty($start_enabled) && is_array($start_enabled) && !empty($start_enabled[0]['value'])) { $start = php_report_filtering_get_active_filter_values($this->get_report_shortname(), nonstarter_report::datefilterid . '_sdt', $this->filter); } $end_enabled = php_report_filtering_get_active_filter_values($this->get_report_shortname(), nonstarter_report::datefilterid . '_eck', $this->filter); $end = 0; if (!empty($end_enabled) && is_array($end_enabled) && !empty($end_enabled[0]['value'])) { $end = php_report_filtering_get_active_filter_values($this->get_report_shortname(), nonstarter_report::datefilterid . '_edt', $this->filter); } $this->startdate = !empty($start) && is_array($start) ? $start[0]['value'] : 0; $this->enddate = !empty($end) && is_array($end) ? $end[0]['value'] : 0; //$this->err_dump($start, '$datefilter(2)_sdt'); //$this->err_dump($end, '$datefilter(2)_edt'); //error_log("nonstarter::get_filter_values() ... startdate={$this->startdate} enddate={$this->enddate}"); // Fetch filter values for the user profile filter $this->up_headers = $this->upfilter->get_set_filter_values($this->get_report_shortname(), $this->filter, $this->_fields); }
/** * Retrieves start and end settings from active filter (if exists) * and populates class properties: startdate and enddate * * @uses none * @param none * @return none */ function get_filter_date_values() { $start_enabled = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'enrol' . '_sck'); $start = !empty($start_enabled) && is_array($start_enabled) && !empty($start_enabled[0]['value']) ? php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'enrol' . '_sdt') : 0; $end_enabled = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'enrol' . '_eck'); $end = !empty($end_enabled) && is_array($end_enabled) && !empty($end_enabled[0]['value']) ? php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'enrol' . '_edt') : 0; $this->startdate = !empty($start) && is_array($start) ? $start[0]['value'] : 0; $this->enddate = !empty($end) && is_array($end) ? $end[0]['value'] : 0; }
/** * Get Date Filter Values * Retrieves start and end settings from active filter (if exists) and return: startdate and enddate. * * @param string $reportshortname Shortname of the report. * @param object $filter The filter object. * @param string $uniqueid The unqiue filter name * @return string|bool Either the start/end date string value, or false if dates are empty. */ public function get_date_filter_values($reportshortname, $filter, $uniqueid) { $startenabled = php_report_filtering_get_active_filter_values($reportshortname, $uniqueid . '_sck', $filter); $start = 0; if (!empty($startenabled) && is_array($startenabled) && !empty($startenabled[0]['value'])) { $start = php_report_filtering_get_active_filter_values($reportshortname, $uniqueid . '_sdt', $filter); } $endenabled = php_report_filtering_get_active_filter_values($reportshortname, $uniqueid . '_eck', $filter); $end = 0; if (!empty($endenabled) && is_array($endenabled) && !empty($endenabled[0]['value'])) { $end = php_report_filtering_get_active_filter_values($reportshortname, $uniqueid . '_edt', $filter); } $startdate = !empty($start) && is_array($start) ? $start[0]['value'] : 0; $enddate = !empty($end) && is_array($end) ? $end[0]['value'] : 0; $sdate = userdate($startdate, get_string('date_format', $this->languagefile)); $edate = !empty($enddate) ? userdate($enddate, get_string('date_format', $this->languagefile)) : get_string('present', $this->languagefile); if (empty($startdate) && empty($enddate)) { // Don't return a value if neither date is selected. return false; } else { return "{$sdate} - {$edate}"; } }
function get_header_entries($export_format) { global $CFG, $USER; $header_array = array(); // Add a course/class name if available $classid = 0; $cls_setting = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'classid', $this->filter); $cmclass = null; if (!empty($cls_setting[0]['value'])) { $classid = $cls_setting[0]['value']; $cmclass = new pmclass($classid); // Course name $header_obj = new stdClass(); $header_obj->label = get_string('header_course', $this->lang_file) . ':'; $header_obj->value = $cmclass->course->name; $header_obj->css_identifier = ''; $header_array[] = $header_obj; // Class name $header_obj = new stdClass(); $header_obj->label = get_string('header_class', $this->lang_file) . ':'; $header_obj->value = $cmclass->idnumber; $header_obj->css_identifier = ''; $header_array[] = $header_obj; } // If we are displaying a class, show date range and instructors if (!empty($classid)) { // Add dates if available if (!empty($cmclass)) { $cmclass = $cmclass->to_object(); // TBD: no date data w/o?!?! //error_log("class_roster::get_header_entries() dates: {$startdate} ~ {$enddate}"); // Add start date if available if (!empty($cmclass->startdate)) { $header_obj = new stdClass(); $header_obj->label = get_string('header_start_date', $this->lang_file) . ':'; $header_obj->value = $this->pmclassdate($cmclass, 'start'); $header_obj->css_identifier = ''; $header_array[] = $header_obj; } // Add end date if available if (!empty($cmclass->enddate)) { $header_obj = new stdClass(); $header_obj->label = get_string('header_end_date', $this->lang_file) . ':'; $header_obj->value = $this->pmclassdate($cmclass, 'end'); $header_obj->css_identifier = ''; $header_array[] = $header_obj; } } // Add instructor names $instructor = new instructor(array('userid' => $USER->id, 'classid' => $classid)); $instructor_records = $instructor->get_instructors($classid); if (!empty($instructor_records)) { $instructors = ''; foreach ($instructor_records as $record) { $userpage = new userpage(array('id' => $record->id, 'action' => 'view')); $instructors .= '<span class="external_report_link"><a href="' . $userpage->url . '">' . php_report::fullname($record) . '</a></span><br />'; } $header_obj = new stdClass(); $header_obj->label = get_string('header_instructors', $this->lang_file) . ':'; $header_obj->value = $instructors == '' ? 'Not Available' : $instructors; $header_obj->css_identifier = ''; $header_array[] = $header_obj; } } return $header_array; }
/** * Specifies an SQL statement that will retrieve users and their cluster assignment info, class enrolments, * and resource info * * @param array $columns The list of columns automatically calculated * by get_select_columns() * @return string The report's main sql statement */ function get_report_sql($columns) { global $CFG, $CURMAN, $USER; $cm_user_id = cm_get_crlmuserid($USER->id); $filter_array = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'userid', $this->filter); $filter_user_id = isset($filter_array[0]['value']) ? $filter_array[0]['value'] : 0; if ($filter_user_id == $cm_user_id && $this->execution_mode == php_report::EXECUTION_MODE_INTERACTIVE) { // always allow the user to see their own report but not necessarily schedule it $permissions_filter = 'TRUE'; } else { // obtain all course contexts where this user can view reports $contexts = get_contexts_by_capability_for_user('user', $this->access_capability, $this->userid); $permissions_filter = $contexts->sql_filter_for_context_level('usr.id', 'user'); } // Figure out the number of completed credits for the curriculum $numcomplete_subquery = "SELECT sum(innerclsenr.credits)\n FROM {$CURMAN->db->prefix_table(STUTABLE)} innerclsenr\n JOIN {$CURMAN->db->prefix_table(CLSTABLE)} innercls ON innercls.id = innerclsenr.classid\n JOIN {$CURMAN->db->prefix_table(CRSTABLE)} innercrs ON innercls.courseid = innercrs.id\n JOIN {$CURMAN->db->prefix_table(CURCRSTABLE)} innercurcrs\n ON innercurcrs.courseid = innercrs.id\n WHERE innerclsenr.userid = usr.id\n AND innercurcrs.curriculumid = cur.id\n AND innerclsenr.completestatusid = " . STUSTATUS_PASSED . "\n "; // Main query $sql = "SELECT {$columns},\n cur.id IS NULL AS isnull,\n crs.name AS course_name,\n clsenr.credits AS credits,\n clsenr.grade AS grade,\n clsenr.completetime AS date_completed,\n clsenr.completestatusid AS status,\n curass.timeexpired AS expires,\n usr.firstname AS firstname,\n usr.lastname AS lastname,\n cur.reqcredits AS reqcnt,\n ({$numcomplete_subquery}) AS acqcnt\n FROM {$CURMAN->db->prefix_table(CRSTABLE)} crs\n JOIN {$CURMAN->db->prefix_table(CLSTABLE)} cls\n ON cls.courseid=crs.id\n JOIN {$CURMAN->db->prefix_table(STUTABLE)} clsenr\n ON clsenr.classid=cls.id\n JOIN {$CURMAN->db->prefix_table(USRTABLE)} usr\n ON usr.id = clsenr.userid\n LEFT JOIN ({$CURMAN->db->prefix_table(CURASSTABLE)} curass\n JOIN {$CURMAN->db->prefix_table(CURTABLE)} cur\n ON cur.id = curass.curriculumid\n JOIN {$CURMAN->db->prefix_table(CURCRSTABLE)} curcrs\n ON curcrs.curriculumid = cur.id)\n ON curass.userid = usr.id\n AND curcrs.courseid = crs.id\n LEFT JOIN {$CURMAN->db->prefix_table(CRSCOMPTABLE)} crscomp\n ON crscomp.courseid = crs.id\n LEFT JOIN {$CURMAN->db->prefix_table(GRDTABLE)} grd\n ON grd.classid = cls.id\n AND grd.userid = usr.id\n AND grd.completionid = crscomp.id\n AND grd.locked = 1\n WHERE {$permissions_filter}\n "; return $sql; }
/** * Overload method to initialize report groupings * used here to also init report data! * * @return parent::initialize_groupings(); */ function initialize_groupings() { $show_array = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'sccts', $this->filter); if (isset($show_array[0]['value'])) { $this->show_time_spent = $show_array[0]['value'] == 1 ? true : false; } $show_array = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'sccg', $this->filter); if (isset($show_array[0]['value'])) { $this->show_total_grade = $show_array[0]['value'] == 1 ? true : false; } return parent::initialize_groupings(); }
/** * Constructs an appropriate order by clause for the main query * * @return string The appropriate order by clause */ function get_order_by_clause() { //determine whether we're showing the curriculum name $filters = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'filter-detailcolumns', $this->filter); $cols = $filters[0]['value']; if ($cols['cur_name']) { //showing curriuclumname, so sort by curriculum, course, class return ' ORDER BY curid IS NULL, curriculumname, coursename, classidnumber'; } //not showing curriculum name, so just sort by course, class return ' ORDER BY coursename, classidnumber'; }
/** * Constructs an appropriate order by clause for the main query * * @return string The appropriate order by clause */ function get_order_by_clause() { // always want to start by sorting on user info $result = array(); foreach ($this->get_custom_instance_fields() as $key => $val) { list($entity, $_as, $dbvar) = explode(" ", $val); if ($entity == 'user') { $result[] = 'lastname'; $result[] = 'firstname'; } $result[] = $dbvar; } // determine whether we're showing the curriculum name $filters = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'filter-summarycolumns', $this->filter); $cols = $filters[0]['value']; if ($cols['cur_name']) { // also sort on curriculum name if displayed $result[] = "curid IS NULL"; $result[] = "name"; } return ' ORDER BY ' . implode(', ', $result); }
/** * Specifies an SQL statement that will retrieve users and their cluster assignment info, class enrolments, * and resource info * * @param array $columns The list of columns automatically calculated * by get_select_columns() * @return array The report's main sql statement with optional params */ function get_report_sql($columns) { global $CFG, $USER; $params = array(); $permissions_filter = 'TRUE'; $cm_user_id = cm_get_crlmuserid($USER->id); $filter_array = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'filterautoc', $this->filter); $filter_user_id = isset($filter_array[0]['value']) ? $filter_array[0]['value'] : -1; // ELIS-4699: so not == to invalid cm/pm userid // ELIS-3993 -- Do not display any results if no user ID was supplied by the filter if ($filter_user_id == -1) { $permissions_filter = ' FALSE'; } else { if ($filter_user_id != $cm_user_id || $this->execution_mode != php_report::EXECUTION_MODE_INTERACTIVE) { // obtain all course contexts where this user can view reports $contexts = get_contexts_by_capability_for_user('user', $this->access_capability, $this->userid); //$permissions_filter = $contexts->sql_filter_for_context_level('crlmuser.id', 'user'); $filter_obj = $contexts->get_filter('id', 'user'); $filter_sql = $filter_obj->get_sql(false, 'crlmuser', SQL_PARAMS_NAMED); if (isset($filter_sql['where'])) { if ($filter_sql['where'] == 'FALSE') { // This user does not have permission to view the requested data $this->nopermission = true; $permissions_filter = ' FALSE'; } else { $permissions_filter = $filter_sql['where']; $params = $filter_sql['where_parameters']; } } } } //tracks progress used by this user $total_progress_subquery = 'SELECT cls.id AS classid, stu.userid as userid, COUNT(*) AS numprogress, COUNT(clsgr.id) AS stucomplete FROM {' . coursecompletion::TABLE . '} comp JOIN {' . pmclass::TABLE . '} cls ON cls.courseid = comp.courseid LEFT JOIN {' . student::TABLE . '} stu ON stu.classid = cls.id LEFT JOIN {' . student_grade::TABLE . '} clsgr ON clsgr.classid = cls.id AND clsgr.userid = stu.userid AND clsgr.locked = 1 AND clsgr.grade >= comp.completion_grade AND clsgr.completionid = comp.id GROUP BY cls.id, stu.userid '; if ($this->preposttest_columns) { //gets the pretest score for this user $pretest_query = $this->get_max_test_score_sql('_elis_course_pretest'); //gets the posttest score for this user $posttest_query = $this->get_max_test_score_sql('_elis_course_posttest'); } //main query $sql = "SELECT {$columns}, crs.id AS courseid,\n cls.starttimehour AS starttimehour,\n cls.starttimeminute AS starttimeminute,\n cls.endtimehour AS endtimehour,\n cls.endtimeminute AS endtimeminute,\n cls.id AS classid,\n crlmuser.id AS userid, crlmuser.firstname, crlmuser.lastname\n FROM {" . pmclass::TABLE . '} cls JOIN {' . student::TABLE . '} enrol ON enrol.classid = cls.id JOIN {' . user::TABLE . '} crlmuser ON crlmuser.id = enrol.userid JOIN {user} user ON user.idnumber = crlmuser.idnumber LEFT JOIN {' . classmoodlecourse::TABLE . '} clsmdl ON clsmdl.classid = cls.id LEFT JOIN {' . course::TABLE . '} crs ON crs.id = cls.courseid '; if ($this->preposttest_columns) { $sql .= "\n LEFT JOIN ({$pretest_query}) pretest\n ON pretest.classid = cls.id\n AND pretest.userid = crlmuser.id\n LEFT JOIN ({$posttest_query}) posttest\n ON posttest.classid = cls.id\n AND posttest.userid = crlmuser.id\n "; } // add custom field joins if they exist if (!empty($this->custom_joins)) { foreach ($this->custom_joins as $custom_join) { $sql .= $custom_join[0]; $params += $custom_join[1]; } } $sql .= "\n WHERE {$permissions_filter}"; return array($sql, $params); }
/** * Specifies header summary data * representing curricula, date range, cluster and number of courses in report * * @uses $DB * @param $export_format The desired export format for the headers * @return array A mapping of display names to values */ function get_header_entries($export_format) { global $DB; //need to get start_date and end_date from report interface $cluster_display = ''; $curricula_display = ''; $course_count = $this->numrecs; if ($selected_cluster = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'cluster', $this->filter)) { $count = 0; // Check for NOT - cluster_op == 2 $cluster_op = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'cluster_op', $this->filter); if ($cluster_op['0']['value'] == '2') { $cluster_display .= get_string('header_not', 'rlreport_course_progress_summary'); } foreach ($selected_cluster as $cluster) { if ($cluster_new = $DB->get_record(userset::TABLE, array('id' => $cluster['value']))) { if ($count > 0) { $cluster_display .= ' AND '; } $count++; if (!empty($cluster_new->display)) { $cluster_display .= $cluster_new->display; } else { $cluster_display .= $cluster_new->name; } } } } else { $cluster_display = get_string('header_all', 'rlreport_course_progress_summary'); } if ($selected_curricula = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'curr', $this->filter)) { $count = 0; foreach ($selected_curricula as $curricula) { if ($curricula['value'] == '0') { $curricula_display = get_string('header_all_assigned', 'rlreport_course_progress_summary'); } else { if ($curricula['value'] == 'null') { $curricula_display = get_string('filter_non_program', 'rlreport_course_progress_summary'); } else { if ($curricula = $DB->get_record(curriculum::TABLE, array('id' => $curricula['value']))) { if ($count > 0) { $curricula_display .= ' AND '; } $count++; $curricula_display .= $curricula->name; } } } } } else { $curricula_display = get_string('header_all', 'rlreport_course_progress_summary'); } // Get date filter parameters req'd for header title $this->get_datefilter_values(); $sdate = !empty($this->startdate) ? $this->userdate($this->startdate, get_string('date_format', 'rlreport_course_progress_summary')) : get_string('present', 'rlreport_course_progress_summary'); $edate = !empty($this->enddate) ? $this->userdate($this->enddate, get_string('date_format', 'rlreport_course_progress_summary')) : get_string('present', 'rlreport_course_progress_summary'); if (empty($this->startdate) && empty($this->enddate)) { $date_range_display = get_string('header_all', 'rlreport_course_progress_summary'); } else { $date_range_display = "{$sdate} - {$edate}"; } return array(new php_report_header_entry(get_string('header_curricula', 'rlreport_course_progress_summary'), $curricula_display, 'curricula'), new php_report_header_entry(get_string('header_date_range', 'rlreport_course_progress_summary'), $date_range_display, 'date'), new php_report_header_entry(get_string('header_organization', 'rlreport_course_progress_summary'), $cluster_display, 'organization'), new php_report_header_entry(get_string('header_course_count', 'rlreport_course_progress_summary'), $course_count, 'course_count')); }
/** * Specifies an SQL statement that will retrieve users and their cluster assignment info, class enrolments, * and resource info * * @param array $columns The list of columns automatically calculated * by get_select_columns() * @return array The report's main sql statement with optional params */ function get_report_sql($columns) { global $USER; $cm_user_id = cm_get_crlmuserid($USER->id); $filter_array = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'userid', $this->filter); // ELIS-4699: so not == to invalid cm/pm userid $filter_user_id = isset($filter_array[0]['value']) ? $filter_array[0]['value'] : -1; $params = array('p_completestatus' => STUSTATUS_PASSED); $permissions_filter = 'TRUE '; // ELIS-3993 -- Do not display any results if no user ID was supplied by the filter if ($filter_user_id == -1) { $permissions_filter = ' FALSE'; } else { if ($filter_user_id != $cm_user_id || $this->execution_mode != php_report::EXECUTION_MODE_INTERACTIVE) { // obtain all course contexts where this user can view reports $contexts = get_contexts_by_capability_for_user('user', $this->access_capability, $this->userid); $filter_obj = $contexts->get_filter('id', 'user'); $filter_sql = $filter_obj->get_sql(false, 'usr', SQL_PARAMS_NAMED); if (isset($filter_sql['where'])) { if ($filter_sql['where'] == 'FALSE') { // This user does not have permission to view the requested data $this->nopermission = true; $permissions_filter = 'FALSE'; } else { $permissions_filter = $filter_sql['where']; $params += $filter_sql['where_parameters']; } } } } // Figure out the number of completed credits for the curriculum $numcomplete_subquery = "SELECT sum(innerclsenr.credits)\n FROM {" . student::TABLE . "} innerclsenr\n JOIN {" . pmclass::TABLE . "} innercls ON innercls.id = innerclsenr.classid\n JOIN {" . course::TABLE . "} innercrs ON innercls.courseid = innercrs.id\n JOIN {" . curriculumcourse::TABLE . "} innercurcrs\n ON innercurcrs.courseid = innercrs.id\n WHERE innerclsenr.userid = usr.id\n AND innercurcrs.curriculumid = cur.id\n AND innerclsenr.completestatusid = :p_completestatus"; // Main query $sql = "SELECT {$columns},\n cur.id IS NULL AS isnull,\n crs.name AS course_name,\n clsenr.credits AS credits,\n clsenr.grade AS grade,\n clsenr.completetime AS date_completed,\n clsenr.completestatusid AS status,\n curass.timeexpired AS expires,\n usr.firstname AS firstname,\n usr.lastname AS lastname,\n cur.reqcredits AS reqcnt,\n ({$numcomplete_subquery}) AS acqcnt\n FROM {" . course::TABLE . "} crs\n JOIN {" . pmclass::TABLE . "} cls\n ON cls.courseid=crs.id\n JOIN {" . student::TABLE . "} clsenr\n ON clsenr.classid=cls.id\n JOIN {" . user::TABLE . "} usr\n ON usr.id = clsenr.userid\n LEFT JOIN ({" . curriculumstudent::TABLE . "} curass\n JOIN {" . curriculum::TABLE . "} cur\n ON cur.id = curass.curriculumid\n JOIN {" . curriculumcourse::TABLE . "} curcrs\n ON curcrs.curriculumid = cur.id)\n ON curass.userid = usr.id\n AND curcrs.courseid = crs.id\n LEFT JOIN {" . coursecompletion::TABLE . "} crscomp\n ON crscomp.courseid = crs.id\n LEFT JOIN {" . GRDTABLE . "} grd\n ON grd.classid = cls.id\n AND grd.userid = usr.id\n AND grd.completionid = crscomp.id\n AND grd.locked = 1\n WHERE {$permissions_filter}\n "; return array($sql, $params); }
/** * Specifies the report title * * @param $export_format The desired export format for the headers * @return array - header entires */ function get_header_entries($export_format) { $header_objs = array(); if ($export_format == php_report::$EXPORT_FORMAT_CSV || $export_format == php_report::$EXPORT_FORMAT_EXCEL) { // Get courseclass filter values for class id $filter = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'class', $this->filter); if (!empty($filter) && is_array($filter) && !empty($filter[0]['value'])) { $pmclass = new pmclass($filter[0]['value']); $header_obj = new stdClass(); $header_obj->label = get_string('header_course', $this->lang_file); $class_obj = new stdClass(); $class_obj->name = $pmclass->course->name; $class_obj->idnumber = $pmclass->course->idnumber; $header_obj->value = get_string('header_crs_value', $this->lang_file, $class_obj); $header_obj->css_identifier = ''; $header_objs[] = $header_obj; $header_obj = new stdClass(); $header_obj->label = get_string('header_class', $this->lang_file); $header_obj->value = $pmclass->idnumber; $header_obj->css_identifier = ''; $header_objs[] = $header_obj; } } return $header_objs; }
/** * Specifies an SQL statement that will retrieve users and their cluster assignment info, class enrolments, * and resource info * * @param array $columns The list of columns automatically calculated * by get_select_columns() * @return string The report's main sql statement */ function get_report_sql($columns) { global $CFG, $CURMAN, $USER; require_once CURMAN_DIRLOCATION . '/lib/student.class.php'; $incomplete_status = STUSTATUS_NOTCOMPLETE; $cm_user_id = cm_get_crlmuserid($USER->id); $filter_array = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'userid', $this->filter); $filter_user_id = isset($filter_array[0]['value']) ? $filter_array[0]['value'] : 0; if ($filter_user_id == $cm_user_id && $this->execution_mode == php_report::EXECUTION_MODE_INTERACTIVE) { // always allow the user to see their own report but not necessarily schedule it $permissions_filter = 'TRUE'; } else { // obtain all course contexts where this user can view reports $contexts = get_contexts_by_capability_for_user('user', $this->access_capability, $this->userid); $permissions_filter = $contexts->sql_filter_for_context_level('crlmuser.id', 'user'); } //tracks progress used by this user $total_progress_subquery = "SELECT cls.id AS classid, stu.userid as userid, COUNT(*) AS numprogress, COUNT(clsgr.id) AS stucomplete\n FROM {$CURMAN->db->prefix_table(CRSCOMPTABLE)} comp\n JOIN {$CURMAN->db->prefix_table(CLSTABLE)} cls\n ON cls.courseid = comp.courseid\n LEFT JOIN {$CURMAN->db->prefix_table(STUTABLE)} stu\n ON stu.classid = cls.id\n LEFT JOIN {$CURMAN->db->prefix_table(GRDTABLE)} clsgr\n ON clsgr.classid = cls.id\n AND clsgr.userid = stu.userid\n AND clsgr.locked = 1\n AND clsgr.grade >= comp.completion_grade\n AND clsgr.completionid = comp.id\n GROUP BY cls.id, stu.userid\n "; //gets the pretest score for this user $pretest_query = $this->get_max_test_score_sql('_elis_course_pretest'); //gets the posttest score for this user $posttest_query = $this->get_max_test_score_sql('_elis_course_posttest'); //main query $sql = "SELECT {$columns},\n crs.id AS courseid,\n cls.starttimehour AS starttimehour,\n cls.starttimeminute AS starttimeminute,\n cls.endtimehour AS endtimehour,\n cls.endtimeminute AS endtimeminute\n FROM {$CURMAN->db->prefix_table(CLSTABLE)} cls\n JOIN {$CURMAN->db->prefix_table(STUTABLE)} enrol\n ON enrol.classid = cls.id\n JOIN {$CURMAN->db->prefix_table(USRTABLE)} crlmuser\n ON crlmuser.id = enrol.userid\n JOIN {$CFG->prefix}user user\n ON user.idnumber = crlmuser.idnumber\n JOIN {$CURMAN->db->prefix_table(CLSMOODLETABLE)} clsmdl\n ON clsmdl.classid = cls.id\n LEFT JOIN {$CURMAN->db->prefix_table(CRSTABLE)} crs\n ON crs.id = cls.courseid\n LEFT JOIN ({$pretest_query}) pretest\n ON pretest.classid = cls.id\n AND pretest.userid = crlmuser.id\n LEFT JOIN ({$posttest_query}) posttest\n ON posttest.classid = cls.id\n AND posttest.userid = crlmuser.id"; // add custom field joins if they exist if (isset($this->custom_joins) && is_array($this->custom_joins)) { foreach ($this->custom_joins as $custom_join) { $sql .= $custom_join; } } $sql .= " WHERE {$permissions_filter}"; return $sql; }
/** * Method that specifies fields to group the results by (header displayed when these fields change) * * @uses $DB * @return array List of objects containing grouping id, field names, display labels and sort order */ function get_grouping_fields() { global $DB; //field that is used to compare one record from the next $compare_field = $DB->sql_concat('user.lastname', "'_'", 'user.firstname', "'_'", 'user.id'); //field used to order for groupings $order_field = $DB->sql_concat('lastname', "'_'", 'firstname', "'_'", 'userid'); $cluster_label = get_string('grouping_cluster', 'rlreport_course_completion_by_cluster'); $cluster_grouping = new table_report_grouping('cluster', 'cluster.id', $cluster_label, 'ASC', array('cluster.name'), 'above', 'path'); $user_grouping_fields = array('user.idnumber AS useridnumber', 'user.firstname'); $user_grouping = new table_report_grouping('groupuseridnumber', $compare_field, '', 'ASC', $user_grouping_fields, 'below', $order_field); //these groupings will always be used $result = array($cluster_grouping, $user_grouping); //determine whether or not we should use the curriculum grouping $preferences = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'columns_curriculum', $this->filter); $show_curriculum = true; if (isset($preferences['0']['value'])) { $show_curriculum = $preferences['0']['value']; } if ($show_curriculum) { $curriculum_label = get_string('grouping_curriculum', 'rlreport_course_completion_by_cluster'); $result[] = new table_report_grouping('groupcurriculumid', 'curriculum.id', $curriculum_label, 'ASC', array(), 'below', 'curriculumname, curriculumid'); } return $result; }
/** * Specifies header summary data * representing curricula, date range, cluster and number of courses in report * * @return array A mapping of display names to values */ function get_header_entries() { //need to get start_date and end_date from report interface $cluster_display = ''; $curricula_display = ''; $course_count = $this->numrecs; if ($selected_cluster = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'cluster')) { $count = 0; foreach ($selected_cluster as $cluster) { if ($cluster_new = get_record(CLSTTABLE, 'id', $cluster['value'])) { if ($count > 0) { $cluster_display .= ' AND '; } $count++; if (!empty($cluster_new->display)) { $cluster_display .= $cluster_new->display; } else { $cluster_display .= $cluster_new->name; } } } } else { $cluster_display = get_string('header_all', 'rlreport_course_progress_summary'); } if ($selected_curricula = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'curr')) { //print_object($selected_curricula); $count = 0; foreach ($selected_curricula as $curricula) { if ($curricula = get_record('crlm_curriculum', 'id', $curricula['value'])) { if ($count > 0) { $curricula_display .= ' AND '; } $count++; $curricula_display .= $curricula->name; } } } else { $curricula_display = get_string('header_all', 'rlreport_course_progress_summary'); } // Get date filter parameters req'd for header title $sdate = !empty($this->startdate) ? $this->userdate($this->startdate, get_string('date_format', 'rlreport_resource_usage')) : get_string('present', 'rlreport_course_progress_summary'); $edate = !empty($this->enddate) ? $this->userdate($this->enddate, get_string('date_format', 'rlreport_resource_usage')) : get_string('present', 'rlreport_course_progress_summary'); if (empty($this->startdate) && empty($this->enddate)) { $date_range_display = get_string('header_all', 'rlreport_course_progress_summary'); } else { $date_range_display = "{$sdate} - {$edate}"; } $header_entries = array(); $curricula_header = $header_entries[] = new php_report_header_entry(get_string('header_curricula', 'rlreport_course_progress_summary'), $curricula_display, 'curricula'); $header_entries[] = new php_report_header_entry(get_string('header_date_range', 'rlreport_course_progress_summary'), $date_range_display, 'date_range'); $header_entries[] = new php_report_header_entry(get_string('header_organization', 'rlreport_course_progress_summary'), $cluster_display, 'organization'); $header_entries[] = new php_report_header_entry(get_string('header_course_count', 'rlreport_course_progress_summary'), $course_count, 'course_count'); return $header_entries; }
/** * Retrieves start and end settings from active filter (if exists) * and populates class properties: startdate and enddate * * @uses none * @param none * @return none */ function get_filter_values() { $start_enabled = php_report_filtering_get_active_filter_values($this->get_report_shortname(), sitewide_time_summary_report::datefilterid . '_sck', $this->filter); $start = 0; if (!empty($start_enabled) && is_array($start_enabled) && !empty($start_enabled[0]['value'])) { $start = php_report_filtering_get_active_filter_values($this->get_report_shortname(), sitewide_time_summary_report::datefilterid . '_sdt', $this->filter); } $end_enabled = php_report_filtering_get_active_filter_values($this->get_report_shortname(), sitewide_time_summary_report::datefilterid . '_eck', $this->filter); $end = 0; if (!empty($end_enabled) && is_array($end_enabled) && !empty($end_enabled[0]['value'])) { $end = php_report_filtering_get_active_filter_values($this->get_report_shortname(), sitewide_time_summary_report::datefilterid . '_edt', $this->filter); } $this->startdate = !empty($start) && is_array($start) ? $start[0]['value'] : 0; $this->enddate = !empty($end) && is_array($end) ? $end[0]['value'] : 0; //$this->err_dump($datefilter, 'get_filter_values(); $datefilter'); //error_log("sitewide_time_summary::get_filter_values() ... startdate={$this->startdate} enddate={$this->enddate}"); // Get segment filter settings $segfilter = php_report_filtering_get_active_filter_values($this->get_report_shortname(), sitewide_time_summary_report::segfilterid, $this->filter); //$this->err_dump($segfilter, '$segfilter'); $this->segment = sitewide_time_summary_report::defaultseg; if (!empty($segfilter) && is_array($segfilter)) { $this->segment = $segfilter[0]['value']; } }
function get_header_entries() { global $CFG, $CURMAN; $header_array = array(); // Add a course/class name if available $classid = 0; $cls_setting = php_report_filtering_get_active_filter_values($this->get_report_shortname(), 'classid', $this->filter); if (!empty($cls_setting[0]['value'])) { $classid = $cls_setting[0]['value']; $cmclass = new cmclass($classid); // Course name $header_obj = new stdClass(); $header_obj->label = get_string('header_course', $this->lang_file) . ':'; $header_obj->value = $cmclass->course->name; $header_obj->css_identifier = ''; $header_array[] = $header_obj; // Class name $header_obj = new stdClass(); $header_obj->label = get_string('header_class', $this->lang_file) . ':'; $header_obj->value = $cmclass->idnumber; $header_obj->css_identifier = ''; $header_array[] = $header_obj; } // If we are displaying a class, show date range and instructors if (!empty($classid)) { // Add dates if available if (!empty($cmclass)) { $startdate = $cmclass->startdate; $enddate = $cmclass->enddate; // Add start date if available if (!empty($startdate)) { $header_obj = new stdClass(); $header_obj->label = get_string('header_start_date', $this->lang_file) . ':'; $header_obj->value = $this->userdate($startdate, get_string('strftimedaydate')); $header_obj->css_identifier = ''; $header_array[] = $header_obj; } // Add end date if available if (!empty($enddate)) { $header_obj = new stdClass(); $header_obj->label = get_string('header_end_date', $this->lang_file) . ':'; $header_obj->value = $this->userdate($enddate, get_string('strftimedaydate')); $header_obj->css_identifier = ''; $header_array[] = $header_obj; } } // Add instructor names $instructor_records = instructor::get_instructors($classid); if (!empty($instructor_records)) { $instructors = ''; foreach ($instructor_records as $record) { $userpage = new usermanagementpage(array('id' => $record->id, 'action' => 'view')); $instructors .= '<span class="external_report_link"><a href="' . $userpage->get_url() . '">' . fullname($record) . '</a></span><br />'; } $header_obj = new stdClass(); $header_obj->label = get_string('header_instructors', $this->lang_file) . ':'; $header_obj->value = $instructors == '' ? 'Not Available' : $instructors; $header_obj->css_identifier = ''; $header_array[] = $header_obj; } } return $header_array; }