Esempio n. 1
0
 public function __construct($path, $name = '')
 {
     $gantry = \Gantry\Framework\Gantry::instance();
     $relpath = Folder::getRelativePath($path);
     // Initialize admin streams.
     /** @var Platform $patform */
     $patform = $gantry['platform'];
     $nucleus = $patform->getEnginePaths('nucleus')[''];
     $patform->set('streams.gantry-admin.prefixes', ['' => ['gantry-theme://admin', $relpath, $relpath . '/common', 'gantry-engine://admin'], 'assets/' => array_merge([$relpath, $relpath . '/common'], $nucleus, ['gantry-assets://'])]);
     $gantry['particles'] = function ($c) {
         return new Particles($c);
     };
     $gantry['styles'] = function ($c) {
         return new Styles($c);
     };
     $gantry['defaults'] = function ($c) {
         /** @var UniformResourceLocator $locator */
         $locator = $c['locator'];
         $cache = $locator->findResource('gantry-cache://theme/compiled/config', true, true);
         $paths = $locator->findResources('gantry-config://default');
         $files = (new ConfigFileFinder())->locateFiles($paths);
         $config = new CompiledConfig($cache, $files, function () use($c) {
             return $c['blueprints'];
         });
         return $config->load(true);
     };
     parent::__construct($path, $name);
     $this->boot();
 }
Esempio n. 2
0
 /**
  * @see AbstractTheme::init()
  */
 protected function init()
 {
     $gantry = static::gantry();
     // Add particles, styles and defaults into DI.
     $gantry['particles'] = function ($c) {
         return new Particles($c);
     };
     $gantry['styles'] = function ($c) {
         return new Styles($c);
     };
     $gantry['defaults'] = function ($c) {
         /** @var UniformResourceLocator $locator */
         $locator = $c['locator'];
         $cache = $locator->findResource('gantry-cache://theme/compiled/config', true, true);
         $paths = $locator->findResources('gantry-config://default');
         $files = (new ConfigFileFinder())->locateFiles($paths);
         $config = new CompiledConfig($cache, $files, function () use($c) {
             return $c['blueprints'];
         });
         return $config->load(true);
     };
     // Initialize admin streams.
     /** @var Platform $patform */
     $patform = $gantry['platform'];
     /** @var UniformResourceLocator $locator */
     $locator = $gantry['locator'];
     $nucleus = $patform->getEnginePaths('nucleus')[''];
     $relpath = Folder::getRelativePath($this->path);
     $patform->set('streams.gantry-admin.prefixes', ['' => ['gantry-theme://admin', $relpath, $relpath . '/common', 'gantry-engine://admin'], 'assets/' => array_merge([$relpath, $relpath . '/common'], $nucleus, ['gantry-assets://'])]);
     // Add admin paths.
     foreach ($patform->get('streams.gantry-admin.prefixes') as $prefix => $paths) {
         $locator->addPath('gantry-admin', $prefix, $paths);
     }
 }
Esempio n. 3
0
 protected function boot()
 {
     $gantry = \Gantry\Framework\Gantry::instance();
     $relpath = Folder::getRelativePath($this->path);
     /** @var Streams $streams */
     $streams = $gantry['streams'];
     $streams->add(['gantry-admin' => ['prefixes' => ['' => ['gantry-theme://admin', $relpath, $relpath . '/common'], 'assets/' => ['gantry-theme://admin', $relpath, $relpath . '/common']]]]);
     $streams->register();
 }
Esempio n. 4
0
 public function __construct($path, $name = '')
 {
     $gantry = \Gantry\Framework\Gantry::instance();
     $relpath = Folder::getRelativePath($path);
     // Initialize admin streams.
     $gantry['platform']->set('streams.gantry-admin.prefixes', ['' => [$relpath, $relpath . '/common'], 'assets/' => [$relpath, $relpath . '/common']]);
     parent::__construct($path, $name);
     // FIXME:
     $this->url = '/templates/' . $this->name;
     $this->boot();
 }
Esempio n. 5
0
 protected function attachData(&$node, $iteration)
 {
     foreach (['getFilename', 'getExtension', 'getPerms', 'getMTime', 'getBasename', 'getPathname', 'getSize', 'getType', 'isReadable', 'isWritable', 'isDir', 'isFile'] as $method) {
         $keyMethod = strtolower(preg_replace("/^(is|get)/", '', $method));
         $node->{$keyMethod} = $iteration->{$method}();
         if ($method == 'getPathname') {
             $node->{$keyMethod} = $this->isStream ? $iteration->getUrl() : Folder::getRelativePath($node->{$keyMethod});
         } else {
             if ($method == 'getExtension') {
                 $node->isImage = in_array($node->{$keyMethod}, ['jpg', 'jpeg', 'png', 'gif', 'ico', 'svg', 'bmp']);
             }
         }
     }
 }
Esempio n. 6
0
 public function getThemesPaths()
 {
     return ['' => Folder::getRelativePath(get_theme_root())];
 }
Esempio n. 7
0
 public function setBasePath($basePath)
 {
     $this->basePath = '/' . Folder::getRelativePath($basePath);
 }
Esempio n. 8
0
<?php

use Gantry\Component\Filesystem\Folder;
define('PRIME_ROOT', dirname($_SERVER['SCRIPT_FILENAME']));
define('PRIME_URI', dirname($_SERVER['SCRIPT_NAME']));
date_default_timezone_set('UTC');
// Bootstrap Gantry framework or fail gracefully (inside included file).
$gantry = (include_once PRIME_ROOT . '/includes/gantry.php');
// Get current theme and path.
$path = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : Folder::getRelativePath($_SERVER['REQUEST_URI'], PRIME_URI);
$path = explode('?', $path, 2);
$path = reset($path);
$extension = strrchr(basename($path), '.');
if ($extension) {
    $path = substr($path, 0, -strlen($extension));
}
$theme = strpos($path, 'admin') !== 0 ? Folder::shift($path) : null;
define('THEME', $theme);
define('PAGE_PATH', $path ?: ($theme ? 'home' : ''));
define('PAGE_EXTENSION', trim($extension, '.') ?: 'html');
// Bootstrap selected theme.
$include = PRIME_ROOT . "/themes/{$theme}/includes/gantry.php";
if (is_file($include)) {
    include $include;
}
// Enter to administration if we are in /ROOT/theme/admin. Also display installed themes if no theme has been selected.
if (!isset($gantry['theme']) || strpos($path, 'admin') === 0) {
    require_once PRIME_ROOT . '/admin/admin.php';
    exit;
}
// Boot the service.
 /**
  * Detects all plugins with a configuration file and returns them with last modification time.
  *
  * @param  string $folder   Location to look up from.
  * @param  string $pattern  Pattern to match the file. Pattern will also be removed from the key.
  * @param  int    $levels   Maximum number of recursive directories.
  * @return array
  * @internal
  */
 protected function detectAll($folder, $pattern, $levels)
 {
     $path = trim(Folder::getRelativePath($folder), '/');
     if (is_dir($folder)) {
         // Find all system and user configuration files.
         $options = ['levels' => $levels, 'compare' => 'Filename', 'pattern' => $pattern, 'filters' => ['pre-key' => $this->base, 'key' => $pattern, 'value' => function (\RecursiveDirectoryIterator $file) use($path) {
             return ["{$path}/{$file->getSubPathname()}" => $file->getMTime()];
         }], 'key' => 'SubPathname'];
         $list = Folder::all($folder, $options);
         ksort($list);
     } else {
         $list = [];
     }
     return $list;
 }
Esempio n. 10
0
 /**
  * @return string
  */
 public function getCachePath()
 {
     return Folder::getRelativePath(\Mage::getBaseDir('cache')) . '/gantry5';
 }
Esempio n. 11
0
 public function index()
 {
     /** @var UniformResourceLocator $locator */
     $locator = $this->container['locator'];
     $base = $locator->base;
     $bookmarks = [];
     $drives = [DS];
     $subfolder = false;
     $filter = false;
     if (isset($_POST)) {
         $drives = isset($_POST['root']) ? $_POST['root'] != 'false' ? $_POST['root'] : [DS] : [DS];
         $subfolder = isset($_POST['subfolder']) ? true : false;
         $filter = isset($_POST['filter']) ? $_POST['filter'] != 'false' ? $_POST['filter'] : false : false;
     }
     if (!is_array($drives)) {
         $drives = [$drives];
     }
     foreach ($drives as $drive) {
         // cleanup of the path so it's chrooted.
         $drive = str_replace('..', '', $drive);
         $stream = explode('://', $drive);
         $scheme = $stream[0];
         $isStream = $locator->schemeExists($scheme);
         $path = rtrim($base, DS) . DS . ltrim($scheme, DS);
         // It's a stream but the scheme doesn't exist. we skip it.
         if (!$isStream && (count($stream) == 2 || !file_exists($path))) {
             continue;
         }
         if ($isStream && !count($resources = $locator->findResources($drive, false))) {
             continue;
         }
         $key = $isStream ? $drive : preg_replace('#' . DS . '{2,}+#', DS, $drive);
         if (!array_key_exists($key, $bookmarks)) {
             $bookmarks[$key] = $isStream ? $resources : [rtrim(Folder::getRelativePath($path), DS) . DS];
         }
     }
     if (!count($bookmarks)) {
         throw new \RuntimeException((count($drives) > 1 ? 'directories' : 'directory') . ' "' . implode('", "', $drives) . '" not found', 404);
     }
     $files = new \ArrayObject();
     $folders = [];
     $active = [];
     $index = 0;
     // iterating the folder and collecting subfolders and files
     foreach ($bookmarks as $key => $bookmark) {
         $folders[$key] = [];
         if (!$index) {
             $active[] = $key;
         }
         foreach ($bookmark as $folder) {
             $folders[$key][$folder] = new \ArrayObject();
             if (!$index) {
                 $active[] = $folder;
             }
             /** @var \SplFileInfo $info */
             foreach (new \DirectoryIterator($base . DS . ltrim($folder, DS)) as $info) {
                 // no dot files nor files beginning with dot
                 if ($info->isDot() || substr($info->getFilename(), 0, 1) == '.') {
                     continue;
                 }
                 $file = new \stdClass();
                 foreach (['getFilename', 'getExtension', 'getPerms', 'getMTime', 'getBasename', 'getPathname', 'getSize', 'getType', 'isReadable', 'isWritable', 'isDir', 'isFile'] as $method) {
                     $keyMethod = strtolower(preg_replace("/^(is|get)/", '', $method));
                     $file->{$keyMethod} = $info->{$method}();
                     if ($method == 'getPathname') {
                         $file->{$keyMethod} = Folder::getRelativePath($file->{$keyMethod});
                     } else {
                         if ($method == 'getExtension') {
                             $file->isImage = in_array($file->{$keyMethod}, ['jpg', 'jpeg', 'png', 'gif', 'ico', 'svg', 'bmp']);
                         }
                     }
                 }
                 if ($file->dir) {
                     $folders[$key][$folder]->append($file);
                 } else {
                     if ($filter && !preg_match("/" . $filter . "/i", $file->filename)) {
                         continue;
                     }
                     if (!$index) {
                         $files->append($file);
                     }
                 }
             }
             $index++;
         }
     }
     $response = [];
     if (!$subfolder) {
         $response['html'] = $this->container['admin.theme']->render('@gantry-admin/ajax/filepicker.html.twig', ['active' => $active, 'base' => $base, 'bookmarks' => $bookmarks, 'folders' => $folders, 'files' => $files]);
     } else {
         $response['subfolder'] = !$folders[$key][$folder]->count() ? false : $this->container['admin.theme']->render('@gantry-admin/ajax/filepicker/subfolders.html.twig', ['folder' => $folders[$key][$folder]]);
         $response['files'] = !$files->count() ? false : $this->container['admin.theme']->render('@gantry-admin/ajax/filepicker/files.html.twig', ['files' => $files]);
     }
     return new JsonResponse($response);
 }