= [[plugin:struct|Struct Plugin]]
====== Struct Plugin: Development Support ======
The Struct Plugin allows other plugin developers to hook into its functionality, adding additional features.
===== Registering new Types =====
The plugin signals the ''PLUGIN_STRUCT_TYPECLASS_INIT'' event which can be intercepted by [[devel:action_plugins|Action Plugins]]. There is no default action. The passed ''$data'' is an associative array listing the available [[plugin:struct:type|Types]] and their respective classes. It looks like this:
array(
'Checkbox' => 'dokuwiki\\plugin\\struct\\types\\Checkbox',
'Date' => 'dokuwiki\\plugin\\struct\\types\\Date',
'DateTime' => 'dokuwiki\\plugin\\struct\\types\\DateTime',
'Decimal' => 'dokuwiki\\plugin\\struct\\types\\Decimal',
'Dropdown' => 'dokuwiki\\plugin\\struct\\types\\Dropdown',
'Lookup' => 'dokuwiki\\plugin\\struct\\types\\Lookup',
'Mail' => 'dokuwiki\\plugin\\struct\\types\\Mail',
'Media' => 'dokuwiki\\plugin\\struct\\types\\Media',
'Page' => 'dokuwiki\\plugin\\struct\\types\\Page',
'Tag' => 'dokuwiki\\plugin\\struct\\types\\Tag',
'Text' => 'dokuwiki\\plugin\\struct\\types\\Text',
'Url' => 'dokuwiki\\plugin\\struct\\types\\Url',
'User' => 'dokuwiki\\plugin\\struct\\types\\User',
'Wiki' => 'dokuwiki\\plugin\\struct\\types\\Wiki',
);
Plugins may add their own ''Type'' => ''class'' pairs here. The class name has to be fully qualified and needs to be loadable by DokuWiki's [[devel:autoloader|Autoloader]]. The class needs to inherit from [[https://github.com/cosmocode/dokuwiki-plugin-struct/blob/master/types/AbstractBaseType.php|AbstractBaseType]] or one of its subclasses.
Please refer to the existing types' source code to see how to implement your own type.
Examples of plugins implementing this are: [[plugin:structstatus|structstatus Plugin]], [[plugin:structgroup|structgroup Plugin]], [[plugin:structjoin|structjoin Plugin]], [[plugin:structcombolookup|structcombolookup Plugin]]
===== Allow Additional Config Keys =====
When you write a plugin doing its own aggregation, you might want to reuse the ConfigParser class. By default this class will throw an Exception when a config key is encountered that it does not understand. You can handle the ''PLUGIN_STRUCT_CONFIGPARSER_UNKNOWNKEY'' event and prevent the default (of throwing the exception). You can add your own config to the ''config'' array in the event.
array(
'config' => &$this->config,
'key' => 'the unknown config key',
'val' => 'the value for that key'
)
Examples of plugins implementing this are: [[plugin:structgantt|structgantt Plugin]], [[plugin:structodt|structodt Plugin]]
===== Modify row rendering in AggregationTable =====
The ''PLUGIN_STRUCT_AGGREGATIONTABLE_RENDERRESULTROW'' event is called every time when the AggregationTable renders a row in a [[aggregation|struct table]]. You can use the ''BEFORE'' hook to change the default rendering procedure or ''AFTER'' to make some modifications to rendered row.
array(
'id' => $this->id,
'mode' => $this->mode,
'renderer' => $this->renderer,
'searchConfig' => $this->searchConfig,
'data' => $this->data,
'rownum' => &$rownum,
'row' => &$row,
)
Examples of plugins implementing this are: [[plugin:structrowcolor|structrowcolor Plugin]]