Called when receiving a post from another source. This may also be used to post local activity or system generated messages.
`$b` is the item array of information to be stored in the database and the item body is bbcode.
-### settings_form
-Called when generating the HTML for the user Settings page.
-`$b` is the HTML string of the settings page before the final `</form>` tag.
-
-### settings_post
-Called when the Settings pages are submitted.
-`$b` is the $_POST array.
-
### addon_settings
Called when generating the HTML for the addon settings page.
-`$b` is the (string) HTML of the addon settings page before the final `</form>` tag.
+`$data` is an array containing:
+
+- **addon** (output): Required. The addon folder name.
+- **title** (output): Required. The addon settings panel title.
+- **href** (output): Optional. If set, will reduce the panel to a link pointing to this URL, can be relative. Incompatible with the following keys.
+- **html** (output): Optional. Raw HTML of the addon form elements. Both the `<form>` tags and the submit buttons are taken care of elsewhere.
+- **submit** (output): Optional. If unset, a default submit button with `name="<addon name>-submit"` will be generated.
+ Can take different value types:
+ - **string**: The label to replace the default one.
+ - **associative array**: A list of submit button, the key is the value of the `name` attribute, the value is the displayed label.
+ The first submit button in this list is considered the main one and themes might emphasize its display.
+
+#### Examples
+
+##### With link
+```php
+$data = [
+ 'addon' => 'advancedcontentfilter',
+ 'title' => DI::l10n()->t('Advanced Content Filter'),
+ 'href' => 'advancedcontentfilter',
+];
+```
+##### With default submit button
+```php
+$data = [
+ 'addon' => 'fromapp',
+ 'title' => DI::l10n()->t('FromApp Settings'),
+ 'html' => $html,
+];
+```
+##### With no HTML, just a submit button
+```php
+$data = [
+ 'addon' => 'opmlexport',
+ 'title' => DI::l10n()->t('OPML Export'),
+ 'submit' => DI::l10n()->t('Export RSS/Atom contacts'),
+];
+```
+##### With multiple submit buttons
+```php
+$data = [
+ 'addon' => 'catavar',
+ 'title' => DI::l10n()->t('Cat Avatar Settings'),
+ 'html' => $html,
+ 'submit' => [
+ 'catavatar-usecat' => DI::l10n()->t('Use Cat as Avatar'),
+ 'catavatar-morecat' => DI::l10n()->t('Another random Cat!'),
+ 'catavatar-emailcat' => DI::pConfig()->get(Session::getLocalUser(), 'catavatar', 'seed', false) ? DI::l10n()->t('Reset to email Cat') : null,
+ ],
+];
+```
### addon_settings_post
Called when the Addon Settings pages are submitted.
`$b` is the $_POST array.
+### connector_settings
+Called when generating the HTML for a connector addon settings page.
+`$data` is an array containing:
+
+- **connector** (output): Required. The addon folder name.
+- **title** (output): Required. The addon settings panel title.
+- **image** (output): Required. The relative path of the logo image of the platform/protocol this addon is connecting to, max size 48x48px.
+- **enabled** (output): Optional. If set to a falsy value, the connector image will be dimmed.
+- **html** (output): Optional. Raw HTML of the addon form elements. Both the `<form>` tags and the submit buttons are taken care of elsewhere.
+- **submit** (output): Optional. If unset, a default submit button with `name="<addon name>-submit"` will be generated.
+ Can take different value types:
+ - **string**: The label to replace the default one.
+ - **associative array**: A list of submit button, the key is the value of the `name` attribute, the value is the displayed label.
+ The first submit button in this list is considered the main one and themes might emphasize its display.
+
+#### Examples
+
+##### With default submit button
+```php
+$data = [
+ 'connector' => 'diaspora',
+ 'title' => DI::l10n()->t('Diaspora Export'),
+ 'image' => 'images/diaspora-logo.png',
+ 'enabled' => $enabled,
+ 'html' => $html,
+];
+```
+
+##### With custom submit button label and no logo dim
+```php
+$data = [
+ 'connector' => 'ifttt',
+ 'title' => DI::l10n()->t('IFTTT Mirror'),
+ 'image' => 'addon/ifttt/ifttt.png',
+ 'html' => $html,
+ 'submit' => DI::l10n()->t('Generate new key'),
+];
+```
+
+##### With conditional submit buttons
+```php
+$submit = ['pumpio-submit' => DI::l10n()->t('Save Settings')];
+if ($oauth_token && $oauth_token_secret) {
+ $submit['pumpio-delete'] = DI::l10n()->t('Delete this preset');
+}
+
+$data = [
+ 'connector' => 'pumpio',
+ 'title' => DI::l10n()->t('Pump.io Import/Export/Mirror'),
+ 'image' => 'images/pumpio.png',
+ 'enabled' => $enabled,
+ 'html' => $html,
+ 'submit' => $submit,
+];
+```
+
### profile_post
Called when posting a profile page.
`$b` is the $_POST array.
- **uri** (input): the profile URI.
- **network** (input): the target network (can be empty for auto-detection).
- **uid** (input): the user to return the contact data for (can be empty for public contacts).
-- **result** (output): Set by the hook function to indicate a successful detection.
+- **result** (output): Leave null if address isn't relevant to the connector, set to contact array if probe is successful, false otherwise.
+
+### item_by_link
+
+Called when trying to probe an item from a given URI.
+If any registered hook function sets the `item_id` key of the hook data array, it will be returned immediately.
+Hook functions should also return immediately if the hook data contains an existing `item_id`.
+
+Hook data:
+- **uri** (input): the item URI.
+- **uid** (input): the user to return the item data for (can be empty for public contacts).
+- **item_id** (output): Leave null if URI isn't relevant to the connector, set to created item array if probe is successful, false otherwise.
### support_follow
Called when unfollowing a remote contact on a non-native network (like Twitter)
Hook data:
-- **contact** (input): the remote contact (uid = local unfollowing user id) array.
+- **contact** (input): the target public contact (uid = 0) array.
+- **uid** (input): the id of the source local user.
- **result** (output): wether the unfollowing is successful or not.
### revoke_follow
Called when making a remote contact on a non-native network (like Twitter) unfollow you.
Hook data:
-- **contact** (input): the remote contact (uid = local revoking user id) array.
+- **contact** (input): the target public contact (uid = 0) array.
+- **uid** (input): the id of the source local user.
- **result** (output): a boolean value indicating wether the operation was successful or not.
### block
- **uid** (input): the user id to revoke the block for.
- **result** (output): a boolean value indicating wether the operation was successful or not.
+### storage_instance
+
+Called when a custom storage is used (e.g. webdav_storage)
+
+Hook data:
+- **name** (input): the name of the used storage backend
+- **data['storage']** (output): the storage instance to use (**must** implement `\Friendica\Core\Storage\IWritableStorage`)
+
+### storage_config
+
+Called when the admin of the node wants to configure a custom storage (e.g. webdav_storage)
+
+Hook data:
+- **name** (input): the name of the used storage backend
+- **data['storage_config']** (output): the storage configuration instance to use (**must** implement `\Friendica\Core\Storage\Capability\IConfigureStorage`)
+
## Complete list of hook callbacks
Here is a complete list of all hook callbacks with file locations (as of 24-Sep-2018). Please see the source for details of any hooks not documented above.
Hook::callAll($a->module.'_mod_init', $placeholder);
Hook::callAll($a->module.'_mod_init', $placeholder);
Hook::callAll($a->module.'_mod_post', $_POST);
- Hook::callAll($a->module.'_mod_afterpost', $placeholder);
Hook::callAll($a->module.'_mod_content', $arr);
Hook::callAll($a->module.'_mod_aftercontent', $arr);
Hook::callAll('page_end', DI::page()['content']);
Hook::callAll('personal_xrd', $arr);
-### mod/ping.php
-
- Hook::callAll('network_ping', $arr);
-
### mod/parse_url.php
Hook::callAll("parse_link", $arr);
Hook::callAll('addon_settings_post', $_POST);
Hook::callAll('connector_settings_post', $_POST);
Hook::callAll('display_settings_post', $_POST);
- Hook::callAll('settings_post', $_POST);
Hook::callAll('addon_settings', $settings_addons);
Hook::callAll('connector_settings', $settings_connectors);
Hook::callAll('display_settings', $o);
- Hook::callAll('settings_form', $o);
### mod/photos.php
Hook::callAll('home_init', $ret);
Hook::callAll("home_content", $content);
-### mod/poke.php
-
- Hook::callAll('post_local_end', $arr);
-
### mod/contacts.php
Hook::callAll('contact_edit_post', $_POST);
Hook::callAll('post_local', $datarray);
Hook::callAll('post_local_end', $datarray);
-### mod/editpost.php
-
- Hook::callAll('jot_tool', $jotplugins);
-
### src/Render/FriendicaSmartyEngine.php
Hook::callAll("template_vars", $arr);
Hook::callAll('register_account', $uid);
Hook::callAll('remove_user', $user);
+### src/Module/Notifications/Ping.php
+
+ Hook::callAll('network_ping', $arr);
+
### src/Module/PermissionTooltip.php
Hook::callAll('lockview_content', $item);
+### src/Module/Post/Edit.php
+
+ Hook::callAll('jot_tool', $jotplugins);
+
### src/Module/Settings/Delegation.php
Hook::callAll('authenticate', $addon_auth);
Hook::callAll('block', $hook_data);
Hook::callAll('unblock', $hook_data);
+### src/Core/Logger/Factory.php
+
+ Hook::callAll('logger_instance', $data);
+
### src/Core/StorageManager
Hook::callAll('storage_instance', $data);
+ Hook::callAll('storage_config', $data);
### src/Worker/Directory.php
self::callSingle(self::getApp(), 'hook_fork', $fork_hook, $hookdata);
-### src/Core/L10n/L10n.php
-
- Hook::callAll('poke_verbs', $arr);
-
### src/Core/Worker.php
Hook::callAll("proc_run", $arr);