Merge 'bagisto-master' into admin-backend/keep-search-terms-after-new-page-load
20
.env.example
|
|
@ -47,3 +47,23 @@ PUSHER_APP_CLUSTER=mt1
|
|||
|
||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||
|
||||
FACEBOOK_CLIENT_ID=
|
||||
FACEBOOK_CLIENT_SECRET=
|
||||
FACEBOOK_CALLBACK_URL=https://yourhost.com/customer/social-login/facebook/callback
|
||||
|
||||
TWITTER_CLIENT_ID=
|
||||
TWITTER_CLIENT_SECRET=
|
||||
TWITTER_CALLBACK_URL=https://yourhost.com/customer/social-login/twitter/callback
|
||||
|
||||
GOGGLE_CLIENT_ID=
|
||||
GOGGLE_CLIENT_SECRET=
|
||||
GOGGLE_CALLBACK_URL=https://yourhost.com/customer/social-login/google/callback
|
||||
|
||||
LINKEDIN_CLIENT_ID=
|
||||
LINKEDIN_CLIENT_SECRET=
|
||||
LINKEDIN_CALLBACK_URL=https://yourhost.com/customer/social-login/linkedin/callback
|
||||
|
||||
GITHUB_CLIENT_ID=
|
||||
GITHUB_CLIENT_SECRET=
|
||||
GITHUB_CALLBACK_URL=https://yourhost.com/customer/social-login/github/callback
|
||||
|
|
@ -2,6 +2,319 @@
|
|||
|
||||
#### This changelog consists the bug & security fixes and new features being included in the releases listed below.
|
||||
|
||||
## **v1.1.3 (19th of June 2020)** - *Release*
|
||||
|
||||
* [feature] - Customer group price for products implemented
|
||||
|
||||
* [feature] - Image search feature added with tensorflow.js
|
||||
|
||||
* [feature] - Migrated to Laravel 7
|
||||
|
||||
* [feature] - Search engine optimization with rich snippet
|
||||
|
||||
|
||||
* #343 [fixed] - Translation strings are missing from awful amount of controllers when returning responses with flash. And optimise translation strings for faster static translations.
|
||||
|
||||
* #824 [fixed] - Framework is not supporting I.E 11 browser.
|
||||
|
||||
* #838 [fixed] - Packages as composer dependency
|
||||
|
||||
* #985 [fixed] - Dynamically insert products
|
||||
|
||||
* #1258 [fixed] - If payment is done through paypal then invoice should generate automatically and status of Order should be processing.
|
||||
|
||||
* #1362 [fixed] - Site logo and Category Image are broken
|
||||
|
||||
* #1370 [fixed] - install fails at the last step
|
||||
|
||||
* #1522 [fixed] - Quick Links broken
|
||||
|
||||
* #1656 [fixed] - Validation error in Phone Field while Adding Address
|
||||
|
||||
* #1981 [fixed] - If customer update his address at time of checkout and save this address then address doesn't get save and also on checkout page old address displays.
|
||||
|
||||
* #2009 [fixed] - Using AWS S3 for storage
|
||||
|
||||
* #2060 [fixed] - auto generate coupon accordion not getting hidden while selecting no specific coupons
|
||||
|
||||
* #2159 [fixed] - Taking more time to load product details in shopping cart.
|
||||
|
||||
* #2415 [fixed] - Add TO CART button should replace by “BOOk NOW” button for booking product.
|
||||
|
||||
* #2590 [fixed] - hi everyone i'm wondering if customers after register could give a referral code ??
|
||||
|
||||
* #2702 [fixed] - Getting broken image for products and category.
|
||||
|
||||
* #2720 [fixed] - Error during migration on php artisan migrate
|
||||
|
||||
* #2725 [fixed] - Variants should not be created if cofigurable product created failed
|
||||
|
||||
* #2762 [fixed] - Seeder: SQL Error: Duplicate entry for '1' key 'PRIMARY'
|
||||
|
||||
* #2766 [fixed] - Needs User friendly UI for the event booking in product page
|
||||
|
||||
* #2789 [fixed] - Product channel and locale dropdowns in the admin dashboard not working
|
||||
|
||||
* #2795 [fixed] - Cart error merging if you authenticate having items with low stock
|
||||
|
||||
* #2800 [fixed] - Add the ability to change Attribute Family for Products
|
||||
|
||||
* #2804 [fixed] - There should be order review section instead of complete section on checkout page
|
||||
|
||||
* #2805 [fixed] - the sku should be all in caps
|
||||
|
||||
* #2844 [fixed] - showing product image of each color in configurable product
|
||||
|
||||
* #2863 [fixed] - Search Product Name and Description
|
||||
|
||||
* #2868 [fixed] - Cart (customer) address not persisted during the checkout
|
||||
|
||||
* #2874 [fixed] - Order, payment process and payment metadata
|
||||
|
||||
* #2888 [fixed] - Always Default locale should be selected when add new product for each channels
|
||||
|
||||
* #2889 [fixed] - timezone drop down field is not visible in web installer
|
||||
|
||||
* #2893 [fixed] - When creating a shipment, display items invoiced
|
||||
|
||||
* #2931 [fixed] - Customer pays order in PayPal but there is no record in bagisto
|
||||
|
||||
* #2936 [fixed] - change the admin route for another
|
||||
|
||||
* #2942 [fixed] - Randomize New and Featured Products
|
||||
|
||||
* #2949 [fixed] - failed to migrate with new database using installer
|
||||
|
||||
* #2950 [fixed] - multiple error message on installer
|
||||
|
||||
* #2964 [fixed] - Exception when buying non stockable item via API
|
||||
|
||||
* #2969 [fixed] - Cancel icon is not visible in velocity theme for customer order detail
|
||||
|
||||
* #2972 [fixed] - can add to homescreen on mobile device in velocity theme
|
||||
|
||||
* #2974 [fixed] - Thumbnails are not generating on mobile ifproduct has more than 4 photos
|
||||
|
||||
* #2886 [fixed] - Configuration option for Compare
|
||||
|
||||
* #2985 [fixed] - Product category is not saving
|
||||
|
||||
* #2987 [fixed] - mult address
|
||||
|
||||
* #2990 [fixed] - Facebook Pixel integration for Laravel
|
||||
|
||||
* #2991 [fixed] - Filters not showing in small devices
|
||||
|
||||
* #2994 [fixed] - Shipping method not getting updated after changing the zip code.
|
||||
|
||||
* #2995 [fixed] - filter is not showing when search product from search bar
|
||||
|
||||
* #2996 [fixed] - Incomplete products JSON when type is grouped or bundled
|
||||
|
||||
* #2997 [fixed] - Category show sidebar
|
||||
|
||||
* #3000 [fixed] - arabic product in home page Not lined up in one format
|
||||
|
||||
* #3001 [fixed] - Getting Error Exception when view order details
|
||||
|
||||
* #3004 [fixed] - Category Deactivation not working
|
||||
|
||||
* #3005 [fixed] - One page checkout creating new address in profile every time.
|
||||
|
||||
* #3009 [fixed] - Featured product slider and new product slider is not working
|
||||
|
||||
* #3011 [fixed] - The product is in cart or not
|
||||
|
||||
* #3014 [fixed] - Support for Responsive Admin Panel
|
||||
|
||||
* #3018 [fixed] - Icons are not showing on imac
|
||||
|
||||
* #3020 [fixed] - Images can not add on velocity theme
|
||||
|
||||
* #3021 [fixed] - Deactivating the last category of level1 renders only level2 etc. from deactivated category
|
||||
|
||||
* #3022 [fixed] - storage/ should not be included in .gitignore
|
||||
|
||||
* #3024 [fixed] - Blank order comment shouldn't added
|
||||
|
||||
* #3025 [fixed] - save address return error 500
|
||||
|
||||
* #3026 [fixed] - Date validation error when editing Booking Products
|
||||
|
||||
* #3029 [fixed] - velocity theme not fully responsive
|
||||
|
||||
* #3032 [fixed] - [Critical] Onecheckout preventing to continue to shipping method after selecting address
|
||||
|
||||
* #3035 [fixed] - Please update pwa for bagisto
|
||||
|
||||
* #3036 [fixed] - Shipping address options not shown
|
||||
|
||||
* #3037 [fixed] - error mysql 8.0.20 bagisto v 1.1.2
|
||||
|
||||
* #3038 [fixed] - Trying to get property 'code' of non-object
|
||||
|
||||
* #3040 [fixed] - Api logout not working..
|
||||
|
||||
* #3044 [fixed] - Getting exception when click on view shopping cart if adding group product in cart that contains variants of configurable product.
|
||||
|
||||
* #3047 [fixed] - The qty of configurable product is 0 when merging cart
|
||||
|
||||
* #3048 [fixed] - "nwidart/laravel-modules": "^3.2", is the wrong version for laravel 6.*
|
||||
|
||||
* #3050 [fixed] - Can't override models
|
||||
|
||||
* #3051 [fixed] - error while migrate bagisto manually from console command
|
||||
|
||||
* #3053 [fixed] - [Velocity] Checkout: Shipping/Billing Address Name, email does not get updated
|
||||
|
||||
* #3054 [fixed] - customer is getting exception while cancel order
|
||||
|
||||
* #3061 [fixed] - CORS errors
|
||||
|
||||
* #3067 [fixed] - PHP Notice: date_default_timezone_set(): Timezone ID 'Asia/JakartaAsia/Kolkata' is invalid
|
||||
|
||||
* #3068 [fixed] - Inactive inventory source are get select in channel and products
|
||||
|
||||
* #3070 [fixed] - Edit Attribute -> Add Option or Swatch Item Error 404 for Indonesia(id) country code
|
||||
|
||||
* #3073 [fixed] - HTML entities are not being decoded when editing attribute options
|
||||
|
||||
* #3076 [fixed] - checkout disable when add new shipping address
|
||||
|
||||
* #3077 [fixed] - How to change validation messages to spanish not working
|
||||
|
||||
* #3079 [fixed] - Tracking Number in My Account
|
||||
|
||||
* #3087 [fixed] - after installation, first product registration does not open detailed page, I only opened from the second product
|
||||
|
||||
* #3089 [fixed] - not getting price after changing configurable options
|
||||
|
||||
* #3090 [fixed] - error mysql8
|
||||
|
||||
* #3095 [fixed] - pending orders detail page is blank when viewing in arabic locale
|
||||
|
||||
* #3096 [fixed] - error when add product in compare list from the search product page
|
||||
|
||||
* #3097 [fixed] - getting console error when remove cart item
|
||||
|
||||
* #3113 [fixed] - catalog storefront configuration for per product page is not working
|
||||
|
||||
* #3115 [fixed] - minify the velocity.js for gtmetrix
|
||||
|
||||
* #3118 [fixed] - Home page doesn't display categories and language bar doesn't work.
|
||||
|
||||
* #3120 [fixed] - admin panel multi locale
|
||||
|
||||
* #3135 [fixed] - How can I cad comment box in checkout form.
|
||||
|
||||
* #3136 [fixed] - configurable product variant name gets removed from the catalog list
|
||||
|
||||
* #3140 [fixed] - API for more than one locale !
|
||||
|
||||
* #3144 [fixed] - error if selecting only one currency
|
||||
|
||||
* #3146 [fixed] - how to configure aws smtp server on bagisto
|
||||
|
||||
* #3150 [fixed] - Attribute not showing on the creating new configurable product page
|
||||
|
||||
* #3153 [fixed] - Free Shipping and Flat Rate Shipping not desable
|
||||
|
||||
* #3158 [fixed] - Column not found: 1054 Unknown column 'symbol' in 'field l
|
||||
|
||||
* #3160 [fixed] - Disabled products are not removed from bundles
|
||||
|
||||
* #3161 [fixed] - Trying to access array offset on value of type null
|
||||
|
||||
* #3164 [fixed] - getting exception when add/edit configurable product
|
||||
|
||||
* #3171 [fixed] - fixed amount is applied on product for customer group price instead of apply in %
|
||||
|
||||
* #3172 [fixed] - description or name is missing for comparable items if customer login
|
||||
|
||||
* #3183 [fixed] - ErrorException
|
||||
|
||||
* #3184 [fixed] - Site showing blank page on 404
|
||||
|
||||
* #3186 [fixed] - replace payment method text with an image on the checkout page
|
||||
|
||||
* #3190 [fixed] - Bagisto v1.1.2 velocity responsive theme issue on iPhone and iPads
|
||||
|
||||
* #3191 [fixed] - Bagisto v1.1.2 velocity responsive theme issue on iPhone and iPads
|
||||
|
||||
* #3197 [fixed] - Call to undefined function str_limit() when view product in velocity theme
|
||||
|
||||
* #3199 [fixed] - Getting exception when click on product.
|
||||
|
||||
* #3202 [fixed] - Getting exception in creating grouped product.
|
||||
|
||||
* #3203 [fixed] - Getting translation issue in price field of downloadable product.
|
||||
|
||||
* #3204 [fixed] - Getting exception when changing currency from search page.
|
||||
|
||||
* #3205 [fixed] - Able to create the product without selecting required toggles button.
|
||||
|
||||
* #3208 [fixed] - Customer group price functionality is not working.
|
||||
|
||||
* #3207 [fixed] - Issue in variant product of configurable, only one variant name display at a time and on refreshing it changes.
|
||||
|
||||
* #3214 [fixed] - Getting exception on forgot password link.
|
||||
|
||||
* #3215 [fixed] - when updating an attribute to 'use_in_flat', bagisto should update the product_flat table with the values of those products
|
||||
|
||||
* #3218 [fixed] - virtual product not shipping step..
|
||||
|
||||
* #3219 [fixed] - fix the date/time format in booking products
|
||||
|
||||
* #3222 [fixed] - UI issue in event ticket booking special price date field
|
||||
|
||||
* #3232 [fixed] - homepage is showing 404 error page in both theme
|
||||
|
||||
* #3234 [fixed] - UI Issue for cart, wishlist, compare icon number indicator in RTL
|
||||
|
||||
* #3236 [fixed] - selected category gets removed from the search in RTL
|
||||
|
||||
* #3235 [fixed] - need space b/w sign in & sign up box in mini login window for RTL
|
||||
|
||||
* #3237 [fixed] - Options of attribute not display as per its position
|
||||
|
||||
* #3238 [fixed] - Trait 'Illuminate\Foundation\Auth\SendsPasswordResetEmails' not found
|
||||
|
||||
* #3240 [fixed] - Payment methods in onepage checkout are not visible completely in RTL
|
||||
|
||||
* #3241 [fixed] - login fields(email,passwords) are in the center when in RTL
|
||||
|
||||
* #3246 [fixed] - fix icon layout in edit booking product page for RTL
|
||||
|
||||
* #3248 [fixed] - fix css for cancel icon on success alert RTL
|
||||
|
||||
* #3249 [fixed] - icons are overlapped in comparison page for RTL
|
||||
|
||||
* #3250 [fixed] - find product by image in search attempt to an error if app_url isn't define
|
||||
|
||||
* #3254 [fixed] - exception on changing locale to Italian
|
||||
|
||||
* #3255 [fixed] - Appointment booking slot duration missing in UI for RTL
|
||||
|
||||
* #3265 [fixed] - recently view product heading is overlapped in RTL
|
||||
|
||||
* #3270 [fixed] - fix icon design on catalog rule when select special price as condition
|
||||
|
||||
* #3272 [fixed] - getting exception when booking product type is not same as cart item for same product id
|
||||
|
||||
* #3273 [fixed] - fix calendar icon present at dashboard in RTL
|
||||
|
||||
* #3274 [fixed] - Installer Blank Page After Migration
|
||||
|
||||
* #3286 [fixed] - fix calendar icon css at admin dashboard
|
||||
|
||||
* #3289 [fixed] - Main product is not showing in catalog grid if configurable product hasn't been created completely.
|
||||
|
||||
* #3297 [fixed] - getting exception when save booking product from edit page
|
||||
|
||||
* #3298 [fixed] - Header content category always redirect to 404 error page
|
||||
|
||||
|
||||
|
||||
## **v1.1.2 (24th of March 2020)** - *Release*
|
||||
|
||||
* [feature] - Now customer can cancel order.
|
||||
|
|
@ -46,8 +359,6 @@
|
|||
|
||||
* #2901 [fixed] - Error when creating a category
|
||||
|
||||
* #2902 [fixed] - unify address tables
|
||||
|
||||
* #2908 [fixed] - A class is missing from the Velocity ProductRepositiry file
|
||||
|
||||
* #2914 [fixed] - Filter not showing on mobile, also sorting not working on mobile
|
||||
|
|
@ -205,6 +516,8 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
## **v1.1.0 (24th of March 2020)** - *Release*
|
||||
|
||||
* [feature] Added new booking type product.
|
||||
|
|
|
|||
|
|
@ -12,6 +12,6 @@ class VerifyCsrfToken extends Middleware
|
|||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
'paypal/standard/ipn'
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,22 +18,24 @@
|
|||
"ext-pdo_mysql": "*",
|
||||
"ext-tokenizer": "*",
|
||||
"astrotomic/laravel-translatable": "^11.0.0",
|
||||
"barryvdh/laravel-debugbar": "^3.1",
|
||||
"barryvdh/laravel-dompdf": "0.8.6",
|
||||
"doctrine/dbal": "2.9.2",
|
||||
"fideloper/proxy": "^4.2",
|
||||
"flynsarmy/db-blade-compiler": "^5.5",
|
||||
"fzaninotto/faker": "^1.9.1",
|
||||
"guzzlehttp/guzzle": "~6.3",
|
||||
"intervention/image": "^2.4",
|
||||
"intervention/imagecache": "^2.3",
|
||||
"kalnoy/nestedset": "5.0.1",
|
||||
"konekt/concord": "^1.2",
|
||||
"laravel/framework": "^7.0",
|
||||
"laravel/socialite": "^4.4",
|
||||
"laravel/tinker": "^2.0",
|
||||
"laravel/ui": "^2.0",
|
||||
"maatwebsite/excel": "3.1.19",
|
||||
"prettus/l5-repository": "^2.6",
|
||||
"tymon/jwt-auth": "^1.0.0",
|
||||
"barryvdh/laravel-debugbar": "^3.1",
|
||||
"fzaninotto/faker": "^1.9.1"
|
||||
"tymon/jwt-auth": "^1.0.0"
|
||||
},
|
||||
|
||||
"require-dev": {
|
||||
|
|
@ -102,7 +104,8 @@
|
|||
"Webkul\\Rule\\": "packages/Webkul/Rule/src",
|
||||
"Webkul\\CMS\\": "packages/Webkul/CMS/src",
|
||||
"Webkul\\Velocity\\": "packages/Webkul/Velocity/src",
|
||||
"Webkul\\BookingProduct\\": "packages/Webkul/BookingProduct/src"
|
||||
"Webkul\\BookingProduct\\": "packages/Webkul/BookingProduct/src",
|
||||
"Webkul\\SocialLogin\\": "packages/Webkul/SocialLogin/src"
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "f30430f65c1f5650515c1af10a9c5d9d",
|
||||
"content-hash": "a64bc9824943e94bc0643161f1bb59d4",
|
||||
"packages": [
|
||||
{
|
||||
"name": "astrotomic/laravel-translatable",
|
||||
|
|
@ -1825,6 +1825,71 @@
|
|||
],
|
||||
"time": "2020-06-02T22:34:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/socialite",
|
||||
"version": "v4.4.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/socialite.git",
|
||||
"reference": "80951df0d93435b773aa00efe1fad6d5015fac75"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/socialite/zipball/80951df0d93435b773aa00efe1fad6d5015fac75",
|
||||
"reference": "80951df0d93435b773aa00efe1fad6d5015fac75",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"guzzlehttp/guzzle": "^6.0|^7.0",
|
||||
"illuminate/http": "~5.7.0|~5.8.0|^6.0|^7.0",
|
||||
"illuminate/support": "~5.7.0|~5.8.0|^6.0|^7.0",
|
||||
"league/oauth1-client": "^1.0",
|
||||
"php": "^7.1.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"illuminate/contracts": "~5.7.0|~5.8.0|^6.0|^7.0",
|
||||
"mockery/mockery": "^1.0",
|
||||
"orchestra/testbench": "^3.7|^3.8|^4.0|^5.0",
|
||||
"phpunit/phpunit": "^7.0|^8.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.x-dev"
|
||||
},
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Laravel\\Socialite\\SocialiteServiceProvider"
|
||||
],
|
||||
"aliases": {
|
||||
"Socialite": "Laravel\\Socialite\\Facades\\Socialite"
|
||||
}
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Laravel\\Socialite\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Taylor Otwell",
|
||||
"email": "taylor@laravel.com"
|
||||
}
|
||||
],
|
||||
"description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.",
|
||||
"homepage": "https://laravel.com",
|
||||
"keywords": [
|
||||
"laravel",
|
||||
"oauth"
|
||||
],
|
||||
"time": "2020-06-03T13:30:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/tinker",
|
||||
"version": "v2.4.0",
|
||||
|
|
@ -1889,6 +1954,61 @@
|
|||
],
|
||||
"time": "2020-04-07T15:01:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/ui",
|
||||
"version": "v2.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/ui.git",
|
||||
"reference": "15368c5328efb7ce94f35ca750acde9b496ab1b1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/ui/zipball/15368c5328efb7ce94f35ca750acde9b496ab1b1",
|
||||
"reference": "15368c5328efb7ce94f35ca750acde9b496ab1b1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/console": "^7.0",
|
||||
"illuminate/filesystem": "^7.0",
|
||||
"illuminate/support": "^7.0",
|
||||
"php": "^7.2.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.0",
|
||||
"phpunit/phpunit": "^8.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Laravel\\Ui\\UiServiceProvider"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Laravel\\Ui\\": "src/",
|
||||
"Illuminate\\Foundation\\Auth\\": "auth-backend/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Taylor Otwell",
|
||||
"email": "taylor@laravel.com"
|
||||
}
|
||||
],
|
||||
"description": "Laravel UI utilities and presets.",
|
||||
"keywords": [
|
||||
"laravel",
|
||||
"ui"
|
||||
],
|
||||
"time": "2020-04-29T15:06:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "lcobucci/jwt",
|
||||
"version": "3.3.2",
|
||||
|
|
@ -2144,6 +2264,69 @@
|
|||
],
|
||||
"time": "2020-05-18T15:13:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/oauth1-client",
|
||||
"version": "1.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/oauth1-client.git",
|
||||
"reference": "fca5f160650cb74d23fc11aa570dd61f86dcf647"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/fca5f160650cb74d23fc11aa570dd61f86dcf647",
|
||||
"reference": "fca5f160650cb74d23fc11aa570dd61f86dcf647",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"guzzlehttp/guzzle": "^6.0",
|
||||
"php": ">=5.5.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^0.9",
|
||||
"phpunit/phpunit": "^4.0",
|
||||
"squizlabs/php_codesniffer": "^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"League\\OAuth1\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ben Corlett",
|
||||
"email": "bencorlett@me.com",
|
||||
"homepage": "http://www.webcomm.com.au",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "OAuth 1.0 Client Library",
|
||||
"keywords": [
|
||||
"Authentication",
|
||||
"SSO",
|
||||
"authorization",
|
||||
"bitbucket",
|
||||
"identity",
|
||||
"idp",
|
||||
"oauth",
|
||||
"oauth1",
|
||||
"single sign on",
|
||||
"trello",
|
||||
"tumblr",
|
||||
"twitter"
|
||||
],
|
||||
"time": "2016-08-17T00:36:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "maatwebsite/excel",
|
||||
"version": "3.1.19",
|
||||
|
|
|
|||
|
|
@ -268,6 +268,7 @@ return [
|
|||
Webkul\CMS\Providers\CMSServiceProvider::class,
|
||||
Webkul\Velocity\Providers\VelocityServiceProvider::class,
|
||||
Webkul\BookingProduct\Providers\BookingProductServiceProvider::class,
|
||||
Webkul\SocialLogin\Providers\SocialLoginServiceProvider::class,
|
||||
],
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -24,5 +24,6 @@ return [
|
|||
\Webkul\CartRule\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\CMS\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\Velocity\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\SocialLogin\Providers\ModuleServiceProvider::class,
|
||||
]
|
||||
];
|
||||
|
|
@ -111,7 +111,7 @@ return [
|
|||
'views' => true, // Views with their data
|
||||
'route' => true, // Current route information
|
||||
'auth' => false, // Display Laravel authentication status
|
||||
'gate' => true, // Display Laravel Gate checks
|
||||
'gate' => true, // Display Laravel Gate checks
|
||||
'session' => true, // Display session data
|
||||
'symfony_request' => true, // Only one can be enabled..
|
||||
'mail' => true, // Catch mail messages
|
||||
|
|
@ -122,7 +122,7 @@ return [
|
|||
'files' => false, // Show the included files
|
||||
'config' => false, // Display config settings
|
||||
'cache' => false, // Display cache events
|
||||
'models' => false, // Display models
|
||||
'models' => true, // Display models
|
||||
],
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -179,7 +179,8 @@ return [
|
|||
| in conjunction with queued imports and exports.
|
||||
|
|
||||
*/
|
||||
'remote_disk' => null,
|
||||
'remote_disk' => null,
|
||||
'remote_prefix' => null,
|
||||
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -46,5 +46,35 @@ return [
|
|||
'model' => App\User::class,
|
||||
'key' => env('STRIPE_KEY'),
|
||||
'secret' => env('STRIPE_SECRET'),
|
||||
]
|
||||
],
|
||||
|
||||
'facebook' => [
|
||||
'client_id' => env('FACEBOOK_CLIENT_ID'),
|
||||
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
|
||||
'redirect' => env('FACEBOOK_CALLBACK_URL'),
|
||||
],
|
||||
|
||||
'twitter' => [
|
||||
'client_id' => env('TWITTER_CLIENT_ID'),
|
||||
'client_secret' => env('TWITTER_CLIENT_SECRET'),
|
||||
'redirect' => env('TWITTER_CALLBACK_URL'),
|
||||
],
|
||||
|
||||
'google' => [
|
||||
'client_id' => env('GOOGLE_CLIENT_ID'),
|
||||
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
|
||||
'redirect' => env('GOOGLE_CALLBACK_URL'),
|
||||
],
|
||||
|
||||
'linkedin' => [
|
||||
'client_id' => env('LINKEDIN_CLIENT_ID'),
|
||||
'client_secret' => env('LINKEDIN_CLIENT_SECRET'),
|
||||
'redirect' => env('LINKEDIN_CALLBACK_URL'),
|
||||
],
|
||||
|
||||
'github' => [
|
||||
'client_id' => env('GITHUB_CLIENT_ID'),
|
||||
'client_secret' => env('GITHUB_CLIENT_SECRET'),
|
||||
'redirect' => env('GITHUB_CALLBACK_URL'),
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -17,6 +17,21 @@ return [
|
|||
// App\Console\Commands\ExampleCommand::class,
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Alias Whitelist
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Tinker will not automatically alias classes in your vendor namespaces
|
||||
| but you may explicitly allow a subset of classes to get aliased by
|
||||
| adding the names of each of those classes to the following list.
|
||||
|
|
||||
*/
|
||||
|
||||
'alias' => [
|
||||
//
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Alias Blacklist
|
||||
|
|
|
|||
|
|
@ -2,7 +2,10 @@
|
|||
|
||||
namespace Webkul\API\Http\Controllers\Shop;
|
||||
|
||||
use Exception;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Webkul\Checkout\Repositories\CartRepository;
|
||||
use Webkul\Checkout\Repositories\CartItemRepository;
|
||||
use Webkul\API\Http\Resources\Checkout\Cart as CartResource;
|
||||
|
|
@ -42,9 +45,9 @@ class CartController extends Controller
|
|||
/**
|
||||
* Controller instance
|
||||
*
|
||||
* @param \Webkul\Checkout\Repositories\CartRepository $cartRepository
|
||||
* @param \Webkul\Checkout\Repositories\CartItemRepository $cartItemRepository
|
||||
* @param \Webkul\Checkout\Repositories\WishlistRepository $wishlistRepository
|
||||
* @param \Webkul\Checkout\Repositories\CartRepository $cartRepository
|
||||
* @param \Webkul\Checkout\Repositories\CartItemRepository $cartItemRepository
|
||||
* @param \Webkul\Checkout\Repositories\WishlistRepository $wishlistRepository
|
||||
*/
|
||||
public function __construct(
|
||||
CartRepository $cartRepository,
|
||||
|
|
@ -69,7 +72,7 @@ class CartController extends Controller
|
|||
/**
|
||||
* Get customer cart
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function get()
|
||||
{
|
||||
|
|
@ -86,10 +89,11 @@ class CartController extends Controller
|
|||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
* @param int $id
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store($id)
|
||||
public function store($id): ?JsonResponse
|
||||
{
|
||||
if (request()->get('is_buy_now')) {
|
||||
Event::dispatch('shop.item.buy-now', $id);
|
||||
|
|
@ -97,36 +101,46 @@ class CartController extends Controller
|
|||
|
||||
Event::dispatch('checkout.cart.item.add.before', $id);
|
||||
|
||||
$result = Cart::addProduct($id, request()->except('_token'));
|
||||
try {
|
||||
$result = Cart::addProduct($id, request()->except('_token'));
|
||||
|
||||
if (! $result) {
|
||||
$message = session()->get('warning') ?? session()->get('error');
|
||||
if (is_array($result) && isset($result['warning'])) {
|
||||
return response()->json([
|
||||
'error' => $result['warning'],
|
||||
], 400);
|
||||
}
|
||||
|
||||
if ($customer = auth($this->guard)->user()) {
|
||||
$this->wishlistRepository->deleteWhere(['product_id' => $id, 'customer_id' => $customer->id]);
|
||||
}
|
||||
|
||||
Event::dispatch('checkout.cart.item.add.after', $result);
|
||||
|
||||
Cart::collectTotals();
|
||||
|
||||
$cart = Cart::getCart();
|
||||
|
||||
return response()->json([
|
||||
'error' => session()->get('warning'),
|
||||
], 400);
|
||||
'message' => __('shop::app.checkout.cart.item.success'),
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
]);
|
||||
} catch (Exception $e) {
|
||||
Log::error('API CartController: ' . $e->getMessage(),
|
||||
['product_id' => $id, 'cart_id' => cart()->getCart() ?? 0]);
|
||||
|
||||
return response()->json([
|
||||
'error' => [
|
||||
'message' => $e->getMessage(),
|
||||
'code' => $e->getCode()
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
if ($customer = auth($this->guard)->user()) {
|
||||
$this->wishlistRepository->deleteWhere(['product_id' => $id, 'customer_id' => $customer->id]);
|
||||
}
|
||||
|
||||
Event::dispatch('checkout.cart.item.add.after', $result);
|
||||
|
||||
Cart::collectTotals();
|
||||
|
||||
$cart = Cart::getCart();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('shop::app.checkout.cart.item.success'),
|
||||
'data' => $cart ? new CartResource($cart) : null,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update()
|
||||
{
|
||||
|
|
@ -161,7 +175,7 @@ class CartController extends Controller
|
|||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy()
|
||||
{
|
||||
|
|
@ -182,8 +196,9 @@ class CartController extends Controller
|
|||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
* @param int $id
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroyItem($id)
|
||||
{
|
||||
|
|
@ -206,7 +221,9 @@ class CartController extends Controller
|
|||
/**
|
||||
* Function to move a already added product to wishlist will run only on customer authentication.
|
||||
*
|
||||
* @param \Webkul\Checkout\Repositories\CartItemRepository $id
|
||||
* @param \Webkul\Checkout\Repositories\CartItemRepository $id
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function moveToWishlist($id)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use Illuminate\Support\Facades\Password;
|
|||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -100,10 +100,11 @@ class Order extends JsonResource
|
|||
'channel' => $this->when($this->channel_id, new ChannelResource($this->channel)),
|
||||
'shipping_address' => new OrderAddress($this->shipping_address),
|
||||
'billing_address' => new OrderAddress($this->billing_address),
|
||||
'updated_at' => $this->updated_at,
|
||||
'items' => OrderItem::collection($this->items),
|
||||
'invoices' => Invoice::collection($this->invoices),
|
||||
'shipments' => Shipment::collection($this->shipments),
|
||||
'downloadable_links' => $this->downloadable_link_purchased,
|
||||
'updated_at' => $this->updated_at,
|
||||
'created_at' => $this->created_at,
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"/js/admin.js": "/js/admin.js?id=2701b1627d73faa941d6",
|
||||
"/css/admin.css": "/css/admin.css?id=f22618adc68fda9b42c0"
|
||||
"/js/admin.js": "/js/admin.js?id=a14c779523092ac32b88",
|
||||
"/css/admin.css": "/css/admin.css?id=56c882a611bdf3c058cb"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -416,6 +416,26 @@ return [
|
|||
'name' => 'admin::app.acl.delete',
|
||||
'route' => 'admin.cart-rules.delete',
|
||||
'sort' => 3,
|
||||
], [
|
||||
'key' => 'promotions.catalog-rules',
|
||||
'name' => 'admin::app.acl.catalog-rules',
|
||||
'route' => 'admin.catalog-rules.index',
|
||||
'sort' => 1,
|
||||
], [
|
||||
'key' => 'promotions.catalog-rules.create',
|
||||
'name' => 'admin::app.acl.create',
|
||||
'route' => 'admin.catalog-rules.index',
|
||||
'sort' => 1,
|
||||
], [
|
||||
'key' => 'promotions.catalog-rules.edit',
|
||||
'name' => 'admin::app.acl.edit',
|
||||
'route' => 'admin.catalog-rules.edit',
|
||||
'sort' => 2,
|
||||
], [
|
||||
'key' => 'promotions.catalog-rules.delete',
|
||||
'name' => 'admin::app.acl.delete',
|
||||
'route' => 'admin.catalog-rules.delete',
|
||||
'sort' => 3,
|
||||
],
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -53,13 +53,13 @@ return [
|
|||
'key' => 'catalog.categories',
|
||||
'name' => 'admin::app.layouts.categories',
|
||||
'route' => 'admin.catalog.categories.index',
|
||||
'sort' => 3,
|
||||
'sort' => 2,
|
||||
'icon-class' => '',
|
||||
], [
|
||||
'key' => 'catalog.attributes',
|
||||
'name' => 'admin::app.layouts.attributes',
|
||||
'route' => 'admin.catalog.attributes.index',
|
||||
'sort' => 2,
|
||||
'sort' => 3,
|
||||
'icon-class' => '',
|
||||
], [
|
||||
'key' => 'catalog.families',
|
||||
|
|
|
|||
|
|
@ -59,13 +59,12 @@ class AddressDataGrid extends DataGrid
|
|||
$queryBuilder->groupBy('ca.id')
|
||||
->addSelect(DB::raw(DB::getTablePrefix() . 'country_states.default_name as state_name'));
|
||||
|
||||
$this->addFilter('address_id', 'ca.id');
|
||||
$this->addFilter('company_name', 'ca.company_name');
|
||||
$this->addFilter('address1', 'ca.address1');
|
||||
$this->addFilter('postcode', 'ca.postcode');
|
||||
$this->addFilter('city', 'ca.city');
|
||||
$this->addFilter('state_name', DB::raw(DB::getTablePrefix() . 'country_states.default_name'));
|
||||
$this->addFilter('country_name', DB::raw(DB::getTablePrefix() . 'countries.name'));
|
||||
$this->addFilter('postcode', 'ca.postcode');
|
||||
$this->addFilter('default_address', 'ca.default_address');
|
||||
|
||||
$this->setQueryBuilder($queryBuilder);
|
||||
|
|
@ -73,15 +72,6 @@ class AddressDataGrid extends DataGrid
|
|||
|
||||
public function addColumns()
|
||||
{
|
||||
$this->addColumn([
|
||||
'index' => 'address_id',
|
||||
'label' => trans('admin::app.customers.addresses.address-id'),
|
||||
'type' => 'number',
|
||||
'searchable' => true,
|
||||
'sortable' => true,
|
||||
'filterable' => true,
|
||||
]);
|
||||
|
||||
$this->addColumn([
|
||||
'index' => 'company_name',
|
||||
'label' => trans('admin::app.customers.addresses.company-name'),
|
||||
|
|
@ -100,6 +90,15 @@ class AddressDataGrid extends DataGrid
|
|||
'filterable' => true,
|
||||
]);
|
||||
|
||||
$this->addColumn([
|
||||
'index' => 'postcode',
|
||||
'label' => trans('admin::app.customers.addresses.postcode'),
|
||||
'type' => 'string',
|
||||
'searchable' => true,
|
||||
'sortable' => true,
|
||||
'filterable' => true,
|
||||
]);
|
||||
|
||||
$this->addColumn([
|
||||
'index' => 'city',
|
||||
'label' => trans('admin::app.customers.addresses.city'),
|
||||
|
|
@ -127,15 +126,6 @@ class AddressDataGrid extends DataGrid
|
|||
'filterable' => true,
|
||||
]);
|
||||
|
||||
$this->addColumn([
|
||||
'index' => 'postcode',
|
||||
'label' => trans('admin::app.customers.addresses.postcode'),
|
||||
'type' => 'string',
|
||||
'searchable' => true,
|
||||
'sortable' => true,
|
||||
'filterable' => true,
|
||||
]);
|
||||
|
||||
$this->addColumn([
|
||||
'index' => 'default_address',
|
||||
'label' => trans('admin::app.customers.addresses.default-address'),
|
||||
|
|
|
|||
|
|
@ -45,8 +45,6 @@ class ProductDataGrid extends DataGrid
|
|||
|
||||
if ($this->locale !== 'all') {
|
||||
$queryBuilder->where('locale', $this->locale);
|
||||
} else {
|
||||
$queryBuilder->whereNotNull('product_flat.name');
|
||||
}
|
||||
|
||||
if ($this->channel !== 'all') {
|
||||
|
|
|
|||
|
|
@ -5,8 +5,11 @@ namespace Webkul\Admin\Http\Controllers\Customer;
|
|||
use Illuminate\Support\Facades\Event;
|
||||
use Webkul\Admin\Http\Controllers\Controller;
|
||||
use Webkul\Customer\Repositories\CustomerRepository;
|
||||
|
||||
use Webkul\Customer\Repositories\CustomerAddressRepository;
|
||||
use Webkul\Customer\Repositories\CustomerGroupRepository;
|
||||
use Webkul\Core\Repositories\ChannelRepository;
|
||||
|
||||
use Webkul\Admin\Mail\NewCustomerNotification;
|
||||
use Mail;
|
||||
|
||||
|
|
@ -26,6 +29,13 @@ class CustomerController extends Controller
|
|||
*/
|
||||
protected $customerRepository;
|
||||
|
||||
/**
|
||||
* CustomerAddress Repository object
|
||||
*
|
||||
* @var \Webkul\Customer\Repositories\CustomerAddressRepository
|
||||
*/
|
||||
protected $customerAddressRepository;
|
||||
|
||||
/**
|
||||
* CustomerGroupRepository object
|
||||
*
|
||||
|
|
@ -44,26 +54,26 @@ class CustomerController extends Controller
|
|||
* Create a new controller instance.
|
||||
*
|
||||
* @param \Webkul\Customer\Repositories\CustomerRepository $customerRepository
|
||||
* @param \Webkul\Customer\Repositories\CustomerAddressRepository $customerAddressRepository
|
||||
* @param \Webkul\Customer\Repositories\CustomerGroupRepository $customerGroupRepository
|
||||
* @param \Webkul\Core\Repositories\ChannelRepository $channelRepository
|
||||
*/
|
||||
public function __construct(
|
||||
CustomerRepository $customerRepository,
|
||||
CustomerAddressRepository $customerAddressRepository,
|
||||
CustomerGroupRepository $customerGroupRepository,
|
||||
ChannelRepository $channelRepository
|
||||
)
|
||||
{
|
||||
$this->_config = request('_config');
|
||||
|
||||
$this->middleware('admin');
|
||||
|
||||
$this->customerRepository = $customerRepository;
|
||||
|
||||
$this->customerGroupRepository = $customerGroupRepository;
|
||||
|
||||
$this->channelRepository = $channelRepository;
|
||||
|
||||
}
|
||||
)
|
||||
|
||||
{
|
||||
$this->_config = request('_config');
|
||||
$this->middleware('admin');
|
||||
$this->customerRepository = $customerRepository;
|
||||
|
||||
$this->customerAddressRepository = $customerAddressRepository;
|
||||
$this->customerGroupRepository = $customerGroupRepository;
|
||||
$this->channelRepository = $channelRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
|
|
@ -141,12 +151,11 @@ class CustomerController extends Controller
|
|||
public function edit($id)
|
||||
{
|
||||
$customer = $this->customerRepository->findOrFail($id);
|
||||
|
||||
$address = $this->customerAddressRepository->find($id);
|
||||
$customerGroup = $this->customerGroupRepository->findWhere([['code', '<>', 'guest']]);
|
||||
|
||||
$channelName = $this->channelRepository->all();
|
||||
|
||||
return view($this->_config['view'], compact('customer', 'customerGroup', 'channelName'));
|
||||
return view($this->_config['view'], compact('customer', 'address', 'customerGroup', 'channelName'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -173,4 +173,17 @@
|
|||
grid-row-gap: 15px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.rtl {
|
||||
.dashboard {
|
||||
.page-header {
|
||||
.control-group {
|
||||
&.date::after {
|
||||
margin-top: -13px !important;
|
||||
right: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -76,7 +76,7 @@ body {
|
|||
|
||||
.dropdown-list {
|
||||
top: 63px;
|
||||
right: 0px !important;
|
||||
right: 0px;
|
||||
bottom: inherit !important;
|
||||
}
|
||||
|
||||
|
|
@ -319,4 +319,39 @@ body {
|
|||
margin-top: 10px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.ticket-list {
|
||||
.control-group {
|
||||
&.date {
|
||||
&::after {
|
||||
left: unset;
|
||||
right: 10px;
|
||||
top: 34px;
|
||||
}
|
||||
}
|
||||
|
||||
&.has-error {
|
||||
&.date {
|
||||
&::after {
|
||||
top: 47px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.rtl {
|
||||
.ticket-list {
|
||||
.control-group {
|
||||
&.has-error {
|
||||
&.date {
|
||||
&::after {
|
||||
top: 47px;
|
||||
right: 100% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,10 @@
|
|||
.rtl {
|
||||
direction: rtl;
|
||||
|
||||
.form-container {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
.navbar-top {
|
||||
.navbar-top-right {
|
||||
text-align: left;
|
||||
|
|
@ -44,18 +48,6 @@
|
|||
margin-right: 20px;
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.control-group.date {
|
||||
&::after {
|
||||
margin-top: 6px;
|
||||
position: absolute;
|
||||
margin-right: -35px;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
margin-left: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.content-wrapper {
|
||||
|
|
@ -110,56 +102,6 @@
|
|||
float: left;
|
||||
}
|
||||
|
||||
// ui
|
||||
.grid-container {
|
||||
.filter-row-one .search-filter {
|
||||
border: 2px solid #c7c7c7;
|
||||
border-radius: 2px;
|
||||
|
||||
.control {
|
||||
border: none;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.icon-wrapper {
|
||||
border: none;
|
||||
padding-top: 2px;
|
||||
padding-right: 5px;
|
||||
border-right: 2px solid #c7c7c7;
|
||||
border-radius: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.filter-row-two .filter-tag {
|
||||
.wrapper,
|
||||
.icon.cross-icon {
|
||||
margin-right: 10px;
|
||||
margin-left: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.filter-row-one .dropdown-filters {
|
||||
right: unset;
|
||||
position: static !important;
|
||||
left: 25px;
|
||||
|
||||
.per-page-label {
|
||||
position: static !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.grid-container
|
||||
.filter-wrapper
|
||||
.filter-row-one
|
||||
.dropdown-filters
|
||||
.more-filters
|
||||
.dropdown-toggle
|
||||
.dropdown-header
|
||||
span {
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.grid-container .table tbody td.action a:first-child {
|
||||
margin-left: 10px;
|
||||
margin-right: 0px;
|
||||
|
|
@ -180,7 +122,7 @@
|
|||
|
||||
.dropdown-list.bottom-right {
|
||||
left: 0px;
|
||||
right: auto;
|
||||
right: auto !important;
|
||||
}
|
||||
|
||||
.dropdown-list .dropdown-container {
|
||||
|
|
@ -232,14 +174,6 @@
|
|||
float: left;
|
||||
}
|
||||
|
||||
.control-group.date {
|
||||
&::after {
|
||||
margin-top: 15px;
|
||||
position: absolute;
|
||||
margin-right: -35px;
|
||||
}
|
||||
}
|
||||
|
||||
.pagination .page-item .icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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=""{{ __('admin::app.catalog.products.value') }}""/>
|
||||
<input type="number" v-validate="'required|min_value:0'" :name="[inputName + '[value]']" v-model="customerGroupPrice.value" class="control" data-vv-as=""{{ __('admin::app.datagrid.price') }}""/>
|
||||
<span class="control-error" v-if="errors.has(inputName + '[value]')">@{{ errors.first(inputName + '[value]') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<select v-validate="'{{$validations}}'" class="control" id="{{ $attribute->code }}" name="{{ $attribute->code }}[]" data-vv-as=""{{ $attribute->admin_name }}"" multiple>
|
||||
|
||||
@foreach ($attribute->options as $option)
|
||||
@foreach ($attribute->options()->orderBy('sort_order')->get() as $option)
|
||||
<option value="{{ $option->id }}" {{ in_array($option->id, explode(',', $product[$attribute->code])) ? 'selected' : ''}}>
|
||||
{{ $option->admin_name }}
|
||||
</option>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
@if ($attribute->code != 'tax_category_id')
|
||||
|
||||
@foreach ($attribute->options as $option)
|
||||
@foreach ($attribute->options()->orderBy('sort_order')->get() as $option)
|
||||
<option value="{{ $option->id }}" {{ $option->id == $selectedOption ? 'selected' : ''}}>
|
||||
{{ $option->admin_name }}
|
||||
</option>
|
||||
|
|
|
|||
|
|
@ -6,129 +6,31 @@
|
|||
|
||||
@section('content')
|
||||
<div class="content">
|
||||
<div class="page-header">
|
||||
<div class="page-title">
|
||||
<h1>
|
||||
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
|
||||
{{ $customer->first_name . " " . $customer->last_name }}
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<tabs>
|
||||
{!! view_render_event('bagisto.admin.customer.edit.before', ['customer' => $customer]) !!}
|
||||
|
||||
<form method="POST" action="{{ route('admin.customer.update', $customer->id) }}">
|
||||
|
||||
<div class="page-header">
|
||||
<div class="page-title">
|
||||
<h1>
|
||||
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
|
||||
|
||||
{{ __('admin::app.customers.customers.title') }}
|
||||
</h1>
|
||||
<tab name="{{ __('admin::app.sales.orders.info') }}" :selected="true">
|
||||
<div class="sale-container">
|
||||
@include('admin::customers.general')
|
||||
</div>
|
||||
</tab>
|
||||
|
||||
<div class="page-action">
|
||||
<button type="submit" class="btn btn-lg btn-primary">
|
||||
{{ __('admin::app.customers.customers.save-btn-title') }}
|
||||
</button>
|
||||
<tab name="{{ __('admin::app.customers.customers.addresses') }}" :selected="false">
|
||||
<div class="style:overflow: auto;"> </div>
|
||||
{!! view_render_event('bagisto.admin.customer.addresses.list.before') !!}
|
||||
{!! app('Webkul\Admin\DataGrids\AddressDataGrid')->render() !!}
|
||||
{!! view_render_event('bagisto.admin.customer.addresses.list.after') !!}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="page-content">
|
||||
|
||||
<div class="form-container">
|
||||
@csrf()
|
||||
|
||||
<input name="_method" type="hidden" value="PUT">
|
||||
|
||||
<accordian :title="'{{ __('admin::app.account.general') }}'" :active="true">
|
||||
<div slot="body">
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.form.before', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('first_name') ? 'has-error' : '']">
|
||||
<label for="first_name" class="required"> {{ __('admin::app.customers.customers.first_name') }}</label>
|
||||
<input type="text" class="control" name="first_name" v-validate="'required'" value="{{old('first_name') ?:$customer->first_name}}"
|
||||
data-vv-as=""{{ __('shop::app.customer.signup-form.firstname') }}""/>
|
||||
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.first_name.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('last_name') ? 'has-error' : '']">
|
||||
<label for="last_name" class="required"> {{ __('admin::app.customers.customers.last_name') }}</label>
|
||||
<input type="text" class="control" name="last_name" v-validate="'required'" value="{{old('last_name') ?:$customer->last_name}}" data-vv-as=""{{ __('shop::app.customer.signup-form.lastname') }}"">
|
||||
<span class="control-error" v-if="errors.has('last_name')">@{{ errors.first('last_name') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.last_name.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('email') ? 'has-error' : '']">
|
||||
<label for="email" class="required"> {{ __('admin::app.customers.customers.email') }}</label>
|
||||
<input type="email" class="control" name="email" v-validate="'required|email'" value="{{old('email') ?:$customer->email}}" data-vv-as=""{{ __('shop::app.customer.signup-form.email') }}"">
|
||||
<span class="control-error" v-if="errors.has('email')">@{{ errors.first('email') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.email.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('gender') ? 'has-error' : '']">
|
||||
<label for="gender" class="required">{{ __('admin::app.customers.customers.gender') }}</label>
|
||||
<select name="gender" class="control" value="{{ $customer->gender }}" v-validate="'required'" data-vv-as=""{{ __('admin::app.customers.customers.gender') }}"">
|
||||
<option value="" {{ $customer->gender == "" ? 'selected' : '' }}></option>
|
||||
<option value="{{ __('admin::app.customers.customers.male') }}" {{ $customer->gender == __('admin::app.customers.customers.male') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.male') }}</option>
|
||||
<option value="{{ __('admin::app.customers.customers.female') }}" {{ $customer->gender == __('admin::app.customers.customers.female') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.female') }}</option>
|
||||
<option value="{{ __('admin::app.customers.customers.other') }}" {{ $customer->gender == __('admin::app.customers.customers.other') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.other') }}</option>
|
||||
</select>
|
||||
<span class="control-error" v-if="errors.has('gender')">@{{ errors.first('gender') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.gender.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group">
|
||||
<label for="status" class="required">{{ __('admin::app.customers.customers.status') }}</label>
|
||||
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="status" name="status" value="{{ $customer->status }}" {{ $customer->status ? 'checked' : '' }}>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
|
||||
<span class="control-error" v-if="errors.has('status')">@{{ errors.first('status') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.status.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('date_of_birth') ? 'has-error' : '']">
|
||||
<label for="dob">{{ __('admin::app.customers.customers.date_of_birth') }}</label>
|
||||
<input type="date" class="control" name="date_of_birth" value="{{ old('date_of_birth') ?:$customer->date_of_birth }}" v-validate="" data-vv-as=""{{ __('admin::app.customers.customers.date_of_birth') }}"">
|
||||
<span class="control-error" v-if="errors.has('date_of_birth')">@{{ errors.first('date_of_birth') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.date_of_birth.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('phone') ? 'has-error' : '']">
|
||||
<label for="phone">{{ __('admin::app.customers.customers.phone') }}</label>
|
||||
<input type="text" class="control" name="phone" value="{{ $customer->phone }}" data-vv-as=""{{ __('admin::app.customers.customers.phone') }}"">
|
||||
<span class="control-error" v-if="errors.has('phone')">@{{ errors.first('phone') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.phone.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group">
|
||||
<label for="customerGroup" >{{ __('admin::app.customers.customers.customer_group') }}</label>
|
||||
|
||||
@if (! is_null($customer->customer_group_id))
|
||||
<?php $selectedCustomerOption = $customer->group->id ?>
|
||||
@else
|
||||
<?php $selectedCustomerOption = '' ?>
|
||||
@endif
|
||||
|
||||
<select class="control" name="customer_group_id">
|
||||
@foreach ($customerGroup as $group)
|
||||
<option value="{{ $group->id }}" {{ $selectedCustomerOption == $group->id ? 'selected' : '' }}>
|
||||
{{ $group->name}}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</accordian>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</tab>
|
||||
{!! view_render_event('bagisto.admin.customer.edit.after', ['customer' => $customer]) !!}
|
||||
</tabs>
|
||||
</div>
|
||||
@stop
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
{!! view_render_event('bagisto.admin.customer.edit.before', ['customer' => $customer]) !!}
|
||||
|
||||
<form method="POST" action="{{ route('admin.customer.update', $customer->id) }}">
|
||||
<div class="page-content">
|
||||
<div class="form-container">
|
||||
@csrf()
|
||||
|
||||
<input name="_method" type="hidden" value="PUT">
|
||||
<div class="style:overflow: auto;"> </div>
|
||||
|
||||
<div slot="body">
|
||||
{!! view_render_event('bagisto.admin.customer.edit.form.before', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('first_name') ? 'has-error' : '']">
|
||||
<label for="first_name" class="required"> {{ __('admin::app.customers.customers.first_name') }}</label>
|
||||
<input type="text" class="control" name="first_name" v-validate="'required'" value="{{old('first_name') ?:$customer->first_name}}"
|
||||
data-vv-as=""{{ __('shop::app.customer.signup-form.firstname') }}""/>
|
||||
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.first_name.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('last_name') ? 'has-error' : '']">
|
||||
<label for="last_name" class="required"> {{ __('admin::app.customers.customers.last_name') }}</label>
|
||||
<input type="text" class="control" name="last_name" v-validate="'required'" value="{{old('last_name') ?:$customer->last_name}}" data-vv-as=""{{ __('shop::app.customer.signup-form.lastname') }}"">
|
||||
<span class="control-error" v-if="errors.has('last_name')">@{{ errors.first('last_name') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.last_name.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('email') ? 'has-error' : '']">
|
||||
<label for="email" class="required"> {{ __('admin::app.customers.customers.email') }}</label>
|
||||
<input type="email" class="control" name="email" v-validate="'required|email'" value="{{old('email') ?:$customer->email}}" data-vv-as=""{{ __('shop::app.customer.signup-form.email') }}"">
|
||||
<span class="control-error" v-if="errors.has('email')">@{{ errors.first('email') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.email.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('gender') ? 'has-error' : '']">
|
||||
<label for="gender" class="required">{{ __('admin::app.customers.customers.gender') }}</label>
|
||||
<select name="gender" class="control" value="{{ $customer->gender }}" v-validate="'required'" data-vv-as=""{{ __('admin::app.customers.customers.gender') }}"">
|
||||
<option value="" {{ $customer->gender == "" ? 'selected' : '' }}></option>
|
||||
<option value="{{ __('admin::app.customers.customers.male') }}" {{ $customer->gender == __('admin::app.customers.customers.male') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.male') }}</option>
|
||||
<option value="{{ __('admin::app.customers.customers.female') }}" {{ $customer->gender == __('admin::app.customers.customers.female') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.female') }}</option>
|
||||
<option value="{{ __('admin::app.customers.customers.other') }}" {{ $customer->gender == __('admin::app.customers.customers.other') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.other') }}</option>
|
||||
</select>
|
||||
<span class="control-error" v-if="errors.has('gender')">@{{ errors.first('gender') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.gender.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group">
|
||||
<label for="status" class="required">{{ __('admin::app.customers.customers.status') }}</label>
|
||||
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="status" name="status" value="{{ $customer->status }}" {{ $customer->status ? 'checked' : '' }}>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
|
||||
<span class="control-error" v-if="errors.has('status')">@{{ errors.first('status') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.status.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('date_of_birth') ? 'has-error' : '']">
|
||||
<label for="dob">{{ __('admin::app.customers.customers.date_of_birth') }}</label>
|
||||
<input type="date" class="control" name="date_of_birth" value="{{ old('date_of_birth') ?:$customer->date_of_birth }}" v-validate="" data-vv-as=""{{ __('admin::app.customers.customers.date_of_birth') }}"">
|
||||
<span class="control-error" v-if="errors.has('date_of_birth')">@{{ errors.first('date_of_birth') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.date_of_birth.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('phone') ? 'has-error' : '']">
|
||||
<label for="phone">{{ __('admin::app.customers.customers.phone') }}</label>
|
||||
<input type="text" class="control" name="phone" value="{{ $customer->phone }}" data-vv-as=""{{ __('admin::app.customers.customers.phone') }}"">
|
||||
<span class="control-error" v-if="errors.has('phone')">@{{ errors.first('phone') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.admin.customer.edit.phone.after', ['customer' => $customer]) !!}
|
||||
|
||||
<div class="control-group">
|
||||
<label for="customerGroup" >{{ __('admin::app.customers.customers.customer_group') }}</label>
|
||||
|
||||
@if (! is_null($customer->customer_group_id))
|
||||
<?php $selectedCustomerOption = $customer->group->id ?>
|
||||
@else
|
||||
<?php $selectedCustomerOption = '' ?>
|
||||
@endif
|
||||
|
||||
<select class="control" name="customer_group_id">
|
||||
@foreach ($customerGroup as $group)
|
||||
<option value="{{ $group->id }}" {{ $selectedCustomerOption == $group->id ? 'selected' : '' }}>
|
||||
{{ $group->name}}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-lg btn-primary">
|
||||
{{ __('admin::app.customers.customers.save-btn-title') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{!! view_render_event('bagisto.admin.customer.edit.after', ['customer' => $customer]) !!}
|
||||
|
|
@ -369,11 +369,11 @@
|
|||
<script type="text/x-template" id="date-filter-template">
|
||||
<div>
|
||||
<div class="control-group date">
|
||||
<date @onChange="applyFilter('start', $event)"><input type="text" class="control" id="start_date" value="{{ $startDate->format('Y-m-d') }}" placeholder="{{ __('admin::app.dashboard.from') }}" v-model="start"/></date>
|
||||
<date @onChange="applyFilter('start', $event)" hide-remove-button="1"><input type="text" class="control" id="start_date" value="{{ $startDate->format('Y-m-d') }}" placeholder="{{ __('admin::app.dashboard.from') }}" v-model="start"/></date>
|
||||
</div>
|
||||
|
||||
<div class="control-group date">
|
||||
<date @onChange="applyFilter('end', $event)"><input type="text" class="control" id="end_date" value="{{ $endDate->format('Y-m-d') }}" placeholder="{{ __('admin::app.dashboard.to') }}" v-model="end"/></date>
|
||||
<date @onChange="applyFilter('end', $event)" hide-remove-button="1"><input type="text" class="control" id="end_date" value="{{ $endDate->format('Y-m-d') }}" placeholder="{{ __('admin::app.dashboard.to') }}" v-model="end"/></date>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"/css/default-booking.css": "/css/default-booking.css?id=ab5abfabd8e0f6df6466",
|
||||
"/css/velocity-booking.css": "/css/velocity-booking.css?id=fb0d5b9e37ed77d662d1"
|
||||
"/css/default-booking.css": "/css/default-booking.css?id=76de1f2b8e064c1e9043",
|
||||
"/css/velocity-booking.css": "/css/velocity-booking.css?id=847aebb5031ed219528e"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ class Booking extends Model implements BookingContract
|
|||
|
||||
protected $fillable = [
|
||||
'qty',
|
||||
'from',
|
||||
'to',
|
||||
'available_from',
|
||||
'available_to',
|
||||
'order_item_id',
|
||||
'booking_product_event_ticket_id',
|
||||
'product_id',
|
||||
|
|
|
|||
|
|
@ -133,6 +133,19 @@
|
|||
top: 16px;
|
||||
left: 100%;
|
||||
}
|
||||
|
||||
.cross-icon {
|
||||
margin-left: -48px;
|
||||
top: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
&.has-error {
|
||||
&.date {
|
||||
&::after {
|
||||
margin-top: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.slots {
|
||||
|
|
|
|||
|
|
@ -132,6 +132,19 @@
|
|||
top: 14px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
.cross-icon {
|
||||
margin-left: -48px;
|
||||
top: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
&.has-error {
|
||||
&.date {
|
||||
&::after {
|
||||
margin-top: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.slots {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,5 @@
|
|||
@section('css')
|
||||
<style>
|
||||
.slot-list .control-group.date::after {
|
||||
margin-top: -13px;
|
||||
left: 100%;
|
||||
}
|
||||
|
||||
.has-control-group .control-group {
|
||||
width: 50%;
|
||||
float: left;
|
||||
|
|
@ -43,7 +38,9 @@
|
|||
<div class="control-group" :class="[errors.has('booking[type]') ? 'has-error' : '']">
|
||||
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.booking-type') }}</label>
|
||||
|
||||
<select v-validate="'required'" name="booking[type]" v-model="booking.type" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.booking-type') }}"">
|
||||
<input type="hidden" name="booking[type]" :value="booking.type"/>
|
||||
|
||||
<select v-validate="'required'" name="booking[type]" v-model="booking.type" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.booking-type') }}"" :disabled="! is_new">
|
||||
<option value="default">{{ __('bookingproduct::app.admin.catalog.products.default') }}</option>
|
||||
<option value="appointment">{{ __('bookingproduct::app.admin.catalog.products.appointment-booking') }}</option>
|
||||
<option value="event">{{ __('bookingproduct::app.admin.catalog.products.event-booking') }}</option>
|
||||
|
|
@ -134,6 +131,8 @@
|
|||
|
||||
data: function() {
|
||||
return {
|
||||
is_new: bookingProduct ? false : true,
|
||||
|
||||
booking: bookingProduct ? bookingProduct : {
|
||||
|
||||
type: 'default',
|
||||
|
|
@ -149,6 +148,13 @@
|
|||
available_to: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
created: function() {
|
||||
this.booking.available_from = "{{ $bookingProduct && $bookingProduct->available_from ? $bookingProduct->available_from->format('Y-m-d H:i:s') : '' }}";
|
||||
|
||||
|
||||
this.booking.available_to = "{{ $bookingProduct && $bookingProduct->available_to ? $bookingProduct->available_to->format('Y-m-d H:i:s') : '' }}";
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@
|
|||
<label class="ticket-label">{{ __('bookingproduct::app.admin.catalog.products.special-price-from') }}</label>
|
||||
|
||||
<datetime>
|
||||
<input type="text" v-validate="'date_format:yyyy-MM-dd HH:mm:ss|after:{{\Carbon\Carbon::yesterday()->format('Y-m-d 23:59:59')}}'" :name="controlName + '[special_price_from]'" v-model="ticketItem.special_price_from" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.special-price-from') }}"" ref="special_price_from" style="width:70%"/>
|
||||
<input type="text" v-validate="'date_format:yyyy-MM-dd HH:mm:ss|after:{{\Carbon\Carbon::yesterday()->format('Y-m-d 23:59:59')}}'" :name="controlName + '[special_price_from]'" v-model="ticketItem.special_price_from" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.special-price-from') }}"" ref="special_price_from" style="width:100%"/>
|
||||
</datetime>
|
||||
|
||||
<span class="control-error" v-if="errors.has(controlName + '[special_price_from]')">@{{ errors.first(controlName + '[special_price_from]') }}</span>
|
||||
|
|
@ -96,7 +96,7 @@
|
|||
<label class="ticket-label">{{ __('bookingproduct::app.admin.catalog.products.special-price-to') }}</label>
|
||||
|
||||
<datetime>
|
||||
<input type="text" v-validate="'date_format:yyyy-MM-dd HH:mm:ss|after:special_price_from'" :name="controlName + '[special_price_to]'" v-model="ticketItem.special_price_to" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.special-price-to') }}"" ref="special_price_to" style="width:70%"/>
|
||||
<input type="text" v-validate="'date_format:yyyy-MM-dd HH:mm:ss|after:special_price_from'" :name="controlName + '[special_price_to]'" v-model="ticketItem.special_price_to" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.special-price-to') }}"" ref="special_price_to" style="width:100%"/>
|
||||
</datetime>
|
||||
|
||||
<span class="control-error" v-if="errors.has(controlName + '[special_price_to]')">@{{ errors.first(controlName + '[special_price_to]') }}</span>
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@
|
|||
|
||||
selected_slot: '',
|
||||
|
||||
slot_from: 0,
|
||||
slot_from: '',
|
||||
|
||||
date_from: '',
|
||||
|
||||
|
|
@ -179,7 +179,7 @@
|
|||
.then (function(response) {
|
||||
this_this.selected_slot = '';
|
||||
|
||||
this_this.slot_from = 0;
|
||||
this_this.slot_from = '';
|
||||
|
||||
this_this.slots = response.data.data;
|
||||
})
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@
|
|||
|
||||
selected_slot: '',
|
||||
|
||||
slot_from: 0,
|
||||
slot_from: '',
|
||||
|
||||
date_from: '',
|
||||
|
||||
|
|
@ -179,7 +179,7 @@
|
|||
.then (function(response) {
|
||||
this_this.selected_slot = '';
|
||||
|
||||
this_this.slot_from = 0;
|
||||
this_this.slot_from = '';
|
||||
|
||||
this_this.slots = response.data.data;
|
||||
})
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
namespace Webkul\Checkout;
|
||||
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Webkul\Checkout\Models\Cart as CartModel;
|
||||
use Webkul\Checkout\Models\CartAddress;
|
||||
use Webkul\Checkout\Repositories\CartRepository;
|
||||
|
|
@ -122,9 +124,11 @@ class Cart
|
|||
/**
|
||||
* Add Items in a cart with some cart and item details.
|
||||
*
|
||||
* @param int $productId
|
||||
* @param array $data
|
||||
* @return \Webkul\Checkout\Contracts\Cart|\Exception|array
|
||||
* @param int $productId
|
||||
* @param array $data
|
||||
*
|
||||
* @return \Webkul\Checkout\Contracts\Cart|string|array
|
||||
* @throws Exception
|
||||
*/
|
||||
public function addProduct($productId, $data)
|
||||
{
|
||||
|
|
@ -147,7 +151,7 @@ class Cart
|
|||
session()->forget('cart');
|
||||
}
|
||||
|
||||
throw new \Exception($cartProducts);
|
||||
throw new Exception($cartProducts);
|
||||
} else {
|
||||
$parentCartItem = null;
|
||||
|
||||
|
|
@ -161,7 +165,7 @@ class Cart
|
|||
if (! $cartItem) {
|
||||
$cartItem = $this->cartItemRepository->create(array_merge($cartProduct, ['cart_id' => $cart->id]));
|
||||
} else {
|
||||
if (isset($cartProduct['parent_id']) && $cartItem->parent_id != $parentCartItem->id) {
|
||||
if (isset($cartProduct['parent_id']) && $cartItem->parent_id !== $parentCartItem->id) {
|
||||
$cartItem = $this->cartItemRepository->create(array_merge($cartProduct, [
|
||||
'cart_id' => $cart->id
|
||||
]));
|
||||
|
|
@ -218,7 +222,7 @@ class Cart
|
|||
$cart = $this->cartRepository->create($cartData);
|
||||
|
||||
if (! $cart) {
|
||||
session()->flash('error', trans('shop::app.checkout.cart.create-error'));
|
||||
session()->flash('error', __('shop::app.checkout.cart.create-error'));
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
@ -232,7 +236,8 @@ class Cart
|
|||
* Update cart items information
|
||||
*
|
||||
* @param array $data
|
||||
* @return bool|void|\Exception
|
||||
*
|
||||
* @return bool|void|Exception
|
||||
*/
|
||||
public function updateItems($data)
|
||||
{
|
||||
|
|
@ -246,13 +251,13 @@ class Cart
|
|||
if ($quantity <= 0) {
|
||||
$this->removeItem($itemId);
|
||||
|
||||
throw new \Exception(trans('shop::app.checkout.cart.quantity.illegal'));
|
||||
throw new Exception(__('shop::app.checkout.cart.quantity.illegal'));
|
||||
}
|
||||
|
||||
$item->quantity = $quantity;
|
||||
|
||||
if (! $this->isItemHaveQuantity($item)) {
|
||||
throw new \Exception(trans('shop::app.checkout.cart.quantity.inventory_warning'));
|
||||
throw new Exception(__('shop::app.checkout.cart.quantity.inventory_warning'));
|
||||
}
|
||||
|
||||
Event::dispatch('checkout.cart.update.before', $item);
|
||||
|
|
@ -499,7 +504,7 @@ class Cart
|
|||
$this->saveAddressesWhenRequested($data, $billingAddressData, $shippingAddressData);
|
||||
|
||||
$this->linkAddresses($cart, $billingAddressData, $shippingAddressData);
|
||||
|
||||
|
||||
$this->assignCustomerFields($cart);
|
||||
|
||||
$cart->save();
|
||||
|
|
|
|||
|
|
@ -3,12 +3,34 @@
|
|||
/** @var \Illuminate\Database\Eloquent\Factory $factory */
|
||||
|
||||
use Faker\Generator as Faker;
|
||||
use Webkul\Checkout\Models\Cart;
|
||||
use Webkul\Checkout\Models\CartItem;
|
||||
use Webkul\Product\Models\Product;
|
||||
|
||||
$factory->define(CartItem::class, function (Faker $faker) {
|
||||
$factory->define(CartItem::class, function (Faker $faker, array $attributes) {
|
||||
$now = date("Y-m-d H:i:s");
|
||||
|
||||
if (isset($attributes['product_id'])) {
|
||||
$product = Product::where('id', $attributes['product_id'])->first();
|
||||
} else {
|
||||
$product = factory(Product::class)->create();
|
||||
}
|
||||
|
||||
$fallbackPrice = $faker->randomFloat(4, 0, 1000);
|
||||
|
||||
return [
|
||||
'quantity' => 1,
|
||||
'sku' => $product->sku,
|
||||
'type' => $product->type,
|
||||
'name' => $product->name,
|
||||
'price' => $product->price ?? $fallbackPrice,
|
||||
'base_price' => $product->price ?? $fallbackPrice,
|
||||
'total' => $product->price ?? $fallbackPrice,
|
||||
'base_total' => $product->price ?? $fallbackPrice,
|
||||
'product_id' => $product->id,
|
||||
'cart_id' => function () {
|
||||
return factory(Cart::class)->create()->id;
|
||||
},
|
||||
'created_at' => $now,
|
||||
'updated_at' => $now,
|
||||
];
|
||||
|
|
|
|||
|
|
@ -24,5 +24,6 @@ return [
|
|||
\Webkul\CartRule\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\CMS\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\Velocity\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\SocialLogin\Providers\ModuleServiceProvider::class,
|
||||
]
|
||||
];
|
||||
|
|
@ -2,10 +2,13 @@
|
|||
|
||||
namespace Webkul\Customer\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
/**
|
||||
* Contains route related configuration
|
||||
*
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class Payment
|
|||
|
||||
return [
|
||||
'jump_to_section' => 'payment',
|
||||
'paymentMethods' => $this->getPaymentMethods(),
|
||||
'paymentMethods' => $paymentMethods,
|
||||
'html' => view('shop::checkout.onepage.payment', compact('paymentMethods'))->render(),
|
||||
];
|
||||
}
|
||||
|
|
@ -68,4 +68,4 @@ class Payment
|
|||
|
||||
return $payment->getRedirectUrl();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ class Ipn
|
|||
{
|
||||
if ($this->post['payment_status'] == 'Completed') {
|
||||
if ($this->post['mc_gross'] != $this->order->grand_total) {
|
||||
|
||||
return;
|
||||
} else {
|
||||
$this->orderRepository->update(['status' => 'processing'], $this->order->id);
|
||||
|
||||
|
|
|
|||
|
|
@ -12,5 +12,3 @@ Route::group(['middleware' => ['web']], function () {
|
|||
});
|
||||
|
||||
Route::get('paypal/standard/ipn', 'Webkul\Paypal\Http\Controllers\StandardController@ipn')->name('paypal.standard.ipn');
|
||||
|
||||
Route::post('paypal/standard/ipn', 'Webkul\Paypal\Http\Controllers\StandardController@ipn')->name('paypal.standard.ipn');
|
||||
|
|
|
|||
|
|
@ -356,13 +356,17 @@ class ProductRepository extends Repository
|
|||
->where('product_flat.channel', $channel)
|
||||
->where('product_flat.locale', $locale)
|
||||
->whereNotNull('product_flat.url_key')
|
||||
->where(function($sub_query) use ($term) {
|
||||
$sub_query->where('product_flat.name', 'like', '%' . urldecode($term) . '%')
|
||||
->orWhere('product_flat.short_description', 'like', '%' . urldecode($term) . '%');
|
||||
})
|
||||
->where(function($subQuery) use ($term) {
|
||||
$queries = explode('_', $term);
|
||||
|
||||
foreach (array_map('trim', $queries) as $value) {
|
||||
$subQuery->orWhere('product_flat.name', 'like', '%' . urldecode($value) . '%')
|
||||
->orWhere('product_flat.short_description', 'like', '%' . urldecode($value) . '%');
|
||||
}
|
||||
})
|
||||
->orderBy('product_id', 'desc');
|
||||
})->paginate(16);
|
||||
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace Webkul\Product\Repositories;
|
||||
|
||||
use Illuminate\Container\Container as App;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Webkul\Core\Eloquent\Repository;
|
||||
use Webkul\Product\Repositories\ProductRepository;
|
||||
|
||||
|
|
@ -41,4 +42,15 @@ class SearchRepository extends Repository
|
|||
{
|
||||
return $this->productRepository->searchProductByAttribute($data['term'] ?? '');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return void
|
||||
*/
|
||||
public function uploadSearchImage($data)
|
||||
{
|
||||
$path = request()->file('image')->store('product-search');
|
||||
|
||||
return Storage::url($path);
|
||||
}
|
||||
}
|
||||
|
|
@ -20,7 +20,7 @@ class Grouped extends AbstractType
|
|||
* @var \Webkul\Product\Repositories\ProductGroupedProductRepository
|
||||
*/
|
||||
protected $productGroupedProductRepository;
|
||||
|
||||
|
||||
/**
|
||||
* Skip attribute for downloadable product type
|
||||
*
|
||||
|
|
@ -30,7 +30,7 @@ class Grouped extends AbstractType
|
|||
|
||||
/**
|
||||
* These blade files will be included in product edit page
|
||||
*
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $additionalViews = [
|
||||
|
|
@ -124,7 +124,7 @@ class Grouped extends AbstractType
|
|||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getMinimalPrice()
|
||||
public function getMinimalPrice($qty = null)
|
||||
{
|
||||
$minPrices = [];
|
||||
|
||||
|
|
@ -180,7 +180,7 @@ class Grouped extends AbstractType
|
|||
if (is_string($cartProducts)) {
|
||||
return $cartProducts;
|
||||
}
|
||||
|
||||
|
||||
$products = array_merge($products, $cartProducts);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@
|
|||
/** @var \Illuminate\Database\Eloquent\Factory $factory */
|
||||
|
||||
use Faker\Generator as Faker;
|
||||
use Webkul\Product\Models\Product;
|
||||
use Webkul\Sales\Models\Order;
|
||||
use Webkul\Product\Models\Product;
|
||||
use Webkul\Sales\Models\OrderItem;
|
||||
|
||||
$factory->define(OrderItem::class, function (Faker $faker, array $attributes) {
|
||||
|
|
@ -16,20 +16,23 @@ $factory->define(OrderItem::class, function (Faker $faker, array $attributes) {
|
|||
$product = factory(Product::class)->create();
|
||||
}
|
||||
|
||||
$fallbackPrice = $faker->randomFloat(4, 0, 1000);
|
||||
|
||||
return [
|
||||
'sku' => $product->sku,
|
||||
'type' => $product->type,
|
||||
'name' => $product->name,
|
||||
'price' => $product->price,
|
||||
'base_price' => $product->price,
|
||||
'total' => $product->price,
|
||||
'base_total' => $product->price,
|
||||
'price' => $product->price ?? $fallbackPrice,
|
||||
'base_price' => $product->price ?? $fallbackPrice,
|
||||
'total' => $product->price ?? $fallbackPrice,
|
||||
'base_total' => $product->price ?? $fallbackPrice,
|
||||
'product_id' => $product->id,
|
||||
'qty_ordered' => 1,
|
||||
'qty_shipped' => 0,
|
||||
'qty_invoiced' => 0,
|
||||
'qty_canceled' => 0,
|
||||
'qty_refunded' => 0,
|
||||
'additional' => [],
|
||||
'order_id' => function () {
|
||||
return factory(Order::class)->create()->id;
|
||||
},
|
||||
|
|
@ -37,7 +40,4 @@ $factory->define(OrderItem::class, function (Faker $faker, array $attributes) {
|
|||
'updated_at' => $now,
|
||||
'product_type' => Product::class,
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
|
@ -213,6 +213,8 @@ class OrderItem extends Model implements OrderItemContract
|
|||
|
||||
$array['qty_to_refund'] = $this->qty_to_refund;
|
||||
|
||||
$array['downloadable_links'] = $this->downloadable_link_purchased;
|
||||
|
||||
return $array;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
/*!
|
||||
* Sizzle CSS Selector Engine v2.3.4
|
||||
* Sizzle CSS Selector Engine v2.3.5
|
||||
* https://sizzlejs.com/
|
||||
*
|
||||
* Copyright JS Foundation and other contributors
|
||||
* Released under the MIT license
|
||||
* https://js.foundation/
|
||||
*
|
||||
* Date: 2019-04-08
|
||||
* Date: 2020-03-14
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
* jQuery JavaScript Library v3.4.1
|
||||
* jQuery JavaScript Library v3.5.1
|
||||
* https://jquery.com/
|
||||
*
|
||||
* Includes Sizzle.js
|
||||
|
|
@ -37,7 +37,7 @@
|
|||
* Released under the MIT license
|
||||
* https://jquery.org/license
|
||||
*
|
||||
* Date: 2019-05-01T21:04Z
|
||||
* Date: 2020-05-04T22:49Z
|
||||
*/
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"/js/shop.js": "/js/shop.js?id=6bb928c2e527b045a56b",
|
||||
"/css/shop.css": "/css/shop.css?id=d1c42d10589004fac3f8"
|
||||
"/js/shop.js": "/js/shop.js?id=b0ae98b46b290f0fca8b",
|
||||
"/css/shop.css": "/css/shop.css?id=0664f52f2390473afc00"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
[
|
||||
'key' => 'general.content.shop',
|
||||
'name' => 'shop::app.products.settings',
|
||||
'sort' => 1,
|
||||
'fields' => [
|
||||
[
|
||||
'name' => 'compare_option',
|
||||
'title' => 'shop::app.products.compare_options',
|
||||
'type' => 'boolean',
|
||||
'locale_based' => true,
|
||||
'channel_based' => true,
|
||||
],
|
||||
],
|
||||
]
|
||||
];
|
||||
|
||||
?>
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace Webkul\Shop\Http\Controllers;
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Webkul\Customer\Repositories\WishlistRepository;
|
||||
use Webkul\Product\Repositories\ProductRepository;
|
||||
use Webkul\Checkout\Contracts\Cart as CartModel;
|
||||
|
|
@ -75,7 +76,7 @@ class CartController extends Controller
|
|||
}
|
||||
|
||||
if ($result instanceof CartModel) {
|
||||
session()->flash('success', trans('shop::app.checkout.cart.item.success'));
|
||||
session()->flash('success', __('shop::app.checkout.cart.item.success'));
|
||||
|
||||
if ($customer = auth()->guard('customer')->user()) {
|
||||
$this->wishlistRepository->deleteWhere(['product_id' => $id, 'customer_id' => $customer->id]);
|
||||
|
|
@ -88,10 +89,13 @@ class CartController extends Controller
|
|||
}
|
||||
}
|
||||
} catch(\Exception $e) {
|
||||
session()->flash('error', trans($e->getMessage()));
|
||||
session()->flash('error', __($e->getMessage()));
|
||||
|
||||
$product = $this->productRepository->find($id);
|
||||
|
||||
Log::error('Shop CartController: ' . $e->getMessage(),
|
||||
['product_id' => $id, 'cart_id' => cart()->getCart() ?? 0]);
|
||||
|
||||
return redirect()->route('shop.productOrCategory.index', $product->url_key);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,8 +4,9 @@ namespace Webkul\Shop\Http\Controllers;
|
|||
|
||||
use Webkul\Shop\Http\Controllers\Controller;
|
||||
use Webkul\Core\Repositories\SliderRepository;
|
||||
use Webkul\Product\Repositories\SearchRepository;
|
||||
|
||||
class HomeController extends Controller
|
||||
class HomeController extends Controller
|
||||
{
|
||||
/**
|
||||
* SliderRepository object
|
||||
|
|
@ -14,16 +15,29 @@ use Webkul\Core\Repositories\SliderRepository;
|
|||
*/
|
||||
protected $sliderRepository;
|
||||
|
||||
/**
|
||||
* SearchRepository object
|
||||
*
|
||||
* @var \Webkul\Core\Repositories\SearchRepository
|
||||
*/
|
||||
protected $searchRepository;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @param \Webkul\Core\Repositories\SliderRepository $sliderRepository
|
||||
* @param \Webkul\Product\Repositories\SearchRepository $searchRepository
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(SliderRepository $sliderRepository)
|
||||
public function __construct(
|
||||
SliderRepository $sliderRepository,
|
||||
SearchRepository $searchRepository
|
||||
)
|
||||
{
|
||||
$this->sliderRepository = $sliderRepository;
|
||||
|
||||
$this->searchRepository = $searchRepository;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
|
|
@ -39,10 +53,10 @@ use Webkul\Core\Repositories\SliderRepository;
|
|||
$currentLocale = core()->getCurrentLocale();
|
||||
|
||||
$sliderData = $this->sliderRepository
|
||||
->where('channel_id', $currentChannel->id)
|
||||
->where('locale', $currentLocale->code)
|
||||
->get()
|
||||
->toArray();
|
||||
->where('channel_id', $currentChannel->id)
|
||||
->where('locale', $currentLocale->code)
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
return view($this->_config['view'], compact('sliderData'));
|
||||
}
|
||||
|
|
@ -56,4 +70,16 @@ use Webkul\Core\Repositories\SliderRepository;
|
|||
{
|
||||
abort(404);
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload image for product search with machine learning
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function upload()
|
||||
{
|
||||
$url = $this->searchRepository->uploadSearchImage(request()->all());
|
||||
|
||||
return $url;
|
||||
}
|
||||
}
|
||||
|
|
@ -67,8 +67,17 @@ class ProductsCategoriesProxyController extends Controller
|
|||
return view($this->_config['product_view'], compact('product', 'customer'));
|
||||
}
|
||||
|
||||
abort(404);
|
||||
}
|
||||
|
||||
abort(404);
|
||||
$sliderRepository = app('Webkul\Core\Repositories\SliderRepository');
|
||||
|
||||
$sliderData = $sliderRepository
|
||||
->where('channel_id', core()->getCurrentChannel()->id)
|
||||
->where('locale', core()->getCurrentLocale()->code)
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
return view('shop::home.index', compact('sliderData'));
|
||||
}
|
||||
}
|
||||
|
|
@ -18,6 +18,9 @@ Route::group(['middleware' => ['web', 'locale', 'theme', 'currency']], function
|
|||
'view' => 'shop::search.search'
|
||||
])->name('shop.search.index');
|
||||
|
||||
//Upload image for search product
|
||||
Route::post('/upload-search-image', 'Webkul\Shop\Http\Controllers\HomeController@upload')->name('shop.image.search.upload');
|
||||
|
||||
//Country State Selector
|
||||
Route::get('get/countries', 'Webkul\Core\Http\Controllers\CountryStateController@getCountries')->defaults('_config', [
|
||||
'view' => 'shop::test'
|
||||
|
|
@ -201,7 +204,7 @@ Route::group(['middleware' => ['web', 'locale', 'theme', 'currency']], function
|
|||
//Customer Profile Edit Form Store
|
||||
Route::post('profile/edit', 'Webkul\Customer\Http\Controllers\CustomerController@update')->defaults('_config', [
|
||||
'redirect' => 'customer.profile.index'
|
||||
])->name('customer.profile.edit');
|
||||
])->name('customer.profile.store');
|
||||
|
||||
//Customer Profile Delete Form Store
|
||||
Route::post('profile/destroy', 'Webkul\Customer\Http\Controllers\CustomerController@destroy')->defaults('_config', [
|
||||
|
|
@ -225,7 +228,7 @@ Route::group(['middleware' => ['web', 'locale', 'theme', 'currency']], function
|
|||
Route::post('addresses/create', 'Webkul\Customer\Http\Controllers\AddressController@store')->defaults('_config', [
|
||||
'view' => 'shop::customers.account.address.address',
|
||||
'redirect' => 'customer.address.index'
|
||||
])->name('customer.address.create');
|
||||
])->name('customer.address.store');
|
||||
|
||||
//Customer Address Edit Form Show
|
||||
Route::get('addresses/edit/{id}', 'Webkul\Customer\Http\Controllers\AddressController@edit')->defaults('_config', [
|
||||
|
|
@ -235,7 +238,7 @@ Route::group(['middleware' => ['web', 'locale', 'theme', 'currency']], function
|
|||
//Customer Address Edit Form Store
|
||||
Route::put('addresses/edit/{id}', 'Webkul\Customer\Http\Controllers\AddressController@update')->defaults('_config', [
|
||||
'redirect' => 'customer.address.index'
|
||||
])->name('customer.address.edit');
|
||||
])->name('customer.address.update');
|
||||
|
||||
//Customer Address Make Default
|
||||
Route::get('addresses/default/{id}', 'Webkul\Customer\Http\Controllers\AddressController@makeDefault')->name('make.default.address');
|
||||
|
|
|
|||
|
|
@ -81,5 +81,9 @@ class ShopServiceProvider extends ServiceProvider
|
|||
$this->mergeConfigFrom(
|
||||
dirname(__DIR__) . '/Config/menu.php', 'menu.customer'
|
||||
);
|
||||
|
||||
$this->mergeConfigFrom(
|
||||
dirname(__DIR__) . '/Config/system.php', 'core'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -38,7 +38,9 @@ $(document).ready(function () {
|
|||
el: "#app",
|
||||
|
||||
data: {
|
||||
modalIds: {}
|
||||
modalIds: {},
|
||||
|
||||
show_loader: false
|
||||
},
|
||||
|
||||
mounted: function () {
|
||||
|
|
@ -114,6 +116,14 @@ $(document).ready(function () {
|
|||
|
||||
showModal(id) {
|
||||
this.$set(this.modalIds, id, true);
|
||||
},
|
||||
|
||||
showLoader() {
|
||||
this.show_loader = true;
|
||||
},
|
||||
|
||||
hideLoader() {
|
||||
this.show_loader = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -775,6 +775,7 @@ section.slider-block {
|
|||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
|
||||
.search-field {
|
||||
height: 38px;
|
||||
|
|
@ -804,6 +805,21 @@ section.slider-block {
|
|||
margin: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.image-search-container {
|
||||
position: absolute;
|
||||
right: 41px;
|
||||
top: 7px;
|
||||
background: #fff;
|
||||
|
||||
img {
|
||||
display: none;
|
||||
}
|
||||
|
||||
input {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3807,6 +3823,31 @@ section.review {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.image-search-container {
|
||||
.icon {
|
||||
&.camera-icon {
|
||||
top: 10px;
|
||||
position: relative;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
input[type=file] {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.image-search-result {
|
||||
.searched-terms {
|
||||
margin-top: 15px;
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
.term-list {
|
||||
line-height: 35px;
|
||||
}
|
||||
}
|
||||
}
|
||||
/// rtl css start here
|
||||
.rtl {
|
||||
|
|
@ -3846,6 +3887,11 @@ section.review {
|
|||
border-bottom-right-radius: 0px;
|
||||
margin-left: -2px;
|
||||
}
|
||||
|
||||
.image-search-container {
|
||||
left: 48px;
|
||||
right: unset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4483,4 +4529,41 @@ section.review {
|
|||
b {
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.image-search-result {
|
||||
background-color: rgba(0, 65, 255, 0.1);
|
||||
border: 1px solid #0041ff;
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
|
||||
.searched-image {
|
||||
float: left;
|
||||
|
||||
img {
|
||||
width: 150px;
|
||||
height: auto;
|
||||
box-shadow: rgba(0, 0, 0, 0.32) 1px 1px 3px 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.searched-terms {
|
||||
margin-left: 20px;
|
||||
display: inline-block;
|
||||
|
||||
h3 {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.term-list {
|
||||
a {
|
||||
padding: 5px 8px;
|
||||
background: #fff;
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -71,7 +71,8 @@ return [
|
|||
'no-results' => 'لا توجد نتائج',
|
||||
'page-title' => 'بحث',
|
||||
'found-results' => 'تم العثور على نتائج البحث',
|
||||
'found-result' => 'تم العثور على نتيجة البحث'
|
||||
'found-result' => 'تم العثور على نتيجة البحث',
|
||||
'analysed-keywords' => 'Analysed Keywords'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
@ -417,6 +418,8 @@ return [
|
|||
'total-amount' => 'المبلغ الإجمالي',
|
||||
'none' => 'لا شيء',
|
||||
'available-for-order' => 'متوفر لطلب الشراء',
|
||||
'settings' => 'Settings',
|
||||
'compare_options' => 'Compare Options',
|
||||
],
|
||||
|
||||
// 'reviews' => [
|
||||
|
|
|
|||
|
|
@ -71,7 +71,8 @@ return [
|
|||
'no-results' => 'Keine Ergebnisse gefunden',
|
||||
'page-title' => config('app.name') . ' - Suchen',
|
||||
'found-results' => 'Suchergebnisse gefunden',
|
||||
'found-result' => 'Suchergebnis gefunden'
|
||||
'found-result' => 'Suchergebnis gefunden',
|
||||
'analysed-keywords' => 'Analysed Keywords'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
@ -413,7 +414,9 @@ return [
|
|||
'your-customization' => 'Ihre Anpassung',
|
||||
'total-amount' => 'Gesamtmenge',
|
||||
'none' => 'Keine',
|
||||
'available' => 'Verfügbar'
|
||||
'available' => 'Verfügbar',
|
||||
'settings' => 'Settings',
|
||||
'compare_options' => 'Compare Options',
|
||||
],
|
||||
|
||||
// 'reviews' => [
|
||||
|
|
|
|||
|
|
@ -71,7 +71,8 @@ return [
|
|||
'no-results' => 'No Results Found',
|
||||
'page-title' => config('app.name') . ' - Search',
|
||||
'found-results' => 'Search Results Found',
|
||||
'found-result' => 'Search Result Found'
|
||||
'found-result' => 'Search Result Found',
|
||||
'analysed-keywords' => 'Analysed Keywords'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
@ -416,7 +417,9 @@ return [
|
|||
'your-customization' => 'Your Customization',
|
||||
'total-amount' => 'Total Amount',
|
||||
'none' => 'None',
|
||||
'available-for-order' => 'Available for Order'
|
||||
'available-for-order' => 'Available for Order',
|
||||
'settings' => 'Settings',
|
||||
'compare_options' => 'Compare Options',
|
||||
],
|
||||
|
||||
// 'reviews' => [
|
||||
|
|
|
|||
|
|
@ -68,7 +68,8 @@ return [
|
|||
'no-results' => 'No hay resultados',
|
||||
'page-title' => 'Búsqueda',
|
||||
'found-results' => 'No hay resultados de búsqueda',
|
||||
'found-result' => 'Resultados de la búsqueda'
|
||||
'found-result' => 'Resultados de la búsqueda',
|
||||
'analysed-keywords' => 'Analysed Keywords'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
@ -387,6 +388,8 @@ return [
|
|||
'select-above-options' => 'Primero selecciona las opciones de arriba.',
|
||||
'less-quantity' => 'La cantidad no debe ser inferior a uno.',
|
||||
'available-for-order' => 'Disponible para ordenar',
|
||||
'settings' => 'Settings',
|
||||
'compare_options' => 'Compare Options',
|
||||
],
|
||||
|
||||
// 'reviews' => [
|
||||
|
|
|
|||
|
|
@ -71,7 +71,8 @@ return [
|
|||
'no-results' => 'نتیجه ای پیدا نشد',
|
||||
'page-title' => 'فروشگاه - جستجو',
|
||||
'found-results' => 'نتایج جستجو یافت شد',
|
||||
'found-result' => 'نتیجه جستجو یافت شد'
|
||||
'found-result' => 'نتیجه جستجو یافت شد',
|
||||
'analysed-keywords' => 'Analysed Keywords'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
@ -416,6 +417,8 @@ return [
|
|||
'total-amount' => 'مقدار کل',
|
||||
'none' => 'هیچ یک',
|
||||
'available-for-order' => 'Available for Order',
|
||||
'settings' => 'Settings',
|
||||
'compare_options' => 'Compare Options',
|
||||
],
|
||||
|
||||
// 'reviews' => [
|
||||
|
|
|
|||
|
|
@ -71,7 +71,8 @@ return [
|
|||
'no-results' => 'Nessun risultato trovato',
|
||||
'page-title' => config('app.name') . ' - Cerca',
|
||||
'found-results' => 'Risultati trovati',
|
||||
'found-result' => 'Risultato trovato'
|
||||
'found-result' => 'Risultato trovato',
|
||||
'analysed-keywords' => 'Analysed Keywords'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
@ -415,7 +416,9 @@ return [
|
|||
'your-customization' => 'La tua Personalizzazione',
|
||||
'total-amount' => 'Totale',
|
||||
'none' => 'Nessuno',
|
||||
'available-for-order' => 'Disponibile per lordine'
|
||||
'available-for-order' => 'Disponibile per lordine',
|
||||
'settings' => 'Settings',
|
||||
'compare_options' => 'Compare Options',
|
||||
],
|
||||
|
||||
// 'reviews' => [
|
||||
|
|
@ -580,7 +583,7 @@ return [
|
|||
'subject' => 'Nuovo commento aggiunto al tuo ordine',
|
||||
'dear' => ':customer_name',
|
||||
'final-summary' => 'Grazie per aver mostrato interesse per il nostro store',
|
||||
'help' => 'Se hai bisogno di aiuto contattaci all'indirizzo :support_email',
|
||||
'help' => 'Se hai bisogno di aiuto contattaci all\'indirizzo :support_email',
|
||||
'thanks' => 'Graze!',
|
||||
],
|
||||
|
||||
|
|
|
|||
|
|
@ -68,7 +68,8 @@ return [
|
|||
'no-results' => 'お探しの条件に合う検索結果が見つかりませんでした。',
|
||||
'page-title' => '検索',
|
||||
'found-results' => '検索結果',
|
||||
'found-result' => '検索結果'
|
||||
'found-result' => '検索結果',
|
||||
'analysed-keywords' => 'Analysed Keywords'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
@ -383,6 +384,8 @@ return [
|
|||
'select-above-options' => '最初に上記のオプションを選択してください.',
|
||||
'less-quantity' => '数量1未満は選択できません.',
|
||||
'available-for-order' => '注文可能',
|
||||
'settings' => 'Settings',
|
||||
'compare_options' => 'Compare Options',
|
||||
],
|
||||
|
||||
'buynow' => [
|
||||
|
|
|
|||
|
|
@ -70,7 +70,8 @@ return [
|
|||
'no-results' => 'No Results Found',
|
||||
'page-title' => config('app.name') . ' - Search',
|
||||
'found-results' => 'Search Results Found',
|
||||
'found-result' => 'Search Result Found'
|
||||
'found-result' => 'Search Result Found',
|
||||
'analysed-keywords' => 'Analysed Keywords'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
@ -420,7 +421,9 @@ return [
|
|||
'your-customization' => 'Uw maatwerk',
|
||||
'total-amount' => 'Totale hoeveelheid',
|
||||
'none' => 'Geen',
|
||||
'available-for-order' => 'Beschikbaar voor bestelling'
|
||||
'available-for-order' => 'Beschikbaar voor bestelling',
|
||||
'settings' => 'Settings',
|
||||
'compare_options' => 'Compare Options',
|
||||
],
|
||||
|
||||
// 'reviews' => [
|
||||
|
|
|
|||
|
|
@ -71,7 +71,8 @@ return [
|
|||
'no-results' => 'Nie znaleziono wyników',
|
||||
'page-title' => config('app.name') . ' - Szukaj',
|
||||
'found-results' => 'Dostępne wyniki wyszukiwania',
|
||||
'found-result' => 'Dostępny wynik wyszukiwania'
|
||||
'found-result' => 'Dostępny wynik wyszukiwania',
|
||||
'analysed-keywords' => 'Analysed Keywords'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
@ -79,7 +80,7 @@ return [
|
|||
'add-review-page-title' => 'Dodaj recenzję',
|
||||
'write-review' => 'Napisz recenzję',
|
||||
'review-title' => 'Nadaj opinii tytuł',
|
||||
'product-review-page-title' => ''Opinia o produkcie',
|
||||
'product-review-page-title' => 'Opinia o produkcie',
|
||||
'rating-reviews' => 'Oceny i recenzje',
|
||||
'submit' => 'WYŚLIJ',
|
||||
'delete-all' => 'Wszystkie recenzje zostały pomyślnie usunięte',
|
||||
|
|
@ -113,7 +114,8 @@ return [
|
|||
'success' => 'Konto utworzone pomyślnie.',
|
||||
'success-verify' => 'Konto zostało utworzone pomyślnie, wysłano wiadomość e-mail w celu weryfikacji.',
|
||||
'success-verify-email-unsent' => 'Konto zostało utworzone pomyślnie, lecz e-mail weryfikacyjny nie został wysłany.',
|
||||
'failed' => 'Błąd! Nie można utworzyć konta, spróbuj ponownie później.' => 'Twoje konto jest już zweryfikowane lub spróbuj ponownie wysłać nowy e-mail weryfikacyjny.',
|
||||
'failed' => 'Błąd! Nie można utworzyć konta, spróbuj ponownie później.',
|
||||
'success-verify-email-unsent' => 'Twoje konto jest już zweryfikowane lub spróbuj ponownie wysłać nowy e-mail weryfikacyjny.',
|
||||
'verification-not-sent' => 'Błąd! Problem z wysłaniem e-maila weryfikacyjnego, spróbuj ponownie później.',
|
||||
'verification-sent' => 'Wysłano e-mail weryfikacyjny',
|
||||
'verified' => 'Twoje konto zostało zweryfikowane, spróbuj się teraz zalogować.',
|
||||
|
|
@ -205,7 +207,7 @@ return [
|
|||
'make-default' => 'Ustaw jako domyślny',
|
||||
'default' => 'Domyślny',
|
||||
'contact' => 'Kontakt',
|
||||
'confirm-delete' => ''Czy na pewno chcesz usunąć ten adres?',
|
||||
'confirm-delete' => 'Czy na pewno chcesz usunąć ten adres?',
|
||||
'default-delete' => 'Nie można zmienić domyślnego adresu .',
|
||||
'enter-password' => 'Wprowadź hasło.',
|
||||
],
|
||||
|
|
@ -414,7 +416,9 @@ return [
|
|||
'your-customization' => 'Twoja personalizacja',
|
||||
'total-amount' => 'Całkowita kwota',
|
||||
'none' => 'Żaden',
|
||||
'available-for-order' => 'Dostępne na zamówienie'
|
||||
'available-for-order' => 'Dostępne na zamówienie',
|
||||
'settings' => 'Settings',
|
||||
'compare_options' => 'Compare Options',
|
||||
],
|
||||
|
||||
// 'reviews' => [
|
||||
|
|
@ -463,7 +467,7 @@ return [
|
|||
'quantity-error' => 'Żądana ilość nie jest dostępna.',
|
||||
'cart-subtotal' => 'Suma częściowa koszyka',
|
||||
'cart-remove-action' => 'Czy na pewno chcesz to zrobić ?',
|
||||
'partial-cart-update' => 'Tylko niektóre produkty zostały zaktualizowane' => '',
|
||||
'partial-cart-update' => 'Tylko niektóre produkty zostały zaktualizowane',
|
||||
'event' => [
|
||||
'expired' => 'To wydarzenie wygasło.'
|
||||
]
|
||||
|
|
@ -524,7 +528,7 @@ return [
|
|||
|
||||
'total' => [
|
||||
'order-summary' => 'Podsumowanie zamówienia',
|
||||
'sub-total' => 'Produkty,
|
||||
'sub-total' => 'Produkty',
|
||||
'grand-total' => 'Suma łączna',
|
||||
'delivery-charges' => 'Koszty dostawy',
|
||||
'tax' => 'Podatek',
|
||||
|
|
@ -590,7 +594,7 @@ return [
|
|||
'discount' => 'Rabat',
|
||||
'grand-total' => 'Suma łączna',
|
||||
'final-summary' => 'Dziękujemy za zakupy w naszym sklepie',
|
||||
'help' => ''Jeśli potrzebujesz jakiejkolwiek pomocy, skontaktuj się z nami pod adresem :support_email',
|
||||
'help' => 'Jeśli potrzebujesz jakiejkolwiek pomocy, skontaktuj się z nami pod adresem :support_email',
|
||||
'thanks' => 'Dzięki!',
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -71,7 +71,8 @@ return [
|
|||
'no-results' => 'Nenhum resultado encontrado',
|
||||
'page-title' => 'Buscar',
|
||||
'found-results' => 'Resultados da pesquisa encontrados',
|
||||
'found-result' => 'Resultado da pesquisa encontrado'
|
||||
'found-result' => 'Resultado da pesquisa encontrado',
|
||||
'analysed-keywords' => 'Analysed Keywords'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
@ -403,7 +404,9 @@ return [
|
|||
'your-customization' => 'Sua personalização',
|
||||
'total-amount' => 'Valor total',
|
||||
'none' => 'Nenhum',
|
||||
'available-for-order' => 'Disponível para encomenda'
|
||||
'available-for-order' => 'Disponível para encomenda',
|
||||
'settings' => 'Settings',
|
||||
'compare_options' => 'Compare Options',
|
||||
],
|
||||
|
||||
// 'reviews' => [
|
||||
|
|
|
|||
|
|
@ -414,7 +414,9 @@ return [
|
|||
'your-customization' => 'Özelleştirmeniz',
|
||||
'total-amount' => 'Toplam Miktar',
|
||||
'none' => 'Hiçbiri',
|
||||
'available-for-order' => 'Sipariş İçin Uygun'
|
||||
'available-for-order' => 'Sipariş İçin Uygun',
|
||||
'settings' => 'Settings',
|
||||
'compare_options' => 'Compare Options',
|
||||
],
|
||||
|
||||
// 'reviews' => [
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
{!! view_render_event('bagisto.shop.customers.account.address.create.before') !!}
|
||||
|
||||
<form id="customer-address-form" method="post" action="{{ route('customer.address.create') }}" @submit.prevent="onSubmit">
|
||||
<form id="customer-address-form" method="post" action="{{ route('customer.address.store') }}" @submit.prevent="onSubmit">
|
||||
|
||||
<div class="account-table-content">
|
||||
@csrf
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
{!! view_render_event('bagisto.shop.customers.account.address.edit.before', ['address' => $address]) !!}
|
||||
|
||||
<form id="customer-address-form" method="post" action="{{ route('customer.address.edit', $address->id) }}" @submit.prevent="onSubmit">
|
||||
<form id="customer-address-form" method="post" action="{{ route('customer.address.update', $address->id) }}" @submit.prevent="onSubmit">
|
||||
|
||||
<div class="account-table-content">
|
||||
@method('PUT')
|
||||
|
|
|
|||
|
|
@ -9,6 +9,16 @@
|
|||
|
||||
<div class="menu-block-content">
|
||||
<ul class="menubar">
|
||||
@php
|
||||
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false;
|
||||
@endphp
|
||||
|
||||
@if (! $showCompare)
|
||||
@php
|
||||
unset($menuItem['children']['compare']);
|
||||
@endphp
|
||||
@endif
|
||||
|
||||
@foreach ($menuItem['children'] as $subMenuItem)
|
||||
<li class="menu-item {{ $menu->getActive($subMenuItem) }}">
|
||||
<a href="{{ $subMenuItem['url'] }}">
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
{!! view_render_event('bagisto.shop.customers.account.profile.edit.before', ['customer' => $customer]) !!}
|
||||
|
||||
<form method="post" action="{{ route('customer.profile.edit') }}" @submit.prevent="onSubmit">
|
||||
<form method="post" action="{{ route('customer.profile.store') }}" @submit.prevent="onSubmit">
|
||||
|
||||
<div class="edit-form">
|
||||
@csrf
|
||||
|
|
|
|||
|
|
@ -218,8 +218,6 @@
|
|||
} else {
|
||||
this.$set(this, 'products', this.products.filter(product => product.id != productId));
|
||||
}
|
||||
|
||||
// window.showAlert(`alert-${response.data.status}`, response.data.label, response.data.message);
|
||||
})
|
||||
.catch(error => {
|
||||
console.log("{{ __('velocity::app.error.something_went_wrong') }}");
|
||||
|
|
@ -236,12 +234,6 @@
|
|||
}
|
||||
|
||||
this.setStorageValue('compared_product', updatedItems);
|
||||
|
||||
// window.showAlert(
|
||||
// `alert-success`,
|
||||
// "{{ __('velocity::app.shop.general.alert.success') }}",
|
||||
// `${this.__('customer.compare.removed')}`
|
||||
// );
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,11 @@
|
|||
<?php
|
||||
$term = request()->input('term');
|
||||
|
||||
if (! is_null($term)) {
|
||||
$serachQuery = 'term='.request()->input('term');
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="header" id="header">
|
||||
<div class="header-top">
|
||||
<div class="left-content">
|
||||
|
|
@ -16,9 +24,19 @@
|
|||
<ul class="search-container">
|
||||
<li class="search-group">
|
||||
<form role="search" action="{{ route('shop.search.index') }}" method="GET" style="display: inherit;">
|
||||
<input type="search" name="term" class="search-field" placeholder="{{ __('shop::app.header.search-text') }}" required>
|
||||
<input
|
||||
required
|
||||
name="term"
|
||||
type="search"
|
||||
value="{{ $term }}"
|
||||
class="search-field"
|
||||
placeholder="{{ __('shop::app.header.search-text') }}"
|
||||
>
|
||||
|
||||
<image-search-component></image-search-component>
|
||||
|
||||
<div class="search-icon-wrapper">
|
||||
|
||||
<button class="" class="background: none;">
|
||||
<i class="icon icon-search"></i>
|
||||
</button>
|
||||
|
|
@ -28,14 +46,6 @@
|
|||
</ul>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$term = request()->input('term');
|
||||
|
||||
if (! is_null($term)) {
|
||||
$serachQuery = 'term='.request()->input('term');
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="right-content">
|
||||
|
||||
<span class="search-box"><span class="icon icon-search" id="search"></span></span>
|
||||
|
|
@ -44,21 +54,27 @@
|
|||
|
||||
{!! view_render_event('bagisto.shop.layout.header.comppare-item.before') !!}
|
||||
|
||||
<li class="compare-dropdown-container">
|
||||
<a
|
||||
@auth('customer')
|
||||
href="{{ route('velocity.customer.product.compare') }}"
|
||||
@endauth
|
||||
@php
|
||||
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false
|
||||
@endphp
|
||||
|
||||
@guest('customer')
|
||||
href="{{ route('velocity.product.compare') }}"
|
||||
@endguest
|
||||
style="color: #242424;"
|
||||
>
|
||||
<span class="name">{{ __('velocity::app.customer.compare.text') }}</span>
|
||||
@if ($showCompare)
|
||||
<li class="compare-dropdown-container">
|
||||
<a
|
||||
@auth('customer')
|
||||
href="{{ route('velocity.customer.product.compare') }}"
|
||||
@endauth
|
||||
|
||||
</a>
|
||||
</li>
|
||||
@guest('customer')
|
||||
href="{{ route('velocity.product.compare') }}"
|
||||
@endguest
|
||||
style="color: #242424;"
|
||||
>
|
||||
<span class="name">{{ __('velocity::app.customer.compare.text') }}</span>
|
||||
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
{!! view_render_event('bagisto.shop.layout.header.compare-item.after') !!}
|
||||
|
||||
|
|
@ -186,6 +202,9 @@
|
|||
<button style="background: none; border: none; padding: 0px;">
|
||||
<i class="icon icon-search"></i>
|
||||
</button>
|
||||
|
||||
<image-search-component></image-search-component>
|
||||
|
||||
<input type="search" name="term" class="search">
|
||||
<i class="icon icon-menu-back right"></i>
|
||||
</div>
|
||||
|
|
@ -194,6 +213,112 @@
|
|||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet"></script>
|
||||
|
||||
<script type="text/x-template" id="image-search-component-template">
|
||||
<div>
|
||||
<label class="image-search-container" for="image-search-container">
|
||||
<i class="icon camera-icon"></i>
|
||||
|
||||
<input type="file" id="image-search-container" ref="image_search_input" v-on:change="uploadImage()"/>
|
||||
|
||||
<img id="uploaded-image-url" :src="uploaded_image_url"/>
|
||||
</label>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
|
||||
Vue.component('image-search-component', {
|
||||
|
||||
template: '#image-search-component-template',
|
||||
|
||||
data: function() {
|
||||
return {
|
||||
uploaded_image_url: ''
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
uploadImage: function() {
|
||||
var self = this;
|
||||
|
||||
self.$root.showLoader();
|
||||
|
||||
var formData = new FormData();
|
||||
|
||||
formData.append('image', this.$refs.image_search_input.files[0]);
|
||||
|
||||
axios.post("{{ route('shop.image.search.upload') }}", formData, {headers: {'Content-Type': 'multipart/form-data'}})
|
||||
.then(function(response) {
|
||||
self.uploaded_image_url = response.data;
|
||||
|
||||
var net;
|
||||
|
||||
async function app() {
|
||||
var analysedResult = [];
|
||||
|
||||
var queryString = '';
|
||||
|
||||
net = await mobilenet.load();
|
||||
|
||||
const imgElement = document.getElementById('uploaded-image-url');
|
||||
|
||||
try {
|
||||
const result = await net.classify(imgElement);
|
||||
|
||||
result.forEach(function(value) {
|
||||
queryString = value.className.split(',');
|
||||
|
||||
if (queryString.length > 1) {
|
||||
analysedResult = analysedResult.concat(queryString)
|
||||
} else {
|
||||
analysedResult.push(queryString[0])
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
self.$root.hideLoader();
|
||||
|
||||
window.flashMessages = [
|
||||
{
|
||||
'type': 'alert-error',
|
||||
'message': "{{ __('shop::app.common.error') }}"
|
||||
}
|
||||
];
|
||||
|
||||
self.$root.addFlashMessages();
|
||||
};
|
||||
|
||||
localStorage.searched_image_url = self.uploaded_image_url;
|
||||
|
||||
queryString = localStorage.searched_terms = analysedResult.join('_');
|
||||
|
||||
self.$root.hideLoader();
|
||||
|
||||
window.location.href = "{{ route('shop.search.index') }}" + '?term=' + queryString + '&image-search=1';
|
||||
}
|
||||
|
||||
app();
|
||||
})
|
||||
.catch(function(error) {
|
||||
self.$root.hideLoader();
|
||||
|
||||
window.flashMessages = [
|
||||
{
|
||||
'type': 'alert-error',
|
||||
'message': "{{ __('shop::app.common.error') }}"
|
||||
}
|
||||
];
|
||||
|
||||
self.$root.addFlashMessages();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
|
|
|
|||
|
|
@ -81,6 +81,8 @@
|
|||
</p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<overlay-loader :is-open="show_loader"></overlay-loader>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
@php
|
||||
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false
|
||||
@endphp
|
||||
|
||||
<div class="cart-wish-wrap">
|
||||
<form action="{{ route('cart.add', $product->product_id) }}" method="POST">
|
||||
@csrf
|
||||
|
|
@ -7,8 +11,10 @@
|
|||
</form>
|
||||
|
||||
@include('shop::products.wishlist')
|
||||
|
||||
@include('shop::products.compare', [
|
||||
'productId' => $product->id
|
||||
])
|
||||
|
||||
@if ($showCompare)
|
||||
@include('shop::products.compare', [
|
||||
'productId' => $product->id
|
||||
])
|
||||
@endif
|
||||
</div>
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
@inject ('productRepository', 'Webkul\Product\Repositories\ProductRepository')
|
||||
|
||||
<?php
|
||||
$filterAttributes = [];
|
||||
$filterAttributes = $attributes = [];
|
||||
$maxPrice = 0;
|
||||
|
||||
if (isset($category)) {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@
|
|||
@endsection
|
||||
|
||||
@section('content-wrapper')
|
||||
@if (request('image-search'))
|
||||
<image-search-result-component></image-search-result-component>
|
||||
@endif
|
||||
|
||||
@if (! $results)
|
||||
{{ __('shop::app.search.no-results') }}
|
||||
@endif
|
||||
|
|
@ -39,4 +43,47 @@
|
|||
@endif
|
||||
</div>
|
||||
@endif
|
||||
@endsection
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
|
||||
<script type="text/x-template" id="image-search-result-component-template">
|
||||
<div class="image-search-result">
|
||||
<div class="searched-image">
|
||||
<img :src="searched_image_url"/>
|
||||
</div>
|
||||
|
||||
<div class="searched-terms">
|
||||
<h3>{{ __('shop::app.search.analysed-keywords') }}</h3>
|
||||
|
||||
<div class="term-list">
|
||||
<a v-for="term in searched_terms" :href="'{{ route('shop.search.index') }}?term=' + term">
|
||||
@{{ term }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
Vue.component('image-search-result-component', {
|
||||
|
||||
template: '#image-search-result-component-template',
|
||||
|
||||
data: function() {
|
||||
return {
|
||||
searched_image_url: localStorage.searched_image_url,
|
||||
|
||||
searched_terms: []
|
||||
}
|
||||
},
|
||||
|
||||
created: function() {
|
||||
if (localStorage.searched_terms && localStorage.searched_terms != '') {
|
||||
this.searched_terms = localStorage.searched_terms.split('_');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@endpush
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
/node_modules
|
||||
/package-lock.json
|
||||
npm-debug.log
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "npm run development",
|
||||
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||
"watch-poll": "cross-env npm run watch -- --watch-poll --progress",
|
||||
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||
"prod": "npm run production",
|
||||
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"cross-env": "^6.0.3",
|
||||
"laravel-mix": "^5.0.0",
|
||||
"laravel-mix-merge-manifest": "^0.1.2",
|
||||
"sass": "^1.25.0",
|
||||
"sass-loader": "^8.0.2"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
.social-login-links .icon{width:18px;height:18px;vertical-align:middle;margin-bottom:3px;margin-right:3px;display:inline-block;background-size:cover}.social-login-links .icon.icon-facebook-login{background-image:url(../images/facebook-login.svg)}.social-login-links .icon.icon-twitter-login{background-image:url(../images/twitter-login.svg)}.social-login-links .icon.icon-google-login{background-image:url(../images/google-login.svg)}.social-login-links .icon.icon-linkedin-login{background-image:url(../images/linkedin-login.svg)}.social-login-links .icon.icon-github-login{background-image:url(../images/github-login.svg)}.social-login-links .icon.icon-instagram-login{background-image:url(../images/instagram-login.svg)}.auth-content .login-form .social-login-links .control-group,.auth-content .social-login-links .control-group{float:left;width:100%;margin-bottom:10px!important}.social-login-links .link{min-width:220px;max-width:100%;margin:0;cursor:pointer;padding:10px 15px;border-radius:3px;color:#fff;text-decoration:none;float:left}.social-login-links .link.facebook-link{background-color:#5272b3}.social-login-links .link.twitter-link{background-color:#0597e6}.social-login-links .link.google-link{background-color:#e45e52}.social-login-links .link.linkedin-link{background-color:#007bb6}.social-login-links .link.github-link{background-color:#24292e}.social-link-seperator{position:relative;border-top:1px solid #d3d3d3;margin:30px 0 25px;display:inline-block;width:100%}.social-link-seperator span{background-color:#fff;position:absolute;left:20px;top:-12px;padding:0 15px;text-align:center}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18 9.05477C18 4.05274 13.9718 0 9 0C4.02823 0 0 4.05274 0 9.05477C0 13.5821 3.26613 17.3428 7.58468 18V11.6836H5.29839V9.05477H7.58468V7.08316C7.58468 4.81947 8.92742 3.54158 10.9597 3.54158C11.9758 3.54158 12.9919 3.72414 12.9919 3.72414V5.95132H11.8669C10.7419 5.95132 10.379 6.64503 10.379 7.37525V9.05477H12.8831L12.4839 11.6836H10.379V18C14.6976 17.3428 18 13.5821 18 9.05477Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 511 B |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18 9.05477C18 4.05274 13.9718 0 9 0C4.02823 0 0 4.05274 0 9.05477C0 13.5821 3.26613 17.3428 7.58468 18V11.6836H5.29839V9.05477H7.58468V7.08316C7.58468 4.81947 8.92742 3.54158 10.9597 3.54158C11.9758 3.54158 12.9919 3.72414 12.9919 3.72414V5.95132H11.8669C10.7419 5.95132 10.379 6.64503 10.379 7.37525V9.05477H12.8831L12.4839 11.6836H10.379V18C14.6976 17.3428 18 13.5821 18 9.05477Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 511 B |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M5.9879 14.4948C5.9879 14.4204 5.91532 14.3461 5.80645 14.3461C5.69758 14.3461 5.625 14.4204 5.625 14.4948C5.625 14.5691 5.69758 14.6434 5.80645 14.6063C5.91532 14.6063 5.9879 14.5691 5.9879 14.4948ZM4.8629 14.3089C4.8629 14.3833 4.93548 14.4948 5.04435 14.4948C5.11694 14.5319 5.22581 14.4948 5.2621 14.4204C5.2621 14.3461 5.22581 14.2718 5.11694 14.2346C5.00806 14.1974 4.89919 14.2346 4.8629 14.3089ZM6.49597 14.2718C6.3871 14.2718 6.31452 14.3461 6.31452 14.4576C6.31452 14.5319 6.42339 14.5691 6.53226 14.5319C6.64113 14.4948 6.71371 14.4576 6.67742 14.3833C6.67742 14.3089 6.56855 14.2346 6.49597 14.2718ZM8.85484 0C3.84677 0 0 3.9396 0 9.06851C0 13.1939 2.50403 16.7247 6.13306 17.9884C6.60484 18.0627 6.75 17.7654 6.75 17.5424C6.75 17.2822 6.75 16.0186 6.75 15.2381C6.75 15.2381 4.20968 15.7956 3.66532 14.1231C3.66532 14.1231 3.26613 13.0453 2.68548 12.7851C2.68548 12.7851 1.85081 12.1905 2.72177 12.1905C2.72177 12.1905 3.62903 12.2648 4.1371 13.1568C4.93548 14.6063 6.24194 14.1974 6.78629 13.9373C6.85887 13.3426 7.07661 12.9338 7.36694 12.6736C5.33468 12.4506 3.26613 12.1533 3.26613 8.58535C3.26613 7.5447 3.55645 7.06155 4.1371 6.39256C4.02823 6.1324 3.7379 5.16608 4.24597 3.86527C4.97177 3.64227 6.75 4.86875 6.75 4.86875C7.47581 4.64575 8.2379 4.57142 9 4.57142C9.79839 4.57142 10.5605 4.64575 11.2863 4.86875C11.2863 4.86875 13.0282 3.60511 13.7903 3.86527C14.2984 5.16608 13.9718 6.1324 13.8992 6.39256C14.4798 7.06155 14.8427 7.5447 14.8427 8.58535C14.8427 12.1533 12.7016 12.4506 10.6694 12.6736C10.996 12.9709 11.2863 13.5284 11.2863 14.4204C11.2863 15.6469 11.25 17.2079 11.25 17.5052C11.25 17.7654 11.4315 18.0627 11.9032 17.9512C15.5323 16.7247 18 13.1939 18 9.06851C18 3.9396 13.8992 0 8.85484 0ZM3.52016 12.8223C3.44758 12.8594 3.48387 12.9709 3.52016 13.0453C3.59274 13.0824 3.66532 13.1196 3.7379 13.0824C3.77419 13.0453 3.77419 12.9338 3.70161 12.8594C3.62903 12.8223 3.55645 12.7851 3.52016 12.8223ZM3.12097 12.525C3.08468 12.5993 3.12097 12.6365 3.19355 12.6736C3.26613 12.7108 3.33871 12.7108 3.375 12.6365C3.375 12.5993 3.33871 12.5621 3.26613 12.525C3.19355 12.4878 3.15726 12.4878 3.12097 12.525ZM4.28226 13.8629C4.24597 13.9001 4.24597 14.0116 4.35484 14.0859C4.42742 14.1603 4.53629 14.1974 4.57258 14.1231C4.60887 14.0859 4.60887 13.9744 4.53629 13.9001C4.46371 13.8258 4.35484 13.7886 4.28226 13.8629ZM3.88306 13.3054C3.81048 13.3426 3.81048 13.4541 3.88306 13.5284C3.95565 13.6028 4.02823 13.6399 4.10081 13.6028C4.1371 13.5656 4.1371 13.4541 4.10081 13.3798C4.02823 13.3054 3.95565 13.2683 3.88306 13.3054Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M5.9879 14.4948C5.9879 14.4204 5.91532 14.3461 5.80645 14.3461C5.69758 14.3461 5.625 14.4204 5.625 14.4948C5.625 14.5691 5.69758 14.6434 5.80645 14.6063C5.91532 14.6063 5.9879 14.5691 5.9879 14.4948ZM4.8629 14.3089C4.8629 14.3833 4.93548 14.4948 5.04435 14.4948C5.11694 14.5319 5.22581 14.4948 5.2621 14.4204C5.2621 14.3461 5.22581 14.2718 5.11694 14.2346C5.00806 14.1974 4.89919 14.2346 4.8629 14.3089ZM6.49597 14.2718C6.3871 14.2718 6.31452 14.3461 6.31452 14.4576C6.31452 14.5319 6.42339 14.5691 6.53226 14.5319C6.64113 14.4948 6.71371 14.4576 6.67742 14.3833C6.67742 14.3089 6.56855 14.2346 6.49597 14.2718ZM8.85484 0C3.84677 0 0 3.9396 0 9.06851C0 13.1939 2.50403 16.7247 6.13306 17.9884C6.60484 18.0627 6.75 17.7654 6.75 17.5424C6.75 17.2822 6.75 16.0186 6.75 15.2381C6.75 15.2381 4.20968 15.7956 3.66532 14.1231C3.66532 14.1231 3.26613 13.0453 2.68548 12.7851C2.68548 12.7851 1.85081 12.1905 2.72177 12.1905C2.72177 12.1905 3.62903 12.2648 4.1371 13.1568C4.93548 14.6063 6.24194 14.1974 6.78629 13.9373C6.85887 13.3426 7.07661 12.9338 7.36694 12.6736C5.33468 12.4506 3.26613 12.1533 3.26613 8.58535C3.26613 7.5447 3.55645 7.06155 4.1371 6.39256C4.02823 6.1324 3.7379 5.16608 4.24597 3.86527C4.97177 3.64227 6.75 4.86875 6.75 4.86875C7.47581 4.64575 8.2379 4.57142 9 4.57142C9.79839 4.57142 10.5605 4.64575 11.2863 4.86875C11.2863 4.86875 13.0282 3.60511 13.7903 3.86527C14.2984 5.16608 13.9718 6.1324 13.8992 6.39256C14.4798 7.06155 14.8427 7.5447 14.8427 8.58535C14.8427 12.1533 12.7016 12.4506 10.6694 12.6736C10.996 12.9709 11.2863 13.5284 11.2863 14.4204C11.2863 15.6469 11.25 17.2079 11.25 17.5052C11.25 17.7654 11.4315 18.0627 11.9032 17.9512C15.5323 16.7247 18 13.1939 18 9.06851C18 3.9396 13.8992 0 8.85484 0ZM3.52016 12.8223C3.44758 12.8594 3.48387 12.9709 3.52016 13.0453C3.59274 13.0824 3.66532 13.1196 3.7379 13.0824C3.77419 13.0453 3.77419 12.9338 3.70161 12.8594C3.62903 12.8223 3.55645 12.7851 3.52016 12.8223ZM3.12097 12.525C3.08468 12.5993 3.12097 12.6365 3.19355 12.6736C3.26613 12.7108 3.33871 12.7108 3.375 12.6365C3.375 12.5993 3.33871 12.5621 3.26613 12.525C3.19355 12.4878 3.15726 12.4878 3.12097 12.525ZM4.28226 13.8629C4.24597 13.9001 4.24597 14.0116 4.35484 14.0859C4.42742 14.1603 4.53629 14.1974 4.57258 14.1231C4.60887 14.0859 4.60887 13.9744 4.53629 13.9001C4.46371 13.8258 4.35484 13.7886 4.28226 13.8629ZM3.88306 13.3054C3.81048 13.3426 3.81048 13.4541 3.88306 13.5284C3.95565 13.6028 4.02823 13.6399 4.10081 13.6028C4.1371 13.5656 4.1371 13.4541 4.10081 13.3798C4.02823 13.3054 3.95565 13.2683 3.88306 13.3054Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 18C13.9706 18 18 13.9706 18 9C18 4.02944 13.9706 0 9 0C4.02944 0 0 4.02944 0 9C0 13.9706 4.02944 18 9 18ZM14.9099 8.20562C14.9561 8.50041 15 8.77964 15 9.14516C15 12.5806 12.6148 15 9.09836 15C5.70492 15 3 12.3387 3 9C3 5.68548 5.70492 3 9.09836 3C10.7213 3 12.123 3.60484 13.1803 4.57258L11.5082 6.14516C9.34426 4.08871 5.31148 5.6371 5.31148 9C5.31148 11.1048 7.0082 12.7984 9.09836 12.7984C11.5082 12.7984 12.418 11.1048 12.541 10.2097H9.09836V8.15323H14.9016C14.9044 8.17076 14.9071 8.18821 14.9099 8.20562Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 683 B |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 18C13.9706 18 18 13.9706 18 9C18 4.02944 13.9706 0 9 0C4.02944 0 0 4.02944 0 9C0 13.9706 4.02944 18 9 18ZM14.9099 8.20562C14.9561 8.50041 15 8.77964 15 9.14516C15 12.5806 12.6148 15 9.09836 15C5.70492 15 3 12.3387 3 9C3 5.68548 5.70492 3 9.09836 3C10.7213 3 12.123 3.60484 13.1803 4.57258L11.5082 6.14516C9.34426 4.08871 5.31148 5.6371 5.31148 9C5.31148 11.1048 7.0082 12.7984 9.09836 12.7984C11.5082 12.7984 12.418 11.1048 12.541 10.2097H9.09836V8.15323H14.9016C14.9044 8.17076 14.9071 8.18821 14.9099 8.20562Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 683 B |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 18C13.9706 18 18 13.9706 18 9C18 4.02944 13.9706 0 9 0C4.02944 0 0 4.02944 0 9C0 13.9706 4.02944 18 9 18ZM13.9955 4.00447C14.692 4.70089 14.9062 5.55804 14.9598 6.52233C15.0134 7.5134 15.0134 10.4866 14.9598 11.4777C14.9062 12.442 14.692 13.2723 13.9955 13.9955C13.2991 14.692 12.442 14.9063 11.4777 14.9598C10.4866 15.0134 7.51339 15.0134 6.52232 14.9598C5.55804 14.9063 4.72768 14.692 4.00446 13.9955C3.30804 13.2723 3.09375 12.442 3.04018 11.4777C2.98661 10.4866 2.98661 7.5134 3.04018 6.52233C3.09375 5.55804 3.30804 4.70089 4.00446 4.00447C4.72768 3.30804 5.55804 3.09375 6.52232 3.04018C7.51339 2.98661 10.4866 2.98661 11.4777 3.04018C12.442 3.09375 13.2991 3.30804 13.9955 4.00447ZM12.8911 5.82322C12.8911 5.42143 12.5696 5.10001 12.1679 5.10001C11.7661 5.10001 11.4446 5.42143 11.4446 5.82322C11.4446 6.22501 11.7661 6.54643 12.1679 6.54643C12.5696 6.54643 12.8911 6.22501 12.8911 5.82322ZM8.98036 5.93036C7.26607 5.93036 5.9 7.32322 5.9 9.01072C5.9 10.725 7.26607 12.0911 8.98036 12.0911C10.6679 12.0911 12.0607 10.725 12.0607 9.01072C12.0607 7.32322 10.6679 5.93036 8.98036 5.93036ZM7 8.98658C7 10.1141 7.91275 11 9.01342 11C10.1141 11 11 10.1141 11 8.98658C11 7.88591 10.1141 7 9.01342 7C7.88591 7 7 7.88591 7 8.98658Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 18C13.9706 18 18 13.9706 18 9C18 4.02944 13.9706 0 9 0C4.02944 0 0 4.02944 0 9C0 13.9706 4.02944 18 9 18ZM13.9955 4.00447C14.692 4.70089 14.9062 5.55804 14.9598 6.52233C15.0134 7.5134 15.0134 10.4866 14.9598 11.4777C14.9062 12.442 14.692 13.2723 13.9955 13.9955C13.2991 14.692 12.442 14.9063 11.4777 14.9598C10.4866 15.0134 7.51339 15.0134 6.52232 14.9598C5.55804 14.9063 4.72768 14.692 4.00446 13.9955C3.30804 13.2723 3.09375 12.442 3.04018 11.4777C2.98661 10.4866 2.98661 7.5134 3.04018 6.52233C3.09375 5.55804 3.30804 4.70089 4.00446 4.00447C4.72768 3.30804 5.55804 3.09375 6.52232 3.04018C7.51339 2.98661 10.4866 2.98661 11.4777 3.04018C12.442 3.09375 13.2991 3.30804 13.9955 4.00447ZM12.8911 5.82322C12.8911 5.42143 12.5696 5.10001 12.1679 5.10001C11.7661 5.10001 11.4446 5.42143 11.4446 5.82322C11.4446 6.22501 11.7661 6.54643 12.1679 6.54643C12.5696 6.54643 12.8911 6.22501 12.8911 5.82322ZM8.98036 5.93036C7.26607 5.93036 5.9 7.32322 5.9 9.01072C5.9 10.725 7.26607 12.0911 8.98036 12.0911C10.6679 12.0911 12.0607 10.725 12.0607 9.01072C12.0607 7.32322 10.6679 5.93036 8.98036 5.93036ZM7 8.98658C7 10.1141 7.91275 11 9.01342 11C10.1141 11 11 10.1141 11 8.98658C11 7.88591 10.1141 7 9.01342 7C7.88591 7 7 7.88591 7 8.98658Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 18C13.9706 18 18 13.9706 18 9C18 4.02944 13.9706 0 9 0C4.02944 0 0 4.02944 0 9C0 13.9706 4.02944 18 9 18ZM4.15625 7.34375V14H6.21875V7.34375H4.15625ZM3.96875 5.21875C3.96875 5.875 4.5 6.40625 5.1875 6.40625C5.84375 6.40625 6.375 5.875 6.375 5.21875C6.375 4.5625 5.84375 4 5.1875 4C4.5 4 3.96875 4.5625 3.96875 5.21875ZM11.9062 14H14V10.3438C14 8.5625 13.5938 7.15625 11.5 7.15625C10.5 7.15625 9.8125 7.71875 9.53125 8.25H9.5V7.34375H7.53125V14H9.59375V10.7188C9.59375 9.84375 9.75 9 10.8438 9C11.9062 9 11.9062 10 11.9062 10.75V14Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 703 B |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 18C13.9706 18 18 13.9706 18 9C18 4.02944 13.9706 0 9 0C4.02944 0 0 4.02944 0 9C0 13.9706 4.02944 18 9 18ZM4.15625 7.34375V14H6.21875V7.34375H4.15625ZM3.96875 5.21875C3.96875 5.875 4.5 6.40625 5.1875 6.40625C5.84375 6.40625 6.375 5.875 6.375 5.21875C6.375 4.5625 5.84375 4 5.1875 4C4.5 4 3.96875 4.5625 3.96875 5.21875ZM11.9062 14H14V10.3438C14 8.5625 13.5938 7.15625 11.5 7.15625C10.5 7.15625 9.8125 7.71875 9.53125 8.25H9.5V7.34375H7.53125V14H9.59375V10.7188C9.59375 9.84375 9.75 9 10.8438 9C11.9062 9 11.9062 10 11.9062 10.75V14Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 703 B |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 18C13.9706 18 18 13.9706 18 9C18 4.02944 13.9706 0 9 0C4.02944 0 0 4.02944 0 9C0 13.9706 4.02944 18 9 18ZM16 5.2988C15.6164 5.85542 15.1233 6.33253 14.5753 6.73012V7.1012C14.5753 10.7855 11.6986 15 6.41096 15C4.76712 15 3.26027 14.5494 2 13.7542C2.21918 13.7807 2.43836 13.8072 2.68493 13.8072C4.0274 13.8072 5.26027 13.3566 6.24658 12.6145C4.9863 12.588 3.91781 11.7928 3.56164 10.6795C3.58322 10.6825 3.60445 10.6855 3.6254 10.6884C3.79076 10.7117 3.93938 10.7325 4.10959 10.7325C4.35616 10.7325 4.63014 10.6795 4.84932 10.6265C3.53425 10.3614 2.54795 9.24819 2.54795 7.89639V7.86988C2.93151 8.08193 3.39726 8.18795 3.86301 8.21446C3.06849 7.71084 2.57534 6.86265 2.57534 5.90843C2.57534 5.37831 2.71233 4.9012 2.9589 4.50361C4.38356 6.17349 6.52055 7.28675 8.90411 7.41928C8.84931 7.20723 8.82192 6.99518 8.82192 6.78313C8.82192 5.24578 10.1096 4 11.6986 4C12.5205 4 13.2603 4.31807 13.8082 4.8747C14.4384 4.74217 15.0685 4.50361 15.6164 4.18554C15.3973 4.84819 14.9589 5.37831 14.3562 5.72289C14.9315 5.66988 15.5068 5.51084 16 5.2988Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |