MDL-57791 analytics: Add builtin models during upgrade
This commit is contained in:
@@ -383,6 +383,79 @@ class manager {
|
||||
return array($model, $prediction, $context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the models included with moodle core to the system.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function add_builtin_models() {
|
||||
|
||||
$target = \core_analytics\manager::get_target('\core\analytics\target\course_dropout');
|
||||
|
||||
// Community of inquiry indicators.
|
||||
$coiindicators = array(
|
||||
'\mod_assign\analytics\indicator\cognitive_depth',
|
||||
'\mod_assign\analytics\indicator\social_breadth',
|
||||
'\mod_book\analytics\indicator\cognitive_depth',
|
||||
'\mod_book\analytics\indicator\social_breadth',
|
||||
'\mod_chat\analytics\indicator\cognitive_depth',
|
||||
'\mod_chat\analytics\indicator\social_breadth',
|
||||
'\mod_choice\analytics\indicator\cognitive_depth',
|
||||
'\mod_choice\analytics\indicator\social_breadth',
|
||||
'\mod_data\analytics\indicator\cognitive_depth',
|
||||
'\mod_data\analytics\indicator\social_breadth',
|
||||
'\mod_feedback\analytics\indicator\cognitive_depth',
|
||||
'\mod_feedback\analytics\indicator\social_breadth',
|
||||
'\mod_folder\analytics\indicator\cognitive_depth',
|
||||
'\mod_folder\analytics\indicator\social_breadth',
|
||||
'\mod_forum\analytics\indicator\cognitive_depth',
|
||||
'\mod_forum\analytics\indicator\social_breadth',
|
||||
'\mod_glossary\analytics\indicator\cognitive_depth',
|
||||
'\mod_glossary\analytics\indicator\social_breadth',
|
||||
'\mod_imscp\analytics\indicator\cognitive_depth',
|
||||
'\mod_imscp\analytics\indicator\social_breadth',
|
||||
'\mod_label\analytics\indicator\cognitive_depth',
|
||||
'\mod_label\analytics\indicator\social_breadth',
|
||||
'\mod_lesson\analytics\indicator\cognitive_depth',
|
||||
'\mod_lesson\analytics\indicator\social_breadth',
|
||||
'\mod_lti\analytics\indicator\cognitive_depth',
|
||||
'\mod_lti\analytics\indicator\social_breadth',
|
||||
'\mod_page\analytics\indicator\cognitive_depth',
|
||||
'\mod_page\analytics\indicator\social_breadth',
|
||||
'\mod_quiz\analytics\indicator\cognitive_depth',
|
||||
'\mod_quiz\analytics\indicator\social_breadth',
|
||||
'\mod_resource\analytics\indicator\cognitive_depth',
|
||||
'\mod_resource\analytics\indicator\social_breadth',
|
||||
'\mod_scorm\analytics\indicator\cognitive_depth',
|
||||
'\mod_scorm\analytics\indicator\social_breadth',
|
||||
'\mod_survey\analytics\indicator\cognitive_depth',
|
||||
'\mod_survey\analytics\indicator\social_breadth',
|
||||
'\mod_url\analytics\indicator\cognitive_depth',
|
||||
'\mod_url\analytics\indicator\social_breadth',
|
||||
'\mod_wiki\analytics\indicator\cognitive_depth',
|
||||
'\mod_wiki\analytics\indicator\social_breadth',
|
||||
'\mod_workshop\analytics\indicator\cognitive_depth',
|
||||
'\mod_workshop\analytics\indicator\social_breadth',
|
||||
);
|
||||
$indicators = array();
|
||||
foreach ($coiindicators as $coiindicator) {
|
||||
$indicator = \core_analytics\manager::get_indicator($coiindicator);
|
||||
$indicators[$indicator->get_id()] = $indicator;
|
||||
}
|
||||
if (!\core_analytics\model::exists($target, $indicators)) {
|
||||
$model = \core_analytics\model::create($target, $indicators);
|
||||
}
|
||||
|
||||
// No teaching model.
|
||||
$target = \core_analytics\manager::get_target('\core\analytics\target\no_teaching');
|
||||
$timesplittingmethod = '\core\analytics\time_splitting\single_range';
|
||||
$noteacher = \core_analytics\manager::get_indicator('\core_course\analytics\indicator\no_teacher');
|
||||
$indicators = array($noteacher->get_id() => $noteacher);
|
||||
if (!\core_analytics\model::exists($target, $indicators)) {
|
||||
\core_analytics\model::create($target, $indicators, $timesplittingmethod);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the provided element classes in the site.
|
||||
*
|
||||
|
||||
@@ -357,6 +357,40 @@ class model {
|
||||
return $model;
|
||||
}
|
||||
|
||||
/**
|
||||
* Does this model exist?
|
||||
*
|
||||
* If no indicators are provided it considers any model with the provided
|
||||
* target a match.
|
||||
*
|
||||
* @param \core_analytics\local\target\base $target
|
||||
* @param \core_analytics\local\indicator\base[]|false $indicators
|
||||
* @return bool
|
||||
*/
|
||||
public static function exists(\core_analytics\local\target\base $target, $indicators = false) {
|
||||
global $DB;
|
||||
|
||||
$existingmodels = $DB->get_records('analytics_models', array('target' => $target->get_id()));
|
||||
|
||||
if (!$indicators && $existingmodels) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$indicatorids = array_keys($indicators);
|
||||
sort($indicatorids);
|
||||
|
||||
foreach ($existingmodels as $modelobj) {
|
||||
$model = new \core_analytics\model($modelobj);
|
||||
$modelindicatorids = array_keys($model->get_indicators());
|
||||
sort($modelindicatorids);
|
||||
|
||||
if ($indicatorids === $modelindicatorids) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the model.
|
||||
*
|
||||
|
||||
@@ -138,7 +138,27 @@ class analytics_model_testcase extends advanced_testcase {
|
||||
sleep(1);
|
||||
$this->model->enable('\core\analytics\time_splitting\quarters');
|
||||
$this->assertNotEquals($originaluniqueid, $this->model->get_unique_id());
|
||||
}
|
||||
|
||||
/**
|
||||
* test_exists
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function test_exists() {
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
global $DB;
|
||||
|
||||
// 2 built-in models + the testing one.
|
||||
$this->assertCount(3, $DB->get_records('analytics_models'));
|
||||
|
||||
// No new models added if the builtin ones already exist.
|
||||
\core_analytics\manager::add_builtin_models();
|
||||
$this->assertCount(3, $DB->get_records('analytics_models'));
|
||||
|
||||
$target = \core_analytics\manager::get_target('\core\analytics\target\no_teaching');
|
||||
$this->assertTrue(\core_analytics\model::exists($target));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-56
@@ -321,60 +321,5 @@ function xmldb_main_install() {
|
||||
make_competence_scale();
|
||||
|
||||
// Add built-in prediction models.
|
||||
$target = \core_analytics\manager::get_target('\core\analytics\target\course_dropout');
|
||||
|
||||
// Community of inquiry indicators.
|
||||
$indicators = array(
|
||||
'\mod_assign\analytics\indicator\cognitive_depth',
|
||||
'\mod_assign\analytics\indicator\social_breadth',
|
||||
'\mod_book\analytics\indicator\cognitive_depth',
|
||||
'\mod_book\analytics\indicator\social_breadth',
|
||||
'\mod_chat\analytics\indicator\cognitive_depth',
|
||||
'\mod_chat\analytics\indicator\social_breadth',
|
||||
'\mod_choice\analytics\indicator\cognitive_depth',
|
||||
'\mod_choice\analytics\indicator\social_breadth',
|
||||
'\mod_data\analytics\indicator\cognitive_depth',
|
||||
'\mod_data\analytics\indicator\social_breadth',
|
||||
'\mod_feedback\analytics\indicator\cognitive_depth',
|
||||
'\mod_feedback\analytics\indicator\social_breadth',
|
||||
'\mod_folder\analytics\indicator\cognitive_depth',
|
||||
'\mod_folder\analytics\indicator\social_breadth',
|
||||
'\mod_forum\analytics\indicator\cognitive_depth',
|
||||
'\mod_forum\analytics\indicator\social_breadth',
|
||||
'\mod_glossary\analytics\indicator\cognitive_depth',
|
||||
'\mod_glossary\analytics\indicator\social_breadth',
|
||||
'\mod_imscp\analytics\indicator\cognitive_depth',
|
||||
'\mod_imscp\analytics\indicator\social_breadth',
|
||||
'\mod_label\analytics\indicator\cognitive_depth',
|
||||
'\mod_label\analytics\indicator\social_breadth',
|
||||
'\mod_lesson\analytics\indicator\cognitive_depth',
|
||||
'\mod_lesson\analytics\indicator\social_breadth',
|
||||
'\mod_lti\analytics\indicator\cognitive_depth',
|
||||
'\mod_lti\analytics\indicator\social_breadth',
|
||||
'\mod_page\analytics\indicator\cognitive_depth',
|
||||
'\mod_page\analytics\indicator\social_breadth',
|
||||
'\mod_quiz\analytics\indicator\cognitive_depth',
|
||||
'\mod_quiz\analytics\indicator\social_breadth',
|
||||
'\mod_resource\analytics\indicator\cognitive_depth',
|
||||
'\mod_resource\analytics\indicator\social_breadth',
|
||||
'\mod_scorm\analytics\indicator\cognitive_depth',
|
||||
'\mod_scorm\analytics\indicator\social_breadth',
|
||||
'\mod_survey\analytics\indicator\cognitive_depth',
|
||||
'\mod_survey\analytics\indicator\social_breadth',
|
||||
'\mod_url\analytics\indicator\cognitive_depth',
|
||||
'\mod_url\analytics\indicator\social_breadth',
|
||||
'\mod_wiki\analytics\indicator\cognitive_depth',
|
||||
'\mod_wiki\analytics\indicator\social_breadth',
|
||||
'\mod_workshop\analytics\indicator\cognitive_depth',
|
||||
'\mod_workshop\analytics\indicator\social_breadth',
|
||||
);
|
||||
array_walk($indicators, function(&$indicator) {
|
||||
$indicator = \core_analytics\manager::get_indicator($indicator);
|
||||
});
|
||||
$model = \core_analytics\model::create($target, array());
|
||||
|
||||
$target = \core_analytics\manager::get_target('\core\analytics\target\no_teaching');
|
||||
$timesplittingmethod = '\core\analytics\time_splitting\single_range';
|
||||
$noteacher = \core_analytics\manager::get_indicator('\core_course\analytics\indicator\no_teacher');
|
||||
\core_analytics\model::create($target, array($noteacher->get_id() => $noteacher), $timesplittingmethod);
|
||||
\core_analytics\manager::add_builtin_models();
|
||||
}
|
||||
|
||||
@@ -2136,6 +2136,8 @@ function xmldb_main_upgrade($oldversion) {
|
||||
$dbman->create_table($table);
|
||||
}
|
||||
|
||||
\core_analytics\manager::add_builtin_models();
|
||||
|
||||
// Main savepoint reached.
|
||||
upgrade_main_savepoint(true, 2017072000.01);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user