Spaces:
No application file
No application file
| namespace Mautic\CoreBundle\Helper\Language; | |
| use Symfony\Component\Filesystem\Filesystem; | |
| use Symfony\Component\Finder\Finder; | |
| class Installer | |
| { | |
| private ?string $sourceDirectory = null; | |
| private ?string $installDirectory = null; | |
| private Filesystem $filesystem; | |
| /** | |
| * @param string $translationsDirectory | |
| */ | |
| public function __construct( | |
| private $translationsDirectory | |
| ) { | |
| $this->filesystem = new Filesystem(); | |
| } | |
| /** | |
| * @param string $sourceDirectory | |
| * @param string $languageCode | |
| * | |
| * @return $this | |
| */ | |
| public function install($sourceDirectory, $languageCode) | |
| { | |
| $this->sourceDirectory = $sourceDirectory.'/'.$languageCode; | |
| $this->installDirectory = $this->translationsDirectory.'/'.$languageCode; | |
| $this->createLanguageDirectory(); | |
| $this->copyConfig(); | |
| $this->copyBundles(); | |
| return $this; | |
| } | |
| public function cleanup(): void | |
| { | |
| if (!$this->sourceDirectory) { | |
| return; | |
| } | |
| // Delete the temp directory | |
| $this->filesystem->remove($this->sourceDirectory); | |
| $this->sourceDirectory = null; | |
| $this->installDirectory = null; | |
| } | |
| private function createLanguageDirectory(): void | |
| { | |
| if (is_dir($this->installDirectory)) { | |
| return; | |
| } | |
| $this->filesystem->mkdir($this->installDirectory, 0755); | |
| } | |
| private function copyConfig(): void | |
| { | |
| $this->filesystem->copy($this->sourceDirectory.'/config.json', $this->installDirectory.'/config.json', true); | |
| } | |
| private function copyBundles(): void | |
| { | |
| $bundles = new Finder(); | |
| $bundles->directories()->name('*Bundle')->in($this->sourceDirectory); | |
| /** @var \SplFileInfo $bundle */ | |
| foreach ($bundles as $bundle) { | |
| $this->copyBundle($bundle); | |
| } | |
| } | |
| private function copyBundle(\SplFileInfo $bundle): void | |
| { | |
| $name = $bundle->getFilename(); | |
| $targetDirectory = $this->installDirectory.'/'.$name; | |
| $sourceDirectory = $this->sourceDirectory.'/'.$name; | |
| // Create bundle directory | |
| if (!is_dir($targetDirectory)) { | |
| $this->filesystem->mkdir($targetDirectory, 0755); | |
| } | |
| // Copy INI files | |
| $iniFinder = new Finder(); | |
| $iniFinder->files()->name('*.ini')->in($sourceDirectory); | |
| foreach ($iniFinder as $iniFile) { | |
| $this->filesystem->copy($iniFile->getPathname(), $targetDirectory.'/'.$iniFile->getFilename()); | |
| } | |
| } | |
| } | |