implement postSave hook along with callback function

This commit is contained in:
Marc Michalsky forumZFD 2021-01-19 16:54:04 +01:00
parent c7bc3d6e94
commit b9175fa936
Signed by untrusted user who does not match committer: marc.koch
GPG key ID: 12406554CFB028B9
3 changed files with 70 additions and 42 deletions

View file

@ -118,6 +118,12 @@ abstract class CRM_TwingleCampaign_BAO_Campaign {
else if (in_array($key, $filter)) { else if (in_array($key, $filter)) {
$this->values[$key] = $value; $this->values[$key] = $value;
} }
else if ($key == 'embed') {
self::setEmbedData($value);
}
else if ($key == 'counter-url') {
self::setCounterUrl($value['url']);
}
} }
} }

View file

@ -1,4 +1,5 @@
<?php <?php
use CRM_TwingleCampaign_BAO_TwingleApiCall as TwingleApiCall; use CRM_TwingleCampaign_BAO_TwingleApiCall as TwingleApiCall;
use CRM_TwingleCampaign_BAO_TwingleProject as TwingleProject; use CRM_TwingleCampaign_BAO_TwingleProject as TwingleProject;
use CRM_TwingleCampaign_BAO_TwingleEvent as TwingleEvent; use CRM_TwingleCampaign_BAO_TwingleEvent as TwingleEvent;
@ -66,9 +67,12 @@ function _civicrm_api3_twingle_sync_Sync_spec(array &$spec) {
function civicrm_api3_twingle_sync_Sync($params) { function civicrm_api3_twingle_sync_Sync($params) {
$result_values = []; $result_values = [];
$is_test = FALSE;
// Is this call a test? // Is this call a test?
$is_test = (boolean) $params['is_test']; if ($params['is_test']) {
$is_test = $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
@ -89,35 +93,37 @@ function civicrm_api3_twingle_sync_Sync($params) {
// Get single TwingleProject // Get single TwingleProject
$projects_from_civicrm = $projects_from_civicrm =
civicrm_api3('TwingleProject', 'getsingle', civicrm_api3('TwingleProject', 'getsingle',
['id' => $params['id'], 'is_active' => 1])['values']; ['id' => $params['id'], 'is_active' => 1])['values'];
// Get single project from Twingle // Get single project from Twingle
$projects_from_twingle[0] = $projects_from_twingle[0] =
$projects_from_civicrm[$params['id']]['project_id'] $projects_from_civicrm[$params['id']]['project_id']
? $twingleApi->getProject($projects_from_civicrm[$params['id']]['project_id']) ? $twingleApi->getProject($projects_from_civicrm[$params['id']]['project_id'])
: Null; : NULL;
}
else if ($params['project_id']) {
// Get single project from Twingle
$projects_from_twingle[0] = $twingleApi->getProject($params['project_id']);
// Get single TwingleProject
$projects_from_civicrm = civicrm_api3('TwingleProject', 'get',
['is_active' => 1, 'project_id' => $params['project_id']]);
} }
else { else {
// Get all projects from Twingle if ($params['project_id']) {
$projects_from_twingle = $twingleApi->getProject(); // Get single project from Twingle
$projects_from_twingle[0] = $twingleApi->getProject($params['project_id']);
// Get all TwingleProjects from CiviCRM // Get single TwingleProject
$projects_from_civicrm = civicrm_api3('TwingleProject', 'get', $projects_from_civicrm = civicrm_api3('TwingleProject', 'get',
['is_active' => 1,]); ['is_active' => 1, 'project_id' => $params['project_id']]);
}
else {
// Get all projects from Twingle
$projects_from_twingle = $twingleApi->getProject();
// Get all TwingleProjects from CiviCRM
$projects_from_civicrm = civicrm_api3('TwingleProject', 'get',
['is_active' => 1,])['values'];
}
} }
$i = 0; $i = 0;
// Push missing projects to Twingle // Push missing projects to Twingle
foreach ($projects_from_civicrm['values'] as $project_from_civicrm) { foreach ($projects_from_civicrm as $project_from_civicrm) {
if (!in_array($project_from_civicrm['project_id'], if (!in_array($project_from_civicrm['project_id'],
array_column($projects_from_twingle, 'id'))) { array_column($projects_from_twingle, 'id'))) {
// store campaign id in $id // store campaign id in $id
@ -133,8 +139,8 @@ function civicrm_api3_twingle_sync_Sync($params) {
// set status // set status
$project_create['status'] = $project_create['status'] =
$project_create['status'] == 'TwingleProject created' $project_create['status'] == 'TwingleProject created'
? 'TwingleProject pushed to Twingle' ? 'TwingleProject pushed to Twingle'
: 'TwingleProject got likely pushed to Twingle but local update failed'; : 'TwingleProject got likely pushed to Twingle but local update failed';
$result_values['sync']['projects'][$i++] = $project_create; $result_values['sync']['projects'][$i++] = $project_create;
} }
} }

View file

@ -1,22 +1,25 @@
<?php <?php
//use CRM_TwingleCampaign_BAO_CampaignType as CampaignType; use CRM_TwingleCampaign_BAO_CampaignType as CampaignType;
//use CRM_TwingleCampaign_Utils_ExtensionCache as ExtensionCache; use CRM_TwingleCampaign_Utils_ExtensionCache as ExtensionCache;
require_once 'twinglecampaign.civix.php'; require_once 'twinglecampaign.civix.php';
use CRM_TwingleCampaign_ExtensionUtil as E; use CRM_TwingleCampaign_ExtensionUtil as E;
// //
//Civi::dispatcher()->addListener('hook_civicrm_postSave_civicrm_campaign', //Civi::dispatcher()->addListener('hook_civicrm_postSave_civicrm_campaign',
// "twinglecampaign_postSave_civicrm_campaign", -1000); // "twinglecampaign_postSave_civicrm_campaign", -1000);
/*/** /**
* Implements hook_civicrm_postSave_Campaigns(). * Implements hook_civicrm_postSave_Campaigns().
* *
* @param $dao * @param $dao
* *
* @throws CiviCRM_API3_Exception * @throws CiviCRM_API3_Exception
* */
function twinglecampaign_civicrm_postSave_civicrm_campaign($dao) { function twinglecampaign_civicrm_postSave_civicrm_campaign($dao) {
$twingle_campaign_types = ExtensionCache::getInstance()->getCampaigns()['campaign_types']; $twingle_campaign_types = ExtensionCache::getInstance()
->getCampaigns()['campaign_types'];
$twingle_campaign_type_ids = []; $twingle_campaign_type_ids = [];
$hook_campaign_type_id = $dao->campaign_type_id; $hook_campaign_type_id = $dao->campaign_type_id;
$hook_campaign_id = $dao->id; $hook_campaign_id = $dao->id;
@ -27,14 +30,27 @@ function twinglecampaign_civicrm_postSave_civicrm_campaign($dao) {
array_push($twingle_campaign_type_ids, $id); array_push($twingle_campaign_type_ids, $id);
} }
if (in_array($hook_campaign_type_id, $twingle_campaign_type_ids)) { if (in_array($hook_campaign_type_id, $twingle_campaign_type_ids)) {
civicrm_api3('TwingleSync', 'sync', ['id' => $hook_campaign_id]); if (CRM_Core_Transaction::isActive()) {
CRM_Core_Transaction::addCallback(
CRM_Core_Transaction::PHASE_POST_COMMIT,
'twinglecampaign_postSave_callback',
[$hook_campaign_id]
);
}
else {
twinglecampaign_postSave_callback($hook_campaign_id);
}
} }
}*/ }
function twinglecampaign_postSave_callback($campaign_id) {
civicrm_api3('TwingleSync', 'sync', ['id' => $campaign_id]);
}
/** /**
* Implements hook_civicrm_config(). * Implements hook_civicrm_config().
* *
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config/ * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config/
*/ */
function twinglecampaign_civicrm_config(&$config) { function twinglecampaign_civicrm_config(&$config) {
_twinglecampaign_civix_civicrm_config($config); _twinglecampaign_civix_civicrm_config($config);
@ -176,23 +192,23 @@ function twinglecampaign_civicrm_themes(&$themes) {
* *
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_preProcess * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_preProcess
* *
function twinglecampaign_civicrm_preProcess($formName, &$form) { * function twinglecampaign_civicrm_preProcess($formName, &$form) {
*
} // */ * } // */
/** /**
* Implements hook_civicrm_navigationMenu(). * Implements hook_civicrm_navigationMenu().
* *
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_navigationMenu * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_navigationMenu
* *
function twinglecampaign_civicrm_navigationMenu(&$menu) { * function twinglecampaign_civicrm_navigationMenu(&$menu) {
_twinglecampaign_civix_insert_navigation_menu($menu, 'Mailings', array( * _twinglecampaign_civix_insert_navigation_menu($menu, 'Mailings', array(
'label' => E::ts('New subliminal message'), * 'label' => E::ts('New subliminal message'),
'name' => 'mailing_subliminal_message', * 'name' => 'mailing_subliminal_message',
'url' => 'civicrm/mailing/subliminal', * 'url' => 'civicrm/mailing/subliminal',
'permission' => 'access CiviMail', * 'permission' => 'access CiviMail',
'operator' => 'OR', * 'operator' => 'OR',
'separator' => 0, * 'separator' => 0,
)); * ));
_twinglecampaign_civix_navigationMenu($menu); * _twinglecampaign_civix_navigationMenu($menu);
} // */ * } // */