CRM_Utils_Check - Add Message::$level. Only harass admins about WARNING or higher.
authorTim Otten <totten@civicrm.org>
Sat, 7 Mar 2015 00:49:58 +0000 (16:49 -0800)
committerEileen McNaughton <eileen@fuzion.co.nz>
Thu, 28 May 2015 01:47:54 +0000 (13:47 +1200)
CRM/Utils/Check.php
CRM/Utils/Check/Message.php

index 3e59c4f6c19a62d9658ed178991d5ab540743922..0332175d7c8f8201b13368999dae0e86c0c198be 100644 (file)
@@ -60,9 +60,14 @@ class CRM_Utils_Check {
   /**
    * Execute "checkAll".
    *
-   * @param array|NULL $messages list of CRM_Utils_Check_Message; or NULL if the default list should be fetched
+   * @param array|NULL $messages
+   *   List of CRM_Utils_Check_Message; or NULL if the default list should be fetched.
+   * @param array|string|callable $filter
+   *   Restrict messages using a callback filter.
+   *   By default, only show warnings and errors.
+   *   Set TRUE to show all messages.
    */
-  public function showPeriodicAlerts($messages = NULL) {
+  public function showPeriodicAlerts($messages = NULL, $filter = array(__CLASS__, 'isImportantAlert')) {
     if (CRM_Core_Permission::check('administer CiviCRM')
       && CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'securityAlert', NULL, TRUE)
     ) {
@@ -77,12 +82,29 @@ class CRM_Utils_Check {
           $messages = $this->checkAll();
         }
         foreach ($messages as $message) {
-          CRM_Core_Session::setStatus($message->getMessage(), $message->getTitle());
+          if ($filter === TRUE || call_user_func($filter, $message)) {
+            CRM_Core_Session::setStatus($message->getMessage(), $message->getTitle());
+          }
         }
       }
     }
   }
 
+  /**
+   * Determine if a message is important enough to harass the administrator about.
+   *
+   * @param CRM_Utils_Check_Message $message
+   * @return bool
+   */
+  protected static function isImportantAlert($message) {
+    return in_array($message->getLevel(), array(
+      \Psr\Log\LogLevel::WARNING,
+      \Psr\Log\LogLevel::ALERT,
+      \Psr\Log\LogLevel::CRITICAL,
+      \Psr\Log\LogLevel::EMERGENCY,
+    ));
+  }
+
   /**
    * Throw an exception if any of the checks fail.
    *
index fc9dd35697660182a1d6f1a9065d77c9c504e8aa..af45898057683a5d6d7c8c9a8c16dca2774fb985 100644 (file)
@@ -48,15 +48,29 @@ class CRM_Utils_Check_Message {
    */
   private $title;
 
+  /**
+   * @var string
+   * @see Psr\Log\LogLevel
+   */
+  private $level;
+
   /**
    * @param string $name
-   * @param $message
-   * @param $title
+   *   Symbolic name for the check.
+   * @param string $message
+   *   Printable message (short or long).
+   * @param string $title
+   *   Printable message (short).
+   * @param string $level
+   *   The severity of the message. Use PSR-3 log levels.
+   *
+   * @see Psr\Log\LogLevel
    */
-  public function __construct($name, $message, $title) {
+  public function __construct($name, $message, $title, $level = \Psr\Log\LogLevel::WARNING) {
     $this->name = $name;
     $this->message = $message;
     $this->title = $title;
+    $this->level = $level;
   }
 
   /**
@@ -80,6 +94,14 @@ class CRM_Utils_Check_Message {
     return $this->title;
   }
 
+  /**
+   * @return string
+   * @see Psr\Log\LogLevel
+   */
+  public function getLevel() {
+    return $this->level;
+  }
+
   /**
    * @return array
    */
@@ -88,6 +110,7 @@ class CRM_Utils_Check_Message {
       'name' => $this->name,
       'message' => $this->message,
       'title' => $this->title,
+      'level' => $this->level,
     );
   }