Skip to content

Commit

Permalink
Prevent unnecesary profile action registrations
Browse files Browse the repository at this point in the history
Signed-off-by: Christopher Ng <chrng8@gmail.com>
  • Loading branch information
Pytal committed Oct 25, 2021
1 parent 9f8eae3 commit 795a306
Showing 1 changed file with 20 additions and 11 deletions.
31 changes: 20 additions & 11 deletions lib/private/Profile/ProfileManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ class ProfileManager {
/** @var ILinkAction[] */
private $actions = [];

/** @var null|ILinkAction[] */
private $sortedActions = null;

/**
* Array of account property actions
*/
Expand Down Expand Up @@ -157,29 +160,35 @@ private function registerAction(IUser $targetUser, ?IUser $visitingUser, ILinkAc
* @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;
// Sort associative array into indexed array in ascending order of priority
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;
}

/**
Expand Down

0 comments on commit 795a306

Please sign in to comment.