mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-08-11 11:04:36 +02:00
refactor: extract frontpage to template (#3130)
Also introduce usage of Response object
This commit is contained in:
@@ -38,8 +38,7 @@ class ConnectivityAction implements ActionInterface
|
||||
}
|
||||
|
||||
if (!isset($request['bridge'])) {
|
||||
print render_template('connectivity.html.php');
|
||||
return;
|
||||
return render_template('connectivity.html.php');
|
||||
}
|
||||
|
||||
$bridgeClassName = $this->bridgeFactory->sanitizeBridgeName($request['bridge']);
|
||||
@@ -48,7 +47,7 @@ class ConnectivityAction implements ActionInterface
|
||||
throw new \InvalidArgumentException('Bridge name invalid!');
|
||||
}
|
||||
|
||||
$this->reportBridgeConnectivity($bridgeClassName);
|
||||
return $this->reportBridgeConnectivity($bridgeClassName);
|
||||
}
|
||||
|
||||
private function reportBridgeConnectivity($bridgeClassName)
|
||||
@@ -80,7 +79,6 @@ class ConnectivityAction implements ActionInterface
|
||||
$retVal['successful'] = false;
|
||||
}
|
||||
|
||||
header('Content-Type: text/json');
|
||||
print Json::encode($retVal);
|
||||
return new Response(Json::encode($retVal), 200, ['Content-Type' => 'text/json']);
|
||||
}
|
||||
}
|
||||
|
@@ -44,8 +44,8 @@ class DetectAction implements ActionInterface
|
||||
$bridgeParams['bridge'] = $bridgeClassName;
|
||||
$bridgeParams['format'] = $format;
|
||||
|
||||
header('Location: ?action=display&' . http_build_query($bridgeParams), true, 301);
|
||||
return;
|
||||
$url = '?action=display&' . http_build_query($bridgeParams);
|
||||
return new Response('', 301, ['Location' => $url]);
|
||||
}
|
||||
|
||||
throw new \Exception('No bridge found for given URL: ' . $targetURL);
|
||||
|
@@ -52,8 +52,7 @@ class DisplayAction implements ActionInterface
|
||||
if (! Configuration::getConfig('cache', 'custom_timeout')) {
|
||||
unset($request['_cache_timeout']);
|
||||
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) . '?' . http_build_query($request);
|
||||
header('Location: ' . $uri, true, 301);
|
||||
return;
|
||||
return new Response('', 301, ['Location' => $uri]);
|
||||
}
|
||||
|
||||
$cache_timeout = filter_var($request['_cache_timeout'], FILTER_VALIDATE_INT);
|
||||
@@ -116,8 +115,8 @@ class DisplayAction implements ActionInterface
|
||||
|
||||
if ($mtime <= $stime) {
|
||||
// Cached data is older or same
|
||||
header('Last-Modified: ' . gmdate('D, d M Y H:i:s ', $mtime) . 'GMT', true, 304);
|
||||
return;
|
||||
$lastModified2 = gmdate('D, d M Y H:i:s ', $mtime) . 'GMT';
|
||||
return new Response('', 304, ['Last-Modified' => $lastModified2]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,11 +196,12 @@ class DisplayAction implements ActionInterface
|
||||
$format->setExtraInfos($infos);
|
||||
$lastModified = $cache->getTime();
|
||||
$format->setLastModified($lastModified);
|
||||
$headers = [];
|
||||
if ($lastModified) {
|
||||
header('Last-Modified: ' . gmdate('D, d M Y H:i:s ', $lastModified) . 'GMT');
|
||||
$headers['Last-Modified'] = gmdate('D, d M Y H:i:s ', $lastModified) . 'GMT';
|
||||
}
|
||||
header('Content-Type: ' . $format->getMimeType() . '; charset=' . $format->getCharset());
|
||||
print $format->stringify();
|
||||
$headers['Content-Type'] = $format->getMimeType() . '; charset=' . $format->getCharset();
|
||||
return new Response($format->stringify(), 200, $headers);
|
||||
}
|
||||
|
||||
private static function createGithubIssueUrl($bridge, $e, string $message): string
|
||||
|
@@ -5,91 +5,7 @@ final class FrontpageAction implements ActionInterface
|
||||
public function execute(array $request)
|
||||
{
|
||||
$showInactive = (bool) ($request['show_inactive'] ?? null);
|
||||
|
||||
$totalBridges = 0;
|
||||
$totalActiveBridges = 0;
|
||||
|
||||
$html = self::getHead()
|
||||
. self::getHeader()
|
||||
. self::getSearchbar()
|
||||
. self::getBridges($showInactive, $totalBridges, $totalActiveBridges)
|
||||
. self::getFooter($totalBridges, $totalActiveBridges, $showInactive);
|
||||
|
||||
print $html;
|
||||
}
|
||||
|
||||
private static function getHead()
|
||||
{
|
||||
return <<<EOD
|
||||
<!DOCTYPE html><html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="description" content="RSS-Bridge" />
|
||||
<title>RSS-Bridge</title>
|
||||
<link href="static/style.css" rel="stylesheet">
|
||||
<link rel="icon" type="image/png" href="static/favicon.png">
|
||||
<script src="static/rss-bridge.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', rssbridge_toggle_bridge);
|
||||
</script>
|
||||
</head>
|
||||
<body onload="rssbridge_list_search()">
|
||||
<div class="container">
|
||||
EOD;
|
||||
}
|
||||
|
||||
private static function getHeader()
|
||||
{
|
||||
$warning = '';
|
||||
|
||||
if (Debug::isEnabled()) {
|
||||
if (!Debug::isSecure()) {
|
||||
$warning .= <<<EOD
|
||||
<section class="critical-warning">Warning : Debug mode is active from any location,
|
||||
make sure only you can access RSS-Bridge.</section>
|
||||
EOD;
|
||||
} else {
|
||||
$warning .= <<<EOD
|
||||
<section class="warning">Warning : Debug mode is active from your IP address,
|
||||
your requests will bypass the cache.</section>
|
||||
EOD;
|
||||
}
|
||||
}
|
||||
|
||||
return <<<EOD
|
||||
<header>
|
||||
<div class="logo"></div>
|
||||
{$warning}
|
||||
</header>
|
||||
EOD;
|
||||
}
|
||||
|
||||
private static function getSearchbar()
|
||||
{
|
||||
$query = filter_input(INPUT_GET, 'q', \FILTER_SANITIZE_SPECIAL_CHARS);
|
||||
|
||||
return <<<EOD
|
||||
<section class="searchbar">
|
||||
<h3>Search</h3>
|
||||
<input
|
||||
type="text"
|
||||
name="searchfield"
|
||||
id="searchfield"
|
||||
placeholder="Insert URL or bridge name"
|
||||
onchange="rssbridge_list_search()"
|
||||
onkeyup="rssbridge_list_search()"
|
||||
value="{$query}"
|
||||
>
|
||||
</section>
|
||||
EOD;
|
||||
}
|
||||
|
||||
private static function getBridges($showInactive, &$totalBridges, &$totalActiveBridges)
|
||||
{
|
||||
$body = '';
|
||||
$totalActiveBridges = 0;
|
||||
$inactiveBridges = '';
|
||||
$activeBridges = 0;
|
||||
|
||||
$bridgeFactory = new BridgeFactory();
|
||||
$bridgeClassNames = $bridgeFactory->getBridgeClassNames();
|
||||
@@ -97,58 +13,22 @@ EOD;
|
||||
$formatFactory = new FormatFactory();
|
||||
$formats = $formatFactory->getFormatNames();
|
||||
|
||||
$totalBridges = count($bridgeClassNames);
|
||||
|
||||
$body = '';
|
||||
foreach ($bridgeClassNames as $bridgeClassName) {
|
||||
if ($bridgeFactory->isWhitelisted($bridgeClassName)) {
|
||||
$body .= BridgeCard::displayBridgeCard($bridgeClassName, $formats);
|
||||
$totalActiveBridges++;
|
||||
$activeBridges++;
|
||||
} elseif ($showInactive) {
|
||||
$inactiveBridges .= BridgeCard::displayBridgeCard($bridgeClassName, $formats, false) . PHP_EOL;
|
||||
$body .= BridgeCard::displayBridgeCard($bridgeClassName, $formats, false) . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
$body .= $inactiveBridges;
|
||||
|
||||
return $body;
|
||||
}
|
||||
|
||||
private static function getFooter($totalBridges, $totalActiveBridges, $showInactive)
|
||||
{
|
||||
$version = Configuration::getVersion();
|
||||
|
||||
$email = Configuration::getConfig('admin', 'email');
|
||||
$admininfo = '';
|
||||
if ($email) {
|
||||
$admininfo = <<<EOD
|
||||
<br />
|
||||
<span>
|
||||
You may email the administrator of this RSS-Bridge instance
|
||||
at <a href="mailto:{$email}">{$email}</a>
|
||||
</span>
|
||||
EOD;
|
||||
}
|
||||
|
||||
$inactive = '';
|
||||
|
||||
if ($totalActiveBridges !== $totalBridges) {
|
||||
if ($showInactive) {
|
||||
$inactive = '<a href="?show_inactive=0"><button class="small">Hide inactive bridges</button></a><br>';
|
||||
} else {
|
||||
$inactive = '<a href="?show_inactive=1"><button class="small">Show inactive bridges</button></a><br>';
|
||||
}
|
||||
}
|
||||
|
||||
return <<<EOD
|
||||
<section class="footer">
|
||||
<a href="https://github.com/rss-bridge/rss-bridge">RSS-Bridge ~ Public Domain</a><br>
|
||||
<p class="version">{$version}</p>
|
||||
{$totalActiveBridges}/{$totalBridges} active bridges.<br>
|
||||
{$inactive}
|
||||
{$admininfo}
|
||||
</section>
|
||||
</div>
|
||||
</body></html>
|
||||
EOD;
|
||||
return render(__DIR__ . '/../templates/frontpage.html.php', [
|
||||
'admin_email' => Configuration::getConfig('admin', 'email'),
|
||||
'bridges' => $body,
|
||||
'active_bridges' => $activeBridges,
|
||||
'total_bridges' => count($bridgeClassNames),
|
||||
'show_inactive' => $showInactive,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@@ -36,10 +36,7 @@ class ListAction implements ActionInterface
|
||||
'description' => $bridge->getDescription()
|
||||
];
|
||||
}
|
||||
|
||||
$list->total = count($list->bridges);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
print Json::encode($list);
|
||||
return new Response(Json::encode($list), 200, ['Content-Type' => 'application/json']);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user