implement TwingleCampaign url creation

This commit is contained in:
Marc Michalsky forumZFD 2021-02-08 14:49:12 +01:00
parent 693bc25985
commit baa23f8639
Signed by untrusted user who does not match committer: marc.koch
GPG key ID: 12406554CFB028B9

View file

@ -1,94 +1,164 @@
<?php <?php
use CRM_TwingleCampaign_BAO_CampaignType as CampaignType;
use CRM_TwingleCampaign_Utils_ExtensionCache as ExtensionCache; use CRM_TwingleCampaign_Utils_ExtensionCache as ExtensionCache;
use CRM_TwingleCampaign_BAO_TwingleCampaign as TwingleCampaign;
use CRM_TwingleCampaign_BAO_TwingleProject as TwingleProject ;
use CRM_TwingleCampaign_ExtensionUtil as E; use CRM_TwingleCampaign_ExtensionUtil as E;
require_once 'twinglecampaign.civix.php'; require_once 'twinglecampaign.civix.php';
/** /**
* Implements hook_civicrm_postSave_Campaigns(). * Implements hook_civicrm_postSave_Campaign().
* This function synchronizes TwingleProject campaigns between CiviCRM and * This function synchronizes TwingleProject campaigns between CiviCRM and
* Twingle when they get created, edited or cloned. To prevent recursion a no * Twingle when they get created, edited or cloned. To prevent recursion a no
* hook flag is getting used. * hook flag is getting used.
* *
* @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) {
if (empty($_SESSION['CiviCRM']['de.forumzfd.twinglecampaign']['no_hook']) || if (empty($_SESSION['CiviCRM']['de.forumzfd.twinglecampaign']['no_hook']) ||
$_SESSION['CiviCRM']['de.forumzfd.twinglecampaign']['no_hook'] != TRUE) { $_SESSION['CiviCRM']['de.forumzfd.twinglecampaign']['no_hook'] != TRUE) {
// extract variables from $dao object
$hook_campaign_type_id = $dao->campaign_type_id;
$hook_campaign_id = $dao->id;
// Get campaign type id for TwingleProject // If the db transaction is still running, add a function to it that will
$twingle_project_campaign_type_id = // be called afterwards
ExtensionCache::getInstance() if (CRM_Core_Transaction::isActive()) {
->getCampaigns()['campaign_types']['twingle_project']['id']; CRM_Core_Transaction::addCallback(
CRM_Core_Transaction::PHASE_POST_COMMIT,
// If $dao is a TwingleProject campaign, synchronize it 'twinglecampaign_postSave_callback',
if ($hook_campaign_type_id == $twingle_project_campaign_type_id) { [$dao->id, $dao->campaign_type_id]
// If the db transaction is still running, add a function to it that will );
// be called afterwards
if (CRM_Core_Transaction::isActive()) {
CRM_Core_Transaction::addCallback(
CRM_Core_Transaction::PHASE_POST_COMMIT,
'twinglecampaign_postSave_callback',
[$hook_campaign_id]
);
}
// If the transaction is already finished, call the function directly
else {
twinglecampaign_postSave_callback($hook_campaign_id);
}
} }
// If the transaction is already finished, call the function directly
else {
twinglecampaign_postSave_callback($dao->id, $dao->campaign_type_id);
}
} }
// Remove no hook flag // Remove no hook flag
unset($_SESSION['CiviCRM']['de.forumzfd.twinglecampaign']['no_hook']); unset($_SESSION['CiviCRM']['de.forumzfd.twinglecampaign']['no_hook']);
} }
/** /**
* This callback function synchronizes a recently updated TwingleProject * ## postSave callback
* campaign * This callback function synchronizes a recently updated TwingleProject or
* creates a TwingleCampaign
* *
* @param $campaign_id * @param int $campaign_id
* @param int $campaign_type_id
* *
* @throws \CiviCRM_API3_Exception
*/ */
function twinglecampaign_postSave_callback($campaign_id) { function twinglecampaign_postSave_callback (
if ($_POST['action'] == 'clone') { int $campaign_id,
unset($_POST['action']); int $campaign_type_id
$result = civicrm_api3('TwingleProject', 'getsingle', ) {
['id' => $campaign_id]
)['values'][$campaign_id]; // Get campaign type id for TwingleProject
$project = new CRM_TwingleCampaign_BAO_TwingleProject($result); $twingle_project_campaign_type_id =
try { ExtensionCache::getInstance()
$project->clone(); ->getCampaigns()['campaign_types']['twingle_project']['id'];
} catch (Exception $e) {
Civi::log()->error( // Get campaign type id for TwingleCampaign
E::LONG_NAME . $twingle_campaign_campaign_type_id =
" could not clone TwingleProject campaign: " . ExtensionCache::getInstance()
$e->getMessage() ->getCampaigns()['campaign_types']['twingle_campaign']['id'];
);
CRM_Utils_System::setUFMessage('TwingleProject could not get cloned.');
// If $campaign_type_id is a TwingleProject or TwingleCampaign campaign,
// synchronize it
if (
$campaign_type_id == $twingle_project_campaign_type_id ||
$campaign_type_id == $twingle_campaign_campaign_type_id
) {
// Set $entity for $campaign_type_id
if ($campaign_type_id == $twingle_project_campaign_type_id) {
$entity = 'TwingleProject';
} }
} else {
else { $entity = 'TwingleCampaign';
try { }
civicrm_api3('TwingleProject', 'sync', ['id' => $campaign_id]);
CRM_Utils_System::setUFMessage('TwingleProject was cloned.'); if ($_POST['action'] == 'clone') {
} catch (CiviCRM_API3_Exception $e) { unset($_POST['action']);
Civi::log()->error( $result = civicrm_api3($entity, 'getsingle',
'twinglecampaign_postSave_callback ' . $e->getMessage() ['id' => $campaign_id]
); )['values'][$campaign_id];
$project = new $entity($result);
try {
$project->clone();
} catch (Exception $e) {
Civi::log()->error(
E::LONG_NAME .
' could not clone ' . $entity . ': ' . $e->getMessage()
);
CRM_Utils_System::setUFMessage($entity. ' could not get cloned.');
}
}
elseif ($entity == 'TwingleProject') {
try {
civicrm_api3('TwingleProject', 'sync', ['id' => $campaign_id]);
CRM_Utils_System::setUFMessage('TwingleProject was saved.');
} catch (CiviCRM_API3_Exception $e) {
Civi::log()->error(
'twinglecampaign_postSave_callback ' . $e->getMessage()
);
}
} else {
try {
civicrm_api3('TwingleCampaign', 'create', ['id' => $campaign_id]);
CRM_Utils_System::setUFMessage('TwingleCampaign was saved.');
} catch (CiviCRM_API3_Exception $e) {
Civi::log()->error(
'twinglecampaign_postSave_callback ' . $e->getMessage()
);
}
} }
} }
} }
///**
// * ## Implements hook_civicrm_post().
// *
// * @throws CiviCRM_API3_Exception
// */
//function twinglecampaign_civicrm_post($op, $objectName, $objectId, &$objectRef) {
// if ($op == 'delete') {
//
// if (CRM_Core_Transaction::isActive()) {
// CRM_Core_Transaction::addCallback(
// CRM_Core_Transaction::PHASE_POST_COMMIT,
// 'twinglecampaign_post_callback',
// [$hook_campaign_id]
// );
// }
// // If the transaction is already finished, call the function directly
// else {
// twinglecampaign_post_callback($hook_campaign_id);
// }
// }
//}
///**
// * ## post callback
// * This callback function deletes a TwingleProject on Twingle's side
// *
// * @param $campaign_id
// */
//function twinglecampaign_post_callback($campaign_id) {
// $result = civicrm_api('TwingleProject', 'delete', [$campaign_id]);
// if ($result['is_error'] != 0) {
// CRM_Utils_System::setUFMessage($result['error_message']);
// }
//}
/** /**
* Implements hook_civicrm_config(). * Implements hook_civicrm_config().
* *