Compare commits

..

18 commits

Author SHA1 Message Date
Jérémy Munsch
73eeec3e75
Merge branch 'trunk' 2023-06-27 09:28:53 +02:00
Vincent BRIDIER
1f34c77256
Merge branch 'trunk' 2023-06-26 17:48:47 +02:00
Vincent BRIDIER
aca7083436
Merge branch 'trunk' 2023-06-26 15:50:13 +02:00
Vincent BRIDIER
ecbf1a8837
Merge branch 'trunk' 2023-05-02 17:15:52 +02:00
Vincent BRIDIER
0d61ee8295
Merge branch 'trunk' 2023-04-27 15:14:30 +02:00
Vincent BRIDIER
00865f4eff
Merge branch 'trunk' 2023-04-17 12:57:46 +02:00
Vincent BRIDIER
f01db43447
Merge branch 'trunk' 2023-04-17 12:16:55 +02:00
Vincent BRIDIER
05de5830f8
Merge branch 'trunk' 2023-04-17 12:04:55 +02:00
Vincent BRIDIER
765f9a06df
Merge branch 'trunk' 2023-03-23 12:06:36 +01:00
Vincent BRIDIER
a57525226f
Merge branch 'trunk' 2023-03-20 14:20:50 +01:00
Vincent BRIDIER
b6d081ec26
Merge branch 'trunk' 2023-02-16 10:15:44 +01:00
Vincent BRIDIER
993d1358a6
Merge branch 'trunk' 2023-01-27 10:33:20 +01:00
Vincent BRIDIER
f37200aedf
Merge branch 'trunk' 2023-01-11 18:31:00 +01:00
Vincent BRIDIER
785a6db60f
Merge branch 'trunk' 2023-01-11 18:06:32 +01:00
Vincent BRIDIER
d6b3cb767e
Merge branch 'trunk' 2022-09-19 09:14:22 +02:00
Olivier Legat
7d768bda93 Merge branch 'hotfix' 2022-09-13 15:31:44 +02:00
Olivier Legat
c346fb350b Merge branch 'hotfix' 2022-09-12 13:51:57 +02:00
Jérémy Munsch
aa4de0d001
Merge branch 'hotfix' 2022-08-24 12:55:26 +02:00
3464 changed files with 150993 additions and 371285 deletions

View file

@ -1,13 +0,0 @@
# Browsers that we support
# https://github.com/browserslist/browserslist#readme
>= 0.5%
last 2 major versions
not dead
Chrome >= 60
Firefox >= 60
Firefox ESR
iOS >= 12
Safari >= 12
not Explorer <= 11

View file

@ -1,16 +0,0 @@
.git
*.md
node_modules/
npm-debug.log
.npmrc
tests/
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
vendor/
public/build/
auth.json

View file

@ -3,9 +3,9 @@ root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
[*.md]
@ -13,9 +13,3 @@ trim_trailing_whitespace = false
[*.{yml,yaml}]
indent_size = 2
[docker-compose.yml]
indent_size = 4
[*.vue]
indent_size = 2

View file

@ -1,105 +1,100 @@
APP_NAME=Laravel
APP_ENV=local
### APPLICATION
APP_NAME="Le Gaulois"
APP_KEY=
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost
APP_URL=
## LOG LEVEL
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
## DATABASE
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
## DATABASE MIGRATION
DB_DATABASE_2016=legaulois2016
DB_USERNAME_2016=
DB_PASSWORD_2016=
## DATABASE OPINSTA
DB_DATABASE_OPINSTA=
DB_USERNAME_OPINSTA=
DB_PASSWORD_OPINSTA=
DB_HOST_OPINSTA=
DB_PORT_OPINSTA=
## MIGRATION
MIGRATIONPAGINATION=20000
## OTHERS
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
QUEUE_CONNECTION=database
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
## MAIL
MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
MAIL_LIST_CONTACT=
MAIL_LIST_PASSERELLE=
MAIL_LIST_NL=
MAIL_MKT_JEUX=
MAIL_HOST=
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=
MAIL_FROM_ADDRESS=no-reply@legaulois.fr
MAIL_FROM_NAME="Contact Le Gaulois (legaulois.fr)"
## MAIL ADDRESSES
MAIL_LIST_CONTACT=contact@legaulois.fr
MAIL_LIST_PASSERELLE=passerelle.ldc@ldc.fr
# Sentry
SENTRY_LARAVEL_DSN=
# CRM
## ARCHADIA
BOUTIQUE_ARCHADIA_OP_CODE=16
## CRM
CRM_ENDPOINT=
CRM_TOKEN=
CRM_PASSWORD=
CRM_QUESTION_ID=
CRM_BRAND_ID=
# - JSON ONLY (like this: {"subject1":44,"subject2":55,"subject3":66})
CRM_SUBJECTS=
CRM_API_TOKEN=
# DIGITAL RECRUITER
DIGITAL_RECRUITER_URL=
# ADMIN SECURE
# - API ENDPOINT (Optional)
LDC_WEB_API_ENDPOINT="https://ldc-web.ldc.fr/api/ldc-networks"
# - API KEY
LDC_WEB_API_KEY=""
# - LIST SEPARATED WITH ',' (Optional)
LDC_WEB_CIDR_MANUAL_ALLOWED_LIST=""
#MESBR
MESBR_REF_SITE=
MESBR_REF_CAMP=
## MES BR
MESBR_ENDPOINT=
MESBR_REF_CAMP=
# SAML
SAML2_DEFAULT_TENANT_UUID=
SAML2_SP_CERT_x509=
SAML2_SP_CERT_PRIVATEKEY=
SAML2_CONTACT_TECHNICAL_EMAIL=
SAML2_CONTACT_SUPPORT_EMAIL=
## OP BR CHARCUT
MESBR_REF_SITE_CHARCUT=
MESBR_REF_CAMP_CHARCUT=
MESBR_COUPON_1_CHARCUT=""
MESBR_COUPON_2_CHARCUT=""
MESBR_COUPON_3_CHARCUT=""
# RECAPTCHA
## GOOGLE
ANALYTICS_GOOGLE_ID=
GOOGLE_MAP_API_KEY=
# Google Recaptcha
GOOGLE_RECAPTCHA_PUBLIC=
GOOGLE_RECAPTCHA_PRIVATE=
GOOGLE_RECAPTCHA_VERSION=
# Matomo
MATOMO_SITE_ID=
## MERCANET
MERCANET_SECRET=
MERCANET_MERCHAND_ID=
MERCANET_ENV=
## TELESCOPE
TELESCOPE_ENABLED=
# BYPASS THE CRM JUST LOGIN (needs debug mode)
NOCRM=false
# MATOMO
MATOMO_SITE_ID=
# MEILISEARCH
MEILISEARCH_HOST=
MEILISEARCH_KEY=
# LARAVEL SCOUT
SCOUT_PREFIX=''
SCOUT_QUEUE=
# REDIS
REDIS_HOST=
REDIS_PORT=
REDIS_USERNAME=
REDIS_PASSWORD=
REDIS_PREFIX=
REDIS_SCHEME=
#OP INSTA
## Démarre le à d-m-YYYY
OPINSTA_START=
## Fin le à d-m-YYYY
OPINSTA_END=

View file

@ -1,62 +0,0 @@
{
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:vue/vue3-strongly-recommended",
"@vue/eslint-config-typescript"
],
"overrides": [
{
"files": ["*.ts", "*.vue"],
"rules": {
"no-undef": "off"
}
},
{
"files": ["*.vue"],
"rules": {
"indent": "off"
}
}
],
"parser": "vue-eslint-parser",
"parserOptions": {
"parser": "@typescript-eslint/parser",
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": ["vue", "@typescript-eslint"],
"ignorePatterns": [
"webpack.mix.js",
"**/*.php",
"**/*.svg",
"**/vendor/*.js",
"**/vendor/**/*.js",
"**/vendor/**/*.scss"
],
"rules": {
"indent": ["error", 4, { "SwitchCase": 1 }],
"linebreak-style": ["error", "unix"],
"quotes": ["error", "double"],
"semi": ["error", "always"],
"vue/script-indent": ["error", 2, { "baseIndent": 0, "switchCase": 1 }],
"vue/one-component-per-file": "off"
},
"settings": {
"import/resolver": {
"node": {
"extensions": [".js", ".vue", ".ts", ".d.ts"]
},
"alias": {
"extensions": [".vue", ".js", ".ts", ".scss", ".d.ts"],
"map": [
["~", "./resources/assets"],
["@", "./node_modules"]
]
}
}
}
}

14
.gitattributes vendored
View file

@ -1,11 +1,5 @@
* text=auto eol=lf
*.blade.php diff=html
*.css diff=css
*.html diff=html
*.md diff=markdown
*.php diff=php
/.github export-ignore
* text=auto
*.css linguist-vendored
*.scss linguist-vendored
*.js linguist-vendored
CHANGELOG.md export-ignore
.styleci.yml export-ignore

84
.gitignore vendored
View file

@ -1,66 +1,32 @@
/node_modules
/public/hot
/public/storage/*
/public/images/*
/public/js/*
/public/css/*
/public/fonts/*
/public/uploads/*
/public/assets/*
/public/cache/*
/public/storage
/public/sitemap.xml
/storage/*.key
/storage/inco/*.*
/storage/eleveur/*.*
/storage/app/public/*.*
/storage/debugbar
/vendor
.env
.env.backup
.env.testing
.env.production
.phpunit.result.cache
.stylelintcache
/.fleet
/.idea
/.phpunit.cache
/.vscode
/node_modules
/bootstrap
/public/build
/public/cache
/public/hot
/public/sitemap.xml
/public/storage
/storage/*.key
/vendor
auth.json
docker-compose.override.yml
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.npmrc
/tests/coverage
.zshrc
.npm/
.composer/
# Ignore public favicon
/public/android-chrome-192x192.png
/public/android-chrome-512x512.png
/public/apple-touch-icon.png
/public/browserconfig.xml
/public/browserconfig.xml
/public/favicon-16x16.png
/public/favicon-32x32.png
/public/favicon.ico
/public/mstile-150x150.png
/public/safari-pinned-tab.svg
/public/site.webmanifest
# Ignore Storage Arcadia (orders)
storage/arcadia
# Ignore Storage Inco (images)
storage/inco
# Ignore Storage tracabilite (eleveurs, lots, miseenplace)
storage/tracabilite
# For new LG version ignore old assets
oldAssets
/public/*
!/public/newsletters/
!/public/tdf-downloads
# Folders from new VMs
/.npm
/.composer
psysh_history
.zshrc
.viminfo
.idea/
.vscode/
mix-manifest.json
workspace.code-workspace
storage/crm_migration.csv
auth.json
.npmrc

View file

@ -1,23 +1,11 @@
include:
- 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"
- project: 'ldc-web/shared-ci'
ref: 'main'
file: 'lint/lint7.3.yml'
- project: 'ldc-web/shared-ci'
ref: 'main'
file: 'security/security7.3.yml'
stages:
- lint
- security
- build
- test
- deploy
- lint
- security

13
.styleci.yml Normal file
View file

@ -0,0 +1,13 @@
php:
preset: laravel
disabled:
- unused_use
finder:
not-name:
- index.php
- server.php
js:
finder:
not-name:
- webpack.mix.js
css: true

View file

@ -1,45 +0,0 @@
{
"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",
"**/vendor/*.less",
"**/vendor/**/*.less"
],
"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,
"declaration-colon-newline-after": null,
"value-list-comma-newline-after": null,
"scss/double-slash-comment-empty-line-before": [
"always",
{
"ignore": [
"between-comments",
"stylelint-commands",
"inside-block"
]
}
]
}
}

View file

@ -1,14 +1,13 @@
{
"phpcs.executablePath": "vendor/bin/phpcs",
"workbench.colorCustomizations": {
"activityBar.activeBorder": "#eb549a",
"activityBar.activeBackground": "#145bac",
"activityBar.activeBorder": "#eb549a",
"activityBar.background": "#145bac",
"activityBar.foreground": "#e7e7e7",
"activityBar.inactiveForeground": "#e7e7e799",
"activityBarBadge.background": "#eb549a",
"activityBarBadge.foreground": "#15202b",
"commandCenter.border": "#e7e7e799",
"sash.hoverBorder": "#145bac",
"statusBar.background": "#0f437e",
"statusBar.foreground": "#e7e7e7",
@ -18,7 +17,8 @@
"titleBar.activeBackground": "#0f437e",
"titleBar.activeForeground": "#e7e7e7",
"titleBar.inactiveBackground": "#0f437e99",
"titleBar.inactiveForeground": "#e7e7e799"
"titleBar.inactiveForeground": "#e7e7e799",
"commandCenter.border": "#e7e7e799"
},
"peacock.remoteColor": "#0f437e"
}

View file

@ -1,44 +0,0 @@
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 tsconfig.json vite.config.ts .eslintrc.json .stylelintrc.json /app/
COPY resources/ /app/resources/
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 ci && npm run prod
FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/ldcweb-production-8.3:170625-101047
ARG USER=www-data
COPY --chown=${USER}:${USER} . /app/srcs
COPY --chown=${USER}:${USER} ./resources/favicon /app/srcs/public
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}

112
README.md
View file

@ -1,91 +1,33 @@
# Le Gaulois
## Optimiser Images
### PNG
apt install imagick
convert -colors 256 -depth 8 +dither bg-footer-ori.png bg-footer-test.png
<https://compresspng.com/>
### Autre
apt install trimage
# Copy paste from the admin secure readme.md
Put every min in PROD :
```php
php artisan schedule:run
## .env
En DEV et PROD mettre :
```
LOG_CHANNEL=stackProd
```
# Unit tests
Create new `.env.testing` with a new empty database `le-gaulois-testing` and just run this command :
```php
php artisan test
## Flux
Flux INCO dans :
```
To see more details, please read the documentation of [uwil/unit-tests-laravel](https://lab.s-web.fr/ldc-web/projets/unit-tests-laravel/-/blob/main/README.md?ref_type=heads#documentation)
Legend : ✅ test added & operational, ⚠️ test added & operational but modified, ❌ no test (because no CRUD or specific model)
Models list :
✅ ActivityLog
⚠️ Approach (label/demarche)
❌ BlockList
✅ BrandAdvantage
❌ Breeder
✅ Claim
✅ ConsumptionMoment
❌ Customer
❌ DeliveryAddress
✅ DemarcheSlide
❌ DepartaimantsCollection
✅ Discount
❌ GeneralSetting
✅ HistoricalMilestone
❌ IncoNutritionalValue
✅ KeyNumber
✅ MainSlide
✅ Meat
⚠️ MenuNodeData
❌ Message
⚠️ News
✅ NewsBreeding
✅ NewsCategory
⚠️ NewsClub (News/Survey)
✅ NewsCorporate
❌ Notification
✅ Offer
❌ Order
❌ OrderSellItem
✅ Product
✅ ProductType
✅ Profession
✅ Range
✅ Recipe
✅ SellItem
✅ StaticPage
✅ Submeat
✅ Subrange
✅ SurveysAnswer
✅ Testimonial
❌ User
✅ Video
# Meilisearch
When deploying, if there any modification to a concerned Model, you may refresh Meilisearch cache. Concerned models are :
- News
- NewsBreeding
- Product
- Recipe
```sh
php artisan scout:flush "\App\Models\News"
php artisan scout:import "\App\Models\News"
php artisan scout:flush "\App\Models\NewsBreeding"
php artisan scout:import "\App\Models\NewsBreeding"
php artisan scout:flush "\App\Models\Product"
php artisan scout:import "\App\Models\Product"
php artisan scout:flush "\App\Models\Recipe"
php artisan scout:import "\App\Models\Recipe"
storage/inco
```
Flux Tracabilité dans :
```
storage/tracabilite
```
## Scheduled Jobs
- DeleteOrders : daily at 14
## Boutique
Expédition de fond de carte magnétique
Poids : 540
Code Opération : 16
Code Support : 1
Expédition de fond de carte papier
Poids : 0
Code Opération : 16
Code Support : 0
- !! Vérifier que sell_items.archadia_id contient bien la bone valeur (Code support)

View file

@ -1,182 +0,0 @@
<?php
namespace App\Auth;
use App\Models\Customer;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Str;
use LDC\LDCCRM\Enums\ApiError;
use LDC\LDCCRM\Exceptions\ApiErrorException;
use LDC\LDCCRM\Exceptions\CrmException;
use LDC\LDCCRM\Models\Customer as CrmCustomer;
/**
* Crm user provider to integrate nicely with Laravel
*/
class CrmUserProvider extends EloquentUserProvider implements UserProvider
{
/**
* The model to use, specified in auth config guard.
*
* @var string
*/
private $usedModel = Customer::class;
/**
* Retrieve a user by the given credentials.
*
* @param array $credentials
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveByCredentials(array $credentials): \Illuminate\Contracts\Auth\Authenticatable|null
{
// * Let laravel find a model
$model = parent::retrieveByCredentials($credentials) ?? self::retrieveTrashed($credentials);
try {
/** @var \LDC\LDCCRM\CrmApiV4 */
$crm = app('crmAPI');
// Si pas de compte local.
if (!$model) {
$crmCustomer = $crm->getCustomer($credentials['email']);
if (!$crmCustomer) {
// * Customer is not found on CRM.
return null;
}
$model = $this->createLocalCustomer($crmCustomer);
}
return $model;
} catch (ApiErrorException $e) {
// * Customer is not found.
if ($e->getApiError()->equals(ApiError::modelNotFound)) {
return null;
}
report($e);
Log::error('Unhandled response ' . $e->getApiError()->label());
} catch (CrmException | \Exception $e) {
report($e);
// Une erreur critique est survenue avec la CRM.
return null;
} //end try
Log::error(__CLASS__ . '::retrieveByCredentials reached end of possibilities.');
return null;
}
/**
* Validate a user against the given credentials.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $model
* @param array $credentials
* @return boolean
* @throws \RuntimeException If model provided is not a Customer or connection to server fails.
* @throws \LDC\LDCCRM\Exceptions\CrmException On CRM call error.
* @throws \Exception On CRM call error.
*/
public function validateCredentials(Authenticatable $model, array $credentials): bool
{
/** @var \Illuminate\Database\Eloquent\Model $model */
if (\get_class($model) !== $this->usedModel) {
throw new \RuntimeException('Cannot authenticate any thing else than ' . $this->usedModel);
}
try {
/** @var \LDC\LDCCRM\CrmApiV4 */
$crm = app('crmAPI');
// * If has trait soft delete and customer trashed, then restore customer.
if (
\in_array(\Illuminate\Database\Eloquent\SoftDeletes::class, \class_uses_recursive($model)) and
// @phpstan-ignore-next-line
$model->trashed()
) {
// @phpstan-ignore-next-line
$model->restore();
}
// * Ne devrait pas survenir, $crm->login throws ApiError::authFailed
return $crm->login($credentials['email'], $credentials['password']);
} catch (ApiErrorException $e) {
// @phpstan-ignore-next-line
if (!$model->hashcode or !CrmCustomer::find($model->hashcode)) {
$model->forceDelete();
return false;
}
if ($e->getApiError()->equals(ApiError::authFailed)) {
return false;
}
// ! Assert Authenticable model must be valided (MustValidate trait).
if ($e->getApiError()->equals(ApiError::customerNotActivated)) {
Session::flash('warning', \trans('Vous devez activer votre compte'));
return true;
}
} catch (CrmException | \Exception $e) {
report($e);
if (config('app.debug')) {
throw $e;
}
return false;
} //end try
Log::error(__CLASS__ . '::validateCredentials reached end of possibilities.');
return false;
}
/**
* Create a local customer
*
* @param \LDC\LDCCRM\Models\Customer $crmCustomer
* @return \Illuminate\Database\Eloquent\Model
* @throws \Throwable If saving to DB failed.
*/
private function createLocalCustomer(\LDC\LDCCRM\Models\Customer $crmCustomer): \Illuminate\Database\Eloquent\Model
{
/** @var \Illuminate\Database\Eloquent\Model $model */
$model = $this->usedModel::firstOrNew([
'email' => $crmCustomer->email
]);
// @phpstan-ignore-next-line
$model->hashcode = $crmCustomer->hashcode;
// @phpstan-ignore-next-line
$model->email_verified_at = $crmCustomer->status ? now() : null;
$model->saveOrFail();
return $model;
}
/**
* Retrieve a trashed customer by the given credentials.
*
* @param array $credentials
* @return \Illuminate\Contracts\Auth\Authenticatable|null
* @throws \ErrorException If cannot connect to LDAP.
*/
private function retrieveTrashed(array $credentials): ?\Illuminate\Contracts\Auth\Authenticatable
{
// * Make changes
if (empty($credentials)) {
return null;
}
// First we will add each credential element to the query as a where clause.
// Then we can execute the query and, if we found a customer, return it in a
// Eloquent User "model" that will be utilized by the Guard instances.
$query = $this->createModel()->newQuery();
foreach ($credentials as $key => $value) {
if (!Str::contains($key, 'password')) {
$query->where($key, $value);
}
}
// @phpstan-ignore-next-line
return $query->withTrashed()->first();
}
}

View file

@ -1,72 +0,0 @@
<?php
namespace App\Auth;
use App\Models\Customer;
use Illuminate\Support\Str;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider;
/**
* Overload EloquentUserProvider to handle
* Soft deleted Customers
*/
class ReactivateCustomerProvider extends EloquentUserProvider implements UserProvider
{
/**
* Retrieve a customer by the given credentials.
*
* @param array $credentials
* @return \Illuminate\Contracts\Auth\Authenticatable|null
* @throws \ErrorException If cannot connect to LDAP.
*/
public function retrieveByCredentials(array $credentials): ?\Illuminate\Contracts\Auth\Authenticatable
{
// * Make changes
if (empty($credentials)) {
return null;
}
// First we will add each credential element to the query as a where clause.
// Then we can execute the query and, if we found a customer, return it in a
// Eloquent User "model" that will be utilized by the Guard instances.
$query = $this->createModel()->newQuery();
foreach ($credentials as $key => $value) {
if (!Str::contains($key, 'password')) {
$query->where($key, $value);
}
}
// @phpstan-ignore-next-line
return $query->withTrashed()->first();
}
/**
* Validate a customer against the given credentials.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $customer
* @param array $credentials
* @return boolean
* @throws \ErrorException If model provided is not a Customer or connection to server fails.
*/
public function validateCredentials(Authenticatable $customer, array $credentials): bool
{
/** @var \App\Models\Customer $customer */
if ($customer instanceof Customer) {
throw new \ErrorException('Cannot authenticate any thing else than ' . Customer::class);
}
// @phpstan-ignore-next-line
$plain = $credentials['password'];
/** @var \App\Models\Customer $customer */
if ($this->hasher->check($plain, $customer->getAuthPassword())) {
// * Restore customer
return boolval($customer->restore());
}
return false;
}
}

View file

@ -3,10 +3,10 @@
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
/**
* Custom cast Html Color
* https://laravel.com/docs/8.x/eloquent-mutators#custom-casts
*/
//phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed
//phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed
@ -15,13 +15,13 @@ class HtmlColor implements CastsAttributes
/**
* Cast the given value.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return string
*/
public function get(Model $model, string $key, mixed $value, array $attributes): string
public function get($model, $key, $value, $attributes)
{
return "#" . $this->zeropad(dechex($value), 6);
}
@ -29,25 +29,18 @@ class HtmlColor implements CastsAttributes
/**
* Prepare the given value for storage.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param array $value
* @param array $attributes
* @return integer
*/
public function set(Model $model, string $key, mixed $value, array $attributes): int
public function set($model, $key, $value, $attributes)
{
return \intval(hexdec(ltrim($value, '#')));
}
/**
* Pad with zeros a numeric string
*
* @param string $num
* @param integer $lim
* @return string
*/
protected function zeropad(string $num, int $lim): string
private function zeropad($num, $lim)
{
return (strlen($num) >= $lim) ? $num : $this->zeropad("0" . $num, $lim);
}

View file

@ -3,44 +3,39 @@
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Carbon;
class NiceDate implements CastsAttributes
{
/**
* Cast the given value.
* Accessor
*
* @param \Illuminate\Database\Eloquent\Model|null $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return string
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed
* @param mixed $model
* @param mixed $key
* @param mixed $value
* @param mixed $attributes
* @return mixed
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed
*/
public function get(Model|null $model, string $key, mixed $value, array $attributes): string
public function get($model, $key, $value, $attributes)
{
// phpcs:enable
$value = Carbon::parse($value);
return $value->isToday() ?
trans('Aujourd\'hui à :time', ['time' => $value->format('H:i')]) : $value->format('Y/m/d à H:i');
trans('Aujourd\'hui à :time', ['time' => $value->format('H:i')]) : $value->format('Y/m/d H:i');
}
/**
* Prepare the given value for storage.
* Mutator
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return string
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed
* @param mixed $model
* @param mixed $key
* @param mixed $value
* @param mixed $attributes
* @return mixed
*/
public function set(Model $model, string $key, mixed $value, array $attributes): string
public function set($model, $key, $value, $attributes)
{
// phpcs:enable
return Carbon::parse($value)->format('Y-m-d H:i:s');
}
}

View file

@ -1,34 +0,0 @@
<?php
namespace App\Console\Commands;
use App\Jobs\FetchDigitalRecruiterOffers;
use Illuminate\Console\Command;
class FetchDigitalRecruiterOffersCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'uwil:digital-recruiter';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Fetch digital recruiter offers';
/**
* Execute the console command.
*
* @return void
*/
public function handle(): void
{
(new FetchDigitalRecruiterOffers())->handle();
$this->info('Offers fetch 👌');
}
}

View file

@ -1,34 +0,0 @@
<?php
namespace App\Console\Commands;
use App\Jobs\FetchMesBr;
use Illuminate\Console\Command;
class FetchMesBrCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'uwil:mesbr';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Fetch mesbr discounts';
/**
* Execute the console command.
*
* @return void
*/
public function handle(): void
{
(new FetchMesBr())->handle();
$this->info('Discounts fetch 👌');
}
}

View file

@ -0,0 +1,77 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
/*
* Command Name: LDC Web Status Checker
* Description: Envoi des infos Serveur/Laravel vers LDC Web
* Version: 1.1
* Author: Vincent BRIDIER
* Author URI: vincent.bridier@ldc.fr
*/
class LdcWebStatusChecker extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'ldcweb:statuschecker';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Envoi des infos Serveur/Laravel vers LDC Web';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$data = [];
$data['uuid'] = config('ldcweb.project_uuid');
// Sitemap.xml ?
if (file_exists(public_path() . '/sitemap.xml')) {
$data['sitemap'] = 'true';
} else {
$data['sitemap'] = 'false';
}
// Robots.txt ?
if (file_exists(public_path() . '/robots.txt')) {
$data['robots'] = 'true';
} else {
$data['robots'] = 'false';
}
// Check logs
$data['logs'] = 0;
$patherror = storage_path('/logs');
$files = glob($patherror . '/*.log');
if (count($files) > 0) {
foreach ($files as $file) {
$data['logs'] = $data['logs'] + filesize($file);
}
}
$data['code']['version'] = app()->version();
// Send by cURL
$url = 'https://ldc-web.ldc.fr/api/status-checker';
$ch = curl_init($url);
$payload = ['token' => 'CE8S52Qq7stf5k8frF4T', 'datas' => json_encode($data)];
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
return 0;
}
}

View file

@ -1,39 +0,0 @@
<?php
namespace App\Console\Commands;
use App\Models\Message;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Crypt;
class MigrateOldMessage extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'app:migrate-old-message';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Execute the console command.
*
* @return void
*/
public function handle()
{
// Comment casting before run this command.
$messages = Message::all();
foreach ($messages as $message) {
$message->setAttribute('message', Crypt::encryptString($message->getRawOriginal('message')));
$message->save();
}
}
}

View file

@ -0,0 +1,37 @@
<?php
namespace App\Console\Commands;
use App\Jobs\PurgeNotifications as JobsPurgeNotifications;
use Illuminate\Console\Command;
//phpcs:disable Generic.Files.LineLength.TooLong
class PurgeNotifications extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'notifications:purge';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Purge the notifications table where the created_at date of a notification is older than 30 days';
/**
* Execute the console command.
*
* @return integer
*/
public function handle()
{
$this->info('Running the Job, this could take some time.');
$job = new JobsPurgeNotifications();
$job->handle();
$this->info('Job completed');
}
}

View file

@ -0,0 +1,38 @@
<?php
namespace App\Console\Commands;
use App\Jobs\UpdateReductions as JobsUpdateReductions;
use Illuminate\Console\Command;
//phpcs:disable Generic.Files.LineLength.TooLong
class UpdateReductions extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'reductions:update';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Update the reductions that the application get from MesBR';
/**
* Execute the console command.
*
* @return integer
*/
public function handle()
{
$this->info('Running the Job, this could take some time.');
$job = new JobsUpdateReductions();
$job->console = $this;
$job->handle();
$this->info('Job completed');
}
}

View file

@ -0,0 +1,43 @@
<?php
namespace App\Console\Commands;
use App\User;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Hash;
class UserChangePassword extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'user:password';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Changes a user password';
public function handle()
{
$email = $this->ask('What is the email?');
$user = User::where('email', $email)->first();
if (!$user) {
$this->error(sprintf('User %s could not be found', $email));
return -1;
}
$password = $this->secret('What is the password?');
$user->password = Hash::make($password);
$user->saveOrFail();
$this->info('User updated.');
return 0;
}
}

View file

@ -2,13 +2,9 @@
namespace App\Console\Commands;
use App\Enums\Users\RoleEnum;
use App\Models\User;
use Carbon\Carbon;
use App\User;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash;
class UserCreate extends Command
{
@ -17,189 +13,38 @@ class UserCreate extends Command
*
* @var string
*/
protected $signature = 'uwil:user:create';
protected $signature = 'user:create';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Create a backend admin user';
/**
* The first name of the new user.
*
* @var string|null
*/
protected $first_name;
/**
* The last name of the new user.
*
* @var string|null
*/
protected $last_name;
/**
* The email of the new user.
*
* @var string|null
*/
protected $email;
/**
* The role of the new user.
*
* @var string|null
*/
protected $role;
protected $description = 'Create a backend user';
/**
* Execute the console command.
*
* @return void
* @return integer
*/
public function handle(): void
public function handle()
{
$this->first_name = null;
$this->addFirstName();
$firstname = $this->ask('What is the firstname?');
$lastname = $this->ask('What is the lastname?');
$email = $this->ask('What is the email?');
$role = $this->ask('What is the role 1 (SuperAdmin) or 2 (Admin) ?') == '1' ? 1 : 2;
$pwd = $this->secret('What is the password?');
$this->last_name = null;
$this->addLastName();
$this->email = null;
$this->addEmail();
$this->role = null;
$this->addRole();
$user = new User([
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'email' => $this->email,
'role' => $this->role,
'published' => true,
'published_at' => Carbon::now(),
]);
$user = new User();
$user->firstname = $firstname;
$user->lastname = $lastname;
$user->email = $email;
$user->role = $role;
$user->password = Hash::make($pwd);
$user->email_verified_at = date('Y-m-d H:i:s');
$user->saveOrFail();
$this->info('User created 👌');
}
/**
* Add a first name to the user.
*
* @return void
*/
private function addFirstName(): void
{
while (is_null($this->first_name)) {
try {
$tmp = $this->ask('Type the wanted user first name', 'Admin');
$validator = Validator::make(['first_name' => $tmp], [
'first_name' => 'required|min:3|max:255'
]);
$validator->validate();
$this->first_name = $tmp;
} catch (ValidationException $e) {
$this->error(sprintf(
'Please provide a valid first name %s',
\implode(',', collect($e->errors())->flatten()->all())
));
continue;
} //end try
}; //end while
}
/**
* Add a last name to the user.
*
* @return void
*/
private function addLastName(): void
{
while (is_null($this->last_name)) {
try {
$tmp = $this->ask('Type the wanted user last name', 'Saïtama');
$validator = Validator::make(['last_name' => $tmp], [
'last_name' => 'required|min:3|max:255'
]);
$validator->validate();
$this->last_name = $tmp;
} catch (ValidationException $e) {
$this->error(sprintf(
'Please provide a valid last_name %s',
\implode(',', collect($e->errors())->flatten()->all())
));
continue;
} //end try
}; //end while
}
/**
* Add an email to the user.
*
* @return void
*/
private function addEmail(): void
{
while (is_null($this->email)) {
try {
$tmp = $this->ask('Type the wanted user email', 'equipe.web@ldc.fr');
$validator = Validator::make(['email' => $tmp], [
'email' => 'required|unique:users,email|email:rfc,dns'
]);
$validator->validate();
$this->email = $tmp;
} catch (ValidationException $e) {
$this->error(sprintf(
'Please provide a valid email %s',
\implode(',', collect($e->errors())->flatten()->all())
));
continue;
} //end try
}; //end while
}
/**
* Add a role to the user.
*
* @return void
*/
private function addRole(): void
{
while (is_null($this->role)) {
try {
$tmp = $this->choice(
'Select his role',
[
Str::ucFirst(RoleEnum::conceptor->label()),
Str::ucFirst(RoleEnum::admin->label()),
Str::ucFirst(RoleEnum::visitor->label())
],
Str::ucFirst(RoleEnum::visitor->label()),
);
if ($tmp === Str::ucFirst(RoleEnum::conceptor->label())) {
$tmp = RoleEnum::conceptor;
}
if ($tmp === Str::ucFirst(RoleEnum::admin->label())) {
$tmp = RoleEnum::admin;
}
if ($tmp === Str::ucFirst(RoleEnum::visitor->label())) {
$tmp = RoleEnum::visitor;
}
$validator = Validator::make(['role' => $tmp], [
'role' => 'required'
]);
$validator->validate();
$this->role = $tmp;
} catch (ValidationException $e) {
$this->error(sprintf(
'Please choose from the selection %s',
\implode(',', collect($e->errors())->flatten()->all())
));
continue;
} //end try
}; //end while
$this->info('User created.');
return 0;
}
}

View file

@ -0,0 +1,37 @@
<?php
namespace App\Console\Commands;
use App\Jobs\XSCVMepReader as JobsXSCVMepReader;
use Illuminate\Console\Command;
class XSCVMepReader extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'csv:mep';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Run the XSCVMepReader manually';
/**
* Execute the console command.
*
* @return integer
*/
public function handle()
{
$this->info('Running the Job, this could take some time.');
$job = new JobsXSCVMepReader();
$job->console = $this;
$job->handle();
$this->info('Job completed');
}
}

View file

@ -0,0 +1,37 @@
<?php
namespace App\Console\Commands;
use App\Jobs\XmlEleveursReader as JobsXmlEleveursReader;
use Illuminate\Console\Command;
class XmlEleveursReader extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'xml:eleveur';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Run the XmlEleveursReaderJob manually';
/**
* Execute the console command.
*
* @return integer
*/
public function handle()
{
$this->info('Running the Job, this could take some time.');
$job = new JobsXmlEleveursReader();
$job->console = $this;
$job->handle();
$this->info('Job completed');
}
}

View file

@ -0,0 +1,37 @@
<?php
namespace App\Console\Commands;
use App\Jobs\XmlIncoReader as JobsXmlIncoReader;
use Illuminate\Console\Command;
class XmlIncoReader extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'xml:inco';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Run the XmlIncoReaderJob manually';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->info('Running the Job, this could take some time.');
$job = new JobsXmlIncoReader();
$job->console = $this;
$job->handle();
$this->info('Job completed');
}
}

View file

@ -0,0 +1,37 @@
<?php
namespace App\Console\Commands;
use App\Jobs\XmlTracaReader as JobsXmlTracaReader;
use Illuminate\Console\Command;
class XmlTracaReader extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'xml:traca';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Run the XmlTracaReaderJob manually';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->info('Running the Job, this could take some time.');
$job = new JobsXmlTracaReader();
$job->console = $this;
$job->handle();
$this->info('Job completed');
}
}

View file

@ -2,36 +2,68 @@
namespace App\Console;
use App\Console\Commands\LdcWebStatusChecker;
use App\Console\Commands\PurgeNotifications;
use App\Console\Commands\UpdateReductions;
use App\Console\Commands\UserChangePassword;
use App\Console\Commands\UserCreate;
use App\Console\Commands\XmlEleveursReader;
use App\Console\Commands\XmlIncoReader;
use App\Console\Commands\XmlTracaReader;
use App\Console\Commands\XSCVMepReader;
use App\Jobs\DeleteOldMessages;
use App\Jobs\FetchDigitalRecruiterOffers;
use App\Jobs\FetchMesBr;
use App\Jobs\DeleteOldNotifications;
use App\Jobs\DeleteOrders;
use App\Jobs\PurgeNotifications as JobsPurgeNotifications;
use App\Jobs\PurgeOldResetPasswords;
use App\Jobs\UpdateReductions as JobsUpdateReductions;
use App\Jobs\XmlEleveursReader as JobsXmlEleveursReader;
use App\Jobs\XmlIncoReader as JobsXmlIncoReader;
use App\Jobs\XmlTracaReader as JobsXmlTracaReader;
use App\Jobs\XSCVMepReader as JobsXSCVMepReader;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
PurgeNotifications::class,
UpdateReductions::class,
XmlEleveursReader::class,
XmlIncoReader::class,
XmlTracaReader::class,
UserCreate::class,
UserChangePassword::class,
XSCVMepReader::class,
LdcWebStatusChecker::class
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule): void
protected function schedule(Schedule $schedule)
{
$schedule->job(FetchDigitalRecruiterOffers::class)->everyFourHours(15);
// $schedule->job(SendOcbMissingBreederReminder::class)->dailyAt('07:30');
$schedule->job(DeleteOrders::class)->dailyAt('14:00');
$schedule->job(DeleteOldMessages::class)->dailyAt('14:15');
$schedule->job(FetchMesBr::class)->daily();
}
$schedule->job(DeleteOldNotifications::class)->dailyAt('14:30');
$schedule->job(JobsUpdateReductions::class)->dailyAt('14:45');
$schedule->job(JobsXmlIncoReader::class)->name('xml-inco-reader')->dailyAt('15:00');
$schedule->job(JobsXmlTracaReader::class)->name('xml-traca-reader')->dailyAt('15:15');
$schedule->job(JobsXmlEleveursReader::class)->name('xml-eleveurs-reader')->dailyAt('15:30');
$schedule->job(JobsXSCVMepReader::class)->name('csv-mep-reader')->dailyAt('16:00');
$schedule->job(JobsPurgeNotifications::class)->dailyAt('00:15');
$schedule->job(PurgeOldResetPasswords::class)->dailyAt('00:25');
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands(): void
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
// * Remove Old traca
$schedule->command('xml:clean_olds')->dailyAt('06:00');
}
}

View file

@ -1,47 +0,0 @@
<?php
namespace App\Enums\ActivityLogs;
use App\Traits\Enums\BaseEnum;
enum ActivityLogsEventEnum: int
{
use BaseEnum;
case created = 1;
case updated = 2;
case duplicated = 3;
case deleted = 4;
/**
* Optionnal labels definition
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::created->name => 'Création',
self::updated->name => 'Mise à jour',
self::duplicated->name => 'Duplication',
self::deleted->name => 'Suppression',
];
/**
* Custom added classes definition
*/
private const BOOTSTRAPCLASS = [
self::created->name => 'success',
self::updated->name => 'warning',
self::duplicated->name => 'secondary',
self::deleted->name => 'danger',
];
/**
* Get Class
*
* @return string
*/
public function bootstrapClass(): string
{
return self::BOOTSTRAPCLASS[$this->name];
}
}

View file

@ -1,23 +0,0 @@
<?php
namespace App\Enums\Approaches;
use App\Traits\Enums\BaseEnum;
enum ApproachTypeEnum: int
{
use BaseEnum;
case label = 1;
case demarche = 2;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::label->name => 'validation.custom.label',
self::demarche->name => 'validation.custom.demarche',
];
}

View file

@ -1,13 +0,0 @@
<?php
namespace App\Enums\Arcadia;
use App\Traits\Enums\BaseEnum;
enum ArcadiaOrderType: int
{
use BaseEnum;
case cb = 1;
case check = 2;
}

View file

@ -0,0 +1,31 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self actu()
* @method static self jeux()
* @method static self video()
* @method static self sondage()
* @method static self astuce()
*/
final class ArticleCategory extends BaseEnumRoutable
{
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'actu' => __('Actus'),
'jeux' => __('Jeux-Concours'),
'video' => __('Vidéo'),
'sondage' => __('Sondage'),
'astuce' => __('Astuces')
];
}
}

View file

@ -1,23 +0,0 @@
<?php
namespace App\Enums\Breeders;
use App\Traits\Enums\BaseEnum;
enum GeoType: int
{
use BaseEnum;
case exact = 0;
case commune = 1;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::exact->name => 'Exacte',
self::commune->name => 'Code commune',
];
}

View file

@ -1,27 +0,0 @@
<?php
namespace App\Enums\Breeders;
use App\Traits\Enums\BaseEnum;
enum OCBStatus: int
{
use BaseEnum;
case none = 0;
case pending = 1;
case no = 2;
case yes = 3;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::none->name => 'Non',
self::pending->name => 'En attente',
self::no->name => 'Réfusé',
self::yes->name => 'Valide',
];
}

View file

@ -1,25 +0,0 @@
<?php
namespace App\Enums\Breeders;
use App\Traits\Enums\BaseEnum;
enum OCBType: int
{
use BaseEnum;
case rabbit = 1;
case chicken = 2;
case turkey = 3;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::rabbit->name => 'Lapin',
self::chicken->name => 'Poulet',
self::turkey->name => 'Dinde',
];
}

View file

@ -1,23 +0,0 @@
<?php
namespace App\Enums\Breeders;
use App\Traits\Enums\BaseEnum;
enum PresentationType: int
{
use BaseEnum;
case picture = 0;
case video = 1;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::picture->name => 'Photo',
self::video->name => 'Video',
];
}

View file

@ -0,0 +1,36 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self bloc1()
* Text et dropdowns array
*/
final class BreedingBlocType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'bloc1' => 0,
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'bloc1' => __('Bloc 1, (Text et dropdowns array)')
];
}
}

View file

@ -0,0 +1,52 @@
<?php
namespace App\Enums;
use Illuminate\Support\Str;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self breeding()
* @method static self job()
* @method static self food()
* @method static self health()
*/
final class BreedingPageType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
$labels = self::labels();
return [
'breeding' => Str::slug($labels['breeding']),
'job' => Str::slug($labels['job']),
'food' => Str::slug($labels['food']),
'health' => Str::slug($labels['health']),
];
}
/**
* Attention avant de modifier ceci, celà aura
* un impact sur l'affichage du site puisque
* les labels servent de clé primaire
* au modèle BreedingPage
*
* Les label sont utilisé pour les slug nottament
* mais aussi pour identifier le type de page cf values()
*
* @return array
*/
protected static function labels(): array
{
return [
'breeding' => __('L\'élevage des volailles'),
'job' => __('Le métier d\'éleveur de volailles'),
'food' => __('L\'alimentation des volailles'),
'health' => __('La santé des volailles')
];
}
}

View file

@ -1,23 +0,0 @@
<?php
namespace App\Enums;
use App\Traits\Enums\BaseEnum;
enum CkEditorConfigName: int
{
use BaseEnum;
case minimal = 1;
case basic = 2;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::minimal->name => 'minimal',
self::basic->name => 'basic',
];
}

View file

@ -2,22 +2,47 @@
namespace App\Enums;
use App\Traits\Enums\BaseEnum;
use Kwaadpepper\Enum\BaseEnumRoutable;
enum ContactFormCivility: int
/**
* @method static self m()
* @method static self mme()
*/
final class ContactFormCivility extends BaseEnumRoutable
{
use BaseEnum;
case m = 1;
case mme = 2;
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'm' => 1,
'mme' => 2
];
}
/**
* Optionnal labels definition.
* Enum labels
*
* @phpstan-ignore-next-line
* @return array
*/
private const LABELS = [
self::m->name => 'M',
self::mme->name => 'Mme',
];
protected static function labels(): array
{
return [
'mme' => __('Mme'),
'm' => __('M')
];
}
/**
* Output the value as a string
*
* @return string
*/
public function __toString(): string
{
return (string)$this->label;
}
}

View file

@ -2,154 +2,61 @@
namespace App\Enums;
use App\Traits\Enums\BaseEnum;
use Kwaadpepper\Enum\BaseEnumRoutable;
enum ContactFormType: int
/**
* @method static self none()
* @method static self abuse()
* @method static self complain()
* @method static self recipe()
* @method static self games()
* @method static self onepage()
*/
final class ContactFormType extends BaseEnumRoutable
{
use BaseEnum;
case none = 0;
case club = 1;
case complain = 3;
case games = 9;
case nl = 10;
/**
* Optionnal labels definition.
* Enum values
*
* @phpstan-ignore-next-line
* @return array
*/
private const LABELS = [
self::none->name => 'enums.contact-form-type.none.label',
self::complain->name => 'enums.contact-form-type.complain.label',
self::club->name => 'enums.contact-form-type.club.label',
self::games->name => 'enums.contact-form-type.games.label',
self::nl->name => 'enums.contact-form-type.nl.label',
];
protected static function values(): array
{
return [
'none' => 0,
'abuse' => 1,
// * special case passerelle
'complain' => 3,
'recipe' => 5,
'games' => 9,
// * special case page nl
'onepage' => 10,
];
}
/**
* Get the description.
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'none' => trans('Aucun'),
'abuse' => trans('Le Club des Gaulois et Les Départ’aimants'),
'complain' => __('Réclamation Produit'),
'recipe' => __('Les Recettes'),
'games' => __('Les Jeux'),
'onepage' => 'Used for one page'
];
}
/**
* Output the value as a string
*
* @return string
*/
public function description(): string
public function __toString(): string
{
return match ($this) {
self::none => trans('enums.contact-form-type.none.description'),
self::complain => trans('enums.contact-form-type.complain.description'),
self::club => trans('enums.contact-form-type.club.description'),
self::games => trans('enums.contact-form-type.games.description'),
default => '',
};
}
/**
* Get the picto src/alt.
*
* @return array
*/
public function picto(): array
{
return match ($this) {
self::complain => [
'src' => 'resources/assets/images/contact/exclamation.svg',
'alt' => 'enums.contact-form-type.misc.picto-exclamation-alt'
],
self::club,
self::games,
self::none => [
'src' => 'resources/assets/images/contact/question-mark.svg',
'alt' => 'enums.contact-form-type.misc.picto-question-mark-alt'
],
default => [
'src' => '',
'alt' => '',
],
};
}
/**
* Get all contact types except 'none'.
*
* @return array
*/
public static function getContactTypes(): array
{
if (request()->routeIs('fo.*.export')) {
return [
self::complain,
self::none,
];
}
return [
self::complain,
self::club,
self::games,
self::none,
];
}
/**
* Get all 'locales' contact types.
*
* @return array
*/
public static function getLocalesContactType(): array
{
return [
self::nl,
];
}
/**
* Check if the current subject has a file input.
*
* @return boolean
*/
public function hasFileInput(): bool
{
return match ($this) {
self::complain,
self::club,
self::games => true,
default => false,
};
}
// * CRM CUBJECTS
/**
* Get the CRM subject ID for the current enum case.
*
* @return ?string
*/
public function crmId(): ?string
{
return self::getCrmSubjects()[$this->name] ?? null;
}
/**
* Get all CRM subject IDs keyed by enum case name.
*
* @return array<string, string>
*/
public static function crmIds(): array
{
$subjects = self::getCrmSubjects();
$subjectIds = collect(self::cases())
->mapWithKeys(fn($case) => [$case->name => $subjects[$case->name] ?? null])
->all();
return array_filter($subjectIds, fn($v) => !is_null($v));
}
/**
* Get CRM subjects config as an array.
*
* @return array<string, string>
*/
private static function getCrmSubjects(): array
{
return json_decode(config('crm.subjects'), true) ?? [];
return (string)$this->label;
}
}

View file

@ -1,49 +0,0 @@
<?php
namespace App\Enums\Customers;
use App\Traits\Enums\BaseEnum;
use Illuminate\Support\Facades\Vite;
enum Civility: int
{
use BaseEnum;
case m = 1;
case mme = 2;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::m->name => 'Un poulet',
self::mme->name => 'Une poule',
];
/**
* Get picture
*
* @return string
*/
public function picture(): string
{
return match ($this) {
self::m => Vite::asset("resources/assets/images/club/game-points/chicken.png"),
self::mme => Vite::asset("resources/assets/images/club/game-points/hen.png"),
};
}
/**
* Get autocomplete
*
* @return string
*/
public function autoComplete(): string
{
return match ($this) {
self::m => 'Monsieur',
self::mme => 'Madame',
};
}
}

View file

@ -1,28 +0,0 @@
<?php
namespace App\Enums\Customers;
use App\Traits\Enums\BaseEnum;
enum LivingStatus: int
{
use BaseEnum;
case teenage = 1;
case youngAdult = 2;
case parent = 3;
case parentAlone = 4;
case elder = 5;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::teenage->name => 'Adolescent/Étudiant',
self::youngAdult->name => 'Jeune actif sans enfant',
self::parent->name => 'Parents',
self::parentAlone->name => 'Adulte sans enfant',
self::elder->name => 'Grand-parent',
];
}

View file

@ -0,0 +1,38 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self description()
* @method static self media()
*/
final class DansLesPresType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'description' => 0,
'media' => 1,
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'description' => __('La demarche en description'),
'media' => __('La demarche en media'),
];
}
}

77
app/Enums/Days.php Normal file
View file

@ -0,0 +1,77 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self none()
* @method static self mon()
* @method static self tue()
* @method static self wed()
* @method static self thu()
* @method static self fri()
* @method static self sat()
* @method static self sun()
*/
final class Days extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'none' => 0,
'mon' => 1,
'tue' => 1 << 1,
'wed' => 1 << 2,
'thu' => 1 << 3,
'fri' => 1 << 4,
'sat' => 1 << 5,
'sun' => 1 << 6,
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'none' => __('None'),
'mon' => __('Monday'),
'tue' => __('Tuesday'),
'wed' => __('Wednesday'),
'thu' => __('Thursday'),
'fri' => __('Friday'),
'sat' => __('Saturday'),
'sun' => __('Sunday')
];
}
/**
* Output the value as a string
*
* @return string
*/
public function __toString(): string
{
return (string)$this->label;
}
/**
* Checks if days contain this day
*
* @param integer $days
* @return boolean
*/
public function has(int $days)
{
return (bool)($this->value & $days);
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
abstract class Departaimant extends BaseEnumRoutable
{
/**
* Output the value as a string
*
* @return string
*/
public function __toString(): string
{
return (string)$this->label;
}
/**
* Get All departaimants
*
* @return array<Departaimant>
*/
public static function all(): array
{
$o = [];
foreach (static::toArray() as $value => $label) {
$o[] = static::make($value);
}
return $o;
}
}

View file

@ -0,0 +1,51 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self vintage()
* @method static self current()
*/
final class DepartaimantCollectionType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'vintage' => 0,
'current' => 1,
];
}
/**
* Enum label
*
* @return array
*/
protected static function labels(): array
{
return [
'vintage' => __('Collection Vintage'),
'current' => __('Collection Actuelle')
];
}
/**
* Json serialize implementation.
*
* @return array
*/
public function jsonSerialize(): array
{
return [
'value' => $this->value,
'label' => $this->label
];
}
}

View file

@ -0,0 +1,333 @@
<?php
namespace App\Enums;
/**
* @method static self ain()
* @method static self aisne()
* @method static self allier()
* @method static self alpesdehauteprovence()
* @method static self hautesalpes()
* @method static self alpesmaritimes()
* @method static self ardeche()
* @method static self ardennes()
* @method static self ariege()
* @method static self aube()
* @method static self aude()
* @method static self aveyron()
* @method static self bouchesdurhone()
* @method static self calvados()
* @method static self cantal()
* @method static self charente()
* @method static self charentemaritime()
* @method static self cher()
* @method static self correze()
* @method static self corsedusud()
* @method static self hautecorse()
* @method static self cotedor()
* @method static self cotesdarmor()
* @method static self creuse()
* @method static self dordogne()
* @method static self doubs()
* @method static self drome()
* @method static self eure()
* @method static self eureetloir()
* @method static self finistere()
* @method static self gard()
* @method static self hautegaronne()
* @method static self gers()
* @method static self gironde()
* @method static self herault()
* @method static self illeetvilaine()
* @method static self indre()
* @method static self indreetloire()
* @method static self isere()
* @method static self jura()
* @method static self landes()
* @method static self loiretcher()
* @method static self loire()
* @method static self hauteloire()
* @method static self loireatlantique()
* @method static self loiret()
* @method static self lot()
* @method static self lotetgaronne()
* @method static self lozere()
* @method static self maineetloire()
* @method static self manche()
* @method static self marne()
* @method static self hautemarne()
* @method static self mayenne()
* @method static self meurtheetmoselle()
* @method static self meuse()
* @method static self morbihan()
* @method static self moselle()
* @method static self nievre()
* @method static self nord()
* @method static self oise()
* @method static self orne()
* @method static self pasdecalais()
* @method static self puydedome()
* @method static self pyreneesatlantiques()
* @method static self hautespyrenees()
* @method static self pyreneesorientales()
* @method static self basrhin()
* @method static self hautrhin()
* @method static self rhone()
* @method static self hautesaone()
* @method static self saoneetloire()
* @method static self sarthe()
* @method static self savoie()
* @method static self hautesavoie()
* @method static self paris()
* @method static self seinemaritime()
* @method static self seineetmarne()
* @method static self yvelines()
* @method static self deuxsevres()
* @method static self somme()
* @method static self tarn()
* @method static self tarnetgaronne()
* @method static self var()
* @method static self vaucluse()
* @method static self vendee()
* @method static self vienne()
* @method static self hautevienne()
* @method static self vosges()
* @method static self yonne()
* @method static self territoiredebelfort()
* @method static self essonne()
* @method static self hautsdeseine()
* @method static self seinesaintdenis()
* @method static self valdemarne()
* @method static self valdoise()
* @method static self guadeloupe()
* @method static self martinique()
* @method static self guyane()
* @method static self lareunion()
* @method static self mayotte()
*/
final class DepartaimantCurrent extends Departaimant
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'ain' => '01',
'aisne' => '02',
'allier' => '03',
'alpesdehauteprovence' => '04',
'hautesalpes' => '05',
'alpesmaritimes' => '06',
'ardeche' => '07',
'ardennes' => '08',
'ariege' => '09',
'aube' => '10',
'aude' => '11',
'aveyron' => '12',
'bouchesdurhone' => '13',
'calvados' => '14',
'cantal' => '15',
'charente' => '16',
'charentemaritime' => '17',
'cher' => '18',
'correze' => '19',
'corsedusud' => '2A',
'hautecorse' => '2B',
'cotedor' => '21',
'cotesdarmor' => '22',
'creuse' => '23',
'dordogne' => '24',
'doubs' => '25',
'drome' => '26',
'eure' => '27',
'eureetloir' => '28',
'finistere' => '29',
'gard' => '30',
'hautegaronne' => '31',
'gers' => '32',
'gironde' => '33',
'herault' => '34',
'illeetvilaine' => '35',
'indre' => '36',
'indreetloire' => '37',
'isere' => '38',
'jura' => '39',
'landes' => '40',
'loiretcher' => '41',
'loire' => '42',
'hauteloire' => '43',
'loireatlantique' => '44',
'loiret' => '45',
'lot' => '46',
'lotetgaronne' => '47',
'lozere' => '48',
'maineetloire' => '49',
'manche' => '50',
'marne' => '51',
'hautemarne' => '52',
'mayenne' => '53',
'meurtheetmoselle' => '54',
'meuse' => '55',
'morbihan' => '56',
'moselle' => '57',
'nievre' => '58',
'nord' => '59',
'oise' => '60',
'orne' => '61',
'pasdecalais' => '62',
'puydedome' => '63',
'pyreneesatlantiques' => '64',
'hautespyrenees' => '65',
'pyreneesorientales' => '66',
'basrhin' => '67',
'hautrhin' => '68',
'rhone' => '69',
'hautesaone' => '70',
'saoneetloire' => '71',
'sarthe' => '72',
'savoie' => '73',
'hautesavoie' => '74',
'paris' => '75',
'seinemaritime' => '76',
'seineetmarne' => '77',
'yvelines' => '78',
'deuxsevres' => '79',
'somme' => '80',
'tarn' => '81',
'tarnetgaronne' => '82',
'var' => '83',
'vaucluse' => '84',
'vendee' => '85',
'vienne' => '86',
'hautevienne' => '87',
'vosges' => '88',
'yonne' => '89',
'territoiredebelfort' => '90',
'essonne' => '91',
'hautsdeseine' => '92',
'seinesaintdenis' => '93',
'valdemarne' => '94',
'valdoise' => '95',
'guadeloupe' => '971',
'martinique' => '972',
'guyane' => '973',
'lareunion' => '974',
'mayotte' => '976'
];
}
/**
* Enum label
*
* @return array
*/
protected static function labels(): array
{
return [
'ain' => 'Ain',
'aisne' => 'Aisne',
'allier' => 'Allier',
'alpesdehauteprovence' => 'Alpes-de-Haute-Provence',
'hautesalpes' => 'Hautes-alpes',
'alpesmaritimes' => 'Alpes-maritimes',
'ardeche' => 'Ardèche',
'ardennes' => 'Ardennes',
'ariege' => 'Ariège',
'aube' => 'Aube',
'aude' => 'Aude',
'aveyron' => 'Aveyron',
'bouchesdurhone' => 'Bouches-du-Rhône',
'calvados' => 'Calvados',
'cantal' => 'Cantal',
'charente' => 'Charente',
'charentemaritime' => 'Charente-maritime',
'cher' => 'Cher',
'correze' => 'Corrèze',
'corsedusud' => 'Corse-du-sud',
'hautecorse' => 'Haute-Corse',
'cotedor' => 'Côte-d\'Or',
'cotesdarmor' => 'Côtes-d\'Armor',
'creuse' => 'Creuse',
'dordogne' => 'Dordogne',
'doubs' => 'Doubs',
'drome' => 'Drôme',
'eure' => 'Eure',
'eureetloir' => 'Eure-et-loir',
'finistere' => 'Finistère',
'gard' => 'Gard',
'hautegaronne' => 'Haute-garonne',
'gers' => 'Gers',
'gironde' => 'Gironde',
'herault' => 'Hérault',
'illeetvilaine' => 'Ille-et-vilaine',
'indre' => 'Indre',
'indreetloire' => 'Indre-et-loire',
'isere' => 'Isère',
'jura' => 'Jura',
'landes' => 'Landes',
'loiretcher' => 'Loir-et-cher',
'loire' => 'Loire',
'hauteloire' => 'Haute-loire',
'loireatlantique' => 'Loire-atlantique',
'loiret' => 'Loiret',
'lot' => 'Lot',
'lotetgaronne' => 'Lot-et-garonne',
'lozere' => 'Lozère',
'maineetloire' => 'Maine-et-loire',
'manche' => 'Manche',
'marne' => 'Marne',
'hautemarne' => 'Haute-marne',
'mayenne' => 'Mayenne',
'meurtheetmoselle' => 'Meurthe-et-moselle',
'meuse' => 'Meuse',
'morbihan' => 'Morbihan',
'moselle' => 'Moselle',
'nievre' => 'Nièvre',
'nord' => 'Nord',
'oise' => 'Oise',
'orne' => 'Orne',
'pasdecalais' => 'Pas-de-calais',
'puydedome' => 'Puy-de-dôme',
'pyreneesatlantiques' => 'Pyrénées-atlantiques',
'hautespyrenees' => 'Hautes-Pyrénées',
'pyreneesorientales' => 'Pyrénées-orientales',
'basrhin' => 'Bas-rhin',
'hautrhin' => 'Haut-rhin',
'rhone' => 'Rhône',
'hautesaone' => 'Haute-saône',
'saoneetloire' => 'Saône-et-loire',
'sarthe' => 'Sarthe',
'savoie' => 'Savoie',
'hautesavoie' => 'Haute-savoie',
'paris' => 'Paris',
'seinemaritime' => 'Seine-maritime',
'seineetmarne' => 'Seine-et-marne',
'yvelines' => 'Yvelines',
'deuxsevres' => 'Deux-sèvres',
'somme' => 'Somme',
'tarn' => 'Tarn',
'tarnetgaronne' => 'Tarn-et-Garonne',
'var' => 'Var',
'vaucluse' => 'Vaucluse',
'vendee' => 'Vendée',
'vienne' => 'Vienne',
'hautevienne' => 'Haute-vienne',
'vosges' => 'Vosges',
'yonne' => 'Yonne',
'territoiredebelfort' => 'Territoire de belfort',
'essonne' => 'Essonne',
'hautsdeseine' => 'Hauts-de-seine',
'seinesaintdenis' => 'Seine-Saint-Denis',
'valdemarne' => 'Val-de-marne',
'valdoise' => 'Val-d\'Oise',
'guadeloupe' => 'Guadeloupe',
'martinique' => 'Martinique',
'guyane' => 'Guyane',
'lareunion' => 'La réunion',
'mayotte' => 'Mayotte'
];
}
}

View file

@ -0,0 +1,84 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self none()
* @method static self has()
* @method static self wants()
* @method static self gives()
*/
final class DepartaimantStatus extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'none' => 0,
'has' => 1,
'gives' => 2,
'wants' => 3,
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'none' => __('Non possédé'),
'has' => __('Je possède'),
'gives' => __("J'échange"),
'wants' => __('Je cherche'),
];
}
/**
* Output the value as a string
*
* @return string
*/
public function __toString(): string
{
return (string)$this->label;
}
/**
* To Array
*
* @return \Kwaadpepper\Enum\BaseEnum[]
*/
public static function toArray(): array
{
$array = [];
foreach (parent::toArray() as $enum) {
$array[$enum->getDefinition()] = [
'value' => $enum->value,
'label' => $enum->label
];
}
return $array;
}
/**
* Json serialize implementation.
*
* @return array
*/
public function jsonSerialize(): array
{
return [
'value' => $this->value,
'label' => \stripslashes($this->label)
];
}
}

View file

@ -0,0 +1,327 @@
<?php
namespace App\Enums;
/**
* @method static self ain()
* @method static self aisne()
* @method static self allier()
* @method static self alpesdehauteprovence()
* @method static self hautesalpes()
* @method static self alpesmaritimes()
* @method static self ardeche()
* @method static self ardennes()
* @method static self ariege()
* @method static self aube()
* @method static self aude()
* @method static self aveyron()
* @method static self bouchesdurhone()
* @method static self calvados()
* @method static self cantal()
* @method static self charente()
* @method static self charentemaritime()
* @method static self cher()
* @method static self correze()
* @method static self corsedusud()
* @method static self hautecorse()
* @method static self cotedor()
* @method static self cotesdarmor()
* @method static self creuse()
* @method static self dordogne()
* @method static self doubs()
* @method static self drome()
* @method static self eure()
* @method static self eureetloir()
* @method static self finistere()
* @method static self gard()
* @method static self hautegaronne()
* @method static self gers()
* @method static self gironde()
* @method static self herault()
* @method static self illeetvilaine()
* @method static self indre()
* @method static self indreetloire()
* @method static self isere()
* @method static self jura()
* @method static self landes()
* @method static self loiretcher()
* @method static self loire()
* @method static self hauteloire()
* @method static self loireatlantique()
* @method static self loiret()
* @method static self lot()
* @method static self lotetgaronne()
* @method static self lozere()
* @method static self maineetloire()
* @method static self manche()
* @method static self marne()
* @method static self hautemarne()
* @method static self mayenne()
* @method static self meurtheetmoselle()
* @method static self meuse()
* @method static self morbihan()
* @method static self moselle()
* @method static self nievre()
* @method static self nord()
* @method static self oise()
* @method static self orne()
* @method static self pasdecalais()
* @method static self puydedome()
* @method static self pyreneesatlantiques()
* @method static self hautespyrenees()
* @method static self pyreneesorientales()
* @method static self basrhin()
* @method static self hautrhin()
* @method static self rhone()
* @method static self hautesaone()
* @method static self saoneetloire()
* @method static self sarthe()
* @method static self savoie()
* @method static self hautesavoie()
* @method static self paris()
* @method static self seinemaritime()
* @method static self seineetmarne()
* @method static self yvelines()
* @method static self deuxsevres()
* @method static self somme()
* @method static self tarn()
* @method static self tarnetgaronne()
* @method static self var()
* @method static self vaucluse()
* @method static self vendee()
* @method static self vienne()
* @method static self hautevienne()
* @method static self vosges()
* @method static self yonne()
* @method static self territoiredebelfort()
* @method static self essonne()
* @method static self hautsdeseine()
* @method static self seinesaintdenis()
* @method static self valdemarne()
* @method static self valdoise()
* @method static self guadeloupeMartinique()
* @method static self guyane()
* @method static self lareunion()
*/
final class DepartaimantVintage extends Departaimant
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'ain' => '01',
'aisne' => '02',
'allier' => '03',
'alpesdehauteprovence' => '04',
'hautesalpes' => '05',
'alpesmaritimes' => '06',
'ardeche' => '07',
'ardennes' => '08',
'ariege' => '09',
'aube' => '10',
'aude' => '11',
'aveyron' => '12',
'bouchesdurhone' => '13',
'calvados' => '14',
'cantal' => '15',
'charente' => '16',
'charentemaritime' => '17',
'cher' => '18',
'correze' => '19',
'corsedusud' => '2A',
'hautecorse' => '2B',
'cotedor' => '21',
'cotesdarmor' => '22',
'creuse' => '23',
'dordogne' => '24',
'doubs' => '25',
'drome' => '26',
'eure' => '27',
'eureetloir' => '28',
'finistere' => '29',
'gard' => '30',
'hautegaronne' => '31',
'gers' => '32',
'gironde' => '33',
'herault' => '34',
'illeetvilaine' => '35',
'indre' => '36',
'indreetloire' => '37',
'isere' => '38',
'jura' => '39',
'landes' => '40',
'loiretcher' => '41',
'loire' => '42',
'hauteloire' => '43',
'loireatlantique' => '44',
'loiret' => '45',
'lot' => '46',
'lotetgaronne' => '47',
'lozere' => '48',
'maineetloire' => '49',
'manche' => '50',
'marne' => '51',
'hautemarne' => '52',
'mayenne' => '53',
'meurtheetmoselle' => '54',
'meuse' => '55',
'morbihan' => '56',
'moselle' => '57',
'nievre' => '58',
'nord' => '59',
'oise' => '60',
'orne' => '61',
'pasdecalais' => '62',
'puydedome' => '63',
'pyreneesatlantiques' => '64',
'hautespyrenees' => '65',
'pyreneesorientales' => '66',
'basrhin' => '67',
'hautrhin' => '68',
'rhone' => '69',
'hautesaone' => '70',
'saoneetloire' => '71',
'sarthe' => '72',
'savoie' => '73',
'hautesavoie' => '74',
'paris' => '75',
'seinemaritime' => '76',
'seineetmarne' => '77',
'yvelines' => '78',
'deuxsevres' => '79',
'somme' => '80',
'tarn' => '81',
'tarnetgaronne' => '82',
'var' => '83',
'vaucluse' => '84',
'vendee' => '85',
'vienne' => '86',
'hautevienne' => '87',
'vosges' => '88',
'yonne' => '89',
'territoiredebelfort' => '90',
'essonne' => '91',
'hautsdeseine' => '92',
'seinesaintdenis' => '93',
'valdemarne' => '94',
'valdoise' => '95',
'guadeloupeMartinique' => '971/972',
'guyane' => '973',
'lareunion' => '974',
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'ain' => 'Ain',
'aisne' => 'Aisne',
'allier' => 'Allier',
'alpesdehauteprovence' => 'Alpes-de-Haute-Provence',
'hautesalpes' => 'Hautes-alpes',
'alpesmaritimes' => 'Alpes-maritimes',
'ardeche' => 'Ardèche',
'ardennes' => 'Ardennes',
'ariege' => 'Ariège',
'aube' => 'Aube',
'aude' => 'Aude',
'aveyron' => 'Aveyron',
'bouchesdurhone' => 'Bouches-du-Rhône',
'calvados' => 'Calvados',
'cantal' => 'Cantal',
'charente' => 'Charente',
'charentemaritime' => 'Charente-maritime',
'cher' => 'Cher',
'correze' => 'Corrèze',
'corsedusud' => 'Corse-du-sud',
'hautecorse' => 'Haute-Corse',
'cotedor' => 'Côte-d\'Or',
'cotesdarmor' => 'Côtes-d\'Armor',
'creuse' => 'Creuse',
'dordogne' => 'Dordogne',
'doubs' => 'Doubs',
'drome' => 'Drôme',
'eure' => 'Eure',
'eureetloir' => 'Eure-et-loir',
'finistere' => 'Finistère',
'gard' => 'Gard',
'hautegaronne' => 'Haute-garonne',
'gers' => 'Gers',
'gironde' => 'Gironde',
'herault' => 'Hérault',
'illeetvilaine' => 'Ille-et-vilaine',
'indre' => 'Indre',
'indreetloire' => 'Indre-et-loire',
'isere' => 'Isère',
'jura' => 'Jura',
'landes' => 'Landes',
'loiretcher' => 'Loir-et-cher',
'loire' => 'Loire',
'hauteloire' => 'Haute-loire',
'loireatlantique' => 'Loire-atlantique',
'loiret' => 'Loiret',
'lot' => 'Lot',
'lotetgaronne' => 'Lot-et-garonne',
'lozere' => 'Lozère',
'maineetloire' => 'Maine-et-loire',
'manche' => 'Manche',
'marne' => 'Marne',
'hautemarne' => 'Haute-marne',
'mayenne' => 'Mayenne',
'meurtheetmoselle' => 'Meurthe-et-moselle',
'meuse' => 'Meuse',
'morbihan' => 'Morbihan',
'moselle' => 'Moselle',
'nievre' => 'Nièvre',
'nord' => 'Nord',
'oise' => 'Oise',
'orne' => 'Orne',
'pasdecalais' => 'Pas-de-calais',
'puydedome' => 'Puy-de-dôme',
'pyreneesatlantiques' => 'Pyrénées-atlantiques',
'hautespyrenees' => 'Hautes-Pyrénées',
'pyreneesorientales' => 'Pyrénées-orientales',
'basrhin' => 'Bas-rhin',
'hautrhin' => 'Haut-rhin',
'rhone' => 'Rhône',
'hautesaone' => 'Haute-saône',
'saoneetloire' => 'Saône-et-loire',
'sarthe' => 'Sarthe',
'savoie' => 'Savoie',
'hautesavoie' => 'Haute-savoie',
'paris' => 'Paris',
'seinemaritime' => 'Seine-maritime',
'seineetmarne' => 'Seine-et-marne',
'yvelines' => 'Yvelines',
'deuxsevres' => 'Deux-sèvres',
'somme' => 'Somme',
'tarn' => 'Tarn',
'tarnetgaronne' => 'Tarn-et-Garonne',
'var' => 'Var',
'vaucluse' => 'Vaucluse',
'vendee' => 'Vendée',
'vienne' => 'Vienne',
'hautevienne' => 'Haute-vienne',
'vosges' => 'Vosges',
'yonne' => 'Yonne',
'territoiredebelfort' => 'Territoire de belfort',
'essonne' => 'Essonne',
'hautsdeseine' => 'Hauts-de-seine',
'seinesaintdenis' => 'Seine-Saint-Denis',
'valdemarne' => 'Val-de-marne',
'valdoise' => 'Val-d\'Oise',
'guadeloupeMartinique' => 'Guadeloupe et Martinique',
'guyane' => 'Guyane',
'lareunion' => 'La réunion'
];
}
}

View file

@ -1,23 +0,0 @@
<?php
namespace App\Enums\Departaimants;
use App\Traits\Enums\BaseEnum;
enum DepartaimantCollectionType: string
{
use BaseEnum;
case vintage = '1';
case current = '2';
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::vintage->name => 'Collection Vintage',
self::current->name => 'Collection Actuelle',
];
}

View file

@ -1,207 +0,0 @@
<?php
namespace App\Enums\Departaimants;
use App\Traits\Enums\BaseEnum;
enum DepartaimantCurrent: string implements IDepartaimant
{
use BaseEnum;
case ain = '01';
case aisne = '02';
case allier = '03';
case alpesdehauteprovence = '04';
case hautesalpes = '05';
case alpesmaritimes = '06';
case ardeche = '07';
case ardennes = '08';
case ariege = '09';
case aube = '10';
case aude = '11';
case aveyron = '12';
case bouchesdurhone = '13';
case calvados = '14';
case cantal = '15';
case charente = '16';
case charentemaritime = '17';
case cher = '18';
case correze = '19';
case corsedusud = '2A';
case hautecorse = '2B';
case cotedor = '21';
case cotesdarmor = '22';
case creuse = '23';
case dordogne = '24';
case doubs = '25';
case drome = '26';
case eure = '27';
case eureetloir = '28';
case finistere = '29';
case gard = '30';
case hautegaronne = '31';
case gers = '32';
case gironde = '33';
case herault = '34';
case illeetvilaine = '35';
case indre = '36';
case indreetloire = '37';
case isere = '38';
case jura = '39';
case landes = '40';
case loiretcher = '41';
case loire = '42';
case hauteloire = '43';
case loireatlantique = '44';
case loiret = '45';
case lot = '46';
case lotetgaronne = '47';
case lozere = '48';
case maineetloire = '49';
case manche = '50';
case marne = '51';
case hautemarne = '52';
case mayenne = '53';
case meurtheetmoselle = '54';
case meuse = '55';
case morbihan = '56';
case moselle = '57';
case nievre = '58';
case nord = '59';
case oise = '60';
case orne = '61';
case pasdecalais = '62';
case puydedome = '63';
case pyreneesatlantiques = '64';
case hautespyrenees = '65';
case pyreneesorientales = '66';
case basrhin = '67';
case hautrhin = '68';
case rhone = '69';
case saoneetloire = '71';
case sarthe = '72';
case savoie = '73';
case hautesavoie = '74';
case seinemaritime = '76';
case seineetmarne = '77';
case deuxsevres = '79';
case somme = '80';
case tarn = '81';
case tarnetgaronne = '82';
case var = '83';
case vaucluse = '84';
case vendee = '85';
case vienne = '86';
case hautevienne = '87';
case vosges = '88';
case yonne = '89';
case territoiredebelfort = '90';
case essonne = '91';
case guadeloupe = '971';
case martinique = '972';
case guyane = '973';
case lareunion = '974';
case mayotte = '976';
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::ain->name => 'Ain',
self::aisne->name => 'Aisne',
self::allier->name => 'Allier',
self::alpesdehauteprovence->name => 'Alpes-de-Haute-Provence',
self::hautesalpes->name => 'Hautes-alpes',
self::alpesmaritimes->name => 'Alpes-maritimes',
self::ardeche->name => 'Ardèche',
self::ardennes->name => 'Ardennes',
self::ariege->name => 'Ariège',
self::aube->name => 'Aube',
self::aude->name => 'Aude',
self::aveyron->name => 'Aveyron',
self::bouchesdurhone->name => 'Bouches-du-Rhône',
self::calvados->name => 'Calvados',
self::cantal->name => 'Cantal',
self::charente->name => 'Charente',
self::charentemaritime->name => 'Charente-maritime',
self::cher->name => 'Cher',
self::correze->name => 'Corrèze',
self::corsedusud->name => 'Corse-du-sud',
self::hautecorse->name => 'Haute-Corse',
self::cotedor->name => 'Côte-d\'Or',
self::cotesdarmor->name => 'Côtes-d\'Armor',
self::creuse->name => 'Creuse',
self::dordogne->name => 'Dordogne',
self::doubs->name => 'Doubs',
self::drome->name => 'Drôme',
self::eure->name => 'Eure',
self::eureetloir->name => 'Eure-et-loir',
self::finistere->name => 'Finistère',
self::gard->name => 'Gard',
self::hautegaronne->name => 'Haute-garonne',
self::gers->name => 'Gers',
self::gironde->name => 'Gironde',
self::herault->name => 'Hérault',
self::illeetvilaine->name => 'Ille-et-vilaine',
self::indre->name => 'Indre',
self::indreetloire->name => 'Indre-et-loire',
self::isere->name => 'Isère',
self::jura->name => 'Jura',
self::landes->name => 'Landes',
self::loiretcher->name => 'Loir-et-cher',
self::loire->name => 'Loire',
self::hauteloire->name => 'Haute-loire',
self::loireatlantique->name => 'Loire-atlantique',
self::loiret->name => 'Loiret',
self::lot->name => 'Lot',
self::lotetgaronne->name => 'Lot-et-garonne',
self::lozere->name => 'Lozère',
self::maineetloire->name => 'Maine-et-loire',
self::manche->name => 'Manche',
self::marne->name => 'Marne',
self::hautemarne->name => 'Haute-marne',
self::mayenne->name => 'Mayenne',
self::meurtheetmoselle->name => 'Meurthe-et-moselle',
self::meuse->name => 'Meuse',
self::morbihan->name => 'Morbihan',
self::moselle->name => 'Moselle',
self::nievre->name => 'Nièvre',
self::nord->name => 'Nord',
self::oise->name => 'Oise',
self::orne->name => 'Orne',
self::pasdecalais->name => 'Pas-de-calais',
self::puydedome->name => 'Puy-de-dôme',
self::pyreneesatlantiques->name => 'Pyrénées-atlantiques',
self::hautespyrenees->name => 'Hautes-Pyrénées',
self::pyreneesorientales->name => 'Pyrénées-orientales',
self::basrhin->name => 'Bas-rhin',
self::hautrhin->name => 'Haut-rhin',
self::rhone->name => 'Rhône',
self::saoneetloire->name => 'Saône-et-loire',
self::sarthe->name => 'Sarthe',
self::savoie->name => 'Savoie',
self::hautesavoie->name => 'Haute-savoie',
self::seinemaritime->name => 'Seine-maritime',
self::seineetmarne->name => 'Seine-et-marne',
self::deuxsevres->name => 'Deux-sèvres',
self::somme->name => 'Somme',
self::tarn->name => 'Tarn',
self::tarnetgaronne->name => 'Tarn-et-Garonne',
self::var->name => 'Var',
self::vaucluse->name => 'Vaucluse',
self::vendee->name => 'Vendée',
self::vienne->name => 'Vienne',
self::hautevienne->name => 'Haute-vienne',
self::vosges->name => 'Vosges',
self::yonne->name => 'Yonne',
self::territoiredebelfort->name => 'Territoire de belfort',
self::essonne->name => 'Essonne',
self::guadeloupe->name => 'Guadeloupe',
self::martinique->name => 'Martinique',
self::guyane->name => 'Guyane',
self::lareunion->name => 'La réunion',
self::mayotte->name => 'Mayotte'
];
}

View file

@ -1,27 +0,0 @@
<?php
namespace App\Enums\Departaimants;
use App\Traits\Enums\BaseEnum;
enum DepartaimantStatus: int
{
use BaseEnum;
case none = 0;
case has = 1;
case gives = 2;
case wants = 3;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::none->name => 'Non possédé',
self::has->name => 'Mes magnets',
self::wants->name => 'Je cherche un magnet',
self::gives->name => 'J\'échange un magnet',
];
}

View file

@ -1,203 +0,0 @@
<?php
namespace App\Enums\Departaimants;
use App\Traits\Enums\BaseEnum;
enum DepartaimantVintage: string implements IDepartaimant
{
use BaseEnum;
case ain = '01';
case aisne = '02';
case allier = '03';
case alpesdehauteprovence = '04';
case hautesalpes = '05';
case alpesmaritimes = '06';
case ardeche = '07';
case ardennes = '08';
case ariege = '09';
case aube = '10';
case aude = '11';
case aveyron = '12';
case bouchesdurhone = '13';
case calvados = '14';
case cantal = '15';
case charente = '16';
case charentemaritime = '17';
case cher = '18';
case correze = '19';
case corsedusud = '2A';
case hautecorse = '2B';
case cotedor = '21';
case cotesdarmor = '22';
case creuse = '23';
case dordogne = '24';
case doubs = '25';
case drome = '26';
case eure = '27';
case eureetloir = '28';
case finistere = '29';
case gard = '30';
case hautegaronne = '31';
case gers = '32';
case gironde = '33';
case herault = '34';
case illeetvilaine = '35';
case indre = '36';
case indreetloire = '37';
case isere = '38';
case jura = '39';
case landes = '40';
case loiretcher = '41';
case loire = '42';
case hauteloire = '43';
case loireatlantique = '44';
case loiret = '45';
case lot = '46';
case lotetgaronne = '47';
case lozere = '48';
case maineetloire = '49';
case manche = '50';
case marne = '51';
case hautemarne = '52';
case mayenne = '53';
case meurtheetmoselle = '54';
case meuse = '55';
case morbihan = '56';
case moselle = '57';
case nievre = '58';
case nord = '59';
case oise = '60';
case orne = '61';
case pasdecalais = '62';
case puydedome = '63';
case pyreneesatlantiques = '64';
case hautespyrenees = '65';
case pyreneesorientales = '66';
case basrhin = '67';
case hautrhin = '68';
case rhone = '69';
case saoneetloire = '71';
case sarthe = '72';
case savoie = '73';
case hautesavoie = '74';
case seinemaritime = '76';
case seineetmarne = '77';
case deuxsevres = '79';
case somme = '80';
case tarn = '81';
case tarnetgaronne = '82';
case var = '83';
case vaucluse = '84';
case vendee = '85';
case vienne = '86';
case hautevienne = '87';
case vosges = '88';
case yonne = '89';
case territoiredebelfort = '90';
case essonne = '91';
case guadeloupeMartinique = '971/972';
case guyane = '973';
case lareunion = '974';
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::ain->name => 'Ain',
self::aisne->name => 'Aisne',
self::allier->name => 'Allier',
self::alpesdehauteprovence->name => 'Alpes-de-Haute-Provence',
self::hautesalpes->name => 'Hautes-alpes',
self::alpesmaritimes->name => 'Alpes-maritimes',
self::ardeche->name => 'Ardèche',
self::ardennes->name => 'Ardennes',
self::ariege->name => 'Ariège',
self::aube->name => 'Aube',
self::aude->name => 'Aude',
self::aveyron->name => 'Aveyron',
self::bouchesdurhone->name => 'Bouches-du-Rhône',
self::calvados->name => 'Calvados',
self::cantal->name => 'Cantal',
self::charente->name => 'Charente',
self::charentemaritime->name => 'Charente-maritime',
self::cher->name => 'Cher',
self::correze->name => 'Corrèze',
self::corsedusud->name => 'Corse-du-sud',
self::hautecorse->name => 'Haute-Corse',
self::cotedor->name => 'Côte-d\'Or',
self::cotesdarmor->name => 'Côtes-d\'Armor',
self::creuse->name => 'Creuse',
self::dordogne->name => 'Dordogne',
self::doubs->name => 'Doubs',
self::drome->name => 'Drôme',
self::eure->name => 'Eure',
self::eureetloir->name => 'Eure-et-loir',
self::finistere->name => 'Finistère',
self::gard->name => 'Gard',
self::hautegaronne->name => 'Haute-garonne',
self::gers->name => 'Gers',
self::gironde->name => 'Gironde',
self::herault->name => 'Hérault',
self::illeetvilaine->name => 'Ille-et-vilaine',
self::indre->name => 'Indre',
self::indreetloire->name => 'Indre-et-loire',
self::isere->name => 'Isère',
self::jura->name => 'Jura',
self::landes->name => 'Landes',
self::loiretcher->name => 'Loir-et-cher',
self::loire->name => 'Loire',
self::hauteloire->name => 'Haute-loire',
self::loireatlantique->name => 'Loire-atlantique',
self::loiret->name => 'Loiret',
self::lot->name => 'Lot',
self::lotetgaronne->name => 'Lot-et-garonne',
self::lozere->name => 'Lozère',
self::maineetloire->name => 'Maine-et-loire',
self::manche->name => 'Manche',
self::marne->name => 'Marne',
self::hautemarne->name => 'Haute-marne',
self::mayenne->name => 'Mayenne',
self::meurtheetmoselle->name => 'Meurthe-et-moselle',
self::meuse->name => 'Meuse',
self::morbihan->name => 'Morbihan',
self::moselle->name => 'Moselle',
self::nievre->name => 'Nièvre',
self::nord->name => 'Nord',
self::oise->name => 'Oise',
self::orne->name => 'Orne',
self::pasdecalais->name => 'Pas-de-calais',
self::puydedome->name => 'Puy-de-dôme',
self::pyreneesatlantiques->name => 'Pyrénées-atlantiques',
self::hautespyrenees->name => 'Hautes-Pyrénées',
self::pyreneesorientales->name => 'Pyrénées-orientales',
self::basrhin->name => 'Bas-rhin',
self::hautrhin->name => 'Haut-rhin',
self::rhone->name => 'Rhône',
self::saoneetloire->name => 'Saône-et-loire',
self::sarthe->name => 'Sarthe',
self::savoie->name => 'Savoie',
self::hautesavoie->name => 'Haute-savoie',
self::seinemaritime->name => 'Seine-maritime',
self::seineetmarne->name => 'Seine-et-marne',
self::deuxsevres->name => 'Deux-sèvres',
self::somme->name => 'Somme',
self::tarn->name => 'Tarn',
self::tarnetgaronne->name => 'Tarn-et-Garonne',
self::var->name => 'Var',
self::vaucluse->name => 'Vaucluse',
self::vendee->name => 'Vendée',
self::vienne->name => 'Vienne',
self::hautevienne->name => 'Haute-vienne',
self::vosges->name => 'Vosges',
self::yonne->name => 'Yonne',
self::territoiredebelfort->name => 'Territoire de belfort',
self::essonne->name => 'Essonne',
self::guadeloupeMartinique->name => 'Guadeloupe et Martinique',
self::guyane->name => 'Guyane',
self::lareunion->name => 'La réunion'
];
}

View file

@ -1,13 +0,0 @@
<?php
namespace App\Enums\Departaimants;
interface IDepartaimant
{
/**
* Get enum value.
*
* @return string|integer
*/
public function value(): string|int;
}

View file

@ -1,221 +0,0 @@
<?php
namespace App\Enums;
use App\Traits\Enums\BaseEnum;
enum Department: string
{
use BaseEnum;
case ain = '01';
case aisne = '02';
case allier = '03';
case alpesdehauteprovence = '04';
case hautesalpes = '05';
case alpesmaritimes = '06';
case ardeche = '07';
case ardennes = '08';
case ariege = '09';
case aube = '10';
case aude = '11';
case aveyron = '12';
case bouchesdurhone = '13';
case calvados = '14';
case cantal = '15';
case charente = '16';
case charentemaritime = '17';
case cher = '18';
case correze = '19';
case corsedusud = '2A';
case hautecorse = '2B';
case cotedor = '21';
case cotesdarmor = '22';
case creuse = '23';
case dordogne = '24';
case doubs = '25';
case drome = '26';
case eure = '27';
case eureetloir = '28';
case finistere = '29';
case gard = '30';
case hautegaronne = '31';
case gers = '32';
case gironde = '33';
case herault = '34';
case illeetvilaine = '35';
case indre = '36';
case indreetloire = '37';
case isere = '38';
case jura = '39';
case landes = '40';
case loiretcher = '41';
case loire = '42';
case hauteloire = '43';
case loireatlantique = '44';
case loiret = '45';
case lot = '46';
case lotetgaronne = '47';
case lozere = '48';
case maineetloire = '49';
case manche = '50';
case marne = '51';
case hautemarne = '52';
case mayenne = '53';
case meurtheetmoselle = '54';
case meuse = '55';
case morbihan = '56';
case moselle = '57';
case nievre = '58';
case nord = '59';
case oise = '60';
case orne = '61';
case pasdecalais = '62';
case puydedome = '63';
case pyreneesatlantiques = '64';
case hautespyrenees = '65';
case pyreneesorientales = '66';
case basrhin = '67';
case hautrhin = '68';
case rhone = '69';
case hautesaone = '70';
case saoneetloire = '71';
case sarthe = '72';
case savoie = '73';
case hautesavoie = '74';
case paris = '75';
case seinemaritime = '76';
case seineetmarne = '77';
case yvelines = '78';
case deuxsevres = '79';
case somme = '80';
case tarn = '81';
case tarnetgaronne = '82';
case var = '83';
case vaucluse = '84';
case vendee = '85';
case vienne = '86';
case hautevienne = '87';
case vosges = '88';
case yonne = '89';
case territoiredebelfort = '90';
case essonne = '91';
case hautsdeseine = '92';
case seinesaintdenis = '93';
case valdemarne = '94';
case valdoise = '95';
case guadeloupe = '971';
case martinique = '972';
case guyane = '973';
case lareunion = '974';
case mayotte = '976';
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::ain->name => 'Ain',
self::aisne->name => 'Aisne',
self::allier->name => 'Allier',
self::alpesdehauteprovence->name => 'Alpes-de-Haute-Provence',
self::hautesalpes->name => 'Hautes-alpes',
self::alpesmaritimes->name => 'Alpes-maritimes',
self::ardeche->name => 'Ardèche',
self::ardennes->name => 'Ardennes',
self::ariege->name => 'Ariège',
self::aube->name => 'Aube',
self::aude->name => 'Aude',
self::aveyron->name => 'Aveyron',
self::bouchesdurhone->name => 'Bouches-du-Rhône',
self::calvados->name => 'Calvados',
self::cantal->name => 'Cantal',
self::charente->name => 'Charente',
self::charentemaritime->name => 'Charente-maritime',
self::cher->name => 'Cher',
self::correze->name => 'Corrèze',
self::corsedusud->name => 'Corse-du-sud',
self::hautecorse->name => 'Haute-Corse',
self::cotedor->name => 'Côte-d\'Or',
self::cotesdarmor->name => 'Côtes-d\'Armor',
self::creuse->name => 'Creuse',
self::dordogne->name => 'Dordogne',
self::doubs->name => 'Doubs',
self::drome->name => 'Drôme',
self::eure->name => 'Eure',
self::eureetloir->name => 'Eure-et-loir',
self::finistere->name => 'Finistère',
self::gard->name => 'Gard',
self::hautegaronne->name => 'Haute-garonne',
self::gers->name => 'Gers',
self::gironde->name => 'Gironde',
self::herault->name => 'Hérault',
self::illeetvilaine->name => 'Ille-et-vilaine',
self::indre->name => 'Indre',
self::indreetloire->name => 'Indre-et-loire',
self::isere->name => 'Isère',
self::jura->name => 'Jura',
self::landes->name => 'Landes',
self::loiretcher->name => 'Loir-et-cher',
self::loire->name => 'Loire',
self::hauteloire->name => 'Haute-loire',
self::loireatlantique->name => 'Loire-atlantique',
self::loiret->name => 'Loiret',
self::lot->name => 'Lot',
self::lotetgaronne->name => 'Lot-et-garonne',
self::lozere->name => 'Lozère',
self::maineetloire->name => 'Maine-et-loire',
self::manche->name => 'Manche',
self::marne->name => 'Marne',
self::hautemarne->name => 'Haute-marne',
self::mayenne->name => 'Mayenne',
self::meurtheetmoselle->name => 'Meurthe-et-moselle',
self::meuse->name => 'Meuse',
self::morbihan->name => 'Morbihan',
self::moselle->name => 'Moselle',
self::nievre->name => 'Nièvre',
self::nord->name => 'Nord',
self::oise->name => 'Oise',
self::orne->name => 'Orne',
self::pasdecalais->name => 'Pas-de-calais',
self::puydedome->name => 'Puy-de-dôme',
self::pyreneesatlantiques->name => 'Pyrénées-atlantiques',
self::hautespyrenees->name => 'Hautes-Pyrénées',
self::pyreneesorientales->name => 'Pyrénées-orientales',
self::basrhin->name => 'Bas-rhin',
self::hautrhin->name => 'Haut-rhin',
self::rhone->name => 'Rhône',
self::hautesaone->name => 'Haute-saône',
self::saoneetloire->name => 'Saône-et-loire',
self::sarthe->name => 'Sarthe',
self::savoie->name => 'Savoie',
self::hautesavoie->name => 'Haute-savoie',
self::paris->name => 'Paris',
self::seinemaritime->name => 'Seine-maritime',
self::seineetmarne->name => 'Seine-et-marne',
self::yvelines->name => 'Yvelines',
self::deuxsevres->name => 'Deux-sèvres',
self::somme->name => 'Somme',
self::tarn->name => 'Tarn',
self::tarnetgaronne->name => 'Tarn-et-Garonne',
self::var->name => 'Var',
self::vaucluse->name => 'Vaucluse',
self::vendee->name => 'Vendée',
self::vienne->name => 'Vienne',
self::hautevienne->name => 'Haute-vienne',
self::vosges->name => 'Vosges',
self::yonne->name => 'Yonne',
self::territoiredebelfort->name => 'Territoire de belfort',
self::essonne->name => 'Essonne',
self::hautsdeseine->name => 'Hauts-de-seine',
self::seinesaintdenis->name => 'Seine-Saint-Denis',
self::valdemarne->name => 'Val-de-marne',
self::valdoise->name => 'Val-d\'Oise',
self::guadeloupe->name => 'Guadeloupe',
self::martinique->name => 'Martinique',
self::guyane->name => 'Guyane',
self::lareunion->name => 'La réunion',
self::mayotte->name => 'Mayotte'
];
}

View file

@ -0,0 +1,54 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self none()
* @method static self pending()
* @method static self no()
* @method static self yes()
*/
final class EleveurOcbStatus extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'none' => 0,
'pending' => 1,
'no' => 2,
'yes' => 3
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'none' => 'Non',
'pending' => 'En attente',
'no' => 'Réfusé',
'yes' => 'Valide'
];
}
/**
* Output the value as a string
*
* @return string
*/
public function __toString(): string
{
return (string)$this->label;
}
}

View file

@ -0,0 +1,47 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self bloc1()
* @method static self bloc2()
* @method static self bloc3()
* @method static self bloc4()
* @method static self bloc5()
*/
final class EngagementBlocType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'bloc1' => 0,
'bloc2' => 1,
'bloc3' => 2,
'bloc4' => 3,
'bloc5' => 4
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'bloc1' => __('Bloc 1'),
'bloc2' => __('Bloc 2 (mise en avant)'),
'bloc3' => __('Bloc 3'),
'bloc4' => __('Bloc 4 (bloc 3 inversé)'),
'bloc5' => __('Bloc 5 (info horizontale)')
];
}
}

View file

@ -0,0 +1,38 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self header()
* @method static self article()
*/
final class EngagementType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'header' => 0,
'article' => 1
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'header' => __('Entête'),
'article' => __('Article')
];
}
}

View file

@ -0,0 +1,25 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self portrait()
* @method static self ocbbreeder()
*/
final class GMapDataType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'portrait' => 0,
'ocbbreeder' => 1
];
}
}

View file

@ -1,27 +0,0 @@
<?php
namespace App\Enums\Games;
use App\Traits\Enums\BaseEnum;
enum GameForAge: int
{
use BaseEnum;
case from3To6 = 3;
case from6To9 = 6;
case from9To12 = 9;
case from12AndMore = 12;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::from3To6->name => '3 à 6 ans',
self::from6To9->name => '6 à 9 ans',
self::from9To12->name => '9 à 12 ans',
self::from12AndMore->name => '12 ans et plus',
];
}

View file

@ -1,128 +0,0 @@
<?php
namespace App\Enums\Games;
use App\Traits\Enums\BaseEnum;
use Illuminate\Support\Facades\Vite;
enum GamePointLevel: int
{
use BaseEnum;
case egg = 1;
case hatchedEgg = 2;
case chick = 3;
case hen = 4;
case chicken = 5;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::egg->name => 'oeuf',
self::hatchedEgg->name => 'oeuf éclos',
self::chick->name => 'poussin',
self::hen->name => 'poule',
self::chicken->name => 'poulet',
];
/**
* Point levels definition.
*/
private const LEVELS = [
self::egg->name => 0,
self::hatchedEgg->name => 50,
self::chick->name => 130,
self::hen->name => 230,
self::chicken->name => 1000,
];
/**
* Get Level
*
* @return integer
*/
public function level(): int
{
return self::LEVELS[$this->name];
}
/**
* Get picture
*
* @return string
*/
public function picture(): string
{
return Vite::asset("resources/assets/images/club/game-points/{$this->name()}.png");
}
/**
* Get enum Levels
*
* @return array<integer>
*/
public static function toLevels(): array
{
return self::LEVELS;
}
/**
* Get Level from point value
*
* @param integer $points
* @return \App\Enums\Games\GamePointLevel
*/
public static function fromPoints(int $points): self
{
$levels = array_reverse(self::all());
foreach ($levels as $level) {
if ($points >= $level->level()) {
return $level;
}
}
// * This should not happen while egg level is 0
return self::egg;
}
/**
* Next Level
*
* @param integer $points
* @return \App\Enums\Games\GamePointLevel|null
*/
public static function fromPointsNextLevel(int $points): self|null
{
$currentLevel = self::fromPoints($points);
return collect(self::all())
->filter(fn ($level) => $level->level() > $currentLevel->level())
->first();
}
/**
* Percent from points
*
* @param integer $points
* @return float
*/
public static function percentFromPoints(int $points): float
{
$levels = collect(self::toValues());
$level = self::fromPoints($points);
$nextLevel = self::fromPointsNextLevel($points);
if (!$nextLevel) {
return 100;
}
// * Bars between 2 levels
$ratio = 4;
$percentBetween2Levels = 100 / ($levels->count() - 1);
$adjustment = $percentBetween2Levels *
($nextLevel->level() - $points) / ($nextLevel->level() - $level->level());
return round((($level->value() * 100) / $levels->last()) + $percentBetween2Levels - $adjustment);
}
}

View file

@ -0,0 +1,44 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self actu()
* @method static self rsm()
* @method static self poultryPage()
* @method static self breedingPage()
*/
final class GeneralConfigType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'actu' => 1,
'rsm' => 2,
'poultryPage' => 3,
'breedingPage' => 4
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'actu' => __('Actualité'),
'rsm' => __('RSM Block'),
'poultryPage' => __('Pages Volaille'),
'breedingPage' => __('Pages Élevage des volailles')
];
}
}

38
app/Enums/GeoType.php Normal file
View file

@ -0,0 +1,38 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self exact()
* @method static self commune()
*/
final class GeoType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'exact' => 0,
'commune' => 1
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'exact' => __('Exacte'),
'commune' => __('Code commune')
];
}
}

View file

@ -1,23 +0,0 @@
<?php
namespace App\Enums\HistoricalMilestones;
use App\Traits\Enums\BaseEnum;
enum HistoricalMilestonePosition: int
{
use BaseEnum;
case topLeft = 1;
case topRight = 2;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::topLeft->name => 'Haut gauche',
self::topRight->name => "Haut droit",
];
}

View file

@ -2,26 +2,43 @@
namespace App\Enums;
use App\Traits\Enums\BaseEnum;
use Kwaadpepper\Enum\BaseEnumRoutable;
enum InputType: int
/**
* @method static self boolean()
* @method static self image()
* @method static self string()
* @method static self text()
* html autorisé
* @method static self url()
* @method static self imageArray()
* @method static self labelArray()
* @method static self dropdownArray()
* html autorisé
* @method static self miniblocArray()
* html autorisé
* @method static self videoVimeo()
*/
final class InputType extends BaseEnumRoutable
{
use BaseEnum;
case boolean = 1;
case dropdownArray = 2;
case email = 3;
case image = 4;
case imageArray = 5;
case labelArray = 6;
case miniblocArray = 7;
case number = 8;
case selectEnum = 9;
case password = 10;
case string = 11;
case text = 12;
case url = 13;
case videoVimeo = 14;
case videoYoutube = 15;
case video = 16;
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'boolean' => 0,
'image' => 1,
'string' => 2,
'text' => 3,
'url' => 4,
'imageArray' => 5,
'labelArray' => 6,
'dropdownArray' => 7,
'miniblocArray' => 8,
'videoVimeo' => 9
];
}
}

17
app/Enums/LogType.php Normal file
View file

@ -0,0 +1,17 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self debug()
* @method static self log()
* @method static self warning()
* @method static self info()
* @method static self error()
* @method static self critical()
*/
final class LogType extends BaseEnumRoutable
{
}

View file

@ -2,43 +2,62 @@
namespace App\Enums\Mercanet;
use App\Traits\Enums\BaseEnum;
use Kwaadpepper\Enum\BaseEnumRoutable;
enum PaymentResponse: int
/**
* @method static self ok()
* Situation normale suivie du processus normal d'affichage des pages de paiement.
* @method static self invalidIds()
* L’identifiant commerçant ou le contrat acquéreur sont invalides.
* @method static self invalidParameters()
* Les paramètres de la transaction sont invalides. Vérifiez les paramètres de la requête.
* @method static self canceled()
* Transaction annulée
* @method static self invalidRequestFormat()
* Le format de la requête est invalide.
* @method static self securityIssue()
* Problème de sécurité, par ex. le sceau calculé est incorrect.
* @method static self transactionAlreadyExists()
* La transaction existe déjà.
* @method static self expired()
* La transaction a expiré
* @method static self unreachableService()
* Service temporairement indisponible
* @method static self internalIssue()
* (interne à la classe) = Pb appel cUrl
*/
final class PaymentResponse extends BaseEnumRoutable
{
use BaseEnum;
protected static function values(): array
{
return [
'ok' => '00',
'invalidIds' => '03',
'invalidParameters' => '12',
'canceled' => '17',
'invalidRequestFormat' => '30',
'securityIssue' => '34',
'transactionAlreadyExists' => '94',
'expired' => '97',
'unreachableService' => '99',
'internalIssue' => '500'
];
}
case ok = 00;
case invalidIds = 03;
case invalidParameters = 12;
case canceled = 17;
case invalidRequestFormat = 30;
case securityIssue = 34;
case transactionAlreadyExists = 94;
case expired = 97;
case unreachableService = 99;
case internalIssue = 500;
/**
* Optionnal labels definition.
*
* @phpcs:disable Generic.Files.LineLength.TooLong
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::ok->name => 'Situation normale suivie du processus normal
d\'affichage des pages de paiement.',
self::invalidIds->name => 'L’identifiant commerçant ou le contrat acquéreur sont invalides.',
self::invalidParameters->name => 'Les paramètres de la transaction sont invalides. Vérifiez les
paramètres de la requête.',
self::canceled->name => 'Transaction annulée',
self::invalidRequestFormat->name => 'Le format de la requête est invalide.',
self::securityIssue->name => 'Problème de sécurité, par ex. le sceau calculé est incorrect.',
self::transactionAlreadyExists->name => 'La transaction existe déjà.',
self::expired->name => 'Délais expiré',
self::unreachableService->name => 'Service temporairement indisponible',
self::internalIssue->name => 'Erreur interne, eg: probleme appel CURL'
];
//phpcs:enable
// phpcs:disable Generic.Files.LineLength.TooLong
protected static function labels(): array
{
return [
'ok' => 'Situation normale suivie du processus normal d\'affichage des pages de paiement.',
'invalidIds' => 'L’identifiant commerçant ou le contrat acquéreur sont invalides.',
'invalidParameters' => 'Les paramètres de la transaction sont invalides. Vérifiez les paramètres de la requête.',
'canceled' => 'Transaction annulée',
'invalidRequestFormat' => 'Le format de la requête est invalide.',
'securityIssue' => 'Problème de sécurité, par ex. le sceau calculé est incorrect.',
'transactionAlreadyExists' => 'La transaction existe déjà.',
'expired' => 'Délais expiré',
'unreachableService' => 'Service temporairement indisponible',
'internalIssue' => 'Erreur interne, eg: probleme appel CURL'
];
}
}

View file

@ -2,34 +2,57 @@
namespace App\Enums\Mercanet;
use App\Traits\Enums\BaseEnum;
use Kwaadpepper\Enum\BaseEnumRoutable;
enum RedirectionStatusCode: int
/**
* @method static self redirect()
* Ce cas doit être suivi de la redirection de l’utilisateur vers la page de paiement.
*
* @method static self requestError03()
* @method static self requestError12()
* @method static self requestError30()
* @method static self requestError34()
* Ces codes d’erreur indiquent que la requête comporte un problème qui doit être résolu.
* Le processus de paiement doit alors être interrompu.
*
* @method static self referenceAlreadyUsed()
* La référence de transaction a déjà été utilisée.
* Le commerçant doit réessayer avec une autre référence de transaction.
*
* @method static self serviceDisponibiltyIssue()
* Problème de disponibilité du service de paiement. Le commerçant doit essayer de renvoyer la requête.
* Il convient d’utiliser une nouvelle référence de transaction pour éviter un code de réponse 94.
*
* @method static self internalIssue()
* (interne à la classe) = Pb appel cUrl
*/
final class RedirectionStatusCode extends BaseEnumRoutable
{
use BaseEnum;
protected static function values(): array
{
return [
'redirect' => 0,
'requestError03' => 3,
'requestError12' => 12,
'requestError30' => 30,
'requestError34' => 34,
'referenceAlreadyUsed' => 94,
'serviceDisponibiltyIssue' => 99,
'internalIssue' => 500
];
}
case redirect = 0;
case requestError03 = 3;
case requestError12 = 12;
case requestError30 = 30;
case requestError34 = 34;
case referenceAlreadyUsed = 94;
case serviceDisponibiltyIssue = 99;
case internalIssue = 500;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::redirect->name => 'Redirection Acceptée',
self::requestError03->name => 'Problème de request code 03',
self::requestError12->name => 'Problème de request code 12',
self::requestError30->name => 'Problème de request code 30',
self::requestError34->name => 'Problème de request code 34',
self::referenceAlreadyUsed->name => 'La référence de transaction à déja été utilisée',
self::serviceDisponibiltyIssue->name => 'Problème de disponibilité du service de paiement',
self::internalIssue->name => 'Erreur interne, eg: probleme appel CURL'
];
protected static function labels(): array
{
return [
'redirect' => 'Redirection Acceptée',
'requestError03' => 'Problème de request code 03',
'requestError12' => 'Problème de request code 12',
'requestError30' => 'Problème de request code 30',
'requestError34' => 'Problème de request code 34',
'referenceAlreadyUsed' => 'La référence de transaction à déja été utilisée',
'serviceDisponibiltyIssue' => 'Problème de disponibilité du service de paiement',
'internalIssue' => 'Erreur interne, eg: probleme appel CURL'
];
}
}

View file

@ -2,36 +2,57 @@
namespace App\Enums\Mercanet;
use App\Traits\Enums\BaseEnum;
use Kwaadpepper\Enum\BaseEnumRoutable;
enum TransactionResponse: int
/**
* @method static self accepted()
* Paiement accepté
* @method static self refused()
* Paiement refusé
* @method static self canceled()
* Paiement annulée
* @method static self fraud()
* Paiement refusé pour fraude
* @method static self maxReached()
* Paiement refusé pour nombre max essais atteint
* @method static self technicalIssue()
* Paiement refusé pour problème technique
* @method static self duplicate()
* Transaction dupliquée
* @method static self expired()
* Paiement expiré
* @method static self internalIssue()
* (interne à la classe) = Pb appel cUrl
*/
final class TransactionResponse extends BaseEnumRoutable
{
use BaseEnum;
protected static function values(): array
{
return [
'accepted' => 00,
'refused' => 05,
'canceled' => 17,
'fraud' => 34,
'maxReached' => 75,
'technicalIssue' => 90,
'duplicate' => 94,
'expired' => 97,
'internalIssue' => 500
];
}
case accepted = 00;
case refused = 05;
case canceled = 17;
case fraud = 34;
case maxReached = 75;
case technicalIssue = 90;
case duplicate = 94;
case expired = 97;
case internalIssue = 500;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::accepted->name => 'Paiement accepté',
self::refused->name => 'Paiement refusé',
self::canceled->name => 'Paiement annulé',
self::fraud->name => 'Paiement refusé pour fraude',
self::maxReached->name => 'Paiement refusé pour nombre max essais atteint',
self::technicalIssue->name => 'Paiement refusé pour problème technique',
self::duplicate->name => 'Transaction dupliquée',
self::expired->name => 'Paiement expiré',
self::internalIssue->name => 'Erreur interne, eg: probleme appel CURL'
];
protected static function labels(): array
{
return [
'accepted' => 'Paiement accepté',
'refused' => 'Paiement refusé',
'canceled' => 'Paiement annulé',
'fraud' => 'Paiement refusé pour fraude',
'maxReached' => 'Paiement refusé pour nombre max essais atteint',
'technicalIssue' => 'Paiement refusé pour problème technique',
'duplicate' => 'Transaction dupliquée',
'expired' => 'Paiement expiré',
'internalIssue' => 'Erreur interne, eg: probleme appel CURL'
];
}
}

View file

@ -1,49 +0,0 @@
<?php
namespace App\Enums\News;
use App\Traits\Enums\BaseEnum;
enum NewsClubTypeEnum: int
{
use BaseEnum;
case news = 1;
case survey = 2;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::news->name => 'Actualité',
self::survey->name => 'Sondage',
];
/**
* Get the icon.
*
* @return string
*/
public function icon(): string
{
return match ($this) {
self::news => 'fa-newspaper',
self::survey => 'fa-chart-simple',
};
}
/**
* Get the color.
*
* @return string
*/
public function color(): string
{
return match ($this) {
self::news => 'text-bg-tertiary',
self::survey => 'text-bg-warning',
};
}
}

View file

@ -2,28 +2,46 @@
namespace App\Enums;
use App\Traits\Enums\BaseEnum;
use Kwaadpepper\Enum\BaseEnumRoutable;
enum NotificationType: int
/**
* @method static self all()
* @method static self reduction()
* @method static self recipe()
* @method static self info()
* @method static self message()
*/
final class NotificationType extends BaseEnumRoutable
{
use BaseEnum;
case all = 1;
case reduction = 2;
case recipe = 3;
case info = 4;
case message = 5;
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'all' => 1,
'reduction' => 2,
'recipe' => 3,
'info' => 4,
'message' => 5
];
}
/**
* Optionnal labels definition.
* Enum labels
*
* @phpstan-ignore-next-line
* @return array
*/
private const LABELS = [
self::all->name => 'Toutes les notifications',
self::reduction->name => 'Les réductions',
self::recipe->name => 'Les recettes',
self::info->name => 'Les infos du club',
self::message->name => 'Les messages',
];
protected static function labels(): array
{
return [
'all' => __("Toutes les notifications"),
'reduction' => __("Les réductions"),
'recipe' => __("Les recettes"),
'info' => __("Les infos du club"),
'message' => __("Les message")
];
}
}

View file

@ -0,0 +1,52 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self bloc1()
* Text et dropdowns array
* @method static self bloc2()
* Text et label array
* @method static self bloc3()
* Big image et optional button
* @method static self bloc4()
* Big image et dropdowns array
* @method static self bloc5()
* Green encart
*/
final class NutritionBlocType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'bloc1' => 0,
'bloc2' => 1,
'bloc3' => 2,
'bloc4' => 3,
'bloc5' => 4
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'bloc1' => __('Bloc 1, (Text et dropdowns array)'),
'bloc2' => __('Bloc 2 (Text et label array)'),
'bloc3' => __('Bloc 3 (Big image et optional button'),
'bloc4' => __('Bloc 4 (Big image et dropdowns array)'),
'bloc5' => __('Bloc 5 (Green encart)')
];
}
}

View file

@ -0,0 +1,38 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self poultry()
* @method static self quality()
*/
final class NutritionPageType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'poultry' => 0,
'quality' => 1
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'poultry' => __('Page volaille'),
'quality' => __('Page qualité nutrition')
];
}
}

38
app/Enums/OCBType.php Normal file
View file

@ -0,0 +1,38 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self rabbit()
* @method static self poultry()
*/
final class OCBType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'rabbit' => 1,
'poultry' => 2
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'rabbit' => __('Lapin'),
'poultry' => __('Volaille')
];
}
}

46
app/Enums/OrderStatus.php Normal file
View file

@ -0,0 +1,46 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self waiting()
* @method static self failed()
* @method static self waitingCheck()
* @method static self sentCheck()
* @method static self payed()
*/
final class OrderStatus extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'waiting' => 0,
'failed' => 1,
'payed' => 2,
'waitingCheck' => 3,
'sentCheck' => 4
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'waiting' => __('En attente'),
'failed' => __('Échec'),
'payed' => __('Réglée'),
'sentCheck' => __('Par chèque bancaire')
];
}
}

38
app/Enums/OrderType.php Normal file
View file

@ -0,0 +1,38 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self cb()
* @method static self check()
*/
final class OrderType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'cb' => 0,
'check' => 1
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'cb' => __('Carte Bancaire'),
'check' => __('Chèque')
];
}
}

View file

@ -1,16 +0,0 @@
<?php
namespace App\Enums\Pagination;
use App\Traits\Enums\BaseEnum;
enum ItemsPerPaginationEnum: int
{
use BaseEnum;
case five = 5;
case twelve = 12;
case twentyfive = 25;
case fifty = 50;
case onehundred = 100;
}

View file

@ -0,0 +1,40 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self bloc1()
* Text seulement
* @method static self bloc2()
* Text et video
*/
final class PoultryBlocType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'bloc1' => 0,
'bloc2' => 1
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'bloc1' => __('Bloc 1, (Text seulement)'),
'bloc2' => __('Bloc 2 (Text et video)')
];
}
}

View file

@ -0,0 +1,38 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self engage()
* @method static self tracable()
*/
final class PoultryPageType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'engage' => 0,
'tracable' => 1
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'engage' => __('Page eleveurs 100% engagés'),
'tracable' => __('Page production 100% tracable')
];
}
}

View file

@ -0,0 +1,38 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self picture()
* @method static self video()
*/
final class PresentationType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'picture' => 0,
'video' => 1
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'picture' => __('Photo'),
'video' => __('Video'),
];
}
}

65
app/Enums/RangeColor.php Normal file
View file

@ -0,0 +1,65 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self color1()
* @method static self color2()
* @method static self color3()
* @method static self color4()
* @method static self color5()
* @method static self color6()
* @method static self color7()
* @method static self color8()
* @method static self color9()
* @method static self color10()
* @method static self color11()
*/
final class RangeColor extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'color1' => 'color-1',
'color2' => 'color-2',
'color3' => 'color-3',
'color4' => 'color-4',
'color5' => 'color-5',
'color6' => 'color-6',
'color7' => 'color-7',
'color8' => 'color-8',
'color9' => 'color-9',
'color10' => 'color-10',
'color11' => 'color-11'
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'color1' => 'Couleur 1',
'color2' => 'Couleur 2',
'color3' => 'Couleur 3',
'color4' => 'Couleur 4',
'color5' => 'Couleur 5',
'color6' => 'Couleur 6',
'color7' => 'Couleur 7',
'color8' => 'Couleur 8',
'color9' => 'Couleur 9',
'color10' => 'Couleur 10',
'color11' => 'Couleur 11'
];
}
}

View file

@ -1,17 +0,0 @@
<?php
namespace App\Enums;
use App\Traits\Enums\BaseEnum;
enum RatingEnum: int
{
use BaseEnum;
case inedible = 0;
case bad = 1;
case mid = 2;
case good = 3;
case great = 4;
case amazing = 5;
}

View file

@ -0,0 +1,54 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self veryeasy()
* @method static self easy()
* @method static self confirmed()
* @method static self expert()
*/
final class RecipeDifficulty extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'veryeasy' => 1,
'easy' => 2,
'confirmed' => 3,
'expert' => 4
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'veryeasy' => __('Très facile'),
'easy' => __('Facile'),
'confirmed' => __('Confirmé'),
'expert' => __('Expert'),
];
}
/**
* Output the value as a string
*
* @return string
*/
public function __toString(): string
{
return (string)$this->label;
}
}

View file

@ -0,0 +1,46 @@
<?php
namespace App\Enums;
use Illuminate\Support\Str;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self range()
* @method static self consumption()
* @method static self cooking()
* @method static self preparation()
*/
final class RecipeFilter extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
$labels = self::labels();
return [
'range' => Str::slug($labels['range']),
'consumption' => Str::slug($labels['consumption']),
'cooking' => Str::slug($labels['cooking']),
'preparation' => Str::slug($labels['preparation'])
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'range' => __('Gamme'),
'consumption' => __('Moment de consommation'),
'cooking' => __('Temps de cuisson'),
'preparation' => __('Temps de préparation')
];
}
}

View file

@ -0,0 +1,43 @@
<?php
namespace App\Enums;
use Illuminate\Support\Str;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self less15()
* @method static self between15and30()
* @method static self more30()
*/
final class RecipeFilterTimes extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
$labels = self::labels();
return [
'less15' => Str::slug($labels['less15']),
'between15and30' => Str::slug($labels['between15and30']),
'more30' => Str::slug($labels['more30']),
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'less15' => __('Moins de 15 minutes'),
'between15and30' => __('Entre 15 et 30 minutes'),
'more30' => __('Plus de 30 minutes'),
];
}
}

38
app/Enums/RecipeType.php Normal file
View file

@ -0,0 +1,38 @@
<?php
namespace App\Enums;
use Kwaadpepper\Enum\BaseEnumRoutable;
/**
* @method static self classic()
* @method static self video()
*/
final class RecipeType extends BaseEnumRoutable
{
/**
* Enum values
*
* @return array
*/
protected static function values(): array
{
return [
'classic' => 0,
'video' => 1
];
}
/**
* Enum labels
*
* @return array
*/
protected static function labels(): array
{
return [
'classic' => __('Classic'),
'video' => __('Video')
];
}
}

View file

@ -1,30 +0,0 @@
<?php
namespace App\Enums\Recipes;
use App\Traits\Enums\BaseEnum;
/**
* Will caracterise the setting row (ID)
*/
enum DifficultyEnum: int
{
use BaseEnum;
case very_easy = 1;
case easy = 2;
case confirmed = 3;
case expert = 4;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::very_easy->name => 'Très facile',
self::easy->name => 'Facile',
self::confirmed->name => 'Confirmé',
self::expert->name => 'Expert',
];
}

View file

@ -1,63 +0,0 @@
<?php
namespace App\Enums\Settings;
use App\Traits\Enums\BaseEnum;
enum MenuNodeType: int
{
use BaseEnum;
case ourProducts = 1;
case ourRecipes = 2;
case ourCommitments = 3;
case siteLogo = 4;
case breedings = 5;
case ourBrand = 6;
case recruitment = 7;
case news = 8;
case link = 9;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::ourProducts->name => 'Nos produits',
self::ourRecipes->name => 'Nos recettes',
self::ourCommitments->name => 'Nos engagments',
self::siteLogo->name => 'Logo du site',
self::breedings->name => 'Les élevages',
self::ourBrand->name => 'Notre marque',
self::recruitment->name => 'Recrutement',
self::news->name => 'Actus',
self::link->name => 'Lien',
];
/**
* Optionnal labels definition.
*/
private const ROUTENAMES = [
self::ourProducts->name => 'fo.products.index',
self::ourRecipes->name => 'fo.recipes.index',
self::ourCommitments->name => 'fo.commitments.brand',
self::siteLogo->name => 'fo.home.show',
self::breedings->name => 'fo.breeding.index',
self::ourBrand->name => 'fo.brand.story',
self::recruitment->name => 'fo.recruitment.show',
self::news->name => 'fo.news.index',
self::link->name => '',
];
/**
* Get Class
*
* @return string|null
*/
public function routeName(): ?string
{
return !empty(self::ROUTENAMES[$this->name]) ?
self::ROUTENAMES[$this->name] : null;
}
}

View file

@ -1,30 +0,0 @@
<?php
namespace App\Enums\Settings;
use App\Traits\Enums\BaseEnum;
/**
* Will caracterise the setting row (ID)
*/
enum SettingsType: int
{
use BaseEnum;
case mainMenu = 1;
case hotNews = 2;
case offersCount = 3;
case breederMap = 4;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::mainMenu->name => 'Menu principal',
self::hotNews->name => 'Infos chaudes',
self::offersCount->name => 'Total des offres de la marque',
self::breederMap->name => 'Carte des éleveurs',
];
}

View file

@ -1,23 +0,0 @@
<?php
namespace App\Enums\Shop;
use App\Traits\Enums\BaseEnum;
enum ContactFormCivility: int
{
use BaseEnum;
case m = 1;
case mme = 2;
/**
* Optionnal labels definition
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::m->name => 'M',
self::mme->name => 'Mme',
];
}

View file

@ -1,29 +0,0 @@
<?php
namespace App\Enums\Shop;
use App\Traits\Enums\BaseEnum;
enum OrderStatus: int
{
use BaseEnum;
case waiting = 1;
case failed = 2;
case payed = 3;
case waitingCheck = 4;
case sentCheck = 5;
/**
* Optionnal labels definition
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::waiting->name => 'En attente',
self::failed->name => 'Échec',
self::payed->name => 'Réglée',
self::waitingCheck->name => 'En attente du chèque bancaire',
self::sentCheck->name => 'Envoi du chèque bancaire',
];
}

View file

@ -1,23 +0,0 @@
<?php
namespace App\Enums\Shop;
use App\Traits\Enums\BaseEnum;
enum OrderType: int
{
use BaseEnum;
// case cb = 1;
case check = 2;
/**
* Optionnal labels definition
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
// self::cb->name => 'Carte Bancaire',
self::check->name => 'Chèque',
];
}

View file

@ -1,41 +0,0 @@
<?php
namespace App\Enums\Shop;
use App\Traits\Enums\BaseEnum;
enum SellItemsType: int
{
use BaseEnum;
case paper = 1;
case magnetic = 2;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::paper->name => 'Papier',
self::magnetic->name => 'Magnétique',
];
/**
* Custom added color definition.
*/
private const COLOR = [
self::paper->name => 'danger',
self::magnetic->name => 'warning',
];
/**
* Get color.
*
* @return string
*/
public function color(): string
{
return self::COLOR[$this->name];
}
}

View file

@ -1,78 +0,0 @@
<?php
namespace App\Enums;
use App\Traits\Enums\BaseEnum;
enum StaticPageType: int
{
use BaseEnum;
case contact = 1;
case legals = 2;
case confidentiality = 3;
case recruitment = 4;
case story = 5;
case saga = 6;
case recipes = 7;
case recipe = 8;
case products = 9;
case product = 10;
case home = 11;
case selling = 12;
case accessibility = 13;
case news = 14;
case social = 15;
case breedingPoultry = 16;
case breedingJob = 17;
case breedingFood = 18;
case breedingHealth = 19;
case search = 20;
case sitemap = 21;
case rules = 22;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::contact->name => 'Contact',
self::legals->name => 'Mentions légales et CGU',
self::confidentiality->name => 'Confidentialité',
self::recruitment->name => 'Recrutement',
self::story->name => 'Qui sommes-nous ?',
self::saga->name => 'Saga publicitaire',
self::recipes->name => 'Recettes',
self::recipe->name => 'Recette',
self::products->name => 'Produits',
self::product->name => 'Produit',
self::home->name => 'Accueil',
self::selling->name => 'Conditions générales de vente',
self::accessibility->name => 'Accessibilité',
self::news->name => 'Actualités',
self::social->name => 'Réseaux sociaux',
self::breedingPoultry->name => 'L\'élevage des volailles',
self::breedingJob->name => 'Le métier d\'éleveur de volailles',
self::breedingFood->name => 'L\'alimentation des volailles',
self::breedingHealth->name => 'La santé des volailles',
self::search->name => 'Recherche',
self::sitemap->name => 'Plan du site',
self::rules->name => 'Règlement du jeu',
];
/**
* Get all breeding pages.
*
* @return array
*/
public static function getBreedingPages(): array
{
return [
self::breedingPoultry,
self::breedingJob,
self::breedingFood,
self::breedingHealth,
];
}
}

View file

@ -1,25 +0,0 @@
<?php
namespace App\Enums\Theme;
use App\Traits\Enums\BaseEnum;
enum BootstrapThemeEnum: int
{
use BaseEnum;
case light = 1;
case dark = 2;
case beige = 3;
/**
* Optionnal labels definition
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::light->name => 'enums.bootstrap-theme.light',
self::dark->name => 'enums.bootstrap-theme.dark',
self::beige->name => 'enums.bootstrap-theme.beige',
];
}

View file

@ -1,25 +0,0 @@
<?php
namespace App\Enums\Users;
use App\Traits\Enums\BaseEnum;
enum RoleEnum: int
{
use BaseEnum;
case conceptor = 1;
case admin = 2;
case visitor = 99;
/**
* Optionnal labels definition.
*
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::conceptor->name => 'enums.user-role.conceptor',
self::admin->name => 'enums.user-role.admin',
self::visitor->name => 'enums.user-role.visitor',
];
}

View file

@ -2,9 +2,6 @@
namespace App\Events;
use App\Enums\NotificationType;
use App\Interfaces\Notifiable;
use App\Models\Customer;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
@ -15,19 +12,24 @@ class NewNotification
use InteractsWithSockets;
use SerializesModels;
public $type;
public $content;
public $model;
public $customer;
/**
* Create a new event instance.
*
* @param \App\Enums\NotificationType $type
* @param string $content
* @param \App\Interfaces\Notifiable $model
* @param \App\Models\Customer|null $customer
* @return void
*/
public function __construct(
public NotificationType $type,
public string $content,
public Notifiable $model,
public Customer|null $customer = null
) {
public function __construct($type, $content, $model, $customer = null)
{
$this->type = $type;
$this->content = $content;
$this->model = $model;
$this->customer = $customer;
}
}

Some files were not shown because too many files have changed in this diff Show more