MDL-57791 analytics: Add builtin models during upgrade

This commit is contained in:
David Monllao
2017-07-24 08:37:01 +02:00
parent 08015e1895
commit e709e54435
5 changed files with 130 additions and 56 deletions
+73
View File
@@ -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.
*
+34
View File
@@ -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.
*
+20
View File
@@ -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
View File
@@ -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();
}
+2
View File
@@ -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);
}