From 54f959b46210ba3b08e42dddbf327e32a872c818 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Thu, 4 Feb 2016 14:12:27 +0100 Subject: [PATCH 01/11] Reinitialize Grav on every test Don't need to worry about changing configuration or pages or anything in a test, every test method will start with a clean slate --- system/src/Grav/Common/Assets.php | 4 +- system/src/Grav/Common/Grav.php | 13 +++- system/src/Grav/Common/GravTrait.php | 20 +---- .../Grav/Common/Page/Medium/ImageMedium.php | 12 +-- system/src/Grav/Common/Page/Medium/Medium.php | 2 +- tests/_bootstrap.php | 74 +++++++++++-------- tests/unit/Grav/Common/AssetsTest.php | 3 +- tests/unit/Grav/Common/BrowserTest.php | 3 +- tests/unit/Grav/Common/MarkdownLinksTest.php | 16 ++-- tests/unit/Grav/Common/Page/PagesTest.php | 17 ++--- tests/unit/Grav/Common/UriTest.php | 3 +- tests/unit/Grav/Common/UtilsTest.php | 3 +- 12 files changed, 83 insertions(+), 87 deletions(-) diff --git a/system/src/Grav/Common/Assets.php b/system/src/Grav/Common/Assets.php index d482a4710..60e99eb9a 100644 --- a/system/src/Grav/Common/Assets.php +++ b/system/src/Grav/Common/Assets.php @@ -184,7 +184,7 @@ class Assets $asset_config = (array)$config->get('system.assets'); /** @var UniformResourceLocator $locator */ - $locator = self::$grav['locator']; + $locator = self::getGrav()['locator']; $this->assets_dir = $locator->findResource('asset://') . DS; $this->assets_url = $locator->findResource('asset://', false); @@ -901,7 +901,7 @@ class Assets // Check if $directory is a stream. if (strpos($directory, '://')) { - $directory = self::$grav['locator']->findResource($directory, null); + $directory = self::getGrav()['locator']->findResource($directory, null); } // Get files diff --git a/system/src/Grav/Common/Grav.php b/system/src/Grav/Common/Grav.php index 669d91cee..10551d263 100644 --- a/system/src/Grav/Common/Grav.php +++ b/system/src/Grav/Common/Grav.php @@ -37,6 +37,16 @@ class Grav extends Container */ protected static $instance; + /** + * Reset the Grav instance. + */ + public static function resetInstance() + { + if (self::$instance) { + self::$instance = null; + } + } + /** * Return the Grav instance. Create it if it's not already instanced * @@ -48,9 +58,6 @@ class Grav extends Container { if (!self::$instance) { self::$instance = static::load($values); - - GravTrait::setGrav(self::$instance); - } elseif ($values) { $instance = self::$instance; foreach ($values as $key => $value) { diff --git a/system/src/Grav/Common/GravTrait.php b/system/src/Grav/Common/GravTrait.php index a8f86826c..89883c595 100644 --- a/system/src/Grav/Common/GravTrait.php +++ b/system/src/Grav/Common/GravTrait.php @@ -8,28 +8,12 @@ namespace Grav\Common; */ trait GravTrait { - /** - * @var Grav - */ - protected static $grav; - /** * @return Grav */ public static function getGrav() { - if (!self::$grav) { - self::$grav = Grav::instance(); - } - - return self::$grav; - } - - /** - * @param Grav $grav - */ - public static function setGrav(Grav $grav) - { - self::$grav = $grav; + return Grav::instance(); } } + diff --git a/system/src/Grav/Common/Page/Medium/ImageMedium.php b/system/src/Grav/Common/Page/Medium/ImageMedium.php index 476690812..e069084f8 100644 --- a/system/src/Grav/Common/Page/Medium/ImageMedium.php +++ b/system/src/Grav/Common/Page/Medium/ImageMedium.php @@ -77,7 +77,7 @@ class ImageMedium extends Medium { parent::__construct($items, $blueprint); - $config = self::$grav['config']; + $config = self::getGrav()['config']; $image_info = getimagesize($this->get('filepath')); $this->def('width', $image_info[0]); @@ -137,8 +137,8 @@ class ImageMedium extends Medium */ public function url($reset = true) { - $image_path = self::$grav['locator']->findResource('cache://images', true); - $image_dir = self::$grav['locator']->findResource('cache://images', false); + $image_path = self::getGrav()['locator']->findResource('cache://images', true); + $image_dir = self::getGrav()['locator']->findResource('cache://images', false); $saved_image_path = $this->saveImage(); $output = preg_replace('|^' . preg_quote(GRAV_ROOT) . '|', '', $saved_image_path); @@ -151,7 +151,7 @@ class ImageMedium extends Medium $this->reset(); } - return self::$grav['base_url'] . $output . $this->querystring() . $this->urlHash(); + return self::getGrav()['base_url'] . $output . $this->querystring() . $this->urlHash(); } /** @@ -470,7 +470,7 @@ class ImageMedium extends Medium */ protected function image() { - $locator = self::$grav['locator']; + $locator = self::getGrav()['locator']; $file = $this->get('filepath'); $cacheDir = $locator->findResource('cache://images', true); @@ -506,7 +506,7 @@ class ImageMedium extends Medium $ratio = 1; } - $locator = self::$grav['locator']; + $locator = self::getGrav()['locator']; $overlay = $locator->findResource("system://assets/responsive-overlays/{$ratio}x.png") ?: $locator->findResource('system://assets/responsive-overlays/unknown.png'); $this->image->merge(ImageFile::open($overlay)); } diff --git a/system/src/Grav/Common/Page/Medium/Medium.php b/system/src/Grav/Common/Page/Medium/Medium.php index 33e734e20..00ac9f46e 100644 --- a/system/src/Grav/Common/Page/Medium/Medium.php +++ b/system/src/Grav/Common/Page/Medium/Medium.php @@ -143,7 +143,7 @@ class Medium extends Data implements RenderableInterface $this->reset(); } - return self::$grav['base_url'] . $output . $this->querystring() . $this->urlHash(); + return self::getGrav()['base_url'] . $output . $this->querystring() . $this->urlHash(); } /** diff --git a/tests/_bootstrap.php b/tests/_bootstrap.php index 9aa3f78d2..52b1bd5ae 100644 --- a/tests/_bootstrap.php +++ b/tests/_bootstrap.php @@ -5,51 +5,61 @@ namespace Grav; use Codeception\Util\Fixtures; use Faker\Factory; -use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; +use Grav\Common\Grav; ini_set('error_log', __DIR__ . '/error.log'); -// Ensure vendor libraries exist -$autoload = __DIR__ . '/../vendor/autoload.php'; +$grav = function() { + // Ensure vendor libraries exist + $autoload = __DIR__ . '/../vendor/autoload.php'; -if (!is_file($autoload)) { - throw new \RuntimeException("Please run: bin/grav install"); -} + if (!is_file($autoload)) { + throw new \RuntimeException("Please run: bin/grav install"); + } -use Grav\Common\Grav; + // Register the auto-loader. + $loader = require_once $autoload; -// Register the auto-loader. -$loader = require_once $autoload; + if (version_compare($ver = PHP_VERSION, $req = GRAV_PHP_MIN, '<')) { + throw new \RuntimeException(sprintf('You are running PHP %s, but Grav needs at least PHP %s to run.', $ver, $req)); + } -if (version_compare($ver = PHP_VERSION, $req = GRAV_PHP_MIN, '<')) { - throw new \RuntimeException(sprintf('You are running PHP %s, but Grav needs at least PHP %s to run.', $ver, $req)); -} + // Set timezone to default, falls back to system if php.ini not set + date_default_timezone_set(@date_default_timezone_get()); -// Set timezone to default, falls back to system if php.ini not set -date_default_timezone_set(@date_default_timezone_get()); + // Set internal encoding if mbstring loaded + if (!extension_loaded('mbstring')) { + throw new \RuntimeException("'mbstring' extension is not loaded. This is required for Grav to run correctly"); + } + mb_internal_encoding('UTF-8'); -// Set internal encoding if mbstring loaded -if (!extension_loaded('mbstring')) { - throw new \RuntimeException("'mbstring' extension is not loaded. This is required for Grav to run correctly"); -} -mb_internal_encoding('UTF-8'); + Grav::resetInstance(); -// Get the Grav instance -$grav = Grav::instance(['loader' => $loader]); + // Get the Grav instance + $grav = Grav::instance( + array( + 'loader' => $loader + ) + ); -$grav['uri']->init(); -$grav['debugger']->init(); -$grav['assets']->init(); + $grav['uri']->init(); + $grav['debugger']->init(); + $grav['assets']->init(); + $grav['config']->set('system.cache.enabled', false); -$grav['config']->set('system.cache.enabled', false); + /** @var UniformResourceLocator $locator */ + $locator = $grav['locator']; + $locator->addPath('tests', '', 'tests', false); -/** @var UniformResourceLocator $locator */ -$locator = $grav['locator']; -$locator->addPath('tests', '', 'tests', false); + // Set default $_SERVER value used for nonces + empty( $_SERVER['HTTP_CLIENT_IP'] ) && $_SERVER['HTTP_CLIENT_IP'] = '127.0.0.1'; -// Set default $_SERVER value used for nonces -empty( $_SERVER['HTTP_CLIENT_IP'] ) && $_SERVER['HTTP_CLIENT_IP'] = '127.0.0.1'; + return $grav; +}; + + +Fixtures::add('grav', $grav); $fake = Factory::create(); -Fixtures::add('grav', $grav); -Fixtures::add('fake', $fake); \ No newline at end of file +Fixtures::add('fake', $fake); + diff --git a/tests/unit/Grav/Common/AssetsTest.php b/tests/unit/Grav/Common/AssetsTest.php index 65ead94d8..55a018646 100644 --- a/tests/unit/Grav/Common/AssetsTest.php +++ b/tests/unit/Grav/Common/AssetsTest.php @@ -17,7 +17,8 @@ class AssetsTest extends \Codeception\TestCase\Test protected function _before() { - $this->grav = Fixtures::get('grav'); + $grav = Fixtures::get('grav'); + $this->grav = $grav(); $this->assets = $this->grav['assets']; } diff --git a/tests/unit/Grav/Common/BrowserTest.php b/tests/unit/Grav/Common/BrowserTest.php index e5aca9923..6e637384e 100644 --- a/tests/unit/Grav/Common/BrowserTest.php +++ b/tests/unit/Grav/Common/BrowserTest.php @@ -13,7 +13,8 @@ class BrowserTest extends \Codeception\TestCase\Test protected function _before() { - $this->grav = Fixtures::get('grav'); + $grav = Fixtures::get('grav'); + $this->grav = $grav(); } protected function _after() diff --git a/tests/unit/Grav/Common/MarkdownLinksTest.php b/tests/unit/Grav/Common/MarkdownLinksTest.php index f28462f23..225c49be0 100644 --- a/tests/unit/Grav/Common/MarkdownLinksTest.php +++ b/tests/unit/Grav/Common/MarkdownLinksTest.php @@ -34,11 +34,10 @@ class MarkdownTest extends \Codeception\TestCase\Test protected $old_home; - static $run = false; - protected function _before() { - $this->grav = Fixtures::get('grav'); + $grav = Fixtures::get('grav'); + $this->grav = $grav(); $this->pages = $this->grav['pages']; $this->config = $this->grav['config']; $this->uri = $this->grav['uri']; @@ -51,13 +50,10 @@ class MarkdownTest extends \Codeception\TestCase\Test unset($this->grav['language']); $this->grav['language'] = new Language($this->grav); - if (!self::$run) { - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - $locator->addPath('page', '', 'tests/fake/nested-site/user/pages', false); - $this->pages->init(); - self::$run = true; - } + /** @var UniformResourceLocator $locator */ + $locator = $this->grav['locator']; + $locator->addPath('page', '', 'tests/fake/nested-site/user/pages', false); + $this->pages->init(); $defaults = [ 'extra' => false, diff --git a/tests/unit/Grav/Common/Page/PagesTest.php b/tests/unit/Grav/Common/Page/PagesTest.php index 918af93eb..0f4fc6dd1 100644 --- a/tests/unit/Grav/Common/Page/PagesTest.php +++ b/tests/unit/Grav/Common/Page/PagesTest.php @@ -21,23 +21,18 @@ class PagesTest extends \Codeception\TestCase\Test /** @var Page $root_page */ protected $root_page; - static $run = false; - protected function _before() { - $this->grav = Fixtures::get('grav'); + $grav = Fixtures::get('grav'); + $this->grav = $grav(); $this->pages = $this->grav['pages']; $this->grav['config']->set('system.home.alias', '/home'); - if (!self::$run) { - /** @var UniformResourceLocator $locator */ - $locator = $this->grav['locator']; - - $locator->addPath('page', '', 'tests/fake/simple-site/user/pages', false); - $this->pages->init(); - self::$run = true; - } + /** @var UniformResourceLocator $locator */ + $locator = $this->grav['locator']; + $locator->addPath('page', '', 'tests/fake/simple-site/user/pages', false); + $this->pages->init(); } public function testBase() diff --git a/tests/unit/Grav/Common/UriTest.php b/tests/unit/Grav/Common/UriTest.php index 472766367..a982f6823 100644 --- a/tests/unit/Grav/Common/UriTest.php +++ b/tests/unit/Grav/Common/UriTest.php @@ -18,7 +18,8 @@ class UriTest extends \Codeception\TestCase\Test protected function _before() { - $this->grav = Fixtures::get('grav'); + $grav = Fixtures::get('grav'); + $this->grav = $grav(); $this->uri = $this->grav['uri']; } diff --git a/tests/unit/Grav/Common/UtilsTest.php b/tests/unit/Grav/Common/UtilsTest.php index 96761282e..de84ca400 100644 --- a/tests/unit/Grav/Common/UtilsTest.php +++ b/tests/unit/Grav/Common/UtilsTest.php @@ -14,7 +14,8 @@ class UtilsTest extends \Codeception\TestCase\Test protected function _before() { - $this->grav = Fixtures::get('grav'); + $grav = Fixtures::get('grav'); + $this->grav = $grav(); } protected function _after() From 79a3077fdba8240e246e11b4db50ccab19a52bb9 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Thu, 4 Feb 2016 14:15:30 +0100 Subject: [PATCH 02/11] Cleanup --- tests/_bootstrap.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/_bootstrap.php b/tests/_bootstrap.php index 52b1bd5ae..5f25b0748 100644 --- a/tests/_bootstrap.php +++ b/tests/_bootstrap.php @@ -6,6 +6,7 @@ namespace Grav; use Codeception\Util\Fixtures; use Faker\Factory; use Grav\Common\Grav; +use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; ini_set('error_log', __DIR__ . '/error.log'); @@ -36,11 +37,7 @@ $grav = function() { Grav::resetInstance(); // Get the Grav instance - $grav = Grav::instance( - array( - 'loader' => $loader - ) - ); + $grav = Grav::instance(['loader' => $loader]); $grav['uri']->init(); $grav['debugger']->init(); From 03f48d56a4025c3d7ec4d5578eed233e4649d6f0 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Thu, 4 Feb 2016 18:01:00 +0100 Subject: [PATCH 03/11] Use Grav::instance() instead of using GravTrait's getGrav() method --- system/src/Grav/Common/Assets.php | 21 ++-- system/src/Grav/Common/Backup/ZipBackup.php | 8 +- system/src/Grav/Common/Cache.php | 5 +- system/src/Grav/Common/Data/Blueprint.php | 10 +- system/src/Grav/Common/Data/Blueprints.php | 8 +- system/src/Grav/Common/Data/Validation.php | 8 +- .../RecursiveFolderFilterIterator.php | 6 +- .../Grav/Common/GPM/AbstractCollection.php | 8 +- .../GPM/Common/AbstractPackageCollection.php | 8 +- system/src/Grav/Common/GPM/Local/Plugins.php | 4 +- system/src/Grav/Common/GPM/Local/Themes.php | 4 +- .../GPM/Remote/AbstractPackageCollection.php | 14 ++- system/src/Grav/Common/GPM/Remote/Grav.php | 3 +- system/src/Grav/Common/GPM/Response.php | 12 +- system/src/Grav/Common/Inflector.php | 6 +- .../Common/Markdown/ParsedownGravTrait.php | 12 +- system/src/Grav/Common/Page/Media.php | 4 +- .../src/Grav/Common/Page/Medium/ImageFile.php | 11 +- .../Grav/Common/Page/Medium/ImageMedium.php | 19 +-- system/src/Grav/Common/Page/Medium/Link.php | 7 +- system/src/Grav/Common/Page/Medium/Medium.php | 9 +- .../Grav/Common/Page/Medium/MediumFactory.php | 8 +- system/src/Grav/Common/Page/Page.php | 109 +++++++++--------- system/src/Grav/Common/Plugins.php | 17 ++- .../Grav/Common/Twig/WriteCacheFileTrait.php | 6 +- system/src/Grav/Common/User/Group.php | 24 ++-- system/src/Grav/Common/User/User.php | 12 +- system/src/Grav/Common/Utils.php | 25 ++-- system/src/Grav/Console/Cli/BackupCommand.php | 5 +- system/src/Grav/Console/ConsoleTrait.php | 8 +- .../src/Grav/Console/Gpm/UninstallCommand.php | 5 +- 31 files changed, 200 insertions(+), 206 deletions(-) diff --git a/system/src/Grav/Common/Assets.php b/system/src/Grav/Common/Assets.php index 60e99eb9a..102a49e6d 100644 --- a/system/src/Grav/Common/Assets.php +++ b/system/src/Grav/Common/Assets.php @@ -5,6 +5,7 @@ use Closure; use Exception; use FilesystemIterator; use Grav\Common\Config\Config; +use Grav\Common\Grav; use RecursiveDirectoryIterator; use RecursiveIteratorIterator; use RegexIterator; @@ -23,8 +24,6 @@ define('JS_ASSET', false); */ class Assets { - use GravTrait; - /** @const Regex to match CSS and JavaScript files */ const DEFAULT_REGEX = '/.\.(css|js)$/i'; @@ -167,7 +166,7 @@ class Assets // Set timestamp if (isset($config['enable_asset_timestamp']) && $config['enable_asset_timestamp'] === true) { - $this->timestamp = '?' . self::getGrav()['cache']->getKey(); + $this->timestamp = '?' . Grav::instance()['cache']->getKey(); } return $this; @@ -179,12 +178,12 @@ class Assets public function init() { /** @var Config $config */ - $config = self::getGrav()['config']; - $base_url = self::getGrav()['base_url']; + $config = Grav::instance()['config']; + $base_url = Grav::instance()['base_url']; $asset_config = (array)$config->get('system.assets'); /** @var UniformResourceLocator $locator */ - $locator = self::getGrav()['locator']; + $locator = Grav::instance()['locator']; $this->assets_dir = $locator->findResource('asset://') . DS; $this->assets_url = $locator->findResource('asset://', false); @@ -499,7 +498,7 @@ class Assets } // Sort array by priorities (larger priority first) - if (self::getGrav()) { + if (Grav::instance()) { uasort($this->css, function ($a, $b) { if ($a['priority'] == $b['priority']) { return $b['order'] - $a['order']; @@ -640,7 +639,7 @@ class Assets protected function pipelineCss($group = 'head') { /** @var Cache $cache */ - $cache = self::getGrav()['cache']; + $cache = Grav::instance()['cache']; $key = '?' . $cache->getKey(); // temporary list of assets to pipeline @@ -711,7 +710,7 @@ class Assets protected function pipelineJs($group = 'head') { /** @var Cache $cache */ - $cache = self::getGrav()['cache']; + $cache = Grav::instance()['cache']; $key = '?' . $cache->getKey(); // temporary list of assets to pipeline @@ -901,7 +900,7 @@ class Assets // Check if $directory is a stream. if (strpos($directory, '://')) { - $directory = self::getGrav()['locator']->findResource($directory, null); + $directory = Grav::instance()['locator']->findResource($directory, null); } // Get files @@ -963,7 +962,7 @@ class Assets protected function buildLocalLink($asset) { try { - $asset = self::getGrav()['locator']->findResource($asset, false); + $asset = Grav::instance()['locator']->findResource($asset, false); } catch (\Exception $e) { } diff --git a/system/src/Grav/Common/Backup/ZipBackup.php b/system/src/Grav/Common/Backup/ZipBackup.php index a3dedc886..94cfc4167 100644 --- a/system/src/Grav/Common/Backup/ZipBackup.php +++ b/system/src/Grav/Common/Backup/ZipBackup.php @@ -1,7 +1,7 @@ findResource('backup://', true); + $destination = Grav::instance()['locator']->findResource('backup://', true); if (!$destination) throw new \RuntimeException('The backup folder is missing.'); @@ -48,7 +46,7 @@ class ZipBackup Folder::mkdir($destination); } - $name = self::getGrav()['config']->get('site.title', basename(GRAV_ROOT)); + $name = Grav::instance()['config']->get('site.title', basename(GRAV_ROOT)); $inflector = new Inflector(); diff --git a/system/src/Grav/Common/Cache.php b/system/src/Grav/Common/Cache.php index e938c32b9..6bb6979d9 100644 --- a/system/src/Grav/Common/Cache.php +++ b/system/src/Grav/Common/Cache.php @@ -4,6 +4,7 @@ namespace Grav\Common; use \Doctrine\Common\Cache as DoctrineCache; use Grav\Common\Config\Config; use Grav\Common\Filesystem\Folder; +use Grav\Common\Grav; /** * The GravCache object is used throughout Grav to store and retrieve cached data. @@ -21,8 +22,6 @@ use Grav\Common\Filesystem\Folder; */ class Cache extends Getters { - use GravTrait; - /** * @var string Cache key. */ @@ -245,7 +244,7 @@ class Cache extends Getters */ public static function clearCache($remove = 'standard') { - $locator = self::getGrav()['locator']; + $locator = Grav::instance()['locator']; $output = []; $user_config = USER_DIR . 'config/system.yaml'; diff --git a/system/src/Grav/Common/Data/Blueprint.php b/system/src/Grav/Common/Data/Blueprint.php index 68de5de81..099dde4d9 100644 --- a/system/src/Grav/Common/Data/Blueprint.php +++ b/system/src/Grav/Common/Data/Blueprint.php @@ -1,7 +1,7 @@ validateArray($data, $this->nested); } catch (\RuntimeException $e) { - $language = self::getGrav()['language']; + $language = Grav::instance()['language']; $message = sprintf($language->translate('FORM.VALIDATION_FAIL', null, true) . ' %s', $e->getMessage()); throw new \RuntimeException($message); } @@ -404,7 +404,7 @@ class Blueprint implements \ArrayAccess, ExportInterface elseif (substr($name, 0, 8) == '@config-') { $property = substr($name, 8); $default = isset($field[$property]) ? $field[$property] : null; - $config = self::getGrav()['config']->get($value, $default); + $config = Grav::instance()['config']->get($value, $default); if (!is_null($config)) { $field[$property] = $config; @@ -467,7 +467,7 @@ class Blueprint implements \ArrayAccess, ExportInterface && $field['validate']['required'] === true && empty($data[$name])) { $value = isset($field['label']) ? $field['label'] : $field['name']; - $language = self::getGrav()['language']; + $language = Grav::instance()['language']; $message = sprintf($language->translate('FORM.MISSING_REQUIRED_FIELD', null, true) . ' %s', $value); throw new \RuntimeException($message); } diff --git a/system/src/Grav/Common/Data/Blueprints.php b/system/src/Grav/Common/Data/Blueprints.php index 4c144a37a..e9f692814 100644 --- a/system/src/Grav/Common/Data/Blueprints.php +++ b/system/src/Grav/Common/Data/Blueprints.php @@ -2,7 +2,7 @@ namespace Grav\Common\Data; use Grav\Common\File\CompiledYamlFile; -use Grav\Common\GravTrait; +use Grav\Common\Grav; use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; /** @@ -13,8 +13,6 @@ use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; */ class Blueprints { - use GravTrait; - protected $search; protected $types; protected $instances = array(); @@ -43,7 +41,7 @@ class Blueprints // Check if search is a stream and resolve the path. if (strpos($filename, '://')) { - $grav = static::getGrav(); + $grav = Grav::instance(); /** @var UniformResourceLocator $locator */ $locator = $grav['locator']; $parents = $locator->findResources($filename); @@ -122,7 +120,7 @@ class Blueprints // Check if search is a stream. if (strpos($this->search, '://')) { // Stream: use UniformResourceIterator. - $grav = static::getGrav(); + $grav = Grav::instance(); /** @var UniformResourceLocator $locator */ $locator = $grav['locator']; $iterator = $locator->getIterator($this->search, null); diff --git a/system/src/Grav/Common/Data/Validation.php b/system/src/Grav/Common/Data/Validation.php index f8e0c3119..2116f13b2 100644 --- a/system/src/Grav/Common/Data/Validation.php +++ b/system/src/Grav/Common/Data/Validation.php @@ -1,7 +1,7 @@ get('system.pages.dateformat.default'); + $format = Grav::instance()['config']->get('system.pages.dateformat.default'); if ($format) { $converted = new \DateTime($value); return $converted->format($format); diff --git a/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php b/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php index a84a51906..d765ae0b1 100644 --- a/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php +++ b/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php @@ -1,7 +1,7 @@ get('system.pages.ignore_folders'); + $this::$folder_ignores = Grav::instance()['config']->get('system.pages.ignore_folders'); } } diff --git a/system/src/Grav/Common/GPM/AbstractCollection.php b/system/src/Grav/Common/GPM/AbstractCollection.php index 7c1974d22..1b0ac3e7d 100644 --- a/system/src/Grav/Common/GPM/AbstractCollection.php +++ b/system/src/Grav/Common/GPM/AbstractCollection.php @@ -1,13 +1,11 @@ all()); + parent::__construct(Grav::instance()['plugins']->all()); } } diff --git a/system/src/Grav/Common/GPM/Local/Themes.php b/system/src/Grav/Common/GPM/Local/Themes.php index 64d23b903..9edbbe8e6 100644 --- a/system/src/Grav/Common/GPM/Local/Themes.php +++ b/system/src/Grav/Common/GPM/Local/Themes.php @@ -1,6 +1,8 @@ all()); + parent::__construct(Grav::instance()['themes']->all()); } } diff --git a/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php b/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php index 0f113b4f1..96296599e 100644 --- a/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php +++ b/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php @@ -1,10 +1,15 @@ findResource('cache://gpm', true, true); + $cache_dir = Grav::instance()['locator']->findResource('cache://gpm', true, true); $this->cache = new FilesystemCache($cache_dir); $this->repository = $repository; diff --git a/system/src/Grav/Common/GPM/Remote/Grav.php b/system/src/Grav/Common/GPM/Remote/Grav.php index cbc3179fc..55c9861ab 100644 --- a/system/src/Grav/Common/GPM/Remote/Grav.php +++ b/system/src/Grav/Common/GPM/Remote/Grav.php @@ -1,6 +1,7 @@ findResource('cache://gpm', true, true); + $cache_dir = Grav::instance()['locator']->findResource('cache://gpm', true, true); $this->cache = new FilesystemCache($cache_dir); $this->raw = $this->cache->fetch(md5($this->repository)); diff --git a/system/src/Grav/Common/GPM/Response.php b/system/src/Grav/Common/GPM/Response.php index 578b5c3fc..d92ef0a55 100644 --- a/system/src/Grav/Common/GPM/Response.php +++ b/system/src/Grav/Common/GPM/Response.php @@ -2,12 +2,14 @@ namespace Grav\Common\GPM; use Grav\Common\Utils; -use Grav\Common\GravTrait; +use Grav\Common\Grav; +/** + * Class Response + * @package Grav\Common\GPM + */ class Response { - use GravTrait; - /** * The callback for the progress * @@ -196,7 +198,7 @@ class Response $callback = $args[2]; // if proxy set add that - $proxy_url = self::getGrav()['config']->get('system.proxy_url'); + $proxy_url = Grav::instance()['config']->get('system.proxy_url'); if ($proxy_url) { $options['fopen']['proxy'] = $proxy_url; } @@ -256,7 +258,7 @@ class Response } // if proxy set add that - $proxy_url = self::getGrav()['config']->get('system.proxy_url'); + $proxy_url = Grav::instance()['config']->get('system.proxy_url'); if ($proxy_url) { $options['curl'][CURLOPT_PROXY] = $proxy_url; } diff --git a/system/src/Grav/Common/Inflector.php b/system/src/Grav/Common/Inflector.php index cea2f69d5..0090942a4 100644 --- a/system/src/Grav/Common/Inflector.php +++ b/system/src/Grav/Common/Inflector.php @@ -1,6 +1,8 @@ plural)) { - $language = self::getGrav()['language']; + $language = Grav::instance()['language']; $this->plural = $language->translate('INFLECTOR_PLURALS', null, true); $this->singular = $language->translate('INFLECTOR_SINGULAR', null, true); $this->uncountable = $language->translate('INFLECTOR_UNCOUNTABLE', null, true); diff --git a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php index 2c061046e..3ba9aacda 100644 --- a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php +++ b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php @@ -1,7 +1,7 @@ page = $page; $this->pages = $grav['pages']; $this->uri = $grav['uri']; $this->BlockTypes['{'] [] = "TwigTag"; - $this->pages_dir = self::getGrav()['locator']->findResource('page://'); + $this->pages_dir = Grav::instance()['locator']->findResource('page://'); $this->special_chars = ['>' => 'gt', '<' => 'lt', '"' => 'quot']; if ($defaults === null) { - $defaults = self::getGrav()['config']->get('system.pages.markdown'); + $defaults = Grav::instance()['config']->get('system.pages.markdown'); } $this->setBreaksEnabled($defaults['auto_line_breaks']); @@ -217,7 +215,7 @@ trait ParsedownGravTrait $media = $this->page->media(); } else { // see if this is an external page to this one - $base_url = rtrim(self::getGrav()['base_url_relative'] . self::getGrav()['pages']->base(), '/'); + $base_url = rtrim(Grav::instance()['base_url_relative'] . Grav::instance()['pages']->base(), '/'); $page_route = '/' . ltrim(str_replace($base_url, '', $path_parts['dirname']), '/'); $ext_page = $this->pages->dispatch($page_route, true); diff --git a/system/src/Grav/Common/Page/Media.php b/system/src/Grav/Common/Page/Media.php index dd1a38110..9013d8b62 100644 --- a/system/src/Grav/Common/Page/Media.php +++ b/system/src/Grav/Common/Page/Media.php @@ -2,7 +2,7 @@ namespace Grav\Common\Page; use Grav\Common\Getters; -use Grav\Common\GravTrait; +use Grav\Common\Grav; use Grav\Common\Page\Medium\Medium; use Grav\Common\Page\Medium\MediumFactory; @@ -15,8 +15,6 @@ use Grav\Common\Page\Medium\MediumFactory; */ class Media extends Getters { - use GravTrait; - protected $gettersVariable = 'instances'; protected $path; diff --git a/system/src/Grav/Common/Page/Medium/ImageFile.php b/system/src/Grav/Common/Page/Medium/ImageFile.php index c71cd0efd..d91b1ac6f 100644 --- a/system/src/Grav/Common/Page/Medium/ImageFile.php +++ b/system/src/Grav/Common/Page/Medium/ImageFile.php @@ -1,15 +1,14 @@ fireEvent('onImageMediumSaved', new Event(['image' => $target])); + Grav::instance()->fireEvent('onImageMediumSaved', new Event(['image' => $target])); }; // Asking the cache for the cacheFile try { - $perms = self::getGrav()['config']->get('system.images.cache_perms', '0755'); + $perms = Grav::instance()['config']->get('system.images.cache_perms', '0755'); $perms = octdec($perms); $file = $this->cache->setDirectoryMode($perms)->getOrCreateFile($cacheFile, $conditions, $generate, $actual); } catch (GenerationError $e) { diff --git a/system/src/Grav/Common/Page/Medium/ImageMedium.php b/system/src/Grav/Common/Page/Medium/ImageMedium.php index e069084f8..2455824dc 100644 --- a/system/src/Grav/Common/Page/Medium/ImageMedium.php +++ b/system/src/Grav/Common/Page/Medium/ImageMedium.php @@ -1,9 +1,14 @@ get('filepath')); $this->def('width', $image_info[0]); @@ -137,8 +142,8 @@ class ImageMedium extends Medium */ public function url($reset = true) { - $image_path = self::getGrav()['locator']->findResource('cache://images', true); - $image_dir = self::getGrav()['locator']->findResource('cache://images', false); + $image_path = Grav::instance()['locator']->findResource('cache://images', true); + $image_dir = Grav::instance()['locator']->findResource('cache://images', false); $saved_image_path = $this->saveImage(); $output = preg_replace('|^' . preg_quote(GRAV_ROOT) . '|', '', $saved_image_path); @@ -151,7 +156,7 @@ class ImageMedium extends Medium $this->reset(); } - return self::getGrav()['base_url'] . $output . $this->querystring() . $this->urlHash(); + return Grav::instance()['base_url'] . $output . $this->querystring() . $this->urlHash(); } /** @@ -470,7 +475,7 @@ class ImageMedium extends Medium */ protected function image() { - $locator = self::getGrav()['locator']; + $locator = Grav::instance()['locator']; $file = $this->get('filepath'); $cacheDir = $locator->findResource('cache://images', true); @@ -506,7 +511,7 @@ class ImageMedium extends Medium $ratio = 1; } - $locator = self::getGrav()['locator']; + $locator = Grav::instance()['locator']; $overlay = $locator->findResource("system://assets/responsive-overlays/{$ratio}x.png") ?: $locator->findResource('system://assets/responsive-overlays/unknown.png'); $this->image->merge(ImageFile::open($overlay)); } diff --git a/system/src/Grav/Common/Page/Medium/Link.php b/system/src/Grav/Common/Page/Medium/Link.php index a92ec228e..64a26b607 100644 --- a/system/src/Grav/Common/Page/Medium/Link.php +++ b/system/src/Grav/Common/Page/Medium/Link.php @@ -1,11 +1,14 @@ get('system.media.enable_media_timestamp', true)) { - $this->querystring('&' . self::getGrav()['cache']->getKey()); + if (Grav::instance()['config']->get('system.media.enable_media_timestamp', true)) { + $this->querystring('&' . Grav::instance()['cache']->getKey()); } $this->def('mime', 'application/octet-stream'); @@ -143,7 +142,7 @@ class Medium extends Data implements RenderableInterface $this->reset(); } - return self::getGrav()['base_url'] . $output . $this->querystring() . $this->urlHash(); + return Grav::instance()['base_url'] . $output . $this->querystring() . $this->urlHash(); } /** diff --git a/system/src/Grav/Common/Page/Medium/MediumFactory.php b/system/src/Grav/Common/Page/Medium/MediumFactory.php index aa88db73c..0f4063cc0 100644 --- a/system/src/Grav/Common/Page/Medium/MediumFactory.php +++ b/system/src/Grav/Common/Page/Medium/MediumFactory.php @@ -1,7 +1,7 @@ get("media.".strtolower($ext)); if (!$media_params) { @@ -59,7 +57,7 @@ class MediumFactory 'thumbnails' => [] ]; - $locator = self::getGrav()['locator']; + $locator = Grav::instance()['locator']; $lookup = $locator->findResources('image://'); foreach ($lookup as $lookupPath) { diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index c32c96360..07064b7b9 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -2,19 +2,18 @@ namespace Grav\Common\Page; use Exception; -use Grav\Common\Filesystem\Folder; -use Grav\Common\Config\Config; -use Grav\Common\GravTrait; -use Grav\Common\Language\Language; -use Grav\Common\Utils; use Grav\Common\Cache; -use Grav\Common\Twig; -use Grav\Common\Uri; +use Grav\Common\Config\Config; +use Grav\Common\Data\Blueprint; +use Grav\Common\Filesystem\Folder; use Grav\Common\Grav; -use Grav\Common\Taxonomy; +use Grav\Common\Language\Language; use Grav\Common\Markdown\Parsedown; use Grav\Common\Markdown\ParsedownExtra; -use Grav\Common\Data\Blueprint; +use Grav\Common\Taxonomy; +use Grav\Common\Twig; +use Grav\Common\Uri; +use Grav\Common\Utils; use RocketTheme\Toolbox\Event\Event; use RocketTheme\Toolbox\File\MarkdownFile; use Symfony\Component\Yaml\Exception\ParseException; @@ -33,8 +32,6 @@ define('PAGE_ORDER_PREFIX_REGEX', '/^[0-9]+\./u'); */ class Page { - use GravTrait; - /** * @var string Filename. Leave as null if page is folder. */ @@ -107,7 +104,7 @@ class Page public function __construct() { /** @var Config $config */ - $config = self::getGrav()['config']; + $config = Grav::instance()['config']; $this->taxonomy = []; $this->process = $config->get('system.pages.process'); @@ -126,7 +123,7 @@ class Page */ public function init(\SplFileInfo $file, $extension = null) { - $config = self::getGrav()['config']; + $config = Grav::instance()['config']; $this->hide_home_route = $config->get('system.home.hide_in_urls', false); $this->home_route = $config->get('system.home.alias'); @@ -165,7 +162,7 @@ class Page public function translatedLanguages() { $filename = substr($this->name, 0, -(strlen($this->extension()))); - $config = self::getGrav()['config']; + $config = Grav::instance()['config']; $languages = $config->get('system.languages.supported', []); $translatedLanguages = []; @@ -194,7 +191,7 @@ class Page public function untranslatedLanguages() { $filename = substr($this->name, 0, -(strlen($this->extension()))); - $config = self::getGrav()['config']; + $config = Grav::instance()['config']; $languages = $config->get('system.languages.supported', []); $untranslatedLanguages = []; @@ -296,7 +293,7 @@ class Page $this->frontmatter = $file->frontmatter(); $this->header = (object)$file->header(); } catch (ParseException $e) { - $file->raw(self::getGrav()['language']->translate([ + $file->raw(Grav::instance()['language']->translate([ 'FRONTMATTER_ERROR_PAGE', $this->slug(), $file->filename(), @@ -429,7 +426,7 @@ class Page */ public function summary($size = null) { - $config = (array)self::getGrav()['config']->get('site.summary'); + $config = (array)Grav::instance()['config']->get('site.summary'); if (isset($this->header->summary)) { $config = array_merge($config, $this->header->summary); } @@ -511,11 +508,11 @@ class Page $this->media(); /** @var Config $config */ - $config = self::getGrav()['config']; + $config = Grav::instance()['config']; // Load cached content /** @var Cache $cache */ - $cache = self::getGrav()['cache']; + $cache = Grav::instance()['cache']; $cache_id = md5('page' . $this->id()); $this->content = $cache->fetch($cache_id); @@ -530,7 +527,7 @@ class Page // if no cached-content run everything if ($this->content === false || $cache_enable == false) { $this->content = $this->raw_content; - self::getGrav()->fireEvent('onPageContentRaw', new Event(['page' => $this])); + Grav::instance()->fireEvent('onPageContentRaw', new Event(['page' => $this])); if ($twig_first) { if ($process_twig) { @@ -541,7 +538,7 @@ class Page } // Content Processed but not cached yet - self::getGrav()->fireEvent('onPageContentProcessed', new Event(['page' => $this])); + Grav::instance()->fireEvent('onPageContentProcessed', new Event(['page' => $this])); } else { if ($process_markdown) { @@ -549,7 +546,7 @@ class Page } // Content Processed but not cached yet - self::getGrav()->fireEvent('onPageContentProcessed', new Event(['page' => $this])); + Grav::instance()->fireEvent('onPageContentProcessed', new Event(['page' => $this])); if ($process_twig) { $this->processTwig(); @@ -580,7 +577,7 @@ class Page protected function processMarkdown() { /** @var Config $config */ - $config = self::getGrav()['config']; + $config = Grav::instance()['config']; $defaults = (array)$config->get('system.pages.markdown'); if (isset($this->header()->markdown)) { @@ -608,7 +605,7 @@ class Page */ private function processTwig() { - $twig = self::getGrav()['twig']; + $twig = Grav::instance()['twig']; $this->content = $twig->processPage($this, $this->content); } @@ -617,7 +614,7 @@ class Page */ private function cachePageContent() { - $cache = self::getGrav()['cache']; + $cache = Grav::instance()['cache']; $cache_id = md5('page' . $this->id()); $cache->save($cache_id, $this->content); } @@ -797,7 +794,7 @@ class Page if ($parent->route()) { $this->route($parent->route() . '/' . $this->slug()); } else { - $this->route(self::getGrav()['pages']->root()->route() . '/' . $this->slug()); + $this->route(Grav::instance()['pages']->root()->route() . '/' . $this->slug()); } return $this; @@ -829,11 +826,11 @@ class Page public function blueprints() { /** @var Pages $pages */ - $pages = self::getGrav()['pages']; + $pages = Grav::instance()['pages']; $blueprint = $pages->blueprints($this->blueprintName()); $fields = $blueprint->fields(); - $edit_mode = isset(self::getGrav()['admin']) ? self::getGrav()['config']->get('plugins.admin.edit_mode') : null; + $edit_mode = isset(Grav::instance()['admin']) ? Grav::instance()['config']->get('plugins.admin.edit_mode') : null; // override if you only want 'normal' mode if (empty($fields) && ($edit_mode == 'auto' || $edit_mode == 'normal')) { @@ -938,7 +935,7 @@ class Page public function media($var = null) { /** @var Cache $cache */ - $cache = self::getGrav()['cache']; + $cache = Grav::instance()['cache']; if ($var) { $this->media = $var; @@ -1035,7 +1032,7 @@ class Page // if not set in the page get the value from system config if (empty($this->url_extension)) { - $this->url_extension = trim(isset($this->header->append_url_extension) ? $this->header->append_url_extension : self::getGrav()['config']->get('system.pages.append_url_extension', false)); + $this->url_extension = trim(isset($this->header->append_url_extension) ? $this->header->append_url_extension : Grav::instance()['config']->get('system.pages.append_url_extension', false)); } return $this->url_extension; @@ -1054,7 +1051,7 @@ class Page $this->expires = $var; } - return empty($this->expires) ? self::getGrav()['config']->get('system.pages.expires') : $this->expires; + return empty($this->expires) ? Grav::instance()['config']->get('system.pages.expires') : $this->expires; } /** @@ -1245,7 +1242,7 @@ class Page $metadata['generator'] = 'GravCMS'; // Get initial metadata for the page - $metadata = array_merge($metadata, self::getGrav()['config']->get('site.metadata')); + $metadata = array_merge($metadata, Grav::instance()['config']->get('site.metadata')); if (isset($this->header->metadata)) { // Merge any site.metadata settings in with page metadata @@ -1358,16 +1355,16 @@ class Page public function url($include_host = false, $canonical = false, $include_lang = true) { /** @var Pages $pages */ - $pages = self::getGrav()['pages']; + $pages = Grav::instance()['pages']; /** @var Config $config */ - $config = self::getGrav()['config']; + $config = Grav::instance()['config']; /** @var Language $language */ - $language = self::getGrav()['language']; + $language = Grav::instance()['language']; /** @var Uri $uri */ - $uri = self::getGrav()['uri']; + $uri = Grav::instance()['uri']; $include_port = false; @@ -1578,7 +1575,7 @@ class Page $this->etag = $var; } if (!isset($this->etag)) { - $this->etag = (bool)self::getGrav()['config']->get('system.pages.etag'); + $this->etag = (bool)Grav::instance()['config']->get('system.pages.etag'); } return $this->etag; @@ -1597,7 +1594,7 @@ class Page $this->last_modified = $var; } if (!isset($this->last_modified)) { - $this->last_modified = (bool)self::getGrav()['config']->get('system.pages.last_modified'); + $this->last_modified = (bool)Grav::instance()['config']->get('system.pages.last_modified'); } return $this->last_modified; @@ -1773,7 +1770,7 @@ class Page } if (empty($this->max_count)) { /** @var Config $config */ - $config = self::getGrav()['config']; + $config = Grav::instance()['config']; $this->max_count = (int)$config->get('system.pages.list.count'); } @@ -1861,7 +1858,7 @@ class Page } /** @var Pages $pages */ - $pages = self::getGrav()['pages']; + $pages = Grav::instance()['pages']; return $pages->get($this->parent); } @@ -1899,7 +1896,7 @@ class Page public function children() { /** @var Pages $pages */ - $pages = self::getGrav()['pages']; + $pages = Grav::instance()['pages']; return $pages->children($this->path()); } @@ -1979,8 +1976,8 @@ class Page */ public function active() { - $uri_path = rtrim(self::getGrav()['uri']->path(), '/') ?: '/'; - $routes = self::getGrav()['pages']->routes(); + $uri_path = rtrim(Grav::instance()['uri']->path(), '/') ?: '/'; + $routes = Grav::instance()['pages']->routes(); if (isset($routes[$uri_path])) { if ($routes[$uri_path] == $this->path()) { @@ -2000,10 +1997,10 @@ class Page */ public function activeChild() { - $uri = self::getGrav()['uri']; - $pages = self::getGrav()['pages']; + $uri = Grav::instance()['uri']; + $pages = Grav::instance()['pages']; $uri_path = rtrim($uri->path(), '/'); - $routes = self::getGrav()['pages']->routes(); + $routes = Grav::instance()['pages']->routes(); if (isset($routes[$uri_path])) { /** @var Page $child_page */ @@ -2056,7 +2053,7 @@ class Page public function find($url, $all = false) { /** @var Pages $pages */ - $pages = self::getGrav()['pages']; + $pages = Grav::instance()['pages']; return $pages->dispatch($url, $all); } @@ -2089,9 +2086,9 @@ class Page $collection->setParams($params); /** @var Uri $uri */ - $uri = self::getGrav()['uri']; + $uri = Grav::instance()['uri']; /** @var Config $config */ - $config = self::getGrav()['config']; + $config = Grav::instance()['config']; $process_taxonomy = isset($params['url_taxonomy_filters']) ? $params['url_taxonomy_filters'] : $config->get('system.pages.url_taxonomy_filters'); @@ -2133,7 +2130,7 @@ class Page } /** @var Grav $grav */ - $grav = self::getGrav()['grav']; + $grav = Grav::instance()['grav']; // New Custom event to handle things like pagination. $grav->fireEvent('onCollectionProcessed', new Event(['collection' => $collection])); @@ -2190,7 +2187,7 @@ class Page } /** @var Pages $pages */ - $pages = self::getGrav()['pages']; + $pages = Grav::instance()['pages']; $parts = explode('.', $cmd); $current = array_shift($parts); @@ -2284,7 +2281,7 @@ class Page // @taxonomy: { category: [ blog, featured ], level: 1 } /** @var Taxonomy $taxonomy_map */ - $taxonomy_map = self::getGrav()['taxonomy']; + $taxonomy_map = Grav::instance()['taxonomy']; if (!empty($parts)) { $params = [implode('.', $parts) => $params]; @@ -2367,7 +2364,7 @@ class Page // Do reordering. if ($reorder && $this->order() != $this->_original->order()) { /** @var Pages $pages */ - $pages = self::getGrav()['pages']; + $pages = Grav::instance()['pages']; $parent = $this->parent(); @@ -2430,20 +2427,20 @@ class Page protected function setPublishState() { // Handle publishing dates if no explict published option set - if (self::getGrav()['config']->get('system.pages.publish_dates') && !isset($this->header->published)) { + if (Grav::instance()['config']->get('system.pages.publish_dates') && !isset($this->header->published)) { // unpublish if required, if not clear cache right before page should be unpublished if ($this->unpublishDate()) { if ($this->unpublishDate() < time()) { $this->published(false); } else { $this->published(); - self::getGrav()['cache']->setLifeTime($this->unpublishDate()); + Grav::instance()['cache']->setLifeTime($this->unpublishDate()); } } // publish if required, if not clear cache right before page is published if ($this->publishDate() && $this->publishDate() && $this->publishDate() > time()) { $this->published(false); - self::getGrav()['cache']->setLifeTime($this->publishDate()); + Grav::instance()['cache']->setLifeTime($this->publishDate()); } } } diff --git a/system/src/Grav/Common/Plugins.php b/system/src/Grav/Common/Plugins.php index 7088e2ade..af637d01f 100644 --- a/system/src/Grav/Common/Plugins.php +++ b/system/src/Grav/Common/Plugins.php @@ -1,6 +1,7 @@ get('plugins'); - $inflector = self::getGrav()['inflector']; + $inflector = Grav::instance()['inflector']; /** @var EventDispatcher $events */ - $events = self::getGrav()['events']; + $events = Grav::instance()['events']; foreach ($plugins as $plugin => $data) { if (empty($data['enabled'])) { @@ -42,10 +41,10 @@ class Plugins extends Iterator continue; } - $locator = self::getGrav()['locator']; + $locator = Grav::instance()['locator']; $filePath = $locator->findResource('plugins://' . $plugin . DS . $plugin . PLUGIN_EXT); if (!is_file($filePath)) { - self::getGrav()['log']->addWarning(sprintf("Plugin '%s' enabled but not found! Try clearing cache with `bin/grav clear-cache`", $plugin)); + Grav::instance()['log']->addWarning(sprintf("Plugin '%s' enabled but not found! Try clearing cache with `bin/grav clear-cache`", $plugin)); continue; } @@ -69,7 +68,7 @@ class Plugins extends Iterator $plugin)); } - $instance = new $pluginClassName($plugin, self::getGrav(), $config); + $instance = new $pluginClassName($plugin, Grav::instance(), $config); if ($instance instanceof EventSubscriberInterface) { $events->addSubscriber($instance); } @@ -147,7 +146,7 @@ class Plugins extends Iterator $obj = new Data($file->content(), $blueprint); // Override with user configuration. - $obj->merge(self::getGrav()['config']->get('plugins.' . $name) ?: []); + $obj->merge(Grav::instance()['config']->get('plugins.' . $name) ?: []); // Save configuration always to user/config. $file = CompiledYamlFile::instance("config://plugins/{$name}.yaml"); diff --git a/system/src/Grav/Common/Twig/WriteCacheFileTrait.php b/system/src/Grav/Common/Twig/WriteCacheFileTrait.php index 2c9def3bd..0dc35e86a 100644 --- a/system/src/Grav/Common/Twig/WriteCacheFileTrait.php +++ b/system/src/Grav/Common/Twig/WriteCacheFileTrait.php @@ -1,15 +1,13 @@ get('system.twig.umask_fix', false); + self::$umask = Grav::instance()['config']->get('system.twig.umask_fix', false); } if (self::$umask) { diff --git a/system/src/Grav/Common/User/Group.php b/system/src/Grav/Common/User/Group.php index 0a424f418..1047ad1e7 100644 --- a/system/src/Grav/Common/User/Group.php +++ b/system/src/Grav/Common/User/Group.php @@ -4,7 +4,7 @@ namespace Grav\Common\User; use Grav\Common\Data\Blueprints; use Grav\Common\Data\Data; use Grav\Common\File\CompiledYamlFile; -use Grav\Common\GravTrait; +use Grav\Common\Grav; use Grav\Common\Utils; /** @@ -15,8 +15,6 @@ use Grav\Common\Utils; */ class Group extends Data { - use GravTrait; - /** * Get the groups list * @@ -24,7 +22,7 @@ class Group extends Data */ private static function groups() { - $groups = self::getGrav()['config']->get('groups'); + $groups = Grav::instance()['config']->get('groups'); return $groups; } @@ -76,13 +74,13 @@ class Group extends Data $fields = $blueprint->fields(); - self::getGrav()['config']->set("groups.$this->groupname", []); + Grav::instance()['config']->set("groups.$this->groupname", []); foreach ($fields as $field) { if ($field['type'] == 'text') { $value = $field['name']; if (isset($this->items[$value])) { - self::getGrav()['config']->set("groups.$this->groupname.$value", $this->items[$value]); + Grav::instance()['config']->set("groups.$this->groupname.$value", $this->items[$value]); } } if ($field['type'] == 'array') { @@ -91,7 +89,7 @@ class Group extends Data if ($arrayValues) { foreach ($arrayValues as $arrayIndex => $arrayValue) { - self::getGrav()['config']->set("groups.$this->groupname.$value.$arrayIndex", $arrayValue); + Grav::instance()['config']->set("groups.$this->groupname.$value.$arrayIndex", $arrayValue); } } } @@ -99,8 +97,8 @@ class Group extends Data $type = 'groups'; $blueprints = $this->blueprints("config/{$type}"); - $obj = new Data(self::getGrav()['config']->get($type), $blueprints); - $file = CompiledYamlFile::instance(self::getGrav()['locator']->findResource("config://{$type}.yaml")); + $obj = new Data(Grav::instance()['config']->get($type), $blueprints); + $file = CompiledYamlFile::instance(Grav::instance()['locator']->findResource("config://{$type}.yaml")); $obj->file($file); $obj->save(); } @@ -117,13 +115,13 @@ class Group extends Data $blueprints = new Blueprints('blueprints://'); $blueprint = $blueprints->get('user/group'); - $groups = self::getGrav()['config']->get("groups"); + $groups = Grav::instance()['config']->get("groups"); unset($groups[$groupname]); - self::getGrav()['config']->set("groups", $groups); + Grav::instance()['config']->set("groups", $groups); $type = 'groups'; - $obj = new Data(self::getGrav()['config']->get($type), $blueprint); - $file = CompiledYamlFile::instance(self::getGrav()['locator']->findResource("config://{$type}.yaml")); + $obj = new Data(Grav::instance()['config']->get($type), $blueprint); + $file = CompiledYamlFile::instance(Grav::instance()['locator']->findResource("config://{$type}.yaml")); $obj->file($file); $obj->save(); diff --git a/system/src/Grav/Common/User/User.php b/system/src/Grav/Common/User/User.php index da51c1235..73e2082f3 100644 --- a/system/src/Grav/Common/User/User.php +++ b/system/src/Grav/Common/User/User.php @@ -4,7 +4,7 @@ namespace Grav\Common\User; use Grav\Common\Data\Blueprints; use Grav\Common\Data\Data; use Grav\Common\File\CompiledYamlFile; -use Grav\Common\GravTrait; +use Grav\Common\Grav; use Grav\Common\Utils; /** @@ -18,8 +18,6 @@ use Grav\Common\Utils; */ class User extends Data { - use GravTrait; - /** * Load user account. * @@ -31,7 +29,7 @@ class User extends Data */ public static function load($username) { - $locator = self::getGrav()['locator']; + $locator = Grav::instance()['locator']; // force lowercase of username $username = strtolower($username); @@ -62,7 +60,7 @@ class User extends Data */ public static function remove($username) { - $file_path = self::getGrav()['locator']->findResource('account://' . $username . YAML_EXT); + $file_path = Grav::instance()['locator']->findResource('account://' . $username . YAML_EXT); if (file_exists($file_path) && unlink($file_path)) { return true; } @@ -91,7 +89,7 @@ class User extends Data // the result Authentication::verify( $password, - self::getGrav()['config']->get('system.security.default_hash') + Grav::instance()['config']->get('system.security.default_hash') ); return false; @@ -163,7 +161,7 @@ class User extends Data $groups = $this->get('groups'); if ($groups) { foreach ((array)$groups as $group) { - $permission = self::getGrav()['config']->get("groups.{$group}.access.{$action}"); + $permission = Grav::instance()['config']->get("groups.{$group}.access.{$action}"); $return = Utils::isPositive($permission); if ($return === true) { break; diff --git a/system/src/Grav/Common/Utils.php b/system/src/Grav/Common/Utils.php index 597bae22a..277fd814f 100644 --- a/system/src/Grav/Common/Utils.php +++ b/system/src/Grav/Common/Utils.php @@ -3,6 +3,7 @@ namespace Grav\Common; use DateTime; use DateTimeZone; +use Grav\Common\Grav; use Grav\Common\Helpers\Truncator; use RocketTheme\Toolbox\Event\Event; @@ -13,8 +14,6 @@ use RocketTheme\Toolbox\Event\Event; */ abstract class Utils { - use GravTrait; - protected static $nonces = []; /** @@ -126,7 +125,7 @@ abstract class Utils 'H:i d-m-Y' => 'H:i d-m-Y (e.g. '.$now->format('H:i d-m-Y').')', 'h:i a m/d/Y' => 'h:i a m/d/Y (e.g. '.$now->format('h:i a m/d/Y').')', ]; - $default_format = self::getGrav()['config']->get('system.pages.dateformat.default'); + $default_format = Grav::instance()['config']->get('system.pages.dateformat.default'); if ($default_format) { $date_formats = array_merge([$default_format => $default_format.' (e.g. '.$now->format($default_format).')'], $date_formats); } @@ -226,7 +225,7 @@ abstract class Utils { if (file_exists($file)) { // fire download event - self::getGrav()->fireEvent('onBeforeDownload', new Event(['file' => $file])); + Grav::instance()->fireEvent('onBeforeDownload', new Event(['file' => $file])); $file_parts = pathinfo($file); $filesize = filesize($file); @@ -285,7 +284,7 @@ abstract class Utils public static function getMimeType($extension) { $extension = strtolower($extension); - $config = self::getGrav()['config']->get('media'); + $config = Grav::instance()['config']->get('media'); if (isset($config[$extension])) { return $config[$extension]['mime']; @@ -402,7 +401,7 @@ abstract class Utils return false; } - $languages_enabled = self::getGrav()['config']->get('system.languages.supported', []); + $languages_enabled = Grav::instance()['config']->get('system.languages.supported', []); if ($string[0] == '/' && $string[3] == '/' && in_array(substr($string, 1, 2), $languages_enabled)) { return true; @@ -421,7 +420,7 @@ abstract class Utils */ public static function date2timestamp($date) { - $config = self::getGrav()['config']; + $config = Grav::instance()['config']; $default_dateformat = $config->get('system.pages.dateformat.default'); // try to use DateTime and default format @@ -489,8 +488,8 @@ abstract class Utils private static function generateNonceString($action, $plusOneTick = false) { $username = ''; - if (isset(self::getGrav()['user'])) { - $user = self::getGrav()['user']; + if (isset(Grav::instance()['user'])) { + $user = Grav::instance()['user']; $username = $user->username; } @@ -501,15 +500,15 @@ abstract class Utils $i++; } - return ($i . '|' . $action . '|' . $username . '|' . $token . '|' . self::getGrav()['config']->get('security.salt')); + return ($i . '|' . $action . '|' . $username . '|' . $token . '|' . Grav::instance()['config']->get('security.salt')); } //Added in version 1.0.8 to ensure that existing nonces are not broken. //TODO: to be removed private static function generateNonceStringOldStyle($action, $plusOneTick = false) { - if (isset(self::getGrav()['user'])) { - $user = self::getGrav()['user']; + if (isset(Grav::instance()['user'])) { + $user = Grav::instance()['user']; $username = $user->username; if (isset($_SERVER['REMOTE_ADDR'])) { $username .= $_SERVER['REMOTE_ADDR']; @@ -523,7 +522,7 @@ abstract class Utils $i++; } - return ($i . '|' . $action . '|' . $username . '|' . $token . '|' . self::getGrav()['config']->get('security.salt')); + return ($i . '|' . $action . '|' . $username . '|' . $token . '|' . Grav::instance()['config']->get('security.salt')); } /** diff --git a/system/src/Grav/Console/Cli/BackupCommand.php b/system/src/Grav/Console/Cli/BackupCommand.php index d8b8500fb..cc55b224d 100644 --- a/system/src/Grav/Console/Cli/BackupCommand.php +++ b/system/src/Grav/Console/Cli/BackupCommand.php @@ -1,6 +1,7 @@ progress = new ProgressBar($this->output); $this->progress->setFormat('Archiving %current% files [%bar%] %elapsed:6s% %memory:6s%'); - self::getGrav()['config']->init(); + Grav::instance()['config']->init(); $destination = ($this->input->getArgument('destination')) ? $this->input->getArgument('destination') : null; - $log = JsonFile::instance(self::getGrav()['locator']->findResource("log://backup.log", true, true)); + $log = JsonFile::instance(Grav::instance()['locator']->findResource("log://backup.log", true, true)); $backup = ZipBackup::backup($destination, [$this, 'output']); $log->content([ diff --git a/system/src/Grav/Console/ConsoleTrait.php b/system/src/Grav/Console/ConsoleTrait.php index 1ba9357a2..1a05077d8 100644 --- a/system/src/Grav/Console/ConsoleTrait.php +++ b/system/src/Grav/Console/ConsoleTrait.php @@ -1,7 +1,7 @@ set('system.cache.driver', 'default'); + if (Grav::instance()) { + Grav::instance()['config']->set('system.cache.driver', 'default'); } $this->argv = $_SERVER['argv'][0]; diff --git a/system/src/Grav/Console/Gpm/UninstallCommand.php b/system/src/Grav/Console/Gpm/UninstallCommand.php index dfe37e9ed..63555aa9e 100644 --- a/system/src/Grav/Console/Gpm/UninstallCommand.php +++ b/system/src/Grav/Console/Gpm/UninstallCommand.php @@ -3,6 +3,7 @@ namespace Grav\Console\Gpm; use Grav\Common\GPM\GPM; use Grav\Common\GPM\Installer; +use Grav\Common\Grav; use Grav\Console\ConsoleCommand; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; @@ -131,7 +132,7 @@ class UninstallCommand extends ConsoleCommand */ private function uninstallPackage($slug, $package) { - $path = self::getGrav()['locator']->findResource($package->package_type . '://' .$slug); + $path = Grav::instance()['locator']->findResource($package->package_type . '://' .$slug); Installer::uninstall($path); $errorCode = Installer::lastErrorCode(); @@ -160,7 +161,7 @@ class UninstallCommand extends ConsoleCommand private function checkDestination($slug, $package) { - $path = self::getGrav()['locator']->findResource($package->package_type . '://' . $slug); + $path = Grav::instance()['locator']->findResource($package->package_type . '://' . $slug); $questionHelper = $this->getHelper('question'); $skipPrompt = $this->input->getOption('all-yes'); From 1d2c1c3a29d2b87e127f8c5f7238f966e218cfbf Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Thu, 4 Feb 2016 14:44:58 -0700 Subject: [PATCH 04/11] Fixed conflict with Grav naming --- system/src/Grav/Common/GPM/GPM.php | 4 ++-- system/src/Grav/Common/GPM/Remote/{Grav.php => GravCore.php} | 2 +- system/src/Grav/Common/GPM/Upgrader.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename system/src/Grav/Common/GPM/Remote/{Grav.php => GravCore.php} (98%) diff --git a/system/src/Grav/Common/GPM/GPM.php b/system/src/Grav/Common/GPM/GPM.php index 3cdb64bba..b18075a2a 100644 --- a/system/src/Grav/Common/GPM/GPM.php +++ b/system/src/Grav/Common/GPM/GPM.php @@ -20,7 +20,7 @@ class GPM extends Iterator private $repository; /** - * @var Remote\Grav + * @var Remote\GravCore */ public $grav; @@ -42,7 +42,7 @@ class GPM extends Iterator $this->installed = new Local\Packages(); try { $this->repository = new Remote\Packages($refresh, $callback); - $this->grav = new Remote\Grav($refresh, $callback); + $this->grav = new Remote\GravCore($refresh, $callback); } catch (\Exception $e) { } } diff --git a/system/src/Grav/Common/GPM/Remote/Grav.php b/system/src/Grav/Common/GPM/Remote/GravCore.php similarity index 98% rename from system/src/Grav/Common/GPM/Remote/Grav.php rename to system/src/Grav/Common/GPM/Remote/GravCore.php index 55c9861ab..f41bb056d 100644 --- a/system/src/Grav/Common/GPM/Remote/Grav.php +++ b/system/src/Grav/Common/GPM/Remote/GravCore.php @@ -4,7 +4,7 @@ namespace Grav\Common\GPM\Remote; use Grav\Common\Grav; use \Doctrine\Common\Cache\FilesystemCache; -class Grav extends AbstractPackageCollection +class GravCore extends AbstractPackageCollection { protected $repository = 'https://getgrav.org/downloads/grav.json'; private $data; diff --git a/system/src/Grav/Common/GPM/Upgrader.php b/system/src/Grav/Common/GPM/Upgrader.php index 61c9ad5ce..3ea972d3c 100644 --- a/system/src/Grav/Common/GPM/Upgrader.php +++ b/system/src/Grav/Common/GPM/Upgrader.php @@ -32,7 +32,7 @@ class Upgrader */ public function __construct($refresh = false, $callback = null) { - $this->remote = new Remote\Grav($refresh, $callback); + $this->remote = new Remote\GravCore($refresh, $callback); } /** From 396a694005c5eca2d929897cb5a88fb9c2597502 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Tue, 23 Feb 2016 15:06:33 +0100 Subject: [PATCH 05/11] Add x-ua-compatible to http_equiv processing --- system/src/Grav/Common/Page/Page.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index 926ac9da0..90c31633f 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -1294,7 +1294,7 @@ class Page // if not metadata yet, process it. if (null === $this->metadata) { - $header_tag_http_equivs = ['content-type', 'default-style', 'refresh']; + $header_tag_http_equivs = ['content-type', 'default-style', 'refresh', 'x-ua-compatible']; $this->metadata = []; From 89fbd4c2bf6d69a7e3e91be4e5c9e738d24f6958 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 24 Feb 2016 12:07:21 -0700 Subject: [PATCH 06/11] Added a regex_replace twig filter/function --- system/src/Grav/Common/Twig/TwigExtension.php | 17 +++++++++++++++++ .../unit/Grav/Common/Twig/TwigExtensionTest.php | 10 +++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Twig/TwigExtension.php b/system/src/Grav/Common/Twig/TwigExtension.php index c1e7cefb3..a385bfe17 100644 --- a/system/src/Grav/Common/Twig/TwigExtension.php +++ b/system/src/Grav/Common/Twig/TwigExtension.php @@ -75,6 +75,7 @@ class TwigExtension extends \Twig_Extension new \Twig_SimpleFilter('modulus', [$this, 'modulusFilter']), new \Twig_SimpleFilter('rtrim', [$this, 'rtrimFilter']), new \Twig_SimpleFilter('pad', [$this, 'padFilter']), + new \Twig_SimpleFilter('regex_replace', [$this, 'regexReplace']), new \Twig_SimpleFilter('safe_email', [$this, 'safeEmailFilter']), new \Twig_SimpleFilter('safe_truncate', ['\Grav\Common\Utils', 'safeTruncate']), new \Twig_SimpleFilter('safe_truncate_html', ['\Grav\Common\Utils', 'safeTruncateHTML']), @@ -105,6 +106,7 @@ class TwigExtension extends \Twig_Extension new \Twig_SimpleFunction('nonce_field', [$this, 'nonceFieldFunc']), new \Twig_simpleFunction('random_string', [$this, 'randomStringFunc']), new \Twig_SimpleFunction('repeat', [$this, 'repeatFunc']), + new \Twig_SimpleFunction('regex_replace', [$this, 'regexReplace']), new \Twig_SimpleFunction('string', [$this, 'stringFunc']), new \Twig_simpleFunction('t', [$this, 'translate']), new \Twig_simpleFunction('ta', [$this, 'translateArray']), @@ -754,4 +756,19 @@ class TwigExtension extends \Twig_Extension return $string; } + + /** + * Twig wrapper for PHP's preg_replace method + * + * @param mixed $subject the content to perform the replacement on + * @param mixed $pattern the regex pattern to use for matches + * @param mixed $replace the replacement value either as a string or an array of replacements + * @param int $limit the maximum possible replacements for each pattern in each subject + + * @return mixed the resulting content + */ + public function regexReplace($subject, $pattern, $replace, $limit = -1) + { + return preg_replace($pattern, $replace, $subject, $limit); + } } diff --git a/tests/unit/Grav/Common/Twig/TwigExtensionTest.php b/tests/unit/Grav/Common/Twig/TwigExtensionTest.php index a0938838c..0600e4d94 100644 --- a/tests/unit/Grav/Common/Twig/TwigExtensionTest.php +++ b/tests/unit/Grav/Common/Twig/TwigExtensionTest.php @@ -137,6 +137,11 @@ class TwigExtensionTest extends \Codeception\TestCase\Test } + public function testRegexReplace() + { + + } + public function testUrlFunc() { @@ -169,7 +174,10 @@ class TwigExtensionTest extends \Codeception\TestCase\Test public function testArrayFunc() { - + $this->assertSame('this is my text', + $this->twig_ext->regexReplace('

this is my text

', '(<\/?p>)', '')); + $this->assertSame('this is my text', + $this->twig_ext->regexReplace('

this is my text

', ['(

)','(<\/p>)'], ['',''])); } public function testArrayKeyValue() From f74562987dacd46290a7db6c6c4bc66b06c6cd8a Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 24 Feb 2016 14:45:57 -0700 Subject: [PATCH 07/11] Fix for pure URL fragment getting Url prepended - #701 --- system/src/Grav/Common/Uri.php | 16 ++++++------ .../Grav/Common/Markdown/ParsedownTest.php | 25 ++++++++----------- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/system/src/Grav/Common/Uri.php b/system/src/Grav/Common/Uri.php index 4a7006447..fca059a3f 100644 --- a/system/src/Grav/Common/Uri.php +++ b/system/src/Grav/Common/Uri.php @@ -746,18 +746,18 @@ class Uri $url_path = $url; } - $external = false; - $base = $grav['base_url_relative']; - $base_url = rtrim($base . $grav['pages']->base(), '/') . $language_append; - $pages_dir = $grav['locator']->findResource('page://'); + $external = false; + $base = $grav['base_url_relative']; + $base_url = rtrim($base . $grav['pages']->base(), '/') . $language_append; + $pages_dir = $grav['locator']->findResource('page://'); // if absolute and starts with a base_url move on if (isset($url['scheme']) && Utils::startsWith($url['scheme'], 'http')) { $external = true; - } elseif (($base_url != '' && Utils::startsWith($url_path, $base_url)) || - $url_path == '/' || - Utils::startsWith($url_path, '#')) { - $url_path = $base_url . $url_path; + } elseif ($url_path == '' && isset($url['fragment'])) { + $external = true; + } elseif (($base_url != '' && Utils::startsWith($url_path, $base_url)) || $url_path == '/') { + $url_path = $base_url . $url_path; } else { // see if page is relative to this or absolute diff --git a/tests/unit/Grav/Common/Markdown/ParsedownTest.php b/tests/unit/Grav/Common/Markdown/ParsedownTest.php index fd3d4e36a..d52c0612f 100644 --- a/tests/unit/Grav/Common/Markdown/ParsedownTest.php +++ b/tests/unit/Grav/Common/Markdown/ParsedownTest.php @@ -228,7 +228,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->parsedown->text('[With Query](?foo=bar)')); $this->assertSame('

With Param

', $this->parsedown->text('[With Param](/foo:bar)')); - $this->assertSame('

With Anchor

', + $this->assertSame('

With Anchor

', $this->parsedown->text('[With Anchor](#foo)')); $this->config->set('system.languages.supported', ['fr','en']); @@ -244,7 +244,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->parsedown->text('[With Query](?foo=bar)')); $this->assertSame('

With Param

', $this->parsedown->text('[With Param](/foo:bar)')); - $this->assertSame('

With Anchor

', + $this->assertSame('

With Anchor

', $this->parsedown->text('[With Anchor](#foo)')); } @@ -256,7 +256,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->grav['language'] = new Language($this->grav); $this->uri->initializeWithURL('http://testing.dev/fr/item2/item2-2')->init(); - $this->assertSame('

Current Anchor

', + $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); @@ -275,12 +275,12 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->grav['language'] = new Language($this->grav); $this->uri->initializeWithURL('http://testing.dev/fr/item2/item2-2')->init(); + $this->assertSame('

Current Anchor

', + $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Peer Anchor

', $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); - $this->assertSame('

Current Anchor

', - $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); @@ -320,7 +320,7 @@ class ParsedownTest extends \Codeception\TestCase\Test { $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); - $this->assertSame('

Current Anchor

', + $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); @@ -335,19 +335,16 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->config->set('system.absolute_urls', true); $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); + $this->assertSame('

Current Anchor

', + $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Peer Anchor

', $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); - $this->assertSame('

Current Anchor

', - $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); } - - - public function testAnchorLinksWithPortAbsoluteUrls() { $this->config->set('system.absolute_urls', true); @@ -357,7 +354,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); - $this->assertSame('

Current Anchor

', + $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); @@ -371,7 +368,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); - $this->assertSame('

Current Anchor

', + $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); @@ -386,7 +383,7 @@ class ParsedownTest extends \Codeception\TestCase\Test $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); - $this->assertSame('

Current Anchor

', + $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); From 85c8072cec954c00bb83c23f350cf1ff5f9c0de4 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 24 Feb 2016 14:53:50 -0700 Subject: [PATCH 08/11] Added a couple of missing cache methods - #693 --- system/src/Grav/Common/Cache.php | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/system/src/Grav/Common/Cache.php b/system/src/Grav/Common/Cache.php index e938c32b9..71f94e4fb 100644 --- a/system/src/Grav/Common/Cache.php +++ b/system/src/Grav/Common/Cache.php @@ -228,6 +228,32 @@ class Cache extends Getters } } + /** + * Deletes an item in the cache based on the id + * + * @param $id the id of the cached data entry + * @return bool true if the item was deleted successfully + */ + public function delete($id) + { + if ($this->enabled) { + return $this->driver->delete($id); + } + } + + /** + * Returns a boolean state of whether or not the item exists in the cache based on id key + * + * @param $id the id of the cached data entry + * @return bool true if the cached items exists + */ + public function contains($id) + { + if ($this->enabled) { + return $this->driver->contains(($id)); + } + } + /** * Getter method to get the cache key */ From 5c2318da28bc6dfa21d6f2a3110abd0d8d0b771f Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 24 Feb 2016 15:24:21 -0700 Subject: [PATCH 09/11] handles charset in metadata --- system/src/Grav/Common/Page/Page.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index 90c31633f..a0c3aef90 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -1324,6 +1324,8 @@ class Page if ($value) { if (in_array($key, $header_tag_http_equivs)) { $this->metadata[$key] = ['http_equiv' => $key, 'content' => htmlspecialchars($value, ENT_QUOTES)]; + } elseif ($key == 'charset') { + $this->metadata[$key] = ['charset' => htmlspecialchars($value, ENT_QUOTES)]; } else { // if it's a social metadata with separator, render as property $separator = strpos($key, ':'); From aa1b716469e11510aac434b5288c2828a6d56839 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Thu, 25 Feb 2016 16:59:39 +0100 Subject: [PATCH 10/11] Fix $grav property initialization in tests --- tests/unit/Grav/Common/InflectorTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/unit/Grav/Common/InflectorTest.php b/tests/unit/Grav/Common/InflectorTest.php index 0d74f7b40..be6f68386 100644 --- a/tests/unit/Grav/Common/InflectorTest.php +++ b/tests/unit/Grav/Common/InflectorTest.php @@ -18,7 +18,8 @@ class InflectorTest extends \Codeception\TestCase\Test protected function _before() { - $this->grav = Fixtures::get('grav'); + $grav = Fixtures::get('grav'); + $this->grav = $grav(); $this->inflector = $this->grav['inflector']; } From 74e4e4d6ee57a3e0817cb47fd7d713295672bec2 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Thu, 25 Feb 2016 17:21:07 +0100 Subject: [PATCH 11/11] Minor code improvement --- system/src/Grav/Common/Language/Language.php | 8 ++++++-- system/src/Grav/Common/Service/ConfigServiceProvider.php | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/system/src/Grav/Common/Language/Language.php b/system/src/Grav/Common/Language/Language.php index eb69adcf1..bfa880749 100644 --- a/system/src/Grav/Common/Language/Language.php +++ b/system/src/Grav/Common/Language/Language.php @@ -2,6 +2,7 @@ namespace Grav\Common\Language; use Grav\Common\Grav; +use Grav\Common\Config\Config; /** * Language and translation functionality for Grav @@ -15,7 +16,10 @@ class Language protected $fallback_languages = []; protected $default; protected $active = null; + + /** @var Config $config */ protected $config; + protected $http_accept_language; protected $lang_in_url = false; @@ -406,7 +410,7 @@ class Language } foreach ((array)$languages as $lang) { - $translation_array = (array)$this->config->getLanguages()->get($lang . '.' . $key, null); + $translation_array = (array)Grav::instance()['languages']->get($lang . '.' . $key, null); if ($translation_array && array_key_exists($index, $translation_array)) { return $translation_array[$index]; } @@ -431,7 +435,7 @@ class Language */ public function getTranslation($lang, $key, $array_support = false) { - $translation = $this->config->getLanguages()->get($lang . '.' . $key, null); + $translation = Grav::instance()['languages']->get($lang . '.' . $key, null); if (!$array_support && is_array($translation)) { return (string)array_shift($translation); } diff --git a/system/src/Grav/Common/Service/ConfigServiceProvider.php b/system/src/Grav/Common/Service/ConfigServiceProvider.php index 79c99ed00..bf51270c8 100644 --- a/system/src/Grav/Common/Service/ConfigServiceProvider.php +++ b/system/src/Grav/Common/Service/ConfigServiceProvider.php @@ -90,7 +90,7 @@ class ConfigServiceProvider implements ServiceProviderInterface public static function languages(Container $container) { - /** Setup $setup */ + /** @var Setup $setup */ $setup = $container['setup']; /** @var Config $config */