public static function fetchLinkedProfile(Connection $conn, MembershipRoleResolver $roleResolver, IdentifiableInterface $item, Join $join, QueryElement $element) { $qb = QueryBuilder::select()->field('u.*')->field('p.*')->field('m.role AS `membership_role`')->field('m.note AS `membership_note`')->field('l.`id`', 'language_id')->field('l.`name`', 'language_name')->field('l.`locale`', 'language_locale')->from(CoreTables::USER_TBL, 'u')->join(CoreTables::USER_PROFILE_TBL, 'p', QueryClause::clause('p.`userId` = u.`id`'))->join(CoreTables::LANGUAGE_TBL, 'l', QueryClause::clause('l.`id` = p.`settingsLanguageId`'))->join($join)->where(QueryOperator::op('AND')->expr(QueryClause::clause('u.`active` = 1 AND u.`removed` = 0'))->expr($element)); $data = $qb->fetchAssoc($conn); if (false === $data) { return false; } $user = User::fromArray($data); $membership = new Membership($item, $roleResolver->getRole(get_class($item), $data['membership_role']), $data['membership_note']); User::installMembershipInformation($user, $membership); return $user; }
public function onControllerSelected(FilterControllerEvent $event) { if (null !== $this->workspace) { return; } $ctrl = $event->getController(); if (is_array($ctrl)) { $ctrl = $ctrl[0]; } if ($ctrl instanceof WorkspaceAwareInterface) { $this->workspaceController = $ctrl; $this->workspace = $ctrl->createWorkspace(); $membershipLoader = $this->workspace->getMembershipLoader(); $membership = null; if (null !== $membershipLoader) { try { $user = $this->tokenStorage->getToken()->getUser(); $membership = $membershipLoader->findMembership($event->getRequest()->get('slug'), $user); if (!$membership instanceof Membership) { throw new LogicException('The membership loader did not return \'Membership\' instance.'); } $project = $membershipLoader->findProjectForEntity($membership->getItem()); $user->addRole($membership->getRole()->getAuthRole()); User::installMembershipInformation($user, $membership); $this->projectSettings->setProject($project); $this->tokenStorage->setToken(new MembershipToken($this->tokenStorage->getToken(), $membership, $project)); } catch (ItemNotFoundException $exception) { throw new AccessDeniedHttpException($exception->getMessage(), $exception); } } else { $oldToken = $this->tokenStorage->getToken(); $this->tokenStorage->setToken(new UsernamePasswordToken($oldToken->getUser(), $oldToken->getCredentials(), $oldToken->getProviderKey(), $oldToken->getUser()->getRoles())); User::installMembershipInformation($this->tokenStorage->getToken()->getUser(), $membership = new Membership()); } $this->workspace->onWorkspaceLoaded($membership); } }