CRM-17669 Add new run frequencies to scheduled...
authorDavid Reedy Jr <davidrjr.konadave@gmail.com>
Mon, 28 Dec 2015 18:22:20 +0000 (12:22 -0600)
committerDavid Reedy Jr <davidrjr.konadave@gmail.com>
Thu, 31 Dec 2015 23:23:27 +0000 (17:23 -0600)
jobs. Also removes run frequencies added in CRM-16500 as they are no longer needed.

CRM/Core/ScheduledJob.php
CRM/Core/SelectValues.php

index 95d0a2c298800143577729bb353de5548354a15e..6a616d21f1be4a9cc13c58a37661a74da4675ae9 100644 (file)
@@ -86,10 +86,33 @@ class CRM_Core_ScheduledJob {
     $dao->save();
   }
 
+  /**
+   * @return void
+   */
+  public function clearNextScheduledRun() {
+    CRM_Core_DAO::executeQuery('UPDATE civicrm_job SET next_scheduled_run = NULL WHERE id = %1',
+      array(
+        '1' => array($this->id, 'Integer'),
+      ));
+  }
+
   /**
    * @return bool
    */
   public function needsRunning() {
+
+    // CRM-17686
+    // check if the job has a specific scheduled date/time
+    if (!empty($this->next_scheduled_run)) {
+      if (strtotime($this->next_scheduled_run) <= time()) {
+        $this->clearNextScheduledRun();
+        return TRUE;
+      }
+      else {
+        return FALSE;
+      }
+    }
+
     // run if it was never run
     if (empty($this->last_run)) {
       return TRUE;
@@ -100,43 +123,37 @@ class CRM_Core_ScheduledJob {
       case 'Always':
         return TRUE;
 
-      case 'Hourly':
-        $format = 'YmdH';
+      // CRM-17669
+      case 'Yearly':
+        $offset = '+1 year';
+        break;
+
+      case 'Quarter':
+        $offset = '+3 months';
+        break;
+
+      case 'Monthly':
+        $offset = '+1 month';
+        break;
+
+      case 'Weekly':
+        $offset = '+1 week';
         break;
 
       case 'Daily':
-        $format = 'Ymd';
+        $offset = '+1 day';
         break;
 
-      case 'Mondays':
-        $now = CRM_Utils_Date::currentDBDate();
-        $dayAgo = strtotime('-1 day', strtotime($now));
-        $lastRun = strtotime($this->last_run);
-        $nowDayOfWeek = date('l', strtotime($now));
-        return ($lastRun < $dayAgo && $nowDayOfWeek == 'Monday');
-
-      case '1stOfMth':
-        $now = CRM_Utils_Date::currentDBDate();
-        $dayAgo = strtotime('-1 day', strtotime($now));
-        $lastRun = strtotime($this->last_run);
-        $nowDayOfMonth = date('j', strtotime($now));
-        return ($lastRun < $dayAgo && $nowDayOfMonth == '1');
-
-      case '1stOfQtr':
-        $now = CRM_Utils_Date::currentDBDate();
-        $dayAgo = strtotime('-1 day', strtotime($now));
-        $lastRun = strtotime($this->last_run);
-        $nowDayOfMonth = date('j', strtotime($now));
-        $nowMonth = date('n', strtotime($now));
-        $qtrMonths = array('1', '4', '7', '10');
-        return ($lastRun < $dayAgo && $nowDayOfMonth == '13' && in_array($nowMonth, $qtrMonths));
+      case 'Hourly':
+        $offset = '+1 hour';
+        break;
     }
 
-    $now = CRM_Utils_Date::currentDBDate();
-    $lastTime = date($format, strtotime($this->last_run));
-    $thisTime = date($format, strtotime($now));
+    $now = strtotime(CRM_Utils_Date::currentDBDate());
+    $lastTime = strtotime($this->last_run);
+    $nextTime = strtotime($offset, $lastTime);
 
-    return ($lastTime <> $thisTime);
+    return ($now >= $nextTime);
   }
 
   public function __destruct() {
index 43dd0dceed1ed77504f12203cd56d466374e8468..c54b58ea881604efd8104f4e225d0270905b5d75 100644 (file)
@@ -893,9 +893,12 @@ class CRM_Core_SelectValues {
    */
   public static function getJobFrequency() {
     return array(
-      '1stOfQtr' => ts('1st day of every quarter'),
-      '1stOfMth' => ts('1st day of every month'),
-      'Mondays' => ts('Monday of every week'),
+      // CRM-17669
+      'Yearly' => ts('Yearly'),
+      'Quarter' => ts('Quarterly'),
+      'Monthly' => ts('Monthly'),
+      'Weekly' => ts('Weekly'),
+
       'Daily' => ts('Daily'),
       'Hourly' => ts('Hourly'),
       'Always' => ts('Every time cron job is run'),