/** * Implement buildForm hook to remove billing fields if elsewhere on the form. * * @param string $formName * @param CRM_Contribute_Form_Contribution_Main|CRM_Event_Form_Registration_Register $form */ function omnipaymultiprocessor_civicrm_buildForm($formName, &$form) { if ($formName == 'CRM_Admin_Form_PaymentProcessor') { foreach (array('signature', 'test_signature') as $fieldName) { if ($form->elementExists($fieldName)) { $label = $form->_elements[$form->_elementIndex[$fieldName]]->_label; $form->removeElement($fieldName); $form->add('textarea', $fieldName, $label, array('rows' => 4, 'cols' => 40)); } } } if (omnipaymultiprocessor__versionAtLeast(4.6)) { return; } if (!omnipaymultiprocessor_is_credit_card_form($formName) || $form->_paymentProcessor['class_name'] != 'Payment_OmnipayMultiProcessor') { return; } $paymentType = civicrm_api3('option_value', 'getsingle', array('value' => $form->_paymentProcessor['payment_type'], 'option_group_id' => 'payment_type')); $form->assign('paymentTypeName', $paymentType['name']); $paymentFields = omnipaymultiprocessor_get_valid_form_payment_fields($formName == 'CRM_Contribute_Form_Contribution_Main' ? 'contribute' : 'event', $form->_paymentProcessor, empty($form->_paymentFields) ? array() : $form->_paymentFields); if (!empty($paymentFields)) { $form->assign('paymentFields', $paymentFields); $form->assign('paymentTypeLabel', ts($paymentType['label'] . ' Information')); } else { $form->assign('paymentFields', NULL); $form->assign('paymentTypeLabel', NULL); } $billingDetailsFields = omnipaymultiprocessor_getBillingPersonalDetailsFields($form->_paymentProcessor); //we trick CiviCRM into adding the credit card form so we can remove the parts we don't want (the credit card fields) //for a transparent redirect like Cybersource $billingMode = $form->_paymentProcessor['billing_mode']; $form->_paymentProcessor['billing_mode'] = CRM_Core_Payment::BILLING_MODE_FORM; CRM_Core_Payment_Form::buildCreditCard($form); $form->_paymentProcessor['billing_mode'] = $billingMode; //CiviCRM assumes that if it is Not a credit card it MUST be a direct debit & makes those required $suppressedFields = omnipaymultiprocessor_get_suppressed_billing_fields((array) $billingDetailsFields, (array) $paymentFields, (array) $form->_paymentFields); foreach ($suppressedFields as $suppressedField) { $form->_paymentFields[$suppressedField]['is_required'] = FALSE; } $form->assign('suppressedFields', $suppressedFields); $form->assign('billingDetailsFields', $billingDetailsFields); CRM_Core_Region::instance('billing-block')->update('default', array('disabled' => TRUE)); CRM_Core_Region::instance('billing-block')->add(array('template' => 'SubstituteBillingBlock.tpl')); }
/** * Add the billing field to the payment form if required. * * This requires 4.6.10 or greater due to an earlier bug. 4.7 should not require this. * * @param CRM_Core_Form $form */ function omnipaymultiprocessor_addBillingFieldsTo46Form(&$form) { $billingDetailsFields = omnipaymultiprocessor_getBillingPersonalDetailsFields($form->_paymentProcessor); if (!empty($billingDetailsFields)) { if (empty($form->_paymentFields)) { $form->_paymentFields = $billingDetailsFields; } $metadata = omnipaymultiprocessor_getBillingPersonalDetailsMetadata($form->_paymentProcessor); foreach ($metadata as $name => $field) { if (!empty($field['cc_field'])) { if (!empty($field['cc_field'])) { if ($field['htmlType'] == 'chainSelect') { $form->addChainSelect($field['name'], array('required' => FALSE)); } else { $form->add($field['htmlType'], $field['name'], $field['title'], $field['attributes'], FALSE); } } } $requiredPaymentFields[$field['name']] = $field['is_required']; } $form->assign('requiredPaymentFields', $requiredPaymentFields); $form->assign('billingDetailsFields', $billingDetailsFields); } $form->billingFieldSets['billing_name_address-group']['fields'] = array(); }