CRM-18516 Convert the date fields relating to group caching & acl caching timestamp
authoreileen <emcnaughton@wikimedia.org>
Sat, 7 May 2016 23:18:10 +0000 (09:18 +1000)
committerTim Otten <totten@civicrm.org>
Thu, 19 May 2016 22:43:36 +0000 (15:43 -0700)
CRM/ACL/BAO/Cache.php
CRM/Contact/BAO/GroupContactCache.php
CRM/Upgrade/Incremental/sql/4.7.8.mysql.tpl
CRM/Utils/Date.php
xml/schema/ACL/Cache.xml
xml/schema/Contact/Group.xml

index 6f302a7a68315d152d2f829035a12bab2dd3bc3b..f0b67a20574f3327d430d6471a35cc5a77e800a4 100644 (file)
@@ -149,14 +149,11 @@ WHERE contact_id = %1
     $config = CRM_Core_Config::singleton();
     $smartGroupCacheTimeout = CRM_Contact_BAO_GroupContactCache::smartGroupCacheTimeout();
 
-    //make sure to give original timezone settings again.
-    $now = CRM_Utils_Date::getUTCTime();
-
     $query = "
 DELETE
 FROM   civicrm_acl_cache
 WHERE  modified_date IS NULL
-   OR  (TIMESTAMPDIFF(MINUTE, modified_date, $now) >= $smartGroupCacheTimeout)
+   OR  (TIMESTAMPDIFF(MINUTE, modified_date, NOW()) >= $smartGroupCacheTimeout)
 ";
     CRM_Core_DAO::singleValueQuery($query);
 
index 242a8110c5106c1c5ddd9fdeee5f3c2a1dbf77a1..2785d34c0e0394c47da46d250d08425d4c07db74 100644 (file)
@@ -68,7 +68,6 @@ class CRM_Contact_BAO_GroupContactCache extends CRM_Contact_DAO_GroupContactCach
    */
   public static function groupRefreshedClause($groupIDClause = NULL, $includeHiddenGroups = FALSE) {
     $smartGroupCacheTimeout = self::smartGroupCacheTimeout();
-    $now = CRM_Utils_Date::getUTCTime();
 
     $query = "
 SELECT  g.id
@@ -76,8 +75,8 @@ FROM    civicrm_group g
 WHERE   ( g.saved_search_id IS NOT NULL OR g.children IS NOT NULL )
 AND     g.is_active = 1
 AND     ( g.cache_date IS NULL OR
-          ( TIMESTAMPDIFF(MINUTE, g.cache_date, $now) >= $smartGroupCacheTimeout ) OR
-          ( $now >= g.refresh_date )
+          ( TIMESTAMPDIFF(MINUTE, g.cache_date, NOW()) >= $smartGroupCacheTimeout ) OR
+          ( NOW() >= g.refresh_date )
         )
 ";
 
@@ -177,7 +176,7 @@ AND     ( g.cache_date IS NULL OR
 
     if (!empty($refreshGroupIDs)) {
       $refreshGroupIDString = CRM_Core_DAO::escapeString(implode(', ', $refreshGroupIDs));
-      $time = CRM_Utils_Date::getUTCTime(self::smartGroupCacheTimeout() * 60);
+      $time = self::getRefreshDateTime();
       $query = "
 UPDATE civicrm_group g
 SET    g.refresh_date = $time
@@ -266,7 +265,7 @@ AND    g.refresh_date IS NULL
     if ($processed) {
       // also update the group with cache date information
       //make sure to give original timezone settings again.
-      $now = CRM_Utils_Date::getUTCTime();
+      $now = date('YmdHis');
       $refresh = 'null';
     }
     else {
@@ -329,8 +328,7 @@ WHERE  id IN ( $groupIDs )
     $params = array();
     $smartGroupCacheTimeout = self::smartGroupCacheTimeout();
 
-    $now = CRM_Utils_Date::getUTCTime();
-    $refreshTime = CRM_Utils_Date::getUTCTime($smartGroupCacheTimeout * 60);
+    $refreshTime = self::getRefreshDateTime();
 
     if (!isset($groupID)) {
       if ($smartGroupCacheTimeout == 0) {
@@ -708,4 +706,15 @@ ORDER BY   gc.contact_id, g.children
     }
   }
 
+  /**
+   * Get the date when the cache should be refreshed from.
+   *
+   * Ie. now + the offset & we will delete anything prior to then.
+   *
+   * @return string
+   */
+  protected static function getRefreshDateTime() {
+    return date('Ymdhis', strtotime("+ " . self::smartGroupCacheTimeout() . " Minutes"));
+  }
+
 }
index 641b3335b7798b0a40b9100cf3438ab9f29b7541..6fc87f8fc08afcea8149784dbf956c9731a80fd5 100644 (file)
@@ -3,6 +3,10 @@
 #CRM-17967 - Allow conact image file name length during upload up to 255 characters long
 ALTER TABLE `civicrm_contact` CHANGE `image_URL` `image_URL` VARCHAR(512) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT 'optional URL for preferred image (photo, logo, etc.) to display for this contact.';
 
+-- CRM-18516 Convert the date fields relating to group caching and acl caching timestamp
+ALTER TABLE civicrm_group CHANGE cache_date cache_date timestamp NULL DEFAULT NULL , CHANGE refresh_date refresh_date timestamp NULL DEFAULT NULL;
+ALTER TABLE civicrm_acl_cache CHANGE modified_date modified_date timestamp NULL DEFAULT NULL;
+
 -- CRM-18537
 DELETE FROM civicrm_state_province WHERE name = 'Fernando de Noronha';
 
index fbf073ab9f220fe95085150292f48d84ad97801a..a53acb6cd1e6860b462560671c8728d7219f53bc 100644 (file)
@@ -1836,25 +1836,6 @@ class CRM_Utils_Date {
     return $format;
   }
 
-  /**
-   * Get the time in UTC for the current time. You can optionally send an offset from the current time if needed
-   *
-   * @param int $offset
-   *   the offset from the current time in seconds.
-   *
-   * @return string
-   *   the time in UTC
-   */
-  public static function getUTCTime($offset = 0) {
-    $originalTimezone = date_default_timezone_get();
-    date_default_timezone_set('UTC');
-    $time = time() + $offset;
-    $now = date('YmdHis', $time);
-    date_default_timezone_set($originalTimezone);
-    return $now;
-  }
-
-
   /**
    * @param $date
    * @param $dateType
index a798dff6ac8bf5b41b1bb3feeccfb96a700506cb..781ab64beed21f104447bcd9cfff901fc8de0bbe 100644 (file)
@@ -55,7 +55,7 @@
   <field>
     <name>modified_date</name>
     <title>Cache Modified Date</title>
-    <type>date</type>
+    <type>timestamp</type>
     <comment>When was this cache entry last modified</comment>
     <add>1.6</add>
   </field>
index 6f68023e738a90d31f2fe2d8cc1df84205bb5596..d1c94a4e9314b4af6e24bf965078301bae099fea 100644 (file)
   </field>
   <field>
     <name>cache_date</name>
-    <type>datetime</type>
+    <type>timestamp</type>
     <title>Group Cache Date</title>
     <comment>Date when we created the cache for a smart group</comment>
     <add>2.1</add>
   </field>
   <field>
     <name>refresh_date</name>
-    <type>datetime</type>
+    <type>timestamp</type>
     <title>Next Group Refresh Time</title>
     <comment>Date and time when we need to refresh the cache next.</comment>
     <add>4.3</add>