Ejemplo n.º 1
0
 /**
  * complete replacement - refactor when shopware has a better implementation
  * @parent-arguments: $paymentID, $basket, $user
  * maybe: generally call parent for non-payone paymentIDs
  * 
  * @param Enlight_Hook_HookArgs $arguments
  * @return boolean
  */
 public function sAdmin__sManageRisks(Enlight_Hook_HookArgs $arguments)
 {
     $me = $arguments->getSubject();
     $paymentID = $arguments->get('paymentID');
     $basket = $arguments->get('basket');
     $user = $arguments->get('user');
     $moptPayoneMain = $this->Application()->PayoneMain();
     $paymentName = $moptPayoneMain->getPaymentHelper()->getPaymentNameFromId($paymentID);
     if ($moptPayoneMain->getPaymentHelper()->isPayonePaymentMethod($paymentName)) {
         $isPayoneMethod = true;
     } else {
         $isPayoneMethod = false;
     }
     // disable consumerscore check if user is not logged in
     // important, cause payments are already loaded at addArticle (to basket) call
     if (!$user['additional']['user']['id']) {
         $isPayoneMethod = false;
     }
     //perform consumerScoreCheck if configured
     $config = $moptPayoneMain->getPayoneConfig($paymentID);
     if ($isPayoneMethod && $config['consumerscoreActive'] && $config['consumerscoreCheckMoment'] == 0) {
         //get user data
         $userData = $user['additional']['user'];
         $billingAddressData = $user['billingaddress'];
         if ($isPayoneMethod) {
             $userCconsumerScoreData = $moptPayoneMain->getHelper()->getConsumerScoreDataFromUserId($user['additional']['user']['id']);
         }
         if ($isPayoneMethod && !$moptPayoneMain->getHelper()->isCosumerScoreCheckValid($config['consumerscoreLifetime'], $userCconsumerScoreData['moptPayoneConsumerscoreResult'], $userCconsumerScoreData['moptPayoneConsumerscoreDate'])) {
             $params = $moptPayoneMain->getParamBuilder()->getConsumerscoreCheckParams($billingAddressData, $paymentID);
             $response = $this->performConsumerScoreCheck($config, $params, $this->Application()->PayoneBuilder());
             //set result to userdata
             $userData['moptPayoneConsumerscoreResult'] = $response->getStatus();
             $userData['moptPayoneConsumerscoreDate'] = date('Y-m-d');
             if (!$this->handleConsumerScoreCheckResult($response, $config, $userData['id'])) {
                 //abort
                 $arguments->setReturn(false);
                 return;
             }
         }
     }
     // Get all assigned rules
     $queryRules = $me->sSYSTEM->sDB_CONNECTION->GetAll("\n            SELECT rule1, value1, rule2, value2\n            FROM s_core_rulesets\n            WHERE paymentID = ?\n            ORDER BY id ASC\n\t\t", array($paymentID));
     if (empty($queryRules)) {
         $result = $me->executeParent('sManageRisks', array($paymentID, $basket, $user));
         $arguments->setReturn($result);
         return;
     }
     if (empty($basket)) {
         $session = Shopware()->Session();
         $basket = array('content' => $session->sBasketQuantity, 'AmountNumeric' => $session->sBasketAmount);
     }
     foreach ($queryRules as $rule) {
         if ($rule["rule1"] && !$rule["rule2"]) {
             $rule["rule1"] = "sRisk" . $rule["rule1"];
             if (strpos($rule["rule1"], 'sRiskMOPT_PAYONE__') === 0) {
                 if ($this->{$rule}["rule1"]($user, $basket, $rule["value1"], $paymentID)) {
                     $arguments->setReturn(true);
                     return;
                 }
             } elseif ($me->{$rule}["rule1"]($user, $basket, $rule["value1"])) {
                 $arguments->setReturn(true);
                 return;
             }
         } elseif ($rule["rule1"] && $rule["rule2"]) {
             $rule["rule1"] = "sRisk" . $rule["rule1"];
             $rule["rule2"] = "sRisk" . $rule["rule2"];
             if (strpos($rule["rule1"], 'sRiskMOPT_PAYONE__') === 0) {
                 $result1 = $this->{$rule}["rule1"]($user, $basket, $rule["value1"], $paymentID);
             } else {
                 $result1 = $me->{$rule}["rule1"]($user, $basket, $rule["value1"]);
             }
             if (strpos($rule["rule2"], 'sRiskMOPT_PAYONE__') === 0) {
                 $result2 = $this->{$rule}["rule2"]($user, $basket, $rule["value2"], $paymentID);
             } else {
                 $result2 = $me->{$rule}["rule2"]($user, $basket, $rule["value2"]);
             }
             // AND
             if ($result1 && $result2) {
                 $arguments->setReturn(true);
                 return;
             }
         }
     }
     $arguments->setReturn(false);
     return;
 }