Skip to content

Commit

Permalink
Bug fixes and performance improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
intelliboard committed Nov 19, 2020
1 parent 975caf3 commit 7727616
Show file tree
Hide file tree
Showing 3 changed files with 141 additions and 19 deletions.
3 changes: 3 additions & 0 deletions classes/external_functions.php
Expand Up @@ -427,7 +427,10 @@ public function __construct()
'intellicart_vendors',
'report232',
'general_lms_data',
'get_enrollments_sessions_completions',
'report233',
'report234',
'get_feedback_items',
];
}
public function get_function($params = null)
Expand Down
2 changes: 1 addition & 1 deletion config.php
Expand Up @@ -31,4 +31,4 @@
$config['app_url_eu'] = 'https://eu-app.intelliboard.net/';
$config['app_url_au'] = 'https://au-app.intelliboard.net/';
$config['app_url_ca'] = 'https://ca-app.intelliboard.net/';
$config['app_url_cn'] = 'https://app-cn.intelliboard.net/';
$config['app_url_cn'] = 'https://app.intelliboard.cn/';
155 changes: 137 additions & 18 deletions externallib.php
Expand Up @@ -2379,7 +2379,7 @@ public function report21($params)
s.grademethod AS scorm_grade_method,
l.visits AS visits_on_course
{$sql_columns}
FROM {scorm} s
FROM {scorm} s
JOIN {course} c ON c.id = s.course
JOIN {modules} m ON m.name = 'scorm'
JOIN {course_modules} cm ON cm.module = m.id AND cm.instance = s.id
Expand Down Expand Up @@ -3445,7 +3445,7 @@ public function report40($params)
LEFT JOIN {user_lastaccess} ul ON ul.courseid = c.id AND ul.userid = u.id
LEFT JOIN {grade_items} gi ON gi.itemtype = 'course' AND gi.courseid = e.courseid
LEFT JOIN {grade_grades} g ON g.userid = u.id AND g.itemid = gi.id AND g.finalgrade IS NOT NULL
LEFT JOIN (SELECT MAX(t.id) AS id, t.userid,t.courseid
LEFT JOIN (SELECT MAX(t.id) AS id, t.userid,t.courseid
FROM
{local_intelliboard_tracking} t,
{local_intelliboard_logs} l
Expand Down Expand Up @@ -4721,11 +4721,14 @@ public function report83($params)
$sql_columns .= ", '0' AS timespend, '0' AS visits, '' AS last_access";
$sql_join = "";
} else {
$sql_columns .= ", l.timespend AS timespend, l.visits AS visits, l.last_access AS last_access";
$sql_columns .= ", l.timespend AS timespend, l.visits AS visits,
CASE WHEN l.last_access IS NULL THEN mla.timeaccess ELSE l.last_access END AS last_access";
$groupby .= ', l.timespend, l.visits, l.last_access';

$sql_mla_filter = "";
if ($params->custom == 3) { // filter by last access
$sql3 = ($params->timestart) ? "WHERE " . $this->get_filterdate_sql($params, 't1.lastaccess', false) : '';
$sql_mla_filter = ($params->timestart) ? " AND " . $this->get_filterdate_sql($params, 'mla.timeaccess', false) : '';
} elseif ($params->custom == 2) { // filter by time spent
$sql3 = "JOIN {local_intelliboard_logs} l1 ON l1.trackid = t1.id ";
$sql3 .= ($params->timestart) ? $this->get_filterdate_sql($params, 'l1.timepoint') : '';
Expand All @@ -4741,6 +4744,8 @@ public function report83($params)
$sql3
GROUP BY t1.courseid, t1.userid
) l ON l.userid = u.id AND l.courseid = c.id";
$sql_join .= "
JOIN {user_lastaccess} mla ON mla.userid = u.id AND mla.courseid = c.id $sql_mla_filter";
}

if ($params->custom == 1) { // filter by completed learners
Expand Down Expand Up @@ -9536,7 +9541,7 @@ function report139($params)

while ($userdata = $gui->next_user()) {
$user = $userdata->user;

if (!empty($users) && !in_array($user->id, $users)) {
continue;
}
Expand Down Expand Up @@ -15951,7 +15956,7 @@ public function analytic10($params){
LEFT JOIN {grade_grades} g ON g.itemid=gi.id AND g.userid != 2 AND g.rawgrade IS NOT NULL
$join_sql2
WHERE g.rawgrade IS NOT NULL $where $sql_vendor_filter1
GROUP BY grade,quiz_id
GROUP BY grade,quiz_id
", $this->params);
}

Expand Down Expand Up @@ -18492,7 +18497,7 @@ public function monitor33($params) {
}
public function monitor34($params) {
global $DB;

$sql_filter = $this->get_filterdate_sql($params, "m.starttime");
$sql_filter .= $this->get_teacher_sql($params, ["c.id" => "courses"]);
$sql_filter .= $this->get_filter_course_sql($params, "c.");
Expand Down Expand Up @@ -19905,7 +19910,7 @@ public function subaccount_assigned_users($params) {
$assign_cohorts = [];
$assign_categories = [];
$assign_fields = [];

foreach ( $assigns as $assign) {
if ($assign->type == 'users') {
$assign_users[] = (int) $assign->instance;
Expand All @@ -19922,7 +19927,7 @@ public function subaccount_assigned_users($params) {

if ($assign_fields) {
$sql_arr = array();

foreach ($assign_fields as $key=>$field) {
$elem = explode("|", $field);
$fieldid = (int) $elem[0];
Expand All @@ -19933,7 +19938,7 @@ public function subaccount_assigned_users($params) {
}

$sql_filter = " AND (".implode(") OR (", $sql_arr) .")";

if ($list = $DB->get_records_sql(
"SELECT DISTINCT userid FROM {user_info_data} WHERE data <> '' $sql_filter", $this->params
)) {
Expand Down Expand Up @@ -19965,7 +19970,7 @@ public function subaccount_assigned_users($params) {
$result = $DB->get_records_sql(
"SELECT distinct ra.userid
FROM {role_assignments} ra, {context} ctx
WHERE ctx.id = ra.contextid AND ctx.contextlevel = 50 AND
WHERE ctx.id = ra.contextid AND ctx.contextlevel = 50 AND
tx.instanceid IN ($assign_courses_list)",
$this->params
);
Expand Down Expand Up @@ -21187,7 +21192,7 @@ public function general_lms_data($params) {
return $DB->get_record_sql(
"SELECT (SELECT COUNT(*) FROM {course}) AS total_num_courses,
(SELECT COUNT(*) FROM {user}) AS total_num_users,
(SELECT COUNT(*) FROM {course_completions}) AS num_completed_learners,
(SELECT COUNT(*) FROM {course_completions} WHERE timecompleted > 0) AS num_completed_learners,
(SELECT COUNT(*) FROM {course} WHERE visible = 1) AS num_active_courses,
(SELECT COUNT(ue.id)
FROM {user_enrolments} ue
Expand All @@ -21210,9 +21215,9 @@ public function scorm_attempt_completion_state($scorm, $userid, $attempt, $compl
if ($completion == 1) {
return $completiondate ? true : false;
}

$result = true;

// Only check for existence of tracks and return false if completionstatusrequired or completionscorerequired
// this means that if only view is required we don't end up with a false state.
if ($scorm->completionstatusrequired !== null ||
Expand Down Expand Up @@ -21244,7 +21249,7 @@ public function scorm_attempt_completion_state($scorm, $userid, $attempt, $compl
",
array($scorm->id, $userid, $attempt)
);

if (!$tracks) {
return true;
}
Expand All @@ -21268,7 +21273,7 @@ public function scorm_attempt_completion_state($scorm, $userid, $attempt, $compl

// Check for status.
if ($scorm->completionstatusrequired !== null) {

// Get status.
$statuses = array_flip(scorm_status_options());
$nstatus = 0;
Expand All @@ -21283,7 +21288,7 @@ public function scorm_attempt_completion_state($scorm, $userid, $attempt, $compl
$nstatus = 1;
}
}

if (!empty($scorm->completionstatusallscos)) {
// Iterate over all scos and make sure each has a lesson_status.
$scos = $DB->get_records('scorm_scoes', array('scorm' => $scorm->id, 'scormtype' => 'sco'));
Expand Down Expand Up @@ -21314,13 +21319,13 @@ public function scorm_attempt_completion_state($scorm, $userid, $attempt, $compl
if ($completiongradeitemnumber != null && !$attemptscore > 0) {
$result = false;
}

// Check for score.
if ($scorm->completionscorerequired !== null && $scorm->completionscorerequired > $attemptscore) {
$result = false;
}
}

return $result;
}

Expand Down Expand Up @@ -21351,6 +21356,52 @@ public function prepare_extra_columns($params, $data) {
return $data;
}

public function get_enrollments_sessions_completions($params)
{
global $DB, $CFG;

$groupfield = DBHelper::group_by_date_val('monthyear', 'l.timepoint');
$groupfield1 = DBHelper::group_by_date_val('monthyear', 'ue.timecreated');
$groupfield2 = DBHelper::group_by_date_val('monthyear', 'timecompleted');

$data = new stdClass();

if ($CFG->dbtype == 'mysqli' && !$params->sizemode) {
$sql_cache = ' SQL_NO_CACHE ';
} else {
$sql_cache = '';
}

$data->sessions = $DB->get_records_sql(
"SELECT {$sql_cache} MIN(l.timepoint) AS timepoint, {$groupfield} AS group_time,
COUNT(DISTINCT t.userid) AS pointval
FROM {local_intelliboard_logs} l, {local_intelliboard_tracking} t
WHERE l.trackid = t.id
GROUP BY 2",
$this->params
);

$data->enrolments = $DB->get_records_sql(
"SELECT {$sql_cache} MIN(ue.timecreated) AS timepoint, {$groupfield1} AS group_time,
COUNT(ue.userid) AS pointval
FROM {user_enrolments} ue
JOIN {enrol} e ON e.id = ue.enrolid
GROUP BY 2",
$this->params
);

$data->completions = $DB->get_records_sql(
"SELECT $sql_cache MIN(timecompleted) AS timepoint, {$groupfield2} AS group_time,
COUNT(userid) AS pointval
FROM {course_completions}
WHERE timecompleted > 0
GROUP BY 2",
$this->params
);

return $data;
}

public function report233($params)
{
global $CFG;
Expand Down Expand Up @@ -21447,4 +21498,72 @@ public function report233($params)
$params
);
}

public function get_feedback_items($params)
{
global $DB;
if (!$params->courseid) {
return [];
}
$sql_filter = $this->get_filter_in_sql($params->courseid, 'mf.course');
return $DB->get_records_sql("SELECT mfi.* FROM {feedback} AS mf
JOIN {course} c ON c.id = mf.course
JOIN {feedback_item} AS mfi ON mfi.feedback = mf.id
WHERE mf.id > 0
{$sql_filter}
ORDER BY mfi.id", $this->params);
}

public function report234($params)
{
global $CFG;

$feedback_items = $this->get_feedback_items($params);
$columns = array(
"u.firstname",
"u.lastname",
"u.email"
);

$sql_columns = array(
"u.id",
"u.firstname",
"u.lastname",
"u.email"
);
if ($feedback_items) {
foreach ($feedback_items as $item) {
$sql_columns[] = "
( SELECT value
FROM {feedback_value} mfv
LEFT JOIN {feedback_completed} mfc ON mfc.id = mfv.completed
WHERE mfv.item = {$item->id} AND mfc.userid = u.id
) as question_{$item->id}";
}
}

$sql_columns = implode(", ", $sql_columns);

$sql_having = $this->get_filter_sql($params, $columns, true);
$sql_order = $this->get_order_sql($params, $columns);
$sql_filter = $this->get_teacher_sql($params, ["u.id" => "users", "c.id" => "courses"]);
$sql_filter .= $this->get_filter_in_sql($params->courseid, "mf.course");
$sql_filter .= $this->get_filterdate_sql($params, "mfc.timemodified");
$sql_filter .= $this->get_filter_user_sql($params, "u.");
$sql_filter .= $this->get_filter_course_sql($params, "c.");
$sql_join = $this->get_suspended_sql($params);
$sql_columns_ext = $this->get_columns($params, []);

return $this->get_report_data(
"SELECT {$sql_columns} {$sql_columns_ext}
FROM {feedback} AS mf
JOIN {feedback_completed} mfc ON mfc.feedback = mf.id
JOIN {user} u ON mfc.userid = u.id
JOIN {course} c ON c.id = mf.course
{$sql_join}
WHERE mf.id > 0 {$sql_filter} GROUP BY u.id {$sql_having} {$sql_order}",
$this->params,
true
);
}
}

0 comments on commit 7727616

Please sign in to comment.