Compare commits

..

5 Commits

3 changed files with 94 additions and 15 deletions

View File

@ -204,9 +204,10 @@ function ftoverride_civicrm_buildForm($formName, &$form) {
$showElement = FALSE; $showElement = FALSE;
} }
} }
$form->assign('showElement', $showElement); $form->assign('showElement', $showElement);
$financialTypes = []; $financialTypes = ftoverride_get_financialType($form->getVar('_action'));
CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($financialTypes, $form->getVar('_action')); $form->add('hidden', 'hidden_designation');
$form->add( $form->add(
'select', 'select',
'designation', 'designation',
@ -222,13 +223,17 @@ function ftoverride_civicrm_buildForm($formName, &$form) {
CRM_Core_Region::instance('page-body')->add(array( CRM_Core_Region::instance('page-body')->add(array(
'template' => 'CRM/Contribute/Form/ContributionPage/common.tpl', 'template' => 'CRM/Contribute/Form/ContributionPage/common.tpl',
)); ));
if ($form->getVar('_id')) { if ($form->getVar('_id')) {
try { try {
$designations = ftoverride_get_designation($form->getVar('_id')); $designations = ftoverride_get_designation($form->getVar('_id'));
if (empty($designations)) { if (empty($designations)) {
return; return;
} }
$form->setDefaults(['designation' => $designations]); $form->setDefaults([
'designation' => $designations,
'hidden_designation' => implode(',', $designations),
]);
} }
catch (Exception $e) { catch (Exception $e) {
// Ignore // Ignore
@ -239,7 +244,10 @@ function ftoverride_civicrm_buildForm($formName, &$form) {
if ('CRM_Contribute_Form_Contribution_Confirm' == $formName && $form->_flagSubmitted) { if ('CRM_Contribute_Form_Contribution_Confirm' == $formName && $form->_flagSubmitted) {
$submitValues = $form->_params; $submitValues = $form->_params;
if (!empty($submitValues['designation'])) { if (!empty($submitValues['designation'])) {
//$form->assign('contribution_designation', $submitValues['designation']); $form->assign('contribution_designation', $submitValues['designation']);
if ($submitValues['designation'] == 'other_financial_type') {
$form->_params['contribution_note'] = $submitValues['designation_note'];
}
} }
} }
@ -250,18 +258,28 @@ function ftoverride_civicrm_buildForm($formName, &$form) {
return; return;
} }
$financialTypes = []; $financialTypes = ftoverride_get_financialType($form->getVar('_action'));
CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($financialTypes, $form->getVar('_action'));
$designations = array_flip($designations); $designations = array_flip($designations);
$financialTypes = array_intersect_key($financialTypes, $designations); foreach($designations as $id => &$label) {
$label = $financialTypes[$id];
}
$form->add( $form->add(
'select', 'select',
'designation', 'designation',
ts('Designation'), ts('Designation'),
['' => ts('- select -')] + $financialTypes, ['' => ts('- select -')] + $designations,
FALSE, FALSE,
['class' => 'crm-select2'] ['class' => 'crm-select2']
); );
$form->add(
'text',
'designation_note',
''
);
reset($designations);
$form->setDefaults([
'designation' => key($designations),
]);
CRM_Core_Region::instance('page-body')->add(array( CRM_Core_Region::instance('page-body')->add(array(
'template' => 'CRM/Contribute/Form/ContributionMain/common.tpl', 'template' => 'CRM/Contribute/Form/ContributionMain/common.tpl',
)); ));
@ -282,8 +300,12 @@ function ftoverride_civicrm_pre($op, $objectName, $id, &$params) {
if ($op == 'create' && $objectName == 'Contribution' && !empty($params['contribution_page_id'])) { if ($op == 'create' && $objectName == 'Contribution' && !empty($params['contribution_page_id'])) {
$designation = CRM_Core_Smarty::singleton()->get_template_vars('contribution_designation'); $designation = CRM_Core_Smarty::singleton()->get_template_vars('contribution_designation');
if (!empty($designation)) { if (!empty($designation)) {
if ($designation == 'other_financial_type') {
// Ignore
}
else {
$params['financial_type_id'] = $designation; $params['financial_type_id'] = $designation;
CRM_Core_Smarty::singleton()->assign('contribution_designation', ''); }
} }
} }
@ -299,13 +321,29 @@ function ftoverride_civicrm_pre($op, $objectName, $id, &$params) {
'custom_group_id' => "ft_override", 'custom_group_id' => "ft_override",
'name' => "ft_override_designation", 'name' => "ft_override_designation",
]); ]);
$params["custom_{$customFieldId}"] = $params['designation']; $params["custom_{$customFieldId}"] = explode(',', $params['hidden_designation']);
unset($params['designation']); unset($params['designation'], $params['hidden_designation']);
$contributionPage = civicrm_api3('ContributionPage', 'create', $params); $contributionPage = civicrm_api3('ContributionPage', 'create', $params);
$params = ['id' => $contributionPage['id']]; $params = ['id' => $contributionPage['id']];
} }
} }
/**
* Implements hook_civicrm_validateForm().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_validateForm
*/
function ftoverride_civicrm_validateForm($formName, &$fields, &$files, &$form, &$errors) {
if ('CRM_Contribute_Form_Contribution_Main' == $formName) {
if (!empty($fields['designation'])
&& $fields['designation'] == 'other_financial_type'
&& empty($fields['designation_note'])
) {
$errors['designation_note'] = ts('Please provide other information about designation.');
}
}
}
/** /**
* Implements hook_civicrm_buildAmount(). * Implements hook_civicrm_buildAmount().
* *
@ -314,7 +352,7 @@ function ftoverride_civicrm_pre($op, $objectName, $id, &$params) {
function ftoverride_civicrm_buildAmount($pageType, &$form, &$amount) { function ftoverride_civicrm_buildAmount($pageType, &$form, &$amount) {
if (!empty($amount) && $form->_flagSubmitted) { if (!empty($amount) && $form->_flagSubmitted) {
$submitValues = $form->_submitValues; $submitValues = $form->_submitValues;
if (!empty($submitValues['designation'])) { if (!empty($submitValues['designation']) && $submitValues['designation'] != 'other_financial_type') {
foreach ($amount as &$priceFields) { foreach ($amount as &$priceFields) {
foreach ($priceFields['options'] as &$options) { foreach ($priceFields['options'] as &$options) {
$options['financial_type_id'] = $submitValues['designation']; $options['financial_type_id'] = $submitValues['designation'];
@ -336,3 +374,21 @@ function ftoverride_get_designation($pageId) {
]); ]);
return $designations; return $designations;
} }
function ftoverride_get_financialType($action) {
$financialTypes = [];
CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($financialTypes, $action);
if (empty($financialTypes)) {
return $financialTypes;
}
$result = civicrm_api3('FinancialType', 'get', [
'return' => ["description"],
'description' => ['!=' => ""],
'id' => ['IN' => array_keys($financialTypes)],
]);
$descFinancialType = [];
if (!empty($result['values'])) {
$descFinancialType = array_column($result['values'], 'description', 'id');
}
return $descFinancialType + $financialTypes + ['other_financial_type' => ts('Other')];
}

View File

@ -2,11 +2,26 @@
<div class="label">{$form.designation.label}</div> <div class="label">{$form.designation.label}</div>
<div class="content">{$form.designation.html}</div> <div class="content">{$form.designation.html}</div>
<div class="clear"></div> <div class="clear"></div>
<div class="content designation_note-div">{$form.designation_note.html}</div>
<div class="clear"></div>
</div> </div>
{literal} {literal}
<script type="text/javascript"> <script type="text/javascript">
CRM.$(function($) { CRM.$(function($) {
$('div#priceset:first').after($('div.ft_override_designation-section')); $('div#priceset:first').after($('div.ft_override_designation-section'));
hideShowDesignation();
$('#designation').change(hideShowDesignation);
function hideShowDesignation() {
var fT = $('#designation').val();
if (fT == 'other_financial_type') {
$('div.ft_override_designation-section div.designation_note-div').show();
}
else {
$('div.ft_override_designation-section div.designation_note-div').hide();
}
}
}); });
</script> </script>
{/literal} {/literal}

View File

@ -9,6 +9,14 @@
<script type="text/javascript"> <script type="text/javascript">
CRM.$(function($) { CRM.$(function($) {
$('tr.crm-contribution-contributionpage-settings-form-block-financial_type_id').after($('table.ft_override_designation-block tr')); $('tr.crm-contribution-contributionpage-settings-form-block-financial_type_id').after($('table.ft_override_designation-block tr'));
$('#designation').change(function(e) {
var data = $('#designation').select2('data');
var selectedDesignations = new Array();
$.each(data, function( index, value ) {
selectedDesignations.push(value.id);
});
$('input[name="hidden_designation"]').val(selectedDesignations.join(","));
});
}); });
</script> </script>
{/literal} {/literal}