/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Page
/Pages.php
$sort_flags = SORT_REGULAR;
break;
case 'publish_date':
$list[$key] = $child->publishDate();
$sort_flags = SORT_REGULAR;
break;
case 'unpublish_date':
$list[$key] = $child->unpublishDate();
$sort_flags = SORT_REGULAR;
break;
case 'slug':
$list[$key] = $child->slug();
break;
case 'basename':
$list[$key] = basename($key);
break;
case 'folder':
$list[$key] = $child->folder();
break;
case (is_string($header_query[0])):
$child_header = new Header((array)$child->header());
$header_value = $child_header->get($header_query[0]);
if (is_array($header_value)) {
$list[$key] = implode(',',$header_value);
} elseif ($header_value) {
$list[$key] = $header_value;
} else {
$list[$key] = $header_default ?: $key;
}
$sort_flags = $sort_flags ?: SORT_REGULAR;
break;
case 'manual':
case 'default':
default:
$list[$key] = $key;
$sort_flags = $sort_flags ?: SORT_REGULAR;
}
}
if (!$sort_flags) {
Arguments
"Trying to access array offset on value of type null"
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Page
/Pages.php
$sort_flags = SORT_REGULAR;
break;
case 'publish_date':
$list[$key] = $child->publishDate();
$sort_flags = SORT_REGULAR;
break;
case 'unpublish_date':
$list[$key] = $child->unpublishDate();
$sort_flags = SORT_REGULAR;
break;
case 'slug':
$list[$key] = $child->slug();
break;
case 'basename':
$list[$key] = basename($key);
break;
case 'folder':
$list[$key] = $child->folder();
break;
case (is_string($header_query[0])):
$child_header = new Header((array)$child->header());
$header_value = $child_header->get($header_query[0]);
if (is_array($header_value)) {
$list[$key] = implode(',',$header_value);
} elseif ($header_value) {
$list[$key] = $header_value;
} else {
$list[$key] = $header_default ?: $key;
}
$sort_flags = $sort_flags ?: SORT_REGULAR;
break;
case 'manual':
case 'default':
default:
$list[$key] = $key;
$sort_flags = $sort_flags ?: SORT_REGULAR;
}
}
if (!$sort_flags) {
Arguments
8
"Trying to access array offset on value of type null"
"/home/erq/retraite.erq.qc.ca/system/src/Grav/Common/Page/Pages.php"
1242
array:11 [
"path" => "/home/erq/retraite.erq.qc.ca/user/pages/01.home"
"pages" => array:17 [
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/06._conferencier" => array:1 [
"slug" => "_conferencier"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/10._inscription" => array:1 [
"slug" => "_inscription"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/05._conference" => array:1 [
"slug" => "_conference"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/_photos-2018" => array:1 [
"slug" => "_photos-2018"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/03._30-ans" => array:1 [
"slug" => "_30-ans"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/09._tarifs" => array:1 [
"slug" => "_tarifs"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/14._photos-2013" => array:1 [
"slug" => "_photos-2013"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/11._QuoiApporter" => array:1 [
"slug" => "_quoiapporter"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/13._photos-2012" => array:1 [
"slug" => "_photos-2012"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/01._hero" => array:1 [
"slug" => "_hero"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/12._contact" => array:1 [
"slug" => "_contact"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/07._lieu" => array:1 [
"slug" => "_lieu"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/04._theme" => array:1 [
"slug" => "_theme"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/08._hebergement" => array:1 [
"slug" => "_hebergement"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/06._horaire" => array:1 [
"slug" => "_horaire"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/15._photos-2014" => array:1 [
"slug" => "_photos-2014"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/02._bienvenue" => array:1 [
"slug" => "_bienvenue"
]
]
"order_by" => "default"
"manual" => []
"sort_flags" => null
"list" => []
"header_default" => null
"header_query" => null
"info" => array:1 [
"slug" => "_conferencier"
]
"key" => "/home/erq/retraite.erq.qc.ca/user/pages/01.home/06._conferencier"
"child" => Page {}
]
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Page
/Pages.php
* @return array
*/
public function sort(Page $page, $order_by = null, $order_dir = null, $sort_flags = null)
{
if ($order_by === null) {
$order_by = $page->orderBy();
}
if ($order_dir === null) {
$order_dir = $page->orderDir();
}
$path = $page->path();
$children = isset($this->children[$path]) ? $this->children[$path] : [];
if (!$children) {
return $children;
}
if (!isset($this->sort[$path][$order_by])) {
$this->buildSort($path, $children, $order_by, $page->orderManual(), $sort_flags);
}
$sort = $this->sort[$path][$order_by];
if ($order_dir !== 'asc') {
$sort = array_reverse($sort);
}
return $sort;
}
/**
* @param Collection $collection
* @param $orderBy
* @param string $orderDir
* @param null $orderManual
*
* @return array
* @internal
*/
Arguments
"/home/erq/retraite.erq.qc.ca/user/pages/01.home"
array:17 [
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/06._conferencier" => array:1 [
"slug" => "_conferencier"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/10._inscription" => array:1 [
"slug" => "_inscription"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/05._conference" => array:1 [
"slug" => "_conference"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/_photos-2018" => array:1 [
"slug" => "_photos-2018"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/03._30-ans" => array:1 [
"slug" => "_30-ans"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/09._tarifs" => array:1 [
"slug" => "_tarifs"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/14._photos-2013" => array:1 [
"slug" => "_photos-2013"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/11._QuoiApporter" => array:1 [
"slug" => "_quoiapporter"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/13._photos-2012" => array:1 [
"slug" => "_photos-2012"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/01._hero" => array:1 [
"slug" => "_hero"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/12._contact" => array:1 [
"slug" => "_contact"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/07._lieu" => array:1 [
"slug" => "_lieu"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/04._theme" => array:1 [
"slug" => "_theme"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/08._hebergement" => array:1 [
"slug" => "_hebergement"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/06._horaire" => array:1 [
"slug" => "_horaire"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/15._photos-2014" => array:1 [
"slug" => "_photos-2014"
]
"/home/erq/retraite.erq.qc.ca/user/pages/01.home/02._bienvenue" => array:1 [
"slug" => "_bienvenue"
]
]
"default"
[]
null
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Page
/Pages.php
$page->routable(false);
}
// Override the modified time if modular
if ($page->template() === 'modular') {
foreach ($page->collection() as $child) {
$modified = $child->modified();
if ($modified > $last_modified) {
$last_modified = $modified;
}
}
}
// Override the modified and ID so that it takes the latest change into account
$page->modified($last_modified);
$page->id($last_modified . md5($page->filePath()));
// Sort based on Defaults or Page Overridden sort order
$this->children[$page->path()] = $this->sort($page);
return $page;
}
/**
* @internal
*/
protected function buildRoutes()
{
/** @var $taxonomy Taxonomy */
$taxonomy = $this->grav['taxonomy'];
// Get the home route
$home = self::resetHomeRoute();
// Build routes and taxonomy map.
/** @var $page Page */
foreach ($this->instances as $page) {
if (!$page->root()) {
// process taxonomy
Arguments
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Page
/Pages.php
$this->grav->fireEvent('onPageProcessed', new Event(['page' => $page]));
}
}
// Now handle all the folders under the page.
/** @var \FilesystemIterator $file */
foreach ($folders as $file) {
$filename = $file->getFilename();
// if folder contains separator, continue
if (Utils::contains($file->getFilename(), $config->get('system.param_sep', ':'))) {
continue;
}
if (!$page->path()) {
$page->path($file->getPath());
}
$path = $directory . DS . $filename;
$child = $this->recurse($path, $page);
if (Utils::startsWith($filename, '_')) {
$child->routable(false);
}
$this->children[$page->path()][$child->path()] = ['slug' => $child->slug()];
if ($config->get('system.pages.events.page')) {
$this->grav->fireEvent('onFolderProcessed', new Event(['page' => $page]));
}
}
// Set routability to false if no page found
if (!$content_exists) {
$page->routable(false);
}
// Override the modified time if modular
if ($page->template() === 'modular') {
foreach ($page->collection() as $child) {
Arguments
"/home/erq/retraite.erq.qc.ca/user/pages/01.home"
Page {}
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Page
/Pages.php
} else {
// If pages was found in cache, set the taxonomy
$this->grav['debugger']->addMessage('Page cache hit.');
$taxonomy->taxonomy($taxonomy_map);
}
} else {
$this->recurse($pages_dir);
$this->buildRoutes();
}
}
/**
* Accessible method to manually reset the pages cache
*
* @param $pages_dir
*/
public function resetPages($pages_dir)
{
$this->recurse($pages_dir);
$this->buildRoutes();
// cache if needed
if ($this->grav['config']->get('system.cache.enabled')) {
/** @var Cache $cache */
$cache = $this->grav['cache'];
/** @var Taxonomy $taxonomy */
$taxonomy = $this->grav['taxonomy'];
// save pages, routes, taxonomy, and sort to cache
$cache->save($this->pages_cache_id, [$this->instances, $this->routes, $this->children, $taxonomy->taxonomy(), $this->sort]);
}
}
/**
* Recursive function to load & build page relationships.
*
* @param string $directory
* @param Page|null $parent
*
Arguments
"/home/erq/retraite.erq.qc.ca/user/pages"
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Page
/Pages.php
$hash = 0;
break;
case 'folder':
$hash = Folder::lastModifiedFolder($pages_dir);
break;
case 'hash':
$hash = Folder::hashAllFiles($pages_dir);
break;
default:
$hash = Folder::lastModifiedFile($pages_dir);
}
$this->pages_cache_id = md5($pages_dir . $hash . $language->getActive() . $config->checksum());
list($this->instances, $this->routes, $this->children, $taxonomy_map, $this->sort) = $cache->fetch($this->pages_cache_id);
if (!$this->instances) {
$this->grav['debugger']->addMessage('Page cache missed, rebuilding pages..');
// recurse pages and cache result
$this->resetPages($pages_dir, $this->pages_cache_id);
} else {
// If pages was found in cache, set the taxonomy
$this->grav['debugger']->addMessage('Page cache hit.');
$taxonomy->taxonomy($taxonomy_map);
}
} else {
$this->recurse($pages_dir);
$this->buildRoutes();
}
}
/**
* Accessible method to manually reset the pages cache
*
* @param $pages_dir
*/
public function resetPages($pages_dir)
{
$this->recurse($pages_dir);
Arguments
"/home/erq/retraite.erq.qc.ca/user/pages"
"b4be2acde5edaa54399033cccd093b02"
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Page
/Pages.php
}
return $this->baseUrl($lang, $absolute) . Uri::filterPath($route);
}
/**
* Class initialization. Must be called before using this class.
*/
public function init()
{
$config = $this->grav['config'];
$this->ignore_files = $config->get('system.pages.ignore_files');
$this->ignore_folders = $config->get('system.pages.ignore_folders');
$this->ignore_hidden = $config->get('system.pages.ignore_hidden');
$this->instances = [];
$this->children = [];
$this->routes = [];
$this->buildPages();
}
/**
* Get or set last modification time.
*
* @param int $modified
*
* @return int|null
*/
public function lastModified($modified = null)
{
if ($modified && $modified > $this->last_modified) {
$this->last_modified = $modified;
}
return $this->last_modified;
}
/**
* Returns a list of all pages.
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Processors
/PagesProcessor.php
* @copyright Copyright (C) 2015 - 2018 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Common\Processors;
use Grav\Common\Page\Page;
use RocketTheme\Toolbox\Event\Event;
class PagesProcessor extends ProcessorBase implements ProcessorInterface
{
public $id = 'pages';
public $title = 'Pages';
public function process()
{
// Dump Cache state
$this->container['debugger']->addMessage($this->container['cache']->getCacheStatus());
$this->container['pages']->init();
$this->container->fireEvent('onPagesInitialized', new Event(['pages' => $this->container['pages']]));
$this->container->fireEvent('onPageInitialized', new Event(['page' => $this->container['page']]));
/** @var Page $page */
$page = $this->container['page'];
if (!$page->routable()) {
// If no page found, fire event
$event = $this->container->fireEvent('onPageNotFound', new Event(['page' => $page]));
if (isset($event->page)) {
unset ($this->container['page']);
$this->container['page'] = $event->page;
} else {
throw new \RuntimeException('Page Not Found', 404);
}
}
}
}
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Grav.php
} elseif ($values) {
$instance = self::$instance;
foreach ($values as $key => $value) {
$instance->offsetSet($key, $value);
}
}
return self::$instance;
}
/**
* Process a request
*/
public function process()
{
// process all processors (e.g. config, initialize, assets, ..., render)
foreach ($this->processors as $processor) {
$processor = $this[$processor];
$this->measureTime($processor->id, $processor->title, function () use ($processor) {
$processor->process();
});
}
/** @var Debugger $debugger */
$debugger = $this['debugger'];
$debugger->render();
register_shutdown_function([$this, 'shutdown']);
}
/**
* Set the system locale based on the language and configuration
*/
public function setLocale()
{
// Initialize Locale if set and configured.
if ($this['language']->enabled() && $this['config']->get('system.languages.override_locale')) {
$language = $this['language']->getLanguage();
setlocale(LC_ALL, strlen($language) < 3 ? ($language . '_' . strtoupper($language)) : $language);
} elseif ($this['config']->get('system.default_locale')) {
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Grav.php
*
* @param array $values
*
* @return static
*/
protected static function load(array $values)
{
$container = new static($values);
$container['grav'] = $container;
$container['debugger'] = new Debugger();
$debugger = $container['debugger'];
// closure that measures time by wrapping a function into startTimer and stopTimer
// The debugger can be passed to the closure. Should be more performant
// then to get it from the container all time.
$container->measureTime = function ($timerId, $timerTitle, $callback) use ($debugger) {
$debugger->startTimer($timerId, $timerTitle);
$callback();
$debugger->stopTimer($timerId);
};
$container->measureTime('_services', 'Services', function () use ($container) {
$container->registerServices($container);
});
return $container;
}
/**
* Register all services
* Services are defined in the diMap. They can either only the class
* of a Service Provider or a pair of serviceKey => serviceClass that
* gets directly mapped into the container.
*
* @return void
*/
protected function registerServices()
{
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Grav.php
ob_end_flush();
@ob_flush();
flush();
}
}
// Run any time consuming tasks.
$this->fireEvent('onShutdown');
}
/**
* Magic Catch All Function
* Used to call closures like measureTime on the instance.
* Source: http://stackoverflow.com/questions/419804/closures-as-class-members
*/
public function __call($method, $args)
{
$closure = $this->$method;
call_user_func_array($closure, $args);
}
/**
* Initialize and return a Grav instance
*
* @param array $values
*
* @return static
*/
protected static function load(array $values)
{
$container = new static($values);
$container['grav'] = $container;
$container['debugger'] = new Debugger();
$debugger = $container['debugger'];
// closure that measures time by wrapping a function into startTimer and stopTimer
// The debugger can be passed to the closure. Should be more performant
Arguments
"pages"
"Pages"
Closure {
class: "Grav\Common\Grav"
this: Grav { …}
use: {
$processor: PagesProcessor {}
}
file: "/home/erq/retraite.erq.qc.ca/system/src/Grav/Common/Grav.php"
line: "131 to 133"
}
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Grav.php
ob_end_flush();
@ob_flush();
flush();
}
}
// Run any time consuming tasks.
$this->fireEvent('onShutdown');
}
/**
* Magic Catch All Function
* Used to call closures like measureTime on the instance.
* Source: http://stackoverflow.com/questions/419804/closures-as-class-members
*/
public function __call($method, $args)
{
$closure = $this->$method;
call_user_func_array($closure, $args);
}
/**
* Initialize and return a Grav instance
*
* @param array $values
*
* @return static
*/
protected static function load(array $values)
{
$container = new static($values);
$container['grav'] = $container;
$container['debugger'] = new Debugger();
$debugger = $container['debugger'];
// closure that measures time by wrapping a function into startTimer and stopTimer
// The debugger can be passed to the closure. Should be more performant
Arguments
Closure {
class: "Grav\Common\Grav"
parameters: {
$timerId: {}
$timerTitle: {}
$callback: {}
}
use: {
$debugger: Debugger {}
}
file: "/home/erq/retraite.erq.qc.ca/system/src/Grav/Common/Grav.php"
line: "372 to 376"
}
array:3 [
0 => "pages"
1 => "Pages"
2 => Closure {
class: "Grav\Common\Grav"
this: Grav { …}
use: {
$processor: PagesProcessor {}
}
file: "/home/erq/retraite.erq.qc.ca/system/src/Grav/Common/Grav.php"
line: "131 to 133"
}
]
/home
/erq
/retraite.erq.qc.ca
/system
/src
/Grav
/Common
/Grav.php
$instance = self::$instance;
foreach ($values as $key => $value) {
$instance->offsetSet($key, $value);
}
}
return self::$instance;
}
/**
* Process a request
*/
public function process()
{
// process all processors (e.g. config, initialize, assets, ..., render)
foreach ($this->processors as $processor) {
$processor = $this[$processor];
$this->measureTime($processor->id, $processor->title, function () use ($processor) {
$processor->process();
});
}
/** @var Debugger $debugger */
$debugger = $this['debugger'];
$debugger->render();
register_shutdown_function([$this, 'shutdown']);
}
/**
* Set the system locale based on the language and configuration
*/
public function setLocale()
{
// Initialize Locale if set and configured.
if ($this['language']->enabled() && $this['config']->get('system.languages.override_locale')) {
$language = $this['language']->getLanguage();
setlocale(LC_ALL, strlen($language) < 3 ? ($language . '_' . strtoupper($language)) : $language);
} elseif ($this['config']->get('system.default_locale')) {
setlocale(LC_ALL, $this['config']->get('system.default_locale'));
Arguments
"measureTime"
array:3 [
0 => "pages"
1 => "Pages"
2 => Closure {
class: "Grav\Common\Grav"
this: Grav { …}
use: {
$processor: PagesProcessor {}
}
file: "/home/erq/retraite.erq.qc.ca/system/src/Grav/Common/Grav.php"
line: "131 to 133"
}
]
/home
/erq
/retraite.erq.qc.ca
/index.php
// 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')) {
die("'mbstring' extension is not loaded. This is required for Grav to run correctly");
}
mb_internal_encoding('UTF-8');
// Get the Grav instance
$grav = Grav::instance(
array(
'loader' => $loader
)
);
// Process the page
try {
$grav->process();
} catch (\Exception $e) {
$grav->fireEvent('onFatalException', new Event(array('exception' => $e)));
throw $e;
}