Compare commits
No commits in common. "master" and "update" have entirely different histories.
140 changed files with 145106 additions and 8624 deletions
61
.eslintrc.json
Normal file
61
.eslintrc.json
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es2021": true
|
||||
},
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:vue/vue3-strongly-recommended",
|
||||
"@vue/eslint-config-typescript"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.ts", "*.vue"],
|
||||
"rules": {
|
||||
"no-undef": "off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": ["*.vue"],
|
||||
"rules": {
|
||||
"indent": "off"
|
||||
}
|
||||
}
|
||||
],
|
||||
"parser": "vue-eslint-parser",
|
||||
"parserOptions": {
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"ecmaVersion": "latest",
|
||||
"sourceType": "module"
|
||||
},
|
||||
"plugins": ["vue", "@typescript-eslint"],
|
||||
"ignorePatterns": [
|
||||
"**/*.php",
|
||||
"**/*.svg",
|
||||
"**/vendor/*.js",
|
||||
"**/vendor/**/*.js",
|
||||
"**/vendor/**/*.scss"
|
||||
],
|
||||
"rules": {
|
||||
"indent": ["error", 4, { "SwitchCase": 1 }],
|
||||
"linebreak-style": ["error", "unix"],
|
||||
"quotes": ["error", "double"],
|
||||
"semi": ["error", "always"],
|
||||
"vue/script-indent": ["error", 2, { "baseIndent": 0, "switchCase": 1 }],
|
||||
"vue/one-component-per-file": "off"
|
||||
},
|
||||
"settings": {
|
||||
"import/resolver": {
|
||||
"node": {
|
||||
"extensions": [".js", ".vue", ".ts", ".d.ts"]
|
||||
},
|
||||
"alias": {
|
||||
"extensions": [".vue", ".js", ".ts", ".scss", ".d.ts"],
|
||||
"map": [
|
||||
["~", "./resources/assets"],
|
||||
["@", "./node_modules"]
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
#!/bin/sh
|
||||
npx commitlint --config node_modules/@uwil/husky-config/commitlint.config.js --edit $1
|
||||
|
|
@ -23,12 +23,14 @@
|
|||
],
|
||||
"customSyntax": "postcss-scss",
|
||||
"rules": {
|
||||
"declaration-property-value-no-unknown": null,
|
||||
"declaration-property-value-no-unknown": true,
|
||||
"selector-max-id": null,
|
||||
"color-no-invalid-hex": true,
|
||||
"order/properties-alphabetical-order": null,
|
||||
"max-nesting-depth": 5,
|
||||
"selector-max-compound-selectors": 5,
|
||||
"declaration-colon-newline-after": null,
|
||||
"value-list-comma-newline-after": null,
|
||||
"scss/double-slash-comment-empty-line-before": [
|
||||
"always",
|
||||
{
|
||||
|
|
@ -40,4 +42,4 @@
|
|||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -104,11 +104,8 @@ class CrmUserProvider extends EloquentUserProvider implements UserProviderContra
|
|||
// * Ne devrait pas survenir, $crm->login throws ApiError::authFailed()
|
||||
return $crm->login($credentials['email'], $credentials['password']);
|
||||
} catch (ApiErrorException $e) {
|
||||
if (
|
||||
$e->getApiError()->equals(ApiError::modelNotFound) ||
|
||||
($e->getApiError()->equals(ApiError::authFailed) && !$model->existsInCrm())
|
||||
) {
|
||||
$model->delete();
|
||||
if (!$model->hashcode or !CrmCustomer::find($model->hashcode)) {
|
||||
$model->forceDelete();
|
||||
return false;
|
||||
}
|
||||
if ($e->getApiError()->equals(ApiError::authFailed)) {
|
||||
|
|
@ -116,9 +113,6 @@ class CrmUserProvider extends EloquentUserProvider implements UserProviderContra
|
|||
}
|
||||
// ! Assert Authenticable model must be valided (MustValidate trait).
|
||||
if ($e->getApiError()->equals(ApiError::customerNotActivated)) {
|
||||
$model->email_verified_at = null;
|
||||
$model->save();
|
||||
$model->sendEmailVerificationNotification();
|
||||
Session::flash('warning', \trans('front.messages.account_not_activated'));
|
||||
return true;
|
||||
}
|
||||
|
|
@ -144,14 +138,11 @@ class CrmUserProvider extends EloquentUserProvider implements UserProviderContra
|
|||
private function createLocalCustomer(\LDC\LDCCRM\Models\Customer $crmCustomer): Model
|
||||
{
|
||||
/** @var \App\Models\Customer $model */
|
||||
$model = $this->usedModel::withTrashed()->firstOrNew([
|
||||
$model = $this->usedModel::firstOrNew([
|
||||
'email' => $crmCustomer->email
|
||||
]);
|
||||
$model->hashcode = $crmCustomer->hashcode;
|
||||
$model->email_verified_at = $crmCustomer->status ? now() : null;
|
||||
if ($model->trashed()) {
|
||||
$model->restore();
|
||||
}
|
||||
$model->saveOrFail();
|
||||
|
||||
return $model;
|
||||
|
|
|
|||
70
app/Auth/ReactivateCustomerProvider.php
Normal file
70
app/Auth/ReactivateCustomerProvider.php
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
<?php
|
||||
|
||||
namespace App\Auth;
|
||||
|
||||
use App\Models\Customer;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Auth\EloquentUserProvider;
|
||||
use Illuminate\Contracts\Auth\Authenticatable;
|
||||
use Illuminate\Contracts\Auth\UserProvider;
|
||||
|
||||
/**
|
||||
* Overload EloquentUserProvider to handle
|
||||
* Soft deleted Customers
|
||||
*/
|
||||
class ReactivateCustomerProvider extends EloquentUserProvider implements UserProvider
|
||||
{
|
||||
/**
|
||||
* Retrieve a customer by the given credentials.
|
||||
*
|
||||
* @param array $credentials
|
||||
* @return \Illuminate\Contracts\Auth\Authenticatable|null
|
||||
* @throws \ErrorException If cannot connect to LDAP.
|
||||
*/
|
||||
public function retrieveByCredentials(array $credentials)
|
||||
{
|
||||
// * Make changes
|
||||
if (empty($credentials)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// First we will add each credential element to the query as a where clause.
|
||||
// Then we can execute the query and, if we found a customer, return it in a
|
||||
// Eloquent User "model" that will be utilized by the Guard instances.
|
||||
$query = $this->createModel()->newQuery();
|
||||
|
||||
foreach ($credentials as $key => $value) {
|
||||
if (!Str::contains($key, 'password')) {
|
||||
$query->where($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
/** @var \App\Models\Customer|null $query */
|
||||
return $query->withTrashed()->first();
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate a customer against the given credentials.
|
||||
*
|
||||
* @param \Illuminate\Contracts\Auth\Authenticatable $customer
|
||||
* @param array $credentials
|
||||
* @return boolean
|
||||
* @throws \ErrorException If model provided is not a Customer or connection to server fails.
|
||||
*/
|
||||
public function validateCredentials(Authenticatable $customer, array $credentials)
|
||||
{
|
||||
/** @var \App\Models\Customer $customer */
|
||||
if ($customer instanceof Customer) {
|
||||
throw new \ErrorException('Cannot authenticate any thing else than ' . Customer::class);
|
||||
}
|
||||
|
||||
/** @var \App\Models\Customer $customer */
|
||||
// @phpstan-ignore-next-line
|
||||
if ($this->hasher->check($credentials['password'], $customer->getAuthPassword())) {
|
||||
// * Restore customer
|
||||
return boolval($customer->restore());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -23,9 +23,7 @@ class Kernel extends ConsoleKernel
|
|||
*/
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
// ! ATTENTION: Le job DeleteOldCustomers a été désactivé, car il n'est pas applicable pour l'instant.
|
||||
// ! Il faudra décorreler les customers des gains et participations via les FK.
|
||||
// $schedule->job(DeleteOldCustomers::class)->dailyAt('22:50');
|
||||
$schedule->job(DeleteOldCustomers::class)->dailyAt('22:50');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -106,15 +106,11 @@ class RegisterController extends Controller
|
|||
|
||||
// * Enregistrement du Hashcode
|
||||
/** @var \App\Models\Customer $customer */
|
||||
$customer = Customer::withTrashed()->firstOrNew([
|
||||
'email' => $data['email']
|
||||
]);
|
||||
$customer->fill(Arr::only($data, $customer->getFillable()));
|
||||
$customer = new Customer(
|
||||
Arr::only($data, (new \ReflectionClass(\App\Models\Customer::class))
|
||||
->getProperty('fillable')->getDefaultValue())
|
||||
);
|
||||
$customer->hashcode = $crmCustomer->hashcode;
|
||||
if ($customer->trashed()) {
|
||||
$customer->restore();
|
||||
}
|
||||
$customer->email_verified_at = $crmCustomer->status ? now() : null;
|
||||
// ! Last connection sera null, pour identifier la deuxième connexion,
|
||||
// ! Pour accéder au partie du Klub.
|
||||
if ($customer->saveOrFail()) {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ class RedirectIfAuthenticated
|
|||
return \redirect()->route('fo.homepage');
|
||||
case 'backend':
|
||||
if (!$request->routeIs('bo.*')) {
|
||||
continue 2;
|
||||
continue;
|
||||
}
|
||||
return \redirect()->route('bo.dashboard');
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -11,72 +11,92 @@ use Symfony\Component\HttpFoundation\Response;
|
|||
|
||||
class SecureHeaders
|
||||
{
|
||||
/**
|
||||
* Enumerate headers which you do not want in your application's responses.
|
||||
* Great starting point would be to go check out @Scott_Helme's:
|
||||
* https://securityheaders.com/
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $unwantedHeaderList = [
|
||||
'X-Powered-By',
|
||||
'Server',
|
||||
];
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
* @phpcs:disable Squiz.Commenting.FunctionComment.IncorrectTypeHint
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
// phpcs:enable
|
||||
// * For Vite DEV
|
||||
$host = \parse_url((string) \config('app.url'), \PHP_URL_HOST);
|
||||
|
||||
$viteDevOrigin = config('app.debug') && \is_string($host) && $host !== '' ? "https://{$host}:4443" : null;
|
||||
$viteDevSocket = config('app.debug') && \is_string($host) && $host !== '' ? "wss://{$host}:4443" : null;
|
||||
|
||||
$host = \parse_url(\config('app.url'), \PHP_URL_HOST);
|
||||
View::share('nonce', $nonce = Vite::useCspNonce());
|
||||
|
||||
// * For VueJS dev tool to execute
|
||||
$jsDev = config('app.debug') ? "'unsafe-eval' 'unsafe-inline'" : "'nonce-{$nonce}' 'strict-dynamic'";
|
||||
$scheme = config('app.env') === 'local' ? 'http' : 'https';
|
||||
$reportUri = Route::has('cspReportUri') ? \sprintf(' report-uri %s ;', \parse_url(route('cspReportUri'), \PHP_URL_PATH)) : '';
|
||||
|
||||
$reportUri = Route::has('cspReportUri') ?
|
||||
\sprintf(' report-uri %s ;', \parse_url(route('cspReportUri'), \PHP_URL_PATH)) : '';
|
||||
$this->removeUnwantedHeaders($this->unwantedHeaderList);
|
||||
$response = $next($request);
|
||||
|
||||
$response->headers->set('Referrer-Policy', 'no-referrer-when-downgrade');
|
||||
$response->headers->set('X-Content-Type-Options', 'nosniff');
|
||||
$response->headers->set('X-XSS-Protection', '1; mode=block');
|
||||
$response->headers->set('X-Frame-Options', 'SAMEORIGIN');
|
||||
$response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains;');
|
||||
|
||||
// Utilisation de array_filter pour ne pas inclure les valeurs null en production
|
||||
$cspPolicies = [
|
||||
"default-src 'none';",
|
||||
"manifest-src 'self';",
|
||||
"connect-src 'self' blob: " . implode(' ', array_filter([
|
||||
$viteDevSocket,
|
||||
$viteDevOrigin,
|
||||
// * CKEDITOR Specific https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/csp.html
|
||||
"connect-src 'self' blob: " . implode(' ', [
|
||||
// * VITE DEV
|
||||
config('app.debug') ? "wss://{$host}:4443" : '',
|
||||
config('app.debug') ? "https://{$host}:4443" : '',
|
||||
'https://yl.s-web.fr'
|
||||
])) . ';',
|
||||
"img-src 'self' data: blob: " . implode(' ', array_filter([
|
||||
$viteDevOrigin,
|
||||
])) . ';',
|
||||
"object-src 'self';",
|
||||
]) . ';',
|
||||
"img-src 'self' data: blob: " . implode(' ', [
|
||||
// * VITE DEV
|
||||
config('app.debug') ? "https://{$host}:4443" : '',
|
||||
]) . ';',
|
||||
"object-src 'self' " . implode(' ', []) . ';',
|
||||
"frame-src 'self' " . implode(' ', [
|
||||
'https://www.google.com/recaptcha/',
|
||||
'https://recaptcha.google.com/recaptcha/',
|
||||
'https://www.google.com/maps/'
|
||||
]) . ';',
|
||||
"font-src 'self' data: " . implode(' ', array_filter([
|
||||
$viteDevOrigin,
|
||||
'https://fonts.gstatic.com' // <-- Point-virgule retiré ici
|
||||
])) . ';',
|
||||
"style-src 'self' 'unsafe-inline' " . implode(' ', array_filter([
|
||||
"font-src 'self' data: " . \implode(' ', [
|
||||
// * VITE DEV
|
||||
config('app.debug') ? "https://{$host}:4443" : '',
|
||||
'https://fonts.gstatic.com;'
|
||||
]) . ';',
|
||||
// ! Using CKEditor will must have unsafe-inline style
|
||||
// phpcs:ignore Generic.Files.LineLength.TooLong
|
||||
"style-src 'self' 'unsafe-inline' " . \implode(' ', [
|
||||
'https://cdnjs.cloudflare.com',
|
||||
// * File Manager
|
||||
'https://fonts.googleapis.com',
|
||||
'https://cdn.jsdelivr.net',
|
||||
'https://use.fontawesome.com',
|
||||
$viteDevOrigin,
|
||||
])) . ';',
|
||||
"script-src 'self' {$jsDev} " . implode(' ', array_filter([
|
||||
'https:',
|
||||
'blob:',
|
||||
'https://fonts.googleapis.com',
|
||||
// * VITE DEV
|
||||
config('app.debug') ? "https://{$host}:4443" : '',
|
||||
]) . ';',
|
||||
// ! If you dont use ckeditor use this
|
||||
// "style-src 'self' 'nonce-$nonce';",
|
||||
// phpcs:ignore Generic.Files.LineLength.TooLong
|
||||
"script-src 'self' {$jsDev} " . \implode(' ', [
|
||||
'https: blob:',
|
||||
'https://www.googletagmanager.com',
|
||||
'https://cdnjs.cloudflare.com',
|
||||
"$scheme://www.google-analytics.com",
|
||||
$viteDevOrigin,
|
||||
])) . ';'
|
||||
// * VITE DEV
|
||||
config('app.debug') ? "https://{$host}:4443" : '',
|
||||
]) . ';'
|
||||
];
|
||||
|
||||
$response->headers->set(
|
||||
|
|
@ -84,10 +104,15 @@ class SecureHeaders
|
|||
implode(' ', $cspPolicies) . $reportUri
|
||||
);
|
||||
$response->headers->set('Feature-Policy', 'fullscreen \'self\';');
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove unwanted headers
|
||||
*
|
||||
* @param array $headerList
|
||||
* @return void
|
||||
*/
|
||||
private function removeUnwantedHeaders(array $headerList): void
|
||||
{
|
||||
foreach ($headerList as $header) {
|
||||
|
|
|
|||
|
|
@ -108,16 +108,9 @@ class CreateAccountRequest extends FormRequest
|
|||
function (string $attribute, $value, \Closure $fail) {
|
||||
if (CrmCustomer::findWithEmail(\strval($value))) {
|
||||
$fail('Un compte existe déjà avec cette adresse.');
|
||||
} else {
|
||||
// ! Si le compte n'existe pas en CRM mais existe en local.
|
||||
// ! On le soft-delete pour permettre l'inscription et la restauration propre.
|
||||
$localCustomer = \App\Models\Customer::where('email', \strval($value))->first();
|
||||
if ($localCustomer) {
|
||||
$localCustomer->delete();
|
||||
}
|
||||
}
|
||||
},
|
||||
Rule::unique('customers', 'email')->withoutTrashed(),
|
||||
'unique:customers,email',
|
||||
],
|
||||
'password' => [
|
||||
'required',
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ class SubmitWinningProofRequest extends CreateAccountRequest
|
|||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return auth('frontend')->check() &&
|
||||
return auth('frontend')->check() and
|
||||
Gate::check('submitProof', $this->route('participation'));
|
||||
}
|
||||
|
||||
|
|
@ -28,55 +28,46 @@ class SubmitWinningProofRequest extends CreateAccountRequest
|
|||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
$authUser = auth('frontend')->user();
|
||||
$countryCode = $this->integer('country') != 0 ?
|
||||
$this->integer('country') : ($authUser ?
|
||||
(new CrmRepository())->fetchCrmCustomer($authUser)->country->value : 0);
|
||||
$countryRules = match ($countryCode) {
|
||||
Country::belgium->value => ['phone' => 'phone:BE'],
|
||||
Country::luxembourg->value => ['phone' => 'phone:LU'],
|
||||
Country::germany->value => ['phone' => 'phone:DE'],
|
||||
default => ['phone' => 'phone:FR'],
|
||||
Country::belgium->value => [
|
||||
'phone' => 'phone:BE',
|
||||
],
|
||||
Country::luxembourg->value => [
|
||||
'phone' => 'phone:LU',
|
||||
],
|
||||
Country::germany->value => [
|
||||
'phone' => 'phone:DE',
|
||||
],
|
||||
default => [
|
||||
'phone' => 'phone:FR',
|
||||
]
|
||||
};
|
||||
|
||||
return \array_merge(
|
||||
Arr::only(
|
||||
parent::rules(),
|
||||
[
|
||||
'lastname',
|
||||
'firstname',
|
||||
'address',
|
||||
'address2',
|
||||
'postal_code',
|
||||
'city',
|
||||
'country',
|
||||
]
|
||||
),
|
||||
return \array_merge(Arr::only(
|
||||
parent::rules(),
|
||||
[
|
||||
'phone' => [
|
||||
'required',
|
||||
'max:255',
|
||||
$countryRules['phone'],
|
||||
],
|
||||
'lastname',
|
||||
'firstname',
|
||||
'address',
|
||||
'address2',
|
||||
'postal_code',
|
||||
'city',
|
||||
'country'
|
||||
]
|
||||
), [
|
||||
'phone' => [
|
||||
'required',
|
||||
'max:255',
|
||||
$countryRules['phone'],
|
||||
],
|
||||
$this->proofRules()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rules of winning proof.
|
||||
*
|
||||
* @return array<string, string>
|
||||
*/
|
||||
private function proofRules(): array
|
||||
{
|
||||
// * Min 10 KB, Max 2MB
|
||||
$fileRules = 'required|mimes:jpeg,jpg,png,pdf|min:10|max:2048';
|
||||
|
||||
return collect(['sticker', 'ticket', 'barcode'])
|
||||
->filter(fn (string $proof) => config("proofs.$proof"))
|
||||
->mapWithKeys(fn (string $proof) => [$proof => $fileRules])
|
||||
->all();
|
||||
// * Min 10 KB, Max 2MB
|
||||
'sticker' => 'required|mimes:jpeg,jpg,png,pdf|min:10|max:2048',
|
||||
'ticket' => 'required|mimes:jpeg,jpg,png,pdf|min:10|max:2048',
|
||||
'barcode' => 'required|mimes:jpeg,jpg,png,pdf|min:10|max:2048',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -26,11 +26,11 @@ class Discount extends \stdClass implements Jsonable, Arrayable, \JsonSerializab
|
|||
* @var array<string>
|
||||
*/
|
||||
private static array $propertiesList = [
|
||||
'picture',
|
||||
'valid_on',
|
||||
'face_value',
|
||||
'percentage',
|
||||
'web_coupon_identifiant',
|
||||
'percentage',
|
||||
'face_value',
|
||||
'valid_on',
|
||||
'picture',
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -28,10 +28,10 @@ class WinningProofAdminMail extends Mailable implements ShouldQueue
|
|||
* @param \LDC\LDCCRM\Models\Customer $customer The customer who won.
|
||||
* @param string|null $unique_code The unique code used to participate if any.
|
||||
* @param string|null $ean_code The product code used to participate if any.
|
||||
* @param string|null $sticker Fichier image du sticker utilisé.
|
||||
* @param string|null $ticket Fichier image du ticket de caisse prouvant
|
||||
* @param string $sticker Fichier image du sticker utilisé.
|
||||
* @param string $ticket Fichier image du ticket de caisse prouvant
|
||||
* l'achat du produit stické.
|
||||
* @param string|null $barcode Fichier image du code-barres du produit acheté.
|
||||
* @param string $barcode Fichier image du code-barres du produit acheté.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
|
@ -42,9 +42,9 @@ class WinningProofAdminMail extends Mailable implements ShouldQueue
|
|||
protected Customer $customer,
|
||||
protected ?string $unique_code,
|
||||
protected ?string $ean_code,
|
||||
protected ?string $sticker,
|
||||
protected ?string $ticket,
|
||||
protected ?string $barcode,
|
||||
protected string $sticker,
|
||||
protected string $ticket,
|
||||
protected string $barcode,
|
||||
) {
|
||||
}
|
||||
|
||||
|
|
@ -71,7 +71,7 @@ class WinningProofAdminMail extends Mailable implements ShouldQueue
|
|||
public function content(): \Illuminate\Mail\Mailables\Content
|
||||
{
|
||||
$participation = [];
|
||||
if (!is_null($this->unique_code)) {
|
||||
if (!is_null($this->ean_code)) {
|
||||
$participation = [
|
||||
trans('Code Unique : :code', ['code' => $this->unique_code]),
|
||||
];
|
||||
|
|
@ -106,12 +106,10 @@ class WinningProofAdminMail extends Mailable implements ShouldQueue
|
|||
*/
|
||||
public function attachments(): array
|
||||
{
|
||||
return collect([$this->sticker, $this->ticket, $this->barcode])
|
||||
->filter()
|
||||
->map(fn (string $file) => Attachment::fromPath(
|
||||
FileStorageHelper::getFileFullPath($file)
|
||||
))
|
||||
->values()
|
||||
->all();
|
||||
return [
|
||||
Attachment::fromPath(FileStorageHelper::getFileFullPath($this->sticker)),
|
||||
Attachment::fromPath(FileStorageHelper::getFileFullPath($this->ticket)),
|
||||
Attachment::fromPath(FileStorageHelper::getFileFullPath($this->barcode)),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,26 +1,18 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Enums\ActivityLogs\ActivityLogsEventEnum;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
/**
|
||||
* @property int $id
|
||||
* @property string|null $user_id
|
||||
* @property bool $is_anonymous If there is no user connected when action was realised.
|
||||
* @property bool $is_console If the action was realised in console.
|
||||
* @property string $model_class Target model.
|
||||
* @property string $model_id Id of the target model.
|
||||
* @property ActivityLogsEventEnum $event Event of this activity (ActivityLogsEventEnum).
|
||||
* @property array<array-key, mixed>|null $data List of changes (old and new values).
|
||||
* @property Carbon $created_at The date on which the user was published.
|
||||
* @property string $model Target model.
|
||||
* @property string $model_id Id of the target model.
|
||||
* @property \App\Enums\ActivityLogs\ActivityLogsEventEnum $event Event of this activity (ActivityLogsEventEnum).
|
||||
* @property array $data Changes.
|
||||
* @property-read \Illuminate\Support\Carbon $created_at Created date.
|
||||
*
|
||||
* @property-read \App\Models\User $user User BelongsTo relation.
|
||||
* @property-read \App\Models\StaticPage $staticPage StaticPage BelongsTo relation.
|
||||
|
|
@ -39,7 +31,6 @@ use Illuminate\Support\Carbon;
|
|||
class ActivityLog extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
use Notifiable;
|
||||
|
||||
/**
|
||||
* Indicates if the model should be timestamped.
|
||||
|
|
@ -68,8 +59,7 @@ class ActivityLog extends Model
|
|||
* @var array<string, string>
|
||||
*/
|
||||
protected $casts = [
|
||||
'is_anonymous' => 'bool',
|
||||
'is_console' => 'bool',
|
||||
'is_anonymous' => 'boolean',
|
||||
'event' => ActivityLogsEventEnum::class,
|
||||
'data' => 'json',
|
||||
'created_at' => 'datetime',
|
||||
|
|
@ -79,49 +69,110 @@ class ActivityLog extends Model
|
|||
|
||||
/**
|
||||
* Add new activity to the activity logs list.
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Model $model
|
||||
* @param \App\Enums\ActivityLogs\ActivityLogsEventEnum $eventEnum
|
||||
* @return void
|
||||
*/
|
||||
public static function addActivity(Model $model, ActivityLogsEventEnum $eventEnum): void
|
||||
{
|
||||
$isAnonymous = true;
|
||||
/** @var Model|null */
|
||||
/** @var \Illuminate\Database\Eloquent\Model|null */
|
||||
$userModel = auth('backend')->user();
|
||||
$user_id = optional($userModel)->id;
|
||||
if ($userModel instanceof Model) {
|
||||
$user_id = $userModel->getKeyForSelectQuery();
|
||||
if (is_object($userModel)) {
|
||||
$userModel = $userModel->getKeyForSelectQuery();
|
||||
$isAnonymous = false;
|
||||
}
|
||||
$activity = new self();
|
||||
$activity->user_id = $user_id;
|
||||
$activity->user_id = $userModel;
|
||||
$activity->is_console = app()->runningInConsole();
|
||||
$activity->is_anonymous = $isAnonymous;
|
||||
$activity->model_class = $model::class;
|
||||
$activity->model_class = \get_class($model);
|
||||
$activity->model_id = $model->getKey();
|
||||
$activity->event = $eventEnum;
|
||||
$activity->data = static::getChangedColumns($activity, $model, $eventEnum);
|
||||
$activity->setAttribute('created_at', now());
|
||||
// @phpstan-ignore-next-line
|
||||
$activity->created_at = now();
|
||||
$activity->saveOrFail();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get old, new columns that has changed.
|
||||
*
|
||||
* @return array<string, string>|null
|
||||
* @param self $activity
|
||||
* @param \Illuminate\Database\Eloquent\Model $model
|
||||
* @param \App\Enums\ActivityLogs\ActivityLogsEventEnum $eventEnum
|
||||
* @return array
|
||||
*/
|
||||
public static function getChangedColumns(
|
||||
self $activity,
|
||||
Model $model,
|
||||
ActivityLogsEventEnum $eventEnum
|
||||
): ?array {
|
||||
if ($eventEnum !== ActivityLogsEventEnum::updated) {
|
||||
return null;
|
||||
public static function getChangedColumns(self $activity, Model $model, ActivityLogsEventEnum $eventEnum): array
|
||||
{
|
||||
$modelClassName = $activity->model_class;
|
||||
/** Get type of each fields of the target model */
|
||||
/** @var \Illuminate\Database\Eloquent\Model|null $targetModel */
|
||||
$targetModel = $activity->model_class::where(
|
||||
(new $modelClassName())->getRouteKeyName(),
|
||||
$activity->model_id
|
||||
)->first();
|
||||
|
||||
if (\is_null($targetModel)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$casts = $model->getCasts();
|
||||
$changes = $model->getChanges();
|
||||
|
||||
return collect($changes)
|
||||
->map(fn($val, $key) => $casts[$key] ?? 'string')
|
||||
$targetModelTypes = collect($targetModel->toArray())
|
||||
->map(fn ($value) => self::getValueType($value))
|
||||
->toArray();
|
||||
/** Return old, new and type of values changed */
|
||||
return match ($eventEnum) {
|
||||
ActivityLogsEventEnum::created => array_intersect_key($targetModelTypes, $model->toArray()),
|
||||
ActivityLogsEventEnum::duplicated => array_intersect_key($targetModelTypes, $model->toArray()),
|
||||
ActivityLogsEventEnum::updated => array_intersect_key($targetModelTypes, $model->getChanges()),
|
||||
default => []
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a value type as a string
|
||||
* ! Use this for display purpose only
|
||||
*
|
||||
* @param mixed $value
|
||||
* @return string
|
||||
* @throws \RuntimeException If type is unhlanded.
|
||||
* @phpcs:disable Generic.Metrics.CyclomaticComplexity.MaxExceeded
|
||||
*/
|
||||
private static function getValueType(mixed $value): string
|
||||
{
|
||||
// phpcs:enable
|
||||
$type = \gettype($value);
|
||||
switch ($type) {
|
||||
// phpcs:ignore PSR2.ControlStructures.SwitchDeclaration.TerminatingComment
|
||||
case 'string':
|
||||
return match (true) {
|
||||
Str::length(\strip_tags($value)) !== Str::length($value) => 'html',
|
||||
Str::startsWith($value, 'storage/modelfiles') => 'file',
|
||||
Str::isUuid($value) => 'uuid',
|
||||
Str::isUlid($value) => 'ulid',
|
||||
Str::isUrl($value) => 'url',
|
||||
Str::isMatch('/^[0-9A-Za-z_-]{10}[048AEIMQUYcgkosw]$/', $value) => 'youtube_video_id',
|
||||
\is_numeric($value) => 'numeric',
|
||||
Str::isJson($value) and
|
||||
(Str::startsWith($value, '[') or Str::startsWith($value, '{')) => 'json',
|
||||
default => 'string'
|
||||
};
|
||||
case 'NULL':
|
||||
case 'object':
|
||||
case 'array':
|
||||
case 'integer':
|
||||
case 'boolean':
|
||||
return $type;
|
||||
case 'double':
|
||||
return is_float($value) ? 'float' : 'double';
|
||||
case 'resource (closed)':
|
||||
case 'resource':
|
||||
throw new \RuntimeException('Laravel model properties should not contain resources !');
|
||||
case 'unknown type':
|
||||
default:
|
||||
throw new \RuntimeException('Unhandled Type ' . \gettype($value));
|
||||
} //end switch
|
||||
}
|
||||
|
||||
// * RELATIONS
|
||||
|
|
@ -129,9 +180,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* User BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\User>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function user(): BelongsTo
|
||||
public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
}
|
||||
|
|
@ -139,9 +190,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* StaticPage BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\StaticPage>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function staticPage(): BelongsTo
|
||||
public function staticPage(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(StaticPage::class);
|
||||
}
|
||||
|
|
@ -149,9 +200,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* Settings BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\Settings>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function settings(): BelongsTo
|
||||
public function settings(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Settings::class);
|
||||
}
|
||||
|
|
@ -159,9 +210,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* Range BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\Range>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function range(): BelongsTo
|
||||
public function range(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Range::class);
|
||||
}
|
||||
|
|
@ -169,9 +220,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* Product BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\Product>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function product(): BelongsTo
|
||||
public function product(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Product::class);
|
||||
}
|
||||
|
|
@ -179,9 +230,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* Prize BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\Prize>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function prize(): BelongsTo
|
||||
public function prize(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Prize::class);
|
||||
}
|
||||
|
|
@ -189,9 +240,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* Participation BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\Participation>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function participation(): BelongsTo
|
||||
public function participation(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Participation::class);
|
||||
}
|
||||
|
|
@ -199,9 +250,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* InstantWin BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\InstantWin>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function instantWin(): BelongsTo
|
||||
public function instantWin(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(InstantWin::class);
|
||||
}
|
||||
|
|
@ -209,9 +260,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* FaqTheme BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\FaqTheme>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function faqTheme(): BelongsTo
|
||||
public function faqTheme(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(FaqTheme::class);
|
||||
}
|
||||
|
|
@ -219,9 +270,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* FaqQuestion BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\FaqQuestion>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function faqQuestion(): BelongsTo
|
||||
public function faqQuestion(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(FaqQuestion::class);
|
||||
}
|
||||
|
|
@ -229,9 +280,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* Customer BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\Customer>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function customer(): BelongsTo
|
||||
public function customer(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Customer::class);
|
||||
}
|
||||
|
|
@ -239,9 +290,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* Code BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\Code>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function code(): BelongsTo
|
||||
public function code(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Code::class);
|
||||
}
|
||||
|
|
@ -249,9 +300,9 @@ class ActivityLog extends Model
|
|||
/**
|
||||
* BannedIp BelongsTo relation.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo<$this,\App\Models\BannedIp>
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
*/
|
||||
public function bannedIp(): BelongsTo
|
||||
public function bannedIp(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(BannedIp::class);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,10 +79,8 @@ class Customer extends Authenticatable implements MustVerifyEmail
|
|||
static::updating(function (self $model) {
|
||||
self::assertEmailIsUnique($model->id, $model->email);
|
||||
});
|
||||
static::deleting(function (self $model) {
|
||||
if ($model->existsInCrmAndIsActivated()) {
|
||||
throw new \RuntimeException('This cannot be done because of MesBr');
|
||||
}
|
||||
static::deleting(function () {
|
||||
throw new \RuntimeException('This cannot be done because of MesBr');
|
||||
});
|
||||
static::deleted(function (self $model) {
|
||||
if ($model->forceDeleting) {
|
||||
|
|
@ -180,7 +178,7 @@ class Customer extends Authenticatable implements MustVerifyEmail
|
|||
private static function assertFieldIsUnique(mixed $id, string $field, mixed $value): void
|
||||
{
|
||||
Validator::make([$field => $value], [
|
||||
$field => Rule::unique('customers', $field)->ignore($id)->withoutTrashed(),
|
||||
$field => Rule::unique('customers', $field)->ignore($id),
|
||||
], [
|
||||
$field . '.unique' => trans('La valeur :value pour le champ :attribute est déjà utilisé', [
|
||||
'attribute' => $field,
|
||||
|
|
@ -236,16 +234,14 @@ class Customer extends Authenticatable implements MustVerifyEmail
|
|||
$this->notify(new ResetPassword($token));
|
||||
}
|
||||
|
||||
public function existsInCrmAndIsActivated(): bool
|
||||
{
|
||||
$crmCustomer = $this->getCrmCustomer();
|
||||
|
||||
return $crmCustomer && $crmCustomer->status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the customer exists in CRM.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function existsInCrm(): bool
|
||||
{
|
||||
return $this->getCrmCustomer() !== null;
|
||||
return $this->hashcode and CrmCustomer::find($this->hashcode);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -262,30 +258,16 @@ class Customer extends Authenticatable implements MustVerifyEmail
|
|||
}
|
||||
/** @var static|null $loggedCustomer */
|
||||
$loggedCustomer = \auth('frontend')->user();
|
||||
$isLogged = \optional($loggedCustomer)->id === $this->id && !empty($this->id);
|
||||
$isLogged = \optional($loggedCustomer)->id === $this->id and !empty($this->id);
|
||||
if ($isLogged) {
|
||||
\auth('frontend')->logout();
|
||||
}
|
||||
$this->delete();
|
||||
$this->forceDelete();
|
||||
throw ValidationException::withMessages([
|
||||
'error' => trans('Le compte \'existe pas.')
|
||||
]);
|
||||
}
|
||||
|
||||
private function getCrmCustomer(): ?CrmCustomer
|
||||
{
|
||||
if (!$this->hashcode) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return CrmCustomer::find($this->hashcode);
|
||||
} catch (CrmException | ApiErrorException $e) {
|
||||
report($e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// * --- END AUTH ---
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -17,9 +17,9 @@ use IPLib\Address\AddressInterface;
|
|||
* Participation.
|
||||
*
|
||||
* @property \IPLib\Address\AddressInterface $ip IP
|
||||
* @property string|null $sticker Path of the sticker file
|
||||
* @property string|null $ticket Path of the ticket file
|
||||
* @property string|null $barcode Path of the barcode file
|
||||
* @property string $sticker Path of the sticker file
|
||||
* @property string $ticket Path of the ticket file
|
||||
* @property string $barcode Path of the barcode file
|
||||
* @property string|null $discount_code Treatment code of the BR
|
||||
* @property string $comment Administrators comments
|
||||
* @property boolean $prize_sent Has the won prize been sent ?
|
||||
|
|
|
|||
|
|
@ -90,26 +90,19 @@ class ParticipationPolicy
|
|||
{
|
||||
/** @var \App\Models\Settings */
|
||||
$settings = app(Settings::class);
|
||||
|
||||
// Columns of the winning proofs enabled in the config.
|
||||
$enabledProofs = array_keys(array_filter(config('proofs')));
|
||||
|
||||
// Winning proofs are disabled globally or no proof is enabled in the config.
|
||||
if (! $settings->winning_proof || empty($enabledProofs)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return Participation::query()
|
||||
return $settings->winning_proof and Participation::query()
|
||||
->where('prize_sent', false)
|
||||
->whereHas(
|
||||
'customer',
|
||||
fn (Builder $q) => $q->where('id', $authUser->id)
|
||||
)
|
||||
->where('id', $model->id)
|
||||
->whereHas('instantWin')
|
||||
// At least one enabled proof has not been submitted yet.
|
||||
->where(fn (Builder $q) => $q->whereNull($enabledProofs, 'or'))
|
||||
->exists();
|
||||
fn (Builder $q) =>
|
||||
$q->where('id', $authUser->id)
|
||||
)->where('id', $model->id)->whereHas('instantWin')
|
||||
->where(function (Builder $q) {
|
||||
$q->whereNull(
|
||||
['sticker', 'ticket', 'barcode'],
|
||||
'or'
|
||||
);
|
||||
})->exists();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
namespace App\Providers;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Cache\RateLimiting\Limit;
|
||||
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
|
|
@ -41,8 +40,6 @@ class RouteServiceProvider extends ServiceProvider
|
|||
Route::middleware('web')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web-re7.php'));
|
||||
|
||||
Route::model('user', User::class);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ class CrmRepository
|
|||
if ($e->getApiError()->equals(ApiError::modelNotFound)) {
|
||||
// * Déconnexion immédiate et retour maison.
|
||||
auth('frontend')->logout();
|
||||
response()->redirectToRoute('fo.homepage')
|
||||
response()->redirectToRoute('fo.home')
|
||||
->with('error', trans('Une erreur est survenue, compte introuvable.'))
|
||||
->throwResponse();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,8 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Traits\Controllers;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
|
||||
/**
|
||||
* This trait works with Route::bind in App service provider
|
||||
|
|
@ -16,11 +13,13 @@ trait UpdateModelPublished
|
|||
{
|
||||
/**
|
||||
* Change model published.
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Model $model
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function changePublished(Model $model): RedirectResponse
|
||||
public function changePublished(Model $model)
|
||||
{
|
||||
$model->update(['published' => ! $model->getOriginal('published')]);
|
||||
|
||||
$model->update(['published' => !$model->getOriginal('published')]);
|
||||
return redirect()->back()->with('success', trans(__('crud.messages.publish_status_saved')));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
export default { extends: ["@uwil/husky-config/commitlint.config.js"] };
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "uwil/gen-game-web",
|
||||
"version": "4.2.1",
|
||||
"version": "4.0.9",
|
||||
"type": "project",
|
||||
"description": "Game generator",
|
||||
"support": {
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'sticker' => filter_var(env('PROOF_STICKER', true), FILTER_VALIDATE_BOOLEAN),
|
||||
'ticket' => filter_var(env('PROOF_TICKET', true), FILTER_VALIDATE_BOOLEAN),
|
||||
'barcode' => filter_var(env('PROOF_BARCODE', true), FILTER_VALIDATE_BOOLEAN),
|
||||
];
|
||||
|
|
@ -17,8 +17,6 @@
|
|||
* @link http://htmlpurifier.org/live/configdoc/plain.html
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
// phpcs:disable Generic.Files.LineLength.TooLong
|
||||
return [
|
||||
'encoding' => 'UTF-8',
|
||||
|
|
@ -27,36 +25,38 @@ return [
|
|||
'cacheFileMode' => 0755,
|
||||
'settings' => [
|
||||
'default' => [
|
||||
'HTML.SafeIframe' => true,
|
||||
'HTML.SafeIframe' => true,
|
||||
// * For iframes
|
||||
'URI.SafeIframeRegexp' => '%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/)%',
|
||||
'HTML.Doctype' => 'HTML 4.01 Transitional',
|
||||
'URI.SafeIframeRegexp' => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/|www.dailymotion.com/video/)%",
|
||||
'HTML.Doctype' => 'HTML 4.01 Transitional',
|
||||
// * Legacy filter en full avec safe legacy.
|
||||
// phpcs:ignore Generic.Files.LineLength.MaxExceeded
|
||||
'HTML.Allowed' => 'h1[style],h2[style],h3[style],h4[style],h5[style],h6[style],figure[class|style],oembed[url],div[style],b,strong,i,em,u,a[href|title|target|rel],ul[style],ol[style],dl[style],li,p[style],br,span[style|class],img[width|height|alt|src|style|class|title],iframe[src|width|height|class|frameborder|style],table[style|align|border|cellspacing|cellpadding|width],thead,tbody,th[colspan|align|valign|style],tr[align|valign|style],td[style|colspan|rowspan|scope|align|valign],hr,dl,dt',
|
||||
// 'HTML.Allowed' => 'h1[style|id],h2[style|id],h3[style|id],h4[style|id],h5[style|id],h6[style|id],figure[class|style],oembed[url],div[style],b,strong,i,em,u,s,pre,code[class],a[href|title|target|rel|id],ul[style],ol[style],dl[style],li,p[style],br,span[style|class],img[width|height|alt|src|style|class|title],iframe[src|width|height|class|frameborder|style],table[style|align|border|cellspacing|cellpadding|width],thead,tbody,th[colspan|align|valign|style],tr[align|valign|style],td[style|colspan|rowspan|scope|align|valign],hr,dl,dt,mark[class]',
|
||||
// * Restricted basics.
|
||||
// 'HTML.Allowed' => 'br,p[style],b[style],u[style],i[style],a[href|title|target|rel],strong[style],span[class],ul[style],ol[style],li[style],h2[style],h3[style],h4[style],hr,blockquote[style]',
|
||||
'HTML.Allowed' => 'br,p[style],b[style],u[style],i[style],a[href|title|target|rel],strong[style],span[class],ul[style],ol[style],li[style],h2[style],h3[style],h4[style],hr,blockquote[style]',
|
||||
// * Legacy filter en full avec safe legacy.
|
||||
// phpcs:ignore Generic.Files.LineLength.MaxExceeded
|
||||
'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align,list-style-type,float,width,height,vertical-align,border-color',
|
||||
// 'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align,list-style-type,float,width,height,vertical-align,border,border-color,margin-left',
|
||||
// * Restricted basics.
|
||||
// 'CSS.AllowedProperties' => 'text-align,margin-left',
|
||||
'AutoFormat.AutoParagraph' => false,
|
||||
'AutoFormat.RemoveEmpty' => false,
|
||||
'CSS.AllowedProperties' => 'text-align,margin-left',
|
||||
'AutoFormat.AutoParagraph' => false,
|
||||
'AutoFormat.RemoveEmpty' => false,
|
||||
'AutoFormat.RemoveEmpty.RemoveNbsp' => false,
|
||||
],
|
||||
"youtube" => [
|
||||
"HTML.SafeIframe" => 'true',
|
||||
"URI.SafeIframeRegexp" => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/|www.dailymotion.com/video/)%",
|
||||
],
|
||||
'custom_definition' => [
|
||||
'id' => 'html5-definitions',
|
||||
'rev' => 1,
|
||||
'debug' => true,
|
||||
'id' => 'html5-definitions',
|
||||
'rev' => 1,
|
||||
'debug' => true,
|
||||
'elements' => [
|
||||
// * http://developers.whatwg.org/sections.html
|
||||
['section', 'Block', 'Flow', 'Common'],
|
||||
['nav', 'Block', 'Flow', 'Common'],
|
||||
['nav', 'Block', 'Flow', 'Common'],
|
||||
['article', 'Block', 'Flow', 'Common'],
|
||||
['aside', 'Block', 'Flow', 'Common'],
|
||||
['header', 'Block', 'Flow', 'Common'],
|
||||
['footer', 'Block', 'Flow', 'Common'],
|
||||
['aside', 'Block', 'Flow', 'Common'],
|
||||
['header', 'Block', 'Flow', 'Common'],
|
||||
['footer', 'Block', 'Flow', 'Common'],
|
||||
|
||||
// * Content model actually excludes several tags, not modelled here
|
||||
['address', 'Block', 'Flow', 'Common'],
|
||||
|
|
@ -69,26 +69,26 @@ return [
|
|||
|
||||
// * http://developers.whatwg.org/the-video-element.html#the-video-element
|
||||
['video', 'Block', 'Optional: (source, Flow) | (Flow, source) | Flow', 'Common', [
|
||||
'src' => 'URI',
|
||||
'type' => 'Text',
|
||||
'width' => 'Length',
|
||||
'height' => 'Length',
|
||||
'poster' => 'URI',
|
||||
'preload' => 'Enum#auto,metadata,none',
|
||||
'src' => 'URI',
|
||||
'type' => 'Text',
|
||||
'width' => 'Length',
|
||||
'height' => 'Length',
|
||||
'poster' => 'URI',
|
||||
'preload' => 'Enum#auto,metadata,none',
|
||||
'controls' => 'Bool',
|
||||
]],
|
||||
['source', 'Block', 'Flow', 'Common', [
|
||||
'src' => 'URI',
|
||||
'src' => 'URI',
|
||||
'type' => 'Text',
|
||||
]],
|
||||
|
||||
// * http://developers.whatwg.org/text-level-semantics.html
|
||||
['s', 'Inline', 'Inline', 'Common'],
|
||||
['var', 'Inline', 'Inline', 'Common'],
|
||||
['sub', 'Inline', 'Inline', 'Common'],
|
||||
['sup', 'Inline', 'Inline', 'Common'],
|
||||
['s', 'Inline', 'Inline', 'Common'],
|
||||
['var', 'Inline', 'Inline', 'Common'],
|
||||
['sub', 'Inline', 'Inline', 'Common'],
|
||||
['sup', 'Inline', 'Inline', 'Common'],
|
||||
['mark', 'Inline', 'Inline', 'Common'],
|
||||
['wbr', 'Inline', 'Empty', 'Core'],
|
||||
['wbr', 'Inline', 'Empty', 'Core'],
|
||||
|
||||
// * http://developers.whatwg.org/edits.html
|
||||
['ins', 'Block', 'Flow', 'Common', ['cite' => 'URI', 'datetime' => 'CDATA']],
|
||||
|
|
@ -111,11 +111,18 @@ return [
|
|||
],
|
||||
'custom_attributes' => [
|
||||
['a', 'target', 'Enum#_blank,_self,_target,_top'],
|
||||
['a', 'id', 'Text'],
|
||||
['ol', 'style', 'Text'],
|
||||
['figure', 'style', 'Text'],
|
||||
['img', 'style', 'Text'],
|
||||
['span', 'style', 'Text'],
|
||||
['oembed', 'url', 'Text'],
|
||||
['h1', 'id', 'Text'],
|
||||
['h2', 'id', 'Text'],
|
||||
['h3', 'id', 'Text'],
|
||||
['h4', 'id', 'Text'],
|
||||
['h5', 'id', 'Text'],
|
||||
['h6', 'id', 'Text'],
|
||||
],
|
||||
'custom_elements' => [
|
||||
['u', 'Inline', 'Inline', 'Common'],
|
||||
|
|
|
|||
|
|
@ -16,8 +16,6 @@ return new class extends Migration
|
|||
Schema::create('activity_logs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('user_id')->nullable()->constrained('users')
|
||||
->cascadeOnUpdate()
|
||||
->nullOnDelete()
|
||||
->comment('Id of the user associated, or nullable for a deleted user.');
|
||||
$table->boolean('is_anonymous')->comment('If there is no user connected when action was realised.');
|
||||
$table->boolean('is_console')->comment('If the action was realised in console.');
|
||||
|
|
|
|||
|
|
@ -22,11 +22,11 @@ class StaticPageSeeder extends Seeder
|
|||
'type' => StaticPageType::confidentiality,
|
||||
],
|
||||
[
|
||||
'seo_title' => 'Seo title pour la page de confidentialité',
|
||||
'seo_title' => 'Seo title pour la page de confidentialité',
|
||||
'seo_description' => 'Seo description pour la page de confidentialité',
|
||||
'title' => StaticPageType::confidentiality->label(),
|
||||
'type' => StaticPageType::confidentiality,
|
||||
'content' => sprintf('Contenu de %s', StaticPageType::confidentiality->label()),
|
||||
'title' => 'Page de confidentialitée',
|
||||
'type' => StaticPageType::confidentiality,
|
||||
'content' => \clean(\fake()->randomHtml(6, 7)),
|
||||
]
|
||||
);
|
||||
StaticPage::query()->updateOrCreate(
|
||||
|
|
@ -34,11 +34,11 @@ class StaticPageSeeder extends Seeder
|
|||
'type' => StaticPageType::legals,
|
||||
],
|
||||
[
|
||||
'seo_title' => 'Seo title pour la page mentions légales',
|
||||
'seo_title' => 'Seo title pour la page mentions légales',
|
||||
'seo_description' => 'Seo description pour la page mentions légales',
|
||||
'title' => StaticPageType::legals->label(),
|
||||
'type' => StaticPageType::legals,
|
||||
'content' => sprintf('Contenu de %s', StaticPageType::legals->label()),
|
||||
'title' => 'Mentions légales',
|
||||
'type' => StaticPageType::legals,
|
||||
'content' => \clean(\fake()->randomHtml(6, 7)),
|
||||
]
|
||||
);
|
||||
StaticPage::query()->updateOrCreate(
|
||||
|
|
@ -46,11 +46,11 @@ class StaticPageSeeder extends Seeder
|
|||
'type' => StaticPageType::rules,
|
||||
],
|
||||
[
|
||||
'seo_title' => 'Seo title pour la page charte de confidentialitée',
|
||||
'seo_title' => 'Seo title pour la page charte de confidentialitée',
|
||||
'seo_description' => 'Seo description pour la page charte de confidentialitée',
|
||||
'title' => StaticPageType::rules->label(),
|
||||
'type' => StaticPageType::rules,
|
||||
'content' => sprintf('Contenu de %s', StaticPageType::rules->label()),
|
||||
'title' => 'Charte de confidentialitée',
|
||||
'type' => StaticPageType::rules,
|
||||
'content' => \clean(\fake()->randomHtml(6, 7)),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,73 +0,0 @@
|
|||
import vueTsEslintConfig from "@vue/eslint-config-typescript";
|
||||
import pluginImportX from "eslint-plugin-import-x";
|
||||
import pluginVue from "eslint-plugin-vue";
|
||||
|
||||
export default [
|
||||
// 1. Fichiers et dossiers à ignorer globalement
|
||||
{
|
||||
ignores: [
|
||||
"**/*.php",
|
||||
"**/*.svg",
|
||||
"**/vendor/**",
|
||||
"node_modules/**",
|
||||
"public/**"
|
||||
]
|
||||
},
|
||||
|
||||
// 2. Configurations de base recommandées
|
||||
...pluginVue.configs["flat/strongly-recommended"],
|
||||
...vueTsEslintConfig(),
|
||||
|
||||
// 3. Plugin d'imports (import-x)
|
||||
pluginImportX.flatConfigs.recommended,
|
||||
pluginImportX.flatConfigs.typescript,
|
||||
|
||||
// 4. Options de langage, Paramètres et Règles globales
|
||||
{
|
||||
languageOptions: {
|
||||
ecmaVersion: "latest",
|
||||
sourceType: "module",
|
||||
},
|
||||
settings: {
|
||||
// 👉 LA CORRECTION EST ICI
|
||||
"import-x/resolver": {
|
||||
// Apprend à ESLint à lire ces extensions
|
||||
node: {
|
||||
extensions: [".js", ".ts", ".vue", ".scss", ".d.ts"]
|
||||
},
|
||||
// Demande à ESLint de se fier à 100% à votre tsconfig.json pour les alias !
|
||||
typescript: {
|
||||
alwaysTryTypes: true,
|
||||
project: "./tsconfig.json",
|
||||
}
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
"indent": ["error", 4, { "SwitchCase": 1 }],
|
||||
"linebreak-style": ["error", "unix"],
|
||||
"quotes": ["error", "double"],
|
||||
"semi": ["error", "always"],
|
||||
|
||||
"vue/one-component-per-file": "off",
|
||||
"import/order": "off",
|
||||
},
|
||||
},
|
||||
|
||||
// 5. Overrides pour les fichiers Vue (.vue)
|
||||
{
|
||||
files: ["**/*.vue"],
|
||||
rules: {
|
||||
"indent": "off",
|
||||
"vue/script-indent": ["error", 2, { "baseIndent": 0, "switchCase": 1 }],
|
||||
"no-undef": "off"
|
||||
}
|
||||
},
|
||||
|
||||
// 6. Overrides pour les fichiers TypeScript (.ts)
|
||||
{
|
||||
files: ["**/*.ts"],
|
||||
rules: {
|
||||
"no-undef": "off"
|
||||
}
|
||||
}
|
||||
];
|
||||
13596
package-lock.json
generated
13596
package-lock.json
generated
File diff suppressed because it is too large
Load diff
101
package.json
101
package.json
|
|
@ -1,70 +1,75 @@
|
|||
{
|
||||
"private": true,
|
||||
"name": "srcs",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"vite": "vite --clearScreen false",
|
||||
"prod": "vite build --mode production",
|
||||
"dev": "NODE_ENV=development vite build -d --mode development",
|
||||
"watch": "NODE_ENV=development vite build --mode development --watch",
|
||||
"eslint": "eslint --max-warnings 0 ./resources/ts ./resources/theme/mounted/ts",
|
||||
"eslint-fix": "eslint --fix --max-warnings 0 ./resources/ts ./resources/theme/mounted/ts",
|
||||
"stylelint": "stylelint --config './.stylelintrc.json' --max-warnings 0 'resources/sass/**/*.scss' 'resources/theme/mounted/**/*.scss'",
|
||||
"stylelint-fix": "stylelint --config './.stylelintrc.json' --fix --max-warnings 0 'resources/sass/**/*.scss' 'resources/theme/mounted/**/*.scss'"
|
||||
"eslint": "node ./node_modules/.bin/eslint --max-warnings 0 -c .eslintrc.json ./resources",
|
||||
"eslint-fix": "node ./node_modules/.bin/eslint --fix --max-warnings 0 -c .eslintrc.json ./resources",
|
||||
"eslint-ci": "node ./node_modules/.bin/eslint --max-warnings 0 -c .eslintrc.json ./resources -f junit",
|
||||
"stylelint": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 '**/resources/**/*.scss'",
|
||||
"stylelint-fix": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --fix --max-warnings 0 '**/resources/**/*.scss'",
|
||||
"stylelint-ci": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 '**/resources/**/*.scss' -f json"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "^7.3.1",
|
||||
"@fortawesome/free-brands-svg-icons": "^7.3.1",
|
||||
"@fortawesome/free-regular-svg-icons": "^7.3.1",
|
||||
"@fortawesome/free-solid-svg-icons": "^7.3.1",
|
||||
"@fortawesome/vue-fontawesome": "^3.3.2",
|
||||
"@types/bootstrap": "^5.2.11",
|
||||
"@types/node": "^20.19.43",
|
||||
"@types/toastify-js": "^1.12.1",
|
||||
"@uwil/husky-config": "^1.1.1",
|
||||
"@vitejs/plugin-basic-ssl": "^2.3.0",
|
||||
"@vitejs/plugin-vue": "^6.0.7",
|
||||
"@vue/compiler-sfc": "latest",
|
||||
"@vue/eslint-config-typescript": "^14.7.0",
|
||||
"@vue/tsconfig": "^0.9.1",
|
||||
"autoprefixer": "^10.5.0",
|
||||
"eslint": "^10.4.1",
|
||||
"eslint-import-resolver-typescript": "^3.6.3",
|
||||
"eslint-plugin-import-x": "^4.17.1",
|
||||
"eslint-plugin-vue": "^10.9.2",
|
||||
"laravel-vite-plugin": "^3.1.3",
|
||||
"meow": "^14.1.0",
|
||||
"postcss": "^8.5.15",
|
||||
"postcss-discard-comments": "^7.0.8",
|
||||
"sass-embedded": "^1.100.0",
|
||||
"stylelint": "^17.12.0",
|
||||
"stylelint-config-idiomatic-order": "github:ream88/stylelint-config-idiomatic-order",
|
||||
"stylelint-config-sass-guidelines": "^13.0.0",
|
||||
"stylelint-config-standard-scss": "^17.0.0",
|
||||
"stylelint-scss": "^7.2.0",
|
||||
"typescript": "^6.0.3",
|
||||
"typescript-eslint": "^8.60.1",
|
||||
"vite": "^8.1.5",
|
||||
"vite-plugin-checker": "^0.13.0",
|
||||
"vite-plugin-eslint2": "^5.1.0",
|
||||
"vite-plugin-static-copy": "^4.1.0",
|
||||
"vue": "^3.5.35",
|
||||
"vue-tsc": "^3.3.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.22.11",
|
||||
"@babel/types": "^7.21.2",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.5.1",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.5.1",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.5.1",
|
||||
"@fortawesome/vue-fontawesome": "^3.0.5",
|
||||
"@ldc-web/cookie-notice": "^6.0.3",
|
||||
"@sipec/vue3-tags-input": "^3.0.4",
|
||||
"axios": "^1.17.0",
|
||||
"bootstrap": "^5.3.8",
|
||||
"@types/bootstrap": "^5.2.7",
|
||||
"@types/node": "^20.8.2",
|
||||
"@types/toastify-js": "^1.12.1",
|
||||
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
||||
"@typescript-eslint/parser": "^5.36.2",
|
||||
"@vitejs/plugin-basic-ssl": "^1.0.1",
|
||||
"@vitejs/plugin-vue": "^4.6.2",
|
||||
"@vue/compiler-sfc": "latest",
|
||||
"@vue/eslint-config-typescript": "latest",
|
||||
"@vue/tsconfig": "^0.4.0",
|
||||
"axios": "^1.5.1",
|
||||
"bootstrap": "^5.3.2",
|
||||
"chart.js": "^4.4.0",
|
||||
"ckeditor5": "^48.3.1",
|
||||
"cropperjs": "^1.6.1",
|
||||
"eslint": "latest",
|
||||
"eslint-import-resolver-alias": "^1.1.2",
|
||||
"eslint-plugin-vue": "latest",
|
||||
"glightbox": "^3.2.0",
|
||||
"laravel-vite-plugin": "^0.8.1",
|
||||
"meow": "^9.0.0",
|
||||
"postcss-discard-comments": "^6.0.0",
|
||||
"prettier": "latest",
|
||||
"print-js": "^1.6.0",
|
||||
"resolve-url-loader": "^5.0.0",
|
||||
"rollup-plugin-copy": "^3.5.0",
|
||||
"sass": "latest",
|
||||
"scratchcard-js": "^1.5.5",
|
||||
"slugify": "^1.6.6",
|
||||
"stylelint": "^15.11.0",
|
||||
"stylelint-config-idiomatic-order": "github:ream88/stylelint-config-idiomatic-order",
|
||||
"stylelint-config-sass-guidelines": "^10.0.0",
|
||||
"stylelint-config-standard-scss": "^11.1.0",
|
||||
"stylelint-scss": "^5.3.2",
|
||||
"sweetalert2": "^11.7.31",
|
||||
"swiper": "^12.1.3",
|
||||
"toastify-js": "^1.12.0"
|
||||
"terser": "latest",
|
||||
"toastify-js": "^1.12.0",
|
||||
"ts-loader": "^9.3.1",
|
||||
"typescript": ">=3.3.1 <5.2.0",
|
||||
"typescript-eslint": "latest",
|
||||
"vite": "^4.5.1",
|
||||
"vite-plugin-babel": "latest",
|
||||
"vite-plugin-checker": "latest",
|
||||
"vite-plugin-eslint": "latest",
|
||||
"vite-plugin-stylelint": "latest",
|
||||
"vue": "latest",
|
||||
"vue-eslint-parser": "^9.3.2",
|
||||
"vue-loader": "^17.3.1",
|
||||
"vue-tsc": "1.8.11"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
130
phpcs.xml
130
phpcs.xml
|
|
@ -1,65 +1,123 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ruleset name="Php Coding Standard"
|
||||
<ruleset name="LDC Laravel"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/squizlabs/php_codesniffer/phpcs.xsd">
|
||||
|
||||
<description>Standard optimisé : Analyse statique complémentaire à Pint.</description>
|
||||
|
||||
<description>Created with the PHP Coding Standard Generator. http://edorian.github.com/php-coding-standard-generator/</description>
|
||||
<arg name="colors" />
|
||||
<arg name="extensions" value="php" />
|
||||
<arg name="parallel" value="75" />
|
||||
<file>app/</file>
|
||||
<file>config/</file>
|
||||
<file>database/</file>
|
||||
<file>routes/</file>
|
||||
<file>tests/</file>
|
||||
|
||||
<exclude-pattern>*/vendor/*</exclude-pattern>
|
||||
<exclude-pattern>*/storage/*</exclude-pattern>
|
||||
<exclude-pattern>_ide_helper.php</exclude-pattern>
|
||||
<exclude-pattern>*/tests/*</exclude-pattern>
|
||||
|
||||
<rule ref="PSR12"/>
|
||||
<exclude-pattern>app/Lib/vendor/*</exclude-pattern>
|
||||
<rule ref="PSR1" />
|
||||
<rule ref="PSR12" />
|
||||
|
||||
<rule ref="Generic.Classes.DuplicateClassName"/>
|
||||
<rule ref="Generic.CodeAnalysis.EmptyStatement"/>
|
||||
<rule ref="Generic.CodeAnalysis.ForLoopShouldBeWhileLoop"/>
|
||||
<rule ref="Generic.CodeAnalysis.ForLoopWithTestFunctionCall"/>
|
||||
<rule ref="Generic.CodeAnalysis.JumbledIncrementer"/>
|
||||
<rule ref="Generic.CodeAnalysis.UnconditionalIfStatement"/>
|
||||
<rule ref="Generic.CodeAnalysis.UnnecessaryFinalModifier"/>
|
||||
<rule ref="Generic.CodeAnalysis.UnusedFunctionParameter"/>
|
||||
<rule ref="Generic.CodeAnalysis.UselessOverridingMethod"/>
|
||||
<rule ref="Generic.Metrics.CyclomaticComplexity">
|
||||
<properties>
|
||||
<property name="complexity" value="10"/>
|
||||
<property name="absoluteComplexity" value="20"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="Generic.Commenting.DocComment.SpacingBeforeTags"/>
|
||||
<rule ref="Generic.Commenting.Todo"/>
|
||||
<rule ref="Generic.Commenting.Fixme"/>
|
||||
<rule ref="Generic.ControlStructures.InlineControlStructure"/>
|
||||
<rule ref="Generic.Files.ByteOrderMark"/>
|
||||
<rule ref="Generic.Files.LineEndings"/>
|
||||
<rule ref="Generic.Files.LineLength"/>
|
||||
<rule ref="Generic.Formatting.DisallowMultipleStatements"/>
|
||||
<rule ref="Generic.Formatting.MultipleStatementAlignment"/>
|
||||
<rule ref="Generic.Formatting.SpaceAfterCast"/>
|
||||
<rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
|
||||
<rule ref="Generic.Metrics.CyclomaticComplexity"/>
|
||||
<rule ref="Generic.Metrics.NestingLevel"/>
|
||||
|
||||
<rule ref="Generic.NamingConventions.ConstructorName"/>
|
||||
<rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
|
||||
<rule ref="Generic.NamingConventions.CamelCapsFunctionName"/>
|
||||
<rule ref="Generic.PHP.DeprecatedFunctions"/>
|
||||
<rule ref="Generic.PHP.DisallowShortOpenTag"/>
|
||||
<rule ref="Generic.PHP.ForbiddenFunctions"/>
|
||||
<rule ref="Generic.PHP.NoSilencedErrors"/>
|
||||
<rule ref="Generic.Strings.UnnecessaryStringConcat"/>
|
||||
<rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
|
||||
<rule ref="Generic.WhiteSpace.LanguageConstructSpacing"/>
|
||||
<rule ref="Generic.WhiteSpace.ScopeIndent"/>
|
||||
<rule ref="PEAR.Classes.ClassDeclaration"/>
|
||||
<rule ref="PEAR.Commenting.InlineComment"/>
|
||||
<rule ref="PSR1.Classes.ClassDeclaration"/>
|
||||
<rule ref="PSR1.Files.SideEffects"/>
|
||||
<rule ref="PSR2.Classes.ClassDeclaration"/>
|
||||
<rule ref="PSR2.Classes.PropertyDeclaration"/>
|
||||
<rule ref="PSR2.ControlStructures.ElseIfDeclaration"/>
|
||||
<rule ref="PSR2.ControlStructures.SwitchDeclaration"/>
|
||||
<rule ref="PSR2.Files.EndFileNewline"/>
|
||||
<rule ref="PSR2.Methods.MethodDeclaration"/>
|
||||
<rule ref="PSR2.Namespaces.NamespaceDeclaration"/>
|
||||
<rule ref="PSR2.Namespaces.UseDeclaration"/>
|
||||
<rule ref="Squiz.PHP.CommentedOutCode"/>
|
||||
<rule ref="Squiz.PHP.DisallowMultipleAssignments">
|
||||
<exclude name="Squiz.PHP.DisallowMultipleAssignments.FoundInControlStructure" />
|
||||
</rule>
|
||||
<rule ref="Squiz.PHP.DisallowSizeFunctionsInLoops"/>
|
||||
|
||||
<rule ref="Squiz.PHP.DiscouragedFunctions">
|
||||
<properties>
|
||||
<property name="error" value="true"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="Squiz.PHP.Eval"/>
|
||||
<rule ref="Squiz.PHP.GlobalKeyword"/>
|
||||
<rule ref="Squiz.PHP.Heredoc"/>
|
||||
<rule ref="Squiz.PHP.InnerFunctions"/>
|
||||
<rule ref="Squiz.PHP.LowercasePHPFunctions"/>
|
||||
<rule ref="Squiz.PHP.NonExecutableCode"/>
|
||||
<rule ref="Squiz.Scope.MemberVarScope"/>
|
||||
<rule ref="Squiz.Scope.MethodScope"/>
|
||||
<rule ref="Squiz.Scope.StaticThisUsage"/>
|
||||
|
||||
<rule ref="Generic.NamingConventions.ConstructorName"/>
|
||||
<rule ref="Generic.NamingConventions.CamelCapsFunctionName"/>
|
||||
|
||||
<rule ref="Generic.Files.LineLength">
|
||||
<rule ref="Squiz.WhiteSpace.LogicalOperatorSpacing"/>
|
||||
<rule ref="Squiz.WhiteSpace.MemberVarSpacing">
|
||||
<properties>
|
||||
<property name="lineLimit" value="150"/>
|
||||
<property name="absoluteLineLimit" value="250"/>
|
||||
<property name="spacingBeforeFirst " value="false"/>
|
||||
</properties>
|
||||
</rule>
|
||||
|
||||
<rule ref="SlevomatCodingStandard.Namespaces.UnusedUses" />
|
||||
|
||||
<rule ref="SlevomatCodingStandard.TypeHints.DeclareStrictTypes">
|
||||
<rule ref="Squiz.WhiteSpace.OperatorSpacing">
|
||||
<properties>
|
||||
<property name="spacesCountAroundEqualsSign" value="0" />
|
||||
<property name="declareOnFirstLine" value="false" />
|
||||
<property name="linesCountBeforeDeclare" value="1" />
|
||||
<property name="linesCountAfterDeclare" value="1" />
|
||||
<property name="ignoreNewlines" value="true"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="Squiz.WhiteSpace.ObjectOperatorSpacing">
|
||||
<properties>
|
||||
<property name="ignoreNewlines" value="true"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="Squiz.WhiteSpace.ScopeKeywordSpacing"/>
|
||||
<rule ref="Squiz.WhiteSpace.SemicolonSpacing"/>
|
||||
<rule ref="Squiz.Commenting.BlockComment">
|
||||
<exclude name="Squiz.Commenting.BlockComment.WrongStart" />
|
||||
</rule>
|
||||
<rule ref="Squiz.Commenting.ClassComment">
|
||||
<exclude name="Squiz.Commenting.ClassComment.Missing" />
|
||||
<exclude name="Squiz.Commenting.ClassComment.TagNotAllowed" />
|
||||
</rule>
|
||||
<rule ref="Squiz.Commenting.DocCommentAlignment"/>
|
||||
<rule ref="Squiz.Commenting.EmptyCatchComment"/>
|
||||
<rule ref="Squiz.Commenting.FunctionComment">
|
||||
<exclude name="Squiz.Commenting.FunctionComment.MissingParamComment" />
|
||||
</rule>
|
||||
<rule ref="Squiz.Commenting.FunctionCommentThrowTag"/>
|
||||
<rule ref="Squiz.Commenting.InlineComment">
|
||||
<exclude name="Squiz.Commenting.InlineComment.DocBlock" />
|
||||
</rule>
|
||||
<rule ref="Squiz.Commenting.LongConditionClosingComment">
|
||||
<exclude name="Squiz.Commenting.LongConditionClosingComment.SpacingBefore" />
|
||||
</rule>
|
||||
<rule ref="Squiz.Commenting.PostStatementComment"/>
|
||||
<rule ref="Squiz.Commenting.VariableComment"/>
|
||||
<rule ref="SlevomatCodingStandard.Namespaces.UnusedUses.UnusedUse" />
|
||||
|
||||
<!-- For Laravel migrations -->
|
||||
<rule ref="PSR1.Classes.ClassDeclaration.MissingNamespace">
|
||||
<exclude-pattern>*/database/migrations/*</exclude-pattern>
|
||||
</rule>
|
||||
|
|
|
|||
1
resources/js/vendor/ckeditor/.gitignore
vendored
Normal file
1
resources/js/vendor/ckeditor/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
node_modules
|
||||
49
resources/js/vendor/ckeditor/LICENSE.md
vendored
Normal file
49
resources/js/vendor/ckeditor/LICENSE.md
vendored
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
Software License Agreement
|
||||
==========================
|
||||
|
||||
Copyright (c) 2014-2021, CKSource - Frederico Knabben. All rights reserved.
|
||||
|
||||
Online builder code samples are licensed under the terms of the MIT License (see Appendix A):
|
||||
|
||||
http://en.wikipedia.org/wiki/MIT_License
|
||||
|
||||
CKEditor 5 collaboration features are only available under a commercial license. [Contact us](https://ckeditor.com/contact/) for more details.
|
||||
|
||||
Free 30-days trials of CKEditor 5 collaboration features are available:
|
||||
* https://ckeditor.com/collaboration/ - Real-time collaboration (with all features).
|
||||
* https://ckeditor.com/collaboration/comments/ - Inline comments feature (without real-time collaborative editing).
|
||||
* https://ckeditor.com/collaboration/track-changes/ - Track changes feature (without real-time collaborative editing).
|
||||
|
||||
Trademarks
|
||||
----------
|
||||
|
||||
CKEditor is a trademark of CKSource - Frederico Knabben. All other brand
|
||||
and product names are trademarks, registered trademarks or service
|
||||
marks of their respective holders.
|
||||
|
||||
---
|
||||
|
||||
Appendix A: The MIT License
|
||||
---------------------------
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014-2021, CKSource - Frederico Knabben
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
68
resources/js/vendor/ckeditor/README.md
vendored
Normal file
68
resources/js/vendor/ckeditor/README.md
vendored
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
# CKEditor 5 editor generated with the online builder
|
||||
|
||||
This repository presents a CKEditor 5 editor build generated by the [Online builder tool](https://ckeditor.com/ckeditor-5/online-builder)
|
||||
|
||||
## Quick start
|
||||
|
||||
1. Open the `sample/index.html` page in the browser.
|
||||
|
||||
If you picked the real-time collaboration plugins:
|
||||
|
||||
2. Fill the dialog with correct token, websocket and upload URL endpoints. If you do not have these yet or do not know their meaning, [contact us](https://ckeditor.com/contact/).
|
||||
|
||||
3. Copy the URL and share it or paste in another tab to enjoy real-time collaborative editing.
|
||||
|
||||
If you picked the non-real-time collaboration plugins:
|
||||
|
||||
2. Fill the prompt with the license key. If you do not have the license key yet [contact us](https://ckeditor.com/contact/).
|
||||
|
||||
## Configuring build
|
||||
|
||||
Changes like changing toolbar items, changing order of icons or customizing plugin configurations should be relatively easy to make. Open the `sample/index.html` file and edit the script that initialized the CKEditor 5. Save the file and refresh the browser. That's all.
|
||||
|
||||
*Note:* If you have any problems with browser caching use the `Ctrl + R` or `Cmd + R` shortcut depending on your system.
|
||||
|
||||
However if you want to remove or add a plugin to the build you need to follow the next step of this guide.
|
||||
|
||||
Note that it is also possible to go back to the [Online builder tool](https://ckeditor.com/ckeditor-5/online-builder) and pick other set of plugins. But we encourage you to try the harder way and to learn the principles of Node.js and CKEditor 5 ecosystems that will allow you to do more cool things in the future!
|
||||
|
||||
### Installation
|
||||
|
||||
In order to rebuild the application you need to install all dependencies first. To do it, open the terminal in the project directory and type:
|
||||
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
Make sure that you have the `node` and `npm` installed first. If not, then follow the instructions on the [Node.js documentation page](https://nodejs.org/en/).
|
||||
|
||||
### Adding or removing plugins
|
||||
|
||||
Now you can install additional plugin in the build. Just follow the [Adding a plugin to an editor tutorial](https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/installing-plugins.html#adding-a-plugin-to-an-editor)
|
||||
|
||||
### Rebuilding editor
|
||||
|
||||
If you have already done the [Installation](#installation) and [Adding or removing plugins](#adding-or-removing-plugins) steps, you're ready to rebuild the editor by running the following command:
|
||||
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
|
||||
This will build the CKEditor 5 to the `build` directory. You can open your browser and you should be able to see the changes you've made in the code. If not, then try to refresh also the browser cache by typing `Ctrl + R` or `Cmd + R` depending on your system.
|
||||
|
||||
## What's next?
|
||||
|
||||
Follow the guides available on https://ckeditor.com/docs/ckeditor5/latest/framework/index.html and enjoy the document editing.
|
||||
|
||||
## FAQ
|
||||
| Where is the place to report bugs and feature requests?
|
||||
|
||||
You can create an issue on https://github.com/ckeditor/ckeditor5/issues including the build id - `unyb7c61pdjq-xt0bz4ltrghq`. Make sure that the question / problem is unique, please look for a possibly asked questions in the search box. Duplicates will be closed.
|
||||
|
||||
| Where can I learn more about the CKEditor 5 framework?
|
||||
|
||||
Here: https://ckeditor.com/docs/ckeditor5/latest/framework/
|
||||
|
||||
| Is it possible to use online builder with common frameworks like React, Vue or Angular?
|
||||
|
||||
Not yet, but it these integrations will be available at some point in the future.
|
||||
119819
resources/js/vendor/ckeditor/build/ckeditor.js
vendored
Normal file
119819
resources/js/vendor/ckeditor/build/ckeditor.js
vendored
Normal file
File diff suppressed because one or more lines are too long
23
resources/js/vendor/ckeditor/build/ckeditor.js.LICENSE.txt
vendored
Normal file
23
resources/js/vendor/ckeditor/build/ckeditor.js.LICENSE.txt
vendored
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
/* istanbul ignore else -- @preserve */
|
||||
|
||||
/* istanbul ignore else: This is always true because otherwise it would not register a reducer callback. -- @preserve */
|
||||
|
||||
/* istanbul ignore file -- @preserve */
|
||||
|
||||
/* istanbul ignore if -- @preserve */
|
||||
|
||||
/* istanbul ignore if: paranoid check -- @preserve */
|
||||
|
||||
/* istanbul ignore next -- @preserve */
|
||||
|
||||
/* istanbul ignore next: paranoid check -- @preserve */
|
||||
|
||||
/*!
|
||||
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||
* For licensing, see LICENSE.md.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
||||
*/
|
||||
7818
resources/js/vendor/ckeditor/build/styles.css
vendored
Normal file
7818
resources/js/vendor/ckeditor/build/styles.css
vendored
Normal file
File diff suppressed because it is too large
Load diff
1
resources/js/vendor/ckeditor/build/translations/af.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/af.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['af'] = d['af'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 van %1","Align center":"Belyn in die middel","Align left":"Belyn links","Align right":"Belyn regs","Block quote":"Verwysingsaanhaling",Bold:"Vet",Cancel:"Kanselleer",Code:"Bronkode",Find:"Soek","Find and replace":"Soek en vervang","Find in text…":"Soek in teks …","Insert code block":"Voeg bronkodeblok in",Italic:"Kursief",Justify:"Belyn beide kante","Match case":"Hooflettersensitief","Next result":"Volgende resultaat","Plain text":"Gewone skrif","Previous result":"Vorige resultaat","Remove color":"Verwyder kleur","Remove Format":"Verwyder formatering",Replace:"Vervang","Replace all":"Vervang alles","Replace with…":"Vervang met ...","Restore default":"Herstel verstek",Save:"Stoor","Show more items":"Wys meer items","Show options":"Wys opsies",Strikethrough:"Deurstreep","Text alignment":"Teksbelyning","Text alignment toolbar":"Teksbelyning nutsbank","Text to find must not be empty.":"Soekteks mag nie leeg wees nie.","Tip: Find some text first in order to replace it.":"Wenk: Soek eers 'n bietjie teks om dit te vervang.",Underline:"Onderstreep","Whole words only":"Slegs hele woorde"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/ar.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/ar.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/ast.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/ast.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['ast'] = d['ast'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Bold:"Negrina","Break text":"","Bulleted List":"Llista con viñetes","Bulleted list styles toolbar":"",Cancel:"Encaboxar","Caption for image: %0":"","Caption for the image":"","Centered image":"","Change image text alternative":"",Circle:"",Code:"",Decimal:"","Decimal with leading zero":"","Dim grey":"",Disc:"",Downloadable:"","Dropdown toolbar":"","Edit block":"","Edit link":"","Editor block content toolbar":"","Editor contextual toolbar":"","Editor editing area: %0":"","Editor toolbar":"","Enter image caption":"","Full size image":"Imaxen a tamañu completu",Green:"",Grey:"",HEX:"","Image resize list":"","Image toolbar":"","image widget":"complementu d'imaxen","In line":"",Insert:"","Insert image":"","Insert image via URL":"",Italic:"Cursiva","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"Enllazar","Link image":"","Link URL":"URL del enllaz","List properties":"","Lower-latin":"","Lower–roman":"",Next:"","Numbered List":"Llista numberada","Numbered list styles toolbar":"","Open in a new tab":"","Open link in new tab":"",Orange:"",Original:"",Previous:"",Purple:"",Red:"",Redo:"Refacer","Remove color":"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Restore default":"","Reversed order":"","Rich Text Editor":"Editor de testu arriquecíu","Right aligned image":"",Save:"Guardar","Show more items":"","Side image":"Imaxen llateral",Square:"","Start at":"","Start index must be greater than 0.":"",Strikethrough:"","Text alternative":"","This link has no URL":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"",Turquoise:"",Underline:"",Undo:"Desfacer",Unlink:"Desenllazar",Update:"","Update image URL":"","Upload failed":"","Upper-latin":"","Upper-roman":"",White:"","Wrap text":"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/az.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/az.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/bg.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/bg.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/bn.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/bn.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/bs.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/bs.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['bs'] = d['bs'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 od %1",Accept:"","Align center":"Centrirati","Align left":"Lijevo poravnanje","Align right":"Desno poravnanje",Big:"","Block quote":"Citat",Bold:"Podebljano","Break text":"",Cancel:"Poništi","Caption for image: %0":"","Caption for the image":"","Centered image":"Centrirana slika","Change image text alternative":"Promijeni ALT atribut za sliku","Choose heading":"Odaberi naslov",Code:"Kod",Default:"Zadani","Document colors":"","Enter image caption":"Unesi naziv slike",Find:"Pronađi","Find and replace":"Pronađi i zamijeni","Find in text…":"Pronađi u tekstu","Font Background Color":"Boja pozadine","Font Color":"Boja","Font Family":"Font","Font Size":"Veličina fonta","Full size image":"",Heading:"Naslov","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"Naslov 3","Heading 4":"Naslov 4","Heading 5":"Naslov 5","Heading 6":"Naslov 6","Horizontal line":"Horizontalna linija",Huge:"","Image resize list":"Lista veličina slike","Image toolbar":"","image widget":"","In line":"",Insert:"Umetni","Insert code block":"Umetni kod blok","Insert image":"Umetni sliku","Insert image via URL":"Umetni sliku preko URLa",Italic:"Zakrivljeno",Justify:"","Left aligned image":"Lijevo poravnata slika","Match case":"Podudaranje","Next result":"",Original:"Original",Paragraph:"Paragraf","Plain text":"Tekst","Previous result":"Prethodni rezultat","Remove color":"Ukloni boju",Replace:"Zamijeni","Replace all":"Zamijeni sve","Replace with…":"Zamijeni sa...","Resize image":"Promijeni veličinu slike","Resize image to %0":"","Resize image to the original size":"Postavi originalnu veličinu slike","Restore default":"Vrati na zadano","Right aligned image":"Desno poravnata slika",Save:"Sačuvaj","Show more items":"Prikaži više stavki","Show options":"Prikaži opcije","Side image":"",Small:"",Strikethrough:"Precrtano","Text alignment":"Poravnanje teksta","Text alignment toolbar":"Traka za poravnanje teksta","Text alternative":"ALT atribut","Text to find must not be empty.":"Unesite tekst za pretragu.",Tiny:"","Tip: Find some text first in order to replace it.":"",Underline:"Podcrtano",Update:"Ažuriraj","Update image URL":"Ažuriraj URL slike","Upload failed":"Učitavanje slike nije uspjelo","Whole words only":"Samo cijele riječi","Wrap text":"Prelomi tekst"} );l.getPluralForm=function(n){return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/ca.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/ca.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/cs.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/cs.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/da.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/da.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/de-ch.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/de-ch.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/de.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/de.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/el.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/el.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/en-au.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/en-au.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/en-gb.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/en-gb.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/en.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/en.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/eo.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/eo.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['eo'] = d['eo'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Bold:"grasa","Break text":"","Bulleted List":"Bula Listo","Bulleted list styles toolbar":"",Cancel:"Nuligi","Caption for image: %0":"","Caption for the image":"","Centered image":"","Change image text alternative":"Ŝanĝu la alternativan tekston de la bildo","Choose heading":"Elektu ĉapon",Circle:"",Code:"",Decimal:"","Decimal with leading zero":"","Dim grey":"",Disc:"",Downloadable:"","Dropdown toolbar":"","Edit block":"","Edit link":"","Editor block content toolbar":"","Editor contextual toolbar":"","Editor editing area: %0":"","Editor toolbar":"","Enter image caption":"Skribu klarigon pri la bildo","Full size image":"Bildo kun reala dimensio",Green:"",Grey:"",Heading:"Ĉapo","Heading 1":"Ĉapo 1","Heading 2":"Ĉapo 2","Heading 3":"Ĉapo 3","Heading 4":"","Heading 5":"","Heading 6":"",HEX:"","Image resize list":"","Image toolbar":"","image widget":"bilda fenestraĵo","In line":"",Insert:"","Insert image":"Enmetu bildon","Insert image via URL":"",Italic:"kursiva","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"Ligilo","Link image":"","Link URL":"URL de la ligilo","List properties":"","Lower-latin":"","Lower–roman":"",Next:"","Numbered List":"Numerita Listo","Numbered list styles toolbar":"","Open in a new tab":"","Open link in new tab":"",Orange:"",Original:"",Paragraph:"Paragrafo",Previous:"",Purple:"",Red:"",Redo:"Refari","Remove color":"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Restore default":"","Reversed order":"","Rich Text Editor":"Redaktilo de Riĉa Teksto","Right aligned image":"",Save:"Konservi","Show more items":"","Side image":"Flanka biildo",Square:"","Start at":"","Start index must be greater than 0.":"",Strikethrough:"","Text alternative":"Alternativa teksto","This link has no URL":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"",Turquoise:"",Underline:"",Undo:"Malfari",Unlink:"Malligi",Update:"","Update image URL":"","Upload failed":"","Upper-latin":"","Upper-roman":"",White:"","Wrap text":"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/es-co.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/es-co.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['es-co'] = d['es-co'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 de %1","Align center":"Centrar","Align left":"Alinear a la izquierda","Align right":"Alinear a la derecha","Block quote":"Cita de bloque",Bold:"Negrita",Cancel:"Cancelar","Characters: %0":"Caracteres: %0",Code:"Código","Insert code block":"Insertar bloque de código",Italic:"Cursiva",Justify:"Justificar","Plain text":"Texto plano","Remove color":"Quitar color","Restore default":"Restaurar valores predeterminados",Save:"Guardar","Show more items":"Mostrar más elementos",Strikethrough:"Tachado","Text alignment":"Alineación de texto","Text alignment toolbar":"Herramientas de alineación de texto",Underline:"Subrayado","Upload in progress":"Carga en progreso","Words: %0":"Palabras: %0"} );l.getPluralForm=function(n){return n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/es.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/es.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/et.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/et.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/eu.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/eu.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['eu'] = d['eu'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"Aipua",Blue:"",Bold:"Lodia","Break text":"","Bulleted List":"Buletdun zerrenda","Bulleted list styles toolbar":"",Cancel:"Utzi","Caption for image: %0":"","Caption for the image":"","Centered image":"Zentratutako irudia","Change image text alternative":"Aldatu irudiaren ordezko testua","Choose heading":"Aukeratu izenburua",Circle:"",Code:"Kodea",Decimal:"","Decimal with leading zero":"","Dim grey":"",Disc:"",Downloadable:"","Dropdown toolbar":"","Edit block":"","Edit link":"","Editor block content toolbar":"","Editor contextual toolbar":"","Editor editing area: %0":"","Editor toolbar":"","Enter image caption":"Sartu irudiaren epigrafea","Full size image":"Tamaina osoko irudia",Green:"",Grey:"",Heading:"Izenburua","Heading 1":"Izenburua 1","Heading 2":"Izenburua 2","Heading 3":"Izenburua 3","Heading 4":"","Heading 5":"","Heading 6":"",HEX:"","Image resize list":"","Image toolbar":"","image widget":"irudi widgeta","In line":"",Insert:"","Insert image":"Txertatu irudia","Insert image via URL":"",Italic:"Etzana","Left aligned image":"Ezkerrean lerrokatutako irudia","Light blue":"","Light green":"","Light grey":"",Link:"Esteka","Link image":"","Link URL":"Estekaren URLa","List properties":"","Lower-latin":"","Lower–roman":"",Next:"","Numbered List":"Zenbakidun zerrenda","Numbered list styles toolbar":"","Open in a new tab":"","Open link in new tab":"",Orange:"",Original:"",Paragraph:"Paragrafoa",Previous:"",Purple:"",Red:"",Redo:"Berregin","Remove color":"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Restore default":"","Reversed order":"","Rich Text Editor":"Testu aberastuaren editorea","Right aligned image":"Eskuinean lerrokatutako irudia",Save:"Gorde","Show more items":"","Side image":"Alboko irudia",Square:"","Start at":"","Start index must be greater than 0.":"",Strikethrough:"","Text alternative":"Ordezko testua","This link has no URL":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"",Turquoise:"",Underline:"Azpimarra",Undo:"Desegin",Unlink:"Desestekatu",Update:"","Update image URL":"","Upload failed":"Kargatzeak huts egin du","Upper-latin":"","Upper-roman":"",White:"","Wrap text":"",Yellow:""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/fa.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/fa.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/fi.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/fi.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/gl.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/gl.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/gu.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/gu.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['gu'] = d['gu'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Block quote":" વિચાર ટાંકો",Bold:"ઘાટુ - બોલ્ડ્",Cancel:"",Code:"",Italic:"ત્રાંસુ - ઇટલિક્","Remove color":"","Restore default":"",Save:"","Show more items":"",Strikethrough:"",Underline:"નીચે લિટી - અન્ડરલાઇન્"} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/he.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/he.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/hi.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/hi.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/hr.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/hr.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/hu.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/hu.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/id.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/id.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/it.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/it.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/ja.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/ja.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/jv.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/jv.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['jv'] = d['jv'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 saking %1",Accept:"","Align center":"Rata tengah","Align left":"Rata kiwa","Align right":"Rata tengen",Big:"Ageng","Blue marker":"Penandha biru",Bold:"Kandhel","Break text":"","Bulleted List":"","Bulleted list styles toolbar":"",Cancel:"Batal","Caption for image: %0":"","Caption for the image":"","Centered image":"Gambar ing tengah","Change image text alternative":"","Choose heading":"",Circle:"Bunder",Code:"Kode",Decimal:"","Decimal with leading zero":"",Default:"Default",Disc:"Kaset","Document colors":"Warni dokumen","Enter image caption":"",Find:"Pados","Find and replace":"Pados lan gantos","Find in text…":"Pados ing seratan","Font Background Color":"Warni Latar Aksara","Font Color":"Warni aksara","Font Family":"Jinising Aksara","Font Size":"Ukuran aksara","Full size image":"Gambar ukuran kebak","Green marker":"Panandha ijem","Green pen":"Pen ijem",Heading:"","Heading 1":"","Heading 2":"","Heading 3":"","Heading 4":"","Heading 5":"","Heading 6":"",Highlight:"Sorot","Horizontal line":"Garis horisontal","HTML object":"Obyek HTML",Huge:"Langkung ageng","Image resize list":"","Image toolbar":"","image widget":"","In line":"",Insert:"Tambah","Insert code block":"","Insert image":"Tambahaken gambar","Insert image via URL":"Tambah gambar saking URL",Italic:"Miring",Justify:"Rata kiwa tengen","Left aligned image":"Gambar ing kiwa","List properties":"","Lower-latin":"","Lower–roman":"","Match case":"Samikaken aksara","Next result":"Kasil salajengipun","Numbered List":"","Numbered list styles toolbar":"",Original:"Asli",Paragraph:"","Pink marker":"Penandha abrit jambon","Plain text":"Seratan biasa","Previous result":"Kasil saderengipun","Red pen":"Penandha abrit","Remove color":"Busek warni","Remove highlight":"Busek sorot",Replace:"Gantos","Replace all":"Gantos sedaya","Replace with…":"Gantos kaliyan...","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Restore default":"Mangsulaken default","Reversed order":"Dipunwangsul","Right aligned image":"Gambar ing tengen",Save:"Rimat","Show more items":"Tampilaken langkung kathah","Show options":"Tampilaken pilihan","Side image":"",Small:"Alit",Square:"Kotak","Start at":"Wiwit saking","Start index must be greater than 0.":"",Strikethrough:"Seratan dicoret","Text alignment":"Perataan seratan","Text alignment toolbar":"","Text alternative":"","Text highlight toolbar":"","Text to find must not be empty.":"Seratan ingkang dipunpadosi mboten angsal kosong.",Tiny:"Langkung alit","Tip: Find some text first in order to replace it.":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"",Underline:"Garis ngandhap",Update:"","Update image URL":"","Upload failed":"","Upper-latin":"","Upper-roman":"","Whole words only":"Sedayaning ukanten","Wrap text":"","Yellow marker":"Panandha jene"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/kk.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/kk.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['kk'] = d['kk'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"Align center":"Ортадан туралау","Align left":"Солға туралау","Align right":"Оңға туралау",Justify:"","Text alignment":"Мәтінді туралау","Text alignment toolbar":"Мәтінді туралау құралдар тақтасы"} );l.getPluralForm=function(n){return (n!=1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/km.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/km.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['km'] = d['km'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align center":"តម្រឹមកណ្ដាល","Align left":"តម្រឹមឆ្វេង","Align right":"តម្រឹមស្ដាំ",Aquamarine:"",Black:"","Block quote":"ប្លុកពាក្យសម្រង់",Blue:"",Bold:"ដិត","Break text":"","Bulleted List":"បញ្ជីជាចំណុច","Bulleted list styles toolbar":"",Cancel:"បោះបង់","Caption for image: %0":"","Caption for the image":"","Centered image":"","Change image text alternative":"","Choose heading":"ជ្រើសរើសក្បាលអត្ថបទ",Circle:"",Code:"កូដ",Decimal:"","Decimal with leading zero":"","Dim grey":"",Disc:"",Downloadable:"","Dropdown toolbar":"","Edit block":"","Edit link":"","Editor block content toolbar":"","Editor contextual toolbar":"","Editor editing area: %0":"","Editor toolbar":"","Enter image caption":"បញ្ចូលពាក្យពណ៌នារូបភាព","Full size image":"រូបភាពពេញទំហំ",Green:"",Grey:"",Heading:"ក្បាលអត្ថបទ","Heading 1":"ក្បាលអត្ថបទ 1","Heading 2":"ក្បាលអត្ថបទ 2","Heading 3":"ក្បាលអត្ថបទ 3","Heading 4":"","Heading 5":"","Heading 6":"",HEX:"","Image resize list":"","Image toolbar":"","image widget":"វិដជិតរូបភាព","In line":"",Insert:"","Insert image":"បញ្ចូលរូបភាព","Insert image via URL":"",Italic:"ទ្រេត",Justify:"តម្រឹមសងខាង","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"តំណ","Link image":"","Link URL":"URL តំណ","List properties":"","Lower-latin":"","Lower–roman":"",Next:"","Numbered List":"បញ្ជីជាលេខ","Numbered list styles toolbar":"","Open in a new tab":"","Open link in new tab":"",Orange:"",Original:"",Paragraph:"កថាខណ្ឌ",Previous:"",Purple:"",Red:"",Redo:"ធ្វើវិញ","Remove color":"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Restore default":"","Reversed order":"","Rich Text Editor":"កម្មវិធីកែសម្រួលអត្ថបទសម្បូរបែប","Right aligned image":"",Save:"រក្សាទុ","Show more items":"","Side image":"រូបភាពនៅខាង",Square:"","Start at":"","Start index must be greater than 0.":"",Strikethrough:"ឆូតកណ្ដាល","Text alignment":"ការតម្រឹមអក្សរ","Text alignment toolbar":"របារឧបករណ៍តម្រឹមអក្សរ","Text alternative":"","This link has no URL":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"",Turquoise:"",Underline:"គូសបន្ទាត់ក្រោម",Undo:"លែងធ្វើវិញ",Unlink:"ផ្ដាច់តំណ",Update:"","Update image URL":"","Upload failed":"អាប់ឡូតមិនបាន","Upper-latin":"","Upper-roman":"",White:"","Wrap text":"",Yellow:""} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/kn.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/kn.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['kn'] = d['kn'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Aquamarine:"",Black:"","Block quote":"ಗುರುತಿಸಲಾದ ಉಲ್ಲೇಖ",Blue:"",Bold:"ದಪ್ಪ","Break text":"","Bulleted List":"ಬುಲೆಟ್ ಪಟ್ಟಿ","Bulleted list styles toolbar":"",Cancel:"ರದ್ದುಮಾಡು","Caption for image: %0":"","Caption for the image":"","Centered image":"","Change image text alternative":"ಚಿತ್ರದ ಬದಲಿ ಪಠ್ಯ ಬದಲಾಯಿಸು","Choose heading":"ಶೀರ್ಷಿಕೆ ಆಯ್ಕೆಮಾಡು",Circle:"",Code:"",Decimal:"","Decimal with leading zero":"","Dim grey":"",Disc:"",Downloadable:"","Dropdown toolbar":"","Edit block":"","Edit link":"","Editor block content toolbar":"","Editor contextual toolbar":"","Editor editing area: %0":"","Editor toolbar":"","Enter image caption":"ಚಿತ್ರದ ಶೀರ್ಷಿಕೆ ಸೇರಿಸು","Full size image":"ಪೂರ್ಣ ಅಳತೆಯ ಚಿತ್ರ",Green:"",Grey:"",Heading:"ಶೀರ್ಷಿಕೆ","Heading 1":"ಶೀರ್ಷಿಕೆ 1","Heading 2":"ಶೀರ್ಷಿಕೆ 2","Heading 3":"ಶೀರ್ಷಿಕೆ 3","Heading 4":"","Heading 5":"","Heading 6":"",HEX:"","Image resize list":"","Image toolbar":"","image widget":"ಚಿತ್ರ ವಿಜೆಟ್","In line":"",Insert:"","Insert image":"","Insert image via URL":"",Italic:"ಇಟಾಲಿಕ್","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"ಕೊಂಡಿ","Link image":"","Link URL":"ಕೊಂಡಿ ಸಂಪರ್ಕಿಸು","List properties":"","Lower-latin":"","Lower–roman":"",Next:"","Numbered List":"ಸಂಖ್ಯೆಯ ಪಟ್ಟಿ","Numbered list styles toolbar":"","Open in a new tab":"","Open link in new tab":"",Orange:"",Original:"",Paragraph:"ಪ್ಯಾರಾಗ್ರಾಫ್",Previous:"",Purple:"",Red:"",Redo:"ಮತ್ತೆ ಮಾಡು","Remove color":"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Restore default":"","Reversed order":"","Rich Text Editor":"ಸಮೃದ್ಧ ಪಠ್ಯ ಸಂಪಾದಕ","Right aligned image":"",Save:"ಉಳಿಸು","Show more items":"","Side image":"ಪಕ್ಕದ ಚಿತ್ರ",Square:"","Start at":"","Start index must be greater than 0.":"",Strikethrough:"","Text alternative":"ಪಠ್ಯದ ಬದಲಿ","This link has no URL":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"",Turquoise:"",Underline:"",Undo:"ರದ್ದು",Unlink:"ಕೊಂಡಿ ತೆಗೆ",Update:"","Update image URL":"","Upload failed":"","Upper-latin":"","Upper-roman":"",White:"","Wrap text":"",Yellow:""} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/ko.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/ko.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/ku.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/ku.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/lt.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/lt.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/lv.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/lv.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/ms.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/ms.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/nb.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/nb.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/ne.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/ne.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/nl.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/nl.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/no.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/no.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/oc.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/oc.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['oc'] = d['oc'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Bold:"Gras",Cancel:"Anullar",Code:"",Italic:"Italica","Remove color":"","Restore default":"",Save:"Enregistrar","Show more items":"",Strikethrough:"",Underline:""} );l.getPluralForm=function(n){return (n > 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/pl.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/pl.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/pt-br.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/pt-br.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/pt.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/pt.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/ro.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/ro.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/ru.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/ru.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/si.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/si.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['si'] = d['si'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Bold:"තදකුරු","Break text":"","Bulleted List":"බුලටිත ලැයිස්තුව","Bulleted list styles toolbar":"",Cancel:"","Caption for image: %0":"","Caption for the image":"","Centered image":"","Change image text alternative":"",Circle:"",Code:"",Decimal:"","Decimal with leading zero":"",Disc:"","Enter image caption":"","Full size image":"","Image resize list":"","Image toolbar":"","image widget":"","In line":"",Insert:"","Insert image":"පින්තූරය ඇතුල් කරන්න","Insert image via URL":"",Italic:"ඇලකුරු","Left aligned image":"","List properties":"","Lower-latin":"","Lower–roman":"","Numbered List":"අංකිත ලැයිස්තුව","Numbered list styles toolbar":"",Original:"",Redo:"නැවත කරන්න","Remove color":"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Restore default":"","Reversed order":"","Right aligned image":"",Save:"","Show more items":"","Side image":"",Square:"","Start at":"","Start index must be greater than 0.":"",Strikethrough:"","Text alternative":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"",Underline:"",Undo:"අහෝසි කරන්න",Update:"","Update image URL":"","Upload failed":"උඩුගත කිරීම අසාර්ථක විය","Upper-latin":"","Upper-roman":"","Wrap text":""} );l.getPluralForm=function(n){return (n != 1);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/sk.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/sk.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/sl.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/sl.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['sl'] = d['sl'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"",Accept:"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align center":"Sredinska poravnava","Align left":"Poravnava levo","Align right":"Poravnava desno","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Akvamarin",Background:"",Big:"Veliko",Black:"Črna","Block quote":"Blokiraj citat",Blue:"Modra","Blue marker":"Modra oznaka",Bold:"Krepko",Border:"",Cancel:"Prekliči","Cell properties":"","Center table":"","Choose heading":"Izberi naslov",Code:"Koda",Color:"","Color picker":"",Column:"",Dashed:"",Default:"Privzeto","Delete column":"","Delete row":"","Dim grey":"Temno siva",Dimensions:"","Document colors":"Barve dokumenta",Dotted:"",Double:"","Dropdown toolbar":"","Edit block":"","Editor block content toolbar":"","Editor contextual toolbar":"","Editor editing area: %0":"","Editor toolbar":"","Enter table caption":"","Font Background Color":"Barva ozadja pisave","Font Color":"Barva pisave","Font Family":"Vrsta oz. tip pisave","Font Size":"Velikost pisave",Green:"Zelena","Green marker":"Zelena oznaka","Green pen":"Zeleno pisalo",Grey:"Siva",Groove:"","Header column":"","Header row":"",Heading:"Naslov","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"Naslov 3","Heading 4":"Naslov 4","Heading 5":"Naslov 5","Heading 6":"Naslov 6",Height:"",HEX:"",Highlight:"Označi","Horizontal line":"Vodoravna črta","Horizontal text alignment toolbar":"",Huge:"Ogromno","Insert column left":"","Insert column right":"","Insert row above":"","Insert row below":"","Insert table":"Vstavi tabelo",Inset:"",Italic:"Poševno",Justify:"Postavi na sredino","Justify cell text":"","Light blue":"Svetlo modra","Light green":"Svetlo zelena","Light grey":"Svetlo siva","Merge cell down":"","Merge cell left":"","Merge cell right":"","Merge cell up":"","Merge cells":"",Next:"",None:"",Orange:"Oranžna",Outset:"",Padding:"",Paragraph:"Odstavek","Pink marker":"Rožnata oznaka",Previous:"",Purple:"Vijolična",Red:"Rdeča","Red pen":"Rdeče pisalo","Remove color":"Odstrani barvo","Remove highlight":"Odstrani oznako","Restore default":"","Rich Text Editor":"",Ridge:"",Row:"",Save:"Shrani","Select column":"","Select row":"","Show more items":"",Small:"Majhna",Solid:"","Split cell horizontally":"","Split cell vertically":"",Strikethrough:"Prečrtano",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alignment":"Poravnava besedila","Text alignment toolbar":"Orodna vrstica besedila","Text highlight toolbar":"Orodna vrstica označevanja","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"",Tiny:"Drobna","Toggle caption off":"","Toggle caption on":"",Turquoise:"Turkizna",Underline:"Podčrtaj","Vertical text alignment toolbar":"",White:"Bela",Width:"",Yellow:"Rumena","Yellow marker":"Rumena oznaka"} );l.getPluralForm=function(n){return (n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/sq.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/sq.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/sr-latn.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/sr-latn.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/sr.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/sr.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/sv.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/sv.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/th.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/th.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/tk.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/tk.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/tr.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/tr.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/tt.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/tt.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(d){ const l = d['tt'] = d['tt'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"","Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Aquamarine:"Аквамарин",Background:"",Black:"Кара",Blue:"Зәңгәр",Bold:"Калын",Border:"","Break text":"","Bulleted List":"","Bulleted list styles toolbar":"",Cancel:"Баш тарт","Caption for image: %0":"","Caption for the image":"","Cell properties":"","Center table":"","Centered image":"","Change image text alternative":"",Circle:"Түгәрәк",Code:"Код",Color:"Төс","Color picker":"",Column:"",Dashed:"",Decimal:"","Decimal with leading zero":"","Delete column":"","Delete row":"","Dim grey":"",Dimensions:"",Disc:"Диск",Dotted:"",Double:"",Downloadable:"","Dropdown toolbar":"","Edit block":"","Edit link":"","Editor block content toolbar":"","Editor contextual toolbar":"","Editor editing area: %0":"","Editor toolbar":"","Enter image caption":"","Enter table caption":"",Find:"Таб","Find and replace":"","Find in text…":"Текстта таб...","Full size image":"",Green:"Яшел",Grey:"Соры",Groove:"","Header column":"","Header row":"",Height:"",HEX:"","Horizontal text alignment toolbar":"","Image resize list":"","Image toolbar":"","image widget":"","In line":"",Insert:"","Insert column left":"","Insert column right":"","Insert image":"","Insert image via URL":"","Insert row above":"","Insert row below":"","Insert table":"",Inset:"",Italic:"","Justify cell text":"","Left aligned image":"","Light blue":"Ачык зәңгәр","Light green":"Ачык яшел","Light grey":"Ачык соры",Link:"Сылтама","Link image":"","Link URL":"","List properties":"","Lower-latin":"","Lower–roman":"","Match case":"","Merge cell down":"","Merge cell left":"","Merge cell right":"","Merge cell up":"","Merge cells":"",Next:"","Next result":"",None:"","Numbered List":"","Numbered list styles toolbar":"","Open in a new tab":"","Open link in new tab":"",Orange:"Кызгылт",Original:"",Outset:"",Padding:"",Previous:"","Previous result":"",Purple:"Шәмәхә",Red:"Кызыл",Redo:"Кабатла","Remove color":"",Replace:"","Replace all":"","Replace with…":"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Restore default":"","Reversed order":"","Rich Text Editor":"",Ridge:"","Right aligned image":"",Row:"",Save:"Сакла","Select column":"","Select row":"","Show more items":"","Show options":"","Side image":"",Solid:"","Split cell horizontally":"","Split cell vertically":"",Square:"","Start at":"","Start index must be greater than 0.":"",Strikethrough:"",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"","Text alternative":"","Text to find must not be empty.":"","The color is invalid. Try \"#FF0000\" or \"rgb(255,0,0)\" or \"red\".":"","The value is invalid. Try \"10px\" or \"2em\" or simply \"2\".":"","This link has no URL":"","Tip: Find some text first in order to replace it.":"","Toggle caption off":"","Toggle caption on":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"",Turquoise:"Фервоз",Underline:"",Undo:"",Unlink:"",Update:"Яңарт","Update image URL":"","Upload failed":"","Upper-latin":"","Upper-roman":"","Vertical text alignment toolbar":"",White:"Ак","Whole words only":"",Width:"","Wrap text":"",Yellow:"Сары"} );l.getPluralForm=function(n){return 0;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
1
resources/js/vendor/ckeditor/build/translations/ug.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/ug.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
resources/js/vendor/ckeditor/build/translations/uk.js
vendored
Normal file
1
resources/js/vendor/ckeditor/build/translations/uk.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue