]> source.dussan.org Git - nextcloud-server.git/commitdiff
Prevent unnecesary profile action registrations 29436/head
authorChristopher Ng <chrng8@gmail.com>
Mon, 25 Oct 2021 21:55:29 +0000 (21:55 +0000)
committerJohn Molakvoæ (Rebase PR Action) <skjnldsv@users.noreply.github.com>
Tue, 26 Oct 2021 08:59:28 +0000 (08:59 +0000)
Signed-off-by: Christopher Ng <chrng8@gmail.com>
lib/private/Profile/ProfileManager.php

index bf974e98e0ff41fd53584f95bdf7a5bdd3693743..a7fdfcc62f483d8510ec7e1725f980b251da5c72 100644 (file)
@@ -74,6 +74,9 @@ class ProfileManager {
        /** @var ILinkAction[] */
        private $actions = [];
 
+       /** @var null|ILinkAction[] */
+       private $sortedActions = null;
+
        /**
         * Array of account property actions
         */
@@ -157,21 +160,25 @@ class ProfileManager {
         * @return ILinkAction[]
         */
        private function getActions(IUser $targetUser, ?IUser $visitingUser): array {
-               $context = $this->coordinator->getRegistrationContext();
-               if ($context === null) {
-                       return [];
+               // If actions are already registered and sorted, return them
+               if ($this->sortedActions !== null) {
+                       return $this->sortedActions;
                }
 
                foreach (self::ACCOUNT_PROPERTY_ACTIONS as $actionClass) {
-                       /** @var ILinkAction $provider */
-                       $provider = $this->container->get($actionClass);
-                       $this->registerAction($targetUser, $visitingUser, $provider);
+                       /** @var ILinkAction $action */
+                       $action = $this->container->get($actionClass);
+                       $this->registerAction($targetUser, $visitingUser, $action);
                }
 
-               foreach ($context->getProfileLinkActions() as $registration) {
-                       /** @var ILinkAction $provider */
-                       $provider = $this->container->get($registration->getService());
-                       $this->registerAction($targetUser, $visitingUser, $provider);
+               $context = $this->coordinator->getRegistrationContext();
+
+               if ($context !== null) {
+                       foreach ($context->getProfileLinkActions() as $registration) {
+                               /** @var ILinkAction $action */
+                               $action = $this->container->get($registration->getService());
+                               $this->registerAction($targetUser, $visitingUser, $action);
+                       }
                }
 
                $actionsClone = $this->actions;
@@ -179,7 +186,9 @@ class ProfileManager {
                usort($actionsClone, function (ILinkAction $a, ILinkAction $b) {
                        return $a->getPriority() === $b->getPriority() ? 0 : ($a->getPriority() < $b->getPriority() ? -1 : 1);
                });
-               return $actionsClone;
+
+               $this->sortedActions = $actionsClone;
+               return $this->sortedActions;
        }
 
        /**