. * */ namespace Vvveb\Component; use Vvveb\Sql\Product_Review_MediaSQL; use Vvveb\System\Images; class Reviews extends Comments { protected $type = 'product_review'; protected $route = 'product/product/index'; protected $modelName = 'product_review'; public static $defaultOptions = [ 'product_id' => 'url', 'slug' => 'url', 'product_title' => NULL, //include product title (for recent reviews etc) 'user_id' => NULL, 'status' => 1, //approved reviews 'start' => 0, 'limit' => 10, 'image_size' => 'thumb', 'order' => 'asc', //desc ]; public $cacheExpire = 0; //no cache function results() { $results = parent::results(); //review images foreach ($results['product_review'] as $id => &$review) { if (isset($review['images'])) { $review['images'] = json_decode($review['images'], true); foreach ($review['images'] as &$image) { $image['thumb'] = Images::image($image['image'], 'product', $this->options['image_size']); $image['image'] = Images::image($image['image'], 'product', 'xlarge'); } } } //all product reviews images $media = new Product_Review_MediaSQL(); $gallery = $media->getAll($this->options + ['status' => 1])['product_review_media'] ?? []; if ($gallery) { //$gallery = Images::images($gallery, 'product', $this->options['image_size']); foreach ($gallery as &$image) { $image['thumb'] = Images::image($image['image'], 'product', $this->options['image_size']); $image['image'] = Images::image($image['image'], 'product', 'xlarge'); } } $results['images'] = $gallery; $stats = $this->modelInstance->getProductStats($this->options); if ($stats) { $results += $stats; } $results['rating'] = number_format($results['rating'] ?? 0, 1); //compute width and fill missing ratings foreach ([1, 2, 3, 4, 5] as $rating) { if (isset($results['summary'][$rating])) { $summary = &$results['summary'][$rating]; $summary['percent'] = ceil($summary['count'] * 100 / $results['count']); } else { $results['summary'][$rating]['rating'] = $rating; $results['summary'][$rating]['percent'] = 0; $results['summary'][$rating]['count'] = 0; } } //$results['buyers'] = 5; //$results['recommendations'] = 100; return $results; } }