/** * Takes a record and transforms it into an appropriate format * This method is set up as a hook to be implented by actual report class * * @param stdClass $record The current report record * @param string $export_format The format being used to render the report * * @return stdClass The reformatted record */ function transform_record($record, $export_format) { if ($export_format != php_report::$EXPORT_FORMAT_CSV && $export_format != php_report::$EXPORT_FORMAT_EXCEL) { $user = new stdClass(); $user->firstname = $record->firstname; $user->lastname = $record->r_student; $record->r_student = php_report::fullname($user); } if (empty($record->r_elements)) { $record->r_elements = '0'; $record->r_percent = '0'; } else { //$percentage = round($record->r_complete / $record->r_elements * 10000) / 100; $percentage = round($record->r_percent / $record->r_elements * 10000) / 100; $percentage = $percentage > 100 ? 100 : $percentage; $record->r_percent = $percentage; } if ($export_format != php_report::$EXPORT_FORMAT_CSV) { $record->r_percent .= get_string('percent_symbol', $this->lang_file); } if (empty($record->r_graded)) { $record->r_graded = '0'; } if (empty($record->r_total_elements)) { $record->r_total_elements = '0'; } $secs_in_hour = 3600; if (!empty($record->r_timespent)) { if ($record->r_timespent > 0 && $record->r_timespent < $secs_in_hour) { $timespent = 1; $record->r_timespent = $export_format == php_report::$EXPORT_FORMAT_HTML ? '<1' : '1'; } else { $timespent = floor($record->r_timespent / $secs_in_hour); $record->r_timespent = $timespent; } } else { $timespent = 0; $record->r_timespent = "0"; } if ($export_format != php_report::$EXPORT_FORMAT_CSV) { $record->r_timespent .= ' ' . get_string($timespent == 1 ? 'hour' : 'hours', $this->lang_file); } // ELIS-4916: now using ELIS grade! if (!empty($record->elisgrade)) { $record->r_total_grade = pm_display_grade($record->elisgrade); if (is_numeric($record->r_total_grade) && $export_format != php_report::$EXPORT_FORMAT_CSV) { $record->r_total_grade .= get_string('percent_symbol', $this->lang_file); } } else { $record->r_total_grade = get_string('na', $this->lang_file); } $record->r_status = $record->r_status == 1 ? get_string('complete', $this->lang_file) : get_string('incomplete', $this->lang_file); $record->curriculum_name = $record->curriculum_name == '' ? get_string('na', $this->lang_file) : $record->curriculum_name; return $record; }
/** * Takes a record and transforms it into an appropriate format * This method is set up as a hook to be implented by actual report class * * @param stdClass $record The current report record * @param string $export_format The format being used to render the report * @uses $CFG * @return stdClass The reformatted record */ function transform_record($record, $export_format) { global $CFG; //is this a required course? if ($record->curriculumid === NULL) { //not part of a curriculum $record->required = get_string('na', 'rlreport_course_completion_by_cluster'); } else { if ($record->required == 1) { $record->required = get_string('required_yes', 'rlreport_course_completion_by_cluster'); } else { $record->required = get_string('required_no', 'rlreport_course_completion_by_cluster'); } } //make sure we want to display this column if (property_exists($record, 'completestatusid')) { if ($record->completestatusid === NULL) { //not enrolled in the class $record->completestatusid = get_string('stustatus_notenrolled', 'rlreport_course_completion_by_cluster'); } else { if ($record->completestatusid == STUSTATUS_NOTCOMPLETE) { $record->completestatusid = get_string('stustatus_notcomplete', 'rlreport_course_completion_by_cluster'); } else { if ($record->completestatusid == STUSTATUS_PASSED) { //flag the class enrolment as passed and show completion date $a = $this->format_date($record->enrolcompletetime); $record->completestatusid = get_string('stustatus_passed', 'rlreport_course_completion_by_cluster', $a); } else { //flag the class enrolment as failed and show completion date $a = $this->format_date($record->enrolcompletetime); $record->completestatusid = get_string('stustatus_failed', 'rlreport_course_completion_by_cluster', $a); } } } } //class grade if ($record->grade === NULL) { //not enrolled $record->grade = get_string('na', 'rlreport_course_completion_by_cluster'); } else { //format the grade value $record->grade = get_string($export_format == php_report::$EXPORT_FORMAT_CSV ? 'formatted_grade_csv' : 'formatted_grade', 'rlreport_course_completion_by_cluster', pm_display_grade($record->grade)); } if (isset($record->numcomplete)) { $record->numcomplete = get_string('numcomplete_tally', 'rlreport_course_completion_by_cluster', $record); } return $record; }
/** * Convert a listing of non-program courses to a data table * * @param array $classes A listing of table entries for non-program courses * @return object the table that can be used to display this information */ function get_dashboard_nonprogram_table($classes) { global $CFG; $status_mapping = array(STUSTATUS_PASSED => get_string('passed', 'local_elisprogram'), STUSTATUS_FAILED => get_string('failed', 'local_elisprogram'), STUSTATUS_NOTCOMPLETE => get_string('n_completed', 'local_elisprogram')); $table = new html_table(); $table->head = array(get_string('course', 'local_elisprogram'), get_string('class', 'local_elisprogram'), get_string('score', 'local_elisprogram'), get_string('student_status', 'local_elisprogram'), get_string('date', 'local_elisprogram')); $table->data = array(); if ($classes != false) { //have one or more classes foreach ($classes as $class) { if ($mdlcrs = moodle_get_course($class->classid)) { $coursename = '<a href="' . $CFG->wwwroot . '/course/view.php?id=' . $mdlcrs . '">' . $class->coursename . '</a>'; } else { $coursename = $class->coursename; } $table->data[] = array($coursename, $class->idnumber, pm_display_grade($class->grade), $status_mapping[$class->completestatusid], $class->completestatusid == STUSTATUS_PASSED && !empty($class->completetime) ? userdate($class->completetime, get_string('pm_date_format', 'local_elisprogram')) : get_string('na', 'local_elisprogram')); } } return $table; }
/** * Method to test pm_display_grade() * * @param string|float|int $inval Input value to be passed to pm_display_grade() * @param string $expected The expected output from pm_display_grade() for input value * @dataProvider pmdisplaygrade_data */ public function testpmdisplaygrade($inval, $expected) { $actual = pm_display_grade($inval); $this->assertTrue($expected === (string) $actual); }
/** * Takes a record and transforms it into an appropriate format * This method is set up as a hook to be implented by actual report class * * @param stdClass $record The current report record * @param string $export_format The format being used to render the report * @uses $DB * @return stdClass The reformatted record */ function transform_record($record, $export_format) { global $DB; $record->startdate = $record->startdate == 0 ? get_string('na', $this->lang_file) : $this->pmclassdate($record, 'start'); $today = strtotime(date('Y-m-d')); if ($record->enddate > $today) { $record->enddate = get_string('transform_column_in_progress', $this->lang_file); } else { $record->enddate = $record->enddate == 0 ? get_string('na', $this->lang_file) : $this->pmclassdate($record, 'end'); } //make sure this is set to something so that the horizontal bar graph doesn't disappear if (empty($record->stucompletedprogress)) { $record->stucompletedprogress = 0; } $a = new stdClass(); if (isset($record->stucompletedprogress)) { $a->value = $record->stucompletedprogress; $a->total = $record->numprogress; } else { $a->value = 0; $a->total = 0; } $record->completedprogress = get_string('of', $this->lang_file, $a); if (empty($record->numresources)) { $record->numresources = 0; } if ($this->preposttest_columns) { if (!empty($record->pretestscore)) { $record->pretestscore = pm_display_grade($record->pretestscore); if ($export_format != php_report::$EXPORT_FORMAT_CSV) { $record->pretestscore .= get_string('percent_symbol', $this->lang_file); } } else { $record->pretestscore = get_string('no_test_symbol', $this->lang_file); } if (!empty($record->posttestscore)) { $record->posttestscore = pm_display_grade($record->posttestscore); if ($export_format != php_report::$EXPORT_FORMAT_CSV) { $record->posttestscore .= get_string('percent_symbol', $this->lang_file); } } else { $record->posttestscore = get_string('no_test_symbol', $this->lang_file); } } if ($this->los_columns) { $los = $DB->get_records(coursecompletion::TABLE, array('courseid' => $record->courseid), '', 'id, name'); $fid = 1; foreach ($los as $lo) { $elem = "lo{$fid}"; $lograde = $DB->get_field(student_grade::TABLE, 'grade', array('userid' => $record->userid, 'classid' => $record->classid, 'completionid' => $lo->id)); // TBD: locked? if (!is_numeric($lograde)) { $lograde = '-'; // TBD } $record->{$elem} = $lo->name . ': ' . pm_display_grade($lograde); if (is_numeric($lograde) && $export_format != php_report::$EXPORT_FORMAT_CSV) { $record->{$elem} .= get_string('percent_symbol', $this->lang_file); } //error_log("ICPR::xform_rec(): record->{$elem} => {$record->$elem}"); ++$fid; } } if ($this->totalscore_column) { $record->elisgrade = pm_display_grade($record->elisgrade); if (is_numeric($record->elisgrade) && $export_format != php_report::$EXPORT_FORMAT_CSV) { $record->elisgrade .= get_string('percent_symbol', $this->lang_file); } } if (empty($record->numposts)) { $record->numposts = 0; } $record->enrol_status = empty($record->enrol_status) ? get_string('grouping_course_in_progress', $this->lang_file) : get_string('grouping_course_complete', $this->lang_file); // Default values for custom fields IF not set foreach ($this->field_default as $key => $value) { // error_log("ICPR:transform_record(), checking default for {$key} => {$value}"); if (!isset($record->{$key})) { $record->{$key} = $this->format_default_data($value); } } return $record; }
/** * Takes a summary row record and transoforms it into an appropriate format * This method is set up as a hook to be implented by actual report class * * @return stdClass The reformatted record */ function transform_column_summary_record($record) { //calculate the percentage of completion elements satisfied if ($record->percentcomplete == NULL) { $record->percentcomplete = get_string('na', 'rlreport_course_completion_gas_gauge'); } else { $record->percentcomplete = number_format($record->percentcomplete, 1); } //format the Moodle gradebook course score if ($record->score === NULL) { $record->score = get_string('na', 'rlreport_course_completion_gas_gauge'); } else { $record->score = pm_display_grade($record->score); // TBD: NO $export_format passed to append '%' } return $record; }
/** * Formats enrolment data for display in the table post-edit. * @param array $enroldata The incoming enrolment data * @return array The formatted enrolment data. */ protected function format_enroldata_for_display($enroldata) { // Locked 0,1 => no, yes. if (isset($enroldata['locked'])) { $enroldata['locked'] = $enroldata['locked'] == 1 ? get_string('yes', 'moodle') : get_string('no', 'moodle'); } // Format enrolment time. if (isset($enroldata['enrolmenttime'])) { $enroldata['enrolmenttime'] = ds_process_displaytime($enroldata['enrolmenttime']); } // Format completion time. if (isset($enroldata['completetime'])) { $statusiscomplete = isset($enroldata['completestatusid']) && $enroldata['completestatusid'] != STUSTATUS_NOTCOMPLETE ? true : false; $enroldata['completetime'] = $statusiscomplete === true ? ds_process_displaytime($enroldata['completetime']) : '-'; } // Completion status ints to labels. if (isset($enroldata['completestatusid'])) { $choices = array(STUSTATUS_NOTCOMPLETE => get_string('n_completed', 'local_elisprogram'), STUSTATUS_PASSED => get_string('passed', 'local_elisprogram'), STUSTATUS_FAILED => get_string('failed', 'local_elisprogram')); $enroldata['completestatusid'] = $choices[$enroldata['completestatusid']]; } if (isset($enroldata['grade'])) { $enroldata['grade'] = pm_display_grade($enroldata['grade']); } if (isset($enroldata['credits'])) { $enroldata['credits'] = number_format($enroldata['credits'], 2); } return $enroldata; }
/** * Takes a record and transforms it into an appropriate format * This method is set up as a hook to be implented by actual report class * * @param stdClass $record The current report record * @param string $export_format The format being used to render the report * * @return stdClass The reformatted record */ function transform_record($record, $export_format) { static $init_column_width = 0; $record->curriculum_name = $record->curriculum_name == '' ? get_string('na', $this->lang_file) : $record->curriculum_name; $record->element = empty($record->element) ? get_string('none', $this->lang_file) : $record->element; $record->score = empty($record->score) ? get_string('na', $this->lang_file) : pm_display_grade($record->score) . ($export_format == php_report::$EXPORT_FORMAT_CSV ? '' : get_string('percent_symbol', $this->lang_file)); if (!$init_column_width && $export_format == php_report::$EXPORT_FORMAT_PDF) { // ELIS-2890: make column wide enough for column summary row width $init_column_width = 1; $record->score .= str_repeat(" ", 160); } return $record; }
/** * Formats various attributes for human consumption. * * Changes the locked int to yes/no, formated enrolment and completion times into date strings, converts completion status * to human-readable label. * * @param array $row An array for a single result. * @return array The transformed result. */ protected function results_row_transform(array $row) { $row = parent::results_row_transform($row); // Locked 0,1 => no, yes. if (isset($row['enrol_locked'])) { $row['enrol_locked'] = $row['enrol_locked'] == 1 ? get_string('yes', 'moodle') : get_string('no', 'moodle'); } // Format enrolment time. if (isset($row['enrol_enrolmenttime'])) { $row['enrol_enrolmenttime'] = ds_process_displaytime($row['enrol_enrolmenttime']); } // Format completion time. if (isset($row['enrol_completetime'])) { $statusiscomplete = isset($row['enrol_completestatusid']) && $row['enrol_completestatusid'] != STUSTATUS_NOTCOMPLETE ? true : false; $row['enrol_completetime'] = $statusiscomplete === true ? ds_process_displaytime($row['enrol_completetime']) : ''; } // Completion status ints to labels. if (isset($row['enrol_completestatusid'])) { $choices = array(STUSTATUS_NOTCOMPLETE => get_string('n_completed', 'local_elisprogram'), STUSTATUS_PASSED => get_string('passed', 'local_elisprogram'), STUSTATUS_FAILED => get_string('failed', 'local_elisprogram')); $row['enrol_completestatusid'] = $choices[$row['enrol_completestatusid']]; } if (isset($row['enrol_grade'])) { $row['enrol_grade'] = pm_display_grade($row['enrol_grade']); } return $row; }
/** * Takes a record and transform it into an appropriate format * This method is set up as a hook to be implented by actual report class * * @param stdClass $record The current report record * @param string $export_format The format being used to render the report * * @return stdClass The reformatted record */ function transform_record($record, $export_format) { $record->user_id = php_report::fullname($record); // start-end dates $sdate = cm_timestamp_to_date($record->startdate, STR_DATE_FORMAT); $edate = !empty($record->enddate) ? cm_timestamp_to_date($record->enddate, STR_DATE_FORMAT) : get_string('present', $this->langfile); $record->startdate = empty($record->startdate) && empty($record->enddate) ? get_string('na', $this->langfile) : "{$sdate} - {$edate}"; // completed date $record->completed = $record->status != STUSTATUS_NOTCOMPLETE && !empty($record->completed) ? cm_timestamp_to_date($record->completed, STR_DATE_FORMAT) : get_string('incomplete', $this->langfile); // status mapping $statusmap = array(STUSTATUS_NOTCOMPLETE => 'na', STUSTATUS_FAILED => 'status_failed', STUSTATUS_PASSED => 'status_passed'); $record->status = get_string($statusmap[$record->status], $this->langfile); if (!empty($record->grade)) { $record->grade = pm_display_grade($record->grade); if ($export_format != php_report::$EXPORT_FORMAT_CSV) { $record->grade .= get_string('percent_symbol', $this->langfile); } } else { $record->grade = get_string('na', $this->langfile); } return $record; }