summaryrefslogtreecommitdiffstats
path: root/controller
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2013-09-11 16:42:03 +0200
committerBernhard Posselt <nukeawhale@gmail.com>2013-09-12 01:00:32 +0200
commit09f60e75c90e5734a3b11a0cca944bd42bc41665 (patch)
tree8ecdc41cd6bb7c2b338e8e82b2b1e090b4d82ce4 /controller
parent24cab805e7484a5d206974d05f8de38641435f8c (diff)
#342 implement export
Diffstat (limited to 'controller')
-rw-r--r--controller/exportcontroller.php39
1 files changed, 36 insertions, 3 deletions
diff --git a/controller/exportcontroller.php b/controller/exportcontroller.php
index 637219706..357c54d54 100644
--- a/controller/exportcontroller.php
+++ b/controller/exportcontroller.php
@@ -29,9 +29,11 @@ use \OCA\AppFramework\Controller\Controller;
use \OCA\AppFramework\Core\API;
use \OCA\AppFramework\Http\Request;
use \OCA\AppFramework\Http\TextDownloadResponse;
+use \OCA\AppFramework\Http\JSONResponse;
use \OCA\News\BusinessLayer\FeedBusinessLayer;
use \OCA\News\BusinessLayer\FolderBusinessLayer;
+use \OCA\News\BusinessLayer\ItemBusinessLayer;
use \OCA\News\Utility\OPMLExporter;
class ExportController extends Controller {
@@ -39,15 +41,18 @@ class ExportController extends Controller {
private $opmlExporter;
private $folderBusinessLayer;
private $feedBusinessLayer;
+ private $itemBusinessLayer;
public function __construct(API $api, Request $request,
FeedBusinessLayer $feedBusinessLayer,
FolderBusinessLayer $folderBusinessLayer,
+ ItemBusinessLayer $itemBusinessLayer,
OPMLExporter $opmlExporter){
parent::__construct($api, $request);
$this->feedBusinessLayer = $feedBusinessLayer;
$this->folderBusinessLayer = $folderBusinessLayer;
$this->opmlExporter = $opmlExporter;
+ $this->itemBusinessLayer = $itemBusinessLayer;
}
@@ -57,12 +62,40 @@ class ExportController extends Controller {
* @CSRFExemption
*/
public function opml(){
- $user = $this->api->getUserId();
- $feeds = $this->feedBusinessLayer->findAll($user);
- $folders = $this->folderBusinessLayer->findAll($user);
+ $userId = $this->api->getUserId();
+ $feeds = $this->feedBusinessLayer->findAll($userId);
+ $folders = $this->folderBusinessLayer->findAll($userId);
$opml = $this->opmlExporter->build($folders, $feeds)->saveXML();
return new TextDownloadResponse($opml, 'subscriptions.opml', 'text/xml');
}
+ /**
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ * @CSRFExemption
+ */
+ public function articles(){
+ $userId = $this->api->getUserId();
+ $feeds = $this->feedBusinessLayer->findAll($userId);
+ $items = $this->itemBusinessLayer->getUnreadOrStarred($userId);
+
+ // build assoc array for fast access
+ $feedsDict = array();
+ foreach($feeds as $feed) {
+ $feedsDict['feed' . $feed->getId()] = $feed;
+ }
+
+ $articles = array();
+ foreach($items as $item) {
+ array_push($articles, $item->toExport($feedsDict));
+ }
+
+ $response = new JSONResponse($articles);
+ $response->addHeader('Content-Disposition',
+ 'attachment; filename="articles.json"');
+ return $response;
+ }
+
+
} \ No newline at end of file