Compare commits
8 commits
bcdfc346d6
...
75382aec22
| Author | SHA1 | Date | |
|---|---|---|---|
| 75382aec22 | |||
| cefb34caa7 | |||
| ea0dee406e | |||
| 626ae51247 | |||
| 1455d81b3b | |||
| f986f91f81 | |||
| 4c4528c770 | |||
| b54a4b64b2 |
47 changed files with 1268 additions and 908 deletions
|
|
@ -24,15 +24,13 @@ return new Config()
|
||||||
'blank_line_after_namespace' => true,
|
'blank_line_after_namespace' => true,
|
||||||
'blank_lines_before_namespace' => ['min_line_breaks' => 1, 'max_line_breaks' => 2],
|
'blank_lines_before_namespace' => ['min_line_breaks' => 1, 'max_line_breaks' => 2],
|
||||||
'cast_spaces' => true,
|
'cast_spaces' => true,
|
||||||
'class_attributes_separation' => [
|
'class_attributes_separation' => ['elements' => [
|
||||||
'elements' => [
|
|
||||||
'case' => 'none',
|
'case' => 'none',
|
||||||
'const' => 'none',
|
'const' => 'none',
|
||||||
'method' => 'one',
|
'method' => 'one',
|
||||||
'property' => 'one',
|
'property' => 'one',
|
||||||
'trait_import' => 'none',
|
'trait_import' => 'none',
|
||||||
],
|
]],
|
||||||
],
|
|
||||||
'class_reference_name_casing' => true,
|
'class_reference_name_casing' => true,
|
||||||
'clean_namespace' => true,
|
'clean_namespace' => true,
|
||||||
'combine_consecutive_issets' => true,
|
'combine_consecutive_issets' => true,
|
||||||
|
|
@ -56,7 +54,11 @@ return new Config()
|
||||||
'full_opening_tag' => true,
|
'full_opening_tag' => true,
|
||||||
'fully_qualified_strict_types' => ['import_symbols' => true],
|
'fully_qualified_strict_types' => ['import_symbols' => true],
|
||||||
'function_to_constant' => true,
|
'function_to_constant' => true,
|
||||||
'global_namespace_import' => ['import_classes' => true, 'import_constants' => true, 'import_functions' => true],
|
'global_namespace_import' => [
|
||||||
|
'import_classes' => true,
|
||||||
|
'import_constants' => true,
|
||||||
|
'import_functions' => true,
|
||||||
|
],
|
||||||
'heredoc_to_nowdoc' => true,
|
'heredoc_to_nowdoc' => true,
|
||||||
'integer_literal_case' => true,
|
'integer_literal_case' => true,
|
||||||
'lambda_not_used_import' => true,
|
'lambda_not_used_import' => true,
|
||||||
|
|
@ -75,7 +77,11 @@ return new Config()
|
||||||
'multiline_comment_opening_closing' => true,
|
'multiline_comment_opening_closing' => true,
|
||||||
'native_constant_invocation' => true,
|
'native_constant_invocation' => true,
|
||||||
'native_function_casing' => true,
|
'native_function_casing' => true,
|
||||||
'native_function_invocation' => ['include' => ['@compiler_optimized'], 'scope' => 'namespaced', 'strict' => true],
|
'native_function_invocation' => [
|
||||||
|
'include' => ['@compiler_optimized'],
|
||||||
|
'scope' => 'namespaced',
|
||||||
|
'strict' => true,
|
||||||
|
],
|
||||||
'native_type_declaration_casing' => true,
|
'native_type_declaration_casing' => true,
|
||||||
'new_expression_parentheses' => true,
|
'new_expression_parentheses' => true,
|
||||||
'no_alias_functions' => ['sets' => ['@all']],
|
'no_alias_functions' => ['sets' => ['@all']],
|
||||||
|
|
@ -95,8 +101,7 @@ return new Config()
|
||||||
'no_trailing_comma_in_singleline' => true,
|
'no_trailing_comma_in_singleline' => true,
|
||||||
'no_trailing_whitespace_in_comment' => true,
|
'no_trailing_whitespace_in_comment' => true,
|
||||||
'no_unneeded_braces' => ['namespaces' => true],
|
'no_unneeded_braces' => ['namespaces' => true],
|
||||||
'no_unneeded_control_parentheses' => [
|
'no_unneeded_control_parentheses' => ['statements' => [
|
||||||
'statements' => [
|
|
||||||
'break',
|
'break',
|
||||||
'clone',
|
'clone',
|
||||||
'continue',
|
'continue',
|
||||||
|
|
@ -107,8 +112,7 @@ return new Config()
|
||||||
'switch_case',
|
'switch_case',
|
||||||
'yield',
|
'yield',
|
||||||
'yield_from',
|
'yield_from',
|
||||||
],
|
]],
|
||||||
],
|
|
||||||
'no_unneeded_final_method' => true,
|
'no_unneeded_final_method' => true,
|
||||||
'no_unneeded_import_alias' => true,
|
'no_unneeded_import_alias' => true,
|
||||||
'no_unreachable_default_argument_value' => true,
|
'no_unreachable_default_argument_value' => true,
|
||||||
|
|
@ -139,9 +143,11 @@ return new Config()
|
||||||
'pow_to_exponentiation' => true,
|
'pow_to_exponentiation' => true,
|
||||||
'protected_to_private' => true,
|
'protected_to_private' => true,
|
||||||
'psr_autoloading' => true,
|
'psr_autoloading' => true,
|
||||||
'random_api_migration' => [
|
'random_api_migration' => ['replacements' => [
|
||||||
'replacements' => ['getrandmax' => 'mt_getrandmax', 'rand' => 'mt_rand', 'srand' => 'mt_srand'],
|
'getrandmax' => 'mt_getrandmax',
|
||||||
],
|
'rand' => 'mt_rand',
|
||||||
|
'srand' => 'mt_srand',
|
||||||
|
]],
|
||||||
'return_assignment' => true,
|
'return_assignment' => true,
|
||||||
'self_accessor' => true,
|
'self_accessor' => true,
|
||||||
'self_static_accessor' => true,
|
'self_static_accessor' => true,
|
||||||
|
|
@ -216,8 +222,7 @@ return new Config()
|
||||||
// The type of @return annotations of methods returning a reference to itself must the configured one.
|
// The type of @return annotations of methods returning a reference to itself must the configured one.
|
||||||
'phpdoc_return_self_reference' => true,
|
'phpdoc_return_self_reference' => true,
|
||||||
// Scalar types should always be written in the same form. int not integer, bool not boolean, float not real or double.
|
// Scalar types should always be written in the same form. int not integer, bool not boolean, float not real or double.
|
||||||
'phpdoc_scalar' => [
|
'phpdoc_scalar' => ['types' => [
|
||||||
'types' => [
|
|
||||||
'boolean',
|
'boolean',
|
||||||
'callback',
|
'callback',
|
||||||
'double',
|
'double',
|
||||||
|
|
@ -227,8 +232,7 @@ return new Config()
|
||||||
'no-return',
|
'no-return',
|
||||||
'real',
|
'real',
|
||||||
'str',
|
'str',
|
||||||
],
|
]],
|
||||||
],
|
|
||||||
// Annotations in PHPDoc should be grouped together so that annotations of the same type immediately follow each other. Annotations of a different type are separated by a single blank line.
|
// Annotations in PHPDoc should be grouped together so that annotations of the same type immediately follow each other. Annotations of a different type are separated by a single blank line.
|
||||||
'phpdoc_separation' => [
|
'phpdoc_separation' => [
|
||||||
'groups' => [
|
'groups' => [
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,5 @@
|
||||||
{
|
{
|
||||||
"$schema": "./phpactor.schema.json",
|
"$schema": "./phpactor.schema.json",
|
||||||
"indexer.exclude_patterns": [
|
|
||||||
"/var/cache/**/*",
|
|
||||||
"/vendor/**/tests/**/*",
|
|
||||||
"/vendor/**/Tests/**/*",
|
|
||||||
"/vendor/composer/**/*"
|
|
||||||
],
|
|
||||||
"language_server.diagnostic_outsource_timeout": 5,
|
"language_server.diagnostic_outsource_timeout": 5,
|
||||||
"language_server.diagnostics_on_save": true,
|
"language_server.diagnostics_on_save": true,
|
||||||
"language_server.diagnostics_on_update": true,
|
"language_server.diagnostics_on_update": true,
|
||||||
|
|
|
||||||
19
.phpantom.toml
Normal file
19
.phpantom.toml
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# :schema: https://github.com/AJenbo/phpantom_lsp/raw/main/config-schema.json
|
||||||
|
|
||||||
|
[php]
|
||||||
|
# Override the detected PHP version (default: inferred from composer.json, or 8.5).
|
||||||
|
# version = "8.5"
|
||||||
|
#
|
||||||
|
|
||||||
|
[diagnostics]
|
||||||
|
extra-arguments = true
|
||||||
|
# Report member access on subjects whose type could not be resolved.
|
||||||
|
# Useful for discovering gaps in type coverage. Off by default.
|
||||||
|
unresolved-member-access = false
|
||||||
|
|
||||||
|
[indexing]
|
||||||
|
# How PHPantom discovers classes across the workspace.
|
||||||
|
# "composer" (default) - use Composer classmap, self-scan on fallback
|
||||||
|
# "self" - always self-scan, ignore Composer classmap
|
||||||
|
# "none" - no proactive scanning, Composer classmap only
|
||||||
|
strategy = "composer"
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
"!oxc",
|
"!oxc",
|
||||||
"!oxfmt",
|
"!oxfmt",
|
||||||
"!oxlint",
|
"!oxlint",
|
||||||
|
"!phptools",
|
||||||
"!prettier",
|
"!prettier",
|
||||||
"!tailwindcss-language-server",
|
"!tailwindcss-language-server",
|
||||||
"!tsgo",
|
"!tsgo",
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,17 @@
|
||||||
import { defineConfig, devices } from "@playwright/test";
|
import { defineConfig, devices, PlaywrightTestConfig } from "@playwright/test";
|
||||||
|
|
||||||
export default defineConfig({
|
const playwrightConfig: PlaywrightTestConfig = defineConfig({
|
||||||
fullyParallel: true,
|
fullyParallel: true,
|
||||||
projects: [
|
projects: [
|
||||||
{
|
{
|
||||||
name: "desktop-chromium-1920",
|
name: "desktop-chromium-1920",
|
||||||
use: { ...devices["Desktop Chrome"], viewport: { height: 1080, width: 1920 } },
|
use: { ...devices["Desktop Chrome"], viewport: { height: 1080, width: 1920 } },
|
||||||
},
|
},
|
||||||
// {
|
|
||||||
// name: "desktop-chromium-1536",
|
|
||||||
// use: { ...devices["Desktop Chrome"], viewport: { width: 1536, height: 864 } },
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: "desktop-chromium-1366",
|
|
||||||
// use: { ...devices["Desktop Chrome"], viewport: { width: 1366, height: 768 } },
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
name: "desktop-firefox-1920",
|
name: "desktop-firefox-1920",
|
||||||
use: { ...devices["Desktop Firefox"], viewport: { height: 1080, width: 1920 } },
|
use: { ...devices["Desktop Firefox"], viewport: { height: 1080, width: 1920 } },
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// name: "desktop-firefox-1536",
|
|
||||||
// use: { ...devices["Desktop Firefox"], viewport: { width: 1536, height: 864 } },
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: "desktop-firefox-1366",
|
|
||||||
// use: { ...devices["Desktop Firefox"], viewport: { width: 1366, height: 768 } },
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: "tablet-chromium-portrait",
|
// name: "tablet-chromium-portrait",
|
||||||
// use: { ...devices["Galaxy Tab S9"] },
|
// use: { ...devices["Galaxy Tab S9"] },
|
||||||
// },
|
// },
|
||||||
|
|
@ -49,7 +33,6 @@ export default defineConfig({
|
||||||
testDir: "../tests",
|
testDir: "../tests",
|
||||||
timeout: 10_000,
|
timeout: 10_000,
|
||||||
use: {
|
use: {
|
||||||
/* Base URL to use in actions like `await page.goto('/')`. */
|
|
||||||
baseURL: "https://haikuatelier.gcch.local",
|
baseURL: "https://haikuatelier.gcch.local",
|
||||||
clientCertificates: [
|
clientCertificates: [
|
||||||
{
|
{
|
||||||
|
|
@ -61,5 +44,7 @@ export default defineConfig({
|
||||||
ignoreHTTPSErrors: true,
|
ignoreHTTPSErrors: true,
|
||||||
trace: "retry-with-trace",
|
trace: "retry-with-trace",
|
||||||
},
|
},
|
||||||
workers: "100%",
|
workers: "50%",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export default playwrightConfig;
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use Roots\WPConfig\Config;
|
use Roots\WPConfig\Config;
|
||||||
|
|
||||||
|
use function base64_encode;
|
||||||
use function Env\env;
|
use function Env\env;
|
||||||
|
|
||||||
Config::define('SAVEQUERIES', true);
|
Config::define('SAVEQUERIES', true);
|
||||||
|
|
@ -25,6 +26,10 @@ Config::define('DISALLOW_FILE_MODS', false);
|
||||||
// WooCommerce
|
// WooCommerce
|
||||||
Config::define('WOOCOMMERCE_API_CONSUMER_KEY', env('WOOCOMMERCE_API_CONSUMER_KEY'));
|
Config::define('WOOCOMMERCE_API_CONSUMER_KEY', env('WOOCOMMERCE_API_CONSUMER_KEY'));
|
||||||
Config::define('WOOCOMMERCE_API_CONSUMER_SECRET', env('WOOCOMMERCE_API_CONSUMER_SECRET'));
|
Config::define('WOOCOMMERCE_API_CONSUMER_SECRET', env('WOOCOMMERCE_API_CONSUMER_SECRET'));
|
||||||
|
Config::define(
|
||||||
|
'WOOCOMMERCE_API_AUTH_STRING',
|
||||||
|
base64_encode(env('WOOCOMMERCE_API_CONSUMER_KEY') . ':' . env('WOOCOMMERCE_API_CONSUMER_SECRET')),
|
||||||
|
);
|
||||||
|
|
||||||
// Stripe
|
// Stripe
|
||||||
Config::define('STRIPE_API_SECRET', env('STRIPE_API_SECRET'));
|
Config::define('STRIPE_API_SECRET', env('STRIPE_API_SECRET'));
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use Roots\WPConfig\Config;
|
use Roots\WPConfig\Config;
|
||||||
|
|
||||||
|
use function base64_encode;
|
||||||
use function Env\env;
|
use function Env\env;
|
||||||
|
|
||||||
Config::define('WP_DEBUG', true);
|
Config::define('WP_DEBUG', true);
|
||||||
|
|
@ -20,6 +21,10 @@ Config::define('DISALLOW_FILE_MODS', false);
|
||||||
|
|
||||||
Config::define('WOOCOMMERCE_API_CONSUMER_KEY', env('WOOCOMMERCE_API_CONSUMER_KEY'));
|
Config::define('WOOCOMMERCE_API_CONSUMER_KEY', env('WOOCOMMERCE_API_CONSUMER_KEY'));
|
||||||
Config::define('WOOCOMMERCE_API_CONSUMER_SECRET', env('WOOCOMMERCE_API_CONSUMER_SECRET'));
|
Config::define('WOOCOMMERCE_API_CONSUMER_SECRET', env('WOOCOMMERCE_API_CONSUMER_SECRET'));
|
||||||
|
Config::define(
|
||||||
|
'WOOCOMMERCE_API_AUTH_STRING',
|
||||||
|
base64_encode(env('WOOCOMMERCE_API_CONSUMER_KEY') . ':' . env('WOOCOMMERCE_API_CONSUMER_SECRET')),
|
||||||
|
);
|
||||||
|
|
||||||
// Stripe
|
// Stripe
|
||||||
Config::define('STRIPE_API_SECRET', env('STRIPE_API_SECRET'));
|
Config::define('STRIPE_API_SECRET', env('STRIPE_API_SECRET'));
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,13 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use Roots\WPConfig\Config;
|
use Roots\WPConfig\Config;
|
||||||
|
|
||||||
|
use function base64_encode;
|
||||||
use function Env\env;
|
use function Env\env;
|
||||||
|
|
||||||
Config::define('DISALLOW_INDEXING', true);
|
Config::define('DISALLOW_INDEXING', true);
|
||||||
Config::define('WOOCOMMERCE_API_CONSUMER_KEY', env('WOOCOMMERCE_API_CONSUMER_KEY'));
|
Config::define('WOOCOMMERCE_API_CONSUMER_KEY', env('WOOCOMMERCE_API_CONSUMER_KEY'));
|
||||||
Config::define('WOOCOMMERCE_API_CONSUMER_SECRET', env('WOOCOMMERCE_API_CONSUMER_SECRET'));
|
Config::define('WOOCOMMERCE_API_CONSUMER_SECRET', env('WOOCOMMERCE_API_CONSUMER_SECRET'));
|
||||||
|
Config::define(
|
||||||
|
'WOOCOMMERCE_API_AUTH_STRING',
|
||||||
|
base64_encode(env('WOOCOMMERCE_API_CONSUMER_KEY') . ':' . env('WOOCOMMERCE_API_CONSUMER_SECRET')),
|
||||||
|
);
|
||||||
|
|
|
||||||
13
justfile
13
justfile
|
|
@ -90,6 +90,11 @@ watch-css:
|
||||||
build-js:
|
build-js:
|
||||||
aube x vite build --config "cfg/vite.config.ts"
|
aube x vite build --config "cfg/vite.config.ts"
|
||||||
|
|
||||||
|
# Compile TypeScript à chaque changement de fichier.
|
||||||
|
[group('js')]
|
||||||
|
watch-js:
|
||||||
|
@watchexec -w "web/app/themes/haiku-atelier-2024/src/scripts" -w "web/app/themes/haiku-atelier-2024/src/scripts-effect" -- just build-js treefmt
|
||||||
|
|
||||||
# Compile tout.
|
# Compile tout.
|
||||||
[group('css')]
|
[group('css')]
|
||||||
[group('js')]
|
[group('js')]
|
||||||
|
|
@ -98,11 +103,6 @@ build-all:
|
||||||
@just build-js
|
@just build-js
|
||||||
@just format
|
@just format
|
||||||
|
|
||||||
# Compile TypeScript à chaque changement de fichier.
|
|
||||||
[group('js')]
|
|
||||||
watch-js:
|
|
||||||
aube x vite build --config "cfg/vite.config.ts" --watch
|
|
||||||
|
|
||||||
# Vérifie le code TypeScript avec des analyseurs statiques.
|
# Vérifie le code TypeScript avec des analyseurs statiques.
|
||||||
[group('js')]
|
[group('js')]
|
||||||
[group('qualité')]
|
[group('qualité')]
|
||||||
|
|
@ -170,3 +170,6 @@ pull-images:
|
||||||
|
|
||||||
export_production_db:
|
export_production_db:
|
||||||
fish "scripts/déclenche-sauvegarde-bdd-production.fish"
|
fish "scripts/déclenche-sauvegarde-bdd-production.fish"
|
||||||
|
|
||||||
|
ui_tests:
|
||||||
|
aube x playwright test --config cfg/playwright.config.ts --ui
|
||||||
|
|
|
||||||
1755
mago-schema.json
1755
mago-schema.json
File diff suppressed because it is too large
Load diff
|
|
@ -36,6 +36,7 @@ threads = 0
|
||||||
no-else-clause = { enabled = false }
|
no-else-clause = { enabled = false }
|
||||||
|
|
||||||
[analyzer]
|
[analyzer]
|
||||||
|
allow-implicit-pipe-callable-types = false
|
||||||
allow-possibly-undefined-array-keys = false
|
allow-possibly-undefined-array-keys = false
|
||||||
allow-side-effects-in-conditions = true
|
allow-side-effects-in-conditions = true
|
||||||
analyze-dead-code = true
|
analyze-dead-code = true
|
||||||
|
|
|
||||||
2
mise.toml
Normal file
2
mise.toml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
[tools]
|
||||||
|
"github:AJenbo/phpantom_lsp" = "latest"
|
||||||
|
|
@ -236,6 +236,21 @@
|
||||||
"default": 1610612736,
|
"default": 1610612736,
|
||||||
"description": "Ensure that PHP has a memory_limit of at least this amount in bytes"
|
"description": "Ensure that PHP has a memory_limit of at least this amount in bytes"
|
||||||
},
|
},
|
||||||
|
"core.project_config_candidates": {
|
||||||
|
"default": [],
|
||||||
|
"description": "(internal) list of potential project-level configuration files"
|
||||||
|
},
|
||||||
|
"core.trust": {
|
||||||
|
"default": {
|
||||||
|
"path": null,
|
||||||
|
"trust": []
|
||||||
|
},
|
||||||
|
"description": "(internal) map of trusted project directories"
|
||||||
|
},
|
||||||
|
"core.trusted": {
|
||||||
|
"default": false,
|
||||||
|
"description": "(internal) if the configuration is trusted"
|
||||||
|
},
|
||||||
"file_path_resolver.app_name": {
|
"file_path_resolver.app_name": {
|
||||||
"default": "phpactor",
|
"default": "phpactor",
|
||||||
"description": null
|
"description": null
|
||||||
|
|
@ -278,7 +293,8 @@
|
||||||
"default": [
|
"default": [
|
||||||
"/vendor/**/tests/**/*",
|
"/vendor/**/tests/**/*",
|
||||||
"/vendor/**/Tests/**/*",
|
"/vendor/**/Tests/**/*",
|
||||||
"/vendor/composer/**/*"
|
"/vendor/composer/**/*",
|
||||||
|
"/vendor/rector/rector/stubs-rector"
|
||||||
],
|
],
|
||||||
"description": "Glob patterns to exclude while indexing",
|
"description": "Glob patterns to exclude while indexing",
|
||||||
"type": [
|
"type": [
|
||||||
|
|
@ -316,6 +332,13 @@
|
||||||
"string"
|
"string"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"indexer.max_filesize_to_index": {
|
||||||
|
"default": 1000000,
|
||||||
|
"description": "Files larger than this will not be indexed. (Size in bytes)",
|
||||||
|
"type": [
|
||||||
|
"integer"
|
||||||
|
]
|
||||||
|
},
|
||||||
"indexer.poll_time": {
|
"indexer.poll_time": {
|
||||||
"default": 5000,
|
"default": 5000,
|
||||||
"description": "For polling indexers only: the time, in milliseconds, between polls (e.g. filesystem scans)",
|
"description": "For polling indexers only: the time, in milliseconds, between polls (e.g. filesystem scans)",
|
||||||
|
|
@ -337,6 +360,13 @@
|
||||||
"boolean"
|
"boolean"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"indexer.search_include_patterns": {
|
||||||
|
"default": [],
|
||||||
|
"description": "When searching the index exclude records whose fully qualified names match any of these regex patterns (use to exclude suggestions from search results). Namespace separators must be escaped as `\\\\\\\\` for example `^Foo\\\\\\\\` to include all namespaces whose first segment is `Foo`",
|
||||||
|
"type": [
|
||||||
|
"object"
|
||||||
|
]
|
||||||
|
},
|
||||||
"indexer.stub_paths": {
|
"indexer.stub_paths": {
|
||||||
"default": [],
|
"default": [],
|
||||||
"description": "Paths to external folders to index. They will be indexed only once, if you want to take any changes into account you will have to reindex your project manually.",
|
"description": "Paths to external folders to index. They will be indexed only once, if you want to take any changes into account you will have to reindex your project manually.",
|
||||||
|
|
@ -362,6 +392,10 @@
|
||||||
"default": [],
|
"default": [],
|
||||||
"description": "List of paths to exclude from diagnostics, e.g. `vendor/**/*`"
|
"description": "List of paths to exclude from diagnostics, e.g. `vendor/**/*`"
|
||||||
},
|
},
|
||||||
|
"language_server.diagnostic_ignore_codes": {
|
||||||
|
"default": [],
|
||||||
|
"description": "Ignore diagnostics that have the codes listed here, e.g. [\"fix_namespace_class_name\"]. The codes match those shown in the LSP client."
|
||||||
|
},
|
||||||
"language_server.diagnostic_outsource": {
|
"language_server.diagnostic_outsource": {
|
||||||
"default": true,
|
"default": true,
|
||||||
"description": "If applicable diagnostics should be \"outsourced\" to a different process"
|
"description": "If applicable diagnostics should be \"outsourced\" to a different process"
|
||||||
|
|
@ -389,6 +423,10 @@
|
||||||
"default": true,
|
"default": true,
|
||||||
"description": "Perform diagnostics when the text document is updated"
|
"description": "Perform diagnostics when the text document is updated"
|
||||||
},
|
},
|
||||||
|
"language_server.enable_trust_check": {
|
||||||
|
"default": true,
|
||||||
|
"description": "Check to see if project path is trusted before loading configurations from it"
|
||||||
|
},
|
||||||
"language_server.enable_workspace": {
|
"language_server.enable_workspace": {
|
||||||
"default": true,
|
"default": true,
|
||||||
"description": "If workspace management / text synchronization should be enabled (this isn't required for some language server implementations, e.g. static analyzers)"
|
"description": "If workspace management / text synchronization should be enabled (this isn't required for some language server implementations, e.g. static analyzers)"
|
||||||
|
|
@ -450,6 +488,17 @@
|
||||||
"boolean"
|
"boolean"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"language_server_highlight.enabled": {
|
||||||
|
"default": true,
|
||||||
|
"description": "Enable or disable the highlighter (can be expensive on large documents)"
|
||||||
|
},
|
||||||
|
"language_server_indexer.optimiser_timeout": {
|
||||||
|
"default": 3600,
|
||||||
|
"description": "Optimise the index every N seconds",
|
||||||
|
"type": [
|
||||||
|
"integer"
|
||||||
|
]
|
||||||
|
},
|
||||||
"language_server_indexer.reindex_timeout": {
|
"language_server_indexer.reindex_timeout": {
|
||||||
"default": 300,
|
"default": 300,
|
||||||
"description": "Unconditionally reindex modified files every N seconds"
|
"description": "Unconditionally reindex modified files every N seconds"
|
||||||
|
|
@ -467,15 +516,17 @@
|
||||||
},
|
},
|
||||||
"language_server_php_cs_fixer.env": {
|
"language_server_php_cs_fixer.env": {
|
||||||
"default": {
|
"default": {
|
||||||
"PHP_CS_FIXER_IGNORE_ENV": true,
|
|
||||||
"XDEBUG_MODE": "off"
|
"XDEBUG_MODE": "off"
|
||||||
},
|
},
|
||||||
"description": "Environment for PHP CS Fixer (e.g. to set PHP_CS_FIXER_IGNORE_ENV)"
|
"description": "Environment for PHP CS Fixer"
|
||||||
},
|
},
|
||||||
"language_server_php_cs_fixer.show_diagnostics": {
|
"language_server_php_cs_fixer.show_diagnostics": {
|
||||||
"default": true,
|
"default": true,
|
||||||
"description": "Whether PHP CS Fixer diagnostics are shown"
|
"description": "Whether PHP CS Fixer diagnostics are shown"
|
||||||
},
|
},
|
||||||
|
"language_server_php_cs_fixer.version": {
|
||||||
|
"description": "Arbitrary version (if not provided, phpactor tries to detect it - only to run it on unsupported PHP versions)"
|
||||||
|
},
|
||||||
"language_server_phpstan.bin": {
|
"language_server_phpstan.bin": {
|
||||||
"default": "%project_root%/vendor/bin/phpstan",
|
"default": "%project_root%/vendor/bin/phpstan",
|
||||||
"description": "Path to the PHPStan executable"
|
"description": "Path to the PHPStan executable"
|
||||||
|
|
@ -483,12 +534,24 @@
|
||||||
"language_server_phpstan.config": {
|
"language_server_phpstan.config": {
|
||||||
"description": "Override the PHPStan configuration file"
|
"description": "Override the PHPStan configuration file"
|
||||||
},
|
},
|
||||||
|
"language_server_phpstan.editor_mode": {
|
||||||
|
"default": false,
|
||||||
|
"description": "DEPRECATED. Editor mode of Phpstan is used automatically when it's supported."
|
||||||
|
},
|
||||||
"language_server_phpstan.level": {
|
"language_server_phpstan.level": {
|
||||||
"description": "Override the PHPStan level"
|
"description": "Override the PHPStan level"
|
||||||
},
|
},
|
||||||
"language_server_phpstan.mem_limit": {
|
"language_server_phpstan.mem_limit": {
|
||||||
"description": "Override the PHPStan memory limit"
|
"description": "Override the PHPStan memory limit"
|
||||||
},
|
},
|
||||||
|
"language_server_phpstan.severity": {
|
||||||
|
"default": 1,
|
||||||
|
"description": "Severity at which PHPStan diagnostics should be reported. Ranges from 1 (error) to 4 (hint)."
|
||||||
|
},
|
||||||
|
"language_server_phpstan.tmp_file_disabled": {
|
||||||
|
"default": false,
|
||||||
|
"description": "Disable the use of temporary files when. This prevents as-you-type diagnostics, but ensures paths in phpstan config are respected. See https://github.com/phpactor/phpactor/issues/2763"
|
||||||
|
},
|
||||||
"language_server_psalm.bin": {
|
"language_server_psalm.bin": {
|
||||||
"default": "%project_root%/vendor/bin/psalm",
|
"default": "%project_root%/vendor/bin/psalm",
|
||||||
"description": "Path to psalm if different from vendor/bin/psalm",
|
"description": "Path to psalm if different from vendor/bin/psalm",
|
||||||
|
|
@ -496,6 +559,13 @@
|
||||||
"string"
|
"string"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"language_server_psalm.config": {
|
||||||
|
"default": "",
|
||||||
|
"description": "Path to psalm config. Like %project_root%/psalm.xml",
|
||||||
|
"type": [
|
||||||
|
"string"
|
||||||
|
]
|
||||||
|
},
|
||||||
"language_server_psalm.error_level": {
|
"language_server_psalm.error_level": {
|
||||||
"description": "Override level at which Psalm should report errors (lower => more errors)"
|
"description": "Override level at which Psalm should report errors (lower => more errors)"
|
||||||
},
|
},
|
||||||
|
|
@ -527,6 +597,10 @@
|
||||||
"boolean"
|
"boolean"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"language_server_reference_finder.soft_timeout": {
|
||||||
|
"default": 10,
|
||||||
|
"description": "Interupt and ask for confirmation to continue after this timeout (in seconds)"
|
||||||
|
},
|
||||||
"language_server_reference_reference_finder.reference_timeout": {
|
"language_server_reference_reference_finder.reference_timeout": {
|
||||||
"default": 60,
|
"default": 60,
|
||||||
"description": "Stop searching for references after this time (in seconds) has expired"
|
"description": "Stop searching for references after this time (in seconds) has expired"
|
||||||
|
|
@ -658,6 +732,10 @@
|
||||||
"default": "%project_root%/var/cache/dev/App_KernelDevDebugContainer.xml",
|
"default": "%project_root%/var/cache/dev/App_KernelDevDebugContainer.xml",
|
||||||
"description": "Path to the Symfony container XML dump file"
|
"description": "Path to the Symfony container XML dump file"
|
||||||
},
|
},
|
||||||
|
"worse_reflection.additive_stubs": {
|
||||||
|
"default": [],
|
||||||
|
"description": "Additive stubs files relative to the project root. These stubs augment existing defininitions."
|
||||||
|
},
|
||||||
"worse_reflection.cache_dir": {
|
"worse_reflection.cache_dir": {
|
||||||
"default": "%cache%/worse-reflection",
|
"default": "%cache%/worse-reflection",
|
||||||
"description": "Cache directory for stubs"
|
"description": "Cache directory for stubs"
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
/** @effect-diagnostics asyncFunction:skip-file */
|
||||||
import type { APIRequestContext, Locator, Page, Response } from "@playwright/test";
|
import type { APIRequestContext, Locator, Page, Response } from "@playwright/test";
|
||||||
import { expect, test } from "@playwright/test";
|
import { expect, test } from "@playwright/test";
|
||||||
import type { WCV3Products } from "../../web/app/themes/haiku-atelier-2024/src/scripts/lib/types/api/v3/products";
|
import type { WCV3Products } from "../../web/app/themes/haiku-atelier-2024/src/scripts/lib/types/api/v3/products";
|
||||||
|
|
@ -10,7 +11,7 @@ test("can scroll to the end of the grid", async ({ page }): Promise<void> => {
|
||||||
await scrollToGridsEnd(page);
|
await scrollToGridsEnd(page);
|
||||||
});
|
});
|
||||||
|
|
||||||
test.skip("can access all Products' pages", async ({ page, request }): Promise<void> => {
|
test("can access all Products' pages", async ({ page, request }): Promise<void> => {
|
||||||
await page["goto"]("https://haikuatelier.gcch.local/shop/");
|
await page["goto"]("https://haikuatelier.gcch.local/shop/");
|
||||||
const links = await getAllProductsLinks(page, request);
|
const links = await getAllProductsLinks(page, request);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ $templates = ['404.twig'];
|
||||||
function load_page_resources(): void {
|
function load_page_resources(): void {
|
||||||
Resource::enqueue_style_file(
|
Resource::enqueue_style_file(
|
||||||
handle: 'haiku-atelier-2024-styles-page-a-propos',
|
handle: 'haiku-atelier-2024-styles-page-a-propos',
|
||||||
path: '/assets/css/pages/page-modele-simple.css',
|
path : '/assets/css/pages/page-modele-simple.css',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ use WC_Product;
|
||||||
use function add_action;
|
use function add_action;
|
||||||
use function array_map;
|
use function array_map;
|
||||||
use function assert;
|
use function assert;
|
||||||
use function base64_encode;
|
|
||||||
use function is_string;
|
use function is_string;
|
||||||
use function wc_get_products;
|
use function wc_get_products;
|
||||||
use function wp_create_nonce;
|
use function wp_create_nonce;
|
||||||
|
|
@ -33,12 +32,7 @@ $products = array_map(callback: Product::from_wc_product(...), array: $wc_produc
|
||||||
$context['products'] = $products;
|
$context['products'] = $products;
|
||||||
|
|
||||||
// Injecte les états initiaux des données du Produit sous forme de JSON dans le contexte.
|
// Injecte les états initiaux des données du Produit sous forme de JSON dans le contexte.
|
||||||
$page_states = [
|
$page_states = ['authString' => Config::get('WOOCOMMERCE_API_AUTH_STRING'), 'nonce' => wp_create_nonce('wc_store_api')]
|
||||||
'nonce' => wp_create_nonce('wc_store_api'),
|
|
||||||
'authString' => base64_encode(
|
|
||||||
Config::get('WOOCOMMERCE_API_CONSUMER_KEY') . ':' . Config::get('WOOCOMMERCE_API_CONSUMER_SECRET'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|> wp_json_encode(...);
|
|> wp_json_encode(...);
|
||||||
assert(is_string($page_states));
|
assert(is_string($page_states));
|
||||||
$context['page_states'] = $page_states;
|
$context['page_states'] = $page_states;
|
||||||
|
|
@ -46,14 +40,14 @@ $context['page_states'] = $page_states;
|
||||||
add_action('wp_enqueue_scripts', function (): void {
|
add_action('wp_enqueue_scripts', function (): void {
|
||||||
Resource::enqueue_style_file(
|
Resource::enqueue_style_file(
|
||||||
handle: 'haiku-atelier-2024-styles-page-boutique',
|
handle: 'haiku-atelier-2024-styles-page-boutique',
|
||||||
path: '/assets/css/pages/page-boutique.css',
|
path : '/assets/css/pages/page-boutique.css',
|
||||||
);
|
);
|
||||||
Resource::enqueue_script_module_file(
|
Resource::enqueue_script_module_file(
|
||||||
id: 'haiku-atelier-2024-scripts-page-boutique',
|
id : 'haiku-atelier-2024-scripts-page-boutique',
|
||||||
path: '/assets/js/scripts-page-boutique.js',
|
path: '/assets/js/scripts-page-boutique.js',
|
||||||
);
|
);
|
||||||
Resource::enqueue_script_module_file(
|
Resource::enqueue_script_module_file(
|
||||||
id: 'haiku-atelier-2024-scripts-menu-categories',
|
id : 'haiku-atelier-2024-scripts-menu-categories',
|
||||||
path: '/assets/js/scripts-menu-categories.js',
|
path: '/assets/js/scripts-menu-categories.js',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -462,8 +462,8 @@ input[type="checkbox"], input[type="radio"] {
|
||||||
transition: 0.2s background;
|
transition: 0.2s background;
|
||||||
}
|
}
|
||||||
input[type="checkbox"]:checked, input[type="radio"]:checked {
|
input[type="checkbox"]:checked, input[type="radio"]:checked {
|
||||||
color: var(--couleur-blanc);
|
color: var(--couleur-noir);
|
||||||
background: var(--couleur-gris-fonce);
|
background: var(--arriere-plan-points);
|
||||||
}
|
}
|
||||||
input[type="checkbox"]:checked::before, input[type="radio"]:checked::before {
|
input[type="checkbox"]:checked::before, input[type="radio"]:checked::before {
|
||||||
content: "x";
|
content: "x";
|
||||||
|
|
@ -492,7 +492,7 @@ input[type="radio"] + label {
|
||||||
}
|
}
|
||||||
@media (hover: hover) {
|
@media (hover: hover) {
|
||||||
input[type="checkbox"]:hover, input[type="radio"]:hover {
|
input[type="checkbox"]:hover, input[type="radio"]:hover {
|
||||||
background: var(--couleur-gris-fonce);
|
background: var(--arriere-plan-points);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -18,12 +18,12 @@ $templates = ['accueil.twig'];
|
||||||
|
|
||||||
add_action('wp_enqueue_scripts', function (): void {
|
add_action('wp_enqueue_scripts', function (): void {
|
||||||
Resource::enqueue_script_module_file(
|
Resource::enqueue_script_module_file(
|
||||||
id: 'haiku-atelier-2024-scripts-page-accueil',
|
id : 'haiku-atelier-2024-scripts-page-accueil',
|
||||||
path: '/assets/js/scripts-page-accueil.js',
|
path: '/assets/js/scripts-page-accueil.js',
|
||||||
);
|
);
|
||||||
Resource::enqueue_style_file(
|
Resource::enqueue_style_file(
|
||||||
handle: 'haiku-atelier-2024-styles-page-accueil',
|
handle: 'haiku-atelier-2024-styles-page-accueil',
|
||||||
path: '/assets/css/pages/page-accueil.css',
|
path : '/assets/css/pages/page-accueil.css',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,21 +24,21 @@ Timber::$dirname = ['views'];
|
||||||
// Charge les Scripts du thème (report d'erreurs)
|
// Charge les Scripts du thème (report d'erreurs)
|
||||||
function load_scripts(): void {
|
function load_scripts(): void {
|
||||||
wp_enqueue_script_module(
|
wp_enqueue_script_module(
|
||||||
id: 'haiku-atelier-2024-bouton-panier',
|
id : 'haiku-atelier-2024-bouton-panier',
|
||||||
deps: [],
|
deps : [],
|
||||||
src: get_template_directory_uri() . '/assets/js/scripts-bouton-panier.js',
|
src : get_template_directory_uri() . '/assets/js/scripts-bouton-panier.js',
|
||||||
version: filemtime(get_template_directory() . '/assets/js/scripts-bouton-panier.js'),
|
version: filemtime(get_template_directory() . '/assets/js/scripts-bouton-panier.js'),
|
||||||
);
|
);
|
||||||
wp_enqueue_script_module(
|
wp_enqueue_script_module(
|
||||||
id: 'haiku-atelier-2024-menu-mobile',
|
id : 'haiku-atelier-2024-menu-mobile',
|
||||||
deps: [],
|
deps : [],
|
||||||
src: get_template_directory_uri() . '/assets/js/scripts-menu-mobile.js',
|
src : get_template_directory_uri() . '/assets/js/scripts-menu-mobile.js',
|
||||||
version: filemtime(get_template_directory() . '/assets/js/scripts-menu-mobile.js'),
|
version: filemtime(get_template_directory() . '/assets/js/scripts-menu-mobile.js'),
|
||||||
);
|
);
|
||||||
wp_enqueue_script_module(
|
wp_enqueue_script_module(
|
||||||
id: 'haiku-atelier-2024-bouton-retour-sommet',
|
id : 'haiku-atelier-2024-bouton-retour-sommet',
|
||||||
deps: [],
|
deps : [],
|
||||||
src: get_template_directory_uri() . '/assets/js/scripts-bouton-retour-sommet.js',
|
src : get_template_directory_uri() . '/assets/js/scripts-bouton-retour-sommet.js',
|
||||||
version: filemtime(get_template_directory() . '/assets/js/scripts-bouton-retour-sommet.js'),
|
version: filemtime(get_template_directory() . '/assets/js/scripts-bouton-retour-sommet.js'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -49,10 +49,10 @@ add_action('wp_enqueue_scripts', 'load_scripts');
|
||||||
function charge_styles_haiku_atelier_2024(): void {
|
function charge_styles_haiku_atelier_2024(): void {
|
||||||
wp_enqueue_style(
|
wp_enqueue_style(
|
||||||
handle: 'haiku-atelier-2024-styles',
|
handle: 'haiku-atelier-2024-styles',
|
||||||
src: get_template_directory_uri() . '/assets/css/main.css',
|
src : get_template_directory_uri() . '/assets/css/main.css',
|
||||||
deps: [],
|
deps : [],
|
||||||
ver: filemtime(get_template_directory() . '/assets/css/main.css'),
|
ver : filemtime(get_template_directory() . '/assets/css/main.css'),
|
||||||
media: 'all',
|
media : 'all',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,10 +32,10 @@ $context['image_dimensions'] = $image_dimensions;
|
||||||
add_action('wp_enqueue_scripts', function (): void {
|
add_action('wp_enqueue_scripts', function (): void {
|
||||||
Resource::enqueue_style_file(
|
Resource::enqueue_style_file(
|
||||||
handle: 'haiku-atelier-2024-styles-page-a-propos',
|
handle: 'haiku-atelier-2024-styles-page-a-propos',
|
||||||
path: '/assets/css/pages/page-a-propos.css',
|
path : '/assets/css/pages/page-a-propos.css',
|
||||||
);
|
);
|
||||||
Resource::enqueue_script_module_file(
|
Resource::enqueue_script_module_file(
|
||||||
id: 'haiku-atelier-2024-scripts-page-a-propos',
|
id : 'haiku-atelier-2024-scripts-page-a-propos',
|
||||||
path: '/assets/js/scripts-page-a-propos.js',
|
path: '/assets/js/scripts-page-a-propos.js',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ foreach (WC()->cart->get_cart() as $cle_panier => $article_panier) {
|
||||||
'id_produit' => $article_panier['product_id'],
|
'id_produit' => $article_panier['product_id'],
|
||||||
'id_variation' => $article_panier['variation_id'],
|
'id_variation' => $article_panier['variation_id'],
|
||||||
'image' => pipe($article_panier['data']?->get_image_id(), static fn($id): string => Resource::output_multi_formats_img_tag(
|
'image' => pipe($article_panier['data']?->get_image_id(), static fn($id): string => Resource::output_multi_formats_img_tag(
|
||||||
id: (string) $id,
|
id : (string) $id,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
)),
|
)),
|
||||||
'prix' => $article_panier['data']?->get_price(),
|
'prix' => $article_panier['data']?->get_price(),
|
||||||
|
|
@ -97,10 +97,10 @@ $context['methodes_livraison'] = $methodes_livraison;
|
||||||
add_action('wp_enqueue_scripts', function (): void {
|
add_action('wp_enqueue_scripts', function (): void {
|
||||||
Resource::enqueue_style_file(
|
Resource::enqueue_style_file(
|
||||||
handle: 'haiku-atelier-2024-styles-page-panier',
|
handle: 'haiku-atelier-2024-styles-page-panier',
|
||||||
path: '/assets/css/pages/page-panier.css',
|
path : '/assets/css/pages/page-panier.css',
|
||||||
);
|
);
|
||||||
Resource::enqueue_script_module_file(
|
Resource::enqueue_script_module_file(
|
||||||
id: 'haiku-atelier-2024-scripts-page-panier',
|
id : 'haiku-atelier-2024-scripts-page-panier',
|
||||||
path: '/assets/js/scripts-page-panier.js',
|
path: '/assets/js/scripts-page-panier.js',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ $templates = ['contact.twig'];
|
||||||
add_action('wp_enqueue_scripts', function (): void {
|
add_action('wp_enqueue_scripts', function (): void {
|
||||||
Resource::enqueue_style_file(
|
Resource::enqueue_style_file(
|
||||||
handle: 'haiku-atelier-2024-styles-page-contact',
|
handle: 'haiku-atelier-2024-styles-page-contact',
|
||||||
path: '/assets/css/pages/page-contact.min.css',
|
path : '/assets/css/pages/page-contact.min.css',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ $templates = ['echec-commande.twig'];
|
||||||
add_action('wp_enqueue_scripts', function (): void {
|
add_action('wp_enqueue_scripts', function (): void {
|
||||||
Resource::enqueue_style_file(
|
Resource::enqueue_style_file(
|
||||||
handle: 'haiku-atelier-2024-styles-page-modele-simple',
|
handle: 'haiku-atelier-2024-styles-page-modele-simple',
|
||||||
path: '/assets/css/pages/page-modele-simple.css',
|
path : '/assets/css/pages/page-modele-simple.css',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ try {
|
||||||
'attribut' => $attribut,
|
'attribut' => $attribut,
|
||||||
'id_produit' => $id_produit,
|
'id_produit' => $id_produit,
|
||||||
'image' => pipe($produit->get_image_id(), static fn($id): string => Resource::output_multi_formats_img_tag(
|
'image' => pipe($produit->get_image_id(), static fn($id): string => Resource::output_multi_formats_img_tag(
|
||||||
id: $id,
|
id : $id,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
)),
|
)),
|
||||||
'permalien' => $produit->get_permalink(),
|
'permalien' => $produit->get_permalink(),
|
||||||
|
|
@ -103,10 +103,10 @@ try {
|
||||||
function charge_scripts_styles_page_succes_commande(): void {
|
function charge_scripts_styles_page_succes_commande(): void {
|
||||||
wp_enqueue_style(
|
wp_enqueue_style(
|
||||||
handle: 'haiku-atelier-2024-styles-page-succes-commande',
|
handle: 'haiku-atelier-2024-styles-page-succes-commande',
|
||||||
src: get_template_directory_uri() . '/assets/css/pages/page-succes-commande.css',
|
src : get_template_directory_uri() . '/assets/css/pages/page-succes-commande.css',
|
||||||
deps: [],
|
deps : [],
|
||||||
ver: filemtime(get_template_directory() . '/assets/css/pages/page-succes-commande.css'),
|
ver : filemtime(get_template_directory() . '/assets/css/pages/page-succes-commande.css'),
|
||||||
media: 'all',
|
media : 'all',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ $templates = ['cgv.twig'];
|
||||||
add_action('wp_enqueue_scripts', function (): void {
|
add_action('wp_enqueue_scripts', function (): void {
|
||||||
Resource::enqueue_style_file(
|
Resource::enqueue_style_file(
|
||||||
handle: '/assets/css/pages/page-modele-simple.css',
|
handle: '/assets/css/pages/page-modele-simple.css',
|
||||||
path: '/assets/css/pages/page-modele-simple.css',
|
path : '/assets/css/pages/page-modele-simple.css',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ $context['maximum_price'] = $maximum_price;
|
||||||
$context['same_collection_products'] = $same_collection_products;
|
$context['same_collection_products'] = $same_collection_products;
|
||||||
$product_tags = $raw_product->get_tag_ids()
|
$product_tags = $raw_product->get_tag_ids()
|
||||||
|> (static fn($tags_ids) => Arr::map($tags_ids, static fn($id) => Term::get_term_by_id(
|
|> (static fn($tags_ids) => Arr::map($tags_ids, static fn($id) => Term::get_term_by_id(
|
||||||
id: $id,
|
id : $id,
|
||||||
taxonomy: 'product_tag',
|
taxonomy: 'product_tag',
|
||||||
)))
|
)))
|
||||||
|> (static fn(/** @var list<Option<WC_Term>> */ $tags) => Arr::reject($tags, static fn($tag) => $tag->isNone()))
|
|> (static fn(/** @var list<Option<WC_Term>> */ $tags) => Arr::reject($tags, static fn($tag) => $tag->isNone()))
|
||||||
|
|
@ -84,11 +84,11 @@ $context['page_states'] = $page_states;
|
||||||
|
|
||||||
add_action('wp_enqueue_scripts', function (): void {
|
add_action('wp_enqueue_scripts', function (): void {
|
||||||
Resource::enqueue_script_module_file(
|
Resource::enqueue_script_module_file(
|
||||||
id: 'haiku-atelier-2024-scripts-page-produit',
|
id : 'haiku-atelier-2024-scripts-page-produit',
|
||||||
path: '/assets/js/scripts-page-produit.js',
|
path: '/assets/js/scripts-page-produit.js',
|
||||||
);
|
);
|
||||||
Resource::enqueue_script_module_file(
|
Resource::enqueue_script_module_file(
|
||||||
id: 'haiku-atelier-2024-scripts-menu-categories',
|
id : 'haiku-atelier-2024-scripts-menu-categories',
|
||||||
path: '/assets/js/scripts-menu-categories.js',
|
path: '/assets/js/scripts-menu-categories.js',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ final class StarterSite extends Site {
|
||||||
// Logo personnalisée
|
// Logo personnalisée
|
||||||
$context['logo'] = pipe(get_theme_mod('custom_logo'), static fn($id) => wp_get_attachment_image_src(
|
$context['logo'] = pipe(get_theme_mod('custom_logo'), static fn($id) => wp_get_attachment_image_src(
|
||||||
attachment_id: $id,
|
attachment_id: $id,
|
||||||
size: 'full',
|
size : 'full',
|
||||||
));
|
));
|
||||||
|
|
||||||
// Informations des Pages
|
// Informations des Pages
|
||||||
|
|
@ -95,8 +95,7 @@ final class StarterSite extends Site {
|
||||||
$url_courante = URLHelper::get_current_url();
|
$url_courante = URLHelper::get_current_url();
|
||||||
$context['page_courante'] = $url_courante;
|
$context['page_courante'] = $url_courante;
|
||||||
$context['est_page_tous_produits'] = preg_match(pattern: '/(\bshop\b)/', subject: $url_courante);
|
$context['est_page_tous_produits'] = preg_match(pattern: '/(\bshop\b)/', subject: $url_courante);
|
||||||
$context['est_page_boutique'] =
|
$context['est_page_boutique'] = preg_match(pattern: '/(\bshop\b)/', subject: $url_courante)
|
||||||
preg_match(pattern: '/(\bshop\b)/', subject: $url_courante)
|
|
||||||
|| preg_match(pattern: '/(\bproduct\b)/', subject: $url_courante)
|
|| preg_match(pattern: '/(\bproduct\b)/', subject: $url_courante)
|
||||||
|| preg_match(pattern: '/(\bproduct-category\b)/', subject: $url_courante);
|
|| preg_match(pattern: '/(\bproduct-category\b)/', subject: $url_courante);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,10 @@ function enregistre_controle_personnalise_tinymce(): void {
|
||||||
public function enqueue(): void {
|
public function enqueue(): void {
|
||||||
wp_enqueue_script(
|
wp_enqueue_script(
|
||||||
handle: 'controle-personnalise-tinymce',
|
handle: 'controle-personnalise-tinymce',
|
||||||
src: get_template_directory_uri() . '/assets/vendor/controle-personnalise-tinymce.js',
|
src : get_template_directory_uri() . '/assets/vendor/controle-personnalise-tinymce.js',
|
||||||
deps: ['jquery'],
|
deps : ['jquery'],
|
||||||
ver: '1.3',
|
ver : '1.3',
|
||||||
args: true,
|
args : true,
|
||||||
);
|
);
|
||||||
wp_enqueue_editor();
|
wp_enqueue_editor();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,10 @@ final readonly class Attribute {
|
||||||
public static function new(WC_Product_Attribute $attribute): self {
|
public static function new(WC_Product_Attribute $attribute): self {
|
||||||
$name = wc_attribute_label($attribute->get_name());
|
$name = wc_attribute_label($attribute->get_name());
|
||||||
$slug = $attribute->get_name();
|
$slug = $attribute->get_name();
|
||||||
|
|
||||||
/** @var list<WP_Term> */
|
/** @var list<WP_Term> */
|
||||||
$terms = $attribute->get_terms() ?? [];
|
$terms = $attribute->get_terms() ?? [];
|
||||||
|
|
||||||
/** @var list<AttributeOption> */
|
/** @var list<AttributeOption> */
|
||||||
$options = Arr::map($terms, AttributeOption::new(...))
|
$options = Arr::map($terms, AttributeOption::new(...))
|
||||||
|> (static fn($options) => Arr::sort($options, static fn($attribute) => $attribute->id))
|
|> (static fn($options) => Arr::sort($options, static fn($attribute) => $attribute->id))
|
||||||
|
|
|
||||||
|
|
@ -112,10 +112,10 @@ final readonly class Cart {
|
||||||
|
|
||||||
private static function format_number(int|float $number): string {
|
private static function format_number(int|float $number): string {
|
||||||
$formatted_number = Number::format(
|
$formatted_number = Number::format(
|
||||||
number: $number,
|
number : $number,
|
||||||
// precision et max_precision sont mutuellement exclusifs.
|
// precision et max_precision sont mutuellement exclusifs.
|
||||||
precision: 2,
|
precision: 2,
|
||||||
locale: 'fr',
|
locale : 'fr',
|
||||||
);
|
);
|
||||||
|
|
||||||
return is_bool($formatted_number) ? self::DEFAULT_VALUE : $formatted_number;
|
return is_bool($formatted_number) ? self::DEFAULT_VALUE : $formatted_number;
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,12 @@ use function Psl\Option\from_nullable;
|
||||||
use function wc_get_products;
|
use function wc_get_products;
|
||||||
use function wpautop;
|
use function wpautop;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Représente un **Produit** (selon _WooCommerce_) avec de nombreuses données d'intérêt pour les opérations courantes.
|
||||||
|
*/
|
||||||
final readonly class Product {
|
final readonly class Product {
|
||||||
/**
|
/**
|
||||||
* @param list<Attribute> $attributes
|
* @param list<Attribute> $attributes La liste des `Attribute` appliquées.
|
||||||
* @param list<string> $left_column_photos
|
* @param list<string> $left_column_photos
|
||||||
* @param list<string> $right_column_photos
|
* @param list<string> $right_column_photos
|
||||||
* @param array<ProductVariation> $variations
|
* @param array<ProductVariation> $variations
|
||||||
|
|
@ -80,21 +83,21 @@ final readonly class Product {
|
||||||
$url = $product->get_permalink();
|
$url = $product->get_permalink();
|
||||||
|
|
||||||
return new self(
|
return new self(
|
||||||
attributes: $attributes,
|
attributes : $attributes,
|
||||||
category: $category,
|
category : $category,
|
||||||
collection: $collection,
|
collection : $collection,
|
||||||
details: $details,
|
details : $details,
|
||||||
id: $id,
|
id : $id,
|
||||||
name: $name,
|
name : $name,
|
||||||
price: $price,
|
price : $price,
|
||||||
left_column_photos: $left_column_photos,
|
left_column_photos : $left_column_photos,
|
||||||
right_column_photos: $right_column_photos,
|
right_column_photos: $right_column_photos,
|
||||||
default_photo: $default_photo,
|
default_photo : $default_photo,
|
||||||
hover_photo: $hover_photo,
|
hover_photo : $hover_photo,
|
||||||
slug: $slug,
|
slug : $slug,
|
||||||
stock: $stock,
|
stock : $stock,
|
||||||
variations: $variations,
|
variations : $variations,
|
||||||
url: $url,
|
url : $url,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,9 @@ function retire_styles_core_block(): void {
|
||||||
add_filter('async_update_translation', '__return_false');
|
add_filter('async_update_translation', '__return_false');
|
||||||
add_filter('auto_update_translation', '__return_false');
|
add_filter('auto_update_translation', '__return_false');
|
||||||
|
|
||||||
|
// Désactive la génération automatique de sitemaps.
|
||||||
|
add_filter('wp_sitemaps_enabled', '__return_false');
|
||||||
|
|
||||||
add_action('init', desactive_wpautop(...));
|
add_action('init', desactive_wpautop(...));
|
||||||
add_filter('tiny_mce_before_init', desactive_transformation_contenu_tinymce(...));
|
add_filter('tiny_mce_before_init', desactive_transformation_contenu_tinymce(...));
|
||||||
add_filter('upload_mimes', autorise_import_svg_mediatheque(...));
|
add_filter('upload_mimes', autorise_import_svg_mediatheque(...));
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,8 @@ function retire_merdes_wc(): void {
|
||||||
*/
|
*/
|
||||||
function genere_balises_img_dans_produit_dans_reponse_rest(
|
function genere_balises_img_dans_produit_dans_reponse_rest(
|
||||||
WP_REST_Response $response,
|
WP_REST_Response $response,
|
||||||
mixed $_product,
|
WC_Data $_product,
|
||||||
|
WP_REST_Request $_request,
|
||||||
): WP_REST_Response {
|
): WP_REST_Response {
|
||||||
// Vérifie que la Réponse a des données
|
// Vérifie que la Réponse a des données
|
||||||
if (empty($response->data)) {
|
if (empty($response->data)) {
|
||||||
|
|
@ -142,11 +143,11 @@ function genere_balises_img_dans_produit_dans_reponse_rest(
|
||||||
$response->data['image_repos'] = pipe(
|
$response->data['image_repos'] = pipe(
|
||||||
$response->data['meta_data'],
|
$response->data['meta_data'],
|
||||||
static fn($metadata): array => array_filter(
|
static fn($metadata): array => array_filter(
|
||||||
array: $metadata,
|
array : $metadata,
|
||||||
callback: static fn($entree): bool => '_photos_colonne_gauche|||0|value' === $entree->key,
|
callback: static fn($entree): bool => '_photos_colonne_gauche|||0|value' === $entree->key,
|
||||||
),
|
),
|
||||||
static fn($metadata): array => array_map(array: $metadata, callback: static fn($entree): string => Resource::output_multi_formats_img_tag(
|
static fn($metadata): array => array_map(array: $metadata, callback: static fn($entree): string => Resource::output_multi_formats_img_tag(
|
||||||
id: $entree?->value,
|
id : $entree?->value,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
)),
|
)),
|
||||||
static fn($image) => array_values(array: $image)[0],
|
static fn($image) => array_values(array: $image)[0],
|
||||||
|
|
@ -156,11 +157,11 @@ function genere_balises_img_dans_produit_dans_reponse_rest(
|
||||||
$response->data['image_survol'] = pipe(
|
$response->data['image_survol'] = pipe(
|
||||||
$response->data['meta_data'],
|
$response->data['meta_data'],
|
||||||
static fn($metadata): array => array_filter(
|
static fn($metadata): array => array_filter(
|
||||||
array: $metadata,
|
array : $metadata,
|
||||||
callback: static fn($entree): bool => '_photos_colonne_droite|||0|value' === $entree->key,
|
callback: static fn($entree): bool => '_photos_colonne_droite|||0|value' === $entree->key,
|
||||||
),
|
),
|
||||||
static fn($metadata): array => array_map(array: $metadata, callback: static fn($entree): string => Resource::output_multi_formats_img_tag(
|
static fn($metadata): array => array_map(array: $metadata, callback: static fn($entree): string => Resource::output_multi_formats_img_tag(
|
||||||
id: $entree?->value,
|
id : $entree?->value,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
)),
|
)),
|
||||||
static fn($image) => array_values(array: $image)[0],
|
static fn($image) => array_values(array: $image)[0],
|
||||||
|
|
@ -169,37 +170,34 @@ function genere_balises_img_dans_produit_dans_reponse_rest(
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
add_filter('woocommerce_rest_prepare_product_object', 'genere_balises_img_dans_produit_dans_reponse_rest', 10, 2);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO.
|
* TODO.
|
||||||
*/
|
*/
|
||||||
function genere_prix_maximal_produit_variable_dans_reponse_rest(
|
function genere_prix_maximal_produit_variable_dans_reponse_rest(
|
||||||
WP_REST_Response $reponse,
|
WP_REST_Response $response,
|
||||||
WC_Data $_produit,
|
WC_Data $_product,
|
||||||
|
WP_REST_Request $_request,
|
||||||
): WP_REST_Response {
|
): WP_REST_Response {
|
||||||
// Vérifie que la Réponse a des données
|
// Vérifie que la Réponse a des données
|
||||||
if (empty($reponse->data)) {
|
if (empty($response->data)) {
|
||||||
return $reponse;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Si le Produit n'est pas Variable, assigner le prix du Produit comme prix maximal
|
// Si le Produit n'est pas Variable, assigner le prix du Produit comme prix maximal
|
||||||
if ('variable' !== $reponse->data['type']) {
|
if ('variable' !== $response->data['type']) {
|
||||||
$reponse->data['prix_maximal'] = $reponse->data['regular_price'];
|
$response->data['prix_maximal'] = $response->data['regular_price'];
|
||||||
|
|
||||||
return $reponse;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assigne le prix de la Variation la plus chère dans la Réponse
|
// Assigne le prix de la Variation la plus chère dans la Réponse
|
||||||
$reponse->data['prix_maximal'] = collect($reponse->data['variations'])
|
$response->data['prix_maximal'] = collect($response->data['variations'])
|
||||||
->map(wc_get_product(...))
|
->map(wc_get_product(...))
|
||||||
->map(static fn($p) => $p->get_price())->max();
|
->map(static fn($p) => $p->get_price())->max();
|
||||||
|
|
||||||
return $reponse;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
add_filter('woocommerce_rest_prepare_product_object', 'genere_prix_maximal_produit_variable_dans_reponse_rest', 10, 2);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retire la propagande commerciale de WooCommerce du menu.
|
* Retire la propagande commerciale de WooCommerce du menu.
|
||||||
*/
|
*/
|
||||||
|
|
@ -216,3 +214,8 @@ add_action('init', 'retire_script_galerie');
|
||||||
add_action('template_redirect', 'retire_merdes_wc');
|
add_action('template_redirect', 'retire_merdes_wc');
|
||||||
add_action('wp_enqueue_scripts', 'dequeue_woocommerce_styles_scripts');
|
add_action('wp_enqueue_scripts', 'dequeue_woocommerce_styles_scripts');
|
||||||
add_filter('woocommerce_enqueue_styles', '__return_empty_array');
|
add_filter('woocommerce_enqueue_styles', '__return_empty_array');
|
||||||
|
add_filter('woocommerce_rest_prepare_product_object', 'genere_balises_img_dans_produit_dans_reponse_rest', 10, 3);
|
||||||
|
add_filter('woocommerce_rest_prepare_product_object', 'genere_prix_maximal_produit_variable_dans_reponse_rest', 10, 3);
|
||||||
|
|
||||||
|
// DEBUG
|
||||||
|
// add_filter('woocommerce_store_api_disable_nonce_check', '__return_true');
|
||||||
|
|
|
||||||
|
|
@ -78,14 +78,13 @@ final readonly class Resource {
|
||||||
$formats = pipe(
|
$formats = pipe(
|
||||||
[$avif, $jxl],
|
[$avif, $jxl],
|
||||||
static fn($tableau): array => array_filter(
|
static fn($tableau): array => array_filter(
|
||||||
array: $tableau,
|
array : $tableau,
|
||||||
callback: static fn($chemin_format): bool => false !== $chemin_format,
|
callback: static fn($chemin_format): bool => false !== $chemin_format,
|
||||||
),
|
),
|
||||||
static fn($tableau): array => array_map(array: $tableau, callback: static fn($chemin_format): array => [
|
static fn($tableau): array => array_map(array: $tableau, callback: static fn($chemin_format): array => [
|
||||||
'format' => pathinfo((string) $chemin_format)['extension'],
|
'format' => pathinfo((string) $chemin_format)['extension'],
|
||||||
'taille' => filesize($chemin_format),
|
'taille' => filesize($chemin_format),
|
||||||
'url' =>
|
'url' => pathinfo($url)['dirname']
|
||||||
pathinfo($url)['dirname']
|
|
||||||
. '/'
|
. '/'
|
||||||
. pathinfo($url)['filename']
|
. pathinfo($url)['filename']
|
||||||
. '.'
|
. '.'
|
||||||
|
|
|
||||||
|
|
@ -66,8 +66,8 @@ input[type="checkbox"], input[type="radio"] {
|
||||||
transition: 0.2s background;
|
transition: 0.2s background;
|
||||||
|
|
||||||
&:checked {
|
&:checked {
|
||||||
color: var(--couleur-blanc);
|
color: var(--couleur-noir);
|
||||||
background: var(--couleur-gris-fonce);
|
background: var(--arriere-plan-points);
|
||||||
|
|
||||||
// TODO: Utiliser un SVG plutôt qu'un « x » ?
|
// TODO: Utiliser un SVG plutôt qu'un « x » ?
|
||||||
&::before {
|
&::before {
|
||||||
|
|
@ -98,7 +98,7 @@ input[type="checkbox"], input[type="radio"] {
|
||||||
|
|
||||||
@media (hover: hover) {
|
@media (hover: hover) {
|
||||||
&:hover {
|
&:hover {
|
||||||
background: var(--couleur-gris-fonce);
|
background: var(--arriere-plan-points);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,14 +67,14 @@ $context['page_states'] = $page_states;
|
||||||
add_action('wp_enqueue_scripts', function (): void {
|
add_action('wp_enqueue_scripts', function (): void {
|
||||||
Resource::enqueue_style_file(
|
Resource::enqueue_style_file(
|
||||||
handle: 'haiku-atelier-2024-styles-page-boutique',
|
handle: 'haiku-atelier-2024-styles-page-boutique',
|
||||||
path: '/assets/css/pages/page-boutique.css',
|
path : '/assets/css/pages/page-boutique.css',
|
||||||
);
|
);
|
||||||
Resource::enqueue_script_module_file(
|
Resource::enqueue_script_module_file(
|
||||||
id: 'haiku-atelier-2024-scripts-page-boutique',
|
id : 'haiku-atelier-2024-scripts-page-boutique',
|
||||||
path: '/assets/js/scripts-page-boutique.js',
|
path: '/assets/js/scripts-page-boutique.js',
|
||||||
);
|
);
|
||||||
Resource::enqueue_script_module_file(
|
Resource::enqueue_script_module_file(
|
||||||
id: 'haiku-atelier-2024-scripts-menu-categories',
|
id : 'haiku-atelier-2024-scripts-menu-categories',
|
||||||
path: '/assets/js/scripts-menu-categories.js',
|
path: '/assets/js/scripts-menu-categories.js',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,10 @@ $commande = $order;
|
||||||
$date = new Carbon($commande->get_date_created());
|
$date = new Carbon($commande->get_date_created());
|
||||||
|
|
||||||
$email = [
|
$email = [
|
||||||
'adresses' => ['facturation' => $commande->get_address('billing'), 'livraison' => $commande->get_address('shipping')],
|
'adresses' => [
|
||||||
|
'facturation' => $commande->get_address('billing'),
|
||||||
|
'livraison' => $commande->get_address('shipping'),
|
||||||
|
],
|
||||||
'commande' => ['date' => $date->toDateString(), 'id' => $commande->get_id()],
|
'commande' => ['date' => $date->toDateString(), 'id' => $commande->get_id()],
|
||||||
'livraison' => [
|
'livraison' => [
|
||||||
'methode' => $commande->get_shipping_method(),
|
'methode' => $commande->get_shipping_method(),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue