]> source.dussan.org Git - nextcloud-server.git/commitdiff
introducing OCP\AppFramework\App
authorThomas Müller <thomas.mueller@tmit.eu>
Tue, 20 Aug 2013 23:02:15 +0000 (01:02 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Tue, 20 Aug 2013 23:02:15 +0000 (01:02 +0200)
lib/appframework/app.php
lib/appframework/core/api.php
lib/appframework/dependencyinjection/dicontainer.php
lib/public/appframework/App.php [new file with mode: 0644]
lib/public/appframework/iapi.php [new file with mode: 0644]
lib/public/appframework/iappcontainer.php [new file with mode: 0644]

index 6224b858bbfc12da19204192db1dd6fd2aa99f61..7ff55bb809d1ddcfeef1142547878a8fcf3e1805 100644 (file)
@@ -25,6 +25,7 @@
 namespace OC\AppFramework;
 
 use OC\AppFramework\DependencyInjection\DIContainer;
+use OCP\AppFramework\IAppContainer;
 
 
 /**
@@ -45,7 +46,7 @@ class App {
         * @param DIContainer $container an instance of a pimple container.
         */
        public static function main($controllerName, $methodName, array $urlParams,
-                                                               DIContainer $container) {
+                                   IAppContainer $container) {
                $container['urlParams'] = $urlParams;
                $controller = $container[$controllerName];
 
index eb8ee01e5db7b367535080300060989d304c8708..337e3b57d6d6ac29efd504eef348dd22ebeb5f34 100644 (file)
@@ -23,6 +23,7 @@
 
 
 namespace OC\AppFramework\Core;
+use OCP\AppFramework\IApi;
 
 
 /**
@@ -32,7 +33,7 @@ namespace OC\AppFramework\Core;
  * Should you find yourself in need for more methods, simply inherit from this
  * class and add your methods
  */
-class API {
+class API implements IApi{
 
        private $appName;
 
index 88ad2cd414a064c98d8f8a060dbd1ee02a3085d5..43f6eee29b03a477e65d487c8a1db7d910801db9 100644 (file)
@@ -32,9 +32,11 @@ use OC\AppFramework\Middleware\MiddlewareDispatcher;
 use OC\AppFramework\Middleware\Security\SecurityMiddleware;
 use OC\AppFramework\Utility\SimpleContainer;
 use OC\AppFramework\Utility\TimeFactory;
+use OCP\AppFramework\IApi;
+use OCP\AppFramework\IAppContainer;
 
 
-class DIContainer extends SimpleContainer {
+class DIContainer extends SimpleContainer implements IAppContainer{
 
 
        /**
@@ -45,6 +47,8 @@ class DIContainer extends SimpleContainer {
 
                $this['AppName'] = $appName;
 
+               $this->registerParameter('ServerContainer', \OC::$server);
+
                $this['API'] = $this->share(function($c){
                        return new API($c['AppName']);
                });
@@ -119,4 +123,19 @@ class DIContainer extends SimpleContainer {
        }
 
 
+       /**
+        * @return IApi
+        */
+       function getCoreApi()
+       {
+               return $this->query('API');
+       }
+
+       /**
+        * @return \OCP\Core\IServerContainer
+        */
+       function getServer()
+       {
+               return $this->query('ServerContainer');
+       }
 }
diff --git a/lib/public/appframework/App.php b/lib/public/appframework/App.php
new file mode 100644 (file)
index 0000000..0c27fcb
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+
+namespace OCP\AppFramework;
+
+
+/**
+ * Class App
+ * @package OCP\AppFramework
+ *
+ * Any application must inherit this call - all controller instances to be used are
+ * to be registered using IContainer::registerService
+ */
+class App {
+       public function __construct($appName) {
+               $this->container = new \OC\AppFramework\DependencyInjection\DIContainer($appName);
+       }
+
+       private $container;
+
+       /**
+        * @return IAppContainer
+        */
+       public function getContainer() {
+               return $this->container;
+       }
+
+       /**
+        * This function is called by the routing component to fire up the frameworks dispatch mechanism.
+        *
+        * Example code in routes.php of the task app:
+        * $this->create('tasks_index', '/')->get()->action(
+        *              function($params){
+        *                      $app = new TaskApp();
+        *                      $app->dispatch('PageController', 'index', $params);
+        *              }
+        *      );
+        *
+        *
+        * Example for for TaskApp implementation:
+        * class TaskApp extends \OCP\AppFramework\App {
+        *
+        *              public function __construct(){
+        *                      parent::__construct('tasks');
+        *
+        *                      $this->getContainer()->registerService('PageController', function(IAppContainer $c){
+        *                              $a = $c->query('API');
+        *                              $r = $c->query('Request');
+        *                              return new PageController($a, $r);
+        *                      });
+        *              }
+        *      }
+        *
+        * @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
+        */
+       public function dispatch($controllerName, $methodName, array $urlParams) {
+               \OC\AppFramework\App::main($controllerName, $methodName, $urlParams, $this->container);
+       }
+}
diff --git a/lib/public/appframework/iapi.php b/lib/public/appframework/iapi.php
new file mode 100644 (file)
index 0000000..5374f0d
--- /dev/null
@@ -0,0 +1,238 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @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 OCP\AppFramework;
+
+
+/**
+ * A few very basic and frequently used API functions are combined in here
+ */
+interface IApi {
+
+       /**
+        * used to return the appname of the set application
+        * @return string the name of your application
+        */
+       function getAppName();
+
+
+       /**
+        * Creates a new navigation entry
+        * @param array $entry containing: id, name, order, icon and href key
+        */
+       function addNavigationEntry(array $entry);
+
+
+       /**
+        * Gets the userid of the current user
+        * @return string the user id of the current user
+        */
+       function getUserId();
+
+
+       /**
+        * Sets the current navigation entry to the currently running app
+        */
+       function activateNavigationEntry();
+
+
+       /**
+        * Adds a new javascript file
+        * @param string $scriptName the name of the javascript in js/ without the suffix
+        * @param string $appName the name of the app, defaults to the current one
+        */
+       function addScript($scriptName, $appName = null);
+
+
+       /**
+        * Adds a new css file
+        * @param string $styleName the name of the css file in css/without the suffix
+        * @param string $appName the name of the app, defaults to the current one
+        */
+       function addStyle($styleName, $appName = null);
+
+
+       /**
+        * shorthand for addScript for files in the 3rdparty directory
+        * @param string $name the name of the file without the suffix
+        */
+       function add3rdPartyScript($name);
+
+
+       /**
+        * shorthand for addStyle for files in the 3rdparty directory
+        * @param string $name the name of the file without the suffix
+        */
+       function add3rdPartyStyle($name);
+
+       /**
+        * Looks up a system-wide defined value
+        * @param string $key the key of the value, under which it was saved
+        * @return string the saved value
+        */
+       function getSystemValue($key);
+
+       /**
+        * Sets a new system-wide value
+        * @param string $key the key of the value, under which will be saved
+        * @param string $value the value that should be stored
+        */
+       function setSystemValue($key, $value);
+
+
+       /**
+        * Looks up an app-specific defined value
+        * @param string $key the key of the value, under which it was saved
+        * @return string the saved value
+        */
+       function getAppValue($key, $appName = null);
+
+
+       /**
+        * Writes a new app-specific value
+        * @param string $key the key of the value, under which will be saved
+        * @param string $value the value that should be stored
+        */
+       function setAppValue($key, $value, $appName = null);
+
+
+       /**
+        * Shortcut for setting a user defined value
+        * @param string $key the key under which the value is being stored
+        * @param string $value the value that you want to store
+        * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
+        */
+       function setUserValue($key, $value, $userId = null);
+
+
+       /**
+        * Shortcut for getting a user defined value
+        * @param string $key the key under which the value is being stored
+        * @param string $userId the userId of the user that we want to store the value under, defaults to the current one
+        */
+       function getUserValue($key, $userId = null);
+
+       /**
+        * Returns the translation object
+        * @return \OC_L10N the translation object
+        *
+        * FIXME: returns private object / should be retrieved from teh ServerContainer
+        */
+       function getTrans();
+
+
+       /**
+        * Used to abstract the owncloud database access away
+        * @param string $sql the sql query with ? placeholder for params
+        * @param int $limit the maximum number of rows
+        * @param int $offset from which row we want to start
+        * @return \OCP\DB a query object
+        *
+        * FIXME: returns non public interface / object
+        */
+       function prepareQuery($sql, $limit=null, $offset=null);
+
+
+       /**
+        * Used to get the id of the just inserted element
+        * @param string $tableName the name of the table where we inserted the item
+        * @return int the id of the inserted element
+        *
+        * FIXME: move to db object
+        */
+       function getInsertId($tableName);
+
+
+       /**
+        * Returns the URL for a route
+        * @param string $routeName the name of the route
+        * @param array $arguments an array with arguments which will be filled into the url
+        * @return string the url
+        */
+       function linkToRoute($routeName, $arguments=array());
+
+
+       /**
+        * Returns an URL for an image or file
+        * @param string $file the name of the file
+        * @param string $appName the name of the app, defaults to the current one
+        */
+       function linkTo($file, $appName=null);
+
+
+       /**
+        * Returns the link to an image, like link to but only with prepending img/
+        * @param string $file the name of the file
+        * @param string $appName the name of the app, defaults to the current one
+        */
+       function imagePath($file, $appName = null);
+
+
+       /**
+        * Makes an URL absolute
+        * @param string $url the url
+        * @return string the absolute url
+        *
+        * FIXME: function should live in Request / Response
+        */
+       function getAbsoluteURL($url);
+
+
+       /**
+        * links to a file
+        * @param string $file the name of the file
+        * @param string $appName the name of the app, defaults to the current one
+        * @deprecated replaced with linkToRoute()
+        * @return string the url
+        */
+       function linkToAbsolute($file, $appName = null);
+
+
+       /**
+        * Checks if an app is enabled
+        * @param string $appName the name of an app
+        * @return bool true if app is enabled
+        */
+       public function isAppEnabled($appName);
+
+
+       /**
+        * Writes a function into the error log
+        * @param string $msg the error message to be logged
+        * @param int $level the error level
+        *
+        * FIXME: add logger instance to ServerContainer
+        */
+       function log($msg, $level = null);
+
+
+       /**
+        * Returns a template
+        * @param string $templateName the name of the template
+        * @param string $renderAs how it should be rendered
+        * @param string $appName the name of the app
+        * @return \OCP\Template a new template
+        */
+       function getTemplate($templateName, $renderAs='user', $appName=null);
+}
diff --git a/lib/public/appframework/iappcontainer.php b/lib/public/appframework/iappcontainer.php
new file mode 100644 (file)
index 0000000..c2faea0
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+
+namespace OCP\AppFramework;
+
+use OCP\AppFramework\IApi;
+use OCP\Core\IContainer;
+
+/**
+ * Class IAppContainer
+ * @package OCP\AppFramework
+ *
+ * This container interface provides short cuts for app developers to access predefined app service.
+ */
+interface IAppContainer extends IContainer{
+
+       /**
+        * @return IApi
+        */
+       function getCoreApi();
+
+       /**
+        * @return \OCP\Core\IServerContainer
+        */
+       function getServer();
+}