From: priyankakaran26 Date: Sat, 13 Sep 2014 18:31:42 +0000 (+0100) Subject: generalize skip fields & testing linked-entities X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=84f02991c2458e9e1265691c93f240af760f4b64;p=civicrm-core.git generalize skip fields & testing linked-entities --- diff --git a/CRM/Core/BAO/RecurringEntity.php b/CRM/Core/BAO/RecurringEntity.php index 9d58f37c9a..0c7253e901 100644 --- a/CRM/Core/BAO/RecurringEntity.php +++ b/CRM/Core/BAO/RecurringEntity.php @@ -36,22 +36,22 @@ require_once 'packages/When/When.php'; class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { - public $linkedEntities = array(); + public $schedule = array(); public $scheduleId = NULL; - public $scheduleDBParams = array(); + public $scheduleFormValues = array(); public $dateColumns = array(); public $overwriteColumns = array(); public $intervalDateColumns = array(); - public $excludeDates = array(); - - public $recursion = NULL; - public $recursionCounter = NULL; + + public $linkedEntities = array(); public $isRecurringEntityRecord = TRUE; + protected $recursion = NULL; + static $_tableDAOMapper = array( 'civicrm_event' => 'CRM_Event_DAO_Event', @@ -63,6 +63,15 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { 'civicrm_activity_contact' => 'CRM_Activity_DAO_ActivityContact', ); + + static $_updateSkipFields = + array( + 'civicrm_event' => array('start_date', 'end_date'), + 'civicrm_tell_friend' => array('entity_id'), + 'civicrm_pcp_block' => array('entity_id'), + 'civicrm_activity' => array('activity_date_time'), + ); + static function add(&$params) { if (CRM_Utils_Array::value('id', $params)) { CRM_Utils_Hook::pre('edit', 'RecurringEntity', $params['id'], $params); @@ -121,13 +130,13 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { if ($this->scheduleId) { // get params by ID - $this->recursion = $this->getRecursionFromReminder($this->scheduleId); - } else if (!empty($this->schedule)) { - $this->scheduleDBParams = $this->mapFormValuesToDB($this->schedule);//call using obj + $this->schedule = $this->getScheduleParams($this->scheduleId); + } else if (!empty($this->scheduleFormValues)) { + $this->schedule = $this->mapFormValuesToDB($this->scheduleFormValues); } - if (!empty($this->scheduleDBParams)) { - $this->recursion = $this->getRecursionFromReminderByDBParams($this->scheduleDBParams); + if (!empty($this->schedule)) { + $this->recursion = $this->getRecursionFromSchedule($this->schedule); } return $this->recursion; } @@ -162,7 +171,7 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { $this->isRecurringEntityRecord ); - if ($obj->id) { + if (is_a($obj, 'CRM_Core_DAO') && $obj->id) { $newCriteria = array(); $newEntities[$this->entity_table][$count] = $obj->id; @@ -176,7 +185,7 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { CRM_Utils_Array::value('isRecurringEntityRecord', $linkedInfo, TRUE) ); - if ($linkedObj->id) { + if (is_a($linkedObj, 'CRM_Core_DAO') && $linkedObj->id) { $newEntities[$linkedInfo['table']][$count] = $linkedObj->id; } } @@ -193,7 +202,7 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { $recursionDates = array(); if (is_a($this->recursion, 'When')) { - $initialCount = CRM_Utils_Array::value('start_action_offset', $this->scheduleDBParams); + $initialCount = CRM_Utils_Array::value('start_action_offset', $this->scheduleFormValues); $exRangeStart = $exRangeEnd = NULL; if (!empty($this->excludeDateRangeColumns)) { @@ -242,7 +251,6 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { // lets increase the counter, so we get correct number of occurrences $initialCount++; $this->recursion->count($initialCount); - $this->recursionCounter = $initialCount; } continue; } @@ -334,7 +342,7 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { } $newObject = CRM_Core_DAO::copyGeneric($daoName, $fromCriteria, $newParams); - if ($newObject && $newObject->id && $createRecurringEntity) { + if (is_a($newObject, 'CRM_Core_DAO') && $newObject->id && $createRecurringEntity) { $object = new $daoName( ); foreach ($fromCriteria as $key => $value) { $object->$key = $value; @@ -386,12 +394,15 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { $processedEntities[$key] = 1; if (array_key_exists($entityTable, self::$_tableDAOMapper)) { - $daoName = self::$_tableDAOMapper[$entityTable]; + $daoName = self::$_tableDAOMapper[$entityTable]; - // FIXME: generalize me - $skipData = array('start_date' => NULL, - 'end_date' => NULL, - ); + $skipData = array(); + if (array_key_exists($entityTable, self::$_updateSkipFields)) { + $skipFields = self::$_updateSkipFields[$entityTable]; + foreach ($skipFields as $sfield) { + $skipData[$sfield] = NULL; + } + } $updateDAO = CRM_Core_DAO::cascadeUpdate($daoName, $obj->id, $entityID, $skipData); CRM_Core_DAO::freeResult(); @@ -485,17 +496,17 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { return $dao; } - function getRecursionFromReminder($scheduleReminderId){ - if($scheduleReminderId){ + function getScheduleParams($scheduleReminderId) { + $scheduleReminderDetails = array(); + if ($scheduleReminderId){ //Get all the details from schedule reminder table $scheduleReminderDetails = self::getScheduleReminderDetailsById($scheduleReminderId); $scheduleReminderDetails = (array) $scheduleReminderDetails; - $recursionDetails = self::getRecursionFromReminderByDBParams($scheduleReminderDetails); } - return $recursionDetails; + return $scheduleReminderDetails; } - function getRecursionFromReminderByDBParams($scheduleReminderDetails = array()){ + function getRecursionFromSchedule($scheduleReminderDetails = array()){ $r = new When(); //If there is some data for this id if($scheduleReminderDetails['repetition_frequency_unit']){ diff --git a/CRM/Core/Page/AJAX/RecurringEntity.php b/CRM/Core/Page/AJAX/RecurringEntity.php index 160361b433..db5cce2952 100644 --- a/CRM/Core/Page/AJAX/RecurringEntity.php +++ b/CRM/Core/Page/AJAX/RecurringEntity.php @@ -41,7 +41,7 @@ class CRM_Core_Page_AJAX_RecurringEntity { if(!empty($formValues)){ $recursion = new CRM_Core_BAO_RecurringEntity(); $recursion->dateColumns = array('start_date'); - $recursion->schedule = $formValues; + $recursion->scheduleFormValues = $formValues; if (!empty($formValues['exclude_date_list'])) { $recursion->excludeDates = $formValues['exclude_date_list']; $recursion->excludeDateRangeColumns = array('start_date', 'end_date'); diff --git a/tests/phpunit/CRM/Core/BAO/RecurringEntityTest.php b/tests/phpunit/CRM/Core/BAO/RecurringEntityTest.php index 584a6fb3ed..be20d54eca 100644 --- a/tests/phpunit/CRM/Core/BAO/RecurringEntityTest.php +++ b/tests/phpunit/CRM/Core/BAO/RecurringEntityTest.php @@ -76,7 +76,7 @@ class CRM_Core_BAO_RecurringEntityTest extends CiviUnitTestCase { $recursion->entity_id = $daoActivity->id; $recursion->entity_table = 'civicrm_activity'; $recursion->dateColumns = array('activity_date_time'); - $recursion->scheduleDBParams = array( + $recursion->schedule = array( 'entity_value' => $daoActivity->id, 'start_action_date' => $daoActivity->activity_date_time, 'entity_status' => 'fourth saturday', @@ -87,7 +87,7 @@ class CRM_Core_BAO_RecurringEntityTest extends CiviUnitTestCase { ); $generatedEntities = $recursion->generate(); - foreach ($generatedEntities as $entityID) { + foreach ($generatedEntities['civicrm_activity'] as $entityID) { $this->assertDBNotNull('CRM_Activity_DAO_Activity', $entityID, 'id', 'id', 'Check DB if repeating activities were created' ); @@ -102,7 +102,7 @@ class CRM_Core_BAO_RecurringEntityTest extends CiviUnitTestCase { $daoActivity->save(); // check if other activities were affected - foreach ($generatedEntities as $entityID) { + foreach ($generatedEntities['civicrm_activity'] as $entityID) { $this->assertDBCompareValue('CRM_Activity_DAO_Activity', $entityID, 'subject', 'id', 'Changed Activity', 'Check if subject was updated'); } } @@ -146,7 +146,7 @@ class CRM_Core_BAO_RecurringEntityTest extends CiviUnitTestCase { $recursion->entity_id = $daoEvent->id; $recursion->entity_table = 'civicrm_event'; $recursion->dateColumns = array('start_date'); - $recursion->scheduleDBParams = array ( + $recursion->schedule = array ( 'entity_value' => $daoEvent->id, 'start_action_date' => $daoEvent->start_date, 'start_action_condition' => 'wednesday', @@ -239,7 +239,7 @@ class CRM_Core_BAO_RecurringEntityTest extends CiviUnitTestCase { $daoEvent->save(); // check if other events were affected - foreach ($generatedEntities as $entityID) { + foreach ($generatedEntities['civicrm_event'] as $entityID) { $this->assertDBCompareValue('CRM_Event_DAO_Event', $entityID, 'title', 'id', 'Event Changed', 'Check if title was updated'); } }