/** @var ILinkAction[] */
private $actions = [];
+ /** @var null|ILinkAction[] */
+ private $sortedActions = null;
+
/**
* Array of account property actions
*/
* @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;
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;
}
/**