MDL-45724 cache: added cache API warnings to the admin notifications page
authorSam Hemelryk <sam@moodle.com>
Thu, 29 May 2014 23:41:48 +0000 (11:41 +1200)
committerSam Hemelryk <sam@moodle.com>
Sun, 20 Jul 2014 21:48:33 +0000 (09:48 +1200)
admin/index.php
admin/renderer.php
cache/admin.php
cache/classes/helper.php
cache/classes/store.php
cache/renderer.php

index aaa530a..34c0f95 100644 (file)
@@ -589,10 +589,14 @@ $availableupdatesfetch = $updateschecker->get_last_timefetched();
 $buggyiconvnomb = (!function_exists('mb_convert_encoding') and @iconv('UTF-8', 'UTF-8//IGNORE', '100'.chr(130).'€') !== '100€');
 //check if the site is registered on Moodle.org
 $registered = $DB->count_records('registration_hubs', array('huburl' => HUB_MOODLEORGHUBURL, 'confirmed' => 1));
+// Check if there are any cache warnings.
+$cachewarnings = cache_helper::warnings();
 
 admin_externalpage_setup('adminnotifications');
 
+/* @var core_admin_renderer $output */
 $output = $PAGE->get_renderer('core', 'admin');
-echo $output->admin_notifications_page($maturity, $insecuredataroot, $errorsdisplayed,
-        $cronoverdue, $dbproblems, $maintenancemode, $availableupdates, $availableupdatesfetch, $buggyiconvnomb,
-        $registered);
+
+echo $output->admin_notifications_page($maturity, $insecuredataroot, $errorsdisplayed, $cronoverdue, $dbproblems,
+                                       $maintenancemode, $availableupdates, $availableupdatesfetch, $buggyiconvnomb,
+                                       $registered, $cachewarnings);
index 954b977..99109a2 100644 (file)
@@ -303,12 +303,13 @@ class core_admin_renderer extends plugin_renderer_base {
      * @param bool $buggyiconvnomb warn iconv problems
      * @param array|null $availableupdates array of \core\update\info objects or null
      * @param int|null $availableupdatesfetch timestamp of the most recent updates fetch or null (unknown)
+     * @param string[] $cachewarnings An array containing warnings from the Cache API.
      *
      * @return string HTML to output.
      */
     public function admin_notifications_page($maturity, $insecuredataroot, $errorsdisplayed,
             $cronoverdue, $dbproblems, $maintenancemode, $availableupdates, $availableupdatesfetch,
-            $buggyiconvnomb, $registered) {
+            $buggyiconvnomb, $registered, array $cachewarnings = array()) {
         global $CFG;
         $output = '';
 
@@ -321,6 +322,7 @@ class core_admin_renderer extends plugin_renderer_base {
         $output .= $this->cron_overdue_warning($cronoverdue);
         $output .= $this->db_problems($dbproblems);
         $output .= $this->maintenance_mode_warning($maintenancemode);
+        $output .= $this->cache_warnings($cachewarnings);
         $output .= $this->registration_warning($registered);
 
         //////////////////////////////////////////////////////////////////////////////////////////////////
@@ -595,6 +597,19 @@ class core_admin_renderer extends plugin_renderer_base {
         return $this->warning($dbproblems);
     }
 
+    /**
+     * Renders cache warnings if there are any.
+     *
+     * @param string[] $cachewarnings
+     * @return string
+     */
+    public function cache_warnings(array $cachewarnings) {
+        if (!count($cachewarnings)) {
+            return '';
+        }
+        return join("\n", array_map(array($this, 'warning'), $cachewarnings));
+    }
+
     /**
      * Render an appropriate message if the site in in maintenance mode.
      * @param bool $maintenancemode
index ba49777..827b137 100644 (file)
@@ -280,15 +280,7 @@ if (!empty($action) && confirm_sesskey()) {
     }
 }
 
-// Stores can add notices to the cache configuration screen for things like conflicting configurations etc.
-// Here we check each cache to see if it has warnings.
-foreach ($stores as $store) {
-    if (!empty($store['warnings']) && is_array($store['warnings'])) {
-        foreach ($store['warnings'] as $warning) {
-            $notifications[] = array($warning, false);
-        }
-    }
-}
+$notifications = array_merge($notifications, cache_helper::warnings($stores));
 
 $PAGE->set_title($title);
 $PAGE->set_heading($SITE->fullname);
@@ -297,7 +289,7 @@ $renderer = $PAGE->get_renderer('core_cache');
 
 echo $renderer->header();
 echo $renderer->heading($title);
-echo $renderer->notififications($notifications);
+echo $renderer->notifications($notifications);
 
 if ($mform instanceof moodleform) {
     $mform->display();
index 02bd243..dd150b7 100644 (file)
@@ -736,4 +736,28 @@ class cache_helper {
         }
         return $stores;
     }
+
+    /**
+     * Returns an array of warnings from the cache API.
+     *
+     * The warning returned here are for things like conflicting store instance configurations etc.
+     * These get shown on the admin notifications page for example.
+     *
+     * @param array|null $stores An array of stores to get warnings for, or null for all.
+     * @return string[]
+     */
+    public static function warnings(array $stores = null) {
+        global $CFG;
+        if ($stores === null) {
+            require_once($CFG->dirroot.'/cache/locallib.php');
+            $stores = cache_administration_helper::get_store_instance_summaries();
+        }
+        $warnings = array();
+        foreach ($stores as $store) {
+            if (!empty($store['warnings'])) {
+                $warnings = array_merge($warnings, $store['warnings']);
+            }
+        }
+        return $warnings;
+    }
 }
index 1b3c5bb..464df84 100644 (file)
@@ -372,7 +372,11 @@ abstract class cache_store implements cache_store_interface {
      * This should be used to notify things like configuration conflicts etc.
      * The warnings returned here will be displayed on the cache configuration screen.
      *
-     * @return string[] Returns an array of warnings (strings)
+     * @return array[] Returns an array of arrays with the format:
+     *     $notifications = array(
+     *         array('This is a success message', true),
+     *         array('This is a failure message', false),
+     *     );
      */
     public function get_warnings() {
         return array();
index dbf7e88..2b18d6b 100644 (file)
@@ -376,10 +376,16 @@ class core_cache_renderer extends plugin_renderer_base {
     /**
      * Renders an array of notifications for the cache configuration screen.
      *
+     * Takes an array of notifications with the form:
+     * $notifications = array(
+     *     array('This is a success message', true),
+     *     array('This is a failure message', false),
+     * );
+     *
      * @param array $notifications
      * @return string
      */
-    public function notififications(array $notifications = array()) {
+    public function notifications(array $notifications = array()) {
         if (count($notifications) === 0) {
             // There are no notifications to render.
             return '';