io = $event->getIO(); $this->composer = $event->getComposer(); $this->filesystem = new Filesystem(); $this->pluginConfig = Config::load($this->composer); $symlinks = $this->initializeSymlinks(); if ($this->filesystem->someFilesExist($symlinks)) { $this->filesystem->removeSymlinks($symlinks); } $this->filesystem->establishSymlinks($symlinks); return true; } /** * Initialize symlinks from configuration * @return array */ private function initializeSymlinks(): array { $webDir = $this->filesystem->normalizePath($this->pluginConfig->get('web-dir')); $backendDir = $webDir . self::$typo3Dir; // Ensure we delete a previously existing symlink to typo3 folder in web directory if ($this->filesystem->isSymlinkedDirectory($backendDir)) { $this->filesystem->removeDirectory($backendDir); } $this->filesystem->ensureDirectoryExists($backendDir); $localRepository = $this->composer->getRepositoryManager()->getLocalRepository(); $package = $localRepository->findPackage('typo3/cms', new EmptyConstraint()); $sourcesDir = $this->composer->getInstallationManager()->getInstallPath($package); return [ $sourcesDir . self::$typo3Dir . self::$systemExtensionsDir => $backendDir . self::$systemExtensionsDir, ]; } }