Esempio n. 1
0
 /**
  * Update payment methods: save cards, currency, etc 
  *
  * @return void
  */
 protected function doActionUpdatePaymentMethods()
 {
     $methods = $this->getPaymentMethods();
     $request = \XLite\Core\Request::getInstance()->data;
     $config = \XLite\Core\Config::getInstance()->CDev->XPaymentsConnector;
     $saveCardsMethodSubmitted = false;
     foreach ($methods as $method) {
         $pmData = \XLite\Core\Request::getInstance()->data[$method->getMethodId()];
         if (isset($pmData['save_cards']) && 'Y' == $pmData['save_cards'] && 'Y' == $method->getSetting('canSaveCards')) {
             $method->setSetting('saveCards', 'Y');
             if (!empty($pmData['enabled']) && !$saveCardsMethodSubmitted) {
                 // The second condition is not necesary.
                 // But in this case noone will ask,
                 // why the last method is set for zero auth instead of first
                 $saveCardsMethodSubmitted = $method;
             }
         } else {
             $method->setSetting('saveCards', 'N');
         }
         if (isset($pmData['currency']) && $pmData['currency']) {
             $method->setSetting('currency', $pmData['currency']);
         }
         if (isset($pmData['enabled']) && $pmData['enabled']) {
             $method->setEnabled(true);
         } else {
             $method->setEnabled(false);
         }
     }
     $saveCardsMethodInStore = $this->getPaymentMethods('SavedCard');
     if (!$saveCardsMethodInStore && $saveCardsMethodSubmitted) {
         // Add Saved credit card payment method if at least one of X-Payments payment methods saves cards
         $pm = new \XLite\Model\Payment\Method();
         \XLite\Core\Database::getEM()->persist($pm);
         $pm->setClass('Module\\CDev\\XPaymentsConnector\\Model\\Payment\\Processor\\SavedCard');
         $pm->setServiceName('SavedCard');
         $pm->setName('Use a saved credit card');
         $pm->setType(\XLite\Model\Payment\Method::TYPE_CC_GATEWAY);
         $pm->setAdded(true);
         $pm->setEnabled(true);
     } elseif ($saveCardsMethodInStore && !$saveCardsMethodSubmitted) {
         // Remove Seved credit card payment method if all X-Payments payment methods do not save cards
         foreach ($saveCardsMethodInStore as $pm) {
             \XLite\Core\Database::getEM()->remove($pm);
         }
     }
     // Configure the Zero Auth if it's not done yet
     if ($saveCardsMethodSubmitted && !\XLite\Module\CDev\XPaymentsConnector\Core\ZeroAuth::getInstance()->allowZeroAuth() && !\XLite\Module\CDev\XPaymentsConnector\Core\ZeroAuth::DISABLED == $config->xpc_zero_auth_method_id) {
         $settings = array('xpc_zero_auth_method_id' => $saveCardsMethodSubmitted->getMethodId());
         if (!$config->xpc_zero_auth_amount) {
             $settings['xpc_zero_auth_amount'] = '1.00';
         }
         if (!$config->xpc_zero_auth_description) {
             $settings['xpc_zero_auth_description'] = \XLite\Module\CDev\XPaymentsConnector\Core\ZeroAuth::getDefaultDescription();
         }
         foreach ($settings as $key => $value) {
             $setting = \XLite\Core\Database::getRepo('XLite\\Model\\Config')->findOneBy(array('name' => $key, 'category' => 'CDev\\XPaymentsConnector'));
             \XLite\Core\Database::getRepo('XLite\\Model\\Config')->update($setting, array('value' => $value));
         }
     }
     \XLite\Core\Database::getEM()->flush();
     \XLite\Core\Config::updateInstance();
 }