View source
<?php
define('WEBFORM_CIVICRM_CIVICRM_VERSION_MIN', '5.12');
define('WEBFORM_CIVICRM_CIVICRM_VERSION_MAX', FALSE);
define('WEBFORM_CIVICRM_WEBFORM_VERSION', '4.19');
define('WEBFORM_CIVICRM_DEFAULT_CONTACT_ID', 1);
function webform_civicrm_menu() {
$items = [];
$items['node/%webform_menu/civicrm'] = [
'title' => 'CiviCRM',
'page callback' => 'drupal_get_form',
'page arguments' => [
'wf_crm_configure_form',
1,
],
'access callback' => 'wf_crm_admin_access',
'access arguments' => [
1,
],
'file' => 'includes/wf_crm_admin_form.inc',
'weight' => 3,
'type' => MENU_LOCAL_TASK,
];
$items['webform-civicrm/js/%'] = [
'page callback' => 'wf_crm_ajax',
'file' => 'includes/wf_crm_webform_ajax.inc',
'access callback' => TRUE,
'page arguments' => [
2,
],
'type' => MENU_CALLBACK,
];
$items['webform-civicrm/help/%'] = [
'page callback' => 'wf_crm_admin_help',
'file' => 'includes/wf_crm_admin_help.inc',
'access arguments' => [
'access CiviCRM',
],
'page arguments' => [
2,
],
'type' => MENU_CALLBACK,
];
return $items;
}
function wf_crm_admin_access($node) {
return node_access('update', $node) && user_access('access CiviCRM');
}
function webform_civicrm_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'webform_component_edit_form') {
if (substr($form['form_key']['#default_value'], 0, 7) == 'civicrm') {
form_load_include($form_state, 'inc', 'webform_civicrm', 'includes/wf_crm_admin_component');
$admin_form = new wf_crm_admin_component($form, $form_state);
$admin_form
->alterForm();
}
if ($form['type']['#value'] == 'pagebreak') {
form_load_include($form_state, 'inc', 'webform_civicrm', 'includes/wf_crm_admin_component');
$admin_form = new wf_crm_admin_component($form, $form_state);
$admin_form
->adjustPageBreak();
}
}
elseif (strpos($form_id, 'webform_client_form_') !== FALSE && !empty($form['#node']->webform_civicrm)) {
form_load_include($form_state, 'inc', 'webform_civicrm', 'includes/wf_crm_webform_preprocess');
$processor = new wf_crm_webform_preprocess($form, $form_state);
$processor
->alterForm();
}
elseif ($form_id == 'webform_components_form') {
form_load_include($form_state, 'inc', 'webform_civicrm', 'includes/wf_crm_admin_component');
$form['#validate'][] = 'wf_crm_components_form_validate';
if (empty($form_state['input'])) {
wf_crm_admin_component::checkBillingPagination($form['#node']);
}
}
}
function webform_civicrm_webform_autocomplete_options_alter(&$results, $node, $cid, $str) {
module_load_include('inc', 'webform_civicrm', 'includes/wf_crm_webform_ajax');
if (wf_crm_webform_ajax::autocompleteAccess($node, $cid)) {
$key = wf_crm_explode_key($node->webform['components'][$cid]['form_key']);
}
if (isset($key) && substr($key[5], 0, 7) == 'custom_') {
civicrm_initialize();
$customField = wf_civicrm_api('CustomField', 'getsingle', [
'id' => substr($key[5], 7),
'return' => 'option_group_id',
]);
if (!empty($customField['option_group_id'])) {
$options = wf_crm_apivalues('OptionValue', 'get', [
'label' => [
'LIKE' => "%{$str}%",
],
'option_group_id' => $customField['option_group_id'],
'limit' => $node->webform['components'][$cid]['extra']['autocomplete_result_count'],
], 'label');
$results = array_combine($options, $options);
}
}
}
function webform_civicrm_node_load($nodes, $types) {
$db = db_query('SELECT * FROM {webform_civicrm_forms} WHERE nid IN(:nids)', [
':nids' => array_keys($nodes),
]);
foreach ($db as $settings) {
$node =& $nodes[$settings->nid];
$settings->data = unserialize($settings->data);
$node->webform_civicrm = (array) $settings;
if (!empty($_GET['type']) && arg(0) == 'node' && arg(1) == $node->nid && arg(3) == 'components') {
if (!empty($node->webform['components'][arg(4)]) && array_key_exists($_GET['type'], webform_components())) {
$node->webform['components'][arg(4)]['type'] = $_GET['type'];
webform_component_defaults($node->webform['components'][arg(4)]);
if ($_GET['type'] == 'select') {
module_load_include('inc', 'webform_civicrm', 'includes/utils');
civicrm_initialize();
$node->webform['components'][arg(4)]['extra']['items'] = wf_crm_array2str(wf_crm_field_options($node->webform['components'][arg(4)], 'component_insert', $node->webform_civicrm['data']));
}
}
}
}
}
function webform_civicrm_node_insert($node) {
if (isset($node->webform_civicrm)) {
$node->webform_civicrm['nid'] = $node->nid;
drupal_write_record('webform_civicrm_forms', $node->webform_civicrm);
}
}
function webform_civicrm_node_delete($node) {
if (!empty($node->webform)) {
db_delete('webform_civicrm_forms')
->condition('nid', $node->nid)
->execute();
db_delete('webform_civicrm_submissions')
->where('sid NOT IN (SELECT sid FROM {webform_submissions})')
->execute();
}
}
function webform_civicrm_node_view($node, $view_mode, $langcode) {
if (module_exists('webform_localization') && in_array($node->type, webform_node_types()) && !isset($node->webform_civicrm)) {
if ($nid = webform_localization_single_webform_nid($node)) {
$source_node = node_load($nid);
if (!empty($source_node->webform_civicrm)) {
$node->webform_civicrm = $source_node->webform_civicrm;
}
}
}
}
function webform_civicrm_theme() {
$theme = [
'webform_civicrm_options_table' => [
'render element' => 'element',
'file' => 'includes/wf_crm_admin_form.inc',
],
'display_civicrm_contact' => [
'render element' => 'element',
'file' => 'includes/contact_component.inc',
],
'static_contact_element' => [
'render element' => 'element',
'file' => 'includes/contact_component.inc',
],
];
return $theme;
}
function webform_civicrm_webform_component_info() {
return [
'civicrm_contact' => [
'label' => t('CiviCRM Contact'),
'description' => t('Choose existing contact.'),
'features' => [
'email_name' => TRUE,
],
'file' => 'includes/contact_component.inc',
],
];
}
function webform_civicrm_webform_submission_presave($node, &$submission) {
if (!empty($node->webform_civicrm)) {
module_load_include('inc', 'webform_civicrm', 'includes/wf_crm_webform_postprocess');
$processor = wf_crm_webform_postprocess::singleton($node);
$processor
->preSave($submission);
}
}
function webform_civicrm_webform_submission_insert($node, $submission) {
if (!empty($node->webform_civicrm)) {
$processor = wf_crm_webform_postprocess::singleton($node);
$processor
->postSave($submission);
}
}
function webform_civicrm_webform_submission_update($node, $submission) {
if (!empty($node->webform_civicrm)) {
$processor = wf_crm_webform_postprocess::singleton($node);
$processor
->postSave($submission);
}
}
function webform_civicrm_webform_submission_delete($node, $submission) {
db_delete('webform_civicrm_submissions')
->condition('sid', $submission->sid)
->execute();
}
function webform_civicrm_webform_submission_load(&$submissions) {
if (empty($submissions)) {
return;
}
$db = db_query('SELECT * FROM {webform_civicrm_submissions} WHERE sid IN (' . implode(',', array_keys($submissions)) . ')');
$contacts = [];
foreach ($db as $row) {
$data = unserialize($row->civicrm_data) + [
'contact' => [],
];
if ($row->contact_id) {
foreach (explode('-', trim($row->contact_id, '-')) as $c => $cid) {
$data['contact'][$c + 1]['id'] = $cid;
$data['contact'][$c + 1]['display_name'] = '';
if ($c == 0 && $cid) {
$contacts[$cid] = '';
}
}
}
$submissions[$row->sid]->civicrm = $data;
}
if ($contacts) {
civicrm_initialize();
module_load_include('inc', 'webform_civicrm', 'includes/utils');
$contacts = wf_crm_apivalues('contact', 'get', [
'id' => [
'IN' => array_keys($contacts),
],
], 'display_name') + $contacts;
foreach ($submissions as &$s) {
if (!empty($s->civicrm['contact'][1]['id'])) {
$s->civicrm['contact'][1]['display_name'] = $contacts[$s->civicrm['contact'][1]['id']];
}
}
}
}
function webform_civicrm_webform_submission_render_alter(&$renderable) {
if (empty($renderable['#node']->webform_civicrm)) {
return;
}
civicrm_initialize();
if (!empty($renderable['#submission']->civicrm['contact'][1]['display_name']) && empty($renderable['#email']) && $renderable['#format'] == 'html') {
drupal_set_title(t('Submission #!num by @name', [
'!num' => $renderable['#submission']->sid,
'@name' => $renderable['#submission']->civicrm['contact'][1]['display_name'],
]));
}
foreach ($renderable['#node']->webform['components'] as $component) {
if ($component['type'] == 'hidden') {
$options = wf_crm_field_options($component, 'submission', $renderable['#node']->webform_civicrm['data']);
if (empty($options)) {
continue;
}
$parentkeys = webform_component_parent_keys($renderable['#node'], $component);
$value =& $renderable[array_shift($parentkeys)];
foreach ($parentkeys as $parentkey) {
$value =& $value[$parentkey];
}
if (!empty($component['extra']['multiple'])) {
$selected_options = explode(',', $value['#markup']);
$items = [];
foreach ($selected_options as $selected_option) {
$items[] = $options[$selected_option];
}
$value['#markup'] = implode(', ', $items);
}
else {
$value['#markup'] = $options[$value['#markup']];
}
}
}
}
function webform_civicrm_webform_submission_actions($node, $submission) {
$actions = [];
if (!empty($node->webform_civicrm) && !empty($submission->civicrm) && webform_results_access($node) && user_access('access CiviCRM')) {
$data = $submission->civicrm;
if (!empty($data['contact'][1]['display_name'])) {
$actions['civicrm_action contact_view'] = [
'title' => t('View @name', [
'@name' => $data['contact'][1]['display_name'],
]),
'href' => 'civicrm/contact/view',
'query' => [
'reset' => 1,
'cid' => $data['contact'][1]['id'],
],
];
if (!empty($data['activity'][1]['id'])) {
$actions['civicrm_action activity_view'] = [
'title' => t('View Activity'),
'href' => 'civicrm/activity',
'query' => [
'action' => 'view',
'reset' => 1,
'cid' => $data['contact'][1]['id'],
'id' => $data['activity'][1]['id'],
],
];
}
if (!empty($data['contribution'][1]['id'])) {
$actions['civicrm_action contribution_view'] = [
'title' => t('View Contribution'),
'href' => 'civicrm/contact/view/contribution',
'query' => [
'action' => 'view',
'reset' => 1,
'cid' => $data['contact'][1]['id'],
'id' => $data['contribution'][1]['id'],
],
];
}
if (!empty($data['participant'][1]['id'])) {
$actions['civicrm_action participant_view'] = [
'title' => t('View Participant'),
'href' => 'civicrm/contact/view/participant',
'query' => [
'action' => 'view',
'reset' => 1,
'cid' => $data['contact'][1]['id'],
'id' => $data['participant'][1]['id'],
],
];
}
}
}
return $actions;
}
function webform_civicrm_civicrm_postSave_civicrm_custom_field($dao) {
module_load_include('inc', 'webform_civicrm', 'includes/wf_crm_admin_form');
if (empty($dao->custom_group_id)) {
$dao
->find(TRUE);
}
if ($dao->is_active) {
wf_crm_admin_form::handleDynamicCustomField('create', $dao->id, $dao->custom_group_id);
}
}
function webform_civicrm_civicrm_post($op, $name, $id, $dao) {
if ($name == 'CustomField' && $op == 'delete') {
module_load_include('inc', 'webform_civicrm', 'includes/wf_crm_admin_form');
wf_crm_admin_form::handleDynamicCustomField($op, $id, $dao->custom_group_id);
}
}
function webform_civicrm_civicrm_postSave_civicrm_custom_group($dao) {
module_load_include('inc', 'webform', 'includes/webform.components');
$customGroupId = $dao->id;
$dbResource = db_query("SELECT * FROM {webform_component} WHERE type ='fieldset' " . "AND form_key LIKE '%cg{$customGroupId}_fieldset'");
$fieldsets = $dbResource
->fetchAll(PDO::FETCH_ASSOC);
if (!$dao->title) {
$dao
->find(TRUE);
}
if (!empty($fieldsets[0]) && $fieldsets[0]['name'] != $dao->title) {
foreach ($fieldsets as $field_info) {
$component = [];
$component['name'] = $dao->title;
$component['type'] = $field_info['type'];
$component['form_key'] = $field_info['form_key'];
$component['weight'] = $field_info['weight'];
$component['nid'] = $field_info['nid'];
$component['cid'] = $field_info['cid'];
$component['pid'] = $field_info['pid'];
webform_component_update($component);
}
}
}
function webform_civicrm_civicrm_buildForm($formName, $form) {
if ($formName == 'CRM_Custom_Form_DeleteField') {
$nodes = [];
$fid = $form
->getVar('_id');
if ($fid) {
$webforms = db_query("SELECT nid FROM {webform_component} WHERE form_key LIKE 'civicrm_%_custom_{$fid}' GROUP BY nid");
foreach ($webforms as $webform) {
$node = node_load($webform->nid);
$nodes[] = l($node->title, 'node/' . $webform->nid);
}
}
if ($nodes) {
$list = '<ul><li>' . implode('</li><li>', $nodes) . '</li></ul>';
CRM_Core_Region::instance('page-body')
->add([
'markup' => '<strong>' . t('This field is used in the following webforms:') . '</strong>' . $list,
]);
}
}
}
function webform_civicrm_civicrm_merge($type, $data, $new_id = NULL, $old_id = NULL, $tables = NULL) {
if (!empty($new_id) && !empty($old_id) && $type == 'sqls') {
db_update('webform_civicrm_submissions')
->expression('contact_id', 'REPLACE(contact_id, :old, :new)', [
':old' => '-' . $old_id . '-',
':new' => '-' . $new_id . '-',
])
->condition('contact_id', '%-' . $old_id . '-%', 'LIKE')
->execute();
db_query("UPDATE {webform_submitted_data} d, {webform_component} c SET d.data = :new\n WHERE d.data = :old AND d.cid = c.cid AND d.nid = c.nid AND c.type = 'civicrm_contact'", [
':new' => $new_id,
':old' => $old_id,
]);
}
}
function webform_civicrm_admin_paths() {
return [
'node/*/civicrm' => TRUE,
];
}
function webform_civicrm_help($section) {
if ($section == 'admin/help#webform_civicrm') {
return nl2br(file_get_contents(drupal_get_path('module', 'webform_civicrm') . '/README.md'));
}
}
function webform_civicrm_webform_component_presave(&$component) {
if ($c = wf_crm_contact_clone_storage()) {
$component['form_key'] = str_replace($c['old'], $c['new'], $component['form_key']);
if ($component['type'] == 'civicrm_contact') {
if (wf_crm_aval($component, 'extra:default') == 'user') {
unset($component['extra']['default']);
}
}
}
}
function webform_civicrm_preprocess_webform_results_submissions(&$vars) {
if (count($vars['table']['#rows']) && !empty($vars['node']->webform_civicrm) && webform_results_access($vars['node'])) {
module_load_include('inc', 'webform_civicrm', 'includes/utils');
$access = user_access('access CiviCRM');
$temp = $vars['table']['#header'];
$vars['table']['#header'] = [];
foreach ($temp as $k => $v) {
$vars['table']['#header'][] = $v;
if ($k == 1) {
$vars['table']['#header'][] = wf_crm_contact_label(1, $vars['node']->webform_civicrm['data']);
}
}
foreach ($vars['table']['#rows'] as &$row) {
$name = '';
preg_match('#/submission/(\\d+)#', $row[4], $preg);
$sid = $preg[1];
if (!empty($vars['submissions'][$sid]->civicrm['contact'][1])) {
$data = $vars['submissions'][$sid]->civicrm;
$name = $data['contact'][1]['display_name'];
if ($name !== '' && $access) {
$name = l($name, 'civicrm/contact/view', [
'query' => [
'reset' => 1,
'cid' => $data['contact'][1]['id'],
],
'attributes' => [
'title' => t('View CiviCRM contact'),
],
'alias' => TRUE,
]);
}
}
$temp = $row;
$row = [];
foreach ($temp as $k => $v) {
$row[] = $v;
if ($k == 1) {
$row[] = $name;
}
}
}
}
}
function webform_civicrm_preprocess_webform_components_form(&$vars) {
module_load_include('inc', 'webform_civicrm', 'includes/wf_crm_admin_component');
wf_crm_admin_component::preprocessComponentsForm($vars['form'], $vars['rows'], $vars['form']['#node']);
}
function wf_crm_aval($haystack, $keys, $default = NULL, $strict = FALSE) {
foreach (explode(':', $keys) as $key) {
if (is_object($haystack)) {
$haystack = (array) $haystack;
}
if (!is_array($haystack) || !isset($haystack[$key]) || empty($haystack[$key]) && $default !== NULL && !$strict) {
return $default;
}
$haystack = $haystack[$key];
}
return $haystack;
}
function wf_crm_contact_clone_storage($input = NULL) {
static $storage = NULL;
if ($input) {
$storage = $input;
}
return $storage;
}
function wf_crm_contact_clone($form, $form_state) {
form_load_include($form_state, 'inc', 'webform_civicrm', 'includes/utils');
$fid = $form['form_key']['#default_value'];
list(, $old) = wf_crm_explode_key($fid);
$node = node_load($form['nid']['#value']);
$settings = $node->webform_civicrm;
$new = count($settings['data']['contact']) + 1;
$settings['data']['contact'][$new] = $settings['data']['contact'][$old];
$settings['data']['contact'][$new]['contact'][1]['webform_label'] = $form_state['input']['name'];
$storage = [
'old' => [
"civicrm_{$old}_contact_",
],
'new' => [
"civicrm_{$new}_contact_",
],
];
if (wf_crm_aval($settings['data'], 'participant_reg_type') == 'separate') {
$settings['data']['participant'][$new] = $settings['data']['participant'][$old];
$storage['old'][] = "civicrm_{$old}_participant_";
$storage['new'][] = "civicrm_{$new}_participant_";
}
drupal_write_record('webform_civicrm_forms', $settings, 'nid');
wf_crm_contact_clone_storage($storage);
}
function wf_crm_validate($form, &$form_state) {
form_load_include($form_state, 'inc', 'webform_civicrm', 'includes/wf_crm_webform_postprocess');
$processor = wf_crm_webform_postprocess::singleton($form['#node']);
$processor
->validate($form, $form_state);
}
function _webform_civicrm_status() {
$status = [];
$status['webform_civicrm'] = FALSE;
$civicrm = system_get_info('module', 'civicrm');
$webform = system_get_info('module', 'webform');
if (version_compare($civicrm['version'], WEBFORM_CIVICRM_CIVICRM_VERSION_MIN, '>=') && version_compare($webform['version'], WEBFORM_CIVICRM_WEBFORM_VERSION, '>=')) {
$status['webform_civicrm'] = TRUE;
}
if (WEBFORM_CIVICRM_CIVICRM_VERSION_MAX && version_compare($civicrm['version'], WEBFORM_CIVICRM_CIVICRM_VERSION_MAX, '>=')) {
$status['webform_civicrm'] = FALSE;
}
return $status;
}
function webform_civicrm_token_info() {
$info = [];
$info['tokens']['submission']['contact-id'] = [
'name' => t('Webform CiviCRM Contacts IDs'),
'description' => t('The IDs of Contacts that got created after submitting the webform. Replace the "?" with the contact number starting from 1'),
'dynamic' => TRUE,
];
$info['tokens']['submission']['contact-link'] = [
'name' => t('Webform CiviCRM Contacts Links'),
'description' => t('The links to Contacts that got created after submitting the webform. Replace the "?" with the contact number starting from 1'),
'dynamic' => TRUE,
];
$info['tokens']['submission']['activity-id'] = [
'name' => t('Webform CiviCRM Activity IDs'),
'description' => t('The IDs of activities that got created after submitting the webform. Replace the "?" with the activity number starting from 1'),
'dynamic' => TRUE,
];
$info['tokens']['submission']['activity-link'] = [
'name' => t('Webform CiviCRM Activity Links'),
'description' => t('The links to activities that got created after submitting the webform. Replace the "?" with the activity number starting from 1'),
'dynamic' => TRUE,
];
$info['tokens']['submission']['case-id'] = [
'name' => t('Webform CiviCRM Case IDs'),
'description' => t('The IDs of cases that got created after submitting the webform. Replace the "?" with the case number starting from 1'),
'dynamic' => TRUE,
];
$info['tokens']['submission']['case-link'] = [
'name' => t('Webform CiviCRM Case Links'),
'description' => t('The links to cases that got created after submitting the webform. Replace the "?" with the case number starting from 1'),
'dynamic' => TRUE,
];
return $info;
}
function webform_civicrm_tokens($type, $tokens = '', array $data = [], array $options = []) {
if (!_webform_civicrm_isWebformSubmission($type, $data)) {
return [];
}
$replacedTokens = [];
$webformSubmissionData = $data['webform-submission'];
$contactIdsReplacedTokens = _webform_civicrm_replaceContactIdTokens($tokens, $webformSubmissionData);
$replacedTokens = array_merge($replacedTokens, $contactIdsReplacedTokens);
$contactLinksReplacedTokens = _webform_civicrm_replaceContactLinkTokens($tokens, $webformSubmissionData);
$replacedTokens = array_merge($replacedTokens, $contactLinksReplacedTokens);
$activityIdsReplacedTokens = _webform_civicrm_replaceActivityIdTokens($tokens, $webformSubmissionData);
$replacedTokens = array_merge($replacedTokens, $activityIdsReplacedTokens);
$activityLinksReplacedTokens = _webform_civicrm_replaceActivityLinkTokens($tokens, $webformSubmissionData);
$replacedTokens = array_merge($replacedTokens, $activityLinksReplacedTokens);
$caseIdsReplacedTokens = _webform_civicrm_replaceCaseIdTokens($tokens, $webformSubmissionData);
$replacedTokens = array_merge($replacedTokens, $caseIdsReplacedTokens);
$caseLinksReplacedTokens = _webform_civicrm_replaceCaseLinkTokens($tokens, $webformSubmissionData);
$replacedTokens = array_merge($replacedTokens, $caseLinksReplacedTokens);
return $replacedTokens;
}
function _webform_civicrm_isWebformSubmission($tokenType, $webformData) {
return $tokenType === 'submission' && !empty($webformData['webform-submission']) && webform_variable_get('webform_token_access');
}
function _webform_civicrm_replaceContactIdTokens($tokens, $webformSubmissionData) {
$replacedTokens = [];
$tokenValues = token_find_with_prefix($tokens, 'contact-id');
if (!$tokenValues) {
return $replacedTokens;
}
foreach ($tokenValues as $entityID => $tokenName) {
$tokenNewValue = '';
if (!empty($webformSubmissionData->civicrm['contact'][$entityID]['id'])) {
$contactID = $webformSubmissionData->civicrm['contact'][$entityID]['id'];
$tokenNewValue = $contactID;
}
$replacedTokens[$tokenName] = $tokenNewValue;
}
return $replacedTokens;
}
function _webform_civicrm_replaceContactLinkTokens($tokens, $webformSubmissionData) {
$replacedTokens = [];
$tokenValues = token_find_with_prefix($tokens, 'contact-link');
if (!$tokenValues) {
return $replacedTokens;
}
foreach ($tokenValues as $entityID => $tokenName) {
$tokenNewValue = '';
if (!empty($webformSubmissionData->civicrm['contact'][$entityID]['id'])) {
$contactID = $webformSubmissionData->civicrm['contact'][$entityID]['id'];
$tokenNewValue = url("/civicrm/contact/view?reset=1&cid={$contactID}", [
'absolute' => TRUE,
]);
}
$replacedTokens[$tokenName] = $tokenNewValue;
}
return $replacedTokens;
}
function _webform_civicrm_replaceActivityIdTokens($tokens, $webformSubmissionData) {
$replacedTokens = [];
$tokenValues = token_find_with_prefix($tokens, 'activity-id');
if (!$tokenValues) {
return $replacedTokens;
}
foreach ($tokenValues as $entityID => $tokenName) {
$tokenNewValue = '';
if (!empty($webformSubmissionData->civicrm['activity'][$entityID]['id'])) {
$activityId = $webformSubmissionData->civicrm['activity'][$entityID]['id'];
$tokenNewValue = $activityId;
}
$replacedTokens[$tokenName] = $tokenNewValue;
}
return $replacedTokens;
}
function _webform_civicrm_replaceActivityLinkTokens($tokens, $webformSubmissionData) {
$replacedTokens = [];
$tokenValues = token_find_with_prefix($tokens, 'activity-link');
if (!$tokenValues) {
return $replacedTokens;
}
foreach ($tokenValues as $entityID => $tokenName) {
$tokenNewValue = '';
if (!empty($webformSubmissionData->civicrm['activity'][$entityID]['id'])) {
$activityId = $webformSubmissionData->civicrm['activity'][$entityID]['id'];
$tokenNewValue = url("/civicrm/activity?action=view&reset=1&id={$activityId}", [
'absolute' => TRUE,
]);
}
$replacedTokens[$tokenName] = $tokenNewValue;
}
return $replacedTokens;
}
function _webform_civicrm_replaceCaseIdTokens($tokens, $webformSubmissionData) {
$replacedTokens = [];
$tokenValues = token_find_with_prefix($tokens, 'case-id');
if (!$tokenValues) {
return $replacedTokens;
}
foreach ($tokenValues as $entityID => $tokenName) {
$tokenNewValue = '';
if (!empty($webformSubmissionData->civicrm['case'][$entityID]['id'])) {
$tokenNewValue = $webformSubmissionData->civicrm['case'][$entityID]['id'];
}
$replacedTokens[$tokenName] = $tokenNewValue;
}
return $replacedTokens;
}
function _webform_civicrm_replaceCaseLinkTokens($tokens, $webformSubmissionData) {
$replacedTokens = [];
$tokenValues = token_find_with_prefix($tokens, 'case-link');
if (!$tokenValues) {
return $replacedTokens;
}
foreach ($tokenValues as $entityID => $tokenName) {
$tokenNewValue = '';
if (!empty($webformSubmissionData->civicrm['case'][$entityID]['id'])) {
$caseID = $webformSubmissionData->civicrm['case'][$entityID]['id'];
$caseContactID = _webform_civicrm_getCaseContactID($caseID);
$tokenNewValue = url("/civicrm/contact/view/case?reset=1&id={$caseID}&cid={$caseContactID}&action=view", [
'absolute' => TRUE,
]);
}
$replacedTokens[$tokenName] = $tokenNewValue;
}
return $replacedTokens;
}
function _webform_civicrm_getCaseContactID($caseID) {
civicrm_initialize();
$caseEntity = civicrm_api3('Case', 'get', [
'return' => [
'contact_id',
],
'id' => $caseID,
]);
$caseContactID = WEBFORM_CIVICRM_DEFAULT_CONTACT_ID;
if (!empty($caseEntity['values'][$caseID]['contact_id']) && is_array($caseEntity['values'][$caseID]['contact_id']) && reset($caseEntity['values'][$caseID]['contact_id'])) {
$caseContactID = reset($caseEntity['values'][$caseID]['contact_id']);
}
return $caseContactID;
}
function webform_civicrm_civicrm_pre($op, $objectName, $id, &$params) {
if ($op == 'edit' && $objectName == 'CustomField') {
if (isset($params['is_active'])) {
$statusToSet = $params['is_active'];
$queryParams = [
'sequential' => 1,
'return' => "custom_group_id, is_active",
'id' => $id,
'options' => [
'limit' => 1,
],
];
$result = civicrm_api3('CustomField', 'get', $queryParams);
if ($result['count'] == 1) {
module_load_include('inc', 'webform_civicrm', 'includes/wf_crm_admin_form');
$previousStatus = $result['values'][0]['is_active'];
$customGroupId = $result['values'][0]['custom_group_id'];
if ($statusToSet == FALSE && $previousStatus == TRUE) {
$opName = 'disable';
}
else {
$opName = 'enable';
}
if (isset($opName)) {
wf_crm_admin_form::handleDynamicCustomField($opName, $id, $customGroupId);
}
}
}
}
}
function webform_civicrm_civicrm_alterPaymentProcessorParams($paymentObj, $rawParams, &$cookedParams) {
if (!empty($rawParams['webform_redirect_cancel']) && !empty($rawParams['webform_redirect_success']) && !empty($cookedParams['return']) && !empty($cookedParams['cancel_return'])) {
$cookedParams['return'] = $rawParams['webform_redirect_success'];
$cookedParams['cancel_return'] = $rawParams['webform_redirect_cancel'];
}
}