Compare commits
265 commits
issue-1
...
bump-php-v
| Author | SHA1 | Date | |
|---|---|---|---|
| 45fe8c724e | |||
|
|
811c0baa1b | ||
|
|
a76535583b | ||
|
|
d859235666 | ||
|
|
8bfb5feaf7 | ||
|
|
d99ab17de7 | ||
|
|
cb148a5a94 | ||
|
|
14d96d997f | ||
|
|
11c087e7de | ||
|
|
851e4f1da4 | ||
|
|
b50b73892e | ||
|
|
963a08c86d | ||
|
|
cce8d7a132 | ||
|
|
d6e2f1cc08 | ||
|
|
9400869628 | ||
|
|
cef3afafe5 | ||
|
|
6735c71c83 | ||
|
|
2d6dd9ddb1 | ||
|
|
a6ebf6e3eb | ||
|
|
f1f624e49a | ||
|
|
28971b8dcf | ||
|
|
dcb34e6be2 | ||
|
|
63b88d199b | ||
|
|
44cf2527c6 | ||
|
|
ba75ec6fd1 | ||
|
|
69a10eca8b | ||
|
|
011fb79f87 | ||
|
|
17c906d80e | ||
|
|
75c69ee7fd | ||
|
|
b95399e858 | ||
|
|
4e51c11958 | ||
|
|
05275d60e1 | ||
|
|
78ab997b9a | ||
|
|
3dba8805eb | ||
|
|
f6f00649a8 | ||
|
|
69a1afd31a | ||
|
|
2d7c05f5c2 | ||
|
|
2834315284 | ||
|
|
7778f0f9d2 | ||
|
|
602866e566 | ||
|
|
82a543f0b9 | ||
|
|
3fca6f5f86 | ||
|
|
7a56a6c21f | ||
|
|
3125b606d9 | ||
|
|
f8df081283 | ||
|
|
b0ea30490e | ||
|
|
fb56c89261 | ||
|
|
b957344f48 | ||
|
|
0245216221 | ||
|
|
fb5c5b1b41 | ||
|
|
6343ac1373 | ||
|
|
36ed836407 | ||
|
|
ed25cd636c | ||
|
|
5a3adcee35 | ||
|
|
e6c8f7c569 | ||
|
|
7843272a85 | ||
|
|
092a2bfb42 | ||
|
|
fbe14f8084 | ||
|
|
51cdf980ad | ||
|
|
10b3925fd3 | ||
|
|
9827be3452 | ||
|
|
1de3d4e8f6 | ||
|
|
20c89d193b | ||
|
|
df8de94fb7 | ||
|
|
90ff411390 | ||
|
|
dc9db99529 | ||
|
|
c8ee55807a | ||
|
|
6a64305ce3 | ||
|
|
08613dac46 | ||
|
|
7b9d250675 | ||
|
|
a1d763b9d9 | ||
|
|
6afdc8f21f | ||
|
|
587b0be65e | ||
|
|
a87aaac416 | ||
|
|
972b64a177 | ||
|
|
e61a1aef88 | ||
|
|
07331a14b4 | ||
|
|
5dd5d9f770 | ||
|
|
b8e39f9089 | ||
|
|
f004168f53 | ||
|
|
8c25715aec | ||
|
|
c967623a52 | ||
|
|
7147d312e6 | ||
|
|
9e30563edc | ||
|
|
66cd2c22d5 | ||
|
|
0b7ab8f286 | ||
|
|
1d72e06837 | ||
|
|
998f9b3b61 | ||
|
|
a5f4bcf6f0 | ||
|
|
2e460f3988 | ||
|
|
189b72b663 | ||
|
|
0d6b38916d | ||
|
|
6d39a72983 | ||
|
|
8f310d8587 | ||
|
|
7a85417fbe | ||
|
|
111f90af0b | ||
|
|
b79da5998f | ||
|
|
52d5da9878 | ||
|
|
1027805548 | ||
|
|
1a277c9054 | ||
|
|
11062480ec | ||
|
|
27da7411bd | ||
|
|
ebc2f70bfb | ||
|
|
4e422dd356 | ||
|
|
7b502e2c6a | ||
|
|
82d0ba89c3 | ||
|
|
d3cbc848c7 | ||
|
|
57c324bf9a | ||
|
|
29b368458c | ||
|
|
a10d76c8d0 | ||
|
|
2ba5250b46 | ||
|
|
c92bf43a7d | ||
|
|
803782e815 | ||
|
|
12e1b30105 | ||
|
|
c36569b9c9 | ||
|
|
13ede7fc09 | ||
|
|
e68c6251ec | ||
|
|
eefe09efa6 | ||
|
|
9d81fda7e0 | ||
|
|
bda549cac2 | ||
|
|
1d8265b90e | ||
|
|
5d632e569b | ||
|
|
3d0e5d6c03 | ||
|
|
f12911f127 | ||
|
|
fd67271c53 | ||
|
|
bc3d0dfe7a | ||
|
|
b916211fe9 | ||
|
|
33fe38e353 | ||
|
|
637ff2dd84 | ||
|
|
42c771f434 | ||
|
|
0883d03786 | ||
|
|
3972e84378 | ||
|
|
b35c4bdf3f | ||
|
|
444e17335e | ||
|
|
97f6593f36 | ||
|
|
555cf941a9 | ||
|
|
fa7cc6a887 | ||
|
|
291d0ac60c | ||
|
|
9433bb21c0 | ||
|
|
8a8704191a | ||
|
|
c1e9dde51c | ||
|
|
fc6c884858 | ||
|
|
72482fac18 | ||
|
|
8a1f8df678 | ||
|
|
3998473f07 | ||
|
|
23b83d4639 | ||
|
|
64c692047e | ||
|
|
fb9d2425c5 | ||
|
|
4c244afa94 | ||
|
|
0fb2bfa488 | ||
|
|
8344220ed5 | ||
|
|
3e34e788f2 | ||
|
|
4719b93f5a | ||
|
|
e6f1b63283 | ||
|
|
f8f5c6fdd4 | ||
|
|
57180c23b2 | ||
|
|
0644eef68f | ||
|
|
dcd596012f | ||
|
|
49ae2bc1ec | ||
|
|
5e3c704628 | ||
|
|
62cc7ae39d | ||
|
|
c6d0df2209 | ||
|
|
70fa17409c | ||
|
|
6666e1e573 | ||
|
|
b0fdfff11e | ||
|
|
e2c4eb64ff | ||
|
|
6e2bca3eaa | ||
|
|
296e3dee3a | ||
|
|
057b98f9ef | ||
|
|
e67c58c543 | ||
|
|
93455afd0e | ||
|
|
3852b4b7a9 | ||
|
|
c50db4a73c | ||
|
|
e5832b1386 | ||
|
|
1bb537bd4b | ||
|
|
cd243bd7eb | ||
|
|
df1e62654b | ||
|
|
277ade6868 | ||
|
|
99adf12b0f | ||
|
|
7cc116efff | ||
|
|
dc614135e5 | ||
|
|
6b5fb68ff9 | ||
|
|
cb2c58b3cf | ||
|
|
c4c72c41f4 | ||
|
|
0ad61be8a6 | ||
|
|
d458bee81b | ||
|
|
d6a6ff6363 | ||
|
|
cd61f5d8aa | ||
|
|
5d79ccb0c6 | ||
|
|
0dddabc7ee | ||
|
|
c8e580beff | ||
|
|
ac7bac2430 | ||
|
|
83463059cc | ||
|
|
ba363730be | ||
|
|
42b38921bb | ||
|
|
d083b3d1a6 | ||
|
|
3b803e77a2 | ||
|
|
0e2a59cc8f | ||
|
|
55f6a188a8 | ||
|
|
c5d7bdfcca | ||
|
|
98b07a51e3 | ||
|
|
11a854aa69 | ||
|
|
b1714ede99 | ||
|
|
c5937df9a0 | ||
|
|
5e85c82e39 | ||
|
|
ad51dfee7b | ||
|
|
18a5c6eabf | ||
|
|
62f1d4757d | ||
|
|
9a38ea5645 | ||
|
|
60eb944748 | ||
|
|
4128416c80 | ||
|
|
f044b59e28 | ||
|
|
51a06d21fe | ||
|
|
20de622f48 | ||
|
|
cebe5a9e65 | ||
|
|
91c6d14a4d | ||
|
|
51557bf17f | ||
|
|
dd2d131c17 | ||
|
|
58e675792f | ||
|
|
2c9b662347 | ||
|
|
202fbcee66 | ||
|
|
e4f900b749 | ||
|
|
7fe54e6e76 | ||
|
|
50530a69b7 | ||
|
|
2d236ea8ef | ||
|
|
c50b8dcfa7 | ||
|
|
d2c75608d9 | ||
|
|
1c4048155b | ||
|
|
3a21f65f67 | ||
|
|
faf42b4f0f | ||
|
|
6803b8a716 | ||
|
|
e51216a2c3 | ||
|
|
d483ca2d53 | ||
|
|
82fdfd217a | ||
|
|
b5bb0fd62d | ||
|
|
96d77ae87f | ||
|
|
a62d469661 | ||
|
|
599e048df2 | ||
|
|
88e4c0a87f | ||
|
|
8acb18bd8e | ||
|
|
d9c07a6477 | ||
|
|
be6aaa4b95 | ||
|
|
1eed556783 | ||
|
|
3d202ff7e5 | ||
|
|
83c8e9bce8 | ||
|
|
c51c57d5d1 | ||
|
|
894dabf46e | ||
|
|
e77187e2e8 | ||
|
|
0a987fbcae | ||
|
|
c7f126ced2 | ||
|
|
14d150199c | ||
|
|
2468e8d1f8 | ||
|
|
93d0af62a3 | ||
|
|
f8c5472d99 | ||
|
|
e8d5cdd5a4 | ||
|
|
455d17c46c | ||
|
|
d2bdbdd568 | ||
|
|
f25d0c942e | ||
|
|
714223c81a | ||
|
|
06264e466c | ||
|
|
a857d08559 | ||
|
|
2b7caabd38 | ||
|
|
619bd1d471 | ||
|
|
a48ffe9e49 | ||
|
|
94932ff55a |
12
.env.example
|
|
@ -41,7 +41,7 @@ MAIL_FROM_NAME="Réghalal"
|
|||
MAIL_FROM_ADDRESS=no-reply@reghalal.com
|
||||
|
||||
# Contact
|
||||
MAIL_MKT=
|
||||
CONTACT_RECIPIENT=
|
||||
MAIL_PASSERELLE=
|
||||
|
||||
# Matomo
|
||||
|
|
@ -51,8 +51,11 @@ MATOMO_SITE_ID=
|
|||
GOOGLE_RECAPTCHA_PUBLIC=
|
||||
GOOGLE_RECAPTCHA_PRIVATE=
|
||||
|
||||
#LDC WEB API TOKEN
|
||||
LDCWEB_API_TOKEN=
|
||||
# UWIL ADMIN SECURE
|
||||
# - LIST SEPARATED WITH ',' (Required)
|
||||
UWIL_ADMIN_SECURE_CIDR_LIST=""
|
||||
# - LIST SEPARATED WITH ',' (Optional)
|
||||
UWIL_ADMIN_SECURE_CIDR_PROJECT_ALLOWED_LIST=""
|
||||
|
||||
#MESBR
|
||||
MESBR_REF_CAMP=
|
||||
|
|
@ -62,6 +65,9 @@ MESBR_ENDPOINT=
|
|||
CRM_ENDPOINT=
|
||||
CRM_TOKEN=
|
||||
CRM_PASSWORD=
|
||||
CRM_SUBJECT_GAME=
|
||||
CRM_SUBJECT_COMMERCIAL=
|
||||
CRM_SUBJECT_OTHER=
|
||||
|
||||
# IMPORT SOCIAL NETWORKS WP PLUGIN
|
||||
SOCIAL_NETWORKS=
|
||||
|
|
|
|||
11
.gitignore
vendored
|
|
@ -3,12 +3,14 @@ public/app/plugins/*
|
|||
!public/app/plugins/ldc-import-inco-products
|
||||
!public/app/plugins/.gitkeep
|
||||
public/app/mu-plugins/*/
|
||||
!public/app/mu-plugins/uwil-faq/
|
||||
public/app/themes/reghalal-theme/
|
||||
public/app/upgrade
|
||||
public/app/uploads/*
|
||||
!public/app/uploads/.gitkeep
|
||||
public/app/uploads/passerelle/archive/*
|
||||
!public/app/uploads/passerelle/archive/.gitkeep
|
||||
public/app/cache/*
|
||||
public/app/passerelle/*
|
||||
|
||||
# WordPress
|
||||
public/wp
|
||||
|
|
@ -24,9 +26,6 @@ public/wp
|
|||
# auth.json
|
||||
auth.json
|
||||
|
||||
# npmrc
|
||||
.npmrc
|
||||
|
||||
# Composer
|
||||
/vendor
|
||||
|
||||
|
|
@ -36,3 +35,7 @@ wp-cli.phar
|
|||
|
||||
# Dumps
|
||||
*.tar.gz
|
||||
|
||||
# .npmrc
|
||||
# .zshrc
|
||||
# .composer
|
||||
|
|
|
|||
|
|
@ -1,23 +1,22 @@
|
|||
include:
|
||||
- project: 'ldc-web/shared-ci'
|
||||
ref: 'main'
|
||||
file: 'security/composer.yml'
|
||||
- project: 'ldc-web/shared-ci'
|
||||
ref: 'main'
|
||||
file: 'build/composer-bedrock.yml'
|
||||
- project: 'ldc-web/shared-ci'
|
||||
ref: 'main'
|
||||
file: 'build/docker-bedrock.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: "security/composer.yml"
|
||||
- project: "ldc-web/shared-ci"
|
||||
ref: "main"
|
||||
file: "build/composer-bedrock-8.3.yml"
|
||||
- project: "ldc-web/shared-ci"
|
||||
ref: "main"
|
||||
file: "build/docker-bedrock.yml"
|
||||
- project: "ldc-web/shared-ci"
|
||||
ref: "main"
|
||||
file: "test/test.yml"
|
||||
- project: "ldc-web/shared-ci"
|
||||
ref: "main"
|
||||
file: "deploy/deploy.yml"
|
||||
|
||||
stages:
|
||||
- security
|
||||
- build
|
||||
- test
|
||||
- deploy
|
||||
- security
|
||||
- build
|
||||
- test
|
||||
- deploy
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/ldcweb-production-8.2:latest
|
||||
ARG PHP_8_5_TAG=latest
|
||||
|
||||
FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/ldcweb-production-8.5:${PHP_8_5_TAG}
|
||||
COPY --chown=www-data:www-data . /app/srcs
|
||||
USER root
|
||||
RUN chmod -R 755 /app/srcs/public/app/uploads
|
||||
USER www-data
|
||||
USER www-data
|
||||
|
|
|
|||
35
RGPD.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# RGPD
|
||||
|
||||
## Site
|
||||
|
||||
### En base de données
|
||||
|
||||
| Table | Colonne | Contenu | Utilisation |
|
||||
| ----- | ------- | ------- | ----------- |
|
||||
| ldc_wp_customer | hashcode | Identifiant client en CRM | Liaison avec la CRM |
|
||||
| ldc_wp_customer | email | Email du client | Connexion au club |
|
||||
| --- | --- | --- | --- |
|
||||
| wpjz_usermeta | meta_value | Des informations sur l'utilisateur, avec par exemple le nom et le prénom | Affichage sur le site ou BO |
|
||||
| --- | --- | --- | --- |
|
||||
| wpjz_users | user_email | Adresse mail | Identifiant, sert à la connexion au BO |
|
||||
|
||||
### Formulaire de contact (Passerelle et marketing)
|
||||
|
||||
| Donnée | Contenu |
|
||||
| ------ | ------- |
|
||||
| Civilité | Nom de la personne |
|
||||
| Nom | Nom de la personne |
|
||||
| Prénom | Prénom de la personne |
|
||||
| Téléphone | Numéro de téléphone de la personne |
|
||||
| Adresse E-mail | Adresse email de la personne |
|
||||
| Adresse | Adresse de la personne |
|
||||
| Ville | Ville de la personne |
|
||||
| Code postal | Code postal de la personne |
|
||||
|
||||
## Cookies
|
||||
|
||||
| Service | Utilité |
|
||||
| ------- | ------- |
|
||||
| Matomo | Mesure d'audience |
|
||||
| Google Recaptcha | Empêcher la soumission de formulaire par des robots |
|
||||
| Youtube | Visionner du contenu disponible sur la plateforme Youtube |
|
||||
|
|
@ -2,10 +2,6 @@
|
|||
"name": "uwil/reghalal",
|
||||
"description": "Reghalal website",
|
||||
"repositories": [
|
||||
{
|
||||
"type": "path",
|
||||
"url": "./crm-client-3.0.6"
|
||||
},
|
||||
{
|
||||
"type": "composer",
|
||||
"url": "https://lab.s-web.fr/api/v4/group/23/-/packages/composer/packages.json"
|
||||
|
|
@ -24,21 +20,21 @@
|
|||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=8.0",
|
||||
"php": ">=8.3",
|
||||
"composer/installers": "^2.2",
|
||||
"ldc/ldccrmv2client": "^3.0",
|
||||
"ldc/ldccrmv4client": "^4.0",
|
||||
"nesbot/carbon": "^3.7",
|
||||
"oscarotero/env": "^2.1",
|
||||
"roots/bedrock-autoloader": "^1.0",
|
||||
"roots/bedrock-disallow-indexing": "^2.0",
|
||||
"roots/wordpress": "6.3.1",
|
||||
"roots/wordpress": "^7.0",
|
||||
"roots/wp-config": "1.0.0",
|
||||
"roots/wp-password-bcrypt": "1.1.0",
|
||||
"uwil/admin-secure-wp": "^2.0",
|
||||
"uwil/admin-secure-wp": "^3.1",
|
||||
"uwil/import-social-networks-wp": "^2.0",
|
||||
"uwil/mesbr-wp": "^1.0",
|
||||
"uwil/reghalal-theme": "^1.0",
|
||||
"uwil/mesbr-wp": "^1.2",
|
||||
"uwil/reghalal-theme": "^1.6",
|
||||
"vlucas/phpdotenv": "^5.5",
|
||||
"wpackagist-plugin/wordpress-seo": "^21.2",
|
||||
"wpackagist-plugin/wordpress-seo": "^27.4",
|
||||
"wpackagist-plugin/wp-sitemap-page": "^1.9",
|
||||
"wpengine/advanced-custom-fields-pro": "*"
|
||||
},
|
||||
|
|
|
|||
2342
composer.lock
generated
|
|
@ -29,8 +29,6 @@ Config::define('SMTP_PASS', env('SMTP_PASS'));
|
|||
Config::define('SMTP_SECURE', env('SMTP_SECURE'));
|
||||
Config::define('MAIL_FROM_NAME', env('MAIL_FROM_NAME'));
|
||||
Config::define('MAIL_FROM_ADDRESS', env('MAIL_FROM_ADDRESS'));
|
||||
Config::define('MAIL_MKT', env('MAIL_MKT'));
|
||||
Config::define('MAIL_PASSERELLE', env('MAIL_PASSERELLE'));
|
||||
|
||||
/**
|
||||
* Contact
|
||||
|
|
@ -56,9 +54,10 @@ Config::define('GOOGLE_RECAPTCHA_PRIVATE', env('GOOGLE_RECAPTCHA_PRIVATE'));
|
|||
Config::define('MATOMO_SITE_ID', env('MATOMO_SITE_ID'));
|
||||
|
||||
/**
|
||||
* LDC Web API TOKEN
|
||||
* UWIL ADMIN SECURE
|
||||
*/
|
||||
Config::define('LDCWEB_API_TOKEN', env('LDCWEB_API_TOKEN'));
|
||||
Config::define('UWIL_ADMIN_SECURE_CIDR_LIST', env('UWIL_ADMIN_SECURE_CIDR_LIST', ''));
|
||||
Config::define('UWIL_ADMIN_SECURE_CIDR_PROJECT_ALLOWED_LIST', env('UWIL_ADMIN_SECURE_CIDR_PROJECT_ALLOWED_LIST', ''));
|
||||
|
||||
/**
|
||||
* CRM
|
||||
|
|
@ -66,3 +65,6 @@ Config::define('LDCWEB_API_TOKEN', env('LDCWEB_API_TOKEN'));
|
|||
Config::define('CRM_ENDPOINT', env('CRM_ENDPOINT'));
|
||||
Config::define('CRM_TOKEN', env('CRM_TOKEN'));
|
||||
Config::define('CRM_PASSWORD', env('CRM_PASSWORD'));
|
||||
Config::define('CRM_SUBJECT_GAME', env('CRM_SUBJECT_GAME'));
|
||||
Config::define('CRM_SUBJECT_COMMERCIAL', env('CRM_SUBJECT_COMMERCIAL'));
|
||||
Config::define('CRM_SUBJECT_OTHER', env('CRM_SUBJECT_OTHER'));
|
||||
|
|
|
|||
23
crons/PurgePasserelleArchive.php
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
use Carbon\Carbon;
|
||||
|
||||
/** @var WP_Filesystem_Direct $wp_filesystem */
|
||||
global $wp_filesystem;
|
||||
|
||||
require_once(ABSPATH . 'wp-load.php');
|
||||
require_once ABSPATH . 'wp-admin/includes/file.php';
|
||||
WP_Filesystem();
|
||||
|
||||
$archiveFolder = sprintf('%s/uploads/passerelle/archive', WP_CONTENT_DIR);
|
||||
|
||||
if (is_dir($archiveFolder)) {
|
||||
array_map(
|
||||
function ($value) use ($wp_filesystem) {
|
||||
if (Carbon::parse(filemtime($value))->lessThan(Carbon::now()->sub('3 months'))) {
|
||||
$wp_filesystem->delete($value);
|
||||
};
|
||||
},
|
||||
glob(sprintf('%s/*', $archiveFolder))
|
||||
);
|
||||
}
|
||||
|
|
@ -7,11 +7,11 @@ data:
|
|||
DB_NAME: "${APP_DB_NAME}"
|
||||
DB_USER: "${APP_DB_USER}"
|
||||
DB_PASSWORD: "${APP_DB_PASSWORD}"
|
||||
DB_HOST: "mariadb-service.common-services"
|
||||
DB_HOST: "${APP_DB_HOST}"
|
||||
DB_PREFIX: "wpjz_"
|
||||
WP_ENV: "${APP_WP_ENV}"
|
||||
WP_HOME: "https://www.${APP_DOMAIN}"
|
||||
WP_SITEURL: "https://www.${APP_DOMAIN}/wp"
|
||||
WP_HOME: "https://${REDIRECT}${APP_DOMAIN}"
|
||||
WP_SITEURL: "https://${REDIRECT}${APP_DOMAIN}/wp"
|
||||
AUTH_KEY: "${APP_AUTH_KEY}"
|
||||
SECURE_AUTH_KEY: "${APP_SECURE_AUTH_KEY}"
|
||||
LOGGED_IN_KEY: "${APP_LOGGED_IN_KEY}"
|
||||
|
|
@ -32,7 +32,6 @@ data:
|
|||
CONTACT_RECIPIENT: "${APP_CONTACT_RECIPIENT}"
|
||||
MAIL_PASSERELLE: "${APP_MAIL_PASSERELLE}"
|
||||
MATOMO_SITE_ID: "${APP_MATOMO_SITE_ID}"
|
||||
LDCWEB_API_TOKEN: "${APP_LDCWEB_API_TOKEN}"
|
||||
SOCIAL_NETWORKS: "${APP_SOCIAL_NETWORKS}"
|
||||
FACEBOOK_APP_ID: "${APP_FACEBOOK_APP_ID}"
|
||||
FACEBOOK_APP_SECRET: "${APP_FACEBOOK_APP_SECRET}"
|
||||
|
|
@ -47,6 +46,10 @@ data:
|
|||
CRM_ENDPOINT: "${APP_CRM_ENDPOINT}"
|
||||
CRM_TOKEN: "${APP_CRM_TOKEN}"
|
||||
CRM_PASSWORD: "${APP_CRM_PASSWORD}"
|
||||
CRM_SUBJECT_GAME: "${APP_CRM_SUBJECT_GAME}"
|
||||
CRM_SUBJECT_COMMERCIAL: "${APP_CRM_SUBJECT_COMMERCIAL}"
|
||||
CRM_SUBJECT_OTHER: "${APP_CRM_SUBJECT_OTHER}"
|
||||
UWIL_ADMIN_SECURE_CIDR_LIST: "${APP_GLOBAL_UWIL_ADMIN_SECURE_CIDR_LIST}"
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
|
|
@ -82,6 +85,13 @@ spec:
|
|||
envFrom:
|
||||
- configMapRef:
|
||||
name: ${CI_PROJECT_PATH_SLUG}-config-map
|
||||
resources:
|
||||
limits:
|
||||
cpu: "${APP_CI_CPU_LIMIT}"
|
||||
memory: "${APP_CI_MEMORY_LIMIT}"
|
||||
requests:
|
||||
cpu: "${APP_CI_CPU_REQUEST}"
|
||||
memory: "${APP_CI_MEMORY_REQUEST}"
|
||||
volumeMounts:
|
||||
- name: storage
|
||||
mountPath: /app/srcs/public/app/uploads
|
||||
|
|
@ -97,7 +107,6 @@ spec:
|
|||
persistentVolumeClaim:
|
||||
claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage
|
||||
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
|
|
@ -108,10 +117,10 @@ spec:
|
|||
app: ${CI_PROJECT_PATH_SLUG}-app
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 443
|
||||
targetPort: 80
|
||||
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: ${CI_PROJECT_PATH_SLUG}-ingress-route
|
||||
|
|
@ -120,30 +129,15 @@ spec:
|
|||
- web
|
||||
- websecure
|
||||
routes:
|
||||
- match: Host(`${APP_DOMAIN}`, `www.${APP_DOMAIN}`)
|
||||
- match: Host(`${APP_DOMAIN}`) || Host(`www.${APP_DOMAIN}`)
|
||||
kind: Rule
|
||||
services:
|
||||
- name: ${CI_PROJECT_PATH_SLUG}-service
|
||||
port: 80
|
||||
middlewares:
|
||||
- name: redirect-no-www-to-www
|
||||
namespace: common-services
|
||||
tls:
|
||||
secretName: $APP_DOMAIN
|
||||
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: $APP_DOMAIN
|
||||
spec:
|
||||
dnsNames:
|
||||
- $APP_DOMAIN
|
||||
- www.${APP_DOMAIN}
|
||||
secretName: $APP_DOMAIN
|
||||
issuerRef:
|
||||
name: $APP_CERT_ISSUER
|
||||
kind: ClusterIssuer
|
||||
secretName: ${CRT_TLS_NAME}
|
||||
|
||||
---
|
||||
apiVersion: batch/v1
|
||||
|
|
@ -152,6 +146,9 @@ metadata:
|
|||
name: ${CI_PROJECT_PATH_SLUG}-cronjob-sn
|
||||
spec:
|
||||
schedule: "30 4 * * *"
|
||||
successfulJobsHistoryLimit: 1
|
||||
failedJobsHistoryLimit: 1
|
||||
concurrencyPolicy: Forbid
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
|
|
@ -194,6 +191,9 @@ metadata:
|
|||
name: ${CI_PROJECT_PATH_SLUG}-cronjob-mbr
|
||||
spec:
|
||||
schedule: "30 4 * * *"
|
||||
successfulJobsHistoryLimit: 1
|
||||
failedJobsHistoryLimit: 1
|
||||
concurrencyPolicy: Forbid
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
|
|
@ -228,3 +228,48 @@ spec:
|
|||
fsGroup: 33
|
||||
fsGroupChangePolicy: "OnRootMismatch"
|
||||
restartPolicy: OnFailure
|
||||
|
||||
---
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: ${CI_PROJECT_PATH_SLUG}-cronjob-purge-archive
|
||||
spec:
|
||||
schedule: "0 0 * * 0"
|
||||
successfulJobsHistoryLimit: 1
|
||||
failedJobsHistoryLimit: 1
|
||||
concurrencyPolicy: Forbid
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
affinity:
|
||||
podAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
- labelSelector:
|
||||
matchExpressions:
|
||||
- key: app
|
||||
operator: In
|
||||
values:
|
||||
- ${CI_PROJECT_PATH_SLUG}-app
|
||||
topologyKey: "kubernetes.io/hostname"
|
||||
namespaces: [$KUBE_NAMESPACE]
|
||||
containers:
|
||||
- name: ${CI_PROJECT_PATH_SLUG}-scheduled
|
||||
image: $IMAGE_TAG
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- "php"
|
||||
args:
|
||||
- "crons/PurgePasserelleArchive.php"
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: ${CI_PROJECT_PATH_SLUG}-config-map
|
||||
imagePullSecrets:
|
||||
- name: docker-registry-credentials
|
||||
securityContext:
|
||||
runAsUser: 33
|
||||
runAsGroup: 33
|
||||
fsGroup: 33
|
||||
fsGroupChangePolicy: "OnRootMismatch"
|
||||
restartPolicy: OnFailure
|
||||
|
|
|
|||
14
production-resources.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: $APP_DOMAIN
|
||||
spec:
|
||||
dnsNames:
|
||||
- $APP_DOMAIN
|
||||
- www.${APP_DOMAIN}
|
||||
secretName: $APP_DOMAIN
|
||||
issuerRef:
|
||||
name: $APP_CERT_ISSUER
|
||||
kind: ClusterIssuer
|
||||
|
|
@ -12,4 +12,16 @@ RewriteCond %{REQUEST_FILENAME} !-d
|
|||
RewriteRule . /index.php [L]
|
||||
</IfModule>
|
||||
|
||||
# END WordPress
|
||||
# END WordPress
|
||||
|
||||
# Block WordPress xmlrpc.php requests
|
||||
<Files xmlrpc.php>
|
||||
order deny,allow
|
||||
deny from all
|
||||
</Files>
|
||||
|
||||
# Rules to disable WP Comments
|
||||
<files wp-comments-post.php>
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</files>
|
||||
BIN
public/app/languages/admin-fr_FR.mo
Normal file
16265
public/app/languages/admin-fr_FR.po
Normal file
BIN
public/app/languages/admin-network-fr_FR.mo
Normal file
1474
public/app/languages/admin-network-fr_FR.po
Normal file
BIN
public/app/languages/continents-cities-fr_FR.mo
Normal file
2124
public/app/languages/continents-cities-fr_FR.po
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"The suggested policy text has been copied to your clipboard.":["Le texte de la politique propos\u00e9e a \u00e9t\u00e9 copi\u00e9 dans votre presse-papiers."],"This user’s personal data export file was downloaded.":["L\u2019exportation des donn\u00e9es personnelles de ce compte a \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9e."],"This user’s personal data export link was sent.":["Le lien d\u2019exportation des donn\u00e9es personnelles de ce compte a \u00e9t\u00e9 envoy\u00e9."],"An error occurred while attempting to find and erase personal data.":["Une erreur est survenue lors de la tentative de trouver et de retirer des donn\u00e9es personnelles."],"Personal data was found for this user but some of the personal data found was not erased.":["Des donn\u00e9es personnelles ont \u00e9t\u00e9 trouv\u00e9es pour ce compte mais certaines donn\u00e9es personnelles trouv\u00e9es n\u2019ont pas \u00e9t\u00e9 supprim\u00e9es."],"All of the personal data found for this user was erased.":["Toutes les donn\u00e9es personnelles trouv\u00e9es pour ce compte ont \u00e9t\u00e9 supprim\u00e9es."],"Personal data was found for this user but was not erased.":["Des donn\u00e9es personnelles ont \u00e9t\u00e9 trouv\u00e9es pour ce compte mais n\u2019ont pas \u00e9t\u00e9 supprim\u00e9es."],"No personal data was found for this user.":["Aucune donn\u00e9e personnelle n\u2019a \u00e9t\u00e9 trouv\u00e9e pour ce compte."],"An error occurred while attempting to export personal data.":["Une erreur est survenue en tentant d\u2019exporter des donn\u00e9es personnelles."],"No personal data export file was generated.":["Aucun fichier d\u2019exportation de donn\u00e9es personnelles n\u2019a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9."]}},"comment":{"reference":"wp-admin\/js\/privacy-tools.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Editor tips":["Astuces de l\u2019\u00e9diteur"],"Disable tips":["D\u00e9sactiver les astuces"],"Got it":["J\u2019ai compris"],"See next tip":["Voir l\u2019astuce suivante"]}},"comment":{"reference":"wp-includes\/js\/dist\/nux.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"%1$s is deprecated since version %2$s! Use %3$s instead. Please consider writing more inclusive code.":["%1$s est obsol\u00e8te depuis la version %2$s\u00a0! Utilisez %3$s \u00e0 la place. Pensons \u00e0 \u00e9crire du code plus inclusif."]}},"comment":{"reference":"wp-admin\/js\/password-strength-meter.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"%s applied.":["%s appliqu\u00e9."],"%s removed.":["%s retir\u00e9."]}},"comment":{"reference":"wp-includes\/js\/dist\/rich-text.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Create pattern\/reusable block":["Cr\u00e9er une composition ou un bloc r\u00e9utilisable"],"Unsynced Pattern created: %s":["Composition non synchronis\u00e9e cr\u00e9\u00e9e\u00a0: %s"],"Synced Pattern created: %s":["Composition synchronis\u00e9e cr\u00e9\u00e9e\u00a0: %s"],"Untitled Pattern block":["Composition de blocs sans titre"],"Editing the pattern will update it anywhere it is used.":["La modification de cette composition mettra \u00e0 jour son contenu partout o\u00f9 elle est utilis\u00e9e."],"Synced":["Synchronis\u00e9e"],"My pattern":["Ma composition"],"Create pattern":["Cr\u00e9er une composition"],"Manage patterns":["G\u00e9rer les compositions"],"Detach pattern":["D\u00e9tacher la composition"],"Detach patterns":["D\u00e9tacher les compositions"],"Create":["Cr\u00e9er"],"Cancel":["Annuler"],"Name":["Nom"]}},"comment":{"reference":"wp-includes\/js\/dist\/reusable-blocks.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"%1$s Block. Row %2$d":["Bloc %1$s. Ligne %2$d"],"Design":["Apparence"],"%s Block":["Bloc %s"],"%1$s Block. %2$s":["Bloc %1$s. %2$s"],"%1$s Block. Column %2$d":["%1$s bloc. Colonne %2$d"],"%1$s Block. Column %2$d. %3$s":["Bloc %1$s. Colonne %2$d. %3$s"],"%1$s Block. Row %2$d. %3$s":["Bloc %1$s. Ligne %2$d. %3$s"],"Reusable blocks":["Blocs r\u00e9utilisables"],"Embeds":["Contenus embarqu\u00e9s"],"Text":["Texte"],"Widgets":["Widgets"],"Theme":["Th\u00e8me"],"Media":["M\u00e9dias"]}},"comment":{"reference":"wp-includes\/js\/dist\/blocks.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"You are probably offline.":["Vous \u00eates probablement hors ligne."],"Media upload failed. If this is a photo or a large image, please scale it down and try again.":["Le t\u00e9l\u00e9versement du m\u00e9dia a \u00e9chou\u00e9. S\u2019il s\u2019agit d\u2019une photo ou d\u2019une grande image, veuillez la redimensionner puis r\u00e9essayer."],"The response is not a valid JSON response.":["La r\u00e9ponse n\u2019est pas une r\u00e9ponse JSON valide."],"An unknown error occurred.":["Une erreur inconnue est survenue."]}},"comment":{"reference":"wp-includes\/js\/dist\/api-fetch.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Submitted on:":["Envoy\u00e9 le\u00a0:"],"%1$s %2$s, %3$s at %4$s:%5$s":["%2$s %1$s %3$s \u00e0 %4$sh%5$s"]}},"comment":{"reference":"wp-admin\/js\/comment.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Selected crop ratio exceeds the boundaries of the image. Try a different ratio.":["Le ratio de recadrage s\u00e9lectionn\u00e9 d\u00e9passe les limites de l\u2019image. Essayez un ratio diff\u00e9rent."],"Could not load the preview image.":["Impossible de charger l\u2019image de pr\u00e9visualisation."],"Could not load the preview image. Please reload the page and try again.":["Impossible de charger l\u2019image de pr\u00e9visualisation. Veuillez recharger la page et r\u00e9essayer."],"Image updated.":["Image mise \u00e0 jour."]}},"comment":{"reference":"wp-admin\/js\/image-edit.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Type a command or search":["Saisir une commande ou rechercher"],"Command palette":["Palette de commande"],"Open the command palette":["Ouvrir la palette de commandes"],"No results found.":["Aucun r\u00e9sultat."]}},"comment":{"reference":"wp-includes\/js\/dist\/commands.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Pattern imported successfully!":["Composition bien import\u00e9e\u00a0!"],"Invalid Pattern JSON file":["Fichier JSON de la composition invalide"],"button label\u0004Import":["Importer"],"Unknown error":["Erreur inconnue"],"Invalid JSON file":["Fichier JSON non valide"],"Import from JSON":["Importer depuis un JSON"],"File":["Fichier"]}},"comment":{"reference":"wp-includes\/js\/dist\/list-reusable-blocks.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Annotation":["Annotation"]}},"comment":{"reference":"wp-includes\/js\/dist\/annotations.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Notifications":["Notifications"]}},"comment":{"reference":"wp-includes\/js\/dist\/a11y.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Global Styles":["Styles globaux"],"Widget types":["Types de widget"],"Menu Item":["\u00c9l\u00e9ment de menu"],"Comment":["Commentaire"],"Widget areas":["Zone de widget"],"Site":["Site"],"Post Type":["Type de publication"],"Taxonomy":["Taxonomie"],"Menu Location":["Emplacements de menus"],"Menu":["Menu"],"User":["Compte"],"Base":["Base"],"Widgets":["Widgets"],"Site Title":["Titre du site"],"Themes":["Th\u00e8mes"],"(no title)":["(pas de titre)"],"Media":["M\u00e9dias"],"Plugins":["Extensions"]}},"comment":{"reference":"wp-includes\/js\/dist\/core-data.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Unavailable":["Indisponible"],"No details available":["Aucun d\u00e9tail disponible"],"A test is unavailable":["Un test n\u2019est pas disponible"],"All site health tests have finished running. There are items that should be addressed, and the results are now available on the page.":["Tous les tests de sant\u00e9 du site ont fini de tourner. Il y a des \u00e9l\u00e9ments qui devraient \u00eatre pris en charge, et les r\u00e9sultats sont maintenant disponible sur cette page."],"Should be improved":["Peut \u00eatre am\u00e9lior\u00e9"],"Good":["Bien"],"%s critical issue":["%s probl\u00e8me critique","%s probl\u00e8mes critiques"],"%s item with no issues detected":["%s \u00e9l\u00e9ment sans probl\u00e8me d\u00e9tect\u00e9","%s \u00e9l\u00e9ments sans probl\u00e8me d\u00e9tect\u00e9s"],"%s recommended improvement":["%s am\u00e9lioration recommand\u00e9e","%s am\u00e9liorations recommand\u00e9es"],"Site information has been copied to your clipboard.":["Les informations du site ont \u00e9t\u00e9 copi\u00e9es dans le presse-papier."],"All site health tests have finished running. Your site is looking good, and the results are now available on the page.":["Les v\u00e9rifications de sant\u00e9 sont termin\u00e9es. Votre site a bonne mine, et les r\u00e9sultats sont maintenant disponibles sur la page."],"All site health tests have finished running.":["Tous les tests de v\u00e9rification de sant\u00e9 du site sont termin\u00e9s."],"Please wait...":["Veuillez patienter\u2026"]}},"comment":{"reference":"wp-admin\/js\/site-health.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Use as featured image":["Utiliser comme image mise en avant"],"Saving\u2026":["Enregistrement\u2026"],"Could not set that as the thumbnail image. Try a different attachment.":["Impossible de s\u2019en servir comme miniature. Essayez un autre fichier joint."],"Done":["Termin\u00e9"]}},"comment":{"reference":"wp-admin\/js\/set-post-thumbnail.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Drag boxes here":["Glissez les blocs ici"],"Add boxes from the Screen Options menu":["Ajouter des blocs depuis le menu d\u2019options de l\u2019\u00e9cran"],"The boxes order has been saved.":["L\u2019ordre des boites a \u00e9t\u00e9 enregistr\u00e9."],"The box is on the last position":["La boite est en derni\u00e8re position"],"The box is on the first position":["La boite est en premi\u00e8re position"]}},"comment":{"reference":"wp-admin\/js\/postbox.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Widget has been added to the selected sidebar":["Le widget a \u00e9t\u00e9 ajout\u00e9 \u00e0 la colonne lat\u00e9rale s\u00e9lectionn\u00e9e"],"Saved":["Enregistr\u00e9"],"The changes you made will be lost if you navigate away from this page.":["Les modifications que vous avez faites seront perdues si vous changez de page."],"Save":["Enregistrer"]}},"comment":{"reference":"wp-admin\/js\/widgets.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"All application passwords revoked.":["Tous les mots de passe d\u2019application ont \u00e9t\u00e9 r\u00e9voqu\u00e9s."],"Are you sure you want to revoke all passwords? This action cannot be undone.":["Confirmez-vous la r\u00e9vocation de tous les mots de passe\u00a0? Cette action ne peut \u00eatre annul\u00e9e."],"Application password revoked.":["Mot de passe d\u2019application r\u00e9voqu\u00e9."],"Are you sure you want to revoke this password? This action cannot be undone.":["Confirmez-vous la r\u00e9vocation de ce mot de passe\u00a0? Cette action ne peut \u00eatre annul\u00e9e."],"Dismiss this notice.":["Ignorer cette notification."]}},"comment":{"reference":"wp-admin\/js\/application-passwords.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"URL Slug":["Slug de l\u2019URL"],"Permalink saved":["Permalien enregistr\u00e9"],"Published on:":["Publi\u00e9 le\u00a0:"],"Publish on:":["Publi\u00e9 le\u00a0:"],"Schedule for:":["Planifier pour\u00a0:"],"Saving Draft\u2026":["Enregistrement du brouillon\u2026"],"No more comments found.":["Aucun autre commentaire trouv\u00e9."],"Show more comments":["Afficher plus de commentaires"],"post action\/button label\u0004Schedule":["Planifier"],"%1$s %2$s, %3$s at %4$s:%5$s":["%2$s %1$s %3$s \u00e0 %4$sh%5$s"],"Public, Sticky":["Public, \u00e9pingl\u00e9"],"Privately Published":["Mis en ligne en priv\u00e9"],"Save as Pending":["Mettre en attente"],"Password Protected":["Prot\u00e9g\u00e9 par mot de passe"],"The file URL has been copied to your clipboard":["L\u2019URL du fichier a \u00e9t\u00e9 copi\u00e9e dans votre presse-papier"],"Could not set that as the thumbnail image. Try a different attachment.":["Impossible de s\u2019en servir comme miniature. Essayez un autre fichier joint."],"The changes you made will be lost if you navigate away from this page.":["Les modifications que vous avez faites seront perdues si vous changez de page."],"Update":["Mettre \u00e0 jour"],"Public":["Publique"],"Private":["Priv\u00e9e"],"OK":["OK"],"Save Draft":["Enregistrer le brouillon"],"Cancel":["Annuler"],"Publish":["Publier"],"Published":["Publi\u00e9"]}},"comment":{"reference":"wp-admin\/js\/post.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Are you sure you want to do this?\nThe comment changes you made will be lost.":["Voulez-vous vraiment faire cela\u00a0?\nLes modifications apport\u00e9es au commentaire seront perdues."],"Are you sure you want to edit this comment?\nThe changes you made will be lost.":["Confirmez-vous la modification de ce commentaire\u00a0?\nLes modifications que vous y avez apport\u00e9es seront perdues."],"Approve and Reply":["Approuver et r\u00e9pondre"],"Comments (%s)":["Commentaires (%s)"],"Reply":["R\u00e9pondre"],"Comments":["Commentaires"]}},"comment":{"reference":"wp-admin\/js\/edit-comments.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Preference activated - %s":["Pr\u00e9f\u00e9rence activ\u00e9e - %s"],"Preference deactivated - %s":["Pr\u00e9f\u00e9rence d\u00e9sactiv\u00e9e - %s"]}},"comment":{"reference":"wp-includes\/js\/dist\/preferences.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Text direction":["Direction du texte"],"A valid language attribute, like \"en\" or \"fr\".":["Un attribut de langue valide, comme \u00ab\u00a0en\u00a0\u00bb ou \u00ab\u00a0fr\u00a0\u00bb."],"Clear Unknown Formatting":["Effacer le formatage inconnu"],"Create page: <mark>%s<\/mark>":["Cr\u00e9er une page\u00a0: <mark>%s<\/mark>"],"Highlight":["Mettre en \u00e9vidence"],"Keyboard input":["Saisie au clavier"],"Inline code":["Code en ligne"],"Link edited.":["Lien modifi\u00e9."],"Link removed.":["Lien retir\u00e9."],"Inline image":["Image en ligne"],"media":["m\u00e9dia"],"photo":["photo"],"Warning: the link has been inserted but may have errors. Please test it.":["Attention\u00a0: le lien a bien \u00e9t\u00e9 ins\u00e9r\u00e9 mais peut contenir des erreurs. Veuillez le tester."],"Link inserted.":["Lien ins\u00e9r\u00e9."],"Left to right":["De gauche \u00e0 droite"],"Right to left":["De droite \u00e0 gauche"],"Link":["Lien"],"Background":["Arri\u00e8re-plan"],"Superscript":["Exposant"],"Subscript":["Indice"],"Unlink":["Supprimer le lien"],"Strikethrough":["Barrer"],"Underline":["Souligner"],"Italic":["Italique"],"Bold":["Gras"],"Language":["Langue"],"Text":["Texte"],"Width":["Largeur"],"Apply":["Appliquer"]}},"comment":{"reference":"wp-includes\/js\/dist\/format-library.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Create a classic widget layout with a title that\u2019s styled by your theme for your widget areas.":["Cr\u00e9ez une mise en page de widget classique avec un titre mis en forme par votre th\u00e8me pour vos zones de widgets."],"Widget Group":["Groupe de widget"],"The \"%s\" block was affected by errors and may not function properly. Check the developer tools for more details.":["Le bloc \u00ab\u00a0%s\u00a0\u00bb a \u00e9t\u00e9 affect\u00e9 par des erreurs et peut ne pas fonctionner correctement. V\u00e9rifiez les outils de d\u00e9veloppement pour obtenir plus de d\u00e9tails."],"Move to widget area":["D\u00e9placer vers la zone des widgets"],"Widget is missing.":["Widget manquant."],"No preview available.":["Aucun aper\u00e7u disponible."],"Legacy Widget Preview":["Aper\u00e7u de l\u2019ancien widget"],"Select widget":["S\u00e9lectionner le widget"],"Convert to blocks":["Convertir en blocs"],"Move to":["D\u00e9placer vers"],"Legacy Widget":["Ancien widget"],"Select a legacy widget to display:":["S\u00e9lectionner un ancien widget pour l\u2019afficher\u00a0:"],"There are no widgets available.":["Il n\u2019y a aucun widget disponible."],"Save":["Enregistrer"],"Title":["Titre"]}},"comment":{"reference":"wp-includes\/js\/dist\/widgets.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"The file URL has been copied to your clipboard":["L\u2019URL du fichier a \u00e9t\u00e9 copi\u00e9e dans votre presse-papier"],"An error has occurred. Please reload the page and try again.":["Une erreur est survenue. Veuillez recharger la page et r\u00e9essayer."]}},"comment":{"reference":"wp-admin\/js\/media.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Plugin details":["D\u00e9tails de l\u2019extension"],"Plugin: %s":["Extension\u00a0: %s"]}},"comment":{"reference":"wp-admin\/js\/plugin-install.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"%1$s is deprecated since version %2$s with no alternative available.":["%1$s est obsol\u00e8te depuis la version %2$s, aucune alternative n\u2019est disponible."],"%1$s is deprecated since version %2$s! Use %3$s instead.":["%1$s est obsol\u00e8te depuis la version %2$s\u00a0! Utilisez %3$s \u00e0 la place."],"Expand Main menu":["D\u00e9plier le menu principal"],"Dismiss this notice.":["Ignorer cette notification."],"You are about to permanently delete these items from your site.\nThis action cannot be undone.\n'Cancel' to stop, 'OK' to delete.":["Vous \u00eates en train de supprimer d\u00e9finitivement ces \u00e9l\u00e9ments de votre site.\nCette action ne peut pas \u00eatre annul\u00e9e.\n\u00ab\u00a0Annuler\u00a0\u00bb pour arr\u00eater, \u00ab\u00a0OK\u00a0\u00bb pour supprimer."],"Collapse Main menu":["Replier le menu principal"]}},"comment":{"reference":"wp-admin\/js\/common.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Something went wrong.":["Une mauvaise manipulation\u00a0?"],"Sorry, you are not allowed to do that.":["D\u00e9sol\u00e9, vous n\u2019avez pas l\u2019autorisation de faire cela."]}},"comment":{"reference":"wp-admin\/js\/tags.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Hide":["Masquer"],"Show":["Afficher"],"Hide password":["Cacher le mot de passe"],"Show password":["Afficher le mot de passe"]}},"comment":{"reference":"wp-admin\/js\/password-toggle.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Term selected.":["Terme s\u00e9lectionn\u00e9."],"tag delimiter\u0004,":[", "]}},"comment":{"reference":"wp-admin\/js\/tags-suggest.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Showing %1$s of %2$s media items":["Affichage de %1$s m\u00e9dias sur %2$s"],"Jump to first loaded item":["Aller au premier \u00e9l\u00e9ment charg\u00e9"],"Load more":["Charger la suite"],"Number of media items displayed: %d. Click load more for more results.":["Nombre de m\u00e9dias affich\u00e9s\u00a0: %d. Cliquer sur \u00ab\u00a0en afficher plus\u00a0\u00bb pour charger plus de r\u00e9sultats."],"The file URL has been copied to your clipboard":["L\u2019URL du fichier a \u00e9t\u00e9 copi\u00e9e dans votre presse-papier"],"%s item selected":["%s \u00e9l\u00e9ment s\u00e9lectionn\u00e9","%s \u00e9l\u00e9ments s\u00e9lectionn\u00e9s"],"Number of media items displayed: %d. Scroll the page for more results.":["Nombre d\u2019\u00e9l\u00e9ments m\u00e9dia affich\u00e9s\u00a0: %d. Fa\u00eetes d\u00e9filer la page pour plus de r\u00e9sultats."]}},"comment":{"reference":"wp-includes\/js\/media-views.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Your new password has not been saved.":["Votre nouveau mot de passe n\u2019a pas \u00e9t\u00e9 enregistr\u00e9."],"Hide":["Masquer"],"Show":["Afficher"],"Confirm use of weak password":["Confirmer l\u2019utilisation du mot de passe faible"],"Hide password":["Cacher le mot de passe"],"Show password":["Afficher le mot de passe"]}},"comment":{"reference":"wp-admin\/js\/user-profile.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"There is %s error which must be fixed before you can update this file.":["Il y a %s erreur qui doit \u00eatre corrig\u00e9e avant que vous puissiez mettre \u00e0 jour ce fichier.","Il y a %s erreurs qui doivent \u00eatre corrig\u00e9es avant que vous puissiez mettre \u00e0 jour ce fichier."],"Something went wrong. Your change may not have been saved. Please try again. There is also a chance that you may need to manually fix and upload the file over FTP.":["Quelque chose a mal tourn\u00e9. Votre modification n\u2019a peut-\u00eatre pas \u00e9t\u00e9 enregistr\u00e9e. Veuillez r\u00e9essayer. Il est \u00e9galement possible que vous deviez corriger manuellement et t\u00e9l\u00e9verser le fichier par FTP."],"The changes you made will be lost if you navigate away from this page.":["Les modifications que vous avez faites seront perdues si vous changez de page."]}},"comment":{"reference":"wp-admin\/js\/theme-plugin-editor.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Your session has expired. You can log in again from this page or go to the login page.":["Votre session a expir\u00e9. Vous pouvez vous reconnecter depuis cette page ou aller \u00e0 la page de connexion."]}},"comment":{"reference":"wp-includes\/js\/wp-auth-check.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Get started here":["Premiers pas ici"],"Interested in creating your own block?":["Int\u00e9ress\u00e9\u00b7e pour cr\u00e9er votre propre bloc\u00a0?"],"Select a block to install and add it to your post.":["S\u00e9lectionnez un bloc \u00e0 installer et ajoutez-le \u00e0 votre publication."],"Available to install":["Disponible(s) pour l\u2019installation"],"No results available from your installed blocks.":["Aucun r\u00e9sultat disponible \u00e0 partir de vos blocs install\u00e9s."],"%d additional block is available to install.":["%d bloc suppl\u00e9mentaire est disponible pour l\u2019installation.","%d blocs suppl\u00e9mentaires sont disponibles pour l\u2019installation."],"Blocks available for install":["Blocs disponibles pour l\u2019installation"],"Install block":["Installer un bloc"],"%1$s <span>by %2$s<\/span>":["%1$s <span>par %2$s<\/span>"],"Installing\u2026":["Installation\u2026"],"Install %1$s. %2$s stars with %3$s review.":["Installer %1$s. %2$s \u00e9toile et %3$s avis.","Installer %1$s. %2$s \u00e9toiles et %3$s avis."],"Try reloading the page.":["Essayez de recharger la page."],"Block %s installed and added.":["Bloc %s install\u00e9 et ajout\u00e9."],"Your site doesn\u2019t include support for the %s block. You can try installing the block, convert it to a Custom HTML block, or remove it entirely.":["Votre site ne prend pas en charge le bloc %s. Vous pouvez essayer de l\u2019installer, de le convertir en bloc de HTML personnalis\u00e9 ou de le retirer compl\u00e8tement."],"Your site doesn\u2019t include support for the %s block. You can try installing the block or remove it entirely.":["Votre site ne prend pas en charge le bloc \u00ab\u00a0%s\u00a0\u00bb. Vous pouvez essayer de l\u2019installer ou de le retirer compl\u00e8tement."],"The following block has been added to your site.":["Le bloc suivant a \u00e9t\u00e9 ajout\u00e9 \u00e0 votre site.","Les blocs suivants ont \u00e9t\u00e9 ajout\u00e9s \u00e0 votre site."],"Added: %d block":["Ajout\u00e9\u00a0: %d bloc","Ajout\u00e9s\u00a0: %d blocs"],"Error installing block. You can reload the page and try again.":["Erreur lors de l\u2019installation du bloc. Vous pouvez recharger la page et r\u00e9essayer."],"This block is already installed. Try reloading the page.":["Ce bloc est d\u00e9j\u00e0 install\u00e9. Essayez de recharger la page."],"An error occurred.":["Une erreur s\u2019est produite."],"Error registering block. Try reloading the page.":["Erreur lors de l\u2019enregistrement du bloc. Essayez de recharger la page."],"%s out of 5 stars":["%s sur 5 \u00e9toiles"],"Keep as HTML":["Conserver en HTML"],"Install %s":["Installer %s"],"Installed!":["Install\u00e9\u00a0!"],"No results found.":["Aucun r\u00e9sultat."],"By %s":["Par %s"]}},"comment":{"reference":"wp-includes\/js\/dist\/block-directory.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"All selected items have been removed. Select new items to use Bulk Actions.":["Tous les \u00e9l\u00e9ments s\u00e9lectionn\u00e9s ont \u00e9t\u00e9 supprim\u00e9s. S\u00e9lectionnez de nouveaux \u00e9l\u00e9ments pour utiliser les actions group\u00e9es."],"Remove “%s” from Bulk Edit":["Retirer \u00ab\u00a0%s\u00a0\u00bb de l\u2019action group\u00e9e"],"Error while saving the changes.":["Erreur lors de la sauvegarde des modifications."],"Changes saved.":["Modifications enregistr\u00e9es."],"Item removed.":["\u00c9l\u00e9ment retir\u00e9."],"tag delimiter\u0004,":[", "],"(no title)":["(pas de titre)"]}},"comment":{"reference":"wp-admin\/js\/inline-edit-post.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Clear color":["Effacer la couleur"],"Select default color":["S\u00e9lectionner la couleur par d\u00e9faut"],"Color value":["Valeur de couleur"],"Select Color":["S\u00e9lectionner une couleur"],"Clear":["Effacer"],"Default":["Valeur par d\u00e9faut"]}},"comment":{"reference":"wp-admin\/js\/color-picker.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Term added.":["Terme ajout\u00e9."],"Term removed.":["Terme retir\u00e9."],"Remove term:":["Retirer un terme\u00a0:"],"tag delimiter\u0004,":[", "]}},"comment":{"reference":"wp-admin\/js\/tags-box.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Tilde":["Tilde"],"Backtick":["Retour arri\u00e8re"],"Period":["P\u00e9riode"],"Comma":["Virgule"]}},"comment":{"reference":"wp-includes\/js\/dist\/keycodes.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"You are about to permanently delete this menu.\n'Cancel' to stop, 'OK' to delete.":["Vous \u00eates sur le point de supprimer d\u00e9finitivement ce menu.\nCliquez sur \u00ab\u00a0Annuler\u00a0\u00bb pour abandonner, \u00ab\u00a0OK\u00a0\u00bb pour le supprimer."],"missing menu item navigation label\u0004(no label)":["(sans libell\u00e9)"],"The changes you made will be lost if you navigate away from this page.":["Les modifications que vous avez faites seront perdues si vous changez de page."],"No results found.":["Aucun r\u00e9sultat."]}},"comment":{"reference":"wp-admin\/js\/nav-menu.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Your new password for %s is:":["Votre nouveau mot de passe pour %s est\u00a0:"],"Be sure to save this in a safe location. You will not be able to retrieve it.":["Assurez-vous de le conserver en lieu s\u00fbr. Vous ne pourrez pas le r\u00e9cup\u00e9rer."]}},"comment":{"reference":"wp-admin\/js\/auth-app.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"text direction\u0004ltr":["ltr"]}},"comment":{"reference":"wp-includes\/js\/dist\/i18n.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Dismiss":["Ignorer"]}},"comment":{"reference":"wp-includes\/js\/wp-pointer.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Error while saving the changes.":["Erreur lors de la sauvegarde des modifications."],"Changes saved.":["Modifications enregistr\u00e9es."]}},"comment":{"reference":"wp-admin\/js\/inline-edit-tax.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"%s: Sorry, you are not allowed to upload this file type.":["D\u00e9sol\u00e9, vous n\u2019avez pas l\u2019autorisation de t\u00e9l\u00e9verser ce type de fichier."],"Select or Upload Media":["S\u00e9lectionnez ou t\u00e9l\u00e9versez un fichier"],"Error while uploading file %s to the media library.":["Erreur lors du t\u00e9l\u00e9versement du fichier %s dans la m\u00e9diath\u00e8que."],"%s: This file is empty.":["%s\u00a0: ce fichier est vide."],"%s: Sorry, this file type is not supported here.":["%s\u00a0: d\u00e9sol\u00e9, ce type de fichier n\u2019est pas pris en charge ici."],"%s: This file exceeds the maximum upload size for this site.":["%s\u00a0: ce fichier d\u00e9passe la taille maximum de t\u00e9l\u00e9versement pour ce site."]}},"comment":{"reference":"wp-includes\/js\/dist\/media-utils.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Block rendered as empty.":["Bloc devenu vide."],"Error loading block: %s":["Erreur de chargement du bloc\u00a0: %s"]}},"comment":{"reference":"wp-includes\/js\/dist\/server-side-render.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:18:24+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Attend an upcoming event near you.":["Assistez au prochain \u00e9v\u00e9nement pr\u00e8s de chez vous."],"Events widget offset prefix\u0004GMT":["GMT"],"%1$s %2$d \u2013 %3$s %4$d, %5$d":["%1$s %2$d \u2013 %3$s %4$d, %5$d"],"upcoming events year format\u0004Y":["Y"],"upcoming events day format\u0004j":["j"],"%1$s %2$d\u2013%3$d, %4$d":["%1$s %2$d\u2013%3$d, %4$d"],"upcoming events month format\u0004F":["F"],"City updated. Listing events near %s.":["Ville mise \u00e0 jour. Affichage des \u00e9v\u00e8nements pr\u00e8s de %s."],"We couldn\u2019t locate %s. Please try another nearby city. For example: Kansas City; Springfield; Portland.":["Nous ne localisons pas %s. Veuillez essayer une autre ville proche. Par exemple\u00a0: Lille, Bordeaux ou Grenoble."],"An error occurred. Please try again.":["Une erreur est survenue. Veuillez essayer \u00e0 nouveau."],"Enter your closest city to find nearby events.":["Saisissez une ville proche de chez vous pour trouver un \u00e9v\u00e8nement."],"l, M j, Y":["l j M Y"]}},"comment":{"reference":"wp-admin\/js\/dashboard.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Could not set that as the thumbnail image. Try a different attachment.":["Impossible de s\u2019en servir comme miniature. Essayez un autre fichier joint."]}},"comment":{"reference":"wp-includes\/js\/media-editor.js"}}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"translation-revision-date":"2023-10-12 12:16:45+0000","generator":"GlotPress\/4.0.0-alpha.9","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Open library":["Ouvrir la biblioth\u00e8que"],"Open templates":["Ouvrir les mod\u00e8les"],"Open style variations":["Ouvrir les variations de style"],"Open pages":["Ouvrir les pages"],"Open navigation":["Ouvrir la navigation"],"Manage all of my patterns":["G\u00e9rer toutes mes compositions"],"Add new post":["Ajouter un article"],"Add new page":["Ajouter une page"],"(no title)":["(pas de titre)"]}},"comment":{"reference":"wp-includes\/js\/dist\/core-commands.js"}}
|
||||
BIN
public/app/languages/fr_FR.mo
Normal file
20218
public/app/languages/fr_FR.po
Normal file
2
public/app/mu-plugins/uwil-faq.php
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<?php
|
||||
require_once WPMU_PLUGIN_DIR . '/uwil-faq/index.php';
|
||||
238
public/app/mu-plugins/uwil-faq/index.php
Normal file
|
|
@ -0,0 +1,238 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
Plugin Name: UWIL FAQ
|
||||
Description: Plugin to manage topics, questions and responses
|
||||
Version: 1.0
|
||||
Author: UWIL
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/utils.php';
|
||||
|
||||
/**
|
||||
* Add foreign key constraints (dbDelta doesn't handle them).
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function uwil_add_foreign_keys(): void
|
||||
{
|
||||
global $wpdb;
|
||||
|
||||
$constraints = [
|
||||
[
|
||||
'table' => 'uwil_questions',
|
||||
'name' => 'fk_questions_topic',
|
||||
'sql' => "ALTER TABLE uwil_questions
|
||||
ADD CONSTRAINT fk_questions_topic
|
||||
FOREIGN KEY (topic_id) REFERENCES uwil_topics(id)
|
||||
ON DELETE CASCADE",
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($constraints as $constraint) {
|
||||
$exists = $wpdb->get_var($wpdb->prepare(
|
||||
"SELECT COUNT(*) FROM information_schema.TABLE_CONSTRAINTS
|
||||
WHERE CONSTRAINT_SCHEMA = %s
|
||||
AND TABLE_NAME = %s
|
||||
AND CONSTRAINT_NAME = %s",
|
||||
DB_NAME,
|
||||
$constraint['table'],
|
||||
$constraint['name']
|
||||
));
|
||||
|
||||
if (!$exists) {
|
||||
$wpdb->query($constraint['sql']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create tables.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function uwil_faq_create_tables(): void
|
||||
{
|
||||
global $wpdb;
|
||||
$charset = $wpdb->get_charset_collate();
|
||||
|
||||
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
||||
|
||||
dbDelta("CREATE TABLE uwil_topics (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
`order` INT NOT NULL DEFAULT 0
|
||||
) $charset;");
|
||||
dbDelta("CREATE TABLE uwil_questions (
|
||||
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
topic_id BIGINT UNSIGNED NOT NULL,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
contenu TEXT NOT NULL,
|
||||
`order` INT NOT NULL DEFAULT 0,
|
||||
KEY topic_id (topic_id)
|
||||
) $charset;");
|
||||
uwil_add_foreign_keys();
|
||||
}
|
||||
add_action('admin_init', function () {
|
||||
global $wpdb;
|
||||
$tables = ['uwil_topics', 'uwil_questions', 'uwil_responses'];
|
||||
foreach ($tables as $table) {
|
||||
if ($wpdb->get_var("SHOW TABLES LIKE '$table'") !== $table) {
|
||||
uwil_faq_create_tables();
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Add button plugin in the admin.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function plugin_menu(): void
|
||||
{
|
||||
add_menu_page(
|
||||
'UWIL FAQ',
|
||||
'UWIL FAQ',
|
||||
'edit_pages',
|
||||
'uwil-faq-topics',
|
||||
'renderTopics',
|
||||
'dashicons-editor-help',
|
||||
);
|
||||
add_submenu_page(
|
||||
'uwil-faq-topics',
|
||||
'Thématiques',
|
||||
'Thématiques',
|
||||
'edit_pages',
|
||||
'uwil-faq-topics',
|
||||
'renderTopics',
|
||||
);
|
||||
add_submenu_page(
|
||||
'uwil-faq-topics',
|
||||
'Questions/Réponses',
|
||||
'Questions/Réponses',
|
||||
'edit_pages',
|
||||
'uwil-faq-questions',
|
||||
'renderQuestions',
|
||||
);
|
||||
}
|
||||
add_action('admin_menu', 'plugin_menu');
|
||||
|
||||
/**
|
||||
* Add style resource.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function custom_style(): void
|
||||
{
|
||||
wp_register_style('uwil-faq', WPMU_PLUGIN_URL . '/uwil-faq/style.css');
|
||||
wp_enqueue_style('uwil-faq');
|
||||
}
|
||||
add_action('admin_init', 'custom_style');
|
||||
|
||||
/** LIMITS */
|
||||
define('UWIL_MIN_TOPIC', 3);
|
||||
define('UWIL_MAX_TOPIC', 6);
|
||||
define('UWIL_MIN_QUESTIONS_PER_TOPIC', 3);
|
||||
define('UWIL_MAX_QUESTIONS_PER_TOPIC', 8);
|
||||
|
||||
/**
|
||||
* Render FAQ topics page.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function renderTopics(): void
|
||||
{
|
||||
global $wpdb;
|
||||
uwil_render_crud([
|
||||
'table' => 'uwil_topics',
|
||||
'title' => 'Thématiques',
|
||||
'min_total' => UWIL_MIN_TOPIC,
|
||||
'max_total' => UWIL_MAX_TOPIC,
|
||||
'fields' => [
|
||||
[
|
||||
'name' => 'title',
|
||||
'label' => 'Titre',
|
||||
'type' => 'text',
|
||||
],
|
||||
],
|
||||
'columns' => [
|
||||
[
|
||||
'label' => 'Titre',
|
||||
'field' => 'title',
|
||||
],
|
||||
[
|
||||
'label' => 'Questions',
|
||||
'field' => 'id',
|
||||
'render' => function ($item) use ($wpdb) {
|
||||
$count = (int) $wpdb->get_var($wpdb->prepare(
|
||||
"SELECT COUNT(*) FROM uwil_questions WHERE topic_id = %d",
|
||||
$item->id
|
||||
));
|
||||
$class = ($count < UWIL_MIN_QUESTIONS_PER_TOPIC || $count > UWIL_MAX_QUESTIONS_PER_TOPIC) ? 'uwil-count-warning' : 'uwil-count-ok';
|
||||
return '<span class="' . $class . '">' . $count . ' / ' . UWIL_MAX_QUESTIONS_PER_TOPIC . '</span>';
|
||||
},
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render FAQ questions page.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function renderQuestions(): void
|
||||
{
|
||||
global $wpdb;
|
||||
uwil_render_crud([
|
||||
'table' => 'uwil_questions',
|
||||
'title' => 'Questions',
|
||||
'parent_key' => 'topic_id',
|
||||
'min_per_parent' => UWIL_MIN_QUESTIONS_PER_TOPIC,
|
||||
'max_per_parent' => UWIL_MAX_QUESTIONS_PER_TOPIC,
|
||||
'filter' => [
|
||||
'key' => 'topic_id',
|
||||
'label' => 'Filtrer par thématique',
|
||||
'options' => fn() => $wpdb->get_results("SELECT id, title FROM uwil_topics ORDER BY `order`"),
|
||||
],
|
||||
'fields' => [
|
||||
[
|
||||
'name' => 'topic_id',
|
||||
'label' => 'Thématique',
|
||||
'type' => 'select',
|
||||
'options' => fn() => $wpdb->get_results("SELECT id, title FROM uwil_topics ORDER BY `order`"),
|
||||
],
|
||||
[
|
||||
'name' => 'title',
|
||||
'label' => 'Question',
|
||||
'type' => 'text',
|
||||
],
|
||||
[
|
||||
'name' => 'contenu',
|
||||
'label' => 'Réponse',
|
||||
'type' => 'wysiwyg',
|
||||
],
|
||||
],
|
||||
'columns' => [
|
||||
[
|
||||
'label' => 'Thématique',
|
||||
'field' => 'topic_id',
|
||||
'render' => function ($item) use ($wpdb) {
|
||||
return esc_html($wpdb->get_var($wpdb->prepare(
|
||||
"SELECT title FROM uwil_topics WHERE id = %d",
|
||||
$item->topic_id
|
||||
)));
|
||||
},
|
||||
],
|
||||
[
|
||||
'label' => 'Question',
|
||||
'field' => 'title',
|
||||
],
|
||||
[
|
||||
'label' => 'Réponse',
|
||||
'field' => 'contenu',
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
131
public/app/mu-plugins/uwil-faq/style.css
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
:root {
|
||||
--faq-spacing: 15px;
|
||||
}
|
||||
|
||||
.uwil-faq {
|
||||
width: calc(100% - 20px);
|
||||
padding-right: 20px;
|
||||
padding-left: 0;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.uwil-faq-title {
|
||||
padding-bottom: 0px !important;
|
||||
margin-bottom: var(--faq-spacing) !important;
|
||||
}
|
||||
|
||||
.uwil-faq-cards {
|
||||
display: flex;
|
||||
gap: var(--faq-spacing);
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.uwil-faq-card {
|
||||
background: #fff;
|
||||
border: 1px solid #c3c4c7;
|
||||
padding: 24px;
|
||||
text-align: center;
|
||||
min-width: 180px;
|
||||
flex: 1;
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
|
||||
.uwil-faq-card-count {
|
||||
font-size: 32px;
|
||||
font-weight: 600;
|
||||
margin: var(--faq-spacing) 0;
|
||||
}
|
||||
|
||||
.uwil-faq-card-label {
|
||||
color: #646970;
|
||||
margin-bottom: var(--faq-spacing);
|
||||
}
|
||||
|
||||
.uwil-faq-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: start;
|
||||
align-items: start;
|
||||
gap: var(--faq-spacing);
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1100px) {
|
||||
.uwil-faq-content {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
|
||||
.uwil-faq-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: start;
|
||||
align-items: stretch;
|
||||
width: 100%;
|
||||
gap: var(--faq-spacing);
|
||||
}
|
||||
|
||||
.uwil-faq-form {
|
||||
padding-bottom: var(--faq-spacing);
|
||||
border-bottom: 1px solid #c3c4c7;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: start;
|
||||
align-items: stretch;
|
||||
gap: var(--faq-spacing);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uwil-faq-form select {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1100px) {
|
||||
.uwil-faq-form {
|
||||
padding-bottom: 0px;
|
||||
padding-right: var(--faq-spacing);
|
||||
border-bottom: 0;
|
||||
border-right: 1px solid #c3c4c7;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
.uwil-faq-form > * {
|
||||
width: 25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.uwil-faq-field {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: stretch;
|
||||
gap: 2px;
|
||||
}
|
||||
|
||||
.uwil-faq-actions {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: stretch;
|
||||
gap: var(--faq-spacing);
|
||||
}
|
||||
|
||||
.uwil-faq-actions > * {
|
||||
width: inherit;
|
||||
margin: 0 !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.uwil-count-ok {
|
||||
color: #00a32a;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.uwil-count-warning {
|
||||
color: #d63638;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.uwil-faq-border-0 {
|
||||
border: 0 !important;
|
||||
}
|
||||
285
public/app/mu-plugins/uwil-faq/utils.php
Normal file
|
|
@ -0,0 +1,285 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* CRUD order.
|
||||
*
|
||||
* @param string $table Name of the table.
|
||||
* @param integer $id Target id to move.
|
||||
* @param string $direction Direction to move target element.
|
||||
* @param string|null $parent_key Relation parent key.
|
||||
* @return void
|
||||
*/
|
||||
function uwil_move_item(string $table, int $id, string $direction, ?string $parent_key = null): void
|
||||
{
|
||||
global $wpdb;
|
||||
|
||||
$current = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table WHERE id = %d", $id));
|
||||
if (!$current) return;
|
||||
|
||||
$operator = $direction === 'up' ? '<' : '>';
|
||||
$order = $direction === 'up' ? 'DESC' : 'ASC';
|
||||
|
||||
$where = "`order` $operator %d";
|
||||
$params = [$current->order];
|
||||
|
||||
if ($parent_key) {
|
||||
$where .= " AND $parent_key = %d";
|
||||
$params[] = $current->{$parent_key};
|
||||
}
|
||||
|
||||
$neighbor = $wpdb->get_row($wpdb->prepare(
|
||||
"SELECT * FROM $table WHERE $where ORDER BY `order` $order LIMIT 1",
|
||||
...$params
|
||||
));
|
||||
|
||||
if ($neighbor) {
|
||||
$wpdb->update($table, ['order' => $neighbor->order], ['id' => $current->id]);
|
||||
$wpdb->update($table, ['order' => $current->order], ['id' => $neighbor->id]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* CRUD generic.
|
||||
*
|
||||
* @param array $config {
|
||||
* string table Name of the table.
|
||||
* string title Title of the page.
|
||||
* array fields List of fields in formulary.
|
||||
* array columns Columns to display in the table.
|
||||
* string parent_key Name of the relationship column (optionnal).
|
||||
* }
|
||||
*/
|
||||
function uwil_render_crud(array $config): void
|
||||
{
|
||||
global $wpdb;
|
||||
$table = $config['table'];
|
||||
$parent_key = $config['parent_key'] ?? null;
|
||||
$min_per_parent = $config['min_per_parent'] ?? null;
|
||||
$max_per_parent = $config['max_per_parent'] ?? null;
|
||||
$min_total = $config['min_total'] ?? null;
|
||||
$max_total = $config['max_total'] ?? null;
|
||||
$filter = $config['filter'] ?? null;
|
||||
|
||||
// Delete action.
|
||||
if (isset($_GET['delete']) && check_admin_referer('uwil_delete_' . $_GET['delete'])) {
|
||||
$id = (int) $_GET['delete'];
|
||||
$item = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table WHERE id = %d", $id));
|
||||
|
||||
$can_delete = true;
|
||||
|
||||
if ($item && $parent_key && $min_per_parent !== null) {
|
||||
$count = (int) $wpdb->get_var($wpdb->prepare(
|
||||
"SELECT COUNT(*) FROM $table WHERE $parent_key = %d",
|
||||
$item->{$parent_key}
|
||||
));
|
||||
if ($count <= $min_per_parent) {
|
||||
$can_delete = false;
|
||||
echo '<div class="error"><p>Suppression impossible : minimum de ' . esc_html($min_per_parent) . ' élément(s) requis.</p></div>';
|
||||
}
|
||||
}
|
||||
|
||||
if ($can_delete && $item && $min_total !== null) {
|
||||
$count = (int) $wpdb->get_var("SELECT COUNT(*) FROM $table");
|
||||
if ($count <= $min_total) {
|
||||
$can_delete = false;
|
||||
echo '<div class="error"><p>Suppression impossible : minimum de ' . esc_html($min_total) . ' élément(s) requis au total.</p></div>';
|
||||
}
|
||||
}
|
||||
|
||||
if ($can_delete) {
|
||||
$wpdb->delete($table, ['id' => $id]);
|
||||
echo '<div class="updated"><p>Élément supprimé.</p></div>';
|
||||
}
|
||||
}
|
||||
|
||||
// Add/modification.
|
||||
if (isset($_POST['uwil_submit']) && check_admin_referer('uwil_form_' . $config['table'])) {
|
||||
$data = [];
|
||||
foreach ($config['fields'] as $field) {
|
||||
$value = wp_unslash($_POST[$field['name']] ?? '');
|
||||
$data[$field['name']] = $field['type'] === 'wysiwyg'
|
||||
? wp_kses_post($value)
|
||||
: sanitize_text_field($value);
|
||||
}
|
||||
|
||||
$is_new = empty($_POST['id']);
|
||||
|
||||
$can_save = true;
|
||||
|
||||
// Check max per parent before save.
|
||||
if ($is_new && $parent_key && $max_per_parent !== null && !empty($data[$parent_key])) {
|
||||
$count = (int) $wpdb->get_var($wpdb->prepare(
|
||||
"SELECT COUNT(*) FROM $table WHERE $parent_key = %d",
|
||||
$data[$parent_key]
|
||||
));
|
||||
if ($count >= $max_per_parent) {
|
||||
$can_save = false;
|
||||
echo '<div class="error"><p>Ajout impossible : maximum de ' . esc_html($max_per_parent) . ' élément(s) atteint pour ce parent.</p></div>';
|
||||
}
|
||||
}
|
||||
|
||||
// Check max total before save.
|
||||
if ($can_save && $is_new && $max_total !== null) {
|
||||
$count = (int) $wpdb->get_var("SELECT COUNT(*) FROM $table");
|
||||
if ($count >= $max_total) {
|
||||
$can_save = false;
|
||||
echo '<div class="error"><p>Ajout impossible : maximum de ' . esc_html($max_total) . ' élément(s) atteint au total.</p></div>';
|
||||
}
|
||||
}
|
||||
|
||||
if ($can_save) {
|
||||
if (!$is_new) {
|
||||
$wpdb->update($table, $data, ['id' => (int) $_POST['id']]);
|
||||
echo '<div class="updated"><p>Élément modifié.</p></div>';
|
||||
} else {
|
||||
$where = '';
|
||||
if ($parent_key && !empty($data[$parent_key])) {
|
||||
$where = $wpdb->prepare(" WHERE $parent_key = %d", $data[$parent_key]);
|
||||
}
|
||||
$max_order = (int) $wpdb->get_var("SELECT MAX(`order`) FROM $table$where");
|
||||
$data['order'] = $max_order + 1;
|
||||
$wpdb->insert($table, $data);
|
||||
echo '<div class="updated"><p>Élément ajouté.</p></div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Order action.
|
||||
if (isset($_GET['move'], $_GET['id']) && check_admin_referer('uwil_move_' . $_GET['id'])) {
|
||||
uwil_move_item($table, (int) $_GET['id'], $_GET['move'], $parent_key);
|
||||
}
|
||||
|
||||
// Edit action.
|
||||
$edit_item = null;
|
||||
if (isset($_GET['edit'])) {
|
||||
$edit_item = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table WHERE id = %d", (int) $_GET['edit']));
|
||||
}
|
||||
|
||||
// Filter action.
|
||||
$filter_value = null;
|
||||
if ($filter && isset($_GET[$filter['key']]) && $_GET[$filter['key']] !== '') {
|
||||
$filter_value = (int) $_GET[$filter['key']];
|
||||
}
|
||||
|
||||
// List and order.
|
||||
$order_by = $parent_key ? "$parent_key ASC, `order` ASC" : "`order` ASC";
|
||||
if ($filter_value) {
|
||||
$items = $wpdb->get_results($wpdb->prepare(
|
||||
"SELECT * FROM $table WHERE {$filter['key']} = %d ORDER BY $order_by",
|
||||
$filter_value
|
||||
));
|
||||
} else {
|
||||
$items = $wpdb->get_results("SELECT * FROM $table ORDER BY $order_by");
|
||||
}
|
||||
|
||||
?>
|
||||
<div class="wrap uwil-faq">
|
||||
<h1 class="uwil-faq-title"><?= esc_html($config['title']) ?></h1>
|
||||
<div class="uwil-faq-content">
|
||||
<!-- Formulary -->
|
||||
<form class="uwil-faq-form" method="post">
|
||||
<?php wp_nonce_field('uwil_form_' . $config['table']); ?>
|
||||
<input type="hidden" name="id" value="<?= esc_attr($edit_item->id ?? '') ?>">
|
||||
<?php foreach ($config['fields'] as $field): ?>
|
||||
<?php
|
||||
$value = $edit_item->{$field['name']} ?? '';
|
||||
$field_id = 'uwil_field_' . $field['name'];
|
||||
?>
|
||||
<?php if ($field['type'] === 'select'): ?>
|
||||
<div class="uwil-faq-field">
|
||||
<label for="<?= esc_attr($field_id) ?>"><?= esc_html($field['label']) ?></label>
|
||||
<select id="<?= esc_attr($field_id) ?>" name="<?= esc_attr($field['name']) ?>" required>
|
||||
<option value="" selected disabled>Sélectionner une valeur</option>
|
||||
<?php foreach ($field['options']() as $opt): ?>
|
||||
<option value="<?= esc_attr($opt->id) ?>" <?= selected($value, $opt->id, false) ?>>
|
||||
<?= esc_html($opt->title) ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<?php elseif ($field['type'] === 'wysiwyg'): ?>
|
||||
<div class="uwil-faq-field">
|
||||
<label for="<?= esc_attr($field_id) ?>"><?= esc_attr($field['label']) ?></label>
|
||||
<?php
|
||||
wp_editor($value, esc_attr($field_id), [
|
||||
'textarea_name' => $field['name'],
|
||||
'teeny' => true,
|
||||
'media_buttons' => false,
|
||||
'textarea_rows' => 6,
|
||||
'quicktags' => false,
|
||||
'tinymce' => [
|
||||
'toolbar1' => 'bold,italic,underline,link,unlink',
|
||||
'toolbar2' => '',
|
||||
],
|
||||
]);
|
||||
?>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<div class="uwil-faq-field">
|
||||
<label for="<?= esc_attr($field_id) ?>"><?= esc_attr($field['label']) ?></label>
|
||||
<input id="<?= esc_attr($field_id) ?>" type="text" name="<?= esc_attr($field['name']) ?>" value="<?= esc_attr($value) ?>" required>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
<div class="uwil-faq-actions">
|
||||
<?php if ($edit_item): ?>
|
||||
<a href="<?= esc_url(remove_query_arg('edit')) ?>" class="button button-secondary">
|
||||
Annuler
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<button type="submit" name="uwil_submit" class="button button-primary">
|
||||
<?= $edit_item ? 'Modifier' : 'Ajouter' ?>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
<div class="uwil-faq-list">
|
||||
<!-- Filter -->
|
||||
<?php if ($filter): ?>
|
||||
<form method="get" class="uwil-faq-form uwil-faq-border-0">
|
||||
<input type="hidden" name="page" value="<?= esc_attr($_GET['page']) ?>">
|
||||
<div class="uwil-faq-field">
|
||||
<label for="uwil_filter_<?= esc_attr($filter['key']) ?>"><?= esc_html($filter['label']) ?></label>
|
||||
<select id="uwil_filter_<?= esc_attr($filter['key']) ?>" name="<?= esc_attr($filter['key']) ?>" onchange="this.form.submit()">
|
||||
<option value="">Toutes les thématiques</option>
|
||||
<?php foreach ($filter['options']() as $opt): ?>
|
||||
<option value="<?= esc_attr($opt->id) ?>" <?= selected($filter_value, $opt->id, false) ?>>
|
||||
<?= esc_html($opt->title) ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
<!-- Listing elements -->
|
||||
<table class="widefat">
|
||||
<thead>
|
||||
<tr>
|
||||
<?php foreach ($config['columns'] as $col): ?>
|
||||
<th><?= esc_html($col['label']) ?></th>
|
||||
<?php endforeach; ?>
|
||||
<th>Ordre</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($items as $item): ?>
|
||||
<tr>
|
||||
<?php foreach ($config['columns'] as $col): ?>
|
||||
<td><?= isset($col['render']) ? $col['render']($item) : esc_html($item->{$col['field']}) ?></td>
|
||||
<?php endforeach; ?>
|
||||
<td><?= esc_html($item->order) ?></td>
|
||||
<td>
|
||||
<a href="<?= wp_nonce_url(add_query_arg(['move' => 'up', 'id' => $item->id]), 'uwil_move_' . $item->id) ?>">▲</a>
|
||||
<a href="<?= wp_nonce_url(add_query_arg(['move' => 'down', 'id' => $item->id]), 'uwil_move_' . $item->id) ?>">▼</a> |
|
||||
<a href="<?= add_query_arg(['edit' => $item->id]) ?>">Éditer</a> |
|
||||
<a href="<?= wp_nonce_url(add_query_arg(['delete' => $item->id]), 'uwil_delete_' . $item->id) ?>" onclick="return confirm('Supprimer cet élément ?');">Supprimer</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
BIN
public/newsletters/2026_01_07/assets/visuel_10.jpg
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
public/newsletters/2026_01_07/assets/visuel_2.jpg
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
public/newsletters/2026_01_07/assets/visuel_3.jpg
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/newsletters/2026_01_07/assets/visuel_4.jpg
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
public/newsletters/2026_01_07/assets/visuel_5.jpg
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
public/newsletters/2026_01_07/assets/visuel_6.jpg
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/newsletters/2026_01_07/assets/visuel_7.jpg
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
public/newsletters/2026_01_07/assets/visuel_8.jpg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
public/newsletters/2026_01_07/assets/visuel_9.jpg
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/newsletters/2026_01_07/assets/visuel_cle.jpg
Normal file
|
After Width: | Height: | Size: 228 KiB |
743
public/newsletters/2026_01_07/index.html
Normal file
|
|
@ -0,0 +1,743 @@
|
|||
<!doctype html>
|
||||
<html lang="und" dir="auto" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
|
||||
<head>
|
||||
<title>La Newsletter Janvier 2026</title><!--[if !mso]><!-->
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"><!--<![endif]-->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style type="text/css">
|
||||
#outlook a,
|
||||
body {
|
||||
padding: 0
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%
|
||||
}
|
||||
|
||||
table,
|
||||
td {
|
||||
border-collapse: collapse;
|
||||
mso-table-lspace: 0;
|
||||
mso-table-rspace: 0
|
||||
}
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
height: auto;
|
||||
line-height: 100%;
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-ms-interpolation-mode: bicubic
|
||||
}
|
||||
|
||||
p {
|
||||
display: block;
|
||||
margin: 13px 0
|
||||
}
|
||||
</style><!--[if mso]>
|
||||
<noscript>
|
||||
<xml>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:AllowPNG/>
|
||||
<o:PixelsPerInch>96</o:PixelsPerInch>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml>
|
||||
</noscript>
|
||||
<![endif]--><!--[if lte mso 11]>
|
||||
<style type="text/css">
|
||||
.mj-outlook-group-fix { width:100% !important; }
|
||||
</style>
|
||||
<![endif]-->
|
||||
<style type="text/css">
|
||||
@media only screen and (min-width:480px) {
|
||||
.mj-column-per-100 {
|
||||
max-width: 100%;
|
||||
width: 100% !important
|
||||
}
|
||||
|
||||
.mj-column-per-33-333333333333336 {
|
||||
max-width: 33.333333333333336%;
|
||||
width: 33.333333333333336% !important
|
||||
}
|
||||
|
||||
.mj-column-per-50 {
|
||||
max-width: 50%;
|
||||
width: 50% !important
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style media="screen and (min-width:480px)">
|
||||
.moz-text-html .mj-column-per-100 {
|
||||
max-width: 100%;
|
||||
width: 100% !important
|
||||
}
|
||||
|
||||
.moz-text-html .mj-column-per-33-333333333333336 {
|
||||
max-width: 33.333333333333336%;
|
||||
width: 33.333333333333336% !important
|
||||
}
|
||||
|
||||
.moz-text-html .mj-column-per-50 {
|
||||
max-width: 50%;
|
||||
width: 50% !important
|
||||
}
|
||||
</style>
|
||||
<style type="text/css">
|
||||
@media only screen and (max-width:479px) {
|
||||
table.mj-full-width-mobile {
|
||||
width: 100% !important
|
||||
}
|
||||
|
||||
td.mj-full-width-mobile {
|
||||
width: auto !important
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body style="background-color:#fff;word-spacing:normal">
|
||||
<div style="color:#fff;display:none;font-size:1px;line-height:1px;max-height:0;max-width:0;opacity:0;overflow:hidden">
|
||||
La Newsletter Janvier 2026</div>
|
||||
<div style="background-color:#fff" lang="und" dir="auto">
|
||||
<div style="background:#fff;background-color:#fff;margin:0 auto;max-width:600px">
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="background:#fff;background-color:#fff;width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="direction:ltr;font-size:0;padding:0;text-align:center">
|
||||
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="right" class="nl-title"
|
||||
style="font-size:0;padding:10px 40px 10px 25px;word-break:break-word">
|
||||
<div
|
||||
style="color:#024e2a;font-family:Barlow,Arial,sans-serif;font-size:24px;font-weight:700;line-height:1;text-align:right">
|
||||
LA NEWSLETTER<br> <span
|
||||
style="color:#00803a;font-family:Barlow,Arial,sans-serif;font-size:20px;font-weight:700">JANVIER
|
||||
2026</span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:0;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:600px"> <a
|
||||
href="https://www.reghalal.com/?mtm_campaign=newsletter_janvier_2026_reghalal&mtm_source=newsletter_mensuelle_reghalal&mtm_medium=newsletter"
|
||||
target="_blank"> <img alt="Logo Réghalal et sa signature halal & engagés"
|
||||
src="https://www.reghalal.com/newsletters/ref/header.jpg"
|
||||
style="border:0;display:block;font-size:13px;height:auto;outline:none;text-decoration:none;width:100%"
|
||||
width="600" height="auto"> </a> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" bgcolor="#024e2a" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||
<div style="background:#024e2a;background-color:#024e2a;margin:0 auto;max-width:600px">
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="background:#024e2a;background-color:#024e2a;width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="direction:ltr;font-size:0;padding:0;text-align:center">
|
||||
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:0;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:600px"> <img
|
||||
alt="Visuel de plusieurs personnes autour d'une table en train de partager un moment de convivialité"
|
||||
src="https://www.reghalal.com/newsletters/2026_01_07/assets/visuel_cle.jpg"
|
||||
style="border:0;display:block;font-size:13px;height:auto;outline:none;text-decoration:none;width:100%"
|
||||
width="600" height="auto"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:30px 25px 10px;word-break:break-word">
|
||||
<div
|
||||
style="color:#fdf5eb;font-family:Arial,sans-serif;font-size:42px;font-weight:700;line-height:1;text-align:center">
|
||||
L'ÉQUIPE RÉGHALAL VOUS SOUHAITE SES MEILLEURS VOEUX !</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:10px 25px 30px;word-break:break-word">
|
||||
<div
|
||||
style="color:#fff;font-family:Arial,sans-serif;font-size:20px;line-height:1.4;text-align:center">
|
||||
Une nouvelle année commence, l’occasion de partager ensemble des moments remplis de
|
||||
gourmandise <br> et de saveurs ! <br> C'est l'occasion parfaite pour parcourir nos recettes
|
||||
<br> et trouver vos prochaines inspirations !
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:5px 25px 30px;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:separate;line-height:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" bgcolor="#00803a" role="presentation"
|
||||
style="border:2px solid #fff;border-radius:6px;cursor:auto;mso-padding-alt:10px 16px;background:#00803a"
|
||||
valign="middle"> <a
|
||||
href="https://www.reghalal.com/recettes-halal/?mtm_campaign=newsletter_janvier_2026_reghalal&mtm_source=newsletter_mensuelle_reghalal&mtm_medium=newsletter"
|
||||
style="background:#00803a;color:#fff;display:inline-block;font-family:Arial Narrow,Arial;font-size:17px;font-weight:400;line-height:120%;margin:0;padding:10px 16px;text-decoration:none;text-transform:uppercase;mso-padding-alt:0;border-radius:6px"
|
||||
target="_blank"> JE DÉCOUVRE LES RECETTES </a> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" bgcolor="#00803a" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||
<div style="background:#00803a;background-color:#00803a;margin:0 auto;max-width:600px">
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="background:#00803a;background-color:#00803a;width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="direction:rtl;font-size:0;padding:0;text-align:center">
|
||||
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:middle;width:600px;" ><![endif]-->
|
||||
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:middle;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding-bottom:15px;padding-top:15px;vertical-align:middle">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:10px 25px 5px;word-break:break-word">
|
||||
<div
|
||||
style="color:#fff;font-family:Arial,sans-serif;font-size:24px;font-weight:700;line-height:1.2;text-align:center">
|
||||
2026 S'ANNONCE PLEINE DE SURPRISES CHEZ RÉGHALAL !</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:10px 25px;word-break:break-word">
|
||||
<div
|
||||
style="color:#fff;font-family:Arial,sans-serif;font-size:17px;line-height:1.15;text-align:center">
|
||||
De nouvelles saveurs, des offres inédites, des produits qui vont vous régaler... et
|
||||
bien plus encore. <br> Notre site et nos réseaux sociaux évolueront pour vous offrir
|
||||
toujours plus d’inspiration et de gourmandise. <br> Restez connectés, l’aventure
|
||||
continue... et elle promet d’être savoureuse !</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:5px 25px 10px;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:separate;line-height:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" bgcolor="#024e2a" role="presentation"
|
||||
style="border:2px solid #fff;border-radius:6px;cursor:auto;mso-padding-alt:10px 16px;background:#024e2a"
|
||||
valign="middle"> <a
|
||||
href="https://www.reghalal.com/?mtm_campaign=newsletter_janvier_2026_reghalal&mtm_source=newsletter_mensuelle_reghalal&mtm_medium=newsletter"
|
||||
style="background:#024e2a;color:#fff;display:inline-block;font-family:Arial Narrow,Arial;font-size:17px;font-weight:400;line-height:120%;margin:0;padding:10px 16px;text-decoration:none;text-transform:uppercase;mso-padding-alt:0;border-radius:6px"
|
||||
target="_blank"> JE DÉCOUVRE LE SITE </a> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" bgcolor="#024e2a" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||
<div style="background:#024e2a;background-color:#024e2a;margin:0 auto;max-width:600px">
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="background:#024e2a;background-color:#024e2a;width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="direction:rtl;font-size:0;padding:0;text-align:center">
|
||||
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:middle;width:600px;" ><![endif]-->
|
||||
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:middle;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding-bottom:15px;padding-top:15px;vertical-align:middle">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:10px 25px 5px;word-break:break-word">
|
||||
<div
|
||||
style="color:#fff;font-family:Arial,sans-serif;font-size:24px;font-weight:700;line-height:1.2;text-align:center">
|
||||
AU REVOIR 2025</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:10px 25px;word-break:break-word">
|
||||
<p style="border-top:4px solid #00803a;font-size:1px;margin:0 auto;width:90px"> </p> <!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" style="border-top:solid 4px #00803a;font-size:1px;margin:0px auto;width:90px;" role="presentation" width="90px" ><tr><td style="height:0;line-height:0;">
|
||||
</td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:10px 25px;word-break:break-word">
|
||||
<div
|
||||
style="color:#fff;font-family:Arial,sans-serif;font-size:17px;line-height:1.15;text-align:center">
|
||||
Avant de commencer 2026, prenons un moment pour revenir sur 2025 : une année riche en
|
||||
échanges, en gourmandise et en belles réussites partagées avec vous. <br> Merci pour
|
||||
votre <strong>fidélité</strong> et votre <strong>engagement</strong> qui font
|
||||
<strong>vivre la marque Réghalal au quotidien.</strong><br> Découvrez maintenant le
|
||||
récapitulatif de vos publications préférées de l’année !
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||
<div style="margin:0 auto;max-width:600px">
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="direction:rtl;font-size:0;padding:0;text-align:center">
|
||||
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:200px;" ><![endif]-->
|
||||
<div class="mj-column-per-33-333333333333336 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:0;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:200px"> <img
|
||||
alt="Visuel d'une personne trempant ses samoussas dans une sauce blanche"
|
||||
src="https://www.reghalal.com/newsletters/2026_01_07/assets/visuel_4.jpg"
|
||||
style="border:0;display:block;font-size:13px;height:auto;outline:none;text-decoration:none;width:100%"
|
||||
width="200" height="auto"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td><td class="" style="vertical-align:top;width:200px;" ><![endif]-->
|
||||
<div class="mj-column-per-33-333333333333336 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:0;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:200px"> <img alt="Visuel d'un chat sur un canapé"
|
||||
src="https://www.reghalal.com/newsletters/2026_01_07/assets/visuel_3.jpg"
|
||||
style="border:0;display:block;font-size:13px;height:auto;outline:none;text-decoration:none;width:100%"
|
||||
width="200" height="auto"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td><td class="" style="vertical-align:top;width:200px;" ><![endif]-->
|
||||
<div class="mj-column-per-33-333333333333336 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:0;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:200px"> <img
|
||||
alt="Visuel de deux personnes dans une cuisine en train de se servir dans un plat"
|
||||
src="https://www.reghalal.com/newsletters/2026_01_07/assets/visuel_2.jpg"
|
||||
style="border:0;display:block;font-size:13px;height:auto;outline:none;text-decoration:none;width:100%"
|
||||
width="200" height="auto"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!--[if mso | IE]></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||
<div style="margin:0 auto;max-width:600px">
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="direction:rtl;font-size:0;padding:0;text-align:center">
|
||||
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:200px;" ><![endif]-->
|
||||
<div class="mj-column-per-33-333333333333336 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:0;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:200px"> <img alt="Visuel d'un plat de pâtes carbonara dans une assiette"
|
||||
src="https://www.reghalal.com/newsletters/2026_01_07/assets/visuel_7.jpg"
|
||||
style="border:0;display:block;font-size:13px;height:auto;outline:none;text-decoration:none;width:100%"
|
||||
width="200" height="auto"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td><td class="" style="vertical-align:top;width:200px;" ><![endif]-->
|
||||
<div class="mj-column-per-33-333333333333336 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:0;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:200px"> <img
|
||||
alt="Visuel de morceaux de poulet Réghalal et des pâtes en sauce dans une assiette"
|
||||
src="https://www.reghalal.com/newsletters/2026_01_07/assets/visuel_6.jpg"
|
||||
style="border:0;display:block;font-size:13px;height:auto;outline:none;text-decoration:none;width:100%"
|
||||
width="200" height="auto"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td><td class="" style="vertical-align:top;width:200px;" ><![endif]-->
|
||||
<div class="mj-column-per-33-333333333333336 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:0;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:200px"> <img
|
||||
alt="Visuel d'un pique-nique avec différents produits Réghalal"
|
||||
src="https://www.reghalal.com/newsletters/2026_01_07/assets/visuel_5.jpg"
|
||||
style="border:0;display:block;font-size:13px;height:auto;outline:none;text-decoration:none;width:100%"
|
||||
width="200" height="auto"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!--[if mso | IE]></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||
<div style="margin:0 auto;max-width:600px">
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="direction:rtl;font-size:0;padding:0;text-align:center">
|
||||
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:200px;" ><![endif]-->
|
||||
<div class="mj-column-per-33-333333333333336 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:0;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:200px"> <img
|
||||
alt="Visuel d'un plat préparé à base de filet de poulet Réghalal"
|
||||
src="https://www.reghalal.com/newsletters/2026_01_07/assets/visuel_10.jpg"
|
||||
style="border:0;display:block;font-size:13px;height:auto;outline:none;text-decoration:none;width:100%"
|
||||
width="200" height="auto"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td><td class="" style="vertical-align:top;width:200px;" ><![endif]-->
|
||||
<div class="mj-column-per-33-333333333333336 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:0;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:200px"> <img alt="Visuel de plusieurs buns"
|
||||
src="https://www.reghalal.com/newsletters/2026_01_07/assets/visuel_9.jpg"
|
||||
style="border:0;display:block;font-size:13px;height:auto;outline:none;text-decoration:none;width:100%"
|
||||
width="200" height="auto"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td><td class="" style="vertical-align:top;width:200px;" ><![endif]-->
|
||||
<div class="mj-column-per-33-333333333333336 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:0;word-break:break-word">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:200px"> <img
|
||||
alt="Visuel de feuilletés préparés avec les dés de dinde Réghalal"
|
||||
src="https://www.reghalal.com/newsletters/2026_01_07/assets/visuel_8.jpg"
|
||||
style="border:0;display:block;font-size:13px;height:auto;outline:none;text-decoration:none;width:100%"
|
||||
width="200" height="auto"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><v:rect style="width:600px;" xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false"><v:fill origin="0.5, 0" position="0.5, 0" src="https://www.reghalal.com/newsletters/ref/fond-sable.jpg" type="tile" /><v:textbox style="mso-fit-shape-to-text:true" inset="0,0,0,0"><![endif]-->
|
||||
<div
|
||||
style="background:url(https://www.reghalal.com/newsletters/ref/fond-sable.jpg) top/auto repeat;background-position:top;background-repeat:repeat;background-size:auto;margin:0 auto;max-width:600px">
|
||||
<div style="font-size:0;line-height:0">
|
||||
<table align="center" background="https://www.reghalal.com/newsletters/ref/fond-sable.jpg" border="0"
|
||||
cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="background:url(https://www.reghalal.com/newsletters/ref/fond-sable.jpg) top/auto repeat;background-position:top;background-repeat:repeat;background-size:auto;width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="direction:ltr;font-size:0;padding:0;text-align:center">
|
||||
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:top;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="left" class="s-title" style="font-size:0;padding:10px 25px;word-break:break-word">
|
||||
<div
|
||||
style="color:#00803a;font-family:Barlow,Arial,sans-serif;font-size:37.5px;font-weight:700;line-height:1;text-align:left">
|
||||
REJOIGNEZ LA COMMUNAUTÉ</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" style="font-size:0;padding:10px 25px;word-break:break-word">
|
||||
<div
|
||||
style="color:#000;font-family:Arial,sans-serif;font-size:13px;line-height:1;text-align:left">
|
||||
<span class="s-subtitle"
|
||||
style="color:#024e2a;font-family:Barlow,Arial,sans-serif;font-size:33px;font-weight:700">@reghalal
|
||||
!</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div> <!--[if mso | IE]></v:textbox></v:rect></td></tr></table><![endif]-->
|
||||
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><v:rect style="width:600px;" xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false"><v:fill origin="0.5, 0" position="0.5, 0" src="https://www.reghalal.com/newsletters/ref/fond-sable.jpg" type="tile" size="200px" aspect="atmost" /><v:textbox style="mso-fit-shape-to-text:true" inset="0,0,0,0"><![endif]-->
|
||||
<div
|
||||
style="background:url(https://www.reghalal.com/newsletters/ref/fond-sable.jpg) top/200px repeat;background-position:top;background-repeat:repeat;background-size:200px;margin:0 auto;max-width:600px">
|
||||
<div style="font-size:0;line-height:0">
|
||||
<table align="center" background="https://www.reghalal.com/newsletters/ref/fond-sable.jpg" border="0"
|
||||
cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="background:url(https://www.reghalal.com/newsletters/ref/fond-sable.jpg) top/200px repeat;background-position:top;background-repeat:repeat;background-size:200px;width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="direction:ltr;font-size:0;padding:0;text-align:center">
|
||||
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:middle;width:300px;" ><![endif]-->
|
||||
<div class="mj-column-per-50 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:middle;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:middle"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="left" class="f-text" style="font-size:0;padding:10px 25px;word-break:break-word">
|
||||
<div
|
||||
style="color:#024e2a;font-family:Barlow,Arial,sans-serif;font-size:24px;line-height:1;text-align:left">
|
||||
Retrouvez toutes nos actualités sur nos réseaux sociaux ou sur <a
|
||||
style="color:#024e2a;font-weight:700"
|
||||
href="https://www.reghalal.com/?mtm_campaign=newsletter_janvier_2026_reghalal&mtm_source=newsletter_mensuelle_reghalal&mtm_medium=newsletter">reghalal.com</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td><td class="" style="vertical-align:bottom;width:300px;" ><![endif]-->
|
||||
<div class="mj-column-per-50 mj-outlook-group-fix"
|
||||
style="direction:ltr;display:inline-block;font-size:0;text-align:left;vertical-align:bottom;width:100%">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:bottom"
|
||||
width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="font-size:0;padding:10px 25px;word-break:break-word">
|
||||
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" ><tr><td><![endif]-->
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="display:inline-table;float:none">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding:4px;vertical-align:middle">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-radius:3px;width:58px">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size:0;height:58px;vertical-align:middle;width:58px"> <a
|
||||
href="https://www.facebook.com/reghalalofficiel/" target="_blank"> <img alt
|
||||
height="58" src="https://www.reghalal.com/newsletters/ref/facebook.png"
|
||||
style="border-radius:3px;display:block" width="58"> </a> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table> <!--[if mso | IE]></td><td><![endif]-->
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="display:inline-table;float:none">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding:4px;vertical-align:middle">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-radius:3px;width:58px">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size:0;height:58px;vertical-align:middle;width:58px"> <a
|
||||
href="https://www.instagram.com/reghalal/" target="_blank"> <img alt
|
||||
height="58" src="https://www.reghalal.com/newsletters/ref/instagram.png"
|
||||
style="border-radius:3px;display:block" width="58"> </a> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table> <!--[if mso | IE]></td><td><![endif]-->
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="display:inline-table;float:none">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding:4px;vertical-align:middle">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-radius:3px;width:58px">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size:0;height:58px;vertical-align:middle;width:58px"> <a
|
||||
href="https://www.tiktok.com/@reghalal" target="_blank"> <img alt
|
||||
height="58" src="https://www.reghalal.com/newsletters/ref/tiktok.png"
|
||||
style="border-radius:3px;display:block" width="58"> </a> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div> <!--[if mso | IE]></v:textbox></v:rect></td></tr></table><![endif]-->
|
||||
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
1174
public/newsletters/240517/index.html
Normal file
BIN
public/newsletters/240517/picture_01.jpg
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
public/newsletters/240517/picture_02.jpg
Normal file
|
After Width: | Height: | Size: 193 KiB |
BIN
public/newsletters/240517/picture_03.png
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
public/newsletters/240517/picture_04.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
public/newsletters/240517/picture_05.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
public/newsletters/240517/picture_06.jpg
Normal file
|
After Width: | Height: | Size: 104 KiB |