Base sync
This commit is contained in:
commit
6a8bb7982d
48
README.md
48
README.md
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ class CustomerGroupDataGrid extends DataGrid
|
|||
$this->addColumn([
|
||||
'index' => 'code',
|
||||
'label' => 'Code',
|
||||
'type' => 'number',
|
||||
'type' => 'string',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'filterable' => true
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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.',
|
||||
|
|
|
|||
|
|
@ -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=""{{ __('admin::app.catalog.attributes.code') }}"" 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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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=""{{ __('admin::app.catalog.categories.attributes') }}"" 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') !!}
|
||||
|
||||
|
|
|
|||
|
|
@ -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=""{{ __('admin::app.catalog.categories.attributes') }}"" 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]) !!}
|
||||
|
||||
|
|
|
|||
|
|
@ -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=""{{ __('admin::app.catalog.products.channel') }}"" 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>
|
||||
|
|
@ -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]) !!}
|
||||
|
||||
|
|
|
|||
|
|
@ -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=""{{ trans($field['title']) }}"">
|
||||
|
||||
|
||||
@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=""{{ trans($field['title']) }}"">{{ 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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -41,6 +41,15 @@
|
|||
<input v-validate="'required'" class="control" id="name" name="name" data-vv-as=""{{ __('admin::app.settings.locales.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=""{{ __('admin::app.settings.locales.direction') }}"">
|
||||
<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>
|
||||
|
||||
|
|
|
|||
|
|
@ -44,6 +44,15 @@
|
|||
<input v-validate="'required'" class="control" id="name" name="name" data-vv-as=""{{ __('admin::app.settings.locales.name') }}"" 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=""{{ __('admin::app.settings.locales.direction') }}"">
|
||||
<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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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=""{{ __('admin::app.settings.sliders.title') }}"">
|
||||
<span class="control-error" v-if="errors.has('title')">@{{ errors.first('title') }}</span>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -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=""{{ __('admin::app.settings.sliders.title') }}"" value="{{ $slider->title ?: old('title') }}">
|
||||
<span class="control-error" v-if="errors.has('title')">@{{ errors.first('title') }}</span>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
//
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -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]
|
||||
]);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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'];
|
||||
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -13,6 +13,6 @@ class Locale extends Model implements LocaleContract
|
|||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'code', 'name'
|
||||
'code', 'name', 'direction'
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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']);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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([
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;">
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
@ -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') !!}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue