Skip to content
Snippets Groups Projects
Unverified Commit fb4e5c47 authored by Bartek Jaskulski's avatar Bartek Jaskulski
Browse files

fix: add missing strong types in signatures

parent d6db5862
No related branches found
No related tags found
3 merge requests!28release: 3.0.0,!23Feature/strong typing pp,!19Add strong typing for 3.0 version
Pipeline #5998 passed
This commit is part of merge request !19. Comments created here will be created in the context of that merge request.
...@@ -11,7 +11,7 @@ WordPress Library for Form integration ...@@ -11,7 +11,7 @@ WordPress Library for Form integration
## Requirements ## Requirements
PHP 5.6 or later. PHP 7.0 or later.
## Composer ## Composer
...@@ -34,26 +34,18 @@ Let's say we have an abstraction for settings tabs: ...@@ -34,26 +34,18 @@ Let's say we have an abstraction for settings tabs:
interface SettingsTab { interface SettingsTab {
/** /**
* Slug name used for unique url and settings in db. * 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. * 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. * 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. * Use to set settings from database or defaults.
...@@ -74,14 +66,14 @@ interface SettingsTab { ...@@ -74,14 +66,14 @@ interface SettingsTab {
* *
* @return void * @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. * Returns valid data from Tab. Can be used after ::handle_request or ::set_data.
* *
* @return array * @return array
*/ */
public function get_data(); public function get_data(): array;
} }
``` ```
...@@ -95,12 +87,9 @@ abstract class FieldSettingsTab implements SettingsTab { ...@@ -95,12 +87,9 @@ abstract class FieldSettingsTab implements SettingsTab {
/** /**
* @return Field[] * @return Field[]
*/ */
abstract protected function get_fields(); abstract protected function get_fields(): array;
/** protected function get_form(): FormWithFields {
* @return FormWithFields
*/
protected function get_form() {
if ( $this->form === null ) { if ( $this->form === null ) {
$fields = $this->get_fields(); $fields = $this->get_fields();
$this->form = new FormWithFields( $fields, static::get_tab_slug() ); $this->form = new FormWithFields( $fields, static::get_tab_slug() );
...@@ -121,7 +110,7 @@ abstract class FieldSettingsTab implements SettingsTab { ...@@ -121,7 +110,7 @@ abstract class FieldSettingsTab implements SettingsTab {
$this->get_form()->handle_request( $request ); $this->get_form()->handle_request( $request );
} }
public function get_data() { public function get_data(): array {
return $this->get_form()->get_data(); return $this->get_form()->get_data();
} }
} }
...@@ -131,10 +120,7 @@ Then we can create a settings tab that looks like that: ...@@ -131,10 +120,7 @@ Then we can create a settings tab that looks like that:
```php ```php
final class GeneralSettings extends FieldSettingsTab { final class GeneralSettings extends FieldSettingsTab {
/** protected function get_fields(): array {
* @inheritDoc
*/
protected function get_fields() {
return [ return [
( new CheckboxField() ) ( new CheckboxField() )
->set_label( __( 'Subscribe on checkout', 'some-text-domain' ) ) ->set_label( __( 'Subscribe on checkout', 'some-text-domain' ) )
...@@ -166,23 +152,17 @@ final class GeneralSettings extends FieldSettingsTab { ...@@ -166,23 +152,17 @@ final class GeneralSettings extends FieldSettingsTab {
]; ];
} }
/**
* @inheritDoc
*/
public static function get_tab_slug() { public static function get_tab_slug() {
return 'general'; return 'general';
} }
/**
* @inheritDoc
*/
public function get_tab_name() { public function get_tab_name() {
return __( 'General', 'text-domain' ); 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 ```php
/** /**
...@@ -212,8 +192,6 @@ final class Settings { ...@@ -212,8 +192,6 @@ final class Settings {
} }
/** /**
* Render
*
* @return void * @return void
*/ */
public function render_page_action() { public function render_page_action() {
...@@ -228,10 +206,7 @@ final class Settings { ...@@ -228,10 +206,7 @@ final class Settings {
echo $renderer->render( 'footer' ); echo $renderer->render( 'footer' );
} }
/** private function get_active_tab(): SettingTab {
* @return SettingsTab
*/
private function get_active_tab() {
$selected_tab = isset( $_GET['tab'] ) ? sanitize_key( $_GET['tab'] ) : null; $selected_tab = isset( $_GET['tab'] ) ? sanitize_key( $_GET['tab'] ) : null;
$tabs = $this->get_settings_tabs(); $tabs = $this->get_settings_tabs();
if ( ! empty( $selected_tab ) && isset( $tabs[ $selected_tab ] ) ) { if ( ! empty( $selected_tab ) && isset( $tabs[ $selected_tab ] ) ) {
...@@ -244,7 +219,7 @@ final class Settings { ...@@ -244,7 +219,7 @@ final class Settings {
/** /**
* @return SettingsTab[] * @return SettingsTab[]
*/ */
private function get_settings_tabs() { private function get_settings_tabs(): array {
static $tabs = []; static $tabs = [];
if ( empty( $tabs ) ) { if ( empty( $tabs ) ) {
$tabs = [ $tabs = [
...@@ -263,15 +238,12 @@ final class Settings { ...@@ -263,15 +238,12 @@ final class Settings {
* *
* @return PersistentContainer * @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 ); return new WordpressOptionsContainer( 'some-settings-' . $tab_slug );
} }
/** /**
* Save data from tab to persistent container. * Save data from tab to persistent container.
*
* @param SettingsTab $tab
* @param PersistentContainer $container
*/ */
private function save_tab_data( SettingsTab $tab, PersistentContainer $container ) { private function save_tab_data( SettingsTab $tab, PersistentContainer $container ) {
$tab_data = $tab->get_data(); $tab_data = $tab->get_data();
...@@ -282,17 +254,14 @@ final class Settings { ...@@ -282,17 +254,14 @@ final class Settings {
} ); } );
} }
/** private function get_renderer(): \WPDesk\View\Renderer\Renderer {
* @return \WPDesk\View\Renderer\Renderer
*/
private function get_renderer() {
return new SimplePhpRenderer( new DefaultFormFieldResolver() ); return new SimplePhpRenderer( new DefaultFormFieldResolver() );
} }
/** /**
* @return string[] * @return string[]
*/ */
private function get_tabs_menu_items() { private function get_tabs_menu_items(): array {
$menu_items = []; $menu_items = [];
foreach ( $this->get_settings_tabs() as $tab ) { foreach ( $this->get_settings_tabs() as $tab ) {
...@@ -303,8 +272,3 @@ final class Settings { ...@@ -303,8 +272,3 @@ final class Settings {
} }
} }
``` ```
## Project documentation
PHPDoc: https://wpdesk.gitlab.io/wp-forms/index.html
\ No newline at end of file
# Changelog # Changelog
## [2.5.0] - 2021-09-03 ## [3.0.0] - 2021-09-08
### Added ### Added
- Added strong typing to all of the interfaces
- Added fields sorting by priority field - Added fields sorting by priority field
###
- Removed deprecated classes
## [2.4.6] - 2021-08-23 ## [2.4.6] - 2021-08-23
### Fixed ### Fixed
......
...@@ -54,13 +54,7 @@ interface Field { ...@@ -54,13 +54,7 @@ interface Field {
*/ */
public function get_attributes( array $except = [] ): array; public function get_attributes( array $except = [] ): array;
/** public function get_attribute( string $name, string $default = null ): string;
* @param string $name
* @param ?string $default
*
* @return string
*/
public function get_attribute( string $name, $default = null ): string;
public function is_attribute_set( string $name ): bool; public function is_attribute_set( string $name ): bool;
......
...@@ -45,13 +45,7 @@ trait HtmlAttributes { ...@@ -45,13 +45,7 @@ trait HtmlAttributes {
return isset( $this->attributes[ $name ] ); return isset( $this->attributes[ $name ] );
} }
/** public function get_attribute( string $name, string $default = null ): string {
* @param string $name
* @param ?string $default
*
* @return string
*/
public function get_attribute( string $name, $default = null ): string {
return $this->attributes[ $name ] ?? $default; return $this->attributes[ $name ] ?? $default;
} }
} }
...@@ -29,7 +29,7 @@ class JsonNormalizedRenderer implements FieldRenderer { ...@@ -29,7 +29,7 @@ class JsonNormalizedRenderer implements FieldRenderer {
'readonly' => $field->is_readonly(), 'readonly' => $field->is_readonly(),
'required' => $field->is_required(), 'required' => $field->is_required(),
'prefix' => $name_prefix, '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() ) { if ( $field->has_classes() ) {
......
...@@ -123,7 +123,7 @@ services: ...@@ -123,7 +123,7 @@ services:
WORDPRESS_DB_HOST: mysql0 WORDPRESS_DB_HOST: mysql0
mysql0: mysql0:
image: mysql:5.7 image: mariadb:10.3
environment: environment:
MYSQL_ROOT_PASSWORD: mysql MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest MYSQL_DATABASE: wptest
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment