]> git.mxchange.org Git - friendica.git/commitdiff
Remove App dependency from Hook::callSingle
authorHypolite Petovan <hypolite@mrpetovan.com>
Sat, 14 Jan 2023 02:10:59 +0000 (21:10 -0500)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sat, 14 Jan 2023 15:38:37 +0000 (10:38 -0500)
- This was causing a circular dependency with the logger_instance hook

doc/Addons.md
doc/de/Addons.md
src/Core/Hook.php
src/Module/Settings/Addons.php
src/Module/Settings/Connectors.php
src/Worker/Expire.php
src/Worker/ForkHook.php
view/theme/frio/theme.php

index 171b5681a19f90de915514fea9dd19805b14ebe5..dbb2c501fe34d11b4de6b6d1a44eab385d4bdc52 100644 (file)
@@ -60,25 +60,14 @@ This *should* be 'addon/*addon_name*/*addon_name*.php' in most cases and can be
 `$function` is a string and is the name of the function which will be executed when the hook is called.
 
 ### Arguments
-Your hook callback functions will be called with at least one and possibly two arguments
+Your hook callback functions will be called with at most one argument
 
-    function <addon>_<hookname>(App $a, &$b) {
+    function <addon>_<hookname>(&$b) {
 
     }
 
 If you wish to make changes to the calling data, you must declare them as reference variables (with `&`) during function declaration.
 
-#### $a
-$a is the Friendica `App` class.
-It contains a wealth of information about the current state of Friendica:
-
-* which module has been called,
-* configuration information,
-* the page contents at the point the hook was invoked,
-* profile and user information, etc.
-
-It is recommeded you call this `$a` to match its usage elsewhere.
-
 #### $b
 $b can be called anything you like.
 This is information specific to the hook currently being processed, and generally contains information that is being immediately processed or acted on that you can use, display, or alter.
@@ -88,7 +77,7 @@ Remember to declare it with `&` if you wish to alter it.
 
 Your addon can provide user-specific settings via the `addon_settings` PHP hook, but it can also provide node-wide settings in the administration page of your addon.
 
-Simply declare a `<addon>_addon_admin(App $a)` function to display the form and a `<addon>_addon_admin_post(App $a)` function to process the data from the form.
+Simply declare a `<addon>_addon_admin()` function to display the form and a `<addon>_addon_admin_post()` function to process the data from the form.0
 
 ## Global stylesheets
 
@@ -102,7 +91,7 @@ function <addon>_install()
 }
 
 
-function <addon>_head(App $a)
+function <addon>_head()
 {
        \Friendica\DI::page()->registerStylesheet(__DIR__ . '/relative/path/to/addon/stylesheet.css');
 }
@@ -124,7 +113,7 @@ function <addon>_install()
        ...
 }
 
-function <addon>_footer(App $a)
+function <addon>_footer()
 {
        \Friendica\DI::page()->registerFooterScript(__DIR__ . '/relative/path/to/addon/script.js');
 }
@@ -167,9 +156,9 @@ DI::args()->get(1); // = 'arg1'
 DI::args()->get(2); // = 'arg2'
 ```
 
-To display a module page, you need to declare the function `<addon>_content(App $a)`, which defines and returns the page body content.
-They may also contain `<addon>_post(App $a)` which is called before the `<addon>_content` function and typically handles the results of POST forms.
-You may also have `<addon>_init(App $a)` which is called before `<addon>_content` and should include common logic to your module.
+To display a module page, you need to declare the function `<addon>_content()`, which defines and returns the page body content.
+They may also contain `<addon>_post()` which is called before the `<addon>_content` function and typically handles the results of POST forms.
+You may also have `<addon>_init()` which is called before `<addon>_content` and should include common logic to your module.
 
 ## Templates
 
@@ -209,7 +198,7 @@ Called when a user attempts to login.
 
 ### logged_in
 Called after a user has successfully logged in.
-`$b` contains the `$a->user` array.
+`$b` contains the `App->user` array.
 
 ### display_item
 Called when formatting a post for display.
@@ -360,7 +349,7 @@ Called prior to output of profile edit page.
 ### profile_advanced
 Called when the HTML is generated for the Advanced profile, corresponding to the Profile tab within a person's profile page.
 `$b` is the HTML string representation of the generated profile.
-The profile array details are in `$a->profile`.
+The profile array details are in `App->profile`.
 
 ### directory_item
 Called from the Directory page when formatting an item for display.
index 143e309cbba4059bbc26b589e4ea33a20957c698..73f2aeb45efb7e92530436a50e35507698dec9a1 100644 (file)
@@ -38,17 +38,14 @@ $function ist ein String und der Name der Funktion, die ausgeführt wird, wenn d
 Argumente
 ---
 
-Deine Hook-Callback-Funktion wird mit mindestens einem und bis zu zwei Argumenten aufgerufen
+Deine Hook-Callback-Funktion wird mit höchstens einem Argumenten aufgerufen
 
-    function myhook_function(App $a, &$b) {
+    function myhook_function(&$b) {
 
     }
 
 Wenn du Änderungen an den aufgerufenen Daten vornehmen willst, musst du diese als Referenzvariable (mit "&") während der Funktionsdeklaration deklarieren.
 
-$a ist die Friendica "App"-Klasse, die eine Menge an Informationen über den aktuellen Friendica-Status beinhaltet, u.a. welche Module genutzt werden, Konfigurationsinformationen, Inhalte der Seite zum Zeitpunkt des Hook-Aufrufs.
-Es ist empfohlen, diese Funktion "$a" zu nennen, um seine Nutzung an den Gebrauch an anderer Stelle anzugleichen.
-
 $b kann frei benannt werden.
 Diese Information ist speziell auf den Hook bezogen, der aktuell bearbeitet wird, und beinhaltet normalerweise Daten, die du sofort nutzen, anzeigen oder bearbeiten kannst.
 Achte darauf, diese mit "&" zu deklarieren, wenn du sie bearbeiten willst.
@@ -70,9 +67,9 @@ DI::args()->get(1); // = 'arg1'
 DI::args()->get(2); // = 'arg2'
 ```
 
-Deine Modulfunktionen umfassen oft die Funktion addon_name_content(App $a), welche den Seiteninhalt definiert und zurückgibt.
-Sie können auch addon_name_post(App $a) umfassen, welches vor der content-Funktion aufgerufen wird und normalerweise die Resultate der POST-Formulare handhabt.
-Du kannst ebenso addon_name_init(App $a) nutzen, was oft frühzeitig aufgerufen wird und das Modul initialisert.
+Deine Modulfunktionen umfassen oft die Funktion `addon_name_content()`, welche den Seiteninhalt definiert und zurückgibt.
+Sie können auch `addon_name_post()` umfassen, welches vor der content-Funktion aufgerufen wird und normalerweise die Resultate der POST-Formulare handhabt.
+Du kannst ebenso `addon_name_init()` nutzen, was oft frühzeitig aufgerufen wird und das Modul initialisert.
 
 
 Derzeitige Hooks
@@ -86,7 +83,7 @@ Derzeitige Hooks
         'user_record' => die erfolgreiche Authentifizierung muss auch einen gültigen Nutzereintrag aus der Datenbank zurückgeben
 
 **'logged_in'** - wird aufgerufen, sobald ein Nutzer sich erfolgreich angemeldet hat.
-    $b beinhaltet den $a->Nutzer-Array
+    $b beinhaltet den `App->user`
 
 
 **'display_item'** - wird aufgerufen, wenn ein Beitrag für die Anzeige formatiert wird.
@@ -122,7 +119,7 @@ Derzeitige Hooks
 
 **'profile_advanced'** - wird aufgerufen, wenn die HTML-Ausgabe für das "Advanced profile" generiert wird; stimmt mit dem "Profil"-Tab auf der Profilseite der Nutzer überein.
     $b ist die HTML-Ausgabe (String) des erstellten Profils
-    (Die Details des Profil-Arrays sind in $a->profile)
+    (Die Details des Profil-Arrays sind in `App->profile`)
 
 **'directory_item'** - wird von der Verzeichnisseite aufgerufen, wenn ein Item für die Anzeige formatiert wird.
     $b ist ein Array
index 1145bd298321199e732d29ebdef042fe60df47e2..3167464a790da9f46d5261e2bbf5ffcbabdd3678 100644 (file)
@@ -167,7 +167,7 @@ class Hook
                                                if ($hook[0] != $fork_hook[0]) {
                                                        continue;
                                                }
-                                               self::callSingle(DI::app(), 'hook_fork', $fork_hook, $hookdata);
+                                               self::callSingle('hook_fork', $fork_hook, $hookdata);
                                        }
 
                                        if (!$hookdata['execute']) {
@@ -195,7 +195,7 @@ class Hook
        {
                if (array_key_exists($name, self::$hooks)) {
                        foreach (self::$hooks[$name] as $hook) {
-                               self::callSingle(DI::app(), $name, $hook, $data);
+                               self::callSingle($name, $hook, $data);
                        }
                }
        }
@@ -203,24 +203,23 @@ class Hook
        /**
         * Calls a single hook.
         *
-        * @param App             $a
         * @param string          $name of the hook to call
         * @param array           $hook Hook data
         * @param string|array   &$data to transmit to the callback handler
         * @return void
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public static function callSingle(App $a, string $name, array $hook, &$data = null)
+       public static function callSingle(string $name, array $hook, &$data = null)
        {
                // Don't run a theme's hook if the user isn't using the theme
-               if (strpos($hook[0], 'view/theme/') !== false && strpos($hook[0], 'view/theme/' . $a->getCurrentTheme()) === false) {
+               if (strpos($hook[0], 'view/theme/') !== false && strpos($hook[0], 'view/theme/' . DI::app()->getCurrentTheme()) === false) {
                        return;
                }
 
                @include_once($hook[0]);
                if (function_exists($hook[1])) {
                        $func = $hook[1];
-                       $func($a, $data);
+                       $func($data);
                } else {
                        // remove orphan hooks
                        $condition = ['hook' => $name, 'file' => $hook[0], 'function' => $hook[1]];
index ac2d188c0a5bae2bb0cbebdf10e9455b6ca0cae9..b6ac406ba6ebc19cc8039cf5f62f89c80fee2d13 100644 (file)
@@ -36,15 +36,12 @@ class Addons extends BaseSettings
 {
        /** @var Database */
        private $database;
-       /** @var App */
-       private $app;
 
-       public function __construct(App $app, Database $database, IHandleUserSessions $session, App\Page $page, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
+       public function __construct(Database $database, IHandleUserSessions $session, App\Page $page, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
        {
                parent::__construct($session, $page, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
 
                $this->database = $database;
-               $this->app      = $app;
        }
 
        protected function post(array $request = [])
@@ -62,7 +59,7 @@ class Addons extends BaseSettings
                $addon_settings_forms = [];
                foreach ($this->database->selectToArray('hook', ['file', 'function'], ['hook' => 'addon_settings']) as $hook) {
                        $data = [];
-                       Hook::callSingle($this->app, 'addon_settings', [$hook['file'], $hook['function']], $data);
+                       Hook::callSingle('addon_settings', [$hook['file'], $hook['function']], $data);
 
                        if (!empty($data['href'])) {
                                $tpl                    = Renderer::getMarkupTemplate('settings/addons/link.tpl');
index 1070355bf89e59a4fbd5febf944d22cef1c92826..7c053e1681ef5e607a50b4cd39b8fc7f06413e4e 100644 (file)
@@ -49,10 +49,8 @@ class Connectors extends BaseSettings
        private $database;
        /** @var SystemMessages */
        private $systemMessages;
-       /** @var App */
-       private $app;
 
-       public function __construct(App $app, SystemMessages $systemMessages, Database $database, IManagePersonalConfigValues $pconfig, IManageConfigValues $config, IHandleUserSessions $session, App\Page $page, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
+       public function __construct(SystemMessages $systemMessages, Database $database, IManagePersonalConfigValues $pconfig, IManageConfigValues $config, IHandleUserSessions $session, App\Page $page, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
        {
                parent::__construct($session, $page, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
 
@@ -60,7 +58,6 @@ class Connectors extends BaseSettings
                $this->pconfig        = $pconfig;
                $this->database       = $database;
                $this->systemMessages = $systemMessages;
-               $this->app            = $app;
        }
 
        protected function post(array $request = [])
@@ -146,7 +143,7 @@ class Connectors extends BaseSettings
                $connector_settings_forms = [];
                foreach ($this->database->selectToArray('hook', ['file', 'function'], ['hook' => 'connector_settings']) as $hook) {
                        $data = [];
-                       Hook::callSingle($this->app, 'connector_settings', [$hook['file'], $hook['function']], $data);
+                       Hook::callSingle('connector_settings', [$hook['file'], $hook['function']], $data);
 
                        $tpl                                          = Renderer::getMarkupTemplate('settings/addons/connector.tpl');
                        $connector_settings_forms[$data['connector']] = Renderer::replaceMacros($tpl, [
@@ -160,7 +157,7 @@ class Connectors extends BaseSettings
                        ]);
                }
 
-               if ($this->app->isSiteAdmin()) {
+               if ($this->session->isSiteAdmin()) {
                        $diasp_enabled = $this->config->get('system', 'diaspora_enabled') ?
                                $this->t('Built-in support for %s connectivity is enabled', $this->t('Diaspora (Socialhome, Hubzilla)')) :
                                $this->t('Built-in support for %s connectivity is disabled', $this->t('Diaspora (Socialhome, Hubzilla)'));
index 9e907dcfc2afc658503eda7d317f489246911542..15a9355342f8d7c3258fe46ec2fc004c8218a5d8 100644 (file)
@@ -51,7 +51,7 @@ class Expire
                        foreach (Hook::getByName('expire') as $hook) {
                                if ($hook[1] == $hook_function) {
                                        Logger::info('Calling expire hook', ['hook' => $hook[1]]);
-                                       Hook::callSingle($a, 'expire', $hook, $data);
+                                       Hook::callSingle('expire', $hook, $data);
                                }
                        }
                        return;
index da9fe990ad8b20b97a8390dbe4462cf271af8a97..406dcd171cbdb4e00ea85b9ec096bff8db05d384 100644 (file)
@@ -28,8 +28,6 @@ Class ForkHook
 {
        public static function execute($name, $hook, $data)
        {
-               $a = DI::app();
-
-               Hook::callSingle($a, $name, $hook, $data);
+               Hook::callSingle($name, $hook, $data);
        }
 }
index 253a55ec477f3c88d8dbde3cdc1df73394298cb4..05e45163faca1bd81f56525e880de21d518a2efe 100644 (file)
 
 use Friendica\App;
 use Friendica\Content\Text\Plaintext;
-use Friendica\Content\Widget;
 use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\Core\Renderer;
 use Friendica\Database\DBA;
 use Friendica\DI;
-use Friendica\Model;
-use Friendica\Model\Item;
 use Friendica\Model\Contact;
+use Friendica\Model\Item;
 use Friendica\Model\Profile;
-use Friendica\Module;
-use Friendica\Util\Strings;
 
 const FRIO_SCHEME_ACCENT_BLUE   = '#1e87c2';
 const FRIO_SCHEME_ACCENT_RED    = '#b50404';
@@ -89,10 +85,9 @@ function frio_install()
  *  to the photo file. This function is nessesary to use colorbox
  *  in the network stream
  *
- * @param App $a Unused but required by hook definition
  * @param array $body_info The item and its html output
  */
-function frio_item_photo_links(App $a, &$body_info)
+function frio_item_photo_links(&$body_info)
 {
        $occurence = 0;
        $p = Plaintext::getBoundariesPosition($body_info['html'], '<a', '>');
@@ -125,10 +120,9 @@ function frio_item_photo_links(App $a, &$body_info)
  *  to call the addToModal javascript function so this pages can
  *  be loaded in a bootstrap modal
  *
- * @param App $a Unused but required by the hook definition
  * @param array $arr Contains item data and the original photo_menu
  */
-function frio_item_photo_menu(App $a, &$arr)
+function frio_item_photo_menu(&$arr)
 {
        foreach ($arr['menu'] as $k => $v) {
                if (strpos($v, 'message/new/') === 0) {
@@ -147,10 +141,9 @@ function frio_item_photo_menu(App $a, &$arr)
  *  Additionally the profile, status and photo page links  will be changed
  *  to don't open in a new tab if the contact is a friendica contact.
  *
- * @param App $a The app data
  * @param array $args Contains contact data and the original photo_menu
  */
-function frio_contact_photo_menu(App $a, &$args)
+function frio_contact_photo_menu(&$args)
 {
        $cid = $args['contact']['id'];
 
@@ -199,7 +192,7 @@ function frio_contact_photo_menu(App $a, &$args)
  * @param array $nav_info The original nav info array: nav, banner, userinfo, sitelocation
  * @throws Exception
  */
-function frio_remote_nav(App $a, array &$nav_info)
+function frio_remote_nav(array &$nav_info)
 {
        if (DI::mode()->has(App\Mode::MAINTENANCEDISABLED)) {
                // get the homelink from $_SESSION
@@ -211,8 +204,8 @@ function frio_remote_nav(App $a, array &$nav_info)
                // since $userinfo isn't available for the hook we write it to the nav array
                // this isn't optimal because the contact query will be done now twice
                $fields = ['id', 'url', 'avatar', 'micro', 'name', 'nick', 'baseurl', 'updated'];
-               if ($a->isLoggedIn()) {
-                       $remoteUser = Contact::selectFirst($fields, ['uid' => $a->getLoggedInUserId(), 'self' => true]);
+               if (DI::userSession()->isAuthenticated()) {
+                       $remoteUser = Contact::selectFirst($fields, ['uid' => DI::userSession()->getLocalUserId(), 'self' => true]);
                } elseif (!DI::userSession()->getLocalUserId() && DI::userSession()->getRemoteUserId()) {
                        $remoteUser                = Contact::getById(DI::userSession()->getRemoteUserId(), $fields);
                        $nav_info['nav']['remote'] = DI::l10n()->t('Guest');
@@ -253,7 +246,7 @@ function frio_remote_nav(App $a, array &$nav_info)
        }
 }
 
-function frio_display_item(App $a, &$arr)
+function frio_display_item(&$arr)
 {
        // Add follow to the item menu
        $followThread = [];