summaryrefslogtreecommitdiffstats
path: root/appinfo/application.php
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-05-11 13:50:25 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2014-05-11 13:50:37 +0200
commitd40e66ddb78b0e16b033eab5af768358a44ade27 (patch)
tree18c93dc2ce732e75dd275082adecbdc3974ffc82 /appinfo/application.php
parentd90fc440eb1175fc7ab59813eba676c0f8423473 (diff)
use standard layout for container
Diffstat (limited to 'appinfo/application.php')
-rw-r--r--appinfo/application.php452
1 files changed, 452 insertions, 0 deletions
diff --git a/appinfo/application.php b/appinfo/application.php
new file mode 100644
index 000000000..351f9fd12
--- /dev/null
+++ b/appinfo/application.php
@@ -0,0 +1,452 @@
+<?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\AppInfo;
+
+use \OC\Files\View;
+use \OCP\AppFramework\App;
+
+use \OCA\News\Config\AppConfig;
+
+use \OCA\News\Core\Logger;
+use \OCA\News\Core\Db;
+
+use \OCA\News\Controller\PageController;
+use \OCA\News\Controller\FolderController;
+use \OCA\News\Controller\FeedController;
+use \OCA\News\Controller\ItemController;
+use \OCA\News\Controller\ExportController;
+use \OCA\News\Controller\ApiController;
+use \OCA\News\Controller\FolderApiController;
+use \OCA\News\Controller\FeedApiController;
+use \OCA\News\Controller\ItemApiController;
+
+use \OCA\News\BusinessLayer\FolderBusinessLayer;
+use \OCA\News\BusinessLayer\FeedBusinessLayer;
+use \OCA\News\BusinessLayer\ItemBusinessLayer;
+
+use \OCA\News\Db\FolderMapper;
+use \OCA\News\Db\FeedMapper;
+use \OCA\News\Db\ItemMapper;
+use \OCA\News\Db\StatusFlag;
+use \OCA\News\Db\MapperFactory;
+
+use \OCA\News\Utility\Config;
+use \OCA\News\Utility\OPMLExporter;
+use \OCA\News\Utility\Updater;
+use \OCA\News\Utility\SimplePieAPIFactory;
+use \OCA\News\Utility\TimeFactory;
+use \OCA\News\Utility\FaviconFetcher;
+
+use \OCA\News\Fetcher\Fetcher;
+use \OCA\News\Fetcher\FeedFetcher;
+
+use \OCA\News\ArticleEnhancer\Enhancer;
+use \OCA\News\ArticleEnhancer\XPathArticleEnhancer;
+use \OCA\News\ArticleEnhancer\RegexArticleEnhancer;
+
+use \OCA\News\Middleware\CORSMiddleware;
+
+
+require_once __DIR__ . '/../3rdparty/htmlpurifier/library/HTMLPurifier.auto.php';
+
+// to prevent clashes with installed app framework versions
+if(!class_exists('\SimplePie')) {
+ require_once __DIR__ . '/../3rdparty/simplepie/autoloader.php';
+}
+
+
+class Application extends App {
+
+ public function __construct(array $urlParams=array()){
+ parent::__construct('news', $urlParams);
+
+ $container = $this->getContainer();
+
+
+ /**
+ * Controllers
+ */
+ $container->registerService('PageController', function($c) {
+ return new PageController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('CoreConfig'),
+ $c->query('L10N'),
+ $c->query('UserId')
+ );
+ });
+
+ $container->registerService('FolderController', function($c) {
+ return new FolderController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('FolderBusinessLayer'),
+ $c->query('FeedBusinessLayer'),
+ $c->query('ItemBusinessLayer'),
+ $c->query('UserId')
+ );
+ });
+
+ $container->registerService('FeedController', function($c) {
+ return new FeedController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('FolderBusinessLayer'),
+ $c->query('FeedBusinessLayer'),
+ $c->query('ItemBusinessLayer'),
+ $c->query('CoreConfig'),
+ $c->query('UserId')
+ );
+ });
+
+ $container->registerService('ItemController', function($c) {
+ return new ItemController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('FeedBusinessLayer'),
+ $c->query('ItemBusinessLayer'),
+ $c->query('CoreConfig'),
+ $c->query('UserId')
+ );
+ });
+
+ $container->registerService('ExportController', function($c) {
+ return new ExportController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('FeedBusinessLayer'),
+ $c->query('FolderBusinessLayer'),
+ $c->query('ItemBusinessLayer'),
+ $c->query('OPMLExporter'),
+ $c->query('UserId')
+ );
+ });
+
+ $container->registerService('ApiController', function($c) {
+ return new ApiController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('Updater'),
+ $c->query('CoreConfig'),
+ $c->query('UserId')
+ );
+ });
+
+ $container->registerService('FolderApiController', function($c) {
+ return new FolderApiController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('FolderBusinessLayer'),
+ $c->query('ItemBusinessLayer'),
+ $c->query('UserId')
+ );
+ });
+
+ $container->registerService('FeedApiController', function($c) {
+ return new FeedApiController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('FolderBusinessLayer'),
+ $c->query('FeedBusinessLayer'),
+ $c->query('ItemBusinessLayer'),
+ $c->query('Logger'),
+ $c->query('UserId')
+ );
+ });
+
+ $container->registerService('ItemApiController', function($c) {
+ return new ItemApiController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('ItemBusinessLayer'),
+ $c->query('UserId')
+ );
+ });
+
+
+ /**
+ * Business Layer
+ */
+ $container->registerService('FolderBusinessLayer', function($c) {
+ return new FolderBusinessLayer(
+ $c->query('FolderMapper'),
+ $c->query('L10N'),
+ $c->query('TimeFactory'),
+ $c->query('Config')
+ );
+ });
+
+ $container->registerService('FeedBusinessLayer', function($c) {
+ return new FeedBusinessLayer(
+ $c->query('FeedMapper'),
+ $c->query('Fetcher'),
+ $c->query('ItemMapper'),
+ $c->query('Logger'),
+ $c->query('L10N'),
+ $c->query('TimeFactory'),
+ $c->query('Config'),
+ $c->query('Enhancer'),
+ $c->query('HTMLPurifier')
+ );
+ });
+
+ $container->registerService('ItemBusinessLayer', function($c) {
+ return new ItemBusinessLayer(
+ $c->query('ItemMapper'),
+ $c->query('StatusFlag'),
+ $c->query('TimeFactory'),
+ $c->query('Config')
+ );
+ });
+
+
+ /**
+ * Mappers
+ */
+ $container->registerService('MapperFactory', function($c) {
+ return new MapperFactory(
+ $c->query('DatabaseType'),
+ $c->query('Db')
+ );
+ });
+
+ $container->registerService('FolderMapper', function($c) {
+ return new FolderMapper(
+ $c->query('Db')
+ );
+ });
+
+ $container->registerService('FeedMapper', function($c) {
+ return new FeedMapper(
+ $c->query('Db')
+ );
+ });
+
+ $container->registerService('ItemMapper', function($c) {
+ return $c->query('MapperFactory')->getItemMapper(
+ $c->query('Db')
+ );
+ });
+
+
+ /**
+ * App config parser
+ */
+ $container->registerService('AppConfig', function($c) {
+ // not performant but well :/
+ // $config = $c->query('ServerContainer')->getAppConfig(); oc7 only
+ $installedApps = \OC_Appconfig::getApps();
+ $apps = array();
+ foreach($installedApps as $app) {
+ $apps[] = array(
+ $app => \OC_Appconfig::getValue($app, 'installed_version', '0')
+ );
+ }
+
+ // order extensions in name => version
+ $loadedExtensions = get_loaded_extensions();
+ $extensions = array();
+ foreach ($loadedExtensions as $extension) {
+ $extensions[$extension] = phpversion($extension);
+ }
+
+ return new AppConfig(
+ $c->query('ServerContainer')->getNavigationManager(),
+ $c->query('L10N'),
+ $c->query('ServerContainer')->getURLGenerator(),
+ phpversion(),
+ implode('.', \OCP\Util::getVersion()),
+ $apps,
+ $extensions,
+ $c->query('DatabaseType')
+ );
+ });
+
+ /**
+ * Core
+ */
+ $container->registerService('L10N', function($c) {
+ return $c->query('ServerContainer')->getL10N($c->query('AppName'));
+ });
+
+ $container->registerService('UserId', function($c) {
+ return \OCP\User::getUser();
+ });
+
+ $container->registerService('Logger', function($c) {
+ return new Logger($c->query('AppName'));
+ });
+
+ $container->registerService('Db', function($c) {
+ return new Db();
+ });
+
+ $container->registerService('CoreConfig', function($c) {
+ return $c->query('ServerContainer')->getConfig();
+ });
+
+ $container->registerService('DatabaseType', function($c) {
+ return $c->query('ServerContainer')->getConfig()->getSystemValue('dbtype');
+ });
+
+
+ /**
+ * Utility
+ */
+ $container->registerService('ConfigView', function($c) {
+ $view = new View('/news/config');
+ if (!$view->file_exists('')) {
+ $view->mkdir('');
+ }
+
+ return $view;
+ });
+
+ $container->registerService('Config', function($c) {
+ $config = new Config($c->query('ConfigView'), $c->query('Logger'));
+ $config->read('config.ini', true);
+ return $config;
+ });
+
+ $container->registerService('simplePieCacheDirectory', function($c) {
+ $directory = $c->query('CoreConfig')->getSystemValue('datadirectory') .
+ '/news/cache/simplepie';
+
+ if(!is_dir($directory)) {
+ mkdir($directory, 0770, true);
+ }
+ return $directory;
+ });
+
+ $container->registerService('HTMLPurifier', function($c) {
+ $directory = $c->query('CoreConfig')->getSystemValue('datadirectory') .
+ '/news/cache/purifier';
+
+ if(!is_dir($directory)) {
+ mkdir($directory, 0770, true);
+ }
+
+ $config = \HTMLPurifier_Config::createDefault();
+ $config->set('HTML.ForbiddenAttributes', 'class');
+ $config->set('Cache.SerializerPath', $directory);
+ $config->set('HTML.SafeIframe', true);
+ $config->set('URI.SafeIframeRegexp',
+ '%^(?:https?:)?//(' .
+ 'www.youtube(?:-nocookie)?.com/embed/|' .
+ 'player.vimeo.com/video/)%'); //allow YouTube and Vimeo
+ return new \HTMLPurifier($config);
+ });
+
+ $container->registerService('Enhancer', function($c) {
+ $enhancer = new Enhancer();
+
+ // register simple enhancers from config json file
+ $xpathEnhancerConfig = file_get_contents(
+ __DIR__ . '/../articleenhancer/xpathenhancers.json'
+ );
+
+ foreach(json_decode($xpathEnhancerConfig, true) as $feed => $config) {
+ $articleEnhancer = new XPathArticleEnhancer(
+ $c->query('SimplePieAPIFactory'),
+ $config,
+ $c->query('Config')
+ );
+ $enhancer->registerEnhancer($feed, $articleEnhancer);
+ }
+
+ $regexEnhancerConfig = file_get_contents(
+ __DIR__ . '/../articleenhancer/regexenhancers.json'
+ );
+ foreach(json_decode($regexEnhancerConfig, true) as $feed => $config) {
+ foreach ($config as $matchArticleUrl => $regex) {
+ $articleEnhancer = new RegexArticleEnhancer($matchArticleUrl, $regex);
+ $enhancer->registerEnhancer($feed, $articleEnhancer);
+ }
+ }
+
+ return $enhancer;
+ });
+
+ /**
+ * Fetchers
+ */
+ $container->registerService('Fetcher', function($c) {
+ $fetcher = new Fetcher();
+
+ // register fetchers in order
+ // the most generic fetcher should be the last one
+ $fetcher->registerFetcher($c->query('FeedFetcher'));
+
+ return $fetcher;
+ });
+
+ $container->registerService('FeedFetcher', function($c) {
+ return new FeedFetcher($c->query('SimplePieAPIFactory'),
+ $c->query('FaviconFetcher'),
+ $c->query('TimeFactory'),
+ $c->query('simplePieCacheDirectory'),
+ $c->query('Config')
+ );
+ });
+
+ $container->registerService('StatusFlag', function($c) {
+ return new StatusFlag();
+ });
+
+ $container->registerService('OPMLExporter', function($c) {
+ return new OPMLExporter();
+ });
+
+ $container->registerService('Updater', function($c) {
+ return new Updater(
+ $c->query('FolderBusinessLayer'),
+ $c->query('FeedBusinessLayer'),
+ $c->query('ItemBusinessLayer')
+ );
+ });
+
+ $container->registerService('SimplePieAPIFactory', function($c) {
+ return new SimplePieAPIFactory();
+ });
+
+ $container->registerService('FaviconFetcher', function($c) {
+ return new FaviconFetcher(
+ $c->query('SimplePieAPIFactory'),
+ $c->query('Config')
+ );
+ });
+
+ /**
+ * Middleware
+ */
+ $container->registerService('CORSMiddleware', function($c) {
+ return new CORSMiddleware(
+ $c->query('Request')
+ );
+ });
+
+ $container->registerMiddleWare('CORSMiddleware');
+
+ }
+
+ public function getAppConfig() {
+ return $this->getContainer()->query('AppConfig');
+ }
+
+
+ public function getLogger() {
+ return $this->getContainer()->query('Logger');
+ }
+}
+