diff --git a/system/src/Grav/Common/Assets.php b/system/src/Grav/Common/Assets.php
index d482a4710..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::$grav['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::$grav['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..65dcfcf0e 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.
*/
@@ -228,6 +227,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
*/
@@ -245,7 +270,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 059ea92cd..b06524a82 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 @@
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/Local/Plugins.php b/system/src/Grav/Common/GPM/Local/Plugins.php
index b1c3c64a7..2f1ff1d19 100644
--- a/system/src/Grav/Common/GPM/Local/Plugins.php
+++ b/system/src/Grav/Common/GPM/Local/Plugins.php
@@ -1,6 +1,8 @@
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/GravCore.php
similarity index 93%
rename from system/src/Grav/Common/GPM/Remote/Grav.php
rename to system/src/Grav/Common/GPM/Remote/GravCore.php
index cbc3179fc..f41bb056d 100644
--- a/system/src/Grav/Common/GPM/Remote/Grav.php
+++ b/system/src/Grav/Common/GPM/Remote/GravCore.php
@@ -1,9 +1,10 @@
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 0e57ec0c6..50e89677e 100644
--- a/system/src/Grav/Common/GPM/Response.php
+++ b/system/src/Grav/Common/GPM/Response.php
@@ -2,7 +2,7 @@
namespace Grav\Common\GPM;
use Grav\Common\Utils;
-use Grav\Common\GravTrait;
+use Grav\Common\Grav;
/**
* Class Response
@@ -10,8 +10,6 @@ use Grav\Common\GravTrait;
*/
class Response
{
- use GravTrait;
-
/**
* The callback for the progress
*
@@ -199,7 +197,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;
}
@@ -267,7 +265,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/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);
}
/**
diff --git a/system/src/Grav/Common/Grav.php b/system/src/Grav/Common/Grav.php
index e8a9108aa..cfd405654 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/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/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/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 476690812..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::$grav['locator']->findResource('cache://images', true);
- $image_dir = self::$grav['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::$grav['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::$grav['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::$grav['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::$grav['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 926ac9da0..149e1b302 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.
*/
@@ -109,7 +106,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');
@@ -128,7 +125,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');
@@ -167,7 +164,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 = [];
@@ -196,7 +193,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 = [];
@@ -298,7 +295,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(),
@@ -434,7 +431,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);
}
@@ -516,11 +513,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());
$content_obj = $cache->fetch($cache_id);
@@ -543,7 +540,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) {
@@ -554,7 +551,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) {
@@ -562,7 +559,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();
@@ -638,7 +635,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)) {
@@ -666,7 +663,7 @@ class Page
*/
private function processTwig()
{
- $twig = self::getGrav()['twig'];
+ $twig = Grav::instance()['twig'];
$this->content = $twig->processPage($this, $this->content);
}
@@ -675,7 +672,7 @@ class Page
*/
private function cachePageContent()
{
- $cache = self::getGrav()['cache'];
+ $cache = Grav::instance()['cache'];
$cache_id = md5('page' . $this->id());
$cache->save($cache_id, ['content' => $this->content, 'content_meta' => $this->content_meta]);
}
@@ -855,7 +852,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;
@@ -887,11 +884,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')) {
@@ -996,7 +993,7 @@ class Page
public function media($var = null)
{
/** @var Cache $cache */
- $cache = self::getGrav()['cache'];
+ $cache = Grav::instance()['cache'];
if ($var) {
$this->media = $var;
@@ -1093,7 +1090,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;
@@ -1112,7 +1109,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;
}
/**
@@ -1294,7 +1291,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 = [];
@@ -1303,7 +1300,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
@@ -1324,6 +1321,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, ':');
@@ -1421,16 +1420,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'];
// get pre-route
if ($include_lang && $language->enabled()) {
@@ -1639,7 +1638,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;
@@ -1658,7 +1657,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;
@@ -1851,7 +1850,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');
}
@@ -1939,7 +1938,7 @@ class Page
}
/** @var Pages $pages */
- $pages = self::getGrav()['pages'];
+ $pages = Grav::instance()['pages'];
return $pages->get($this->parent);
}
@@ -1977,7 +1976,7 @@ class Page
public function children()
{
/** @var Pages $pages */
- $pages = self::getGrav()['pages'];
+ $pages = Grav::instance()['pages'];
return $pages->children($this->path());
}
@@ -2057,8 +2056,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()) {
@@ -2078,10 +2077,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 */
@@ -2134,7 +2133,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);
}
@@ -2167,9 +2166,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');
@@ -2211,7 +2210,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]));
@@ -2268,7 +2267,7 @@ class Page
}
/** @var Pages $pages */
- $pages = self::getGrav()['pages'];
+ $pages = Grav::instance()['pages'];
$parts = explode('.', $cmd);
$current = array_shift($parts);
@@ -2362,7 +2361,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];
@@ -2445,7 +2444,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();
@@ -2508,20 +2507,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/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 */
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/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/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/system/src/Grav/Common/User/Group.php b/system/src/Grav/Common/User/Group.php
index f32402b5a..068adadcc 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 e812ba91a..68fb7c4e7 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, $format = null)
{
- $config = self::getGrav()['config'];
+ $config = Grav::instance()['config'];
$dateformat = $format ?: $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,14 +500,14 @@ 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.
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'];
@@ -522,7 +521,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 70b621d38..235e402cf 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
this is my text
', '(<\/?p>)', '')); + $this->assertSame('this is my text', + $this->twig_ext->regexReplace('this is my text
', ['()','(<\/p>)'], ['',''])); } public function testArrayKeyValue() diff --git a/tests/unit/Grav/Common/UriTest.php b/tests/unit/Grav/Common/UriTest.php index 3d4046933..d3d4853c9 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 7a29cb074..33f00263a 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()