generalize core bao recurring entity
authorpriyankakaran26 <priyanka.karan26@gmail.com>
Sun, 7 Sep 2014 20:08:55 +0000 (21:08 +0100)
committerdeepak-srivastava <deepak.srivastava.0303@gmail.com>
Fri, 3 Oct 2014 08:55:16 +0000 (09:55 +0100)
CRM/Core/BAO/RecurringEntity.php
CRM/Core/Form/RecurringEntity.php
CRM/Core/Page/AJAX/RecurringEntity.php

index 4319dfe85913c1409e5bb21abb284ce5c736d154..561da0eb4ee7ac28472bf0c52339b0ccbddfe9aa 100644 (file)
@@ -150,7 +150,6 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity {
     return $parentId;
   }
 
-  //static public function copyCreateEntity('civicrm_event', array('id' => $params['parent_event_id'], $newParams) {
   static public function copyCreateEntity($entityTable, $fromCriteria, $newParams, $createRecurringEntity = TRUE) {
     $daoName = self::$_tableDAOMapper[$entityTable];
     $newObject = CRM_Core_DAO::copyGeneric($daoName, $fromCriteria, $newParams);
@@ -400,135 +399,79 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity {
     return $r;
   }
     
-  /*
-   * Get Reminder id based on event id
-   */
-  static public function getReminderDetailsByEventId($eventId, $used_for){
-    if($eventId){
-      $query = "
-        SELECT *
-        FROM   civicrm_action_schedule 
-        WHERE  entity_value = %1";
-      if($used_for){
-        $query .= " AND used_for = %2";
+    /*
+     * Get Reminder id based on event id
+     */
+    static public function getReminderDetailsByEventId($eventId, $used_for){
+      if($eventId){
+        $query = "
+          SELECT *
+          FROM   civicrm_action_schedule 
+          WHERE  entity_value = %1";
+        if($used_for){
+          $query .= " AND used_for = %2";
+        }
+        $params = array(
+          1 => array($eventId, 'Integer'),
+          2 => array($used_for, 'String')
+        );
+        $dao = CRM_Core_DAO::executeQuery($query, $params);
+        $dao->fetch();
+      }
+      return $dao;
+    }  
+  
+    static public function getInterval($startDate, $endDate) { 
+      if ($startDate && $endDate) {
+        $startDate = new DateTime($startDate);
+
+        $endDate = new DateTime($endDate);
+        return $parentStartDate->diff($parentEndDate);
       }
-      $params = array(
-                  1 => array($eventId, 'Integer'),
-                  2 => array($used_for, 'String')
-                );
-      $dao = CRM_Core_DAO::executeQuery($query, $params);
-      $dao->fetch();
     }
-    return $dao;
-  }  
   
   static public function generateRecursions($recursionObj, $params = array(), $excludeDates = array()) { 
     $newParams = $recursionResult = array();
     if ($recursionObj && !empty($params)) { 
       $initialCount = CRM_Utils_Array::value('start_action_offset', $params);
-      if(CRM_Utils_Array::value('parent_event_start_date', $params) && CRM_Utils_Array::value('parent_event_id', $params)){
-        $count = 1;
-        while ($result = $recursionObj->next()) {
-          $newParams['start_date'] = CRM_Utils_Date::processDate($result->format('Y-m-d H:i:s'));
-          $parentStartDate = new DateTime($params['parent_event_start_date']);
-
-          //If events with end date
-          if(CRM_Utils_Array::value('parent_event_end_date', $params)){
-            $parentEndDate = new DateTime($params['parent_event_end_date']);
-            $interval = $parentStartDate->diff($parentEndDate);
-            $end_date = new DateTime($newParams['start_date']);
-            $end_date->add($interval);
-            $newParams['end_date'] = CRM_Utils_Date::processDate($end_date->format('Y-m-d H:i:s'));
-            $recursionResult[$count]['end_date'] = $newParams['end_date'];
-          }
-          $recursionResult[$count]['start_date'] = $newParams['start_date'];
-
-          $skip = FALSE;
-          foreach ($excludeDates as $date) {
-            $date = CRM_Utils_Date::processDate($date, NULL, FALSE, 'Ymd');
-            if (($date == $result->format('Ymd')) || 
-              ($end_date && ($date > $result->format('Ymd')) && ($date <= $end_date->format('Ymd')))
-            ) {
-                $skip = TRUE;
-                break;
-            }
+      $interval     = CRM_Utils_Array::value('interval',    $params);
+
+      $count = 1;
+      while ($result = $recursionObj->next()) {
+        $recursionResult[$count]['start_date'] = CRM_Utils_Date::processDate($result->format('Y-m-d H:i:s'));
+
+        if($interval){
+          $endDate = new DateTime($recursionResult[$count]['start_date']);
+          $endDate->add($interval);
+          $recursionResult[$count]['end_date'] = CRM_Utils_Date::processDate($endDate->format('Y-m-d H:i:s'));
+        }
+
+        $skip = FALSE;
+        foreach ($excludeDates as $date) {
+          $date = CRM_Utils_Date::processDate($date, NULL, FALSE, 'Ymd');
+          if (($date == $result->format('Ymd')) || 
+            ($endDate && ($date > $result->format('Ymd')) && ($date <= $endDate->format('Ymd')))
+          ) {
+            $skip = TRUE;
+            break;
           }
+        }
 
-          if ($skip) {
-            unset($recursionResult[$count]);
-            if ($initialCount && ($initialCount > 0)) {
-              // lets increase the counter, so we get correct number of occurrences
-              $initialCount++;
-              $recursionObj->count($initialCount);
-            }
-            continue;
+        if ($skip) {
+          unset($recursionResult[$count]);
+          if ($initialCount && ($initialCount > 0)) {
+            // lets increase the counter, so we get correct number of occurrences
+            $initialCount++;
+            $recursionObj->count($initialCount);
           }
-          $count++;
+          continue;
         }
+        $count++;
       }
     }
     return $recursionResult;
   }
-  
-  static public function addEntityThroughRecursion($recursionResult = array(), $currEntityID){
-    if(!empty($recursionResult) && $currEntityID){
-      $parent_event_id = CRM_Core_BAO_RecurringEntity::getParentFor($currEntityID, 'civicrm_event');
-      if(!$parent_event_id){
-        $parent_event_id = $currEntityID;
-      }
 
-      // add first entry just for parent
-      CRM_Core_BAO_RecurringEntity::quickAdd($parent_event_id, $parent_event_id, 'civicrm_event');
-
-      foreach ($recursionResult as $key => $value) {
-        $newEventObj = CRM_Core_BAO_RecurringEntity::copyCreateEntity('civicrm_event', 
-        array('id' => $parent_event_id), 
-        $value);
-
-        CRM_Core_BAO_RecurringEntity::copyCreateEntity('civicrm_price_set_entity', 
-          array(
-            'entity_id' => $parent_event_id, 
-            'entity_table' => 'civicrm_event'
-          ), 
-          array(
-            'entity_id' => $newEventObj->id
-          ),
-          FALSE
-        );
-
-        CRM_Core_BAO_RecurringEntity::copyCreateEntity('civicrm_uf_join', 
-          array(
-            'entity_id' => $parent_event_id, 
-            'entity_table' => 'civicrm_event'
-          ), 
-          array(
-            'entity_id' => $newEventObj->id
-          ),
-          FALSE
-        );
-
-        CRM_Core_BAO_RecurringEntity::copyCreateEntity('civicrm_tell_friend', 
-          array(
-            'entity_id' => $parent_event_id, 
-            'entity_table' => 'civicrm_event'
-          ), 
-          array(
-            'entity_id' => $newEventObj->id
-          )
-        );
-
-        CRM_Core_BAO_RecurringEntity::copyCreateEntity('civicrm_pcp_block', 
-          array(
-            'entity_id' => $parent_event_id, 
-            'entity_table' => 'civicrm_event'
-          ), 
-          array(
-            'entity_id' => $newEventObj->id
-          )
-        );
-      }
-    }
-  }
   
   static public function delEntityRelations($entityId, $entityTable){
     if(!$entityId && !$entityTable){
index f6e6eb5b425a283f32a4ba26cf234eec54ef3891..cf60a61f55a0979a59aab5eed61165912c041705 100644 (file)
@@ -217,7 +217,6 @@ class CRM_Core_Form_RecurringEntity {
       $recursionObject = CRM_Core_BAO_RecurringEntity::getRecursionFromReminder($actionScheduleObj->id);
     }
     
-    
     //TO DO - Exclude date functionality
     $excludeDateList = array();
     if(CRM_Utils_Array::value('copyExcludeDates', $params) && CRM_Utils_Array::value('parent_event_id', $params)){   
@@ -266,16 +265,81 @@ class CRM_Core_Form_RecurringEntity {
     if($params['parent_event_id']){
       CRM_Core_BAO_RecurringEntity::delEntityRelations($params['parent_event_id'], 'civicrm_event');
     }
+
     //Give call to create recursions
+    if ($params['parent_event_end_date']) {
+      $params['interval'] = CRM_Core_BAO_RecurringEntity::getInterval($params['parent_event_start_date'], $params['parent_event_end_date']);
+    }
+
     $recurResult = CRM_Core_BAO_RecurringEntity::generateRecursions($recursionObject, $params, $excludeDateList);
     if(!empty($recurResult) && $params['parent_event_id']) {
-      CRM_Core_BAO_RecurringEntity::addEntityThroughRecursion($recurResult, $params['parent_event_id']);
+      CRM_Core_Form_RecurringEntity::addEntityThroughRecursion($recurResult, $params['parent_event_id']);
     }
     $status = ts('Repeat Configuration has been saved');
     CRM_Core_Session::setStatus($status, ts('Saved'), 'success');
   }
   //end of function
 
+  static public function addEntityThroughRecursion($recursionResult = array(), $currEntityID){
+    if(!empty($recursionResult) && $currEntityID){
+      $parent_event_id = CRM_Core_BAO_RecurringEntity::getParentFor($currEntityID, 'civicrm_event');
+      if(!$parent_event_id){
+        $parent_event_id = $currEntityID;
+      }
+
+      // add first entry just for parent
+      CRM_Core_BAO_RecurringEntity::quickAdd($parent_event_id, $parent_event_id, 'civicrm_event');
+
+      foreach ($recursionResult as $key => $value) {
+        $newEventObj = CRM_Core_BAO_RecurringEntity::copyCreateEntity('civicrm_event', 
+        array('id' => $parent_event_id), 
+        $value);
+
+        CRM_Core_BAO_RecurringEntity::copyCreateEntity('civicrm_price_set_entity', 
+          array(
+            'entity_id' => $parent_event_id, 
+            'entity_table' => 'civicrm_event'
+          ), 
+          array(
+            'entity_id' => $newEventObj->id
+          ),
+          FALSE
+        );
+
+        CRM_Core_BAO_RecurringEntity::copyCreateEntity('civicrm_uf_join', 
+          array(
+            'entity_id' => $parent_event_id, 
+            'entity_table' => 'civicrm_event'
+          ), 
+          array(
+            'entity_id' => $newEventObj->id
+          ),
+          FALSE
+        );
+
+        CRM_Core_BAO_RecurringEntity::copyCreateEntity('civicrm_tell_friend', 
+          array(
+            'entity_id' => $parent_event_id, 
+            'entity_table' => 'civicrm_event'
+          ), 
+          array(
+            'entity_id' => $newEventObj->id
+          )
+        );
+
+        CRM_Core_BAO_RecurringEntity::copyCreateEntity('civicrm_pcp_block', 
+          array(
+            'entity_id' => $parent_event_id, 
+            'entity_table' => 'civicrm_event'
+          ), 
+          array(
+            'entity_id' => $newEventObj->id
+          )
+        );
+      }
+    }
+  }
+
   /**
    * Return a descriptive name for the page, used in wizard header
    *
index 30fd29dd2de51c0d07bae1a906975cdaaab5f4b6..8b416e4f38d29700804ba4205483979947c7f72f 100644 (file)
@@ -51,9 +51,12 @@ class CRM_Core_Page_AJAX_RecurringEntity {
             if(!$parent_event_id){
               $parent_event_id = $formValues['event_id'];
             }
-            $params['parent_event_id'] = $parent_event_id;
-            $params['parent_event_start_date'] = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $params['parent_event_id'], 'start_date');
-            $params['parent_event_end_date'] = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $params['parent_event_id'], 'end_date');
+            $startDate = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $parent_event_id, 'start_date');
+            $endDate   = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $parent_event_id, 'end_date');
+
+            if ($endDate) {
+              $params['interval'] = CRM_Core_BAO_RecurringEntity::getInterval($startDate, $endDate);
+            }
             $params['start_action_offset'] = $formValues['start_action_offset'];
           }
           $recurResult = CRM_Core_BAO_RecurringEntity::generateRecursions($recursionObject, $params, $formValues['exclude_date_list']);