Merge pull request #18 from bagisto/rahul

Rahul
This commit is contained in:
JItendra Singh 2018-09-26 09:52:15 +05:30 committed by GitHub
commit fec17d201a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
42 changed files with 3139 additions and 158 deletions

View File

@ -49,7 +49,7 @@ Route::group(['middleware' => ['web']], function () {
'view' => 'admin::customers.orders.index'
])->name('admin.customer.orders.index');
Route::get('customer/reviews', 'Webkul\Shop\Http\Controllers\ReviewController@index')->defaults('_config',[
Route::get('customer/reviews', 'Webkul\Product\Http\Controllers\ReviewController@index')->defaults('_config',[
'view' => 'admin::customers.review.index'
])->name('admin.customer.review.index');
@ -61,11 +61,11 @@ Route::group(['middleware' => ['web']], function () {
'redirect' => 'admin.customer.index'
])->name('admin.customer.store');
Route::get('customer/reviews/edit/{id}', 'Webkul\Shop\Http\Controllers\ReviewController@edit')->defaults('_config',[
Route::get('customer/reviews/edit/{id}', 'Webkul\Product\Http\Controllers\ReviewController@edit')->defaults('_config',[
'view' => 'admin::customers.review.edit'
])->name('admin.customer.review.edit');
Route::put('customer/reviews/edit/{id}', 'Webkul\Shop\Http\Controllers\ReviewController@update')->defaults('_config', [
Route::put('customer/reviews/edit/{id}', 'Webkul\Product\Http\Controllers\ReviewController@update')->defaults('_config', [
'redirect' => 'admin.customer.review.index'
])->name('admin.customer.review.update');
@ -73,7 +73,7 @@ Route::group(['middleware' => ['web']], function () {
'view' => 'admin::customers.edit'
])->name('admin.customer.edit');
Route::put('customer/reviews/edit/{id}', 'Webkul\Core\Http\Controllers\CustomerController@update')->defaults('_config', [
Route::put('customer/edit/{id}', 'Webkul\Core\Http\Controllers\CustomerController@update')->defaults('_config', [
'redirect' => 'admin.customer.index'
])->name('admin.customer.update');

View File

@ -113,7 +113,7 @@ class EventServiceProvider extends ServiceProvider
$acl->add('catalog.products', 'Products', 'admin.catalog.products.index', 1);
$acl->add('catalog.categories', 'Categories', 'admin.catalog.categories.index', 1);
$acl->add('configuration', 'Configure', 'admin.account.edit', 5);
$acl->add('settings', 'Settings', 'admin.users.index', 6);

View File

@ -7,7 +7,7 @@
@section('content')
<div class="content">
<?php $locale = request()->get('locale') ?: app()->getLocale(); ?>
<form method="POST" action="" @submit.prevent="onSubmit">
<div class="page-header">
@ -121,7 +121,7 @@
</div>
</div>
</form>
</div>
@stop

View File

@ -63,8 +63,13 @@
<div class="control-group">
<label for="name" >{{ __('admin::app.customers.customers.customer_group') }}</label>
<?php $selectedOption = $customer->customerGroup->id ?>
@if(!is_null($customer->customer_group_id))
<?php $selectedOption = $customer->customerGroup->id ?>
@endif
<select class="control" name="customer_group_id">
@foreach($customerGroup as $group)
<option value="{{ $group->id }}" {{ $selectedOption == $group->id ? 'selected' : '' }}>
{{ $group->group_name}}

View File

@ -45,11 +45,11 @@
<div class="control-group">
<label for="name" >{{ __('admin::app.customers.reviews.status') }}</label>
<select class="control" name="status">
<option value="1">
1
<option value="pending" {{ $review->status == "pending" ? 'selected' : ''}}>
pending
</option>
<option value="2">
2
<option value="approved" {{ $review->status == "approved" ? 'selected' : '' }}>
approved
</option>
</select>
</div>

View File

@ -0,0 +1,13 @@
@extends('admin::layouts.content')
@section('page_title')
{{ __('admin::app.catalog.categories.edit-title') }}
@stop
@section('content')
<div class="content">
</div>
@stop

View File

@ -140,7 +140,7 @@ class Core
$channel = $this->getCurrentChannel();
$currencyCode = $channel->base_currency;
$currencyCode = $channel->base_currency->code;
return currency($price, $currencyCode);
}

View File

@ -5,6 +5,7 @@ namespace Webkul\Customer\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Webkul\Customer\Repositories\CustomerRepository;
use Webkul\Product\Repositories\ProductReviewRepository as ProductReview;
use Webkul\Customer\Models\Customer;
use Auth;
@ -27,14 +28,29 @@ class CustomerController extends Controller
protected $_config;
protected $customer;
/**
* ProductReviewRepository object
*
* @var array
*/
protected $productReview;
public function __construct(CustomerRepository $customer)
/**
* Create a new controller instance.
*
* @param Webkul\Product\Repositories\ProductReviewRepository $productReview
* @return void
*/
public function __construct(CustomerRepository $customer , ProductReview $productReview)
{
$this->middleware('customer');
$this->_config = request('_config');
$this->customer = $customer;
$this->productReview = $productReview;
}
/**
@ -141,7 +157,12 @@ class CustomerController extends Controller
}
public function reviews() {
return view($this->_config['view']);
$id = auth()->guard('customer')->user()->id;
$reviews = $this->productReview->getCustomerReview($id);
return view($this->_config['view'],compact('reviews'));
}
public function address() {

View File

@ -1,6 +1,6 @@
<?php
namespace Webkul\Core\Http\Controllers;
namespace Webkul\Product\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
@ -53,29 +53,43 @@ class ReviewController extends Controller
$this->_config = request('_config');
}
/**
* Store a newly created resource in storage.
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function index()
{
return view($this->_config['view']);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function store(Request $request , $id)
{
$this->validate(request(), [
'comment' => 'required',
]);
public function edit($id)
{
$review = $this->productReview->find($id);
$input=$request->all();
return view($this->_config['view'],compact('review'));
}
$input['product_id']=$id;
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$input['customer_id']=1;
$this->productReview->update(request()->all(), $id);
$this->productReview->create($input);
session()->flash('success', 'Review submitted successfully.');
session()->flash('success', 'Review updated successfully.');
return redirect()->route($this->_config['redirect']);
}
}

View File

@ -4,6 +4,7 @@ namespace Webkul\Product\Models;
use Illuminate\Database\Eloquent\Model;
use Webkul\Customer\Models\Customer;
use Webkul\Product\Models\Product;
class ProductReview extends Model
{
@ -16,4 +17,12 @@ class ProductReview extends Model
{
return $this->belongsTo(Customer::class);
}
/**
* Get the product.
*/
public function product()
{
return $this->belongsTo(Product::class);
}
}

View File

@ -56,7 +56,7 @@ class Review extends AbstractProduct
*/
public function getTotalRating($product)
{
return $product->reviews()->where('status',1)->sum('rating');
return $product->reviews()->where('status','approved')->sum('rating');
}
/**
@ -101,7 +101,7 @@ class Review extends AbstractProduct
$link = $_SERVER['PHP_SELF'];
$link_array = explode('/',$link);
$last=end($link_array);
$itemPerPage = $last*5;
$itemPerPage = 1*5;
return $product->reviews()->where('status',1)->paginate($itemPerPage);
}
}

View File

@ -1,8 +1,10 @@
<?php
<?php
namespace Webkul\Product\Repositories;
use Illuminate\Container\Container as App;
use Webkul\Core\Eloquent\Repository;
use Webkul\Product\Repositories\ProductRepository;
/**
* Product Review Reposotory
@ -11,7 +13,29 @@ use Webkul\Core\Eloquent\Repository;
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class ProductReviewRepository extends Repository
{
{
/**
* ProductImageRepository object
*
* @var array
*/
protected $product;
/**
* Create a new controller instance.
*
* @param Webkul\Product\Repositories\ProductRepository $product
* @return void
*/
public function __construct(
ProductRepository $product,
App $app)
{
$this->product = $product;
parent::__construct($app);
}
/**
* Specify Model class name
*
@ -21,4 +45,16 @@ class ProductReviewRepository extends Repository
{
return 'Webkul\Product\Models\ProductReview';
}
/**
* Retrieve review for customerId
*
* @param int $customerId
*/
function getCustomerReview($customerId)
{
$reviews = $this->model->where('customer_id',$customerId)->with('product')->get();
return $reviews;
}
}

View File

@ -52,6 +52,8 @@ class ProductController extends Controller
{
$product = $this->product->findBySlugOrFail($slug);
return view($this->_config['view'], compact('product'));
$customer = auth()->guard('customer')->user();
return view($this->_config['view'], compact('product','customer'));
}
}

View File

@ -94,7 +94,7 @@ class ReviewController extends Controller
$customer_id = auth()->guard('customer')->user()->id;
$data['status']=0;
$data['status']='pending';
$data['product_id']=$id;
$data['customer_id']=$customer_id;

View File

@ -51,12 +51,12 @@ Route::group(['middleware' => ['web']], function () {
])->name('shop.reviews.create');
Route::post('/product/{slug}/review', 'Webkul\Shop\Http\Controllers\ReviewController@store')->defaults('_config', [
'redirect' => 'shop.reviews.index'
'redirect' => 'customer.reviews.index'
])->name('shop.reviews.store');
Route::post('/reviews/create/{slug}', 'Webkul\Shop\Http\Controllers\ReviewController@store')->defaults('_config', [
'redirect' => 'admin.reviews.index'
])->name('admin.reviews.store');
// Route::post('/reviews/create/{slug}', 'Webkul\Shop\Http\Controllers\ReviewController@store')->defaults('_config', [
// 'redirect' => 'admin.reviews.index'
// ])->name('admin.reviews.store');
//customer routes starts here

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 50 (54983) - http://www.bohemiancoding.com/sketch -->
<title>icon-filter</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="icon-filter" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M7.49822126,6.5 L7.49822126,9.98513267 L15.5,16.270847 L15.5,23.4152305 L16.5,22.8438019 L16.5,16.2644683 L24.5100795,10.0607155 L24.5100795,6.5 L7.49822126,6.5 Z" id="Path-2" stroke="#242424" stroke-width="3"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 690 B

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 50 (54983) - http://www.bohemiancoding.com/sketch -->
<title>icon-sort</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="icon-sort" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Group" transform="translate(5.000000, 6.000000)" fill="#242424">
<polygon id="Path-8" points="13 0 16 0 16 13 19.689148 9.24692068 21.3605633 11.9273017 13 20.3403711"></polygon>
<polygon id="Path-8-Copy" points="9 20 6 20 6 7.34037112 2.67141528 11.0934504 0.660888672 9.02355957 9 0"></polygon>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 800 B

File diff suppressed because it is too large Load Diff

View File

@ -29,4 +29,28 @@
background-image:URL('../images/icon-list-view.svg');
width: 24px;
height: 24px;
}
.sort-icon {
background-image:URL('../images/icon-sort.svg');
width: 24px;
height: 24px;
}
.filter-icon {
background-image:URL('../images/icon-filter.svg');
width: 24px;
height: 24px;
}
.whishlist-icon {
background-image:URL('../images/wishlist.svg');
width: 24px;
height: 24px;
}
.share-icon {
background-image:URL('../images/icon-share.svg');
width: 24px;
height: 24px;
}

View File

@ -1 +1,44 @@
<h1>Customer Reviews page</h1>
@inject ('productImageHelper', 'Webkul\Product\Product\ProductImage')
@extends('shop::layouts.master')
@section('content-wrapper')
<div class="account-content">
@include('shop::customers.account.partials.sidemenu')
<div class="cusomer-section">
<h1> Reviews</h1>
@foreach($reviews as $review)
<div class="customer-section-info">
<?php $images = $productImageHelper->getGalleryImages($review->product); ?>
<div class="pro-img">
<img src="{{ $images[0]['small_image_url'] }}" />
</div>
<div class="pro-discription">
<div class="title">
{{ $review->product->name }}
</div>
<div class="rating">
@for($i=0 ; $i < $review->rating ; $i++)
<span class="icon star-icon"></span>
@endfor
</div>
<div class="discription">
{{ $review->comment }}
</div>
</div>
</div>
@endforeach
</div>
</div>
@endsection

View File

@ -147,14 +147,8 @@
</div>
</div>
<div class="header-bottom">
<div class="header-bottom" id="header-bottom">
@include('shop::layouts.header.nav-menu.navmenu')
</div>
</div>
@push('scripts')
<script>
</script>
@endpush

View File

@ -1 +1 @@
<button class="btn btn-lg btn-primary addtocart">Add to Cart</button>
<button class="btn btn-lg btn-primary addtocart">ADD TO CART</button>

View File

@ -0,0 +1 @@
<button class="btn btn-lg btn-primary buynow">BUY NOW!</button>

View File

@ -44,4 +44,90 @@
</div>
@stop
@stop
@push('scripts')
<script>
window.onload = function() {
var sort = document.getElementById("sort");
var filter = document.getElementById("filter");
sort.addEventListener("click", myFunction);
filter.addEventListener("click", myFunction);
function myFunction(){
let className = document.getElementById(this.id).className;
var productGrid = document.getElementsByClassName('product-grid max-3-col');
var filterLayered = document.getElementsByClassName('layered-filter-wrapper');
var sortLimiter = document.getElementsByClassName('reponsive-sorter-limiter');
if(className === 'icon filter-icon'){
for(let i=0 ; i < filterLayered.length ; i++){
filterLayered[i].style.display="block";
filterLayered[i].style.padding="20px";
filterLayered[i].style.width="100%";
filterLayered[i].style.marginTop = "-100px";
}
for(let i=0 ; i < productGrid.length ; i++){
productGrid[i].style.display = "none";
}
for(let i=0 ; i < sortLimiter.length ; i++){
sortLimiter[i].style.display = "none";
}
filter.classList.remove('icon', 'filter-icon');
filter.classList.add('icon', 'cross-icon');
sort.classList.remove('icon', 'cross-icon');
sort.classList.remove('icon', 'sort-icon');
sort.classList.add('icon', 'sort-icon');
}else if(className === 'icon sort-icon'){
for(let i=0 ; i < filterLayered.length ; i++){
filterLayered[i].style.display="none";
}
for(let i=0 ; i < productGrid.length ; i++){
productGrid[i].style.display = "none";
}
for(let i=0 ; i < sortLimiter.length ; i++){
sortLimiter[i].style.display = "flex";
sortLimiter[i].style.justifyContent = "space-between";
}
sort.classList.remove('icon', 'sort-icon');
sort.classList.add('icon', 'cross-icon');
filter.classList.remove('icon', 'cross-icon');
filter.classList.remove('icon', 'filter-icon');
filter.classList.add('icon', 'filter-icon');
}else {
for(let i=0 ; i < productGrid.length ; i++){
productGrid[i].style.display = "grid";
}
for(let i=0 ; i < filterLayered.length ; i++){
filterLayered[i].style.display="none";
}
for(let i=0 ; i < sortLimiter.length ; i++){
sortLimiter[i].style.display = "none";
}
sort.classList.remove('icon', 'cross-icon');
filter.classList.remove('icon', 'cross-icon');
sort.classList.remove('icon', 'sort-icon');
filter.classList.remove('icon', 'filter-icon');
sort.classList.add('icon', 'sort-icon');
filter.classList.add('icon', 'filter-icon');
}
}
}
</script>
@endpush

View File

@ -11,9 +11,9 @@
</div>
<div class="product-information">
<div class="product-name">
{{ $product->id }}
<a href="" title="{{ $product->name }}">
@ -24,13 +24,13 @@
<div class="product-description">
{{ $product->short_description }}
</div>
@include ('shop::products.price', ['product' => $product])
@include ('shop::products.review', ['product' => $product])
@include ('shop::products.add-to', ['product' => $product])
</div>
</div>

View File

@ -3,13 +3,13 @@
<div class="layered-filter-wrapper">
<layered-navigation></layered-navigation>
</div>
@push('scripts')
<script type="text/x-template" id="layered-navigation-template">
<div>
<div class="filter-title">
{{ __('shop::app.products.layered-nav-title') }}
</div>
@ -17,7 +17,7 @@
<div class="filter-content">
<div class="filter-attributes">
<filter-attribute-item v-for='(attribute, index) in attributes' :attribute="attribute" :key="index" :index="index" @onFilterAdded="addFilters(attribute.code, $event)" :appliedFilterValues="appliedFilters[attribute.code]">
</filter-attribute-item>
@ -58,7 +58,7 @@
</ol>
<div class="price-range-wrapper" v-if="attribute.type == 'price'">
<vue-slider
<vue-slider
ref="slider"
v-model="sliderConfig.value"
:process-style="sliderConfig.processStyle"
@ -86,9 +86,9 @@
created () {
var urlParams = new URLSearchParams(window.location.search);
var entries = urlParams.entries();
for(pair of entries) {
this.appliedFilters[pair[0]] = pair[1].split(',');
}
@ -99,7 +99,7 @@
if(filters.length) {
this.appliedFilters[attributeCode] = filters;
} else {
delete this.appliedFilters[attributeCode];
delete this.appliedFilters[attributeCode];
}
this.applyFilter()
@ -107,7 +107,7 @@
applyFilter () {
var params = [];
for(key in this.appliedFilters) {
params.push(key + '=' + this.appliedFilters[key].join(','))
}

View File

@ -3,11 +3,15 @@
<div class="top-toolbar">
<div class="page-info">
{{ __('shop::app.products.pager-info', ['showing' => $products->firstItem() . '-' . $products->lastItem(), 'total' => $products->total()]) }}
<span>
{{ __('shop::app.products.pager-info', ['showing' => $products->firstItem() . '-' . $products->lastItem(), 'total' => $products->total()]) }}
</span>
<span>Men</span>
</div>
<div class="pager">
<div class="view-mode">
@if ($toolbarHelper->isModeActive('grid'))
<span class="grid-view">
@ -28,6 +32,15 @@
<i class="icon list-view-icon"></i>
</a>
@endif
<div class="sort-filter">
<i class="icon sort-icon" id="sort" ></i>
<i class="icon filter-icon" id="filter"></i>
</div>
</div>
<div class="sorter">
@ -61,7 +74,44 @@
</select>
</div>
</div>
</div>
<div class="reponsive-sorter-limiter">
<div class="sorter">
<label>{{ __('shop::app.products.sort-by') }}</label>
<select onchange="window.location.href = this.value">
@foreach ($toolbarHelper->getAvailableOrders() as $key => $order)
<option value="{{ $toolbarHelper->getOrderUrl($key) }}" {{ $toolbarHelper->isOrderCurrent($key) ? 'selected' : '' }}>
{{ __('shop::app.products.' . $order) }}
</option>
@endforeach
</select>
</div>
<div class="limiter">
<label>{{ __('shop::app.products.show') }}</label>
<select onchange="window.location.href = this.value">
@foreach ($toolbarHelper->getAvailableLimits() as $limit)
<option value="{{ $toolbarHelper->getLimitUrl($limit) }}" {{ $toolbarHelper->isLimitCurrent($limit) ? 'selected' : '' }}>
{{ $limit }}
</option>
@endforeach
</select>
</div>
</div>

View File

@ -3,10 +3,10 @@
@inject ('priceHelper', 'Webkul\Product\Product\Price')
@if ($product->type == 'configurable')
<span class="price-label">{{ __('shop::app.products.price-label') }}</span>
<span class="final-price">{{ core()->currency($priceHelper->getMinimalPrice($product)) }}</span>
<span class="final-price">{{ core()->currency($priceHelper->getMinimalPrice($product)) }}</span>
@else
@ -18,7 +18,7 @@
@else
<span>{{ core()->currency($product->price) }}</span>
<span>{{ core()->currency($product->price) }}</span>
@endif

View File

@ -0,0 +1,7 @@
<div class="cart-fav-seg">
@include ('shop::products.add-to-cart', ['product' => $product])
@include ('shop::products.buy-now')
</div>

View File

@ -0,0 +1,4 @@
<div class="icon share-icon">
<a href="#"></a>
</div>

View File

@ -24,7 +24,7 @@
<span>{{ $product->name }}</span>
</div>
@include ('shop::products.review', ['product' => $product])
{{-- @include ('shop::products.review', ['product' => $product]) --}}
@include ('shop::products.price', ['product' => $product])
@ -76,3 +76,44 @@
</section>
@endsection
<style>
.header {
position: sticky;
top: 16px;
}
</style>
@push('scripts')
<script>
window.onscroll = function() {scrollFunction()};
function scrollFunction() {
var scrollTop = window.pageYOffset
var elems = document.getElementById("header-bottom");
if(scrollTop > 200){
elems.style.display = "none";
}else {
elems.style.display = "block";
}
console.log(scrollTop);
}
</script>
@endpush

View File

@ -30,7 +30,7 @@
<select v-validate="'required'" class="control" :name="['super_attribute[' + attribute.id + ']']" :disabled="attribute.disabled" @change="configure(attribute, $event.target.value)" :id="['attribute_' + attribute.id]">
<option v-for='(option, index) in attribute.options' :value="option.id">@{{ option.label }}</option>
</select>
<span class="control-error" v-if="errors.has('super_attribute[' + attribute.id + ']')">
@ -41,17 +41,17 @@
</div>
</script>
<?php $config = $configurableOptionHelper->getConfigurationConfig($product) ?>
{{-- <?php $config = $configurableOptionHelper->getConfigurationConfig($product) ?> --}}
<script>
Vue.component('product-options', {
template: '#product-options-template',
data: () => ({
config: @json($config),
childAttributes: [],
selectedProductId: '',
@ -207,7 +207,7 @@
element.selectedIndex = "0";
}
},
getAttributeOptions (attributeId) {
var this_this = this,
options;
@ -215,7 +215,7 @@
this.config.attributes.forEach(function(attribute, index) {
if (attribute.id == attributeId) {
options = attribute.options;
}
}
})
return options;

View File

@ -5,7 +5,7 @@
<div class="product-image-group">
<product-gallery></product-gallery>
@include ('shop::products.add-to')
@include ('shop::products.product-add')
</div>
@push('scripts')
@ -32,8 +32,13 @@
<img :src="currentLargeImageUrl" />
<div class="icon whishlist-icon"> </div>
@include ('shop::products.sharelinks')
</div>
</div>
</script>

View File

@ -1,5 +1,4 @@
@inject ('reviewHelper', 'Webkul\Product\Product\Review')
@if ($total = $reviewHelper->getTotalReviews($product))
<div class="rating-reviews">
<div class="rating-header">
@ -17,7 +16,7 @@
@for ($i = 1; $i <= round($reviewHelper->getAverageRating($product)); $i++)
<span class="icon star-icon"></span>
@endfor
</span>
@ -27,15 +26,17 @@
</div>
@if(!is_null($customer))
<a href="{{ route('shop.reviews.create', $product->url_key) }}" class="btn btn-lg btn-primary">
{{ __('shop::app.products.write-review-btn') }}
</a>
@endif
</div>
<div class="reviews">
@foreach ($reviewHelper->getReviews($product)->paginate(5) as $review)
@foreach ($reviewHelper->getReviews($product)->paginate(10) as $review)
<div class="review">
<div class="title">
{{ $review->title }}
@ -45,7 +46,7 @@
@for ($i = 1; $i <= $review->rating; $i++)
<span class="icon star-icon"></span>
@endfor
</span>
@ -55,7 +56,7 @@
<div class="reviewer-details">
<span class="by">
{{ __('shop::app.products.by', ['name' => $review->customer->name]) }},
{{ __('shop::app.products.by', ['name' => $review->customer->name]) }},
</span>
<span class="when">

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 50 (54983) - http://www.bohemiancoding.com/sketch -->
<title>icon-filter</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="icon-filter" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M7.49822126,6.5 L7.49822126,9.98513267 L15.5,16.270847 L15.5,23.4152305 L16.5,22.8438019 L16.5,16.2644683 L24.5100795,10.0607155 L24.5100795,6.5 L7.49822126,6.5 Z" id="Path-2" stroke="#242424" stroke-width="3"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 690 B

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 50 (54983) - http://www.bohemiancoding.com/sketch -->
<title>icon-sort</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="icon-sort" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Group" transform="translate(5.000000, 6.000000)" fill="#242424">
<polygon id="Path-8" points="13 0 16 0 16 13 19.689148 9.24692068 21.3605633 11.9273017 13 20.3403711"></polygon>
<polygon id="Path-8-Copy" points="9 20 6 20 6 7.34037112 2.67141528 11.0934504 0.660888672 9.02355957 9 0"></polygon>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 800 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/js/shop.js": "/js/shop.js",
"/css/shop.css": "/css/shop.css"
}
}