MDL-57791 analytics: Set logstore during install
authorDavid Monllao <david.monllao@gmail.com>
Tue, 25 Jul 2017 09:04:47 +0000 (11:04 +0200)
committerDavid Monllao <david.monllao@gmail.com>
Tue, 25 Jul 2017 09:05:03 +0000 (11:05 +0200)
get_analytics_logstore updated to fix an edge case.

admin/settings/analytics.php
analytics/classes/manager.php

index 247ae74..a1ac0b1 100644 (file)
@@ -56,6 +56,20 @@ if ($hassiteconfig) {
             }
             $options[$plugin] = $reader->get_name();
         }
+
+        if (empty($defaultreader)) {
+            // We fall here during initial site installation because log stores are not
+            // enabled until admin/tool/log/db/install.php is executed and get_readers
+            // return nothing.
+
+            if ($enabledlogstores = get_config('tool_log', 'enabled_stores')) {
+                $enabledlogstores = explode(',', $enabledlogstores);
+                $defaultreader = reset($enabledlogstores);
+
+                // No need to set the correct name, just the value, this will not be displayed.
+                $options[$defaultreader] = $defaultreader;
+            }
+        }
         $settings->add(new admin_setting_configselect('analytics/logstore',
             new lang_string('analyticslogstore', 'analytics'), new lang_string('analyticslogstore_help', 'analytics'),
             $defaultreader, $options));
index 2f139ed..152f5a7 100644 (file)
@@ -314,10 +314,12 @@ class manager {
     public static function get_analytics_logstore() {
         $readers = get_log_manager()->get_readers('core\log\sql_reader');
         $analyticsstore = get_config('analytics', 'logstore');
-        if (empty($analyticsstore)) {
-            $logstore = reset($readers);
-        } else if (!empty($readers[$analyticsstore])) {
+
+        if (!empty($analyticsstore) && !empty($readers[$analyticsstore])) {
             $logstore = $readers[$analyticsstore];
+        } else if (empty($analyticsstore) && !empty($readers)) {
+            // The first one, it is the same default than in settings.
+            $logstore = reset($readers);
         } else if (!empty($readers)) {
             $logstore = reset($readers);
             debugging('The selected log store for analytics is not available anymore. Using "' .