namespacing: \Shaarli\Feed\{Cache,CachedPage,FeedBuilder}

Signed-off-by: VirtualTam <virtualtam@flibidi.net>
This commit is contained in:
VirtualTam 2018-12-03 00:08:04 +01:00
parent f3d2f25794
commit dfc650aa23
10 changed files with 54 additions and 44 deletions

View File

@ -1,4 +1,6 @@
<?php <?php
namespace Shaarli\Feed;
/** /**
* Simple cache system, mainly for the RSS/ATOM feeds * Simple cache system, mainly for the RSS/ATOM feeds
*/ */
@ -24,7 +26,7 @@ class CachedPage
{ {
// TODO: check write access to the cache directory // TODO: check write access to the cache directory
$this->cacheDir = $cacheDir; $this->cacheDir = $cacheDir;
$this->filename = $this->cacheDir.'/'.sha1($url).'.cache'; $this->filename = $this->cacheDir . '/' . sha1($url) . '.cache';
$this->shouldBeCached = $shouldBeCached; $this->shouldBeCached = $shouldBeCached;
} }

View File

@ -1,4 +1,8 @@
<?php <?php
namespace Shaarli\Feed;
use DateTime;
use LinkDB;
/** /**
* FeedBuilder class. * FeedBuilder class.
@ -38,12 +42,12 @@ class FeedBuilder
protected $feedType; protected $feedType;
/** /**
* @var array $_SERVER. * @var array $_SERVER
*/ */
protected $serverInfo; protected $serverInfo;
/** /**
* @var array $_GET. * @var array $_GET
*/ */
protected $userInput; protected $userInput;
@ -75,10 +79,10 @@ class FeedBuilder
/** /**
* Feed constructor. * Feed constructor.
* *
* @param LinkDB $linkDB LinkDB instance. * @param LinkDB $linkDB LinkDB instance.
* @param string $feedType Type of feed. * @param string $feedType Type of feed.
* @param array $serverInfo $_SERVER. * @param array $serverInfo $_SERVER.
* @param array $userInput $_GET. * @param array $userInput $_GET.
* @param boolean $isLoggedIn True if the user is currently logged in, false otherwise. * @param boolean $isLoggedIn True if the user is currently logged in, false otherwise.
*/ */
public function __construct($linkDB, $feedType, $serverInfo, $userInput, $isLoggedIn) public function __construct($linkDB, $feedType, $serverInfo, $userInput, $isLoggedIn)
@ -124,7 +128,7 @@ class FeedBuilder
$data['show_dates'] = !$this->hideDates || $this->isLoggedIn; $data['show_dates'] = !$this->hideDates || $this->isLoggedIn;
// Remove leading slash from REQUEST_URI. // Remove leading slash from REQUEST_URI.
$data['self_link'] = escape(server_url($this->serverInfo)) $data['self_link'] = escape(server_url($this->serverInfo))
. escape($this->serverInfo['REQUEST_URI']); . escape($this->serverInfo['REQUEST_URI']);
$data['index_url'] = $pageaddr; $data['index_url'] = $pageaddr;
$data['usepermalinks'] = $this->usePermalinks === true; $data['usepermalinks'] = $this->usePermalinks === true;
$data['links'] = $linkDisplayed; $data['links'] = $linkDisplayed;
@ -142,18 +146,18 @@ class FeedBuilder
*/ */
protected function buildItem($link, $pageaddr) protected function buildItem($link, $pageaddr)
{ {
$link['guid'] = $pageaddr .'?'. $link['shorturl']; $link['guid'] = $pageaddr . '?' . $link['shorturl'];
// Check for both signs of a note: starting with ? and 7 chars long. // Check for both signs of a note: starting with ? and 7 chars long.
if ($link['url'][0] === '?' && strlen($link['url']) === 7) { if ($link['url'][0] === '?' && strlen($link['url']) === 7) {
$link['url'] = $pageaddr . $link['url']; $link['url'] = $pageaddr . $link['url'];
} }
if ($this->usePermalinks === true) { if ($this->usePermalinks === true) {
$permalink = '<a href="'. $link['url'] .'" title="'. t('Direct link') .'">'. t('Direct link') .'</a>'; $permalink = '<a href="' . $link['url'] . '" title="' . t('Direct link') . '">' . t('Direct link') . '</a>';
} else { } else {
$permalink = '<a href="'. $link['guid'] .'" title="'. t('Permalink') .'">'. t('Permalink') .'</a>'; $permalink = '<a href="' . $link['guid'] . '" title="' . t('Permalink') . '">' . t('Permalink') . '</a>';
} }
$link['description'] = format_description($link['description'], '', false, $pageaddr); $link['description'] = format_description($link['description'], '', false, $pageaddr);
$link['description'] .= PHP_EOL .'<br>&#8212; '. $permalink; $link['description'] .= PHP_EOL . '<br>&#8212; ' . $permalink;
$pubDate = $link['created']; $pubDate = $link['created'];
$link['pub_iso_date'] = $this->getIsoDate($pubDate); $link['pub_iso_date'] = $this->getIsoDate($pubDate);
@ -164,7 +168,6 @@ class FeedBuilder
$link['up_iso_date'] = $this->getIsoDate($upDate, DateTime::ATOM); $link['up_iso_date'] = $this->getIsoDate($upDate, DateTime::ATOM);
} else { } else {
$link['up_iso_date'] = $this->getIsoDate($pubDate, DateTime::ATOM); $link['up_iso_date'] = $this->getIsoDate($pubDate, DateTime::ATOM);
;
} }
// Save the more recent item. // Save the more recent item.
@ -223,11 +226,11 @@ class FeedBuilder
public function getTypeLanguage() public function getTypeLanguage()
{ {
// Use the locale do define the language, if available. // Use the locale do define the language, if available.
if (! empty($this->locale) && preg_match('/^\w{2}[_\-]\w{2}/', $this->locale)) { if (!empty($this->locale) && preg_match('/^\w{2}[_\-]\w{2}/', $this->locale)) {
$length = ($this->feedType == self::$FEED_RSS) ? 5 : 2; $length = ($this->feedType === self::$FEED_RSS) ? 5 : 2;
return str_replace('_', '-', substr($this->locale, 0, $length)); return str_replace('_', '-', substr($this->locale, 0, $length));
} }
return ($this->feedType == self::$FEED_RSS) ? 'en-en' : 'en'; return ($this->feedType === self::$FEED_RSS) ? 'en-en' : 'en';
} }
/** /**
@ -287,7 +290,7 @@ class FeedBuilder
} }
$intNb = intval($this->userInput['nb']); $intNb = intval($this->userInput['nb']);
if (! is_int($intNb) || $intNb == 0) { if (!is_int($intNb) || $intNb == 0) {
return self::$DEFAULT_NB_LINKS; return self::$DEFAULT_NB_LINKS;
} }

View File

@ -37,6 +37,7 @@
"Shaarli\\Config\\": "application/config/", "Shaarli\\Config\\": "application/config/",
"Shaarli\\Config\\Exception\\": "application/config/exception", "Shaarli\\Config\\Exception\\": "application/config/exception",
"Shaarli\\Exceptions\\": "application/exceptions", "Shaarli\\Exceptions\\": "application/exceptions",
"Shaarli\\Feed\\": "application/feed",
"Shaarli\\Security\\": "application/security" "Shaarli\\Security\\": "application/security"
} }
} }

View File

@ -57,10 +57,8 @@ require_once __DIR__ . '/vendor/autoload.php';
// Shaarli library // Shaarli library
require_once 'application/ApplicationUtils.php'; require_once 'application/ApplicationUtils.php';
require_once 'application/Cache.php';
require_once 'application/CachedPage.php';
require_once 'application/config/ConfigPlugin.php'; require_once 'application/config/ConfigPlugin.php';
require_once 'application/FeedBuilder.php'; require_once 'application/feed/Cache.php';
require_once 'application/FileUtils.php'; require_once 'application/FileUtils.php';
require_once 'application/History.php'; require_once 'application/History.php';
require_once 'application/HttpUtils.php'; require_once 'application/HttpUtils.php';
@ -76,7 +74,9 @@ require_once 'application/PluginManager.php';
require_once 'application/Router.php'; require_once 'application/Router.php';
require_once 'application/Updater.php'; require_once 'application/Updater.php';
use \Shaarli\Config\ConfigManager; use \Shaarli\Config\ConfigManager;
use Shaarli\History; use \Shaarli\Feed\CachedPage;
use \Shaarli\Feed\FeedBuilder;
use \Shaarli\History;
use \Shaarli\Languages; use \Shaarli\Languages;
use \Shaarli\Security\LoginManager; use \Shaarli\Security\LoginManager;
use \Shaarli\Security\SessionManager; use \Shaarli\Security\SessionManager;

View File

@ -11,6 +11,7 @@
use pubsubhubbub\publisher\Publisher; use pubsubhubbub\publisher\Publisher;
use Shaarli\Config\ConfigManager; use Shaarli\Config\ConfigManager;
use Shaarli\Feed\FeedBuilder;
/** /**
* Plugin init function - set the hub to the default appspot one. * Plugin init function - set the hub to the default appspot one.

View File

@ -3,9 +3,7 @@
* Link datastore tests * Link datastore tests
*/ */
use Shaarli\Exceptions\IOException; require_once 'application/feed/Cache.php';
require_once 'application/Cache.php';
require_once 'application/FileUtils.php'; require_once 'application/FileUtils.php';
require_once 'application/LinkDB.php'; require_once 'application/LinkDB.php';
require_once 'application/Utils.php'; require_once 'application/Utils.php';

View File

@ -2,16 +2,17 @@
/** /**
* Cache tests * Cache tests
*/ */
namespace Shaarli\Feed;
// required to access $_SESSION array // required to access $_SESSION array
session_start(); session_start();
require_once 'application/Cache.php'; require_once 'application/feed/Cache.php';
/** /**
* Unitary tests for cached pages * Unitary tests for cached pages
*/ */
class CacheTest extends PHPUnit_Framework_TestCase class CacheTest extends \PHPUnit\Framework\TestCase
{ {
// test cache directory // test cache directory
protected static $testCacheDir = 'sandbox/dummycache'; protected static $testCacheDir = 'sandbox/dummycache';
@ -25,16 +26,16 @@ class CacheTest extends PHPUnit_Framework_TestCase
*/ */
public function setUp() public function setUp()
{ {
if (! is_dir(self::$testCacheDir)) { if (!is_dir(self::$testCacheDir)) {
mkdir(self::$testCacheDir); mkdir(self::$testCacheDir);
} else { } else {
array_map('unlink', glob(self::$testCacheDir.'/*')); array_map('unlink', glob(self::$testCacheDir . '/*'));
} }
foreach (self::$pages as $page) { foreach (self::$pages as $page) {
file_put_contents(self::$testCacheDir.'/'.$page.'.cache', $page); file_put_contents(self::$testCacheDir . '/' . $page . '.cache', $page);
} }
file_put_contents(self::$testCacheDir.'/intru.der', 'ShouldNotBeThere'); file_put_contents(self::$testCacheDir . '/intru.der', 'ShouldNotBeThere');
} }
/** /**
@ -42,7 +43,7 @@ class CacheTest extends PHPUnit_Framework_TestCase
*/ */
public function tearDown() public function tearDown()
{ {
array_map('unlink', glob(self::$testCacheDir.'/*')); array_map('unlink', glob(self::$testCacheDir . '/*'));
rmdir(self::$testCacheDir); rmdir(self::$testCacheDir);
} }
@ -53,10 +54,10 @@ class CacheTest extends PHPUnit_Framework_TestCase
{ {
purgeCachedPages(self::$testCacheDir); purgeCachedPages(self::$testCacheDir);
foreach (self::$pages as $page) { foreach (self::$pages as $page) {
$this->assertFileNotExists(self::$testCacheDir.'/'.$page.'.cache'); $this->assertFileNotExists(self::$testCacheDir . '/' . $page . '.cache');
} }
$this->assertFileExists(self::$testCacheDir.'/intru.der'); $this->assertFileExists(self::$testCacheDir . '/intru.der');
} }
/** /**
@ -68,7 +69,7 @@ class CacheTest extends PHPUnit_Framework_TestCase
ini_set('error_log', '/dev/null'); ini_set('error_log', '/dev/null');
$this->assertEquals( $this->assertEquals(
'Cannot purge sandbox/dummycache_missing: no directory', 'Cannot purge sandbox/dummycache_missing: no directory',
purgeCachedPages(self::$testCacheDir.'_missing') purgeCachedPages(self::$testCacheDir . '_missing')
); );
ini_set('error_log', $oldlog); ini_set('error_log', $oldlog);
} }
@ -83,7 +84,7 @@ class CacheTest extends PHPUnit_Framework_TestCase
invalidateCaches(self::$testCacheDir); invalidateCaches(self::$testCacheDir);
foreach (self::$pages as $page) { foreach (self::$pages as $page) {
$this->assertFileNotExists(self::$testCacheDir.'/'.$page.'.cache'); $this->assertFileNotExists(self::$testCacheDir . '/' . $page . '.cache');
} }
$this->assertArrayNotHasKey('tags', $_SESSION); $this->assertArrayNotHasKey('tags', $_SESSION);

View File

@ -2,13 +2,12 @@
/** /**
* PageCache tests * PageCache tests
*/ */
namespace Shaarli\Feed;
require_once 'application/CachedPage.php';
/** /**
* Unitary tests for cached pages * Unitary tests for cached pages
*/ */
class CachedPageTest extends PHPUnit_Framework_TestCase class CachedPageTest extends \PHPUnit\Framework\TestCase
{ {
// test cache directory // test cache directory
protected static $testCacheDir = 'sandbox/pagecache'; protected static $testCacheDir = 'sandbox/pagecache';
@ -20,10 +19,10 @@ class CachedPageTest extends PHPUnit_Framework_TestCase
*/ */
public static function setUpBeforeClass() public static function setUpBeforeClass()
{ {
if (! is_dir(self::$testCacheDir)) { if (!is_dir(self::$testCacheDir)) {
mkdir(self::$testCacheDir); mkdir(self::$testCacheDir);
} }
self::$filename = self::$testCacheDir.'/'.sha1(self::$url).'.cache'; self::$filename = self::$testCacheDir . '/' . sha1(self::$url) . '.cache';
} }
/** /**

View File

@ -1,6 +1,11 @@
<?php <?php
require_once 'application/FeedBuilder.php'; namespace Shaarli\Feed;
use DateTime;
use LinkDB;
use ReferenceLinkDB;
require_once 'application/LinkDB.php'; require_once 'application/LinkDB.php';
/** /**
@ -8,7 +13,7 @@ require_once 'application/LinkDB.php';
* *
* Unit tests for FeedBuilder. * Unit tests for FeedBuilder.
*/ */
class FeedBuilderTest extends PHPUnit_Framework_TestCase class FeedBuilderTest extends \PHPUnit\Framework\TestCase
{ {
/** /**
* @var string locale Basque (Spain). * @var string locale Basque (Spain).
@ -90,7 +95,7 @@ class FeedBuilderTest extends PHPUnit_Framework_TestCase
$this->assertEquals('http://host.tld/?WDWyig', $link['url']); $this->assertEquals('http://host.tld/?WDWyig', $link['url']);
$this->assertRegExp('/Tue, 10 Mar 2015 11:46:51 \+\d{4}/', $link['pub_iso_date']); $this->assertRegExp('/Tue, 10 Mar 2015 11:46:51 \+\d{4}/', $link['pub_iso_date']);
$pub = DateTime::createFromFormat(DateTime::RSS, $link['pub_iso_date']); $pub = DateTime::createFromFormat(DateTime::RSS, $link['pub_iso_date']);
$up = DateTime::createFromFormat(DateTime::ATOM, $link['up_iso_date']); $up = DateTime::createFromFormat(DateTime::ATOM, $link['up_iso_date']);
$this->assertEquals($pub, $up); $this->assertEquals($pub, $up);
$this->assertContains('Stallman has a beard', $link['description']); $this->assertContains('Stallman has a beard', $link['description']);
$this->assertContains('Permalink', $link['description']); $this->assertContains('Permalink', $link['description']);