/** * Perform initialization that should * be done at the beginning of the export * * @param int $targetstarttime The timestamp representing the theoretical * time when this task was meant to be run * @param int $lastruntime The last time the export was run * (required for incremental scheduled export) */ public function init($targetstarttime = 0, $lastruntime = 0) { global $CFG, $DB; require_once $CFG->dirroot . '/local/elisprogram/lib/setup.php'; require_once elispm::lib('data/user.class.php'); require_once elispm::lib('data/student.class.php'); require_once elispm::lib('data/pmclass.class.php'); require_once elispm::lib('data/course.class.php'); require_once elispm::lib('data/classmoodlecourse.class.php'); // Columns that are always displayed. $columns = array(get_string('header_firstname', 'dhexport_version1'), get_string('header_lastname', 'dhexport_version1'), get_string('header_username', 'dhexport_version1'), get_string('header_useridnumber', 'dhexport_version1'), get_string('header_courseidnumber', 'dhexport_version1'), get_string('header_startdate', 'dhexport_version1'), get_string('header_enddate', 'dhexport_version1'), get_string('header_status', 'dhexport_version1elis'), get_string('header_grade', 'dhexport_version1'), get_string('header_letter', 'dhexport_version1')); // Query parameters. $params = array(); // Track extra SQL and parameters needed for custom fields. $extra_joins = implode(" \n ", rlipexport_version1elis_extrafields::get_extra_joins()); $extra_select = implode(', ', rlipexport_version1elis_extrafields::get_extra_select()); if (!empty($extra_select)) { $extra_select = ', ' . $extra_select; } // Get columns. $columns = array_merge($columns, rlipexport_version1elis_extrafields::get_extra_columns()); // Add passed as completion status requirement. $params[] = student::STUSTATUS_PASSED; // Sql time condition. $time_condition = ''; // Determine if we're in incremental or non-incremental mode. $nonincremental = get_config('dhexport_version1elis', 'nonincremental'); if (empty($nonincremental)) { if ($this->manual) { // Manual export incremental mode. // Get string delta. $incrementaldelta = get_config('dhexport_version1elis', 'incrementaldelta'); // Convert to number of seconds. $numsecs = rlip_time_string_to_offset($incrementaldelta); // Add to query parameters. $params[] = time() - $numsecs; // Add query fragment. $time_condition = 'AND stu.completetime >= ?'; } else { // Scheduled export incremental mode. // Set up the query fragment and parameters. $params[] = $lastruntime; $time_condition = 'AND stu.completetime >= ?'; } } // Initialize our recordset to the core data. $sql = "SELECT u.id AS userid,\n u.firstname,\n u.lastname,\n u.username,\n u.idnumber,\n crs.idnumber AS crsidnumber,\n stu.enrolmenttime,\n stu.completetime,\n stu.grade,\n mdlcrs.id AS mdlcrsid\n {$extra_select}\n FROM {" . user::TABLE . "} u\n JOIN {" . student::TABLE . "} stu\n ON u.id = stu.userid\n JOIN {" . pmclass::TABLE . "} cls\n ON stu.classid = cls.id\n JOIN {" . course::TABLE . "} crs\n ON cls.courseid = crs.id\n LEFT JOIN {" . classmoodlecourse::TABLE . "} clsmdl\n ON cls.id = clsmdl.classid\n LEFT JOIN {course} mdlcrs\n ON clsmdl.moodlecourseid = mdlcrs.id\n {$extra_joins}\n WHERE stu.completestatusid = ?\n {$time_condition}\n ORDER BY u.idnumber ASC,\n crs.idnumber ASC,\n stu.completetime ASC,\n stu.grade DESC,\n cls.idnumber ASC,\n u.username ASC"; $this->recordset = $DB->get_recordset_sql($sql, $params); // Write out header. $this->fileplugin->write($columns); // Load string to prevent calling get_string for every record. $this->completestatusstring = get_string('completestatusstring', 'dhexport_version1elis'); }
/** * Test gettng all extra JOINs from all fieldsets with enabled fields. */ public function test_rlipexport_version1elis_extrafields_get_extra_joins() { $this->create_field_mapping('test', 'testfield'); $this->create_field_mapping('test', 'testfield3'); $this->create_field_mapping('test2', 'fieldtest2'); $this->create_field_mapping('test2', 'fieldtest4'); $extrajoins = rlipexport_version1elis_extrafields::get_extra_joins(); $expectedjoins = array('testfield', 'testfield3', 'fieldtest2', 'fieldtest4'); $this->assertEquals($expectedjoins, $extrajoins); }