CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME, 'group' => 'contribute', 'name' => 'check_payment_instrument_ids', 'type' => 'Array', 'html_type' => 'Select', 'quick_form_type' => 'Select', 'html_attributes' => array( 'multiple' => 1, 'class' => 'crm-select2', ), 'pseudoconstant' => array( 'callback' => 'CRM_Contribute_BAO_CheckNumberPaymentMethod::getPaymentInstrument', ), 'default' => NULL, 'add' => '5.5', 'title' => ts('Check-Payment Instruments'), 'is_domain' => '1', 'is_contact' => 0, 'description' => NULL, 'help_text' => NULL, ]; } /** * Implements hook_civicrm_preProcess(). * * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_preProcess */ function checknumberpaymentmethod_civicrm_preProcess($formName, &$form) { if ('CRM_Admin_Form_Preferences_Contribute' == $formName) { $vars = $form->getVar('_settings'); $vars['check_payment_instrument_ids'] = CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME; $form->setVar('_settings', $vars); $form->setVar('settingsMetadata', ''); } } /** * Implements hook_civicrm_preProcess(). * * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_preProcess */ function checknumberpaymentmethod_civicrm_buildForm($formName, &$form) { if (in_array($formName, array( "CRM_Contribute_Form_Contribution", "CRM_Member_Form_Membership", "CRM_Event_Form_Participant", "CRM_Contribute_Form_AdditionalPayment", "CRM_Member_Form_MembershipRenewal", ))) { if ($form->getVar('_action') & CRM_Core_Action::DELETE) { return; } if ($formName == 'CRM_Contribute_Form_AdditionalPayment' && $form->getVar('_view') == 'transaction' && ($form->getVar('_action') & CRM_Core_Action::BROWSE) ) { return; } if (!empty($form->_defaultValues['payment_instrument_id'])) { _checknumberpaymentmethod_add_payment_fields( $form, $form->_defaultValues['payment_instrument_id'] ); } } if (('CRM_Contribute_Form_AdditionalPayment' == $formName && $form->getVar('_view') == 'transaction' && ($form->getVar('_action') & CRM_Core_Action::BROWSE)) || 'CRM_Contribute_Form_Contribution' == $formName || 'CRM_Contribute_Form_ContributionView' == $formName ) { $payments = $form->get_template_vars('payments'); if ($payments) { _checknumberpaymentmethod_alterpayments($payments); } $form->assign('payments', $payments); } if ('CRM_Admin_Form_Preferences_Contribute' == $formName) { $form->addElement( 'select', 'check_payment_instrument_ids', ts('Check-Payment Instruments'), CRM_Contribute_BAO_CheckNumberPaymentMethod::getPaymentInstrument(), [ 'multiple' => 1, 'class' => 'crm-select2', ] ); $form->assign('fields', $form->getVar('settingsMetadata')); } if ($formName == 'CRM_Financial_Form_Payment' && !empty($form->paymentInstrumentID)) { _checknumberpaymentmethod_add_payment_fields($form, $form->paymentInstrumentID); } if ('CRM_Financial_Form_PaymentEdit' == $formName) { $paymentInstrumentsFromSettings = civicrm_api3('Setting', 'getvalue', [ 'name' => 'check_payment_instrument_ids', ]); if ($form->_flagSubmitted && isset($form->_submitValues['check_number']) && in_array($form->_submitValues['payment_instrument_id'], $paymentInstrumentsFromSettings) ) { $values = $form->getVar('_values'); $numberOfCalls = 1; if ($form->_submitValues['payment_instrument_id'] != $values['payment_instrument_id']) { $numberOfCalls = 2; } CRM_Core_Smarty::singleton()->assign('payment_instrument_check_number_numberOfCalls', $numberOfCalls); CRM_Core_Smarty::singleton()->assign('payment_instrument_check_number', $form->_submitValues['check_number']); } $paymentInstrumentsFromSettings[] = (string) CRM_Core_PseudoConstant::getKey( 'CRM_Contribute_BAO_Contribution', 'payment_instrument_id', 'Check' ); $form->assign('paymentInstrumentsFromSettings', json_encode($paymentInstrumentsFromSettings)); } } /** * Add payment fields to form. * * @param object $form * @param int $paymentInstrumentID */ function _checknumberpaymentmethod_add_payment_fields(&$form, $paymentInstrumentID) { $paymentInstrumentsFromSettings = civicrm_api3('Setting', 'getvalue', [ 'name' => 'check_payment_instrument_ids', ]); if (in_array($paymentInstrumentID, $paymentInstrumentsFromSettings)) { $form->assign('paymentFields', array('check_number')); $form->add('text', 'check_number', ts('Check Number')); $form->assign('paymentTypeLabel', ts('Check Information')); } } /** * Implements hook_civicrm_pre(). * * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_pre */ function checknumberpaymentmethod_civicrm_pre($op, $objectName, $id, &$params) { if ($objectName == 'Contribution' && in_array($op, ['create', 'edit'])) { if (!CRM_Utils_System::isNull($params['check_number']) || !empty($_POST['check_number']) || !empty($params['payment_instrument_check_number']) ) { $paymentInstrumentId = !empty($params['payment_instrument_id']) ? $params['payment_instrument_id'] : $params['prevContribution']->payment_instrument_id; $paymentInstrumentsFromSettings = civicrm_api3('Setting', 'getvalue', [ 'name' => 'check_payment_instrument_ids', ]); if (!in_array($paymentInstrumentId, $paymentInstrumentsFromSettings)) { return; } if (!CRM_Utils_System::isNull($params['check_number'])) { $params['check_number'] = $params['check_number']; } elseif (!empty($params['payment_instrument_check_number'])) { $params['check_number'] = $params['payment_instrument_check_number']; } else { $params['check_number'] = $_POST['check_number']; } } } } function _checknumberpaymentmethod_alterpayments(&$payments) { $paymentInstrumentsFromSettings = civicrm_api3('Setting', 'getvalue', [ 'name' => 'check_payment_instrument_ids', ]); foreach ($payments as &$payment) { try { $checkNumber = civicrm_api3('FinancialTrxn', 'getvalue', [ 'return' => "check_number", 'id' => $payment['id'], 'payment_instrument_id' => ['IN' => $paymentInstrumentsFromSettings], ]); if (!empty($checkNumber)) { $payment['payment_instrument'] .= " (#{$checkNumber})"; } } catch (Exception $e) { // Ignore } } } /** * Implements hook_civicrm_pre(). * * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_pre */ function checknumberpaymentmethod_civicrm_apiWrappers(&$wrappers, $apiRequest) { if (in_array($apiRequest['entity'], ['Contribution', 'FinancialTrxn']) && $apiRequest['action'] == 'create') { $wrappers[] = new CRM_Contribute_CheckAPIWrapper(); } }