userId = $userId; $this->initialStateService = $initialStateService; $this->l10n = $l10n; $this->navigationController = $navigationController; $this->accountService = $accountService; $this->cacheActorService = $cacheActorService; $this->streamService = $streamService; $this->configService = $configService; } /** * @throws UrlCloudException * @throws SocialAppConfigException */ private function renderPage(string $username): Response { if ($this->userId) { return $this->navigationController->navigate(''); } $data = [ 'application' => 'Social' ]; $status = Http::STATUS_OK; try { $actor = $this->cacheActorService->getFromAccount($username); $displayName = $actor->getName() !== '' ? $actor->getName() : $actor->getPreferredUsername(); $data['application'] = $displayName . ' - ' . $data['application']; } catch (CacheActorDoesNotExistException $e) { $status = Http::STATUS_NOT_FOUND; } catch (Exception $e) { return $this->fail($e); } $this->initialStateService->provideInitialState('social', 'serverData', [ 'public' => true, ]); $page = new PublicTemplateResponse(Application::APP_ID, 'main', $data); $page->setStatus($status); $page->setHeaderTitle($this->l10n->t('Social')); return $page; } /** * Return webpage content for human navigation. * Should return information about a Social account, based on username. * * @NoCSRFRequired * @PublicPage * * @throws UrlCloudException * @throws SocialAppConfigException */ public function actor(string $username): Response { return $this->renderPage($username); } /** * Return webpage content for human navigation. * Should return followers of a Social account, based on username. * * @NoCSRFRequired * @PublicPage * @throws UrlCloudException * @throws SocialAppConfigException */ public function followers(string $username): Response { return $this->renderPage($username); } /** * Return webpage content for human navigation. * Should return following of a Social account, based on username. * * @NoCSRFRequired * @PublicPage * @throws UrlCloudException * @throws SocialAppConfigException */ public function following(string $username): Response { return $this->renderPage($username); } /** * Display the navigation page of the Social app. * * @NoCSRFRequired * @PublicPage * @throws SocialAppConfigException * @throws StreamNotFoundException */ public function displayPost(string $username, int $token): TemplateResponse { try { $viewer = $this->accountService->getCurrentViewer(); $this->streamService->setViewer($viewer); } catch (AccountDoesNotExistException $e) { } // $postId = $this->configService->getSocialUrl() . '@' . $username . '/' . $token; $stream = $this->streamService->getStreamByNid($token); if (strtolower($stream->getActor()->getDisplayName()) !== strtolower($username)) { throw new StreamNotFoundException(); } $data = [ 'application' => 'Social' ]; $this->initialStateService->provideInitialState(Application::APP_ID, 'item', $stream); $this->initialStateService->provideInitialState(Application::APP_ID, 'serverData', [ 'public' => ($this->userId === null), ]); return new TemplateResponse(Application::APP_ID, 'main', $data); } }