Skip to content

refactor: make ElasticSearch date meta sortable, minimum PHP 8.2 requirement - #4

Open
rivanuff wants to merge 2 commits into
mainfrom
refactor/date-input-php82
Open

refactor: make ElasticSearch date meta sortable, minimum PHP 8.2 requirement#4
rivanuff wants to merge 2 commits into
mainfrom
refactor/date-input-php82

Conversation

@rivanuff

@rivanuff rivanuff commented Aug 27, 2026

Copy link
Copy Markdown

Uit ticket #10841 (geen link wegens publieke repo) kwam naar boven dat met de huidige implementatie de ontvangst en oordeel datum niet sorteerbaar zijn met ElasticSearch. Dit komt wegens de invoer van deze data d.m.v. een text veld gedaan worden.

Als oplossing worden deze oude velden gedeprecate (wel behouden), en nieuwe text_date velden aangeboden. Wanneer de nieuwe velden zijn ingevuld, kunnen de klachten wel gesorteerd worden.

Ik heb daarbij gelijk een refactor gedaan:

  • Onnodige dependencies weggehaald
  • Tests toegevoegd
  • CMB2 plugin niet meer in requirements, maar met Plugins Required header geforceerd.
  • Gebruik van PHP 8.2 features doorgevoerd
  • Return / param types toegevoegd
  • Algemene verbeteringen

Dit wordt een major release

@github-actions

Copy link
Copy Markdown
Composer package changes
Prod Packages Operation Base Target Link License
php Changed ^7.4 ^8.0 ^8.2
composer/installers Removed v2.3.0 - Compare MIT
wpackagist-plugin/cmb2 Removed 2.12.0 -
Dev Packages Operation Base Target Link License
10up/wp_mock Upgraded 0.5.0 1.1.1 Compare GPL-2.0-or-later
ckr/arraymerger New - 3.0.0 Compare MIT
composer/installers New - v2.3.0 Compare MIT
composer/pcre Upgraded 3.1.4 3.4.0 Compare MIT
doctrine/instantiator Upgraded 1.5.0 2.0.0 Compare MIT
friendsofphp/php-cs-fixer Upgraded v3.95.15 v3.95.23 Compare MIT
hamcrest/hamcrest-php Upgraded v2.1.1 v3.0.0 Compare BSD-3-Clause
mockery/mockery Upgraded 1.6.12 1.6.15 Compare BSD-3-Clause
myclabs/deep-copy Upgraded 1.13.4 1.14.0 Compare MIT
php-stubs/gravity-forms-stubs New - v2.9.3 Compare MIT
php-stubs/wordpress-stubs Upgraded v5.9.9 v6.9.4 Compare MIT
phpstan/phpstan Upgraded 0.12.100 2.2.9 MIT
phpunit/phpunit Upgraded 9.6.35 9.6.36 Compare BSD-3-Clause
psr/container Upgraded 1.1.2 2.0.2 Compare MIT
psr/log Upgraded 1.1.4 3.0.2 Compare MIT
sebastian/exporter Upgraded 4.0.8 4.0.9 Compare BSD-3-Clause
sebastian/recursion-context Upgraded 4.0.6 4.0.7 Compare BSD-3-Clause
symfony/console Upgraded v5.4.47 v7.4.17 Compare MIT
symfony/deprecation-contracts Upgraded v2.5.4 v3.7.1 Compare MIT
symfony/event-dispatcher Upgraded v5.4.45 v7.4.17 Compare MIT
symfony/event-dispatcher-contracts Upgraded v2.5.4 v3.7.1 Compare MIT
symfony/filesystem Upgraded v5.4.45 v7.4.17 Compare MIT
symfony/finder Upgraded v5.4.45 v7.4.17 Compare MIT
symfony/options-resolver Upgraded v5.4.45 v7.4.8 Compare MIT
symfony/polyfill-intl-grapheme Upgraded v1.38.1 v1.41.0 Compare MIT
symfony/polyfill-intl-normalizer Upgraded v1.38.0 v1.42.0 Compare MIT
symfony/process Upgraded v5.4.51 v7.4.17 Compare MIT
symfony/service-contracts Upgraded v2.5.4 v3.7.1 Compare MIT
symfony/stopwatch Upgraded v5.4.45 v7.4.8 Compare MIT
symfony/string Upgraded v5.4.47 v7.4.15 Compare MIT
szepeviktor/phpstan-wordpress Upgraded v0.7.7 v2.0.3 Compare MIT
webmozart/assert New - 1.12.1 Compare MIT
wp-plugin/cmb2 New - 2.12.0
yard/php-cs-fixer-rules New - v1.0.5 Compare MIT
doctrine/annotations Removed 1.14.4 - Compare MIT
doctrine/deprecations Removed 1.1.6 - Compare MIT
doctrine/lexer Removed 2.1.1 - Compare MIT
psr/cache Removed 1.0.1 - Compare MIT
symfony/polyfill-php73 Removed v1.37.0 - Compare MIT
symfony/var-dumper Removed v5.4.48 - Compare MIT
symfony/yaml Removed v5.4.53 - Compare MIT
wpackagist-plugin/elasticpress Removed 3.6.6 -
zircote/swagger-php Removed 3.3.7 - Compare Apache-2.0

@rivanuff
rivanuff requested review from a team, Rovasch, ShunLuk, SimonvanWijhe, dtakken, ictbeheer and mvdhoek1 and a lite review from Copilot and removed request for a team August 27, 2026 11:34
@rivanuff
rivanuff marked this pull request as ready for review August 27, 2026 11:36

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Deze PR maakt de ontvangst- en oordeelsdatum weer sorteerbaar in ElasticSearch door vaste-format datumvelden toe te voegen (datepicker-opslag) en daaruit ISO-8601 “sortable” velden af te leiden, terwijl legacy free-text datumvelden gedepricate maar behouden blijven. Daarnaast wordt de codebase gemoderniseerd voor PHP 8.2 / WordPress 6.5 en wordt tooling (PHPUnit/PHPStan/CS) toegevoegd/aangescherpt voor CI en lokale development.

Changes:

  • Introduceert *_date opslag (fixed d-m-Y) en ES *_sortable (ISO Y-m-d) afleiding, zonder legacy free-text datumvelden nog te gebruiken als fallback.
  • Refactor van meta-key conventies (centrale Meta helper) en modernisering van service providers / type hints (PHP 8.2).
  • Tooling & release housekeeping: PHPUnit + PHPStan configuratie, GitHub Actions workflows, dependency/requirements updates, changelog + plugin headers.

Reviewed changes

Copilot reviewed 40 out of 44 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tests/Unit/GravityForms/AfterSubmitTest.php Unit tests voor nieuwe GravityForms meta-opslag (fixed date format, year-derivation, deprecated fields niet meer schrijven).
tests/Unit/Foundation/MetaTest.php Unit tests voor nieuwe Meta conventies (prefixing, date format contract, date->year mapping).
tests/Unit/ElasticSearch/HooksTest.php Unit tests voor ES sync args: sortable date afleiding, legacy gedrag, validatie/unparseable cases.
tests/phpstan/bootstrap.php PHPStan bootstrap voor runtime-constants die in WordPress bootstrap normaliter gezet worden.
tests/bootstrap.php PHPUnit bootstrap incl. WP_Mock en test-constants.
src/OpenKlacht/Settings/SettingsServiceProvider.php Refactor settings-registratie: CMB2 field registratie via Meta::addFields() en PHP 8.2 callables.
src/OpenKlacht/Settings/SettingsPageOptions.php Modernisering: readonly ctor, types, static return; kleine docs/Stan hints.
src/OpenKlacht/RestAPI/RestAPIServiceProvider.php REST veldregistratie op rest_api_init; meta keys via Meta::key(); gedeelde callback.
src/OpenKlacht/RestAPI/Hooks.php Strictere types + WP_REST_Request typing in REST query uitbreiding.
src/OpenKlacht/PostType/PostTypeServiceProvider.php Modernisering hooks registratie (first-class callables) + strict types.
src/OpenKlacht/PostType/MetaboxFields.php Metabox veldregistratie gedelegeerd naar Meta::addFields() voor consistente id-prefixing/opties.
src/OpenKlacht/OpenKlachtServiceProvider.php Modernisering provider boot loop (instantiatie) + strict types.
src/OpenKlacht/GravityForms/SubmissionHandler.php Refactor mapping logic; typed ctor/make; extract fieldKey() en doc/Stan hints.
src/OpenKlacht/GravityForms/GravityFormsServiceProvider.php Typed callback signature voor GravityForms hook + first-class callable registratie.
src/OpenKlacht/GravityForms/AfterSubmit.php Nieuwe datum meta-opslag via Meta::DATE_FORMAT/DATE_FIELDS; deprecated velden niet meer schrijven; DateTimeImmutable parsing.
src/OpenKlacht/GravityForms/AbstractAfterSubmit.php Readonly ctor + static factory return type; phpstan consistent constructor.
src/OpenKlacht/Foundation/ServiceProvider.php Strict types + formatting/modernisering; init flow ongewijzigd inhoudelijk.
src/OpenKlacht/Foundation/Meta.php Nieuw: centrale meta-key prefixing, gedeelde date-constanten en CMB2 field toevoeging.
src/OpenKlacht/Foundation/Config.php Modernisering types + ctor promotion; scan/merge logic behouden maar hergestructureerd.
src/OpenKlacht/ElasticSearch/Hooks.php ES sync args uitgebreid met sortable dates (ISO) afgeleid uit fixed-format datepicker velden.
src/OpenKlacht/ElasticSearch/ElasticSearchServiceProvider.php Modernisering hook registratie (first-class callable).
src/OpenKlacht/Admin/AdminServiceProvider.php Modernisering hooks + strictere param types (o.a. $sample bool).
publiccode.yaml Correctere YAML structuur + bijgewerkte minimale versies (WP 6.5, PHP 8.2).
phpunit.xml.dist Nieuwe PHPUnit configuratie incl. coverage include paths.
phpstan.neon Nieuwe PHPStan configuratie (PHP 8.2 target, bootstrap, WP extensions/stubs).
openklacht.php Major bump naar 2.0.0 + WP/PHP requirements + “Requires Plugins: cmb2” header.
languages/openklacht.pot Regeneratie POT met nieuwe strings voor (verouderde) datumvelden en metadata updates.
config/settings_pages.php Strict types + formatting; inhoudelijk settings unchanged.
config/metaboxes.php Wijzigt date fields naar text_date met vaste opslag + behoud legacy text velden met “verouderd” beschrijving.
config/core.php Strict types + formatting; providerslijst inhoudelijk gelijk.
composer.lock Dependency herstructurering (runtime leeg; dev tooling uitgebreid; PHP platform 8.2).
composer.json Minimum PHP 8.2; CMB2 naar require-dev; WP stubs + tooling toegevoegd; autoload-dev en scripts aangepast.
CHANGELOG.md Nieuwe 2.0.0 release notes incl. breaking changes en ES/date rationale.
autoloader.php Formatting/modernisering (geen functionele wijziging).
.php-cs-fixer.php Migratie naar Yard ruleset + aangepaste Finder configuratie.
.idea/php.xml IDE config updates (PHP 8.2 level, dependency include paths opgeschoond).
.idea/openklacht.iml IDE module config: packagePrefix fix + exclude cleanup.
.gitignore Negeert phpunit.xml en coverage logs.
.github/workflows/test-php.yml Nieuwe CI workflow voor PHPUnit op PHP 8.2.
.github/workflows/format-php.yml Nieuwe CI workflow voor php-cs-fixer via gedeelde workflow.
.github/workflows/dependabot-automerge.yml Workflow voor Dependabot automerge via gedeelde workflow.
.github/dependabot.yml Dependabot configuratie voor actions + composer (lockfile-only).
.github/CODEOWNERS CODEOWNERS toegevoegd; composer.lock expliciet “unowned” om review requests te vermijden.
.gitattributes LF normalisatie + export-ignore dev files + markering van generated files.
Files not reviewed (2)
  • .idea/openklacht.iml: Generated file
  • .idea/php.xml: Generated file

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +72 to +79
/**
* @param array<string, mixed> $object REST response of the post being prepared.
* @param string $metaKey Name of the REST field being resolved.
*/
public function getFieldValue(array $object, string $metaKey): mixed
{
return get_post_meta($object['id'], $metaKey, true);
}
Comment on lines +147 to +155
// Get the path from the starting path.
$path = str_replace($this->path.'/', '', $path);

// Build an array from the path.
$items = [];
$items[$name] = $value;
foreach (array_reverse(explode('/', $path)) as $key) {
$items = [ $key => $items ];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants