diff --git a/CRM/Activity/DAO/Activity.php b/CRM/Activity/DAO/Activity.php index 006deffe81295f286aa2d6ce5fb376b7cd5b42ca..8d6164047ea8677793c86e5ce01c949bddb8e434 100644 --- a/CRM/Activity/DAO/Activity.php +++ b/CRM/Activity/DAO/Activity.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Activity/Activity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:96205b68fd8160c65b7f66a11c169078) + * (GenCodeChecksum:016e3be7b0f4a706b96d0c1e8523b25f) */ /** @@ -206,18 +206,22 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { public $relationship_id; /** + * Unused deprecated column. + * * @var bool|string * (SQL type: tinyint) * Note that values will be retrieved from the database as a string. + * @deprecated */ public $is_current_revision; /** - * Activity ID of the first activity record in versioning chain. + * Unused deprecated column. * * @var int|string|null * (SQL type: int unsigned) * Note that values will be retrieved from the database as a string. + * @deprecated */ public $original_id; @@ -663,12 +667,10 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { 'is_current_revision' => [ 'name' => 'is_current_revision', 'type' => CRM_Utils_Type::T_BOOLEAN, - 'title' => ts('Is this activity a current revision in versioning chain?'), + 'title' => ts('Is current (unused)'), + 'description' => ts('Unused deprecated column.'), 'required' => TRUE, - 'import' => TRUE, 'where' => 'civicrm_activity.is_current_revision', - 'headerPattern' => '/(is.)?(current.)?(revision|version(ing)?)/i', - 'export' => TRUE, 'default' => '1', 'table_name' => 'civicrm_activity', 'entity' => 'Activity', @@ -679,8 +681,8 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { 'original_id' => [ 'name' => 'original_id', 'type' => CRM_Utils_Type::T_INT, - 'title' => ts('Original Activity ID'), - 'description' => ts('Activity ID of the first activity record in versioning chain.'), + 'title' => ts('Original ID (unused)'), + 'description' => ts('Unused deprecated column.'), 'where' => 'civicrm_activity.original_id', 'table_name' => 'civicrm_activity', 'entity' => 'Activity', diff --git a/CRM/Admin/Form/Setting/Case.php b/CRM/Admin/Form/Setting/Case.php index 6ab3a59dd823f41ab098284995cc2532b0a0bfaa..c952ac24d877fc6fbdc2e1dda0a77504d4d011b5 100644 --- a/CRM/Admin/Form/Setting/Case.php +++ b/CRM/Admin/Form/Setting/Case.php @@ -24,7 +24,6 @@ class CRM_Admin_Form_Setting_Case extends CRM_Admin_Form_Setting { 'civicaseRedactActivityEmail' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'civicaseAllowMultipleClients' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'civicaseNaturalActivityTypeSort' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, - 'civicaseActivityRevisions' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'civicaseShowCaseActivities' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, ]; diff --git a/api/v3/Activity.php b/api/v3/Activity.php index 275105a5038f3ab451c9a40e06f1603528df8ad7..9d0a86bce48873c0718c9826c3bfa82f30be2809 100644 --- a/api/v3/Activity.php +++ b/api/v3/Activity.php @@ -63,71 +63,14 @@ function civicrm_api3_activity_create($params) { // needs testing $params['skipRecentView'] = TRUE; - // If this is a case activity, see if there is an existing activity - // and set it as an old revision. Also retrieve details we'll need. - // this handling should all be moved to the BAO layer - $case_id = ''; - $createRevision = FALSE; - $oldActivityValues = []; - // Lookup case id if not supplied - if (!isset($params['case_id']) && !empty($params['id'])) { - $params['case_id'] = CRM_Core_DAO::singleValueQuery("SELECT case_id FROM civicrm_case_activity WHERE activity_id = " . (int) $params['id']); - } - if (!empty($params['case_id'])) { - $case_id = $params['case_id']; - if (!empty($params['id']) && Civi::settings()->get('civicaseActivityRevisions')) { - $oldActivityParams = ['id' => $params['id']]; - if (!$oldActivityValues) { - CRM_Activity_BAO_Activity::retrieve($oldActivityParams, $oldActivityValues); - } - if (empty($oldActivityValues)) { - throw new API_Exception(ts("Unable to locate existing activity.")); - } - else { - $activityDAO = new CRM_Activity_DAO_Activity(); - $activityDAO->id = $params['id']; - $activityDAO->is_current_revision = 0; - if (!$activityDAO->save()) { - throw new API_Exception(ts("Unable to revision existing case activity.")); - } - $createRevision = TRUE; - } - } - } - - if ($case_id && $createRevision) { - // This is very similar to the copy-to-case action. - if (!CRM_Utils_Array::crmIsEmptyArray($oldActivityValues['target_contact'])) { - $oldActivityValues['targetContactIds'] = implode(',', array_unique($oldActivityValues['target_contact'])); - } - if (!CRM_Utils_Array::crmIsEmptyArray($oldActivityValues['assignee_contact'])) { - $oldActivityValues['assigneeContactIds'] = implode(',', array_unique($oldActivityValues['assignee_contact'])); - } - $oldActivityValues['mode'] = 'copy'; - $oldActivityValues['caseID'] = $case_id; - $oldActivityValues['activityID'] = $oldActivityValues['id']; - $oldActivityValues['contactID'] = $oldActivityValues['source_contact_id']; - - $copyToCase = CRM_Activity_Page_AJAX::_convertToCaseActivity($oldActivityValues); - if (empty($copyToCase['error_msg'])) { - // now fix some things that are different from copy-to-case - // then fall through to the create below to update with the passed in params - $params['id'] = $copyToCase['newId']; - $params['is_auto'] = 0; - $params['original_id'] = empty($oldActivityValues['original_id']) ? $oldActivityValues['id'] : $oldActivityValues['original_id']; - } - else { - throw new API_Exception(ts("Unable to create new revision of case activity.")); - } - } - // create activity $activityBAO = CRM_Activity_BAO_Activity::create($params); if (isset($activityBAO->id)) { - if ($case_id && $isNew && !$createRevision) { + // Fixme - Move business logic out of API + if (!empty($params['case_id']) && $isNew) { // If this is a brand new case activity, add to case(s) - foreach ((array) $case_id as $singleCaseId) { + foreach ((array) $params['case_id'] as $singleCaseId) { $caseActivityParams = ['activity_id' => $activityBAO->id, 'case_id' => $singleCaseId]; CRM_Case_BAO_Case::processCaseActivity($caseActivityParams); } diff --git a/api/v3/examples/Setting/GetFields.ex.php b/api/v3/examples/Setting/GetFields.ex.php index e48cac75aa6056867f6c5a73d231f636e0a5aa78..2765ad7ac76b5a855beae2e87d2c429594e205b3 100644 --- a/api/v3/examples/Setting/GetFields.ex.php +++ b/api/v3/examples/Setting/GetFields.ex.php @@ -199,21 +199,6 @@ function setting_getfields_expectedresult() { 'description' => 'How to sort activity-types on the \"Manage Case\" screen? (Set \"Default\" to load setting from the legacy \"Settings.xml\" file.)', 'help_text' => '', ], - 'civicaseActivityRevisions' => [ - 'group_name' => 'CiviCRM Preferences', - 'group' => 'core', - 'name' => 'civicaseActivityRevisions', - 'type' => 'Boolean', - 'quick_form_type' => 'YesNo', - 'default' => '', - 'html_type' => 'radio', - 'add' => '4.7', - 'title' => 'Enable deprecated Embedded Activity Revisions', - 'is_domain' => 1, - 'is_contact' => 0, - 'description' => 'Enable tracking of activity revisions embedded within the \"civicrm_activity\" table. This should not be enabled on new installs and will be unsupported in the future. You should enable \"Administer => System Settings => Misc => Logging\" instead.', - 'help_text' => '', - ], 'civicaseShowCaseActivities' => [ 'group_name' => 'CiviCRM Preferences', 'group' => 'core', diff --git a/settings/Case.setting.php b/settings/Case.setting.php index 0b19250e61af2f4708bce5d6708c60767402a203..692a00ec7fa166d1d4a8cb450ee6bbbc86b459de 100644 --- a/settings/Case.setting.php +++ b/settings/Case.setting.php @@ -82,21 +82,6 @@ return [ 'description' => ts('How to sort activity-types on the "Manage Case" screen? (Set "Default" to load setting from the legacy "Settings.xml" file.)'), 'help_text' => '', ], - 'civicaseActivityRevisions' => [ - 'group_name' => 'CiviCRM Preferences', - 'group' => 'core', - 'name' => 'civicaseActivityRevisions', - 'type' => 'Boolean', - 'quick_form_type' => 'YesNo', - 'default' => FALSE, - 'html_type' => 'radio', - 'add' => '4.7', - 'title' => ts('Enable deprecated Embedded Activity Revisions'), - 'is_domain' => 1, - 'is_contact' => 0, - 'description' => ts('Enable tracking of activity revisions embedded within the "civicrm_activity" table. This should not be enabled on new installs and will be unsupported in the future. You should enable "Administer => System Settings => Misc => Logging" instead.'), - 'help_text' => '', - ], 'civicaseShowCaseActivities' => [ 'group_name' => 'CiviCRM Preferences', 'group' => 'core', diff --git a/tests/phpunit/api/v3/CaseTest.php b/tests/phpunit/api/v3/CaseTest.php index a172c07bedab1a93eaad7bd56f5574ddc3021627..0af14d90f329a907052c07a54f9689b885a7f774 100644 --- a/tests/phpunit/api/v3/CaseTest.php +++ b/tests/phpunit/api/v3/CaseTest.php @@ -495,126 +495,6 @@ class api_v3_CaseTest extends CiviCaseTestCase { $this->assertContains($case['id'], $result['case_id']); } - /** - * Test activity api update for case activities. - */ - public function testCaseActivityUpdate_Tracked() { - $this->settingsStack->push('civicaseActivityRevisions', TRUE); - - // Need to create the case and activity before we can update it - $this->testCaseActivityCreate(); - - $params = [ - 'activity_id' => $this->_caseActivityId, - 'case_id' => 1, - 'activity_type_id' => 14, - 'source_contact_id' => $this->_loggedInUser, - 'subject' => 'New subject', - ]; - $result = $this->callAPISuccess('activity', 'create', $params); - - $this->assertEquals($result['values'][$result['id']]['subject'], $params['subject']); - - // id should be one greater, since this is a new revision - $this->assertEquals($result['values'][$result['id']]['id'], $this->_caseActivityId + 1); - $this->assertEquals($result['values'][$result['id']]['original_id'], $this->_caseActivityId); - - // Check revision is as expected - $revParams = [ - 'activity_id' => $this->_caseActivityId, - ]; - $revActivity = $this->callAPISuccess('activity', 'get', $revParams); - $this->assertEquals($revActivity['values'][$this->_caseActivityId]['is_current_revision'], - 0); - $this->assertEquals($revActivity['values'][$this->_caseActivityId]['is_deleted'], - 0 - ); - } - - /** - * If you disable `civicaseActivityRevisions`, then editing an activity - * will *not* create or change IDs. - */ - public function testCaseActivityUpdate_Untracked() { - $this->settingsStack->push('civicaseActivityRevisions', FALSE); - - // Need to create the case and activity before we can update it - $this->testCaseActivityCreate(); - - $oldIDs = CRM_Utils_SQL_Select::from('civicrm_activity') - ->select('id, original_id, is_current_revision') - ->orderBy('id') - ->execute()->fetchAll(); - - $params = [ - 'activity_id' => $this->_caseActivityId, - 'case_id' => 1, - 'activity_type_id' => 14, - 'source_contact_id' => $this->_loggedInUser, - 'subject' => 'New subject', - ]; - $result = $this->callAPISuccess('activity', 'create', $params); - $this->assertEquals($result['values'][$result['id']]['subject'], $params['subject']); - - // id should not change because we've opted out. - $this->assertEquals($this->_caseActivityId, $result['values'][$result['id']]['id']); - $this->assertEmpty($result['values'][$result['id']]['original_id']); - - $newIDs = CRM_Utils_SQL_Select::from('civicrm_activity') - ->select('id, original_id, is_current_revision') - ->orderBy('id') - ->execute()->fetchAll(); - $this->assertEquals($oldIDs, $newIDs); - } - - public function testCaseActivityUpdateCustom() { - $this->settingsStack->push('civicaseActivityRevisions', TRUE); - - // Create a case first - $result = $this->callAPISuccess('case', 'create', $this->_params); - - // Create custom field group - // Note the second parameter is Activity on purpose, not Case. - $custom_ids = $this->entityCustomGroupWithSingleFieldCreate(__FUNCTION__, 'ActivityTest.php'); - - // create activity - $params = [ - 'case_id' => $result['id'], - // follow up - 'activity_type_id' => 14, - 'subject' => 'Test followup', - 'source_contact_id' => $this->_loggedInUser, - 'target_contact_id' => $this->_params['contact_id'], - 'custom_' . $custom_ids['custom_field_id'] => "custom string", - ]; - $result = $this->callAPISuccess('activity', 'create', $params); - - $aid = $result['values'][$result['id']]['id']; - - // Update activity - $params = [ - 'activity_id' => $aid, - 'case_id' => 1, - 'activity_type_id' => 14, - 'source_contact_id' => $this->_loggedInUser, - 'subject' => 'New subject', - ]; - $this->callAPISuccess('activity', 'create', $params); - - // Retrieve revision and check custom fields got copied. - $revParams = [ - 'activity_id' => $aid + 1, - 'return.custom_' . $custom_ids['custom_field_id'] => 1, - ]; - $revAct = $this->callAPISuccess('activity', 'get', $revParams); - - $this->assertEquals($revAct['values'][$aid + 1]['custom_' . $custom_ids['custom_field_id']], "custom string", - "Error message: " . CRM_Utils_Array::value('error_message', $revAct)); - - $this->customFieldDelete($custom_ids['custom_field_id']); - $this->customGroupDelete($custom_ids['custom_group_id']); - } - public function testCaseGetByStatus() { // Create 2 cases with different status ids. $case1 = $this->callAPISuccess('Case', 'create', [ @@ -933,15 +813,9 @@ class api_v3_CaseTest extends CiviCaseTestCase { * * See the case.addtimeline api. * - * @param bool $enableRevisions - * - * @dataProvider caseActivityRevisionExamples - * * @throws \Exception */ - public function testCaseAddtimeline($enableRevisions) { - $this->settingsStack->push('civicaseActivityRevisions', $enableRevisions); - + public function testCaseAddtimeline() { $caseSpec = [ 'title' => 'Application with Definition', 'name' => 'Application_with_Definition', @@ -1025,18 +899,6 @@ class api_v3_CaseTest extends CiviCaseTestCase { $this->assertEquals(1, $result['is_deleted']); } - /** - * Get case activity revision sample data. - * - * @return array - */ - public function caseActivityRevisionExamples() { - $examples = []; - $examples[] = [FALSE]; - $examples[] = [TRUE]; - return $examples; - } - public function testTimestamps() { $params = $this->_params; $case_created = $this->callAPISuccess('case', 'create', $params); diff --git a/xml/schema/Activity/Activity.xml b/xml/schema/Activity/Activity.xml index c6f33a984636f1c5a7e499d69a00f60d98d8366c..09a55c45143fd69b49135e0d320fa32ea323a495 100644 --- a/xml/schema/Activity/Activity.xml +++ b/xml/schema/Activity/Activity.xml @@ -293,12 +293,12 @@ </foreignKey> <field> <name>is_current_revision</name> - <title>Is this activity a current revision in versioning chain?</title> + <title>Is current (unused)</title> <type>boolean</type> <default>1</default> + <comment>Unused deprecated column.</comment> <required>true</required> - <import>true</import> - <headerPattern>/(is.)?(current.)?(revision|version(ing)?)/i</headerPattern> + <deprecated>true</deprecated> <add>2.2</add> </field> <index> @@ -309,8 +309,9 @@ <field> <name>original_id</name> <type>int unsigned</type> - <title>Original Activity ID</title> - <comment>Activity ID of the first activity record in versioning chain.</comment> + <title>Original ID (unused)</title> + <comment>Unused deprecated column.</comment> + <deprecated>true</deprecated> <readonly>true</readonly> <html> <label>Original Activity</label>