From 0efc7095e3936faf78dd22f4f37a6c0faf24538b Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Tue, 29 Sep 2020 08:57:56 +0100 Subject: [PATCH] MDL-66392 analytics: make model output directory default to empty. Falling back to path within $CFG->dataroot/models. --- admin/settings/analytics.php | 11 +++-------- analytics/classes/model.php | 15 ++++++++++++--- lang/en/analytics.php | 1 + lib/db/upgrade.php | 11 +++++++++++ version.php | 2 +- 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/admin/settings/analytics.php b/admin/settings/analytics.php index a7222444e5b..30b6a2260c4 100644 --- a/admin/settings/analytics.php +++ b/admin/settings/analytics.php @@ -131,15 +131,10 @@ if ($hassiteconfig && \core_analytics\manager::is_analytics_enabled()) { $timesplittingdefaults, $timesplittingoptions) ); - // Predictions processor output dir. - $defaultmodeloutputdir = rtrim($CFG->dataroot, '/') . DIRECTORY_SEPARATOR . 'models'; - if (empty(get_config('analytics', 'modeloutputdir')) && !file_exists($defaultmodeloutputdir) && - is_writable($defaultmodeloutputdir)) { - // Automatically create the dir for them so users don't see the invalid value red cross. - mkdir($defaultmodeloutputdir, $CFG->directorypermissions, true); - } + // Predictions processor output dir - specify default in setting description (used if left blank). + $defaultmodeloutputdir = \core_analytics\model::default_output_dir(); $settings->add(new admin_setting_configdirectory('analytics/modeloutputdir', new lang_string('modeloutputdir', 'analytics'), - new lang_string('modeloutputdirinfo', 'analytics'), $defaultmodeloutputdir)); + new lang_string('modeloutputdirwithdefaultinfo', 'analytics', $defaultmodeloutputdir), '')); // Disable web interface evaluation and get predictions. $settings->add(new admin_setting_configcheckbox('analytics/onlycli', new lang_string('onlycli', 'analytics'), diff --git a/analytics/classes/model.php b/analytics/classes/model.php index 5385c29fc3b..5fc63d4b166 100644 --- a/analytics/classes/model.php +++ b/analytics/classes/model.php @@ -1492,6 +1492,17 @@ class model { $prediction->get_prediction_data()->contextid, $prediction->get_sample_data()); } + /** + * Returns the default output directory for prediction processors + * + * @return string + */ + public static function default_output_dir(): string { + global $CFG; + + return $CFG->dataroot . DIRECTORY_SEPARATOR . 'models'; + } + /** * Returns the output directory for prediction processors. * @@ -1506,8 +1517,6 @@ class model { * @return string */ public function get_output_dir($subdirs = array(), $onlymodelid = false) { - global $CFG; - $subdirstr = ''; foreach ($subdirs as $subdir) { $subdirstr .= DIRECTORY_SEPARATOR . $subdir; @@ -1516,7 +1525,7 @@ class model { $outputdir = get_config('analytics', 'modeloutputdir'); if (empty($outputdir)) { // Apply default value. - $outputdir = rtrim($CFG->dataroot, '/') . DIRECTORY_SEPARATOR . 'models'; + $outputdir = self::default_output_dir(); } // Append model id. diff --git a/lang/en/analytics.php b/lang/en/analytics.php index 17f165464df..0fc4a3cc653 100644 --- a/lang/en/analytics.php +++ b/lang/en/analytics.php @@ -94,6 +94,7 @@ $string['modeinstructionblendedhybrid'] = 'Blended or hybrid'; $string['modeinstructionfullyonline'] = 'Fully online'; $string['modeloutputdir'] = 'Models output directory'; $string['modeloutputdirinfo'] = 'Directory where prediction processors store all evaluation info. Useful for debugging and research.'; +$string['modeloutputdirwithdefaultinfo'] = 'Directory where prediction processors store all evaluation info. Useful for debugging and research. If empty, then \'{$a}\' will be used as default.'; $string['modeltimelimit'] = 'Analysis time limit per model'; $string['modeltimelimitinfo'] = 'This setting limits the time each model spends analysing the site contents.'; $string['neutral'] = 'Neutral'; diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 5efbefe35d5..5bce1188381 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -2622,5 +2622,16 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2020061502.10); } + if ($oldversion < 2020061502.12) { + // Reset analytics model output dir if it's the default value. + $modeloutputdir = get_config('analytics', 'modeloutputdir'); + if (strcasecmp($modeloutputdir, $CFG->dataroot . DIRECTORY_SEPARATOR . 'models') == 0) { + set_config('modeloutputdir', '', 'analytics'); + } + + // Main savepoint reached. + upgrade_main_savepoint(true, 2020061502.12); + } + return true; } diff --git a/version.php b/version.php index 185a5bf8fe5..2d33a63131e 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2020061502.11; // 20200615 = branching date YYYYMMDD - do not modify! +$version = 2020061502.12; // 20200615 = branching date YYYYMMDD - do not modify! // RR = release increments - 00 in DEV branches. // .XX = incremental changes. $release = '3.9.2+ (Build: 20201021)'; // Human-friendly version name -- 2.26.2