public function __construct(&$subject, $config = array()) { parent::__construct($subject, $config); $this->textPrefix .= '_' . strtoupper($this->serviceAlias); $this->debugType .= '_' . strtoupper($this->serviceAlias); $this->errorType .= '_' . strtoupper($this->serviceAlias); // Create log object $this->log = new Prism\Log\Log(); // Set database log writer if Joomla! debug is enabled. if ($this->logTable !== null and $this->logTable !== '' and JDEBUG) { $this->log->addAdapter(new Prism\Log\Adapter\Database(\JFactory::getDbo(), $this->logTable)); } // Set file log adapter. if ($this->logFile !== null and $this->logFile !== '') { $file = \JPath::clean($this->app->get('log_path') . DIRECTORY_SEPARATOR . basename($this->logFile)); $this->log->addAdapter(new Prism\Log\Adapter\File($file)); } $this->container = Prism\Container::getContainer(); }
/** * Pre-processor for $transactionManager->process($context, $options) * * @param string $context * @param Transaction $transaction * @param array $options * * @throws \RuntimeException * @throws \InvalidArgumentException * @throws \UnexpectedValueException * @throws \OutOfBoundsException * * @return void */ public function onAfterProcessTransaction($context, Transaction $transaction, array $options = array()) { // Check for allowed context. if (!in_array($context, $this->allowedContext, true)) { return; } $completedOrPending = Constants::PAYMENT_STATUS_COMPLETED | Constants::PAYMENT_STATUS_PENDING; $canceledOrRefundedOrFialed = Constants::PAYMENT_STATUS_CANCELED | Constants::PAYMENT_STATUS_REFUNDED | Constants::PAYMENT_STATUS_FAILED; $statuses = array('completed' => Constants::PAYMENT_STATUS_COMPLETED, 'pending' => Constants::PAYMENT_STATUS_PENDING, 'canceled' => Constants::PAYMENT_STATUS_CANCELED, 'refunded' => Constants::PAYMENT_STATUS_REFUNDED, 'failed' => Constants::PAYMENT_STATUS_FAILED); $oldStatus = ArrayHelper::getValue($options, 'old_status'); $newStatus = ArrayHelper::getValue($options, 'new_status'); $oldStatusBit = ($oldStatus and array_key_exists($oldStatus, $statuses)) ? $statuses[$oldStatus] : null; $newStatusBit = ($newStatus and array_key_exists($newStatus, $statuses)) ? $statuses[$newStatus] : null; // Check if it is new record. $isNew = false; if ($oldStatusBit === null and $newStatusBit !== null) { $isNew = true; } $container = Container::getContainer(); $containerHelper = new Helper(); // Add funds when create new transaction record, and it is completed and pending. if ($isNew and $transaction->getProjectId() > 0 and ($transaction->isCompleted() or $transaction->isPending())) { $project = $containerHelper->fetchProject($container, $transaction->getProjectId()); $project->addFunds($transaction->getAmount()); $project->storeFunds(); if ($transaction->getRewardId()) { $reward = $containerHelper->fetchReward($container, $transaction->getRewardId(), $transaction->getProjectId()); $this->increaseDistributedReward($transaction, $reward); } } else { // If someone change the status from completed/pending to another one, remove funds. if ($completedOrPending & $oldStatusBit and $canceledOrRefundedOrFialed & $newStatusBit) { $project = $containerHelper->fetchProject($container, $transaction->getProjectId()); $project->removeFunds($transaction->getAmount()); $project->storeFunds(); if ($transaction->getRewardId()) { $reward = $containerHelper->fetchReward($container, $transaction->getRewardId(), $transaction->getProjectId()); $this->decreaseDistributedReward($transaction, $reward); } } elseif ($canceledOrRefundedOrFialed & $oldStatusBit and $completedOrPending & $newStatusBit) { $project = $containerHelper->fetchProject($container, $transaction->getProjectId()); $project->addFunds($transaction->getAmount()); $project->storeFunds(); if ($transaction->getRewardId()) { $reward = $containerHelper->fetchReward($container, $transaction->getRewardId(), $transaction->getProjectId()); $this->increaseDistributedReward($transaction, $reward); } } } }