/** * @param CRM_Contribute_Form_AbstractEditPayment|CRM_Contribute_Form_Contribution_Main|CRM_Core_Payment_ProcessorForm|CRM_Contribute_Form_UpdateBilling $form * @param array $processor * Array of properties including 'object' as loaded from CRM_Financial_BAO_PaymentProcessor::getPaymentProcessors. * @param int|string $billing_profile_id * Id of a profile to be passed to the processor for the processor to merge with it's required fields. * (currently only implemented by manual/ pay-later processor) * * @param bool $isBackOffice * Is this a backoffice form. This could affect the display of the cvn or whether some processors show, * although the distinction is losing it's meaning as front end forms are used for back office and a permission * for the 'enter without cvn' is probably more appropriate. Paypal std does not support another user * entering details but once again the issue is not back office but 'another user'. * * @return bool */ public static function buildPaymentForm(&$form, $processor, $billing_profile_id, $isBackOffice) { //if the form has address fields assign to the template so the js can decide what billing fields to show $profileAddressFields = $form->get('profileAddressFields'); if (!empty($profileAddressFields)) { $form->assign('profileAddressFields', $profileAddressFields); } if (!empty($processor['object']) && $processor['object']->buildForm($form)) { return NULL; } self::setPaymentFieldsByProcessor($form, $processor, $billing_profile_id, $isBackOffice); self::addCommonFields($form, $form->_paymentFields); self::addRules($form, $form->_paymentFields); return !empty($form->_paymentFields); }
/** * @param CRM_Contribute_Form_AbstractEditPayment|CRM_Contribute_Form_Contribution_Main|CRM_Core_Payment_ProcessorForm|CRM_Contribute_Form_UpdateBilling $form * @param array $processor * Array of properties including 'object' as loaded from CRM_Financial_BAO_PaymentProcessor::getPaymentProcessors. * @param bool $isBillingDataOptional * This manifests for 'NULL' (pay later) payment processor as the addition of billing fields to the form and. * for payment processors that gather payment data on site as rendering the fields as not being required. (not entirely sure why but this * is implemented for back office forms) * * @return bool */ public static function buildPaymentForm(&$form, $processor, $isBillingDataOptional) { //if the form has address fields assign to the template so the js can decide what billing fields to show $profileAddressFields = $form->get('profileAddressFields'); if (!empty($profileAddressFields)) { $form->assign('profileAddressFields', $profileAddressFields); } // $processor->buildForm appears to be an undocumented (possibly unused) option for payment processors // which was previously available only in some form flows if (!empty($form->_paymentProcessor) && !empty($form->_paymentProcessor['object']) && $form->_paymentProcessor['object']->isSupported('buildForm')) { $form->_paymentProcessor['object']->buildForm($form); return NULL; } self::setPaymentFieldsByProcessor($form, $processor, empty($isBillingDataOptional)); self::addCommonFields($form, !$isBillingDataOptional, $form->_paymentFields); self::addRules($form, $form->_paymentFields); self::addPaypalExpressCode($form); return !empty($form->_paymentFields); }