/** * * Display reviews advert. * @throws HTTP_Exception_404 * */ public function action_reviews() { $seotitle = $this->request->param('seotitle', NULL); if ($seotitle !== NULL and Core::config('advertisement.reviews') == 1) { $ad = new Model_Ad(); $ad->where('seotitle', '=', $seotitle)->where('status', '!=', Model_Ad::STATUS_SPAM)->limit(1)->cached()->find(); if ($ad->loaded()) { $errors = NULL; //adding a new review if ($this->request->post() and Auth::instance()->logged_in()) { $user = Auth::instance()->get_user(); //only able to review if bought the product if (Core::config('advertisement.reviews_paid') == 1) { $order = new Model_Order(); $order->where('id_ad', '=', $ad->id_ad)->where('id_user', '=', $user->id_user)->where('id_product', '=', Model_Order::PRODUCT_AD_SELL)->where('status', '=', Model_Order::STATUS_PAID)->find(); if (!$order->loaded()) { Alert::set(Alert::ERROR, __('You can only add a review if you bought this product')); $this->redirect(Route::url('ad-review', array('seotitle' => $ad->seotitle))); } } //not allowing to review to yourself if ($user->id_user == $ad->id_user) { Alert::set(Alert::ERROR, __('You can not review yourself.')); $this->redirect(Route::url('ad-review', array('seotitle' => $ad->seotitle))); } $review = new Model_Review(); $review->where('id_ad', '=', $ad->id_ad)->where_open()->or_where('id_user', '=', $user->id_user)->or_where('ip_address', '=', ip2long(Request::$client_ip))->where_close()->find(); //d($review); if (!$review->loaded()) { if (captcha::check('review')) { $validation = Validation::factory($this->request->post())->rule('rate', 'numeric')->rule('description', 'not_empty')->rule('description', 'min_length', array(':value', 5))->rule('description', 'max_length', array(':value', 1000)); if ($validation->check()) { $rate = core::post('rate'); if ($rate > Model_Review::RATE_MAX) { $rate = Model_Review::RATE_MAX; } elseif ($rate < 0) { $rate = 0; } $review = new Model_Review(); $review->id_user = $user->id_user; $review->id_ad = $ad->id_ad; $review->description = core::post('description'); $review->status = Model_Review::STATUS_ACTIVE; $review->ip_address = ip2long(Request::$client_ip); $review->rate = $rate; $review->save(); //email product owner?? notify him of new review $ad->user->email('ad-review', array('[AD.TITLE]' => $ad->title, '[RATE]' => $review->rate, '[DESCRIPTION]' => $review->description, '[URL.QL]' => $ad->user->ql('ad-review', array('seotitle' => $ad->seotitle)))); $ad->recalculate_rate(); $ad->user->recalculate_rate(); Alert::set(Alert::SUCCESS, __('Thanks for your review!')); } else { $errors = $validation->errors('ad'); foreach ($errors as $f => $err) { Alert::set(Alert::ALERT, $err); } } } else { Alert::set(Alert::ERROR, __('Wrong Captcha')); } } else { Alert::set(Alert::ERROR, __('You already added a review')); } } $this->template->scripts['footer'][] = 'js/jquery.raty.min.js'; $this->template->scripts['footer'][] = 'js/review.js'; Breadcrumbs::add(Breadcrumb::factory()->set_title(__('Home'))->set_url(Route::url('default'))); Breadcrumbs::add(Breadcrumb::factory()->set_title($ad->title)->set_url(Route::url('ad', array('seotitle' => $ad->seotitle, 'category' => $ad->category->seoname)))); $this->template->title = $ad->title . ' - ' . __('Reviews'); Breadcrumbs::add(Breadcrumb::factory()->set_title(__('Reviews'))); $this->template->meta_description = text::removebbcode($ad->description); $permission = TRUE; //permission to add hit to advert and give access rights. $auth_user = Auth::instance(); if (!$auth_user->logged_in() or $auth_user->get_user()->id_user != $ad->id_user and ($auth_user->get_user()->id_role != Model_Role::ROLE_ADMIN and $auth_user->get_user()->id_role != Model_Role::ROLE_MODERATOR) or $auth_user->get_user()->id_role != Model_Role::ROLE_ADMIN and $auth_user->get_user()->id_role != Model_Role::ROLE_MODERATOR) { $permission = FALSE; $user = NULL; } else { $user = $auth_user->get_user()->id_user; } $captcha_show = core::config('advertisement.captcha'); if ($ad->get_first_image() !== NULL) { Controller::$image = $ad->get_first_image(); } $reviews = new Model_Review(); $reviews = $reviews->where('id_ad', '=', $ad->id_ad)->where('status', '=', Model_Review::STATUS_ACTIVE)->find_all(); $this->template->bind('content', $content); $this->template->content = View::factory('pages/ad/reviews', array('ad' => $ad, 'permission' => $permission, 'captcha_show' => $captcha_show, 'user' => $user, 'reviews' => $reviews, 'errors' => $errors)); } else { //throw 404 throw HTTP_Exception::factory(404, __('Page not found')); } } else { //throw 404 throw HTTP_Exception::factory(404, __('Page not found')); } }
public function action_listing() { if (Theme::get('infinite_scroll')) { $this->template->scripts['footer'][] = '//cdn.jsdelivr.net/jquery.infinitescroll/2.0b2/jquery.infinitescroll.js'; $this->template->scripts['footer'][] = 'js/listing.js'; } $this->template->scripts['footer'][] = 'js/sort.js'; Breadcrumbs::add(Breadcrumb::factory()->set_title(__('Home'))->set_url(Route::url('default'))); /** * we get the model of category from controller to filter and generate urls titles etc... */ $category = NULL; $category_parent = NULL; if (Model_Category::current()->loaded()) { $category = Model_Category::current(); //adding the category parent if ($category->id_category_parent != 1 and $category->parent->loaded()) { $category_parent = $category->parent; } } //base title if ($category !== NULL) { //category image if (($icon_src = $category->get_icon()) !== FALSE) { Controller::$image = $icon_src; } $this->template->title = $category->name; if ($category->description != '') { $this->template->meta_description = $category->description; } else { $this->template->meta_description = $category->name . ' ' . __('sold in') . ' ' . Core::config('general.site_name'); } } else { $this->template->title = __('all'); $this->template->meta_description = __('List of all products in') . ' ' . Core::config('general.site_name'); } if ($category_parent !== NULL) { $this->template->title .= ' (' . $category_parent->name . ')'; Breadcrumbs::add(Breadcrumb::factory()->set_title($category_parent->name)->set_url(Route::url('list', array('category' => $category_parent->seoname)))); } if ($category !== NULL) { Breadcrumbs::add(Breadcrumb::factory()->set_title($category->name)->set_url(Route::url('list', array('category' => $category->seoname)))); } //user recognition $user = Auth::instance()->get_user() == NULL ? NULL : Auth::instance()->get_user(); $products = new Model_Product(); //filter by category if ($category !== NULL) { $products->where('id_category', 'in', $category->get_siblings_ids()); } //only published products $products->where('status', '=', Model_Product::STATUS_ACTIVE); $res_count = $products->count_all(); // check if there are some advet.-s if ($res_count > 0) { // pagination module $pagination = Pagination::factory(array('view' => 'pagination', 'total_items' => $res_count, 'items_per_page' => core::config('general.products_per_page')))->route_params(array('controller' => $this->request->controller(), 'action' => $this->request->action(), 'category' => $category !== NULL ? $category->seoname : NULL)); Breadcrumbs::add(Breadcrumb::factory()->set_title(__("Page ") . $pagination->current_page)); /** * order depending on the sort parameter */ switch (core::request('sort', core::config('general.sort_by'))) { //title z->a case 'title-asc': $products->order_by('title', 'asc')->order_by('created', 'desc'); break; //title a->z //title a->z case 'title-desc': $products->order_by('title', 'desc')->order_by('created', 'desc'); break; //cheaper first //cheaper first case 'price-asc': $products->order_by('price', 'asc')->order_by('created', 'desc'); break; //expensive first //expensive first case 'price-desc': $products->order_by('price', 'desc')->order_by('created', 'desc'); break; //featured //featured case 'featured': default: $products->order_by('featured', 'desc')->order_by('created', 'desc'); break; //oldest first //oldest first case 'published-asc': $products->order_by('created', 'asc'); break; //newest first //newest first case 'published-desc': $products->order_by('created', 'desc'); break; } //we sort all products with few parameters $products = $products->limit($pagination->items_per_page)->offset($pagination->offset)->find_all(); // array of categories sorted for view $data = array('products' => $products, 'pagination' => $pagination, 'user' => $user, 'category' => $category); } else { // array of categories sorted for view $data = array('products' => NULL, 'pagination' => NULL, 'user' => $user, 'category' => $category); } $this->template->bind('content', $content); $this->template->content = View::factory('pages/product/listing', $data); }