vendor/pimcore/pimcore/lib/Tool/Admin.php line 55

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Commercial License (PCL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  13.  */
  14. namespace Pimcore\Tool;
  15. use Pimcore\Bundle\AdminBundle\Security\User\TokenStorageUserResolver;
  16. use Pimcore\Event\SystemEvents;
  17. use Pimcore\File;
  18. use Pimcore\Localization\LocaleServiceInterface;
  19. use Pimcore\Model\User;
  20. use Pimcore\Tool\Text\Csv;
  21. use Symfony\Component\EventDispatcher\GenericEvent;
  22. /**
  23.  * @internal
  24.  */
  25. class Admin
  26. {
  27.     /**
  28.      * Finds the translation file for a given language
  29.      *
  30.      * @static
  31.      *
  32.      * @param  string $language
  33.      *
  34.      * @return string
  35.      */
  36.     public static function getLanguageFile($language)
  37.     {
  38.         $baseResource \Pimcore::getContainer()->getParameter('pimcore.admin.translations.path');
  39.         $languageFile \Pimcore::getKernel()->locateResource($baseResource '/' $language '.json');
  40.         return $languageFile;
  41.     }
  42.     /**
  43.      * finds installed languages
  44.      *
  45.      * @static
  46.      *
  47.      * @return array
  48.      */
  49.     public static function getLanguages()
  50.     {
  51.         $baseResource \Pimcore::getContainer()->getParameter('pimcore.admin.translations.path');
  52.         $languageDir \Pimcore::getKernel()->locateResource($baseResource);
  53.         $adminLang \Pimcore::getContainer()->getParameter('pimcore_admin.admin_languages');
  54.         $appDefaultPath \Pimcore::getContainer()->getParameter('translator.default_path');
  55.         $languages = [];
  56.         $languageDirs = [$languageDir$appDefaultPath];
  57.         foreach ($languageDirs as $filesDir) {
  58.             if (is_dir($filesDir)) {
  59.                 $files scandir($filesDir);
  60.                 foreach ($files as $file) {
  61.                     if (is_file($filesDir '/' $file)) {
  62.                         $parts explode('.'$file);
  63.                         $languageCode $parts[0];
  64.                         if ($parts[0] === 'admin') {
  65.                             // this is for the app specific translations
  66.                             $languageCode $parts[1];
  67.                         }
  68.                         if (($adminLang != null && in_array($languageCodearray_values($adminLang))) || $adminLang == null) {
  69.                             if ($parts[1] === 'json' || $parts[0] === 'admin') {
  70.                                 if (\Pimcore::getContainer()->get(LocaleServiceInterface::class)->isLocale($languageCode)) {
  71.                                     $languages[] = $languageCode;
  72.                                 }
  73.                             }
  74.                         }
  75.                     }
  76.                 }
  77.             }
  78.         }
  79.         return array_unique($languages);
  80.     }
  81.     /**
  82.      * @static
  83.      *
  84.      * @param string $scriptContent
  85.      *
  86.      * @return mixed
  87.      */
  88.     public static function getMinimizedScriptPath($scriptContent)
  89.     {
  90.         $scriptPath 'minified_javascript_core_'.md5($scriptContent).'.js';
  91.         $storage Storage::get('admin');
  92.         $storage->write($scriptPath$scriptContent);
  93.         $params = [
  94.             'storageFile' => basename($scriptPath),
  95.             '_dc' => \Pimcore\Version::getRevision(),
  96.         ];
  97.         return $params;
  98.     }
  99.     /**
  100.      * @param string $file
  101.      *
  102.      * @return \stdClass
  103.      */
  104.     public static function determineCsvDialect($file)
  105.     {
  106.         // minimum 10 lines, to be sure take more
  107.         $sample '';
  108.         for ($i 0$i 10$i++) {
  109.             $sample .= implode(''array_slice(file($file), 011)); // grab 20 lines
  110.         }
  111.         try {
  112.             $sniffer = new Csv();
  113.             $dialect $sniffer->detect($sample);
  114.         } catch (\Exception $e) {
  115.             // use default settings
  116.             $dialect = new \stdClass();
  117.             $dialect->delimiter ';';
  118.             $dialect->quotechar '"';
  119.             $dialect->escapechar '\\';
  120.         }
  121.         // validity check
  122.         if (!in_array($dialect->delimiter, [';'','"\t"'|'':'])) {
  123.             $dialect->delimiter ';';
  124.         }
  125.         return $dialect;
  126.     }
  127.     /**
  128.      * @static
  129.      *
  130.      * @return string
  131.      */
  132.     public static function getMaintenanceModeFile()
  133.     {
  134.         return PIMCORE_CONFIGURATION_DIRECTORY '/maintenance.php';
  135.     }
  136.     public static function getMaintenanceModeScheduleLoginFile()
  137.     {
  138.         return PIMCORE_CONFIGURATION_DIRECTORY '/maintenance-schedule-login.php';
  139.     }
  140.     /**
  141.      * @param string|null $sessionId
  142.      *
  143.      * @throws \Exception
  144.      */
  145.     public static function activateMaintenanceMode($sessionId)
  146.     {
  147.         if (empty($sessionId)) {
  148.             $sessionId Session::getSessionId();
  149.         }
  150.         if (empty($sessionId)) {
  151.             throw new \Exception("It's not possible to activate the maintenance mode without a session-id");
  152.         }
  153.         File::putPhpFile(self::getMaintenanceModeFile(), to_php_data_file_format([
  154.             'sessionId' => $sessionId,
  155.         ]));
  156.         @chmod(self::getMaintenanceModeFile(), 0666); // so it can be removed also via FTP, ...
  157.         \Pimcore::getEventDispatcher()->dispatch(new GenericEvent(), SystemEvents::MAINTENANCE_MODE_ACTIVATE);
  158.     }
  159.     /**
  160.      * @static
  161.      */
  162.     public static function deactivateMaintenanceMode()
  163.     {
  164.         @unlink(self::getMaintenanceModeFile());
  165.         \Pimcore::getEventDispatcher()->dispatch(new GenericEvent(), SystemEvents::MAINTENANCE_MODE_DEACTIVATE);
  166.     }
  167.     /**
  168.      * @static
  169.      *
  170.      * @return bool
  171.      */
  172.     public static function isInMaintenanceMode()
  173.     {
  174.         $file self::getMaintenanceModeFile();
  175.         if (is_file($file)) {
  176.             $conf = include($file);
  177.             if (isset($conf['sessionId'])) {
  178.                 return true;
  179.             } else {
  180.                 @unlink($file);
  181.             }
  182.         }
  183.         return false;
  184.     }
  185.     public static function isMaintenanceModeScheduledForLogin(): bool
  186.     {
  187.         $file self::getMaintenanceModeScheduleLoginFile();
  188.         if (is_file($file)) {
  189.             $conf = include($file);
  190.             if (isset($conf['schedule']) && $conf['schedule']) {
  191.                 return true;
  192.             } else {
  193.                 @unlink($file);
  194.             }
  195.         }
  196.         return false;
  197.     }
  198.     public static function scheduleMaintenanceModeOnLogin()
  199.     {
  200.         File::putPhpFile(self::getMaintenanceModeScheduleLoginFile(), to_php_data_file_format([
  201.             'schedule' => true,
  202.         ]));
  203.         @chmod(self::getMaintenanceModeScheduleLoginFile(), 0666); // so it can be removed also via FTP, ...
  204.         \Pimcore::getEventDispatcher()->dispatch(new GenericEvent(), SystemEvents::MAINTENANCE_MODE_SCHEDULE_LOGIN);
  205.     }
  206.     public static function unscheduleMaintenanceModeOnLogin()
  207.     {
  208.         @unlink(self::getMaintenanceModeScheduleLoginFile());
  209.         \Pimcore::getEventDispatcher()->dispatch(new GenericEvent(), SystemEvents::MAINTENANCE_MODE_UNSCHEDULE_LOGIN);
  210.     }
  211.     /**
  212.      * @static
  213.      *
  214.      * @return \Pimcore\Model\User|null
  215.      */
  216.     public static function getCurrentUser()
  217.     {
  218.         return \Pimcore::getContainer()
  219.             ->get(TokenStorageUserResolver::class)
  220.             ->getUser();
  221.     }
  222.     /**
  223.      * @return true if in EXT JS5 mode
  224.      */
  225.     public static function isExtJS6()
  226.     {
  227.         return true;
  228.     }
  229.     /**
  230.      * @param User $user
  231.      * @param string|array $languages
  232.      * @param bool $returnLanguageArray
  233.      *
  234.      * @return string|array
  235.      */
  236.     public static function reorderWebsiteLanguages($user$languages$returnLanguageArray false)
  237.     {
  238.         if (!is_array($languages)) {
  239.             $languages explode(','$languages);
  240.         }
  241.         $contentLanguages $user->getContentLanguages();
  242.         if ($contentLanguages) {
  243.             $contentLanguages array_intersect($contentLanguages$languages);
  244.             $newLanguages array_diff($languages$contentLanguages);
  245.             $languages array_merge($contentLanguages$newLanguages);
  246.         }
  247.         if (in_array('default'$languages)) {
  248.             $languages array_diff($languages, ['default']);
  249.             array_unshift($languages'default');
  250.         }
  251.         if ($returnLanguageArray) {
  252.             return $languages;
  253.         }
  254.         return implode(','$languages);
  255.     }
  256. }