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
]);
}
}