forked from Adleraci/adlerka.top
Bruno Rybársky
1c9f5cf3c0
add additional clarification to some functions, add addNewsComment function and API, currently untested and not implemented in the client, fix a bunch of stuff that PHPStorm pointed out
66 lines
3.0 KiB
PHP
66 lines
3.0 KiB
PHP
<?php
|
|
require_once "lib/account.php";
|
|
/**
|
|
* Generates an XML sitemap as a string for a website, considering only pages that the current session
|
|
* has sufficient privileges to access. It scans directories specified in the router configuration
|
|
* for .html and .php files, and constructs a sitemap entry for each accessible page based on their
|
|
* required permission levels. This function returns the sitemap as a string and
|
|
* sets the appropriate header for XML content.
|
|
*
|
|
* @global array $routerConfig The global configuration array containing directory paths and default settings.
|
|
* @return string The XML sitemap content, properly formatted in accordance with the sitemap protocol.
|
|
*/
|
|
function generateSitemap(): string{
|
|
global $routerConfig;
|
|
|
|
$site_dirs = array_diff(scandir($routerConfig["page_dir"]), array('.', '..'));
|
|
|
|
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http";
|
|
$domain = $_SERVER['HTTP_HOST'];
|
|
$subdomain = ""; // You may need to modify this based on your subdomain logic
|
|
|
|
$sitemap = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
|
|
$sitemap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
|
|
|
|
foreach ($site_dirs as $site_dir) {
|
|
$pages_dir = array_diff(scandir($routerConfig["page_dir"] . $site_dir), array('.', '..'));
|
|
|
|
foreach ($pages_dir as $page_file) {
|
|
$page_file_tmp = explode(".", $page_file);
|
|
$page_basename = $page_file_tmp[0];
|
|
$page_file_path = $routerConfig["page_dir"] . $site_dir . "/" . $page_file;
|
|
|
|
$page_location = $protocol . "://" . $subdomain . $domain . "/" . $site_dir . "/" . $page_basename;
|
|
|
|
if ($page_file_tmp[1] == "html") {
|
|
$page_tmp = file_get_contents($page_file_path);
|
|
|
|
$pageMetadata = parsePageTag($page_tmp);
|
|
|
|
if (!empty($pageMetadata["parameters"]["minimal_permission_level"])) {
|
|
$page_required_permission = intval($pageMetadata["parameters"]["minimal_permission_level"]);
|
|
} else {
|
|
$page_required_permission = $routerConfig["page"]["default_permissions"];
|
|
}
|
|
} elseif ($page_file_tmp[1] == "php") {
|
|
$pageMetadata = getDynamicMetadata($page_file_path);
|
|
$page_required_permission = getDynamicPermission($pageMetadata);
|
|
} else {
|
|
$page_required_permission = $routerConfig["page"]["default_permissions"];
|
|
}
|
|
|
|
// Check if the user is authorized to access the page
|
|
if ($page_required_permission <= $_SESSION["privilege_level"]) {
|
|
$sitemap .= '<url>' . PHP_EOL;
|
|
$sitemap .= '<loc>' . htmlspecialchars($page_location) . '</loc>' . PHP_EOL;
|
|
// You can add other optional tags like lastmod, changefreq, priority here if needed
|
|
$sitemap .= '</url>' . PHP_EOL;
|
|
}
|
|
}
|
|
}
|
|
|
|
$sitemap .= '</urlset>' . PHP_EOL;
|
|
|
|
header('Content-type: application/xml');
|
|
return $sitemap;
|
|
} |