LuckyCoinkydink/include/admin/templates.inc.php
surrim 9a60f9a494
Php8 fixes for #766 (#769)
* init empty vars to avoid PHP8 warnings

* removed debug output for serendipity_session_destroy()

* init smarty fixed for PHP8

* removed optional parameters for PHP 8

* 2k11 template fixes, maybe updating smarty will solve everything

* init or test undefined variables for PHP 8

* remove only existing files

* make sure string is not empty before comparing the first letter

* check if SMARTY_DIR was already defined

* use mb_language('uni') for unicode

* fixed image filter bug

* Smarty debug fixed in external lib

* fixed archive bug

* fixed entries bug

* updated plugin versions

Co-authored-by: surrim <surrim@happyhydro.org>
2021-07-18 22:14:23 +02:00

257 lines
12 KiB
PHP

<?php
# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
# All rights reserved. See LICENSE file for licensing details
if (IN_serendipity !== true) {
die ("Don't hack!");
}
if (!serendipity_checkPermission('adminTemplates')) {
return;
}
class template_option
{
var $config = null;
var $values = null;
var $keys = null;
function introspect_config_item($item, &$bag)
{
foreach($this->config[$item] AS $key => $val) {
$bag->add($key, $val);
}
}
function get_config($item)
{
return $this->values[$item];
}
function set_config($item, $value)
{
global $serendipity;
serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}options
WHERE okey = 't_" . serendipity_db_escape_string($serendipity['template']) . "'
AND name = '" . serendipity_db_escape_string($item) . "'");
if (($this->config[$item]['scope'] ?? '') == 'global') {
serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}options
WHERE okey = 't_global'
AND name = '" . serendipity_db_escape_string($item) . "'");
serendipity_db_query("INSERT INTO {$serendipity['dbPrefix']}options (okey, name, value)
VALUES ('t_global', '" . serendipity_db_escape_string($item) . "', '" . serendipity_db_escape_string($value) . "')");
} else {
serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}options
WHERE okey = 't_" . serendipity_db_escape_string($serendipity['template']) . "'
AND name = '" . serendipity_db_escape_string($item) . "'");
serendipity_db_query("INSERT INTO {$serendipity['dbPrefix']}options (okey, name, value)
VALUES ('t_" . serendipity_db_escape_string($serendipity['template']) . "', '" . serendipity_db_escape_string($item) . "', '" . serendipity_db_escape_string($value) . "')");
}
return true;
}
function import(&$config)
{
foreach($config AS $key => $item) {
$this->config[$item['var']] = $item;
$this->keys[$item['var']] = $item['var'];
}
}
}
$data = array();
if ($serendipity['GET']['adminAction'] == 'editConfiguration') {
$data["adminAction"] = "editConfiguration";
}
if (($serendipity['GET']['adminAction'] == 'install' || $serendipity['GET']['adminAction'] == 'install-frontend' || $serendipity['GET']['adminAction'] == 'install-backend') && serendipity_checkFormToken()) {
serendipity_plugin_api::hook_event('backend_templates_fetchtemplate', $serendipity);
$themeInfo = serendipity_fetchTemplateInfo(serendipity_specialchars($serendipity['GET']['theme']));
// A separate hook is used post installation, for plugins to possibly perform some actions
serendipity_plugin_api::hook_event('backend_templates_install', $serendipity['GET']['theme'], $themeInfo);
if ($serendipity['GET']['adminAction'] == 'install' || $serendipity['GET']['adminAction'] == 'install-frontend') {
serendipity_set_config_var('template', serendipity_specialchars($serendipity['GET']['theme']));
}
if ($serendipity['GET']['adminAction'] == 'install-backend' && $themeInfo['custom_admin_interface'] == YES) {
serendipity_set_config_var('template_backend', serendipity_specialchars($serendipity['GET']['theme']));
} else {
// template_engine was set by default to default, which screws up the fallback chain (to the default-template first)
// The "Engine" now only applies to FRONTEND themes. Backend themes will always fall back to our default backend theme only, to ensure proper backend operation.
serendipity_set_config_var('template_engine', null);
if ($themeInfo['engine'] ?? false) {
serendipity_set_config_var('template_engine', $themeInfo['engine']);
}
}
serendipity_set_config_var('last_template_change', time());
$data["adminAction"] = "install";
$data["install_template"] = serendipity_specialchars($serendipity['GET']['theme']);
}
if ( @file_exists($serendipity['serendipityPath'] . $serendipity['templatePath'] . $serendipity['template'] .'/layout.php') ) {
$data["deprecated"] = true;
}
$data["cur_template"] = $serendipity['template'];
$data["cur_template_backend"] = $serendipity['template_backend'];
$data['cur_template_info'] = serendipity_fetchTemplateInfo($serendipity['template']);
// NOTE: config.inc.php currently only applies to frontend configuration. Backend configuration is not planned yet, and would preferably use a "config_backend.inc.php" file!
if (file_exists($serendipity['serendipityPath'] . $serendipity['templatePath'] . $data['cur_template_info']['custom_config_engine'] . '/config.inc.php')) {
serendipity_smarty_init();
$old_template_config_groups = $template_config_groups;
include_once $serendipity['serendipityPath'] . $serendipity['templatePath'] . $data['cur_template_info']['custom_config_engine'] . '/config.inc.php';
// in case of theme switch, check to unset config_group array
if ($serendipity['GET']['adminAction'] == 'install' && $serendipity['GET']['adminModule'] == 'templates') {
// array diff - but do not do this for bulletproof, as this is the only one which needs them in case of reloads (temporary)
if($old_template_config_groups === $template_config_groups && $serendipity['GET']['theme'] != 'bulletproof') {
$template_config_groups = NULL; // force destroy previouses config_group array!
}
}
unset($old_template_config_groups);
} else {
if ($serendipity['GET']['adminAction'] == 'install' && $serendipity['GET']['adminModule'] == 'templates') {
#include_once $serendipity['serendipityPath'] . $serendipity['templatePath'] . '/default/config_fallback.inc.php';
$template_config_groups = NULL;
$template_config = NULL;
$template_loaded_config = NULL;
}
}
if (is_array($template_config)) {
serendipity_plugin_api::hook_event('backend_templates_configuration_top', $template_config);
$data["has_config"] = true;
if (isset($serendipity['POST']['adminAction']) && $serendipity['POST']['adminAction'] == 'configure' && serendipity_checkFormToken()) {
$storage = new template_option();
$storage->import($template_config);
foreach($serendipity['POST']['template'] AS $option => $value) {
$storage->set_config($option, $value);
}
$data["adminAction"] = "configure";
$data["save_time"] = sprintf(SETTINGS_SAVED_AT, serendipity_strftime('%H:%M:%S'));
}
$data["form_token"] = serendipity_setFormToken();
include_once S9Y_INCLUDE_PATH . 'include/functions_plugins_admin.inc.php';
$template_vars =& serendipity_loadThemeOptions($template_config);
$template_options = new template_option();
$template_options->import($template_config);
$template_options->values =& $template_vars;
$data["configuration"] = serendipity_plugin_config(
$template_options,
$template_vars,
$serendipity['template'],
$serendipity['template'],
$template_options->keys,
true,
true,
true,
true,
'template',
$template_config_groups
);
serendipity_plugin_api::hook_event('backend_templates_configuration_bottom', $template_config);
} else {
serendipity_plugin_api::hook_event('backend_templates_configuration_none', $template_config);
}
$i = 0;
$stack = array();
serendipity_plugin_api::hook_event('backend_templates_fetchlist', $stack);
$themes = serendipity_fetchTemplates();
$data['templates'] = array();
$data['recommended_templates'] = array();
foreach($themes AS $theme) {
$stack[$theme] = serendipity_fetchTemplateInfo($theme);
}
ksort($stack);
foreach ($stack as $theme => $info) {
/* Sorry, but we don't display engines */
if ( isset($info['engine']) && strtolower($info['engine']) == 'yes') {
continue;
}
$data['templates'][$theme]['info'] = $info;
foreach(array('', '_backend') as $backendId) {
if (file_exists($serendipity["serendipityPath"] . $serendipity["templatePath"] . $theme . "/preview${backendId}_fullsize.jpg")) {
$data["templates"][$theme]["fullsize${backendId}_preview"] = $serendipity["baseURL"] . $serendipity["templatePath"] . $theme . "/preview${backendId}_fullsize.jpg";
} elseif (!empty($info["preview{$backendId}_fullsizeURL"])) { // preview{$backendId}_fullsizeURL is not actually set in spartacus yet
if (file_exists($serendipity["serendipityPath"] . "/templates_c/template_cache/". $theme ."{$backendId}.jpg")) {
$data["templates"][$theme]["fullsize${backendId}_preview"] = $serendipity["baseURL"] . "templates_c/template_cache/". $theme ."{$backendId}.jpg";
} else {
$data["templates"][$theme]["fullsize${backendId}_preview"] = $info["preview{$backendId}_fullsizeURL"];
}
}
$previewType = '.png';
if ($backendId) {
$previewType = '.jpg';
}
if (file_exists($serendipity["serendipityPath"] . $serendipity["templatePath"] . $theme . "/preview${backendId}${previewType}")) {
$data["templates"][$theme]["preview${backendId}"] = $serendipity["templatePath"] . $theme . "/preview${backendId}${previewType}";
} elseif (!empty($info["previewURL"])) {
$data["templates"][$theme]["preview${backendId}"] = $info["previewURL${backendId}"] ?? null;
}
if (isset($info['demoURL']) && $info['demoURL']) {
$data['templates'][$theme]['demoURL'] = $info['demoURL'];
} else {
$data['templates'][$theme]['demoURL'] = null;
}
}
$unmetRequirements = array();
if ( isset($info['require serendipity']) && version_compare($info['require serendipity'], serendipity_getCoreVersion($serendipity['version']), '>') ) {
$unmetRequirements[] = 'Serendipity '. $info['require serendipity'];
$data['templates'][$theme]['unmetRequirements'] = sprintf(UNMET_REQUIREMENTS, implode(', ', $unmetRequirements));
}
if (isset($info['recommended']) && $info['recommended']) {
$data['recommended_templates'][$theme] = $data['templates'][$theme];
if ($theme != $serendipity['template'] && $theme != $serendipity['template_backend']) {
unset($data['templates'][$theme]);
}
}
}
uasort($data['templates'], function($a, $b) {
return strnatcasecmp($a['info']['name'], $b['info']['name']);
});
$data['cur_tpl'] = $data['templates'][$serendipity['template']];
$data['cur_tpl_backend'] = $data['templates'][$serendipity['template_backend']];
$data['urltoken'] = serendipity_setFormToken('url');
unset($data['templates'][$serendipity['template']]);
if ($serendipity['template'] != $serendipity['template_backend'] && isset($data['recommended_templates'][$serendipity['template_backend']]) && isset($data['templates'][$serendipity['template_backend']])) {
// when we could not unset a template because it is a backend template, and when that template is also a recommended template, then it will now
// be in recommended and in the normal tmeplate list. We just detected that and have to remove it
unset($data['templates'][$serendipity['template_backend']]);
}
unset($data['recommended_templates'][$serendipity['template']]);
# php 8 compat section
if (! isset($data['adminAction'])) { $data['adminAction'] = null; }
if (! isset($data['deprecated'])) { $data['deprecated'] = null; }
echo serendipity_smarty_show('admin/templates.inc.tpl', $data);
/* vim: set sts=4 ts=4 expandtab : */