. */ namespace OCA\SideMenu\Controller; use OC; use OCA\SideMenu\Service\AppRepository; use OCA\SideMenu\Service\ConfigProxy; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\RedirectResponse; use OCP\IRequest; use OCP\IURLGenerator; use OCP\IUserSession; class AppController extends Controller { /** * @var ConfigProxy */ protected $config; /** * @var AppRepository */ protected $appRepository; public function __construct( string $appName, IRequest $request, AppRepository $appRepository, IURLGenerator $urlGenerator, ConfigProxy $config ) { parent::__construct($appName, $request); $this->appRepository = $appRepository; $this->urlGenerator = $urlGenerator; $this->config = $config; } /** * @NoAdminRequired * @NoCSRFRequired */ public function index(): RedirectResponse { $user = OC::$server[IUserSession::class]->getUser(); $topMenuApps = $this->config->getAppValueArray('top-menu-apps', '[]'); $hiddenApps = $this->config->getAppValueArray('big-menu-hidden-apps', '[]'); $isForced = $this->config->getAppValueBool('force', '0'); $userTopMenuApps = $this->config->getUserValueArray($user, 'top-menu-apps', '[]'); $apps = $this->appRepository->getOrderedApps($user); if (!$isForced && !empty($userTopMenuApps)) { $topMenuApps = $userTopMenuApps; } foreach ($apps as $app) { $inTopMenuApps = in_array($app['id'], $topMenuApps); $inHiddenApps = in_array($app['id'], $hiddenApps); if (!$inTopMenuApps || $inHiddenApps) { continue; } return $this->redirectToApp($app['id']); } return $this->redirectToApp('files'); } protected function redirectToApp($appId): RedirectResponse { $isIgnoreFrontController = true === OC::$server->getConfig()->getSystemValue('htaccess.IgnoreFrontController', false); $isFrontControllerActive = 'true' === getenv('front_controller_active'); if ($isIgnoreFrontController || $isFrontControllerActive) { $path = '/apps/%s/'; } else { $path = '/index.php/apps/%s/'; } $url = $this->urlGenerator->getAbsoluteURL(sprintf($path, $appId)); return new RedirectResponse($url); } }