diff --git a/README.md b/README.md index 06702bf6be3f5cdda326d517e693e8d9d184fd18..519d15f6126e43583a27d05b0e777b8feaf9fbf6 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -[](https://gitlab.com/wpdesk/wp-forms/pipelines) -[](https://gitlab.com/wpdesk/wp-forms/commits/master) -[](https://packagist.org/packages/wpdesk/wp-forms) -[](https://packagist.org/packages/wpdesk/wp-forms) -[](https://packagist.org/packages/wpdesk/wp-forms) +[](https://gitlab.com/wpdesk/wp-forms/pipelines) +[](https://gitlab.com/wpdesk/wp-forms/commits/master) +[](https://packagist.org/packages/wpdesk/wp-forms) +[](https://packagist.org/packages/wpdesk/wp-forms) +[](https://packagist.org/packages/wpdesk/wp-forms) [](https://packagist.org/packages/wpdesk/wp-forms) WordPress Library for Form integration @@ -11,7 +11,7 @@ WordPress Library for Form integration ## Requirements -PHP 5.6 or later. +PHP 7.0 or later. ## Composer @@ -34,26 +34,18 @@ Let's say we have an abstraction for settings tabs: interface SettingsTab { /** * Slug name used for unique url and settings in db. - * - * @return string */ - public static function get_tab_slug(); + public static function get_tab_slug(): string; /** * Tab name to show on settings page. - * - * @return string */ - public function get_tab_name(); + public function get_tab_name(): string; /** * Render tab content and return it as string. - * - * @param Renderer $renderer - * - * @return string */ - public function render( Renderer $renderer ); + public function render( Renderer $renderer ): string; /** * Use to set settings from database or defaults. @@ -74,14 +66,14 @@ interface SettingsTab { * * @return void */ - public function handle_request( $request ); + public function handle_request( array $request ); /** * Returns valid data from Tab. Can be used after ::handle_request or ::set_data. * * @return array */ - public function get_data(); + public function get_data(): array; } ``` @@ -95,12 +87,9 @@ abstract class FieldSettingsTab implements SettingsTab { /** * @return Field[] */ - abstract protected function get_fields(); + abstract protected function get_fields(): array; - /** - * @return FormWithFields - */ - protected function get_form() { + protected function get_form(): FormWithFields { if ( $this->form === null ) { $fields = $this->get_fields(); $this->form = new FormWithFields( $fields, static::get_tab_slug() ); @@ -109,7 +98,7 @@ abstract class FieldSettingsTab implements SettingsTab { return $this->form; } - public function render( Renderer $renderer) { + public function render( Renderer $renderer ) { return $this->get_form()->render_form( $renderer ); } @@ -121,7 +110,7 @@ abstract class FieldSettingsTab implements SettingsTab { $this->get_form()->handle_request( $request ); } - public function get_data() { + public function get_data(): array { return $this->get_form()->get_data(); } } @@ -131,10 +120,7 @@ Then we can create a settings tab that looks like that: ```php final class GeneralSettings extends FieldSettingsTab { - /** - * @inheritDoc - */ - protected function get_fields() { + protected function get_fields(): array { return [ ( new CheckboxField() ) ->set_label( __( 'Subscribe on checkout', 'some-text-domain' ) ) @@ -166,23 +152,17 @@ final class GeneralSettings extends FieldSettingsTab { ]; } - /** - * @inheritDoc - */ public static function get_tab_slug() { return 'general'; } - /** - * @inheritDoc - */ public function get_tab_name() { return __( 'General', 'text-domain' ); } } ``` -Then class like that provides form load/save/render support for these abstraction can look like this: +Then class like that provides form load/save/render support for this abstraction can look like this: ```php /** @@ -212,8 +192,6 @@ final class Settings { } /** - * Render - * * @return void */ public function render_page_action() { @@ -228,10 +206,7 @@ final class Settings { echo $renderer->render( 'footer' ); } - /** - * @return SettingsTab - */ - private function get_active_tab() { + private function get_active_tab(): SettingTab { $selected_tab = isset( $_GET['tab'] ) ? sanitize_key( $_GET['tab'] ) : null; $tabs = $this->get_settings_tabs(); if ( ! empty( $selected_tab ) && isset( $tabs[ $selected_tab ] ) ) { @@ -244,7 +219,7 @@ final class Settings { /** * @return SettingsTab[] */ - private function get_settings_tabs() { + private function get_settings_tabs(): array { static $tabs = []; if ( empty( $tabs ) ) { $tabs = [ @@ -263,15 +238,12 @@ final class Settings { * * @return PersistentContainer */ - public static function get_settings_persistence( $tab_slug ) { + public static function get_settings_persistence( string $tab_slug ): PersistentContainer { return new WordpressOptionsContainer( 'some-settings-' . $tab_slug ); } /** * Save data from tab to persistent container. - * - * @param SettingsTab $tab - * @param PersistentContainer $container */ private function save_tab_data( SettingsTab $tab, PersistentContainer $container ) { $tab_data = $tab->get_data(); @@ -282,17 +254,14 @@ final class Settings { } ); } - /** - * @return \WPDesk\View\Renderer\Renderer - */ - private function get_renderer() { + private function get_renderer(): \WPDesk\View\Renderer\Renderer { return new SimplePhpRenderer( new DefaultFormFieldResolver() ); } /** * @return string[] */ - private function get_tabs_menu_items() { + private function get_tabs_menu_items(): array { $menu_items = []; foreach ( $this->get_settings_tabs() as $tab ) { @@ -303,8 +272,3 @@ final class Settings { } } ``` - - -## Project documentation - -PHPDoc: https://wpdesk.gitlab.io/wp-forms/index.html \ No newline at end of file diff --git a/changelog.txt b/changelog.txt index e6b1ae04f325245c5a796b0f1df00c36f1a0f785..10aef4ca0341dbc0807abb45731357d7bb41b917 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,8 +1,11 @@ # Changelog -## [2.5.0] - 2021-09-03 +## [3.0.0] - 2021-09-08 ### Added +- Added strong typing to all of the interfaces - Added fields sorting by priority field +### +- Removed deprecated classes ## [2.4.6] - 2021-08-23 ### Fixed diff --git a/src/Field.php b/src/Field.php index 2a6569e5e01070f82b912b0cc811b67348cf4730..22cf8d79819e64becc16d1540dea38e3af281697 100644 --- a/src/Field.php +++ b/src/Field.php @@ -54,13 +54,7 @@ interface Field { */ public function get_attributes( array $except = [] ): array; - /** - * @param string $name - * @param ?string $default - * - * @return string - */ - public function get_attribute( string $name, $default = null ): string; + public function get_attribute( string $name, string $default = null ): string; public function is_attribute_set( string $name ): bool; diff --git a/src/Field/Traits/HtmlAttributes.php b/src/Field/Traits/HtmlAttributes.php index 4e54c858b8e41f4c2d632dbad5f6fe4e849cd70f..b4ee08490f980fcbe4a08c76f17c0474a5aabf2f 100644 --- a/src/Field/Traits/HtmlAttributes.php +++ b/src/Field/Traits/HtmlAttributes.php @@ -45,13 +45,7 @@ trait HtmlAttributes { return isset( $this->attributes[ $name ] ); } - /** - * @param string $name - * @param ?string $default - * - * @return string - */ - public function get_attribute( string $name, $default = null ): string { + public function get_attribute( string $name, string $default = null ): string { return $this->attributes[ $name ] ?? $default; } } diff --git a/src/Renderer/JsonNormalizedRenderer.php b/src/Renderer/JsonNormalizedRenderer.php index 371490c244f3a3b32bcbb924b6f016abcf4eb380..82021cb86ae4f1ce474734856218b743e95139c1 100644 --- a/src/Renderer/JsonNormalizedRenderer.php +++ b/src/Renderer/JsonNormalizedRenderer.php @@ -29,7 +29,7 @@ class JsonNormalizedRenderer implements FieldRenderer { 'readonly' => $field->is_readonly(), 'required' => $field->is_required(), 'prefix' => $name_prefix, - 'value ' => isset( $fields_data[ $field->get_name() ] ) ? $fields_data[ $field->get_name() ] : $field->get_default_value(), + 'value ' => $fields_data[ $field->get_name() ] ?? $field->get_default_value(), ]; if ( $field->has_classes() ) { diff --git a/tests/docker-compose.yaml b/tests/docker-compose.yaml index 2a86b036f682ed318b27b028d2e96dfcd5979afd..718ce5ee9b705df6bf890545090cbeecbbcacb9c 100644 --- a/tests/docker-compose.yaml +++ b/tests/docker-compose.yaml @@ -123,7 +123,7 @@ services: WORDPRESS_DB_HOST: mysql0 mysql0: - image: mysql:5.7 + image: mariadb:10.3 environment: MYSQL_ROOT_PASSWORD: mysql MYSQL_DATABASE: wptest