zapatista.kompot.si/plugins/PicoDeprecated/plugins/PicoThemeApi1CompatPlugin.php

155 lines
5.4 KiB
PHP

<?php
/**
* This file is part of Pico. It's copyrighted by the contributors recorded
* in the version control history of the file, available from the following
* original location:
*
* <https://github.com/picocms/pico-deprecated/blob/master/plugins/PicoThemeApi1CompatPlugin.php>
*
* This file was created by splitting up an original file into multiple files,
* which in turn was previously part of the project's main repository. The
* version control history of these files apply accordingly, available from
* the following original locations:
*
* <https://github.com/picocms/pico-deprecated/blob/90ea3d5a9767f1511f165e051dd7ffb8f1b3f92e/PicoDeprecated.php>
* <https://github.com/picocms/Pico/blob/82a342ba445122182b898a2c1800f03c8d16f18c/plugins/00-PicoDeprecated.php>
*
* SPDX-License-Identifier: MIT
* License-Filename: LICENSE
*/
/**
* Maintains backward compatibility with themes using API version 1, written
* for Pico 1.0
*
* @author Daniel Rudolf
* @link http://picocms.org
* @license http://opensource.org/licenses/MIT The MIT License
* @version 2.1
*/
class PicoThemeApi1CompatPlugin extends AbstractPicoCompatPlugin
{
/**
* This plugin extends {@see PicoThemeApi2CompatPlugin}
*
* @var string[]
*/
protected $dependsOn = array('PicoThemeApi2CompatPlugin');
/**
* Lowers the page's meta headers
*
* @see PicoThemeApi1CompatPlugin::lowerFileMeta()
*
* @param string[] &$meta parsed meta data
*/
public function onMetaParsed(array &$meta)
{
$this->lowerFileMeta($meta);
}
/**
* Lowers the page's meta headers
*
* @see PicoThemeApi1CompatPlugin::lowerFileMeta()
*
* @param array &$pageData data of the loaded page
*/
public function onSinglePageLoaded(array &$pageData)
{
// don't lower the file meta of the requested page,
// it was already lowered during the onMetaParsed event
$contentDir = $this->getPico()->getConfig('content_dir');
$contentExt = $this->getPico()->getConfig('content_ext');
if ($contentDir . $pageData['id'] . $contentExt !== $this->getPico()->getRequestFile()) {
$this->lowerFileMeta($pageData['meta']);
}
}
/**
* Handles .html Twig templates and re-introcudes the Twig variables
* rewrite_url and is_front_page
*
* @param string &$templateName file name of the template
* @param array &$twigVariables template variables
*/
public function onPageRendering(&$templateName, array &$twigVariables)
{
if (!isset($twigVariables['rewrite_url'])) {
$twigVariables['rewrite_url'] = $this->getPico()->isUrlRewritingEnabled();
}
if (!isset($twigVariables['is_front_page'])) {
$contentDir = $this->getPico()->getConfig('content_dir');
$contentExt = $this->getPico()->getConfig('content_ext');
$requestFile = $this->getPico()->getRequestFile();
$twigVariables['is_front_page'] = ($requestFile === $contentDir . 'index' . $contentExt);
}
// API v2 requires themes to use .twig as file extension
// try to load the template and if this fails, try .html instead (as of API v1)
$templateNameInfo = pathinfo($templateName) + array('extension' => '');
$twig = $this->getPico()->getTwig();
try {
$twig->loadTemplate($templateName);
} catch (Twig_Error_Loader $e) {
if ($templateNameInfo['extension'] === 'twig') {
try {
$twig->loadTemplate($templateNameInfo['filename'] . '.html');
$templateName = $templateNameInfo['filename'] . '.html';
$templateNameInfo['extension'] = 'html';
} catch (Twig_Error_Loader $e) {
// template doesn't exist, Twig will very likely fail later
}
}
}
}
/**
* Lowers a page's meta headers as with Pico 1.0 and older
*
* This makes unregistered meta headers available using lowered array keys
* and matches registered meta headers in a case-insensitive manner.
*
* @param array &$meta meta data
*/
protected function lowerFileMeta(array &$meta)
{
$metaHeaders = $this->getPico()->getMetaHeaders();
// get unregistered meta
$unregisteredMeta = array();
foreach ($meta as $key => $value) {
if (!in_array($key, $metaHeaders)) {
$unregisteredMeta[$key] = &$meta[$key];
}
}
// Pico 1.0 lowered unregistered meta unsolicited...
if ($unregisteredMeta) {
$metaHeadersLowered = array_change_key_case($metaHeaders, CASE_LOWER);
foreach ($unregisteredMeta as $key => $value) {
$keyLowered = strtolower($key);
if (isset($metaHeadersLowered[$keyLowered])) {
$registeredKey = $metaHeadersLowered[$keyLowered];
if ($meta[$registeredKey] === '') {
$meta[$registeredKey] = &$unregisteredMeta[$key];
}
} elseif (!isset($meta[$keyLowered]) || ($meta[$keyLowered] === '')) {
$meta[$keyLowered] = &$unregisteredMeta[$key];
}
}
}
}
/**
* {@inheritDoc}
*/
public function getApiVersion()
{
return PicoDeprecated::API_VERSION_3;
}
}