Base sync

This commit is contained in:
Prashant Singh 2019-08-06 14:37:03 +05:30
commit 6a8bb7982d
44 changed files with 688 additions and 373 deletions

View File

@ -10,15 +10,15 @@
<a href="#sponsors"><img src="https://opencollective.com/bagisto/sponsors/badge.svg" alt="Sponsors on Open Collective"></a>
</p>
# Topics
1. ### [Introduction](#1-introduction-)
2. ### [Documentation](#2-documentation-)
3. ### [Requirements](#2-requirements-)
4. ### [Installation & Configuration](#3-installation--configuration-)
5. ### [License](#4-license-)
6. ### [Miscellaneous](#5-miscellaneous-)
## Topics
1. [Introduction](#introduction)
2. [Documentation](#documentation)
3. [Requirements](#requirements)
4. [Installation & Configuration](#installation-and-configuration)
5. [License](#license)
6. [Miscellaneous](#miscellaneous)
### 1. Introduction <a name="#1-introduction-"></a>:
### Introduction
[Bagisto](https://www.bagisto.com) is a hand tailored E-Commerce framework designed on some of the hottest opensource technologies
such as [Laravel](https://laravel.com) a [PHP](https://secure.php.net/) framework, [Vue.js](https://vuejs.org)
@ -54,11 +54,11 @@ It packs in lots of demanding features that allows your business to scale in no
Dev guys can take advantage of two of the hottest frameworks used in this project Laravel and Vue.js, both of these frameworks have been used in Bagisto.
Bagisto is using power of both of these frameworks and making best out of it out of the box.
### 2. Documentation <a name="#-documentation-"></a>:
### Documentation
#### Bagisto Documentation [https://devdocs.bagisto.com](https://devdocs.bagisto.com)
### 3. Requirements <a name="#requirements"></a>:
### Requirements
* **OS**: Ubuntu 16.04 LTS or higher.
* **SERVER**: Apache 2 or NGINX
@ -70,7 +70,7 @@ Bagisto is using power of both of these frameworks and making best out of it out
* **Node**: 8.11.3 LTS or higher.
* **Composer**: 1.6.5 or higher.
### 4. Installation & Configuration <a name="#configuration"></a>:
### Installation and Configuration
**1. Try our new GUI installer to install Bagisto:**
@ -172,36 +172,26 @@ password:admin123
> *http(s)://example.com/customer/register*
### 5. License <a name="#license"></a>:
### License
Bagisto is a truly opensource E-Commerce framework which will always be free under the [MIT License](https://github.com/bagisto/bagisto/blob/master/LICENSE).
### 6. Miscellaneous <a name="#miscellaneous"></a>:
### Miscellaneous
#### Contributors
This project exists thanks to all the people who contribute.
<a href="https://github.com/bagisto/bagisto/graphs/contributors"><img src="https://opencollective.com/bagisto/contributors.svg?width=890&button=false" /></a>
This project is on [Open Collective](https://opencollective.com/bagisto) and it exists thanks to this people who contribute.
<a href="https://github.com/bagisto/bagisto/graphs/contributors"><img src="https://opencollective.com/bagisto/contributors.svg?width=890&button=false"/></a>
#### Backers
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/bagisto#backer)]
<a href="https://opencollective.com/bagisto#backers" target="_blank"><img src="https://opencollective.com/bagisto/backers.svg?width=890"></a>
Thank you to all our backers! 🙏
<a href="https://opencollective.com/bagisto#contributors" target="_blank"><img src="https://opencollective.com/bagisto/backers.svg?width=890"></a>
#### Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/bagisto#sponsor)]
Support this project by becoming a sponsor. Your logo will show up here with a link to your website.
<a href="https://opencollective.com/bagisto/sponsor/0/website" target="_blank"><img src="https://opencollective.com/bagisto/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/bagisto/sponsor/1/website" target="_blank"><img src="https://opencollective.com/bagisto/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/bagisto/sponsor/2/website" target="_blank"><img src="https://opencollective.com/bagisto/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/bagisto/sponsor/3/website" target="_blank"><img src="https://opencollective.com/bagisto/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/bagisto/sponsor/4/website" target="_blank"><img src="https://opencollective.com/bagisto/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/bagisto/sponsor/5/website" target="_blank"><img src="https://opencollective.com/bagisto/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/bagisto/sponsor/6/website" target="_blank"><img src="https://opencollective.com/bagisto/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/bagisto/sponsor/7/website" target="_blank"><img src="https://opencollective.com/bagisto/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/bagisto/sponsor/8/website" target="_blank"><img src="https://opencollective.com/bagisto/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/bagisto/sponsor/9/website" target="_blank"><img src="https://opencollective.com/bagisto/sponsor/9/avatar.svg"></a>
<a href="https://opencollective.com/bagisto/contribute/sponsor-7372/checkout" target="_blank"><img src="https://images.opencollective.com/static/images/become_sponsor.svg"></a>

View File

@ -58,7 +58,7 @@ class CategoryDataGrid extends DataGrid
$this->addColumn([
'index' => 'position',
'label' => trans('admin::app.datagrid.position'),
'type' => 'string',
'type' => 'number',
'searchable' => false,
'sortable' => true,
'filterable' => true

View File

@ -38,7 +38,7 @@ class CustomerGroupDataGrid extends DataGrid
$this->addColumn([
'index' => 'code',
'label' => 'Code',
'type' => 'number',
'type' => 'string',
'searchable' => false,
'sortable' => true,
'filterable' => true

View File

@ -19,7 +19,7 @@ class LocalesDataGrid extends DataGrid
public function prepareQueryBuilder()
{
$queryBuilder = DB::table('locales')->addSelect('id', 'code', 'name');
$queryBuilder = DB::table('locales')->addSelect('id', 'code', 'name', 'direction');
$this->setQueryBuilder($queryBuilder);
}
@ -52,6 +52,15 @@ class LocalesDataGrid extends DataGrid
'sortable' => true,
'filterable' => true
]);
$this->addColumn([
'index' => 'direction',
'label' => trans('admin::app.datagrid.direction'),
'type' => 'string',
'searchable' => true,
'sortable' => true,
'filterable' => true
]);
}
public function prepareActions() {

View File

@ -115,6 +115,7 @@ return [
'code' => 'Code',
'admin-name' => 'Name',
'name' => 'Name',
'direction' => 'Direction',
'fullname' => 'Full Name',
'type' => 'Type',
'required' => 'Required',
@ -398,7 +399,8 @@ return [
'related-products' => 'Related Products',
'product-search-hint' => 'Start typing product name',
'no-result-found' => 'Products not found with same name.',
'searching' => 'Searching ...'
'searching' => 'Searching ...',
'channel' => 'Channels'
],
'attributes' => [
@ -449,7 +451,8 @@ return [
'swatch' => 'Swatch',
'image' => 'Image',
'file' => 'File',
'checkbox' => 'Checkbox'
'checkbox' => 'Checkbox',
'use_in_flat' => "Create in Product Flat Table",
],
'families' => [
'title' => 'Families',
@ -493,6 +496,8 @@ return [
'meta_description' => 'Meta Description',
'meta_keywords' => 'Meta Keywords',
'image' => 'Image',
'filterable-attributes' => 'Filterable Attributes',
'attributes' => 'Attributes',
]
],
@ -564,6 +569,7 @@ return [
'general' => 'General',
'code' => 'Code',
'name' => 'Name',
'direction' => 'Direction',
'create-success' => 'Locale created successfully.',
'update-success' => 'Locale updated successfully.',
'delete-success' => 'Locale deleted successfully.',

View File

@ -36,7 +36,7 @@
{!! view_render_event('bagisto.admin.catalog.attribute.create_form_accordian.general.controls.before') !!}
<div class="control-group" :class="[errors.has('code') ? 'has-error' : '']">
<label for="code">{{ __('admin::app.catalog.attributes.code') }}</label>
<label for="code" class="required">{{ __('admin::app.catalog.attributes.code') }}</label>
<input type="text" v-validate="'required'" class="control" id="code" name="code" value="{{ old('code') }}" data-vv-as="&quot;{{ __('admin::app.catalog.attributes.code') }}&quot;" v-code/>
<span class="control-error" v-if="errors.has('code')">@{{ errors.first('code') }}</span>
</div>
@ -205,6 +205,14 @@
</select>
</div>
<div class="control-group">
<label for="use_in_flat">{{ __('admin::app.catalog.attributes.use_in_flat') }}</label>
<select class="control" id="use_in_flat" name="use_in_flat">
<option value="0">{{ __('admin::app.catalog.attributes.no') }}</option>
<option value="1">{{ __('admin::app.catalog.attributes.yes') }}</option>
</select>
</div>
{!! view_render_event('bagisto.admin.catalog.attribute.create_form_accordian.configuration.controls.after') !!}
</div>

View File

@ -266,6 +266,18 @@
</select>
</div>
<div class="control-group">
<label for="use_in_flat">{{ __('admin::app.catalog.attributes.use_in_flat') }}</label>
<select class="control" id="use_in_flat" name="use_in_flat">
<option value="0" {{ $attribute->use_in_flat ? '' : 'selected' }}>
{{ __('admin::app.catalog.attributes.no') }}
</option>
<option value="1" {{ $attribute->use_in_flat ? 'selected' : '' }}>
{{ __('admin::app.catalog.attributes.yes') }}
</option>
</select>
</div>
{!! view_render_event('bagisto.admin.catalog.attribute.edit_form_accordian.configuration.controls.after', ['attribute' => $attribute]) !!}
</div>

View File

@ -136,6 +136,23 @@
@endif
<accordian :title="'{{ __('admin::app.catalog.categories.filterable-attributes') }}'" :active="true">
<div slot="body">
<div class="control-group" :class="[errors.has('attributes[]') ? 'has-error' : '']">
<label for="attributes" class="required">{{ __('admin::app.catalog.categories.attributes') }}</label>
<select class="control" name="attributes[]" v-validate="'required'" data-vv-as="&quot;{{ __('admin::app.catalog.categories.attributes') }}&quot;" multiple>
@foreach ($attributes as $attribute)
<option value="{{ $attribute->id }}">
{{ $attribute->name ? $attribute->name : $attribute->admin_name }}
</option>
@endforeach
</select>
<span class="control-error" v-if="errors.has('attributes[]')">
@{{ errors.first('attributes[]') }}
</span>
</div>
</div>
</accordian>
{!! view_render_event('bagisto.admin.catalog.category.create_form_accordian.seo.before') !!}

View File

@ -148,6 +148,23 @@
@endif
<accordian :title="'{{ __('admin::app.catalog.categories.filterable-attributes') }}'" :active="true">
<div slot="body">
<div class="control-group" :class="[errors.has('attributes[]') ? 'has-error' : '']">
<label for="attributes" class="required">{{ __('admin::app.catalog.categories.attributes') }}</label>
<select class="control" name="attributes[]" v-validate="'required'" data-vv-as="&quot;{{ __('admin::app.catalog.categories.attributes') }}&quot;" multiple>
@foreach ($attributes as $attribute)
<option value="{{ $attribute->id }}" {{ in_array($attribute->id, $category->filterableAttributes->pluck('id')->toArray()) ? 'selected' : ''}}>
{{ $attribute->name ? $attribute->name : $attribute->admin_name }}
</option>
@endforeach
</select>
<span class="control-error" v-if="errors.has('attributes[]')">
@{{ errors.first('attributes[]') }}
</span>
</div>
</div>
</accordian>
{!! view_render_event('bagisto.admin.catalog.category.edit_form_accordian.seo.before', ['category' => $category]) !!}

View File

@ -0,0 +1,18 @@
<accordian :title="'{{ __('admin::app.catalog.products.channel') }}'" :active="true">
<div slot="body">
<div class="control-group" :class="[errors.has('channels[]') ? 'has-error' : '']">
<label for="channels" class="required">{{ __('admin::app.catalog.products.channel') }}</label>
<select class="control" name="channels[]" v-validate="'required'" data-vv-as="&quot;{{ __('admin::app.catalog.products.channel') }}&quot;" multiple>
@foreach (app('Webkul\Core\Repositories\ChannelRepository')->all() as $channel)
<option value="{{ $channel->id }}">
{{ $channel->name }}
</option>
@endforeach
</select>
<span class="control-error" v-if="errors.has('channels[]')">
@{{ errors.first('channels[]') }}
</span>
</div>
</div>
</accordian>

View File

@ -150,6 +150,7 @@
@endforeach
@include ('admin::catalog.products.accordians.channels')
{!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.inventories.before', ['product' => $product]) !!}

View File

@ -61,7 +61,7 @@
}
if (! isset($field['options'])) {
$field['options'] = [['title' => 'No', 'value' => 0],['title' => 'Yes', 'value' => 1]];
$field['options'] = '';
}
$selectedOption = core()->getConfigData($name) ?? '';
@ -100,6 +100,7 @@
<input type="password" v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" value="{{ old($name) ?: core()->getConfigData($name) }}" data-vv-as="&quot;{{ trans($field['title']) }}&quot;">
@elseif ($field['type'] == 'textarea')
<textarea v-validate="'{{ $validations }}'" class="control" id="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" name="{{ $firstField }}[{{ $secondField }}][{{ $thirdField }}][{{ $field['name'] }}]" data-vv-as="&quot;{{ trans($field['title']) }}&quot;">{{ old($name) ?: core()->getConfigData($name) }}</textarea>
@ -399,11 +400,14 @@
<span class="locale"> [@{{ channel_locale }}] </span>
</label>
<select v-validate= "validations" class="control" :id = "name" :name = "name" v-model="this.result"
<select v-if="this.options.length" v-validate= "validations" class="control" :id = "name" :name = "name" v-model="this.result"
:data-vv-as="field_name">
<option v-for='(option, index) in this.options' :value="option.value"> @{{ option.title }} </option>
</select>
<input v-else type="text" class="control" v-validate= "validations" :id = "name" :name = "name" v-model="this.result"
:data-vv-as="field_name">
<span class="control-error" v-if="errors.has(name)">
@{{ errors.first(name) }}
</span>
@ -422,8 +426,8 @@
data: function() {
return {
isVisible: false,
isRequire: false,
isVisible: false,
}
},
@ -434,28 +438,40 @@
this_this.isRequire = true;
}
var dependentElement = document.getElementById(this_this.depend);
var dependValue = this_this.value;
$(document).ready(function(){
var dependentElement = document.getElementById(this_this.depend);
var dependValue = this_this.value;
if (dependValue == 'true') {
dependValue = 1;
} else if (dependValue == 'false') {
dependValue = 0;
}
if (dependValue == 'true') {
dependValue = 1;
} else if (dependValue == 'false') {
dependValue = 0;
}
$("select.control").change(function() {
if (dependentElement.value == dependValue) {
$(document).on("change", "select.control", function() {
if (this_this.depend == this.name) {
if (this_this.value == this.value) {
this_this.isVisible = true;
} else {
this_this.isVisible = false;
}
}
})
if (dependentElement && dependentElement.value == dependValue) {
this_this.isVisible = true;
} else {
this_this.isVisible = false;
}
});
if (dependentElement.value == dependValue) {
this_this.isVisible = true;
} else {
this_this.isVisible = false;
}
if (this_this.result) {
if (dependentElement.value == this_this.value) {
this_this.isVisible = true;
} else {
this_this.isVisible = false;
}
}
});
}
});
</script>

View File

@ -67,7 +67,7 @@
{!! view_render_event('bagisto.admin.layout.head') !!}
</head>
<body @if (app()->getLocale() == 'ar') class="rtl" @endif style="scroll-behavior: smooth;">
<body @if (core()->getCurrentLocale()->direction == 'rtl') class="rtl" @endif style="scroll-behavior: smooth;">
<div id="app" class="container">
<flash-wrapper ref='flashes'></flash-wrapper>
@ -131,4 +131,4 @@
<div class="modal-overlay"></div>
</body>
</html>
</html>

View File

@ -19,7 +19,7 @@
</head>
<body @if (app()->getLocale() == 'ar') class="rtl" @endif style="scroll-behavior: smooth;">
<body @if (core()->getCurrentLocale()->direction == 'rtl') class="rtl" @endif style="scroll-behavior: smooth;">
{!! view_render_event('bagisto.admin.layout.body.before') !!}
<div id="app">

View File

@ -41,6 +41,15 @@
<input v-validate="'required'" class="control" id="name" name="name" data-vv-as="&quot;{{ __('admin::app.settings.locales.name') }}&quot;"/>
<span class="control-error" v-if="errors.has('name')">@{{ errors.first('name') }}</span>
</div>
<div class="control-group" :class="[errors.has('direction') ? 'has-error' : '']">
<label for="direction" class="required">{{ __('admin::app.settings.locales.direction') }}</label>
<select v-validate="'required'" class="control" id="direction" name="direction" data-vv-as="&quot;{{ __('admin::app.settings.locales.direction') }}&quot;">
<option value="ltr" selected title="Text direction left to right">ltr</option>
<option value="rtl" title="Text direction right to left">rtl</option>
</select>
<span class="control-error" v-if="errors.has('direction')">@{{ errors.first('direction') }}</span>
</div>
</div>
</accordian>

View File

@ -44,6 +44,15 @@
<input v-validate="'required'" class="control" id="name" name="name" data-vv-as="&quot;{{ __('admin::app.settings.locales.name') }}&quot;" value="{{ old('name') ?: $locale->name }}"/>
<span class="control-error" v-if="errors.has('name')">@{{ errors.first('name') }}</span>
</div>
<div class="control-group" :class="[errors.has('direction') ? 'has-error' : '']">
<label for="direction" class="required">{{ __('admin::app.settings.locales.direction') }}</label>
<select v-validate="'required'" class="control" id="direction" name="direction" data-vv-as="&quot;{{ __('admin::app.settings.locales.direction') }}&quot;">
<option value="ltr" {{ old('direction') == 'ltr' ? 'selected' : '' }} title="Text direction left to right">ltr</option>
<option value="rtl" {{ old('direction') == 'rtl' ? 'selected' : '' }} title="Text direction right to left">rtl</option>
</select>
<span class="control-error" v-if="errors.has('direction')">@{{ errors.first('direction') }}</span>
</div>
</div>
</accordian>

View File

@ -27,7 +27,7 @@
<div class="form-container">
@csrf()
<div class="control-group" :class="[errors.has('title') ? 'has-error' : '']">
<label for="title">{{ __('admin::app.settings.sliders.title') }}</label>
<label for="title" class="required">{{ __('admin::app.settings.sliders.title') }}</label>
<input type="text" class="control" name="title" v-validate="'required'" data-vv-as="&quot;{{ __('admin::app.settings.sliders.title') }}&quot;">
<span class="control-error" v-if="errors.has('title')">@{{ errors.first('title') }}</span>
</div>

View File

@ -29,7 +29,7 @@
@csrf()
<div class="control-group" :class="[errors.has('title') ? 'has-error' : '']">
<label for="title">{{ __('admin::app.settings.sliders.title') }}</label>
<label for="title" class="required">{{ __('admin::app.settings.sliders.title') }}</label>
<input type="text" class="control" name="title" v-validate="'required'" data-vv-as="&quot;{{ __('admin::app.settings.sliders.title') }}&quot;" value="{{ $slider->title ?: old('title') }}">
<span class="control-error" v-if="errors.has('title')">@{{ errors.first('title') }}</span>
</div>

View File

@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddUseInFlatColumnInAttributesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('attributes', function (Blueprint $table) {
$table->boolean('use_in_flat')->default(1);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('attributes', function (Blueprint $table) {
//
});
}
}

View File

@ -16,30 +16,50 @@ class AttributeTableSeeder extends Seeder
$now = Carbon::now();
DB::table('attributes')->insert([
['id' => '1','code' => 'sku','admin_name' => 'SKU','type' => 'text','validation' => NULL,'position' => '1','is_required' => '1','is_unique' => '1','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '2','code' => 'name','admin_name' => 'Name','type' => 'text','validation' => NULL,'position' => '2','is_required' => '1','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '3','code' => 'url_key','admin_name' => 'URL Key','type' => 'text','validation' => NULL,'position' => '3','is_required' => '1','is_unique' => '1','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '4','code' => 'tax_category_id','admin_name' => 'Tax Category','type' => 'select','validation' => NULL,'position' => '4','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '5','code' => 'new','admin_name' => 'New','type' => 'boolean','validation' => NULL,'position' => '5','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '6','code' => 'featured','admin_name' => 'Featured','type' => 'boolean','validation' => NULL,'position' => '6','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '7','code' => 'visible_individually','admin_name' => 'Visible Individually','type' => 'boolean','validation' => NULL,'position' => '7','is_required' => '1','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '8','code' => 'status','admin_name' => 'Status','type' => 'boolean','validation' => NULL,'position' => '8','is_required' => '1','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '9','code' => 'short_description','admin_name' => 'Short Description','type' => 'textarea','validation' => NULL,'position' => '9','is_required' => '1','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '10','code' => 'description','admin_name' => 'Description','type' => 'textarea','validation' => NULL,'position' => '10','is_required' => '1','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '11','code' => 'price','admin_name' => 'Price','type' => 'price','validation' => 'decimal','position' => '11','is_required' => '1','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '1','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '12','code' => 'cost','admin_name' => 'Cost','type' => 'price','validation' => 'decimal','position' => '12','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '1','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '13','code' => 'special_price','admin_name' => 'Special Price','type' => 'price','validation' => 'decimal','position' => '13','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '14','code' => 'special_price_from','admin_name' => 'Special Price From','type' => 'date','validation' => NULL,'position' => '14','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '15','code' => 'special_price_to','admin_name' => 'Special Price To','type' => 'date','validation' => NULL,'position' => '15','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '16','code' => 'meta_title','admin_name' => 'Meta Title','type' => 'textarea','validation' => NULL,'position' => '16','is_required' => '0','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '17','code' => 'meta_keywords','admin_name' => 'Meta Keywords','type' => 'textarea','validation' => NULL,'position' => '17','is_required' => '0','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '18','code' => 'meta_description','admin_name' => 'Meta Description','type' => 'textarea','validation' => NULL,'position' => '18','is_required' => '0','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '1','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '19','code' => 'width','admin_name' => 'Width','type' => 'text','validation' => 'decimal','position' => '19','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '1','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '20','code' => 'height','admin_name' => 'Height','type' => 'text','validation' => 'decimal','position' => '20','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '1','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '21','code' => 'depth','admin_name' => 'Depth','type' => 'text','validation' => 'decimal','position' => '21','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '1','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '22','code' => 'weight','admin_name' => 'Weight','type' => 'text','validation' => 'decimal','position' => '22','is_required' => '1','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '23','code' => 'color','admin_name' => 'Color','type' => 'select','validation' => NULL,'position' => '23','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '1','is_configurable' => '1','is_user_defined' => '1','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '24','code' => 'size','admin_name' => 'Size','type' => 'select','validation' => NULL,'position' => '24','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '1','is_configurable' => '1','is_user_defined' => '1','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now]
['id' => '1','code' => 'sku','admin_name' => 'SKU','type' => 'text','validation' => NULL,'position' => '1','is_required' => '1','is_unique' => '1','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '2','code' => 'name','admin_name' => 'Name','type' => 'text','validation' => NULL,'position' => '2','is_required' => '1','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '3','code' => 'url_key','admin_name' => 'URL Key','type' => 'text','validation' => NULL,'position' => '3','is_required' => '1','is_unique' => '1','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '4','code' => 'tax_category_id','admin_name' => 'Tax Category','type' => 'select','validation' => NULL,'position' => '4','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '5','code' => 'new','admin_name' => 'New','type' => 'boolean','validation' => NULL,'position' => '5','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '6','code' => 'featured','admin_name' => 'Featured','type' => 'boolean','validation' => NULL,'position' => '6','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '7','code' => 'visible_individually','admin_name' => 'Visible Individually','type' => 'boolean','validation' => NULL,'position' => '7','is_required' => '1','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','created_at' => $now,
'use_in_flat' => '1','updated_at' => $now],
['id' => '8','code' => 'status','admin_name' => 'Status','type' => 'boolean','validation' => NULL,'position' => '8','is_required' => '1','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '9','code' => 'short_description','admin_name' => 'Short Description','type' => 'textarea','validation' => NULL,'position' => '9','is_required' => '1','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0',
'is_visible_on_front' => '0','use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '10','code' => 'description','admin_name' => 'Description','type' => 'textarea','validation' => NULL,'position' => '10','is_required' => '1','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '11','code' => 'price','admin_name' => 'Price','type' => 'price','validation' => 'decimal','position' => '11','is_required' => '1','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '1','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '12','code' => 'cost','admin_name' => 'Cost','type' => 'price','validation' => 'decimal','position' => '12','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '1','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '13','code' => 'special_price','admin_name' => 'Special Price','type' => 'price','validation' => 'decimal','position' => '13','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '14','code' => 'special_price_from','admin_name' => 'Special Price From','type' => 'date','validation' => NULL,'position' => '14','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0','use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '15','code' => 'special_price_to','admin_name' => 'Special Price To','type' => 'date','validation' => NULL,'position' => '15','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0',
'use_in_flat' => '1','is_visible_on_front' => '0','created_at' => $now,'updated_at' => $now],
['id' => '16','code' => 'meta_title','admin_name' => 'Meta Title','type' => 'textarea','validation' => NULL,'position' => '16','is_required' => '0','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '17','code' => 'meta_keywords','admin_name' => 'Meta Keywords','type' => 'textarea','validation' => NULL,'position' => '17','is_required' => '0','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '18','code' => 'meta_description','admin_name' => 'Meta Description','type' => 'textarea','validation' => NULL,'position' => '18','is_required' => '0','is_unique' => '0','value_per_locale' => '1','value_per_channel' => '1','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '1','is_visible_on_front' => '0','use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '19','code' => 'width','admin_name' => 'Width','type' => 'text','validation' => 'decimal','position' => '19','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '1','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '20','code' => 'height','admin_name' => 'Height','type' => 'text','validation' => 'decimal','position' => '20','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '1','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '21','code' => 'depth','admin_name' => 'Depth','type' => 'text','validation' => 'decimal','position' => '21','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '1','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '22','code' => 'weight','admin_name' => 'Weight','type' => 'text','validation' => 'decimal','position' => '22','is_required' => '1','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '0','is_configurable' => '0','is_user_defined' => '0','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '23','code' => 'color','admin_name' => 'Color','type' => 'select','validation' => NULL,'position' => '23','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '1','is_configurable' => '1','is_user_defined' => '1','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now],
['id' => '24','code' => 'size','admin_name' => 'Size','type' => 'select','validation' => NULL,'position' => '24','is_required' => '0','is_unique' => '0','value_per_locale' => '0','value_per_channel' => '0','is_filterable' => '1','is_configurable' => '1','is_user_defined' => '1','is_visible_on_front' => '0',
'use_in_flat' => '1','created_at' => $now,'updated_at' => $now]
]);

View File

@ -9,7 +9,7 @@ class Attribute extends TranslatableModel implements AttributeContract
{
public $translatedAttributes = ['name'];
protected $fillable = ['code', 'admin_name', 'type', 'position', 'is_required', 'is_unique', 'validation', 'value_per_locale', 'value_per_channel', 'is_filterable', 'is_configurable', 'is_visible_on_front', 'is_user_defined', 'swatch_type'];
protected $fillable = ['code', 'admin_name', 'type', 'position', 'is_required', 'is_unique', 'validation', 'value_per_locale', 'value_per_channel', 'is_filterable', 'is_configurable', 'is_visible_on_front', 'is_user_defined', 'swatch_type', 'use_in_flat'];
// protected $with = ['options'];

View File

@ -0,0 +1,33 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCategoryFilterableAttributesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('category_filterable_attributes', function (Blueprint $table) {
$table->integer('category_id')->unsigned();
$table->integer('attribute_id')->unsigned();
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
$table->foreign('attribute_id')->references('id')->on('attributes')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('category_filterable_attributes');
}
}

View File

@ -5,6 +5,7 @@ namespace Webkul\Category\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Webkul\Category\Repositories\CategoryRepository as Category;
use Webkul\Attribute\Repositories\AttributeRepository as Attribute;
use Webkul\Category\Models\CategoryTranslation;
use Illuminate\Support\Facades\Event;
@ -30,16 +31,26 @@ class CategoryController extends Controller
*/
protected $category;
/**
* AttributeRepository object
*
* @var array
*/
protected $attribute;
/**
* Create a new controller instance.
*
* @param \Webkul\Category\Repositories\CategoryRepository $category
* @param \Webkul\Category\Repositories\CategoryRepository $category
* @param use Webkul\Attribute\Repositories\AttributeRepository $attribute
* @return void
*/
public function __construct(Category $category)
public function __construct(Category $category, Attribute $attribute)
{
$this->category = $category;
$this->attribute = $attribute;
$this->_config = request('_config');
}
@ -62,7 +73,9 @@ class CategoryController extends Controller
{
$categories = $this->category->getCategoryTree(null, ['id']);
return view($this->_config['view'], compact('categories'));
$attributes = $this->attribute->findWhere(['is_filterable' => 1]);
return view($this->_config['view'], compact('categories', 'attributes'));
}
/**
@ -110,7 +123,9 @@ class CategoryController extends Controller
$category = $this->category->findOrFail($id);
return view($this->_config['view'], compact('category', 'categories'));
$attributes = $this->attribute->findWhere(['is_filterable' => 1]);
return view($this->_config['view'], compact('category', 'categories', 'attributes'));
}
/**

View File

@ -6,6 +6,7 @@ use Webkul\Core\Eloquent\TranslatableModel;
use Kalnoy\Nestedset\NodeTrait;
use Illuminate\Support\Facades\Storage;
use Webkul\Category\Contracts\Category as CategoryContract;
use Webkul\Attribute\Models\AttributeProxy;
class Category extends TranslatableModel implements CategoryContract
{
@ -35,4 +36,12 @@ class Category extends TranslatableModel implements CategoryContract
{
return $this->image_url();
}
/**
* The filterable attributes that belong to the category.
*/
public function filterableAttributes()
{
return $this->belongsToMany(AttributeProxy::modelClass(), 'category_filterable_attributes')->with('options');
}
}

View File

@ -63,6 +63,10 @@ class CategoryRepository extends Repository
$this->uploadImages($data, $category);
if (isset($data['attributes'])) {
$category->filterableAttributes()->sync($data['attributes']);
}
Event::fire('catalog.category.create.after', $category);
return $category;
@ -163,6 +167,10 @@ class CategoryRepository extends Repository
$this->uploadImages($data, $category);
if (isset($data['attributes'])) {
$category->filterableAttributes()->sync($data['attributes']);
}
Event::fire('catalog.category.update.after', $id);
return $category;

View File

@ -936,27 +936,35 @@ class Cart {
'country' => $shippingAddress->country,
])->orderBy('tax_rate', 'desc')->get();
foreach ($taxRates as $rate) {
$haveTaxRate = false;
if (count( $taxRates) > 0) {
foreach ($taxRates as $rate) {
$haveTaxRate = false;
if (! $rate->is_zip) {
if ($rate->zip_code == '*' || $rate->zip_code == $shippingAddress->postcode) {
$haveTaxRate = true;
if (! $rate->is_zip) {
if ($rate->zip_code == '*' || $rate->zip_code == $shippingAddress->postcode) {
$haveTaxRate = true;
}
} else {
if ($shippingAddress->postcode >= $rate->zip_from && $shippingAddress->postcode <= $rate->zip_to) {
$haveTaxRate = true;
}
}
} else {
if ($shippingAddress->postcode >= $rate->zip_from && $shippingAddress->postcode <= $rate->zip_to) {
$haveTaxRate = true;
if ($haveTaxRate) {
$item->tax_percent = $rate->tax_rate;
$item->tax_amount = ($item->total * $rate->tax_rate) / 100;
$item->base_tax_amount = ($item->base_total * $rate->tax_rate) / 100;
$item->save();
break;
}
}
} else {
$item->tax_percent = 0;
$item->tax_amount = 0;
$item->base_tax_amount = 0;
if ($haveTaxRate) {
$item->tax_percent = $rate->tax_rate;
$item->tax_amount = ($item->total * $rate->tax_rate) / 100;
$item->base_tax_amount = ($item->base_total * $rate->tax_rate) / 100;
$item->save();
break;
}
$item->save();
}
}
}

View File

@ -0,0 +1,30 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AlterLocalesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('locales', function (Blueprint $table) {
$table->enum('direction', ['ltr', 'rtl'])->default('ltr');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
}

View File

@ -72,7 +72,8 @@ class LocaleController extends Controller
{
$this->validate(request(), [
'code' => ['required', 'unique:locales,code', new \Webkul\Core\Contracts\Validations\Code],
'name' => 'required'
'name' => 'required',
'direction' => 'in:ltr,rtl'
]);
Event::fire('core.locale.create.before');
@ -110,7 +111,8 @@ class LocaleController extends Controller
{
$this->validate(request(), [
'code' => ['required', 'unique:locales,code,' . $id, new \Webkul\Core\Contracts\Validations\Code],
'name' => 'required'
'name' => 'required',
'direction' => 'in:ltr,rtl'
]);
Event::fire('core.locale.update.before', $id);

View File

@ -13,6 +13,6 @@ class Locale extends Model implements LocaleContract
* @var array
*/
protected $fillable = [
'code', 'name'
'code', 'name', 'direction'
];
}
}

View File

@ -52,25 +52,31 @@ class ForgotPasswordController extends Controller
*/
public function store()
{
$this->validate(request(), [
'email' => 'required|email'
]);
try {
$this->validate(request(), [
'email' => 'required|email'
]);
$response = $this->broker()->sendResetLink(
request(['email'])
);
//dd($response);
if ($response == Password::RESET_LINK_SENT) {
session()->flash('success', trans($response));
return back();
}
return back()
->withInput(request(['email']))
->withErrors(
['email' => trans($response)]
$response = $this->broker()->sendResetLink(
request(['email'])
);
if ($response == Password::RESET_LINK_SENT) {
session()->flash('success', trans($response));
return back();
}
return back()
->withInput(request(['email']))
->withErrors(
['email' => trans($response)]
);
} catch (\Exception $e) {
session()->flash('error', trans($e->getMessage()));
return redirect()->back();
}
}
/**

View File

@ -38,7 +38,7 @@ class SessionController extends Controller
public function show()
{
if (auth()->guard('customer')->check()) {
return redirect()->route('customer.session.index');
return redirect()->route('customer.profile.index');
} else {
return view($this->_config['view']);
}

View File

@ -191,6 +191,8 @@ class ConvertXToProductId
/**
* This method will return product id from the attribute and attribute option params
*
* @param Collection $categories
*
* @return array
*/
public function convertFromCategories($categories)
@ -238,6 +240,10 @@ class ConvertXToProductId
/**
* This method will save the product ids in the datastore
*
* @param integer $ruleId
*
* @param array $productIDs
*
* @return boolean
*/
public function saveIDs($ruleId, $productIDs)
@ -252,12 +258,16 @@ class ConvertXToProductId
}
/**
* To get all product ids lying in the criteria
*
* @param integer $categoryId
*
* @return Collection
*/
public function getAll($categoryId = null)
{
$results = app('Webkul\Product\Repositories\ProductFlatRepository')->scopeQuery(function($query) use($categoryId) {
$results = app('Webkul\Product\Repositories\ProductFlatRepository')->scopeQuery(function($query) use ($categoryId) {
$channel = request()->get('channel') ?: (core()->getCurrentChannelCode() ?: core()->getDefaultChannelCode());
@ -267,6 +277,7 @@ class ConvertXToProductId
->select('products.id')
->leftJoin('products', 'product_flat.product_id', '=', 'products.id')
->leftJoin('product_categories', 'products.id', '=', 'product_categories.product_id')
->where('products.type', '!=', 'configurable')
->whereNotNull('product_flat.url_key');
if ($categoryId) {

View File

@ -158,6 +158,13 @@ abstract class Discount
return $sortedRules;
}
/**
* To check where rule ends other rules
*
* @param CartRule $rule
*
* @return $rule
*/
public function isEndRule($rule)
{
if ($rules->end_other_rules) {
@ -170,6 +177,8 @@ abstract class Discount
/**
* To find whether rule can be applied or not
*
* @param CartRule $rule
*
* @return boolean
*/
public function canApply($rule)
@ -257,7 +266,9 @@ abstract class Discount
/**
* Return the instance of the related rule's action type
*
* @return object
* @param CartRule $rule
*
* @return Object
*/
public function getActionInstance($rule)
{
@ -269,7 +280,9 @@ abstract class Discount
/**
* Checks whether rules is getting applied on current cart instance or not
*
* @return boolean
* @param CartRule $rule
*
* @return Boolean
*/
public function checkApplicability($rule)
{
@ -354,7 +367,7 @@ abstract class Discount
*
* @param CartRule $rule
*
* @return boolean
* @return Boolean
*/
public function save($rule)
{
@ -383,90 +396,42 @@ abstract class Discount
}
}
/**
* Checks whether rule is getting applied on shipping or not
*/
public function checkOnShipping($cart)
{
if (! isset($cart->selected_shipping_rate)) {
return false;
}
$shippingRate = config('carriers')[$cart->selected_shipping_rate->carrier]['class'];
$actualShippingRate = new $shippingRate;
$actualShippingRate = $actualShippingRate->calculate();
if (is_array($actualShippingRate)) {
foreach ($actualShippingRate as $actualRate) {
if ($actualRate->method == $cart->selected_shipping_rate->method) {
$actualShippingRate = $actualRate;
break;
}
}
}
$actualShippingPrice = $actualShippingRate->price;
$actualShippingBasePrice = $actualShippingRate->base_price;
$alreadyAppliedCartRuleCart = $this->cartRuleCart->findWhere([
'cart_id' => $cart->id
]);
if (count($alreadyAppliedCartRuleCart)) {
$this->resetShipping($cart);
$alreadyAppliedRule = $alreadyAppliedCartRuleCart->first()->cart_rule;
$cartShippingRate = $cart->selected_shipping_rate;
if (isset($cartShippingRate)) {
if ($cartShippingRate->base_price < $actualShippingBasePrice) {
return false;
} else {
$this->applyOnShipping($alreadyAppliedRule, $cart);
}
} else {
$this->applyOnShipping($alreadyAppliedRule, $cart);
}
} else {
$this->resetShipping($cart);
}
}
/**
* Apply on shipping
*
* @param CartRule $apploedRule
*
* @param Cart $cart
*
* @return void
*/
public function applyOnShipping($appliedRule, $cart)
{
// $cart = \Cart::getCart();
$cart = \Cart::getCart();
// if (isset($cart->selected_shipping_rate)) {
// if ($appliedRule->free_shipping && $cart->selected_shipping_rate->base_price > 0) {
// $cart->selected_shipping_rate->update([
// 'price' => 0,
// 'base_price' => 0
// ]);
// } else if ($appliedRule->free_shipping == 0 && $appliedRule->apply_to_shipping && $cart->selected_shipping_rate->base_price > 0) {
// $actionType = config('discount-rules')[$appliedRule->action_type];
if (isset($cart->selected_shipping_rate)) {
if ($appliedRule->free_shipping && $cart->selected_shipping_rate->base_price > 0) {
$cart->selected_shipping_rate->update([
'price' => 0,
'base_price' => 0
]);
} else if ($appliedRule->free_shipping == 0 && $appliedRule->apply_to_shipping && $cart->selected_shipping_rate->base_price > 0) {
$actionType = config('discount-rules')[$appliedRule->action_type];
// if ($appliedRule->apply_to_shipping) {
// $actionInstance = new $actionType;
if ($appliedRule->apply_to_shipping) {
$actionInstance = new $actionType;
// $discountOnShipping = $actionInstance->calculateOnShipping($cart);
$discountOnShipping = $actionInstance->calculateOnShipping($cart);
// $discountOnShipping = ($discountOnShipping / 100) * $cart->selected_shipping_rate->base_price;
$discountOnShipping = ($discountOnShipping / 100) * $cart->selected_shipping_rate->base_price;
// $cart->selected_shipping_rate->update([
// 'price' => $cart->selected_shipping_rate->price - core()->convertPrice($discountOnShipping, $cart->cart_currency_code),
// 'base_price' => $cart->selected_shipping_rate->base_price - $discountOnShipping
// ]);
// }
// }
// }
$cart->selected_shipping_rate->update([
'price' => $cart->selected_shipping_rate->price - core()->convertPrice($discountOnShipping, $cart->cart_currency_code),
'base_price' => $cart->selected_shipping_rate->base_price - $discountOnShipping
]);
}
}
}
}
/**
@ -545,6 +510,10 @@ abstract class Discount
]);
}
if ($rule->free_shipping || $rule->apply_on_shipping) {
$this->applyOnShipping($rule);
}
Cart::collectTotals();
return true;

View File

@ -103,7 +103,12 @@ class ProductFlat
*/
public function afterAttributeCreatedUpdated($attribute)
{
if(! $attribute->is_user_defined || $attribute->is_visible_on_front) {
if (! $attribute->is_user_defined) {
return false;
}
if (! $attribute->use_in_flat) {
$this->afterAttributeDeleted($attribute->id);
return false;
}
@ -169,100 +174,125 @@ class ProductFlat
if ($parentProduct && ! array_key_exists($parentProduct->id, $superAttributes))
$superAttributes[$parentProduct->id] = $parentProduct->super_attributes()->pluck('code')->toArray();
foreach (core()->getAllChannels() as $channel) {
foreach ($channel->locales as $locale) {
$productFlat = $this->productFlatRepository->findOneWhere([
'product_id' => $product->id,
'channel' => $channel->code,
'locale' => $locale->code
]);
if (isset($product['channels'])) {
foreach ($product['channels'] as $channel) {
$channel = app('Webkul\Core\Repositories\ChannelRepository')->findOrFail($channel);
$channels[] = $channel['code'];
}
} else if (isset($parentProduct['channels'])){
foreach ($parentProduct['channels'] as $channel) {
$channel = app('Webkul\Core\Repositories\ChannelRepository')->findOrFail($channel);
$channels[] = $channel['code'];
}
} else {
$channels[] = core()->getDefaultChannelCode();
}
if (! $productFlat) {
$productFlat = $this->productFlatRepository->create([
foreach (core()->getAllChannels() as $channel) {
if (in_array($channel->code, $channels)) {
foreach ($channel->locales as $locale) {
$productFlat = $this->productFlatRepository->findOneWhere([
'product_id' => $product->id,
'channel' => $channel->code,
'locale' => $locale->code
]);
}
foreach ($familyAttributes[$product->attribute_family->id] as $attribute) {
if ($parentProduct && ! in_array($attribute->code, array_merge($superAttributes[$parentProduct->id], ['sku', 'name', 'price', 'weight', 'status'])))
continue;
if (in_array($attribute->code, ['tax_category_id']))
continue;
if (! Schema::hasColumn('product_flat', $attribute->code))
continue;
if ($attribute->value_per_channel) {
if ($attribute->value_per_locale) {
$productAttributeValue = $product->attribute_values()->where('channel', $channel->code)->where('locale', $locale->code)->where('attribute_id', $attribute->id)->first();
} else {
$productAttributeValue = $product->attribute_values()->where('channel', $channel->code)->where('attribute_id', $attribute->id)->first();
}
} else {
if ($attribute->value_per_locale) {
$productAttributeValue = $product->attribute_values()->where('locale', $locale->code)->where('attribute_id', $attribute->id)->first();
} else {
$productAttributeValue = $product->attribute_values()->where('attribute_id', $attribute->id)->first();
}
}
if ($product->type == 'configurable' && $attribute->code == 'price') {
$productFlat->{$attribute->code} = app('Webkul\Product\Helpers\Price')->getVariantMinPrice($product);
} else {
$productFlat->{$attribute->code} = $productAttributeValue[ProductAttributeValue::$attributeTypeFields[$attribute->type]];
}
if ($attribute->type == 'select') {
$attributeOption = $this->attributeOptionRepository->find($product->{$attribute->code});
if ($attributeOption) {
if ($attributeOptionTranslation = $attributeOption->translate($locale->code)) {
$productFlat->{$attribute->code . '_label'} = $attributeOptionTranslation->label;
} else {
$productFlat->{$attribute->code . '_label'} = $attributeOption->admin_name;
}
}
} elseif ($attribute->type == 'multiselect') {
$attributeOptionIds = explode(',', $product->{$attribute->code});
if (count($attributeOptionIds)) {
$attributeOptions = $this->attributeOptionRepository->findWhereIn('id', $attributeOptionIds);
$optionLabels = [];
foreach ($attributeOptions as $attributeOption) {
if ($attributeOptionTranslation = $attributeOption->translate($locale->code)) {
$optionLabels[] = $attributeOptionTranslation->label;
} else {
$optionLabels[] = $attributeOption->admin_name;
}
}
$productFlat->{$attribute->code . '_label'} = implode(', ', $optionLabels);
}
}
}
$productFlat->created_at = $product->created_at;
$productFlat->updated_at = $product->updated_at;
if ($parentProduct) {
$parentProductFlat = $this->productFlatRepository->findOneWhere([
'product_id' => $parentProduct->id,
if (! $productFlat) {
$productFlat = $this->productFlatRepository->create([
'product_id' => $product->id,
'channel' => $channel->code,
'locale' => $locale->code
]);
if ($parentProductFlat) {
$productFlat->parent_id = $parentProductFlat->id;
}
}
$productFlat->save();
foreach ($familyAttributes[$product->attribute_family->id] as $attribute) {
if ($parentProduct && ! in_array($attribute->code, array_merge($superAttributes[$parentProduct->id], ['sku', 'name', 'price', 'weight', 'status'])))
continue;
if (in_array($attribute->code, ['tax_category_id']))
continue;
if (! Schema::hasColumn('product_flat', $attribute->code))
continue;
if ($attribute->value_per_channel) {
if ($attribute->value_per_locale) {
$productAttributeValue = $product->attribute_values()->where('channel', $channel->code)->where('locale', $locale->code)->where('attribute_id', $attribute->id)->first();
} else {
$productAttributeValue = $product->attribute_values()->where('channel', $channel->code)->where('attribute_id', $attribute->id)->first();
}
} else {
if ($attribute->value_per_locale) {
$productAttributeValue = $product->attribute_values()->where('locale', $locale->code)->where('attribute_id', $attribute->id)->first();
} else {
$productAttributeValue = $product->attribute_values()->where('attribute_id', $attribute->id)->first();
}
}
if ($product->type == 'configurable' && $attribute->code == 'price') {
$productFlat->{$attribute->code} = app('Webkul\Product\Helpers\Price')->getVariantMinPrice($product);
} else {
$productFlat->{$attribute->code} = $productAttributeValue[ProductAttributeValue::$attributeTypeFields[$attribute->type]];
}
if ($attribute->type == 'select') {
$attributeOption = $this->attributeOptionRepository->find($product->{$attribute->code});
if ($attributeOption) {
if ($attributeOptionTranslation = $attributeOption->translate($locale->code)) {
$productFlat->{$attribute->code . '_label'} = $attributeOptionTranslation->label;
} else {
$productFlat->{$attribute->code . '_label'} = $attributeOption->admin_name;
}
}
} elseif ($attribute->type == 'multiselect') {
$attributeOptionIds = explode(',', $product->{$attribute->code});
if (count($attributeOptionIds)) {
$attributeOptions = $this->attributeOptionRepository->findWhereIn('id', $attributeOptionIds);
$optionLabels = [];
foreach ($attributeOptions as $attributeOption) {
if ($attributeOptionTranslation = $attributeOption->translate($locale->code)) {
$optionLabels[] = $attributeOptionTranslation->label;
} else {
$optionLabels[] = $attributeOption->admin_name;
}
}
$productFlat->{$attribute->code . '_label'} = implode(', ', $optionLabels);
}
}
}
$productFlat->created_at = $product->created_at;
$productFlat->updated_at = $product->updated_at;
if ($parentProduct) {
$parentProductFlat = $this->productFlatRepository->findOneWhere([
'product_id' => $parentProduct->id,
'channel' => $channel->code,
'locale' => $locale->code
]);
if ($parentProductFlat) {
$productFlat->parent_id = $parentProductFlat->id;
}
}
$productFlat->save();
}
} else {
$productFlat = $this->productFlatRepository->findOneWhere([
'product_id' => $product->id,
'channel' => $channel->code,
]);
if ($productFlat) {
$this->productFlatRepository->delete($productFlat->id);
}
}
}
}

View File

@ -44,10 +44,12 @@ class ProductFlatRepository extends Repository
*/
public function getCategoryProductMaximumPrice($categoryId)
{
return $this->model
->leftJoin('product_categories', 'product_flat.product_id', 'product_categories.product_id')
->where('product_categories.category_id', $categoryId)
->max('price');
// return $this->model
// ->leftJoin('product_categories', 'product_flat.product_id', 'product_categories.product_id')
// ->where('product_categories.category_id', $categoryId)
// ->max('price');
return $this->model->max('price');
}
/**
@ -65,11 +67,26 @@ class ProductFlatRepository extends Repository
*
* return array
*/
public function getCategoryProduct($categoryId)
public function getCategoryProductAttribute($categoryId)
{
return $this->model
$qb = $this->model
->leftJoin('product_categories', 'product_flat.product_id', 'product_categories.product_id')
->where('product_categories.category_id', $categoryId)
->get();
->where('product_flat.channel', core()->getCurrentChannelCode())
->where('product_flat.locale', app()->getLocale());
$productArrributes = $qb
->leftJoin('product_attribute_values as pa', 'product_flat.product_id', 'pa.product_id')
->pluck('pa.attribute_id')
->toArray();
$productSuperArrributes = $qb
->leftJoin('product_super_attributes as ps', 'product_flat.product_id', 'ps.product_id')
->pluck('ps.attribute_id')
->toArray();
$productCategoryArrributes = array_unique(array_merge($productArrributes, $productSuperArrributes));
return $productCategoryArrributes;
}
}

View File

@ -260,6 +260,10 @@ class ProductRepository extends Repository
$this->productImage->uploadImages($data, $product);
}
if (isset($data['channels'])) {
$product['channels'] = $data['channels'];
}
Event::fire('catalog.product.update.after', $product);
return $product;
@ -500,28 +504,39 @@ class ProductRepository extends Repository
}
}
$qb = $qb->where(function($query1) {
foreach (['product_flat', 'flat_variants'] as $alias) {
$query1 = $query1->orWhere(function($query2) use($alias) {
$attributes = $this->attribute->getProductDefaultAttributes(array_keys(request()->input()));
$qb = $qb->leftJoin('products as variants', 'products.id', '=', 'variants.parent_id');
foreach ($attributes as $attribute) {
$column = $alias . '.' . $attribute->code;
$qb = $qb->where(function($query1) use($qb) {
$aliases = [
'products' => 'filter_',
'variants' => 'variant_filter_'
];
$queryParams = explode(',', request()->get($attribute->code));
foreach($aliases as $table => $alias) {
$query1 = $query1->orWhere(function($query2) use($qb, $table, $alias) {
foreach ($this->attribute->getProductDefaultAttributes(array_keys(request()->input())) as $code => $attribute) {
$aliasTemp = $alias . $attribute->code;
$qb = $qb->leftJoin('product_attribute_values as ' . $aliasTemp, $table . '.id', '=', $aliasTemp . '.product_id');
$column = ProductAttributeValue::$attributeTypeFields[$attribute->type];
$temp = explode(',', request()->get($attribute->code));
if ($attribute->type != 'price') {
$query2 = $query2->where(function($query3) use($column, $queryParams) {
foreach ($queryParams as $filterValue) {
$query3 = $query3->orwhereRaw("find_in_set($filterValue, $column)");
$query2 = $query2->where($aliasTemp . '.attribute_id', $attribute->id);
$query2 = $query2->where(function($query3) use($aliasTemp, $column, $temp) {
foreach($temp as $code => $filterValue) {
$columns = $aliasTemp . '.' . $column;
$query3 = $query3->orwhereRaw("find_in_set($filterValue, $columns)");
}
});
} else {
if ($attribute->code != 'price') {
$query2 = $query2->where($column, '>=', current($queryParams))->where($column, '<=', end($queryParams));
} else {
$query2 = $query2->where($column, '>=', core()->convertToBasePrice(current($queryParams)))->where($column, '<=', core()->convertToBasePrice(end($queryParams)));
}
$query2 = $query2->where($aliasTemp . '.' . $column, '>=', core()->convertToBasePrice(current($temp)))
->where($aliasTemp . '.' . $column, '<=', core()->convertToBasePrice(end($temp)))
->where($aliasTemp . '.attribute_id', $attribute->id);
}
}
});

View File

@ -20,7 +20,7 @@ class OrderDataGrid extends DataGrid
public function prepareQueryBuilder()
{
$queryBuilder = DB::table('orders as order')
->addSelect('order.id', 'order.status', 'order.created_at', 'order.grand_total')
->addSelect('order.id', 'order.status', 'order.created_at', 'order.grand_total', 'order.order_currency_code')
->where('customer_id', auth()->guard('customer')->user()->id);
$this->setQueryBuilder($queryBuilder);
@ -49,10 +49,13 @@ class OrderDataGrid extends DataGrid
$this->addColumn([
'index' => 'grand_total',
'label' => trans('shop::app.customer.account.order.index.total'),
'type' => 'price',
'type' => 'number',
'searchable' => true,
'sortable' => true,
'filterable' => true
'filterable' => true,
'wrapper' => function ($value) {
return core()->formatPrice($value->grand_total, $value->order_currency_code);
}
]);
$this->addColumn([

View File

@ -29,9 +29,9 @@ class Locale
*/
public function handle($request, Closure $next)
{
$localCode = request()->get('locale');
$locale = request()->get('locale');
if ($locale = $localCode) {
if ($locale) {
if ($this->locale->findOneByField('code', $locale)) {
app()->setLocale($locale);
@ -40,6 +40,8 @@ class Locale
} else {
if ($locale = session()->get('locale')) {
app()->setLocale($locale);
} else {
app()->setLocale(core()->getDefaultChannel()->default_locale->code);
}
}

View File

@ -70,7 +70,10 @@
<?php
$product = $item->product;
$productBaseImage = $productImageHelper->getProductBaseImage($product);
if ($product->type == "configurable")
$productBaseImage = $productImageHelper->getProductBaseImage($item->child->product);
else
$productBaseImage = $productImageHelper->getProductBaseImage($item->product);
?>
<div class="item mb-5" style="margin-bottom: 5px;">

View File

@ -47,6 +47,7 @@
border-left: solid 1px #d3d3d3;
color: $font-color;
vertical-align: middle;
font-family: DejaVu Sans; sans-serif;
}
.table tbody td p {
@ -64,6 +65,7 @@
.sale-summary tr td {
padding: 3px 5px;
font-family: DejaVu Sans; sans-serif;
}
.sale-summary tr.bold {
@ -74,7 +76,7 @@
color: #000;
font-weight: 600;
}
</style>
</head>
@ -115,7 +117,7 @@
<p>{{ $invoice->order->billing_address->city }}</p>
<p>{{ $invoice->order->billing_address->state }}</p>
<p>{{ core()->country_name($invoice->order->billing_address->country) }} {{ $invoice->order->billing_address->postcode }}</p>
{{ __('shop::app.customer.account.order.view.contact') }} : {{ $invoice->order->billing_address->phone }}
{{ __('shop::app.customer.account.order.view.contact') }} : {{ $invoice->order->billing_address->phone }}
</td>
<td>
<p>{{ $invoice->order->shipping_address->name }}</p>
@ -123,7 +125,7 @@
<p>{{ $invoice->order->shipping_address->city }}</p>
<p>{{ $invoice->order->shipping_address->state }}</p>
<p>{{ core()->country_name($invoice->order->shipping_address->country) }} {{ $invoice->order->shipping_address->postcode }}</p>
{{ __('shop::app.customer.account.order.view.contact') }} : {{ $invoice->order->shipping_address->phone }}
{{ __('shop::app.customer.account.order.view.contact') }} : {{ $invoice->order->shipping_address->phone }}
</td>
</tr>
</tbody>
@ -151,7 +153,7 @@
</tbody>
</table>
</div>
<div class="table items">
<table>
<thead>
@ -178,11 +180,11 @@
<p>{{ $html }}</p>
@endif
</td>
<td>{{ core()->formatBasePrice($item->base_price) }}</td>
<td>{{ core()->formatPrice($item->price, $invoice->order->order_currency_code) }}</td>
<td>{{ $item->qty }}</td>
<td>{{ core()->formatBasePrice($item->base_total) }}</td>
<td>{{ core()->formatBasePrice($item->base_tax_amount) }}</td>
<td>{{ core()->formatBasePrice($item->base_total + $item->base_tax_amount) }}</td>
<td>{{ core()->formatPrice($item->total, $invoice->order->order_currency_code) }}</td>
<td>{{ core()->formatPrice($item->tax_amount, $invoice->order->order_currency_code) }}</td>
<td>{{ core()->formatPrice(($item->total + $item->tax_amount), $invoice->order->order_currency_code) }}</td>
</tr>
@endforeach
@ -195,25 +197,25 @@
<tr>
<td>{{ __('shop::app.customer.account.order.view.subtotal') }}</td>
<td>-</td>
<td>{{ core()->formatPrice($invoice->base_sub_total, $invoice->order->order_currency_code) }}</td>
<td>{{ core()->formatPrice($invoice->sub_total, $invoice->order->order_currency_code) }}</td>
</tr>
<tr>
<td>{{ __('shop::app.customer.account.order.view.shipping-handling') }}</td>
<td>-</td>
<td>{{ core()->formatPrice($invoice->base_shipping_amount, $invoice->order->order_currency_code) }}</td>
<td>{{ core()->formatPrice($invoice->shipping_amount, $invoice->order->order_currency_code) }}</td>
</tr>
<tr>
<td>{{ __('shop::app.customer.account.order.view.tax') }}</td>
<td>-</td>
<td>{{ core()->formatPrice($invoice->base_tax_amount, $invoice->order->order_currency_code) }}</td>
<td>{{ core()->formatPrice($invoice->tax_amount, $invoice->order->order_currency_code) }}</td>
</tr>
<tr class="bold">
<td>{{ __('shop::app.customer.account.order.view.grand-total') }}</td>
<td>-</td>
<td>{{ core()->formatPrice($invoice->base_grand_total, $invoice->order->order_currency_code) }}</td>
<td>{{ core()->formatPrice($invoice->grand_total, $invoice->order->order_currency_code) }}</td>
</tr>
</table>
@ -222,4 +224,3 @@
</div>
</body>
</html>

View File

@ -32,7 +32,8 @@
</head>
<body @if (app()->getLocale() == 'ar') class="rtl" @endif style="scroll-behavior: smooth;">
<body @if (core()->getCurrentLocale()->direction == 'rtl') class="rtl" @endif style="scroll-behavior: smooth;">
{!! view_render_event('bagisto.shop.layout.body.before') !!}

View File

@ -2,41 +2,27 @@
@inject ('productFlatRepository', 'Webkul\Product\Repositories\ProductFlatRepository')
@inject ('productAttributeValueRepository', 'Webkul\Product\Repositories\ProductAttributeValueRepository')
<?php
$filterAttributes = [];
if (isset($category)) {
$categoryProduct = $productFlatRepository->getCategoryProduct($category->id);
if (count($category->filterableAttributes) > 0) {
$filterAttributes = $category->filterableAttributes;
} else {
$categoryProductAttributes = $productFlatRepository->getCategoryProductAttribute($category->id);
foreach ($categoryProduct as $product) {
$attributes = $productAttributeValueRepository->findByField('product_id', $product->product_id);
if ($product->product->type == 'configurable') {
foreach ($product->product->super_attributes as $super_attribute) {
$productAttribute[] = $super_attribute->id;
if ($categoryProductAttributes) {
foreach ($attributeRepository->getFilterAttributes() as $filterAttribute) {
if (in_array($filterAttribute->id, $categoryProductAttributes)) {
$filterAttributes[] = $filterAttribute;
} else if ($filterAttribute ['code'] == 'price') {
$filterAttributes[] = $filterAttribute;
}
}
}
foreach ($attributes as $attribute) {
if ($attribute) {
$productAttribute[] = $attribute->attribute_id;
}
$filterAttributes = collect($filterAttributes);
}
}
if (isset($productAttribute)) {
foreach ($attributeRepository->getFilterAttributes() as $filterAttribute) {
if (in_array($filterAttribute->id, array_unique($productAttribute))) {
$filterAttributes[] = $filterAttribute;
} else if ($filterAttribute ['code'] == 'price') {
$filterAttributes[] = $filterAttribute;
}
}
}
$filterAttributes = collect($filterAttributes);
} else {
$filterAttributes = $attributeRepository->getFilterAttributes();
}

View File

@ -108,7 +108,9 @@
this.currentOriginalImageUrl = image.original_image_url;
$('img#pro-img').data('zoom-image', image.original_image_url).ezPlus();
if ($(window).width() > 580) {
$('img#pro-img').data('zoom-image', image.original_image_url).ezPlus();
}
},
moveThumbs: function(direction) {
@ -152,7 +154,9 @@
<script>
$(document).ready(function() {
$('img#pro-img').data('zoom-image', $('img#pro-img').data('image')).ezPlus();
if ($(window).width() > 580) {
$('img#pro-img').data('zoom-image', $('img#pro-img').data('image')).ezPlus();
}
$(document).mousemove(function(event) {
if ($('.add-to-wishlist').length) {

View File

@ -2,13 +2,11 @@
namespace Webkul\User\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Event;
use Exception;
use Webkul\User\Http\Requests\UserForm;
use Illuminate\Support\Facades\{ Event, Hash };
use Webkul\User\Repositories\AdminRepository as Admin;
use Webkul\User\Repositories\RoleRepository as Role;
use Webkul\User\Http\Requests\UserForm;
use Hash;
/**
* Admin user controller
@ -42,8 +40,8 @@ class UserController extends Controller
/**
* Create a new controller instance.
*
* @param \Webkul\User\Repositories\AdminRepository $admin
* @param \Webkul\User\Repositories\RoleRepository $role
* @param \Webkul\User\Repositories\AdminRepository $admin
* @param \Webkul\User\Repositories\RoleRepository $role
* @return void
*/
public function __construct(Admin $admin, Role $role)
@ -60,7 +58,7 @@ class UserController extends Controller
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
* @return \Illuminate\View\View
*/
public function index()
{
@ -70,7 +68,7 @@ class UserController extends Controller
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
* @return \Illuminate\View\View
*/
public function create()
{
@ -83,11 +81,11 @@ class UserController extends Controller
* Store a newly created resource in storage.
*
* @param \Webkul\User\Http\Requests\UserForm $request
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\RedirectResponse
*/
public function store(UserForm $request)
{
$data = request()->all();
$data = $request->all();
if (isset($data['password']) && $data['password'])
$data['password'] = bcrypt($data['password']);
@ -96,7 +94,7 @@ class UserController extends Controller
$admin = $this->admin->create($data);
Event::fire('user.admin.delete.after', $admin);
Event::fire('user.admin.create.after', $admin);
session()->flash('success', trans('admin::app.response.create-success', ['name' => 'User']));
@ -107,7 +105,7 @@ class UserController extends Controller
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
* @return \Illuminate\View\View
*/
public function edit($id)
{
@ -123,11 +121,11 @@ class UserController extends Controller
*
* @param \Webkul\User\Http\Requests\UserForm $request
* @param int $id
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UserForm $request, $id)
{
$data = request()->all();
$data = $request->all();
if (! $data['password'])
unset($data['password']);
@ -155,7 +153,7 @@ class UserController extends Controller
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy($id)
{
@ -178,7 +176,7 @@ class UserController extends Controller
Event::fire('user.admin.delete.after', $id);
return response()->json(['message' => true], 200);
} catch (\Exception $e) {
} catch (Exception $e) {
session()->flash('error', trans('admin::app.response.delete-failed', ['name' => 'Admin']));
}
}
@ -217,4 +215,4 @@ class UserController extends Controller
return redirect()->route($this->_config['redirect']);
}
}
}
}