HEX
Server: LiteSpeed
System: Linux s917.lon1.mysecurecloudhost.com 4.18.0-477.21.1.lve.1.el8.x86_64 #1 SMP Tue Sep 5 23:08:35 UTC 2023 x86_64
User: assibfaf (3034)
PHP: 7.4.33
Disabled: NONE
Upload Files
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,
		]);
    }
}