Merge branch 'master' of https://github.com/bagisto/bagisto into ISSUE_4111

This commit is contained in:
Mohan Raj 2020-10-30 20:08:56 +05:30
commit df383e4323
75 changed files with 959 additions and 414 deletions

View File

@ -40,7 +40,6 @@ jobs:
- name: Composer install
run: |
set -e
composer global require hirak/prestissimo
composer install --no-interaction --ansi --no-progress --no-suggest --optimize-autoloader
- name: Migrate database

View File

@ -43,7 +43,9 @@ class InvoiceController extends Controller
$this->middleware('auth:' . $this->guard);
}
$this->repository = app($this->_config['repository']);
if ($this->_config) {
$this->repository = app($this->_config['repository']);
}
}
/**

View File

@ -12,7 +12,7 @@ class ResourceController extends Controller
* @var array
*/
protected $guard;
/**
* Contains route related configuration
*
@ -45,7 +45,9 @@ class ResourceController extends Controller
$this->middleware('auth:' . $this->guard);
}
$this->repository = app($this->_config['repository']);
if ($this->_config) {
$this->repository = app($this->_config['repository']);
}
}
/**
@ -58,8 +60,8 @@ class ResourceController extends Controller
$query = $this->repository->scopeQuery(function($query) {
if (isset($this->_config['authorization_required']) && $this->_config['authorization_required']) {
$query = $query->where('customer_id', auth()->user()->id );
}
}
foreach (request()->except(['page', 'limit', 'pagination', 'sort', 'order', 'token']) as $input => $value) {
$query = $query->whereIn($input, array_map('trim', explode(',', $value)));
}
@ -89,11 +91,11 @@ class ResourceController extends Controller
* @return \Illuminate\Http\Response
*/
public function get($id)
{
$query = isset($this->_config['authorization_required']) && $this->_config['authorization_required'] ?
$this->repository->where('customer_id', auth()->user()->id)->findOrFail($id) :
{
$query = isset($this->_config['authorization_required']) && $this->_config['authorization_required'] ?
$this->repository->where('customer_id', auth()->user()->id)->findOrFail($id) :
$this->repository->findOrFail($id);
return new $this->_config['resource']($query);
}
@ -108,7 +110,7 @@ class ResourceController extends Controller
$wishlistProduct = $this->repository->findOrFail($id);
$this->repository->delete($id);
return response()->json([
'message' => 'Item removed successfully.',
]);

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/js/admin.js": "/js/admin.js?id=b022291aa1cad7dfcc84",
"/css/admin.css": "/css/admin.css?id=8f4fcca5914f5370ddda"
"/css/admin.css": "/css/admin.css?id=f2b20e4283a639808ef6"
}

View File

@ -12,11 +12,15 @@ class CartRuleCouponDataGrid extends DataGrid
protected $sortOrder = 'desc';
public function prepareQueryBuilder()
{
$queryBuilder = DB::table('cart_rule_coupons')
->addSelect('id', 'code', 'created_at', 'expired_at', 'times_used')
->where('cart_rule_coupons.cart_rule_id', collect(request()->segments())->last());
{
$route = request()->route() ? request()->route()->getName() : "" ;
$cartRuleId = $route == 'admin.cart-rules.edit' ? collect(request()->segments())->last() : last(explode("/", url()->previous()));
$queryBuilder = DB::table('cart_rule_coupons')
->addSelect('id', 'code', 'created_at', 'expired_at', 'times_used')
->where('cart_rule_coupons.cart_rule_id', $cartRuleId);
$this->setQueryBuilder($queryBuilder);
}

View File

@ -16,6 +16,7 @@ class ExportController extends Controller
'TaxRateDataGrid',
'ProductDataGrid',
'CMSPageDataGrid',
'CartRuleCouponDataGrid'
];
/**

View File

@ -174,6 +174,10 @@
float: left;
}
.multiselect {
text-align: unset;
}
.pagination .page-item .icon {
transform: rotate(180deg);
}

View File

@ -2,7 +2,7 @@
return [
'save' => 'حفظ',
'create' => 'خلق',
'create' => 'إنشاء',
'update' => 'تحديث',
'delete' => 'حذف',
'copy-of' => 'نسخة من ',
@ -47,20 +47,20 @@ return [
'my-account' => 'حسابي',
'logout' => 'خروج',
'visit-shop' => 'قم بزيارة المتجر',
'dashboard' => 'لوحة العدادات',
'dashboard' => 'لوحة التحكم',
'sales' => 'المبيعات',
'orders' => 'الأوامر',
'orders' => 'الطلبات',
'shipments' => 'الشحنات',
'invoices' => 'الفواتير',
'catalog' => 'فهرس',
'products' => 'المنتجات',
'categories' => 'الفئات',
'attributes' => 'الصفات',
'attributes' => 'الخصائص',
'attribute-families' => 'وصف الأسر',
'customers' => 'زبائن',
'groups' => 'المجموعات',
'reviews' => 'باء-الاستعراضات',
'newsletter-subscriptions' => 'الاشتراك في الرسالة الإخبارية',
'reviews' => 'التقييمات',
'newsletter-subscriptions' => 'الاشتراك في النشرة البريدية',
'configure' => 'اضبط',
'settings' => 'إعدادات',
'locales' => 'لغات',
@ -81,9 +81,9 @@ return [
],
'acl' => [
'dashboard' => 'لوحة العدادات',
'dashboard' => 'لوحة التحكم',
'sales' => 'المبيعات',
'orders' => 'الأوامر',
'orders' => 'الطلبات',
'shipments' => 'الشحنات',
'invoices' => 'الفواتير',
'catalog' => 'فهرس',
@ -117,7 +117,7 @@ return [
],
'dashboard' => [
'title' => 'لوحة العدادات',
'title' => 'لوحة التحكم',
'from' => 'من',
'to' => 'إلى',
'total-customers' => 'مجموع الزبائن',
@ -140,10 +140,10 @@ return [
'datagrid' => [
'mass-ops' => [
'method-error' => 'خطأ! تم اكتشاف طريقة خاطئة ، الرجاء التحقق من تشكيل حركة الكتلة',
'delete-success' => "تم حذف المورد بنجاح :Selected",
'method-error' => 'خطأ! تم اكتشاف طريقة خاطئة، الرجاء التحقق من تشكيل حركة الكتلة',
'delete-success' => "تم الحذف بنجاح :Selected",
'partial-action' => 'ولم تنفذ بعض الإجراءات بسبب القيود المفروضة على النظام :resource',
'update-success' => "تم تحديث المورد بنجاح :Selected",
'update-success' => "تم التحديث بنجاح :Selected",
'no-resource' => 'المورد المقدم غير كاف للعمل',
],
@ -154,7 +154,7 @@ return [
'copy' => 'نسخ',
'name' => 'اسم',
'direction' => 'اتجاه',
'fullname' => 'الاسم الكامل',
'fullname' => 'الاسم بالكامل',
'type' => 'النوع',
'required' => 'مطلوب',
'unique' => 'فريد',
@ -171,10 +171,10 @@ return [
'layout' => 'نسق',
'url-key' => 'مفتاح URL',
'comment' => 'تعليق',
'product-name' => 'المنتج',
'product-name' => 'إسم المنتج',
'currency-name' => 'اسم العملة',
'exch-rate' => 'باء-سعر الصرف',
'priority' => 'Priority',
'priority' => 'الأولوية',
'subscribed' => 'مشترك',
'base-total' => 'المجموع الأساسي',
'grand-total' => 'المجموع الكلي',
@ -232,10 +232,10 @@ return [
'account' => [
'title' => 'حسابي',
'save-btn-title' => 'احفظ',
'general' => 'ألف-لمحة عامة',
'general' => 'عام',
'name' => 'اسم',
'email' => 'البريد الإلكتروني',
'password' => 'كلمه السر',
'password' => 'كلمه المرور',
'confirm-password' => 'تأكيد كلمة المرور',
'change-password' => 'غير كلمة سر الحساب',
'current-password' => 'كلمة المرور الحالية'
@ -243,22 +243,22 @@ return [
'users' => [
'forget-password' => [
'title' => 'انس كلمة السر',
'header-title' => 'استرجع كلمة السر',
'title' => 'نسيت كلمة المرور',
'header-title' => 'استرجع كلمة المرور',
'email' => 'البريد الإلكتروني المسجل',
'password' => 'كلمه السر',
'password' => 'كلمه المرور',
'confirm-password' => 'تأكيد كلمة المرور',
'back-link-title' => 'العودة للتوقيع',
'submit-btn-title' => 'بريد إلكتروني كلمة مرور إعادة تعيين وصلة'
],
'reset-password' => [
'title' => 'أعد ضبط كلمة السر',
'title' => 'أعد ضبط كلمة المرور',
'email' => 'البريد الإلكتروني المسجل',
'password' => 'كلمه السر',
'password' => 'كلمه المرور',
'confirm-password' => 'تأكيد كلمة المرور',
'back-link-title' => 'العودة للتوقيع',
'submit-btn-title' => 'أعد ضبط كلمة السر'
'submit-btn-title' => 'أعد ضبط كلمة المرور'
],
'roles' => [
@ -266,10 +266,10 @@ return [
'add-role-title' => 'أضف الدور',
'edit-role-title' => 'حرر الدور',
'save-btn-title' => 'احفظ الدور',
'general' => 'ألف-لمحة عامة',
'general' => 'عام',
'name' => 'اسم',
'description' => 'الوصف',
'access-control' => 'مراقبة الدخول',
'access-control' => 'صلاحيات الوصول',
'permissions' => 'الأذون',
'custom' => 'مخصص',
'all' => 'الكل'
@ -280,33 +280,33 @@ return [
'add-user-title' => 'إضافة مستخدم',
'edit-user-title' => 'حرر المستخدم',
'save-btn-title' => 'احفظ المستخدم',
'general' => 'ألف-لمحة عامة',
'general' => 'عام',
'email' => 'البريد الإلكتروني',
'name' => 'اسم',
'password' => 'كلمه الس',
'password' => 'كلمه المرور',
'confirm-password' => 'تأكيد كلمة المرور',
'status-and-role' => 'المركز والدور',
'role' => 'الدور',
'status' => 'الحالة',
'account-is-active' => 'الحساب نشط',
'current-password' => 'أدخل كلمة السر الحالية',
'current-password' => 'أدخل كلمة المرور الحالية',
'confirm-delete' => 'تأكيد حذف هذا الحساب',
'confirm-delete-title' => 'تأكيد كلمة السر قبل حذف',
'confirm-delete-title' => 'تأكيد كلمة المرور قبل حذف',
'delete-last' => 'على الأقل مدير واحد مطلوب.',
'delete-success' => 'نجاح! حذف المستخدم',
'incorrect-password' => 'كلمة السر التي أدخلتها غير صحيحة',
'password-match' => 'كلمة السر الحالية لا تطابق.',
'incorrect-password' => 'كلمة المرور التي أدخلتها غير صحيحة',
'password-match' => 'كلمة المرور الحالية لا تطابق.',
'account-save' => 'الحساب التغييرات و الموفرة بنجاح.',
'login-error' => 'الرجاء التحقق من أوراق اعتمادك ومحاولة مرة أخرى.',
'activate-warning' => 'حسابك لم يتم تفعيله بعد ، الرجاء الاتصال بالمدير.'
'activate-warning' => 'حسابك لم يتم تفعيله بعد، الرجاء الاتصال بالمدير.'
],
'sessions' => [
'title' => 'وقع هنا',
'email' => 'البريد الإلكتروني',
'password' => 'كلمه السر',
'forget-password-link-title' => 'نسيت كلمة السر ؟',
'remember-me' => 'تذكريني',
'password' => 'كلمه المرور',
'forget-password-link-title' => 'نسيت كلمة المرور؟',
'remember-me' => 'تذكرني',
'submit-btn-title' => 'وقع هنا'
]
],
@ -1235,7 +1235,7 @@ return [
'admin' => [
'emails' => [
'email' => 'Email',
'email' => 'البريد الإلكتروني',
'notification_label' => 'إشعارات',
'notifications' => [
'verification' => 'ارسل ايميل التفعيل',
@ -1301,6 +1301,11 @@ return [
'weight-unit' => 'وحدة الوزن',
'admin-page-limit' => 'العناصر الافتراضية لكل صفحة (المشرف)',
'design' => 'التصميم',
'email-settings' => 'إعدادات البريد الإلكتروني',
'email-sender-name' => 'اسم مرسل البريد الإلكتروني',
'shop-email-from' => 'متجر عنوان البريد الإلكتروني [لإرسال رسائل البريد الإلكتروني]',
'admin-name' => 'اسم المسؤول',
'admin-email' => 'البريد الإلكتروني للمسؤول',
'admin-logo' => 'شعار المسؤول',
'logo-image' => 'صورة الشعار',
'credit-max' => 'الحد الأقصى لائتمان العميل',
@ -1316,48 +1321,48 @@ return [
'sandbox' => 'صندوق الرمل',
'all-channels' => 'الكل',
'all-locales' => 'الكل',
'invoice-slip-design' => 'Invoice Slip Design',
'logo' => 'Logo',
'storefront' => 'Storefront',
'default-list-mode' => 'Default List Mode',
'grid' => 'Grid',
'list' => 'List',
'products-per-page' => 'Products Per Page',
'sort-by' => 'Sort By',
'invoice-slip-design' => 'تصميم قسيمة الفاتورة',
'logo' => 'شعار',
'storefront' => 'واجهة المحل',
'default-list-mode' => 'وضع القائمة الافتراضي',
'grid' => 'جريد',
'list' => 'قائمة',
'products-per-page' => 'المنتجات في الصفحة',
'sort-by' => 'صنف حسب',
'from-z-a' => 'From Z-A',
'from-a-z' => 'From A-Z',
'newest-first' => 'Newest First',
'oldest-first' => 'Oldest First',
'cheapest-first' => 'Cheapest First',
'expensive-first' => 'Expensive First',
'comma-seperated' => 'Comma Seperated',
'favicon' => 'Favicon',
'comma-seperated' => 'مفصولة بفواصل',
'favicon' => 'فافيكون',
'seo' => 'SEO',
'rich-snippets' => 'Rich Snippets',
'products' => 'Products',
'enable' => 'Enable',
'show-weight' => 'Show Weight',
'show-categories' => 'Show Categories',
'show-images' => 'Show Images',
'show-reviews' => 'Show Reviews',
'show-ratings' => 'Show Ratings',
'show-offers' => 'Show Offers',
'show-sku' => 'Show SKU',
'categories' => 'Categories',
'show-sku' => 'Show SKU',
'show-search-input-field' => 'Show Search Input Field',
'rich-snippets' => 'قصاصات غنية',
'products' => 'منتجات',
'enable' => 'ممكن',
'show-weight' => 'عرض الوزن',
'show-categories' => 'إظهار الفئات',
'show-images' => 'عرض الصور',
'show-reviews' => 'عرض التعليقات',
'show-ratings' => 'إظهار التقييمات',
'show-offers' => 'عرض العروض',
'show-sku' => 'عرض SKU',
'categories' => 'التصنيفات',
'show-sku' => 'عرض SKU',
'show-search-input-field' => 'إظهار حقل إدخال البحث',
'store-name' => 'اسم المتجر',
'vat-number' => 'ظريبه الشراء',
'contact-number' => 'رقم الاتصال',
'bank-details' => 'التفاصيل المصرفية',
'mailing-address' => 'Send Check to',
'instructions' => 'Instructions',
'custom-scripts' => 'Custom Scripts',
'custom-css' => 'Custom CSS',
'custom-javascript' => 'Custom Javascript',
'paypal-smart-button' => 'Paypal Smart Button',
'client-id' => 'Client Id',
'client-id-info' => 'Use "sb" for testing.'
'mailing-address' => 'أرسل الشيك إلى',
'instructions' => 'تعليمات',
'custom-scripts' => 'البرامج النصية المخصصة',
'custom-css' => 'لغة تنسيق ويب حسب الطلب',
'custom-javascript' => 'جافا سكريبت مخصص',
'paypal-smart-button' => 'زر Paypal الذكي',
'client-id' => 'معرف العميل',
'client-id-info' => 'استخدم "sb" للاختبار.'
]
]
];

View File

@ -85,7 +85,7 @@
<div class="control-group">
<div class="control-group" :class="[errors.has(inputName + '[value]') ? 'has-error' : '']">
<input type="number" v-validate="'required|min_value:0'" :name="[inputName + '[value]']" v-model="customerGroupPrice.value" class="control" data-vv-as="&quot;{{ __('admin::app.datagrid.price') }}&quot;"/>
<input type="number" v-validate="{required: true, min_value: 0, ...(customerGroupPrice.value_type === 'discount' ? {max_value: 100} : {})}" :name="[inputName + '[value]']" v-model="customerGroupPrice.value" class="control" data-vv-as="&quot;{{ __('admin::app.datagrid.price') }}&quot;"/>
<span class="control-error" v-if="errors.has(inputName + '[value]')">@{{ errors.first(inputName + '[value]') }}</span>
</div>
</div>
@ -159,4 +159,4 @@
}
});
</script>
@endpush
@endpush

View File

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

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
@if ($favicon = core()->getConfigData('general.design.admin_logo.favicon'))
@if ($favicon = core()->getConfigData('general.design.admin_logo.favicon', core()->getCurrentChannelCode()))
<link rel="icon" sizes="16x16" href="{{ \Illuminate\Support\Facades\Storage::url($favicon) }}" />
@else
<link rel="icon" sizes="16x16" href="{{ asset('vendor/webkul/ui/assets/images/favicon.ico') }}" />

View File

@ -457,12 +457,38 @@
</form>
<div class="content">
<div class="page-header">
<div class="page-action">
<div class="export-import" @click="showModal('downloadDataGrid')">
<i class="export-icon"></i>
<span >
{{ __('admin::app.export.export') }}
</span>
</div>
</div>
</div>
</div>
<modal id="downloadDataGrid" :is-open="this.$root.modalIds.downloadDataGrid">
<h3 slot="header">{{ __('admin::app.export.download') }}</h3>
<div slot="body">
<export-form></export-form>
</div>
</modal>
@inject('cartRuleCouponGrid','Webkul\Admin\DataGrids\CartRuleCouponDataGrid')
{!! $cartRuleCouponGrid->render() !!}
</div>
</script>
@push('scripts')
@include('admin::export.export', ['gridName' => $cartRuleCouponGrid])
@endpush
<script>
Vue.component('cart-rule', {
@ -754,7 +780,11 @@
})
}
});
}
},
showModal(id) {
this.$root.$set(this.$root.modalIds, id, true);
},
}
});
</script>

View File

@ -454,8 +454,14 @@
<tr class="bold">
<td>{{ __('admin::app.sales.orders.total-due') }}</td>
<td>-</td>
<td>{{ core()->formatBasePrice($order->base_total_due) }}</td>
@if($order->status !== 'canceled')
<td>{{ core()->formatBasePrice($order->base_total_due) }}</td>
@else
<td id="due-amount-on-cancelled">{{ core()->formatBasePrice(0.00) }}</td>
@endif
</tr>
</table>
</div>

View File

@ -55,9 +55,13 @@
</span>
</div>
<div class="control-group">
<div class="control-group" :class="[errors.has(controlName + '[special_price]') ? 'has-error' : '']">
<label class="ticket-label">{{ __('bookingproduct::app.admin.catalog.products.special-price') }}</label>
<input type="text" :name="controlName + '[special_price]'" v-model="ticketItem.special_price" class="control">
<input type="text" v-validate="{decimal: true, min_value:0, ...(ticketItem.price ? {max_value: ticketItem.price} : {})}" :name="controlName + '[special_price]'" v-model="ticketItem.special_price" class="control" data-vv-as="&quot;{{ __('bookingproduct::app.admin.catalog.products.price') }}&quot;">
<span class="control-error" v-if="errors.has(controlName + '[special_price]')">
@{{ errors.first(controlName + '[special_price]') }}
</span>
</div>
</td>

View File

@ -8,7 +8,7 @@
<div class="control-group-container">
<div class="form-group date" :class="[errors.has('booking[date]') ? 'has-error' : '']">
<date @onChange="dateSelected($event)">
<date @onChange="dateSelected($event)" :minDate="'{{$bookingProduct->available_from}}'" :maxDate="'{{$bookingProduct->available_to}}'">
<input type="text" v-validate="'required'" name="booking[date]" class="form-style" data-vv-as="&quot;{{ __('bookingproduct::app.shop.products.date') }}&quot;"/>
</date>
@ -24,7 +24,7 @@
</div>
</div>
</div>
</script>
<script>
@ -54,6 +54,6 @@
}
}
});
</script>
@endpush
@endpush

View File

@ -39,6 +39,15 @@ class Install extends Command
{
$this->checkForEnvFile();
// cached new changes
$this->warn('Step: Caching new changes...');
$cached = $this->call('config:cache');
$this->info($cached);
// waiting for 2 seconds
$this->warn('Please wait...');
sleep(2);
// running `php artisan migrate`
$this->warn('Step: Migrating all tables into database...');
$migrate = $this->call('migrate:fresh');
@ -64,11 +73,6 @@ class Install extends Command
$result = shell_exec('composer dump-autoload');
$this->info($result);
// cached new changes
$this->warn('Step: Caching new changes...');
$cached = $this->call('config:cache');
$this->info($cached);
$this->info('-----------------------------');
$this->info('Congratulations!');
$this->info('The installation has been finished and you can now use Bagisto.');

View File

@ -16,11 +16,12 @@ class ChannelTableSeeder extends Seeder
'code' => 'default',
'name' => 'Default',
'theme' => 'velocity',
'hostname' => config('app.url'),
'root_category_id' => 1,
'home_page_content' => '<p>@include("shop::home.slider") @include("shop::home.featured-products") @include("shop::home.new-products")</p>
<div class="banner-container">
<div class="left-banner"><img data-src="themes/default/assets/images/1.webp" class="lazyload" alt="test" width="720" height="720" /></div>
<div class="right-banner"><img data-src="themes/default/assets/images/2.webp" class="lazyload" alt="test" width="460" height="330" /> <img data-src="themes/default/assets/images/3.webp" class="lazyload" alt="test" width="460" height="330" /></div>
<div class="left-banner"><img src='.asset("/themes/default/assets/images/1.webp").' data-src='.asset("/themes/default/assets/images/1.webp").' class="lazyload" alt="test" width="720" height="720" /></div>
<div class="right-banner"><img src='. asset("/themes/default/assets/images/2.webp").' data-src='. asset("/themes/default/assets/images/2.webp").' class="lazyload" alt="test" width="460" height="330" /> <img src='.asset("/themes/default/assets/images/3.webp").' data-src='.asset("/themes/default/assets/images/3.webp").' class="lazyload" alt="test" width="460" height="330" /></div>
</div>',
'footer_content' => '<div class="list-container"><span class="list-heading">Quick Links</span><ul class="list-group"><li><a href="@php echo route(\'shop.cms.page\', \'about-us\') @endphp">About Us</a></li><li><a href="@php echo route(\'shop.cms.page\', \'return-policy\') @endphp">Return Policy</a></li><li><a href="@php echo route(\'shop.cms.page\', \'refund-policy\') @endphp">Refund Policy</a></li><li><a href="@php echo route(\'shop.cms.page\', \'terms-conditions\') @endphp">Terms and conditions</a></li><li><a href="@php echo route(\'shop.cms.page\', \'terms-of-use\') @endphp">Terms of Use</a></li><li><a href="@php echo route(\'shop.cms.page\', \'contact-us\') @endphp">Contact Us</a></li></ul></div><div class="list-container"><span class="list-heading">Connect With Us</span><ul class="list-group"><li><a href="#"><span class="icon icon-facebook"></span>Facebook </a></li><li><a href="#"><span class="icon icon-twitter"></span> Twitter </a></li><li><a href="#"><span class="icon icon-instagram"></span> Instagram </a></li><li><a href="#"> <span class="icon icon-google-plus"></span>Google+ </a></li><li><a href="#"> <span class="icon icon-linkedin"></span>LinkedIn </a></li></ul></div>',
'name' => 'Default',
@ -44,4 +45,4 @@ class ChannelTableSeeder extends Seeder
'inventory_source_id' => 1,
]);
}
}
}

View File

@ -131,7 +131,13 @@ class Toolbar extends AbstractProduct
{
$params = request()->input();
if (isset($params['mode']) && $key == $params['mode']) {
$defaultMode = core()->getConfigData('catalog.products.storefront.mode')
? core()->getConfigData('catalog.products.storefront.mode')
: 'grid';
if (request()->input() == null && $key == $defaultMode) {
return true;
} else if (isset($params['mode']) && $key == $params['mode']) {
return true;
}

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/js/shop.js": "/js/shop.js?id=c4dfdb6d0482241432f9",
"/css/shop.css": "/css/shop.css?id=11adc18bed8ace91c828"
"/css/shop.css": "/css/shop.css?id=45a1e46876af32f30871"
}

View File

@ -12,8 +12,13 @@ return [
'type' => 'boolean',
'locale_based' => true,
'channel_based' => true,
],
[
], [
'name' => 'wishlist_option',
'title' => 'shop::app.products.wishlist-options',
'type' => 'boolean',
'locale_based' => true,
'channel_based' => true,
], [
'name' => 'image_search',
'title' => 'shop::app.search.image-search-option',
'type' => 'boolean',

View File

@ -251,6 +251,28 @@ input {
.special-price {
color: $disc-price;
}
/*
To Do: Start adjusting if equal height needed in default theme as well.
*/
.price-from {
.bundle-regular-price {
color: $font-light;
text-decoration: line-through;
margin-right: 10px;
}
.bundle-special-price {
color: $disc-price;
}
.bundle-to {
display: block;
font-weight: 500;
margin-top: 1px;
margin-bottom: 1px;
}
}
}
//horizontal rule

View File

@ -72,8 +72,8 @@ return [
'page-title' => 'بحث',
'found-results' => 'تم العثور على نتائج البحث',
'found-result' => 'تم العثور على نتيجة البحث',
'analysed-keywords' => 'Analysed Keywords',
'image-search-option' => 'Image Search Option'
'analysed-keywords' => 'الكلمات الأساسية التي تم تحليلها',
'image-search-option' => 'خيار البحث عن الصور'
],
'reviews' => [
@ -440,7 +440,8 @@ return [
'none' => 'لا شيء',
'available-for-order' => 'متوفر لطلب الشراء',
'settings' => 'Settings',
'compare_options' => 'Compare Options',
'compare_options' => 'قارن الخيارات',
'wishlist-options' => 'Wishlist Options'
],
// 'reviews' => [

View File

@ -438,6 +438,7 @@ return [
'available' => 'Verfügbar',
'settings' => 'Settings',
'compare_options' => 'Compare Options',
'wishlist-options' => 'Wishlist Options'
],
// 'reviews' => [

View File

@ -441,6 +441,7 @@ return [
'available-for-order' => 'Available for Order',
'settings' => 'Settings',
'compare_options' => 'Compare Options',
'wishlist-options' => 'Wishlist Options'
],
// 'reviews' => [

View File

@ -411,6 +411,7 @@ return [
'available-for-order' => 'Disponible para ordenar',
'settings' => 'Settings',
'compare_options' => 'Compare Options',
'wishlist-options' => 'Wishlist Options'
],
// 'reviews' => [

View File

@ -440,6 +440,7 @@ return [
'available-for-order' => 'Available for Order',
'settings' => 'Settings',
'compare_options' => 'Compare Options',
'wishlist-options' => 'Wishlist Options'
],
// 'reviews' => [

View File

@ -438,6 +438,7 @@ return [
'available-for-order' => 'Disponibile per lordine',
'settings' => 'Settings',
'compare_options' => 'Compare Options',
'wishlist-options' => 'Wishlist Options'
],
// 'reviews' => [

View File

@ -407,6 +407,7 @@ return [
'available-for-order' => '注文可能',
'settings' => 'Settings',
'compare_options' => 'Compare Options',
'wishlist-options' => 'Wishlist Options'
],
'buynow' => [

View File

@ -445,6 +445,7 @@ return [
'available-for-order' => 'Beschikbaar voor bestelling',
'settings' => 'Settings',
'compare_options' => 'Compare Options',
'wishlist-options' => 'Wishlist Options'
],
// 'reviews' => [

View File

@ -438,6 +438,7 @@ return [
'available-for-order' => 'Dostępne na zamówienie',
'settings' => 'Settings',
'compare_options' => 'Compare Options',
'wishlist-options' => 'Wishlist Options'
],
// 'reviews' => [

View File

@ -428,6 +428,7 @@ return [
'available-for-order' => 'Disponível para encomenda',
'settings' => 'Settings',
'compare_options' => 'Compare Options',
'wishlist-options' => 'Wishlist Options'
],
// 'reviews' => [

View File

@ -438,6 +438,7 @@ return [
'available-for-order' => 'Sipariş İçin Uygun',
'settings' => 'Settings',
'compare_options' => 'Compare Options',
'wishlist-options' => 'Wishlist Options'
],
// 'reviews' => [

View File

@ -87,13 +87,19 @@
<a href="{{ route('shop.checkout.cart.remove', $item->id) }}" onclick="removeLink('{{ __('shop::app.checkout.cart.cart-remove-action') }}')">{{ __('shop::app.checkout.cart.remove-link') }}</a></span>
@auth('customer')
<span class="towishlist">
@if ($item->parent_id != 'null' ||$item->parent_id != null)
<a href="{{ route('shop.movetowishlist', $item->id) }}" onclick="removeLink('{{ __('shop::app.checkout.cart.cart-remove-action') }}')">{{ __('shop::app.checkout.cart.move-to-wishlist') }}</a>
@else
<a href="{{ route('shop.movetowishlist', $item->child->id) }}" onclick="removeLink('{{ __('shop::app.checkout.cart.cart-remove-action') }}')">{{ __('shop::app.checkout.cart.move-to-wishlist') }}</a>
@php
$showWishlist = core()->getConfigData('general.content.shop.wishlist_option') == "1" ? true : false;
@endphp
@if ($showWishlist)
<span class="towishlist">
@if ($item->parent_id != 'null' ||$item->parent_id != null)
<a href="{{ route('shop.movetowishlist', $item->id) }}" onclick="removeLink('{{ __('shop::app.checkout.cart.cart-remove-action') }}')">{{ __('shop::app.checkout.cart.move-to-wishlist') }}</a>
@else
<a href="{{ route('shop.movetowishlist', $item->child->id) }}" onclick="removeLink('{{ __('shop::app.checkout.cart.cart-remove-action') }}')">{{ __('shop::app.checkout.cart.move-to-wishlist') }}</a>
@endif
</span>
@endif
</span>
@endauth
</div>

View File

@ -194,8 +194,14 @@
<tr class="bold">
<td>{{ __('shop::app.customer.account.order.view.total-due') }}</td>
<td>-</td>
<td>{{ core()->formatPrice($order->total_due, $order->order_currency_code) }}</td>
@if($order->status !== 'canceled')
<td>{{ core()->formatPrice($order->total_due, $order->order_currency_code) }}</td>
@else
<td>{{ core()->formatPrice(0.00, $order->order_currency_code) }}</td>
@endif
</tr>
<tbody>
</table>

View File

@ -11,6 +11,8 @@
<ul class="menubar">
@php
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false;
$showWishlist = core()->getConfigData('general.content.shop.wishlist_option') == "1" ? true : false;
@endphp
@if (! $showCompare)
@ -19,6 +21,12 @@
@endphp
@endif
@if (! $showWishlist)
@php
unset($menuItem['children']['wishlist']);
@endphp
@endif
@foreach ($menuItem['children'] as $subMenuItem)
<li class="menu-item {{ $menu->getActive($subMenuItem) }}">
<a href="{{ $subMenuItem['url'] }}">

View File

@ -150,6 +150,10 @@
@endguest
@auth('customer')
@php
$showWishlist = core()->getConfigData('general.content.shop.wishlist_option') == "1" ? true : false;
@endphp
<ul class="dropdown-list account customer">
<li>
<div>
@ -163,9 +167,11 @@
<a href="{{ route('customer.profile.index') }}">{{ __('shop::app.header.profile') }}</a>
</li>
<li>
<a href="{{ route('customer.wishlist.index') }}">{{ __('shop::app.header.wishlist') }}</a>
</li>
@if ($showWishlist)
<li>
<a href="{{ route('customer.wishlist.index') }}">{{ __('shop::app.header.wishlist') }}</a>
</li>
@endif
<li>
<a href="{{ route('shop.checkout.cart.index') }}">{{ __('shop::app.header.cart') }}</a>
@ -391,4 +397,4 @@
}
});
</script>
@endpush
@endpush

View File

@ -39,7 +39,7 @@
</head>
<body @if (core()->getCurrentLocale()->direction == 'rtl') class="rtl" @endif style="scroll-behavior: smooth;">
<body @if (core()->getCurrentLocale() && core()->getCurrentLocale()->direction == 'rtl') class="rtl" @endif style="scroll-behavior: smooth;">
{!! view_render_event('bagisto.shop.layout.body.before') !!}
@ -103,7 +103,7 @@
@endif
window.serverErrors = [];
@if (isset($errors))
@if (count($errors))
window.serverErrors = @json($errors->getMessages());

View File

@ -1,5 +1,7 @@
@php
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false;
$showWishlist = core()->getConfigData('general.content.shop.wishlist_option') == "1" ? true : false;
@endphp
<div class="cart-wish-wrap">
@ -10,8 +12,10 @@
<button class="btn btn-lg btn-primary addtocart" {{ $product->isSaleable() ? '' : 'disabled' }}>{{ ($product->type == 'booking') ? __('shop::app.products.book-now') : __('shop::app.products.add-to-cart') }}</button>
</form>
@include('shop::products.wishlist')
@if ($showWishlist)
@include('shop::products.wishlist')
@endif
@if ($showCompare)
@include('shop::products.compare', [
'productId' => $product->id

View File

@ -39,12 +39,20 @@
</li>
</ul>
<div class="product-hero-image" id="product-hero-image">
<img :src="currentLargeImageUrl" id="pro-img" :data-image="currentOriginalImageUrl" alt=""/>
@auth('customer')
<a @if ($wishListHelper->getWishlistProduct($product)) class="add-to-wishlist already" @else class="add-to-wishlist" @endif href="{{ route('customer.wishlist.add', $product->product_id) }}">
</a>
@php
$showWishlist = core()->getConfigData('general.content.shop.wishlist_option') == "1" ? true : false;
@endphp
@if ($showWishlist)
<a @if ($wishListHelper->getWishlistProduct($product)) class="add-to-wishlist already" @else class="add-to-wishlist" @endif href="{{ route('customer.wishlist.add', $product->product_id) }}">
</a>
@endif
@endauth
</div>

File diff suppressed because one or more lines are too long

View File

@ -1,18 +1,18 @@
/* flatpickr v4.6.3, @license MIT */
/* flatpickr v4.6.6, @license MIT */
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
Copyright (c) Microsoft Corporation.
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/**

View File

@ -1,4 +1,4 @@
{
"/js/ui.js": "/js/ui.js?id=706b63016a08ec91d32b",
"/js/ui.js": "/js/ui.js?id=2cf17b86ea451828fd09",
"/css/ui.css": "/css/ui.css?id=5673703005b2ac3d0889"
}

View File

@ -479,6 +479,146 @@ abstract class DataGrid
$filter_value
);
}
} elseif ($columnType === 'boolean') {
if ($this->enableFilterMap && isset($this->filterMap[$columnName])) {
if ($this->operators[$condition] == '=') {
if ($filter_value == 1) {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$this->filterMap[$columnName],
$this->operators[$condition],
$filter_value
)->orWhereNotNull($this->filterMap[$columnName]);
});
} else {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$this->filterMap[$columnName],
$this->operators[$condition],
$filter_value
)->orWhereNull($this->filterMap[$columnName]);
});
}
} elseif ($this->operators[$condition] == '<>') {
if ($filter_value == 1) {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$this->filterMap[$columnName],
$this->operators[$condition],
$filter_value
)->orWhereNull($this->filterMap[$columnName]);
});
} else {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$this->filterMap[$columnName],
$this->operators[$condition],
$filter_value
)->orWhereNotNull($this->filterMap[$columnName]);
});
}
} else {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$this->filterMap[$columnName],
$this->operators[$condition],
$filter_value
);
});
}
} elseif ($this->enableFilterMap && ! isset($this->filterMap[$columnName])) {
if ($this->operators[$condition] == '=') {
if ($filter_value == 1) {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$columnName,
$this->operators[$condition],
$filter_value
)->orWhereNotNull($this->filterMap[$columnName]);
});
} else {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$columnName,
$this->operators[$condition],
$filter_value
)->orWhereNull($this->filterMap[$columnName]);
});
}
} elseif ($this->operators[$condition] == '<>') {
if ($filter_value == 1) {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$columnName,
$this->operators[$condition],
$filter_value
)->orWhereNull($this->filterMap[$columnName]);
});
} else {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$columnName,
$this->operators[$condition],
$filter_value
)->orWhereNotNull($this->filterMap[$columnName]);
});
}
} else {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$columnName,
$this->operators[$condition],
$filter_value
);
});
}
} else {
if ($this->operators[$condition] == '=') {
if ($filter_value == 1) {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$columnName,
$this->operators[$condition],
$filter_value
)->orWhereNotNull($this->filterMap[$columnName]);
});
} else {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$columnName,
$this->operators[$condition],
$filter_value
)->orWhereNull($this->filterMap[$columnName]);
});
}
} elseif ($this->operators[$condition] == '<>') {
if ($filter_value == 1) {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$columnName,
$this->operators[$condition],
$filter_value
)->orWhereNull($this->filterMap[$columnName]);
});
} else {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$columnName,
$this->operators[$condition],
$filter_value
)->orWhereNotNull($this->filterMap[$columnName]);
});
}
} else {
$collection->Where(function($query) use($columnName, $condition, $filter_value) {
$query->where(
$columnName,
$this->operators[$condition],
$filter_value
);
});
}
}
} else {
if ($this->enableFilterMap && isset($this->filterMap[$columnName])) {
$collection->where(

View File

@ -1,54 +1,73 @@
<template>
<span>
<slot>
<input type="text" :name="name" class="control" :value="value" data-input>
</slot>
<span
class="icon cross-icon"
v-if="! hideRemoveButton"
@click.prevent="clear">
</span>
</span>
<span>
<slot>
<input
type="text"
:name="name"
class="control"
:value="value"
data-input
/>
</slot>
<span
class="icon cross-icon"
v-if="!hideRemoveButton"
@click.prevent="clear"
>
</span>
</span>
</template>
<script>
import Flatpickr from 'flatpickr';
import Flatpickr from "flatpickr";
export default {
props: {
name: String,
props: {
name: String,
value: String,
value: String,
hideRemoveButton: [Number, String]
},
minDate: String,
data () {
return {
datepicker: null
}
},
maxDate: String,
mounted () {
var this_this = this;
hideRemoveButton: [Number, String],
},
var element = this.$el.getElementsByTagName('input')[0];
this.datepicker = new Flatpickr(
element, {
allowInput: true,
altFormat: 'Y-m-d',
dateFormat: 'Y-m-d',
weekNumbers: true,
onChange: function(selectedDates, dateStr, instance) {
this_this.$emit('onChange', dateStr)
},
});
},
methods: {
clear() {
this.datepicker.clear();
}
data() {
return {
datepicker: null,
};
},
mounted() {
var this_this = this;
var options = {
allowInput: true,
altFormat: "Y-m-d",
dateFormat: "Y-m-d",
weekNumbers: true,
onChange: function(selectedDates, dateStr, instance) {
this_this.$emit("onChange", dateStr);
},
};
if (this.minDate) {
options.minDate = this.minDate;
}
};
</script>
if (this.maxDate) {
options.maxDate = this.maxDate;
}
var element = this.$el.getElementsByTagName("input")[0];
this.datepicker = new Flatpickr(element, options);
},
methods: {
clear() {
this.datepicker.clear();
},
},
};
</script>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
{
"/js/velocity.js": "/js/velocity.js?id=5564b51adff2922a266b",
"/js/velocity.js": "/js/velocity.js?id=b9eef40002c7ceeef010",
"/css/velocity-admin.css": "/css/velocity-admin.css?id=4322502d80a0e4a0affd",
"/css/velocity.css": "/css/velocity.css?id=309f441b02ca99989315"
"/css/velocity.css": "/css/velocity.css?id=fda6b6f28d7565f01457"
}

View File

@ -132,6 +132,104 @@ class VelocityMetaDataSeeder extends Seeder
'updated_at' => $now,
],
//Wishlist show config data
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'en',
'created_at' => $now,
'updated_at' => $now,
],
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'fr',
'created_at' => $now,
'updated_at' => $now,
],
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'ar',
'created_at' => $now,
'updated_at' => $now,
],
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'de',
'created_at' => $now,
'updated_at' => $now,
],
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'es',
'created_at' => $now,
'updated_at' => $now,
],
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'fa',
'created_at' => $now,
'updated_at' => $now,
],
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'it',
'created_at' => $now,
'updated_at' => $now,
],
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'ja',
'created_at' => $now,
'updated_at' => $now,
],
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'nl',
'created_at' => $now,
'updated_at' => $now,
],
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'pl',
'created_at' => $now,
'updated_at' => $now,
],
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'pt_BR',
'created_at' => $now,
'updated_at' => $now,
],
[
'code' => 'general.content.shop.wishlist_option',
'value' => '1',
'channel_code' => 'default',
'locale_code' => 'tr',
'created_at' => $now,
'updated_at' => $now,
],
/* Image search core config data starts here */
[
'code' => 'general.content.shop.image_search',
@ -232,4 +330,4 @@ class VelocityMetaDataSeeder extends Seeder
/* Image search core config data ends here */
]);
}
}
}

View File

@ -1,6 +1,6 @@
<template>
<form method="POST" @submit.prevent="addToCart">
<!-- for move to cart from wishlist -->
<a
:href="wishlistMoveRoute"

View File

@ -1,5 +1,5 @@
<template>
<div class="magnifier col-12 text-center no-padding">
<div class="magnifier">
<img
:src="src"
:data-zoom-image="src"

View File

@ -12,6 +12,7 @@
<slide
:key="index"
:slot="`slide-${index}`"
title=" "
v-for="(image, index) in product.galleryImages">
<li class="selected" @click="showProductDetails = false">

View File

@ -1,3 +1,9 @@
/*
Added back again because in chrome this is not using and light house also saying not used.
But in mozilla all fonts are gone which creating problem.
*/
@import url('https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap');
//velocity variables
$white-color: #FFFFFF;
$black-color: #111111;

View File

@ -481,8 +481,8 @@ header {
}
}
/* To Do: To avoid CLS reserve width for all locale */
.mini-cart-container {
width: 125px;
height: 50px;
padding: 5px 17px;

View File

@ -241,6 +241,7 @@
img {
width: 100%;
height: auto;
max-height: 190px;
}
}
@ -1677,12 +1678,11 @@
}
.bundle-to {
text-align: center;
display: block;
font-size: 15px !important;
font-weight: 500;
margin-top: 1px;
margin-bottom: 1px;
display: block;
}
}
@ -2336,6 +2336,24 @@
.recetly-viewed-products-wrapper {
padding: 2px;
.price-from {
.bundle-regular-price {
display: none;
}
.bundle-special-price {
font-size: 15px !important;
font-weight: 600;
}
.bundle-to {
display: unset;
margin: 0 2px;
font-size: 15px !important;
font-weight: 500;
}
}
}
.category-page-wrapper {
@ -2463,6 +2481,11 @@
.action {
position: relative;
.btn-add-to-cart {
width: 125px !important;
white-space: pre-wrap;
}
.close-btn {
right: 0;
top: 6px;

View File

@ -1,9 +1,26 @@
.vc-small-screen {
display: none !important;
}
/* large devices */
@media only screen and (max-width: 1192px) {
.sticky-header {
display: block !important;
}
.vc-full-screen {
display: block !important;
}
.vc-small-screen {
display: none !important;
}
#main-category {
display: block !important;
}
.footer {
.footer-content {
.newsletter-subscription {
@ -31,72 +48,7 @@
}
}
@media only screen and (max-width: 992px) {
}
@media only screen and (max-width: 768px) {
.modal-container {
left: 10%;
max-width: 80%;
margin-left: 0px;
}
.footer .footer-list-container {
padding-left: 0px !important;
}
.footer .currency {
display: block !important;
}
.table {
width: 90%;
margin-bottom: 1rem;
margin-top: 68px;
color: #212529;
overflow-x: auto;
}
.per-page {
position: absolute;
margin-top: 66px;
margin-right: -1px;
margin-left: 17px;
width: 151px;
}
.filter-left {
position: relative;
margin-right: -6px!important;
}
.dropdown-filters {
margin-left: 15px;
}
button.btn.btn-sm.btn-primary.apply-filter {
margin-top: 10px;
margin-left: -158px;
}
.lg-card-container.list-card .product-image {
max-height: 85px;
}
.quick-view-btn-container {
left: -26px;
width: 109px;
}
.quick-view-btn-container span {
left: 24%;
top: -24px;
font-size: 13px;
}
}
/* medium devices */
@media only screen and (max-width: 992px) {
$header-height: 50px;
@ -108,14 +60,33 @@
}
}
.main-container-wrapper {
// position: relative;
#webheader {
display: none !important;
position: fixed;
background-color: $white-color;
}
#main-category {
display: none !important;
}
#home-right-bar-container {
position: relative;
top: -48px;
}
.vc-full-screen {
display: none !important;
}
.vc-small-screen {
display: block !important;
}
.force-center {
margin: 0 auto !important;
}
.main-content-wrapper {
z-index: 100;
margin-bottom: 25px;
@ -511,6 +482,7 @@
}
#search-form {
background: transparent;
width: 100%;
.selectdiv {
@ -563,16 +535,11 @@
margin-bottom: 10px;
}
.main-product-image {
display: none;
}
.product-detail {
#product-form {
.form-container {
.left {
top: 0px;
padding: 0px;
position: relative;
margin-bottom: 20px;
@ -580,10 +547,6 @@
width: 100%;
}
}
.right {
padding: 0px;
}
}
}
@ -1025,3 +988,90 @@
display: inline-block;
}
}
/* small devices */
@media only screen and (max-width: 768px) {
.sticky-header {
display: none !important;
}
#home-right-bar-container {
position: unset;
top: unset;
}
.modal-container {
left: 10%;
max-width: 80%;
margin-left: 0px;
}
.footer .footer-list-container {
padding-left: 0px !important;
}
.footer .currency {
display: block !important;
}
.table {
width: 90%;
margin-bottom: 1rem;
margin-top: 68px;
color: #212529;
overflow-x: auto;
}
.per-page {
position: absolute;
margin-top: 66px;
margin-right: -1px;
margin-left: 17px;
width: 151px;
}
.filter-left {
position: relative;
margin-right: -6px!important;
}
.dropdown-filters {
margin-left: 15px;
}
button.btn.btn-sm.btn-primary.apply-filter {
margin-top: 10px;
margin-left: -158px;
}
.lg-card-container.list-card .product-image {
max-height: 85px;
}
.quick-view-btn-container {
left: -26px;
width: 109px;
}
.quick-view-btn-container span {
left: 24%;
top: -24px;
font-size: 13px;
}
.quick-view-in-list {
display: none;
}
}
/* very small devices */
@media only screen and (max-width: 320px) {
.sticky-header {
display: none !important;
}
#home-right-bar-container {
position: unset;
top: unset;
}
}

View File

@ -166,8 +166,28 @@
}
.product-price {
.sticker {
display: none;
height: unset;
.price-from {
.bundle-regular-price {
font-size: 20px !important;
font-weight: 500;
margin-right: 10px;
text-decoration: line-through;
}
.bundle-special-price {
font-size: 20px !important;
font-weight: 600;
}
.bundle-to {
display: block;
font-size: 20px !important;
font-weight: 500;
margin-top: 1px;
margin-bottom: 1px;
}
}
}

View File

@ -207,6 +207,14 @@ body {
right: 20px;
}
}
#account {
+ .account-modal {
.modal-content {
float: left;
}
}
}
}
#cart-modal-content {

View File

@ -509,7 +509,6 @@
.add-to-cart-btn {
float: left;
max-width: 150px;
display: inline-block;
}
}

View File

@ -40,9 +40,9 @@ return [
]
],
'layouts' => [
'velocity' => 'Velocity',
'velocity' => '● السرعة',
'cms-pages' => 'CMS الصفحات',
'meta-data' => 'Meta Data',
'meta-data' => 'البيانات الوصفية',
'category-menu' => 'قائمة الفئة',
'header-content' => 'محتوى الرأس',
],
@ -91,7 +91,7 @@ return [
],
'meta-data' => [
'footer' => 'تذييل',
'title' => 'Velocity meta data',
'title' => 'البيانات الوصفية السرعة',
'activate-slider' => 'تنشيط شريط التمرير',
'home-page-content' => 'محتوى الصفحة الرئيسية',
'footer-left-content' => 'تذييل يسار المحتوى',

View File

@ -1,7 +1,7 @@
@push('scripts')
<script type="text/x-template" id="content-header-template">
<header class="row velocity-divide-page vc-header header-shadow active">
<div class="vc-small-screen container" v-if="isMobile()">
<div class="vc-small-screen container">
<div class="row">
<div class="col-6">
<div v-if="hamburger" class="nav-container scrollable">
@ -370,7 +370,7 @@
</div>
<div
v-else
id="main-category"
@mouseout="toggleSidebar('0', $event, 'mouseout')"
@mouseover="toggleSidebar('0', $event, 'mouseover')"
:class="`main-category fs16 unselectable fw6 ${($root.sharedRootCategories.length > 0) ? 'cursor-pointer' : 'cursor-not-allowed'} left`">

View File

@ -76,7 +76,7 @@
class="btn-toolbar full-width"
role="toolbar">
<div class="btn-group full-width">
<div class="btn-group full-width force-center">
<div class="selectdiv">
<select class="form-control fs13 styled-select" name="category" @change="focusInput($event)" aria-label="Category">
<option value="">
@ -124,13 +124,16 @@
</div>
</div>
<div class="col-lg-7 col-md-12">
<div class="col-lg-7 col-md-12 vc-full-screen">
{!! view_render_event('bagisto.shop.layout.header.cart-item.before') !!}
@include('shop::checkout.cart.mini-cart')
{!! view_render_event('bagisto.shop.layout.header.cart-item.after') !!}
@php
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false;
$showWishlist = core()->getConfigData('general.content.shop.wishlist_option') == "1" ? true : false;
@endphp
{!! view_render_event('bagisto.shop.layout.header.compare.before') !!}
@ -156,13 +159,15 @@
{!! view_render_event('bagisto.shop.layout.header.compare.after') !!}
{!! view_render_event('bagisto.shop.layout.header.wishlist.before') !!}
<a class="wishlist-btn unset" :href="`{{ route('customer.wishlist.index') }}`">
<i class="material-icons">favorite_border</i>
<div class="badge-container" v-if="wishlistCount > 0">
<span class="badge" v-text="wishlistCount"></span>
</div>
<span>{{ __('shop::app.layouts.wishlist') }}</span>
</a>
@if($showWishlist)
<a class="wishlist-btn unset" :href="`{{ route('customer.wishlist.index') }}`">
<i class="material-icons">favorite_border</i>
<div class="badge-container" v-if="wishlistCount > 0">
<span class="badge" v-text="wishlistCount"></span>
</div>
<span>{{ __('shop::app.layouts.wishlist') }}</span>
</a>
@endif
{!! view_render_event('bagisto.shop.layout.header.wishlist.after') !!}
</div>
</div>

View File

@ -17,6 +17,10 @@
width: unset;
float: right;
}
.alert-wishlist {
display: inline-block;
}
</style>
@endpush
@ -114,20 +118,28 @@
@php
$moveToWishlist = trans('shop::app.checkout.cart.move-to-wishlist');
$showWishlist = core()->getConfigData('general.content.shop.wishlist_option') == "1" ? true : false;
@endphp
<div class="no-padding col-12 cursor-pointer fs16">
@auth('customer')
@if ($item->parent_id != 'null' ||$item->parent_id != null)
@include('shop::products.wishlist', [
'route' => route('shop.movetowishlist', $item->id),
'text' => "<span class='align-vertical-super'>$moveToWishlist</span>"
])
@else
@include('shop::products.wishlist', [
'route' => route('shop.movetowishlist', $item->child->id),
'text' => "<span class='align-vertical-super'>$moveToWishlist</span>"
])
@if ($showWishlist)
@if ($item->parent_id != 'null' ||$item->parent_id != null)
<div @click="removeLink('{{ __('shop::app.checkout.cart.cart-remove-action') }}')" class="alert-wishlist">
@include('shop::products.wishlist', [
'route' => route('shop.movetowishlist', $item->id),
'text' => "<span class='align-vertical-super'>$moveToWishlist</span>"
])
</div>
@else
<div @click="removeLink('{{ __('shop::app.checkout.cart.cart-remove-action') }}')" class="alert-wishlist">
@include('shop::products.wishlist', [
'route' => route('shop.movetowishlist', $item->child->id),
'text' => "<span class='align-vertical-super'>$moveToWishlist</span>"
])
</div>
@endif
@endif
@endauth

View File

@ -208,7 +208,12 @@
<td>{{ __('shop::app.customer.account.order.view.total-due') }}
<span class="dash-icon">-</span>
</td>
<td>{{ core()->formatPrice($order->total_due, $order->order_currency_code) }}</td>
@if($order->status !== 'canceled')
<td>{{ core()->formatPrice($order->total_due, $order->order_currency_code) }}</td>
@else
<td>{{ core()->formatPrice(0.00, $order->order_currency_code) }}</td>
@endif
</tr>
<tbody>
</table>

View File

@ -15,11 +15,16 @@
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false;
$showWishlist = core()->getConfigData('general.content.shop.wishlist_option') == "1" ? true : false;
try {
$subMenuCollection['profile'] = $menuItem['children']['profile'];
$subMenuCollection['orders'] = $menuItem['children']['orders'];
$subMenuCollection['downloadables'] = $menuItem['children']['downloadables'];
$subMenuCollection['wishlist'] = $menuItem['children']['wishlist'];
if ($showWishlist) {
$subMenuCollection['wishlist'] = $menuItem['children']['wishlist'];
}
if ($showCompare) {
$subMenuCollection['compare'] = $menuItem['children']['compare'];
@ -66,4 +71,4 @@
min-height: 100vh;
}
</style>
@endpush
@endpush

View File

@ -9,13 +9,13 @@
@push('scripts')
<script type="text/x-template" id="featured-products-template">
<div class="container-fluid featured-products">
<shimmer-component v-if="isLoading && !isMobileView"></shimmer-component>
<shimmer-component v-if="isLoading"></shimmer-component>
<template v-else-if="featuredProducts.length > 0">
<card-list-header heading="{{ __('shop::app.home.featured-products') }}">
</card-list-header>
<div class="carousel-products vc-full-screen {{ $direction }}" v-if="!isMobileView">
<div class="carousel-products vc-full-screen {{ $direction }}">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
@ -37,7 +37,7 @@
</carousel-component>
</div>
<div class="carousel-products vc-small-screen {{ $direction }}" v-else>
<div class="carousel-products vc-small-screen {{ $direction }}">
<carousel-component
slides-per-page="2"
navigation-enabled="hide"

View File

@ -9,7 +9,7 @@
@push('scripts')
<script type="text/x-template" id="new-products-template">
<div class="container-fluid">
<shimmer-component v-if="isLoading && !isMobileView"></shimmer-component>
<shimmer-component v-if="isLoading"></shimmer-component>
<template v-else-if="newProducts.length > 0">
<card-list-header heading="{{ __('shop::app.home.new-products') }}">
@ -27,7 +27,7 @@
@endpush
<div class="row {{ $direction }}">
<div class="col-9 no-padding carousel-products vc-full-screen with-recent-viewed" v-if="!isMobileView">
<div class="col-9 no-padding carousel-products vc-full-screen with-recent-viewed">
<carousel-component
slides-per-page="5"
navigation-enabled="hide"
@ -48,7 +48,7 @@
</carousel-component>
</div>
<div class="col-12 no-padding carousel-products vc-small-screen" v-else>
<div class="col-12 no-padding carousel-products vc-small-screen">
<carousel-component
slides-per-page="2"
navigation-enabled="hide"
@ -75,7 +75,7 @@
])
</div>
@else
<div class="carousel-products vc-full-screen {{ $direction }}" v-if="!isMobileView">
<div class="carousel-products vc-full-screen {{ $direction }}">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
@ -96,7 +96,7 @@
</carousel-component>
</div>
<div class="carousel-products vc-small-screen {{ $direction }}" v-else>
<div class="carousel-products vc-small-screen {{ $direction }}">
<carousel-component
slides-per-page="2"
navigation-enabled="hide"

View File

@ -24,7 +24,7 @@
@php
$textContent = str_replace("\r\n", '', $slider['content']);
@endphp
<slide slot="slide-{{ $index }}">
<slide slot="slide-{{ $index }}" title=" ">
<a @if($slider['slider_path']) href="{{ $slider['slider_path'] }}" @endif>
<img
class="col-12 no-padding banner-icon"

View File

@ -1,4 +1,4 @@
<header class="sticky-header" v-if="!isMobile()">
<header class="sticky-header">
<div class="row remove-padding-margin velocity-divide-page">
<logo-component add-class="navbar-brand"></logo-component>
<searchbar-component></searchbar-component>

View File

@ -20,7 +20,7 @@
<link rel="stylesheet" href="{{ asset('themes/velocity/assets/css/velocity.css') }}" />
<link rel="stylesheet" href="{{ asset('themes/velocity/assets/css/bootstrap.min.css') }}" />
@if (core()->getCurrentLocale()->direction == 'rtl')
@if (core()->getCurrentLocale() && core()->getCurrentLocale()->direction == 'rtl')
<link href="{{ asset('themes/velocity/assets/css/bootstrap-flipped.css') }}" rel="stylesheet">
@endif
@ -45,7 +45,7 @@
</style>
</head>
<body @if (core()->getCurrentLocale()->direction == 'rtl') class="rtl" @endif>
<body @if (core()->getCurrentLocale() && core()->getCurrentLocale()->direction == 'rtl') class="rtl" @endif>
{!! view_render_event('bagisto.shop.layout.body.before') !!}
@include('shop::UI.particals')

View File

@ -83,14 +83,18 @@
<a href="{{ route('customer.orders.index') }}" class="unset">{{ __('velocity::app.shop.general.orders') }}</a>
</li>
<li>
<a href="{{ route('customer.wishlist.index') }}" class="unset">{{ __('shop::app.header.wishlist') }}</a>
</li>
@php
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false;
$showWishlist = core()->getConfigData('general.content.shop.wishlist_option') == "1" ? true : false;
@endphp
@if ($showWishlist)
<li>
<a href="{{ route('customer.wishlist.index') }}" class="unset">{{ __('shop::app.header.wishlist') }}</a>
</li>
@endif
@if ($showCompare)
<li>
<a href="{{ route('velocity.customer.product.compare') }}" class="unset">{{ __('velocity::app.customer.compare.text') }}</a>

View File

@ -17,7 +17,7 @@
></compare-component>
@endif
@if (! (isset($showWishlist) && !$showWishlist))
@if (! (isset($showWishlist) && !$showWishlist) && core()->getConfigData('general.content.shop.wishlist_option'))
@include('shop::products.wishlist', [
'addClass' => $addWishlistClass ?? ''
])

View File

@ -87,94 +87,96 @@
<input type="hidden" name="product_id" value="{{ $product->product_id }}">
{{-- product-gallery --}}
<div class="left col-lg-5">
@include ('shop::products.view.gallery')
</div>
<div class="row">
{{-- product-gallery --}}
<div class="left col-lg-5 col-md-6">
@include ('shop::products.view.gallery')
</div>
{{-- right-section --}}
<div class="right col-lg-7">
{{-- product-info-section --}}
<div class="row info">
<h2 class="col-lg-12">{{ $product->name }}</h2>
{{-- right-section --}}
<div class="right col-lg-7 col-md-6">
{{-- product-info-section --}}
<div class="row info">
<h2 class="col-12">{{ $product->name }}</h2>
@if ($total)
<div class="reviews col-lg-12">
<star-ratings
push-class="mr5"
:ratings="{{ $avgStarRating }}"
></star-ratings>
@if ($total)
<div class="reviews col-lg-12">
<star-ratings
push-class="mr5"
:ratings="{{ $avgStarRating }}"
></star-ratings>
<div class="reviews">
<span>
{{ __('shop::app.reviews.ratingreviews', [
'rating' => $avgRatings,
'review' => $total])
}}
</span>
<div class="reviews">
<span>
{{ __('shop::app.reviews.ratingreviews', [
'rating' => $avgRatings,
'review' => $total])
}}
</span>
</div>
</div>
@endif
@include ('shop::products.view.stock', ['product' => $product])
<div class="col-12 price">
@include ('shop::products.price', ['product' => $product])
</div>
<div class="product-actions">
@include ('shop::products.add-to-cart', [
'form' => false,
'product' => $product,
'showCartIcon' => false,
'showCompare' => core()->getConfigData('general.content.shop.compare_option') == "1"
? true : false,
])
</div>
</div>
{!! view_render_event('bagisto.shop.products.view.short_description.before', ['product' => $product]) !!}
@if ($product->short_description)
<div class="description">
<h3 class="col-lg-12">{{ __('velocity::app.products.short-description') }}</h3>
{!! $product->short_description !!}
</div>
@endif
@include ('shop::products.view.stock', ['product' => $product])
{!! view_render_event('bagisto.shop.products.view.short_description.after', ['product' => $product]) !!}
<div class="col-12 price">
@include ('shop::products.price', ['product' => $product])
</div>
<div class="product-actions">
@include ('shop::products.add-to-cart', [
'form' => false,
'product' => $product,
'showCartIcon' => false,
'showCompare' => core()->getConfigData('general.content.shop.compare_option') == "1"
? true : false,
])
</div>
{!! view_render_event('bagisto.shop.products.view.quantity.before', ['product' => $product]) !!}
@if ($product->getTypeInstance()->showQuantityBox())
<div>
<quantity-changer></quantity-changer>
</div>
@else
<input type="hidden" name="quantity" value="1">
@endif
{!! view_render_event('bagisto.shop.products.view.quantity.after', ['product' => $product]) !!}
@include ('shop::products.view.configurable-options')
@include ('shop::products.view.downloadable')
@include ('shop::products.view.grouped-products')
@include ('shop::products.view.bundle-options')
@include ('shop::products.view.attributes', [
'active' => true
])
{{-- product long description --}}
@include ('shop::products.view.description')
{{-- reviews count --}}
@include ('shop::products.view.reviews', ['accordian' => true])
</div>
{!! view_render_event('bagisto.shop.products.view.short_description.before', ['product' => $product]) !!}
@if ($product->short_description)
<div class="description">
<h3 class="col-lg-12">{{ __('velocity::app.products.short-description') }}</h3>
{!! $product->short_description !!}
</div>
@endif
{!! view_render_event('bagisto.shop.products.view.short_description.after', ['product' => $product]) !!}
{!! view_render_event('bagisto.shop.products.view.quantity.before', ['product' => $product]) !!}
@if ($product->getTypeInstance()->showQuantityBox())
<div>
<quantity-changer></quantity-changer>
</div>
@else
<input type="hidden" name="quantity" value="1">
@endif
{!! view_render_event('bagisto.shop.products.view.quantity.after', ['product' => $product]) !!}
@include ('shop::products.view.configurable-options')
@include ('shop::products.view.downloadable')
@include ('shop::products.view.grouped-products')
@include ('shop::products.view.bundle-options')
@include ('shop::products.view.attributes', [
'active' => true
])
{{-- product long description --}}
@include ('shop::products.view.description')
{{-- reviews count --}}
@include ('shop::products.view.reviews', ['accordian' => true])
</div>
</div>
</product-view>

View File

@ -12,20 +12,22 @@
{!! view_render_event('bagisto.shop.products.view.gallery.before', ['product' => $product]) !!}
<div class="product-image-group">
<div class="row col-12">
<magnify-image src="{{ $images[0]['large_image_url'] }}" v-if="!isMobile()">
</magnify-image>
<div class="row">
<div class="col-12">
<magnify-image src="{{ $images[0]['large_image_url'] }}" v-if="!isMobile()">
</magnify-image>
<img
v-else
class="vc-small-product-image"
src="{{ $images[0]['large_image_url'] }}" alt="" />
<img
v-else
class="vc-small-product-image"
src="{{ $images[0]['large_image_url'] }}" alt="" />
</div>
</div>
<div class="row col-12">
<product-gallery></product-gallery>
<div class="row">
<div class="col-12">
<product-gallery></product-gallery>
</div>
</div>
</div>
{!! view_render_event('bagisto.shop.products.view.gallery.after', ['product' => $product]) !!}
@ -156,7 +158,6 @@
<script>
$(document).ready(() => {
/* waiting for the window to appear */
let waitForEl = function(selector, callback) {
if (jQuery(selector).length) {
@ -168,8 +169,11 @@
/* positioning when .zoomWindow div available */
waitForEl('.zoomWindow', function() {
let zoomContainer = $('.zoomContainer');
zoomContainer.css('z-index', 'unset');
if ($('body').hasClass("rtl")) {
let widthOfImage = $('.zoomContainer').width();
let widthOfImage = zoomContainer.width();
$('.zoomWindow').css('right', `${widthOfImage}px`);
}
});