cache on page load, get max visible severity, show appropriate footer
authorNikki Murray <nikki.liz.murray@gmail.com>
Wed, 14 Oct 2015 17:16:28 +0000 (13:16 -0400)
committerNikki Murray <nikki.liz.murray@gmail.com>
Wed, 14 Oct 2015 17:16:28 +0000 (13:16 -0400)
CRM/Core/Invoke.php
CRM/Utils/Check.php
CRM/Utils/Check/Message.php
templates/CRM/common/footer.tpl

index 24c0ecf77e7da2275941c674309b09c6af95ae3f..7c38eb6eb35991448f514ee8dc6e018ea57b945a 100644 (file)
@@ -352,8 +352,43 @@ class CRM_Core_Invoke {
     if (CRM_Core_Config::isUpgradeMode()) {
       return;
     }
-    $statusSeverity = 0;
-    $statusMessage = ts('System status OK');
+    //  check date of last cache and compare to today's date
+    $systemCheckDate = Civi::cache()->get('systemCheckDate');
+    if ($systemCheckDate > strtotime("one day ago")) {
+      $statusSeverity = Civi::cache()->get('systemCheckSeverity');
+    }
+    //  calls helper function in CRM_Utils_Check
+    if (empty($statusSeverity)) {
+      $statusSeverity = CRM_Utils_Check::checkAll(TRUE);
+    }
+    switch ($statusSeverity) {
+      case 7:
+        $statusMessage = ts('System Status: Emergency');
+        break;
+
+      case 6:
+        $statusMessage = ts('System Status: Alert');
+        break;
+
+      case 5:
+        $statusMessage = ts('System Status: Critical');
+        break;
+
+      case 4:
+        $statusMessage = ts('System Status: Error');
+        break;
+
+      case 3:
+        $statusMessage = ts('System Status: Warning');
+        break;
+
+      case 2:
+        $statusMessage = ts('System Status: Notice');
+        break;
+
+      default:
+        $statusMessage = ts('System Status: Ok');
+    }
     // TODO: get status from CRM_Utils_Check, if cached
     $template->assign('footer_status_severity', $statusSeverity);
     $template->assign('footer_status_message', $statusMessage);
index 265141187bf30659a978ced498610273a6d6069f..178377475752a309988744f942cc5911d4c30377 100644 (file)
@@ -32,7 +32,7 @@
  */
 class CRM_Utils_Check {
   // How often to run checks and notify admins about issues.
-  const CHECK_TIMER = 86400;    
+  const CHECK_TIMER = 86400;
 
   /**
    * We only need one instance of this object, so we use the
@@ -108,7 +108,7 @@ class CRM_Utils_Check {
    * @param CRM_Utils_Check_Message $b
    * @return int
    */
-  public function severitySort($a, $b) {
+  public static function severitySort($a, $b) {
     $aSeverity = $a->getSeverity();
     $bSeverity = $b->getSeverity();
     if ($aSeverity == $bSeverity) {
@@ -177,11 +177,14 @@ class CRM_Utils_Check {
    * We might even expose the results of these checks on the Wordpress
    * plugin status page or the Drupal admin/reports/status path.
    *
+   * @param bool $max
+   *   Whether to return just the maximum non-hushed severity
+   *
    * @return array
    *   Array of messages
    * @link https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_requirements
    */
-  public function checkAll() {
+  public static function checkAll($max = FALSE) {
     $checks = array();
     $checks[] = new CRM_Utils_Check_Security();
     $checks[] = new CRM_Utils_Check_Env();
@@ -210,7 +213,20 @@ class CRM_Utils_Check {
     }
     uasort($messages, array(__CLASS__, 'severitySort'));
 
-    return $messages;
+    $maxSeverity = 1;
+    foreach ($messages as $message) {
+      if (!$message->isVisible()) {
+        continue;
+      }
+      $maxSeverity = max(1, $message->getLevel());
+      break;
+    }
+
+    Civi::cache()->set('systemCheckSeverity', $maxSeverity);
+    $timestamp = time();
+    Civi::cache()->set('systemCheckDate', $timestamp);
+
+    return ($max) ? $maxSeverity : $messages;
   }
 
   /**
@@ -219,7 +235,7 @@ class CRM_Utils_Check {
    * @return bool
    *   TRUE means hush/snooze, FALSE means display.
    */
-  public function checkHushSnooze($message) {
+  public static function checkHushSnooze($message) {
     $statusPreferenceParams = array(
       'name' => $message->getName(),
       'domain_id' => CRM_Core_Config::domainID(),
index 2711813a988ce004829f819645059758b533b961..dbaf7ed92b10d07647ea2d7b69e8c591bdfbf0c4 100644 (file)
@@ -47,7 +47,7 @@ class CRM_Utils_Check_Message {
   private $title;
 
   /**
-   * @var string
+   * @var int
    * @see Psr\Log\LogLevel
    */
   private $level;
index 5f32c2b98cdf711c975a946d19a1b995dc25b639..a61bfebee1e919c4b9b4a0b4103147bcd56702a6 100644 (file)
@@ -31,8 +31,8 @@
 <div class="crm-footer" id="civicrm-footer">
   {crmVersion assign=version}
   {ts 1=$version}Powered by CiviCRM %1.{/ts}
-  {if !empty($statusSeverity)}
-    <span class="status{if $statusSeverity gt 2} crm-error{else} crm-ok{/if}">
+  {if $footer_status_severity}
+    <span class="status{if $footer_status_severity gt 3} crm-error{elseif $footer_status_severity gt 2} crm-warning{else} crm-ok{/if}">
       <a href="{crmURL p='civicrm/a/#/status'}">{$footer_status_message}</a>
     </span>
   {/if}