From b9175fa936d417eb2a03fa200d346d14792b901e Mon Sep 17 00:00:00 2001 From: Marc Michalsky forumZFD Date: Tue, 19 Jan 2021 16:54:04 +0100 Subject: [PATCH] implement postSave hook along with callback function --- CRM/TwingleCampaign/BAO/Campaign.php | 6 +++ api/v3/TwingleSync/Sync.php | 46 +++++++++++---------- twinglecampaign.php | 60 ++++++++++++++++++---------- 3 files changed, 70 insertions(+), 42 deletions(-) diff --git a/CRM/TwingleCampaign/BAO/Campaign.php b/CRM/TwingleCampaign/BAO/Campaign.php index 48d5614..a0a62d4 100644 --- a/CRM/TwingleCampaign/BAO/Campaign.php +++ b/CRM/TwingleCampaign/BAO/Campaign.php @@ -118,6 +118,12 @@ abstract class CRM_TwingleCampaign_BAO_Campaign { else if (in_array($key, $filter)) { $this->values[$key] = $value; } + else if ($key == 'embed') { + self::setEmbedData($value); + } + else if ($key == 'counter-url') { + self::setCounterUrl($value['url']); + } } } diff --git a/api/v3/TwingleSync/Sync.php b/api/v3/TwingleSync/Sync.php index 60e6d27..a0f9060 100644 --- a/api/v3/TwingleSync/Sync.php +++ b/api/v3/TwingleSync/Sync.php @@ -1,4 +1,5 @@ $params['id'], 'is_active' => 1])['values']; + ['id' => $params['id'], 'is_active' => 1])['values']; // Get single project from Twingle $projects_from_twingle[0] = $projects_from_civicrm[$params['id']]['project_id'] - ? $twingleApi->getProject($projects_from_civicrm[$params['id']]['project_id']) - : 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']]); + ? $twingleApi->getProject($projects_from_civicrm[$params['id']]['project_id']) + : NULL; } else { - // Get all projects from Twingle - $projects_from_twingle = $twingleApi->getProject(); + if ($params['project_id']) { + // Get single project from Twingle + $projects_from_twingle[0] = $twingleApi->getProject($params['project_id']); - // Get all TwingleProjects from CiviCRM - $projects_from_civicrm = civicrm_api3('TwingleProject', 'get', - ['is_active' => 1,]); + // Get single TwingleProject + $projects_from_civicrm = civicrm_api3('TwingleProject', 'get', + ['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; // 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'], array_column($projects_from_twingle, 'id'))) { // store campaign id in $id @@ -133,8 +139,8 @@ function civicrm_api3_twingle_sync_Sync($params) { // set status $project_create['status'] = $project_create['status'] == 'TwingleProject created' - ? 'TwingleProject pushed to Twingle' - : 'TwingleProject got likely pushed to Twingle but local update failed'; + ? 'TwingleProject pushed to Twingle' + : 'TwingleProject got likely pushed to Twingle but local update failed'; $result_values['sync']['projects'][$i++] = $project_create; } } diff --git a/twinglecampaign.php b/twinglecampaign.php index 2bf68e8..d2237aa 100644 --- a/twinglecampaign.php +++ b/twinglecampaign.php @@ -1,22 +1,25 @@ addListener('hook_civicrm_postSave_civicrm_campaign', // "twinglecampaign_postSave_civicrm_campaign", -1000); -/*/** +/** * Implements hook_civicrm_postSave_Campaigns(). * * @param $dao * * @throws CiviCRM_API3_Exception - * + */ 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 = []; $hook_campaign_type_id = $dao->campaign_type_id; $hook_campaign_id = $dao->id; @@ -27,14 +30,27 @@ function twinglecampaign_civicrm_postSave_civicrm_campaign($dao) { array_push($twingle_campaign_type_ids, $id); } 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(). * - * @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) { _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 * -function twinglecampaign_civicrm_preProcess($formName, &$form) { - -} // */ + * function twinglecampaign_civicrm_preProcess($formName, &$form) { + * + * } // */ /** * Implements hook_civicrm_navigationMenu(). * * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_navigationMenu * -function twinglecampaign_civicrm_navigationMenu(&$menu) { - _twinglecampaign_civix_insert_navigation_menu($menu, 'Mailings', array( - 'label' => E::ts('New subliminal message'), - 'name' => 'mailing_subliminal_message', - 'url' => 'civicrm/mailing/subliminal', - 'permission' => 'access CiviMail', - 'operator' => 'OR', - 'separator' => 0, - )); - _twinglecampaign_civix_navigationMenu($menu); -} // */ + * function twinglecampaign_civicrm_navigationMenu(&$menu) { + * _twinglecampaign_civix_insert_navigation_menu($menu, 'Mailings', array( + * 'label' => E::ts('New subliminal message'), + * 'name' => 'mailing_subliminal_message', + * 'url' => 'civicrm/mailing/subliminal', + * 'permission' => 'access CiviMail', + * 'operator' => 'OR', + * 'separator' => 0, + * )); + * _twinglecampaign_civix_navigationMenu($menu); + * } // */