Skip to content

Commit

Permalink
CRM-20105 - Add restore function to case api
Browse files Browse the repository at this point in the history
  • Loading branch information
colemanw committed Apr 19, 2017
1 parent c8a0b88 commit 8572e6d
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 5 deletions.
3 changes: 3 additions & 0 deletions CRM/Core/Permission.php
Original file line number Diff line number Diff line change
Expand Up @@ -1016,6 +1016,9 @@ public static function getEntityActionPermissions() {
'access CiviCRM',
'delete in CiviCase',
),
'restore' => array(
'administer CiviCase',
),
'default' => array(
// At minimum the user needs one of the following. Finer-grained access is controlled by CRM_Case_BAO_Case::addSelectWhereClause
array('access my cases and activities', 'access all cases and activities'),
Expand Down
30 changes: 28 additions & 2 deletions api/v3/Case.php
Original file line number Diff line number Diff line change
Expand Up @@ -492,8 +492,7 @@ function civicrm_api3_case_update($params) {
* @endcode
*
* @throws API_Exception
* @return bool
* true if success, else false
* @return mixed
*/
function civicrm_api3_case_delete($params) {
//check parameters
Expand All @@ -507,6 +506,33 @@ function civicrm_api3_case_delete($params) {
}
}

/**
* Case.restore API specification
*
* @param array $spec description of fields supported by this API call
* @return void
*/
function _civicrm_api3_case_restore_spec(&$spec) {
$result = civicrm_api3('Case', 'getfields', array('api_action' => 'delete'));
$spec = array('id' => $result['values']['id']);
}

/**
* Restore a specified case from the trash.
*
* @param array $params
* @throws API_Exception
* @return mixed
*/
function civicrm_api3_case_restore($params) {
if (CRM_Case_BAO_Case::restoreCase($params['id'])) {
return civicrm_api3_create_success($params, $params, 'Case', 'restore');
}
else {
throw new API_Exception('Could not restore case.');
}
}

/**
* Augment case results with extra data.
*
Expand Down
13 changes: 10 additions & 3 deletions tests/phpunit/api/v3/CaseTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -177,14 +177,21 @@ public function testCaseDelete() {

// Move Case to Trash
$id = $result['id'];
$result = $this->callAPISuccess('case', 'delete', array('id' => $id, 'move_to_trash' => 1));
$this->callAPISuccess('case', 'delete', array('id' => $id, 'move_to_trash' => 1));

// Check result - also check that 'case_id' works as well as 'id'
$result = $this->callAPISuccess('case', 'get', array('case_id' => $id));
$this->assertEquals(1, $result['values'][$id]['is_deleted']);

// Delete Case Permanently - also check that 'case_id' works as well as 'id'
$result = $this->callAPISuccess('case', 'delete', array('case_id' => $id));
// Restore Case from Trash
$this->callAPISuccess('case', 'restore', array('id' => $id));

// Check result
$result = $this->callAPISuccess('case', 'get', array('case_id' => $id));
$this->assertEquals(0, $result['values'][$id]['is_deleted']);

// Delete Case Permanently
$this->callAPISuccess('case', 'delete', array('case_id' => $id));

// Check result - case should no longer exist
$result = $this->callAPISuccess('case', 'get', array('id' => $id));
Expand Down

0 comments on commit 8572e6d

Please sign in to comment.