diff options
-rw-r--r-- | appinfo/app.php | 5 | ||||
-rw-r--r-- | appinfo/bootstrap.php | 139 | ||||
-rw-r--r-- | appinfo/routes.php | 201 | ||||
-rw-r--r-- | controller/foldercontroller.php | 16 | ||||
-rw-r--r-- | dependencyinjection/dicontainer.php | 70 | ||||
-rw-r--r-- | tests/controller/FolderControllerTest.php | 44 |
6 files changed, 129 insertions, 346 deletions
diff --git a/appinfo/app.php b/appinfo/app.php index be667547a..96f56f1fc 100644 --- a/appinfo/app.php +++ b/appinfo/app.php @@ -12,7 +12,6 @@ namespace OCA\News; -require_once \OC_App::getAppPath('news') . '/appinfo/bootstrap.php'; \OCP\App::addNavigationEntry( array( @@ -22,10 +21,10 @@ require_once \OC_App::getAppPath('news') . '/appinfo/bootstrap.php'; 'icon' => \OC_Helper::imagePath( 'news', 'news.svg' ), 'name' => \OC_L10N::get('news')->t('News') )); - +/* \OC_Search::registerProvider('OC_Search_Provider_News'); \OCP\Backgroundjob::addRegularTask( 'OCA\News\Backgroundjob', 'run' ); \OCP\Share::registerBackend('news_item', 'OCA\News\Share_Backend_News_Item'); - +*/ diff --git a/appinfo/bootstrap.php b/appinfo/bootstrap.php deleted file mode 100644 index ae011cc45..000000000 --- a/appinfo/bootstrap.php +++ /dev/null @@ -1,139 +0,0 @@ -<?php -/** -* ownCloud - News app -* -* @author Alessandro Cosentino -* @author Bernhard Posselt -* @copyright 2012 Alessandro Cosentino cosenal@gmail.com -* @copyright 2012 Bernhard Posselt nukeawhale@gmail.com -* -* This file is licensed under the Affero General Public License version 3 or later. -* See the COPYING-README file -* -*/ - -namespace OCA\News; - -\OC::$CLASSPATH['Pimple'] = 'apps/news/3rdparty/Pimple/Pimple.php'; - -\OC::$CLASSPATH['OC_Search_Provider_News'] = 'apps/news/lib/search.php'; -\OC::$CLASSPATH['OCA\News\Backgroundjob'] = 'apps/news/lib/backgroundjob.php'; -\OC::$CLASSPATH['OCA\News\Share_Backend_News_Item'] = 'apps/news/lib/share/item.php'; -\OC::$CLASSPATH['OCA\News\Utils'] = 'apps/news/lib/utils.php'; -\OC::$CLASSPATH['OCA\News\Security'] = 'apps/news/lib/security.php'; -\OC::$CLASSPATH['OCA\News\API'] = 'apps/news/lib/api.php'; -\OC::$CLASSPATH['OCA\News\Request'] = 'apps/news/lib/request.php'; -\OC::$CLASSPATH['OCA\News\TemplateResponse'] = 'apps/news/lib/response.php'; -\OC::$CLASSPATH['OCA\News\JSONResponse'] = 'apps/news/lib/response.php'; -\OC::$CLASSPATH['OCA\News\TextDownloadResponse'] = 'apps/news/lib/response.php'; -\OC::$CLASSPATH['OCA\News\Controller'] = 'apps/news/lib/controller.php'; - -\OC::$CLASSPATH['OCA\News\OPMLParser'] = 'apps/news/opmlparser.php'; -\OC::$CLASSPATH['OCA\News\OPMLExporter'] = 'apps/news/opmlexporter.php'; -\OC::$CLASSPATH['OCA\News\OPMLImporter'] = 'apps/news/opmlimporter.php'; - -\OC::$CLASSPATH['OCA\News\Enclosure'] = 'apps/news/db/enclosure.php'; -\OC::$CLASSPATH['OCA\News\FeedMapper'] = 'apps/news/db/feedmapper.php'; -\OC::$CLASSPATH['OCA\News\ItemMapper'] = 'apps/news/db/itemmapper.php'; -\OC::$CLASSPATH['OCA\News\FolderMapper'] = 'apps/news/db/foldermapper.php'; -\OC::$CLASSPATH['OCA\News\Folder'] = 'apps/news/db/folder.php'; -\OC::$CLASSPATH['OCA\News\Feed'] = 'apps/news/db/feed.php'; -\OC::$CLASSPATH['OCA\News\Item'] = 'apps/news/db/item.php'; -\OC::$CLASSPATH['OCA\News\Collection'] = 'apps/news/db/collection.php'; -\OC::$CLASSPATH['OCA\News\FeedType'] = 'apps/news/db/feedtype.php'; -\OC::$CLASSPATH['OCA\News\StatusFlag'] = 'apps/news/db/statusflag.php'; - -\OC::$CLASSPATH['OCA\News\NewsController'] = 'apps/news/controller/news.controller.php'; -\OC::$CLASSPATH['OCA\News\NewsAjaxController'] = 'apps/news/controller/news.ajax.controller.php'; - -\OC::$CLASSPATH['OCA\News\FolderBl'] = 'apps/news/folder.bl.php'; -\OC::$CLASSPATH['OCA\News\FeedBl'] = 'apps/news/feed.bl.php'; - -\OC::$CLASSPATH['OCA\News\FolderApi'] = 'apps/news/external_api/folder.php'; -\OC::$CLASSPATH['OCA\News\FeedApi'] = 'apps/news/external_api/feed.php'; - - -/** - * @return a new DI container with prefilled values for the news app - */ -function createDIContainer(){ - $newsContainer = new \Pimple(); - - /** - * CONSTANTS - */ - $newsContainer['AppName'] = 'news'; - - - /** - * CLASSES - */ - $newsContainer['API'] = $newsContainer->share(function($c){ - return new API($c['AppName']); - }); - - - $newsContainer['Request'] = $newsContainer->share(function($c){ - return new Request($_GET, $_POST, $_FILES); - }); - - - $newsContainer['Security'] = $newsContainer->share(function($c) { - return new Security($c['AppName']); - }); - - - /** - * MAPPERS - */ - $newsContainer['ItemMapper'] = $newsContainer->share(function($c){ - return new ItemMapper($c['API']->getUserId()); - }); - - $newsContainer['FeedMapper'] = $newsContainer->share(function($c){ - return new FeedMapper($c['API']->getUserId()); - }); - - $newsContainer['FolderMapper'] = $newsContainer->share(function($c){ - return new FolderMapper($c['API']->getUserId()); - }); - - - /** - * CONTROLLERS - */ - $newsContainer['NewsController'] = function($c){ - return new NewsController($c['Request'], $c['API'], $c['FeedMapper'], - $c['FolderMapper']); - }; - - $newsContainer['NewsAjaxController'] = function($c){ - return new NewsAjaxController($c['Request'], $c['API'], $c['FeedMapper'], - $c['FolderMapper'], $c['ItemMapper']); - }; - - /** - * BUSINESS LAYER OBJECTS - */ - $newsContainer['FolderBl'] = $newsContainer->share(function($c){ - return new FolderBl($c['FolderMapper']); - }); - - $newsContainer['FeedBl'] = $newsContainer->share(function($c){ - return new FeedBl($c['FeedMapper']); - }); - - /** - * EXTERNAL API LAYER - */ - $newsContainer['FolderApi'] = $newsContainer->share(function($c){ - return new FolderApi($c['FolderBl']); - }); - - $newsContainer['FeedApi'] = $newsContainer->share(function($c){ - return new FeedApi($c['FeedBl']); - }); - - - return $newsContainer; -}
\ No newline at end of file diff --git a/appinfo/routes.php b/appinfo/routes.php index 767e59f09..ab9e173fc 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -1,206 +1,53 @@ <?php + /** -* ownCloud - News app +* ownCloud - News * +* @author Alessandro Cosentino * @author Bernhard Posselt -* Copyright (c) 2012 - Bernhard Posselt <nukeawhale@gmail.com> +* @copyright 2012 Alessandro Cosentino cosenal@gmail.com +* @copyright 2012 Bernhard Posselt nukeawhale@gmail.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. * -* This file is licensed under the Affero General Public License version 3 or later. -* See the COPYING-README file +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. * */ namespace OCA\News; -require_once \OC_App::getAppPath('news') . '/appinfo/bootstrap.php'; - -/** - * Shortcut for calling a controller method and printing the result - * @param string $controllerName: the name of the controller under which it is - * stored in the DI container - * @param string $methodName: the method that you want to call - * @param array $urlParams: an array with variables extracted from the routes - * @param bool $disableAdminCheck: disables the check for adminuser rights - * @param bool $isAjax: if the request is an ajax request - */ -function callController($controllerName, $methodName, $urlParams, $disableAdminCheck=true, - $isAjax=false){ - $container = createDIContainer(); - - // run security checks - $security = $container['Security']; - runSecurityChecks($security, $isAjax, $disableAdminCheck); - - // call the controller and render the page - $controller = $container[$controllerName]; - $response = $controller->$methodName($urlParams); - echo $response->render(); -} - +use \OCA\AppFramework\App; -/** - * Shortcut for calling an ajax controller method and printing the result - * @param string $controllerName: the name of the controller under which it is - * stored in the DI container - * @param string $methodName: the method that you want to call - * @param array $urlParams: an array with variables extracted from the routes - * @param bool $disableAdminCheck: disables the check for adminuser rights - */ -function callAjaxController($controllerName, $methodName, $urlParams, $disableAdminCheck=true){ - callController($controllerName, $methodName, $urlParams, $disableAdminCheck, true); -} +use \OCA\News\DependencyInjection\DIContainer; /** - * Runs the security checks and exits on error - * @param Security $security: the security object - * @param bool $isAjax: if true, the ajax checks will be run, otherwise the normal - * checks - * @param bool $disableAdminCheck: disables the check for adminuser rights - */ -function runSecurityChecks($security, $isAjax=false, $disableAdminCheck=true){ - if($disableAdminCheck){ - $security->setIsAdminCheck(false); - } - - if($isAjax){ - $security->runAJAXChecks(); - } else { - $security->runChecks(); - } -} - - -/************************* - * Define your routes here + * Webinterface */ - -/** - * Normal Routes - */ -$this->create('news_index', '/')->action( +$this->create('news_index', '/')->get()->action( function($params){ - callController('NewsController', 'index', $params, true); + //App::main('FolderController', 'getAll', $params, new DIContainer()); } ); -$this->create('news_index_feed', '/feed/{feedid}')->action( - function($params){ - callController('NewsController', 'index', $params, true); - } -); -$this->create('news_export_opml', '/export/opml')->action( +$this->create('news_folders', '/folders')->get()->action( function($params){ - callController('NewsController', 'exportOPML', $params, true); + App::main('FolderController', 'getAll', $params, new DIContainer()); } ); -/** - * AJAX Routes - */ -$this->create('news_ajax_init', '/ajax/init')->action( - function($params){ - callAjaxController('NewsAjaxController', 'init', $params); - } -); - -$this->create('news_ajax_setshowall', '/ajax/setshowall')->action( - function($params){ - callAjaxController('NewsAjaxController', 'setShowAll', $params); - } -); - - -/** - * Folders - */ -$this->create('news_ajax_collapsefolder', '/ajax/collapsefolder')->action( - function($params){ - callAjaxController('NewsAjaxController', 'collapseFolder', $params); - } -); - -$this->create('news_ajax_changefoldername', '/ajax/changefoldername')->action( - function($params){ - callAjaxController('NewsAjaxController', 'changeFolderName', $params); - } -); - -$this->create('news_ajax_createfolder', '/ajax/createfolder')->action( - function($params){ - callAjaxController('NewsAjaxController', 'createFolder', $params); - } -); - -$this->create('news_ajax_deletefolder', '/ajax/deletefolder')->action( - function($params){ - callAjaxController('NewsAjaxController', 'deleteFolder', $params); - } -); - - -/** - * Feeds - */ -$this->create('news_ajax_loadfeed', '/ajax/loadfeed')->action( - function($params){ - callAjaxController('NewsAjaxController', 'loadFeed', $params); - } -); - -$this->create('news_ajax_deletefeed', '/ajax/deletefeed')->action( - function($params){ - callAjaxController('NewsAjaxController', 'deleteFeed', $params); - } -); - -$this->create('news_ajax_movefeedtofolder', '/ajax/movefeedtofolder')->action( - function($params){ - callAjaxController('NewsAjaxController', 'moveFeedToFolder', $params); - } -); - -$this->create('news_ajax_updatefeed', '/ajax/updatefeed')->action( - function($params){ - callAjaxController('NewsAjaxController', 'updateFeed', $params); - } -); - -$this->create('news_ajax_createfeed', '/ajax/createfeed')->action( - function($params){ - callAjaxController('NewsAjaxController', 'createFeed', $params); - } -); - - -/** - * Items - */ -$this->create('news_ajax_setitemstatus', '/ajax/setitemstatus')->action( - function($params){ - callAjaxController('NewsAjaxController', 'setItemStatus', $params); - } -); - -$this->create('news_ajax_setallitemsread', '/ajax/setallitemsread')->action( - function($params){ - callAjaxController('NewsAjaxController', 'setAllItemsRead', $params); - } -); - - -/** - * Import stuff - */ -$this->create('news_ajax_importOPML', '/import')->action( - function($params){ - callAjaxController('NewsAjaxController', 'uploadOPML', $params); - } -); - /** * External API diff --git a/controller/foldercontroller.php b/controller/foldercontroller.php index 0f3ec83a2..1bf7da664 100644 --- a/controller/foldercontroller.php +++ b/controller/foldercontroller.php @@ -28,16 +28,17 @@ namespace OCA\News\Controller; use \OCA\AppFramework\Controller\Controller; use \OCA\AppFramework\Core\API; use \OCA\AppFramework\Http\Request; -use \OCA\AppFramework\Db\DoesNotExistException; -use \OCA\AppFramework\Db\MultipleObjectsReturnedException; + +use \OCA\News\Bl\FolderBl; class FolderController extends Controller { + private $folderBl; - public function __construct(API $api, Request $request, $folderMapper){ + public function __construct(API $api, Request $request, FolderBl $folderBl){ parent::__construct($api, $request); - $this->folderMapper = $folderMapper; + $this->folderBl = $folderBl; } @@ -49,8 +50,11 @@ class FolderController extends Controller { * Returns all folders */ public function getAll(){ - $folders = $this->folderMapper->getAll(); - return $this->renderJSON($folders); + $folders = $this->folderBl->findAll($this->api->getUserId()); + $result = array( + 'folders' => $folders + ); + return $this->renderJSON($result); } diff --git a/dependencyinjection/dicontainer.php b/dependencyinjection/dicontainer.php new file mode 100644 index 000000000..874360b9c --- /dev/null +++ b/dependencyinjection/dicontainer.php @@ -0,0 +1,70 @@ +<?php + +/** +* ownCloud - News +* +* @author Alessandro Cosentino +* @author Bernhard Posselt +* @copyright 2012 Alessandro Cosentino cosenal@gmail.com +* @copyright 2012 Bernhard Posselt nukeawhale@gmail.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +namespace OCA\News\DependencyInjection; + +use OCA\AppFramework\DependencyInjection\DIContainer as BaseContainer; + +use OCA\News\Controller\FolderController; +use OCA\News\Bl\FolderBl; +use OCA\News\Db\FolderMapper; + + +class DIContainer extends BaseContainer { + + + /** + * Define your dependencies in here + */ + public function __construct(){ + // tell parent container about the app name + parent::__construct('news'); + + + /** + * CONTROLLERS + */ + $this['FolderController'] = $this->share(function($c){ + return new FolderController($c['API'], $c['Request'], $c['FolderBl']); + }); + + /** + * Business + */ + $this['FolderBl'] = $this->share(function($c){ + return new FolderBl($c['FolderMapper']); + }); + + /** + * MAPPERS + */ + $this['FolderMapper'] = $this->share(function($c){ + return new FolderMapper($c['API']); + }); + + + } +} + diff --git a/tests/controller/FolderControllerTest.php b/tests/controller/FolderControllerTest.php index 4dfe5e200..52836b092 100644 --- a/tests/controller/FolderControllerTest.php +++ b/tests/controller/FolderControllerTest.php @@ -31,6 +31,8 @@ use \OCA\AppFramework\Utility\ControllerTestUtility; use \OCA\AppFramework\Db\DoesNotExistException; use \OCA\AppFramework\Db\MultipleObjectsReturnedException; +use \OCA\News\Db\Folder; + require_once(__DIR__ . "/../classloader.php"); @@ -38,7 +40,7 @@ require_once(__DIR__ . "/../classloader.php"); class FolderControllerTest extends ControllerTestUtility { private $api; - private $folderMapper; + private $folderBl; private $request; private $controller; @@ -48,20 +50,21 @@ class FolderControllerTest extends ControllerTestUtility { */ public function setUp(){ $this->api = $this->getAPIMock(); - $this->folderMapper = $this->getMock('FolderMapper', - array('getAll', 'setCollapsed')); + $this->folderBl = $this->getMockBuilder('\OCA\News\Bl\FolderBl') + ->disableOriginalConstructor() + ->getMock(); $this->request = new Request(); $this->controller = new FolderController($this->api, $this->request, - $this->folderMapper); - + $this->folderBl); } + /** * getAll */ public function testGetAllCalled(){ - $this->folderMapper->expects($this->once()) - ->method('getAll') + $this->folderBl->expects($this->once()) + ->method('findAll') ->will($this->returnValue( array() )); $this->controller->getAll(); @@ -70,18 +73,21 @@ class FolderControllerTest extends ControllerTestUtility { public function testGetAllReturnsFolders(){ $return = array( - 'folder1' => 'name1', - 'folder2' => 'name2' + new Folder(), + new Folder(), ); - $this->folderMapper->expects($this->once()) - ->method('getAll') + $this->folderBl->expects($this->once()) + ->method('findAll') ->will($this->returnValue($return)); $response = $this->controller->getAll(); - $this->assertEquals($return, $response->getParams()); + $expected = array( + 'folders' => $return + ); + $this->assertEquals($expected, $response->getParams()); } - + public function testGetAllAnnotations(){ $methodName = 'getAll'; $annotations = array('IsAdminExemption', 'IsSubAdminExemption', 'Ajax'); @@ -91,10 +97,6 @@ class FolderControllerTest extends ControllerTestUtility { public function testGetAllReturnsJSON(){ - $this->folderMapper->expects($this->once()) - ->method('getAll') - ->will($this->returnValue( array() )); - $response = $this->controller->getAll(); $this->assertTrue($response instanceof JSONResponse); @@ -106,7 +108,7 @@ class FolderControllerTest extends ControllerTestUtility { *//* public function testCollapseCalled(){ $urlParams = array('folderId' => 1); - $this->folderMapper->expects($this->once()) + $this->folderBl->expects($this->once()) ->method('setCollapsed') ->with($this->equalTo($urlParams['folderId']), $this->equalTo(true)); $this->controller->setURLParams($urlParams); @@ -117,7 +119,7 @@ class FolderControllerTest extends ControllerTestUtility { public function testCollapseReturnsNoParams(){ $urlParams = array('folderId' => 1); - $this->folderMapper->expects($this->once()) + $this->folderBl->expects($this->once()) ->method('setCollapsed') ->with($this->equalTo($urlParams['folderId']), $this->equalTo(true)); $this->controller->setURLParams($urlParams); @@ -137,7 +139,7 @@ class FolderControllerTest extends ControllerTestUtility { public function testCollapseReturnsJSON(){ $urlParams = array('folderId' => 1); - $this->folderMapper->expects($this->once()) + $this->folderBl->expects($this->once()) ->method('setCollapsed') ->with($this->equalTo($urlParams['folderId']), $this->equalTo(true)); $this->controller->setURLParams($urlParams); @@ -150,7 +152,7 @@ class FolderControllerTest extends ControllerTestUtility { private function collapseException($ex){ $urlParams = array('folderId' => 1); - $this->folderMapper->expects($this->once()) + $this->folderBl->expects($this->once()) ->method('setCollapsed') ->with($this->equalTo($urlParams['folderId']), $this->equalTo(true)) ->will($this->throwException($ex)); |