commit
630e1a79f9
|
|
@ -3545,16 +3545,16 @@
|
|||
},
|
||||
{
|
||||
"name": "league/flysystem",
|
||||
"version": "1.1.3",
|
||||
"version": "1.1.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/flysystem.git",
|
||||
"reference": "9be3b16c877d477357c015cec057548cf9b2a14a"
|
||||
"reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a",
|
||||
"reference": "9be3b16c877d477357c015cec057548cf9b2a14a",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3ad69181b8afed2c9edf7be5a2918144ff4ea32",
|
||||
"reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -3570,7 +3570,6 @@
|
|||
"phpunit/phpunit": "^8.5.8"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-fileinfo": "Required for MimeType",
|
||||
"ext-ftp": "Allows you to use FTP server storage",
|
||||
"ext-openssl": "Allows you to use FTPS server storage",
|
||||
"league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
|
||||
|
|
@ -3628,7 +3627,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/thephpleague/flysystem/issues",
|
||||
"source": "https://github.com/thephpleague/flysystem/tree/1.x"
|
||||
"source": "https://github.com/thephpleague/flysystem/tree/1.1.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -3636,7 +3635,7 @@
|
|||
"type": "other"
|
||||
}
|
||||
],
|
||||
"time": "2020-08-23T07:39:11+00:00"
|
||||
"time": "2021-06-23T21:56:05+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/mime-type-detection",
|
||||
|
|
@ -11595,5 +11594,5 @@
|
|||
"php": "^7.3|^8.0"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.0.0"
|
||||
"plugin-api-version": "2.1.0"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -297,6 +297,11 @@ return [
|
|||
|
||||
'aliases' => [
|
||||
|
||||
/**
|
||||
* Laravel
|
||||
*
|
||||
* Place your aliases in alphabetical order.
|
||||
*/
|
||||
'App' => Illuminate\Support\Facades\App::class,
|
||||
'Artisan' => Illuminate\Support\Facades\Artisan::class,
|
||||
'Auth' => Illuminate\Support\Facades\Auth::class,
|
||||
|
|
@ -330,18 +335,25 @@ return [
|
|||
'URL' => Illuminate\Support\Facades\URL::class,
|
||||
'Validator' => Illuminate\Support\Facades\Validator::class,
|
||||
'View' => Illuminate\Support\Facades\View::class,
|
||||
'Datagrid' => Webkul\Ui\DataGrid\Facades\DataGrid::class,
|
||||
'ProductGrid' => Webkul\Ui\DataGrid\Facades\ProductGrid::class,
|
||||
'Image' => Intervention\Image\Facades\Image::class,
|
||||
|
||||
/**
|
||||
* Bagisto
|
||||
*
|
||||
* Place your aliases in alphabetical order.
|
||||
*/
|
||||
'Captcha' => Webkul\Customer\Facades\Captcha::class,
|
||||
'Cart' => Webkul\Checkout\Facades\Cart::class,
|
||||
'Core' => Webkul\Core\Facades\Core::class,
|
||||
'DbView' => Flynsarmy\DbBladeCompiler\Facades\DbView::class,
|
||||
'PDF' => Barryvdh\DomPDF\Facade::class,
|
||||
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
|
||||
'Concord' => Konekt\Concord\Facades\Concord::class,
|
||||
'Helper' => Konekt\Concord\Facades\Helper::class,
|
||||
'Core' => Webkul\Core\Facades\Core::class,
|
||||
'Datagrid' => Webkul\Ui\DataGrid\Facades\DataGrid::class,
|
||||
'DbView' => Flynsarmy\DbBladeCompiler\Facades\DbView::class,
|
||||
'Debugbar' => Barryvdh\Debugbar\Facade::class,
|
||||
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
|
||||
'Helper' => Konekt\Concord\Facades\Helper::class,
|
||||
'Image' => Intervention\Image\Facades\Image::class,
|
||||
'PDF' => Barryvdh\DomPDF\Facade::class,
|
||||
'ProductImage' => Webkul\Product\Facades\ProductImage::class,
|
||||
'ProductVideo' => Webkul\Product\Facades\ProductVideo::class
|
||||
'ProductGrid' => Webkul\Ui\DataGrid\Facades\ProductGrid::class,
|
||||
'ProductVideo' => Webkul\Product\Facades\ProductVideo::class,
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
namespace Webkul\API\Http\Controllers\Shop;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Webkul\Customer\Repositories\CustomerRepository;
|
||||
use Webkul\Customer\Http\Requests\CustomerRegistrationRequest;
|
||||
use Webkul\Customer\Repositories\CustomerGroupRepository;
|
||||
use Webkul\Customer\Repositories\CustomerRepository;
|
||||
|
||||
class CustomerController extends Controller
|
||||
{
|
||||
|
|
@ -70,14 +70,9 @@ class CustomerController extends Controller
|
|||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function create(Request $request)
|
||||
public function create(CustomerRegistrationRequest $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'first_name' => 'required',
|
||||
'last_name' => 'required',
|
||||
'email' => 'email|required|unique:customers,email',
|
||||
'password' => 'confirmed|min:6|required',
|
||||
]);
|
||||
$request->validated();
|
||||
|
||||
$data = [
|
||||
'first_name' => $request->get('first_name'),
|
||||
|
|
|
|||
|
|
@ -4,33 +4,30 @@ namespace Webkul\API\Http\Controllers\Shop;
|
|||
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use Webkul\Customer\Http\Requests\CustomerForgotPasswordRequest;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store()
|
||||
public function store(CustomerForgotPasswordRequest $request)
|
||||
{
|
||||
$this->validate(request(), [
|
||||
'email' => 'required|email',
|
||||
]);
|
||||
$request->validated();
|
||||
|
||||
$response = $this->broker()->sendResetLink(request(['email']));
|
||||
$response = $this->broker()->sendResetLink($request->only(['email']));
|
||||
|
||||
if ($response == Password::RESET_LINK_SENT) {
|
||||
return response()->json([
|
||||
return $response == Password::RESET_LINK_SENT
|
||||
? response()->json([
|
||||
'message' => trans($response),
|
||||
])
|
||||
: response()->json([
|
||||
'error' => trans($response),
|
||||
]);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'error' => trans($response),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -42,4 +39,4 @@ class ForgotPasswordController extends Controller
|
|||
{
|
||||
return Password::broker('customers');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,8 +3,9 @@
|
|||
namespace Webkul\API\Http\Controllers\Shop;
|
||||
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Webkul\Customer\Repositories\CustomerRepository;
|
||||
use Webkul\API\Http\Resources\Customer\Customer as CustomerResource;
|
||||
use Webkul\Customer\Http\Requests\CustomerLoginRequest;
|
||||
use Webkul\Customer\Repositories\CustomerRepository;
|
||||
|
||||
class SessionController extends Controller
|
||||
{
|
||||
|
|
@ -45,22 +46,19 @@ class SessionController extends Controller
|
|||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function create()
|
||||
public function create(CustomerLoginRequest $request)
|
||||
{
|
||||
request()->validate([
|
||||
'email' => 'required|email',
|
||||
'password' => 'required',
|
||||
]);
|
||||
$request->validated();
|
||||
|
||||
$jwtToken = null;
|
||||
|
||||
if (! $jwtToken = auth()->guard($this->guard)->attempt(request()->only('email', 'password'))) {
|
||||
if (! $jwtToken = auth()->guard($this->guard)->attempt($request->only(['email', 'password']))) {
|
||||
return response()->json([
|
||||
'error' => 'Invalid Email or Password',
|
||||
], 401);
|
||||
}
|
||||
|
||||
Event::dispatch('customer.after.login', request('email'));
|
||||
Event::dispatch('customer.after.login', $request->get('email'));
|
||||
|
||||
$customer = auth($this->guard)->user();
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -230,6 +230,7 @@
|
|||
<tr>
|
||||
<th>{{ __('admin::app.sales.orders.SKU') }}</th>
|
||||
<th>{{ __('admin::app.sales.orders.product-name') }}</th>
|
||||
<th>{{ __('admin::app.sales.orders.price') }}</th>
|
||||
<th>{{ __('admin::app.sales.orders.item-status') }}</th>
|
||||
<th>{{ __('admin::app.sales.orders.subtotal') }}</th>
|
||||
<th>{{ __('admin::app.sales.orders.tax-amount') }}</th>
|
||||
|
|
@ -261,6 +262,8 @@
|
|||
@endif
|
||||
</td>
|
||||
|
||||
<td>{{ core()->formatBasePrice($item->base_price) }}</td>
|
||||
|
||||
<td>
|
||||
<span class="qty-row">
|
||||
{{ $item->qty_ordered ? __('admin::app.sales.orders.item-ordered', ['qty_ordered' => $item->qty_ordered]) : '' }}
|
||||
|
|
@ -283,7 +286,7 @@
|
|||
</span>
|
||||
</td>
|
||||
|
||||
<td>{{ core()->formatBasePrice($item->base_price) }}</td>
|
||||
<td>{{ core()->formatBasePrice($item->base_total) }}</td>
|
||||
|
||||
<td>{{ core()->formatBasePrice($item->base_tax_amount) }}</td>
|
||||
|
||||
|
|
|
|||
|
|
@ -4,19 +4,19 @@ namespace Webkul\Checkout;
|
|||
|
||||
use Exception;
|
||||
use Illuminate\Support\Arr;
|
||||
use Webkul\Tax\Helpers\Tax;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Webkul\Shipping\Facades\Shipping;
|
||||
use Webkul\Checkout\Models\Cart as CartModel;
|
||||
use Webkul\Checkout\Models\CartAddress;
|
||||
use Webkul\Checkout\Models\CartPayment;
|
||||
use Webkul\Checkout\Models\Cart as CartModel;
|
||||
use Webkul\Checkout\Repositories\CartRepository;
|
||||
use Webkul\Product\Repositories\ProductRepository;
|
||||
use Webkul\Tax\Repositories\TaxCategoryRepository;
|
||||
use Webkul\Checkout\Repositories\CartItemRepository;
|
||||
use Webkul\Customer\Repositories\WishlistRepository;
|
||||
use Webkul\Checkout\Repositories\CartAddressRepository;
|
||||
use Webkul\Checkout\Repositories\CartItemRepository;
|
||||
use Webkul\Checkout\Repositories\CartRepository;
|
||||
use Webkul\Customer\Repositories\CustomerAddressRepository;
|
||||
use Webkul\Customer\Repositories\WishlistRepository;
|
||||
use Webkul\Product\Repositories\ProductRepository;
|
||||
use Webkul\Shipping\Facades\Shipping;
|
||||
use Webkul\Tax\Helpers\Tax;
|
||||
use Webkul\Tax\Repositories\TaxCategoryRepository;
|
||||
|
||||
class Cart
|
||||
{
|
||||
|
|
@ -284,7 +284,7 @@ class Cart
|
|||
}
|
||||
|
||||
/**
|
||||
* Get cart item by product
|
||||
* Get cart item by product.
|
||||
*
|
||||
* @param array $data
|
||||
* @return \Webkul\Checkout\Contracts\CartItem|void
|
||||
|
|
@ -296,7 +296,7 @@ class Cart
|
|||
foreach ($items as $item) {
|
||||
if ($item->product->getTypeInstance()->compareOptions($item->additional, $data['additional'])) {
|
||||
if (isset($data['additional']['parent_id'])) {
|
||||
if ($item->parent->product->getTypeInstance()->compareOptions($item->parent->additional, request()->all())) {
|
||||
if ($item->parent->product->getTypeInstance()->compareOptions($item->parent->additional, $data['additional'])) {
|
||||
return $item;
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -73,6 +73,11 @@ class Install extends Command
|
|||
$result = shell_exec('composer dump-autoload');
|
||||
$this->info($result);
|
||||
|
||||
// removing the installer directory
|
||||
if (is_dir('public/installer')) {
|
||||
shell_exec('rm -rf public/installer');
|
||||
}
|
||||
|
||||
// final information
|
||||
$this->info('-----------------------------');
|
||||
$this->info('Congratulations!');
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
namespace Webkul\Core\Exceptions;
|
||||
|
||||
use Throwable;
|
||||
use PDOException;
|
||||
use Illuminate\Auth\AuthenticationException;
|
||||
use App\Exceptions\Handler as AppExceptionHandler;
|
||||
use Illuminate\Auth\AuthenticationException;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use PDOException;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
use Throwable;
|
||||
|
||||
class Handler extends AppExceptionHandler
|
||||
{
|
||||
|
|
@ -32,16 +32,8 @@ class Handler extends AppExceptionHandler
|
|||
*/
|
||||
public function render($request, Throwable $exception)
|
||||
{
|
||||
$path = $this->isAdminUri() ? 'admin' : 'shop';
|
||||
|
||||
if ($exception instanceof HttpException) {
|
||||
$statusCode = in_array($exception->getStatusCode(), [401, 403, 404, 503]) ? $exception->getStatusCode() : 500;
|
||||
|
||||
return $this->response($path, $statusCode);
|
||||
} elseif ($exception instanceof ModelNotFoundException) {
|
||||
return $this->response($path, 404);
|
||||
} elseif ($exception instanceof PDOException) {
|
||||
return $this->response($path, 500);
|
||||
if (! config('app.debug')) {
|
||||
return $this->renderCustomResponse($request, $exception);
|
||||
}
|
||||
|
||||
return parent::render($request, $exception);
|
||||
|
|
@ -73,6 +65,32 @@ class Handler extends AppExceptionHandler
|
|||
return strpos(\Illuminate\Support\Facades\Request::path(), 'admin') !== false ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render custom HTTP response.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Throwable $exception
|
||||
* @return \Illuminate\Http\Response|null
|
||||
*/
|
||||
private function renderCustomResponse($request, Throwable $exception)
|
||||
{
|
||||
$path = $this->isAdminUri() ? 'admin' : 'shop';
|
||||
|
||||
if ($exception instanceof HttpException) {
|
||||
$statusCode = in_array($exception->getStatusCode(), [401, 403, 404, 503])
|
||||
? $exception->getStatusCode()
|
||||
: 500;
|
||||
|
||||
return $this->response($path, $statusCode);
|
||||
} elseif ($exception instanceof ModelNotFoundException) {
|
||||
return $this->response($path, 404);
|
||||
} elseif ($exception instanceof PDOException) {
|
||||
return $this->response($path, 500);
|
||||
} else {
|
||||
return parent::render($request, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Response.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,212 @@
|
|||
<?php
|
||||
|
||||
namespace Webkul\Customer;
|
||||
|
||||
use Webkul\Customer\Contracts\Captcha as CaptchaContract;
|
||||
|
||||
class Captcha implements CaptchaContract
|
||||
{
|
||||
/**
|
||||
* Site key.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $siteKey;
|
||||
|
||||
/**
|
||||
* Secret key.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $secretKey;
|
||||
|
||||
/**
|
||||
* Create a new instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->siteKey = $this->getSiteKey();
|
||||
|
||||
$this->secretKey = $this->getSecretKey();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether captcha is active or not.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isActive(): bool
|
||||
{
|
||||
return (bool) core()->getConfigData('customer.captcha.credentials.status');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get site key from the core config.
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getSiteKey(): ?string
|
||||
{
|
||||
return core()->getConfigData('customer.captcha.credentials.site_key');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get secret key from the core config.
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getSecretKey(): ?string
|
||||
{
|
||||
return core()->getConfigData('customer.captcha.credentials.secret_key');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get client endpoint.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getClientEndpoint(): string
|
||||
{
|
||||
return static::CLIENT_ENDPOINT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get site verify endpoint.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSiteVerifyEndpoint(): string
|
||||
{
|
||||
return static::SITE_VERIFY_ENDPOINT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render JS.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function renderJS(): string
|
||||
{
|
||||
return $this->isActive()
|
||||
? $this->getCaptchaJSView()
|
||||
: '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Render Captcha.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function render(): string
|
||||
{
|
||||
return $this->isActive()
|
||||
? $this->getCaptchaView()
|
||||
: '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate response.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function validateResponse($response): bool
|
||||
{
|
||||
$client = new \GuzzleHttp\Client();
|
||||
|
||||
$response = $client->post($this->getSiteVerifyEndpoint(), [
|
||||
'query' => [
|
||||
'secret' => $this->secretKey,
|
||||
'response' => $response
|
||||
]
|
||||
]);
|
||||
|
||||
return json_decode($response->getBody())->success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get or merge existing validations with your captcha validations.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getValidations($rules = []): array
|
||||
{
|
||||
return $this->isActive()
|
||||
? array_merge($rules, ['g-recaptcha-response' => 'required|captcha'])
|
||||
: $rules;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get or merge existing validation messages with your captcha validation messages.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getValidationMessages($messages = []): array
|
||||
{
|
||||
return $this->isActive()
|
||||
? array_merge($messages, [
|
||||
'g-recaptcha-response.required' => __('customer::app.admin.system.captcha.validations.required'),
|
||||
'g-recaptcha-response.captcha' => __('customer::app.admin.system.captcha.validations.captcha')
|
||||
])
|
||||
: $messages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get attributes.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getAttributes(): array
|
||||
{
|
||||
return [
|
||||
'class' => 'g-recaptcha',
|
||||
'data-sitekey' => $this->siteKey,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Build attributes.
|
||||
*
|
||||
* @param array $attributes
|
||||
* @return string
|
||||
*/
|
||||
protected function buildHTMLAttributes(array $attributes): string
|
||||
{
|
||||
$htmlAttributes = [];
|
||||
|
||||
foreach ($attributes as $key => $value) {
|
||||
$htmlAttributes[] = "{$key}=\"{$value}\"";
|
||||
}
|
||||
|
||||
return count($htmlAttributes)
|
||||
? implode(' ', $htmlAttributes)
|
||||
: '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get captcha view.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getCaptchaView()
|
||||
{
|
||||
$htmlAttributes = $this->buildHTMLAttributes($this->getAttributes());
|
||||
|
||||
return view('customer::captcha.view', [
|
||||
'htmlAttributes' => $htmlAttributes
|
||||
])->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get captcha script view.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getCaptchaJSView()
|
||||
{
|
||||
return view('customer::captcha.scripts', [
|
||||
'clientEndPoint' => $this->getClientEndpoint()
|
||||
])->render();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
[
|
||||
'key' => 'customer.captcha',
|
||||
'name' => 'customer::app.admin.system.captcha.title',
|
||||
'sort' => 1,
|
||||
], [
|
||||
'key' => 'customer.captcha.credentials',
|
||||
'name' => 'customer::app.admin.system.captcha.credentials',
|
||||
'sort' => 1,
|
||||
'fields' => [
|
||||
[
|
||||
'name' => 'site_key',
|
||||
'title' => 'customer::app.admin.system.captcha.site-key',
|
||||
'type' => 'text',
|
||||
'channel_based' => true,
|
||||
], [
|
||||
'name' => 'secret_key',
|
||||
'title' => 'customer::app.admin.system.captcha.secret-key',
|
||||
'type' => 'text',
|
||||
'channel_based' => true,
|
||||
], [
|
||||
'name' => 'status',
|
||||
'title' => 'customer::app.admin.system.captcha.status',
|
||||
'type' => 'boolean',
|
||||
'channel_based' => true,
|
||||
]
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace Webkul\Customer\Contracts;
|
||||
|
||||
interface Captcha
|
||||
{
|
||||
const CLIENT_ENDPOINT = 'https://www.google.com/recaptcha/api.js';
|
||||
|
||||
const SITE_VERIFY_ENDPOINT = 'https://google.com/recaptcha/api/siteverify';
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace Webkul\Customer\Facades;
|
||||
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
|
||||
class Captcha extends Facade
|
||||
{
|
||||
/**
|
||||
* Get the registered name of the component.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected static function getFacadeAccessor()
|
||||
{
|
||||
return 'captcha';
|
||||
}
|
||||
}
|
||||
|
|
@ -4,13 +4,14 @@ namespace Webkul\Customer\Http\Controllers;
|
|||
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use Webkul\Customer\Http\Requests\CustomerForgotPasswordRequest;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
|
||||
/**
|
||||
* Contains route related configuration
|
||||
* Contains route related configuration.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
|
|
@ -41,16 +42,12 @@ class ForgotPasswordController extends Controller
|
|||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store()
|
||||
public function store(CustomerForgotPasswordRequest $request)
|
||||
{
|
||||
try {
|
||||
$this->validate(request(), [
|
||||
'email' => 'required|email',
|
||||
]);
|
||||
$request->validated();
|
||||
|
||||
$response = $this->broker()->sendResetLink(
|
||||
request(['email'])
|
||||
);
|
||||
try {
|
||||
$response = $this->broker()->sendResetLink($request->only(['email']));
|
||||
|
||||
if ($response == Password::RESET_LINK_SENT) {
|
||||
session()->flash('success', trans('customer::app.forget_password.reset_link_sent'));
|
||||
|
|
@ -59,7 +56,7 @@ class ForgotPasswordController extends Controller
|
|||
}
|
||||
|
||||
return back()
|
||||
->withInput(request(['email']))
|
||||
->withInput($request->only(['email']))
|
||||
->withErrors([
|
||||
'email' => trans('customer::app.forget_password.email_not_exist'),
|
||||
]);
|
||||
|
|
@ -69,6 +66,7 @@ class ForgotPasswordController extends Controller
|
|||
return redirect()->back();
|
||||
} catch (\Exception $e) {
|
||||
report($e);
|
||||
|
||||
session()->flash('error', trans($e->getMessage()));
|
||||
|
||||
return redirect()->back();
|
||||
|
|
@ -84,4 +82,4 @@ class ForgotPasswordController extends Controller
|
|||
{
|
||||
return Password::broker('customers');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,54 +2,54 @@
|
|||
|
||||
namespace Webkul\Customer\Http\Controllers;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
use Cookie;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Illuminate\Support\Str;
|
||||
use Webkul\Core\Repositories\SubscribersListRepository;
|
||||
use Webkul\Customer\Http\Requests\CustomerRegistrationRequest;
|
||||
use Webkul\Customer\Mail\RegistrationEmail;
|
||||
use Webkul\Customer\Mail\VerificationEmail;
|
||||
use Webkul\Shop\Mail\SubscriptionEmail;
|
||||
use Webkul\Customer\Repositories\CustomerRepository;
|
||||
use Webkul\Customer\Repositories\CustomerGroupRepository;
|
||||
use Webkul\Core\Repositories\SubscribersListRepository;
|
||||
use Cookie;
|
||||
use Webkul\Customer\Repositories\CustomerRepository;
|
||||
use Webkul\Shop\Mail\SubscriptionEmail;
|
||||
|
||||
class RegistrationController extends Controller
|
||||
{
|
||||
/**
|
||||
* Contains route related configuration
|
||||
* Contains route related configuration.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_config;
|
||||
|
||||
/**
|
||||
* CustomerRepository object
|
||||
* Customer repository instance.
|
||||
*
|
||||
* @var \Webkul\Customer\Repositories\CustomerRepository
|
||||
*/
|
||||
protected $customerRepository;
|
||||
|
||||
/**
|
||||
* CustomerGroupRepository object
|
||||
* Customer group repository instance.
|
||||
*
|
||||
* @var \Webkul\Customer\Repositories\CustomerGroupRepository
|
||||
*/
|
||||
protected $customerGroupRepository;
|
||||
|
||||
/**
|
||||
* SubscribersListRepository
|
||||
* Subscribers list repository instance.
|
||||
*
|
||||
* @var \Webkul\Core\Repositories\SubscribersListRepository
|
||||
*/
|
||||
protected $subscriptionRepository;
|
||||
|
||||
/**
|
||||
* Create a new Repository instance.
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @param \Webkul\Customer\Repositories\CustomerRepository $customer
|
||||
* @param \Webkul\Customer\Repositories\CustomerGroupRepository $customerGroupRepository
|
||||
* @param \Webkul\Core\Repositories\SubscribersListRepository $subscriptionRepository
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(
|
||||
|
|
@ -80,16 +80,12 @@ class RegistrationController extends Controller
|
|||
/**
|
||||
* Method to store user's sign up form data to DB.
|
||||
*
|
||||
* @param \Webkul\Customer\Http\Requests\CustomerRegistrationRequest $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function create()
|
||||
public function create(CustomerRegistrationRequest $request)
|
||||
{
|
||||
$this->validate(request(), [
|
||||
'first_name' => 'string|required',
|
||||
'last_name' => 'string|required',
|
||||
'email' => 'email|required|unique:customers,email',
|
||||
'password' => 'confirmed|min:6|required',
|
||||
]);
|
||||
$request->validated();
|
||||
|
||||
$data = array_merge(request()->input(), [
|
||||
'password' => bcrypt(request()->input('password')),
|
||||
|
|
@ -169,7 +165,7 @@ class RegistrationController extends Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Method to verify account
|
||||
* Method to verify account.
|
||||
*
|
||||
* @param string $token
|
||||
* @return \Illuminate\Http\Response
|
||||
|
|
@ -190,6 +186,8 @@ class RegistrationController extends Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Resend verification email.
|
||||
*
|
||||
* @param string $email
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2,26 +2,27 @@
|
|||
|
||||
namespace Webkul\Customer\Http\Controllers;
|
||||
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Cookie;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Webkul\Customer\Http\Requests\CustomerLoginRequest;
|
||||
|
||||
class SessionController extends Controller
|
||||
{
|
||||
/**
|
||||
* Contains route related configuration
|
||||
* Contains route related configuration.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_config;
|
||||
|
||||
/**
|
||||
* Create a new Repository instance.
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('customer')->except(['show','create']);
|
||||
$this->middleware('customer')->except(['show', 'create']);
|
||||
|
||||
$this->_config = request('_config');
|
||||
}
|
||||
|
|
@ -33,26 +34,22 @@ class SessionController extends Controller
|
|||
*/
|
||||
public function show()
|
||||
{
|
||||
if (auth()->guard('customer')->check()) {
|
||||
return redirect()->route('customer.profile.index');
|
||||
} else {
|
||||
return view($this->_config['view']);
|
||||
}
|
||||
return auth()->guard('customer')->check()
|
||||
? redirect()->route('customer.profile.index')
|
||||
: view($this->_config['view']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @param \Webkul\Customer\Http\Requests\CustomerLoginRequest $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function create()
|
||||
public function create(CustomerLoginRequest $request)
|
||||
{
|
||||
$this->validate(request(), [
|
||||
'email' => 'required|email',
|
||||
'password' => 'required',
|
||||
]);
|
||||
$request->validated();
|
||||
|
||||
if (! auth()->guard('customer')->attempt(request(['email', 'password']))) {
|
||||
if (! auth()->guard('customer')->attempt($request->only(['email', 'password']))) {
|
||||
session()->flash('error', trans('shop::app.customer.login-form.invalid-creds'));
|
||||
|
||||
return redirect()->back();
|
||||
|
|
@ -71,15 +68,17 @@ class SessionController extends Controller
|
|||
|
||||
Cookie::queue(Cookie::make('enable-resend', 'true', 1));
|
||||
|
||||
Cookie::queue(Cookie::make('email-for-resend', request('email'), 1));
|
||||
Cookie::queue(Cookie::make('email-for-resend', $request->get('email'), 1));
|
||||
|
||||
auth()->guard('customer')->logout();
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
//Event passed to prepare cart after login
|
||||
Event::dispatch('customer.after.login', request('email'));
|
||||
/**
|
||||
* Event passed to prepare cart after login.
|
||||
*/
|
||||
Event::dispatch('customer.after.login', $request->get('email'));
|
||||
|
||||
return redirect()->intended(route($this->_config['redirect']));
|
||||
}
|
||||
|
|
@ -98,4 +97,4 @@ class SessionController extends Controller
|
|||
|
||||
return redirect()->route($this->_config['redirect']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
namespace Webkul\Customer\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Webkul\Customer\Facades\Captcha;
|
||||
|
||||
class CustomerForgotPasswordRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Define your rules.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $rules = [
|
||||
'email' => 'required|email',
|
||||
];
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return Captcha::getValidations($this->rules);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get custom messages for validator errors.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return Captcha::getValidationMessages();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
namespace Webkul\Customer\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Webkul\Customer\Facades\Captcha;
|
||||
|
||||
class CustomerLoginRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Define your rules.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $rules = [
|
||||
'email' => 'required|email',
|
||||
'password' => 'required',
|
||||
];
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return Captcha::getValidations($this->rules);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get custom messages for validator errors.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return Captcha::getValidationMessages();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
|
||||
namespace Webkul\Customer\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Webkul\Customer\Facades\Captcha;
|
||||
|
||||
class CustomerRegistrationRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Define your rules.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $rules = [
|
||||
'first_name' => 'string|required',
|
||||
'last_name' => 'string|required',
|
||||
'email' => 'email|required|unique:customers,email',
|
||||
'password' => 'confirmed|min:6|required',
|
||||
];
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return Captcha::getValidations($this->rules);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get custom messages for validator errors.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function messages()
|
||||
{
|
||||
return Captcha::getValidationMessages();
|
||||
}
|
||||
}
|
||||
|
|
@ -3,19 +3,31 @@
|
|||
namespace Webkul\Customer\Providers;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factory as EloquentFactory;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Illuminate\Routing\Router;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Webkul\Customer\Captcha;
|
||||
use Webkul\Customer\Http\Middleware\RedirectIfNotCustomer;
|
||||
|
||||
class CustomerServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Bootstrap application services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot(Router $router)
|
||||
{
|
||||
$router->aliasMiddleware('customer', RedirectIfNotCustomer::class);
|
||||
|
||||
$this->loadMigrationsFrom(__DIR__ . '/../Database/Migrations');
|
||||
|
||||
$this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'customer');
|
||||
|
||||
$this->loadMigrationsFrom(__DIR__ . '/../Database/Migrations');
|
||||
$this->loadViewsFrom(__DIR__ . '/../Resources/views', 'customer');
|
||||
|
||||
$this->app['validator']->extend('captcha', function ($attribute, $value, $parameters) {
|
||||
return $this->app['captcha']->validateResponse($value);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -26,14 +38,19 @@ class CustomerServiceProvider extends ServiceProvider
|
|||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->registerConfig();
|
||||
|
||||
$this->registerEloquentFactoriesFrom(__DIR__ . '/../Database/Factories');
|
||||
|
||||
$this->app->singleton('captcha', function ($app) {
|
||||
return new Captcha();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register factories.
|
||||
*
|
||||
* @param string $path
|
||||
*
|
||||
* @param string $path
|
||||
* @return void
|
||||
* @throws \Illuminate\Contracts\Container\BindingResolutionException
|
||||
*/
|
||||
|
|
@ -41,4 +58,17 @@ class CustomerServiceProvider extends ServiceProvider
|
|||
{
|
||||
$this->app->make(EloquentFactory::class)->load($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register package config.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function registerConfig()
|
||||
{
|
||||
$this->mergeConfigFrom(
|
||||
dirname(__DIR__) . '/Config/system.php',
|
||||
'core'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,30 @@ return [
|
|||
'select-options' => 'تحتاج إلى تحديد خيارات قبل إضافة إلى قائمة الأمنيات',
|
||||
'remove-all-success' => 'تمت إزالة جميع العناصر من قائمة الأمنيات الخاصة بك',
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
'empty' => '.لم تقم بمراجعة أي منتج حتى الآن'
|
||||
]
|
||||
];
|
||||
'empty' => '.لم تقم بمراجعة أي منتج حتى الآن',
|
||||
],
|
||||
|
||||
'forget_password' => [
|
||||
'reset_link_sent' => 'لقد أرسلنا رابط إعادة تعيين كلمة المرور بالبريد الإلكتروني.',
|
||||
'email_not_exist' => "لا يمكننا العثور على مستخدم بعنوان البريد الإلكتروني هذا",
|
||||
],
|
||||
|
||||
'admin' => [
|
||||
'system' => [
|
||||
'captcha' => [
|
||||
'title' => 'كلمة التحقق',
|
||||
'credentials' => 'أوراق اعتماد',
|
||||
'site-key' => 'مفتاح الموقع',
|
||||
'secret-key' => 'المفتاح السري',
|
||||
'status' => 'حالة',
|
||||
|
||||
'validations' => [
|
||||
'required' => 'الرجاء اختيار CAPTCHA',
|
||||
'captcha' => 'هناك خطأ ما! حاول مرة اخرى.',
|
||||
]
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -11,10 +11,30 @@ return [
|
|||
'select-options' => 'Vor dem Hinzufügen zur Wunschliste müssen Optionen ausgewählt werden',
|
||||
'remove-all-success' => 'Alle Elemente von Ihrer Wunschliste wurden entfernt',
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
'empty' => 'Sie haben noch kein Produkt bewertet'
|
||||
'empty' => 'Sie haben noch kein Produkt bewertet',
|
||||
],
|
||||
|
||||
'forget_password' => [
|
||||
'reset_link_sent' => 'Wir haben Ihren Link zum Zurücksetzen des Passworts per E-Mail gesendet.'
|
||||
]
|
||||
];
|
||||
'reset_link_sent' => 'Wir haben Ihren Link zum Zurücksetzen des Passworts per E-Mail gesendet.',
|
||||
'email_not_exist' => "Wir können keinen Benutzer mit dieser E-Mail-Adresse finden",
|
||||
],
|
||||
|
||||
'admin' => [
|
||||
'system' => [
|
||||
'captcha' => [
|
||||
'title' => 'Captcha',
|
||||
'credentials' => 'Referenzen',
|
||||
'site-key' => 'Site-Schlüssel',
|
||||
'secret-key' => 'Geheimer Schlüssel',
|
||||
'status' => 'Status',
|
||||
|
||||
'validations' => [
|
||||
'required' => 'Bitte wählen Sie CAPTCHA',
|
||||
'captcha' => 'Etwas ist schief gelaufen! Bitte versuche es erneut.',
|
||||
]
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -11,11 +11,30 @@ return [
|
|||
'select-options' => 'Need To Select Options Before Adding To Wishlist',
|
||||
'remove-all-success' => 'All The Items From Your Wishlist Have Been Removed',
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
'empty' => 'You have not reviewed any of product yet'
|
||||
'empty' => 'You have not reviewed any of product yet',
|
||||
],
|
||||
|
||||
'forget_password' => [
|
||||
'reset_link_sent' => 'We have e-mailed your reset password link.',
|
||||
'email_not_exist' => "We can't find a user with that e-mail address"
|
||||
]
|
||||
];
|
||||
'email_not_exist' => "We can't find a user with that e-mail address",
|
||||
],
|
||||
|
||||
'admin' => [
|
||||
'system' => [
|
||||
'captcha' => [
|
||||
'title' => 'Captcha',
|
||||
'credentials' => 'Credentials',
|
||||
'site-key' => 'Site Key',
|
||||
'secret-key' => 'Secret Key',
|
||||
'status' => 'Status',
|
||||
|
||||
'validations' => [
|
||||
'required' => 'Please select CAPTCHA',
|
||||
'captcha' => 'Something went wrong! Please try again.',
|
||||
]
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -11,11 +11,30 @@ return [
|
|||
'select-options' => 'Necesita seleccionar opciones antes de agregar a la lista de deseos',
|
||||
'remove-all-success' => 'Se han eliminado todos los elementos de su lista de deseos',
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
'empty' => 'Aún no has calificado ningún producto'
|
||||
'empty' => 'Aún no has calificado ningún producto',
|
||||
],
|
||||
|
||||
'forget_password' => [
|
||||
'reset_link_sent' => 'Hemos enviado un correo electrónico con el enlace para restablecer la contraseña.',
|
||||
'email_not_exist' => "No podemos encontrar un usuario con esa dirección de correo electrónico"
|
||||
]
|
||||
'email_not_exist' => "No podemos encontrar un usuario con esa dirección de correo electrónico",
|
||||
],
|
||||
|
||||
'admin' => [
|
||||
'system' => [
|
||||
'captcha' => [
|
||||
'title' => 'Captcha',
|
||||
'credentials' => 'Cartas credenciales',
|
||||
'site-key' => 'Clave del sitio',
|
||||
'secret-key' => 'Llave secreta',
|
||||
'status' => 'Estado',
|
||||
|
||||
'validations' => [
|
||||
'required' => 'Seleccione CAPTCHA',
|
||||
'captcha' => '¡Algo salió mal! Inténtalo de nuevo.',
|
||||
]
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'wishlist' => [
|
||||
'success' => 'Article ajouté avec succès à la liste de souhaits',
|
||||
'failure' => 'L\'article ne peut pas être ajouté à la liste de souhaits',
|
||||
'already' => 'Article déjà présent dans votre liste de souhaits',
|
||||
'removed' => 'Article supprimé avec succès de la liste de souhaits',
|
||||
'remove-fail' => 'L\'article ne peut pas être supprimé de la liste de souhaits',
|
||||
'empty' => 'Vous n\'avez aucun article dans votre liste de souhaits',
|
||||
'select-options' => 'Besoin de sélectionner des options avant d\'ajouter à la liste de souhaits',
|
||||
'remove-all-success' => 'Tous les articles de votre liste de souhaits ont été supprimés',
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
'empty' => 'Vous n\'avez pas encore évalué de produit',
|
||||
],
|
||||
|
||||
'forget_password' => [
|
||||
'reset_link_sent' => 'Nous avons envoyé par e-mail votre lien de réinitialisation de mot de passe.',
|
||||
'email_not_exist' => 'Nous ne pouvons pas trouver un utilisateur avec cette adresse e-mail',
|
||||
],
|
||||
|
||||
'admin' => [
|
||||
'system' => [
|
||||
'captcha' => [
|
||||
'title' => 'Captcha',
|
||||
'credentials' => 'Crédits',
|
||||
'site-key' => 'Clé du site',
|
||||
'secret-key' => 'Clef secrète',
|
||||
'status' => 'Statut',
|
||||
|
||||
'validations' => [
|
||||
'required' => 'Veuillez sélectionner CAPTCHA',
|
||||
'captcha' => 'Quelque chose s\'est mal passé ! Veuillez réessayer.',
|
||||
]
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
@ -11,11 +11,30 @@ return [
|
|||
'select-options' => 'Seleziona una opzione del prodotto prima di aggiungerlo ai Preferiti',
|
||||
'remove-all-success' => 'Tutti i Prodotti presenti nei preferiti sono stati rimossi',
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
'empty' => 'Non hai ancora recensito i nostri prodotti'
|
||||
],
|
||||
'forget_password' => [
|
||||
'reset_link_sent' => 'Ti abbiamo inviato una email per generare una nuova password.'
|
||||
]
|
||||
|
||||
];
|
||||
'forget_password' => [
|
||||
'reset_link_sent' => 'Abbiamo inviato un\'e-mail con il link per reimpostare la password.',
|
||||
'email_not_exist' => "Non riusciamo a trovare un utente con quell'indirizzo e-mail",
|
||||
],
|
||||
|
||||
'admin' => [
|
||||
'system' => [
|
||||
'captcha' => [
|
||||
'title' => 'Captcha',
|
||||
'credentials' => 'Credenziali',
|
||||
'site-key' => 'Chiave del sito',
|
||||
'secret-key' => 'Chiave segreta',
|
||||
'status' => 'Stato',
|
||||
|
||||
'validations' => [
|
||||
'required' => 'Seleziona CAPTCHA',
|
||||
'captcha' => 'Qualcosa è andato storto! Per favore riprova.',
|
||||
]
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'wishlist' => [
|
||||
'success' => 'Artikel succesvol toegevoegd aan verlanglijst',
|
||||
'failure' => 'Artikel kan niet worden toegevoegd aan verlanglijst',
|
||||
'already' => 'Artikel al aanwezig in uw verlanglijst',
|
||||
'removed' => 'Artikel succesvol verwijderd van verlanglijst',
|
||||
'remove-fail' => 'Artikel kan niet van verlanglijst worden verwijderd',
|
||||
'empty' => 'U heeft geen items op uw verlanglijst',
|
||||
'select-options' => 'Moet opties selecteren voordat u aan verlanglijst toevoegt',
|
||||
'remove-all-success' => 'Alle items van je verlanglijst zijn verwijderd',
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
'empty' => 'U heeft nog geen product beoordeeld',
|
||||
],
|
||||
|
||||
'forget_password' => [
|
||||
'reset_link_sent' => 'We hebben de link voor het opnieuw instellen van uw wachtwoord per e-mail verzonden.',
|
||||
'email_not_exist' => "We kunnen geen gebruiker met dat e-mailadres vinden",
|
||||
],
|
||||
|
||||
'admin' => [
|
||||
'system' => [
|
||||
'captcha' => [
|
||||
'title' => 'Captcha',
|
||||
'credentials' => 'Inloggegevens',
|
||||
'site-key' => 'Sitesleutel',
|
||||
'secret-key' => 'Geheime sleutel',
|
||||
'status' => 'Toestand',
|
||||
|
||||
'validations' => [
|
||||
'required' => 'Selecteer CAPTCHA',
|
||||
'captcha' => 'Er is iets fout gegaan! Probeer het opnieuw.',
|
||||
]
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
@ -11,7 +11,30 @@ return [
|
|||
'select-options' => 'Precisa selecionar opções antes de adicionar à lista de desejos',
|
||||
'remove-all-success' => 'Todos os itens da sua lista de desejos foram removidos',
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
'empty' => 'Você não avaliou nenhum produto ainda'
|
||||
]
|
||||
];
|
||||
'empty' => 'Você não avaliou nenhum produto ainda',
|
||||
],
|
||||
|
||||
'forget_password' => [
|
||||
'reset_link_sent' => 'Enviamos por e-mail o link de redefinição de senha.',
|
||||
'email_not_exist' => "Não conseguimos encontrar um usuário com esse endereço de e-mail",
|
||||
],
|
||||
|
||||
'admin' => [
|
||||
'system' => [
|
||||
'captcha' => [
|
||||
'title' => 'Captcha',
|
||||
'credentials' => 'Credenciais',
|
||||
'site-key' => 'Chave do Site',
|
||||
'secret-key' => 'Chave secreta',
|
||||
'status' => 'Status',
|
||||
|
||||
'validations' => [
|
||||
'required' => 'Selecione CAPTCHA',
|
||||
'captcha' => 'Algo deu errado! Por favor, tente novamente.',
|
||||
]
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
<script src="{{ $clientEndPoint }}" async defer></script>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<div {!! $htmlAttributes !!}></div>
|
||||
|
||||
@if ($errors->has('g-recaptcha-response'))
|
||||
<span class="control-error">
|
||||
{{ $errors->first('g-recaptcha-response') }}
|
||||
</span>
|
||||
@endif
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'name' => 'Webkul Bagisto Customer',
|
||||
'version' => '0.0.1'
|
||||
];
|
||||
|
|
@ -4,14 +4,20 @@ namespace Webkul\Product\Models;
|
|||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Webkul\Attribute\Models\AttributeProxy;
|
||||
use Webkul\Channel\Models\ChannelProxy;
|
||||
use Webkul\Product\Contracts\ProductAttributeValue as ProductAttributeValueContract;
|
||||
|
||||
class ProductAttributeValue extends Model implements ProductAttributeValueContract
|
||||
{
|
||||
/**
|
||||
* Indicates if the model should be timestamped.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $timestamps = false;
|
||||
|
||||
/**
|
||||
* Attribute type fields.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $attributeTypeFields = [
|
||||
|
|
@ -28,10 +34,14 @@ class ProductAttributeValue extends Model implements ProductAttributeValueContra
|
|||
'checkbox' => 'text_value',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'product_id',
|
||||
'attribute_id',
|
||||
'channel_id',
|
||||
'locale',
|
||||
'channel',
|
||||
'text_value',
|
||||
|
|
@ -58,12 +68,4 @@ class ProductAttributeValue extends Model implements ProductAttributeValueContra
|
|||
{
|
||||
return $this->belongsTo(ProductProxy::modelClass());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the channel that owns the attribute value.
|
||||
*/
|
||||
public function channel()
|
||||
{
|
||||
return $this->belongsTo(ChannelProxy::modelClass());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -466,17 +466,19 @@ class ProductRepository extends Repository
|
|||
} else {
|
||||
$results = app(ProductFlatRepository::class)->scopeQuery(function ($query) use ($term, $channel, $locale) {
|
||||
|
||||
$query = $query->distinct()
|
||||
->addSelect('product_flat.*')
|
||||
->join('product_flat as variants', 'product_flat.id', '=', DB::raw('COALESCE(' . DB::getTablePrefix() . 'variants.parent_id, ' . DB::getTablePrefix() . 'variants.id)'))
|
||||
->where('product_flat.channel', $channel)
|
||||
->where('product_flat.locale', $locale)
|
||||
->whereNotNull('product_flat.url_key');
|
||||
|
||||
if (! core()->getConfigData('catalog.products.homepage.out_of_stock_items')) {
|
||||
$query = $this->checkOutOfStockItem($query);
|
||||
}
|
||||
|
||||
return $query->distinct()
|
||||
->addSelect('product_flat.*')
|
||||
->where('product_flat.status', 1)
|
||||
return $query->where('product_flat.status', 1)
|
||||
->where('product_flat.visible_individually', 1)
|
||||
->where('product_flat.channel', $channel)
|
||||
->where('product_flat.locale', $locale)
|
||||
->whereNotNull('product_flat.url_key')
|
||||
->where(function ($subQuery) use ($term) {
|
||||
$queries = explode('_', $term);
|
||||
|
||||
|
|
@ -840,13 +842,14 @@ class ProductRepository extends Repository
|
|||
}
|
||||
|
||||
/**
|
||||
* Check out of stock items.
|
||||
* Check out of stock items. This method needed `variants` alias in
|
||||
* the `product_flat` query.
|
||||
*
|
||||
* @param Webkul\Product\Models\ProductFlat
|
||||
*
|
||||
* @return Model
|
||||
*/
|
||||
public function checkOutOfStockItem($query) {
|
||||
* @param Webkul\Product\Models\ProductFlat $query
|
||||
* @return Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function checkOutOfStockItem($query)
|
||||
{
|
||||
return $query
|
||||
->leftJoin('products as ps', 'product_flat.product_id', '=', 'ps.id')
|
||||
->leftJoin('product_inventories as pv', 'product_flat.product_id', '=', 'pv.product_id')
|
||||
|
|
@ -865,7 +868,6 @@ class ProductRepository extends Repository
|
|||
->selectRaw('SUM(' . DB::getTablePrefix() . 'product_inventories.qty)')
|
||||
->from('product_flat')
|
||||
->leftJoin('product_inventories', 'product_inventories.product_id', '=', 'product_flat.product_id')
|
||||
->join('product_flat as variants', 'product_flat.id', '=', DB::raw('COALESCE(' . DB::getTablePrefix() . 'variants.parent_id, ' . DB::getTablePrefix() . 'variants.id)'))
|
||||
->whereRaw(DB::getTablePrefix() . 'product_flat.parent_id = variants.id');
|
||||
}, '>', 0);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -289,6 +289,11 @@ class Order extends Model implements OrderContract
|
|||
if ($this->status === self::STATUS_FRAUD) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$pendingInvoice = $this->invoices->where('state', 'pending')->first();
|
||||
if ($pendingInvoice) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($this->items as $item) {
|
||||
if ($item->qty_to_refund > 0 && $item->order->status !== self::STATUS_CLOSED) {
|
||||
|
|
@ -302,4 +307,4 @@ class Order extends Model implements OrderContract
|
|||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@ Route::group(['middleware' => ['web', 'locale', 'theme', 'currency']], function
|
|||
Route::get('addresses/default/{id}', 'Webkul\Customer\Http\Controllers\AddressController@makeDefault')->name('make.default.address');
|
||||
|
||||
//Customer Address Delete
|
||||
Route::get('addresses/delete/{id}', 'Webkul\Customer\Http\Controllers\AddressController@destroy')->name('address.delete');
|
||||
Route::delete('addresses/delete/{id}', 'Webkul\Customer\Http\Controllers\AddressController@destroy')->name('address.delete');
|
||||
|
||||
/* Wishlist route */
|
||||
//Customer wishlist(listing)
|
||||
|
|
@ -281,7 +281,7 @@ Route::group(['middleware' => ['web', 'locale', 'theme', 'currency']], function
|
|||
'view' => 'shop::customers.account.orders.print'
|
||||
])->name('customer.orders.print');
|
||||
|
||||
Route::get('/orders/cancel/{id}', 'Webkul\Shop\Http\Controllers\OrderController@cancel')->name('customer.orders.cancel');
|
||||
Route::post('/orders/cancel/{id}', 'Webkul\Shop\Http\Controllers\OrderController@cancel')->name('customer.orders.cancel');
|
||||
|
||||
/* Reviews route */
|
||||
//Customer reviews
|
||||
|
|
@ -290,12 +290,12 @@ Route::group(['middleware' => ['web', 'locale', 'theme', 'currency']], function
|
|||
])->name('customer.reviews.index');
|
||||
|
||||
//Customer review delete
|
||||
Route::get('reviews/delete/{id}', 'Webkul\Shop\Http\Controllers\ReviewController@destroy')->defaults('_config', [
|
||||
Route::delete('reviews/delete/{id}', 'Webkul\Shop\Http\Controllers\ReviewController@destroy')->defaults('_config', [
|
||||
'redirect' => 'customer.reviews.index'
|
||||
])->name('customer.review.delete');
|
||||
|
||||
//Customer all review delete
|
||||
Route::get('reviews/all-delete', 'Webkul\Shop\Http\Controllers\ReviewController@deleteAll')->defaults('_config', [
|
||||
Route::delete('reviews/all-delete', 'Webkul\Shop\Http\Controllers\ReviewController@deleteAll')->defaults('_config', [
|
||||
'redirect' => 'customer.reviews.index'
|
||||
])->name('customer.review.deleteall');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -391,7 +391,16 @@ return [
|
|||
|
||||
'view' => [
|
||||
'page-tile' => '#:id مراجعة',
|
||||
]
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => 'هل أنت متأكد أنك تريد حذف هذه المراجعة؟',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'حذف الكل',
|
||||
'confirmation-message' => 'هل أنت متأكد أنك تريد حذف جميع المراجعات؟',
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -388,7 +388,16 @@ return [
|
|||
|
||||
'view' => [
|
||||
'page-tile' => 'Bewertung #:id',
|
||||
]
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => 'Möchten Sie diese Bewertung wirklich löschen?',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'Alles löschen',
|
||||
'confirmation-message' => 'Möchten Sie wirklich alle Bewertungen löschen?',
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -387,12 +387,22 @@ return [
|
|||
'review' => [
|
||||
'index' => [
|
||||
'title' => 'Reviews',
|
||||
'page-title' => 'Reviews'
|
||||
'page-title' => 'Reviews',
|
||||
|
||||
],
|
||||
|
||||
'view' => [
|
||||
'page-tile' => 'Review #:id',
|
||||
]
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => 'Are you sure you want to delete this review?',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'Delete All',
|
||||
'confirmation-message' => 'Are you sure you want to delete all the reviews?',
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -391,7 +391,16 @@ return [
|
|||
|
||||
'view' => [
|
||||
'page-tile' => 'Opinión #:id',
|
||||
]
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => '¿Seguro que quieres eliminar esta crítica?',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'Eliminar todos',
|
||||
'confirmation-message' => '¿Estás segura de que quieres eliminar todas las críticas?',
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -387,7 +387,16 @@ return [
|
|||
|
||||
'view' => [
|
||||
'page-tile' => '#:id بررسی',
|
||||
]
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => 'آیا شما مطمئن هستید که می خواهید این نظر را حذف کنید؟',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'حذف همه',
|
||||
'confirmation-message' => 'آیا مطمئن هستید که می خواهید همه بررسی ها را حذف کنید؟',
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -0,0 +1,739 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'invalid_vat_format' => 'L\'identifiant de TVA donné a un format incorrect',
|
||||
'security-warning' => 'Activité suspecte détectée !!!',
|
||||
'nothing-to-delete' => 'Rien à supprimer',
|
||||
|
||||
'layouts' => [
|
||||
'my-account' => 'Mon compte',
|
||||
'profile' => 'Profil',
|
||||
'address' => 'Adresse',
|
||||
'reviews' => 'Commentaires',
|
||||
'wishlist' => 'Liste de souhaits',
|
||||
'orders' => 'Ordres',
|
||||
'downloadable-products' => 'Produits téléchargeables',
|
||||
],
|
||||
|
||||
'common' => [
|
||||
'error' => 'Quelque chose c\'est mal passé. Merci d\'essayer plus tard.',
|
||||
'image-upload-limit' => 'La taille maximale de téléchargement de l\'image est de 2 Mo',
|
||||
'no-result-found' => 'Nous n\'avons pu trouver aucun enregistrement.',
|
||||
],
|
||||
|
||||
'home' => [
|
||||
'page-title' => 'APP_NAME - Accueil',
|
||||
'featured-products' => 'Produits populaires',
|
||||
'new-products' => 'Nouveaux produits',
|
||||
'verify-email' => 'Vérifiez votre compte de messagerie',
|
||||
'resend-verify-email' => 'Renvoyer l\'e-mail de vérification',
|
||||
],
|
||||
|
||||
'header' => [
|
||||
'title' => 'Compte',
|
||||
'dropdown-text' => 'Gérer le panier, les commandes et la liste de souhaits',
|
||||
'sign-in' => 'S\'identifier',
|
||||
'sign-up' => 'S\'inscrire',
|
||||
'account' => 'Compte',
|
||||
'cart' => 'Chariot',
|
||||
'profile' => 'Profil',
|
||||
'wishlist' => 'Liste de souhaits',
|
||||
'logout' => 'Se déconnecter',
|
||||
'search-text' => 'Rechercher des produits ici',
|
||||
],
|
||||
|
||||
'minicart' => [
|
||||
'view-cart' => 'Voir Panier d\'achat',
|
||||
'checkout' => 'Vérifier',
|
||||
'cart' => 'Chariot',
|
||||
'zero' => '0',
|
||||
],
|
||||
|
||||
'footer' => [
|
||||
'subscribe-newsletter' => 'Abonnez-vous à la newsletter',
|
||||
'subscribe' => 'S\'abonner',
|
||||
'locale' => 'Lieu',
|
||||
'currency' => 'Devise',
|
||||
],
|
||||
|
||||
'subscription' => [
|
||||
'unsubscribe' => 'Se désinscrire',
|
||||
'subscribe' => 'S\'abonner',
|
||||
'subscribed' => 'Vous êtes maintenant abonné aux e-mails d\'abonnement.',
|
||||
'not-subscribed' => 'Erreur! Le courrier ne peut pas être envoyé actuellement, veuillez réessayer plus tard.',
|
||||
'already' => 'Vous êtes déjà inscrit à notre liste d\'abonnement.',
|
||||
'unsubscribed' => 'Vous êtes désabonné des mails d\'abonnement.',
|
||||
'already-unsub' => 'Vous êtes déjà désabonné.',
|
||||
],
|
||||
|
||||
'search' => [
|
||||
'no-results' => 'Aucun résultat trouvé',
|
||||
'page-title' => 'APP_NAME - Rechercher',
|
||||
'found-results' => 'Résultats de la recherche trouvés',
|
||||
'found-result' => 'Résultat de la recherche trouvé',
|
||||
'analysed-keywords' => 'Mots-clés analysés',
|
||||
'image-search-option' => 'Option de recherche d\'images',
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
'title' => 'Titre',
|
||||
'add-review-page-title' => 'Ajouter un commentaire',
|
||||
'write-review' => 'Écrire une critique',
|
||||
'review-title' => 'Donnez un titre à votre avis',
|
||||
'product-review-page-title' => 'Évaluation du produit',
|
||||
'rating-reviews' => 'Évaluation et commentaires',
|
||||
'submit' => 'NOUS FAIRE PARVENIR',
|
||||
'delete-all' => 'Tous les avis ont été supprimés avec succès',
|
||||
'ratingreviews' => ':rating Notes & :review Avis',
|
||||
'star' => 'Star',
|
||||
'percentage' => ':percentage %',
|
||||
'id-star' => 'Star',
|
||||
'name' => 'Nom',
|
||||
],
|
||||
|
||||
'customer' => [
|
||||
'compare' => [
|
||||
'text' => 'Comparer',
|
||||
'compare_similar_items' => 'Comparer des articles similaires',
|
||||
'add-tooltip' => 'Ajouter un produit à la liste de comparaison',
|
||||
'added' => 'Article ajouté avec succès à la liste de comparaison',
|
||||
'already_added' => 'Article déjà ajouté à la liste de comparaison',
|
||||
'removed' => 'Article supprimé avec succès de la liste de comparaison',
|
||||
'removed-all' => 'Tous les éléments ont été supprimés avec succès de la liste de comparaison',
|
||||
'empty-text' => 'Vous n\'avez aucun article dans votre liste de comparaison',
|
||||
'product_image' => 'Image du produit',
|
||||
'actions' => 'Actions',
|
||||
],
|
||||
|
||||
'signup-text' => [
|
||||
'account_exists' => 'Vous avez déjà un compte',
|
||||
'title' => 'S\'identifier',
|
||||
],
|
||||
|
||||
'signup-form' => [
|
||||
'page-title' => 'Créer un nouveau compte client',
|
||||
'title' => 'S\'inscrire',
|
||||
'firstname' => 'Prénom',
|
||||
'lastname' => 'Nom de famille',
|
||||
'email' => 'E-mail',
|
||||
'password' => 'Mot de passe',
|
||||
'confirm_pass' => 'Confirmez le mot de passe',
|
||||
'button_title' => 'S\'inscrire',
|
||||
'agree' => 'Accepter',
|
||||
'terms' => 'termes',
|
||||
'conditions' => 'Conditions',
|
||||
'using' => 'en utilisant ce site',
|
||||
'agreement' => 'Accord',
|
||||
'subscribe-to-newsletter' => 'S\'inscrire à la Newsletter',
|
||||
'success' => 'Compte créé avec succès.',
|
||||
'success-verify' => 'Compte créé avec succès, un e-mail a été envoyé pour vérification.',
|
||||
'success-verify-email-unsent' => 'Compte créé avec succès, mais e-mail de vérification non envoyé.',
|
||||
'failed' => 'Erreur! Impossible de créer votre compte, veuillez réessayer plus tard.',
|
||||
'already-verified' => 'Votre compte est déjà vérifié Ou veuillez réessayer d\'envoyer un nouvel e-mail de vérification.',
|
||||
'verification-not-sent' => 'Erreur! Problème lors de l\'envoi de l\'e-mail de vérification, veuillez réessayer ultérieurement.',
|
||||
'verification-sent' => 'L\'email de vérification a été envoyé',
|
||||
'verified' => 'Votre compte a été vérifié, essayez de vous connecter maintenant.',
|
||||
'verify-failed' => 'Nous ne pouvons pas vérifier votre compte de messagerie.',
|
||||
'dont-have-account' => 'Vous n\'avez pas de compte chez nous.',
|
||||
'customer-registration' => 'Client enregistré avec succès',
|
||||
],
|
||||
|
||||
'login-text' => [
|
||||
'no_account' => 'Ne pas avoir de compte',
|
||||
'title' => 'S\'inscrire',
|
||||
],
|
||||
|
||||
'login-form' => [
|
||||
'page-title' => 'Connexion client',
|
||||
'title' => 'S\'identifier',
|
||||
'email' => 'E-mail',
|
||||
'password' => 'Mot de passe',
|
||||
'forgot_pass' => 'Mot de passe oublié?',
|
||||
'button_title' => 'S\'identifier',
|
||||
'remember' => 'Souviens-toi de moi',
|
||||
'footer' => '© Copyright :year Webkul Software, Tous droits réservés',
|
||||
'invalid-creds' => 'Veuillez vérifier vos informations d\'identification et réessayer.',
|
||||
'verify-first' => 'Vérifiez d\'abord votre compte de messagerie.',
|
||||
'not-activated' => 'Votre activation demande l\'approbation de l\'administrateur',
|
||||
'resend-verification' => 'Renvoyer à nouveau l\'e-mail de vérification',
|
||||
],
|
||||
|
||||
'forgot-password' => [
|
||||
'title' => 'Récupérer mot de passe',
|
||||
'email' => 'E-mail',
|
||||
'submit' => 'Envoyer un e-mail de réinitialisation du mot de passe',
|
||||
'page_title' => 'Mot de passe oublié ?',
|
||||
],
|
||||
|
||||
'reset-password' => [
|
||||
'title' => 'réinitialiser le mot de passe',
|
||||
'email' => 'Email enregistré',
|
||||
'password' => 'Mot de passe',
|
||||
'confirm-password' => 'Confirmez le mot de passe',
|
||||
'back-link-title' => 'Retour à la connexion',
|
||||
'submit-btn-title' => 'réinitialiser le mot de passe',
|
||||
],
|
||||
|
||||
'account' => [
|
||||
'dashboard' => 'Editer le profil',
|
||||
'menu' => 'Menu',
|
||||
|
||||
'general' => [
|
||||
'no' => 'Non',
|
||||
'yes' => 'Oui',
|
||||
],
|
||||
|
||||
'profile' => [
|
||||
'index' => [
|
||||
'page-title' => 'Profil',
|
||||
'title' => 'Profil',
|
||||
'edit' => 'Éditer',
|
||||
],
|
||||
|
||||
'edit-success' => 'Mise à jour du profil réussie.',
|
||||
'edit-fail' => 'Erreur! Le profil ne peut pas être mis à jour, veuillez réessayer plus tard.',
|
||||
'unmatch' => 'L\'ancien mot de passe ne correspond pas.',
|
||||
'fname' => 'Prénom',
|
||||
'lname' => 'Nom de famille',
|
||||
'gender' => 'Genre',
|
||||
'other' => 'Autre',
|
||||
'male' => 'Homme',
|
||||
'female' => 'Femelle',
|
||||
'dob' => 'Date de naissance',
|
||||
'phone' => 'Téléphoner',
|
||||
'email' => 'E-mail',
|
||||
'opassword' => 'ancien mot de passe',
|
||||
'password' => 'Mot de passe',
|
||||
'cpassword' => 'Confirmez le mot de passe',
|
||||
'submit' => 'Mettre à jour le profil',
|
||||
|
||||
'edit-profile' => [
|
||||
'title' => 'Editer le profil',
|
||||
'page-title' => 'Editer le profil',
|
||||
],
|
||||
],
|
||||
|
||||
'address' => [
|
||||
'index' => [
|
||||
'page-title' => 'Adresse',
|
||||
'title' => 'Adresse',
|
||||
'add' => 'Ajoutez l\'adresse',
|
||||
'edit' => 'Éditer',
|
||||
'empty' => 'Vous n\'avez aucune adresse enregistrée ici, veuillez essayer de la créer en cliquant sur le bouton Ajouter.',
|
||||
'create' => 'Créer une adresse',
|
||||
'delete' => 'Effacer',
|
||||
'make-default' => 'Faire défaut',
|
||||
'default' => 'Défaut',
|
||||
'contact' => 'Contacter',
|
||||
'confirm-delete' => 'Voulez-vous vraiment supprimer cette adresse ?',
|
||||
'default-delete' => 'L\'adresse par défaut ne peut pas être modifiée.',
|
||||
'enter-password' => 'Tapez votre mot de passe.',
|
||||
],
|
||||
|
||||
'create' => [
|
||||
'page-title' => 'Ajoutez l\'adresse',
|
||||
'company_name' => 'Nom de la compagnie',
|
||||
'first_name' => 'Prénom',
|
||||
'last_name' => 'Nom de famille',
|
||||
'vat_id' => 'Identifiant de TVA',
|
||||
'vat_help_note' => '[Remarque : Utilisez le code de pays avec l\'identifiant de TVA. Par exemple. INV01234567891]',
|
||||
'title' => 'Ajoutez l\'adresse',
|
||||
'street-address' => 'Adresse de rue',
|
||||
'country' => 'Pays',
|
||||
'state' => 'État',
|
||||
'select-state' => 'Sélectionnez une région, un état ou une province',
|
||||
'city' => 'Ville',
|
||||
'postcode' => 'code postal',
|
||||
'phone' => 'Téléphoner',
|
||||
'submit' => 'Enregistrer l\'adresse',
|
||||
'success' => 'L\'adresse a été ajoutée avec succès.',
|
||||
'error' => 'L\'adresse ne peut pas être ajoutée.',
|
||||
],
|
||||
|
||||
'edit' => [
|
||||
'page-title' => 'Modifier l\'adresse',
|
||||
'company_name' => 'Nom de la compagnie',
|
||||
'first_name' => 'Prénom',
|
||||
'last_name' => 'Nom de famille',
|
||||
'vat_id' => 'Identifiant de TVA',
|
||||
'title' => 'Modifier l\'adresse',
|
||||
'street-address' => 'Adresse de rue',
|
||||
'submit' => 'Enregistrer l\'adresse',
|
||||
'success' => 'Adresse mise à jour avec succès.',
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'success' => 'Adresse supprimée avec succès',
|
||||
'failure' => 'L\'adresse ne peut pas être supprimée',
|
||||
'wrong-password' => 'Mauvais mot de passe !',
|
||||
],
|
||||
|
||||
'default-address' => 'Adresse par défaut',
|
||||
],
|
||||
|
||||
'order' => [
|
||||
'index' => [
|
||||
'page-title' => 'Ordres',
|
||||
'title' => 'Ordres',
|
||||
'order_id' => 'numéro de commande',
|
||||
'date' => 'Date',
|
||||
'status' => 'Statut',
|
||||
'total' => 'Le total',
|
||||
'order_number' => 'Numéro de commande',
|
||||
'processing' => 'Traitement',
|
||||
'completed' => 'Complété',
|
||||
'canceled' => 'Annulé',
|
||||
'closed' => 'Fermé',
|
||||
'pending' => 'En attente',
|
||||
'pending-payment' => 'En attente de paiement',
|
||||
'fraud' => 'Fraude',
|
||||
],
|
||||
|
||||
'view' => [
|
||||
'page-tile' => 'N° de commande :order_id',
|
||||
'info' => 'Informations',
|
||||
'placed-on' => 'Placé sur',
|
||||
'products-ordered' => 'Produits commandés',
|
||||
'invoices' => 'Factures',
|
||||
'shipments' => 'Expéditions',
|
||||
'SKU' => 'UGS',
|
||||
'product-name' => 'Nom',
|
||||
'qty' => 'Qté',
|
||||
'item-status' => 'Statut de l\'article',
|
||||
'item-ordered' => 'Commandé (:qty_ordered]',
|
||||
'item-invoice' => 'Facturé (:qty_invoiced]',
|
||||
'item-shipped' => 'expédié (:qty_shipped]',
|
||||
'item-canceled' => 'Annulé (:qty_cancelled]',
|
||||
'item-refunded' => 'Remboursé (:qty_refunded]',
|
||||
'price' => 'Prix',
|
||||
'total' => 'Le total',
|
||||
'subtotal' => 'Total',
|
||||
'shipping-handling' => 'Expédition et manutention',
|
||||
'tax' => 'Impôt',
|
||||
'discount' => 'Rabais',
|
||||
'tax-percent' => 'Pourcentage d\'impôt',
|
||||
'tax-amount' => 'Montant de la taxe',
|
||||
'discount-amount' => 'Montant de la remise',
|
||||
'grand-total' => 'Total',
|
||||
'total-paid' => 'Total payé',
|
||||
'total-refunded' => 'Total remboursé',
|
||||
'total-due' => 'Total dû',
|
||||
'shipping-address' => 'adresse de livraison',
|
||||
'billing-address' => 'adresse de facturation',
|
||||
'shipping-method' => 'Mode de livraison',
|
||||
'payment-method' => 'Mode de paiement',
|
||||
'individual-invoice' => 'Facture # :invoice_id',
|
||||
'individual-shipment' => 'N° d\'expédition :shipment_id',
|
||||
'print' => 'Imprimer',
|
||||
'invoice-id' => 'Identifiant de la facture',
|
||||
'order-id' => 'Numéro de commande',
|
||||
'order-date' => 'Date de commande',
|
||||
'invoice-date' => 'Date de la facture',
|
||||
'payment-terms' => 'Modalités de paiement',
|
||||
'bill-to' => 'facturer',
|
||||
'ship-to' => 'Envoyez à',
|
||||
'contact' => 'Contacter',
|
||||
'refunds' => 'Remboursements',
|
||||
'individual-refund' => 'Remboursement #:refund_id',
|
||||
'adjustment-refund' => 'Ajustement Remboursement',
|
||||
'adjustment-fee' => 'Frais d\'ajustement',
|
||||
'cancel-btn-title' => 'Annuler',
|
||||
'tracking-number' => 'Numéro de suivi',
|
||||
'cancel-confirm-msg' => 'Êtes-vous sûr de vouloir annuler cette commande ?',
|
||||
],
|
||||
],
|
||||
|
||||
'wishlist' => [
|
||||
'page-title' => 'Liste de souhaits',
|
||||
'title' => 'Liste de souhaits',
|
||||
'deleteall' => 'Tout supprimer',
|
||||
'moveall' => 'Déplacer tous les produits vers le panier',
|
||||
'move-to-cart' => 'Passer au panier',
|
||||
'error' => 'Impossible d\'ajouter le produit à la liste de souhaits en raison de problèmes inconnus, veuillez vérifier plus tard',
|
||||
'add' => 'Article ajouté avec succès à la liste de souhaits',
|
||||
'remove' => 'Article supprimé avec succès de la liste de souhaits',
|
||||
'add-wishlist-text' => 'Ajouter un produit à la liste de souhaits',
|
||||
'remove-wishlist-text' => 'Supprimer le produit de la liste de souhaits',
|
||||
'moved' => 'Article déplacé avec succès Vers le panier',
|
||||
'option-missing' => 'Les options du produit sont manquantes, l\'article ne peut donc pas être déplacé vers la liste de souhaits.',
|
||||
'move-error' => 'L\'article ne peut pas être déplacé vers la liste de souhaits, veuillez réessayer plus tard',
|
||||
'success' => 'Article ajouté avec succès à la liste de souhaits',
|
||||
'failure' => 'L\'article ne peut pas être ajouté à la liste de souhaits, veuillez réessayer plus tard',
|
||||
'already' => 'Article déjà présent dans votre wishlist',
|
||||
'removed' => 'Article supprimé avec succès de la liste de souhaits',
|
||||
'remove-fail' => 'L\'article ne peut pas être supprimé de la liste de souhaits, veuillez réessayer plus tard',
|
||||
'empty' => 'Vous n\'avez aucun article dans votre liste de souhaits',
|
||||
'remove-all-success' => 'Tous les articles de votre liste de souhaits ont été supprimés',
|
||||
],
|
||||
|
||||
'downloadable_products' => [
|
||||
'title' => 'Produits téléchargeables',
|
||||
'order-id' => 'Numéro de commande',
|
||||
'date' => 'Date',
|
||||
'name' => 'Titre',
|
||||
'status' => 'Statut',
|
||||
'pending' => 'En attente',
|
||||
'available' => 'Disponible',
|
||||
'expired' => 'Expiré',
|
||||
'remaining-downloads' => 'Téléchargements restants',
|
||||
'unlimited' => 'Illimité',
|
||||
'download-error' => 'Le lien de téléchargement a expiré.',
|
||||
'payment-error' => 'Le paiement n\'a pas été effectué pour ce téléchargement.',
|
||||
],
|
||||
|
||||
'review' => [
|
||||
'index' => [
|
||||
'title' => 'Commentaires',
|
||||
'page-title' => 'Commentaires',
|
||||
],
|
||||
|
||||
'view' => [
|
||||
'page-tile' => 'Avis n° :id',
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => 'Êtes-vous sûr de vouloir supprimer cet avis ?',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'Tout supprimer',
|
||||
'confirmation-message' => 'Êtes-vous sûr de vouloir supprimer tous les avis ?',
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'products' => [
|
||||
'layered-nav-title' => 'Magasiner par',
|
||||
'price-label' => 'Aussi bas que',
|
||||
'remove-filter-link-title' => 'Tout effacer',
|
||||
'filter-to' => 'à',
|
||||
'sort-by' => 'Trier par',
|
||||
'from-a-z' => 'De A à Z',
|
||||
'from-z-a' => 'De Z-A',
|
||||
'newest-first' => 'Le plus récent d\'abord',
|
||||
'oldest-first' => 'Le plus vieux d\'abord',
|
||||
'cheapest-first' => 'Le moins cher d\'abord',
|
||||
'expensive-first' => 'Cher d\'abord',
|
||||
'show' => 'Spectacle',
|
||||
'pager-info' => 'Affichage :showing de :total Articles',
|
||||
'description' => 'La description',
|
||||
'specification' => 'spécification',
|
||||
'total-reviews' => ':total des avis',
|
||||
'total-rating' => ':total_rating Notes & :total_reviews Avis',
|
||||
'by' => 'De :name',
|
||||
'up-sell-title' => 'Nous avons trouvé d\'autres produits qui pourraient vous plaire !',
|
||||
'related-product-title' => 'Produits connexes',
|
||||
'cross-sell-title' => 'Plus de choix',
|
||||
'reviews-title' => 'Évaluations et commentaires',
|
||||
'write-review-btn' => 'Ecrire une critique',
|
||||
'choose-option' => 'Choisis une option',
|
||||
'sale' => 'Vente',
|
||||
'new' => 'Nouveau',
|
||||
'empty' => 'Aucun produit disponible dans cette catégorie',
|
||||
'add-to-cart' => 'Ajouter au panier',
|
||||
'book-now' => 'Reserve maintenant',
|
||||
'buy-now' => 'Acheter maintenant',
|
||||
'whoops' => 'Oups !',
|
||||
'quantity' => 'Quantité',
|
||||
'in-stock' => 'En stock',
|
||||
'out-of-stock' => 'En rupture de stock',
|
||||
'view-all' => 'Voir tout',
|
||||
'select-above-options' => 'Veuillez d\'abord sélectionner les options ci-dessus.',
|
||||
'less-quantity' => 'La quantité ne peut pas être inférieure à un.',
|
||||
'samples' => 'Échantillons',
|
||||
'links' => 'Liens',
|
||||
'sample' => 'Goûter',
|
||||
'name' => 'Nom',
|
||||
'qty' => 'Qté',
|
||||
'starting-at' => 'À partir de',
|
||||
'customize-options' => 'Personnaliser les options',
|
||||
'choose-selection' => 'Choisissez une sélection',
|
||||
'your-customization' => 'Votre personnalisation',
|
||||
'total-amount' => 'Montant total',
|
||||
'none' => 'Rien',
|
||||
'available-for-order' => 'Disponible à la commande',
|
||||
'settings' => 'Paramètres',
|
||||
'compare_options' => 'Comparer les options',
|
||||
'wishlist-options' => 'Options de liste de souhaits',
|
||||
'offers' => 'Achetez :qty pour :price chacun et économisez :discount%',
|
||||
'tax-inclusive' => 'Toutes taxes comprises',
|
||||
],
|
||||
|
||||
'buynow' => [
|
||||
'no-options' => 'Veuillez sélectionner des options avant d\'acheter ce produit.',
|
||||
],
|
||||
|
||||
'checkout' => [
|
||||
'cart' => [
|
||||
'integrity' => [
|
||||
'missing_fields' => 'Certains champs obligatoires sont manquants pour ce produit.',
|
||||
'missing_options' => 'Il manque des options pour ce produit.',
|
||||
'missing_links' => 'Il manque des liens téléchargeables pour ce produit.',
|
||||
'qty_missing' => 'Au moins un produit doit avoir plus d\'une quantité.',
|
||||
'qty_impossible' => 'Impossible d\'ajouter plus d\'un de ces produits au panier.',
|
||||
],
|
||||
|
||||
'create-error' => 'J\'ai rencontré un problème lors de la création d\'une instance de panier.',
|
||||
'title' => 'Panier',
|
||||
'empty' => 'Votre panier est vide',
|
||||
'update-cart' => 'Mise à jour panier',
|
||||
'continue-shopping' => 'Continuer vos achats',
|
||||
'proceed-to-checkout' => 'Passer à la caisse',
|
||||
'remove' => 'Supprimer',
|
||||
'remove-link' => 'Supprimer',
|
||||
'move-to-wishlist' => 'Placer dans la liste de souhaits',
|
||||
'move-to-wishlist-success' => 'L\'article a été déplacé vers la liste de souhaits avec succès.',
|
||||
'move-to-wishlist-error' => 'Impossible de déplacer l\'élément vers la liste de souhaits, veuillez réessayer plus tard.',
|
||||
'add-config-warning' => 'Veuillez sélectionner l\'option avant d\'ajouter au panier.',
|
||||
|
||||
'quantity' => [
|
||||
'quantity' => 'Quantité',
|
||||
'success' => 'Article(s) du panier mis à jour avec succès.',
|
||||
'illegal' => 'La quantité ne peut pas être inférieure à un.',
|
||||
'inventory_warning' => 'La quantité demandée n\'est pas disponible, veuillez réessayer plus tard.',
|
||||
'error' => 'Impossible de mettre à jour le ou les éléments pour le moment, veuillez réessayer plus tard.',
|
||||
],
|
||||
|
||||
'item' => [
|
||||
'error_remove' => 'Aucun article à retirer du panier.',
|
||||
'success' => 'L\'article a été ajouté au panier avec succès.',
|
||||
'success-remove' => 'L\'article a été supprimé avec succès du panier.',
|
||||
'error-add' => 'L\'article ne peut pas être ajouté au panier, veuillez réessayer plus tard.',
|
||||
'inactive' => 'Un article est inactif et a été supprimé du panier.',
|
||||
'inactive-add' => 'L\'article inactif ne peut pas être ajouté au panier.',
|
||||
],
|
||||
|
||||
'quantity-error' => 'La quantité demandée n\'est pas disponible.',
|
||||
'cart-subtotal' => 'Sous-total du panier',
|
||||
'cart-remove-action' => 'Veux-tu vraiment faire ça ?',
|
||||
'partial-cart-update' => 'Seuls certains produits ont été mis à jour',
|
||||
'link-missing' => ' ',
|
||||
|
||||
'event' => [
|
||||
'expired' => 'Cet événement a expiré.',
|
||||
],
|
||||
|
||||
'minimum-order-message' => 'Le montant minimum de commande est de :amount',
|
||||
],
|
||||
|
||||
'onepage' => [
|
||||
'title' => 'Vérifier',
|
||||
'information' => 'Informations',
|
||||
'shipping' => 'Expédition',
|
||||
'payment' => 'Paiement',
|
||||
'complete' => 'Compléter',
|
||||
'review' => 'Revoir',
|
||||
'billing-address' => 'adresse de facturation',
|
||||
'sign-in' => 'S\'identifier',
|
||||
'company-name' => 'Nom de la compagnie',
|
||||
'first-name' => 'Prénom',
|
||||
'last-name' => 'Nom de famille',
|
||||
'email' => 'E-mail',
|
||||
'address1' => 'Adresse de rue',
|
||||
'city' => 'Ville',
|
||||
'state' => 'État',
|
||||
'select-state' => 'Sélectionnez une région, un état ou une province',
|
||||
'postcode' => 'Code postal/Zip',
|
||||
'phone' => 'Téléphone',
|
||||
'country' => 'Pays',
|
||||
'order-summary' => 'Récapitulatif de la commande',
|
||||
'shipping-address' => 'adresse de livraison',
|
||||
'use_for_shipping' => 'Envoyer à cette adresse',
|
||||
'continue' => 'Continuer',
|
||||
'shipping-method' => 'Sélectionnez le mode de livraison',
|
||||
'payment-methods' => 'Sélectionnez le mode de paiement',
|
||||
'payment-method' => 'Mode de paiement',
|
||||
'summary' => 'Récapitulatif de la commande',
|
||||
'price' => 'Prix',
|
||||
'quantity' => 'Quantité',
|
||||
'contact' => 'Contacter',
|
||||
'place-order' => 'Passer la commande',
|
||||
'new-address' => 'Ajouter une nouvelle adresse',
|
||||
'save_as_address' => 'Enregistrer cette adresse',
|
||||
'apply-coupon' => 'Appliquer Coupon',
|
||||
'amt-payable' => 'Montant payable',
|
||||
'got' => 'A obtenu',
|
||||
'free' => 'Libérer',
|
||||
'coupon-used' => 'Coupon utilisé',
|
||||
'applied' => 'Appliqué',
|
||||
'back' => 'Dos',
|
||||
'cash-desc' => 'Paiement à la livraison',
|
||||
'money-desc' => 'Transfert d\'argent',
|
||||
'paypal-desc' => 'Norme Paypal',
|
||||
'free-desc' => 'Ceci est une livraison gratuite',
|
||||
'flat-desc' => 'Il s\'agit d\'un forfait',
|
||||
'password' => 'Mot de passe',
|
||||
'login-exist-message' => 'Vous avez déjà un compte chez nous, connectez-vous ou continuez en tant qu\'invité.',
|
||||
'enter-coupon-code' => 'Entrer le code promotionnel',
|
||||
],
|
||||
|
||||
'total' => [
|
||||
'order-summary' => 'Récapitulatif de la commande',
|
||||
'sub-total' => 'Articles',
|
||||
'grand-total' => 'Total',
|
||||
'delivery-charges' => 'Frais de livraison',
|
||||
'tax' => 'Impôt',
|
||||
'discount' => 'Rabais',
|
||||
'price' => 'le prix',
|
||||
'disc-amount' => 'Montant escompté',
|
||||
'new-grand-total' => 'Nouveau total général',
|
||||
'coupon' => 'Coupon',
|
||||
'coupon-applied' => 'Coupon appliqué',
|
||||
'remove-coupon' => 'Supprimer le coupon',
|
||||
'cannot-apply-coupon' => 'Impossible d\'appliquer le coupon',
|
||||
'invalid-coupon' => 'Le code promo n\'est pas valide.',
|
||||
'success-coupon' => 'Code promo appliqué avec succès.',
|
||||
'coupon-apply-issue' => 'Le code promo ne peut pas être appliqué.',
|
||||
],
|
||||
|
||||
'success' => [
|
||||
'title' => 'Commande passée avec succès',
|
||||
'thanks' => 'Nous vous remercions de votre commande!',
|
||||
'order-id-info' => 'Votre identifiant de commande est #:order_id',
|
||||
'info' => 'Nous vous enverrons un e-mail, les détails de votre commande et les informations de suivi',
|
||||
],
|
||||
],
|
||||
|
||||
'mail' => [
|
||||
'order' => [
|
||||
'subject' => 'Confirmation de nouvelle commande',
|
||||
'heading' => 'Confirmation de commande!',
|
||||
'dear' => 'Cher :customer_name',
|
||||
'dear-admin' => 'Cher :admin_name',
|
||||
'greeting' => 'Merci pour votre commande :order_id passée sur :created_at',
|
||||
'greeting-admin' => 'Id de commande :order_id placé sur :created_at',
|
||||
'summary' => 'Résumé de la commande',
|
||||
'shipping-address' => 'adresse de livraison',
|
||||
'billing-address' => 'adresse de facturation',
|
||||
'contact' => 'Contacter',
|
||||
'shipping' => 'Mode de livraison',
|
||||
'payment' => 'Mode de paiement',
|
||||
'price' => 'Prix',
|
||||
'quantity' => 'Quantité',
|
||||
'subtotal' => 'Total',
|
||||
'shipping-handling' => 'Expédition et manutention',
|
||||
'tax' => 'Impôt',
|
||||
'discount' => 'Rabais',
|
||||
'grand-total' => 'Total',
|
||||
'final-summary' => 'Merci d\'avoir montré votre intérêt pour notre magasin, nous vous enverrons un numéro de suivi une fois expédié',
|
||||
'help' => 'Si vous avez besoin d\'aide, veuillez nous contacter à l\'adresse :support_email',
|
||||
'thanks' => 'Merci!',
|
||||
|
||||
'comment' => [
|
||||
'subject' => 'Nouveau commentaire ajouté à votre commande #:order_id',
|
||||
'dear' => 'Cher :customer_name',
|
||||
'final-summary' => 'Merci de montrer votre intérêt pour notre magasin',
|
||||
'help' => 'Si vous avez besoin d\'aide, veuillez nous contacter à l\'adresse :support_email',
|
||||
'thanks' => 'Merci!',
|
||||
],
|
||||
|
||||
'cancel' => [
|
||||
'subject' => 'Confirmation d\'annulation de commande',
|
||||
'heading' => 'Commande annulée',
|
||||
'dear' => 'Cher :customer_name',
|
||||
'greeting' => 'Votre commande avec l\'identifiant de commande :order_id passée sur :created_at a été annulée',
|
||||
'summary' => 'Résumé de la commande',
|
||||
'shipping-address' => 'adresse de livraison',
|
||||
'billing-address' => 'adresse de facturation',
|
||||
'contact' => 'Contacter',
|
||||
'shipping' => 'Mode de livraison',
|
||||
'payment' => 'Mode de paiement',
|
||||
'subtotal' => 'Total',
|
||||
'shipping-handling' => 'Expédition et manutention',
|
||||
'tax' => 'Impôt',
|
||||
'discount' => 'Rabais',
|
||||
'grand-total' => 'Total',
|
||||
'final-summary' => 'Merci de montrer votre intérêt pour notre magasin',
|
||||
'help' => 'Si vous avez besoin d\'aide, veuillez nous contacter à l\'adresse :support_email',
|
||||
'thanks' => 'Merci!',
|
||||
],
|
||||
],
|
||||
|
||||
'invoice' => [
|
||||
'heading' => 'Votre facture #:invoice_id pour la commande #:order_id',
|
||||
'subject' => 'Facture de votre commande n° :order_id',
|
||||
'summary' => 'Résumé de la facture',
|
||||
],
|
||||
|
||||
'shipment' => [
|
||||
'heading' => 'L\'envoi #:shipment_id a été généré pour la commande #:order_id',
|
||||
'inventory-heading' => 'Un nouvel envoi #:shipment_id a été généré pour la commande #:order_id',
|
||||
'subject' => 'Expédition pour votre commande #:order_id',
|
||||
'inventory-subject' => 'Un nouvel envoi a été généré pour la commande n° :order_id',
|
||||
'summary' => 'Résumé de l\'expédition',
|
||||
'carrier' => 'Transporteur',
|
||||
'tracking-number' => 'Numéro de suivi',
|
||||
'greeting' => 'Une commande :order_id a été passée sur :created_at',
|
||||
],
|
||||
|
||||
'refund' => [
|
||||
'heading' => 'Votre numéro de remboursement :refund_id pour la commande #:order_id',
|
||||
'subject' => 'Remboursement de votre commande #:order_id',
|
||||
'summary' => 'Résumé du remboursement',
|
||||
'adjustment-refund' => 'Ajustement Remboursement',
|
||||
'adjustment-fee' => 'Frais d\'ajustement',
|
||||
],
|
||||
|
||||
'forget-password' => [
|
||||
'subject' => 'Mot de passe de réinitialisation du client',
|
||||
'dear' => 'Cher :name',
|
||||
'info' => 'Vous recevez cet e-mail car nous avons reçu une demande de réinitialisation de mot de passe pour votre compte',
|
||||
'reset-password' => 'réinitialiser le mot de passe',
|
||||
'final-summary' => 'Si vous n\'avez pas demandé de réinitialisation de mot de passe, aucune autre action n\'est requise',
|
||||
'thanks' => 'Merci!',
|
||||
],
|
||||
|
||||
'update-password' => [
|
||||
'subject' => 'Mot de passe mis à jour',
|
||||
'dear' => 'Cher :name',
|
||||
'info' => 'Vous recevez cet e-mail car vous avez mis à jour votre mot de passe.',
|
||||
'thanks' => 'Merci!',
|
||||
],
|
||||
|
||||
'customer' => [
|
||||
'new' => [
|
||||
'dear' => 'Cher :customer_name',
|
||||
'username-email' => 'Nom d\'utilisateur/Email',
|
||||
'subject' => 'Enregistrement d\'un nouveau client',
|
||||
'password' => 'Mot de passe',
|
||||
'summary' => 'Votre compte a été créé. Les détails de votre compte sont ci-dessous :',
|
||||
'thanks' => 'Merci!',
|
||||
],
|
||||
|
||||
'registration' => [
|
||||
'subject' => 'Enregistrement d\'un nouveau client',
|
||||
'customer-registration' => 'Enregistrement d\'un nouveau client',
|
||||
'dear' => 'Cher :customer_name',
|
||||
'greeting' => 'Bienvenue et merci de vous être inscrit chez nous !',
|
||||
'summary' => 'Votre compte a maintenant été créé avec succès et vous pouvez vous connecter en utilisant votre adresse e-mail et votre mot de passe. Une fois connecté, vous pourrez accéder à d\'autres services, notamment consulter les commandes passées, les listes de souhaits et modifier les informations de votre compte.',
|
||||
'thanks' => 'Merci!',
|
||||
],
|
||||
|
||||
'verification' => [
|
||||
'heading' => 'APP_NAME - Vérification des e-mails',
|
||||
'subject' => 'Courrier de vérification',
|
||||
'verify' => 'Vérifiez votre compte',
|
||||
'summary' => 'Ceci est l\'e-mail pour vérifier que l\'adresse e-mail que vous avez saisie est la vôtre.',
|
||||
],
|
||||
|
||||
'subscription' => [
|
||||
'subject' => 'Courriel d\'abonnement',
|
||||
'greeting' => 'Bienvenue dans APP_NAME - Abonnement par e-mail',
|
||||
'unsubscribe' => 'Se désabonner',
|
||||
'summary' => 'Merci de m\'avoir mis dans votre boîte de réception. Cela fait un moment que vous n\'avez pas lu l\'e-mail APP_NAME, et nous ne voulons pas surcharger votre boîte de réception. Si vous ne souhaitez toujours pas recevoir',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'webkul' => [
|
||||
'copy-right' => '© Copyright :year Webkul Software, Tous droits réservés',
|
||||
],
|
||||
|
||||
'response' => [
|
||||
'create-success' => ':name créé avec succès.',
|
||||
'update-success' => ':name mis à jour avec succès.',
|
||||
'delete-success' => ':name supprimé avec succès.',
|
||||
'submit-success' => ':name soumis avec succès.'
|
||||
],
|
||||
];
|
||||
|
|
@ -389,7 +389,16 @@ return [
|
|||
|
||||
'view' => [
|
||||
'page-tile' => 'Recensione #:id',
|
||||
]
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => 'Sei sicuro di voler eliminare questa recensione?',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'Cancella tutto',
|
||||
'confirmation-message' => 'Sei sicuro di voler eliminare tutte le recensioni?',
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -369,7 +369,16 @@ return [
|
|||
|
||||
'view' => [
|
||||
'page-tile' => 'レビュー #:id',
|
||||
]
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => 'このレビューを削除してもよろしいですか?',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'すべて削除',
|
||||
'confirmation-message' => 'すべてのレビューを削除してもよろしいですか?',
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -395,7 +395,16 @@ return [
|
|||
|
||||
'view' => [
|
||||
'page-tile' => 'Recensies #:id',
|
||||
]
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => 'Weet je zeker dat je deze recensie wilt verwijderen?',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'Verwijder alles',
|
||||
'confirmation-message' => 'Weet u zeker dat u alle beoordelingen wilt verwijderen?',
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -389,7 +389,16 @@ return [
|
|||
|
||||
'view' => [
|
||||
'page-tile' => 'Recenzja #:id',
|
||||
]
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => 'Czy na pewno chcesz usunąć tę recenzję?',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'Usuń wszystko',
|
||||
'confirmation-message' => 'Czy na pewno chcesz usunąć wszystkie opinie?',
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -383,7 +383,16 @@ return [
|
|||
|
||||
'view' => [
|
||||
'page-tile' => 'Avaliação #:id',
|
||||
]
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => 'Tem certeza de que deseja excluir este comentário?',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'Apagar tudo',
|
||||
'confirmation-message' => 'Tem certeza de que deseja excluir todos os comentários?',
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -388,7 +388,16 @@ return [
|
|||
|
||||
'view' => [
|
||||
'page-tile' => 'İnceleme #:id',
|
||||
]
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'confirmation-message' => 'Bu incelemeyi silmek istediğinizden emin misiniz?',
|
||||
],
|
||||
|
||||
'delete-all' => [
|
||||
'title' => 'Hepsini sil',
|
||||
'confirmation-message' => 'Tüm yorumları silmek istediğinizden emin misiniz?',
|
||||
],
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -77,18 +77,22 @@
|
|||
</ul>
|
||||
|
||||
<div class="control-links mt-20">
|
||||
<span>
|
||||
<a href="{{ route('customer.address.edit', $address->id) }}">
|
||||
{{ __('shop::app.customer.account.address.index.edit') }}
|
||||
</a>
|
||||
</span>
|
||||
<span>
|
||||
<a href="{{ route('customer.address.edit', $address->id) }}">
|
||||
{{ __('shop::app.customer.account.address.index.edit') }}
|
||||
</a>
|
||||
</span>
|
||||
|
||||
<span>
|
||||
<a href="{{ route('address.delete', $address->id) }}"
|
||||
onclick="deleteAddress('{{ __('shop::app.customer.account.address.index.confirm-delete') }}')">
|
||||
{{ __('shop::app.customer.account.address.index.delete') }}
|
||||
</a>
|
||||
</span>
|
||||
<a href="javascript:void(0);" onclick="deleteAddress('{{ __('shop::app.customer.account.address.index.confirm-delete') }}')">
|
||||
{{ __('shop::app.customer.account.address.index.delete') }}
|
||||
</a>
|
||||
|
||||
<form id="deleteAddressForm" action="{{ route('address.delete', $address->id) }}" method="post">
|
||||
@method('delete')
|
||||
@csrf
|
||||
</form>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -105,8 +109,11 @@
|
|||
@push('scripts')
|
||||
<script>
|
||||
function deleteAddress(message) {
|
||||
if (!confirm(message))
|
||||
event.preventDefault();
|
||||
if (! confirm(message)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$('#deleteAddressForm').submit();
|
||||
}
|
||||
</script>
|
||||
@endpush
|
||||
|
|
|
|||
|
|
@ -21,7 +21,11 @@
|
|||
|
||||
|
||||
@if ($order->canCancel())
|
||||
<a href="{{ route('customer.orders.cancel', $order->id) }}" class="btn btn-lg btn-primary" v-alert:message="'{{ __('shop::app.customer.account.order.view.cancel-confirm-msg') }}'" style="float: right;">
|
||||
<form id="cancelOrderForm" action="{{ route('customer.orders.cancel', $order->id) }}" method="post">
|
||||
@csrf
|
||||
</form>
|
||||
|
||||
<a href="javascript:void(0);" class="btn btn-lg btn-primary" onclick="cancelOrder('{{ __('shop::app.customer.account.order.view.cancel-confirm-msg') }}')" style="float: right;">
|
||||
{{ __('shop::app.customer.account.order.view.cancel-btn-title') }}
|
||||
</a>
|
||||
@endif
|
||||
|
|
@ -560,3 +564,15 @@
|
|||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
function cancelOrder(message) {
|
||||
if (! confirm(message)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$('#cancelOrderForm').submit();
|
||||
}
|
||||
</script>
|
||||
@endpush
|
||||
|
|
@ -17,7 +17,14 @@
|
|||
|
||||
@if (count($reviews) > 1)
|
||||
<div class="account-action">
|
||||
<a href="{{ route('customer.review.deleteall') }}">{{ __('shop::app.customer.account.wishlist.deleteall') }}</a>
|
||||
<form id="deleteAllReviewForm" action="{{ route('customer.review.deleteall') }}" method="post">
|
||||
@method('delete')
|
||||
@csrf
|
||||
</form>
|
||||
|
||||
<a href="javascript:void(0);" onclick="confirm('{{ __('shop::app.customer.account.review.delete-all.confirmation-message') }}') ? document.getElementById('deleteAllReviewForm').submit() : null;">
|
||||
{{ __('shop::app.customer.account.review.delete-all.title') }}
|
||||
</a>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
|
@ -57,9 +64,17 @@
|
|||
</div>
|
||||
|
||||
<div class="operations">
|
||||
<a class="mb-50" href="{{ route('customer.review.delete', $review->id) }}"><span class="icon trash-icon"></span></a>
|
||||
<form id="deleteReviewForm" action="{{ route('customer.review.delete', $review->id) }}" method="post">
|
||||
@method('delete')
|
||||
@csrf
|
||||
</form>
|
||||
|
||||
<a class="mb-50" href="javascript:void(0);" onclick="confirm('{{ __('shop::app.customer.account.review.delete.confirmation-message') }}') ? document.getElementById('deleteReviewForm').submit() : null;">
|
||||
<span class="icon trash-icon"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="horizontal-rule mb-10 mt-10"></div>
|
||||
@endforeach
|
||||
|
||||
|
|
@ -77,4 +92,4 @@
|
|||
{!! view_render_event('bagisto.shop.customers.account.reviews.list.after', ['reviews' => $reviews]) !!}
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
@endsection
|
||||
|
||||
@section('content-wrapper')
|
||||
|
||||
<div class="auth-content">
|
||||
<div class="sign-up-text">
|
||||
{{ __('shop::app.customer.login-text.no_account') }} - <a href="{{ route('customer.register.index') }}">{{ __('shop::app.customer.login-text.title') }}</a>
|
||||
|
|
@ -14,7 +13,9 @@
|
|||
{!! view_render_event('bagisto.shop.customers.login.before') !!}
|
||||
|
||||
<form method="POST" action="{{ route('customer.session.create') }}" @submit.prevent="onSubmit">
|
||||
|
||||
{{ csrf_field() }}
|
||||
|
||||
<div class="login-form">
|
||||
<div class="login-text">{{ __('shop::app.customer.login-form.title') }}</div>
|
||||
|
||||
|
|
@ -32,8 +33,6 @@
|
|||
<span class="control-error" v-if="errors.has('password')">@{{ errors.first('password') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.shop.customers.login_form_controls.after') !!}
|
||||
|
||||
<div class="forgot-password-link">
|
||||
<a href="{{ route('customer.forgot-password.create') }}">{{ __('shop::app.customer.login-form.forgot_pass') }}</a>
|
||||
|
||||
|
|
@ -46,12 +45,25 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
|
||||
{!! Captcha::render() !!}
|
||||
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.shop.customers.login_form_controls.after') !!}
|
||||
|
||||
<input class="btn btn-primary btn-lg" type="submit" value="{{ __('shop::app.customer.login-form.button_title') }}">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
{!! view_render_event('bagisto.shop.customers.login.after') !!}
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
||||
@push('scripts')
|
||||
|
||||
{!! Captcha::renderJS() !!}
|
||||
|
||||
@endpush
|
||||
|
|
@ -59,6 +59,8 @@
|
|||
<span class="control-error" v-if="errors.has('password_confirmation')">@{{ errors.first('password_confirmation') }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.shop.customers.signup_form_controls.password_confirmation.after') !!}
|
||||
|
||||
{{-- <div class="signup-confirm" :class="[errors.has('agreement') ? 'has-error' : '']">
|
||||
<span class="checkbox">
|
||||
<input type="checkbox" id="checkbox2" name="agreement" v-validate="'required'">
|
||||
|
|
@ -76,6 +78,12 @@
|
|||
Checkbox Value 1
|
||||
</span> --}}
|
||||
|
||||
<div class="control-group">
|
||||
|
||||
{!! Captcha::render() !!}
|
||||
|
||||
</div>
|
||||
|
||||
@if (core()->getConfigData('customer.settings.newsletter.subscription'))
|
||||
<div class="control-group">
|
||||
<input type="checkbox" id="checkbox2" name="is_subscribed">
|
||||
|
|
@ -95,3 +103,9 @@
|
|||
{!! view_render_event('bagisto.shop.customers.signup.after') !!}
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
|
||||
{!! Captcha::renderJS() !!}
|
||||
|
||||
@endpush
|
||||
|
|
@ -106,6 +106,11 @@
|
|||
<span v-else class="fs16">__</span>
|
||||
@break;
|
||||
|
||||
@case('multiselect')
|
||||
<span v-if="product.product['{{ $attribute['code'] }}']" v-html="getAttributeOptions(product['{{ $attribute['code'] }}'] ? product : product.product['{{ $attribute['code'] }}'] ? product.product : null, '{{ $attribute['code'] }}', 'multiple')" class="fs16"></span>
|
||||
<span v-else class="fs16">__</span>
|
||||
@break
|
||||
|
||||
@case ('file')
|
||||
@case ('image')
|
||||
<a :href="`${baseUrl}/${product.url_key}`" class="unset">
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"/js/velocity.js": "/js/velocity.js?id=1c12a991b9a3d04715bd",
|
||||
"/css/velocity-admin.css": "/css/velocity-admin.css?id=4322502d80a0e4a0affd",
|
||||
"/css/velocity.css": "/css/velocity.css?id=538a341507dd6592ac27"
|
||||
"/css/velocity.css": "/css/velocity.css?id=1128e04b7f7920dfa37a"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -235,6 +235,17 @@
|
|||
border: none !important;
|
||||
margin: 0 5px 10px 10px;
|
||||
|
||||
.category-product-image-container {
|
||||
margin: 0 auto;
|
||||
height: 190px;
|
||||
position: relative;
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.product-image-container {
|
||||
max-height: 190px;
|
||||
position: relative;
|
||||
|
|
@ -354,7 +365,7 @@
|
|||
display: block;
|
||||
}
|
||||
|
||||
.product-image-container {
|
||||
.category-product-image-container, .product-image-container {
|
||||
overflow: hidden;
|
||||
|
||||
img {
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ return [
|
|||
],
|
||||
|
||||
'settings' => [
|
||||
'channels'=> [
|
||||
'channels' => [
|
||||
'subscription_bar' => 'Subscription bar content'
|
||||
],
|
||||
],
|
||||
|
|
@ -311,6 +311,4 @@ return [
|
|||
'greeting' => 'Welcome, :customer !',
|
||||
]
|
||||
],
|
||||
]
|
||||
|
||||
?>
|
||||
];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,334 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'admin' => [
|
||||
'system' => [
|
||||
'velocity' => [
|
||||
'general' => 'Général',
|
||||
'category' => 'Catégorie',
|
||||
'settings' => 'Paramètres',
|
||||
'extension_name' => 'Thème de la vitesse',
|
||||
'error-module-inactive' => 'Avertissement : L\'état du thème Velocity est inactif',
|
||||
],
|
||||
|
||||
'settings' => [
|
||||
'channels' => [
|
||||
'subscription_bar' => 'Contenu de la barre d\'abonnement',
|
||||
],
|
||||
],
|
||||
|
||||
'general' => [
|
||||
'status' => 'Statut',
|
||||
'active' => 'actif',
|
||||
'inactive' => 'Inactif',
|
||||
],
|
||||
|
||||
'category' => [
|
||||
'all' => 'Tout',
|
||||
'left' => 'La gauche',
|
||||
'right' => 'Droite',
|
||||
'active' => 'actif',
|
||||
'custom' => 'Personnalisé',
|
||||
'inactive' => 'Inactif',
|
||||
'image-alignment' => 'Alignement des images',
|
||||
'icon-status' => 'Statut de l\'icône de catégorie',
|
||||
'image-status' => 'Statut de l\'image de la catégorie',
|
||||
'sub-category-show' => 'Afficher la sous-catégorie',
|
||||
'image-height' => 'Hauteur de l\'image [en pixels]',
|
||||
'image-width' => 'Largeur de l\'image [en pixels]',
|
||||
'show-tooltip' => 'Afficher l\'info-bulle de la catégorie',
|
||||
'num-sub-category' => 'Nombre de sous-catégorie',
|
||||
],
|
||||
],
|
||||
|
||||
'layouts' => [
|
||||
'velocity' => 'Rapidité',
|
||||
'cms-pages' => 'Pages CMS',
|
||||
'meta-data' => 'Métadonnées',
|
||||
'category-menu' => 'Menu Catégorie',
|
||||
'header-content' => 'Contenu de l\'en-tête',
|
||||
],
|
||||
|
||||
'contents' => [
|
||||
'self' => 'Soi',
|
||||
'active' => 'actif',
|
||||
'new-tab' => 'Nouvel onglet',
|
||||
'inactive' => 'Inactif',
|
||||
'title' => 'Liste de contenu',
|
||||
'select' => '-- Sélectionnez --',
|
||||
'add-title' => 'Ajouter du contenu',
|
||||
'btn-add-content' => 'Ajouter du contenu',
|
||||
'save-btn-title' => 'Enregistrer le contenu',
|
||||
'autocomplete' => '[Saisie automatique]',
|
||||
'no-result-found' => 'Aucun Enregistrement Trouvé.',
|
||||
'search-hint' => 'Rechercher un produit ici...',
|
||||
'mass-delete-success' => 'Contenu sélectionné supprimé avec succès.',
|
||||
|
||||
'tab' => [
|
||||
'page' => 'Paramétrage des pages',
|
||||
'content' => 'Réglage du contenu',
|
||||
'meta_content' => 'Métadonnées',
|
||||
],
|
||||
|
||||
'page' => [
|
||||
'title' => 'Titre',
|
||||
'status' => 'Statut',
|
||||
'position' => 'Positionner',
|
||||
],
|
||||
|
||||
'content' => [
|
||||
'content-type' => 'Type de contenu',
|
||||
'custom-title' => 'Titre personnalisé',
|
||||
'category-slug' => 'Catégorie Limace',
|
||||
'link-target' => 'Cible du lien de page',
|
||||
'custom-product' => 'Magasiner les produits',
|
||||
'custom-heading' => 'En-tête personnalisé',
|
||||
'catalog-type' => 'Type de catalogue de produits',
|
||||
'static-description' => 'Description du contenu',
|
||||
'page-link' => 'Lien de page [par ex. http://exemple.com/../../]',
|
||||
],
|
||||
|
||||
'datagrid' => [
|
||||
'id' => 'Identifiant',
|
||||
'title' => 'Titre',
|
||||
'status' => 'Statut',
|
||||
'position' => 'Positionner',
|
||||
'content-type' => 'Type de contenu',
|
||||
],
|
||||
],
|
||||
|
||||
'meta-data' => [
|
||||
'footer' => 'Bas de page',
|
||||
'title' => 'Métadonnées de vitesse',
|
||||
'activate-slider' => 'Activer le curseur',
|
||||
'home-page-content' => 'Contenu de la page d\'accueil',
|
||||
'footer-left-content' => 'Contenu du pied de page gauche',
|
||||
'subscription-content' => 'Barre d\'abonnement Contenu',
|
||||
'sidebar-categories' => 'Catégories de la barre latérale',
|
||||
'header_content_count' => 'Nombre de contenus d\'en-tête',
|
||||
'footer-left-raw-content' => '<p>Nous aimons créer des logiciels et résoudre les problèmes du monde réel avec les binaires. Nous sommes très attachés à nos objectifs. Nous investissons nos ressources pour créer des logiciels et des applications faciles à utiliser et de classe mondiale pour les entreprises avec une expertise technologique de pointe et de pointe.</p>',
|
||||
'slider-path' => 'Chemin du curseur',
|
||||
'category-logo' => 'Logo de la catégorie',
|
||||
'product-policy' => 'Politique de produit',
|
||||
'update-meta-data' => 'Mettre à jour les métadonnées',
|
||||
'product-view-image' => 'Image du produit',
|
||||
'advertisement-two' => 'Publicité Deux Images',
|
||||
'advertisement-one' => 'Publicité One Images',
|
||||
'footer-middle-content' => 'Contenu intermédiaire du pied de page',
|
||||
'advertisement-four' => 'Publicité Quatre Images',
|
||||
'advertisement-three' => 'Publicité Trois Images',
|
||||
'images' => 'Images',
|
||||
'general' => 'Général',
|
||||
'add-image-btn-title' => 'Ajouter une image',
|
||||
|
||||
'footer-middle' => [
|
||||
'about-us' => 'À propos de nous',
|
||||
'customer-service' => 'Service Clients',
|
||||
'whats-new' => 'Quoi de neuf',
|
||||
'contact-us' => 'Nous contacter',
|
||||
'order-and-returns' => 'Commande et retours',
|
||||
'payment-policy' => 'Politique de paiement',
|
||||
'shipping-policy' => 'Politique d\'expédition',
|
||||
'privacy-and-cookies-policy' => 'Politique de confidentialité et de cookies',
|
||||
],
|
||||
],
|
||||
|
||||
'category' => [
|
||||
'save-btn-title' => 'Enregistrer le menu',
|
||||
'title' => 'Liste des menus des catégories',
|
||||
'add-title' => 'Ajouter du contenu de menu',
|
||||
'edit-title' => 'Modifier le contenu du menu',
|
||||
'btn-add-category' => 'Ajouter du contenu de catégorie',
|
||||
|
||||
'datagrid' => [
|
||||
'category-id' => 'Identifiant de la catégorie',
|
||||
'category-name' => 'Nom de catégorie',
|
||||
'category-icon' => 'Icône de catégorie',
|
||||
'category-status' => 'Statut',
|
||||
],
|
||||
|
||||
'tab' => [
|
||||
'general' => 'Général',
|
||||
],
|
||||
|
||||
'status' => 'Statut',
|
||||
'active' => 'actif',
|
||||
'inactive' => 'Inactif',
|
||||
'select' => '-- Sélectionnez --',
|
||||
'icon-class' => 'Classe d\'icônes',
|
||||
'select-category' => 'Choisissez la catégorie',
|
||||
'tooltip-content' => 'Contenu de l\'info-bulle',
|
||||
'mass-delete-success' => 'Le menu des catégories sélectionnées a été supprimé avec succès.',
|
||||
],
|
||||
|
||||
'general' => [
|
||||
'locale_logo' => 'Logo de la région',
|
||||
],
|
||||
],
|
||||
|
||||
'home' => [
|
||||
'view-all' => 'Voir tout',
|
||||
'add-to-cart' => 'Ajouter au panier',
|
||||
'hot-categories' => 'Catégories chaudes',
|
||||
'payment-methods' => 'méthodes de payement',
|
||||
'customer-reviews' => 'Avis des clients',
|
||||
'shipping-methods' => 'méthodes de livraison',
|
||||
'popular-categories' => 'Catégories populaires',
|
||||
],
|
||||
|
||||
'header' => [
|
||||
'cart' => 'Chariot',
|
||||
'guest' => 'Invité',
|
||||
'logout' => 'Se déconnecter',
|
||||
'title' => 'Compte',
|
||||
'account' => 'Compte',
|
||||
'profile' => 'Profil',
|
||||
'wishlist' => 'Liste de souhaits',
|
||||
'all-categories' => 'toutes catégories',
|
||||
'search-text' => 'Rechercher des produits ici',
|
||||
'welcome-message' => 'Bienvenue, :customer_name',
|
||||
'dropdown-text' => 'Gérer le panier, les commandes et la liste de souhaits',
|
||||
],
|
||||
|
||||
'menu-navbar' => [
|
||||
'text-more' => 'Suite',
|
||||
'text-category' => 'Acheter par catégorie',
|
||||
],
|
||||
|
||||
'minicart' => [
|
||||
'cart' => 'Chariot',
|
||||
'view-cart' => 'Voir le panier',
|
||||
],
|
||||
|
||||
'checkout' => [
|
||||
'qty' => 'Qté',
|
||||
'checkout' => 'Vérifier',
|
||||
|
||||
'cart' => [
|
||||
'view-cart' => 'Voir le panier',
|
||||
'cart-summary' => 'Sommaire du panier',
|
||||
],
|
||||
|
||||
'items' => 'Articles',
|
||||
'subtotal' => 'Total',
|
||||
'sub-total' => 'Sous-total',
|
||||
'proceed' => 'Passer à la caisse',
|
||||
],
|
||||
|
||||
'customer' => [
|
||||
'compare' => [
|
||||
'text' => 'Comparer',
|
||||
'compare_similar_items' => 'Comparer des articles similaires',
|
||||
'add-tooltip' => 'Ajouter un produit à la liste de comparaison',
|
||||
'added' => 'Article ajouté avec succès à la liste de comparaison',
|
||||
'already_added' => 'Article déjà ajouté à la liste de comparaison',
|
||||
'removed' => 'Article supprimé avec succès de la liste de comparaison',
|
||||
'removed-all' => 'Tous les articles ont été supprimés avec succès de la liste de comparaison',
|
||||
'empty-text' => 'Vous n\'avez aucun article dans votre liste de comparaison',
|
||||
'product_image' => 'Image du produit',
|
||||
'actions' => 'Actions',
|
||||
],
|
||||
|
||||
'login-form' => [
|
||||
'sign-up' => 'S\'inscrire',
|
||||
'new-customer' => 'Nouveau client',
|
||||
'customer-login' => 'Connexion client',
|
||||
'registered-user' => 'Utilisateur enregistré',
|
||||
'your-email-address' => 'Votre adresse email',
|
||||
'form-login-text' => 'Si vous avez un compte, connectez-vous avec votre adresse e-mail.',
|
||||
],
|
||||
|
||||
'signup-form' => [
|
||||
'login' => 'Connexion',
|
||||
'become-user' => 'Devenir utilisateur',
|
||||
'user-registration' => 'Enregistrement de l\'utilisateur',
|
||||
'form-sginup-text' => 'Si vous êtes nouveau dans notre magasin, nous sommes heureux de vous compter parmi nos membres.',
|
||||
],
|
||||
|
||||
'forget-password' => [
|
||||
'login' => 'Connexion',
|
||||
'forgot-password' => 'Mot de passe oublié',
|
||||
'recover-password' => 'Récupérer mot de passe',
|
||||
'recover-password-text' => 'Si vous avez oublié votre mot de passe, récupérez-le en saisissant votre adresse e-mail.',
|
||||
],
|
||||
|
||||
'wishlist' => [
|
||||
'remove-all-success' => 'Tous les articles de votre liste de souhaits ont été supprimés',
|
||||
],
|
||||
],
|
||||
|
||||
'error' => [
|
||||
'go-to-home' => 'Aller à la maison',
|
||||
'page-lost-short' => 'Contenu perdu de la page',
|
||||
'something_went_wrong' => 'quelque chose s\'est mal passé',
|
||||
'page-lost-description' => 'La page que vous recherchez n\'est pas disponible. Essayez de rechercher à nouveau ou utilisez le bouton Retour ci-dessous.',
|
||||
],
|
||||
|
||||
'products' => [
|
||||
'text' => 'Des produits',
|
||||
'details' => 'Des détails',
|
||||
'reviews-title' => 'Commentaires',
|
||||
'reviewed' => 'Révisé',
|
||||
'review-by' => 'Examen par',
|
||||
'quick-view' => 'Aperçu rapide',
|
||||
'not-available' => 'Indisponible',
|
||||
'submit-review' => 'Poster le commentaire',
|
||||
'ratings' => ':totalRatings Notes',
|
||||
'reviews-count' => ':totalReviews Avis',
|
||||
'customer-rating' => 'Évaluation du client',
|
||||
'more-infomation' => 'Plus d\'information',
|
||||
'view-all-reviews' => 'Voir tous les avis',
|
||||
'write-your-review' => 'Donnez votre avis',
|
||||
'short-description' => 'Brèves descriptions',
|
||||
'recently-viewed' => 'Derniers produits consultés',
|
||||
'be-first-review' => 'Soyez le premier à rédiger un avis',
|
||||
'tax-inclusive' => 'Toutes taxes comprises',
|
||||
],
|
||||
|
||||
'shop' => [
|
||||
'gender' => [
|
||||
'male' => 'Homme',
|
||||
'other' => 'Autre',
|
||||
'female' => 'Femelle',
|
||||
],
|
||||
|
||||
'general' => [
|
||||
'no' => 'Non',
|
||||
'yes' => 'Oui',
|
||||
'view' => 'Vue',
|
||||
'filter' => 'Filtre',
|
||||
'orders' => 'Ordres',
|
||||
'update' => 'Mettre à jour',
|
||||
'reviews' => 'Commentaires',
|
||||
'download' => 'Télécharger',
|
||||
'currencies' => 'Devises',
|
||||
'addresses' => 'Adresses',
|
||||
'top-brands' => 'Les meilleures marques',
|
||||
'new-password' => 'Nouveau mot de passe',
|
||||
'no-file-available' => 'Aucun fichier disponible !',
|
||||
'downloadables' => 'Produits téléchargeables',
|
||||
'confirm-new-password' => 'Confirmer le nouveau mot de passe',
|
||||
'enter-current-password' => 'Entrer votre mot de passe actuel',
|
||||
|
||||
'alert' => [
|
||||
'info' => 'Info',
|
||||
'error' => 'Erreur',
|
||||
'success' => 'Succès',
|
||||
'warning' => 'Avertissement',
|
||||
],
|
||||
],
|
||||
|
||||
'wishlist' => [
|
||||
'add-wishlist-text' => 'Ajouter un produit à la liste de souhaits',
|
||||
'remove-wishlist-text' => 'Supprimer le produit de la liste de souhaits',
|
||||
],
|
||||
],
|
||||
|
||||
'responsive' => [
|
||||
'header' => [
|
||||
'done' => 'Fait',
|
||||
'languages' => 'Langues',
|
||||
'greeting' => 'Bienvenue, :customer !',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
@ -56,13 +56,14 @@
|
|||
{{ __('shop::app.customer.account.address.index.edit') }}
|
||||
</a>
|
||||
|
||||
<a
|
||||
class="card-link"
|
||||
href="{{ route('address.delete', $address->id) }}"
|
||||
onclick="deleteAddress('{{ __('shop::app.customer.account.address.index.confirm-delete') }}')">
|
||||
|
||||
<a class="card-link" href="javascript:void(0);" onclick="deleteAddress('{{ __('shop::app.customer.account.address.index.confirm-delete') }}')">
|
||||
{{ __('shop::app.customer.account.address.index.delete') }}
|
||||
</a>
|
||||
|
||||
<form id="deleteAddressForm" action="{{ route('address.delete', $address->id) }}" method="post">
|
||||
@method('delete')
|
||||
@csrf
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -77,8 +78,11 @@
|
|||
@push('scripts')
|
||||
<script>
|
||||
function deleteAddress(message) {
|
||||
if (!confirm(message))
|
||||
event.preventDefault();
|
||||
if (! confirm(message)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$('#deleteAddressForm').submit();
|
||||
}
|
||||
</script>
|
||||
@endpush
|
||||
|
|
|
|||
|
|
@ -28,7 +28,11 @@
|
|||
|
||||
@if ($order->canCancel())
|
||||
<span class="account-action">
|
||||
<a href="{{ route('customer.orders.cancel', $order->id) }}" class="theme-btn light unset float-right" v-alert:message="'{{ __('shop::app.customer.account.order.view.cancel-confirm-msg') }}'" style="float: right">
|
||||
<form id="cancelOrderForm" action="{{ route('customer.orders.cancel', $order->id) }}" method="post">
|
||||
@csrf
|
||||
</form>
|
||||
|
||||
<a href="javascript:void(0);" class="theme-btn light unset float-right" onclick="cancelOrder('{{ __('shop::app.customer.account.order.view.cancel-confirm-msg') }}')" style="float: right">
|
||||
{{ __('shop::app.customer.account.order.view.cancel-btn-title') }}
|
||||
</a>
|
||||
</span>
|
||||
|
|
@ -579,4 +583,16 @@
|
|||
{!! view_render_event('bagisto.shop.customers.account.orders.view.after', ['order' => $order]) !!}
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
function cancelOrder(message) {
|
||||
if (! confirm(message)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$('#cancelOrderForm').submit();
|
||||
}
|
||||
</script>
|
||||
@endpush
|
||||
|
|
@ -16,8 +16,13 @@
|
|||
|
||||
@if (count($reviews) > 1)
|
||||
<div class="account-action float-right">
|
||||
<a href="{{ route('customer.review.deleteall') }}" class="theme-btn light unset">
|
||||
{{ __('shop::app.customer.account.wishlist.deleteall') }}
|
||||
<form id="deleteAllReviewForm" action="{{ route('customer.review.deleteall') }}" method="post">
|
||||
@method('delete')
|
||||
@csrf
|
||||
</form>
|
||||
|
||||
<a href="javascript:void(0);" class="theme-btn light unset" onclick="confirm('{{ __('shop::app.customer.account.review.delete-all.confirmation-message') }}') ? document.getElementById('deleteAllReviewForm').submit() : null;">
|
||||
{{ __('shop::app.customer.account.review.delete-all.title') }}
|
||||
</a>
|
||||
</div>
|
||||
@endif
|
||||
|
|
@ -59,7 +64,12 @@
|
|||
</div>
|
||||
|
||||
<div class="col-2">
|
||||
<a class="unset" href="{{ route('customer.review.delete', $review->id) }}">
|
||||
<form id="deleteReviewForm" action="{{ route('customer.review.delete', $review->id) }}" method="post">
|
||||
@method('delete')
|
||||
@csrf
|
||||
</form>
|
||||
|
||||
<a class="unset" href="javascript:void(0);" onclick="confirm('{{ __('shop::app.customer.account.review.delete.confirmation-message') }}') ? document.getElementById('deleteReviewForm').submit() : null;">
|
||||
<span class="rango-delete fs24"></span>
|
||||
<span class="align-vertical-top">{{ __('shop::app.checkout.cart.remove') }}</span>
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -91,6 +91,12 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
|
||||
{!! Captcha::render() !!}
|
||||
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.shop.customers.login_form_controls.after') !!}
|
||||
|
||||
<input class="theme-btn" type="submit" value="{{ __('shop::app.customer.login-form.button_title') }}">
|
||||
|
|
@ -103,3 +109,9 @@
|
|||
{!! view_render_event('bagisto.shop.customers.login.after') !!}
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
|
||||
{!! Captcha::renderJS() !!}
|
||||
|
||||
@endpush
|
||||
|
|
@ -56,6 +56,12 @@
|
|||
</span>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
|
||||
{!! Captcha::render() !!}
|
||||
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.shop.customers.forget_password_form_controls.after') !!}
|
||||
|
||||
<button class="theme-btn" type="submit">
|
||||
|
|
@ -69,3 +75,9 @@
|
|||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
|
||||
{!! Captcha::renderJS() !!}
|
||||
|
||||
@endpush
|
||||
|
|
@ -138,6 +138,14 @@
|
|||
</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('bagisto.shop.customers.signup_form_controls.password_confirmation.after') !!}
|
||||
|
||||
<div class="control-group">
|
||||
|
||||
{!! Captcha::render() !!}
|
||||
|
||||
</div>
|
||||
|
||||
@if (core()->getConfigData('customer.settings.newsletter.subscription'))
|
||||
<div class="control-group">
|
||||
<input type="checkbox" id="checkbox2" name="is_subscribed">
|
||||
|
|
@ -158,3 +166,9 @@
|
|||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
|
||||
{!! Captcha::renderJS() !!}
|
||||
|
||||
@endpush
|
||||
|
|
@ -116,6 +116,11 @@
|
|||
<span v-else class="fs16">__</span>
|
||||
@break;
|
||||
|
||||
@case('multiselect')
|
||||
<span v-if="product.product['{{ $attribute['code'] }}']" v-html="getAttributeOptions(product['{{ $attribute['code'] }}'] ? product : product.product['{{ $attribute['code'] }}'] ? product.product : null, '{{ $attribute['code'] }}', 'multiple')" class="fs16"></span>
|
||||
<span v-else class="fs16">__</span>
|
||||
@break
|
||||
|
||||
@case ('file')
|
||||
@case ('image')
|
||||
<a :href="`${$root.baseUrl}/${product.url_key}`" class="unset">
|
||||
|
|
@ -215,7 +220,7 @@
|
|||
} else {
|
||||
this.$set(this, 'products', this.products.filter(product => product.id != productId));
|
||||
}
|
||||
|
||||
|
||||
this.$root.headerItemsCount++;
|
||||
|
||||
window.showAlert(`alert-${response.data.status}`, response.data.label, response.data.message);
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@
|
|||
<a
|
||||
href="{{ route('shop.productOrCategory.index', $product->url_key) }}"
|
||||
title="{{ $product->name }}"
|
||||
class="product-image-container">
|
||||
class="{{ $cardClass ?? 'product-image-container' }}">
|
||||
|
||||
<img
|
||||
loading="lazy"
|
||||
|
|
|
|||
|
|
@ -108,11 +108,14 @@
|
|||
|
||||
@foreach ($results as $productFlat)
|
||||
@if ($toolbarHelper->getCurrentMode() == 'grid')
|
||||
@include('shop::products.list.card', ['product' => $productFlat->product])
|
||||
@include('shop::products.list.card', [
|
||||
'cardClass' => 'category-product-image-container',
|
||||
'product' => $productFlat->product,
|
||||
])
|
||||
@else
|
||||
@include('shop::products.list.card', [
|
||||
'list' => true,
|
||||
'product' => $productFlat->product
|
||||
'product' => $productFlat->product,
|
||||
])
|
||||
@endif
|
||||
@endforeach
|
||||
|
|
|
|||
Loading…
Reference in New Issue