Registering support for new element types
Step 1: ExportableElementTypeModel
Registering support for new element types is done throught a ExportableElementTypeModel model.
In the example below, we register support for Formie Submissions:
class ExportableFormieSubmissionModel extends ExportableElementTypeModel
{
/** @phpstan-ignore-next-line */
public $elementType = Submission::class;
public string $elementLabel = "Formie Submissions";
public function getGroup(): array
{
return [
"label" => "Form",
"parameter" => "formId",
"items" => Formie::getInstance()->getForms()->getAllForms(), // @phpstan-ignore-line
"nameProperty" => "title",
];
}
public function getSubGroup(): bool|array
{
return false;
}
}class ExportableFormieSubmissionModel extends ExportableElementTypeModel
{
/** @phpstan-ignore-next-line */
public $elementType = Submission::class;
public string $elementLabel = "Formie Submissions";
public function getGroup(): array
{
return [
"label" => "Form",
"parameter" => "formId",
"items" => Formie::getInstance()->getForms()->getAllForms(), // @phpstan-ignore-line
"nameProperty" => "title",
];
}
public function getSubGroup(): bool|array
{
return false;
}
}In this model, we defined the following properties:
elementType
The element type's class you want to export
elementLabel
How you want the element type to be labeled when creating a new export
getElementAttributes()
This function should return an array of property => label for default element attributes you want to make exportable.
getGroup()
In this function we defined how the elements are grouped or divided. This function should return an array with the following items:
label: what the grouping is calledparameter: the property on the element that contains the id referencing the groupitems: this should call the function that gets all group options.nameProperty: under which property the name of the group can be found (name, title, etc)
Permissions for groups
Note that when registering a new element type, the items property should take into account the current user's permissions to see those elements.
Step 2: Register our model
Once you've created the model, you need to register it through the following event:
You add to the current supported types by adding \plugin\namespace\elements\class => $model to the current array.
use studioespresso\exporter\helpers\ElementTypeHelper;
use studioespresso\exporter\events\RegisterExportableElementTypes;
Event::on(
ElementTypeHelper::class,
ElementTypeHelper::EVENT_REGISTER_EXPORTABLE_ELEMENT_TYPES,
function(RegisterExportableElementTypes $event) {
$model = new ExportableFormieSubmissionModel();
$event->elementTypes = array_merge($event->elementTypes, [
\verbb\formie\elements\Submission::class => $model,
]);
}
);use studioespresso\exporter\helpers\ElementTypeHelper;
use studioespresso\exporter\events\RegisterExportableElementTypes;
Event::on(
ElementTypeHelper::class,
ElementTypeHelper::EVENT_REGISTER_EXPORTABLE_ELEMENT_TYPES,
function(RegisterExportableElementTypes $event) {
$model = new ExportableFormieSubmissionModel();
$event->elementTypes = array_merge($event->elementTypes, [
\verbb\formie\elements\Submission::class => $model,
]);
}
);