introducing OCP\AppFramework\App
This commit is contained in:
parent
911bd3c16f
commit
38f9df4293
|
@ -25,6 +25,7 @@
|
||||||
namespace OC\AppFramework;
|
namespace OC\AppFramework;
|
||||||
|
|
||||||
use OC\AppFramework\DependencyInjection\DIContainer;
|
use OC\AppFramework\DependencyInjection\DIContainer;
|
||||||
|
use OCP\AppFramework\IAppContainer;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -45,7 +46,7 @@ class App {
|
||||||
* @param DIContainer $container an instance of a pimple container.
|
* @param DIContainer $container an instance of a pimple container.
|
||||||
*/
|
*/
|
||||||
public static function main($controllerName, $methodName, array $urlParams,
|
public static function main($controllerName, $methodName, array $urlParams,
|
||||||
DIContainer $container) {
|
IAppContainer $container) {
|
||||||
$container['urlParams'] = $urlParams;
|
$container['urlParams'] = $urlParams;
|
||||||
$controller = $container[$controllerName];
|
$controller = $container[$controllerName];
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
|
|
||||||
namespace OC\AppFramework\Core;
|
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
|
* Should you find yourself in need for more methods, simply inherit from this
|
||||||
* class and add your methods
|
* class and add your methods
|
||||||
*/
|
*/
|
||||||
class API {
|
class API implements IApi{
|
||||||
|
|
||||||
private $appName;
|
private $appName;
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,11 @@ use OC\AppFramework\Middleware\MiddlewareDispatcher;
|
||||||
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
|
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
|
||||||
use OC\AppFramework\Utility\SimpleContainer;
|
use OC\AppFramework\Utility\SimpleContainer;
|
||||||
use OC\AppFramework\Utility\TimeFactory;
|
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['AppName'] = $appName;
|
||||||
|
|
||||||
|
$this->registerParameter('ServerContainer', \OC::$server);
|
||||||
|
|
||||||
$this['API'] = $this->share(function($c){
|
$this['API'] = $this->share(function($c){
|
||||||
return new API($c['AppName']);
|
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');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
Loading…
Reference in New Issue