From a9260f969971ac723f5e715216915deec7d3cbc6 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Fri, 11 Aug 2017 14:32:07 +0200 Subject: [PATCH] Fix API/RSS feeds --- Changelog | 1 + nntmux/http/Capabilities.php | 2 +- nntmux/http/RSS.php | 23 ++++------ nntmux/http/XML_Response.php | 83 +++++++++++++++++------------------- 4 files changed, 49 insertions(+), 60 deletions(-) diff --git a/Changelog b/Changelog index 43dde4a78..c899d5eb7 100755 --- a/Changelog +++ b/Changelog @@ -1,4 +1,5 @@ 2017-08-11 DariusIII + * Fix: Fix API/RSS feeds * Chg: Update API/RSS related classes * Chg: Revert inserting apikey into old behavior * Chg: Change the length of rsstoken (api key) diff --git a/nntmux/http/Capabilities.php b/nntmux/http/Capabilities.php index 6cd9a5631..fa08c3e6b 100755 --- a/nntmux/http/Capabilities.php +++ b/nntmux/http/Capabilities.php @@ -127,7 +127,7 @@ abstract class Capabilities if (isset($_SERVER['SERVER_NAME'])) { $serverroot = ( ($https === true ? 'https://' : 'http://') . $_SERVER['SERVER_NAME'] . - (($_SERVER['SERVER_PORT'] !== '80' && $_SERVER['SERVER_PORT'] !== '443') ? ':' . $_SERVER['SERVER_PORT'] : '') . + (((int)$_SERVER['SERVER_PORT'] !== 80 && (int)$_SERVER['SERVER_PORT'] !== 443) ? ':' . $_SERVER['SERVER_PORT'] : '') . WWW_TOP . '/' ); } diff --git a/nntmux/http/RSS.php b/nntmux/http/RSS.php index fc2bbce89..734f4bbf0 100755 --- a/nntmux/http/RSS.php +++ b/nntmux/http/RSS.php @@ -2,7 +2,6 @@ namespace nntmux\http; -use nntmux\db\DB; use nntmux\Releases; use nntmux\Category; use nntmux\NZB; @@ -19,11 +18,6 @@ Class RSS extends Capabilities */ public $releases; - /** DB class - * @var \nntmux\db\Settings - */ - public $pdo; - /** * @param array $options * @@ -38,7 +32,6 @@ Class RSS extends Capabilities ]; $options += $defaults; - $this->pdo = ($options['Settings'] instanceof DB ? $options['Settings'] : new DB()); $this->releases = ($options['Releases'] instanceof Releases ? $options['Releases'] : new Releases(['Settings' => $this->pdo])); } @@ -109,7 +102,7 @@ Class RSS extends Capabilities ($videosId > 0 ? sprintf('AND r.videos_id = %d %s', $videosId, ($catSearch === '' ? $catLimit : '')) : ''), ($aniDbID > 0 ? sprintf('AND r.anidbid = %d %s', $aniDbID, ($catSearch === '' ? $catLimit : '')) : ''), ($airDate > -1 ? sprintf('AND tve.firstaired >= DATE_SUB(CURDATE(), INTERVAL %d DAY)', $airDate) : ''), - ' LIMIT 0,' . ($offset > 100 ? 100 : $offset) + (' LIMIT 0,' . ($offset > 100 ? 100 : $offset)) ), true, NN_CACHE_EXPIRY_MEDIUM ); return $sql; @@ -163,7 +156,7 @@ Class RSS extends Capabilities Category::TV_ROOT, Category::TV_OTHER, $this->releases->showPasswords, - ' LIMIT ' . ($limit > 100 ? 100 : $limit) . ' OFFSET 0' + (' LIMIT ' . ($limit > 100 ? 100 : $limit) . ' OFFSET 0') ), true, NN_CACHE_EXPIRY_MEDIUM ); } @@ -213,7 +206,7 @@ Class RSS extends Capabilities Category::MOVIE_ROOT, Category::MOVIE_OTHER, $this->releases->showPasswords, - ' LIMIT ' . ($limit > 100 ? 100 : $limit) . ' OFFSET 0' + (' LIMIT ' . ($limit > 100 ? 100 : $limit) . ' OFFSET 0') ), true, NN_CACHE_EXPIRY_MEDIUM @@ -231,11 +224,11 @@ Class RSS extends Capabilities public function getFirstInstance($column, $table, $order) { return $this->pdo->queryOneRow( - sprintf(" - SELECT %1\$s - FROM %2\$s - WHERE %1\$s > 0 - ORDER BY %3\$s ASC", + sprintf(' + SELECT %1$s + FROM %2$s + WHERE %1$s > 0 + ORDER BY %3$s ASC', $column, $table, $order diff --git a/nntmux/http/XML_Response.php b/nntmux/http/XML_Response.php index 05cebfed0..e4a672f5d 100755 --- a/nntmux/http/XML_Response.php +++ b/nntmux/http/XML_Response.php @@ -86,17 +86,12 @@ class XML_Response */ protected $xml; - /** - * @var mixed - */ - protected $offset; - /** * XMLReturn constructor. * * @param array $options */ - public function __construct(array $options = []) + public function __construct($options = []) { $defaults = [ 'Parameters' => null, @@ -119,9 +114,9 @@ class XML_Response } /** - * @return bool + * @return bool|void */ - public function returnXML(): bool + public function returnXML() { if ($this->xml) { switch ($this->type) { @@ -152,7 +147,7 @@ class XML_Response * * @return string The XML Formatted string data */ - protected function returnCaps(): string + protected function returnCaps() { $w = $this->xml; $s = $this->server; @@ -175,7 +170,7 @@ class XML_Response * * @return string The XML Formatted string data */ - protected function returnApiRss(): string + protected function returnApiRss() { $w = $this->xml; $this->xml->startDocument('1.0', 'UTF-8'); @@ -196,7 +191,7 @@ class XML_Response /** * @return string The XML formatted registration information */ - protected function returnReg(): string + protected function returnReg() { $this->xml->startDocument('1.0', 'UTF-8'); $this->xml->startElement('register'); @@ -214,7 +209,7 @@ class XML_Response * * @param array $element An array with the name of the element and the attribute data */ - protected function addNode($element): void + protected function addNode($element) { $this->xml->startElement($element['name']); foreach ($element['data'] AS $attr => $val) { @@ -228,7 +223,7 @@ class XML_Response * * @param array $element An array with the name of the element and the attribute data */ - protected function addNodes($element): void + protected function addNodes($element) { $this->xml->startElement($element['name']); foreach ($element['data'] AS $elem => $value) { @@ -242,21 +237,21 @@ class XML_Response /** * Adds the site category listing to the XML feed */ - protected function writeCategoryListing(): void + protected function writeCategoryListing() { $this->xml->startElement('categories'); foreach ($this->server['categories'] AS $p) { $this->xml->startElement('category'); $this->xml->writeAttribute('id', $p['id']); $this->xml->writeAttribute('name', html_entity_decode($p['title'])); - if ($p['description'] !== '') { + if ($p['description'] != '') { $this->xml->writeAttribute('description', html_entity_decode($p['description'])); } foreach ($p['subcatlist'] AS $c) { $this->xml->startElement('subcat'); $this->xml->writeAttribute('id', $c['id']); $this->xml->writeAttribute('name', html_entity_decode($c['title'])); - if ($c['description'] !== '') { + if ($c['description'] != '') { $this->xml->writeAttribute('description', html_entity_decode($c['description'])); } $this->xml->endElement(); @@ -269,7 +264,7 @@ class XML_Response * Adds RSS Atom information to the XML * */ - protected function includeRssAtom(): void + protected function includeRssAtom() { switch ($this->namespace) { case 'newznab': @@ -290,7 +285,7 @@ class XML_Response /** * */ - protected function includeRssAtomLink(): void + protected function includeRssAtomLink() { $this->xml->startElement('atom:link'); $this->xml->startAttribute('href'); @@ -308,7 +303,7 @@ class XML_Response /** * Writes the channel information for the feed */ - protected function includeMetaInfo(): void + protected function includeMetaInfo() { $server = $this->server['server']; @@ -337,7 +332,7 @@ class XML_Response /** * Adds nntmux logo data to the XML */ - protected function includeImage(): void + protected function includeImage() { $this->xml->startElement('image'); $this->xml->writeAttribute('url', $this->server['server']['url'] . 'themes/shared/images/logo.png'); @@ -350,18 +345,18 @@ class XML_Response $this->xml->endElement(); } - public function includeTotalRows(): void + public function includeTotalRows() { $this->xml->startElement($this->namespace . ":response"); $this->xml->writeAttribute('offset', $this->offset); - $this->xml->writeAttribute('total', $this->releases[0]['_totalrows'] ?? 0); + $this->xml->writeAttribute('total', isset($this->releases[0]['_totalrows']) ? $this->releases[0]['_totalrows'] : 0); $this->xml->endElement(); } /** * Loop through the releases and add their info to the XML stream */ - public function includeReleases(): void + public function includeReleases() { if (is_array($this->releases) && !empty($this->releases)) { foreach ($this->releases AS $this->release) { @@ -376,7 +371,7 @@ class XML_Response /** * Writes the primary release information */ - public function includeReleaseMain(): void + public function includeReleaseMain() { $this->xml->writeElement('title', $this->release['searchname']); $this->xml->startElement('guid'); @@ -387,7 +382,7 @@ class XML_Response 'link', "{$this->server['server']['url']}getnzb/{$this->release['guid']}.nzb" . "&i={$this->parameters['uid']}" . "&r={$this->parameters['token']}" . - ((int)$this->parameters['del'] === 1 ? '&del=1' : '') + ($this->parameters['del'] == '1' ? "&del=1" : '') ); $this->xml->writeElement('comments', "{$this->server['server']['url']}details/{$this->release['guid']}#comments"); $this->xml->writeElement('pubDate', date(DATE_RSS, strtotime($this->release['adddate']))); @@ -403,7 +398,7 @@ class XML_Response 'url', "{$this->server['server']['url']}getnzb/{$this->release['guid']}.nzb" . "&i={$this->parameters['uid']}" . "&r={$this->parameters['token']}" . - ((int)$this->parameters['del'] === 1 ? '&del=1' : '') + ($this->parameters['del'] == '1' ? "&del=1" : '') ); $this->xml->writeAttribute('length', $this->release['size']); $this->xml->writeAttribute('type', 'application/x-nzb'); @@ -414,7 +409,7 @@ class XML_Response /** * Writes the Zed (newznab) specific attributes */ - protected function setZedAttributes(): void + protected function setZedAttributes() { $this->writeZedAttr('category', $this->release['categories_id']); $this->writeZedAttr('size', $this->release['size']); @@ -425,10 +420,10 @@ class XML_Response ); } - if ((int)$this->parameters['extended'] === 1) { + if ($this->parameters['extended'] == 1) { $this->writeZedAttr('files', $this->release['totalpart']); $this->writeZedAttr('poster', $this->release['fromname']); - if ($this->namespace === 'newznab' && ($this->release['videos_id'] > 0 || $this->release['tv_episodes_id'] > 0)) { + if (($this->release['videos_id'] > 0 || $this->release['tv_episodes_id'] > 0) && $this->namespace === 'newznab') { $this->setTvAttr(); } @@ -441,7 +436,7 @@ class XML_Response if (isset($this->release['predb_id']) && $this->release['predb_id'] > 0) { $this->writeZedAttr('prematch', 1); } - if (isset($this->release['nfostatus']) && (int)$this->release['nfostatus'] === 1) { + if (isset($this->release['nfostatus']) && $this->release['nfostatus'] == 1) { $this->writeZedAttr( 'info', $this->server['server']['url'] . @@ -462,7 +457,7 @@ class XML_Response /** * Writes the TV Specific attributes */ - protected function setTvAttr(): void + protected function setTvAttr() { if (!empty($this->release['title'])) { $this->writeZedAttr('title', $this->release['title']); @@ -505,7 +500,7 @@ class XML_Response */ protected function writeZedAttr($name, $value) { - $this->xml->startElement($this->namespace . ':attr'); + $this->xml->startElement($this->namespace . ":attr"); $this->xml->writeAttribute('name', $name); $this->xml->writeAttribute('value', $value); $this->xml->endElement(); @@ -515,7 +510,7 @@ class XML_Response * Writes the cData (HTML format) for the RSS feed * Also calls supplementary cData writes depending upon post process */ - protected function writeRssCdata(): void + protected function writeRssCdata() { $this->cdata = ''; @@ -543,7 +538,7 @@ class XML_Response $column = 'bookinfo_id'; break; } - if (isset($dir, $column)) { + if (isset($dir) && isset($column)) { $dcov = ($dir === 'movies' ? '-cover' : ''); $this->cdata .= "\t\n"; } - if ((int)$r['parentid'] === (int)Category::MOVIE_ROOT && $r['imdbid'] !== '') { + if ($r['parentid'] == Category::MOVIE_ROOT && $r['imdbid'] != '') { $this->writeRssMovieInfo(); - } else if ((int)$r['parentid'] === (int)Category::MUSIC_ROOT && $r['musicinfo_id'] > 0) { + } else if ($r['parentid'] == Category::MUSIC_ROOT && $r['musicinfo_id'] > 0) { $this->writeRssMusicInfo(); - } else if ((int)$r['parentid'] === (int)Category::GAME_ROOT && $r['consoleinfo_id'] > 0) { + } else if ($r['parentid'] == Category::GAME_ROOT && $r['consoleinfo_id'] > 0) { $this->writeRssConsoleInfo(); } $w->startElement('description'); - $w->writeCData($this->cdata . "\t"); + $w->writeCdata($this->cdata . "\t"); $w->endElement(); } /** * Writes the Movie Info for the RSS feed cData */ - protected function writeRssMovieInfo(): void + protected function writeRssMovieInfo() { $r = $this->release; @@ -620,7 +615,7 @@ class XML_Response /** * Writes the Music Info for the RSS feed cData */ - protected function writeRssMusicInfo(): void + protected function writeRssMusicInfo() { $r = $this->release; $tData = $cDataUrl = ''; @@ -640,7 +635,7 @@ class XML_Response {$cData} \n"; - if ($r['mu_tracks'] !== '') { + if ($r['mu_tracks'] != '') { $tracks = explode('|', $r['mu_tracks']); if (count($tracks) > 0) { foreach ($tracks AS $track) { @@ -660,7 +655,7 @@ class XML_Response /** * Writes the Console Info for the RSS feed cData */ - protected function writeRssConsoleInfo(): void + protected function writeRssConsoleInfo() { $r = $this->release; $gamesCol = ['co_genre', 'co_publisher', 'year', 'co_review']; @@ -683,7 +678,7 @@ class XML_Response * * @return string The HTML format cData */ - protected function buildCdata($columns): string + protected function buildCdata($columns) { $r = $this->release; @@ -691,7 +686,7 @@ class XML_Response foreach ($columns AS $info) { if (!empty($r[$info])) { - if ($info === 'mu_releasedate') { + if ($info == 'mu_releasedate') { $ucInfo = 'Released'; $rDate = date('Y-m-d', strtotime($r[$info])); $cData .= "
  • {$ucInfo}: {$rDate}
  • \n";