Spaces:
No application file
No application file
| namespace Mautic\CoreBundle\Helper; | |
| use Mautic\CoreBundle\Loader\ParameterLoader; | |
| class PathsHelper | |
| { | |
| /** | |
| * @var array<string, string> | |
| */ | |
| private array $paths; | |
| /** | |
| * @var string | |
| */ | |
| private $theme; | |
| private string $imagePath; | |
| private string $dashboardImportDir; | |
| private string $dashboardUserImportDir; | |
| private string $kernelCacheDir; | |
| private string $kernelLogsDir; | |
| private string $kernelRootDir; | |
| private string $temporaryDir; | |
| private ?\Mautic\UserBundle\Entity\User $user; | |
| private string $importLeadsDir; | |
| public function __construct(UserHelper $userHelper, CoreParametersHelper $coreParametersHelper, string $cacheDir, string $logsDir, string $rootDir) | |
| { | |
| $root = $rootDir.'/app'; // Do not rename the variable, used in paths_helper.php | |
| $projectRoot = $this->getVendorRootPath(); | |
| $this->user = $userHelper->getUser(); | |
| $this->theme = $coreParametersHelper->get('theme'); | |
| $this->imagePath = $this->removeTrailingSlash((string) $coreParametersHelper->get('image_path')); | |
| $this->dashboardImportDir = $this->removeTrailingSlash((string) $coreParametersHelper->get('dashboard_import_dir')); | |
| $this->importLeadsDir = $this->removeTrailingSlash((string) $coreParametersHelper->get('import_leads_dir')); | |
| $this->temporaryDir = $this->removeTrailingSlash((string) $coreParametersHelper->get('tmp_path')); | |
| $this->dashboardUserImportDir = $this->removeTrailingSlash((string) $coreParametersHelper->get('dashboard_import_user_dir')); | |
| $this->kernelCacheDir = $this->removeTrailingSlash($cacheDir); | |
| $this->kernelLogsDir = $this->removeTrailingSlash($logsDir); | |
| $this->kernelRootDir = $this->removeTrailingSlash($root); | |
| $paths = []; | |
| include $root.'/config/paths_helper.php'; | |
| $this->paths = $paths; | |
| } | |
| public function getLocalConfigurationFile(): string | |
| { | |
| return ParameterLoader::getLocalConfigFile($this->kernelRootDir); | |
| } | |
| public function getCachePath(): string | |
| { | |
| return $this->getSystemPath('cache', true); | |
| } | |
| public function getRootPath(): string | |
| { | |
| return $this->getSystemPath('root', true); | |
| } | |
| public function getTemporaryPath(): string | |
| { | |
| return $this->getSystemPath('tmp', true); | |
| } | |
| public function getLogsPath(): string | |
| { | |
| return $this->getSystemPath('logs', true); | |
| } | |
| public function getImagePath(): string | |
| { | |
| return $this->getSystemPath('images', true); | |
| } | |
| public function getTranslationsPath(): string | |
| { | |
| return $this->getSystemPath('translations', true); | |
| } | |
| public function getThemesPath(): string | |
| { | |
| return $this->getSystemPath('themes', true); | |
| } | |
| public function getAssetsPath(): string | |
| { | |
| return $this->getSystemPath('assets', true); | |
| } | |
| public function getMediaPath(): string | |
| { | |
| return $this->getSystemPath('media', true); | |
| } | |
| public function getCoreBundlesPath(): string | |
| { | |
| return $this->getSystemPath('bundles', true); | |
| } | |
| public function getPluginsPath(): string | |
| { | |
| return $this->getSystemPath('plugins', true); | |
| } | |
| public function getImportLeadsPath(): string | |
| { | |
| return $this->getSystemPath('import.leads.dir', true); | |
| } | |
| /** | |
| * Returns absolute path to the root directory where the "vendor" directory is located. | |
| */ | |
| public function getVendorRootPath(): string | |
| { | |
| $reflection = new \ReflectionClass(\Composer\Autoload\ClassLoader::class); | |
| return dirname($reflection->getFileName(), 3); | |
| } | |
| /** | |
| * Get the path to specified area. Returns relative by default with the exception of cache and log | |
| * which will be absolute regardless of $fullPath setting. | |
| * | |
| * @param string $name | |
| * @param bool $fullPath | |
| * | |
| * @return string | |
| * | |
| * @throws \InvalidArgumentException | |
| */ | |
| public function getSystemPath($name, $fullPath = false) | |
| { | |
| switch ($name) { | |
| case 'currentTheme': | |
| case 'current_theme': | |
| $path = $this->paths['themes'].'/'.$this->theme; | |
| break; | |
| case 'cache': | |
| return $this->kernelCacheDir; | |
| case 'logs': | |
| return $this->kernelLogsDir; | |
| case 'temporary': | |
| case 'tmp': | |
| if (!file_exists($this->temporaryDir)) { | |
| mkdir($this->temporaryDir, 0777, true); | |
| } | |
| return $this->temporaryDir; | |
| case 'images': | |
| $path = $this->imagePath; | |
| break; | |
| case 'dashboard.user': | |
| case 'dashboard.global': | |
| // these are absolute regardless as they are configurable | |
| $globalPath = $this->dashboardImportDir; | |
| if ('dashboard.global' == $name) { | |
| return $globalPath; | |
| } | |
| if (!$userPath = $this->dashboardUserImportDir) { | |
| $userPath = $globalPath; | |
| } | |
| $userPath .= '/'.$this->user->getId(); | |
| if (!file_exists($userPath)) { | |
| mkdir($userPath, 0777, true); | |
| } | |
| return $userPath; | |
| case 'import.leads.dir': | |
| return $this->importLeadsDir; | |
| default: | |
| if (isset($this->paths[$name])) { | |
| $path = $this->paths[$name]; | |
| } elseif (str_contains($name, '_root')) { | |
| // Assume system root if one is not set specifically | |
| $path = $this->paths['root']; | |
| } else { | |
| throw new \InvalidArgumentException("$name does not exist."); | |
| } | |
| } | |
| if (!$fullPath) { | |
| return $path; | |
| } | |
| $rootPath = (!empty($this->paths[$name.'_root'])) ? $this->paths[$name.'_root'] : $this->paths['root']; | |
| if (!str_contains($path, $rootPath)) { | |
| return $rootPath.'/'.$path; | |
| } | |
| return $path; | |
| } | |
| private function removeTrailingSlash(string $dir): string | |
| { | |
| if (str_ends_with($dir, '/')) { | |
| $dir = substr($dir, 0, -1); | |
| } | |
| return $dir; | |
| } | |
| } | |