From 62b6bd485009b5dbb85b50e634ea94aa177d8d42 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Wed, 19 Nov 2014 14:14:01 +0100 Subject: controller action for recommended sites --- appinfo/application.php | 6 ++++- appinfo/routes.php | 1 + controller/pagecontroller.php | 16 +++++++++++ recommendedsites/recommendedsites.php | 40 ++++++++++++++++++++++++++++ recommendedsites/sites.en.json | 18 +++++++++++++ tests/unit/controller/PageControllerTest.php | 24 ++++++++++++++++- 6 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 recommendedsites/recommendedsites.php create mode 100644 recommendedsites/sites.en.json diff --git a/appinfo/application.php b/appinfo/application.php index 727fe2dd3..11a38ad93 100644 --- a/appinfo/application.php +++ b/appinfo/application.php @@ -62,6 +62,7 @@ use \OCA\News\ArticleEnhancer\GlobalArticleEnhancer; use \OCA\News\ArticleEnhancer\XPathArticleEnhancer; use \OCA\News\ArticleEnhancer\RegexArticleEnhancer; +use \OCA\News\RecommendedSites\RecommendedSites; class Application extends App { @@ -84,6 +85,7 @@ class Application extends App { $c->query('AppConfig'), $c->query('Config'), $c->query('L10N'), + $c->query('RecommendedSites'), $c->query('UserId') ); }); @@ -511,7 +513,9 @@ class Application extends App { ); }); - + $container->registerService('RecommendedSites', function($c) { + return new RecommendedSites(__DIR__ . '/../recommendedsites'); + }); } public function getAppConfig() { diff --git a/appinfo/routes.php b/appinfo/routes.php index 146236940..9b03cb5b7 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -22,6 +22,7 @@ $application->registerRoutes($this, ['routes' => [ ['name' => 'page#settings', 'url' => '/settings', 'verb' => 'GET'], ['name' => 'page#update_settings', 'url' => '/settings', 'verb' => 'PUT'], ['name' => 'page#manifest', 'url' => '/manifest.webapp', 'verb' => 'GET'], +['name' => 'page#recommended', 'url' => '/recommended', 'verb' => 'GET'], // admin ['name' => 'admin#update', 'url' => '/admin', 'verb' => 'PUT'], diff --git a/controller/pagecontroller.php b/controller/pagecontroller.php index 94cdeb51a..e7aea6bb1 100644 --- a/controller/pagecontroller.php +++ b/controller/pagecontroller.php @@ -23,6 +23,7 @@ use \OCP\AppFramework\Controller; use \OCA\News\Config\AppConfig; use \OCA\News\Config\Config; +use \OCA\News\RecommendedSites\RecommendedSites; class PageController extends Controller { @@ -32,6 +33,7 @@ class PageController extends Controller { private $appConfig; private $urlGenerator; private $config; + private $recommendedSites; public function __construct($appName, IRequest $request, @@ -40,6 +42,7 @@ class PageController extends Controller { AppConfig $appConfig, Config $config, IL10N $l10n, + RecommendedSites $recommendedSites, $userId){ parent::__construct($appName, $request); $this->settings = $settings; @@ -48,6 +51,7 @@ class PageController extends Controller { $this->l10n = $l10n; $this->userId = $userId; $this->config = $config; + $this->recommendedSites = $recommendedSites; } @@ -166,4 +170,16 @@ class PageController extends Controller { return $response; } + /** + * @NoAdminRequired + * @NoCSRFRequired + */ + public function recommended() { + $languageCode = $this->l10n->getLanguageCode(); + $default = 'en'; + + return $this->recommendedSites->forLanguage($languageCode, $default); + } + + } \ No newline at end of file diff --git a/recommendedsites/recommendedsites.php b/recommendedsites/recommendedsites.php new file mode 100644 index 000000000..2c59834c8 --- /dev/null +++ b/recommendedsites/recommendedsites.php @@ -0,0 +1,40 @@ + + * @author Bernhard Posselt + * @copyright Alessandro Cosentino 2012 + * @copyright Bernhard Posselt 2012, 2014 + */ + +namespace OCA\News\RecommendedSites; + +class RecommendedSites { + + private $directory; + + /** + * @param string $directory the absolute path to where the recommendation + * config files lie without a trailing slash + */ + public function __construct($directory) { + $this->directory = $directory; + } + + + public function forLanguage($languageCode, $default='en') { + $file = $this->directory . '/sites.' . $languageCode . '.json'; + + if (!file_exists($file)) { + $file = $this->directory . '/sites.' . $default . '.json'; + } + + return json_decode(file_get_contents($file), true); + } + + +} \ No newline at end of file diff --git a/recommendedsites/sites.en.json b/recommendedsites/sites.en.json new file mode 100644 index 000000000..7a0b00591 --- /dev/null +++ b/recommendedsites/sites.en.json @@ -0,0 +1,18 @@ +{ + "Tech": [ + { + "title": "ownCloud Planet", + "favicon": "http://owncloud.org/wp-content/themes/owncloudorgnew/assets/img/common/favicon.png", + "url": "http://owncloud.org/news/", + "description": "ownCloud Planet is a blog feed aggregator", + "votes": 1000 + }, + { + "title": "Slashdot", + "favicon": "http://slashdot.org/favicon.ico", + "url": "http://slashdot.org", + "description": "Slashdot: News for nerds, stuff that matters", + "votes": 500 + } + ] +} \ No newline at end of file diff --git a/tests/unit/controller/PageControllerTest.php b/tests/unit/controller/PageControllerTest.php index 477be7ead..0326ef50b 100644 --- a/tests/unit/controller/PageControllerTest.php +++ b/tests/unit/controller/PageControllerTest.php @@ -26,6 +26,7 @@ class PageControllerTest extends \PHPUnit_Framework_TestCase { private $appConfig; private $configData; private $config; + private $recommended; /** * Gets run before each test @@ -67,9 +68,13 @@ class PageControllerTest extends \PHPUnit_Framework_TestCase { '\OCA\News\Config\Config') ->disableOriginalConstructor() ->getMock(); + $this->recommended = $this->getMockBuilder( + '\OCA\News\RecommendedSites\RecommendedSites') + ->disableOriginalConstructor() + ->getMock(); $this->controller = new PageController($this->appName, $this->request, $this->settings, $this->urlGenerator, $this->appConfig, - $this->config, $this->l10n, $this->user); + $this->config, $this->l10n, $this->recommended, $this->user); } @@ -224,4 +229,21 @@ class PageControllerTest extends \PHPUnit_Framework_TestCase { } + public function testRecommended(){ + $in = 'test'; + $this->l10n->expects($this->once()) + ->method('getLanguageCode') + ->will($this->returnValue('de_DE')); + + $this->recommended->expects($this->once()) + ->method('forLanguage') + ->with($this->equalTo('de_DE'), $this->equalTo('en')) + ->will($this->returnValue($in)); + + + $out = $this->controller->recommended(); + + $this->assertEquals($in, $out); + } + } \ No newline at end of file -- cgit v1.2.3