Ejemplo n.º 1
0
 /**
  * @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);
 }
Ejemplo n.º 2
0
 /**
  * @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);
 }
Ejemplo n.º 3
0
 /**
  * Handle Payment Processor switching for contribution and event registration forms.
  *
  * @param CRM_Contribute_Form_Contribution_Main|CRM_Event_Form_Registration_Register $form
  * @param bool $noFees
  */
 public static function preProcessPaymentOptions(&$form, $noFees = FALSE)
 {
     $form->_snippet = CRM_Utils_Array::value('snippet', $_GET);
     $form->_paymentProcessors = $noFees ? array() : $form->get('paymentProcessors');
     $form->_paymentProcessorID = NULL;
     if ($form->_paymentProcessors) {
         if (!empty($form->_submitValues)) {
             $form->_paymentProcessorID = CRM_Utils_Array::value('payment_processor_id', $form->_submitValues);
             $form->_paymentProcessor = CRM_Utils_Array::value($form->_paymentProcessorID, $form->_paymentProcessors);
             $form->set('type', $form->_paymentProcessorID);
             $form->set('mode', $form->_mode);
             $form->set('paymentProcessor', $form->_paymentProcessor);
         } else {
             foreach ($form->_paymentProcessors as $values) {
                 if (!empty($values['is_default']) || count($form->_paymentProcessors) == 1) {
                     $form->_paymentProcessorID = $values['id'];
                     break;
                 }
             }
         }
         if ($form->_paymentProcessorID) {
             CRM_Core_Payment_ProcessorForm::preProcess($form);
         } else {
             $form->_paymentProcessor = array();
         }
         CRM_Financial_Form_Payment::addCreditCardJs();
     }
     $form->assign('paymentProcessorID', $form->_paymentProcessorID);
 }
/**
 * Add the discount button immediately before the price set.
 *
 * @param CRM_Contribute_Form_Contribution_Main $form
 */
function _cividiscount_add_button_before_priceSet(&$form)
{
    CRM_Core_Region::instance('price-set-1')->add(array('template' => 'CRM/CiviDiscount/discountButton.tpl', 'weight' => -1, 'type' => 'template', 'name' => 'discount_code'));
    $form->add('text', 'discountcode', ts('If you have a discount code, enter it here'), array('class' => 'description'));
    $errorMessage = $form->get('discountCodeErrorMsg');
    if ($errorMessage) {
        $form->setElementError('discountcode', $errorMessage);
    }
    $form->set('discountCodeErrorMsg', null);
    $buttonName = $form->getButtonName('reload');
    $form->addElement('submit', $buttonName, ts('Apply'), array('formnovalidate' => 1));
    $form->assign('discountElements', array('discountcode', $buttonName));
}
Ejemplo n.º 5
0
 /**
  * Handle Payment Processor switching for contribution and event registration forms.
  *
  * @param CRM_Contribute_Form_Contribution_Main|CRM_Event_Form_Registration_Register $form
  * @param bool $noFees
  */
 public static function preProcessPaymentOptions(&$form, $noFees = FALSE)
 {
     $form->_snippet = CRM_Utils_Array::value('snippet', $_GET);
     $form->_paymentProcessors = $noFees ? array() : $form->get('paymentProcessors');
     $form->_paymentProcessorID = NULL;
     if ($form->_paymentProcessors) {
         // Fetch type during ajax request
         if (isset($_GET['type']) && $form->_snippet) {
             $form->_paymentProcessorID = CRM_Utils_Request::retrieve('type', 'Integer', CRM_Core_DAO::$_nullObject, FALSE, 0);
         } elseif (!empty($form->_submitValues)) {
             $form->_paymentProcessorID = CRM_Utils_Array::value('payment_processor', $form->_submitValues);
             $form->_paymentProcessor = CRM_Utils_Array::value($form->_paymentProcessorID, $form->_paymentProcessors);
             $form->set('type', $form->_paymentProcessorID);
             $form->set('mode', $form->_mode);
             $form->set('paymentProcessor', $form->_paymentProcessor);
         } else {
             foreach ($form->_paymentProcessors as $values) {
                 if (!empty($values['is_default']) || count($form->_paymentProcessors) == 1) {
                     $form->_paymentProcessorID = $values['id'];
                     break;
                 }
             }
         }
         if ($form->_paymentProcessorID) {
             CRM_Core_Payment_ProcessorForm::preProcess($form);
         } else {
             $form->_paymentProcessor = array();
         }
         //get payPal express id and make it available to template
         foreach ($form->_paymentProcessors as $ppId => $values) {
             $payPalExpressId = $values['payment_processor_type'] == 'PayPal_Express' ? $values['id'] : 0;
             $form->assign('payPalExpressId', $payPalExpressId);
             if ($payPalExpressId) {
                 break;
             }
         }
         if (!$form->_snippet) {
             // Add JS to show icons for the accepted credit cards
             $creditCardTypes = CRM_Core_Payment_Form::getCreditCardCSSNames();
             CRM_Core_Resources::singleton()->addScriptFile('civicrm', 'templates/CRM/Core/BillingBlock.js', 10)->addScript('CRM.config.creditCardTypes = ' . json_encode($creditCardTypes) . ';');
         }
     }
     $form->assign('paymentProcessorID', $form->_paymentProcessorID);
 }