logoDirectory = $logoDirectory; } public function handleLogo(Organizations $organization, $logoFile): void { $extension = $logoFile->guessExtension(); $customFilename = $organization->getName() . '_' . date('dmyHis') . "." . $extension; try { $this->awsService->PutDocObj($_ENV['S3_PORTAL_BUCKET'], $logoFile, $customFilename, $extension, 'logo/'); $organization->setLogoUrl('logo/' . $customFilename); } catch (FileException $e) { throw new FileException('Failed to upload logo to S3: ' . $e->getMessage()); } } /** * Merge all apps with org apps and add a "hasAccess" flag. * * @param array $appsAll * @param array $apps * @return array */ public function appsAccess(array $appsAll, array $apps): array { // Build a quick lookup of app IDs the org has access to $orgAppIds = array_map(static fn(Apps $app) => $app->getId(), $apps); $result = []; foreach ($appsAll as $app) { $result[] = [ 'entity' => $app, // Keep the full entity for Twig 'hasAccess' => in_array($app->getId(), $orgAppIds, true), ]; } return $result; } }