implement test mode for TwingleSync

This commit is contained in:
Marc Michalsky forumZFD 2020-09-30 15:27:55 +02:00
parent 50b0ff7da8
commit f9cbe9db6c
Signed by untrusted user who does not match committer: marc.koch
GPG key ID: 12406554CFB028B9
3 changed files with 27 additions and 13 deletions

View file

@ -22,7 +22,7 @@ function _civicrm_api3_twingle_sync_Get_spec(&$spec) {
'description' => E::ts('The key to access the Twingle API'), 'description' => E::ts('The key to access the Twingle API'),
]; ];
$spec['test'] = [ $spec['test'] = [
'name' => 'test', 'name' => 'is_test',
'title' => E::ts('Test'), 'title' => E::ts('Test'),
'type' => CRM_Utils_Type::T_BOOLEAN, 'type' => CRM_Utils_Type::T_BOOLEAN,
'api.required' => 0, 'api.required' => 0,
@ -45,6 +45,9 @@ function _civicrm_api3_twingle_sync_Get_spec(&$spec) {
function civicrm_api3_twingle_sync_Get($params) { function civicrm_api3_twingle_sync_Get($params) {
$result_values = []; $result_values = [];
// Is this call a test?
$is_test = (boolean) $params['is_test'];
// If function call provides an API key, use it instead of the API key set // If function call provides an API key, use it instead of the API key set
// on the extension settings page // on the extension settings page
$apiKey = empty($params['twingle_api_key']) $apiKey = empty($params['twingle_api_key'])
@ -60,7 +63,8 @@ function civicrm_api3_twingle_sync_Get($params) {
$i = 0; $i = 0;
foreach ($projects as $project) { foreach ($projects as $project) {
if (is_array($project)) { if (is_array($project)) {
$result_values['sync']['projects'][$i++] = $twingleApi->syncProject($project); $result_values['sync']['projects'][$i++] = $twingleApi
->syncProject($project, $is_test);
} }
} }

View file

@ -106,18 +106,18 @@ class TwingleApiCall {
* @throws \CiviCRM_API3_Exception * @throws \CiviCRM_API3_Exception
* @throws \Exception * @throws \Exception
*/ */
public function syncProject($values) { public function syncProject(array $values, bool $is_test = FALSE) {
if (is_array($values)) { if (is_array($values)) {
$project = new TwingleProject($values); $project = new TwingleProject($values);
$result = $project->create($is_test);
$result = $project->create(); $result = $project->create();
if ( if (
$result['state'] == 'exists' && $result['state'] == 'exists' &&
$values['last_update'] > $project->getTimestamp() $values['last_update'] > $project->getTimestamp()
) { ) {
$result = $project->update(); $result = $project->update($is_test);
} }
elseif ( elseif (
$result['state'] == 'exists' && $result['state'] == 'exists' &&
@ -134,7 +134,8 @@ class TwingleApiCall {
} }
public function updateProject(array $values) { public function updateProject(array $values, bool $is_test = FALSE) {
// TODO: Implement $is_test
$url = $this->protocol . 'project' . $this->baseUrl . $values['id']; $url = $this->protocol . 'project' . $this->baseUrl . $values['id'];
return $this->curlPost($url, $values); return $this->curlPost($url, $values);
} }

View file

@ -92,15 +92,18 @@ class TwingleProject {
// Create project if it does not exist yet and give back the result // Create project if it does not exist yet and give back the result
if (!$this->exists()) { if (!$this->exists()) {
$result = civicrm_api3('Campaign', 'create', $translatedValues); if (!$is_test) {
$result = civicrm_api3('Campaign', 'create', $translatedValues);
$this->id = $result['id']; $this->id = $result['id'];
$this->timestamp = $result['last_update']; $this->timestamp = $result['last_update'];
return [ return [
'title' => $this->values['title'], }
'id' => $this->id, // If this is a test, do not create campaign
'project_id' => $this->values['id'], else {
'state' => 'created', 'state' => 'created',
]; }
}
else {
} }
// Give information back if project already exists // Give information back if project already exists
return [ return [
@ -114,14 +117,20 @@ class TwingleProject {
/** /**
* Update an existing project * Update an existing project
* *
* If true: don't do any changes
*
* @param bool $is_test
*
* @return array * @return array
* @throws \CiviCRM_API3_Exception * @throws \CiviCRM_API3_Exception
*/ */
public function update() { public function update(bool $is_test = FALSE) {
// Translate $value keys to custom field names // Translate $value keys to custom field names
$translatedValues = $this->translateValues(); $translatedValues = $this->translateValues();
$result = civicrm_api3('Campaign', 'create', $translatedValues); if (!$is_test) {
$result = civicrm_api3('Campaign', 'create', $translatedValues);
return [ return [
'title' => $this->values['title'], 'title' => $this->values['title'],
'id' => $this->id, 'id' => $this->id,