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/Testimonials.php
<?php
/**
 * @package    Proxim
 * @author     Davison Pro <davisonpro.coder@gmail.com | https://davisonpro.dev>
 * @copyright  2019 Proxim
 * @version    1.0.0
 * @since      File available since Release 1.0.0
 */

namespace Proxim\Api;

use Db;
use Proxim\Database\DbQuery;
use Proxim\User\User;
use Proxim\Order\Order;
use Proxim\Order\Rating as OrderRating;
use Proxim\Configuration;
use Proxim\Presenter\Order\OrderPresenter;
use Proxim\Tools;
use Proxim\Validate;
use Proxim\Route;
use Proxim\Util\ArrayUtils;
use Proxim\Util\DateUtils;

class Testimonials extends Route {

	public function listTestimonials(){
		$app = $this->app;
        $payload = $app->request->get();
        
        $limit = (int) ArrayUtils::get($payload, 'limit', 10);
        $paper_rating = (int) ArrayUtils::get($payload, 'paperRating', 10);
        $siteId = (int) ArrayUtils::get($payload, 'siteId');
        
        $sql = new DbQuery();
        $sql->select('r.rating_id');
        $sql->from('order_rating', 'r');
        $sql->innerJoin('order', 'o', 'r.`order_id` = o.`order_id`');
        $sql->where('r.paper_rating >= ' . $paper_rating);
        $sql->where("r.comment <> ''");

        // get reveiews by site id
        if($siteId) $sql->where("o.site_id = " . (int) $siteId );

        $sql->orderBy('o.order_id DESC');
        $sql->limit( $limit );

        $results = Db::getInstance(PROX_USE_SQL_SLAVE)->executeS($sql);

        $data = $testimonials = array();

        $order_presenter = new OrderPresenter();

        foreach( $results as $rating ) {
            $rating = new OrderRating( (int) $rating['rating_id'] );
            if(Validate::isLoadedObject($rating)) {
                $order = new Order( (int) $rating->order_id );
                if(Validate::isLoadedObject($order)) {
                    $created_at = $order->date_add;
                    $order = $order_presenter->present($order);

                    $testimonials[] = array(
                        "id" => (int) $rating->id, 
                        "customerId" => (int) $order->customer_id, 
                        "orderId" => (int) $order->id, 
                        "paperRating" => (int) $rating->paper_rating, 
                        "body" => $rating->comment, 
                        "orderTopic" => $order->title, 
                        "orderDiscipline" => $order->topic_category, 
                        "orderPages" => (int) $order->pages, 
                        "orderSlides" => (int) $order->slides, 
                        "orderCharts" => (int) $order->charts, 
                        "createdAt" => DateUtils::convertToISOFormat($created_at)
                    );
                }
                
            }
        }

        $hasNextPage = false;
        if ( count($testimonials) ) {
            $lastFeedback = end($testimonials);
			if ($lastFeedback['id']) {
                $show_more_query = new DbQuery();
                $show_more_query->select('r.rating_id');
                $show_more_query->from('order_rating', 'r');
                $show_more_query->where('r.paper_rating < ' . (int) $lastFeedback['id'] );
                $show_more_query->orderBy('order_id DESC');
                $hasNextPage = (bool) Db::getInstance(PROX_USE_SQL_SLAVE)->getValue( $show_more_query );
			}
		}
        
        $data['hasNextPage'] = $hasNextPage;
        $data['testimonials'] = $testimonials;

		return $app->response([
            "success" => true,
            "errors" => null,
			"data" => $data
		]);
	}
}