CRM-13823 - Fix caching of system status
authorColeman Watts <coleman@civicrm.org>
Wed, 18 Nov 2015 16:21:00 +0000 (11:21 -0500)
committerColeman Watts <coleman@civicrm.org>
Wed, 18 Nov 2015 16:21:00 +0000 (11:21 -0500)
CRM/Core/Invoke.php
CRM/Utils/Check.php
settings/Core.setting.php
templates/CRM/common/footer.tpl

index 7c38eb6eb35991448f514ee8dc6e018ea57b945a..972850a04ffc700597afc1333df075dc7cdb27ab 100644 (file)
@@ -344,24 +344,17 @@ class CRM_Core_Invoke {
   }
 
   /**
-   * Show status in the footer
+   * Show status in the footer (admin only)
    *
    * @param CRM_Core_Smarty $template
    */
   public static function statusCheck($template) {
-    if (CRM_Core_Config::isUpgradeMode()) {
+    if (CRM_Core_Config::isUpgradeMode() || !CRM_Core_Permission::check('administer CiviCRM')) {
       return;
     }
-    //  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) {
+    // always use cached results - they will be refreshed by the session timer
+    $status = Civi::settings()->get('systemStatusCheckResult');
+    switch ($status) {
       case 7:
         $statusMessage = ts('System Status: Emergency');
         break;
@@ -389,8 +382,7 @@ class CRM_Core_Invoke {
       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_severity', $status);
     $template->assign('footer_status_message', $statusMessage);
   }
 
index 0f7db75aeaaf9a4d9d3428bb0fe2a3961551720f..783989b0f46096e6c840380050bb60519d797b11 100644 (file)
@@ -87,9 +87,7 @@ class CRM_Utils_Check {
    *   Set TRUE to show all messages.
    */
   public function showPeriodicAlerts($messages = NULL, $filter = array(__CLASS__, 'severityMap')) {
-    if (CRM_Core_Permission::check('administer CiviCRM')
-      && CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'securityAlert', NULL, TRUE)
-    ) {
+    if (CRM_Core_Permission::check('administer CiviCRM')) {
       $session = CRM_Core_Session::singleton();
       if ($session->timer('check_' . __CLASS__, self::CHECK_TIMER)) {
 
@@ -237,9 +235,7 @@ class CRM_Utils_Check {
       break;
     }
 
-    Civi::cache()->set('systemCheckSeverity', $maxSeverity);
-    $timestamp = time();
-    Civi::cache()->set('systemCheckDate', $timestamp);
+    Civi::settings()->set('systemStatusCheckResult', $maxSeverity);
 
     return ($max) ? $maxSeverity : $messages;
   }
index 1d483c4c286e0cb797c0c5328890ca1fb9ff85ee..d7d817c13b85fb2fbef1a10ee197b50d6f8b7ed8 100644 (file)
@@ -800,4 +800,17 @@ return array(
     'description' => NULL,
     'help_text' => NULL,
   ),
+  'systemStatusCheckResult' => array(
+    'group_name' => 'CiviCRM Preferences',
+    'group' => 'core',
+    'name' => 'systemStatusCheckResult',
+    'type' => 'Integer',
+    'default' => 0,
+    'add' => '4.7',
+    'title' => NULL,
+    'is_domain' => 1,
+    'is_contact' => 0,
+    'description' => NULL,
+    'help_text' => NULL,
+  ),
 );
index 242e573555f36b83d2eda3d5be4f95c74a4d6f70..b1ce4f589599c9a14a991e9bdfdbdb74f1c7a70c 100644 (file)
@@ -32,7 +32,7 @@
   <div class="crm-footer" id="civicrm-footer">
     {crmVersion assign=version}
     {ts 1=$version}Powered by CiviCRM %1.{/ts}
-    {if $footer_status_severity}
+    {if !empty($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>