aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Bockiii <henning@bocklage.com> 2021-06-25 21:45:25 +0200
committerGravatar GitHub <noreply@github.com> 2021-06-26 00:45:25 +0500
commitecaae735d97e240c809cd1fcda06c86675b6d659 (patch)
tree55e6dfdf39cf6bada305b95bf7fffa5fb223e57d
parent5598fef3cfdb8bca9557c21747db06bb936113da (diff)
downloadrss-bridge-ecaae735d97e240c809cd1fcda06c86675b6d659.tar.gz
rss-bridge-ecaae735d97e240c809cd1fcda06c86675b6d659.tar.zst
rss-bridge-ecaae735d97e240c809cd1fcda06c86675b6d659.zip
[core] Support for bridge maintainers' donation URLs (#2102)
-rw-r--r--actions/DisplayAction.php1
-rw-r--r--actions/ListAction.php1
-rw-r--r--config.default.ini.php7
-rw-r--r--formats/HtmlFormat.php13
-rw-r--r--lib/BridgeAbstract.php12
-rw-r--r--lib/BridgeCard.php11
-rw-r--r--lib/BridgeInterface.php7
-rw-r--r--lib/Configuration.php3
-rw-r--r--lib/FormatAbstract.php2
-rw-r--r--static/HtmlFormat.css7
10 files changed, 61 insertions, 3 deletions
diff --git a/actions/DisplayAction.php b/actions/DisplayAction.php
index 16a67d54..5db92b38 100644
--- a/actions/DisplayAction.php
+++ b/actions/DisplayAction.php
@@ -151,6 +151,7 @@ class DisplayAction extends ActionAbstract {
$infos = array(
'name' => $bridge->getName(),
'uri' => $bridge->getURI(),
+ 'donationUri' => $bridge->getDonationURI(),
'icon' => $bridge->getIcon()
);
} catch(Error $e) {
diff --git a/actions/ListAction.php b/actions/ListAction.php
index 92aef0e0..f3509564 100644
--- a/actions/ListAction.php
+++ b/actions/ListAction.php
@@ -39,6 +39,7 @@ class ListAction extends ActionAbstract {
$list->bridges[$bridgeName] = array(
'status' => $status,
'uri' => $bridge->getURI(),
+ 'donationUri' => $bridge->getDonationURI(),
'name' => $bridge->getName(),
'icon' => $bridge->getIcon(),
'parameters' => $bridge->getParameters(),
diff --git a/config.default.ini.php b/config.default.ini.php
index 7d0bdaaa..06600892 100644
--- a/config.default.ini.php
+++ b/config.default.ini.php
@@ -29,6 +29,13 @@ custom_timeout = false
; "" = Disabled (default)
email = ""
+; Show Donation information for bridges if available.
+; This will display a 'Donate' link on the bridge view
+; and a "Donate" button in the HTML view of the bridges feed.
+; true = enabled (default)
+; false = disabled
+donations = true
+
[proxy]
; Sets the proxy url (i.e. "tcp://192.168.0.0:32")
diff --git a/formats/HtmlFormat.php b/formats/HtmlFormat.php
index ee60418d..86d0657d 100644
--- a/formats/HtmlFormat.php
+++ b/formats/HtmlFormat.php
@@ -6,6 +6,8 @@ class HtmlFormat extends FormatAbstract {
$extraInfos = $this->getExtraInfos();
$title = htmlspecialchars($extraInfos['name']);
$uri = htmlspecialchars($extraInfos['uri']);
+ $donationUri = htmlspecialchars($extraInfos['donationUri']);
+ $donationsAllowed = Configuration::getConfig('admin', 'donations');
// Dynamically build buttons for all formats (except HTML)
$formatFac = new FormatFactory();
@@ -26,6 +28,17 @@ class HtmlFormat extends FormatAbstract {
$links .= $this->buildLink($format, $query, $mime) . PHP_EOL;
}
+ if($donationUri !== '' && $donationsAllowed) {
+ $buttons .= '<a href="'
+ . $donationUri
+ . '" target="_blank"><button class="highlight">Donate to maintainer</button></a>'
+ . PHP_EOL;
+ $links .= '<link href="'
+ . $donationUri
+ . ' target="_blank"" title="Donate to Maintainer" rel="alternate">'
+ . PHP_EOL;
+ }
+
$entries = '';
foreach($this->getItems() as $item) {
$entryAuthor = $item->getAuthor() ? '<br /><p class="author">by: ' . $item->getAuthor() . '</p>' : '';
diff --git a/lib/BridgeAbstract.php b/lib/BridgeAbstract.php
index 6158e3b9..917f5fec 100644
--- a/lib/BridgeAbstract.php
+++ b/lib/BridgeAbstract.php
@@ -41,6 +41,13 @@ abstract class BridgeAbstract implements BridgeInterface {
const URI = '';
/**
+ * Donation URI to the site the bridge is intended to be used for.
+ *
+ * Use {@see BridgeAbstract::getDonationURI()} to read this parameter
+ */
+ const DONATION_URI = '';
+
+ /**
* A brief description of what the bridge can do
*
* Use {@see BridgeAbstract::getDescription()} to read this parameter
@@ -342,6 +349,11 @@ abstract class BridgeAbstract implements BridgeInterface {
}
/** {@inheritdoc} */
+ public function getDonationURI(){
+ return static::DONATION_URI;
+ }
+
+ /** {@inheritdoc} */
public function getCacheTimeout(){
return static::CACHE_TIMEOUT;
}
diff --git a/lib/BridgeCard.php b/lib/BridgeCard.php
index 7bb758d5..9eb4c390 100644
--- a/lib/BridgeCard.php
+++ b/lib/BridgeCard.php
@@ -301,6 +301,10 @@ This bridge is not fetching its content through a secure connection</div>';
$icon = $bridge->getIcon();
$description = $bridge->getDescription();
$parameters = $bridge->getParameters();
+ $donationUri = $bridge->getDonationURI();
+ $maintainer = $bridge->getMaintainer();
+
+ $donationsAllowed = Configuration::getConfig('admin', 'donations');
if(defined('PROXY_URL') && PROXY_BYBRIDGE) {
$parameters['global']['_noproxy'] = array(
@@ -332,7 +336,6 @@ CARD;
// Display form with cache timeout and/or noproxy options (if enabled) when bridge has no parameters
} else if (count($parameters) === 1 && array_key_exists('global', $parameters)) {
$card .= self::getForm($bridgeName, $formats, $isActive, $isHttps, '', $parameters['global']);
-
} else {
foreach($parameters as $parameterName => $parameter) {
@@ -351,7 +354,11 @@ CARD;
}
$card .= '<label class="showless" for="showmore-' . $bridgeName . '">Show less</label>';
- $card .= '<p class="maintainer">' . $bridge->getMaintainer() . '</p>';
+ if($donationUri !== '' && $donationsAllowed) {
+ $card .= '<p class="maintainer">' . $maintainer . ' ~ <a href="' . $donationUri . '">Donate</a></p>';
+ } else {
+ $card .= '<p class="maintainer">' . $maintainer . '</p>';
+ }
$card .= '</section>';
return $card;
diff --git a/lib/BridgeInterface.php b/lib/BridgeInterface.php
index e9309dbf..70625125 100644
--- a/lib/BridgeInterface.php
+++ b/lib/BridgeInterface.php
@@ -121,6 +121,13 @@ interface BridgeInterface {
public function getURI();
/**
+ * Returns the bridge Donation URI
+ *
+ * @return string Bridge Donation URI
+ */
+ public function getDonationURI();
+
+ /**
* Returns the cache timeout
*
* @return int Cache timeout
diff --git a/lib/Configuration.php b/lib/Configuration.php
index 613089ab..7ab8294f 100644
--- a/lib/Configuration.php
+++ b/lib/Configuration.php
@@ -198,6 +198,9 @@ final class Configuration {
&& !filter_var(self::getConfig('admin', 'email'), FILTER_VALIDATE_EMAIL))
self::reportConfigurationError('admin', 'email', 'Is not a valid email address');
+ if(!is_bool(self::getConfig('admin', 'donations')))
+ self::reportConfigurationError('admin', 'donations', 'Is not a valid Boolean');
+
if(!is_string(self::getConfig('error', 'output')))
self::reportConfigurationError('error', 'output', 'Is not a valid String');
diff --git a/lib/FormatAbstract.php b/lib/FormatAbstract.php
index 5c4b87f9..29e86cb4 100644
--- a/lib/FormatAbstract.php
+++ b/lib/FormatAbstract.php
@@ -140,7 +140,7 @@ abstract class FormatAbstract implements FormatInterface {
* @param array $extraInfos {@inheritdoc}
*/
public function setExtraInfos(array $extraInfos = array()){
- foreach(array('name', 'uri', 'icon') as $infoName) {
+ foreach(array('name', 'uri', 'icon', 'donationUri') as $infoName) {
if(!isset($extraInfos[$infoName])) {
$extraInfos[$infoName] = '';
}
diff --git a/static/HtmlFormat.css b/static/HtmlFormat.css
index 4ebc79e9..77df1296 100644
--- a/static/HtmlFormat.css
+++ b/static/HtmlFormat.css
@@ -96,6 +96,13 @@ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockq
button:hover {
background: #49afff;
}
+ button.highlight {
+ background: #ff6600;
+}
+ button.highlight:hover {
+ background: #ff8a3b;
+}
+
@media screen and (max-width: 767px) {