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(); }
/** * @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); } }
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(); }
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(); }
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']); } } } }
public function getThemesPaths() { return ['' => Folder::getRelativePath(get_theme_root())]; }
public function setBasePath($basePath) { $this->basePath = '/' . Folder::getRelativePath($basePath); }
<?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; }
/** * @return string */ public function getCachePath() { return Folder::getRelativePath(\Mage::getBaseDir('cache')) . '/gantry5'; }
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); }