File: /home/assibfaf/public_html/prox-controllers/Api/Papers.php
<?php
/**
* @package Proxim
* @author Davison Pro <davisonprp.coder@gmail.com | https://davisonprp.dev>
* @copyright 2019 Proxim
* @version 1.0.0
* @since File available since Release 1.0.0
*/
namespace Proxim\Api;
use Db;
use Exception;
use PrePaper;
use PrePaperPresenter;
use Proxim\Configuration;
use Proxim\Currency;
use Proxim\Database\DbQuery;
use Proxim\Module\Module;
use Proxim\Route;
use Proxim\User\Wallet;
use Proxim\Util\ArrayUtils;
use Proxim\Validate;
class Papers extends Route {
public function getPapers() {
$app = $this->app;
$payload = $app->request->get();
$user = $app->container->user;
if(!Module::getInstanceByName('prepapers')) {
return $app->response([
"success" => true,
"showMoreButton" => false,
"papers" => array()
]);
}
$batch = (int) ArrayUtils::get($payload, 'batch');
$startFrom = (int) ArrayUtils::get($payload, 'startFrom');
$papers = array();
$papers_query = new DbQuery();
$papers_query->select('DISTINCT p.prepaper_id');
$papers_query->from('prepaper_payment', 'p');
$papers_query->where('p.`customer_id` = ' . (int) $user->id );
$papers_query->where('p.`is_paid` = 1');
$results_query = clone $papers_query;
if( $startFrom ) {
$results_query->where('p.`prepaper_id` < ' . (int) $startFrom );
}
/** Limit results */
$results_query->orderBy('p.prepaper_id DESC');
$results_query->limit( $batch );
$result = Db::getInstance(PROX_USE_SQL_SLAVE)->executeS( $results_query );
$paper_presenter = new PrePaperPresenter();
foreach ($result as $paper) {
$paper = new PrePaper($paper['prepaper_id'], true);
if ( Validate::isLoadedObject($paper) ) {
$papers[] = $paper_presenter->present($paper);
}
}
$showMoreButton = false;
if ( count($papers) ) {
$lastPaper = end($papers);
if ($lastPaper->id) {
$startFrom = $lastPaper->id;
$show_more_query = clone $papers_query;
$show_more_query->where('p.`prepaper_id` < ' . (int) $startFrom );
$show_more_query->orderBy('prepaper_id DESC');
$showMoreButton = (bool) Db::getInstance(PROX_USE_SQL_SLAVE)->getValue( $show_more_query );
}
}
return $app->response([
"success" => true,
"startFrom" => (int) $startFrom,
"batch" => count($papers),
"showMoreButton" => $showMoreButton,
"papers" => $papers
]);
}
public function getPaper( $paperId ) {
$app = $this->app;
$user = $app->container->user;
if(!Module::getInstanceByName('prepapers')) {
return $app->response([
"success" => false,
"errors" => "Invalid paper id: %d"
]);
}
$prepaper = new PrePaper( (int) $paperId);
if (!Validate::isLoadedObject($prepaper) ) {
return $app->response([
"success" => false,
"errors" => "Invalid paper id: %d"
]);
}
$prepaperPresenter = new PrePaperPresenter();
return $app->response([
"success" => true,
"paper" => $prepaperPresenter->present($prepaper)
]);
}
public function payPaper( $paperId ) {
$app = $this->app;
$user = $app->container->user;
$params = $app->request->get();
if(!Module::getInstanceByName('prepapers')) {
return $app->response([
"success" => false,
"errors" => "Invalid paper id: " . $paperId
]);
}
$payment_method = ArrayUtils::get($params, 'payment_method_value');
$prepaper = new PrePaper( (int) $paperId );
if ( !Validate::isLoadedObject($prepaper) ) {
return $app->response([
"success" => false,
"errors" => "Invalid paper id: " . $paperId
]);
}
if( $payment_method == "wallet" ) {
$paperUri = Configuration::get('SITE_DOMAIN') . '/dashboard/paper/' . $prepaper->id;
$currency_id = Currency::getIdByIsoCode('USD');
try {
$success = Wallet::chargeWallet(
$user->id,
$prepaper->price,
$currency_id,
$prepaper->id,
'paper'
);
if($success) {
$redirectUri = Configuration::get('SITE_DOMAIN') . '/payment/wallet/success?redirectUri=' . $paperUri;
} else {
$redirectUri = Configuration::get('SITE_DOMAIN') . '/payment/wallet/failed?redirectUri=' . $paperUri;
}
} catch( Exception $e ) {
return $app->response([
"success" => false,
"errors" => [
$e->getMessage()
]
]);
}
} else {
$redirectUri = Configuration::get('SITE_DOMAIN') . '/checkout/' . $payment_method . '/paper/' . $prepaper->id;
}
return $app->response([
"success" => true,
'redirect_to' => $redirectUri,
]);
}
}