diff --git a/analytics/classes/model.php b/analytics/classes/model.php index cfe614b74aa..41345ae4dba 100644 --- a/analytics/classes/model.php +++ b/analytics/classes/model.php @@ -1348,6 +1348,30 @@ class model { return [$current, $predictions]; } + /** + * Returns the actions executed by users on the predictions. + * + * @param \context|null $context + * @return \moodle_recordset + */ + public function get_prediction_actions(?\context $context): \moodle_recordset { + global $DB; + + $sql = "SELECT apa.id, apa.predictionid, apa.userid, apa.actionname, apa.timecreated, + ap.contextid, ap.sampleid, ap.rangeindex, ap.prediction, ap.predictionscore + FROM {analytics_prediction_actions} apa + JOIN {analytics_predictions} ap ON ap.id = apa.predictionid + WHERE ap.modelid = :modelid"; + $params = ['modelid' => $this->model->id]; + + if ($context) { + $sql .= " AND ap.contextid = :contextid"; + $params['contextid'] = $context->id; + } + + return $DB->get_recordset_sql($sql, $params); + } + /** * Returns the sample data of a prediction. * diff --git a/analytics/tests/prediction_actions_test.php b/analytics/tests/prediction_actions_test.php index 3acd0a16bdf..508d1f9c0cd 100644 --- a/analytics/tests/prediction_actions_test.php +++ b/analytics/tests/prediction_actions_test.php @@ -96,11 +96,17 @@ class analytics_prediction_actions_testcase extends advanced_testcase { $prediction = reset($predictions); $prediction->action_executed(\core_analytics\prediction::ACTION_FIXED, $this->model->get_target()); + $recordset = $this->model->get_prediction_actions($this->context); + $this->assertCount(1, $recordset); + $recordset->close(); $this->assertEquals(1, $DB->count_records('analytics_prediction_actions')); $action = $DB->get_record('analytics_prediction_actions', array('userid' => $this->teacher2->id)); $this->assertEquals(\core_analytics\prediction::ACTION_FIXED, $action->actionname); $prediction->action_executed(\core_analytics\prediction::ACTION_NOT_USEFUL, $this->model->get_target()); + $recordset = $this->model->get_prediction_actions($this->context); + $this->assertCount(2, $recordset); + $recordset->close(); $this->assertEquals(2, $DB->count_records('analytics_prediction_actions')); } @@ -125,6 +131,10 @@ class analytics_prediction_actions_testcase extends advanced_testcase { $prediction = reset($predictions); $prediction->action_executed(\core_analytics\prediction::ACTION_FIXED, $this->model->get_target()); + $recordset = $this->model->get_prediction_actions($this->context); + $this->assertCount(1, $recordset); + $recordset->close(); + list($ignored, $predictions) = $this->model->get_predictions($this->context, true); $this->assertCount(1, $predictions); list($ignored, $predictions) = $this->model->get_predictions($this->context, false); @@ -136,5 +146,9 @@ class analytics_prediction_actions_testcase extends advanced_testcase { $this->assertCount(2, $predictions); list($ignored, $predictions) = $this->model->get_predictions($this->context, false); $this->assertCount(2, $predictions); + + $recordset = $this->model->get_prediction_actions($this->context); + $this->assertCount(1, $recordset); + $recordset->close(); } }