server/lib/appframework/core/api.php
2013-08-17 11:16:48 +02:00

524 lines
13 KiB
PHP

<?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 OC\AppFramework\Core;
/**
* This is used to wrap the owncloud static api calls into an object to make the
* code better abstractable for use in the dependency injection container
*
* Should you find yourself in need for more methods, simply inherit from this
* class and add your methods
*/
class API {
private $appName;
/**
* constructor
* @param string $appName the name of your application
*/
public function __construct($appName){
$this->appName = $appName;
}
/**
* used to return the appname of the set application
* @return string the name of your application
*/
public function getAppName(){
return $this->appName;
}
/**
* Creates a new navigation entry
* @param array $entry containing: id, name, order, icon and href key
*/
public function addNavigationEntry(array $entry){
\OCP\App::addNavigationEntry($entry);
}
/**
* Gets the userid of the current user
* @return string the user id of the current user
*/
public function getUserId(){
return \OCP\User::getUser();
}
/**
* Sets the current navigation entry to the currently running app
*/
public function activateNavigationEntry(){
\OCP\App::setActiveNavigationEntry($this->appName);
}
/**
* 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
*/
public function addScript($scriptName, $appName=null){
if($appName === null){
$appName = $this->appName;
}
\OCP\Util::addScript($appName, $scriptName);
}
/**
* 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
*/
public function addStyle($styleName, $appName=null){
if($appName === null){
$appName = $this->appName;
}
\OCP\Util::addStyle($appName, $styleName);
}
/**
* shorthand for addScript for files in the 3rdparty directory
* @param string $name the name of the file without the suffix
*/
public function add3rdPartyScript($name){
\OCP\Util::addScript($this->appName . '/3rdparty', $name);
}
/**
* shorthand for addStyle for files in the 3rdparty directory
* @param string $name the name of the file without the suffix
*/
public function add3rdPartyStyle($name){
\OCP\Util::addStyle($this->appName . '/3rdparty', $name);
}
/**
* Looks up a systemwide defined value
* @param string $key the key of the value, under which it was saved
* @return string the saved value
*/
public function getSystemValue($key){
return \OCP\Config::getSystemValue($key, '');
}
/**
* Sets a new systemwide value
* @param string $key the key of the value, under which will be saved
* @param string $value the value that should be stored
*/
public function setSystemValue($key, $value){
return \OCP\Config::setSystemValue($key, $value);
}
/**
* Looks up an appwide defined value
* @param string $key the key of the value, under which it was saved
* @return string the saved value
*/
public function getAppValue($key, $appName=null){
if($appName === null){
$appName = $this->appName;
}
return \OCP\Config::getAppValue($appName, $key, '');
}
/**
* Writes a new appwide value
* @param string $key the key of the value, under which will be saved
* @param string $value the value that should be stored
*/
public function setAppValue($key, $value, $appName=null){
if($appName === null){
$appName = $this->appName;
}
return \OCP\Config::setAppValue($appName, $key, $value);
}
/**
* 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
*/
public function setUserValue($key, $value, $userId=null){
if($userId === null){
$userId = $this->getUserId();
}
\OCP\Config::setUserValue($userId, $this->appName, $key, $value);
}
/**
* 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
*/
public function getUserValue($key, $userId=null){
if($userId === null){
$userId = $this->getUserId();
}
return \OCP\Config::getUserValue($userId, $this->appName, $key);
}
/**
* Returns the translation object
* @return \OC_L10N the translation object
*/
public function getTrans(){
# TODO: use public api
return \OC_L10N::get($this->appName);
}
/**
* 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
*/
public function prepareQuery($sql, $limit=null, $offset=null){
return \OCP\DB::prepare($sql, $limit, $offset);
}
/**
* 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
*/
public function getInsertId($tableName){
return \OCP\DB::insertid($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
*/
public function linkToRoute($routeName, $arguments=array()){
return \OCP\Util::linkToRoute($routeName, $arguments);
}
/**
* 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
*/
public function linkTo($file, $appName=null){
if($appName === null){
$appName = $this->appName;
}
return \OCP\Util::linkTo($appName, $file);
}
/**
* 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
*/
public function imagePath($file, $appName=null){
if($appName === null){
$appName = $this->appName;
}
return \OCP\Util::imagePath($appName, $file);
}
/**
* Makes an URL absolute
* @param string $url the url
* @return string the absolute url
*/
public function getAbsoluteURL($url){
# TODO: use public api
return \OC_Helper::makeURLAbsolute($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
*/
public function linkToAbsolute($file, $appName=null){
if($appName === null){
$appName = $this->appName;
}
return \OCP\Util::linkToAbsolute($appName, $file);
}
/**
* Checks if the current user is logged in
* @return bool true if logged in
*/
public function isLoggedIn(){
return \OCP\User::isLoggedIn();
}
/**
* Checks if a user is an admin
* @param string $userId the id of the user
* @return bool true if admin
*/
public function isAdminUser($userId){
# TODO: use public api
return \OC_User::isAdminUser($userId);
}
/**
* Checks if a user is an subadmin
* @param string $userId the id of the user
* @return bool true if subadmin
*/
public function isSubAdminUser($userId){
# TODO: use public api
return \OC_SubAdmin::isSubAdmin($userId);
}
/**
* Checks if the CSRF check was correct
* @return bool true if CSRF check passed
*/
public function passesCSRFCheck(){
# TODO: use public api
return \OC_Util::isCallRegistered();
}
/**
* 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){
return \OCP\App::isEnabled($appName);
}
/**
* Writes a function into the error log
* @param string $msg the error message to be logged
* @param int $level the error level
*/
public function log($msg, $level=null){
switch($level){
case 'debug':
$level = \OCP\Util::DEBUG;
break;
case 'info':
$level = \OCP\Util::INFO;
break;
case 'warn':
$level = \OCP\Util::WARN;
break;
case 'fatal':
$level = \OCP\Util::FATAL;
break;
default:
$level = \OCP\Util::ERROR;
break;
}
\OCP\Util::writeLog($this->appName, $msg, $level);
}
/**
* 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
*/
public function getTemplate($templateName, $renderAs='user', $appName=null){
if($appName === null){
$appName = $this->appName;
}
if($renderAs === 'blank'){
return new \OCP\Template($appName, $templateName);
} else {
return new \OCP\Template($appName, $templateName, $renderAs);
}
}
/**
* turns an owncloud path into a path on the filesystem
* @param string path the path to the file on the oc filesystem
* @return string the filepath in the filesystem
*/
public function getLocalFilePath($path){
# TODO: use public api
return \OC_Filesystem::getLocalFile($path);
}
/**
* used to return and open a new eventsource
* @return \OC_EventSource a new open EventSource class
*/
public function openEventSource(){
# TODO: use public api
return new \OC_EventSource();
}
/**
* @brief connects a function to a hook
* @param string $signalClass class name of emitter
* @param string $signalName name of signal
* @param string $slotClass class name of slot
* @param string $slotName name of slot, in another word, this is the
* name of the method that will be called when registered
* signal is emitted.
* @return bool, always true
*/
public function connectHook($signalClass, $signalName, $slotClass, $slotName) {
return \OCP\Util::connectHook($signalClass, $signalName, $slotClass, $slotName);
}
/**
* @brief Emits a signal. To get data from the slot use references!
* @param string $signalClass class name of emitter
* @param string $signalName name of signal
* @param array $params defautl: array() array with additional data
* @return bool, true if slots exists or false if not
*/
public function emitHook($signalClass, $signalName, $params = array()) {
return \OCP\Util::emitHook($signalClass, $signalName, $params);
}
/**
* @brief clear hooks
* @param string $signalClass
* @param string $signalName
*/
public function clearHook($signalClass=false, $signalName=false) {
if ($signalClass) {
\OC_Hook::clear($signalClass, $signalName);
}
}
/**
* Gets the content of an URL by using CURL or a fallback if it is not
* installed
* @param string $url the url that should be fetched
* @return string the content of the webpage
*/
public function getUrlContent($url) {
return \OC_Util::getUrlContent($url);
}
/**
* Register a backgroundjob task
* @param string $className full namespace and class name of the class
* @param string $methodName the name of the static method that should be
* called
*/
public function addRegularTask($className, $methodName) {
\OCP\Backgroundjob::addRegularTask($className, $methodName);
}
/**
* Tells ownCloud to include a template in the admin overview
* @param string $mainPath the path to the main php file without the php
* suffix, relative to your apps directory! not the template directory
* @param string $appName the name of the app, defaults to the current one
*/
public function registerAdmin($mainPath, $appName=null) {
if($appName === null){
$appName = $this->appName;
}
\OCP\App::registerAdmin($appName, $mainPath);
}
/**
* Do a user login
* @param string $user the username
* @param string $password the password
* @return bool true if successful
*/
public function login($user, $password) {
return \OC_User::login($user, $password);
}
/**
* @brief Loggs the user out including all the session data
* Logout, destroys session
*/
public function logout() {
return \OCP\User::logout();
}
/**
* get the filesystem info
*
* @param string $path
* @return array with the following keys:
* - size
* - mtime
* - mimetype
* - encrypted
* - versioned
*/
public function getFileInfo($path) {
return \OC\Files\Filesystem::getFileInfo($path);
}
/**
* get the view
*
* @return OC\Files\View instance
*/
public function getView() {
return \OC\Files\Filesystem::getView();
}
}