123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?php
- /**
- *
- * PHP Pro Bid $Id$ SjeaaEQ8lXI22RXtJnThXE9bPS4xV+bZ6YEIN9k5inM=
- *
- * @link http://www.phpprobid.com
- * @copyright Copyright (c) 2015 Online Ventures Software & CodeCube SRL
- * @license http://www.phpprobid.com/license Commercial License
- *
- * @version 7.6
- */
- /**
- * sale direct payment class
- */
- namespace Ppb\Service\Fees;
- use Ppb\Service,
- Cube\Controller\Front,
- Ppb\Db\Table\Row\Sale as SaleModel;
- class DirectPayment extends Service\Fees
- {
- /**
- *
- * sale object
- *
- * @var \Ppb\Db\Table\Row\Sale
- */
- protected $_sale;
- /**
- *
- * total amount to be paid
- *
- * @var float
- */
- protected $_totalAmount;
- /**
- *
- * payment redirect path
- *
- * @var array
- */
- protected $_redirect = array(
- 'module' => 'members',
- 'controller' => 'invoices',
- 'action' => 'browse',
- 'params' => array(
- 'type' => 'bought',
- ),
- );
- /**
- *
- * class constructor
- *
- * @param \Ppb\Db\Table\Row\Sale $sale
- * @param integer|string|\Ppb\Db\Table\Row\User $user the user that will be paying
- */
- public function __construct(SaleModel $sale = null, $user = null)
- {
- parent::__construct();
- if ($sale !== null) {
- $this->setSale($sale);
- }
- if ($user !== null) {
- $this->setUser($user);
- }
- }
- /**
- *
- * set sale model
- * also, based on the sale model, set the total amount that will be used to calculate the fees against
- *
- * @param \Ppb\Db\Table\Row\Sale $sale
- *
- * @return $this
- */
- public function setSale(SaleModel $sale)
- {
- $this->_sale = $sale;
- $this->_totalAmount = $sale->calculateTotal();
- return $this;
- }
- /**
- *
- * get sale model
- *
- * @return \Ppb\Db\Table\Row\Sale
- */
- public function getSale()
- {
- return $this->_sale;
- }
- /**
- *
- * get redirect array, but attach sale_id variable if it is set
- *
- * @return array
- */
- public function getRedirect()
- {
- $redirect = $this->_redirect;
- if (!empty($this->_transactionDetails['data']['sale_id'])) {
- $redirect['params']['sale_id'] = $this->_transactionDetails['data']['sale_id'];
- }
- return $redirect;
- }
- /**
- *
- * mark the sale as paid with direct payment
- * if ipn returns false, mark the listing as unpaid
- *
- * @param bool $ipn true if payment is completed, false otherwise
- * @param array $post array keys: {sale_id}
- *
- * @return \Ppb\Service\Fees\SaleTransaction
- */
- public function callback($ipn, array $post)
- {
- $salesService = new Service\Sales();
- /** @var \Ppb\Db\Table\Row\Sale $sale */
- $sale = $salesService->findBy('id', $post['sale_id']);
- $flag = ($ipn) ? SaleModel::PAYMENT_PAID_DIRECT_PAYMENT : 0;
- $sale->save(array(
- 'flag_payment' => $flag,
- ));
- if ($ipn) {
- $sale->setExpiresFlag(true);
- $user = Front::getInstance()->getBootstrap()->getResource('user');
- $type = null;
- if (!empty($user['id'])) {
- $type = ($sale['buyer_id'] == $user['id']) ? 'bought' : 'sold';
- }
- $this->setRedirect(array(
- 'module' => 'members',
- 'controller' => 'invoices',
- 'action' => 'browse',
- 'params' => array(
- 'type' => $type,
- 'sale_id' => $post['sale_id'],
- ),
- ));
- }
- /** @var \Ppb\Db\Table\Row\User $seller */
- $seller = $sale->findParentRow('\Ppb\Db\Table\Users', 'Seller');
- $automaticDigitalDownloads = $seller->getGlobalSettings('automatic_digital_downloads');
- if ($flag == 0 || $automaticDigitalDownloads != -1) {
- $downloadsFlag = ($flag) ? 1 : 0;
- $sale->findDependentRowset('\Ppb\Db\Table\SalesListings')->save(array(
- 'downloads_active' => $downloadsFlag,
- ));
- }
- return $this;
- }
- /**
- *
- * get total amount to be paid resulted from the calculate() method
- *
- * @return float
- */
- public function getTotalAmount()
- {
- return $this->_totalAmount;
- }
- }
|