<?php namespace HashOver;
// Copyright (C) 2018-2021 Jacob Barkdull
// This file is part of HashOver.
//
// HashOver is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// HashOver is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with HashOver. If not, see <http://www.gnu.org/licenses/>.
// Setup class autoloader
setup_autoloader ();
// Instantiate HashOver class
$hashover = new \HashOver ();
// Instantiate Locale class
$hashover->locale = new Locale ($hashover->setup);
// Instantiate FileWriter class
$data_files = new DataFiles ($hashover->setup);
// Redirects the user back to where they came from
function redirect ($url = '')
{
// Check if we're redirecting to a specific URL
if (!empty ($url)) {
// If so, use it
header ('Location: ' . $url);
} else {
// If not, check if there is a redirect specified
if (!empty ($_GET['redirect'])) {
// If so, use it
header ('Location: ' . $_GET['redirect']);
} else {
// If not, redirect to moderation
header ('Location: ../moderation/');
}
}
// Exit after redirect
exit;
}
// Parse and return template files
function parse_templates ($template, $fragment, array $data, \HashOver $hashover)
{
// Parse page fragment template file
$page = $hashover->templater->parseTemplate ($fragment, $data);
// Indent page fragment by two tabs
$page = str_replace (PHP_EOL, PHP_EOL . "\t\t", $page);
// Get configured language in en-us format
$language = str_replace ('_', '-', strtolower ($hashover->setup->language));
// Fallback to English if documentation does not exist for configured language
$language = file_exists ('/docs/' . $language) ? $language : 'en-us';
// Get website from URL
$website = $hashover->setup->getRequest ('website');
// Merge some default informatin into template data
$data = array_merge ($data, array (
// HTTP root directory
'root' => rtrim ($hashover->setup->httpRoot, '/'),
// HTTP admin root directory
'admin' => $hashover->setup->getHttpPath ('admin'),
// Get website query from URL
'website-query' => $website ? '?website=' . $website : '',
// Navigation locale strings
'moderation' => $hashover->locale->text['moderation'],
'threads' => $hashover->locale->text['threads'],
'ip-blocking' => $hashover->locale->text['block-ip-addresses'],
'url-filtering' => $hashover->locale->text['filter-url-queries'],
'settings' => $hashover->locale->text['settings'],
'updates' => $hashover->locale->text['check-for-updates'],
'docs' => $hashover->locale->text['documentation'],
'logout' => $hashover->locale->text['logout'],
// Configured language in en-us format
'language' => $language,
// Parsed page template
'content' => $page
));
// Check if form has been submitted
if (!empty ($_GET['status'])) {
// If so, check if form submission was successful
if ($_GET['status'] === 'success') {
// If so, add success message locale to template data
$data['message'] = $hashover->locale->text['successful-save'];
// And add message status to template data
$data['message-status'] = 'success';
} else {
// If so, add error message locale to template data
$data['message'] = $hashover->locale->text['failed-to-save'];
// Add file permissions explanation to template data
$data['error'] = $hashover->locale->permissionsInfo ('config');
// And add message status to template data
$data['message-status'] = 'error';
}
}
// Load and parse admin template
$admin = $hashover->templater->parseTemplate ('../' . $template . '.html', $data);
// Return parsed admin template
return $admin;
}
// Exit if the user isn't logged in as admin
if ($hashover->login->userIsAdmin !== true) {
$uri = $_SERVER['REQUEST_URI'];
$uri_parts = explode ('?', $uri);
if (basename ($uri_parts[0]) !== 'login') {
redirect ('../login/?redirect=' . urlencode ($uri));
}
}