public function onBeforeSave(Customweb_Database_Entity_IManager $entityManager)
 {
     if ($this->getContextId() !== null) {
         $currentContext = $entityManager->fetch(get_class($this), $this->getContextId());
         $newMap = $this->context->applyUpdatesOnMap($currentContext->getMap());
         $this->setStoreMap($newMap);
     } else {
         $this->setStoreMap($this->context->getMap());
     }
 }
 public function cleanUp()
 {
     $maxEndtime = Customweb_Core_Util_System::getScriptExecutionEndTime() - 4;
     $where = '(updatedOn < NOW() - INTERVAL 2 MONTH AND authorizationStatus = "' . Customweb_Payment_Authorization_ITransaction::AUTHORIZATION_STATUS_FAILED . '") OR (updatedOn < NOW() - INTERVAL 6 MONTH AND authorizationStatus = "' . Customweb_Payment_Authorization_ITransaction::AUTHORIZATION_STATUS_PENDING . '" ) OR (updatedOn < NOW() - INTERVAL 1 MONTH AND (authorizationStatus = "" OR authorizationStatus IS NULL )) LIMIT 0,40';
     $removable = $this->manager->searchPrimaryKey($this->transactionClassName, $where);
     foreach ($removable as $remove) {
         if ($maxEndtime > time()) {
             $this->manager->removeByPrimaryKey($this->transactionClassName, $remove);
         } else {
             break;
         }
     }
 }
 public function cleanUp()
 {
     $maxEndtime = Customweb_Core_Util_System::getScriptExecutionEndTime() - 4;
     // Remove all contexts which are not changed in the last 2 days and the state is not completed.
     $where = 'updatedOn < NOW() - INTERVAL 2 DAY AND state != "completed" LIMIT 0,40';
     $entities = $this->entityManager->search($this->contextEntityName, $where);
     foreach ($entities as $entity) {
         if ($maxEndtime > time()) {
             $this->entityManager->remove($entity);
         } else {
             break;
         }
     }
 }
 public function createOrder(Customweb_Payment_ExternalCheckout_IContext $context)
 {
     if (!$context instanceof Customweb_Payment_ExternalCheckout_AbstractContext) {
         throw new Customweb_Core_Exception_CastException('Customweb_Payment_ExternalCheckout_AbstractContext');
     }
     try {
         if ($context->getState() == Customweb_Payment_ExternalCheckout_IContext::STATE_COMPLETED) {
             $transcationId = $context->getTransactionId();
             if (empty($transcationId)) {
                 throw new Exception("Invalid state. The context can not be in state COMPLETED without transaction id set.");
             }
             return $this->getTransactionHandler()->findTransactionByTransactionId($transcationId);
         } else {
             if ($context->getState() == Customweb_Payment_ExternalCheckout_IContext::STATE_FAILED) {
                 throw new Exception("A failed context cannot be completed.");
             }
         }
         $this->checkContextCompleteness($context);
         $this->getTransactionHandler()->beginTransaction();
         $transactionContext = $this->createTransactionContextFromContext($context);
         $transactionObject = $this->getProviderService()->createTransaction($transactionContext, $context);
         $this->getTransactionHandler()->persistTransactionObject($transactionObject);
         $context->setTransactionId($transactionObject->getTransactionContext()->getTransactionId());
         $context->setState(Customweb_Payment_ExternalCheckout_IContext::STATE_COMPLETED);
         $this->entityManager->persist($context);
         $this->getTransactionHandler()->commitTransaction();
         return $transactionObject;
     } catch (Exception $e) {
         if ($this->getTransactionHandler()->isTransactionRunning()) {
             $this->getTransactionHandler()->rollbackTransaction();
         }
         throw $e;
     }
 }
 protected function loadTransaction($transactionId)
 {
     $transaction = $this->manager->fetch($this->transactionClassName, $transactionId);
     if (!$transaction instanceof Customweb_Payment_Entity_AbstractTransaction) {
         throw new Exception("Transaction must be of type Customweb_Payment_Entity_AbstractTransaction");
     }
     return $transaction;
 }
 /**
  * Deactivates the alias. It is not selected anymore by getAliasTransactions().
  *
  * @param int $transactionId
  * @throws Exception
  */
 public function deactivateAlias($transactionId)
 {
     $transaction = $this->manager->fetch($this->transactionClassName, $transactionId);
     if (!$transaction instanceof Customweb_Payment_Entity_AbstractTransaction) {
         throw new Exception("Transaction must be of type Customweb_Payment_Entity_AbstractTransaction");
     }
     $transaction->setAliasActive(false);
     $this->manager->persist($transaction);
 }
 /**
  * Subclasses which overwrite this method must make sure they check the isSkipOnSafeMethods flag and act accordingly
  * It's recommend that the subclass resets the setSkipOnSaveMethods flag, if it does not call the parent method
  * 
  * @param Customweb_Database_Entity_IManager $entityManager
  */
 public function onAfterSave(Customweb_Database_Entity_IManager $entityManager)
 {
     if ($this->isSkipOnSafeMethods()) {
         $this->setSkipOnSaveMethods(false);
         true;
     }
     if ($this->getTransactionObject() !== null && $this->getTransactionObject() instanceof Customweb_Payment_Authorization_ITransaction) {
         $paymentCustomerContext = $this->getTransactionObject()->getTransactionContext()->getPaymentCustomerContext();
         if ($paymentCustomerContext instanceof Customweb_Payment_Entity_AbstractPaymentCustomerContext) {
             try {
                 $paymentCustomerContext->setCustomerId($this->getCustomerId());
                 $entityManager->persist($paymentCustomerContext);
             } catch (Exception $e) {
                 // Ignore
             }
         }
     }
 }
 /**
  * Returns the schema to use this storage backend. The resulting SQL string must be
  * executed prior to use this backend.
  *
  * @return string
  */
 public function generateSchema()
 {
     return $this->entityManager->generateEntitySchema($this->entityClassName);
 }