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
......@@ -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() );
......@@ -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
# 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
......
......@@ -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;
......
......@@ -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;
}
}
......@@ -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() ) {
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment