mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-08-30 14:49:53 +02:00
refactor: extract index.php to RssBridge.php (#2961)
* refactor: extract entry point into class * refactor: js * refactor: extract frontpage action
This commit is contained in:
parent
372eccd7b2
commit
0de1694371
5 changed files with 116 additions and 171 deletions
|
@ -1,215 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* This file is part of RSS-Bridge, a PHP project capable of generating RSS and
|
||||
* Atom feeds for websites that don't have one.
|
||||
*
|
||||
* For the full license information, please view the UNLICENSE file distributed
|
||||
* with this source code.
|
||||
*
|
||||
* @package Core
|
||||
* @license http://unlicense.org/ UNLICENSE
|
||||
* @link https://github.com/rss-bridge/rss-bridge
|
||||
*/
|
||||
|
||||
/**
|
||||
* A generator class for the home page of RSS-Bridge.
|
||||
*
|
||||
* This class generates the HTML content for displaying all bridges on the home
|
||||
* page of RSS-Bridge.
|
||||
*
|
||||
* @todo Return error if a caller creates an object of this class.
|
||||
*/
|
||||
final class BridgeList
|
||||
{
|
||||
/**
|
||||
* Create the entire home page
|
||||
*
|
||||
* @param bool $showInactive Inactive bridges are displayed on the home page,
|
||||
* if enabled.
|
||||
* @return string The home page
|
||||
*/
|
||||
public static function create($showInactive = true)
|
||||
{
|
||||
$totalBridges = 0;
|
||||
$totalActiveBridges = 0;
|
||||
|
||||
return '<!DOCTYPE html><html lang="en">'
|
||||
. BridgeList::getHead()
|
||||
. '<body onload="rssbridge_list_search()">'
|
||||
. BridgeList::getHeader()
|
||||
. BridgeList::getSearchbar()
|
||||
. BridgeList::getBridges($showInactive, $totalBridges, $totalActiveBridges)
|
||||
. BridgeList::getFooter($totalBridges, $totalActiveBridges, $showInactive)
|
||||
. '</body></html>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the document head
|
||||
*
|
||||
* @return string The document head
|
||||
*/
|
||||
private static function getHead()
|
||||
{
|
||||
return <<<EOD
|
||||
<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/search.js"></script>
|
||||
<script src="static/select.js"></script>
|
||||
<noscript>
|
||||
<style>
|
||||
.searchbar {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
</noscript>
|
||||
</head>
|
||||
EOD;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the document body for all bridge cards
|
||||
*
|
||||
* @param bool $showInactive Inactive bridges are visible on the home page if
|
||||
* enabled.
|
||||
* @param int $totalBridges (ref) Returns the total number of bridges.
|
||||
* @param int $totalActiveBridges (ref) Returns the number of active bridges.
|
||||
* @return string The document body for all bridge cards.
|
||||
*/
|
||||
private static function getBridges($showInactive, &$totalBridges, &$totalActiveBridges)
|
||||
{
|
||||
$body = '';
|
||||
$totalActiveBridges = 0;
|
||||
$inactiveBridges = '';
|
||||
|
||||
$bridgeFactory = new BridgeFactory();
|
||||
$bridgeClassNames = $bridgeFactory->getBridgeClassNames();
|
||||
|
||||
$formatFactory = new FormatFactory();
|
||||
$formats = $formatFactory->getFormatNames();
|
||||
|
||||
$totalBridges = count($bridgeClassNames);
|
||||
|
||||
foreach ($bridgeClassNames as $bridgeClassName) {
|
||||
if ($bridgeFactory->isWhitelisted($bridgeClassName)) {
|
||||
$body .= BridgeCard::displayBridgeCard($bridgeClassName, $formats);
|
||||
$totalActiveBridges++;
|
||||
} elseif ($showInactive) {
|
||||
// inactive bridges
|
||||
$inactiveBridges .= BridgeCard::displayBridgeCard($bridgeClassName, $formats, false) . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
$body .= $inactiveBridges;
|
||||
|
||||
return $body;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the document header
|
||||
*
|
||||
* @return string The document header
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the searchbar
|
||||
*
|
||||
* @return string The searchbar
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the document footer
|
||||
*
|
||||
* @param int $totalBridges The total number of bridges, shown in the footer
|
||||
* @param int $totalActiveBridges The total number of active bridges, shown
|
||||
* in the footer.
|
||||
* @param bool $showInactive Sets the 'Show active'/'Show inactive' text in
|
||||
* the footer.
|
||||
* @return string The document footer
|
||||
*/
|
||||
private static function getFooter($totalBridges, $totalActiveBridges, $showInactive)
|
||||
{
|
||||
$version = Configuration::getVersion();
|
||||
|
||||
$email = Configuration::getConfig('admin', 'email');
|
||||
$admininfo = '';
|
||||
if (!empty($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>
|
||||
EOD;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue