Compare commits
39 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c9a9d3ae4 | ||
|
|
f43cb28a7d | ||
|
|
5874ea315a | ||
|
|
dea14e0491 | ||
|
|
b2e6a25a92 | ||
|
|
97e7d7e33a | ||
|
|
5bca572e67 | ||
|
|
264be08046 | ||
|
|
c4fd2b048e | ||
|
|
120db17596 | ||
|
|
c747288704 | ||
|
|
324e796fc6 | ||
|
|
4512798e44 | ||
|
|
379ffe003f | ||
|
|
fc472db322 | ||
|
|
672af76d4b | ||
|
|
ecae3660d0 | ||
|
|
4eca9c7d24 | ||
|
|
cdc7e86682 | ||
|
|
cb9d7ac0d5 | ||
|
|
4421d8e770 | ||
|
|
cc2c137b26 | ||
|
|
05af5cf83c | ||
|
|
083e89364b | ||
|
|
9aa84edcf3 | ||
|
|
76a42c17f6 | ||
|
|
af13d298fd | ||
|
|
433edf13c8 | ||
|
|
2f90c82d74 | ||
|
|
6a82a59bc5 | ||
|
|
db25bec3e5 | ||
|
|
f42dc37674 | ||
|
|
f2a4a367e0 | ||
|
|
a7d30e8353 | ||
|
|
9a404dd61a | ||
|
|
32c6a9391d | ||
|
|
2dd2c78fa7 | ||
|
|
eef93adb2c | ||
|
|
a6370dcb47 |
24
.editorconfig
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
||||
|
||||
[docker-compose.yml]
|
||||
indent_size = 4
|
||||
|
||||
[*.scss]
|
||||
indent_size = 2
|
||||
|
||||
[*.{tsx,ts,cjs}]
|
||||
indent_size = 2
|
||||
65
.env.example
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
|
||||
APP_LOCALE=en
|
||||
APP_FALLBACK_LOCALE=en
|
||||
APP_FAKER_LOCALE=en_US
|
||||
|
||||
APP_MAINTENANCE_DRIVER=file
|
||||
# APP_MAINTENANCE_STORE=database
|
||||
|
||||
# PHP_CLI_SERVER_WORKERS=4
|
||||
|
||||
BCRYPT_ROUNDS=12
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_STACK=single
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=sqlite
|
||||
# DB_HOST=127.0.0.1
|
||||
# DB_PORT=3306
|
||||
# DB_DATABASE=laravel
|
||||
# DB_USERNAME=root
|
||||
# DB_PASSWORD=
|
||||
|
||||
SESSION_DRIVER=database
|
||||
SESSION_LIFETIME=120
|
||||
SESSION_ENCRYPT=false
|
||||
SESSION_PATH=/
|
||||
SESSION_DOMAIN=null
|
||||
|
||||
BROADCAST_CONNECTION=log
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=database
|
||||
|
||||
CACHE_STORE=database
|
||||
# CACHE_PREFIX=
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_CLIENT=phpredis
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_SCHEME=null
|
||||
MAIL_HOST=127.0.0.1
|
||||
MAIL_PORT=2525
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_FROM_ADDRESS="hello@example.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
VITE_APP_NAME="${APP_NAME}"
|
||||
4
.eslintignore
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
node_modules
|
||||
public
|
||||
vendor
|
||||
resources/ts/components/ui/
|
||||
74
.eslintrc.cjs
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
module.exports = {
|
||||
parser: "@typescript-eslint/parser",
|
||||
parserOptions: {
|
||||
ecmaVersion: 2020,
|
||||
sourceType: "module",
|
||||
ecmaFeatures: {
|
||||
jsx: true,
|
||||
},
|
||||
project: "./tsconfig.json",
|
||||
},
|
||||
settings: {
|
||||
react: {
|
||||
version: "detect",
|
||||
},
|
||||
"import/resolver": {
|
||||
typescript: {
|
||||
project: "./tsconfig.json",
|
||||
},
|
||||
alias: {
|
||||
map: [
|
||||
["@", "./resources/ts"],
|
||||
["&", "./resources/assets"],
|
||||
],
|
||||
extensions: [".ts", ".tsx", ".js", ".jsx"],
|
||||
},
|
||||
},
|
||||
},
|
||||
env: {
|
||||
browser: true,
|
||||
es2021: true,
|
||||
node: true,
|
||||
},
|
||||
extends: [
|
||||
"eslint:recommended",
|
||||
"plugin:react/recommended",
|
||||
"plugin:jsx-a11y/recommended",
|
||||
"plugin:react-hooks/recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"airbnb",
|
||||
"airbnb/hooks",
|
||||
"plugin:prettier/recommended",
|
||||
],
|
||||
plugins: [
|
||||
"react",
|
||||
"react-hooks",
|
||||
"jsx-a11y",
|
||||
"@typescript-eslint",
|
||||
"prettier",
|
||||
],
|
||||
rules: {
|
||||
"react/jsx-filename-extension": ["error", { extensions: [".tsx", ".jsx"] }],
|
||||
"react/react-in-jsx-scope": "off",
|
||||
"react/prop-types": "off",
|
||||
"react/require-default-props": "off",
|
||||
"import/extensions": [
|
||||
"error",
|
||||
"ignorePackages",
|
||||
{
|
||||
ts: "never",
|
||||
tsx: "never",
|
||||
js: "never",
|
||||
jsx: "never",
|
||||
},
|
||||
],
|
||||
"import/order": "off",
|
||||
"prettier/prettier": "error",
|
||||
"no-console": [
|
||||
"warn",
|
||||
{
|
||||
allow: ["warn", "error"],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
11
.gitattributes
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
* text=auto eol=lf
|
||||
|
||||
*.blade.php diff=html
|
||||
*.css diff=css
|
||||
*.html diff=html
|
||||
*.md diff=markdown
|
||||
*.php diff=php
|
||||
|
||||
/.github export-ignore
|
||||
CHANGELOG.md export-ignore
|
||||
.styleci.yml export-ignore
|
||||
27
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
*.log
|
||||
.DS_Store
|
||||
.env
|
||||
.env.backup
|
||||
.env.production
|
||||
.phpactor.json
|
||||
.phpunit.result.cache
|
||||
/.fleet
|
||||
/.idea
|
||||
/.nova
|
||||
/.phpunit.cache
|
||||
/.vscode
|
||||
/.zed
|
||||
/auth.json
|
||||
/node_modules
|
||||
/public/build
|
||||
/public/hot
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
/storage/pail
|
||||
/vendor
|
||||
Homestead.json
|
||||
Homestead.yaml
|
||||
Thumbs.db
|
||||
.npmrc
|
||||
bootstrap/ssr
|
||||
public/favicon-back
|
||||
|
|
@ -1,35 +1,23 @@
|
|||
.docker-build:
|
||||
stage: build
|
||||
image:
|
||||
name: gcr.io/kaniko-project/executor:v1.23.2-debug
|
||||
entrypoint: [ "" ]
|
||||
script:
|
||||
- /kaniko/executor --context "${CI_PROJECT_DIR}" --build-arg "GITLAB_USER=${CI_DEPLOY_USER}" --build-arg "GITLAB_PASSWORD=${CI_DEPLOY_PASSWORD}" --dockerfile "${CI_PROJECT_DIR}/Dockerfile" --destination "${IMAGE_TAG}" --cache=true --cache-ttl 24h
|
||||
allow_failure: false
|
||||
|
||||
docker-build:staging:
|
||||
extends: .docker-build
|
||||
variables:
|
||||
IMAGE_TAG: "${CI_REGISTRY_IMAGE}:s-${CI_COMMIT_SHA}"
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == "trunk"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
|
||||
docker-build:latest:
|
||||
extends: .docker-build
|
||||
variables:
|
||||
IMAGE_TAG: "${CI_REGISTRY_IMAGE}:p-${CI_COMMIT_SHA}"
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "master"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
|
||||
include:
|
||||
- project: 'ldc-web/shared-ci'
|
||||
ref: 'main'
|
||||
file: 'deploy/deploy.yml'
|
||||
- project: "ldc-web/shared-ci"
|
||||
ref: "main"
|
||||
file: "lint/lint.yml"
|
||||
- project: "ldc-web/shared-ci"
|
||||
ref: "main"
|
||||
file: "security/security.yml"
|
||||
- project: "ldc-web/shared-ci"
|
||||
ref: "main"
|
||||
file: "build/docker-multistage.yml"
|
||||
- project: "ldc-web/shared-ci"
|
||||
ref: "main"
|
||||
file: "test/test.yml"
|
||||
- project: "ldc-web/shared-ci"
|
||||
ref: "main"
|
||||
file: "deploy/deploy.yml"
|
||||
|
||||
stages:
|
||||
- build
|
||||
- deploy
|
||||
- lint
|
||||
- security
|
||||
- build
|
||||
- test
|
||||
- deploy
|
||||
|
|
|
|||
11
.gitlab/issue_templates/bug.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
## Comportement constaté
|
||||
|
||||
|
||||
## Comportement attendu
|
||||
|
||||
|
||||
## Solution envisagée
|
||||
|
||||
|
||||
## Étapes pour la reproduction du bug
|
||||
*
|
||||
7
.gitlab/issue_templates/feature.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
## Présentation du besoin
|
||||
|
||||
|
||||
## Implémentation
|
||||
|
||||
|
||||
## Maquettes, documentations...
|
||||
3
.husky/commit-msg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
npx --no -- commitlint --config node_modules/@uwil/husky-config/commitlint.config.cjs --edit $1
|
||||
56
.stylelintrc.json
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"extends": [
|
||||
"stylelint-config-standard-scss",
|
||||
"stylelint-config-sass-guidelines",
|
||||
"stylelint-config-idiomatic-order"
|
||||
],
|
||||
"plugins": ["stylelint-scss"],
|
||||
"files": ["**/*.css", "**/*.scss"],
|
||||
"ignoreFiles": [
|
||||
"**/vendor/*.css",
|
||||
"**/vendor/**/*.css",
|
||||
"**/vendor/*.scss",
|
||||
"**/vendor/**/*.scss",
|
||||
"**/vendor/*.sass",
|
||||
"**/vendor/**/*.sass",
|
||||
"**/packages/*.css",
|
||||
"**/packages/**/*.css",
|
||||
"**/packages/*.scss",
|
||||
"**/packages/**/*.scss",
|
||||
"**/packages/*.sass",
|
||||
"**/packages/**/*.sass"
|
||||
],
|
||||
"customSyntax": "postcss-scss",
|
||||
"rules": {
|
||||
"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,
|
||||
"scss/double-slash-comment-empty-line-before": [
|
||||
"always",
|
||||
{
|
||||
"ignore": [
|
||||
"between-comments",
|
||||
"stylelint-commands",
|
||||
"inside-block"
|
||||
]
|
||||
}
|
||||
],
|
||||
"at-rule-no-unknown": null,
|
||||
"scss/at-rule-no-unknown": [
|
||||
true,
|
||||
{
|
||||
"ignoreAtRules": [
|
||||
"tailwind",
|
||||
"apply",
|
||||
"variants",
|
||||
"responsive",
|
||||
"screen",
|
||||
"layer"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
12
CHANGELOG.md
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
# Changelog
|
||||
|
||||
All notable changes to `laravel-project` will be documented in this file.
|
||||
|
||||
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
- This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
||||
- Commits respect [Conventionnal commits](https://www.conventionalcommits.org/en/v1.0.0/) & use [Gitmoji](https://gitmoji.dev/).
|
||||
|
||||
## **[v1.0.0] - 01/01/2026**
|
||||
|
||||
### Added
|
||||
- feat: 🎉 working project
|
||||
49
Dockerfile
|
|
@ -1,4 +1,49 @@
|
|||
FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/ldcweb-production-8.3:170625-101047
|
||||
FROM composer:2.8 AS vendor
|
||||
|
||||
ARG GITLAB_USER
|
||||
ARG GITLAB_PASSWORD
|
||||
|
||||
COPY database/ database/
|
||||
|
||||
COPY composer.json composer.json
|
||||
COPY composer.lock composer.lock
|
||||
|
||||
RUN composer config gitlab-token.lab.s-web.fr ${GITLAB_USER} ${GITLAB_PASSWORD}
|
||||
RUN composer install \
|
||||
--ignore-platform-reqs \
|
||||
--no-interaction \
|
||||
--no-plugins \
|
||||
--no-scripts \
|
||||
--no-dev \
|
||||
--prefer-dist
|
||||
|
||||
FROM node:20.18 AS frontend
|
||||
|
||||
ARG GITLAB_PASSWORD
|
||||
|
||||
RUN mkdir -p /app/public/build
|
||||
|
||||
COPY package*.json postcss.config.js tailwind.config.js tsconfig.json vite.config.ts .eslintrc.json .stylelintrc.json /app/
|
||||
COPY resources/ /app/resources/
|
||||
COPY --from=vendor /app/vendor/ /app/vendor/
|
||||
WORKDIR /app
|
||||
RUN npm config set @ldc-web:registry https://lab.s-web.fr/api/v4/packages/npm/
|
||||
RUN npm config set -- '//lab.s-web.fr/api/v4/packages/npm/:_authToken' "${GITLAB_PASSWORD}"
|
||||
RUN npm config set @uwil:registry https://lab.s-web.fr/api/v4/groups/ldc-web/-/packages/npm/
|
||||
RUN npm config set -- '//lab.s-web.fr/api/v4/groups/ldc-web/-/packages/npm/:_authToken' "${GITLAB_PASSWORD}"
|
||||
|
||||
RUN npm ci && npm run prod
|
||||
|
||||
FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/uwil-production-8.4:170625-130159
|
||||
|
||||
ARG USER=www-data
|
||||
|
||||
COPY --chown=${USER}:${USER} . /app/srcs
|
||||
USER ${USER}
|
||||
COPY --chown=${USER}:${USER} ./resources/favicons/front/ /app/srcs/public/
|
||||
COPY --chown=${USER}:${USER} ./resources/favicons/back/ /app/srcs/public/back/
|
||||
COPY --from=vendor --chown=${USER}:${USER} /app/vendor/ /app/srcs/vendor/
|
||||
COPY --from=frontend --chown=${USER}:${USER} /app/public/build/ /app/srcs/public/build/
|
||||
|
||||
USER root
|
||||
RUN chmod -R 755 /app/srcs/storage
|
||||
USER ${USER}
|
||||
|
|
|
|||
122
README.md
|
|
@ -1,111 +1,33 @@
|
|||
# OVO TEAM
|
||||
# Table of contents
|
||||
|
||||
## Instalation
|
||||
- [Table of contents](#table-of-contents)
|
||||
- [Frameworks, Platforms and Libraries](#frameworks-platforms-and-libraries)
|
||||
- [Documentation](#documentation)
|
||||
- [Changelog](#changelog)
|
||||
- [Copyright and License](#copyright-and-license)
|
||||
|
||||
Copier `.env` vers `.env.example` et remplir les informations.
|
||||
# Frameworks, Platforms and Libraries
|
||||
|
||||
## Déployer
|
||||
<!-- https://github.com/Ileriayo/markdown-badges -->
|
||||
|
||||
- Apres git pull sur l'envirronnement désiré
|
||||
- Envoyer les éléments uploads si nécéssaire (Ne devrais pas étre le cas)
|
||||
- Executer la partie `Compiler le front`
|
||||
[](https://sass-lang.com/)
|
||||
[](https://tailwindcss.com/)
|
||||
[](https://vite.dev/)
|
||||
[](https://www.php.net/)
|
||||
[](https://laravel.com/docs/master)
|
||||
|
||||
## Faire une mise à jour
|
||||
# Documentation
|
||||
|
||||
Commenter dans `public/.htaccess` la partie `# Hide update.php`, puis accéder à ce fichier via la navigateur
|
||||
```php
|
||||
composer i/npm i
|
||||
```
|
||||
|
||||
## Fichier uploads
|
||||
# Changelog
|
||||
|
||||
Au sein de `public/sites/default/files`
|
||||
Latest version v1.0.0.
|
||||
|
||||
Les dossiers :
|
||||
See the [CHANGELOG.md](CHANGELOG.md) file for details.
|
||||
|
||||
- `inline-images` Pour les contenus insérés dans les WYSIWYG
|
||||
- les dossiers `20*` comme `2023-05` par exemple pour les media uploadés via la création de pages
|
||||
- `styles` qui contienent des images uploadés de dimension spécifiques
|
||||
# Copyright and License
|
||||
|
||||
## Compiler le front
|
||||
|
||||
`node_modules/gulp/bin/gulp.js -f public/themes/custom/custtheme/gulpfile.js`
|
||||
|
||||
Deactiver `Aggreger les fichiers CSS et javascript` au sein de `/fr/admin/config/development/performance`
|
||||
|
||||
Cliquer sur `Effacer tous les caches` si vous reactivez l'option
|
||||
|
||||
---
|
||||
|
||||
## Original README
|
||||
|
||||
Drupal is an open source content management platform supporting a variety of
|
||||
websites ranging from personal weblogs to large community-driven websites. For
|
||||
more information, visit the Drupal website, [Drupal.org][Drupal.org], and join
|
||||
the [Drupal community][Drupal community].
|
||||
|
||||
## Contributing
|
||||
|
||||
Drupal is developed on [Drupal.org][Drupal.org], the home of the international
|
||||
Drupal community since 2001!
|
||||
|
||||
[Drupal.org][Drupal.org] hosts Drupal's [GitLab repository][GitLab repository],
|
||||
its [issue queue][issue queue], and its [documentation][documentation]. Before
|
||||
you start working on code, be sure to search the [issue queue][issue queue] and
|
||||
create an issue if your aren't able to find an existing issue.
|
||||
|
||||
Every issue on Drupal.org automatically creates a new community-accessible fork
|
||||
that you can contribute to. Learn more about the code contribution process on
|
||||
the [Issue forks & merge requests page][issue forks].
|
||||
|
||||
## Usage
|
||||
|
||||
For a brief introduction, see [USAGE.txt](/core/USAGE.txt). You can also find
|
||||
guides, API references, and more by visiting Drupal's [documentation
|
||||
page][documentation].
|
||||
|
||||
You can quickly extend Drupal's core feature set by installing any of its
|
||||
[thousands of free and open source modules][modules]. With Drupal and its
|
||||
module ecosystem, you can often build most or all of what your project needs
|
||||
before writing a single line of code.
|
||||
|
||||
## Changelog
|
||||
|
||||
Drupal keeps detailed [change records][changelog]. You can search Drupal's
|
||||
changes for a record of every notable breaking change and new feature since
|
||||
2011.
|
||||
|
||||
## Security
|
||||
|
||||
For a list of security announcements, see the [Security advisories
|
||||
page][Security advisories] (available as [an RSS feed][security RSS]). This
|
||||
page also describes how to subscribe to these announcements via email.
|
||||
|
||||
For information about the Drupal security process, or to find out how to report
|
||||
a potential security issue to the Drupal security team, see the [Security team
|
||||
page][security team].
|
||||
|
||||
## Need a helping hand?
|
||||
|
||||
Visit the [Support page][support] or browse [over a thousand Drupal
|
||||
providers][service providers] offering design, strategy, development, and
|
||||
hosting services.
|
||||
|
||||
## Legal matters
|
||||
|
||||
Know your rights when using Drupal by reading Drupal core's
|
||||
[license](/core/LICENSE.txt).
|
||||
|
||||
Learn about the [Drupal trademark and logo policy here][trademark].
|
||||
|
||||
[Drupal.org]: https://www.drupal.org
|
||||
[Drupal community]: https://www.drupal.org/community
|
||||
[GitLab repository]: https://git.drupalcode.org/project/drupal
|
||||
[issue queue]: https://www.drupal.org/project/issues/drupal
|
||||
[issue forks]: https://www.drupal.org/drupalorg/docs/gitlab-integration/issue-forks-merge-requests
|
||||
[documentation]: https://www.drupal.org/documentation
|
||||
[changelog]: https://www.drupal.org/list-changes/drupal
|
||||
[modules]: https://www.drupal.org/project/project_module
|
||||
[security advisories]: https://www.drupal.org/security
|
||||
[security RSS]: https://www.drupal.org/security/rss.xml
|
||||
[security team]: https://www.drupal.org/drupal-security-team
|
||||
[service providers]: https://www.drupal.org/drupal-services
|
||||
[support]: https://www.drupal.org/support
|
||||
[trademark]: https://www.drupal.com/trademark
|
||||
Copyright (c) 2025 and beyond UWIL.
|
||||
|
|
|
|||
28
Ssr-Dockerfile
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
FROM node:20
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package*.json ./
|
||||
RUN npm ci
|
||||
|
||||
COPY resources/ resources/
|
||||
COPY vite.config.ts ./
|
||||
COPY tsconfig.json ./
|
||||
|
||||
RUN npm run build
|
||||
RUN npm run build:ssr
|
||||
|
||||
CMD ["node", "bootstrap/ssr/ssr.js"]
|
||||
|
||||
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: inertia-ssr
|
||||
spec:
|
||||
selector:
|
||||
app: inertia-ssr
|
||||
ports:
|
||||
- port: 13714
|
||||
targetPort: 13714
|
||||
type: ClusterIP
|
||||
29
app/Enums/Contact/ActivitySectorEnum.php
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Enums\Contact;
|
||||
|
||||
use Uwil\LaravelCommon\Traits\Enums\BaseEnum;
|
||||
|
||||
enum ActivitySectorEnum: int
|
||||
{
|
||||
use BaseEnum;
|
||||
|
||||
case commercial_catering = 1;
|
||||
case collective_catering = 2;
|
||||
case bakery_pastry = 3;
|
||||
case food_industry = 4;
|
||||
case supermarkets = 5;
|
||||
case others = 6;
|
||||
|
||||
/**
|
||||
* Optionnal labels definition.
|
||||
*/
|
||||
private const LABELS = [
|
||||
self::commercial_catering->name => 'Restauration Commerciale',
|
||||
self::collective_catering->name => 'Restauration Collective',
|
||||
self::bakery_pastry->name => 'Boulangerie-Pâtisserie',
|
||||
self::food_industry->name => 'Industrie Agro-Alimentaire',
|
||||
self::supermarkets->name => 'Grandes et Moyennes Surfaces',
|
||||
self::others->name => 'Autres',
|
||||
];
|
||||
}
|
||||
29
app/Enums/Contact/ObjectEnum.php
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Enums\Contact;
|
||||
|
||||
use Uwil\LaravelCommon\Traits\Enums\BaseEnum;
|
||||
|
||||
enum ObjectEnum: int
|
||||
{
|
||||
use BaseEnum;
|
||||
|
||||
case product_questions = 1;
|
||||
case quote_request = 2;
|
||||
case order_tracking = 3;
|
||||
case partnership_request = 4;
|
||||
case product_complaint = 5;
|
||||
case other = 6;
|
||||
|
||||
/**
|
||||
* Optionnal labels definition.
|
||||
*/
|
||||
private const LABELS = [
|
||||
self::product_questions->name => 'Questions sur nos produits',
|
||||
self::quote_request->name => 'Demande de devis',
|
||||
self::order_tracking->name => 'Suivi de commande',
|
||||
self::partnership_request->name => 'Demande de partenariat',
|
||||
self::product_complaint->name => 'Réclamation produit',
|
||||
self::other->name => 'Autre',
|
||||
];
|
||||
}
|
||||
83
app/Http/Controllers/Front/ContactController.php
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Front;
|
||||
|
||||
use App\Enums\Contact\ContactFormType;
|
||||
use App\Exceptions\AbortContactMailer;
|
||||
use App\Http\Requests\Front\Contact\ContactRequest;
|
||||
use App\Jobs\Mails\SendContactMail;
|
||||
use App\Models\ContactCount;
|
||||
use App\Models\MailContactData;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\HtmlString;
|
||||
use LDC\LDCCRM\Enums\ApiError;
|
||||
use LDC\LDCCRM\Exceptions\ApiErrorException;
|
||||
use LDC\LDCCRM\Exceptions\CrmException;
|
||||
use LDC\LDCCRM\Models\SingleOptin;
|
||||
|
||||
class ContactController
|
||||
{
|
||||
/**
|
||||
* Contact send.
|
||||
*
|
||||
* @param \App\Http\Requests\Front\Contact\ContactRequest $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function send(ContactRequest $request): \Illuminate\Http\RedirectResponse
|
||||
{
|
||||
$validatedData = $request->validated();
|
||||
dd($validatedData);
|
||||
$messageContact = new MailContactData($validatedData);
|
||||
// $contactMessage = "";
|
||||
// $hasContactError = false;
|
||||
// $newsletterMessage = null;
|
||||
// $hasNewsletterError = false;
|
||||
|
||||
// /** @var boolean $isNewsletter */
|
||||
// $isNewsletter = isset($validatedData['newsletter']) ? $validatedData['newsletter'] : false;
|
||||
|
||||
// try {
|
||||
// dispatch(new SendContactMail($messageContact))
|
||||
// ->onConnection('database')
|
||||
// ->onQueue('database');
|
||||
// } catch (AbortContactMailer $e) {
|
||||
// Log::error('Fail to build mail from contact page', [
|
||||
// 'exception' => $e
|
||||
// ]);
|
||||
// $hasContactError = true;
|
||||
// $contactMessage = trans('Une erreur est survenue lors de l\'envoi du message de contact.');
|
||||
// }
|
||||
// if ($isNewsletter) {
|
||||
// try {
|
||||
// SingleOptin::setStatus($request->email, true);
|
||||
// $newsletterMessage = trans("Votre inscription à la newsletter a été prise en compte");
|
||||
// } catch (ApiErrorException $e) {
|
||||
// if ($e->getApiError()->equals(ApiError::singleOptinCustomerExists)) {
|
||||
// $newsletterMessage = trans("Vous êtes déjà inscrit avec cette adresse email");
|
||||
// }
|
||||
// report($e);
|
||||
// $hasNewsletterError = true;
|
||||
// // phpcs:ignore Generic.Files.LineLength
|
||||
// $newsletterMessage = trans('Une erreur est survenue lors de l\'inscription à la newsletter, merci de réessayer ultérieurement.');
|
||||
// } catch (CrmException $e) {
|
||||
// report($e);
|
||||
// $hasNewsletterError = true;
|
||||
// // phpcs:ignore Generic.Files.LineLength
|
||||
// $newsletterMessage = trans('Une erreur est survenue lors de l\'inscription à la newsletter, merci de réessayer ultérieurement.');
|
||||
// }
|
||||
// }
|
||||
// ContactCount::updateOrInsert(
|
||||
// ['type' => $validatedData['enumType']],
|
||||
// ['submissions' => DB::raw('submissions + 1')]
|
||||
// );
|
||||
|
||||
// $contactMessage = trans('Votre message a bien été envoyé.');
|
||||
// $message = $newsletterMessage ? $contactMessage . ' <br /> ' . $newsletterMessage : $contactMessage;
|
||||
// return redirect()->back()
|
||||
// ->with(
|
||||
// $hasContactError || $hasNewsletterError ? 'info' : 'success',
|
||||
// new HtmlString($message)
|
||||
// );
|
||||
}
|
||||
}
|
||||
66
app/Http/Middlewares/HandleInertiaRequests.php
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middlewares;
|
||||
|
||||
use App\Enums\Contact\ActivitySectorEnum;
|
||||
use App\Enums\Contact\ObjectEnum;
|
||||
use Illuminate\Http\Request;
|
||||
use Inertia\Middleware;
|
||||
use Tighten\Ziggy\Ziggy;
|
||||
use Uwil\LaravelCommon\Helpers\InertiaHelper;
|
||||
use Uwil\LaravelCommon\Support\InertiaSharedRegistry;
|
||||
use Uwil\LaravelDynamicPages\Enums\PageStatusEnum;
|
||||
use Uwil\LaravelDynamicPages\Models\DynamicPage;
|
||||
|
||||
class HandleInertiaRequests extends Middleware
|
||||
{
|
||||
/**
|
||||
* Define the props that are shared by default.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function share(Request $request): array
|
||||
{
|
||||
|
||||
// Load all published dynamic pages with each parent page relationship.
|
||||
$dynamicPageModels = DynamicPage::getModelsCached()
|
||||
->where('status', PageStatusEnum::published);
|
||||
|
||||
$dynamicPages = [];
|
||||
|
||||
foreach ($dynamicPageModels as $dynamicPageModel) {
|
||||
$pascalCase =
|
||||
str_replace(' ', '', ucwords(str_replace('-', ' ', $dynamicPageModel->id_key)));
|
||||
$dynamicPages["page{$pascalCase}"] = $dynamicPageModel;
|
||||
}
|
||||
|
||||
|
||||
|
||||
$props = [
|
||||
...InertiaHelper::errorProps(parent::share($request)),
|
||||
'recaptchaKey' => config('services.google.recaptcha.public'),
|
||||
'dynamicPages' => $dynamicPages,
|
||||
'activitySectorEnum' => ActivitySectorEnum::toArray(),
|
||||
'objectEnum' => ObjectEnum::toArray(),
|
||||
'cookieEnv' => [
|
||||
"matomoSiteId" => config('cookie-notice.matomo.site_id'),
|
||||
"recaptchaKey" => config('cookie-notice.google.recaptcha.public'),
|
||||
"recaptchaBypassKey" => config('cookie-notice.google.recaptcha.bypassKey'),
|
||||
"gaMeasurementId" => config('cookie-notice.google.analytics.id')
|
||||
],
|
||||
'ziggy' => fn (): array => [
|
||||
// Routes ziggy.
|
||||
...new Ziggy()->toArray(),
|
||||
// Use for route().current() by ziggy.
|
||||
'location' => $request->url(),
|
||||
],
|
||||
// More props here.
|
||||
];
|
||||
|
||||
return array_replace_recursive(
|
||||
$props,
|
||||
InertiaSharedRegistry::resolve($request)
|
||||
);
|
||||
}
|
||||
}
|
||||
36
app/Http/Requests/Front/Contact/ContactRequest.php
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Requests\Front\Contact;
|
||||
|
||||
use App\Enums\Contact\ActivitySectorEnum;
|
||||
use App\Enums\Contact\ObjectEnum;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Uwil\LaravelCommon\Helpers\ToolboxHelper;
|
||||
|
||||
class ContactRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
// ToolboxHelper::validateRecaptcha($this, \config('services.google.recaptcha.version'));
|
||||
|
||||
$rules = [
|
||||
'phone' => ['required', 'min:1', 'max:60'],
|
||||
'name' => ['required', 'min:1', 'max:60'],
|
||||
'firstName' => ['required', 'min:1', 'max:60'],
|
||||
'message' => ['required', 'min:10', 'max:255'],
|
||||
'mail' => ['required', 'min:1', 'max:60', 'email:rfc,dns,spoof'],
|
||||
'entrepriseName' => ['nullable', 'min:1', 'max:60'],
|
||||
'activitySector' => ['nullable', Rule::enum(ActivitySectorEnum::class)],
|
||||
'object' => ['required', Rule::enum(ObjectEnum::class)],
|
||||
'terms' => 'boolean',
|
||||
'optin' => 'boolean'
|
||||
];
|
||||
return $rules;
|
||||
}
|
||||
}
|
||||
18
artisan
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Application;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
// Register the Composer autoloader...
|
||||
require __DIR__.'/vendor/autoload.php';
|
||||
|
||||
// Bootstrap Laravel and handle the command...
|
||||
/** @var Application $app */
|
||||
$app = require_once __DIR__.'/bootstrap/app.php';
|
||||
|
||||
$status = $app->handleCommand(new ArgvInput);
|
||||
|
||||
exit($status);
|
||||
61
bootstrap/app.php
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Foundation\Configuration\Exceptions;
|
||||
use Illuminate\Foundation\Configuration\Middleware;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
use Uwil\LaravelCommon\Helpers\InertiaHelper;
|
||||
|
||||
return Application::configure(basePath: dirname(__DIR__))
|
||||
->withRouting(
|
||||
health: '/up',
|
||||
)
|
||||
->withMiddleware(function (Middleware $middleware) {
|
||||
$middleware->web(append: [
|
||||
\Uwil\LaravelI18n\Middlewares\ForceLocale::class,
|
||||
\App\Http\Middlewares\HandleInertiaRequests::class,
|
||||
\Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
|
||||
\Uwil\LaravelCommon\Middlewares\SecureHeaders::class,
|
||||
\Uwil\LaravelCommon\Middlewares\TrimStrings::class,
|
||||
\Uwil\LaravelCommon\Middlewares\TrustHosts::class,
|
||||
\Uwil\LaravelCommon\Middlewares\TrustProxies::class,
|
||||
\Uwil\LaravelCommon\Middlewares\VerifyCsrfToken::class,
|
||||
\Uwil\LaravelBackend\Middlewares\LogoutUnpublishedUsers::class,
|
||||
]);
|
||||
$middleware->group('saml', [
|
||||
\Uwil\LaravelBackend\Middlewares\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
]);
|
||||
$middleware->alias([
|
||||
'auth' => \Uwil\LaravelBackend\Middlewares\Authenticate::class,
|
||||
'guest' => \Uwil\LaravelBackend\Middlewares\RedirectIfAuthenticated::class,
|
||||
]);
|
||||
})
|
||||
->withExceptions(function (Exceptions $exceptions) {
|
||||
$exceptions->render(function (HttpException $e, Request $request) {
|
||||
$status = $e->getStatusCode();
|
||||
return InertiaHelper::errorRender($request, $status);
|
||||
});
|
||||
/**
|
||||
* Automatic exception capture with Sentry.
|
||||
*/
|
||||
$exceptions->report(function (Throwable $e) {
|
||||
if (app()->bound('sentry')) {
|
||||
app('sentry')->captureException($e);
|
||||
}
|
||||
});
|
||||
/**
|
||||
* Handling validation errors by excluding sensitive fields from the flash.
|
||||
*/
|
||||
$exceptions->render(function (ValidationException $e, Request $request) {
|
||||
$safeInput = collect($request->all())
|
||||
->except(['password', 'password_confirmation', 'current_password'])
|
||||
->toArray();
|
||||
return back()
|
||||
->withInput($safeInput)
|
||||
->withErrors($e->errors());
|
||||
});
|
||||
})->create();
|
||||
2
bootstrap/cache/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
!.gitignore
|
||||
7
bootstrap/providers.php
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
Uwil\LaravelCommon\Providers\AppServiceProvider::class,
|
||||
Uwil\LaravelCommon\Providers\TranslationServiceProvider::class,
|
||||
Uwil\K8S\Laravel\K8SServiceProvider::class,
|
||||
];
|
||||
1
commitlint.config.cjs
Normal file
|
|
@ -0,0 +1 @@
|
|||
module.exports = require('@uwil/husky-config/commitlint.config.cjs');
|
||||
21
components.json
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"$schema": "https://ui.shadcn.com/schema.json",
|
||||
"style": "default",
|
||||
"rsc": false,
|
||||
"tsx": true,
|
||||
"tailwind": {
|
||||
"config": "tailwind.config.js",
|
||||
"css": "resources/sass/common.scss",
|
||||
"baseColor": "neutral",
|
||||
"cssVariables": true,
|
||||
"prefix": ""
|
||||
},
|
||||
"aliases": {
|
||||
"components": "@/components",
|
||||
"utils": "@/lib/utils",
|
||||
"ui": "@/components/ui",
|
||||
"lib": "@/lib",
|
||||
"hooks": "@/hooks"
|
||||
},
|
||||
"iconLibrary": "lucide"
|
||||
}
|
||||
111
composer.json
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
{
|
||||
"$schema": "https://getcomposer.org/schema.json",
|
||||
"name": "uwil/laravel-project",
|
||||
"type": "project",
|
||||
"description": "UWIL Laravel project",
|
||||
"keywords": [
|
||||
"laravel",
|
||||
"framework"
|
||||
],
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.2",
|
||||
"24slides/laravel-saml2": "^2.4",
|
||||
"diglactic/laravel-breadcrumbs": "^10.0",
|
||||
"inertiajs/inertia-laravel": "^2.0",
|
||||
"laravel/framework": "^12.0",
|
||||
"laravel/telescope": "^5.7",
|
||||
"laravel/tinker": "^2.10.1",
|
||||
"monolog/monolog": "^3.0",
|
||||
"psr/log": "^3.0",
|
||||
"sentry/sentry-laravel": "^4.25",
|
||||
"tightenco/ziggy": "^2.5",
|
||||
"uwil/k8s-laravel": "^2.0",
|
||||
"uwil/laravel-backend": "^4.0",
|
||||
"uwil/laravel-common": "^5.1",
|
||||
"uwil/laravel-dynamic-pages": "^1.0",
|
||||
"uwil/laravel-i18n": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.23",
|
||||
"larastan/larastan": "^3.4",
|
||||
"laravel/breeze": "^2.3.0",
|
||||
"laravel/pail": "^1.2.2",
|
||||
"mockery/mockery": "^1.6",
|
||||
"nunomaduro/collision": "^8.6",
|
||||
"phpunit/phpunit": "^11.5.50",
|
||||
"slevomat/coding-standard": "^8.22"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "app/",
|
||||
"Database\\Factories\\": "database/factories/",
|
||||
"Database\\Seeders\\": "database/seeders/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"setup": [
|
||||
"composer install",
|
||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
|
||||
"@php artisan key:generate",
|
||||
"@php artisan migrate --force",
|
||||
"npm install",
|
||||
"npm run build"
|
||||
],
|
||||
"dev": [
|
||||
"Composer\\Config::disableProcessTimeout",
|
||||
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1 --timeout=0\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
|
||||
],
|
||||
"test": [
|
||||
"@php artisan config:clear --ansi",
|
||||
"@php artisan test"
|
||||
],
|
||||
"post-autoload-dump": [
|
||||
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
||||
"@php artisan package:discover --ansi"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
|
||||
],
|
||||
"post-root-package-install": [
|
||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
||||
],
|
||||
"post-create-project-cmd": [
|
||||
"@php artisan key:generate --ansi",
|
||||
"@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
|
||||
"@php artisan migrate --graceful --ansi"
|
||||
],
|
||||
"pre-package-uninstall": [
|
||||
"Illuminate\\Foundation\\ComposerScripts::prePackageUninstall"
|
||||
]
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"dont-discover": []
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"preferred-install": "dist",
|
||||
"sort-packages": true,
|
||||
"allow-plugins": {
|
||||
"pestphp/pest-plugin": true,
|
||||
"php-http/discovery": true,
|
||||
"dealerdirect/phpcodesniffer-composer-installer": true
|
||||
},
|
||||
"platform-check": false
|
||||
},
|
||||
"minimum-stability": "stable",
|
||||
"prefer-stable": true,
|
||||
"repositories": [
|
||||
{
|
||||
"type": "composer",
|
||||
"url": "https://lab.s-web.fr/api/v4/group/23/-/packages/composer/packages.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
10539
composer.lock
generated
Normal file
126
config/app.php
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Application Name
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This value is the name of your application, which will be used when the
|
||||
* framework needs to place the application's name in a notification or
|
||||
* other UI elements where an application name needs to be displayed.
|
||||
*
|
||||
*/
|
||||
|
||||
'name' => env('APP_NAME', 'Laravel'),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Application Environment
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This value determines the "environment" your application is currently
|
||||
* running in. This may determine how you prefer to configure various
|
||||
* services the application utilizes. Set this in your ".env" file.
|
||||
*
|
||||
*/
|
||||
|
||||
'env' => env('APP_ENV', 'production'),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Application Debug Mode
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* When your application is in debug mode, detailed error messages with
|
||||
* stack traces will be shown on every error that occurs within your
|
||||
* application. If disabled, a simple generic error page is shown.
|
||||
*
|
||||
*/
|
||||
|
||||
'debug' => (bool) env('APP_DEBUG', false),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Application URL
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This URL is used by the console to properly generate URLs when using
|
||||
* the Artisan command line tool. You should set this to the root of
|
||||
* the application so that it's available within Artisan commands.
|
||||
*
|
||||
*/
|
||||
|
||||
'url' => env('APP_URL', 'http://localhost'),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Application Timezone
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may specify the default timezone for your application, which
|
||||
* will be used by the PHP date and date-time functions. The timezone
|
||||
* is set to "UTC" by default as it is suitable for most use cases.
|
||||
*
|
||||
*/
|
||||
|
||||
'timezone' => env('APP_TIMEZONE', 'Europe/Paris'),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Application Locale Configuration
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The application locale determines the default locale that will be used
|
||||
* by Laravel's translation / localization methods. This option can be
|
||||
* set to any locale for which you plan to have translation strings.
|
||||
*
|
||||
*/
|
||||
|
||||
'locale' => env('APP_LOCALE', 'fr'),
|
||||
|
||||
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'fr'),
|
||||
|
||||
'faker_locale' => env('APP_FAKER_LOCALE', 'fr_FR'),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Encryption Key
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This key is utilized by Laravel's encryption services and should be set
|
||||
* to a random, 32 character string to ensure that all encrypted values
|
||||
* are secure. You should do this prior to deploying the application.
|
||||
*
|
||||
*/
|
||||
|
||||
'cipher' => 'AES-256-CBC',
|
||||
|
||||
'key' => env('APP_KEY'),
|
||||
|
||||
'previous_keys' => [
|
||||
...array_filter(
|
||||
explode(',', env('APP_PREVIOUS_KEYS', ''))
|
||||
),
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Maintenance Mode Driver
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* These configuration options determine the driver used to determine and
|
||||
* manage Laravel's "maintenance mode" status. The "cache" driver will
|
||||
* allow maintenance mode to be controlled across multiple machines.
|
||||
*
|
||||
* Supported drivers: "file", "cache"
|
||||
*
|
||||
*/
|
||||
|
||||
'maintenance' => [
|
||||
'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
|
||||
'store' => env('APP_MAINTENANCE_STORE', 'database'),
|
||||
],
|
||||
|
||||
];
|
||||
115
config/auth.php
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Authentication Defaults
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This option defines the default authentication "guard" and password
|
||||
* reset "broker" for your application. You may change these values
|
||||
* as required, but they're a perfect start for most applications.
|
||||
*
|
||||
*/
|
||||
|
||||
'defaults' => [
|
||||
'guard' => env('AUTH_GUARD', 'web'),
|
||||
'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Authentication Guards
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Next, you may define every authentication guard for your application.
|
||||
* Of course, a great default configuration has been defined for you
|
||||
* which utilizes session storage plus the Eloquent user provider.
|
||||
*
|
||||
* All authentication guards have a user provider, which defines how the
|
||||
* users are actually retrieved out of your database or other storage
|
||||
* system used by the application. Typically, Eloquent is utilized.
|
||||
*
|
||||
* Supported: "session"
|
||||
*
|
||||
*/
|
||||
|
||||
'guards' => [
|
||||
'backend' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'users',
|
||||
],
|
||||
|
||||
'frontend' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'customers',
|
||||
],
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* User Providers
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* All authentication guards have a user provider, which defines how the
|
||||
* users are actually retrieved out of your database or other storage
|
||||
* system used by the application. Typically, Eloquent is utilized.
|
||||
*
|
||||
* If you have multiple user tables or models you may configure multiple
|
||||
* providers to represent the model / table. These providers may then
|
||||
* be assigned to any extra authentication guards you have defined.
|
||||
*
|
||||
* Supported: "database", "eloquent"
|
||||
*
|
||||
*/
|
||||
|
||||
'providers' => [
|
||||
'users' => [
|
||||
'driver' => 'eloquent',
|
||||
'model' => env('AUTH_MODEL', Uwil\LaravelBackend\Models\User::class),
|
||||
],
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Resetting Passwords
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* These configuration options specify the behavior of Laravel's password
|
||||
* reset functionality, including the table utilized for token storage
|
||||
* and the user provider that is invoked to actually retrieve users.
|
||||
*
|
||||
* The expiry time is the number of minutes that each reset token will be
|
||||
* considered valid. This security feature keeps tokens short-lived so
|
||||
* they have less time to be guessed. You may change this as needed.
|
||||
*
|
||||
* The throttle setting is the number of seconds a user must wait before
|
||||
* generating more password reset tokens. This prevents the user from
|
||||
* quickly generating a very large amount of password reset tokens.
|
||||
*
|
||||
*/
|
||||
|
||||
'passwords' => [
|
||||
'users' => [
|
||||
'provider' => 'users',
|
||||
'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
|
||||
'expire' => 60,
|
||||
'throttle' => 60,
|
||||
],
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Password Confirmation Timeout
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may define the amount of seconds before a password confirmation
|
||||
* window expires and users are asked to re-enter their password via the
|
||||
* confirmation screen. By default, the timeout lasts for three hours.
|
||||
*
|
||||
*/
|
||||
|
||||
'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
|
||||
|
||||
];
|
||||
77
config/breadcrumbs.php
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* View Name
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Choose a view to display when Breadcrumbs::render() is called.
|
||||
* Built in templates are:
|
||||
*
|
||||
* - 'breadcrumbs::bootstrap5' - Bootstrap 5
|
||||
* - 'breadcrumbs::bootstrap4' - Bootstrap 4
|
||||
* - 'breadcrumbs::bulma' - Bulma
|
||||
* - 'breadcrumbs::foundation6' - Foundation 6
|
||||
* - 'breadcrumbs::json-ld' - JSON-LD Structured Data
|
||||
* - 'breadcrumbs::materialize' - Materialize
|
||||
* - 'breadcrumbs::tailwind' - Tailwind CSS
|
||||
* - 'breadcrumbs::uikit' - UIkit
|
||||
*
|
||||
* Or a custom view, e.g. '_partials/breadcrumbs'.
|
||||
*
|
||||
*/
|
||||
|
||||
'view' => null,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Breadcrumbs File(s)
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The file(s) where breadcrumbs are defined. e.g.
|
||||
*
|
||||
* - base_path('routes/breadcrumbs.php')
|
||||
* - glob(base_path('breadcrumbs/*.php'))
|
||||
*
|
||||
*/
|
||||
|
||||
'files' => array_filter([
|
||||
...glob(base_path('routes/breadcrumbs/*.php')) ?: [],
|
||||
]),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Exceptions
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Determine when to throw an exception.
|
||||
*
|
||||
*/
|
||||
|
||||
// * When route-bound breadcrumbs are used but the current route doesn't have a name (UnnamedRouteException)
|
||||
'unnamed-route-exception' => true,
|
||||
|
||||
// * When route-bound breadcrumbs are used and the matching breadcrumb doesn't exist (InvalidBreadcrumbException)
|
||||
'missing-route-bound-breadcrumb-exception' => true,
|
||||
|
||||
// * When a named breadcrumb is used but doesn't exist (InvalidBreadcrumbException)
|
||||
'invalid-named-breadcrumb-exception' => true,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Classes
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Subclass the default classes for more advanced customisations.
|
||||
*
|
||||
*/
|
||||
|
||||
// * Manager
|
||||
'manager-class' => Diglactic\Breadcrumbs\Manager::class,
|
||||
|
||||
// * Generator
|
||||
'generator-class' => Diglactic\Breadcrumbs\Generator::class,
|
||||
|
||||
];
|
||||
115
config/cache.php
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Default Cache Store
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This option controls the default cache store that will be used by the
|
||||
* framework. This connection is utilized if another isn't explicitly
|
||||
* specified when running a cache operation inside the application.
|
||||
*
|
||||
*/
|
||||
|
||||
'default' => env('CACHE_STORE', 'database'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Cache Stores
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may define all of the cache "stores" for your application as
|
||||
* well as their drivers. You may even define multiple stores for the
|
||||
* same cache driver to group types of items stored in your caches.
|
||||
*
|
||||
* Supported drivers: "array", "database", "file", "memcached",
|
||||
* "redis", "dynamodb", "octane",
|
||||
* "failover", "null"
|
||||
*
|
||||
*/
|
||||
|
||||
'stores' => [
|
||||
|
||||
'array' => [
|
||||
'driver' => 'array',
|
||||
'serialize' => false,
|
||||
],
|
||||
|
||||
'database' => [
|
||||
'driver' => 'database',
|
||||
'connection' => env('DB_CACHE_CONNECTION'),
|
||||
'table' => env('DB_CACHE_TABLE', 'cache'),
|
||||
'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
|
||||
'lock_table' => env('DB_CACHE_LOCK_TABLE'),
|
||||
],
|
||||
|
||||
'file' => [
|
||||
'driver' => 'file',
|
||||
'path' => storage_path('framework/cache/data'),
|
||||
'lock_path' => storage_path('framework/cache/data'),
|
||||
],
|
||||
|
||||
'memcached' => [
|
||||
'driver' => 'memcached',
|
||||
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
|
||||
'sasl' => [
|
||||
env('MEMCACHED_USERNAME'),
|
||||
env('MEMCACHED_PASSWORD'),
|
||||
],
|
||||
'options' => [],
|
||||
'servers' => [
|
||||
[
|
||||
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
|
||||
'port' => env('MEMCACHED_PORT', 11211),
|
||||
'weight' => 100,
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'redis' => [
|
||||
'driver' => 'redis',
|
||||
'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),
|
||||
'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
|
||||
],
|
||||
|
||||
'dynamodb' => [
|
||||
'driver' => 'dynamodb',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
|
||||
'endpoint' => env('DYNAMODB_ENDPOINT'),
|
||||
],
|
||||
|
||||
'octane' => [
|
||||
'driver' => 'octane',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'driver' => 'failover',
|
||||
'stores' => [
|
||||
'database',
|
||||
'array',
|
||||
],
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Cache Key Prefix
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* When utilizing the APC, database, memcached, Redis, and DynamoDB cache
|
||||
* stores, there might be other applications using the same cache. For
|
||||
* that reason, you may prefix every cache key to avoid collisions.
|
||||
*
|
||||
*/
|
||||
|
||||
'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')) . '-cache-'),
|
||||
|
||||
];
|
||||
19
config/cookie-notice.php
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'google' => [
|
||||
'recaptcha' => [
|
||||
'public' => env('GOOGLE_RECAPTCHA_PUBLIC'),
|
||||
'private' => env('GOOGLE_RECAPTCHA_PRIVATE'),
|
||||
'version' => env('GOOGLE_RECAPTCHA_VERSION', "3") === "3" ? true : false,
|
||||
'bypassKey' => "bypass"
|
||||
],
|
||||
'analytics' => [
|
||||
'id' => env('GOOGLE_ANALYTICS_ID')
|
||||
]
|
||||
],
|
||||
|
||||
'matomo' => [
|
||||
'site_id' => env('MATOMO_SITE_ID')
|
||||
]
|
||||
];
|
||||
187
config/database.php
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Default Database Connection Name
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may specify which of the database connections below you wish
|
||||
* to use as your default connection for database operations. This is
|
||||
* the connection which will be utilized unless another connection
|
||||
* is explicitly specified when you execute a query / statement.
|
||||
*
|
||||
*/
|
||||
|
||||
'default' => env('DB_CONNECTION', 'sqlite'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Database Connections
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Below are all of the database connections defined for your application.
|
||||
* An example configuration is provided for each database system which
|
||||
* is supported by Laravel. You're free to add / remove connections.
|
||||
*
|
||||
*/
|
||||
|
||||
'connections' => [
|
||||
|
||||
'sqlite' => [
|
||||
'driver' => 'sqlite',
|
||||
'url' => env('DB_URL'),
|
||||
'database' => env('DB_DATABASE', database_path('database.sqlite')),
|
||||
'prefix' => '',
|
||||
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
|
||||
'busy_timeout' => null,
|
||||
'journal_mode' => null,
|
||||
'synchronous' => null,
|
||||
'transaction_mode' => 'DEFERRED',
|
||||
],
|
||||
|
||||
'mysql' => [
|
||||
'driver' => 'mysql',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '3306'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8mb4'),
|
||||
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'strict' => true,
|
||||
'engine' => null,
|
||||
'options' => extension_loaded('pdo_mysql') ? array_filter([
|
||||
(PHP_VERSION_ID >= 80500
|
||||
? \Pdo\Mysql::ATTR_SSL_CA
|
||||
: \PDO::MYSQL_ATTR_SSL_CA
|
||||
) => env('MYSQL_ATTR_SSL_CA'),
|
||||
]) : [],
|
||||
],
|
||||
|
||||
'mariadb' => [
|
||||
'driver' => 'mariadb',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '3306'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8mb4'),
|
||||
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'strict' => true,
|
||||
'engine' => null,
|
||||
'options' => extension_loaded('pdo_mysql') ? array_filter([
|
||||
(PHP_VERSION_ID >= 80500
|
||||
? \Pdo\Mysql::ATTR_SSL_CA
|
||||
: \PDO::MYSQL_ATTR_SSL_CA
|
||||
) => env('MYSQL_ATTR_SSL_CA'),
|
||||
]) : [],
|
||||
],
|
||||
|
||||
'pgsql' => [
|
||||
'driver' => 'pgsql',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '5432'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'search_path' => 'public',
|
||||
'sslmode' => env('DB_SSLMODE', 'prefer'),
|
||||
],
|
||||
|
||||
'sqlsrv' => [
|
||||
'driver' => 'sqlsrv',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', 'localhost'),
|
||||
'port' => env('DB_PORT', '1433'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Migration Repository Table
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This table keeps track of all the migrations that have already run for
|
||||
* your application. Using this information, we can determine which of
|
||||
* the migrations on disk haven't actually been run on the database.
|
||||
*
|
||||
*/
|
||||
|
||||
'migrations' => [
|
||||
'table' => 'migrations',
|
||||
'update_date_on_publish' => true,
|
||||
],
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Redis Databases
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Redis is an open source, fast, and advanced key-value store that also
|
||||
* provides a richer body of commands than a typical key-value system
|
||||
* such as Memcached. You may define your connection settings here.
|
||||
*
|
||||
*/
|
||||
|
||||
'redis' => [
|
||||
|
||||
'client' => env('REDIS_CLIENT', 'phpredis'),
|
||||
|
||||
'options' => [
|
||||
'cluster' => env('REDIS_CLUSTER', 'redis'),
|
||||
'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')) . '-database-'),
|
||||
'persistent' => env('REDIS_PERSISTENT', false),
|
||||
],
|
||||
|
||||
'default' => [
|
||||
'url' => env('REDIS_URL'),
|
||||
'host' => env('REDIS_HOST', '127.0.0.1'),
|
||||
'username' => env('REDIS_USERNAME'),
|
||||
'password' => env('REDIS_PASSWORD'),
|
||||
'port' => env('REDIS_PORT', '6379'),
|
||||
'database' => env('REDIS_DB', '0'),
|
||||
'max_retries' => env('REDIS_MAX_RETRIES', 3),
|
||||
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
|
||||
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
|
||||
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
|
||||
],
|
||||
|
||||
'cache' => [
|
||||
'url' => env('REDIS_URL'),
|
||||
'host' => env('REDIS_HOST', '127.0.0.1'),
|
||||
'username' => env('REDIS_USERNAME'),
|
||||
'password' => env('REDIS_PASSWORD'),
|
||||
'port' => env('REDIS_PORT', '6379'),
|
||||
'database' => env('REDIS_CACHE_DB', '1'),
|
||||
'max_retries' => env('REDIS_MAX_RETRIES', 3),
|
||||
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
|
||||
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
|
||||
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
80
config/filesystems.php
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Default Filesystem Disk
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may specify the default filesystem disk that should be used
|
||||
* by the framework. The "local" disk, as well as a variety of cloud
|
||||
* based disks are available to your application for file storage.
|
||||
*
|
||||
*/
|
||||
|
||||
'default' => env('FILESYSTEM_DISK', 'local'),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Filesystem Disks
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Below you may configure as many filesystem disks as necessary, and you
|
||||
* may even configure multiple disks for the same driver. Examples for
|
||||
* most supported storage drivers are configured here for reference.
|
||||
*
|
||||
* Supported drivers: "local", "ftp", "sftp", "s3"
|
||||
*
|
||||
*/
|
||||
|
||||
'disks' => [
|
||||
|
||||
'local' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app'),
|
||||
'serve' => true,
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
'public' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app/public'),
|
||||
'url' => env('APP_URL') . '/storage',
|
||||
'visibility' => 'public',
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
's3' => [
|
||||
'driver' => 's3',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION'),
|
||||
'bucket' => env('AWS_BUCKET'),
|
||||
'url' => env('AWS_URL'),
|
||||
'endpoint' => env('AWS_ENDPOINT'),
|
||||
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Symbolic Links
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may configure the symbolic links that will be created when the
|
||||
* `storage:link` Artisan command is executed. The array keys should be
|
||||
* the locations of the links and the values should be their targets.
|
||||
*
|
||||
*/
|
||||
|
||||
'links' => [
|
||||
public_path('storage') => storage_path('app/public'),
|
||||
],
|
||||
|
||||
];
|
||||
64
config/inertia.php
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Server Side Rendering
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* These options configures if and how Inertia uses Server Side Rendering
|
||||
* to pre-render the initial visits made to your application's pages.
|
||||
*
|
||||
* You can specify a custom SSR bundle path, or omit it to let Inertia
|
||||
* try and automatically detect it for you.
|
||||
*
|
||||
* Do note that enabling these options will NOT automatically make SSR work,
|
||||
* as a separate rendering service needs to be available. To learn more,
|
||||
* please visit https://inertiajs.com/server-side-rendering
|
||||
*
|
||||
*/
|
||||
|
||||
'ssr' => [
|
||||
|
||||
'enabled' => false,
|
||||
|
||||
'url' => env('APP_URL', 'https://localhost'),
|
||||
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Testing
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The values described here are used to locate Inertia components on the
|
||||
* filesystem. For instance, when using `assertInertia`, the assertion
|
||||
* attempts to locate the component as a file relative to any of the
|
||||
* paths AND with any of the extensions specified here.
|
||||
*
|
||||
*/
|
||||
|
||||
'testing' => [
|
||||
|
||||
'ensure_pages_exist' => true,
|
||||
|
||||
'page_paths' => [
|
||||
resource_path('ts/front/Pages'),
|
||||
],
|
||||
|
||||
'page_extensions' => [
|
||||
'js',
|
||||
'jsx',
|
||||
'svelte',
|
||||
'ts',
|
||||
'tsx',
|
||||
'vue',
|
||||
],
|
||||
],
|
||||
|
||||
'history' => [
|
||||
'encrypt' => false,
|
||||
],
|
||||
|
||||
];
|
||||
354
config/laravellocalization.php
Normal file
|
|
@ -0,0 +1,354 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
// Uncomment the languages that your site supports - or add new ones.
|
||||
// These are sorted by the native name, which is the order you might show them in a language selector.
|
||||
// Regional languages are sorted by their base language, so "British English" sorts as "English, British".
|
||||
// Original config here: https://github.com/mcamara/laravel-localization/blob/master/src/config/config.php.
|
||||
// @phpcs:disable Squiz.Commenting.InlineComment.NoSpaceBefore, Generic.Files.LineLength.TooLong, Squiz.PHP.CommentedOutCode.Found
|
||||
'supportedLocales' => [
|
||||
//'ace' => ['name' => 'Achinese', 'script' => 'Latn', 'native' => 'Aceh', 'regional' => ''],
|
||||
//'af' => ['name' => 'Afrikaans', 'script' => 'Latn', 'native' => 'Afrikaans', 'regional' => 'af_ZA'],
|
||||
//'agq' => ['name' => 'Aghem', 'script' => 'Latn', 'native' => 'Aghem', 'regional' => ''],
|
||||
//'ak' => ['name' => 'Akan', 'script' => 'Latn', 'native' => 'Akan', 'regional' => 'ak_GH'],
|
||||
//'an' => ['name' => 'Aragonese', 'script' => 'Latn', 'native' => 'aragonés', 'regional' => 'an_ES'],
|
||||
//'cch' => ['name' => 'Atsam', 'script' => 'Latn', 'native' => 'Atsam', 'regional' => ''],
|
||||
//'gn' => ['name' => 'Guaraní', 'script' => 'Latn', 'native' => 'Avañe’ẽ', 'regional' => ''],
|
||||
//'ae' => ['name' => 'Avestan', 'script' => 'Latn', 'native' => 'avesta', 'regional' => ''],
|
||||
//'ay' => ['name' => 'Aymara', 'script' => 'Latn', 'native' => 'aymar aru', 'regional' => 'ay_PE'],
|
||||
//'az' => ['name' => 'Azerbaijani (Latin)', 'script' => 'Latn', 'native' => 'azərbaycanca', 'regional' => 'az_AZ'],
|
||||
//'id' => ['name' => 'Indonesian', 'script' => 'Latn', 'native' => 'Bahasa Indonesia', 'regional' => 'id_ID'],
|
||||
//'ms' => ['name' => 'Malay', 'script' => 'Latn', 'native' => 'Bahasa Melayu', 'regional' => 'ms_MY'],
|
||||
//'bm' => ['name' => 'Bambara', 'script' => 'Latn', 'native' => 'bamanakan', 'regional' => ''],
|
||||
//'jv' => ['name' => 'Javanese (Latin)', 'script' => 'Latn', 'native' => 'Basa Jawa', 'regional' => ''],
|
||||
//'su' => ['name' => 'Sundanese', 'script' => 'Latn', 'native' => 'Basa Sunda', 'regional' => ''],
|
||||
//'bh' => ['name' => 'Bihari', 'script' => 'Latn', 'native' => 'Bihari', 'regional' => ''],
|
||||
//'bi' => ['name' => 'Bislama', 'script' => 'Latn', 'native' => 'Bislama', 'regional' => ''],
|
||||
//'nb' => ['name' => 'Norwegian Bokmål', 'script' => 'Latn', 'native' => 'Bokmål', 'regional' => 'nb_NO'],
|
||||
//'bs' => ['name' => 'Bosnian', 'script' => 'Latn', 'native' => 'bosanski', 'regional' => 'bs_BA'],
|
||||
//'br' => ['name' => 'Breton', 'script' => 'Latn', 'native' => 'brezhoneg', 'regional' => 'br_FR'],
|
||||
//'ca' => ['name' => 'Catalan', 'script' => 'Latn', 'native' => 'català', 'regional' => 'ca_ES'],
|
||||
//'ch' => ['name' => 'Chamorro', 'script' => 'Latn', 'native' => 'Chamoru', 'regional' => ''],
|
||||
//'ny' => ['name' => 'Chewa', 'script' => 'Latn', 'native' => 'chiCheŵa', 'regional' => ''],
|
||||
//'kde' => ['name' => 'Makonde', 'script' => 'Latn', 'native' => 'Chimakonde', 'regional' => ''],
|
||||
//'sn' => ['name' => 'Shona', 'script' => 'Latn', 'native' => 'chiShona', 'regional' => ''],
|
||||
//'co' => ['name' => 'Corsican', 'script' => 'Latn', 'native' => 'corsu', 'regional' => ''],
|
||||
//'cy' => ['name' => 'Welsh', 'script' => 'Latn', 'native' => 'Cymraeg', 'regional' => 'cy_GB'],
|
||||
//'da' => ['name' => 'Danish', 'script' => 'Latn', 'native' => 'dansk', 'regional' => 'da_DK'],
|
||||
//'se' => ['name' => 'Northern Sami', 'script' => 'Latn', 'native' => 'davvisámegiella', 'regional' => 'se_NO'],
|
||||
//'de' => ['name' => 'German', 'script' => 'Latn', 'native' => 'Deutsch', 'regional' => 'de_DE'],
|
||||
//'luo' => ['name' => 'Luo', 'script' => 'Latn', 'native' => 'Dholuo', 'regional' => ''],
|
||||
//'nv' => ['name' => 'Navajo', 'script' => 'Latn', 'native' => 'Diné bizaad', 'regional' => ''],
|
||||
//'dua' => ['name' => 'Duala', 'script' => 'Latn', 'native' => 'duálá', 'regional' => ''],
|
||||
//'et' => ['name' => 'Estonian', 'script' => 'Latn', 'native' => 'eesti', 'regional' => 'et_EE'],
|
||||
//'na' => ['name' => 'Nauru', 'script' => 'Latn', 'native' => 'Ekakairũ Naoero', 'regional' => ''],
|
||||
//'guz' => ['name' => 'Ekegusii', 'script' => 'Latn', 'native' => 'Ekegusii', 'regional' => ''],
|
||||
'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'],
|
||||
//'en-AU' => ['name' => 'Australian English', 'script' => 'Latn', 'native' => 'Australian English', 'regional' => 'en_AU'],
|
||||
//'en-GB' => ['name' => 'British English', 'script' => 'Latn', 'native' => 'British English', 'regional' => 'en_GB'],
|
||||
//'en-CA' => ['name' => 'Canadian English', 'script' => 'Latn', 'native' => 'Canadian English', 'regional' => 'en_CA'],
|
||||
//'en-US' => ['name' => 'U.S. English', 'script' => 'Latn', 'native' => 'U.S. English', 'regional' => 'en_US'],
|
||||
//'es' => ['name' => 'Spanish', 'script' => 'Latn', 'native' => 'español', 'regional' => 'es_ES'],
|
||||
//'eo' => ['name' => 'Esperanto', 'script' => 'Latn', 'native' => 'esperanto', 'regional' => ''],
|
||||
//'eu' => ['name' => 'Basque', 'script' => 'Latn', 'native' => 'euskara', 'regional' => 'eu_ES'],
|
||||
//'ewo' => ['name' => 'Ewondo', 'script' => 'Latn', 'native' => 'ewondo', 'regional' => ''],
|
||||
//'ee' => ['name' => 'Ewe', 'script' => 'Latn', 'native' => 'eʋegbe', 'regional' => ''],
|
||||
//'fil' => ['name' => 'Filipino', 'script' => 'Latn', 'native' => 'Filipino', 'regional' => 'fil_PH'],
|
||||
'fr' => ['name' => 'French', 'script' => 'Latn', 'native' => 'français', 'regional' => 'fr_FR'],
|
||||
//'fr-CA' => ['name' => 'Canadian French', 'script' => 'Latn', 'native' => 'français canadien', 'regional' => 'fr_CA'],
|
||||
//'fy' => ['name' => 'Western Frisian', 'script' => 'Latn', 'native' => 'frysk', 'regional' => 'fy_DE'],
|
||||
//'fur' => ['name' => 'Friulian', 'script' => 'Latn', 'native' => 'furlan', 'regional' => 'fur_IT'],
|
||||
//'fo' => ['name' => 'Faroese', 'script' => 'Latn', 'native' => 'føroyskt', 'regional' => 'fo_FO'],
|
||||
//'gaa' => ['name' => 'Ga', 'script' => 'Latn', 'native' => 'Ga', 'regional' => ''],
|
||||
//'ga' => ['name' => 'Irish', 'script' => 'Latn', 'native' => 'Gaeilge', 'regional' => 'ga_IE'],
|
||||
//'gv' => ['name' => 'Manx', 'script' => 'Latn', 'native' => 'Gaelg', 'regional' => 'gv_GB'],
|
||||
//'sm' => ['name' => 'Samoan', 'script' => 'Latn', 'native' => 'Gagana fa’a Sāmoa', 'regional' => ''],
|
||||
//'gl' => ['name' => 'Galician', 'script' => 'Latn', 'native' => 'galego', 'regional' => 'gl_ES'],
|
||||
//'ki' => ['name' => 'Kikuyu', 'script' => 'Latn', 'native' => 'Gikuyu', 'regional' => ''],
|
||||
//'gd' => ['name' => 'Scottish Gaelic', 'script' => 'Latn', 'native' => 'Gàidhlig', 'regional' => 'gd_GB'],
|
||||
//'ha' => ['name' => 'Hausa', 'script' => 'Latn', 'native' => 'Hausa', 'regional' => 'ha_NG'],
|
||||
//'bez' => ['name' => 'Bena', 'script' => 'Latn', 'native' => 'Hibena', 'regional' => ''],
|
||||
//'ho' => ['name' => 'Hiri Motu', 'script' => 'Latn', 'native' => 'Hiri Motu', 'regional' => ''],
|
||||
//'hr' => ['name' => 'Croatian', 'script' => 'Latn', 'native' => 'hrvatski', 'regional' => 'hr_HR'],
|
||||
//'bem' => ['name' => 'Bemba', 'script' => 'Latn', 'native' => 'Ichibemba', 'regional' => 'bem_ZM'],
|
||||
//'io' => ['name' => 'Ido', 'script' => 'Latn', 'native' => 'Ido', 'regional' => ''],
|
||||
//'ig' => ['name' => 'Igbo', 'script' => 'Latn', 'native' => 'Igbo', 'regional' => 'ig_NG'],
|
||||
//'rn' => ['name' => 'Rundi', 'script' => 'Latn', 'native' => 'Ikirundi', 'regional' => ''],
|
||||
//'ia' => ['name' => 'Interlingua', 'script' => 'Latn', 'native' => 'interlingua', 'regional' => 'ia_FR'],
|
||||
//'iu-Latn' => ['name' => 'Inuktitut (Latin)', 'script' => 'Latn', 'native' => 'Inuktitut', 'regional' => 'iu_CA'],
|
||||
//'sbp' => ['name' => 'Sileibi', 'script' => 'Latn', 'native' => 'Ishisangu', 'regional' => ''],
|
||||
//'nd' => ['name' => 'North Ndebele', 'script' => 'Latn', 'native' => 'isiNdebele', 'regional' => ''],
|
||||
//'nr' => ['name' => 'South Ndebele', 'script' => 'Latn', 'native' => 'isiNdebele', 'regional' => 'nr_ZA'],
|
||||
//'xh' => ['name' => 'Xhosa', 'script' => 'Latn', 'native' => 'isiXhosa', 'regional' => 'xh_ZA'],
|
||||
//'zu' => ['name' => 'Zulu', 'script' => 'Latn', 'native' => 'isiZulu', 'regional' => 'zu_ZA'],
|
||||
//'it' => ['name' => 'Italian', 'script' => 'Latn', 'native' => 'italiano', 'regional' => 'it_IT'],
|
||||
//'ik' => ['name' => 'Inupiaq', 'script' => 'Latn', 'native' => 'Iñupiaq', 'regional' => 'ik_CA'],
|
||||
//'dyo' => ['name' => 'Jola-Fonyi', 'script' => 'Latn', 'native' => 'joola', 'regional' => ''],
|
||||
//'kea' => ['name' => 'Kabuverdianu', 'script' => 'Latn', 'native' => 'kabuverdianu', 'regional' => ''],
|
||||
//'kaj' => ['name' => 'Jju', 'script' => 'Latn', 'native' => 'Kaje', 'regional' => ''],
|
||||
//'mh' => ['name' => 'Marshallese', 'script' => 'Latn', 'native' => 'Kajin M̧ajeļ', 'regional' => 'mh_MH'],
|
||||
//'kl' => ['name' => 'Kalaallisut', 'script' => 'Latn', 'native' => 'kalaallisut', 'regional' => 'kl_GL'],
|
||||
//'kln' => ['name' => 'Kalenjin', 'script' => 'Latn', 'native' => 'Kalenjin', 'regional' => ''],
|
||||
//'kr' => ['name' => 'Kanuri', 'script' => 'Latn', 'native' => 'Kanuri', 'regional' => ''],
|
||||
//'kcg' => ['name' => 'Tyap', 'script' => 'Latn', 'native' => 'Katab', 'regional' => ''],
|
||||
//'kw' => ['name' => 'Cornish', 'script' => 'Latn', 'native' => 'kernewek', 'regional' => 'kw_GB'],
|
||||
//'naq' => ['name' => 'Nama', 'script' => 'Latn', 'native' => 'Khoekhoegowab', 'regional' => ''],
|
||||
//'rof' => ['name' => 'Rombo', 'script' => 'Latn', 'native' => 'Kihorombo', 'regional' => ''],
|
||||
//'kam' => ['name' => 'Kamba', 'script' => 'Latn', 'native' => 'Kikamba', 'regional' => ''],
|
||||
//'kg' => ['name' => 'Kongo', 'script' => 'Latn', 'native' => 'Kikongo', 'regional' => ''],
|
||||
//'jmc' => ['name' => 'Machame', 'script' => 'Latn', 'native' => 'Kimachame', 'regional' => ''],
|
||||
//'rw' => ['name' => 'Kinyarwanda', 'script' => 'Latn', 'native' => 'Kinyarwanda', 'regional' => 'rw_RW'],
|
||||
//'asa' => ['name' => 'Kipare', 'script' => 'Latn', 'native' => 'Kipare', 'regional' => ''],
|
||||
//'rwk' => ['name' => 'Rwa', 'script' => 'Latn', 'native' => 'Kiruwa', 'regional' => ''],
|
||||
//'saq' => ['name' => 'Samburu', 'script' => 'Latn', 'native' => 'Kisampur', 'regional' => ''],
|
||||
//'ksb' => ['name' => 'Shambala', 'script' => 'Latn', 'native' => 'Kishambaa', 'regional' => ''],
|
||||
//'swc' => ['name' => 'Congo Swahili', 'script' => 'Latn', 'native' => 'Kiswahili ya Kongo', 'regional' => ''],
|
||||
//'sw' => ['name' => 'Swahili', 'script' => 'Latn', 'native' => 'Kiswahili', 'regional' => 'sw_KE'],
|
||||
//'dav' => ['name' => 'Dawida', 'script' => 'Latn', 'native' => 'Kitaita', 'regional' => ''],
|
||||
//'teo' => ['name' => 'Teso', 'script' => 'Latn', 'native' => 'Kiteso', 'regional' => ''],
|
||||
//'khq' => ['name' => 'Koyra Chiini', 'script' => 'Latn', 'native' => 'Koyra ciini', 'regional' => ''],
|
||||
//'ses' => ['name' => 'Songhay', 'script' => 'Latn', 'native' => 'Koyraboro senni', 'regional' => ''],
|
||||
//'mfe' => ['name' => 'Morisyen', 'script' => 'Latn', 'native' => 'kreol morisien', 'regional' => ''],
|
||||
//'ht' => ['name' => 'Haitian', 'script' => 'Latn', 'native' => 'Kreyòl ayisyen', 'regional' => 'ht_HT'],
|
||||
//'kj' => ['name' => 'Kuanyama', 'script' => 'Latn', 'native' => 'Kwanyama', 'regional' => ''],
|
||||
//'ksh' => ['name' => 'Kölsch', 'script' => 'Latn', 'native' => 'Kölsch', 'regional' => ''],
|
||||
//'ebu' => ['name' => 'Kiembu', 'script' => 'Latn', 'native' => 'Kĩembu', 'regional' => ''],
|
||||
//'mer' => ['name' => 'Kimîîru', 'script' => 'Latn', 'native' => 'Kĩmĩrũ', 'regional' => ''],
|
||||
//'lag' => ['name' => 'Langi', 'script' => 'Latn', 'native' => 'Kɨlaangi', 'regional' => ''],
|
||||
//'lah' => ['name' => 'Lahnda', 'script' => 'Latn', 'native' => 'Lahnda', 'regional' => ''],
|
||||
//'la' => ['name' => 'Latin', 'script' => 'Latn', 'native' => 'latine', 'regional' => ''],
|
||||
//'lv' => ['name' => 'Latvian', 'script' => 'Latn', 'native' => 'latviešu', 'regional' => 'lv_LV'],
|
||||
//'to' => ['name' => 'Tongan', 'script' => 'Latn', 'native' => 'lea fakatonga', 'regional' => ''],
|
||||
//'lt' => ['name' => 'Lithuanian', 'script' => 'Latn', 'native' => 'lietuvių', 'regional' => 'lt_LT'],
|
||||
//'li' => ['name' => 'Limburgish', 'script' => 'Latn', 'native' => 'Limburgs', 'regional' => 'li_BE'],
|
||||
//'ln' => ['name' => 'Lingala', 'script' => 'Latn', 'native' => 'lingála', 'regional' => ''],
|
||||
//'lg' => ['name' => 'Ganda', 'script' => 'Latn', 'native' => 'Luganda', 'regional' => 'lg_UG'],
|
||||
//'luy' => ['name' => 'Oluluyia', 'script' => 'Latn', 'native' => 'Luluhia', 'regional' => ''],
|
||||
//'lb' => ['name' => 'Luxembourgish', 'script' => 'Latn', 'native' => 'Lëtzebuergesch', 'regional' => 'lb_LU'],
|
||||
//'hu' => ['name' => 'Hungarian', 'script' => 'Latn', 'native' => 'magyar', 'regional' => 'hu_HU'],
|
||||
//'mgh' => ['name' => 'Makhuwa-Meetto', 'script' => 'Latn', 'native' => 'Makua', 'regional' => ''],
|
||||
//'mg' => ['name' => 'Malagasy', 'script' => 'Latn', 'native' => 'Malagasy', 'regional' => 'mg_MG'],
|
||||
//'mt' => ['name' => 'Maltese', 'script' => 'Latn', 'native' => 'Malti', 'regional' => 'mt_MT'],
|
||||
//'mtr' => ['name' => 'Mewari', 'script' => 'Latn', 'native' => 'Mewari', 'regional' => ''],
|
||||
//'mua' => ['name' => 'Mundang', 'script' => 'Latn', 'native' => 'Mundang', 'regional' => ''],
|
||||
//'mi' => ['name' => 'Māori', 'script' => 'Latn', 'native' => 'Māori', 'regional' => 'mi_NZ'],
|
||||
//'nl' => ['name' => 'Dutch', 'script' => 'Latn', 'native' => 'Nederlands', 'regional' => 'nl_NL'],
|
||||
//'nmg' => ['name' => 'Kwasio', 'script' => 'Latn', 'native' => 'ngumba', 'regional' => ''],
|
||||
//'yav' => ['name' => 'Yangben', 'script' => 'Latn', 'native' => 'nuasue', 'regional' => ''],
|
||||
//'nn' => ['name' => 'Norwegian Nynorsk', 'script' => 'Latn', 'native' => 'nynorsk', 'regional' => 'nn_NO'],
|
||||
//'oc' => ['name' => 'Occitan', 'script' => 'Latn', 'native' => 'occitan', 'regional' => 'oc_FR'],
|
||||
//'ang' => ['name' => 'Old English', 'script' => 'Runr', 'native' => 'Old English', 'regional' => ''],
|
||||
//'xog' => ['name' => 'Soga', 'script' => 'Latn', 'native' => 'Olusoga', 'regional' => ''],
|
||||
//'om' => ['name' => 'Oromo', 'script' => 'Latn', 'native' => 'Oromoo', 'regional' => 'om_ET'],
|
||||
//'ng' => ['name' => 'Ndonga', 'script' => 'Latn', 'native' => 'OshiNdonga', 'regional' => ''],
|
||||
//'hz' => ['name' => 'Herero', 'script' => 'Latn', 'native' => 'Otjiherero', 'regional' => ''],
|
||||
//'uz-Latn' => ['name' => 'Uzbek (Latin)', 'script' => 'Latn', 'native' => 'oʼzbekcha', 'regional' => 'uz_UZ'],
|
||||
//'nds' => ['name' => 'Low German', 'script' => 'Latn', 'native' => 'Plattdüütsch', 'regional' => 'nds_DE'],
|
||||
//'pl' => ['name' => 'Polish', 'script' => 'Latn', 'native' => 'polski', 'regional' => 'pl_PL'],
|
||||
//'pt' => ['name' => 'Portuguese', 'script' => 'Latn', 'native' => 'português', 'regional' => 'pt_PT'],
|
||||
//'pt-BR' => ['name' => 'Brazilian Portuguese', 'script' => 'Latn', 'native' => 'português do Brasil', 'regional' => 'pt_BR'],
|
||||
//'ff' => ['name' => 'Fulah', 'script' => 'Latn', 'native' => 'Pulaar', 'regional' => 'ff_SN'],
|
||||
//'pi' => ['name' => 'Pahari-Potwari', 'script' => 'Latn', 'native' => 'Pāli', 'regional' => ''],
|
||||
//'aa' => ['name' => 'Afar', 'script' => 'Latn', 'native' => 'Qafar', 'regional' => 'aa_ER'],
|
||||
//'ty' => ['name' => 'Tahitian', 'script' => 'Latn', 'native' => 'Reo Māohi', 'regional' => ''],
|
||||
//'ksf' => ['name' => 'Bafia', 'script' => 'Latn', 'native' => 'rikpa', 'regional' => ''],
|
||||
//'ro' => ['name' => 'Romanian', 'script' => 'Latn', 'native' => 'română', 'regional' => 'ro_RO'],
|
||||
//'cgg' => ['name' => 'Chiga', 'script' => 'Latn', 'native' => 'Rukiga', 'regional' => ''],
|
||||
//'rm' => ['name' => 'Romansh', 'script' => 'Latn', 'native' => 'rumantsch', 'regional' => ''],
|
||||
//'qu' => ['name' => 'Quechua', 'script' => 'Latn', 'native' => 'Runa Simi', 'regional' => ''],
|
||||
//'nyn' => ['name' => 'Nyankole', 'script' => 'Latn', 'native' => 'Runyankore', 'regional' => ''],
|
||||
//'ssy' => ['name' => 'Saho', 'script' => 'Latn', 'native' => 'Saho', 'regional' => ''],
|
||||
//'sc' => ['name' => 'Sardinian', 'script' => 'Latn', 'native' => 'sardu', 'regional' => 'sc_IT'],
|
||||
//'de-CH' => ['name' => 'Swiss High German', 'script' => 'Latn', 'native' => 'Schweizer Hochdeutsch', 'regional' => 'de_CH'],
|
||||
//'gsw' => ['name' => 'Swiss German', 'script' => 'Latn', 'native' => 'Schwiizertüütsch', 'regional' => ''],
|
||||
//'trv' => ['name' => 'Taroko', 'script' => 'Latn', 'native' => 'Seediq', 'regional' => ''],
|
||||
//'seh' => ['name' => 'Sena', 'script' => 'Latn', 'native' => 'sena', 'regional' => ''],
|
||||
//'nso' => ['name' => 'Northern Sotho', 'script' => 'Latn', 'native' => 'Sesotho sa Leboa', 'regional' => 'nso_ZA'],
|
||||
//'st' => ['name' => 'Southern Sotho', 'script' => 'Latn', 'native' => 'Sesotho', 'regional' => 'st_ZA'],
|
||||
//'tn' => ['name' => 'Tswana', 'script' => 'Latn', 'native' => 'Setswana', 'regional' => 'tn_ZA'],
|
||||
//'sq' => ['name' => 'Albanian', 'script' => 'Latn', 'native' => 'shqip', 'regional' => 'sq_AL'],
|
||||
//'sid' => ['name' => 'Sidamo', 'script' => 'Latn', 'native' => 'Sidaamu Afo', 'regional' => 'sid_ET'],
|
||||
//'ss' => ['name' => 'Swati', 'script' => 'Latn', 'native' => 'Siswati', 'regional' => 'ss_ZA'],
|
||||
//'sk' => ['name' => 'Slovak', 'script' => 'Latn', 'native' => 'slovenčina', 'regional' => 'sk_SK'],
|
||||
//'sl' => ['name' => 'Slovene', 'script' => 'Latn', 'native' => 'slovenščina', 'regional' => 'sl_SI'],
|
||||
//'so' => ['name' => 'Somali', 'script' => 'Latn', 'native' => 'Soomaali', 'regional' => 'so_SO'],
|
||||
//'sr-Latn' => ['name' => 'Serbian (Latin)', 'script' => 'Latn', 'native' => 'Srpski', 'regional' => 'sr_RS'],
|
||||
//'sh' => ['name' => 'Serbo-Croatian', 'script' => 'Latn', 'native' => 'srpskohrvatski', 'regional' => ''],
|
||||
//'fi' => ['name' => 'Finnish', 'script' => 'Latn', 'native' => 'suomi', 'regional' => 'fi_FI'],
|
||||
//'sv' => ['name' => 'Swedish', 'script' => 'Latn', 'native' => 'svenska', 'regional' => 'sv_SE'],
|
||||
//'sg' => ['name' => 'Sango', 'script' => 'Latn', 'native' => 'Sängö', 'regional' => ''],
|
||||
//'tl' => ['name' => 'Tagalog', 'script' => 'Latn', 'native' => 'Tagalog', 'regional' => 'tl_PH'],
|
||||
//'tzm-Latn' => ['name' => 'Central Atlas Tamazight (Latin)', 'script' => 'Latn', 'native' => 'Tamazight', 'regional' => ''],
|
||||
//'kab' => ['name' => 'Kabyle', 'script' => 'Latn', 'native' => 'Taqbaylit', 'regional' => 'kab_DZ'],
|
||||
//'twq' => ['name' => 'Tasawaq', 'script' => 'Latn', 'native' => 'Tasawaq senni', 'regional' => ''],
|
||||
//'shi' => ['name' => 'Tachelhit (Latin)', 'script' => 'Latn', 'native' => 'Tashelhit', 'regional' => ''],
|
||||
//'nus' => ['name' => 'Nuer', 'script' => 'Latn', 'native' => 'Thok Nath', 'regional' => ''],
|
||||
//'vi' => ['name' => 'Vietnamese', 'script' => 'Latn', 'native' => 'Tiếng Việt', 'regional' => 'vi_VN'],
|
||||
//'tg-Latn' => ['name' => 'Tajik (Latin)', 'script' => 'Latn', 'native' => 'tojikī', 'regional' => 'tg_TJ'],
|
||||
//'lu' => ['name' => 'Luba-Katanga', 'script' => 'Latn', 'native' => 'Tshiluba', 'regional' => 've_ZA'],
|
||||
//'ve' => ['name' => 'Venda', 'script' => 'Latn', 'native' => 'Tshivenḓa', 'regional' => ''],
|
||||
//'tw' => ['name' => 'Twi', 'script' => 'Latn', 'native' => 'Twi', 'regional' => ''],
|
||||
//'tr' => ['name' => 'Turkish', 'script' => 'Latn', 'native' => 'Türkçe', 'regional' => 'tr_TR'],
|
||||
//'ale' => ['name' => 'Aleut', 'script' => 'Latn', 'native' => 'Unangax tunuu', 'regional' => ''],
|
||||
//'ca-valencia' => ['name' => 'Valencian', 'script' => 'Latn', 'native' => 'valencià', 'regional' => ''],
|
||||
//'vai-Latn' => ['name' => 'Vai (Latin)', 'script' => 'Latn', 'native' => 'Viyamíĩ', 'regional' => ''],
|
||||
//'vo' => ['name' => 'Volapük', 'script' => 'Latn', 'native' => 'Volapük', 'regional' => ''],
|
||||
//'fj' => ['name' => 'Fijian', 'script' => 'Latn', 'native' => 'vosa Vakaviti', 'regional' => ''],
|
||||
//'wa' => ['name' => 'Walloon', 'script' => 'Latn', 'native' => 'Walon', 'regional' => 'wa_BE'],
|
||||
//'wae' => ['name' => 'Walser', 'script' => 'Latn', 'native' => 'Walser', 'regional' => 'wae_CH'],
|
||||
//'wen' => ['name' => 'Sorbian', 'script' => 'Latn', 'native' => 'Wendic', 'regional' => ''],
|
||||
//'wo' => ['name' => 'Wolof', 'script' => 'Latn', 'native' => 'Wolof', 'regional' => 'wo_SN'],
|
||||
//'ts' => ['name' => 'Tsonga', 'script' => 'Latn', 'native' => 'Xitsonga', 'regional' => 'ts_ZA'],
|
||||
//'dje' => ['name' => 'Zarma', 'script' => 'Latn', 'native' => 'Zarmaciine', 'regional' => ''],
|
||||
//'yo' => ['name' => 'Yoruba', 'script' => 'Latn', 'native' => 'Èdè Yorùbá', 'regional' => 'yo_NG'],
|
||||
// 'de-AT' => ['name' => 'Austrian German', 'script' => 'Latn', 'native' => 'Österreichisches Deutsch', 'regional' => 'de_AT'],
|
||||
//'is' => ['name' => 'Icelandic', 'script' => 'Latn', 'native' => 'íslenska', 'regional' => 'is_IS'],
|
||||
//'cs' => ['name' => 'Czech', 'script' => 'Latn', 'native' => 'čeština', 'regional' => 'cs_CZ'],
|
||||
//'bas' => ['name' => 'Basa', 'script' => 'Latn', 'native' => 'Ɓàsàa', 'regional' => ''],
|
||||
//'mas' => ['name' => 'Masai', 'script' => 'Latn', 'native' => 'ɔl-Maa', 'regional' => ''],
|
||||
//'haw' => ['name' => 'Hawaiian', 'script' => 'Latn', 'native' => 'ʻŌlelo Hawaiʻi', 'regional' => ''],
|
||||
//'el' => ['name' => 'Greek', 'script' => 'Grek', 'native' => 'Ελληνικά', 'regional' => 'el_GR'],
|
||||
//'uz' => ['name' => 'Uzbek (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Ўзбек', 'regional' => 'uz_UZ'],
|
||||
//'az-Cyrl' => ['name' => 'Azerbaijani (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Азәрбајҹан', 'regional' => 'uz_UZ'],
|
||||
//'ab' => ['name' => 'Abkhazian', 'script' => 'Cyrl', 'native' => 'Аҧсуа', 'regional' => ''],
|
||||
//'os' => ['name' => 'Ossetic', 'script' => 'Cyrl', 'native' => 'Ирон', 'regional' => 'os_RU'],
|
||||
//'ky' => ['name' => 'Kyrgyz', 'script' => 'Cyrl', 'native' => 'Кыргыз', 'regional' => 'ky_KG'],
|
||||
//'sr' => ['name' => 'Serbian (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Српски', 'regional' => 'sr_RS'],
|
||||
//'av' => ['name' => 'Avaric', 'script' => 'Cyrl', 'native' => 'авар мацӀ', 'regional' => ''],
|
||||
//'ady' => ['name' => 'Adyghe', 'script' => 'Cyrl', 'native' => 'адыгэбзэ', 'regional' => ''],
|
||||
//'ba' => ['name' => 'Bashkir', 'script' => 'Cyrl', 'native' => 'башҡорт теле', 'regional' => ''],
|
||||
//'be' => ['name' => 'Belarusian', 'script' => 'Cyrl', 'native' => 'беларуская', 'regional' => 'be_BY'],
|
||||
//'bg' => ['name' => 'Bulgarian', 'script' => 'Cyrl', 'native' => 'български', 'regional' => 'bg_BG'],
|
||||
//'kv' => ['name' => 'Komi', 'script' => 'Cyrl', 'native' => 'коми кыв', 'regional' => ''],
|
||||
//'mk' => ['name' => 'Macedonian', 'script' => 'Cyrl', 'native' => 'македонски', 'regional' => 'mk_MK'],
|
||||
//'mn' => ['name' => 'Mongolian (Cyrillic)', 'script' => 'Cyrl', 'native' => 'монгол', 'regional' => 'mn_MN'],
|
||||
//'ce' => ['name' => 'Chechen', 'script' => 'Cyrl', 'native' => 'нохчийн мотт', 'regional' => 'ce_RU'],
|
||||
//'ru' => ['name' => 'Russian', 'script' => 'Cyrl', 'native' => 'русский', 'regional' => 'ru_RU'],
|
||||
//'sah' => ['name' => 'Yakut', 'script' => 'Cyrl', 'native' => 'саха тыла', 'regional' => ''],
|
||||
//'tt' => ['name' => 'Tatar', 'script' => 'Cyrl', 'native' => 'татар теле', 'regional' => 'tt_RU'],
|
||||
//'tg' => ['name' => 'Tajik (Cyrillic)', 'script' => 'Cyrl', 'native' => 'тоҷикӣ', 'regional' => 'tg_TJ'],
|
||||
//'tk' => ['name' => 'Turkmen', 'script' => 'Cyrl', 'native' => 'түркменче', 'regional' => 'tk_TM'],
|
||||
//'uk' => ['name' => 'Ukrainian', 'script' => 'Cyrl', 'native' => 'українська', 'regional' => 'uk_UA'],
|
||||
//'cv' => ['name' => 'Chuvash', 'script' => 'Cyrl', 'native' => 'чӑваш чӗлхи', 'regional' => 'cv_RU'],
|
||||
//'cu' => ['name' => 'Church Slavic', 'script' => 'Cyrl', 'native' => 'ѩзыкъ словѣньскъ', 'regional' => ''],
|
||||
//'kk' => ['name' => 'Kazakh', 'script' => 'Cyrl', 'native' => 'қазақ тілі', 'regional' => 'kk_KZ'],
|
||||
//'hy' => ['name' => 'Armenian', 'script' => 'Armn', 'native' => 'Հայերեն', 'regional' => 'hy_AM'],
|
||||
//'yi' => ['name' => 'Yiddish', 'script' => 'Hebr', 'native' => 'ייִדיש', 'regional' => 'yi_US'],
|
||||
//'he' => ['name' => 'Hebrew', 'script' => 'Hebr', 'native' => 'עברית', 'regional' => 'he_IL'],
|
||||
//'ug' => ['name' => 'Uyghur', 'script' => 'Arab', 'native' => 'ئۇيغۇرچە', 'regional' => 'ug_CN'],
|
||||
//'ur' => ['name' => 'Urdu', 'script' => 'Arab', 'native' => 'اردو', 'regional' => 'ur_PK'],
|
||||
//'ar' => ['name' => 'Arabic', 'script' => 'Arab', 'native' => 'العربية', 'regional' => 'ar_AE'],
|
||||
//'uz-Arab' => ['name' => 'Uzbek (Arabic)', 'script' => 'Arab', 'native' => 'اۉزبېک', 'regional' => ''],
|
||||
//'tg-Arab' => ['name' => 'Tajik (Arabic)', 'script' => 'Arab', 'native' => 'تاجیکی', 'regional' => 'tg_TJ'],
|
||||
//'sd' => ['name' => 'Sindhi', 'script' => 'Arab', 'native' => 'سنڌي', 'regional' => 'sd_IN'],
|
||||
//'fa' => ['name' => 'Persian', 'script' => 'Arab', 'native' => 'فارسی', 'regional' => 'fa_IR'],
|
||||
//'pa-Arab' => ['name' => 'Punjabi (Arabic)', 'script' => 'Arab', 'native' => 'پنجاب', 'regional' => 'pa_IN'],
|
||||
//'ps' => ['name' => 'Pashto', 'script' => 'Arab', 'native' => 'پښتو', 'regional' => 'ps_AF'],
|
||||
//'ks' => ['name' => 'Kashmiri (Arabic)', 'script' => 'Arab', 'native' => 'کأشُر', 'regional' => 'ks_IN'],
|
||||
//'ku' => ['name' => 'Kurdish', 'script' => 'Arab', 'native' => 'کوردی', 'regional' => 'ku_TR'],
|
||||
//'dv' => ['name' => 'Divehi', 'script' => 'Thaa', 'native' => 'ދިވެހިބަސް', 'regional' => 'dv_MV'],
|
||||
//'ks-Deva' => ['name' => 'Kashmiri (Devaganari)', 'script' => 'Deva', 'native' => 'कॉशुर', 'regional' => 'ks_IN'],
|
||||
//'kok' => ['name' => 'Konkani', 'script' => 'Deva', 'native' => 'कोंकणी', 'regional' => 'kok_IN'],
|
||||
//'doi' => ['name' => 'Dogri', 'script' => 'Deva', 'native' => 'डोगरी', 'regional' => 'doi_IN'],
|
||||
//'ne' => ['name' => 'Nepali', 'script' => 'Deva', 'native' => 'नेपाली', 'regional' => ''],
|
||||
//'pra' => ['name' => 'Prakrit', 'script' => 'Deva', 'native' => 'प्राकृत', 'regional' => ''],
|
||||
//'brx' => ['name' => 'Bodo', 'script' => 'Deva', 'native' => 'बड़ो', 'regional' => 'brx_IN'],
|
||||
//'bra' => ['name' => 'Braj', 'script' => 'Deva', 'native' => 'ब्रज भाषा', 'regional' => ''],
|
||||
//'mr' => ['name' => 'Marathi', 'script' => 'Deva', 'native' => 'मराठी', 'regional' => 'mr_IN'],
|
||||
//'mai' => ['name' => 'Maithili', 'script' => 'Tirh', 'native' => 'मैथिली', 'regional' => 'mai_IN'],
|
||||
//'raj' => ['name' => 'Rajasthani', 'script' => 'Deva', 'native' => 'राजस्थानी', 'regional' => ''],
|
||||
//'sa' => ['name' => 'Sanskrit', 'script' => 'Deva', 'native' => 'संस्कृतम्', 'regional' => 'sa_IN'],
|
||||
//'hi' => ['name' => 'Hindi', 'script' => 'Deva', 'native' => 'हिन्दी', 'regional' => 'hi_IN'],
|
||||
//'as' => ['name' => 'Assamese', 'script' => 'Beng', 'native' => 'অসমীয়া', 'regional' => 'as_IN'],
|
||||
//'bn' => ['name' => 'Bengali', 'script' => 'Beng', 'native' => 'বাংলা', 'regional' => 'bn_BD'],
|
||||
//'mni' => ['name' => 'Manipuri', 'script' => 'Beng', 'native' => 'মৈতৈ', 'regional' => 'mni_IN'],
|
||||
//'pa' => ['name' => 'Punjabi (Gurmukhi)', 'script' => 'Guru', 'native' => 'ਪੰਜਾਬੀ', 'regional' => 'pa_IN'],
|
||||
//'gu' => ['name' => 'Gujarati', 'script' => 'Gujr', 'native' => 'ગુજરાતી', 'regional' => 'gu_IN'],
|
||||
//'or' => ['name' => 'Oriya', 'script' => 'Orya', 'native' => 'ଓଡ଼ିଆ', 'regional' => 'or_IN'],
|
||||
//'ta' => ['name' => 'Tamil', 'script' => 'Taml', 'native' => 'தமிழ்', 'regional' => 'ta_IN'],
|
||||
//'te' => ['name' => 'Telugu', 'script' => 'Telu', 'native' => 'తెలుగు', 'regional' => 'te_IN'],
|
||||
//'kn' => ['name' => 'Kannada', 'script' => 'Knda', 'native' => 'ಕನ್ನಡ', 'regional' => 'kn_IN'],
|
||||
//'ml' => ['name' => 'Malayalam', 'script' => 'Mlym', 'native' => 'മലയാളം', 'regional' => 'ml_IN'],
|
||||
//'si' => ['name' => 'Sinhala', 'script' => 'Sinh', 'native' => 'සිංහල', 'regional' => 'si_LK'],
|
||||
//'th' => ['name' => 'Thai', 'script' => 'Thai', 'native' => 'ไทย', 'regional' => 'th_TH'],
|
||||
//'lo' => ['name' => 'Lao', 'script' => 'Laoo', 'native' => 'ລາວ', 'regional' => 'lo_LA'],
|
||||
//'bo' => ['name' => 'Tibetan', 'script' => 'Tibt', 'native' => 'པོད་སྐད་', 'regional' => 'bo_IN'],
|
||||
//'dz' => ['name' => 'Dzongkha', 'script' => 'Tibt', 'native' => 'རྫོང་ཁ', 'regional' => 'dz_BT'],
|
||||
//'my' => ['name' => 'Burmese', 'script' => 'Mymr', 'native' => 'မြန်မာဘာသာ', 'regional' => 'my_MM'],
|
||||
//'ka' => ['name' => 'Georgian', 'script' => 'Geor', 'native' => 'ქართული', 'regional' => 'ka_GE'],
|
||||
//'byn' => ['name' => 'Blin', 'script' => 'Ethi', 'native' => 'ብሊን', 'regional' => 'byn_ER'],
|
||||
//'tig' => ['name' => 'Tigre', 'script' => 'Ethi', 'native' => 'ትግረ', 'regional' => 'tig_ER'],
|
||||
//'ti' => ['name' => 'Tigrinya', 'script' => 'Ethi', 'native' => 'ትግርኛ', 'regional' => 'ti_ET'],
|
||||
//'am' => ['name' => 'Amharic', 'script' => 'Ethi', 'native' => 'አማርኛ', 'regional' => 'am_ET'],
|
||||
//'wal' => ['name' => 'Wolaytta', 'script' => 'Ethi', 'native' => 'ወላይታቱ', 'regional' => 'wal_ET'],
|
||||
//'chr' => ['name' => 'Cherokee', 'script' => 'Cher', 'native' => 'ᏣᎳᎩ', 'regional' => ''],
|
||||
//'iu' => ['name' => 'Inuktitut (Canadian Aboriginal Syllabics)', 'script' => 'Cans', 'native' => 'ᐃᓄᒃᑎᑐᑦ', 'regional' => 'iu_CA'],
|
||||
//'oj' => ['name' => 'Ojibwa', 'script' => 'Cans', 'native' => 'ᐊᓂᔑᓈᐯᒧᐎᓐ', 'regional' => ''],
|
||||
//'cr' => ['name' => 'Cree', 'script' => 'Cans', 'native' => 'ᓀᐦᐃᔭᐍᐏᐣ', 'regional' => ''],
|
||||
//'km' => ['name' => 'Khmer', 'script' => 'Khmr', 'native' => 'ភាសាខ្មែរ', 'regional' => 'km_KH'],
|
||||
//'mn-Mong' => ['name' => 'Mongolian (Mongolian)', 'script' => 'Mong', 'native' => 'ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ', 'regional' => 'mn_MN'],
|
||||
//'shi-Tfng' => ['name' => 'Tachelhit (Tifinagh)', 'script' => 'Tfng', 'native' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', 'regional' => ''],
|
||||
//'tzm' => ['name' => 'Central Atlas Tamazight (Tifinagh)','script' => 'Tfng', 'native' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', 'regional' => ''],
|
||||
//'yue' => ['name' => 'Yue', 'script' => 'Hant', 'native' => '廣州話', 'regional' => 'yue_HK'],
|
||||
//'ja' => ['name' => 'Japanese', 'script' => 'Jpan', 'native' => '日本語', 'regional' => 'ja_JP'],
|
||||
//'zh' => ['name' => 'Chinese (Simplified)', 'script' => 'Hans', 'native' => '简体中文', 'regional' => 'zh_CN'],
|
||||
//'zh-Hant' => ['name' => 'Chinese (Traditional)', 'script' => 'Hant', 'native' => '繁體中文', 'regional' => 'zh_CN'],
|
||||
//'ii' => ['name' => 'Sichuan Yi', 'script' => 'Yiii', 'native' => 'ꆈꌠꉙ', 'regional' => ''],
|
||||
//'vai' => ['name' => 'Vai (Vai)', 'script' => 'Vaii', 'native' => 'ꕙꔤ', 'regional' => ''],
|
||||
//'jv-Java' => ['name' => 'Javanese (Javanese)', 'script' => 'Java', 'native' => 'ꦧꦱꦗꦮ', 'regional' => ''],
|
||||
//'ko' => ['name' => 'Korean', 'script' => 'Hang', 'native' => '한국어', 'regional' => 'ko_KR'],
|
||||
],
|
||||
// @phpcs:enable
|
||||
|
||||
// Requires middleware `LaravelSessionRedirect.php`.
|
||||
//
|
||||
// Automatically determine locale from browser
|
||||
// (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language)
|
||||
// on first call if it's not defined in the URL. Redirect user to computed localized url.
|
||||
// For example, if users browser language is `de`, and `de` is active in the array `supportedLocales`,
|
||||
// the `/about` would be redirected to `/de/about`.
|
||||
//
|
||||
// The locale will be stored in session and only be computed from browser
|
||||
// again if the session expires.
|
||||
//
|
||||
// If false, system will take app.php locale attribute.
|
||||
'useAcceptLanguageHeader' => false,
|
||||
|
||||
// If `hideDefaultLocaleInURL` is true, then a url without locale
|
||||
// is identical with the same url with default locale.
|
||||
// For example, if `en` is default locale, then `/en/about` and `/about`
|
||||
// would be identical.
|
||||
//
|
||||
// If in addition the middleware `LaravelLocalizationRedirectFilter` is active, then
|
||||
// every url with default locale is redirected to url without locale.
|
||||
// For example, `/en/about` would be redirected to `/about`.
|
||||
// It is recommended to use `hideDefaultLocaleInURL` only in
|
||||
// combination with the middleware `LaravelLocalizationRedirectFilter`
|
||||
// to avoid duplicate content (SEO).
|
||||
//
|
||||
// If `useAcceptLanguageHeader` is true, then the first time
|
||||
// the locale will be determined from browser and redirect to that language.
|
||||
// After that, `hideDefaultLocaleInURL` behaves as usual.
|
||||
'hideDefaultLocaleInURL' => true,
|
||||
|
||||
// If you want to display the locales in particular order in the language selector you should write the order here.
|
||||
// CAUTION: Please consider using the appropriate locale code otherwise it will not work
|
||||
// Example: 'localesOrder' => ['es','en'].
|
||||
'localesOrder' => ['fr', 'en'],
|
||||
|
||||
// If you want to use custom language URL segments like 'at' instead of 'de-AT', you can map them to allow the
|
||||
// LanguageNegotiator to assign the desired locales based on HTTP Accept Language Header. For example, if you want
|
||||
// to use 'at' instead of 'de-AT', you would map 'de-AT' to 'at' (ie. ['de-AT' => 'at']).
|
||||
'localesMapping' => [],
|
||||
|
||||
// Locale suffix for LC_TIME and LC_MONETARY
|
||||
// Defaults to most common ".UTF-8". Set to blank on Windows systems, change to ".utf8" on CentOS and similar.
|
||||
'utf8suffix' => env('LARAVELLOCALIZATION_UTF8SUFFIX', '.UTF-8'),
|
||||
|
||||
// URLs which should not be processed, e.g. '/nova', '/nova/*', '/nova-api/*' or specific application URLs
|
||||
// Defaults to [].
|
||||
'urlsIgnored' => ['/skipped'],
|
||||
|
||||
'httpMethodsIgnored' => ['POST', 'PUT', 'PATCH', 'DELETE'],
|
||||
];
|
||||
148
config/logging.php
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
<?php
|
||||
|
||||
use Monolog\Handler\NullHandler;
|
||||
use Monolog\Handler\StreamHandler;
|
||||
use Monolog\Handler\SyslogUdpHandler;
|
||||
use Monolog\Processor\PsrLogMessageProcessor;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Default Log Channel
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This option defines the default log channel that is utilized to write
|
||||
* messages to your logs. The value provided here should match one of
|
||||
* the channels present in the list of "channels" configured below.
|
||||
*
|
||||
*/
|
||||
|
||||
'default' => env('LOG_CHANNEL', 'stack'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Deprecations Log Channel
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This option controls the log channel that should be used to log warnings
|
||||
* regarding deprecated PHP and library features. This allows you to get
|
||||
* your application ready for upcoming major versions of dependencies.
|
||||
*
|
||||
*/
|
||||
|
||||
'deprecations' => [
|
||||
'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
|
||||
'trace' => env('LOG_DEPRECATIONS_TRACE', false),
|
||||
],
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Log Channels
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may configure the log channels for your application. Laravel
|
||||
* utilizes the Monolog PHP logging library, which includes a variety
|
||||
* of powerful log handlers and formatters that you're free to use.
|
||||
*
|
||||
* Available drivers: "single", "daily", "slack", "syslog",
|
||||
* "errorlog", "monolog", "custom", "stack"
|
||||
*
|
||||
*/
|
||||
|
||||
'channels' => [
|
||||
|
||||
'stack' => [
|
||||
'driver' => 'stack',
|
||||
'channels' => explode(',', (string) env('LOG_STACK', 'single')),
|
||||
'ignore_exceptions' => false,
|
||||
],
|
||||
|
||||
'single' => [
|
||||
'driver' => 'single',
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'daily' => [
|
||||
'driver' => 'daily',
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'days' => env('LOG_DAILY_DAYS', 14),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'slack' => [
|
||||
'driver' => 'slack',
|
||||
'url' => env('LOG_SLACK_WEBHOOK_URL'),
|
||||
'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),
|
||||
'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),
|
||||
'level' => env('LOG_LEVEL', 'critical'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'papertrail' => [
|
||||
'driver' => 'monolog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
|
||||
'handler_with' => [
|
||||
'host' => env('PAPERTRAIL_URL'),
|
||||
'port' => env('PAPERTRAIL_PORT'),
|
||||
'connectionString' => 'tls://' . env('PAPERTRAIL_URL') . ':' . env('PAPERTRAIL_PORT'),
|
||||
],
|
||||
'processors' => [PsrLogMessageProcessor::class],
|
||||
],
|
||||
|
||||
'stderr' => [
|
||||
'driver' => 'monolog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'handler' => StreamHandler::class,
|
||||
'handler_with' => [
|
||||
'stream' => 'php://stderr',
|
||||
],
|
||||
'formatter' => env('LOG_STDERR_FORMATTER'),
|
||||
'processors' => [PsrLogMessageProcessor::class],
|
||||
],
|
||||
|
||||
'syslog' => [
|
||||
'driver' => 'syslog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'errorlog' => [
|
||||
'driver' => 'errorlog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => NullHandler::class,
|
||||
],
|
||||
|
||||
'emergency' => [
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
],
|
||||
|
||||
'stdout' => [
|
||||
'driver' => 'monolog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'handler' => StreamHandler::class,
|
||||
'formatter' => env('LOG_STDOUT_FORMATTER'),
|
||||
'with' => [
|
||||
'stream' => 'php://stdout',
|
||||
],
|
||||
],
|
||||
|
||||
'k8s' => [
|
||||
'driver' => 'stack',
|
||||
'channels' => ['daily', 'stdout'],
|
||||
'ignore_exceptions' => false,
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
117
config/mail.php
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Default Mailer
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This option controls the default mailer that is used to send all email
|
||||
* messages unless another mailer is explicitly specified when sending
|
||||
* the message. All additional mailers can be configured within the
|
||||
* "mailers" array. Examples of each type of mailer are provided.
|
||||
*
|
||||
*/
|
||||
|
||||
'default' => env('MAIL_MAILER', 'smtp'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Mailer Configurations
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may configure all of the mailers used by your application plus
|
||||
* their respective settings. Several examples have been configured for
|
||||
* you and you are free to add your own as your application requires.
|
||||
*
|
||||
* Laravel supports a variety of mail "transport" drivers that can be used
|
||||
* when delivering an email. You may specify which one you're using for
|
||||
* your mailers below. You may also add additional mailers if needed.
|
||||
*
|
||||
* Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
|
||||
* "postmark", "resend", "log", "array",
|
||||
* "failover", "roundrobin"
|
||||
*
|
||||
*/
|
||||
|
||||
'mailers' => [
|
||||
|
||||
'smtp' => [
|
||||
'transport' => 'smtp',
|
||||
'scheme' => env('MAIL_SCHEME'),
|
||||
'url' => env('MAIL_URL'),
|
||||
'host' => env('MAIL_HOST', '127.0.0.1'),
|
||||
'port' => env('MAIL_PORT', 2525),
|
||||
'username' => env('MAIL_USERNAME'),
|
||||
'password' => env('MAIL_PASSWORD'),
|
||||
'timeout' => null,
|
||||
'local_domain' => env(
|
||||
'MAIL_EHLO_DOMAIN',
|
||||
parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)
|
||||
),
|
||||
],
|
||||
|
||||
'ses' => [
|
||||
'transport' => 'ses',
|
||||
],
|
||||
|
||||
'postmark' => [
|
||||
'transport' => 'postmark',
|
||||
],
|
||||
|
||||
'resend' => [
|
||||
'transport' => 'resend',
|
||||
],
|
||||
|
||||
'sendmail' => [
|
||||
'transport' => 'sendmail',
|
||||
'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
|
||||
],
|
||||
|
||||
'log' => [
|
||||
'transport' => 'log',
|
||||
'channel' => env('MAIL_LOG_CHANNEL'),
|
||||
],
|
||||
|
||||
'array' => [
|
||||
'transport' => 'array',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'transport' => 'failover',
|
||||
'mailers' => [
|
||||
'smtp',
|
||||
'log',
|
||||
],
|
||||
'retry_after' => 60,
|
||||
],
|
||||
|
||||
'roundrobin' => [
|
||||
'transport' => 'roundrobin',
|
||||
'mailers' => [
|
||||
'ses',
|
||||
'postmark',
|
||||
],
|
||||
'retry_after' => 60,
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Global "From" Address
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* You may wish for all emails sent by your application to be sent from
|
||||
* the same address. Here you may specify a name and address that is
|
||||
* used globally for all emails that are sent by your application.
|
||||
*
|
||||
*/
|
||||
|
||||
'from' => [
|
||||
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
|
||||
'name' => env('MAIL_FROM_NAME', 'Example'),
|
||||
],
|
||||
|
||||
];
|
||||
129
config/queue.php
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Default Queue Connection Name
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Laravel's queue supports a variety of backends via a single, unified
|
||||
* API, giving you convenient access to each backend using identical
|
||||
* syntax for each. The default queue connection is defined below.
|
||||
*
|
||||
*/
|
||||
|
||||
'default' => env('QUEUE_CONNECTION', 'database'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Queue Connections
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may configure the connection options for every queue backend
|
||||
* used by your application. An example configuration is provided for
|
||||
* each backend supported by Laravel. You're also free to add more.
|
||||
*
|
||||
* Drivers: "sync", "database", "beanstalkd", "sqs", "redis",
|
||||
* "deferred", "background", "failover", "null"
|
||||
*
|
||||
*/
|
||||
|
||||
'connections' => [
|
||||
|
||||
'sync' => [
|
||||
'driver' => 'sync',
|
||||
],
|
||||
|
||||
'database' => [
|
||||
'driver' => 'database',
|
||||
'connection' => env('DB_QUEUE_CONNECTION'),
|
||||
'table' => env('DB_QUEUE_TABLE', 'jobs'),
|
||||
'queue' => env('DB_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'beanstalkd' => [
|
||||
'driver' => 'beanstalkd',
|
||||
'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
|
||||
'queue' => env('BEANSTALKD_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
|
||||
'block_for' => 0,
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'sqs' => [
|
||||
'driver' => 'sqs',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
|
||||
'queue' => env('SQS_QUEUE', 'default'),
|
||||
'suffix' => env('SQS_SUFFIX'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'redis' => [
|
||||
'driver' => 'redis',
|
||||
'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
|
||||
'queue' => env('REDIS_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),
|
||||
'block_for' => null,
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'deferred' => [
|
||||
'driver' => 'deferred',
|
||||
],
|
||||
|
||||
'background' => [
|
||||
'driver' => 'background',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'driver' => 'failover',
|
||||
'connections' => [
|
||||
'database',
|
||||
'deferred',
|
||||
],
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Job Batching
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The following options configure the database and table that store job
|
||||
* batching information. These options can be updated to any database
|
||||
* connection and table which has been defined by your application.
|
||||
*
|
||||
*/
|
||||
|
||||
'batching' => [
|
||||
'database' => env('DB_CONNECTION', 'sqlite'),
|
||||
'table' => 'job_batches',
|
||||
],
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Failed Queue Jobs
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* These options configure the behavior of failed queue job logging so you
|
||||
* can control how and where failed jobs are stored. Laravel ships with
|
||||
* support for storing failed jobs in a simple file or in a database.
|
||||
*
|
||||
* Supported drivers: "database-uuids", "dynamodb", "file", "null"
|
||||
*
|
||||
*/
|
||||
|
||||
'failed' => [
|
||||
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
|
||||
'database' => env('DB_CONNECTION', 'sqlite'),
|
||||
'table' => 'failed_jobs',
|
||||
],
|
||||
|
||||
];
|
||||
398
config/saml2.php
Normal file
|
|
@ -0,0 +1,398 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Tenant Model
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This will allow you to override the tenant model with your own.
|
||||
*
|
||||
*/
|
||||
|
||||
'tenantModel' => \Slides\Saml2\Models\Tenant::class,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Use built-in routes
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* If "useRoutes" set to true, the package defines five new routes:
|
||||
*
|
||||
* Method | URI | Name
|
||||
* -------|---------------------------------|------------------
|
||||
* POST | {routesPrefix}/{uuid}/acs | saml.acs
|
||||
* GET | {routesPrefix}/{uuid}/login | saml.login
|
||||
* GET | {routesPrefix}/{uuid}/logout | saml.logout
|
||||
* GET | {routesPrefix}/{uuid}/metadata | saml.metadata
|
||||
* GET | {routesPrefix}/{uuid}/sls | saml.sls
|
||||
*
|
||||
*/
|
||||
|
||||
'useRoutes' => true,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Built-in routes prefix
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may define the prefix for built-in routes.
|
||||
*
|
||||
*/
|
||||
|
||||
'routesPrefix' => '/saml2',
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Middle groups to use for the SAML routes
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Note, Laravel 5.2 requires a group which includes StartSession
|
||||
*
|
||||
*/
|
||||
|
||||
'routesMiddleware' => ['saml'],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Signature validation
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Set to true if you want to use parameters from $_SERVER to validate the signature.
|
||||
*
|
||||
*/
|
||||
|
||||
'retrieveParametersFromServer' => false,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Login redirection URL.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The redirection URL after successful login.
|
||||
*
|
||||
*/
|
||||
|
||||
'loginRoute' => '/admin/login',
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Logout redirection URL.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The redirection URL after successful logout.
|
||||
*
|
||||
*/
|
||||
|
||||
'logoutRoute' => '/admin/login',
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Login error redirection URL.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The redirection URL after login failing.
|
||||
*
|
||||
*/
|
||||
|
||||
'errorRoute' => '/admin/login',
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Strict mode.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* If 'strict' is True, then the PHP Toolkit will reject unsigned
|
||||
* or unencrypted messages if it expects them signed or encrypted
|
||||
* Also will reject the messages if not strictly follow the SAML
|
||||
* standard: Destination, NameId, Conditions... are validated too.
|
||||
*
|
||||
*/
|
||||
|
||||
'strict' => true,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Debug mode.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* When enabled, errors must be printed.
|
||||
*
|
||||
*/
|
||||
|
||||
'debug' => env('SAML2_DEBUG', env('APP_DEBUG', false)),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Whether to use `X-Forwarded-*` headers to determine port/domain/protocol.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* If 'proxyVars' is True, then the Saml lib will trust proxy headers
|
||||
* e.g X-Forwarded-Proto / HTTP_X_FORWARDED_PROTO. This is useful if
|
||||
* your application is running behind a load balancer which terminates SSL.
|
||||
*
|
||||
*/
|
||||
|
||||
'proxyVars' => true,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Service Provider configuration.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* General setting of the service provider.
|
||||
*
|
||||
*/
|
||||
|
||||
'sp' => [
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* NameID format.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Specifies constraints on the name identifier to be used to
|
||||
* represent the requested subject.
|
||||
*
|
||||
*/
|
||||
|
||||
'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress',
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* SP Certificates.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Usually x509cert and privateKey of the SP are provided by files placed at
|
||||
* the certs folder. But we can also provide them with the following parameters.
|
||||
*
|
||||
*/
|
||||
|
||||
'x509cert' => env('SAML2_SP_CERT_x509', ''),
|
||||
'privateKey' => env('SAML2_SP_CERT_PRIVATEKEY', ''),
|
||||
'basecert' => env('SAML2_SP_CERT_BASE', ''),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Identifier (URI) of the SP entity.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Leave blank to use the 'saml.metadata' route.
|
||||
*
|
||||
*/
|
||||
|
||||
'entityId' => env('SAML2_SP_ENTITYID', ''),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* The Assertion Consumer Service (ACS) URL.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* URL Location where the <Response> from the IdP will be returned, using HTTP-POST binding.
|
||||
* Leave blank to use the 'saml.acs' route.
|
||||
*
|
||||
*/
|
||||
|
||||
'assertionConsumerService' => [
|
||||
'url' => '',
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* The Single Logout Service URL.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Specifies info about where and how the <Logout Response> message MUST be
|
||||
* returned to the requester, in this case our SP.
|
||||
*
|
||||
* URL Location where the <Response> from the IdP will be returned, using HTTP-Redirect binding.
|
||||
* Leave blank to use the 'saml.sls' route.
|
||||
*
|
||||
*/
|
||||
|
||||
'singleLogoutService' => [
|
||||
'url' => ''
|
||||
],
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* OneLogin security settings.
|
||||
*--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
'security' => [
|
||||
|
||||
'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256',
|
||||
'digestAlgorithm' => 'http://www.w3.org/2001/04/xmlenc#sha256',
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* NameId encryption
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Indicates that the nameID of the <samlp:logoutRequest> sent by this SP
|
||||
* will be encrypted.
|
||||
*
|
||||
*/
|
||||
|
||||
'nameIdEncrypted' => true,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* AuthnRequest signage
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Indicates whether the <samlp:AuthnRequest> messages sent by
|
||||
* this SP will be signed. The Metadata of the SP will offer this info
|
||||
*
|
||||
*/
|
||||
|
||||
'authnRequestsSigned' => true,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Logout request signage
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Indicates whether the <samlp:logoutRequest> messages sent by this SP
|
||||
* will be signed.
|
||||
*
|
||||
*/
|
||||
|
||||
'logoutRequestSigned' => true,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Logout response signage
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Indicates whether the <samlp:logoutResponse> messages sent by this SP
|
||||
* will be signed.
|
||||
*
|
||||
*/
|
||||
|
||||
'logoutResponseSigned' => true,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Whether need to sign metadata.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The possible values:
|
||||
* - false
|
||||
* - true (use certs)
|
||||
* - array:
|
||||
* ```
|
||||
* [
|
||||
* 'keyFileName' => 'metadata.key',
|
||||
* 'certFileName' => 'metadata.crt'
|
||||
* ]
|
||||
* ```
|
||||
*
|
||||
*/
|
||||
|
||||
'signMetadata' => true,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Requirement to sign messages.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Indicates a requirement for the <samlp:Response>, <samlp:LogoutRequest> and
|
||||
* <samlp:LogoutResponse> elements received by this SP to be signed.
|
||||
*
|
||||
*/
|
||||
|
||||
'wantMessagesSigned' => true,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Requirement to sign assertion elements.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Indicates a requirement for the <saml:Assertion> elements received by
|
||||
* this SP to be signed.
|
||||
*
|
||||
*/
|
||||
|
||||
'wantAssertionsSigned' => true,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Requirement to encrypt NameID.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Indicates a requirement for the NameID received by this SP to be encrypted.
|
||||
*
|
||||
*/
|
||||
|
||||
'wantNameIdEncrypted' => false,
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Authentication context.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Set to false and no AuthContext will be sent in the AuthNRequest,
|
||||
*
|
||||
* Set true or don't present this parameter and you will get an
|
||||
* AuthContext 'exact' 'urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport'
|
||||
*
|
||||
* Set an array with the possible auth context values:
|
||||
* ['urn:oasis:names:tc:SAML:2.0:ac:classes:Password', 'urn:oasis:names:tc:SAML:2.0:ac:classes:X509']
|
||||
*
|
||||
*/
|
||||
|
||||
'requestedAuthnContext' => true,
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Contact information.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* It is recommended to supply a technical and support contacts.
|
||||
*
|
||||
*/
|
||||
|
||||
'contactPerson' => [
|
||||
'technical' => [
|
||||
'givenName' => env('SAML2_CONTACT_TECHNICAL_NAME', env('APP_NAME', 'Technical')),
|
||||
'emailAddress' => env('SAML2_CONTACT_TECHNICAL_EMAIL', 'no@reply.com')
|
||||
],
|
||||
'support' => [
|
||||
'givenName' => env('SAML2_CONTACT_SUPPORT_NAME', env('APP_NAME', 'Support')),
|
||||
'emailAddress' => env('SAML2_CONTACT_SUPPORT_EMAIL', 'no@reply.com')
|
||||
],
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Organization information.
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The info in en_US lang is recommended, add more if required.
|
||||
*
|
||||
*/
|
||||
|
||||
'organization' => [
|
||||
'en-US' => [
|
||||
'name' => env('SAML2_ORGANIZATION_NAME', env('APP_NAME', 'Name')),
|
||||
'displayname' => env('SAML2_ORGANIZATION_NAME', env('APP_NAME', 'Name')),
|
||||
'url' => env('SAML2_ORGANIZATION_URL', env('APP_URL', 'http://url'))
|
||||
],
|
||||
],
|
||||
|
||||
/**
|
||||
* Default tenant UUID.
|
||||
*/
|
||||
|
||||
'default_tenant_uuid' => env('SAML2_DEFAULT_TENANT_UUID', null),
|
||||
|
||||
/**
|
||||
* Target domain.
|
||||
*/
|
||||
'domain' => env('SAML2_DOMAIN', "")
|
||||
];
|
||||
61
config/sentry.php
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'dsn' => env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')),
|
||||
|
||||
// The release version of your application.
|
||||
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')).
|
||||
'release' => env('SENTRY_RELEASE'),
|
||||
|
||||
// When left empty or `null` the Laravel environment will be used.
|
||||
'environment' => env('SENTRY_ENVIRONMENT'),
|
||||
|
||||
'breadcrumbs' => [
|
||||
// Capture Laravel logs in breadcrumbs.
|
||||
'logs' => true,
|
||||
|
||||
// Capture SQL queries in breadcrumbs.
|
||||
'sql_queries' => true,
|
||||
|
||||
// Capture bindings on SQL queries logged in breadcrumbs.
|
||||
'sql_bindings' => false,
|
||||
|
||||
// Capture queue job information in breadcrumbs.
|
||||
'queue_info' => true,
|
||||
|
||||
// Capture command information in breadcrumbs.
|
||||
'command_info' => true,
|
||||
],
|
||||
|
||||
'tracing' => [
|
||||
// Trace queue jobs as their own transactions.
|
||||
'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', false),
|
||||
|
||||
// Capture queue jobs as spans when executed on the sync driver.
|
||||
'queue_jobs' => true,
|
||||
|
||||
// Capture SQL queries as spans.
|
||||
'sql_queries' => true,
|
||||
|
||||
// Try to find out where the SQL query originated from and add it to the query spans.
|
||||
'sql_origin' => true,
|
||||
|
||||
// Capture views as spans.
|
||||
'views' => true,
|
||||
|
||||
// Indicates if the tracing integrations supplied by Sentry should be loaded.
|
||||
'default_integrations' => true,
|
||||
|
||||
// Indicates that requests without a matching route should be traced.
|
||||
'missing_routes' => false,
|
||||
],
|
||||
|
||||
// See: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#send-default-pii.
|
||||
'send_default_pii' => env('SENTRY_SEND_DEFAULT_PII', false),
|
||||
|
||||
// See: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#traces-sample-rate.
|
||||
'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float) env('SENTRY_TRACES_SAMPLE_RATE'),
|
||||
|
||||
'before_send' => [\Uwil\LaravelCommon\Helpers\ExceptionsHelper::class, 'sentryEventHandler'],
|
||||
];
|
||||
39
config/services.php
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Third Party Services
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This file is for storing the credentials for third party services such
|
||||
* as Mailgun, Postmark, AWS and more. This file provides the de facto
|
||||
* location for this type of information, allowing packages to have
|
||||
* a conventional file to locate the various service credentials.
|
||||
*
|
||||
*/
|
||||
|
||||
'postmark' => [
|
||||
'key' => env('POSTMARK_API_KEY'),
|
||||
],
|
||||
|
||||
'resend' => [
|
||||
'key' => env('RESEND_API_KEY'),
|
||||
],
|
||||
|
||||
'ses' => [
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
],
|
||||
|
||||
'slack' => [
|
||||
'notifications' => [
|
||||
'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
|
||||
'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
];
|
||||
217
config/session.php
Normal file
|
|
@ -0,0 +1,217 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Default Session Driver
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This option determines the default session driver that is utilized for
|
||||
* incoming requests. Laravel supports a variety of storage options to
|
||||
* persist session data. Database storage is a great default choice.
|
||||
*
|
||||
* Supported: "file", "cookie", "database", "memcached",
|
||||
* "redis", "dynamodb", "array"
|
||||
*
|
||||
*/
|
||||
|
||||
'driver' => env('SESSION_DRIVER', 'database'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Session Lifetime
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may specify the number of minutes that you wish the session
|
||||
* to be allowed to remain idle before it expires. If you want them
|
||||
* to expire immediately when the browser is closed then you may
|
||||
* indicate that via the expire_on_close configuration option.
|
||||
*
|
||||
*/
|
||||
|
||||
'lifetime' => (int) env('SESSION_LIFETIME', 120),
|
||||
|
||||
'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Session Encryption
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This option allows you to easily specify that all of your session data
|
||||
* should be encrypted before it's stored. All encryption is performed
|
||||
* automatically by Laravel and you may use the session like normal.
|
||||
*
|
||||
*/
|
||||
|
||||
'encrypt' => env('SESSION_ENCRYPT', false),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Session File Location
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* When utilizing the "file" session driver, the session files are placed
|
||||
* on disk. The default storage location is defined here; however, you
|
||||
* are free to provide another location where they should be stored.
|
||||
*
|
||||
*/
|
||||
|
||||
'files' => storage_path('framework/sessions'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Session Database Connection
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* When using the "database" or "redis" session drivers, you may specify a
|
||||
* connection that should be used to manage these sessions. This should
|
||||
* correspond to a connection in your database configuration options.
|
||||
*
|
||||
*/
|
||||
|
||||
'connection' => env('SESSION_CONNECTION'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Session Database Table
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* When using the "database" session driver, you may specify the table to
|
||||
* be used to store sessions. Of course, a sensible default is defined
|
||||
* for you; however, you're welcome to change this to another table.
|
||||
*
|
||||
*/
|
||||
|
||||
'table' => env('SESSION_TABLE', 'sessions'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Session Cache Store
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* When using one of the framework's cache driven session backends, you may
|
||||
* define the cache store which should be used to store the session data
|
||||
* between requests. This must match one of your defined cache stores.
|
||||
*
|
||||
* Affects: "dynamodb", "memcached", "redis"
|
||||
*
|
||||
*/
|
||||
|
||||
'store' => env('SESSION_STORE'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Session Sweeping Lottery
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Some session drivers must manually sweep their storage location to get
|
||||
* rid of old sessions from storage. Here are the chances that it will
|
||||
* happen on a given request. By default, the odds are 2 out of 100.
|
||||
*
|
||||
*/
|
||||
|
||||
'lottery' => [2, 100],
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Session Cookie Name
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Here you may change the name of the session cookie that is created by
|
||||
* the framework. Typically, you should not need to change this value
|
||||
* since doing so does not grant a meaningful security improvement.
|
||||
*
|
||||
*/
|
||||
|
||||
'cookie' => env(
|
||||
'SESSION_COOKIE',
|
||||
Str::slug((string) env('APP_NAME', 'laravel')) . '-session'
|
||||
),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Session Cookie Path
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The session cookie path determines the path for which the cookie will
|
||||
* be regarded as available. Typically, this will be the root path of
|
||||
* your application, but you're free to change this when necessary.
|
||||
*
|
||||
*/
|
||||
|
||||
'path' => env('SESSION_PATH', '/'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Session Cookie Domain
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This value determines the domain and subdomains the session cookie is
|
||||
* available to. By default, the cookie will be available to the root
|
||||
* domain without subdomains. Typically, this shouldn't be changed.
|
||||
*
|
||||
*/
|
||||
|
||||
'domain' => env('SESSION_DOMAIN'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* HTTPS Only Cookies
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* By setting this option to true, session cookies will only be sent back
|
||||
* to the server if the browser has a HTTPS connection. This will keep
|
||||
* the cookie from being sent to you when it can't be done securely.
|
||||
*
|
||||
*/
|
||||
|
||||
'secure' => env('SESSION_SECURE_COOKIE'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* HTTP Access Only
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Setting this value to true will prevent JavaScript from accessing the
|
||||
* value of the cookie and the cookie will only be accessible through
|
||||
* the HTTP protocol. It's unlikely you should disable this option.
|
||||
*
|
||||
*/
|
||||
|
||||
'http_only' => env('SESSION_HTTP_ONLY', true),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Same-Site Cookies
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This option determines how your cookies behave when cross-site requests
|
||||
* take place, and can be used to mitigate CSRF attacks. By default, we
|
||||
* will set this value to "lax" to permit secure cross-site requests.
|
||||
*
|
||||
* See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
|
||||
*
|
||||
* Supported: "lax", "strict", "none", null
|
||||
*
|
||||
*/
|
||||
|
||||
'same_site' => env('SESSION_SAME_SITE', 'lax'),
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------
|
||||
* Partitioned Cookies
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* Setting this value to true will tie the cookie to the top-level site for
|
||||
* a cross-site context. Partitioned cookies are accepted by the browser
|
||||
* when flagged "secure" and the Same-Site attribute is set to "none".
|
||||
*
|
||||
*/
|
||||
|
||||
'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
|
||||
|
||||
];
|
||||
184
config/telescope.php
Normal file
|
|
@ -0,0 +1,184 @@
|
|||
<?php
|
||||
|
||||
use Laravel\Telescope\Http\Middleware\Authorize;
|
||||
use Laravel\Telescope\Watchers;
|
||||
|
||||
return [
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Telescope Master Switch
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This option may be used to disable all Telescope watchers regardless
|
||||
* of their individual configuration, which simply provides a single
|
||||
* and convenient way to enable or disable Telescope data storage.
|
||||
*
|
||||
*/
|
||||
|
||||
'enabled' => env('TELESCOPE_ENABLED', true),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Telescope Domain
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This is the subdomain where Telescope will be accessible from. If the
|
||||
* setting is null, Telescope will reside under the same domain as the
|
||||
* application. Otherwise, this value will be used as the subdomain.
|
||||
*
|
||||
*/
|
||||
|
||||
'domain' => env('TELESCOPE_DOMAIN'),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Telescope Path
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This is the URI path where Telescope will be accessible from. Feel free
|
||||
* to change this path to anything you like. Note that the URI will not
|
||||
* affect the paths of its internal API that aren't exposed to users.
|
||||
*
|
||||
*/
|
||||
|
||||
'path' => env('TELESCOPE_PATH', 'admin/telescope'),
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Telescope Storage Driver
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This configuration options determines the storage driver that will
|
||||
* be used to store Telescope's data. In addition, you may set any
|
||||
* custom options as needed by the particular driver you choose.
|
||||
*
|
||||
*/
|
||||
|
||||
'driver' => env('TELESCOPE_DRIVER', 'database'),
|
||||
|
||||
'storage' => [
|
||||
'database' => [
|
||||
'connection' => env('DB_CONNECTION', 'mysql'),
|
||||
'chunk' => 1000,
|
||||
],
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Telescope Queue
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* This configuration options determines the queue connection and queue
|
||||
* which will be used to process ProcessPendingUpdate jobs. This can
|
||||
* be changed if you would prefer to use a non-default connection.
|
||||
*
|
||||
*/
|
||||
|
||||
'queue' => [
|
||||
'connection' => env('TELESCOPE_QUEUE_CONNECTION', null),
|
||||
'queue' => env('TELESCOPE_QUEUE', null),
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Telescope Route Middleware
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* These middleware will be assigned to every Telescope route, giving you
|
||||
* the chance to add your own middleware to this list or change any of
|
||||
* the existing middleware. Or, you can simply stick with this list.
|
||||
*
|
||||
*/
|
||||
|
||||
'middleware' => [
|
||||
Authorize::class,
|
||||
],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Allowed / Ignored Paths & Commands
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The following array lists the URI paths and Artisan commands that will
|
||||
* not be watched by Telescope. In addition to this list, some Laravel
|
||||
* commands, like migrations and queue commands, are always ignored.
|
||||
*
|
||||
*/
|
||||
|
||||
'only_paths' => [],
|
||||
|
||||
'ignore_paths' => [
|
||||
'livewire*',
|
||||
'nova-api*',
|
||||
'pulse*',
|
||||
],
|
||||
|
||||
'ignore_commands' => [],
|
||||
|
||||
/**
|
||||
*--------------------------------------------------------------------------
|
||||
* Telescope Watchers
|
||||
*--------------------------------------------------------------------------
|
||||
*
|
||||
* The following array lists the "watchers" that will be registered with
|
||||
* Telescope. The watchers gather the application's profile data when
|
||||
* a request or task is executed. Feel free to customize this list.
|
||||
*
|
||||
*/
|
||||
|
||||
'watchers' => [
|
||||
Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true),
|
||||
Watchers\CacheWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_CACHE_WATCHER', true),
|
||||
'hidden' => [],
|
||||
],
|
||||
Watchers\ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true),
|
||||
Watchers\CommandWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_COMMAND_WATCHER', true),
|
||||
'ignore' => [],
|
||||
],
|
||||
Watchers\DumpWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_DUMP_WATCHER', true),
|
||||
'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false),
|
||||
],
|
||||
Watchers\EventWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_EVENT_WATCHER', true),
|
||||
'ignore' => [],
|
||||
],
|
||||
Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true),
|
||||
Watchers\GateWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_GATE_WATCHER', true),
|
||||
'ignore_abilities' => [],
|
||||
'ignore_packages' => true,
|
||||
'ignore_paths' => [],
|
||||
],
|
||||
Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true),
|
||||
Watchers\LogWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_LOG_WATCHER', true),
|
||||
'level' => 'error',
|
||||
],
|
||||
Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true),
|
||||
Watchers\ModelWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
|
||||
'events' => ['eloquent.*'],
|
||||
'hydrations' => true,
|
||||
],
|
||||
Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true),
|
||||
Watchers\QueryWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
|
||||
'ignore_packages' => true,
|
||||
'ignore_paths' => [],
|
||||
'slow' => 100,
|
||||
],
|
||||
Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true),
|
||||
Watchers\RequestWatcher::class => [
|
||||
'enabled' => env('TELESCOPE_REQUEST_WATCHER', true),
|
||||
'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64),
|
||||
'ignore_http_methods' => [],
|
||||
'ignore_status_codes' => [],
|
||||
],
|
||||
Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true),
|
||||
Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true),
|
||||
],
|
||||
];
|
||||
0
database/factories/.gitkeep
Normal file
0
database/migrations/.gitkeep
Normal file
0
database/seeders/Classic/.gitkeep
Normal file
20
database/seeders/DatabaseSeeder.php
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Uwil\LaravelCommon\Enums\SeederCategoryEnum;
|
||||
use Uwil\LaravelCommon\Support\SeederRegistry;
|
||||
|
||||
class DatabaseSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
SeederRegistry::runAll(SeederCategoryEnum::classic);
|
||||
}
|
||||
}
|
||||
0
database/seeders/Mandatory/.gitkeep
Normal file
20
database/seeders/MandatorySeeder.php
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Uwil\LaravelCommon\Enums\SeederCategoryEnum;
|
||||
use Uwil\LaravelCommon\Support\SeederRegistry;
|
||||
|
||||
class MandatorySeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
SeederRegistry::runAll(SeederCategoryEnum::mandatory);
|
||||
}
|
||||
}
|
||||
56
docs/recaptcha/RECAPTCHA.md
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
# Guide d'utilisation du système ReCaptcha Provider
|
||||
|
||||
Ce guide explique comment utiliser notre système ReCaptcha basé sur un **Provider** et un hook React, pour simplifier l'intégration de Google reCAPTCHA avec gestion des cookies.
|
||||
|
||||
---
|
||||
|
||||
## 1. Structure du système
|
||||
|
||||
Le système se compose de trois éléments principaux :
|
||||
|
||||
1. **`RecaptchaProvider`**
|
||||
- Encapsule votre formulaire et active le reCAPTCHA automatiquement selon le statut des cookies.
|
||||
- Fournit un contexte React (`useRecaptcha`) pour accéder au token et au `formRef`.
|
||||
|
||||
2. **`useRecaptcha`**
|
||||
- Hook React pour accéder au contexte du Provider.
|
||||
- Fournit :
|
||||
- `enabled` : booléen indiquant si le reCAPTCHA est actif (cookie accepté).
|
||||
- `getToken()` : fonction pour récupérer le token reCAPTCHA actuel.
|
||||
- `formRef` : référence au formulaire pour manipulation ou focus.
|
||||
|
||||
3. **`RecaptchaForm`**
|
||||
- Wrapper autour du `<form>` standard.
|
||||
- S'occupe de :
|
||||
- Injecter le conteneur reCAPTCHA `.r_captcha` si actif.
|
||||
- Ajouter l’attribut `inert` sur le formulaire si le reCAPTCHA n’est pas encore activé.
|
||||
- Appeler la fonction `getToken()` au submit si nécessaire.
|
||||
|
||||
---
|
||||
|
||||
## 2. Utilisation dans un formulaire
|
||||
|
||||
```tsx
|
||||
import { useForm } from "@inertiajs/react";
|
||||
import { RecaptchaProvider } from "@/front/providers/RecaptchaProvider";
|
||||
import RecaptchaForm from "@/front/Components/Base/RecaptchaForm";
|
||||
|
||||
export default function ContactForm() {
|
||||
const { data, setData, post, processing } = useForm({
|
||||
name: "",
|
||||
email: "",
|
||||
message: "",
|
||||
});
|
||||
|
||||
const handleSubmit = (token: string) => {
|
||||
post("/contact");
|
||||
};
|
||||
|
||||
return (
|
||||
<RecaptchaProvider>
|
||||
<RecaptchaForm onSubmit={handleSubmit} data={data}>
|
||||
...input + boutton submit (pas besoin de balise form)
|
||||
</RecaptchaForm>
|
||||
</RecaptchaProvider>
|
||||
);
|
||||
}
|
||||
48
docs/recaptcha/RECAPTCHAFORM.md
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
## Fonctionnement du composant `RecaptchaForm`
|
||||
|
||||
Le composant `RecaptchaForm` est un wrapper autour d’un `<form>` classique qui gère automatiquement :
|
||||
|
||||
1. L’injection du conteneur ReCaptcha (`.r_captcha`)
|
||||
2. L’état actif ou inactif du formulaire via l’attribut `inert`
|
||||
3. La récupération et l’injection du token reCAPTCHA dans les données du formulaire
|
||||
4. L’affichage d’un bandeau d’alerte si les cookies reCAPTCHA ne sont pas encore acceptés
|
||||
|
||||
---
|
||||
|
||||
### 1. Props principales
|
||||
|
||||
| Prop | Type | Description |
|
||||
|------|------|-------------|
|
||||
| `onSubmit` | `(e: FormEvent<HTMLFormElement>) => void` | Callback appelé au submit avec le token déjà injecté dans `data["g-recaptcha-response"]`. |
|
||||
| `data` | `TFormData & { "g-recaptcha-response"?: string }` | Objet représentant les données du formulaire. Le token reCAPTCHA y est ajouté automatiquement. |
|
||||
| `children` | `React.ReactNode` | Champs et éléments du formulaire. |
|
||||
| `banner` | `BannerClassName` | Optionnel. Permet de personnaliser le bandeau d’alerte affiché si le reCAPTCHA n’est pas activé. |
|
||||
| `classNames` | `{ wrapperClassName?: string; formClassName?: string; }` | Optionnel. Permet de passer des classes CSS personnalisées pour le wrapper et le `<form>`. |
|
||||
|
||||
---
|
||||
|
||||
### 2. Comportement
|
||||
|
||||
- **Désactivation automatique du formulaire** :
|
||||
Le formulaire est rendu `inert` si le reCAPTCHA n’est pas actif (cookie non accepté), empêchant l’interaction avec les champs et les boutons.
|
||||
|
||||
```ts
|
||||
<form inert={!enabled} ... >
|
||||
```
|
||||
|
||||
### Injection du token reCAPTCHA :
|
||||
Au submit, si le reCAPTCHA est activé, le hook useRecaptcha récupère le token et l’injecte dans data["g-recaptcha-response"] avant d’appeler le callback onSubmit.
|
||||
|
||||
```tsx
|
||||
const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
|
||||
...
|
||||
data["g-recaptcha-response"] = token;
|
||||
...
|
||||
};
|
||||
```
|
||||
|
||||
### Bandeau d’information (RecaptchaNotice) :
|
||||
|
||||
S’affiche uniquement si le reCAPTCHA n’est pas actif.
|
||||
Invite l’utilisateur à accepter les cookies pour activer le formulaire.
|
||||
Un bouton Accepter déclenche window.WebCookieNotice?.acceptCookie("recaptcha").
|
||||
127
docs/recaptcha/RECAPTCHAPROVIDER.md
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
# Documentation du `RecaptchaProvider`
|
||||
|
||||
Le `RecaptchaProvider` est un composant React qui encapsule la logique d’intégration de Google reCAPTCHA avec gestion des cookies et état du formulaire. Il fonctionne avec **Inertia.js** et **React**, et simplifie l’activation du reCAPTCHA dans n’importe quel formulaire.
|
||||
|
||||
---
|
||||
|
||||
## 1. Installation et import
|
||||
|
||||
```tsx
|
||||
import { RecaptchaProvider, useRecaptcha } from "@/front/providers/RecaptchaProvider";
|
||||
// Ensuite, enveloppe ton formulaire avec le provider :
|
||||
<RecaptchaProvider>
|
||||
<MonFormulaire />
|
||||
</RecaptchaProvider>
|
||||
|
||||
// Tu peux être plus propre et entourer tout ton Applayout, ce qui évite d'encapsuler chaque formulaire
|
||||
<RecaptchaProvider>
|
||||
{children}
|
||||
</RecaptchaProvider>
|
||||
```
|
||||
|
||||
## 2. Fonctionnement général
|
||||
|
||||
Le provider expose :
|
||||
|
||||
- `enabled` : `boolean` indiquant si le reCAPTCHA est activé (cookie accepté).
|
||||
- `getToken()` : fonction pour récupérer le token généré par Google reCAPTCHA.
|
||||
- `formRef` : référence vers le `<form>` HTML, utilisée pour injecter le conteneur reCAPTCHA et désactiver le formulaire si nécessaire.
|
||||
|
||||
### 2.1 Gestion automatique des cookies
|
||||
|
||||
Le provider utilise le hook `useCookieNotice` pour vérifier si l’utilisateur a accepté le service RECAPTCHA.
|
||||
|
||||
- Si accepté → le reCAPTCHA est initialisé sur le formulaire.
|
||||
- Si non accepté → le formulaire reste inert, empêchant toute interaction jusqu’à ce que l’utilisateur donne son consentement.
|
||||
|
||||
### 2.2 Injection du formulaire
|
||||
|
||||
Le provider utilise `InitRecaptcha([formRef.current])` pour :
|
||||
|
||||
- Créer un `<div class="g-recaptcha">` dans le formulaire.
|
||||
- Charger le script Google reCAPTCHA de manière asynchrone.
|
||||
- Gérer le reset du reCAPTCHA si nécessaire.
|
||||
|
||||
### 2.3 Désactivation du formulaire
|
||||
|
||||
Le formulaire est automatiquement rendu `inert` tant que le reCAPTCHA n’est pas actif. Cela empêche les utilisateurs d’envoyer le formulaire avant d’avoir accepté les cookies.
|
||||
|
||||
## 3. Utilisation du hook useRecaptcha
|
||||
|
||||
Dans un composant enfant du provider, tu peux accéder au contexte avec :
|
||||
|
||||
```tsx
|
||||
const { enabled, getToken, formRef } = useRecaptcha();
|
||||
```
|
||||
|
||||
Exemples :
|
||||
|
||||
- Vérifier si le reCAPTCHA est activé :
|
||||
|
||||
```tsx
|
||||
if (!enabled) {
|
||||
console.log("Le reCAPTCHA n'est pas actif");
|
||||
}
|
||||
```
|
||||
|
||||
- Récupérer le token au moment du submit :
|
||||
|
||||
```tsx
|
||||
const token = getToken();
|
||||
data["g-recaptcha-response"] = token;
|
||||
post(route('contact.submit'), { data });
|
||||
```
|
||||
|
||||
- Associer formRef à un `<form>` :
|
||||
|
||||
```tsx
|
||||
<form ref={formRef} data-recaptcha-key={recaptchaKey}>
|
||||
...
|
||||
</form>
|
||||
```
|
||||
|
||||
## 4. Exemple complet avec Inertia
|
||||
|
||||
```tsx
|
||||
<RecaptchaProvider>
|
||||
<RecaptchaForm
|
||||
data={formData}
|
||||
onSubmit={(e) => post(route("contact.submit"), { data: formData })}
|
||||
>
|
||||
<input name="email" value={formData.email} onChange={e => setFormData("email", e.target.value)} />
|
||||
<textarea name="message" value={formData.message} onChange={e => setFormData("message", e.target.value)} />
|
||||
<button type="submit">Envoyer</button>
|
||||
</RecaptchaForm>
|
||||
</RecaptchaProvider>
|
||||
```
|
||||
- Le formulaire est désactivé automatiquement si l’utilisateur n’a pas accepté le reCAPTCHA.
|
||||
- Le token reCAPTCHA est injecté automatiquement au moment du submit.
|
||||
- La logique de cookie consent est gérée sans code supplémentaire.
|
||||
|
||||
## 5. RecaptchaForm : comment ça fonctionne
|
||||
|
||||
Le composant `RecaptchaForm` est un wrapper de formulaire qui gère le reCAPTCHA et l’état inert.
|
||||
|
||||
- `onSubmit` : callback déclenché lorsque le formulaire est soumis et que le reCAPTCHA est actif.
|
||||
- `data` : objet contenant les données du formulaire, incluant `g-recaptcha-response`.
|
||||
- `children` : champs du formulaire.
|
||||
- `banner` : optionnel, permet d’afficher un message si le reCAPTCHA n’est pas encore activé.
|
||||
|
||||
#### Fonctionnalités clés
|
||||
|
||||
- Inert automatiquement : le formulaire est bloqué tant que le consentement n’est pas donné.
|
||||
- Token automatique : le token reCAPTCHA est récupéré et injecté dans `data["g-recaptcha-response"]`.
|
||||
- Notification de cookie : un banner s’affiche pour informer l’utilisateur et lui permettre d’accepter le service.
|
||||
|
||||
## 6. Avantages du `RecaptchaProvider`
|
||||
|
||||
- Séparation claire des responsabilités : le provider gère uniquement l’état du reCAPTCHA et des cookies.
|
||||
- Réutilisable : peut encapsuler plusieurs formulaires ou pages sans dupliquer le code.
|
||||
- Sécurité : empêche toute soumission tant que le consentement n’est pas donné.
|
||||
- Intégration simple avec Inertia.js : compatible avec `useForm()` et `usePage()`.
|
||||
- Flexible : expose `formRef` pour un contrôle direct du `<form>`.
|
||||
|
||||
## 7. Bonnes pratiques
|
||||
- Toujours placer les formulaires à l’intérieur du `RecaptchaProvider`.
|
||||
- Ne pas appeler `getToken()` en dehors du submit pour éviter des tokens invalides.
|
||||
- Utiliser le champ `data-recaptcha-key` sur le `<form>` pour que InitRecaptcha puisse initialiser correctement le reCAPTCHA.
|
||||
30
k8s-queues.sh
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# From https://stackoverflow.com/a/76488746/17320077
|
||||
|
||||
work=true
|
||||
|
||||
function stopQueues() {
|
||||
echo "Stopping queues..."
|
||||
work=false
|
||||
php artisan queue:restart
|
||||
sleep 45s
|
||||
exit 0
|
||||
}
|
||||
|
||||
# handle graceful shutdown
|
||||
trap "" SIGPIPE
|
||||
trap stopQueues EXIT
|
||||
|
||||
echo "Starting PHP queue workers..."
|
||||
|
||||
while $work; do
|
||||
php artisan queue:work database --queue=default,database --sleep=3 --tries=3 --max-time=3600 --no-interaction
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# Si besoin de plusieurs threads puis terminer par un done sans &
|
||||
#(while $work; do
|
||||
# php artisan queue:work --queue="$(grep -oP 'SQS_QUEUE=\K.*' .env)" --no-interaction
|
||||
# sleep 1
|
||||
#done &)
|
||||
55
lang/de/cookie-notice.php
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'button_banner_cookies' => 'Cookies',
|
||||
'banner_text' => 'We use cookies to ensure the proper functioning of our site and for analytical purposes.
|
||||
You can change your mind at any time by clicking on the icon on any page of our site.
|
||||
By authorizing these third-party services, you agree to the deposit and reading of cookies and the use of tracking technologies necessary for their proper operation.',
|
||||
'button_validate_and_close' => 'Confirm and close',
|
||||
'button_forbid_all' => 'Refuse all',
|
||||
'button_allow_all' => 'Accept all',
|
||||
'consent_all_text' => 'By clicking on <span class="font-medium">"Accept all"</span>, you consent to use our cookies.',
|
||||
'banner_title' => 'The :site_name website uses cookies!',
|
||||
'learn_more' => 'Learn more',
|
||||
'button_close_cookies' => 'Close cookie window',
|
||||
'modal_title' => 'Cookie management window',
|
||||
'panel_content' => 'Cookie management panel content',
|
||||
'button_customize' => 'Customize',
|
||||
'preferences_cookies' => 'Preferences cookies',
|
||||
'button_toggle_cookie' => 'Accept or refuse :service',
|
||||
'open_cookies' => 'Open cookies management panel',
|
||||
'button_forbid_all_title' => 'Refuse all cookies and close the cookies panel',
|
||||
'button_allow_all_title' => 'Accept all cookies and close the cookies panel',
|
||||
'custom' => [
|
||||
'analytics' => [
|
||||
'title' => 'Google Analytics',
|
||||
'description' => 'Audience measurement services make it possible to generate attendance statistics useful for improving the site.',
|
||||
],
|
||||
'vimeo' => [
|
||||
'title' => 'Vimeo',
|
||||
'description' => 'Cookies placed via video sharing services are intended to allow the user to view multimedia content directly on the site.',
|
||||
'labelLink' => 'Learn more',
|
||||
'warning' => 'You must accept cookies to view this video',
|
||||
'accept' => 'Accept'
|
||||
],
|
||||
'youtube' => [
|
||||
'title' => 'Youtube',
|
||||
'description' => 'Cookies placed via video sharing services are intended to allow the user to view multimedia content directly on the site.',
|
||||
'labelLink' => 'Learn more',
|
||||
'warning' => 'You must accept cookies to view this video',
|
||||
'accept' => 'Accept'
|
||||
],
|
||||
'matomo' => [
|
||||
'title' => 'Matomo',
|
||||
'description' => 'Audience measurement services are used to generate traffic statistics, which are useful for improving the site.',
|
||||
'labelLink' => 'Learn more',
|
||||
],
|
||||
'recaptcha' => [
|
||||
'title' => 'reCAPTCHA',
|
||||
'description' => 'The purpose of the cookies placed on forms via the recaptcha is to prevent them from being submitted by robots.',
|
||||
'labelLink' => 'Learn more',
|
||||
'warning' => 'You must accept reCAPTCHA cookies to send the form',
|
||||
'accept' => 'Accept reCAPTCHA'
|
||||
]
|
||||
]
|
||||
];
|
||||
7
lang/en/back.php
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
// "dashboard" => "Tableau de bord",
|
||||
];
|
||||
55
lang/en/cookie-notice.php
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'button_banner_cookies' => 'Cookies',
|
||||
'banner_text' => 'We use cookies to ensure the proper functioning of our site and for analytical purposes.
|
||||
You can change your mind at any time by clicking on the icon on any page of our site.
|
||||
By authorizing these third-party services, you agree to the deposit and reading of cookies and the use of tracking technologies necessary for their proper operation.',
|
||||
'button_validate_and_close' => 'Confirm and close',
|
||||
'button_forbid_all' => 'Refuse all',
|
||||
'button_allow_all' => 'Accept all',
|
||||
'consent_all_text' => 'By clicking on <span class="font-medium">"Accept all"</span>, you consent to use our cookies.',
|
||||
'banner_title' => 'The :site_name website uses cookies!',
|
||||
'learn_more' => 'Learn more',
|
||||
'button_close_cookies' => 'Close cookie window',
|
||||
'modal_title' => 'Cookie management window',
|
||||
'panel_content' => 'Cookie management panel content',
|
||||
'button_customize' => 'Customize',
|
||||
'preferences_cookies' => 'Preferences cookies',
|
||||
'button_toggle_cookie' => 'Accept or refuse :service',
|
||||
'open_cookies' => 'Open cookies management panel',
|
||||
'button_forbid_all_title' => 'Refuse all cookies and close the cookies panel',
|
||||
'button_allow_all_title' => 'Accept all cookies and close the cookies panel',
|
||||
'custom' => [
|
||||
'analytics' => [
|
||||
'title' => 'Google Analytics',
|
||||
'description' => 'Audience measurement services make it possible to generate attendance statistics useful for improving the site.',
|
||||
],
|
||||
'vimeo' => [
|
||||
'title' => 'Vimeo',
|
||||
'description' => 'Cookies placed via video sharing services are intended to allow the user to view multimedia content directly on the site.',
|
||||
'labelLink' => 'Learn more',
|
||||
'warning' => 'You must accept cookies to view this video',
|
||||
'accept' => 'Accept'
|
||||
],
|
||||
'youtube' => [
|
||||
'title' => 'Youtube',
|
||||
'description' => 'Cookies placed via video sharing services are intended to allow the user to view multimedia content directly on the site.',
|
||||
'labelLink' => 'Learn more',
|
||||
'warning' => 'You must accept cookies to view this video',
|
||||
'accept' => 'Accept'
|
||||
],
|
||||
'matomo' => [
|
||||
'title' => 'Matomo',
|
||||
'description' => 'Audience measurement services are used to generate traffic statistics, which are useful for improving the site.',
|
||||
'labelLink' => 'Learn more',
|
||||
],
|
||||
'recaptcha' => [
|
||||
'title' => 'reCAPTCHA',
|
||||
'description' => 'The purpose of the cookies placed on forms via the recaptcha is to prevent them from being submitted by robots.',
|
||||
'labelLink' => 'Learn more',
|
||||
'warning' => 'You must accept reCAPTCHA cookies to send the form',
|
||||
'accept' => 'Accept reCAPTCHA'
|
||||
]
|
||||
]
|
||||
];
|
||||
11
lang/en/enums.php
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
// "user-role" => [
|
||||
// "conceptor" => "Concepteur",
|
||||
// "admin" => "Administrateur",
|
||||
// "visitor" => "Visiteur",
|
||||
// ],
|
||||
];
|
||||
56
lang/en/errors.php
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
"400" => [
|
||||
"title" => "Bad Request",
|
||||
"description" => "The server could not understand your request. Please check and try again.",
|
||||
],
|
||||
"401" => [
|
||||
"title" => "Unauthorized",
|
||||
"description" => "You must be logged in to access this page.",
|
||||
],
|
||||
"403" => [
|
||||
"title" => "Forbidden",
|
||||
"description" => "Sorry, you are forbidden from accessing this page.",
|
||||
],
|
||||
"404" => [
|
||||
"title" => "Page Not Found",
|
||||
"description" => "Sorry, the page you are looking for could not be found.",
|
||||
],
|
||||
"405" => [
|
||||
"title" => "Method Not Allowed",
|
||||
"description" => "The method used for this request is not allowed.",
|
||||
],
|
||||
"408" => [
|
||||
"title" => "Request Timeout",
|
||||
"description" => "The server took too long to respond. Please try again.",
|
||||
],
|
||||
"419" => [
|
||||
"title" => "Page Expired",
|
||||
"description" => "Your session has expired. Please refresh and try again.",
|
||||
],
|
||||
"422" => [
|
||||
"title" => "Unprocessable Entity",
|
||||
"description" => "The data provided was invalid. Please check and try again.",
|
||||
],
|
||||
"429" => [
|
||||
"title" => "Too Many Requests",
|
||||
"description" => "You have made too many requests in a short time. Please slow down.",
|
||||
],
|
||||
"500" => [
|
||||
"title" => "Server Error",
|
||||
"description" => "Whoops, something went wrong on our servers.",
|
||||
],
|
||||
"502" => [
|
||||
"title" => "Bad Gateway",
|
||||
"description" => "The server received an invalid response. Please try again later.",
|
||||
],
|
||||
"503" => [
|
||||
"title" => "Service Unavailable",
|
||||
"description" => "Sorry, we are doing some maintenance. Please check back soon.",
|
||||
],
|
||||
"504" => [
|
||||
"title" => "Gateway Timeout",
|
||||
"description" => "The server took too long to respond. Please try again later.",
|
||||
],
|
||||
];
|
||||
6
lang/en/front.php
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
"homepage" => "Hello World",
|
||||
"back_to_your_website" => "Back to home",
|
||||
];
|
||||
9
lang/en/models.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
"classes" => [
|
||||
// "users" => "utilisateur|utilisateurs",
|
||||
],
|
||||
];
|
||||
44
lang/en/validation.php
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
"custom" => [
|
||||
"contact_form" => [
|
||||
"last_name" => [
|
||||
"label" => "last name",
|
||||
"placeholder" => "your last name"
|
||||
],
|
||||
"first_name" => [
|
||||
"label" => "first name",
|
||||
"placeholder" => "your first name"
|
||||
],
|
||||
"phone" => [
|
||||
"label" => "phone number",
|
||||
"placeholder" => "06.**.**.**.**"
|
||||
],
|
||||
"mail" => [
|
||||
"label" => "email address",
|
||||
"placeholder" => "example@gmail.com"
|
||||
],
|
||||
"entreprise_name" => [
|
||||
"label" => "company name",
|
||||
"placeholder" => "your company name"
|
||||
],
|
||||
"activity_sector" => [
|
||||
"label" => "your business sector",
|
||||
"placeholder" => "choose an activity"
|
||||
],
|
||||
"object" => [
|
||||
"label" => "message subject",
|
||||
"placeholder" => "choose a subject"
|
||||
],
|
||||
"message" => [
|
||||
"label" => "your message",
|
||||
"placeholder" => "what is your message?"
|
||||
],
|
||||
"terms" => "The information collected through this form is processed by the Data Controller to respond to your contact request. To learn about your rights, you can consult the",
|
||||
"optin" => "I would like to subscribe to the newsletter."
|
||||
]
|
||||
],
|
||||
];
|
||||
55
lang/es/cookie-notice.php
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'button_banner_cookies' => 'Cookies',
|
||||
'banner_text' => 'Utilizamos cookies para garantizar el correcto funcionamiento de nuestro sitio y con fines analíticos.
|
||||
Puede cambiar su decisión en cualquier momento haciendo clic en el icono en cualquier página de nuestro sitio.
|
||||
Al autorizar estos servicios de terceros, acepta el depósito y la lectura de cookies, así como el uso de tecnologías de seguimiento necesarias para su correcto funcionamiento.',
|
||||
'button_validate_and_close' => 'Confirmar y cerrar',
|
||||
'button_forbid_all' => 'Rechazar todo',
|
||||
'button_allow_all' => 'Aceptar todo',
|
||||
'consent_all_text' => 'Al hacer clic en <span class="font-medium">"Aceptar todo"</span>, usted acepta el uso de nuestras cookies.',
|
||||
'banner_title' => '¡El sitio web :site_name utiliza cookies!',
|
||||
'learn_more' => 'Más información',
|
||||
'button_close_cookies' => 'Cerrar ventana de cookies',
|
||||
'modal_title' => 'Ventana de gestión de cookies',
|
||||
'panel_content' => 'Contenido del panel de gestión de cookies',
|
||||
'button_customize' => 'Personalizar',
|
||||
'preferences_cookies' => 'Cookies de preferencias',
|
||||
'button_toggle_cookie' => 'Aceptar o rechazar :service',
|
||||
'open_cookies' => 'Abrir panel de gestión de cookies',
|
||||
'button_forbid_all_title' => 'Rechazar todas las cookies y cerrar el panel de cookies',
|
||||
'button_allow_all_title' => 'Aceptar todas las cookies y cerrar el panel de cookies',
|
||||
'custom' => [
|
||||
'analytics' => [
|
||||
'title' => 'Google Analytics',
|
||||
'description' => 'Los servicios de medición de audiencia permiten generar estadísticas de visitas útiles para mejorar el sitio.',
|
||||
],
|
||||
'vimeo' => [
|
||||
'title' => 'Vimeo',
|
||||
'description' => 'Las cookies colocadas a través de servicios de vídeo permiten al usuario visualizar contenido multimedia directamente en el sitio.',
|
||||
'labelLink' => 'Más información',
|
||||
'warning' => 'Debe aceptar las cookies para ver este vídeo',
|
||||
'accept' => 'Aceptar'
|
||||
],
|
||||
'youtube' => [
|
||||
'title' => 'YouTube',
|
||||
'description' => 'Las cookies colocadas a través de servicios de vídeo permiten al usuario visualizar contenido multimedia directamente en el sitio.',
|
||||
'labelLink' => 'Más información',
|
||||
'warning' => 'Debe aceptar las cookies para ver este vídeo',
|
||||
'accept' => 'Aceptar'
|
||||
],
|
||||
'matomo' => [
|
||||
'title' => 'Matomo',
|
||||
'description' => 'Los servicios de medición de audiencia se utilizan para generar estadísticas de tráfico útiles para mejorar el sitio.',
|
||||
'labelLink' => 'Más información',
|
||||
],
|
||||
'recaptcha' => [
|
||||
'title' => 'reCAPTCHA',
|
||||
'description' => 'Las cookies de reCAPTCHA en formularios se utilizan para evitar envíos por robots.',
|
||||
'labelLink' => 'Más información',
|
||||
'warning' => 'Debe aceptar las cookies de reCAPTCHA para enviar el formulario',
|
||||
'accept' => 'Aceptar reCAPTCHA'
|
||||
]
|
||||
]
|
||||
];
|
||||
7
lang/fr/back.php
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
// "dashboard" => "Tableau de bord",
|
||||
];
|
||||
55
lang/fr/cookie-notice.php
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'button_banner_cookies' => 'Cookies',
|
||||
'banner_text' => 'Nous utilisons des cookies pour nous assurer du bon fonctionnement de notre site et à des fins analytiques.
|
||||
Vous pouvez changer d’avis à tout moment en cliquant sur l’icône présente sur chaque page de notre site.
|
||||
En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l’utilisation de technologies de suivi nécessaires à leur bon fonctionnement.',
|
||||
'button_validate_and_close' => 'Valider et fermer',
|
||||
'button_forbid_all' => 'Tout refuser',
|
||||
'button_allow_all' => 'Tout accepter',
|
||||
'consent_all_text' => 'En cliquant sur <span class="font-medium">"Tout accepter"</span>, vous consentez à utiliser nos cookies.',
|
||||
'banner_title' => 'Le site internet :site_name utilise des cookies !',
|
||||
'learn_more' => 'En savoir plus',
|
||||
'button_close_cookies' => 'Fermer la fenêtre des cookies',
|
||||
'modal_title' => 'Fenêtre de gestion de cookies',
|
||||
'panel_content' => 'Contenu du panneau des cookies',
|
||||
'button_customize' => 'Personnaliser',
|
||||
'preferences_cookies' => 'Préferences cookies',
|
||||
'button_toggle_cookie' => 'Accepter ou refuser :service',
|
||||
'open_cookies' => 'Ouvrir la fenêtre de gestion des cookies',
|
||||
'button_forbid_all_title' => 'Refuser tous les cookies et fermer le panneau des cookies',
|
||||
'button_allow_all_title' => 'Accepter tous les cookies et fermer le panneau des cookies',
|
||||
'custom' => [
|
||||
'analytics' => [
|
||||
'title' => 'Google Analytics',
|
||||
'description' => 'Les services de mesure d’audience permettent de générer des statistiques de fréquentation utiles à l’amélioration du site.',
|
||||
],
|
||||
'youtube' => [
|
||||
'title' => 'Youtube',
|
||||
'description' => 'Les cookies placés via les services de partage de vidéos sont destinés à permettre à l’utilisateur de visionner des contenus multimédias directement sur le site.',
|
||||
'labelLink' => 'En savoir +',
|
||||
'warning' => 'Vous devez accepter les cookies pour visionner cette vidéo',
|
||||
'accept' => 'Autoriser'
|
||||
],
|
||||
'vimeo' => [
|
||||
'title' => 'Vimeo',
|
||||
'description' => 'Les cookies placés via les services de partage de vidéos sont destinés à permettre à l’utilisateur de visionner des contenus multimédias directement sur le site.',
|
||||
'labelLink' => 'En savoir +',
|
||||
'warning' => 'Vous devez accepter les cookies pour visionner cette vidéo',
|
||||
'accept' => 'Autoriser'
|
||||
],
|
||||
'matomo' => [
|
||||
'title' => 'Matomo',
|
||||
'description' => 'Les services de mesure d’audience permettent de générer des statistiques de fréquentation utiles à l’amélioration du site.',
|
||||
'labelLink' => 'En savoir +',
|
||||
],
|
||||
'recaptcha' => [
|
||||
'title' => 'reCAPTCHA',
|
||||
'description' => 'Les cookies qui sont déposés via le recaptcha sur les formulaires ont pour finalité d’empêcher que ceux-ci ne soient soumis par des robots.',
|
||||
'labelLink' => 'En savoir +',
|
||||
'warning' => 'Vous devez accepter les cookies reCAPTCHA pour envoyer le formulaire',
|
||||
'accept' => 'Accepter reCAPTCHA'
|
||||
]
|
||||
]
|
||||
];
|
||||
11
lang/fr/enums.php
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
// "user-role" => [
|
||||
// "conceptor" => "Concepteur",
|
||||
// "admin" => "Administrateur",
|
||||
// "visitor" => "Visiteur",
|
||||
// ],
|
||||
];
|
||||
56
lang/fr/errors.php
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
"400" => [
|
||||
"title" => "Requête invalide",
|
||||
"description" => "Le serveur n’a pas pu comprendre votre requête. Veuillez vérifier et réessayer.",
|
||||
],
|
||||
"401" => [
|
||||
"title" => "Non autorisé",
|
||||
"description" => "Vous devez être connecté pour accéder à cette page.",
|
||||
],
|
||||
"403" => [
|
||||
"title" => "Accès interdit",
|
||||
"description" => "Désolé, vous n’êtes pas autorisé à accéder à cette page.",
|
||||
],
|
||||
"404" => [
|
||||
"title" => "Page introuvable",
|
||||
"description" => "Désolé, la page que vous recherchez est introuvable.",
|
||||
],
|
||||
"405" => [
|
||||
"title" => "Méthode non autorisée",
|
||||
"description" => "La méthode utilisée pour cette requête n’est pas autorisée.",
|
||||
],
|
||||
"408" => [
|
||||
"title" => "Délai d’attente dépassé",
|
||||
"description" => "Le serveur a mis trop de temps à répondre. Veuillez réessayer.",
|
||||
],
|
||||
"419" => [
|
||||
"title" => "Page expirée",
|
||||
"description" => "Votre session a expiré. Veuillez actualiser et réessayer.",
|
||||
],
|
||||
"422" => [
|
||||
"title" => "Entité non traitable",
|
||||
"description" => "Les données fournies ne sont pas valides. Veuillez vérifier et réessayer.",
|
||||
],
|
||||
"429" => [
|
||||
"title" => "Trop de requêtes",
|
||||
"description" => "Vous avez effectué trop de requêtes en peu de temps. Veuillez patienter avant de réessayer.",
|
||||
],
|
||||
"500" => [
|
||||
"title" => "Erreur serveur",
|
||||
"description" => "Oups, une erreur est survenue sur nos serveurs.",
|
||||
],
|
||||
"502" => [
|
||||
"title" => "Mauvaise passerelle",
|
||||
"description" => "Le serveur a reçu une réponse invalide. Veuillez réessayer plus tard.",
|
||||
],
|
||||
"503" => [
|
||||
"title" => "Service indisponible",
|
||||
"description" => "Désolé, nous effectuons une maintenance. Merci de revenir plus tard.",
|
||||
],
|
||||
"504" => [
|
||||
"title" => "Délai d’attente de la passerelle dépassé",
|
||||
"description" => "Le serveur a mis trop de temps à répondre. Veuillez réessayer plus tard.",
|
||||
],
|
||||
];
|
||||
62
lang/fr/front.php
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
"homepage" => "Accueil",
|
||||
"search" => "Rechercher",
|
||||
"contactpage" => "Nous contacter",
|
||||
"back_to_your_website" => "Revenir à l'accueil",
|
||||
"ovoteam_product" => "produits ovoteam",
|
||||
"see" => [
|
||||
"all_products" => "voir tous les produits",
|
||||
"product" => "voir le produit",
|
||||
"recipe" => "voir la recette",
|
||||
"all_recipes" => "voir toutes les recettes"
|
||||
],
|
||||
"know_more" => "en savoir plus",
|
||||
"ovoteam_commit" => "ovoteam s'engage",
|
||||
"discover_our_commit" => "découvrez nos engagements",
|
||||
"ovoteam_recipe" => "recettes ovoteam",
|
||||
"image" => [
|
||||
"state_file_uploaded" => "un fichier à bien été chargé",
|
||||
"modale_title" => "Modification de l'image",
|
||||
"modale_description" => "Personnalisez le rendu selon vos besoins",
|
||||
"action_the_crop" => ":action le cadrage",
|
||||
"select_file_zone" => "Glisser-déposer un fichier ou cliquez pour en sélectionner un",
|
||||
"select_img_zone" => "Glisser-déposer une image ou cliquez pour en sélectionner une",
|
||||
"preview_image" => "Prévisualisation de l'image",
|
||||
"refresh_original" => "remettre à l'état d'origine",
|
||||
"toast" => [
|
||||
"too_big" => "taille maximale autorisée : :maxSize. Le fichier est trop volumineux",
|
||||
"no_file" => "aucun fichier sélectionné !",
|
||||
"forbidden_file" => "fichier non autorisé.",
|
||||
"too_many" => "le nombre de fichier autorisé est dépassé (1)",
|
||||
"defaultError" => "une erreur est survenue !"
|
||||
],
|
||||
"validation" => [
|
||||
"rules_between" => "le média doit faire :width px de large et :height px de haut.",
|
||||
"rules_weight" => "taille max: :size",
|
||||
"allowed_formats" => "formats autorisés: :formats",
|
||||
"all_formats" => "tous"
|
||||
],
|
||||
"filters" => [
|
||||
'zoomIn' => "zoom avant",
|
||||
"zoomOut" => "zoom arrière",
|
||||
"zoom" => "zoom",
|
||||
"rotation_forward" => "rotation avant",
|
||||
"rotation_back" => "rotation arrière",
|
||||
"rotation" => "rotation",
|
||||
"grayscale" => "noir & blanc",
|
||||
"sepia" => "sépia",
|
||||
"saturation" => "saturation",
|
||||
"contrast" => "contraste",
|
||||
"brightness" => "luminosité",
|
||||
"reset" => "réinitialiser",
|
||||
"vertical_flip" => "inverser verticalement",
|
||||
"horizontal_flip" => "inverser horizontalement",
|
||||
],
|
||||
],
|
||||
"gamme" => "Large gamme plein air",
|
||||
"expertise" => "Expertise depuis 1963",
|
||||
"made-in-france" => "Fabriqué en France",
|
||||
"engage" => "Ovoteam s'engage"
|
||||
];
|
||||
9
lang/fr/models.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
"classes" => [
|
||||
// "users" => "utilisateur|utilisateurs",
|
||||
],
|
||||
];
|
||||
44
lang/fr/validation.php
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
"custom" => [
|
||||
"contact_form" => [
|
||||
"last_name" => [
|
||||
"label" => "nom",
|
||||
"placeholder" => "votre nom"
|
||||
],
|
||||
"first_name" => [
|
||||
"label" => "prénom",
|
||||
"placeholder" => "votre prénom"
|
||||
],
|
||||
"phone" => [
|
||||
"label" => "numéro de téléphone",
|
||||
"placeholder" => "06.**.**.**.**"
|
||||
],
|
||||
"mail" => [
|
||||
"label" => "adresse mail",
|
||||
"placeholder" => "exemple@gmail.com"
|
||||
],
|
||||
"entreprise_name" => [
|
||||
"label" => "nom de l'entreprise",
|
||||
"placeholder" => "le nom de votre entreprise"
|
||||
],
|
||||
"activity_sector" => [
|
||||
"label" => "votre secteur d'activité",
|
||||
"placeholder" => "choisir une activité"
|
||||
],
|
||||
"object" => [
|
||||
"label" => "objet du message",
|
||||
"placeholder" => "choisir un objet"
|
||||
],
|
||||
"message" => [
|
||||
"label" => "votre message",
|
||||
"placeholder" => "quel est votre message ?"
|
||||
],
|
||||
"terms" => "Les informations recueillies à partir de ce formulaire sont traitées par le Responsable de Traitement pour donner suite à votre demande de contact. Pour connaître vos droits, vous pouvez consulter la",
|
||||
"optin" => "je souhaite m'inscrire à la newsletter."
|
||||
]
|
||||
],
|
||||
];
|
||||
55
lang/nl/cookie-notice.php
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'button_banner_cookies' => 'Cookies',
|
||||
'banner_text' => 'Wij gebruiken cookies om de goede werking van onze website te garanderen en voor analytische doeleinden.
|
||||
U kunt uw keuze op elk moment wijzigen door op het pictogram op elke pagina van onze website te klikken.
|
||||
Door deze externe diensten te autoriseren, stemt u in met het plaatsen en lezen van cookies en het gebruik van trackingtechnologieën die nodig zijn voor hun goede werking.',
|
||||
'button_validate_and_close' => 'Bevestigen en sluiten',
|
||||
'button_forbid_all' => 'Alles weigeren',
|
||||
'button_allow_all' => 'Alles accepteren',
|
||||
'consent_all_text' => 'Door te klikken op <span class="font-medium">"Alles accepteren"</span> stemt u in met het gebruik van onze cookies.',
|
||||
'banner_title' => 'De website :site_name gebruikt cookies!',
|
||||
'learn_more' => 'Meer informatie',
|
||||
'button_close_cookies' => 'Cookievenster sluiten',
|
||||
'modal_title' => 'Cookiebeheer venster',
|
||||
'panel_content' => 'Inhoud van het cookiebeheer paneel',
|
||||
'button_customize' => 'Aanpassen',
|
||||
'preferences_cookies' => 'Voorkeurscookies',
|
||||
'button_toggle_cookie' => ':service accepteren of weigeren',
|
||||
'open_cookies' => 'Cookiebeheer paneel openen',
|
||||
'button_forbid_all_title' => 'Alle cookies weigeren en het cookiepaneel sluiten',
|
||||
'button_allow_all_title' => 'Alle cookies accepteren en het cookiepaneel sluiten',
|
||||
'custom' => [
|
||||
'analytics' => [
|
||||
'title' => 'Google Analytics',
|
||||
'description' => 'Diensten voor publieksmeting maken het mogelijk om bezoekersstatistieken te genereren die nuttig zijn om de website te verbeteren.',
|
||||
],
|
||||
'vimeo' => [
|
||||
'title' => 'Vimeo',
|
||||
'description' => 'Cookies geplaatst via videodiensten maken het mogelijk om multimedia-inhoud direct op de website weer te geven.',
|
||||
'labelLink' => 'Meer informatie',
|
||||
'warning' => 'U moet cookies accepteren om deze video te bekijken',
|
||||
'accept' => 'Accepteren'
|
||||
],
|
||||
'youtube' => [
|
||||
'title' => 'YouTube',
|
||||
'description' => 'Cookies geplaatst via videodiensten maken het mogelijk om multimedia-inhoud direct op de website weer te geven.',
|
||||
'labelLink' => 'Meer informatie',
|
||||
'warning' => 'U moet cookies accepteren om deze video te bekijken',
|
||||
'accept' => 'Accepteren'
|
||||
],
|
||||
'matomo' => [
|
||||
'title' => 'Matomo',
|
||||
'description' => 'Diensten voor publieksmeting worden gebruikt om verkeersstatistieken te genereren die nuttig zijn om de website te verbeteren.',
|
||||
'labelLink' => 'Meer informatie',
|
||||
],
|
||||
'recaptcha' => [
|
||||
'title' => 'reCAPTCHA',
|
||||
'description' => 'De cookies van reCAPTCHA in formulieren worden gebruikt om inzendingen door robots te voorkomen.',
|
||||
'labelLink' => 'Meer informatie',
|
||||
'warning' => 'U moet reCAPTCHA-cookies accepteren om het formulier te verzenden',
|
||||
'accept' => 'reCAPTCHA accepteren'
|
||||
]
|
||||
]
|
||||
];
|
||||
55
lang/pl/cookie-notice.php
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'button_banner_cookies' => 'Pliki cookie',
|
||||
'banner_text' => 'Używamy plików cookie, aby zapewnić prawidłowe działanie naszej strony oraz do celów analitycznych.
|
||||
Możesz zmienić swoją decyzję w dowolnym momencie, klikając ikonę na każdej stronie naszej witryny.
|
||||
Wyrażając zgodę na te usługi stron trzecich, akceptujesz zapisywanie i odczytywanie plików cookie oraz wykorzystywanie technologii śledzenia niezbędnych do ich prawidłowego działania.',
|
||||
'button_validate_and_close' => 'Potwierdź i zamknij',
|
||||
'button_forbid_all' => 'Odrzuć wszystkie',
|
||||
'button_allow_all' => 'Akceptuj wszystkie',
|
||||
'consent_all_text' => 'Klikając <span class="font-medium">"Akceptuj wszystkie"</span>, wyrażasz zgodę na używanie naszych plików cookie.',
|
||||
'banner_title' => 'Strona internetowa :site_name używa plików cookie!',
|
||||
'learn_more' => 'Dowiedz się więcej',
|
||||
'button_close_cookies' => 'Zamknij okno plików cookie',
|
||||
'modal_title' => 'Okno zarządzania plikami cookie',
|
||||
'panel_content' => 'Zawartość panelu zarządzania plikami cookie',
|
||||
'button_customize' => 'Dostosuj',
|
||||
'preferences_cookies' => 'Pliki cookie preferencji',
|
||||
'button_toggle_cookie' => 'Akceptuj lub odrzuć :service',
|
||||
'open_cookies' => 'Otwórz panel zarządzania plikami cookie',
|
||||
'button_forbid_all_title' => 'Odrzuć wszystkie pliki cookie i zamknij panel',
|
||||
'button_allow_all_title' => 'Akceptuj wszystkie pliki cookie i zamknij panel',
|
||||
'custom' => [
|
||||
'analytics' => [
|
||||
'title' => 'Google Analytics',
|
||||
'description' => 'Usługi pomiaru ruchu umożliwiają generowanie statystyk odwiedzin przydatnych do ulepszania strony.',
|
||||
],
|
||||
'vimeo' => [
|
||||
'title' => 'Vimeo',
|
||||
'description' => 'Pliki cookie ustawiane przez usługi wideo umożliwiają wyświetlanie treści multimedialnych bezpośrednio na stronie.',
|
||||
'labelLink' => 'Dowiedz się więcej',
|
||||
'warning' => 'Musisz zaakceptować pliki cookie, aby obejrzeć ten film',
|
||||
'accept' => 'Akceptuj'
|
||||
],
|
||||
'youtube' => [
|
||||
'title' => 'YouTube',
|
||||
'description' => 'Pliki cookie ustawiane przez usługi wideo umożliwiają wyświetlanie treści multimedialnych bezpośrednio na stronie.',
|
||||
'labelLink' => 'Dowiedz się więcej',
|
||||
'warning' => 'Musisz zaakceptować pliki cookie, aby obejrzeć ten film',
|
||||
'accept' => 'Akceptuj'
|
||||
],
|
||||
'matomo' => [
|
||||
'title' => 'Matomo',
|
||||
'description' => 'Usługi pomiaru ruchu służą do generowania statystyk odwiedzin, które pomagają ulepszać stronę.',
|
||||
'labelLink' => 'Dowiedz się więcej',
|
||||
],
|
||||
'recaptcha' => [
|
||||
'title' => 'reCAPTCHA',
|
||||
'description' => 'Pliki cookie reCAPTCHA w formularzach służą do zapobiegania ich wysyłaniu przez boty.',
|
||||
'labelLink' => 'Dowiedz się więcej',
|
||||
'warning' => 'Musisz zaakceptować pliki cookie reCAPTCHA, aby wysłać formularz',
|
||||
'accept' => 'Akceptuj reCAPTCHA'
|
||||
]
|
||||
]
|
||||
];
|
||||
125
manifest.yaml
|
|
@ -1,3 +1,53 @@
|
|||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: ${CI_PROJECT_PATH_SLUG}-config-map
|
||||
data:
|
||||
APP_NAME: "${APP_APP_NAME}"
|
||||
APP_ENV: "${APP_APP_ENV}"
|
||||
APP_KEY: "${APP_APP_KEY}"
|
||||
APP_DEBUG: "${APP_APP_DEBUG}"
|
||||
APP_URL: "https://${APP_DOMAIN}"
|
||||
SESSION_DRIVER: "${APP_SESSION_DRIVER}"
|
||||
LOG_CHANNEL: "k8s"
|
||||
CACHE_STORE: "${APP_CACHE_STORE}"
|
||||
DB_HOST: "${APP_DB_HOST}"
|
||||
DB_PORT: "${APP_DB_PORT}"
|
||||
DB_DATABASE: "${APP_DB_DATABASE}"
|
||||
DB_CONNECTION: "mysql"
|
||||
DB_USERNAME: "${APP_DB_USERNAME}"
|
||||
DB_PASSWORD: "${APP_DB_PASSWORD}"
|
||||
MAIL_HOST: "${APP_MAIL_HOST}"
|
||||
MAIL_PORT: "${APP_MAIL_PORT}"
|
||||
MAIL_USERNAME: "${APP_MAIL_USERNAME}"
|
||||
MAIL_PASSWORD: "${APP_MAIL_PASSWORD}"
|
||||
MAIL_ENCRYPTION: "${APP_MAIL_ENCRYPTION}"
|
||||
MAIL_FROM_NAME: "${APP_APP_NAME}"
|
||||
TELESCOPE_ENABLED: "${APP_TELESCOPE_ENABLED}"
|
||||
SAML2_SP_CERT_x509: "${APP_SAML2_SP_CERT_x509}"
|
||||
SAML2_SP_CERT_PRIVATEKEY: "${APP_SAML2_SP_CERT_PRIVATEKEY}"
|
||||
SAML2_CONTACT_TECHNICAL_EMAIL: "${APP_SAML2_CONTACT_TECHNICAL_EMAIL}"
|
||||
SAML2_CONTACT_SUPPORT_EMAIL: "${APP_SAML2_CONTACT_SUPPORT_EMAIL}"
|
||||
SAML2_DEFAULT_TENANT_UUID: "${APP_SAML2_DEFAULT_TENANT_UUID}"
|
||||
MATOMO_SITE_ID: "${APP_MATOMO_SITE_ID}"
|
||||
UWIL_ADMIN_SECURE_CIDR_LIST: "${APP_GLOBAL_UWIL_ADMIN_SECURE_CIDR_LIST}"
|
||||
GOOGLE_RECAPTCHA_PRIVATE: "${APP_GOOGLE_RECAPTCHA_PRIVATE}"
|
||||
GOOGLE_RECAPTCHA_PUBLIC: "${APP_GOOGLE_RECAPTCHA_PUBLIC}"
|
||||
GOOGLE_RECAPTCHA_VERSION: "${APP_GOOGLE_RECAPTCHA_VERSION}"
|
||||
SENTRY_LARAVEL_DSN: "${APP_SENTRY_LARAVEL_DSN}"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: ${CI_PROJECT_PATH_SLUG}-pvc-storage
|
||||
spec:
|
||||
storageClassName: "csi-cinder-classic"
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: $APP_PVC_SIZE
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
|
|
@ -13,22 +63,55 @@ spec:
|
|||
app: ${CI_PROJECT_PATH_SLUG}-app
|
||||
spec:
|
||||
containers:
|
||||
- name: ${CI_PROJECT_PATH_SLUG}-container
|
||||
image: $IMAGE_TAG
|
||||
resources:
|
||||
limits:
|
||||
cpu: "${APP_CI_CPU_LIMIT}"
|
||||
memory: "${APP_CI_MEMORY_LIMIT}"
|
||||
requests:
|
||||
cpu: "${APP_CI_CPU_REQUEST}"
|
||||
memory: "${APP_CI_MEMORY_REQUEST}"
|
||||
- name: ${CI_PROJECT_PATH_SLUG}-container
|
||||
image: $IMAGE_TAG
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: ${CI_PROJECT_PATH_SLUG}-config-map
|
||||
resources:
|
||||
limits:
|
||||
cpu: "${APP_CI_CPU_LIMIT}"
|
||||
memory: "${APP_CI_MEMORY_LIMIT}"
|
||||
requests:
|
||||
cpu: "${APP_CI_CPU_REQUEST}"
|
||||
memory: "${APP_CI_MEMORY_REQUEST}"
|
||||
volumeMounts:
|
||||
- name: storage
|
||||
mountPath: /app/srcs/storage
|
||||
- name: ${CI_PROJECT_PATH_SLUG}-queue-worker
|
||||
image: $IMAGE_TAG
|
||||
lifecycle:
|
||||
preStop:
|
||||
exec:
|
||||
command: [ "/bin/sh", "-c", "kill -s TERM 1; while test $(ps ax | grep -v grep | grep bash | wc -l) -gt 0; do sleep 2s; done" ]
|
||||
resources:
|
||||
limits:
|
||||
cpu: "${APP_CI_CPU_LIMIT}"
|
||||
memory: "${APP_CI_MEMORY_LIMIT}"
|
||||
requests:
|
||||
cpu: "${APP_CI_CPU_REQUEST}"
|
||||
memory: "${APP_CI_MEMORY_REQUEST}"
|
||||
command:
|
||||
- "bash"
|
||||
args:
|
||||
- "k8s-queues.sh"
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: ${CI_PROJECT_PATH_SLUG}-config-map
|
||||
volumeMounts:
|
||||
- name: storage
|
||||
mountPath: /app/srcs/storage
|
||||
imagePullSecrets:
|
||||
- name: docker-registry-credentials
|
||||
- name: docker-registry-credentials
|
||||
securityContext:
|
||||
runAsUser: 33
|
||||
runAsGroup: 33
|
||||
fsGroup: 33
|
||||
fsGroupChangePolicy: "OnRootMismatch"
|
||||
volumes:
|
||||
- name: storage
|
||||
persistentVolumeClaim:
|
||||
claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
|
|
@ -38,8 +121,8 @@ spec:
|
|||
selector:
|
||||
app: ${CI_PROJECT_PATH_SLUG}-app
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 80
|
||||
- port: 80
|
||||
targetPort: 80
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
|
|
@ -47,16 +130,16 @@ metadata:
|
|||
name: ${CI_PROJECT_PATH_SLUG}-ingress-route
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
- websecure
|
||||
- web
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`${APP_DOMAIN}`) || Host(`www.${APP_DOMAIN}`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: ${CI_PROJECT_PATH_SLUG}-service
|
||||
port: 80
|
||||
middlewares:
|
||||
- name: redirect-no-www-to-www
|
||||
- match: Host(`${APP_DOMAIN}`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: ${CI_PROJECT_PATH_SLUG}-service
|
||||
port: 80
|
||||
middlewares:
|
||||
- name: redirect-no-www-to-www
|
||||
|
||||
tls:
|
||||
secretName: ${CRT_TLS_NAME}
|
||||
|
|
|
|||
16301
package-lock.json
generated
Normal file
132
package.json
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
{
|
||||
"$schema": "https://www.schemastore.org/package.json",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "vite build",
|
||||
"dev": "vite",
|
||||
"prod": "vite build --mode production",
|
||||
"eslint": "node ./node_modules/.bin/eslint --config './.eslintrc.cjs' --max-warnings 0 'resources/ts/**/*.{ts,tsx}'",
|
||||
"eslint-fix": "node ./node_modules/.bin/eslint --config './.eslintrc.cjs' --max-warnings 0 'resources/ts/**/*.{ts,tsx}' --fix",
|
||||
"eslint-ci": "node ./node_modules/.bin/eslint --config './.eslintrc.cjs' --max-warnings 0 'resources/ts/**/*.{ts,tsx}' -f junit",
|
||||
"stylelint": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 'resources/sass/**/*.scss'",
|
||||
"stylelint-fix": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 'resources/sass/**/*.scss' --fix",
|
||||
"stylelint-ci": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 'resources/sass/**/*.scss' -f json"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@headlessui/react": "^2.2.9",
|
||||
"@radix-ui/react-accordion": "^1.2.12",
|
||||
"@radix-ui/react-checkbox": "^1.3.3",
|
||||
"@radix-ui/react-collapsible": "^1.1.12",
|
||||
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
||||
"@radix-ui/react-label": "^2.1.8",
|
||||
"@radix-ui/react-popover": "^1.1.15",
|
||||
"@radix-ui/react-progress": "^1.1.8",
|
||||
"@radix-ui/react-scroll-area": "^1.2.10",
|
||||
"@radix-ui/react-select": "^2.2.6",
|
||||
"@radix-ui/react-separator": "^1.1.8",
|
||||
"@radix-ui/react-slider": "^1.3.6",
|
||||
"@radix-ui/react-slot": "^1.2.4",
|
||||
"@radix-ui/react-switch": "^1.2.6",
|
||||
"@radix-ui/react-toast": "^1.2.15",
|
||||
"@radix-ui/react-tooltip": "^1.2.8",
|
||||
"@tailwindcss/forms": "^0.5.11",
|
||||
"@tailwindcss/typography": "^0.5.19",
|
||||
"@tailwindcss/vite": "^4.0.0",
|
||||
"@types/react-color": "^3.0.13",
|
||||
"@typescript-eslint/eslint-plugin": "^8.57.2",
|
||||
"@typescript-eslint/parser": "^8.57.2",
|
||||
"@uwil/husky-config": "^1.0.1",
|
||||
"@vitejs/plugin-react": "^4.7.0",
|
||||
"autoprefixer": "^10.4.27",
|
||||
"concurrently": "^9.2.1",
|
||||
"eslint": "^8.57.1",
|
||||
"eslint-config-airbnb": "^19.0.4",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-import-resolver-typescript": "^4.4.4",
|
||||
"eslint-plugin-import": "^2.32.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||
"eslint-plugin-prettier": "^5.5.5",
|
||||
"eslint-plugin-react": "^7.37.5",
|
||||
"eslint-plugin-react-hooks": "^4.6.2",
|
||||
"flag-icons": "^7.5.0",
|
||||
"pluralize": "^8.0.0",
|
||||
"prettier": "^3.8.1",
|
||||
"react": "^19.2.4",
|
||||
"react-day-picker": "^9.14.0",
|
||||
"react-dom": "^19.2.4",
|
||||
"rollup-plugin-copy": "^3.5.0",
|
||||
"sass-embedded": "^1.98.0",
|
||||
"stylelint": "^16.26.1",
|
||||
"stylelint-config-idiomatic-order": "^10.0.0",
|
||||
"stylelint-config-sass-guidelines": "^12.1.0",
|
||||
"stylelint-config-standard-scss": "^14.0.0",
|
||||
"stylelint-scss": "^6.14.0",
|
||||
"tailwindcss": "^3.4.19",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"vite": "^6.4.1",
|
||||
"vite-plugin-eslint": "^1.8.1",
|
||||
"vite-plugin-stylelint": "^6.0.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ldc-web/cookie-notice": "^6.1.1",
|
||||
"@radix-ui/react-dialog": "^1.1.15",
|
||||
"@dnd-kit/core": "^6.3.1",
|
||||
"@dnd-kit/sortable": "^10.0.0",
|
||||
"@dnd-kit/utilities": "^3.2.2",
|
||||
"@inertiajs/core": "^2.1.5",
|
||||
"@inertiajs/react": "^2.3.18",
|
||||
"@radix-ui/react-slot": "^1.2.4",
|
||||
"@tanstack/react-table": "^8.21.3",
|
||||
"@tiptap/core": "^3.21.0",
|
||||
"@tiptap/extension-blockquote": "^3.21.0",
|
||||
"@tiptap/extension-bold": "^3.21.0",
|
||||
"@tiptap/extension-bullet-list": "^3.21.0",
|
||||
"@tiptap/extension-color": "^3.21.0",
|
||||
"@tiptap/extension-heading": "^3.21.0",
|
||||
"@tiptap/extension-history": "^3.21.0",
|
||||
"@tiptap/extension-horizontal-rule": "^3.21.0",
|
||||
"@tiptap/extension-image": "^3.21.0",
|
||||
"@tiptap/extension-invisible-characters": "^3.21.0",
|
||||
"@tiptap/extension-italic": "^3.21.0",
|
||||
"@tiptap/extension-link": "^3.21.0",
|
||||
"@tiptap/extension-list": "^3.21.0",
|
||||
"@tiptap/extension-ordered-list": "^3.21.0",
|
||||
"@tiptap/extension-placeholder": "^3.21.0",
|
||||
"@tiptap/extension-strike": "^3.21.0",
|
||||
"@tiptap/extension-subscript": "^3.21.0",
|
||||
"@tiptap/extension-superscript": "^3.21.0",
|
||||
"@tiptap/extension-table": "^3.21.0",
|
||||
"@tiptap/extension-table-cell": "^3.21.0",
|
||||
"@tiptap/extension-table-header": "^3.21.0",
|
||||
"@tiptap/extension-table-row": "^3.21.0",
|
||||
"@tiptap/extension-text-align": "^3.21.0",
|
||||
"@tiptap/extension-underline": "^3.21.0",
|
||||
"@tiptap/react": "^3.21.0",
|
||||
"@tiptap/starter-kit": "^3.21.0",
|
||||
"@types/pluralize": "^0.0.33",
|
||||
"@types/react": "^19.2.14",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"axios": "^1.14.0",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.1.1",
|
||||
"date-fns": "^4.1.0",
|
||||
"json-edit-react": "^1.29.0",
|
||||
"laravel-vite-plugin": "^1.3.0",
|
||||
"lucide-react": "^0.503.0",
|
||||
"motion": "^12.38.0",
|
||||
"prosemirror-state": "^1.4.4",
|
||||
"radix-ui": "^1.4.3",
|
||||
"react-color": "^2.19.3",
|
||||
"react-dropzone": "^14.4.1",
|
||||
"react-image-crop": "^11.0.10",
|
||||
"slugify": "^1.6.8",
|
||||
"swiper": "^12.1.3",
|
||||
"tailwind-merge": "^3.5.0",
|
||||
"vaul": "^1.1.2",
|
||||
"ziggy-js": "^2.6.2",
|
||||
"zod": "^4.3.6",
|
||||
"zustand": "^5.0.12"
|
||||
}
|
||||
}
|
||||
126
phpcs.xml
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ruleset name="LDC Laravel"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/squizlabs/php_codesniffer/phpcs.xsd">
|
||||
<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" />
|
||||
<file>app/</file>
|
||||
<file>config/</file>
|
||||
<file>database/factories</file>
|
||||
<file>routes/</file>
|
||||
<exclude-pattern type="relative">*/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.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.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.WhiteSpace.LanguageConstructSpacing"/>
|
||||
<rule ref="Squiz.WhiteSpace.LogicalOperatorSpacing"/>
|
||||
<rule ref="Squiz.WhiteSpace.MemberVarSpacing">
|
||||
<properties>
|
||||
<property name="spacingBeforeFirst " value="false"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="Squiz.WhiteSpace.OperatorSpacing">
|
||||
<properties>
|
||||
<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>
|
||||
|
||||
</ruleset>
|
||||
8
phpstan.neon
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
includes:
|
||||
- vendor/larastan/larastan/extension.neon
|
||||
|
||||
parameters:
|
||||
paths:
|
||||
- app/
|
||||
|
||||
level: 7
|
||||
36
phpunit.xml
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="Unit">
|
||||
<directory>tests/Unit</directory>
|
||||
</testsuite>
|
||||
<testsuite name="Feature">
|
||||
<directory>tests/Feature</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<source>
|
||||
<include>
|
||||
<directory>app</directory>
|
||||
</include>
|
||||
</source>
|
||||
<php>
|
||||
<env name="APP_ENV" value="testing"/>
|
||||
<env name="APP_MAINTENANCE_DRIVER" value="file"/>
|
||||
<env name="BCRYPT_ROUNDS" value="4"/>
|
||||
<env name="BROADCAST_CONNECTION" value="null"/>
|
||||
<env name="CACHE_STORE" value="array"/>
|
||||
<env name="DB_CONNECTION" value="sqlite"/>
|
||||
<env name="DB_DATABASE" value=":memory:"/>
|
||||
<env name="DB_URL" value=""/>
|
||||
<env name="MAIL_MAILER" value="array"/>
|
||||
<env name="QUEUE_CONNECTION" value="sync"/>
|
||||
<env name="SESSION_DRIVER" value="array"/>
|
||||
<env name="PULSE_ENABLED" value="false"/>
|
||||
<env name="TELESCOPE_ENABLED" value="false"/>
|
||||
<env name="NIGHTWATCH_ENABLED" value="false"/>
|
||||
</php>
|
||||
</phpunit>
|
||||
6
postcss.config.js
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
export default {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
};
|
||||
|
|
@ -1,12 +1,56 @@
|
|||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: $APP_DOMAIN
|
||||
spec:
|
||||
dnsNames:
|
||||
- $APP_DOMAIN
|
||||
- www.${APP_DOMAIN}
|
||||
secretName: $APP_DOMAIN
|
||||
issuerRef:
|
||||
name: $APP_CERT_ISSUER
|
||||
kind: ClusterIssuer
|
||||
# apiVersion: cert-manager.io/v1
|
||||
# kind: Certificate
|
||||
# metadata:
|
||||
# name: $APP_DOMAIN
|
||||
# spec:
|
||||
# dnsNames:
|
||||
# - $APP_DOMAIN
|
||||
# secretName: $APP_DOMAIN
|
||||
# issuerRef:
|
||||
# name: $APP_CERT_ISSUER
|
||||
# kind: ClusterIssuer
|
||||
# ---
|
||||
# # Redirect with domain replacement
|
||||
# apiVersion: traefik.io/v1alpha1
|
||||
# kind: Middleware
|
||||
# metadata:
|
||||
# name: redirect-multi-to-ldcfr
|
||||
# spec:
|
||||
# redirectRegex:
|
||||
# regex: ^https://(.*)(corico|volaillesdeblancafort).fr(.*)
|
||||
# replacement: https://${REDIRECT}${APP_DOMAIN}
|
||||
# permanent: true
|
||||
# ---
|
||||
# apiVersion: traefik.io/v1alpha1
|
||||
# kind: IngressRoute
|
||||
# metadata:
|
||||
# name: redirect-multi-to-ldcfr
|
||||
# spec:
|
||||
# entryPoints:
|
||||
# - websecure
|
||||
# routes:
|
||||
# - match: (Host(`corico.fr`) || Host(`www.corico.fr`) || Host(`volaillesdeblancafort.fr`) || Host(`www.volaillesdeblancafort.fr`)) && !PathPrefix(`/.well-known/acme-challenge/`)
|
||||
# kind: Rule
|
||||
# services:
|
||||
# - name: api@internal
|
||||
# kind: TraefikService
|
||||
# middlewares:
|
||||
# - name: redirect-multi-to-ldcfr
|
||||
# tls:
|
||||
# secretName: redirect-multi-to-ldcfr
|
||||
# ---
|
||||
# apiVersion: cert-manager.io/v1
|
||||
# kind: Certificate
|
||||
# metadata:
|
||||
# name: redirect-multi-to-ldcfr
|
||||
# spec:
|
||||
# dnsNames:
|
||||
# - corico.fr
|
||||
# - www.corico.fr
|
||||
# - volaillesdeblancafort.fr
|
||||
# - www.volaillesdeblancafort.fr
|
||||
# secretName: redirect-multi-to-ldcfr
|
||||
# issuerRef:
|
||||
# name: $APP_CERT_ISSUER
|
||||
# kind: ClusterIssuer
|
||||
|
||||
|
|
|
|||
29
public/.htaccess
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<IfModule mod_rewrite.c>
|
||||
<IfModule mod_negotiation.c>
|
||||
Options -MultiViews -Indexes
|
||||
</IfModule>
|
||||
|
||||
RewriteEngine On
|
||||
|
||||
# Handle Authorization Header
|
||||
RewriteCond %{HTTP:Authorization} .
|
||||
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||
|
||||
# Handle X-XSRF-Token Header
|
||||
RewriteCond %{HTTP:x-xsrf-token} .
|
||||
RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]
|
||||
|
||||
# Redirect Trailing Slashes If Not A Folder...
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_URI} (.+)/$
|
||||
RewriteRule ^ %1 [L,R=301]
|
||||
|
||||
# Redirect /index.php/anything to /anything
|
||||
RewriteCond %{THE_REQUEST} /index\.php/([^\s?]*) [NC]
|
||||
RewriteRule ^index\.php/(.*)$ /$1 [L,R=301,NC]
|
||||
|
||||
# Send Requests To Front Controller...
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteRule ^ index.php [L]
|
||||
</IfModule>
|
||||
BIN
public/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/android-chrome-512x512.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
public/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
|
@ -1,438 +0,0 @@
|
|||
@charset "UTF-8";
|
||||
:root {
|
||||
--cs-primary-color: var();
|
||||
}
|
||||
|
||||
/* Distance par rapport à la gauche de la fenêtre */
|
||||
/* Distance par rapport à la droite de la fenêtre */
|
||||
/* Distance par rapport au bas de la fenêtre */
|
||||
/* Position gauche de base des cookies */
|
||||
/* Position droite de base des cookies */
|
||||
#cn-wrapper {
|
||||
/* Buttons styles start */
|
||||
/* Button styles end */
|
||||
}
|
||||
#cn-wrapper * {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#cn-wrapper *::before {
|
||||
display: none;
|
||||
}
|
||||
#cn-wrapper button {
|
||||
display: inline-block;
|
||||
padding: 0.2rem 0.5rem;
|
||||
border: 0;
|
||||
margin: 0;
|
||||
appearance: none;
|
||||
background: #d6d6d6;
|
||||
color: #000;
|
||||
cursor: pointer;
|
||||
font-family: "Barlow", sans-serif;
|
||||
font-size: 1rem;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transition: background 250ms ease-in-out, transform 150ms ease;
|
||||
}
|
||||
#cn-wrapper button:hover,
|
||||
#cn-wrapper button:focus {
|
||||
background: #bdbdbd;
|
||||
/* prettier-ignore */
|
||||
color: #000;
|
||||
}
|
||||
#cn-wrapper button:focus {
|
||||
outline: 1px solid;
|
||||
/* prettier-ignore */
|
||||
outline-color: #000;
|
||||
outline-offset: -4px;
|
||||
}
|
||||
#cn-wrapper button:active {
|
||||
transform: scale(0.99);
|
||||
}
|
||||
|
||||
/* FENETRE D'ACCUEIL */
|
||||
/* Title settings */
|
||||
/* Text settings */
|
||||
/* Button settings */
|
||||
/* Title settings */
|
||||
/* Text settings */
|
||||
/* Switch Buttons */
|
||||
/* Cookies list settings */
|
||||
/* Size */
|
||||
#cn-wrapper .cn-nav #cn-settings-banner, #cn-wrapper .cn-nav #cn-accept-banner, #cn-wrapper .cn-nav #cn-deny-banner, #cn-wrapper #cn-banner .cn-modal-top-line #cn-close-modal {
|
||||
display: flex;
|
||||
height: 3rem;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0;
|
||||
background-color: #d6d6d6;
|
||||
color: #000;
|
||||
font-family: "Barlow", sans-serif;
|
||||
font-size: 16px;
|
||||
}
|
||||
#cn-wrapper .cn-nav #cn-settings-banner:hover, #cn-wrapper .cn-nav #cn-accept-banner:hover, #cn-wrapper .cn-nav #cn-deny-banner:hover, #cn-wrapper #cn-banner .cn-modal-top-line #cn-close-modal:hover, #cn-wrapper .cn-nav #cn-settings-banner:focus, #cn-wrapper .cn-nav #cn-accept-banner:focus, #cn-wrapper .cn-nav #cn-deny-banner:focus, #cn-wrapper #cn-banner .cn-modal-top-line #cn-close-modal:focus {
|
||||
background-color: #bdbdbd;
|
||||
/* prettier-ignore */
|
||||
color: #000;
|
||||
}
|
||||
#cn-wrapper .cn-nav #cn-settings-banner:focus, #cn-wrapper .cn-nav #cn-accept-banner:focus, #cn-wrapper .cn-nav #cn-deny-banner:focus, #cn-wrapper #cn-banner .cn-modal-top-line #cn-close-modal:focus {
|
||||
/* prettier-ignore */
|
||||
outline-color: #000;
|
||||
}
|
||||
|
||||
.cn-modal-bg {
|
||||
position: fixed;
|
||||
z-index: 1030;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100dvh;
|
||||
background-color: rgba(0, 0, 0, 0.6);
|
||||
cursor: pointer;
|
||||
opacity: 0;
|
||||
transition: 0.3s;
|
||||
visibility: hidden;
|
||||
}
|
||||
.cn-modal-bg-active {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.cn-open .cn-modal-bg {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.cn-disabled {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
#cn-wrapper {
|
||||
position: fixed;
|
||||
z-index: 1050;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100dvh;
|
||||
pointer-events: none;
|
||||
}
|
||||
#cn-wrapper #cn-cookie-btn {
|
||||
position: fixed;
|
||||
right: auto;
|
||||
bottom: 0.5rem;
|
||||
left: 0.5rem;
|
||||
width: 2.4rem;
|
||||
height: 2.4rem;
|
||||
padding: 0.3rem;
|
||||
border-radius: 100%;
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0.1rem 1rem rgba(0, 0, 0, 0.35);
|
||||
cursor: pointer;
|
||||
pointer-events: auto;
|
||||
}
|
||||
@media (min-width: 535px) {
|
||||
#cn-wrapper #cn-cookie-btn {
|
||||
right: auto;
|
||||
bottom: -1.5rem;
|
||||
left: -1.5rem;
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
padding: 0.5rem;
|
||||
transition: all 1s 6s;
|
||||
}
|
||||
#cn-wrapper #cn-cookie-btn:hover, #cn-wrapper #cn-cookie-btn:focus {
|
||||
right: auto;
|
||||
bottom: 0.5rem;
|
||||
left: 0.5rem;
|
||||
transition: all 1s;
|
||||
}
|
||||
}
|
||||
#cn-wrapper #cn-cookie-btn:focus {
|
||||
outline-color: #d1842a;
|
||||
outline-offset: 0.1rem;
|
||||
outline-width: 0.2rem;
|
||||
}
|
||||
#cn-wrapper #cn-cookie-btn-icon path {
|
||||
fill: #dc9c52;
|
||||
}
|
||||
#cn-wrapper #cn-cookie-btn-icon circle {
|
||||
fill: #dc9c52;
|
||||
}
|
||||
#cn-wrapper #cn-banner {
|
||||
position: absolute;
|
||||
z-index: 1050;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
width: 100vw;
|
||||
max-height: 100dvh;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
margin: auto;
|
||||
margin-bottom: 0;
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0.1rem 1rem rgba(0, 0, 0, 0.35);
|
||||
line-height: initial;
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
transition: 0.3s;
|
||||
user-select: none;
|
||||
visibility: hidden;
|
||||
}
|
||||
#cn-wrapper #cn-banner .cn-modal-top-line {
|
||||
align-self: end;
|
||||
}
|
||||
#cn-wrapper #cn-banner .cn-modal-top-line #cn-close-modal {
|
||||
width: 4rem;
|
||||
height: 3rem;
|
||||
border-bottom-left-radius: 0.5rem;
|
||||
}
|
||||
@media (min-width: 535px) {
|
||||
#cn-wrapper #cn-banner .cn-modal-top-line #cn-close-modal {
|
||||
border-top-right-radius: 0.5rem;
|
||||
}
|
||||
}
|
||||
#cn-wrapper #cn-banner > * {
|
||||
pointer-events: all;
|
||||
}
|
||||
@media (min-width: 535px) {
|
||||
#cn-wrapper #cn-banner {
|
||||
right: auto;
|
||||
bottom: calc(0.5rem + 60px);
|
||||
left: 0;
|
||||
width: 30rem;
|
||||
max-height: 26rem;
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
#cn-wrapper #cn-banner.cn-modal-page {
|
||||
max-height: 38rem;
|
||||
}
|
||||
}
|
||||
#cn-wrapper #cn-li-template {
|
||||
display: none;
|
||||
}
|
||||
#cn-wrapper .d-none {
|
||||
display: none !important;
|
||||
}
|
||||
#cn-wrapper .cn-content {
|
||||
flex-basis: 100%;
|
||||
flex-grow: 1;
|
||||
padding: 0.8rem;
|
||||
overflow-y: auto;
|
||||
}
|
||||
@media (min-width: 535px) {
|
||||
#cn-wrapper .cn-content {
|
||||
flex-grow: 0;
|
||||
}
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-switch {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
width: 4.2rem;
|
||||
height: 2.4rem;
|
||||
box-sizing: content-box;
|
||||
cursor: pointer;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-switch:focus, #cn-wrapper .cn-content .cn-switch:focus-visible {
|
||||
border-width: 0.1rem;
|
||||
border-style: solid;
|
||||
border-color: #dc9c52;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-switch input {
|
||||
display: none;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-switch input + span {
|
||||
position: absolute;
|
||||
border-radius: 2rem;
|
||||
background: #b7b7b7;
|
||||
inset: 0;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-switch input + span::before {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 0.21rem;
|
||||
display: inline-block;
|
||||
width: 1.8rem;
|
||||
height: 1.8rem;
|
||||
border-radius: 50%;
|
||||
background: #fff;
|
||||
content: "";
|
||||
transform: translateY(-50%);
|
||||
transition: all 0.5s;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-switch input:indeterminate + span {
|
||||
background: #b7b7b7;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-switch input:indeterminate + span::before {
|
||||
left: 1.08rem;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-switch input:checked + span {
|
||||
background: #dc9c52;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-switch input:checked + span::before {
|
||||
left: 2.16rem;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-banner-content {
|
||||
display: flex;
|
||||
min-height: 100%;
|
||||
flex-direction: column;
|
||||
color: #707070;
|
||||
font-family: "Barlow", sans-serif;
|
||||
font-size: 16px;
|
||||
}
|
||||
@media (min-width: 535px) {
|
||||
#cn-wrapper .cn-content .cn-banner-content {
|
||||
flex-flow: row wrap;
|
||||
align-items: center;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-banner-content .cn-banner-img {
|
||||
width: 33%;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-banner-content .cn-banner-text {
|
||||
width: 66%;
|
||||
}
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-banner-content .cn-banner-img {
|
||||
text-align: center;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-banner-content .cn-banner-img img {
|
||||
width: 90%;
|
||||
object-fit: contain;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-banner-content .cn-banner-text .cn-banner-title {
|
||||
color: #dc9c52;
|
||||
font-family: "Satisfy", sans-serif;
|
||||
font-size: 28px;
|
||||
font-weight: bold;
|
||||
line-height: inherit;
|
||||
text-align: left;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-banner-content .cn-banner-text .cn-banner-para-p {
|
||||
margin: 6px 0;
|
||||
text-align: justify;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-modal-container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
overflow: auto;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
/* stylelint-disable-next-line no-descending-specificity */
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-modal-container ul {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-modal-container .cn-cookie-wrapper {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 20px;
|
||||
border: 1px solid #e4e4e4;
|
||||
border-radius: 20px;
|
||||
margin: 10px 0;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-modal-container span {
|
||||
color: #dc9c52;
|
||||
font-family: "Barlow", sans-serif;
|
||||
font-size: 16px;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-modal-container a {
|
||||
font-family: "Barlow", sans-serif;
|
||||
font-size: 16px;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-modal-container label {
|
||||
color: #dc9c52;
|
||||
font-family: "Barlow", sans-serif;
|
||||
font-size: 16px;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-modal-container .cn-cookie-name {
|
||||
color: #dc9c52;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-modal-container .cn-cookie-infos {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-modal-container .cn-cookie-infos span:first-of-type {
|
||||
font-size: calc(16px * 1.25);
|
||||
font-weight: bold;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-modal-container .cn-cookie-infos .cn-cookie-description {
|
||||
color: #707070;
|
||||
}
|
||||
#cn-wrapper .cn-content .cn-modal-container .cn-cookie-infos a {
|
||||
width: fit-content;
|
||||
}
|
||||
#cn-wrapper .cn-nav {
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
height: 6rem;
|
||||
flex-shrink: 0;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
border-top: 1px solid #6d6d6d;
|
||||
}
|
||||
#cn-wrapper .cn-nav #cn-deny-banner {
|
||||
width: 50%;
|
||||
}
|
||||
#cn-wrapper .cn-nav #cn-accept-banner {
|
||||
width: 50%;
|
||||
border-right: 1px solid #6d6d6d;
|
||||
border-left: 1px solid #6d6d6d;
|
||||
}
|
||||
#cn-wrapper .cn-nav #cn-settings-banner {
|
||||
width: 100%;
|
||||
border-top: 1px solid #6d6d6d;
|
||||
}
|
||||
@media (min-width: 535px) {
|
||||
#cn-wrapper .cn-nav {
|
||||
height: 3rem;
|
||||
flex-wrap: initial;
|
||||
border-bottom-left-radius: 0.5rem;
|
||||
border-bottom-right-radius: 0.5rem;
|
||||
}
|
||||
#cn-wrapper .cn-nav #cn-deny-banner {
|
||||
width: 33.33%;
|
||||
}
|
||||
#cn-wrapper .cn-nav #cn-accept-banner {
|
||||
width: 33.33%;
|
||||
}
|
||||
#cn-wrapper .cn-nav #cn-settings-banner {
|
||||
width: 33.33%;
|
||||
border-top: initial;
|
||||
}
|
||||
}
|
||||
|
||||
.cn-open {
|
||||
overflow: hidden !important;
|
||||
}
|
||||
.cn-open #cn-wrapper #cn-banner {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
@media (min-width: 535px) {
|
||||
.cn-open #cn-wrapper #cn-banner {
|
||||
right: auto;
|
||||
left: 0.5rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 535px) {
|
||||
.cn-open #cn-wrapper #cn-cookie-btn {
|
||||
right: auto;
|
||||
bottom: 0.5rem;
|
||||
left: 0.5rem;
|
||||
transition: all 1s;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,265 +0,0 @@
|
|||
@font-face {
|
||||
font-family: "Gotham";
|
||||
src: url("./../fonts/Gotham-Book.woff2") format("woff2"),
|
||||
url("./../fonts/Gotham-Book.woff") format("woff");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Gotham";
|
||||
src: url("./../fonts/Gotham-Bold.woff2") format("woff2"),
|
||||
url("./../fonts/Gotham-Bold.woff") format("woff");
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: Gotham;
|
||||
color: #111f51;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#backtotop {
|
||||
position: fixed;
|
||||
bottom: 1.5em;
|
||||
right: 1.5em;
|
||||
z-index: 10001;
|
||||
background: transparent url("./../images/backtotop.svg") center center
|
||||
no-repeat;
|
||||
width: 50px;
|
||||
height: 70px;
|
||||
border: 0;
|
||||
opacity: 0;
|
||||
transition: 0.4s;
|
||||
}
|
||||
#backtotop.active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* HEADER / FOOTER */
|
||||
|
||||
header {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
z-index: 10000;
|
||||
}
|
||||
footer {
|
||||
position: relative;
|
||||
}
|
||||
footer a {
|
||||
color: #111f51 !important;
|
||||
}
|
||||
header,
|
||||
footer {
|
||||
background-color: #fff;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
header * {
|
||||
transition: 0.4s;
|
||||
}
|
||||
|
||||
header .container-logo,
|
||||
footer .container-logo {
|
||||
position: relative;
|
||||
height: 80px;
|
||||
}
|
||||
header .logo,
|
||||
footer .logo {
|
||||
height: 90px;
|
||||
}
|
||||
header .logo {
|
||||
position: absolute;
|
||||
top: 35px;
|
||||
left: 50%;
|
||||
transform: translate(-50%, 0px);
|
||||
height: 90px;
|
||||
}
|
||||
header.compress {
|
||||
background-color: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
header.compress .container-logo {
|
||||
height: 70px;
|
||||
}
|
||||
header.compress .logo {
|
||||
top: 5px;
|
||||
height: 60px;
|
||||
}
|
||||
footer .socials a {
|
||||
font-size: 2em;
|
||||
color: #111f51;
|
||||
}
|
||||
footer .socials a:hover {
|
||||
color: #ffc647;
|
||||
}
|
||||
/* HEADER */
|
||||
|
||||
header {
|
||||
background-color: #fff;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
z-index: 10000;
|
||||
}
|
||||
header * {
|
||||
transition: 0.4s;
|
||||
}
|
||||
|
||||
header .container-logo {
|
||||
position: relative;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
/* SECTION COMMON */
|
||||
|
||||
section {
|
||||
padding: 4em 0 4em 0;
|
||||
}
|
||||
|
||||
section .section-title {
|
||||
text-align: center;
|
||||
padding-bottom: 2em;
|
||||
}
|
||||
|
||||
section .section-title .subtitle {
|
||||
font-size: 1.125rem;
|
||||
}
|
||||
|
||||
section hr {
|
||||
display: inline-block;
|
||||
width: 55%;
|
||||
height: 10px;
|
||||
background-color: #ffc647;
|
||||
align-items: center;
|
||||
border: 0;
|
||||
opacity: initial;
|
||||
margin: 3em 0;
|
||||
}
|
||||
|
||||
section.color {
|
||||
background-color: #ffc647;
|
||||
}
|
||||
|
||||
/* SECTION INTRO */
|
||||
|
||||
section.intro {
|
||||
padding: 10em 0 4em 0;
|
||||
}
|
||||
|
||||
section.intro h1 {
|
||||
font-size: calc(2rem + 1.2vw);
|
||||
}
|
||||
|
||||
section.intro .text {
|
||||
font-size: 1.125rem;
|
||||
}
|
||||
|
||||
/* SECTION VIDEO */
|
||||
|
||||
section.video iframe {
|
||||
width: 100%;
|
||||
aspect-ratio: 16 / 9;
|
||||
}
|
||||
|
||||
/* SECTION PRODUITS */
|
||||
|
||||
section.nos-produits .carousel-products > div {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
section.nos-produits .carousel-products > div img {
|
||||
max-width: 90%;
|
||||
}
|
||||
|
||||
@media (min-width: 576px) {
|
||||
section.nos-produits .carousel-products > div img {
|
||||
max-height: 300px;
|
||||
}
|
||||
}
|
||||
|
||||
section.nos-produits .carousel-products > div div.title {
|
||||
margin-top: 1em;
|
||||
font-size: 1.3em;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
section.nos-produits .carousel-products > div div.title > p {
|
||||
font-size: 0.75em;
|
||||
}
|
||||
|
||||
/* Cookie inline banner */
|
||||
.cn-cookie-activate {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-size: calc(0.9rem + 0.1vw) !important;
|
||||
background-color: #fff;
|
||||
padding: 0.6rem 1rem;
|
||||
margin: 1rem auto;
|
||||
border-radius: 1rem;
|
||||
border: 2px solid #111f51;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
@media (min-width: 481px) {
|
||||
.cn-cookie-activate {
|
||||
max-width: 90%;
|
||||
font-size: calc(0.9rem + 0.1vw) !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 791px) {
|
||||
.cn-cookie-activate {
|
||||
flex-direction: row;
|
||||
max-width: 80%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1025px) {
|
||||
.cn-cookie-activate {
|
||||
max-width: 60%;
|
||||
}
|
||||
}
|
||||
|
||||
.cn-cookie-activate span {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.cn-cookie-activate .btn {
|
||||
color: #ffc647;
|
||||
background-color: #111f51;
|
||||
border-radius: 1rem;
|
||||
border: 2px solid transparent;
|
||||
padding: 0.8rem 0.6rem;
|
||||
margin: 1rem auto !important;
|
||||
text-decoration: none;
|
||||
min-width: auto;
|
||||
margin-left: 1rem;
|
||||
transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out,
|
||||
border 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
.cn-cookie-activate .btn:hover {
|
||||
color: #111f51;
|
||||
background-color: #ffc647;
|
||||
}
|
||||
|
||||
@media (min-width: 791px) {
|
||||
.cn-cookie-activate .btn {
|
||||
margin: 0 0 0 auto !important;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,187 +0,0 @@
|
|||
@charset 'UTF-8';
|
||||
/* Slider */
|
||||
.slick-loading .slick-list {
|
||||
background: #fff url("./../images/slick/ajax-loader.gif") center center
|
||||
no-repeat;
|
||||
}
|
||||
|
||||
/* Icons */
|
||||
@font-face {
|
||||
font-family: "slick";
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
src: url("./../fonts/slick/slick.eot");
|
||||
src: url("./../fonts/slick/slick.eot?#iefix") format("embedded-opentype"),
|
||||
url("./../fonts/slick/slick.woff") format("woff"),
|
||||
url("./../fonts/slick/slick.ttf") format("truetype"),
|
||||
url("./../fonts/slick/slick.svg#slick") format("svg");
|
||||
}
|
||||
/* Arrows */
|
||||
.slick-prev,
|
||||
.slick-next {
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
padding: 0;
|
||||
-webkit-transform: translate(0, -50%);
|
||||
-ms-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
color: transparent;
|
||||
border: none;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-prev:hover,
|
||||
.slick-prev:focus,
|
||||
.slick-next:hover,
|
||||
.slick-next:focus {
|
||||
color: transparent;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-prev:hover:before,
|
||||
.slick-prev:focus:before,
|
||||
.slick-next:hover:before,
|
||||
.slick-next:focus:before {
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-prev.slick-disabled:before,
|
||||
.slick-next.slick-disabled:before {
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
.slick-prev:before,
|
||||
.slick-next:before {
|
||||
font-family: "slick";
|
||||
font-size: 20px;
|
||||
line-height: 1;
|
||||
|
||||
opacity: 0.75;
|
||||
color: white;
|
||||
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.slick-prev {
|
||||
left: -25px;
|
||||
}
|
||||
[dir="rtl"] .slick-prev {
|
||||
right: -25px;
|
||||
left: auto;
|
||||
}
|
||||
.slick-prev:before {
|
||||
content: "←";
|
||||
}
|
||||
[dir="rtl"] .slick-prev:before {
|
||||
content: "→";
|
||||
}
|
||||
|
||||
.slick-next {
|
||||
right: -25px;
|
||||
}
|
||||
[dir="rtl"] .slick-next {
|
||||
right: auto;
|
||||
left: -25px;
|
||||
}
|
||||
.slick-next:before {
|
||||
content: "→";
|
||||
}
|
||||
[dir="rtl"] .slick-next:before {
|
||||
content: "←";
|
||||
}
|
||||
|
||||
/* Dots */
|
||||
.slick-dotted.slick-slider {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.slick-dots {
|
||||
position: absolute;
|
||||
bottom: -4em;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
|
||||
list-style: none;
|
||||
|
||||
text-align: center;
|
||||
}
|
||||
.slick-dots li {
|
||||
position: relative;
|
||||
|
||||
display: inline-block;
|
||||
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
padding: 0;
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
.slick-dots li button {
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
padding: 5px;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
color: transparent;
|
||||
border: 0;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-dots li button:hover,
|
||||
.slick-dots li button:focus {
|
||||
outline: none;
|
||||
}
|
||||
.slick-dots li button:hover:before,
|
||||
.slick-dots li button:focus:before {
|
||||
line-height: 35px;
|
||||
font-size: 35px;
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-dots li button:before {
|
||||
font-family: "slick";
|
||||
font-size: 20px;
|
||||
line-height: 35px;
|
||||
transition: 0.25s;
|
||||
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
|
||||
content: "•";
|
||||
text-align: center;
|
||||
|
||||
opacity: 1;
|
||||
color: white;
|
||||
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
.slick-dots li.slick-active button:before {
|
||||
font-size: 35px;
|
||||
opacity: 1;
|
||||
color: #111f51;
|
||||
}
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by Fontastic.me</metadata>
|
||||
<defs>
|
||||
<font id="slick" horiz-adv-x="512">
|
||||
<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
|
||||
<missing-glyph horiz-adv-x="512" />
|
||||
|
||||
<glyph unicode="→" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
|
||||
<glyph unicode="←" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
|
||||
<glyph unicode="•" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
|
||||
<glyph unicode="a" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
|
||||
</font></defs></svg>
|
||||
|
Before Width: | Height: | Size: 2.1 KiB |
|
|
@ -1,18 +0,0 @@
|
|||
<svg width="57" height="67" viewBox="0 0 57 67" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g filter="url(#filter0_d_6997_25)">
|
||||
<path d="M53 34C53 47.8071 42.031 58.5 28.5 58.5C14.969 58.5 4 47.8071 4 34C4 20.1929 14.969 0 28.5 0C42.031 0 53 20.1929 53 34Z" fill="#FFC647"/>
|
||||
<path d="M37.8368 27.3969L28.9368 18.5191C28.7675 18.3575 28.568 18.2309 28.3497 18.1465C27.9166 17.9693 27.4311 17.9699 26.9985 18.1482C26.7804 18.2331 26.5812 18.3602 26.4123 18.5223L17.5346 27.4223C17.369 27.5882 17.2378 27.7852 17.1483 28.0019C17.0589 28.2185 17.013 28.4507 17.0133 28.6851C17.0139 29.1586 17.2025 29.6124 17.5377 29.9467C17.8729 30.2811 18.3272 30.4686 18.8006 30.468C19.274 30.4674 19.7278 30.2787 20.0621 29.9436L25.9037 24.0696L25.9205 37.5629C25.9211 38.0344 26.109 38.4864 26.4428 38.8194C26.7766 39.1523 27.229 39.3391 27.7005 39.3385C28.172 39.3379 28.624 39.15 28.957 38.8162C29.29 38.4824 29.4767 38.03 29.4761 37.5585L29.4593 24.0652L35.3155 29.9245C35.4809 30.0909 35.6777 30.223 35.8945 30.3129C36.1112 30.4029 36.3437 30.4491 36.5783 30.4488C36.813 30.4485 37.0453 30.4018 37.2619 30.3112C37.4784 30.2207 37.6748 30.0882 37.8399 29.9214C38.0063 29.7559 38.1383 29.5591 38.2283 29.3424C38.3183 29.1256 38.3645 28.8932 38.3642 28.6585C38.3639 28.4238 38.3171 28.1915 38.2266 27.975C38.1361 27.7585 38.0036 27.562 37.8368 27.3969Z" fill="#111F51"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_d_6997_25" x="0" y="0" width="57" height="66.5" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="4"/>
|
||||
<feGaussianBlur stdDeviation="2"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_6997_25"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_6997_25" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2 KiB |
|
|
@ -1,30 +0,0 @@
|
|||
<svg width="105" height="170" viewBox="0 0 105 170" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M70.6433 113.346C52.1631 113.346 37.1697 96.1194 37.1697 75.025C37.1697 53.9307 50.9078 19.6172 70.6433 19.6172C90.3787 19.6172 104.117 55.4776 104.117 74.9547C104.117 94.4318 89.1235 113.276 70.6433 113.276V113.346ZM70.6433 23.3439C54.7433 23.3439 40.796 55.5479 40.796 74.9547C40.796 94.3615 54.1854 109.62 70.6433 109.62C87.1011 109.62 100.491 94.0802 100.491 74.9547C100.491 55.8292 86.5432 23.3439 70.6433 23.3439Z" fill="#21293F"/>
|
||||
<path d="M70.6433 113.346C52.1631 113.346 37.1697 96.1194 37.1697 75.025C37.1697 53.9307 50.9078 19.6172 70.6433 19.6172C90.3787 19.6172 104.117 55.4776 104.117 74.9547C104.117 94.4318 89.1235 113.276 70.6433 113.276V113.346ZM70.6433 23.3439C54.7433 23.3439 40.796 55.5479 40.796 74.9547C40.796 94.3615 54.1854 109.62 70.6433 109.62C87.1011 109.62 100.491 94.0802 100.491 74.9547C100.491 55.8292 86.5432 23.3439 70.6433 23.3439Z" fill="#21293F"/>
|
||||
<path d="M48.8156 104.066C43.3762 106.105 37.3091 105.613 31.7302 102.801C25.8723 99.7772 21.1302 94.5036 18.5499 87.894C15.7605 80.8626 14.5052 70.456 15.4815 61.3855C16.5276 51.4711 20.0144 44.5803 24.9657 42.6115C26.1512 42.1193 27.3367 41.9083 28.6617 41.9083C33.0551 41.9083 38.0762 44.3693 42.888 48.096C43.3762 46.9007 43.8643 45.7053 44.3525 44.5803C37.4486 39.377 29.917 36.5644 23.571 39.1661C17.2249 41.7677 13.0407 49.5023 11.8552 61.0339C10.8092 70.5967 12.1342 81.7063 15.1328 89.3003C18.0618 96.7537 23.4315 102.66 30.0565 106.105C33.892 108.074 37.9367 109.059 41.9117 109.059C44.9104 109.059 47.9091 108.496 50.7683 107.301C51.1867 107.16 51.5354 106.949 51.9538 106.809C50.9077 105.965 49.8617 105.051 48.8854 104.066H48.8156Z" fill="#21293F"/>
|
||||
<path d="M48.8156 104.066C43.3762 106.105 37.3091 105.613 31.7302 102.801C25.8723 99.7772 21.1302 94.5036 18.5499 87.894C15.7605 80.8626 14.5052 70.456 15.4815 61.3855C16.5276 51.4711 20.0144 44.5803 24.9657 42.6115C26.1512 42.1193 27.3367 41.9083 28.6617 41.9083C33.0551 41.9083 38.0762 44.3693 42.888 48.096C43.3762 46.9007 43.8643 45.7053 44.3525 44.5803C37.4486 39.377 29.917 36.5644 23.571 39.1661C17.2249 41.7677 13.0407 49.5023 11.8552 61.0339C10.8092 70.5967 12.1342 81.7063 15.1328 89.3003C18.0618 96.7537 23.4315 102.66 30.0565 106.105C33.892 108.074 37.9367 109.059 41.9117 109.059C44.9104 109.059 47.9091 108.496 50.7683 107.301C51.1867 107.16 51.5354 106.949 51.9538 106.809C50.9077 105.965 49.8617 105.051 48.8854 104.066H48.8156Z" fill="#21293F"/>
|
||||
<path d="M70.6432 102.097C69.5972 102.097 68.8301 101.253 68.8301 100.269C68.8301 99.2847 69.6669 98.4409 70.6432 98.4409C81.5222 98.4409 90.3787 88.1047 90.3787 75.3777C90.3787 62.6508 91.2155 73.5496 92.1919 73.5496C93.1682 73.5496 94.005 74.3933 94.005 75.3777C94.005 90.1438 83.4748 102.168 70.5735 102.168L70.6432 102.097Z" fill="#21293F"/>
|
||||
<path d="M70.6432 102.097C69.5972 102.097 68.8301 101.253 68.8301 100.269C68.8301 99.2847 69.6669 98.4409 70.6432 98.4409C81.5222 98.4409 90.3787 88.1047 90.3787 75.3777C90.3787 62.6508 91.2155 73.5496 92.1919 73.5496C93.1682 73.5496 94.005 74.3933 94.005 75.3777C94.005 90.1438 83.4748 102.168 70.5735 102.168L70.6432 102.097Z" fill="#21293F"/>
|
||||
<path d="M51.4655 0H41.9116V18.8443H51.4655V0Z" fill="#0A3DC9"/>
|
||||
<path d="M70.2946 0H60.7407V18.8443H70.2946V0Z" fill="#C52824"/>
|
||||
<path d="M60.8801 0H51.3262V18.8443H60.8801V0Z" fill="white"/>
|
||||
<path d="M9.55392 17.8594H0V36.7037H9.55392V17.8594Z" fill="#0A3DC9"/>
|
||||
<path d="M28.313 17.8594H18.759V36.7037H28.313V17.8594Z" fill="#C52824"/>
|
||||
<path d="M18.9685 17.8594H9.41455V36.7037H18.9685V17.8594Z" fill="white"/>
|
||||
<path d="M26.5696 142.387H23.7104V126.848H29.9867V129.52H26.5696V132.051H28.592V134.723H26.5696V142.387Z" fill="#21293F"/>
|
||||
<path d="M32.7063 139.364L32.2879 142.387H29.2195L31.5905 126.848H36.4024L38.8431 142.387H35.705L35.2866 139.364H32.7063ZM33.8918 130.926L33.055 136.692H34.7287L33.8221 130.926H33.8918Z" fill="#21293F"/>
|
||||
<path d="M40.238 126.777H46.6538L48.5367 128.395V133.176L47.2814 134.09L48.5367 135.004V140.629L46.6538 142.247H40.238V126.707V126.777ZM45.6775 129.449H43.0972V132.895H45.6775V129.449ZM45.6775 139.715V135.637H43.0972V139.715H45.6775Z" fill="#21293F"/>
|
||||
<path d="M50.6985 142.387V126.848H57.1143L58.9971 128.465V135.004L57.6024 136.34L59.2064 142.387H56.1379L54.8827 136.551H53.5577V142.387H50.6985ZM56.1379 129.449H53.5577V133.809H56.1379V129.449Z" fill="#21293F"/>
|
||||
<path d="M61.3682 126.777H64.2274V142.317H61.3682V126.777Z" fill="#21293F"/>
|
||||
<path d="M74.6878 128.465V140.84L72.8049 142.387H74.4786V144.426H69.597V142.387H68.2721L66.3892 140.84V128.465L68.2721 126.848H72.8049L74.6878 128.465ZM69.3181 129.449V139.645H71.8984V129.449H69.3181Z" fill="#21293F"/>
|
||||
<path d="M82.2892 126.777H85.1484V140.7L83.2655 142.317H78.6629L76.78 140.7V126.777H79.6392V139.645H82.2195V126.777H82.2892Z" fill="#21293F"/>
|
||||
<path d="M87.3101 126.777H93.6561V129.449H90.1693V131.981H92.4008V134.653H90.1693V139.715H93.6561V142.387H87.3101V126.848V126.777ZM91.0061 126.145L93.8653 123.191H91.3548L89.6114 126.145H91.0758H91.0061Z" fill="#21293F"/>
|
||||
<path d="M18.4104 150.824H24.7564V153.496H21.2696V156.027H23.5012V158.699H21.2696V163.762H24.7564V166.434H18.4104V150.895V150.824Z" fill="#21293F"/>
|
||||
<path d="M26.9182 150.824H29.7774L32.009 157.434V150.824H34.8682V166.364H32.3577L29.7774 159.051V166.364H26.9182V150.824Z" fill="#21293F"/>
|
||||
<path d="M44.8406 166.434H41.9814V150.895H48.2577V153.566H44.8406V156.098H46.863V158.77H44.8406V166.434Z" fill="#21293F"/>
|
||||
<path d="M50.4194 166.434V150.895H56.8352L58.7181 152.512V159.051L57.3234 160.387L58.9273 166.434H55.8589L54.6036 160.598H53.2786V166.434H50.4194ZM55.8589 153.496H53.2786V157.856H55.8589V153.496Z" fill="#21293F"/>
|
||||
<path d="M63.8787 163.411L63.4603 166.434H60.3918L62.7629 150.895H67.5747L70.0155 166.434H66.8774L66.4589 163.411H63.8787ZM65.1339 154.973L64.2971 160.739H65.9708L65.0642 154.973H65.1339Z" fill="#21293F"/>
|
||||
<path d="M71.48 150.824H74.3392L76.5708 157.434V150.824H79.43V166.364H76.9194L74.3392 159.051V166.364H71.48V150.824Z" fill="#21293F"/>
|
||||
<path d="M89.8206 152.512V155.746H86.9614V153.496H84.3812V163.692H86.9614V160.739H89.8206V164.746L88.0772 166.364H83.4049L81.522 164.746V152.512L83.4049 150.895H88.0772L89.8206 152.512Z" fill="#21293F"/>
|
||||
<path d="M91.9824 150.824H98.3285V153.496H94.8416V156.027H97.0732V158.699H94.8416V163.762H98.3285V166.434H91.9824V150.895V150.824Z" fill="#21293F"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.3 KiB |
|
|
@ -1,55 +0,0 @@
|
|||
<svg width="197" height="170" viewBox="0 0 197 170" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M63.1281 27.5239C62.5467 27.5239 61.9652 27.2342 61.6017 26.7996C61.2383 26.365 61.0203 25.7855 61.0203 25.206C61.0203 24.0471 62.0379 23.1055 63.2008 23.1055C63.7823 23.1055 64.3638 23.3952 64.7272 23.8298C65.0906 24.2644 65.3087 24.8439 65.3087 25.4233C65.3087 26.5823 64.2911 27.5239 63.1281 27.5239ZM62.1832 25.2785C62.1832 25.5682 62.2559 25.7855 62.474 26.0028C62.692 26.2201 62.9101 26.2925 63.2008 26.2925C63.7096 26.2925 64.2184 25.8579 64.2184 25.3509C64.2184 25.0612 64.1457 24.8439 63.9277 24.6266C63.7823 24.4093 63.4916 24.3368 63.2008 24.3368C62.6193 24.3368 62.1832 24.7714 62.1832 25.2785Z" fill="#21293F"/>
|
||||
<path d="M131.525 56.5698C131.161 56.5698 130.798 56.425 130.507 56.2077C130.289 56.0628 114.153 42.6627 94.3826 48.6746C87.9863 50.5579 84.2067 50.5579 81.9534 48.6746C79.2641 46.4292 79.6275 42.4454 80.1363 37.7372C80.6451 32.6669 81.1539 26.8722 78.1738 22.0916C73.74 15.138 66.6169 14.124 61.8197 15.3553C56.9497 16.6591 53.6062 20.2808 53.3882 24.5544C53.3882 25.1338 53.0247 25.5684 52.5886 25.8582L47.5733 28.6831L52.3706 30.4215C52.8794 30.6388 53.2428 31.0733 53.3882 31.5804C53.5335 32.0874 53.3882 32.6669 52.9521 33.029C49.6085 36.361 49.2451 39.6929 49.8993 41.5037C50.1173 42.1556 50.6988 43.1697 51.9345 43.3146C52.734 43.387 55.6414 43.2421 59.2757 37.3026C59.7118 36.5783 60.7294 36.2885 61.4562 36.7956C62.1831 37.2302 62.4738 38.2442 61.965 38.9686C57.6039 45.9946 53.6062 46.7189 51.571 46.5016C49.3905 46.2843 47.646 44.8357 46.8465 42.5902C45.9743 40.1275 46.1923 36.361 49.0997 32.5944L43.2849 30.4939C42.7034 30.2766 42.2673 29.7696 42.2673 29.1177C42.2673 28.4658 42.5581 27.8863 43.0669 27.5966L50.4081 23.4679C51.0622 18.1078 55.2053 13.7618 61.1655 12.2407C66.9803 10.7196 75.7025 11.951 81.0085 20.3532C84.6428 26.0755 83.9886 32.6669 83.4798 38.0269C83.1164 41.7935 82.8257 45.053 84.2067 46.2119C85.0789 46.9362 87.4775 47.4433 93.7284 45.6324C115.171 39.041 132.106 53.1655 132.833 53.8174C133.487 54.3968 133.56 55.4109 132.978 56.0628C132.688 56.425 132.179 56.6423 131.743 56.6423L131.525 56.5698Z" fill="#21293F"/>
|
||||
<path d="M131.525 56.5698C131.161 56.5698 130.798 56.425 130.507 56.2077C130.289 56.0628 114.153 42.6627 94.3826 48.6746C87.9863 50.5579 84.2067 50.5579 81.9534 48.6746C79.2641 46.4292 79.6275 42.4454 80.1363 37.7372C80.6451 32.6669 81.1539 26.8722 78.1738 22.0916C73.74 15.138 66.6169 14.124 61.8197 15.3553C56.9497 16.6591 53.6062 20.2808 53.3882 24.5544C53.3882 25.1338 53.0247 25.5684 52.5886 25.8582L47.5733 28.6831L52.3706 30.4215C52.8794 30.6388 53.2428 31.0733 53.3882 31.5804C53.5335 32.0874 53.3882 32.6669 52.9521 33.029C49.6085 36.361 49.2451 39.6929 49.8993 41.5037C50.1173 42.1556 50.6988 43.1697 51.9345 43.3146C52.734 43.387 55.6414 43.2421 59.2757 37.3026C59.7118 36.5783 60.7294 36.2885 61.4562 36.7956C62.1831 37.2302 62.4738 38.2442 61.965 38.9686C57.6039 45.9946 53.6062 46.7189 51.571 46.5016C49.3905 46.2843 47.646 44.8357 46.8465 42.5902C45.9743 40.1275 46.1923 36.361 49.0997 32.5944L43.2849 30.4939C42.7034 30.2766 42.2673 29.7696 42.2673 29.1177C42.2673 28.4658 42.5581 27.8863 43.0669 27.5966L50.4081 23.4679C51.0622 18.1078 55.2053 13.7618 61.1655 12.2407C66.9803 10.7196 75.7025 11.951 81.0085 20.3532C84.6428 26.0755 83.9886 32.6669 83.4798 38.0269C83.1164 41.7935 82.8257 45.053 84.2067 46.2119C85.0789 46.9362 87.4775 47.4433 93.7284 45.6324C115.171 39.041 132.106 53.1655 132.833 53.8174C133.487 54.3968 133.56 55.4109 132.978 56.0628C132.688 56.425 132.179 56.6423 131.743 56.6423L131.525 56.5698Z" fill="#21293F"/>
|
||||
<path d="M58.0399 16.6605C57.8219 16.6605 57.6038 16.6605 57.3858 16.5157C54.4057 15.2843 52.5159 12.387 52.5159 9.19991C52.5159 6.01285 56.0774 1.30469 60.4386 1.30469C64.7997 1.30469 65.5265 2.60849 66.9802 4.78148C67.489 5.50581 67.271 6.51988 66.5441 6.95448C65.8173 7.46151 64.7997 7.24421 64.3636 6.51988C63.4913 5.21608 62.0376 4.49175 60.4386 4.49175C57.8219 4.49175 55.714 6.59231 55.714 9.19991C55.714 11.8075 56.877 12.8216 58.6214 13.5459C59.2029 13.7632 59.639 14.3427 59.639 14.9946C59.639 15.6465 58.9122 16.5881 58.0399 16.5881V16.6605Z" fill="#21293F"/>
|
||||
<path d="M68.7245 15.2842C68.2883 15.2842 67.9249 15.1393 67.6342 14.8496C66.98 14.1977 66.98 13.1836 67.6342 12.6042C68.2883 11.9523 69.2333 11.9523 69.8874 12.6042C70.5416 13.2561 70.5416 14.2701 69.8874 14.8496C69.5967 15.1393 69.1606 15.3566 68.7245 15.3566V15.2842Z" fill="#21293F"/>
|
||||
<path d="M77.8828 9.12658C77.0106 9.12658 76.3564 8.47468 76.2837 7.60549C76.1384 5.14276 74.0305 3.18706 71.5592 3.18706C69.0879 3.18706 67.8522 4.34599 67.1254 6.15682C66.8347 6.95359 65.8898 7.38819 65.0902 7.09845C64.2907 6.80872 63.8546 5.86709 64.1453 5.07032C65.3083 2.02813 68.2157 0 71.5592 0C74.9027 0 79.1911 3.25949 79.4819 7.38819C79.4819 8.25739 78.9004 9.05415 77.9555 9.05415C77.9555 9.05415 77.9555 9.05415 77.8828 9.05415V9.12658Z" fill="#21293F"/>
|
||||
<path d="M72.5043 16.5894C71.6321 16.5894 70.9053 15.8651 70.9053 14.9959C70.9053 14.1267 71.6321 13.4023 72.5043 13.4023C73.3766 13.4023 74.1034 14.1267 74.1034 14.9959C74.1034 15.8651 73.3766 16.5894 72.5043 16.5894Z" fill="#21293F"/>
|
||||
<path d="M78.7552 21.7338H78.6098C77.7376 21.7338 77.0108 21.0095 77.0108 20.1403C77.0108 19.2711 77.7376 18.5467 78.6098 18.5467H78.7552C81.3719 18.5467 83.4798 16.4462 83.4798 13.8386C83.4798 11.231 81.3719 9.13042 78.7552 9.13042C76.1386 9.13042 78.3191 9.13042 78.1737 9.13042C77.3015 9.27529 76.502 8.76825 76.2839 7.89906C76.1385 7.02986 76.6473 6.23309 77.5196 6.01579C77.883 5.94336 78.2464 5.94336 78.6825 5.94336C83.0436 5.94336 86.6052 9.49259 86.6052 13.8386C86.6052 18.1846 83.0436 21.7338 78.6825 21.7338H78.7552Z" fill="#21293F"/>
|
||||
<path d="M131.524 56.5727C130.943 56.5727 130.361 56.283 130.071 55.7035C129.635 54.9067 129.998 53.9651 130.725 53.5305C131.161 53.3132 140.683 48.3877 146.57 46.5769C151.658 45.0558 153.185 47.2288 153.548 48.2429C154.348 50.271 153.112 52.951 150.786 54.11C149.986 54.4721 149.042 54.1824 148.605 53.3856C148.242 52.5889 148.533 51.6472 149.332 51.2126C150.35 50.7056 150.713 49.6915 150.568 49.4018C150.568 49.3294 149.768 48.8948 147.443 49.6191C141.846 51.3575 132.251 56.2829 132.179 56.3554C131.961 56.5002 131.67 56.5003 131.452 56.5003L131.524 56.5727Z" fill="#21293F"/>
|
||||
<path d="M118.805 68.3058C118.223 68.3058 117.642 67.9437 117.351 67.4366C116.988 66.6399 117.351 65.6982 118.078 65.3361C118.078 65.3361 118.151 65.3361 118.223 65.3361C118.95 65.0463 119.604 64.3944 119.895 63.5252C120.113 62.8733 120.186 62.149 120.041 61.4247C119.822 60.483 119.314 59.7587 118.587 59.2517C118.005 58.8895 117.278 58.7446 116.624 58.9619L108.992 60.9176C108.12 61.1349 107.248 60.6279 107.03 59.7587C106.812 58.8895 107.321 58.0203 108.193 57.803L115.825 55.8473C117.351 55.4851 118.95 55.7024 120.259 56.5716C121.712 57.5133 122.803 59.0344 123.093 60.7728C123.384 62.0766 123.239 63.4528 122.803 64.6117C122.221 66.2777 120.913 67.6539 119.386 68.2334C119.168 68.3058 118.95 68.3783 118.732 68.3783L118.805 68.3058Z" fill="#21293F"/>
|
||||
<path d="M145.334 68.5241C144.898 68.5241 144.462 68.3792 144.172 68.017C143.59 67.3651 143.59 66.3511 144.172 65.7716C144.244 65.6992 152.094 58.311 156.092 53.0958C156.601 52.3714 156.891 51.9368 156.964 51.6471C156.528 51.6471 155.438 51.6471 153.984 52.4439C147.297 55.9931 140.901 60.7737 140.828 60.8461C140.101 61.3532 139.156 61.2083 138.575 60.5564C138.066 59.8321 138.211 58.8904 138.865 58.311C139.156 58.0937 145.553 53.3131 152.458 49.619C154.856 48.3152 157.982 47.8082 159.508 49.619C160.162 50.4157 160.889 52.0817 158.636 55.0515C154.493 60.4115 146.643 67.7997 146.352 68.0895C146.061 68.3792 145.625 68.5241 145.262 68.5241H145.334Z" fill="#21293F"/>
|
||||
<path d="M147.806 76.4898C147.442 76.4898 147.079 76.3449 146.715 76.0552C146.061 75.4757 145.989 74.4616 146.57 73.8097C146.57 73.8097 151.295 68.5221 154.057 64.3934C157.109 59.9026 157.4 57.7296 157.109 57.1501C157.109 57.0052 156.673 56.9328 156.383 56.9328C155.51 56.9328 154.856 56.0636 154.929 55.1944C155.002 54.3252 155.801 53.6733 156.673 53.7457C158.708 53.8906 159.581 54.9771 160.017 55.7739C160.38 56.5706 161.543 58.9609 156.673 66.1318C153.766 70.4778 149.114 75.693 148.896 75.9103C148.605 76.2725 148.169 76.4173 147.733 76.4173L147.806 76.4898Z" fill="#21293F"/>
|
||||
<path d="M132.615 97.7849C132.106 97.7849 131.67 97.5676 131.306 97.133C130.798 96.4087 130.943 95.3946 131.67 94.8876C136.685 91.1935 144.535 78.4452 146.352 74.2441C146.716 73.4474 147.661 73.0852 148.46 73.4474C149.26 73.8095 149.623 74.7512 149.26 75.5479C147.588 79.3869 139.374 93.2216 133.56 97.4952C133.269 97.7125 132.905 97.7849 132.615 97.7849Z" fill="#21293F"/>
|
||||
<path d="M61.6744 97.7859C61.311 97.7859 60.8749 97.641 60.5841 97.3513C46.9193 84.5306 44.8114 59.9757 51.3531 45.1269C51.7165 44.3302 52.6614 43.968 53.461 44.3302C54.2605 44.6923 54.6239 45.634 54.2605 46.4307C48.2276 59.9757 50.2628 83.2992 62.7647 95.1059C63.4188 95.6853 63.4188 96.6994 62.7647 97.3513C62.4739 97.7135 62.0378 97.8583 61.6017 97.8583L61.6744 97.7859Z" fill="#21293F"/>
|
||||
<path d="M98.2352 83.4456C95.982 83.4456 93.8741 83.2283 91.8389 82.8661C83.044 81.1277 76.0662 75.1158 72.7954 66.3513C72.0686 64.3232 71.4871 62.2226 71.1963 60.1221C71.051 59.2529 71.6324 58.4561 72.5047 58.3112C73.3769 58.1664 74.1764 58.7458 74.3218 59.615C74.6125 61.4983 75.1213 63.454 75.7755 65.2648C78.6102 72.9428 84.7158 78.2304 92.4204 79.7515C97.7264 80.7655 103.687 80.3309 110.81 78.3752C114.226 77.4336 117.642 76.1298 120.986 74.826L122.076 74.3914C126.873 72.5082 126.437 70.48 126.364 69.8281C126.146 68.8865 125.638 68.1622 124.911 67.6551C124.329 67.293 123.602 67.1481 122.948 67.293L118.732 68.3795H118.587L104.704 71.9287C104.632 71.9287 104.559 71.9287 104.413 72.0011C103.614 72.3633 102.669 72.0011 102.306 71.2768C101.942 70.5525 102.233 69.6833 102.887 69.2487C102.96 69.2487 103.105 69.1038 103.251 69.1038C103.469 69.0314 103.687 68.9589 103.905 68.8865C103.905 68.8865 103.977 68.8865 104.05 68.8865L117.86 65.4097H118.006L122.367 64.3232C123.893 63.961 125.492 64.1783 126.873 65.0475C128.327 65.9892 129.344 67.4378 129.708 69.2487C130.217 71.7114 129.563 75.1158 123.457 77.4336L122.367 77.8682C119.023 79.172 115.534 80.5482 111.9 81.4899C106.957 82.8661 102.524 83.518 98.3806 83.518L98.2352 83.4456Z" fill="#21293F"/>
|
||||
<path d="M73.6673 111.475C70.3238 111.475 67.7071 110.461 65.9626 108.506C64.4363 106.84 63.6367 104.449 63.6367 101.697C63.6367 95.1054 68.3613 86.7031 73.6673 86.7031C78.9733 86.7031 83.6978 95.1054 83.6978 101.697C83.6978 108.288 82.8983 106.84 81.3719 108.506C79.6275 110.461 77.0108 111.475 73.6673 111.475ZM73.6673 89.8902C70.8325 89.8902 66.8349 95.9746 66.8349 101.697C66.8349 107.419 67.1256 105.029 68.3613 106.405C69.5242 107.636 71.2687 108.288 73.74 108.288C76.2113 108.288 77.9557 107.636 79.1187 106.405C80.3543 105.029 80.645 103.073 80.645 101.697C80.645 95.9746 76.6474 89.8902 73.8126 89.8902H73.6673Z" fill="#21293F"/>
|
||||
<path d="M96.8537 117.705C92.638 117.705 89.4398 116.473 87.2593 114.011C85.3695 111.91 84.4246 109.013 84.4246 105.536C84.4246 97.2061 90.3121 86.6309 96.9264 86.6309C103.541 86.6309 109.428 97.2061 109.428 105.536C109.428 113.866 108.411 111.91 106.594 114.011C104.413 116.473 101.142 117.705 96.9991 117.705H96.8537ZM96.8537 89.8904C92.7107 89.8904 87.55 98.5099 87.55 105.608C87.55 112.707 87.9134 110.027 89.5852 111.982C91.1116 113.721 93.5829 114.59 96.8537 114.59C100.125 114.59 102.523 113.721 104.122 111.982C105.794 110.099 106.157 107.492 106.157 105.608C106.157 98.5823 101.069 89.8904 96.8537 89.8904Z" fill="#21293F"/>
|
||||
<path d="M119.967 111.475C116.624 111.475 114.007 110.461 112.262 108.506C110.736 106.84 109.937 104.449 109.937 101.697C109.937 95.1054 114.661 86.7031 119.967 86.7031C125.273 86.7031 129.998 95.1054 129.998 101.697C129.998 108.288 129.198 106.84 127.672 108.506C125.927 110.461 123.311 111.475 119.967 111.475ZM119.967 89.8902C117.132 89.8902 113.135 95.9746 113.135 101.697C113.135 107.419 113.425 105.029 114.661 106.405C115.824 107.636 117.568 108.288 120.04 108.288C122.511 108.288 124.256 107.636 125.418 106.405C126.654 105.029 126.945 103.073 126.945 101.697C126.945 95.9746 122.947 89.8902 120.112 89.8902H119.967Z" fill="#21293F"/>
|
||||
<path d="M19.8805 131.322H22.6426V142.767H26.5676V145.085H19.8079V131.322H19.8805Z" fill="#21293F"/>
|
||||
<path d="M31.9462 142.622L31.5101 145.085H28.4573L31.2193 131.322H34.6355L37.4702 145.085H34.4175L33.9813 142.622H31.9462ZM32.9638 136.61L32.3823 140.304H33.6179L32.9638 136.61Z" fill="#21293F"/>
|
||||
<path d="M39.2871 145.155V131.393H45.538L47.3552 132.841V138.636L46.0468 139.795L47.5732 145.155H44.6658L43.4302 139.94H42.1218V145.155H39.3598H39.2871ZM44.5204 133.71H42.0491V137.622H44.5204V133.71Z" fill="#21293F"/>
|
||||
<path d="M57.3859 132.771V135.741H54.6239V133.64H52.1526V142.694H54.6239V139.652H53.7517V137.552H58.2582V139.652H57.3859V143.636L55.5688 145.085H51.135L49.3179 143.636V132.771L51.135 131.322H55.5688L57.3859 132.771Z" fill="#21293F"/>
|
||||
<path d="M60.1479 131.32H66.2535V133.638H62.91V135.884H65.0905V138.202H62.91V142.692H66.2535V145.01H60.1479V131.248V131.32Z" fill="#21293F"/>
|
||||
<path d="M81.2265 132.771V135.741H78.4645V133.64H75.9932V142.694H78.4645V139.652H77.5922V137.552H82.0987V139.652H81.2265V143.636L79.4094 145.085H74.9756L73.1584 143.636V132.771L74.9756 131.322H79.4094L81.2265 132.771Z" fill="#21293F"/>
|
||||
<path d="M86.5328 142.622L86.0967 145.085H83.0439L85.806 131.322H89.2222L92.0569 145.085H89.0041L88.568 142.622H86.5328ZM87.5504 136.61L86.9689 140.304H88.2046L87.5504 136.61Z" fill="#21293F"/>
|
||||
<path d="M93.9463 131.322H98.162L99.0343 136.827L99.9792 131.322H104.195V145.085H101.433V137.334L99.9065 145.085H98.2347L96.7083 137.262V145.085H93.9463V131.322Z" fill="#21293F"/>
|
||||
<path d="M106.012 131.322H110.228L111.1 136.827L112.045 131.322H116.261V145.085H113.499V137.334L111.972 145.085H110.3L108.774 137.262V145.085H106.012V131.322Z" fill="#21293F"/>
|
||||
<path d="M118.078 131.32H124.183V133.638H120.84V135.884H123.02V138.202H120.84V142.692H124.183V145.01H118.078V131.248V131.32Z" fill="#21293F"/>
|
||||
<path d="M131.815 131.322H134.577V145.085H131.815V131.322Z" fill="#21293F"/>
|
||||
<path d="M139.883 141.028V142.839H141.918V138.783H138.793L137.121 137.406V132.915L138.938 131.467H142.936L144.753 132.915V135.088H141.991V133.785H139.956V136.392H143.081L144.753 137.768V143.78L142.936 145.229H138.938L137.121 143.78V141.1H139.883V141.028Z" fill="#21293F"/>
|
||||
<path d="M149.332 141.028V142.839H151.367V138.783H148.242L146.57 137.406V132.915L148.387 131.467H152.385L154.202 132.915V135.088H151.44V133.785H149.405V136.392H152.53L154.202 137.768V143.78L152.385 145.229H148.387L146.57 143.78V141.1H149.332V141.028Z" fill="#21293F"/>
|
||||
<path d="M161.18 131.322H163.942V143.636L162.125 145.085H157.691L155.874 143.636V131.322H158.636V142.767H161.107V131.322H161.18Z" fill="#21293F"/>
|
||||
<path d="M165.759 131.32H171.865V133.638H168.521V135.884H170.702V138.202H168.521V142.692H171.865V145.01H165.759V131.248V131.32Z" fill="#21293F"/>
|
||||
<path d="M13.8477 156.092H20.3893L22.2065 157.54V168.405L20.3893 169.854H13.8477V156.092ZM19.4444 167.536V158.482H16.6824V167.536H19.4444Z" fill="#21293F"/>
|
||||
<path d="M24.0239 153.92H27.004V157.107L26.059 158.483H24.5327L24.9688 157.107H23.9512V153.92H24.0239Z" fill="#21293F"/>
|
||||
<path d="M28.9663 156.093H35.0719V158.411H31.7283V160.656H33.9089V162.974H31.7283V167.465H35.0719V169.783H28.9663V156.021V156.093ZM32.8913 155.224L35.8714 152.182H33.2547L31.4376 155.224H32.964H32.8913Z" fill="#21293F"/>
|
||||
<path d="M36.8159 156.092H39.5779V167.536H43.5029V169.854H36.7432V156.092H36.8159Z" fill="#21293F"/>
|
||||
<path d="M45.3926 156.092H51.4981V158.41H48.1546V160.655H50.3352V162.973H48.1546V167.464H51.4981V169.782H45.3926V156.02V156.092Z" fill="#21293F"/>
|
||||
<path d="M53.3157 156.092H56.1504L57.2407 164.639L58.331 156.092H61.1657L59.2032 169.854H55.2782L53.3157 156.092Z" fill="#21293F"/>
|
||||
<path d="M65.3085 167.464L64.8724 169.926H61.8196L64.5816 156.164H67.9978L70.8325 169.926H67.7798L67.3437 167.464H65.3085ZM66.3261 161.379L65.7446 165.073H66.9802L66.3261 161.379Z" fill="#21293F"/>
|
||||
<path d="M80.7177 157.613V160.582H77.9557V158.482H75.4844V167.536H77.9557V164.494H77.0835V162.393H81.5899V164.494H80.7177V168.478L78.9006 169.926H74.4668L72.6497 168.478V157.613L74.4668 156.164H78.9006L80.7177 157.613Z" fill="#21293F"/>
|
||||
<path d="M83.407 156.092H89.5125V158.41H86.169V160.655H88.3496V162.973H86.169V167.464H89.5125V169.782H83.407V156.02V156.092Z" fill="#21293F"/>
|
||||
<path d="M94.1649 165.798V167.608H96.2001V163.552H93.0746L91.4028 162.176V157.685L93.22 156.236H97.2176L99.0348 157.685V159.858H96.2727V158.554H94.2376V161.162H97.363L99.0348 162.538V168.55L97.2176 169.999H93.22L91.4028 168.55V165.87H94.1649V165.798Z" fill="#21293F"/>
|
||||
<path d="M105.939 169.926V156.164H112.19L114.008 157.613V162.828L112.19 164.277H108.701V169.999H105.939V169.926ZM111.173 158.482H108.701V161.886H111.173V158.482Z" fill="#21293F"/>
|
||||
<path d="M115.752 156.092H118.514V167.536H122.439V169.854H115.679V156.092H115.752Z" fill="#21293F"/>
|
||||
<path d="M124.328 156.092H130.434V158.41H127.09V160.655H129.271V162.973H127.09V167.464H130.434V169.782H124.328V156.02V156.092Z" fill="#21293F"/>
|
||||
<path d="M132.978 156.092H135.74V169.854H132.978V156.092Z" fill="#21293F"/>
|
||||
<path d="M138.211 156.092H140.973L143.154 161.959V156.092H145.916V169.854H143.517L141.046 163.335V169.854H138.284V156.092H138.211Z" fill="#21293F"/>
|
||||
<path d="M156.382 167.464L155.946 169.926H152.894L155.656 156.164H159.072L161.907 169.926H158.854L158.418 167.464H156.382ZM157.4 161.379L156.819 165.073H158.054L157.4 161.379Z" fill="#21293F"/>
|
||||
<path d="M164.451 156.092H167.213V169.854H164.451V156.092Z" fill="#21293F"/>
|
||||
<path d="M169.684 169.926V156.164H175.935L177.752 157.613V163.407L176.443 164.566L177.97 169.926H175.062L173.827 164.711H172.518V169.926H169.756H169.684ZM174.917 158.482H172.446V162.393H174.917V158.482Z" fill="#21293F"/>
|
||||
<path d="M52.5889 84.8203C52.5889 84.8203 6.79722 93.2226 2 99.0172" stroke="#21293F" stroke-width="4" stroke-miterlimit="10" stroke-linecap="round"/>
|
||||
<path d="M143.662 84.8203C143.662 84.8203 189.454 93.2226 194.251 99.0172" stroke="#21293F" stroke-width="4" stroke-miterlimit="10" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 12 KiB |