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

This commit is contained in:
merdan 2022-03-16 17:21:27 +05:00
commit c8cc268909
91 changed files with 1973 additions and 676 deletions

View File

@ -2,6 +2,470 @@
This changelog consists of the bug & security fixes and new features being included in the releases listed below.
## **v1.4.0 (16th of March 2022)** - *Release*
* #5654 [feature] -Only unread notification should be shown in the notification modal box.
* #4787 [feature] - Unable to upload profile picture
* #4653 [feature] - Making billing address informations optional
* #4356 [feature] - Guest Checkout sucess add register
* #5921 [enhancement] -Notification should be received without page refresh.
* #5817 [enhancement] -The wishlist and the compare option should be inside the account section
* #5671 [enhancement] -By default the first submenu should be open, when the admin is clicking on any tab
* #5537 [enhancement] -New admin theme - RTL menu
* #5525 [enhancement] -Send a duplicate of the invoice to the customer
* #5490 [enhancement] -The address should be horizontal format
* #5404 [enhancement] -The Add image button should not be present when the user is trying to edit the profile
* #5396 [enhancement] -The currency icon should be shown properly
* #5395 [enhancement] -The user panel should be responsive on phone-view
* #5384 [enhancement] -There should be a confirmation alert before deleting all items from Wishlist and Compare
* #5300 [enhancement] -Suspend customers
* #5292 [enhancement] -Some data grids are missing ProvideDataGridPlus trait
* #5267 [enhancement] -Send reminders for overdue invoices
* #5219 [enhancement] -Issue in multi select data in every datagrid
* #5165 [enhancement] -Write All Factories In Laravel 8 Pattern
* #5158 [enhancement] -Breadcrumb Feature
* #5143 [enhancement] -Rest API Enhancement In Sanctum
* #5064 [enhancement] -Multi factor authentication
* #4834 [enhancement] -Requesting to load attributes via ajax
* #4772 [enhancement] -Ability to drag product image to reorder them in bagisto admin dashboard
* #4653 [enhancement] -Making billing address informations optional
* #2918 [enhancement] -Overview of sold booking products in Admin panel
* #2009 [enhancement] -Using AWS S3 for storage
* #1243 [enhancement] -Implement a feature to share Wishlist
* #5968 [enhancement] -The wishlist and compare option should not be in multiple times
* #1238 [enhancement] -Give configuration for converting textarea to wysiwyg editor or not for browser compatibility.
* #6019 [fixed] -There should not any UI issue if the admin is trying to update products by mass action.
* #6010 [fixed] -There should not be any UI issue when the user is trying to write a review for the product in mobile view.
* #6008 [fixed] -There is a UI issue on the Bills theme when the user is trying to log in.
* #6006 [fixed] -There is a UI issue if the admin is trying to update products by mass action.
* #5995 [fixed] -The filters should work properly. if the user is trying to filter the products by the color filter
* #5985 [fixed] -There should be a warning message on the checkout page, for the required field if the user is clicking outside of the required input field
* #5980 [fixed] - There is a UI issue if the user is trying to filter products by category
* #5966 [fixed] - The product quantity should be visible on the cart page
* #5965 [fixed] - Maximum Password length is 18 characters in velocity theme, which is way too short to be secure
* #5941 [fixed] - UI Issue at the Profile Section -> Empty space below address
* #5939 [fixed] - The selected date and time should be visible if the admin trying to add Tickets for a booking product
* #5938 [fixed] - There is a UI issue on forget password page
* #5932 [fixed] - There should not be any extra space on the product view page
* #5931 [fixed] - The product must be added to the wishlist which the user wants to add
* #5929 [fixed] - The notification text should be clickable
* #5926 [fixed] - There is a UI in the header section on mobile view
* #5919 [fixed] - There is a UI issue on the orders page
* #5915 [fixed] - There is a translation issue in notification pages.
* #5913 [fixed] - The user is able to edit the product without permission for the same
* #5908 [fixed] - The Success message should be according to the selected locale
* #5907 [fixed] - There is a UI issue on the checkout page
* #5904 [fixed] - There is a UI issue on the Tax Rates page
* #5903 [fixed] - There is a UI issue on the notification page
* #5899 [fixed] - The text color of the count should be white in mobile view
* #5898 [fixed] - The success/warning messages should be shown properly
* #5885 [fixed] - There are many translation issues on the Arabic locale
* #5865 [fixed] - There is a translation issue when the admin is trying to create a product.
* #5855 [fixed] - The categories name should be shown in all locales
* #5841 [fixed] - There is a translation issue on the Notification page.
* #5839 [fixed] - There should not be any UI issue while adding the product.
* #5830 [fixed] - There should be no exception if the user is trying to log in
* #5828 [fixed] - The Channel filter is not working properly on the product list page.
* #5820 [fixed] - The user is not able to update the review by mass action.
* #5809 [fixed] - Ui issue when admin try to click on search order in notification in mobile view
* #5808 [fixed] - proper allignment of images when admin try to upload in arabic language
* #5805 [fixed] - Navigation alligment when we try to edit checkbox and select attribute in mobile view
* #5804 [fixed] - When I create product bullets in the edit I am experienced those UL get dropped and they are left out in the customer view
* #5803 [fixed] - Alligment issue when we make a configurable product in delete and edit button.
* #5802 [fixed] - Ui issue comes when we click on add link in downloadable product
* #5799 [fixed] - Ui issues in arabic language when we try to add booking product.
* #5797 [fixed] - There should be proper space when customer is try to add address.
* #5791 [fixed] - There should be gab between edit and delete option in addresss page in velocity.
* #5790 [fixed] - Issue in orders page in velocity in arabic language
* #5789 [fixed] - Alligment should be done properly in arabic in wishlist page
* #5788 [fixed] - When we are try to delete the sliders wrong notifications show
* #5785 [fixed] - Calender icon is not properly visible in arabic
* #5778 [fixed] - issue in arbaic language of alligment in mobile view
* #5775 [fixed] - translations not working in navigation in admin panel
* #5774 [fixed] - Admin - Address index view not found
* #5772 [fixed] - issue in french lanugage in navigation bar
* #5770 [fixed] - Layout shifting in admin ui
* #5768 [fixed] - Zoomlens in product page overlap sidebar category menu
* #5764 [fixed] - not able to select options in LTR ENGLISH
* #5762 [fixed] - not able to add slider images in velocity theme
* #5761 [fixed] - email spelling wrong in notifications emails
* #5755 [fixed] - there should be a space between update quantities in mobile view in admin panel
* #5754 [fixed] - not get any mail when we make new intventory sources in admin panel
* #5752 [fixed] - in mobile view wishlist option is not there in checkout page
* #5746 [fixed] - update button alligment should done in velocity theme.
* #5736 [fixed] - remove button should be with wishlist in mobile view in simple product
* #5735 [fixed] - alligment should be done proper in velocity in mobile view of remove icon
* #5730 [fixed] - there is an option to increase quanity when user is try to booked product in both themes.
* #5729 [fixed] - ui issue when we are try to book only booking product in bliss theme in checkout page (mobile view ).
* #5728 [fixed] - user is not able to update quanity in checkout cart page in veloicity theme
* #5727 [fixed] - ui issue when guest is place an order (mobile view ) in velocity
* #5722 [fixed] - when we disable status paypal from admin panel it show error in console
* #5719 [fixed] - ui issue when we try to make booking product in admin panel in mobile view
* #5718 [fixed] - alligment issue in blisss theme in downloadable product section (mobile view)
* #5717 [fixed] - ui issue in admin panel when we try to edit cms pages (mobile view )
* #5709 [fixed] - Wrong error messages when uploading video
* #5708 [fixed] - proper alligment should be done in order page (mobile view)
* #5707 [fixed] - ui issue in configuration part of admin (mobile view)
* #5706 [fixed] - there should be an option of wishlist button in blisss theme in front panel
* #5705 [fixed] - ui issue in compare similar items in compare page (mobile view)
* #5704 [fixed] - alligment issue in velocity theme in mobile view
* #5703 [fixed] - star ratings alligment should be in same line in mobile view
* #5696 [fixed] - dropdown buttons is not working properly in admin panel
* #5695 [fixed] - ui issue when there is only 1 downloadable product in view shopping cart (mobile view)
* #5694 [fixed] - star ratings and reviews alligment should be in same line in blisss theme in mobile view
* #5687 [fixed] - there should be no option for downloadable product for increasing the quanity in velocity theme
* #5684 [fixed] - reimporting exported tax rate csv results in state field missing error
* #5670 [fixed] - user not able to redirect to cms pages in blisss theme
* #5663 [fixed] - The user should be able to download the downloadable product
* #5661 [fixed] - ui issue in customer order view page in blisss theme in mobile view
* #5659 [fixed] - delete button in customer profile should be properly allign (bliss theme) in mobile view
* #5657 [fixed] - proper alligment should be done in bliss theme when we write reviews (mobile view)
* #5650 [fixed] - There is a UI issue in cart page on phone view
* #5648 [fixed] - there should not be any blank space in payment method
* #5636 [fixed] - ui issue when we search any product in bliss theme
* #5635 [fixed] - issue when we click on search icon in blisss theme in mobile view
* #5633 [fixed] - alligment issue after you place an order in mobile view
* #5625 [fixed] - issue in side bar in mobile view when we open any cms pages in velocity
* #5624 [fixed] - in mobile view order id and all other items is not visible when we have not done any order
* #5621 [fixed] - There should not be any UI issue in the user panel.
* #5620 [fixed] - there should be enhacement in button colour so that it should be according to mode
* #5619 [fixed] - images in review is not compatiable in mobile view
* #5617 [fixed] - there should be an enhacement so that languages is not with locale heading
* #5616 [fixed] - there should be dark colour in pending in reviews so that it should be more readable when we changes the mode
* #5615 [fixed] - ui issue in order page in search bar in velocity theme
* #5613 [fixed] - ui issue in customer address edit in admin panel
* #5609 [fixed] - ui issue in catelog in mobile view
* #5608 [fixed] - slider should not overide in catelog rule and cart rule in condition part in mobile view
* #5603 [fixed] - notification box should be mobile compatible
* #5602 [fixed] - ui issue in tax rates in mobile view
* #5601 [fixed] - ui issue in exchange rate in mobile view
* #5591 [fixed] - there is a space between add category button and text box filter in mobile view
* #5585 [fixed] - filters should not attach with heading in category
* #5581 [fixed] - there should be logo of admin in dekstop view like mobile view
* #5579 [fixed] - velocity in list should be left alligment
* #5571 [fixed] - there should be an icon of calender in velocity profile page of customer
* #5569 [fixed] - There should be meaningful data inside the order dropdown
* #5556 [fixed] - Deprecation Warning: Using / for division outside of calc() is deprecated and will be removed in Dart Sass 2.0.0.
* #5555 [fixed] - darkmode dropdown list
* #5552 [fixed] - there should not be any blank space in attribute family
* #5545 [fixed] - navigation sliders not work properly
* #5540 [fixed] - There is a UI issue in the admin panel
* #5539 [fixed] - The Login user should not be able to update self status.
* #5538 [fixed] - There should not be any translation issue in the notification section
* #5531 [fixed] - there should be not any blank space in gender it may contain select gender
* #5529 [fixed] - when we hover over bell icon tooltip is not showing
* #5526 [fixed] - There are multiple flash messages if we are clicking on the mark as read inside the notification.
* #5524 [fixed] - Dashboard text is not readable when light mode is enabled
* #5523 [fixed] - Notifications dropdown size
* #5522 [fixed] - icons are missing in top right navbar
* #5521 [fixed] - Default logo is not visible
* #5516 [fixed] - The size of the product images should not increase when the user is removing items from compare list
* #5513 [fixed] - Admin package the manifest.php files are missing
* #5511 [fixed] - UI issue in product list page.
* #5510 [fixed] - The counting is not updating automatically when the user is trying to add or remove an item from comparison.
* #5505 [fixed] - maintance mode is not working in admin panel
* #5503 [fixed] - validation not working in inventory page
* #5501 [fixed] - There is a warning message if the user is trying to add the address.
* #5497 [fixed] - If the admin user is changing the permission of other user's then the user should be logging out with a message
* #5493 [fixed] - The page should be redirected to the product-view page if the user is clicking on the product image/name
* #5491 [fixed] - The user should be able to update quantity using the + icon.
* #5485 [fixed] - ui issue in address bar in mobile view
* #5484 [fixed] - The user should be able to add a new address.
* #5483 [fixed] - languages logo is not visible in mobile view
* #5478 [fixed] - alligment not fixed in mobile view in velocity order page
* #5474 [fixed] - The filters should work properly. if the admin is trying to filter the sliders
* #5473 [fixed] - There cart option should not multiple times in the account section.
* #5471 [fixed] - The user should be able to view the modules/plugins menu in mobile view also. if the user adds any module.
* #5470 [fixed] - there should be less spacing in compare section
* #5468 [fixed] - There is a UI issue in Compare Similar Items section
* #5466 [fixed] - text alligment in order page of velocity
* #5462 [fixed] - ui issue when we try to ship wrong quantity products
* #5461 [fixed] - ui issue when we add product in compare.
* #5460 [fixed] - UI issue when we add product in wishlist in blisss theme
* #5451 [fixed] - Possibility to order infinite configurable products (product_ordered_inventories and / or order_items not correctly updated at order)
* #5450 [fixed] - The CMS image should reflect on the shop if the admin is adding any image on CMS
* #5445 [fixed] - There should be a confirmation alert before deleting items from the Wishlist
* #5444 [fixed] - The admin is able to create Invoice/ship orders with 00 quantities.
* #5443 [fixed] - The message should be correct when the admin is trying to delete system attributes
* #5440 [fixed] - There should be an option if the user is trying to enter the product quantity before updating the cart.
* #5436 [fixed] - The discount Amount should be correct in the invoice.
* #5435 [fixed] - There should be a warning message if the user is trying to create an invoice with invalid quantity.
* #5430 [fixed] - ProductFlat getAttribute($key) throws Undefined property if value of $key is NULL in product_flat table
* #5429 [fixed] - php artisan route:list error target class onepagecontroller does not exist (current master branch)
* #5428 [fixed] - There should not be an exception if the admin is trying to refund the order.
* #5424 [fixed] - The item should not move to the wishlist if the user is canceling the action.
* #5423 [fixed] - The user should not be able to edit the record while the input field is giving a warning.
* #5409 [fixed] - The user should be able to view the reviews
* #5408 [fixed] - There should not be any exception if the user is trying to delete their reviews.
* #5406 [fixed] - The user should be able to edit the address.
* #5405 [fixed] - The success message should be correct when the user is adding items to the cart
* #5398 [fixed] - The User should not be able to add the same product to the wishlist multiple times.
* #5389 [fixed] - There should be the proper alignment of filter's
* #5381 [fixed] - Validation required for coupon code
* #5377 [fixed] - There should not be an exception When user is moving a product to a wishlist that is already in wishlist
* #5366 [fixed] - There should be a warning message when the user is applying the same filter again and again.
* #5365 [fixed] - Issue in price filter for configurable type product
* #5353 [fixed] - Shipping::rates protected variable is not cleared on Shipping::removeAllShippingRates()
* #5350 [fixed] - The product price should be correct after exporting to excel.
* #5347 [fixed] - Images are coming out to be same at the cross sell products.
* #5342 [fixed] - admin (RTL) - menu not apears
* #5328 [fixed] - SKU is still visible at the adding new product when it is disabled.
* #5325 [fixed] - Delete profile modal content data visible and then suddenly hide
* #5316 [fixed] - In Front end Order details, Order id is having a lot of space.
* #5315 [fixed] - Quantity issue in product shipment.
* #5312 [fixed] - Issue in sub-category for mobile view
* #5311 [fixed] - Total weight is null in shipment table
* #5307 [fixed] - Flat Rate calculation type in admin configurations
* #5305 [fixed] - Cart Set Shipping API
* #5289 [fixed] - Quantity should be updated on ' Shopping Cart ' page
* #5261 [fixed] - Side filter is getting detached from the category product listing in mobile
* #5259 [fixed] - Responsive issue in user Profile - Velocity
* #5233 [fixed] - Issue if create product for multiple channel
* #5232 [fixed] - App config.php has bad reference to ProductGrid::class
* #5226 [fixed] - Not able to send the products to wishlist from compare page if the product is not on the first position
* #5210 [fixed] - UI Issue in search bar in order section at customer's end.
* #5209 [fixed] - There is no way to access Admin panel if there is only one admin and he try to modify the role of Administrator and allow limited access.
* #5208 [fixed] - UI Issue in bliss theme - Product View Page
* #5200 [fixed] - getting API error after opening categories named category
* #5198 [fixed] - Wrong phpdoc reference in Webkul\Core\Core to CustomerGroupRepository
* #5197 [fixed] - There is no way to log out for 2nd user of Admin if he himself modify his roles and remove some or all privileges.
* #5194 [fixed] - Getting exception when exporting a product from the admin panel
* #5191 [fixed] - Issue is in checkbox type attribute
* #5180 [fixed] - Some code appears in starting when clicking on the any product edit page
* #5179 [fixed] - Cart items get increased when navigating away from the buy now functionality
* #5178 [fixed] - API for customers to cancel order
* #5047 [fixed] - Order status gets complete when shipment is generated in case of pending invoice
## **v1.3.3 (27th of September 2021)** - *Release*
* #5008 [feature] - Image upload option with editor.

View File

@ -79,6 +79,7 @@ return [
*/
'failed' => [
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
],

View File

@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateFailedJobsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('failed_jobs', function (Blueprint $table) {
$table->id();
$table->string('uuid')->unique();
$table->text('connection');
$table->text('queue');
$table->longText('payload');
$table->longText('exception');
$table->timestamp('failed_at')->useCurrent();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('failed_jobs');
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24C18.6274 24 24 18.6274 24 12Z" fill="#FFFFFF"/>
<path d="M16 10L12 14L8 10" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 355 B

View File

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24C18.6274 24 24 18.6274 24 12Z" fill="#FFFFFF"/>
<path d="M16 13L12 9L8 13" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 354 B

View File

@ -0,0 +1,11 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2:540)">
<path d="M12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0Z" fill="#FFFFFF"/>
<path d="M13.5 17.5L8.5 12.5L13.5 7.5" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_2:540">
<rect width="24" height="24" fill="#000000"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 505 B

View File

@ -0,0 +1,11 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2:543)">
<path d="M12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0Z" fill="#FFFFFF"/>
<path d="M10.5 17.5L15.5 12.5L10.5 7.5" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_2:543">
<rect width="24" height="24" fill="#000000"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 506 B

View File

@ -1,4 +1,4 @@
{
"/js/admin.js": "/js/admin.js?id=7d73f64f6f160ecd8a23",
"/css/admin.css": "/css/admin.css?id=c541338bb74772040a29"
"/css/admin.css": "/css/admin.css?id=5fc68c20019f02de7af3"
}

View File

@ -166,7 +166,6 @@ class CategoryDataGrid extends DataGrid
'route' => 'admin.catalog.categories.delete',
'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'product']),
'icon' => 'icon trash-icon',
'function' => 'deleteCategory(event, "delete")'
]);
$this->addMassAction([

View File

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24C18.6274 24 24 18.6274 24 12Z" fill="#FFFFFF"/>
<path d="M16 10L12 14L8 10" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 355 B

View File

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24C18.6274 24 24 18.6274 24 12Z" fill="#FFFFFF"/>
<path d="M16 13L12 9L8 13" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 354 B

View File

@ -0,0 +1,11 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2:540)">
<path d="M12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0Z" fill="#FFFFFF"/>
<path d="M13.5 17.5L8.5 12.5L13.5 7.5" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_2:540">
<rect width="24" height="24" fill="#000000"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 505 B

View File

@ -0,0 +1,11 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2:543)">
<path d="M12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0Z" fill="#FFFFFF"/>
<path d="M10.5 17.5L15.5 12.5L10.5 7.5" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_2:543">
<rect width="24" height="24" fill="#000000"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 506 B

View File

@ -43,7 +43,7 @@
ul.menubar {
li.menu-item {
>a {
> a {
padding: 5px 2px;
display: block;
color: $black;
@ -302,6 +302,14 @@
color: $font-color;
border-top: solid 1px $border-color;
border-bottom: solid 1px $border-color;
.accordian-up-icon {
background-image: url(../images/Accordion-Dark-Arrow-Up.svg);
}
.accordian-down-icon {
background-image: url(../images/Accordion-Dark-Arrow-Up.svg);
}
}
}
@ -403,6 +411,13 @@
}
}
.btn {
&.btn-primary {
background: $white;
color: $black;
}
}
.control-container {
.control {
background: $black;
@ -754,12 +769,25 @@
}
.control-group input:checked+.slider {
background-color: $dark-mode-switch-background !important;
background-color: $dark-mode-left-menubar-active-background-color !important;
}
}
.navbar-left {
.menubar-bottom {
background-color: $dark-bg;
.accordian-left-icon {
background-image: url(../images/dark-chevron-left.svg);
}
.accordian-right-icon {
background-image: url(../images/dark-chevron-right.svg);
}
}
}
.rtl.dark-mode {
.navbar-left {
background-color: $dark-bg;
border-right: 1px solid $dark-bg;
@ -767,7 +795,7 @@
ul.menubar {
li.menu-item {
>a {
> a {
padding: 5px 2px;
display: block;
color: $black;

View File

@ -14,7 +14,7 @@ body {
}
.padding-container-navbar-expand {
padding-left: 200px !important;
padding-left: 210px !important;
}
.rtl {
@ -24,7 +24,7 @@ body {
}
.padding-container-navbar-expand {
padding-right: 200px !important;
padding-right: 210px !important;
padding-left: 0px !important;
}
}
@ -217,11 +217,13 @@ body {
> a {
color: $black;
width: 100%;
display: block;
.icon {
display: inline-block;
vertical-align: middle;
transform: scale(0.7);
margin-left: 3px;
}
.menu-label {
@ -307,7 +309,8 @@ body {
position: fixed;
bottom: 0;
background-color: $white;
width: 56px;
width: 55px;
text-align: center;
}
&.open {
@ -444,6 +447,16 @@ body {
.locale {
float: right;
color: $role-text-color;
position: relative;
right: 30%;
}
}
&.have-wysiwyg {
label {
.locale {
position: unset;
}
}
}

View File

@ -201,6 +201,8 @@
.control-group label .locale {
float: left;
right: unset;
left: 30%;
}
.multiselect {

View File

@ -91,16 +91,16 @@ return [
'orders' => 'Siparişler',
'shipments' => 'Teslimatlar',
'invoices' => 'Faturalar',
'refunds' => 'Refunds',
'refunds' => 'Geri Ödemeler',
'catalog' => 'Katalog',
'products' => 'Ürünler',
'copy' => 'Copy',
'copy' => 'Kopyala',
'categories' => 'Kategoriler',
'attributes' => 'Nitelikler',
'attribute-families' => 'Nitelik Grupları',
'customers' => 'Müşteriler',
'addresses' => 'Addresses',
'note' => 'Note',
'addresses' => 'Adresler',
'note' => 'Not',
'groups' => 'Gruplar',
'reviews' => 'İncelemeler',
'newsletter-subscriptions' => 'Bülten Üyelikleri',
@ -117,13 +117,13 @@ return [
'taxes' => 'Vergi',
'tax-categories' => 'Vergi Grupları',
'tax-rates' => 'Vergi Oranları',
'view' => 'View',
'view' => 'Görüntüle',
'edit' => 'Düzenle',
'create' => 'Oluştur',
'delete' => 'Sil',
'mass-delete' => 'Mass Delete',
'mass-update' => 'Mass Update',
'marketing' => 'Marketing',
'mass-delete' => 'Toplu Silme',
'mass-update' => 'Toplu Güncelleme',
'marketing' => 'Pazarlama',
'promotions' => 'Promosyonlar',
'cart-rules' => 'Alışveriş Sepeti Kuralları',
'catalog-rules' => 'Katalog Kuralları',
@ -211,7 +211,7 @@ return [
'state' => 'Şehir',
'country' => 'Ülke',
'tax-rate' => 'Oran',
'role' => 'R',
'role' => 'Rol',
'sub-total' => 'Ara Toplam',
'no-of-products' => 'Ürün Adeti',
'attribute-family' => 'Nitelik Grubu',
@ -242,8 +242,8 @@ return [
'rtl' => 'RTL',
'ltr' => 'LTR',
'update-status' => 'Durum Güncelle',
'transaction-id' => 'Transaction Id',
'transaction-date' => 'Transaction Date',
'transaction-id' => 'İşlem Id',
'transaction-date' => 'İşlem Tarihi',
],
'account' => [
@ -396,7 +396,7 @@ return [
'notify-customer' => 'Müşteriyi Bilgilendir',
'customer-notified' => ':date | Müşteri <b>Bilgilendirildi</b>',
'customer-not-notified' => ':date | Müşteri <b>Bilgilendirilmedi</b>',
'transactions' => 'Transactions',
'transactions' => 'İşlemler',
],
'invoices' => [
@ -412,9 +412,9 @@ return [
'action' => 'Eylem',
'add-title' => 'Fatura Oluştur',
'save-btn-title' => 'Fatura Kaydet',
'send-duplicate-invoice' => 'Send Duplicate Invoice',
'send' => 'Send',
'invoice-sent' => 'Invoice sent successfully!',
'send-duplicate-invoice' => 'Çift Fatura Gönder',
'send' => 'Gönder',
'invoice-sent' => 'Fatura başarıyla gönderildi!',
'qty' => 'Miktar',
'qty-ordered' => 'Sipariş Miktarı',
'qty-to-invoice' => 'Fatura Edilen Miktar',
@ -423,12 +423,12 @@ return [
'ship-to' => 'Teslim Edilen',
'print' => 'Yazdır',
'order-date' => 'Sipariş Tarihi',
'invalid-qty' => 'We found an invalid quantity to invoice items.',
'invalid-qty' => 'Öğeleri faturalamak için geçersiz bir miktar bulduk.',
'creation-error' => 'Fatura oluşturulmasına izin verilmedi.',
'product-error' => 'Fatura oluşturulması için ürün ekleyiniz.',
'status-overdue' => 'Overdue',
'status-pending' => 'Pending Payment',
'status-paid' => 'Paid',
'status-overdue' => 'Vadesi Geçmiş',
'status-pending' => 'Bekleyen Ödeme',
'status-paid' => 'Ödendi',
],
'shipments' => [
@ -483,24 +483,24 @@ return [
],
'transactions' => [
'title' => 'Transactions',
'create-title' => 'Add transaction',
'title' => 'İşlemler',
'create-title' => 'İşlem ekle',
'id' => 'Id',
'transaction-id' => 'Transaction Id',
'payment-method' => 'Payment method',
'transaction-amount' => 'Transaction amount',
'action' => 'Action',
'view-title' => 'Transaction #:transaction_id',
'transaction-data' => 'Transaction Data',
'order-id' => 'Order Id',
'invoice-id' => 'Invoice Id',
'status' => 'Status',
'created-at' => 'Created At',
'transaction-details' => 'Transaction Details',
'transaction-id' => 'İşlem Id',
'payment-method' => 'Ödeme şekli',
'transaction-amount' => 'İşlem tutarı',
'action' => 'Aksiyon',
'view-title' => 'İşlem #:transaction_id',
'transaction-data' => 'İşlem Tarihi',
'order-id' => 'Sipariş Id',
'invoice-id' => 'Fatura Id',
'status' => 'Durum',
'created-at' => 'Oluşturulma Tarihi',
'transaction-details' => 'Ödeme Detayları',
'response' => [
'invoice-missing' => 'This invoice id does not exist',
'transaction-saved' => 'The transaction has been saved',
'already-paid' => 'This invoice has already been paid',
'invoice-missing' => 'Bu fatura kimliği mevcut değil',
'transaction-saved' => 'İşlem kaydedildi',
'already-paid' => 'Bu fatura zaten ödendi',
],
],
],
@ -520,10 +520,10 @@ return [
'bundle' => 'demet',
'downloadable' => 'indirilebilir',
'grouped' => 'gruplandırılmış',
'virtual' => 'gerçek',
'virtual' => 'gerçek',
'configurable' => 'yapılandırılabilir',
],
],
'simple' => 'Basit',
'configurable' => 'Ayarlanabilir',
'familiy' => 'Nitelik Grubu',
@ -584,15 +584,15 @@ return [
'multiselect' => 'Çoklu Seçim',
'new-option' => 'Yeni Seçenek',
'is-default' => 'Varsayılan',
'remove-image-btn-title' => 'Remove Image',
'videos' => 'Videos',
'remove-image-btn-title' => 'Resmi Kaldır',
'videos' => 'Videolar',
'video' => 'Video',
'add-video-btn-title' => 'Add Video',
'remove-video-btn-title' => 'Remove Video',
'not-support-video' => 'Your browser does not support the video tag.',
'save' => 'Save',
'cancel' => 'Cancel',
'saved-inventory-message' => 'Product inventory saved successfully.',
'add-video-btn-title' => 'Video Ekle',
'remove-video-btn-title' => 'Video Kaldır',
'not-support-video' => 'Tarayıcınız video etiketini desteklemiyor.',
'save' => 'Kaydet',
'cancel' => 'İptal',
'saved-inventory-message' => 'Ürün envanteri başarıyla kaydedildi.',
],
'attributes' => [
@ -649,7 +649,7 @@ return [
'is_comparable' => 'Nitelik kıyaslanabilir',
'default_null_option' => 'Varsayılan boş seçenek oluştur',
'validation-messages' => [
'max-size' => 'The image size must be less than 600 KB',
'max-size' => 'Resim boyutu 600 KB\'den küçük olmalıdır',
],
],
'families' => [
@ -871,9 +871,9 @@ return [
'seo-title' => 'Meta Başlık',
'seo-description' => 'Meta Açıklama',
'seo-keywords' => 'Meta Anahtar Kelimeler',
'maintenance-mode' => 'Maintenance Mode',
'maintenance-mode-text' => 'Message',
'allowed-ips' => 'Allowed IPs',
'maintenance-mode' => 'Bakım Modu',
'maintenance-mode-text' => 'İleti',
'allowed-ips' => 'İzin verilen IP\'ler',
],
'sliders' => [
@ -892,8 +892,8 @@ return [
'update-fail' => 'Slider güncellenemez.',
'delete-success' => 'Slider başarıyla silindi.',
'delete-fail' => 'Slider silinirken hata oluştu.',
'expired-at' => 'Expire Date',
'sort-order' => 'Sort Order',
'expired-at' => 'Son kullanma tarihi',
'sort-order' => 'Sıralama düzeni',
],
'tax-categories' => [
@ -1028,9 +1028,9 @@ return [
'status' => 'Durum',
'active' => 'Aktif',
'inactive' => 'Pasif',
'is-suspended' => 'Is Suspended',
'suspend' => 'Suspend',
'suspended' => 'Suspended',
'is-suspended' => 'Askıya Alındı',
'suspend' => 'Askıya al',
'suspended' => 'Askıya alındı',
],
'reviews' => [
@ -1194,63 +1194,63 @@ return [
'marketing' => [
'templates' => [
'title' => 'Email Templates',
'add-title' => 'Add Email Template',
'edit-title' => 'Edit Email Template',
'save-btn-title' => 'Save',
'general' => 'General',
'name' => 'Name',
'status' => 'Status',
'active' => 'Active',
'inactive' => 'Inactive',
'draft' => 'Draft',
'content' => 'Content',
'create-success' => 'Email template created successfully.',
'update-success' => 'Email template updated successfully.',
'delete-success' => 'Email template deleted successfully',
'title' => 'E-posta Şablonları',
'add-title' => 'E-posta Şablonu Ekle',
'edit-title' => 'E-posta Şablonunu Düzenle',
'save-btn-title' => 'Kaydet',
'general' => 'Genel',
'name' => 'İsim',
'status' => 'Durum',
'active' => 'Aktif',
'inactive' => 'Pasif',
'draft' => 'Taslak',
'content' => 'İçerik',
'create-success' => 'E-posta şablonu başarıyla oluşturuldu.',
'update-success' => 'E-posta şablonu başarıyla güncellendi.',
'delete-success' => 'E-posta şablonu başarıyla silindi.',
],
'campaigns' => [
'title' => 'Campaigns',
'add-title' => 'Add Campaign',
'edit-title' => 'Edit Campaign',
'save-btn-title' => 'Save',
'general' => 'General',
'name' => 'Name',
'status' => 'Status',
'active' => 'Active',
'inactive' => 'Inactive',
'subject' => 'Subject',
'email-template' => 'Email Template',
'audience' => 'Audience',
'channel' => 'Channel',
'customer-group' => 'Customer Group',
'schedule' => 'Schedule',
'schedule-type' => 'Schedule Type',
'once' => 'Once',
'events' => 'Events',
'schedule-date' => 'Schedule Date',
'spooling' => 'Spooling',
'event' => 'Event',
'birthday' => 'Birthday',
'create-success' => 'Campaign created successfully.',
'update-success' => 'Campaign updated successfully.',
'delete-success' => 'Campaign deleted successfully',
'title' => 'Kampanyalar',
'add-title' => 'Kampanya Ekle',
'edit-title' => 'Kampanyayı Düzenle',
'save-btn-title' => 'Kaydet',
'general' => 'Genel',
'name' => 'İsim',
'status' => 'Durum',
'active' => 'Aktif',
'inactive' => 'Pasif',
'subject' => 'Konu',
'email-template' => 'E-posta şablonu',
'audience' => 'Kitle',
'channel' => 'Kanal',
'customer-group' => 'Müşteri Grubu',
'schedule' => 'Takvim',
'schedule-type' => 'Zamanlama türü',
'once' => 'Bir kez',
'events' => 'Etkinlikler',
'schedule-date' => 'Program Tarihi',
'spooling' => 'Biriktir',
'event' => 'Etkinlik',
'birthday' => 'Doğum Günü',
'create-success' => 'Kampanya başarıyla oluşturuldu.',
'update-success' => 'Kampanya başarıyla güncellendi.',
'delete-success' => 'Kampanya başarıyla silindi.',
],
'events' => [
'title' => 'Events',
'add-title' => 'Add Event',
'edit-title' => 'Edit Event',
'save-btn-title' => 'Save',
'general' => 'General',
'name' => 'Name',
'description' => 'Description',
'date' => 'Date',
'create-success' => 'Event created successfully.',
'update-success' => 'Event updated successfully.',
'delete-success' => 'Event deleted successfully.',
'edit-error' => 'Can not edit this event.',
'title' => 'Etkinlikler',
'add-title' => 'Etkinlik Ekle',
'edit-title' => 'Etkinliği Düzenle',
'save-btn-title' => 'Kaydet',
'general' => 'Genel',
'name' => 'İsim',
'description' => 'ıklama',
'date' => 'Tarih',
'create-success' => 'Etkinlik başarıyla oluşturuldu.',
'update-success' => 'Etkinlik başarıyla güncellendi.',
'delete-success' => 'Etkinlik başarıyla silindi.',
'edit-error' => 'Bu etkinlik düzenlenemiyor.',
],
],
@ -1287,7 +1287,7 @@ return [
'tinymce' => [
'http-error' => 'HTTP error.',
'invalid-json' => 'Invalid JSON.',
'upload-failed' => 'Image upload failed due to a XHR Transport error.',
'upload-failed' => 'XHR Aktarım hatası nedeniyle resim yükleme başarısız oldu.',
],
],
@ -1336,16 +1336,16 @@ return [
'delete-success' => 'CMS sayfası başarıyla silindi.',
'delete-failure' => 'CMS sayfası silinirken hata oluştu!',
'preview' => 'Önizleme',
'one-col' => '<div class="mt-10">Use class: <b>"static-container one-column"</b> for one column layout.</div>',
'two-col' => '<div class="mt-10">Use class: <b>"static-container two-column"</b> for two column layout.</div>',
'three-col' => '<div class="mt-10">Use class: <b>"static-container three-column"</b> for three column layout.</div>',
'one-col' => '<div class="mt-10">Bir sütun düzeni için <b>"static-container one-column"</b> sınıfını kullanın.</div>',
'two-col' => '<div class="mt-10">İki sütun düzeni için <b>"static-container two-column"</b> sınıfı kullanın.</div>',
'three-col' => '<div class="mt-10">Üç sütun düzeni için <b>"static-container three-column"</b> sınıfı kullanın.</div>',
'helper-classes' => 'Yardımcı Sınıflar',
],
],
'response' => [
'being-used' => ':name isimli kaynak :source isimli kaynakta kullanılıyor.',
'cannot-change' => 'Cannot change the :name.',
'cannot-change' => ':name değiştirilemez.',
'cannot-delete-default' => 'Varsayılan kanal silinemez.',
'create-success' => ':name başarıyla oluşturuldu.',
'update-success' => ':name başarıyla güncellendi.',
@ -1364,12 +1364,12 @@ return [
'cancel-error' => ':name iptal edilemez.',
'already-taken' => ':name daha önceden girilmiş.',
'order-pending' => 'Bu hesaba ait işlem bekleyen siparişler bulunduğundan hesap silinemez.',
'something-went-wrong' => 'Something went wrong!',
'something-went-wrong' => 'Bir şeyler yanlış gitti!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
'slug-being-used' => 'Bu slug ya kategorilerde ya da ürünlerde kullanılıyor.',
'slug-reserved' => 'Bu slug saklıdır.',
],
'footer' => [
@ -1397,10 +1397,10 @@ return [
],
'system' => [
'catalog' => 'Katalog',
'homepage' => 'Homepage configuration',
'allow-no-of-new-product-homepage' => 'Allowed No of New Product in Homepage',
'allow-no-of-featured-product-homepage' => 'Allowed No of Featured Product in Homepage',
'allow-out-of-stock-items' => 'Allow out of stock items',
'homepage' => 'Ana sayfa yapılandırması',
'allow-no-of-new-product-homepage' => 'Ana Sayfada İzin Verilen Yeni Ürün Sayısı',
'allow-no-of-featured-product-homepage' => 'Ana Sayfada İzin Verilen Öne Çıkan Ürün Sayısı',
'allow-out-of-stock-items' => 'Stokta olmayan ürünlere izin ver',
'products' => 'Ürünler',
'guest-checkout' => 'Ziyaretçi Satışı',
'allow-guest-checkout' => 'Ziyaretçi Alımına İzin Ver',
@ -1411,8 +1411,8 @@ return [
'stock-options' => 'Stok Seçenekleri',
'allow-backorders' => 'Stok Dışı Siparişe İzin Ver',
'customer' => 'Müşteri',
'wishlist' => 'Wishlist',
'wishlist-share' => 'Enable Sharing',
'wishlist' => 'İstek Listesi',
'wishlist-share' => 'Paylaşımı Etkinleştir',
'settings' => 'Ayarlar',
'address' => 'Adres',
'street-lines' => 'Sokak Adresi Satır Sayısı',
@ -1427,7 +1427,7 @@ return [
'state' => 'Şehir',
'zip' => 'Posta Kodu',
'city' => 'İlçe',
'information' => 'Information',
'information' => 'Bilgi',
'street-address' => 'Sokak Adresi',
'title' => 'Başlık',
'description' => 'Açıklama',
@ -1454,13 +1454,13 @@ return [
'weight-unit' => 'Ağırlık Birimi',
'email-settings' => 'Mail Ayarları',
'email-sender-name' => 'Mail Gönderici Adı',
'email-sender-name-tip' => 'This name will be displayed in the customers inbox',
'email-sender-name-tip' => 'Bu ad, müşterilerin gelen kutusunda görüntülenecektir.',
'shop-email-from' => 'Mağaza Mail Adresi [Mail gönderimleri için]',
'shop-email-from-tip' => 'The email address of this channel to send emails to your customers',
'shop-email-from-tip' => 'Müşterilerinize e-posta göndermek için bu kanalın e-posta adresi',
'admin-name' => 'Yönetici Adı',
'admin-name-tip' => 'This name will be displayed in all admin emails',
'admin-name-tip' => 'Bu ad, tüm yönetici e-postalarında görüntülenecektir.',
'admin-email' => 'Yönetici Mail Adresi',
'admin-email-tip' => 'The email address of the admin for this channel to receive emails',
'admin-email-tip' => 'E-postaları almak için bu kanalın yöneticisinin e-posta adresi',
'admin-page-limit' => 'Sayfa Başına Varsayılan İçerik (Yönetici)',
'design' => 'Tasarım',
'admin-logo' => 'Panel Logo',
@ -1489,9 +1489,9 @@ return [
'invoice-slip-design' => 'Fatura Tasarımı',
'logo' => 'logo',
'default' => 'Varsayılan',
'invoice-reminders' => 'Invoice Reminders',
'maximum-limit-of-reminders' => 'Maximum limit of reminders',
'interval-between-reminders' => 'Interval between reminders',
'invoice-reminders' => 'Fatura Hatırlatıcıları',
'maximum-limit-of-reminders' => 'Maksimum hatırlatıcı sınırı',
'interval-between-reminders' => 'Hatırlatıcılar arasındaki aralık',
'sandbox' => 'Havuz',
'all-channels' => 'Tümü',
'all-locales' => 'Tümü',
@ -1525,29 +1525,29 @@ return [
'vat-number' => 'KDV Numarası',
'contact-number' => 'İletişim numarası',
'bank-details' => 'Banka detayları',
'mailing-address' => 'Send Check to',
'instructions' => 'Instructions',
'custom-scripts' => 'Custom Scripts',
'custom-css' => 'Custom CSS',
'custom-javascript' => 'Custom Javascript',
'mailing-address' => 'Çek Gönder',
'instructions' => 'Talimatlar',
'custom-scripts' => 'Özel Komut Dosyaları',
'custom-css' => 'Özel CSS',
'custom-javascript' => 'Özel Javascript',
'paypal-smart-button' => 'PayPal',
'client-id' => 'Client Id',
'client-id-info' => 'Use "sb" for testing.',
'client-secret' => 'Client Secret',
'client-secret-info' => 'Add your secret key here',
'accepted-currencies' => 'Accepted currencies',
'accepted-currencies-info' => 'Add currency code comma seperated e.g. USD,INR,...',
'buy-now-button-display' => 'Allow customers to directly buy products',
'width' => 'Width',
'height' => 'Height',
'cache-small-image' => 'Small Image',
'cache-medium-image' => 'Medium Image',
'cache-large-image' => 'Large Image',
'generate-invoice' => 'Automatically generate the invoice after placing an order',
'set-invoice-status' => 'Set the invoice status after creating the invoice to',
'set-order-status' => 'Set the order status after creating the invoice to',
'generate-invoice-applicable' => 'Applicable if automatic generate invoice is enabled',
'records-found' => 'Record(s) found',
'client-secret-info' => 'Gizli anahtarınızı buraya ekleyin',
'accepted-currencies' => 'Kabul edilen para birimleri',
'accepted-currencies-info' => 'Para birimi kodunu virgülle ayırarak ekleyin, ör. USD, INR,...',
'buy-now-button-display' => 'Müşterilerin ürünleri doğrudan satın almasına izin verin',
'width' => 'Genişlik',
'height' => 'Yükseklik',
'cache-small-image' => 'Küçük Resim',
'cache-medium-image' => 'Orta Resim',
'cache-large-image' => 'Büyük Resim',
'generate-invoice' => 'Sipariş verdikten sonra faturayı otomatik olarak oluşturun',
'set-invoice-status' => 'Faturayı oluşturduktan sonra fatura durumunu şu şekilde ayarlayın:',
'set-order-status' => 'Faturayı oluşturduktan sonra sipariş durumunu ayarlayın.',
'generate-invoice-applicable' => 'Otomatik fatura oluştur etkinse geçerlidir',
'records-found' => 'Kayıt(lar) bulundu',
],
],

View File

@ -1548,7 +1548,53 @@ return [
'generate-invoice' => '下单后自动生成发票',
'set-invoice-status' => '创建发票后设置发票状态为',
'set-order-status' => '将创建发票后的订单状态设置为',
'generate-invoice-applicable' => '适用于启用自动生成发票的情况'
]
]
'generate-invoice-applicable' => '适用于启用自动生成发票的情况',
'records-found' => '找到记录',
'logo-size' => '图像分辨率应该是 112px X 41px',
'favicon-size' => '图像分辨率应该是 16px X 16px',
'invoice-logo-size' => '图像分辨率应该是 192px X 50px',
],
],
'api' => [
'system' => [
'api' => 'API',
'basic-configuration' => '基本配置',
'customer-configuration' => '客户配置',
'username' => '用户名',
'password' => '密码',
'login-after-register' => '注册后登录',
'info-login' => '信息: 顾客 注册API后必须登录.',
],
'auth' => [
'invalid-auth' => '警告:您无权使用 API。',
'required-token' => '警告:令牌参数是必需的。',
'invalid-store' => '警告:您请求的商店无效。',
'login-required' => '警告:需要客户登录才能将产品添加到比较列表。',
'resource-not-found' => '警告: 已请求:resource 在记录中找不到.',
],
],
'notification' => [
'notification-title' => '通知',
'title-plural' => '通知',
'status' => [
'all' => 'All',
'pending' => 'Pending',
'processing' => 'Processing',
'canceled' => 'Canceled',
'closed' => 'Closed',
'completed' => 'Completed',
],
'view-all' => '查看所有通知',
'no-record' => '没有找到记录',
'read-all' => '标记为已读',
'notification-marked-success' => '通知标记成功',
'order-status-messages' => [
'completed' => '订单完成',
'closed' => '订单已关闭',
'canceled' => '订单取消',
'pending' => '订单待处理',
'processing' => '订单处理',
],
],
];

View File

@ -1,5 +1,5 @@
@php
$locale = core()->getRequestedLocaleCode();
$locale = core()->getRequestedLocaleCode();
@endphp
@extends('admin::layouts.content')
@ -12,11 +12,14 @@
<div class="content">
<div class="page-header">
<div class="page-title">
<h1>{{ __('admin::app.catalog.categories.title') }}</h1>
<h1>{{ __('admin::app.catalog.categories.title') }}</h1>
</div>
<div class="page-action">
<a href="{{ route('admin.catalog.categories.create') }}" class="btn btn-lg btn-primary">
<a
href="{{ route('admin.catalog.categories.create') }}"
class="btn btn-lg btn-primary"
>
{{ __('admin::app.catalog.categories.add-title') }}
</a>
</div>
@ -34,7 +37,7 @@
@push('scripts')
<script>
$(document).ready(function(){
$(document).ready(function() {
$("input[type='checkbox']").change(deleteCategory);
});
@ -60,13 +63,13 @@
if (indexes) {
$.ajax({
type : 'POST',
url : '{{ route("admin.catalog.categories.product.count") }}',
data : {
_token: '{{csrf_token()}}',
type: 'POST',
url: '{{ route('admin.catalog.categories.product.count') }}',
data: {
_token: '{{ csrf_token() }}',
indexes: indexes
},
success:function(data) {
success: function(data) {
$("input[type='checkbox']").attr('disabled', false);
if (data.product_count > 0) {
let message = "{{ trans('ui::app.datagrid.massaction.delete-category-product') }}";
@ -74,7 +77,7 @@
if (type == 'delete') {
doAction(e, message);
} else {
$('form').attr('onsubmit', 'return confirm("'+message+'")');
$('form').attr('onsubmit', 'return confirm("' + message + '")');
}
} else {
let message = "{{ __('ui::app.datagrid.click_on_action') }}";
@ -82,7 +85,7 @@
if (type == 'delete') {
doAction(e, message);
} else {
$('form').attr('onsubmit', 'return confirm("'+message+'")');
$('form').attr('onsubmit', 'return confirm("' + message + '")');
}
}
}
@ -92,41 +95,6 @@
}
}
/**
* Do action function. Not directly calling the datagrid components.
* Instead taking a copy and using in this scope.
*/
function doAction (e, message, type) {
let element = e.currentTarget;
if (message) {
element = e.target.parentElement;
}
message = message || '{{ __('ui::app.datagrid.massaction.delete') }}';
if (confirm(message)) {
axios.post(element.getAttribute('data-action'), {
_token: element.getAttribute('data-token'),
_method: element.getAttribute('data-method')
}).then(function (response) {
this.result = response;
if (response.data.redirect) {
window.location.href = response.data.redirect;
} else {
location.reload();
}
}).catch(function (error) {
location.reload();
});
e.preventDefault();
} else {
e.preventDefault();
}
}
/**
* Reload page.
*/
@ -138,4 +106,4 @@
window.location.href = url.href;
}
</script>
@endpush
@endpush

View File

@ -132,7 +132,7 @@
@if (view()->exists($typeView = 'admin::catalog.products.field-types.' . $attribute->type))
<div class="control-group {{ $attribute->type }}"
<div class="control-group {{ $attribute->type }} {{ $attribute->enable_wysiwyg ? 'have-wysiwyg' : '' }}"
@if ($attribute->type == 'multiselect') :class="[errors.has('{{ $attribute->code }}[]') ? 'has-error' : '']"
@else :class="[errors.has('{{ $attribute->code }}') ? 'has-error' : '']" @endif>

View File

@ -67,7 +67,6 @@
<script>
$(document).ready(function () {
$(".menubar-anchor").click(function() {
if ( $(this).parent().attr('class') == 'menu-item active' ) {
$(this).parent().removeClass('active');

View File

@ -45,7 +45,7 @@
</div>
<notification
notif-title="{{ __('admin::app.notification.notification-title') }}"
notif-title="{{ __('admin::app.notification.notification-title', ['read' => 0]) }}"
get-notification-url="{{ route('admin.notification.get-notification') }}"
view-all="{{ route('admin.notification.index') }}"
order-view-url="{{ \URL::to('/') }}/admin/viewed-notifications/"

View File

@ -41,7 +41,7 @@
text-align: center;
}
.page-item .pagination-page-nav .active .page-link{
.page-item .pagination-page-nav .active .page-link {
color:#fff !important;
}
</style>

View File

@ -0,0 +1,140 @@
<?php
return [
'admin' => [
'catalog' => [
'products' => [
'booking' => 'Rezervasyon Bilgileri',
'booking-type' => 'Rezervasyon Türü',
'default' => 'Varsayılan',
'appointment-booking' => 'Randevu Rezervasyonu',
'event-booking' => 'Etkinlik Rezervasyonu',
'rental-booking' => 'Kiralık Rezervasyon',
'table-booking' => 'Masa Rezervasyonu',
'slot-duration' => 'Slot Süresi (Dk)',
'break-time' => 'Mola Süresi s/b Slot (Dk)',
'available-every-week' => 'Her Hafta Mevcut',
'yes' => 'Evet',
'no' => 'Hayır',
'available-from' => 'Mevcut',
'available-to' => 'Mevcut',
'same-slot-all-days' => 'Tüm Günler Aynı Slot',
'slot-has-quantity' => 'Slot Miktarı var',
'slots' => 'Slotlar',
'from' => 'İtibaren',
'to' => 'İle',
'qty' => 'Miktar',
'add-slot' => 'Slot Ekle',
'sunday' => 'Pazar',
'monday' => 'Pazartesi',
'tuesday' => 'Salı',
'wednesday' => 'Çarşamba',
'thursday' => 'Perşembe',
'friday' => 'Cuma',
'saturday' => 'Cumartesi',
'renting-type' => 'Kiralama Türü',
'daily' => 'Günlük Bazında',
'hourly' => 'Saatlik Bazında',
'daily-hourly' => 'Her ikisi (Günlük ve Saatlik)',
'daily-price' => 'Günlük Fiyat',
'hourly-price' => 'Saatlik Fiyat',
'location' => 'Konum',
'show-location' => 'Konumu Göster',
'event-start-date' => 'Etkinlik Başlangıç Tarihi',
'event-end-date' => 'Etkinlik Bitiş Tarihi',
'tickets' => 'Biletler',
'add-ticket' => 'Bilet Ekle',
'name' => 'İsim',
'price' => 'Fiyat',
'quantity' => 'Miktar',
'description' => 'Açıklama',
'special-price' => 'Özel Fiyat',
'special-price-from' => 'Kadar Geçerli',
'special-price-to' => 'Geçerlilik Tarihi',
'charged-per' => 'Ücretli',
'guest' => 'Misafir',
'table' => 'Masa',
'prevent-scheduling-before' => 'Önceden Planlamayı Önle',
'guest-limit' => 'Masa Başına Misafir Limiti',
'guest-capacity' => 'Misafir Kapasitesi',
'type' => 'Tür',
'many-bookings-for-one-day' => 'Bir Gün İçin Birçok Rezervasyon',
'one-booking-for-many-days' => 'Birçok Gün İçin Bir Rezervasyon',
'day' => 'Gün',
'status' => 'Durum',
'open' => 'Açık',
'close' => 'Kapalı',
'time-error' => 'Gidiş zamanı, başlangıç zamanından daha büyük olmalıdır.'
]
],
'sales' => [
'bookings' => [
'title' => 'Rezervasyonlar',
]
],
'datagrid' => [
'from' => 'İtibaren',
'to' => 'İle'
]
],
'shop' => [
'products' => [
'location' => 'Konum',
'contact' => 'İletişim',
'email' => 'Email',
'slot-duration' => 'Slot Süresi',
'slot-duration-in-minutes' => ':minutes Dakika',
'today-availability' => 'Bugün Kullanılabilirlik',
'slots-for-all-days' => 'Tüm günler için göster',
'sunday' => 'Pazar',
'monday' => 'Pazartesi',
'tuesday' => 'Salı',
'wednesday' => 'Çarşamba',
'thursday' => 'Perşembe',
'friday' => 'Cuma',
'saturday' => 'Cumartesi',
'closed' => 'Kapalı',
'book-an-appointment' => 'Randevu Al',
'date' => 'Tarih',
'slot' => 'Slot',
'rent-an-item' => 'Eşya Kiralama',
'choose-rent-option' => 'Kiralama Seçeneğini Seçin',
'daily-basis' => 'Günlük Bazında',
'hourly-basis' => 'Saatlik Bazında',
'select-time-slot'=> 'Zaman aralığı seçin',
'select-slot' => 'Slot Seç',
'select-date' => 'Tarih Seç',
'select-rent-time' => 'Kiralama Süresini Seçin',
'from' => 'İtibaren',
'to' => 'İle',
'book-a-table' => 'Bir masa rezervasyonu',
'special-notes' => 'Özel İstek/Notlar',
'event-on' => 'Etkinlik Açık',
'book-your-ticket' => 'Biletinizi Ayırtın',
'per-ticket-price' => 'Bilet Başına :price',
'number-of-tickets' => 'Bilet Sayısı',
'total-tickets' => 'Toplam Biletler',
'base-price' => 'Taban Fiyat',
'total-price' => 'Toplam Fiyat',
'base-price-info' => '(Bu, her miktar için her bilet türü için geçerli olacaktır.)'
],
'cart' => [
'renting_type' => 'Kira Türü',
'daily' => 'Günlük',
'hourly' => 'Saatlik',
'event-ticket' => 'Etkinlik Bileti',
'event-from' => 'Etkinlik Kimden',
'event-till' => 'Etkinlik Sonu',
'rent-type' => 'Kira Türü',
'rent-from' => 'Kiralık',
'rent-till' => 'Kiraya Kadar',
'booking-from' => 'Rezervasyon',
'booking-till' => 'Rezervasyon',
'special-note' => 'Özel İstek/Notlar',
]
]
];

View File

@ -89,7 +89,7 @@
<td>
<div class="control-group" :class="[errors.has('booking[slots][' + index + '][to]') ? 'has-error' : '']">
<time-component>
<input type="text" v-validate="parseInt(slots.many[index].status) ? 'required': ''" :name="'booking[slots][' + index + '][to]'" class="control" v-model="slots.many[index].to" data-vv-as="&quot;{{ __('bookingproduct::app.admin.catalog.products.to') }}&quot;">
<input type="text" v-validate="parseInt(slots.many[index].status) ? {required: true, time_min: slots.many[index].from } : ''" :name="'booking[slots][' + index + '][to]'" class="control" v-model="slots.many[index].to" data-vv-as="&quot;{{ __('bookingproduct::app.admin.catalog.products.to') }}&quot;">
</time-component>
<span class="control-error" v-if="errors.has('booking[slots][' + index + '][to]')">

View File

@ -12,7 +12,6 @@ use Webkul\Customer\Mail\RegistrationEmail;
use Webkul\Customer\Mail\VerificationEmail;
use Webkul\Customer\Repositories\CustomerGroupRepository;
use Webkul\Customer\Repositories\CustomerRepository;
use Webkul\Sales\Models\Order;
use Webkul\Shop\Mail\SubscriptionEmail;
class RegistrationController extends Controller
@ -57,8 +56,7 @@ class RegistrationController extends Controller
CustomerRepository $customerRepository,
CustomerGroupRepository $customerGroupRepository,
SubscribersListRepository $subscriptionRepository
)
{
) {
$this->_config = request('_config');
$this->customerRepository = $customerRepository;
@ -89,11 +87,11 @@ class RegistrationController extends Controller
$request->validated();
$data = array_merge(request()->input(), [
'password' => bcrypt(request()->input('password')),
'api_token' => Str::random(80),
'is_verified' => core()->getConfigData('customer.settings.email.verification') ? 0 : 1,
'customer_group_id' => $this->customerGroupRepository->findOneWhere(['code' => 'general'])->id,
'token' => md5(uniqid(rand(), true)),
'password' => bcrypt(request()->input('password')),
'api_token' => Str::random(80),
'is_verified' => core()->getConfigData('customer.settings.email.verification') ? 0 : 1,
'customer_group_id' => $this->customerGroupRepository->findOneWhere(['code' => 'general'])->id,
'token' => md5(uniqid(rand(), true)),
'subscribed_to_news_letter' => isset(request()->input()['is_subscribed']) ? 1 : 0,
]);
@ -130,7 +128,7 @@ class RegistrationController extends Controller
'email' => $data['email'],
'token' => $token,
]));
} catch (\Exception $e) { }
} catch (\Exception $e) {}
}
}
@ -179,9 +177,9 @@ class RegistrationController extends Controller
$customer = $this->customerRepository->findOneByField('token', $token);
if ($customer) {
$customer->update(['is_verified' => 1, 'token' => 'NULL']);
$this->customerRepository->update(['is_verified' => 1, 'token' => 'NULL'], $customer->id);
Order::where('customer_email', $customer->email)->update(['customer_id' => $customer->id]);
$this->customerRepository->syncNewRegisteredCustomerInformations($customer);
session()->flash('success', trans('shop::app.customer.signup-form.verified'));
} else {

View File

@ -5,6 +5,7 @@ namespace Webkul\Customer\Repositories;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Storage;
use Webkul\Core\Eloquent\Repository;
use Webkul\Sales\Models\Order;
class CustomerRepository extends Repository
{
@ -119,4 +120,45 @@ class CustomerRepository extends Repository
$customer->save();
}
}
/**
* Sync new registered customer data.
*
* @param \Webkul\Customer\Contracts\Customer $customer
* @return mixed
*/
public function syncNewRegisteredCustomerInformations($customer)
{
/**
* Setting registered customer to orders.
*/
Order::where('customer_email', $customer->email)->update([
'is_guest' => 0,
'customer_id' => $customer->id,
'customer_type' => \Webkul\Customer\Models\Customer::class,
]);
/**
* Grabbing orders by `customer_id`.
*/
$orders = Order::where('customer_id', $customer->id)->get();
/**
* Setting registered customer to associated order's relations.
*/
$orders->each(function ($order) use ($customer) {
$order->addresses()->update([
'customer_id' => $customer->id,
]);
$order->shipments()->update([
'customer_id' => $customer->id,
'customer_type' => \Webkul\Customer\Models\Customer::class,
]);
$order->downloadable_link_purchased()->update([
'customer_id' => $customer->id,
]);
});
}
}

View File

@ -0,0 +1,40 @@
<?php
return [
'wishlist' => [
'success' => 'Öğe Başarıyla İstek Listesine Eklendi',
'failure' => 'Öğe İstek Listesine Eklenemiyor',
'already' => 'Ürün İstek Listenizde Zaten Mevcut',
'removed' => 'Öğe İstek Listesinden Başarıyla Kaldırıldı',
'remove-fail' => 'Öğe İstek Listesinden Kaldırılamıyor',
'empty' => 'İstek Listenizde Hiç Ürün Yok',
'select-options' => 'İstek Listesine Eklemeden Önce Seçenekleri Seçmeniz Gerekiyor',
'remove-all-success' => 'İstek Listenizdeki Tüm Öğeler Kaldırıldı',
],
'reviews' => [
'empty' => 'Henüz hiçbir ürünü incelemediniz',
],
'forget_password' => [
'reset_link_sent' => 'Şifre sıfırlama bağlantınızı e-posta ile gönderdik.',
'email_not_exist' => "Bu e-posta adresine sahip bir kullanıcı bulamıyoruz",
],
'admin' => [
'system' => [
'captcha' => [
'title' => 'Captcha',
'credentials' => 'Kimlik Bilgileri',
'site-key' => 'Site Key',
'secret-key' => 'Secret Key',
'status' => 'Durum',
'validations' => [
'required' => 'Lütfen CAPTCHA\'yı seçin',
'captcha' => 'Bir şeyler yanlış gitti! Lütfen tekrar deneyin.',
]
],
],
],
];

View File

@ -1,3 +0,0 @@
{
"/js/notification-app.js": "/js/notification-app.js"
}

View File

@ -2,27 +2,16 @@
namespace Webkul\Notification\Events;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\Channel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class CreateOrderNotification implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Get the channels the event should broadcast on.
*
@ -33,7 +22,13 @@ class CreateOrderNotification implements ShouldBroadcast
return new Channel('notification');
}
/**
* Seperate queue.
*
* Command: `php artisan queue:work --queue=broadcastable`
*
* @return string
*/
public function broadcastQueue()
{
return 'broadcastable';
@ -42,7 +37,7 @@ class CreateOrderNotification implements ShouldBroadcast
/**
* Get the channels the event should broadcast as.
*
* @return broadcast name
* @return string
*/
public function broadcastAs()
{

View File

@ -2,11 +2,11 @@
namespace Webkul\Notification\Events;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\Channel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class UpdateOrderNotification implements ShouldBroadcast
{
@ -34,7 +34,7 @@ class UpdateOrderNotification implements ShouldBroadcast
return new Channel('notification');
}
/**
/**
* Broadcast with data.
*
* @return array
@ -44,16 +44,25 @@ class UpdateOrderNotification implements ShouldBroadcast
return $this->data;
}
public function broadcastQueue () {
/**
* Seperate queue.
*
* Command: `php artisan queue:work --queue=broadcastable`
*
* @return string
*/
public function broadcastQueue()
{
return 'broadcastable';
}
/**
* Get the channels the event should broadcast as.
*
* @return broadcast name
* @return string
*/
public function broadcastAs () {
public function broadcastAs()
{
return 'update-notification';
}
}

View File

@ -14,7 +14,6 @@ class NotificationController extends Controller
*/
protected $_config;
/**
* NotificationRepository
*
@ -55,21 +54,19 @@ class NotificationController extends Controller
{
$params = request()->all();
$searchResults = [];
if(isset($params) && isset($params['page'])){
if (isset($params['page'])) {
unset($params['page']);
}
if(isset($params) && $params != NULL){
if (count($params)) {
$searchResults = $this->notificationRepository->getParamsData($params);
}else{
} else {
$searchResults = $this->notificationRepository->with('order')->latest()->paginate(10);
}
return [
'search_results' => $searchResults,
'total_unread' => $this->notificationRepository->where('read',0)->count()
'total_unread' => $this->notificationRepository->where('read', 0)->count(),
];
}
@ -78,10 +75,12 @@ class NotificationController extends Controller
*
* @return \Illuminate\View\View
*/
public function viewedNotifications($orderId){
public function viewedNotifications($orderId)
{
if($notification = $this->notificationRepository->where('order_id',$orderId)->first()){
if ($notification = $this->notificationRepository->where('order_id', $orderId)->first()) {
$notification->read = 1;
$notification->save();
return redirect()->route('admin.sales.orders.view',$orderId);
@ -95,20 +94,20 @@ class NotificationController extends Controller
*
* @return array
*/
public function readAllNotifications(){
$this->notificationRepository->where('read',0)->update(['read' => 1]);
public function readAllNotifications()
{
$this->notificationRepository->where('read', 0)->update(['read' => 1]);
$params = [
"limit" => 5,
"read" => 0
"read" => 0
];
$searchResults = $this->notificationRepository->getParamsData($params);
return [
'search_results' => $searchResults,
'total_unread' => $this->notificationRepository->where('read',0)->count(),
'search_results' => $searchResults,
'total_unread' => $this->notificationRepository->where('read', 0)->count(),
'success_message' => trans('admin::app.notification.notification-marked-success')
];

View File

@ -17,7 +17,7 @@ class Order
protected $notificationRepository;
/**
* Create a new event instance.
* Create a new listener instance.
*
* @return void
*/
@ -33,7 +33,7 @@ class Order
*/
public function createOrder($order)
{
$this->notificationRepository->create(['type' => 'order','order_id' => $order->id]);
$this->notificationRepository->create(['type' => 'order', 'order_id' => $order->id]);
event(new CreateOrderNotification);
}
@ -45,9 +45,9 @@ class Order
*/
public function updateOrder($order)
{
$orderArray =[
'id' => $order->id,
'status' => $order->status
$orderArray = [
'id' => $order->id,
'status' => $order->status,
];
event(new UpdateOrderNotification($orderArray));

View File

@ -23,22 +23,24 @@ class NotificationRepository extends Repository
*/
public function getParamsData($params)
{
if(isset($params['id']) && isset($params['status'])){
return $params['status'] != 'All' ? $this->model->where(function($qry)use ($params){
if (isset($params['id']) && isset($params['status'])) {
return $params['status'] != 'All' ? $this->model->where(function($qry) use ($params) {
$qry->whereHas('order',function ($q) use ($params) {
$q->where(['status' => $params['status']]);
});
})->where('order_id',$params['id'])->with('order')->paginate(10) : $this->model->where('order_id',$params['id'])->with('order')->paginate(10) ;
}elseif (isset($params['status'])) {
return $params['status'] != 'All' ? $this->model->where(function($qry)use ($params){
})->where('order_id', $params['id'])->with('order')->paginate(10) : $this->model->where('order_id', $params['id'])->with('order')->paginate(10) ;
} else if (isset($params['status'])) {
return $params['status'] != 'All' ? $this->model->where(function($qry) use ($params) {
$qry->whereHas('order',function ($q) use ($params) {
$q->where(['status' => $params['status']]);
});
})->with('order')->paginate(10): $this->model->with('order')->latest()->paginate(10);
}elseif(isset($params['limit'])){
} else if(isset($params['read']) && isset($params['limit'])) {
return $this->model->where('read', $params['read'])->limit($params['limit'])->with('order')->latest()->paginate($params['limit']);
} else if(isset($params['limit'])) {
return $this->model->limit($params['limit'])->with('order')->latest()->paginate($params['limit']);
}elseif(isset($params['id'])){
return $this->model->where('order_id',$params['id'])->with('order')->paginate(10);
} else if(isset($params['id'])) {
return $this->model->where('order_id', $params['id'])->with('order')->paginate(10);
}
return [];

View File

@ -13,7 +13,6 @@ use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Webkul\Attribute\Models\Attribute;
use Webkul\Attribute\Repositories\AttributeRepository;
use Webkul\Checkout\Facades\Cart;
use Webkul\Core\Eloquent\Repository;
use Webkul\Product\Models\Product;
use Webkul\Product\Models\ProductAttributeValueProxy;
@ -198,7 +197,6 @@ class ProductRepository extends Repository
$qb = $query->distinct()
->select('product_flat.*')
->leftJoin('product_categories', 'product_categories.product_id', '=', 'product_flat.product_id')
->leftJoin('product_attribute_values', 'product_attribute_values.product_id', '=', 'product_flat.product_id')
->where('product_flat.channel', $channel)
->where('product_flat.locale', $locale)
->whereNotNull('product_flat.url_key');
@ -266,14 +264,16 @@ class ProductRepository extends Repository
}
}
$this->variantJoin($qb);
$qb
->leftJoin('catalog_rule_product_prices', 'catalog_rule_product_prices.product_id', '=', 'product_flat.product_id')
->leftJoin('product_customer_group_prices', 'product_customer_group_prices.product_id', '=', 'product_flat.product_id')
->leftJoin('catalog_rule_product_prices', 'catalog_rule_product_prices.product_id', '=', 'variants.product_id')
->leftJoin('product_customer_group_prices', 'product_customer_group_prices.product_id', '=', 'variants.product_id')
->where(function ($qb) use ($priceRange, $customerGroupId) {
$qb->where(function ($qb) use ($priceRange) {
$qb
->where('product_flat.min_price', '>=', core()->convertToBasePrice($priceRange[0]))
->where('product_flat.min_price', '<=', core()->convertToBasePrice(end($priceRange)));
->where('variants.min_price', '>=', core()->convertToBasePrice($priceRange[0]))
->where('variants.min_price', '<=', core()->convertToBasePrice(end($priceRange)));
})
->orWhere(function ($qb) use ($priceRange) {
$qb
@ -296,6 +296,8 @@ class ProductRepository extends Repository
));
if (count($attributeFilters) > 0) {
$this->variantJoin($qb);
$qb->where(function ($filterQuery) use ($attributeFilters) {
foreach ($attributeFilters as $attribute) {
$filterQuery->orWhere(function ($attributeQuery) use ($attribute) {
@ -329,7 +331,7 @@ class ProductRepository extends Repository
# this is key! if a product has been filtered down to the same number of attributes that we filtered on,
# we know that it has matched all of the requested filters.
$qb->groupBy('product_flat.id');
$qb->groupBy('variants.id');
$qb->havingRaw('COUNT(*) = ' . count($attributeFilters));
}
@ -606,6 +608,25 @@ class ProductRepository extends Repository
return $copiedProduct;
}
/**
* Variant join.
*
* @param mixed $query
* @return void
*/
private function variantJoin($query)
{
static $alreadyJoined = false;
if (! $alreadyJoined) {
$alreadyJoined = true;
$query
->join('product_flat as variants', 'product_flat.id', '=', DB::raw('COALESCE(' . DB::getTablePrefix() . 'variants.parent_id, ' . DB::getTablePrefix() . 'variants.id)'))
->leftJoin('product_attribute_values', 'product_attribute_values.product_id', '=', 'variants.product_id');
}
}
/**
* Get default sort by option.
*

View File

@ -3,15 +3,15 @@
namespace Webkul\Sales\Models;
use Illuminate\Database\Eloquent\Factories\Factory;
use Webkul\Checkout\Models\CartProxy;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Webkul\Checkout\Models\CartProxy;
use Webkul\Sales\Contracts\Order as OrderContract;
use Webkul\Sales\Database\Factories\OrderFactory;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Order extends Model implements OrderContract
{
@ -44,13 +44,13 @@ class Order extends Model implements OrderContract
];
protected $statusLabel = [
self::STATUS_PENDING => 'Pending',
self::STATUS_PENDING => 'Pending',
self::STATUS_PENDING_PAYMENT => 'Pending Payment',
self::STATUS_PROCESSING => 'Processing',
self::STATUS_COMPLETED => 'Completed',
self::STATUS_CANCELED => 'Canceled',
self::STATUS_CLOSED => 'Closed',
self::STATUS_FRAUD => 'Fraud',
self::STATUS_PROCESSING => 'Processing',
self::STATUS_COMPLETED => 'Completed',
self::STATUS_CANCELED => 'Canceled',
self::STATUS_CLOSED => 'Closed',
self::STATUS_FRAUD => 'Fraud',
];
/**
@ -99,7 +99,7 @@ class Order extends Model implements OrderContract
public function items(): HasMany
{
return $this->hasMany(OrderItemProxy::modelClass())
->whereNull('parent_id');
->whereNull('parent_id');
}
/**
@ -118,6 +118,14 @@ class Order extends Model implements OrderContract
return $this->hasMany(OrderItemProxy::modelClass());
}
/**
* Get the order record associated with the item.
*/
public function downloadable_link_purchased()
{
return $this->hasMany(DownloadableLinkPurchasedProxy::modelClass());
}
/**
* Get the order shipments record associated with the order.
*/
@ -180,7 +188,7 @@ class Order extends Model implements OrderContract
public function billing_address(): HasMany
{
return $this->addresses()
->where('address_type', OrderAddress::ADDRESS_TYPE_BILLING);
->where('address_type', OrderAddress::ADDRESS_TYPE_BILLING);
}
/**
@ -189,7 +197,7 @@ class Order extends Model implements OrderContract
public function getBillingAddressAttribute()
{
return $this->billing_address()
->first();
->first();
}
/**
@ -198,7 +206,7 @@ class Order extends Model implements OrderContract
public function shipping_address(): HasMany
{
return $this->addresses()
->where('address_type', OrderAddress::ADDRESS_TYPE_SHIPPING);
->where('address_type', OrderAddress::ADDRESS_TYPE_SHIPPING);
}
/**
@ -207,7 +215,7 @@ class Order extends Model implements OrderContract
public function getShippingAddressAttribute()
{
return $this->shipping_address()
->first();
->first();
}
/**
@ -227,7 +235,7 @@ class Order extends Model implements OrderContract
{
foreach ($this->items as $item) {
if ($item->getTypeInstance()
->isStockable()) {
->isStockable()) {
return true;
}
}
@ -283,8 +291,8 @@ class Order extends Model implements OrderContract
public function hasOpenInvoice(): bool
{
$pendingInvoice = $this->invoices()->where('state', 'pending')
->orWhere('state', 'pending_payment')
->first();
->orWhere('state', 'pending_payment')
->first();
if ($pendingInvoice) {
return true;
@ -313,7 +321,7 @@ class Order extends Model implements OrderContract
}
$pendingInvoice = $this->invoices->where('state', 'pending')
->first();
->first();
if ($pendingInvoice) {
return true;
}
@ -339,7 +347,7 @@ class Order extends Model implements OrderContract
}
$pendingInvoice = $this->invoices->where('state', 'pending')
->first();
->first();
if ($pendingInvoice) {
return false;
}
@ -351,7 +359,7 @@ class Order extends Model implements OrderContract
}
if ($this->base_grand_total_invoiced - $this->base_grand_total_refunded - $this->refunds()
->sum('base_adjustment_fee') > 0) {
->sum('base_adjustment_fee') > 0) {
return true;
}
@ -365,6 +373,6 @@ class Order extends Model implements OrderContract
*/
protected static function newFactory(): Factory
{
return OrderFactory::new();
return OrderFactory::new ();
}
}

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/js/shop.js": "/js/shop.js?id=f4cfa6bfa7a408f0ce86",
"/css/shop.css": "/css/shop.css?id=2e1191f8de843a86ba34"
"/css/shop.css": "/css/shop.css?id=0198b96b5e7871291a68"
}

View File

@ -1082,6 +1082,19 @@ section.slider-block {
.btn.btn-sm {
padding: 9px 25px;
}
.button-group {
margin-top: 15px;
margin-bottom: 0;
display: grid;
column-gap: 10px;
grid-template-columns: auto auto;
.btn {
word-break: break-all;
text-align: center;
}
}
}
.cart-dropdown-container {
@ -3274,6 +3287,7 @@ section.review {
.review-layouter {
display: flex;
width: 100%;
.product-info {
max-width: 25%;
@ -3286,6 +3300,7 @@ section.review {
img {
height: 280px;
width: 280px;
max-width: 100%;
}
}

View File

@ -219,7 +219,7 @@ return [
'page-title' => 'Adres',
'title' => 'Adres',
'add' => 'Adres Ekle',
'edit' => 'Düzenşe',
'edit' => 'Düzenle',
'empty' => 'Henüz kayıtlı adresiniz bulunmuyor. Eklemek için lütfen aşağıdaki linki tıklayınız.',
'create' => 'Adres Ekle',
'delete' => 'Sil',

View File

@ -118,7 +118,7 @@
<span style="font-size: 12px;">{{ __('shop::app.header.dropdown-text') }}</span>
</div>
<div style="margin-top: 15px;">
<div class="button-group">
<a class="btn btn-primary btn-md" href="{{ route('customer.session.index') }}" style="color: #ffffff">
{{ __('shop::app.header.sign-in') }}
</a>

View File

@ -0,0 +1,27 @@
<?php
return [
'admin' => [
'system' => [
'social-login' => 'Sosyal Medya Giriş',
'enable-facebook' => 'Facebook Etkinleştir',
'enable-twitter' => 'Twitter Etkinleştir',
'enable-google' => 'Google Etkinleştir',
'enable-linkedin' => 'LinkedIn Etkinleştir',
'enable-github' => 'Github Etkinleştir'
]
],
'shop' => [
'customer' => [
'login-form' => [
'continue-with-facebook' => 'Facebook İle Devam Et',
'continue-with-twitter' => 'Twitter İle Devam Et',
'continue-with-google' => 'Google İle Devam Et',
'continue-with-linkedin' => 'LinkedIn İle Devam Et',
'continue-with-github' => 'Github İle Devam Et',
'or' => 'Veya'
]
]
]
];

View File

@ -4,14 +4,14 @@ return [
'admin' => [
'system' => [
'taxes' => [
'taxes' => 'Taxes',
'catalogue' => 'Catalog',
'pricing' => 'Pricing',
'tax-inclusive' => 'Tax inclusive',
'default-location-calculation' => 'Default Location Calculation',
'default-country' => 'Default Country',
'default-state' => 'Default State',
'default-post-code' => 'Default Post Code',
'taxes' => 'Vergiler',
'catalogue' => 'Katalog',
'pricing' => 'Fiyatlandırma',
'tax-inclusive' => 'Vergiler dahil',
'default-location-calculation' => 'Varsayılan Konum Hesaplama',
'default-country' => 'Varsayılan Ülke',
'default-state' => 'Varsayılan durum',
'default-post-code' => 'Varsayılan Posta Kodu',
],
]
]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/js/ui.js": "/js/ui.js?id=2d3c7f7ecb9aecfd0d8b",
"/css/ui.css": "/css/ui.css?id=e2aba6492905df892f66"
"/js/ui.js": "/js/ui.js?id=818781c8aa26e3fd9f21",
"/css/ui.css": "/css/ui.css?id=bd09631c82c50b02445f"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 518 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 513 B

View File

@ -599,7 +599,7 @@
v-text="translations.submit"
type="submit"
class="btn btn-sm btn-primary"
style="margin-left: 10px"
style="margin-left: 10px; white-space: nowrap;"
></button>
</form>
</div>
@ -634,7 +634,7 @@
v-for="(column, columnKey) in columns"
v-text="column.label"
class="grid_head"
:class="{sortable: column.sortable}"
:class="{ sortable: column.sortable }"
:style="
typeof column.width !== 'undefined' &&
column.width
@ -718,11 +718,7 @@
"
v-on:click="
action.method != 'GET'
? typeof action.function !==
'undefined' &&
action.function
? action.function
: doAction($event)
? doAction($event)
: {}
"
:data-method="action.method"
@ -804,6 +800,7 @@ export default {
data: function() {
return {
id: btoa(this.src),
url: this.src,
isDataLoaded: false,
dataGridIndex: 0,
@ -854,6 +851,8 @@ export default {
hitUrl: function() {
let self = this;
this.analyzeDatagridsInfo();
axios
.get(this.url)
.then(function(response) {
@ -872,6 +871,97 @@ export default {
});
},
analyzeDatagridsInfo: function() {
if (!this.isDataLoaded && this.url === `${this.src}?v=1`) {
let datagridInfo = this.getCurrentDatagridInfo();
if (datagridInfo) {
this.filterCurrentDatagridFromDatagridsInfo();
this.url = datagridInfo.previousUrl;
}
} else {
let datagridsInfo = this.getDatagridsInfo();
if (datagridsInfo && datagridsInfo.length > 0) {
if (this.isCurrentDatagridInfoExists()) {
datagridsInfo = datagridsInfo.map(datagrid => {
if (datagrid.id === this.id) {
return this.getDatagridsInfoDefaults();
}
return datagrid;
});
} else {
datagridsInfo.push(this.getDatagridsInfoDefaults());
}
} else {
datagridsInfo = [this.getDatagridsInfoDefaults()];
}
this.updateDatagridsInfo(datagridsInfo);
}
},
isCurrentDatagridInfoExists: function() {
let datagridsInfo = this.getDatagridsInfo();
return !!datagridsInfo.find(({ id }) => id === this.id);
},
getCurrentDatagridInfo: function() {
let datagridsInfo = this.getDatagridsInfo();
return this.isCurrentDatagridInfoExists()
? datagridsInfo.find(({ id }) => id === this.id)
: null;
},
getDatagridsInfoStorageKey: function() {
return 'datagridsInfo';
},
getDatagridsInfoDefaults: function() {
return {
id: this.id,
previousUrl: this.url
};
},
getDatagridsInfo: function() {
let storageInfo = localStorage.getItem(
this.getDatagridsInfoStorageKey()
);
return !this.isValidJsonString(storageInfo)
? []
: JSON.parse(storageInfo) ?? [];
},
updateDatagridsInfo: function(info) {
localStorage.setItem(
this.getDatagridsInfoStorageKey(),
JSON.stringify(info)
);
},
filterCurrentDatagridFromDatagridsInfo: function() {
let datagridsInfo = this.getDatagridsInfo();
datagridsInfo = datagridsInfo.filter(({ id }) => id !== this.id);
this.updateDatagridsInfo(datagridsInfo);
},
isValidJsonString: function(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
},
initDatagrid: function() {
this.setParamsAndUrl();
@ -1581,7 +1671,8 @@ export default {
window.flashMessages.push({
type: 'alert-error',
message: response.data.message ?? 'Something went wrong!'
message:
response.data.message ?? 'Something went wrong!'
});
self.$root.addFlashMessages();

View File

@ -99,7 +99,7 @@
}
.accordian-right-icon {
background-image: url("../images/chevron-right.png");
background-image: url("../images/chevron-right.svg");
width: 24px;
height: 24px;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,10 +1,10 @@
{
"/js/jquery-ez-plus.js": "/js/jquery-ez-plus.js?id=ba3c7cada62de152fd8fce211d0b1b70",
"/js/velocity-core.js": "/js/velocity-core.js?id=73cc7c3501570ebe9151c72d954bd97d",
"/js/velocity.js": "/js/velocity.js?id=8ee54dee47fe0c33e837a3c84d7dd270",
"/js/velocity.js": "/js/velocity.js?id=7322a300b7abd91c0f4566dca15157d0",
"/js/manifest.js": "/js/manifest.js?id=3cded37ef514b0fb89b10e7109801248",
"/js/components.js": "/js/components.js?id=aa38c7c0c1db2c698155567aacf379d2",
"/css/velocity.css": "/css/velocity.css?id=c3f8667508711413ddd1d34b655de727",
"/js/components.js": "/js/components.js?id=13b9830a81895f01341599d02ece594b",
"/css/velocity.css": "/css/velocity.css?id=b52d15b7e354ab4d33f797d00df3ab2a",
"/css/velocity-admin.css": "/css/velocity-admin.css?id=b67a82956e53163b5e3ff45a44f9778f",
"/images/icon-calendar.svg": "/images/icon-calendar.svg?id=870d0f733a58377422766f3152e15486",
"/images/icon-camera.svg": "/images/icon-camera.svg?id=b2fd2f9e17e1ccee96e29f6c6cec91e8",

View File

@ -1,6 +1,6 @@
<template>
<div :class="`row mb15 col-12 ${rowClass}`">
<div :class="`row mb15 col-12 carousel-products-header ${rowClass}`">
<div class="col-4 no-padding" v-if="tabs || viewAll || scrollable">
<h2 class="fs20 fw6">{{ headerHeading }}</h2>
</div>

View File

@ -4,6 +4,8 @@
:dir="localeDirection"
:id="id"
:navigationEnabled="true"
navigationPrevLabel="<span class='rango-arrow-left'></span>"
navigationNextLabel="<span class='rango-arrow-right'></span>"
:paginationEnabled="true"
:perPage="parseInt(slidesPerPage)"
:loop="loop == 'true' ? true : false"

View File

@ -11,7 +11,7 @@
@mouseout="toggleSidebar('0', $event, 'mouseout')"
@mouseover="toggleSidebar('0', $event, 'mouseover')"
>
<i class="rango-view-list text-down-4 align-vertical-top fs18"> </i>
<i class="rango-view-list align-vertical-top fs18"> </i>
<span
class="pl5"

View File

@ -2,8 +2,10 @@
<div :class="`dropdown ${cartItems.length > 0 ? '' : 'disable-active'}`">
<div class="dropdown-toggle btn btn-link" id="mini-cart" :class="{'cursor-not-allowed': ! cartItems.length}">
<div class="mini-cart-content">
<i class="material-icons-outlined text-down-3">shopping_cart</i>
<span class="badge" v-text="cartItems.length" v-if="cartItems.length != 0"></span>
<i class="material-icons-outlined">shopping_cart</i>
<div class="badge-container">
<span class="badge" v-text="cartItems.length" v-if="cartItems.length != 0"></span>
</div>
<span class="fs18 fw6 cart-text" v-text="cartText"></span>
</div>
@ -24,9 +26,9 @@
v-for="(item, index) in cartItems"
>
<div class="col-3 product-image-container mr15">
<a @click="removeProduct(item.id)">
<span class="remove-item" @click="removeProduct(item.id)">
<span class="rango-close"></span>
</a>
</span>
<a
class="unset"
@ -43,7 +45,7 @@
<div class="col-9 no-padding card-body align-vertical-top">
<div class="no-padding">
<div
class="fs16 text-nowrap fw6"
class="fs16 text-nowrap fw6 product-name"
v-html="item.name"
></div>

View File

@ -67,7 +67,7 @@
{{ product.new }}
</div>
<div class="product-price fs16" v-html="product.priceHTML"></div>
<div v-html="product.priceHTML"></div>
<div
class="product-rating col-12 no-padding"

View File

@ -10,20 +10,26 @@
v-text="quantityText"
></label>
<button type="button" class="decrease" @click="decreaseQty()">-</button>
<div class="input-btn-group">
<button type="button" class="decrease" @click="decreaseQty()">
<i class="rango-minus"></i>
</button>
<input
ref="quantityChanger"
:name="controlName"
:model="qty"
class="control"
id="quantity-changer"
v-validate="validations"
:data-vv-as="`&quot;${quantityText}&quot;`"
@keyup="setQty($event)"
/>
<input
ref="quantityChanger"
:name="controlName"
:model="qty"
class="control"
id="quantity-changer"
v-validate="validations"
:data-vv-as="`&quot;${quantityText}&quot;`"
@keyup="setQty($event)"
/>
<button type="button" class="increase" @click="increaseQty()">+</button>
<button type="button" class="increase" @click="increaseQty()">
<i class="rango-plus"></i>
</button>
</div>
<span class="control-error" v-if="errors.has(controlName)">{{
errors.first(controlName)

View File

@ -5,7 +5,7 @@
:class="`sidebar ${addClass ? addClass : ''}`"
v-if="slicedCategories && slicedCategories.length > 0"
>
<ul type="none">
<ul type="none" style="margin-bottom: 0">
<li
:key="categoryIndex"
:id="`category-${category.id}`"

View File

@ -1,3 +1,11 @@
/*
|
| Added back again because in chrome this is not using and light house also saying not used.
| But in mozilla all fonts are gone which creating problem.
|
*/
@import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@400;600;700&display=swap');
/* main imports */
@import 'main/rango';
@import 'main/icons';
@ -97,6 +105,10 @@ body {
font-family: $font-family-pro;
}
label {
margin: 0;
}
.btn {
&:hover {
text-decoration: none;
@ -224,6 +236,21 @@ body {
.dropdown-list {
top: 40px;
right: 10px;
.modal-header {
padding: 20px;
}
.content {
padding: 5px 20px 15px 20px;
}
.modal-footer {
.theme-btn {
width: 50%;
text-align: center;
}
}
}
}
@ -251,6 +278,7 @@ body {
padding-left: 5px;
position: relative;
padding-right: 15px;
text-align: left;
}
.dropdown {
@ -380,13 +408,13 @@ body {
header {
.logo {
height: 50px;
height: 46px;
padding-left: 10px;
}
#search-form {
height: 40px;
margin: 5px 0px;
margin: 8px 0px;
background: $white-color;
* {
@ -467,53 +495,21 @@ header {
}
}
/* To Do: To avoid CLS reserve width for all locale */
.mini-cart-container {
height: 50px;
padding: 5px 17px;
display: inline-block;
cursor: pointer;
#mini-cart {
.mini-cart-content {
font-size: 16px;
font-weight: 600;
text-align: right;
margin-right: 7px;
letter-spacing: 0;
position: relative;
color: $font-color;
display: inline-block;
i {
+ span.cart-text {
padding-left: 0px;
vertical-align: text-bottom;
}
}
.cart-text {
padding-left: 5px;
}
+ .down-arrow-container {
.rango-arrow-down {
top: 8px;
}
}
}
}
}
.left-wrapper {
float: right;
.compare-btn,
.wishlist-btn {
height: 50px;
.wishlist-btn,
.mini-cart-btn {
font-size: 18px;
font-weight: 600;
padding: 10px 16px 6px 16px;
margin: 16px;
cursor: pointer;
display: inline-block;
&.mini-cart-btn {
margin-right: 0;
}
i {
margin-right: 5px;
@ -538,8 +534,39 @@ header {
}
span {
top: 2px;
position: relative;
padding-left: 0;
}
#mini-cart {
padding: 0;
line-height: inherit;
.mini-cart-content {
font-size: 16px;
font-weight: 600;
text-align: right;
margin-right: 7px;
letter-spacing: 0;
position: relative;
color: $font-color;
display: inline-block;
i {
+ span.cart-text {
padding-left: 0px;
vertical-align: text-bottom;
}
}
+ .down-arrow-container {
top: 0;
.rango-arrow-down {
top: 0;
}
}
}
}
}
}
@ -920,14 +947,14 @@ i.within-circle {
.form-style {
display: block;
width: 100%;
height: 34px;
height: 36px;
padding: 6px 12px;
font-size: 14px;
font-size: 16px;
line-height: 1.42857143;
color: #555;
color: rgba(0, 0, 0, 0.83);
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border: 1px solid #DCDCDC;
border-radius: 0;
}

View File

@ -47,6 +47,14 @@
.accordian {
.accordian-header {
width: 100%;
font-size: 18px;
cursor: pointer;
color: #3a3a3a;
padding: 20px 0;
display: inline-block;
border-bottom: 1px solid #d3d3d3;
i.rango-arrow {
float: right;
font-size: 24px;
@ -57,39 +65,24 @@
}
}
.accordian-content {
width: 100%;
display: none;
padding-bottom: 20px;
}
&.active {
.accordian-header {
border-bottom: 0;
i.rango-arrow::before {
content: "\E906";
}
}
}
}
.accordian {
.accordian-header {
width: 100%;
font-size: 18px;
cursor: pointer;
color: #3a3a3a;
margin-top: -1px;
padding-bottom: 20px;
display: inline-block;
}
.accordian-content {
width: 100%;
display: none;
padding-bottom: 10px;
}
&.active {
.accordian-header {
padding-bottom: 10px;
}
.accordian-content {
display: inline-block;
border-bottom: 1px solid #d3d3d3;
}
}
}

View File

@ -283,10 +283,15 @@
.product-name,
.product-rating {
width: 15rem;
margin-bottom: 2px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.product-price {
margin-bottom: 15px;
}
}
.sticker {
@ -335,7 +340,7 @@
span {
left: 32%;
top: -26px;
top: -28px;
z-index: 1;
font-size: 16px;
color: #ffffff;
@ -394,49 +399,63 @@
.quantity {
@extend .btn-group;
width: 100%;
padding-bottom: 10px;
font-size: 16px !important;
label {
float: left;
padding: 5px 15px 10px 0;
}
button,
input {
@extend .btn;
.input-btn-group {
button {
border: 1px solid #dcdcdc;
padding: 7px;
background: transparent;
text-align: center;
height: 35px;
border-radius: 2px;
vertical-align: top;
padding: 0 10px !important;
font-size: 24px !important;
font-weight: 600 !important;
color: $black-color !important;
background-color: $white-color;
border: 1px solid $border-common !important;
&.decrease {
border-right: 0;
}
&.increase {
border-left: 0;
}
&:hover,
&:active,
&:focus {
outline: none;
}
.rango-plus,
.rango-minus {
font-size: 20px;
vertical-align: middle;
}
}
input {
border: 1px solid #dcdcdc;
border-right: 0;
border-left: 0;
max-width: 50px;
height: 38px;
margin-left: -5px;
margin-right: -5px;
vertical-align: top;
text-align: center;
font-size: 16px;
font-weight: 600;
}
}
input {
max-width: 50px;
cursor: default;
font-size: 16px !important;
text-align: center;
margin-left: -5px;
margin-right: -5px;
&.has-error {
button {
border-color: #fc6868;
color: #fc6868;
}
}
button:hover {
background-color: #f5f5f5 !important;
}
button:active,
button:focus,
input:active,
input:focus {
outline: none !important;
box-shadow: none !important;
.control-error {
display: block;
}
}
@ -448,7 +467,7 @@
.heading {
width: 100%;
margin-bottom: 35px;
margin-bottom: 28px;
display: inline-block;
h2 {
@ -475,10 +494,6 @@
form {
> div {
padding-bottom: 20px;
input {
border: 1px solid $border-dark;
}
}
}
}
@ -561,26 +576,6 @@
}
}
.mini-cart-container {
#mini-cart {
outline: none;
box-shadow: none;
text-decoration: unset;
.badge {
@include border-radius(50%);
top: -2px;
left: 15px;
padding: 4px;
min-width: 20px;
position: absolute;
color: $white-color;
background: $button-primary-bg;
}
}
}
.dropdown-icon-custom::after {
top: -5px;
color: black;
@ -597,11 +592,12 @@
}
#cart-modal-content {
top: 44px;
top: 40px;
z-index: 100;
width: 350px;
left: -265px;
right: 0;
position: absolute;
border-top: 4px solid #26a37c;
.close {
top: 12px;
@ -629,8 +625,14 @@
border: 1px solid $border-light;
}
label {
float: left;
margin-top: 7px;
}
input {
width: 30px;
width: 40px;
height: 36px;
text-align: center;
font-weight: 500;
border: 1px solid $border-light;
@ -640,18 +642,20 @@
float: right;
}
.rango-close {
.remove-item {
top: -10px;
left: -10px;
padding: 0px 4px 3px 3px;
font-size: 10px;
max-height: 17px;
line-height: 1.3rem;
text-align: center;
position: absolute;
border-radius: 50%;
color: $white-color;
background: $black-color;
position: absolute;
background: #111111;
color: #ffffff;
padding: 0px 4px;
.rango-close {
font-size: 12px;
font-weight: 600;
padding: 0;
}
}
}
@ -665,17 +669,17 @@
}
.cart-details {
padding: 40px 20px;
padding: 40px 0px;
h1 {
margin-bottom: 30px;
}
.cart-details-header {
h2 {
margin-bottom: 20px;
}
h2 {
margin-bottom: 25px;
}
.cart-details-header {
.cart-header {
max-height: 45px;
margin-bottom: 20px;
@ -694,7 +698,9 @@
.product-quantity {
.quantity {
display: inline-flex;
display: inline-block;
width: unset;
float: right;
label {
display: none !important;
@ -718,6 +724,7 @@
> .row:last-child {
padding-bottom: 20px;
border-bottom: 2px solid $border-general;
margin-bottom: 20px;
}
.product-image-container {
@ -746,6 +753,41 @@
line-height: 20px;
}
}
.item-price {
margin-top: 12px !important;
font-size: 18px;
font-weight: 600;
}
.item-actions {
margin-top: 12px !important;
.d-inline-block {
float: left;
&:first-child {
margin-right: 30px;
}
.material-icons {
float: left;
margin-left: -2px;
margin-right: 5px;
}
.rango-delete {
margin-left: -2px;
}
}
}
}
.product-quantity {
.quantity {
position: relative;
top: -8px;
}
}
.misc {
@ -1007,11 +1049,6 @@
}
}
.accordian .accordian-header {
padding: 10px 0;
font-weight: 600;
}
.image-wrapper {
width: 100%;
margin-top: 10px;
@ -1261,13 +1298,16 @@
.checkout-process {
padding: 40px 20px;
.col-lg-7 {
.coupon-container,
> div:not(:first-child) {
margin-top: 20px;
.accordian-header {
h3 {
margin-bottom: 0 !important;
}
}
.coupon-container {
margin-top: 20px;
}
h1 {
font-weight: 600;
margin-bottom: 30px;
@ -1374,7 +1414,9 @@
}
label {
font-size: 16px;
font-weight: 500;
margin-bottom: 5px;
}
input[type='text'],
@ -1384,6 +1426,7 @@
width: 100%;
resize: none;
font-size: 16px;
height: 36px;
padding: 5px 16px;
border-radius: 1px;
background: $button-text-color;
@ -1532,17 +1575,23 @@
}
.product-price {
height: 72px;
display: inline-block;
.price-label {
margin-right: 6px;
}
.regular-price {
font-size: 14px;
font-weight: 500;
margin-right: 10px;
text-decoration: line-through;
display: block;
display: inline-block;
}
.special-price {
display: inline-block;
margin-right: 10px;
float: left;
}
/*
@ -1573,11 +1622,13 @@
span {
&.price-label {
font-size: 16px;
font-size: 14px !important;
font-weight: 500 !important;
}
&.final-price {
font-size: 24px;
font-size: 18px;
font-weight: 600;
}
}
}
@ -1617,7 +1668,7 @@
*/
.sticky-header {
top: 0px;
height: 55px;
height: 56px;
z-index: 100;
position: sticky;
background: white;
@ -1763,7 +1814,7 @@
border-left: 1px solid $border-common;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19),
0 6px 6px rgba(0, 0, 0, 0.23);
overflow-y: auto;
overflow-y: scroll;
li:nth-last-of-type(1) {
margin-bottom: 10px;
@ -1877,14 +1928,6 @@
.quantity {
border-top: 0;
padding-bottom: 0;
&.has-error {
button {
border-color: #fc6868;
color: #fc6868;
}
}
}
.control-error {
@ -2309,6 +2352,14 @@
}
}
.full-content-wrapper {
.container-fluid {
.row.carousel-products-header {
padding-right: 75px !important;
}
}
}
.carousel-products {
+ .recently-viewed {
top: -40px;
@ -2324,6 +2375,24 @@
.VueCarousel-slide {
cursor: default;
}
.VueCarousel-navigation {
position: absolute;
right: 12px;
top: -49px;
.VueCarousel-navigation-button {
position: unset !important;
transform: none !important;
padding: 0 !important;
margin: 0 !important;
span {
font-size: 24px;
}
}
}
}
.vue-slider {
@ -2473,6 +2542,11 @@
}
@media only screen and (max-width: 720px) {
.product-quantity {
.input-btn-group {
display: flex;
}
}
.cp-spinner {
left: 50%;
margin-left: -24px;

View File

@ -247,8 +247,9 @@
padding: 8px 12px;
display: block;
cursor: default;
color: #a2a2a2;
color: rgba(0, 0, 0, 0.53);
font-size: 18px;
font-weight: 600;
border-bottom: 1px solid #C1C2C3;
}
@ -270,12 +271,9 @@
list-style-type: none;
li {
&:last-child {
margin-bottom: 5px;
}
a {
padding: 8px 12px;
font-size: 16px;
&:link,
&:active,

View File

@ -24,7 +24,6 @@
left: -2px;
height: 38px;
font-size: 18px;
max-width: 110px;
line-height: 10px;
position: relative;
}

View File

@ -470,9 +470,12 @@ header #search-form > *:focus {
}
.main-category {
padding: 8px 15px;
padding: 10px 15px;
border-top: 1px solid $border-common;
border-bottom: 5px solid transparent;
.pl5 {
vertical-align: top;
}
}
.content-list {
@ -499,7 +502,7 @@ header #search-form > *:focus {
cursor: pointer;
font-size: 16px;
font-weight: 600;
padding: 8px 15px;
padding: 11px 15px;
letter-spacing: 0;
position: relative;
color: $white-color;
@ -712,6 +715,7 @@ body::after {
.slider-container {
min-height: 400px;
margin-bottom: 20px;
}
.remove-padding-margin {

View File

@ -388,7 +388,7 @@
}
}
.mini-cart-container {
.mini-cart-btn {
display: none;
}
@ -461,7 +461,7 @@
.product-detail {
#product-form {
.form-container {
.left {
div.left {
top: 0px;
position: relative;
margin-bottom: 20px;
@ -851,12 +851,6 @@
padding: 0;
}
.accordian-header {
h3 {
margin-bottom: 0 !important;
}
}
.billing-address {
margin-bottom: 20px;
}

View File

@ -8,10 +8,6 @@
@extend .fs16;
> div {
@extend .mb20;
border-bottom: 1px solid $border-common;
&.attributes {
.attribute {
margin-bottom: 20px;
@ -35,14 +31,20 @@
.reviews {
vertical-align: top;
.stars {
vertical-align: middle;
margin-bottom: -6px;
}
> div {
display: inline-block;
vertical-align: middle;
}
}
.info {
@extend .mb15;
margin-left: 0px;
border-bottom: 1px solid #d3d3d3;
> h2,
div {
@ -50,11 +52,11 @@
}
> * {
margin-bottom: 10px;
margin-bottom: 14px;
}
h2 {
@extend .fw7;
@extend .fw6;
@extend .fs24;
}
@ -68,12 +70,14 @@
}
.availability {
button {
label {
width: max-content;
border: none;
color: white;
font-weight: 600;
cursor: default;
padding: 2px 11px;
margin: 0;
padding: 1px 8px 3px 8px;
background: $button-danger;
&.active {
@ -154,7 +158,7 @@
}
.product-price {
height: unset;
line-height: 38px;
.price-from {
.bundle-regular-price {
@ -278,17 +282,18 @@
}
}
.layouter,
#product-form {
.layouter {
height: 100%;
}
#product-form {
height: 100%;
.form-container {
height: 100%;
position: relative;
.left {
div.left {
top: 60px;
padding: 0px;
position: sticky;
@ -354,14 +359,6 @@
}
}
.accordian {
&.active {
.accordian-header {
padding-bottom: 0px;
}
}
}
.description {
overflow: auto;
ul,
@ -372,13 +369,11 @@
}
.accordian-content {
div {
overflow: auto;
}
font-weight: 400;
font-size: 16px;
}
.full-description {
font-size: 14px;
ul,
ol {
margin: revert;
@ -387,6 +382,8 @@
}
.full-specifications {
width: 100%;
tr {
td:first-child() {
width: 100px;

View File

@ -56,7 +56,7 @@ body {
}
}
.mini-cart-container {
.mini-cart-btn {
#mini-cart {
.badge {
top: -8px;
@ -103,7 +103,7 @@ body {
}
}
.main-content-wrapper .vc-header .mini-cart-container {
.main-content-wrapper .vc-header .mini-cart-btn {
#mini-cart {
.badge {
top: -6px;
@ -177,15 +177,6 @@ body {
text-align: left;
}
}
+ .account-modal {
width: 100% !important;
right: unset;
.modal-content {
float: left;
}
}
}
.locale-icon {

View File

@ -312,6 +312,7 @@
.btn-add-to-cart:hover {
border-color: $theme-dark-color !important;
background-color: $theme-dark-color !important;
text-decoration: none;
&.light {
border: 1px solid rgba(0,0,0,0.12) !important;
@ -611,7 +612,8 @@
.product-image {
@extend .bg-image;
height: 100%;
width: 70px;
height: 70px;
background-position: center;
}
@ -621,7 +623,10 @@
padding: 10px 0 !important;
.product-name {
font-size: 18px;
color: #000000;
width: 100%;
margin-bottom: 10px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
@ -792,6 +797,10 @@ a {
.VueCarousel-navigation-next {
right: 12px;
}
span {
font-size: 32px;
}
}
}
@ -925,7 +934,7 @@ button[disabled] {
width: 100%;
height: 100%;
position: fixed;
background: rgba(256, 256, 256, 0.9);
background: rgba(0, 0, 0, 0.7);
z-index: 125;
}

View File

@ -1,11 +1,3 @@
/*
|
| Added back again because in chrome this is not using and light house also saying not used.
| But in mozilla all fonts are gone which creating problem.
|
*/
@import url('https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap');
/*
|--------------------------------------------------------------------------
| Velocity Variables

View File

@ -113,14 +113,14 @@ return [
'general' => 'Genel',
'add-image-btn-title' => 'Görsel Ekle',
'footer-middle' => [
'about-us' => 'About Us',
'customer-service' => 'Customer Service',
'whats-new' => 'What\'s New',
'contact-us' => 'Contact Us',
'order-and-returns' => 'Order and Returns',
'payment-policy' => 'Payment Policy',
'shipping-policy' => 'Shipping Policy',
'privacy-and-cookies-policy' => 'Privacy and Cookies Policy'
'about-us' => 'Hakkımızda',
'customer-service' => 'Müşteri Servisi',
'whats-new' => 'Yeni Neler Var',
'contact-us' => 'Bize Ulaşın',
'order-and-returns' => 'Sipariş ve İade',
'payment-policy' => 'Ödeme Politikası',
'shipping-policy' => 'Nakliye Politikası',
'privacy-and-cookies-policy' => 'Gizlilik ve Çerez Politikası'
]
],
'category' => [
@ -262,7 +262,7 @@ return [
'short-description' => 'Kısa Açıklamalar',
'recently-viewed' => 'En Son Gezdiğiniz Ürünler',
'be-first-review' => 'Bu ürüne ilk siz inceleme girin!',
'tax-inclusive' => 'Inclusive of all taxes',
'tax-inclusive' => 'Tüm vergiler dahildir',
],
'shop' => [

View File

@ -12,19 +12,8 @@
@push('css')
<style type="text/css">
.quantity {
width: unset;
float: right;
}
.alert-wishlist {
display: inline-block;
position: relative;
top: -2px;
}
@media only screen and (max-width: 600px) {
.rango-delete{
.rango-delete {
margin-top: 10px;
margin-left: -10px !important;
}
@ -38,10 +27,10 @@
<script type="text/x-template" id="cart-template">
<div class="container">
<section class="cart-details row no-margin col-12">
<h2 class="cart-details-header fw6 col-12">{{ __('shop::app.checkout.cart.title') }}</h2>
<h2 class="fw6 col-12">{{ __('shop::app.checkout.cart.title') }}</h2>
@if ($cart)
<div class="cart-details-header col-lg-6 col-md-12">
<div class="cart-details-header col-lg-7 col-md-12">
<div class="row cart-header col-12 no-padding">
<span class="col-8 fw6 fs16 pr0">
{{ __('velocity::app.checkout.items') }}
@ -108,7 +97,7 @@
@if (isset($item->additional['attributes']))
@foreach ($item->additional['attributes'] as $attribute)
<div class="row col-12 no-padding no-margin display-block">
<div class="row col-12 no-padding no-margin display-block item-attribute">
<label class="no-margin">
{{ $attribute['attribute_name'] }}:
</label>
@ -119,7 +108,7 @@
@endforeach
@endif
<div class="row col-12 no-padding no-margin">
<div class="row col-12 no-padding no-margin item-price">
<div class="product-price">
<span>{{ core()->currency($item->base_price) }}</span>
</div>
@ -131,18 +120,18 @@
$showWishlist = core()->getConfigData('general.content.shop.wishlist_option') == "1" ? true : false;
@endphp
<div class="no-padding col-12 cursor-pointer fs16">
<div class="no-padding col-12 cursor-pointer fs16 item-actions">
@auth('customer')
@if ($showWishlist)
@if ($item->parent_id != 'null' || $item->parent_id != null)
<div class="alert-wishlist">
<div class="d-inline-block">
@include('shop::products.wishlist', [
'route' => route('shop.movetowishlist', $item->id),
'text' => "<span class='align-vertical-super'>$moveToWishlist</span>"
])
</div>
@else
<div class="alert-wishlist">
<div class="d-inline-block">
@include('shop::products.wishlist', [
'route' => route('shop.movetowishlist', $item->child->id),
'text' => "<span class='align-vertical-super'>$moveToWishlist</span>"
@ -154,11 +143,7 @@
<div class="d-inline-block">
<a
class="unset
@auth('customer')
ml10
@endauth
"
class="unset"
href="{{ route('shop.checkout.cart.remove', ['id' => $item->id]) }}"
@click="removeLink('{{ __('shop::app.checkout.cart.cart-remove-action') }}')">
@ -225,7 +210,7 @@
{!! view_render_event('bagisto.shop.checkout.cart.summary.after', ['cart' => $cart]) !!}
@if ($cart)
<div class="col-lg-4 col-md-12 offset-lg-2 row order-summary-container">
<div class="col-lg-4 col-md-12 offset-lg-1 row order-summary-container">
@include('shop::checkout.total.summary', ['cart' => $cart])
<coupon-component></coupon-component>
@ -263,8 +248,9 @@
methods: {
removeLink(message) {
if (! confirm(message))
if (! confirm(message)) {
event.preventDefault();
}
}
}
})

View File

@ -1,4 +1,4 @@
<div class="mini-cart-container">
<a class="mini-cart-btn">
<mini-cart
is-tax-inclusive="{{ Webkul\Tax\Helpers\Tax::isTaxInclusive() }}"
view-cart-route="{{ route('shop.checkout.cart.index') }}"
@ -9,4 +9,4 @@
checkout-text="{{ __('shop::app.minicart.checkout') }}"
subtotal-text="{{ __('shop::app.checkout.cart.cart-subtotal') }}">
</mini-cart>
</div>
</a>

View File

@ -3,7 +3,7 @@
{{-- this is default content if js is not loaded --}}
<div class="main-category fs16 unselectable fw6 left">
<i class="rango-view-list text-down-4 align-vertical-top fs18"></i>
<i class="rango-view-list align-vertical-top fs18"></i>
<span class="pl5">{{ __('velocity::app.menu-navbar.text-category') }}</span>
</div>

View File

@ -39,7 +39,7 @@
disabled="disabled"
@endif>
@foreach (core()->getCurrentChannel()->locales as $locale)
@foreach (core()->getCurrentChannel()->locales()->orderBy('name')->get() as $locale)
@if (isset($searchQuery) && $searchQuery)
<option
value="?{{ $searchQuery }}&locale={{ $locale->code }}"

View File

@ -24,8 +24,8 @@
<label class="fs18 grey">{{ __('shop::app.header.title') }}</label>
</div>
<div class="pl10 fs14">
<p>{{ __('shop::app.header.dropdown-text') }}</p>
<div class="fs14 content">
<p class="no-margin">{{ __('shop::app.header.dropdown-text') }}</p>
</div>
<div class="modal-footer">

View File

@ -100,7 +100,7 @@
{{-- right-section --}}
<div class="right col-lg-7 col-md-6">
{{-- product-info-section --}}
<div class="row info">
<div class="info">
<h2 class="col-12">{{ $product->name }}</h2>
@if ($total)
@ -141,7 +141,27 @@
</div>
@endif
<div class="product-actions">
@include ('shop::products.view.configurable-options')
@include ('shop::products.view.downloadable')
@include ('shop::products.view.grouped-products')
@include ('shop::products.view.bundle-options')
{!! view_render_event('bagisto.shop.products.view.quantity.before', ['product' => $product]) !!}
@if ($product->getTypeInstance()->showQuantityBox())
<div class="col-12">
<quantity-changer quantity-text="{{ __('shop::app.products.quantity') }}"></quantity-changer>
</div>
@else
<input type="hidden" name="quantity" value="1">
@endif
{!! view_render_event('bagisto.shop.products.view.quantity.after', ['product' => $product]) !!}
<div class="col-12 product-actions">
@if (core()->getConfigData('catalog.products.storefront.buy_now_button_display'))
@include ('shop::products.buy-now', [
'product' => $product,
@ -158,38 +178,7 @@
</div>
</div>
{!! view_render_event('bagisto.shop.products.view.short_description.before', ['product' => $product]) !!}
@if ($product->short_description)
<div class="description">
<h3 class="col-lg-12">{{ __('velocity::app.products.short-description') }}</h3>
{!! $product->short_description !!}
</div>
@endif
{!! view_render_event('bagisto.shop.products.view.short_description.after', ['product' => $product]) !!}
{!! view_render_event('bagisto.shop.products.view.quantity.before', ['product' => $product]) !!}
@if ($product->getTypeInstance()->showQuantityBox())
<div>
<quantity-changer quantity-text="{{ __('shop::app.products.quantity') }}"></quantity-changer>
</div>
@else
<input type="hidden" name="quantity" value="1">
@endif
{!! view_render_event('bagisto.shop.products.view.quantity.after', ['product' => $product]) !!}
@include ('shop::products.view.configurable-options')
@include ('shop::products.view.downloadable')
@include ('shop::products.view.grouped-products')
@include ('shop::products.view.bundle-options')
@include ('shop::products.view.short-description')
@include ('shop::products.view.attributes', [
'active' => true

View File

@ -18,7 +18,7 @@
@push('scripts')
<script type="text/x-template" id="bundle-option-list-template">
<div class="bundle-options-wrapper">
<div class="col-12 bundle-options-wrapper">
<div class="bundle-option-list">
<h3>{{ __('shop::app.products.customize-options') }}</h3>

View File

@ -16,7 +16,7 @@
@push('scripts')
<script type="text/x-template" id="product-options-template">
<div class="attributes" v-if="childAttributes.length > 0">
<div class="col-12 attributes" v-if="childAttributes.length > 0">
<input
type="hidden"
:value="selectedProductId"

View File

@ -1,7 +1,7 @@
@if ($product->type == 'downloadable')
{!! view_render_event('bagisto.shop.products.view.downloadable.before', ['product' => $product]) !!}
<div class="downloadable-container">
<div class="col-12 downloadable-container">
@if ($product->downloadable_samples->count())
<div class="sample-list">

View File

@ -1,7 +1,7 @@
@if ($product->type == 'grouped')
{!! view_render_event('bagisto.shop.products.view.grouped_products.before', ['product' => $product]) !!}
<div class="grouped-product-container">
<div class="col-12 grouped-product-container">
@if ($product->groupedProductsBySortOrder->count())
<div class="grouped-product-list">
<ul type="none">

View File

@ -0,0 +1,19 @@
{!! view_render_event('bagisto.shop.products.view.short_description.before', ['product' => $product]) !!}
<accordian :title="'{{ __('shop::app.products.short-description') }}'" :active="true">
<div slot="header">
<h3 class="no-margin display-inbl">
{{ __('velocity::app.products.short-description') }}
</h3>
<i class="rango-arrow"></i>
</div>
<div slot="body">
<div class="full-short-description">
{!! $product->short_description !!}
</div>
</div>
</accordian>
{!! view_render_event('bagisto.shop.products.view.short_description.after', ['product' => $product]) !!}

View File

@ -1,8 +1,7 @@
{!! view_render_event('bagisto.shop.products.view.stock.before', ['product' => $product]) !!}
<div class="col-12 availability">
<button
type="button"
<label
class="{{! $product->haveSufficientQuantity(1) ? '' : 'active' }} disable-box-shadow">
@if ( $product->haveSufficientQuantity(1) === true )
{{ __('shop::app.products.in-stock') }}
@ -11,7 +10,7 @@
@else
{{ __('shop::app.products.out-of-stock') }}
@endif
</button>
</label>
</div>
{!! view_render_event('bagisto.shop.products.view.stock.after', ['product' => $product]) !!}

View File

@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'Bu kimlik bilgileri kayıtlarımızla eşleşmiyor.',
'throttle' => 'Çok fazla giriş denemesi. Lütfen :seconds içinde tekrar deneyin.',
];

View File

@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Önceki',
'next' => 'Sonraki &raquo;',
];

View File

@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'Şifreler en az altı karakterden oluşmalı ve onayla eşleşmelidir.',
'reset' => 'Şifreniz sıfırlandı!',
'sent' => 'Şifre sıfırlama bağlantınızı e-posta ile gönderdik!',
'token' => 'Bu parola sıfırlama belirteci geçersiz.',
'user' => "Bu e-posta adresine sahip bir kullanıcı bulamıyoruz.",
];

View File

@ -0,0 +1,156 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => ':attribute kabul edilmelidir.',
'active_url' => ':attribute geçerli bir URL değil.',
'after' => ':attribute, :date \'den sonraki bir tarih olmalıdır.',
'after_or_equal' => ':attribute, :date \'den sonraki veya buna eşit bir tarih olmalıdır.',
'alpha' => ':attribute yalnızca harf içermelidir.',
'alpha_dash' => ':attribute yalnızca harf, sayı, tire ve alt çizgi içermelidir.',
'alpha_num' => ':attribute yalnızca harf ve rakamlardan oluşmalıdır.',
'array' => ':attribute bir dizi olmalıdır.',
'before' => ':attribute, :date \'den önceki bir tarih olmalıdır.',
'before_or_equal' => ':attribute, :date tarihinden önce veya buna eşit bir tarih olmalıdır.',
'between' => [
'numeric' => ':attribute :min ve :max arasında olmalıdır.',
'file' => ':attribute :min ve :max kilobaytlar arasında olmalıdır.',
'string' => ':attribute :min ve :max karakterleri arasında olmalıdır.',
'array' => ':attribute, :min ve :max öğeleri arasında olmalıdır.',
],
'boolean' => ':attribute alanı doğru veya yanlış olmalıdır.',
'confirmed' => ':attribute onayı eşleşmiyor.',
'current_password' => 'Şifre yanlış.',
'date' => ':attribute geçerli bir tarih değil.',
'date_equals' => ':attribute, :date değerine eşit bir tarih olmalıdır.',
'date_format' => ':attribute, :format biçimiyle eşleşmiyor.',
'different' => ':attribute ve :other farklı olmalıdır.',
'digits' => ':attribute :digits rakamlardan oluşmalıdır.',
'digits_between' => ':attribute :min ve :max basamakları arasında olmalıdır.',
'dimensions' => ':attribute geçersiz resim boyutlarına sahip.',
'distinct' => ':attribute alanı yinelenen bir değere sahip.',
'email' => ':attribute geçerli bir e-posta adresi olmalıdır.',
'ends_with' => ':attribute aşağıdakilerden biriyle bitmelidir: :values.',
'exists' => 'Seçilen :attribute geçersiz.',
'file' => ':attribute bir dosya olmalıdır.',
'filled' => ':attribute alanının bir değeri olmalıdır.',
'gt' => [
'numeric' => ':attribute, :value değerinden büyük olmalıdır.',
'file' => ':attribute, :value kilobayttan büyük olmalıdır.',
'string' => ':attribute, :value karakterlerinden büyük olmalıdır.',
'array' => ':attribute, :value öğelerinden daha fazlasına sahip olmalıdır.',
],
'gte' => [
'numeric' => ':attribute, :value değerinden büyük veya ona eşit olmalıdır.',
'file' => ':attribute, :value kilobayttan büyük veya ona eşit olmalıdır.',
'string' => ':attribute, :value karakterlerinden büyük veya ona eşit olmalıdır.',
'array' => ':attribute, :value öğelerine veya daha fazlasına sahip olmalıdır.',
],
'image' => ':attribute bir resim olmalıdır.',
'in' => 'Seçilen :attribute geçersiz.',
'in_array' => ':attribute alanı :other içinde mevcut değil.',
'integer' => ':attribute bir tamsayı olmalıdır.',
'ip' => ':attribute geçerli bir IP adresi olmalıdır.',
'ipv4' => ':attribute geçerli bir IPv4 adresi olmalıdır.',
'ipv6' => ':attribute geçerli bir IPv6 adresi olmalıdır.',
'json' => ':attribute geçerli bir JSON dizesi olmalıdır.',
'lt' => [
'numeric' => ':attribute, :value değerinden küçük olmalıdır.',
'file' => ':attribute, :value kilobayttan küçük olmalıdır.',
'string' => ':attribute, :value karakterlerinden daha az olmalıdır.',
'array' => ':attribute, :value öğelerinden daha azına sahip olmalıdır.',
],
'lte' => [
'numeric' => ':attribute, :value değerinden küçük veya ona eşit olmalıdır.',
'file' => ':attribute :value kilobayttan küçük veya ona eşit olmalıdır.',
'string' => ':attribute, :value karakterlerinden küçük veya ona eşit olmalıdır.',
'array' => ':attribute, :value öğelerinden daha fazlasına sahip olmamalıdır.',
],
'max' => [
'numeric' => ':attribute :max değerinden büyük olmamalıdır.',
'file' => ':attribute, :max kilobayttan büyük olmamalıdır.',
'string' => ':attribute, :max karakterlerinden büyük olmamalıdır.',
'array' => ':attribute öğesi, :max öğelerinden daha fazlasına sahip olmamalıdır.',
],
'mimes' => ':attribute, :values türünde bir dosya olmalıdır.',
'mimetypes' => ':attribute, :values türünde bir dosya olmalıdır.',
'min' => [
'numeric' => ':attribute en az :min olmalıdır.',
'file' => ':attribute en az :min kilobayt olmalıdır.',
'string' => ':attribute en az :min karakter olmalıdır.',
'array' => ':attribute en az :min öğelerine sahip olmalıdır.',
],
'multiple_of' => ':attribute, :value \'nun katı olmalıdır.',
'not_in' => 'Seçilen :attribute geçersiz.',
'not_regex' => ':attribute biçimi geçersiz.',
'numeric' => ':attribute bir sayı olmalıdır.',
'password' => 'Şifre yanlış.',
'present' => ':attribute alanı mevcut olmalıdır.',
'regex' => ':attribute biçimi geçersiz.',
'required' => ':attribute alanı gereklidir.',
'required_if' => ':attribute alanı, :other :value olduğunda gereklidir.',
'required_unless' => ':attribute alanı, :other :values içinde olmadığı sürece gereklidir.',
'required_with' => ':attribute alanı, :values mevcut olduğunda gereklidir.',
'required_with_all' => ':attribute alanı, :değerler mevcut olduğunda gereklidir.',
'required_without' => ':attribute alanı, :values olmadığında gereklidir.',
'required_without_all' => ':attribute alanı, :values değerlerinin hiçbiri mevcut olmadığında gereklidir.',
'prohibited' => ':attribute alanı yasaktır.',
'prohibited_if' => ':attribute alanı :other :value olduğunda yasaktır.',
'prohibited_unless' => ':attribute alanı, :other :values içinde olmadığı sürece yasaktır.',
'same' => ':attribute ve :other eşleşmelidir.',
'size' => [
'numeric' => ':attribute :size olmalıdır.',
'file' => ':attribute :size kilobayt olmalıdır.',
'string' => ':attribute :size karakter olmalıdır.',
'array' => ':attribute :size öğeleri içermelidir.',
],
'starts_with' => ':attribute aşağıdakilerden biriyle başlamalıdır: :values.',
'string' => ':attribute bir dize olmalıdır.',
'timezone' => ':attribute geçerli bir saat dilimi olmalıdır.',
'unique' => ':attribute zaten alınmış.',
'uploaded' => ':attribute yüklenemedi.',
'url' => ':attribute geçerli bir URL olmalıdır.',
'uuid' => ':attribute geçerli bir UUID olmalıdır.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap our attribute placeholder
| with something more reader friendly such as "E-Mail Address" instead
| of "email". This simply helps us make our message more expressive.
|
*/
'attributes' => [],
];