Back to Opencart

File catalog\controller\product\review.php

docs/api/source-catalog.controller.product.review.html

4.1.0.313.0 KB
Original Source

Namespaces

Classes

| 1: | <?php | | 2: | namespace Opencart\Catalog\Controller\Product; | | 3: | /** | | 4: | * Class Review | | 5: | * | | 6: | * @package Opencart\Catalog\Controller\Product | | 7: | */ | | 8: | class Review extends \Opencart\System\Engine\Controller { | | 9: | /** | | 10: | * @return string | | 11: | */ | | 12: | public function index(): string { | | 13: | $this->load->language('product/review'); | | 14: | | | 15: | if (isset($this->request->get['product_id'])) { | | 16: | $data['product_id'] = (int)$this->request->get['product_id']; | | 17: | } else { | | 18: | $data['product_id'] = 0; | | 19: | } | | 20: | | | 21: | $data['text_login'] = sprintf($this->language->get('text_login'), $this->url->link('account/login', 'language=' . $this->config->get('config_language')), $this->url->link('account/register', 'language=' . $this->config->get('config_language'))); | | 22: | | | 23: | $data['list'] = $this->getList(); | | 24: | | | 25: | if ($this->customer->isLogged() || $this->config->get('config_review_guest')) { | | 26: | $data['review_guest'] = true; | | 27: | } else { | | 28: | $data['review_guest'] = false; | | 29: | } | | 30: | | | 31: | if ($this->customer->isLogged()) { | | 32: | $data['customer'] = $this->customer->getFirstName() . ' ' . $this->customer->getLastName(); | | 33: | } else { | | 34: | $data['customer'] = ''; | | 35: | } | | 36: | | | 37: | // Create a login token to prevent brute force attacks | | 38: | $data['review_token'] = $this->session->data['review_token'] = oc_token(32); | | 39: | | | 40: | // Captcha | | 41: | $this->load->model('setting/extension'); | | 42: | | | 43: | $extension_info = $this->model_setting_extension->getExtensionByCode('captcha', $this->config->get('config_captcha')); | | 44: | | | 45: | if ($extension_info && $this->config->get('captcha_' . $this->config->get('config_captcha') . '_status') && in_array('review', (array)$this->config->get('config_captcha_page'))) { | | 46: | $data['captcha'] = $this->load->controller('extension/' . $extension_info['extension'] . '/captcha/' . $extension_info['code']); | | 47: | } else { | | 48: | $data['captcha'] = ''; | | 49: | } | | 50: | | | 51: | $data['language'] = $this->config->get('config_language'); | | 52: | | | 53: | return $this->load->view('product/review', $data); | | 54: | } | | 55: | | | 56: | /** | | 57: | * Write | | 58: | * | | 59: | * @return void | | 60: | */ | | 61: | public function write(): void { | | 62: | $this->load->language('product/review'); | | 63: | | | 64: | $json = []; | | 65: | | | 66: | if (isset($this->request->get['product_id'])) { | | 67: | $product_id = (int)$this->request->get['product_id']; | | 68: | } else { | | 69: | $product_id = 0; | | 70: | } | | 71: | | | 72: | if (!isset($this->request->get['review_token']) || !isset($this->session->data['review_token']) || $this->request->get['review_token'] != $this->session->data['review_token']) { | | 73: | $json['error']['warning'] = $this->language->get('error_token'); | | 74: | } | | 75: | | | 76: | $keys = [ | | 77: | 'author', | | 78: | 'text', | | 79: | 'rating' | | 80: | ]; | | 81: | | | 82: | foreach ($keys as $key) { | | 83: | if (!isset($this->request->post[$key])) { | | 84: | $this->request->post[$key] = ''; | | 85: | } | | 86: | } | | 87: | | | 88: | if (!$this->config->get('config_review_status')) { | | 89: | $json['error']['warning'] = $this->language->get('error_status'); | | 90: | } | | 91: | | | 92: | $this->load->model('catalog/product'); | | 93: | | | 94: | $product_info = $this->model_catalog_product->getProduct($product_id); | | 95: | | | 96: | if (!$product_info) { | | 97: | $json['error']['warning'] = $this->language->get('error_product'); | | 98: | } | | 99: | | | 100: | if ((oc_strlen($this->request->post['author']) < 3) || (oc_strlen($this->request->post['author']) > 25)) { | | 101: | $json['error']['author'] = $this->language->get('error_author'); | | 102: | } | | 103: | | | 104: | if ((oc_strlen($this->request->post['text']) < 25) || (oc_strlen($this->request->post['text']) > 1000)) { | | 105: | $json['error']['text'] = $this->language->get('error_text'); | | 106: | } | | 107: | | | 108: | if ($this->request->post['rating'] < 1 || $this->request->post['rating'] > 5) { | | 109: | $json['error']['rating'] = $this->language->get('error_rating'); | | 110: | } | | 111: | | | 112: | if (!$this->customer->isLogged() && !$this->config->get('config_review_guest')) { | | 113: | $json['error']['warning'] = $this->language->get('error_login'); | | 114: | } | | 115: | | | 116: | if ($this->customer->isLogged() && $this->config->get('config_review_purchased')) { | | 117: | $this->load->model('account/order'); | | 118: | | | 119: | if (!$this->model_account_order->getTotalOrdersByProductId($product_id)) { | | 120: | $json['error']['purchased'] = $this->language->get('error_purchased'); | | 121: | } | | 122: | } | | 123: | | | 124: | // Captcha | | 125: | $this->load->model('setting/extension'); | | 126: | | | 127: | $extension_info = $this->model_setting_extension->getExtensionByCode('captcha', $this->config->get('config_captcha')); | | 128: | | | 129: | if ($extension_info && $this->config->get('captcha_' . $this->config->get('config_captcha') . '_status') && in_array('review', (array)$this->config->get('config_captcha_page'))) { | | 130: | $captcha = $this->load->controller('extension/' . $extension_info['extension'] . '/captcha/' . $extension_info['code'] . '.validate'); | | 131: | | | 132: | if ($captcha) { | | 133: | $json['error']['captcha'] = $captcha; | | 134: | } | | 135: | } | | 136: | | | 137: | if (!$json) { | | 138: | $this->load->model('catalog/review'); | | 139: | | | 140: | $this->model_catalog_review->addReview($product_id, $this->request->post); | | 141: | | | 142: | $json['success'] = $this->language->get('text_success'); | | 143: | } | | 144: | | | 145: | $this->response->addHeader('Content-Type: application/json'); | | 146: | $this->response->setOutput(json_encode($json)); | | 147: | } | | 148: | | | 149: | /** | | 150: | * List | | 151: | * | | 152: | * @return void | | 153: | */ | | 154: | public function list(): void { | | 155: | $this->load->language('product/review'); | | 156: | | | 157: | $this->response->setOutput($this->getList()); | | 158: | } | | 159: | | | 160: | /** | | 161: | * Get List | | 162: | * | | 163: | * @return string | | 164: | */ | | 165: | public function getList(): string { | | 166: | if (isset($this->request->get['product_id'])) { | | 167: | $product_id = (int)$this->request->get['product_id']; | | 168: | } else { | | 169: | $product_id = 0; | | 170: | } | | 171: | | | 172: | if (isset($this->request->get['page'])) { | | 173: | $page = (int)$this->request->get['page']; | | 174: | } else { | | 175: | $page = 1; | | 176: | } | | 177: | | | 178: | $data['reviews'] = []; | | 179: | | | 180: | $this->load->model('catalog/review'); | | 181: | | | 182: | $results = $this->model_catalog_review->getReviewsByProductId($product_id, ($page - 1) * 5, 5); | | 183: | | | 184: | foreach ($results as $result) { | | 185: | $data['reviews'][] = [ | | 186: | 'author' => $result['author'], | | 187: | 'text' => nl2br($result['text']), | | 188: | 'rating' => (int)$result['rating'], | | 189: | 'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])) | | 190: | ]; | | 191: | } | | 192: | | | 193: | $review_total = $this->model_catalog_review->getTotalReviewsByProductId($product_id); | | 194: | | | 195: | $data['pagination'] = $this->load->controller('common/pagination', [ | | 196: | 'total' => $review_total, | | 197: | 'page' => $page, | | 198: | 'limit' => 5, | | 199: | 'url' => $this->url->link('product/review.list', 'language=' . $this->config->get('config_language') . '&product_id=' . $product_id . '&page={page}') | | 200: | ]); | | 201: | | | 202: | $data['results'] = sprintf($this->language->get('text_pagination'), ($review_total) ? (($page - 1) * 5) + 1 : 0, ((($page - 1) * 5) > ($review_total - 5)) ? $review_total : ((($page - 1) * 5) + 5), $review_total, ceil($review_total / 5)); | | 203: | | | 204: | return $this->load->view('product/review_list', $data); | | 205: | } | | 206: | } | | 207: | |

OpenCart API API documentation generated by ApiGen dev-master