102 lines
2.8 KiB
PHP
102 lines
2.8 KiB
PHP
<?php
|
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
|
|
* HTML Generation *
|
|
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
/**
|
|
* Figure out the correct way to link to a page, taking into account
|
|
* things like the nice URLs setting.
|
|
*
|
|
* eg make_link("post/list") becomes "/v2/index.php?q=post/list"
|
|
*/
|
|
function make_link(?string $page=null, ?string $query=null): string
|
|
{
|
|
global $config;
|
|
|
|
if (is_null($page)) {
|
|
$page = $config->get_string('main_page');
|
|
}
|
|
|
|
if (!is_null(BASE_URL)) {
|
|
$base = BASE_URL;
|
|
} elseif (NICE_URLS || $config->get_bool('nice_urls', false)) {
|
|
$base = str_replace('/'.basename($_SERVER["SCRIPT_FILENAME"]), "", $_SERVER["PHP_SELF"]);
|
|
} else {
|
|
$base = "./".basename($_SERVER["SCRIPT_FILENAME"])."?q=";
|
|
}
|
|
|
|
if (is_null($query)) {
|
|
return str_replace("//", "/", $base.'/'.$page);
|
|
} else {
|
|
if (strpos($base, "?")) {
|
|
return $base .'/'. $page .'&'. $query;
|
|
} elseif (strpos($query, "#") === 0) {
|
|
return $base .'/'. $page . $query;
|
|
} else {
|
|
return $base .'/'. $page .'?'. $query;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Take the current URL and modify some parameters
|
|
*/
|
|
function modify_current_url(array $changes): string
|
|
{
|
|
return modify_url($_SERVER['QUERY_STRING'], $changes);
|
|
}
|
|
|
|
function modify_url(string $url, array $changes): string
|
|
{
|
|
// SHIT: PHP is officially the worst web API ever because it does not
|
|
// have a built-in function to do this.
|
|
|
|
// SHIT: parse_str is magically retarded; not only is it a useless name, it also
|
|
// didn't return the parsed array, preferring to overwrite global variables with
|
|
// whatever data the user supplied. Thankfully, 4.0.3 added an extra option to
|
|
// give it an array to use...
|
|
$params = [];
|
|
parse_str($url, $params);
|
|
|
|
if (isset($changes['q'])) {
|
|
$base = $changes['q'];
|
|
unset($changes['q']);
|
|
} else {
|
|
$base = _get_query();
|
|
}
|
|
|
|
if (isset($params['q'])) {
|
|
unset($params['q']);
|
|
}
|
|
|
|
foreach ($changes as $k => $v) {
|
|
if (is_null($v) and isset($params[$k])) {
|
|
unset($params[$k]);
|
|
}
|
|
$params[$k] = $v;
|
|
}
|
|
|
|
return make_link($base, http_build_query($params));
|
|
}
|
|
|
|
|
|
/**
|
|
* Turn a relative link into an absolute one, including hostname
|
|
*/
|
|
function make_http(string $link): string
|
|
{
|
|
if (strpos($link, "://") > 0) {
|
|
return $link;
|
|
}
|
|
|
|
if (strlen($link) > 0 && $link[0] != '/') {
|
|
$link = get_base_href() . '/' . $link;
|
|
}
|
|
|
|
$protocol = is_https_enabled() ? "https://" : "http://";
|
|
$link = $protocol . $_SERVER["HTTP_HOST"] . $link;
|
|
$link = str_replace("/./", "/", $link);
|
|
|
|
return $link;
|
|
}
|