FlexForm can be extended by a PHP function to handle additional tasks after a Form has been submitted.


This can be done with FFAfterFormHandling MediaWiki Hook. For more information see de Docs on Hooks.


Or using the following method:

Start a FlexForm and tell it to use your extension :

<form extension="<name of your extension" >
   Your flexform elements here
</form>

Create a folder in FlexForm/src/Modules/Handlers with the name of your extension.

In this folder create a file called PostHandler.php with the following namespace :

namespace FlexForm\Modules\Handlers\< your extension name = same as folder name >;

Your extension will be based based on a class PostHandler and will utilize the HandlerInterface interface and will only hold one method : execute

class PostHandler implements HandlerInterface {
	/**
	 * @inerhitDoc
	 */
	public function execute( array $flexFormFields, ?array $config, HandleResponse $responseHandler ): HandleResponse {

	}
}

The array $flexFormFields will be available and hold all submitted Form elements as name->value.

The array $config will hold an array of your config variables you can set in the FlexForm config array ($wgFlexFormConfig) in your local settings. If you have not set any configuration, $config will be null.

You can set your config settings like so (example from the included PHPList extension, you should change phpList with the name of your extension):

$wgFlexFormConfig['extensions']['phpList']['HTML'] = 1;
$wgFlexFormConfig['extensions']['phpList']['PHP_LIST_URL'] = 'https://example.com/lists';
$wgFlexFormConfig['extensions']['phpList']['FIELD_EMAIL'] = 'email';

Once set the $config variable holds everything from $wgFlexFormConfig['extensions']['phpList']. So in this case if you want the FIELD_EMAIL, you get it from $config['FIELD_EMAIL'];


If your extension produces an error, throw a FlexFormException and FlexForm will take care of the rest. Make sure to throw a message that has your extension name in it.

If your extension has successfully finished its tasks, tell the responsehandler it has been successful and return the responseHandler :

$responseHandler->setReturnType( HandleResponse::TYPE_SUCCESS );
return $responseHandler;

If your extension has successfully finished its tasks and you want to pass additional information to the user :

$responseHandler->setReturnType( HandleResponse::TYPE_SUCCESS );
$responseHandler->setReturnData( string < your message > );
return $responseHandler;

NOTE:

When a FlexForm has the extension tag. FlexForm will first search for the extension in the Handlers folder. If it cannot be found it will run the FFAfterFormHandling hook.

No error message will be shown if FlexForm cannot find the extension.