/** * 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; }