summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-11-19 14:14:01 +0100
committerBernhard Posselt <dev@bernhard-posselt.com>2014-11-19 14:14:01 +0100
commit62b6bd485009b5dbb85b50e634ea94aa177d8d42 (patch)
tree089454ad9588ef97fa96b9199ed26aaedb19d12f
parent322726c37f0cabad1a2021126d4d420bce914574 (diff)
controller action for recommended sites
-rw-r--r--appinfo/application.php6
-rw-r--r--appinfo/routes.php1
-rw-r--r--controller/pagecontroller.php16
-rw-r--r--recommendedsites/recommendedsites.php40
-rw-r--r--recommendedsites/sites.en.json18
-rw-r--r--tests/unit/controller/PageControllerTest.php24
6 files changed, 103 insertions, 2 deletions
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 @@
+<?php
+/**
+ * ownCloud - News
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Alessandro Cosentino <cosenal@gmail.com>
+ * @author Bernhard Posselt <dev@bernhard-posselt.com>
+ * @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