2012-04-23 17:50:30 +04:00
< ? php
/**
* ownCloud
*
* @ author Frank Karlitschek
2012-05-26 21:14:24 +04:00
* @ copyright 2012 Frank Karlitschek frank @ owncloud . org
2012-04-23 17:50:30 +04:00
*
* 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 />.
*
*/
/**
* Public interface of ownCloud for apps to use .
* Utility Class .
*
*/
2012-07-02 22:24:26 +04:00
// use OCP namespace for all classes that are considered public.
2012-04-23 17:50:30 +04:00
// This means that they should be used by apps instead of the internal ownCloud classes
namespace OCP ;
2012-05-19 12:36:57 +04:00
/**
* This class provides different helper functions to make the life of a developer easier
*/
2012-04-23 17:50:30 +04:00
class Util {
2012-05-01 19:38:27 +04:00
// consts for Logging
const DEBUG = 0 ;
const INFO = 1 ;
const WARN = 2 ;
const ERROR = 3 ;
const FATAL = 4 ;
2012-05-01 23:07:08 +04:00
/**
2012-05-07 00:02:16 +04:00
* @ brief get the current installed version of ownCloud
2012-05-01 23:07:08 +04:00
* @ return array
*/
2012-09-07 17:22:01 +04:00
public static function getVersion () {
2012-05-01 23:07:08 +04:00
return ( \OC_Util :: getVersion ());
}
2012-04-23 17:50:30 +04:00
/**
2012-07-02 22:24:26 +04:00
* @ brief send an email
2012-04-23 17:50:30 +04:00
* @ param string $toaddress
* @ param string $toname
* @ param string $subject
* @ param string $mailtext
* @ param string $fromaddress
* @ param string $fromname
* @ param bool $html
*/
2013-02-06 20:22:07 +04:00
public static function sendMail ( $toaddress , $toname , $subject , $mailtext , $fromaddress , $fromname , $html = 0 , $altbody = '' , $ccaddress = '' , $ccname = '' , $bcc = '' ) {
2012-04-23 17:50:30 +04:00
// call the internal mail class
2013-02-06 20:22:07 +04:00
\OC_MAIL :: send ( $toaddress , $toname , $subject , $mailtext , $fromaddress , $fromname , $html , $altbody , $ccaddress , $ccname , $bcc );
2012-04-23 17:50:30 +04:00
}
2012-09-08 18:18:47 +04:00
/**
2012-05-07 00:02:16 +04:00
* @ brief write a message in the log
2012-05-01 11:39:12 +04:00
* @ param string $app
* @ param string $message
2012-12-25 21:17:32 +04:00
* @ param int $level
2012-09-08 18:18:47 +04:00
*/
public static function writeLog ( $app , $message , $level ) {
// call the internal log class
\OC_LOG :: write ( $app , $message , $level );
}
2012-05-01 11:39:12 +04:00
/**
2012-05-07 00:02:16 +04:00
* @ brief add a css file
2012-12-25 21:17:32 +04:00
* @ param string $url
2012-05-01 11:39:12 +04:00
*/
2012-09-07 17:22:01 +04:00
public static function addStyle ( $application , $file = null ) {
2012-05-07 00:02:16 +04:00
\OC_Util :: addStyle ( $application , $file );
2012-09-08 18:18:47 +04:00
}
2012-05-07 00:02:16 +04:00
2012-05-01 23:07:08 +04:00
/**
2012-05-07 00:02:16 +04:00
* @ brief add a javascript file
2012-12-25 21:17:32 +04:00
* @ param string $application
* @ param string $file
2012-05-01 23:07:08 +04:00
*/
2012-09-07 17:22:01 +04:00
public static function addScript ( $application , $file = null ) {
2012-05-07 00:02:16 +04:00
\OC_Util :: addScript ( $application , $file );
2012-09-08 18:18:47 +04:00
}
2012-04-23 17:50:30 +04:00
2012-05-01 23:07:08 +04:00
/**
* @ brief Add a custom element to the header
2012-12-25 21:17:32 +04:00
* @ param string $tag tag name of the element
2012-05-01 23:07:08 +04:00
* @ param array $attributes array of attributes for the element
* @ param string $text the text content for the element
*/
2012-09-07 17:22:01 +04:00
public static function addHeader ( $tag , $attributes , $text = '' ) {
2012-05-09 17:17:40 +04:00
\OC_Util :: addHeader ( $tag , $attributes , $text );
2012-05-01 23:07:08 +04:00
}
2012-04-23 17:50:30 +04:00
2012-05-01 23:07:08 +04:00
/**
2012-05-07 00:02:16 +04:00
* @ brief formats a timestamp in the " right " way
2012-12-25 21:17:32 +04:00
* @ param int $timestamp $timestamp
* @ param bool $dateOnly option to omit time from the result
2012-05-01 23:07:08 +04:00
*/
2012-11-02 22:53:02 +04:00
public static function formatDate ( $timestamp , $dateOnly = false ) {
return ( \OC_Util :: formatDate ( $timestamp , $dateOnly ));
2012-05-01 23:07:08 +04:00
}
2012-04-23 17:50:30 +04:00
2012-05-02 01:19:39 +04:00
/**
* @ brief Creates an absolute url
2012-12-25 21:17:32 +04:00
* @ param string $app app
* @ param string $file file
* @ param array $args array with param => value , will be appended to the returned url
2012-09-29 00:27:52 +04:00
* The value of $args will be urlencoded
2012-12-25 21:17:32 +04:00
* @ returns string the url
2012-05-02 01:19:39 +04:00
*
* Returns a absolute url to the given app and file .
*/
2012-09-03 20:13:45 +04:00
public static function linkToAbsolute ( $app , $file , $args = array () ) {
return ( \OC_Helper :: linkToAbsolute ( $app , $file , $args ));
2012-05-02 01:19:39 +04:00
}
2012-05-02 00:59:38 +04:00
2012-05-07 22:22:55 +04:00
/**
* @ brief Creates an absolute url for remote use
2012-12-25 21:17:32 +04:00
* @ param string $service id
* @ returns string the url
2012-05-07 22:22:55 +04:00
*
* Returns a absolute url to the given app and file .
*/
public static function linkToRemote ( $service ) {
return ( \OC_Helper :: linkToRemote ( $service ));
}
2012-08-27 23:46:05 +04:00
/**
* @ brief Creates an absolute url for public use
2012-12-25 21:17:32 +04:00
* @ param string $service id
* @ returns string the url
2012-08-27 23:46:05 +04:00
*
* Returns a absolute url to the given app and file .
*/
public static function linkToPublic ( $service ) {
return \OC_Helper :: linkToPublic ( $service );
}
2012-06-14 14:57:30 +04:00
/**
2013-02-09 01:05:13 +04:00
* @ brief Creates an url using a defined route
* @ param $route
* @ param array $parameters
* @ return
* @ internal param array $args with param => value , will be appended to the returned url
* @ returns the url
*
* Returns a url to the given app and file .
*/
public static function linkToRoute ( $route , $parameters = array () ) {
return \OC_Helper :: linkToRoute ( $route , $parameters );
}
/**
2012-06-14 14:57:30 +04:00
* @ brief Creates an url
2012-12-25 21:17:32 +04:00
* @ param string $app app
* @ param string $file file
* @ param array $args array with param => value , will be appended to the returned url
2012-09-29 00:27:52 +04:00
* The value of $args will be urlencoded
2012-12-25 21:17:32 +04:00
* @ returns string the url
2012-06-14 14:57:30 +04:00
*
* Returns a url to the given app and file .
*/
2012-09-07 17:22:01 +04:00
public static function linkTo ( $app , $file , $args = array () ) {
2012-09-03 20:13:45 +04:00
return ( \OC_Helper :: linkTo ( $app , $file , $args ));
2012-05-02 01:19:39 +04:00
}
2012-05-02 00:59:38 +04:00
2012-05-02 01:19:39 +04:00
/**
* @ brief Returns the server host
2012-12-25 21:17:32 +04:00
* @ returns string the server host
2012-05-02 01:19:39 +04:00
*
* Returns the server host , even if the website uses one or more
* reverse proxies
*/
public static function getServerHost () {
2012-08-07 00:16:45 +04:00
return ( \OC_Request :: serverHost ());
2012-05-02 01:19:39 +04:00
}
2012-05-02 00:59:38 +04:00
2012-12-19 04:09:14 +04:00
/**
* @ brief returns the server hostname
2012-12-25 21:17:32 +04:00
* @ returns string the server hostname
2012-12-19 04:09:14 +04:00
*
* Returns the server host name without an eventual port number
*/
public static function getServerHostName () {
$host_name = self :: getServerHost ();
// strip away port number (if existing)
$colon_pos = strpos ( $host_name , ':' );
if ( $colon_pos != FALSE ) {
$host_name = substr ( $host_name , 0 , $colon_pos );
}
return $host_name ;
}
/**
* @ brief Returns the default email address
2012-12-25 21:17:32 +04:00
* @ param string $user_part the user part of the address
* @ returns string the default email address
2012-12-19 04:09:14 +04:00
*
* Assembles a default email address ( using the server hostname
* and the given user part , and returns it
* Example : when given lostpassword - noreply as $user_part param ,
* and is currently accessed via http ( s ) :// example . com / ,
* it would return 'lostpassword-noreply@example.com'
*/
public static function getDefaultEmailAddress ( $user_part ) {
$host_name = self :: getServerHostName ();
// handle localhost installations
2012-12-21 03:04:46 +04:00
if ( $host_name === 'localhost' ) {
2013-01-14 23:30:28 +04:00
$host_name = " example.com " ;
2012-12-19 04:09:14 +04:00
}
return $user_part . '@' . $host_name ;
}
2012-06-01 12:38:44 +04:00
/**
* @ brief Returns the server protocol
2012-12-25 21:17:32 +04:00
* @ returns string the server protocol
2012-06-01 12:38:44 +04:00
*
* Returns the server protocol . It respects reverse proxy servers and load balancers
*/
public static function getServerProtocol () {
2012-08-07 00:16:45 +04:00
return ( \OC_Request :: serverProtocol ());
2012-06-01 12:38:44 +04:00
}
2012-09-09 14:54:47 +04:00
/**
* @ brief Returns the request uri
* @ returns the request uri
*
* Returns the request uri , even if the website uses one or more
* reverse proxies
*/
public static function getRequestUri () {
return ( \OC_Request :: requestUri ());
}
/**
* @ brief Returns the script name
* @ returns the script name
*
* Returns the script name , even if the website uses one or more
* reverse proxies
*/
public static function getScriptName () {
return ( \OC_Request :: scriptName ());
}
2012-05-02 02:20:45 +04:00
/**
* @ brief Creates path to an image
2012-12-25 21:17:32 +04:00
* @ param string $app app
* @ param string $image image name
* @ returns string the url
2012-05-02 02:20:45 +04:00
*
* Returns the path to the image .
*/
2012-09-08 18:18:47 +04:00
public static function imagePath ( $app , $image ) {
2012-05-02 02:20:45 +04:00
return ( \OC_Helper :: imagePath ( $app , $image ));
}
/**
* @ brief Make a human file size
2012-12-25 21:17:32 +04:00
* @ param int $bytes file size in bytes
* @ returns string a human readable file size
2012-05-02 02:20:45 +04:00
*
* Makes 2048 to 2 kB .
*/
2012-09-07 17:22:01 +04:00
public static function humanFileSize ( $bytes ) {
2012-05-02 02:20:45 +04:00
return ( \OC_Helper :: humanFileSize ( $bytes ));
}
/**
* @ brief Make a computer file size
2012-12-25 21:17:32 +04:00
* @ param string $str file size in a fancy format
* @ returns int a file size in bytes
2012-05-02 02:20:45 +04:00
*
* Makes 2 kB to 2048.
*
* Inspired by : http :// www . php . net / manual / en / function . filesize . php #92418
*/
2012-09-07 17:22:01 +04:00
public static function computerFileSize ( $str ) {
2012-05-02 02:20:45 +04:00
return ( \OC_Helper :: computerFileSize ( $str ));
}
2012-05-05 12:18:45 +04:00
/**
* @ brief connects a function to a hook
2012-12-25 21:17:32 +04:00
* @ 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
* @ returns bool
2012-05-05 12:18:45 +04:00
*
* This function makes it very easy to connect to use hooks .
*
* TODO : write example
*/
2012-09-07 17:22:01 +04:00
static public function connectHook ( $signalclass , $signalname , $slotclass , $slotname ) {
2012-05-05 12:18:45 +04:00
return ( \OC_Hook :: connect ( $signalclass , $signalname , $slotclass , $slotname ));
}
2012-05-02 02:20:45 +04:00
2012-05-05 12:18:45 +04:00
/**
* @ brief emitts a signal
2012-12-25 21:17:32 +04:00
* @ param string $signalclass class name of emitter
* @ param string $signalname name of signal
* @ param string $params defautl : array () array with additional data
* @ returns bool true if slots exists or false if not
2012-05-05 12:18:45 +04:00
*
* Emits a signal . To get data from the slot use references !
*
* TODO : write example
*/
2012-09-07 17:22:01 +04:00
static public function emitHook ( $signalclass , $signalname , $params = array ()) {
2012-05-05 12:18:45 +04:00
return ( \OC_Hook :: emit ( $signalclass , $signalname , $params ));
}
2012-05-02 00:59:38 +04:00
2012-06-09 17:05:14 +04:00
/**
2012-08-29 22:34:44 +04:00
* Register an get / post call . This is important to prevent CSRF attacks
2012-06-09 17:05:14 +04:00
* TODO : write example
*/
2012-09-07 17:22:01 +04:00
public static function callRegister () {
2012-06-09 17:05:14 +04:00
return ( \OC_Util :: callRegister ());
}
/**
* Check an ajax get / post call if the request token is valid . exit if not .
* Todo : Write howto
*/
2012-09-07 17:22:01 +04:00
public static function callCheck () {
2013-01-07 02:59:02 +04:00
\OC_Util :: callCheck ();
2012-06-09 17:05:14 +04:00
}
2012-07-02 22:24:26 +04:00
/**
* @ brief Used to sanitize HTML
*
* This function is used to sanitize HTML and should be applied on any string or array of strings before displaying it on a web page .
*
2012-12-25 21:17:32 +04:00
* @ param string | array of strings
2012-07-02 22:24:26 +04:00
* @ return array with sanitized strings or a single sinitized string , depends on the input parameter .
*/
2012-09-07 17:22:01 +04:00
public static function sanitizeHTML ( $value ) {
2012-07-02 22:24:26 +04:00
return ( \OC_Util :: sanitizeHTML ( $value ));
}
/**
* @ brief Returns an array with all keys from input lowercased or uppercased . Numbered indices are left as is .
*
2012-12-25 21:17:32 +04:00
* @ param array $input The array to work on
* @ param int $case Either MB_CASE_UPPER or MB_CASE_LOWER ( default )
* @ param string $encoding The encoding parameter is the character encoding . Defaults to UTF - 8
2012-07-02 22:24:26 +04:00
* @ return array
*
*
*/
2012-09-07 17:22:01 +04:00
public static function mb_array_change_key_case ( $input , $case = MB_CASE_LOWER , $encoding = 'UTF-8' ) {
2012-07-02 22:24:26 +04:00
return ( \OC_Helper :: mb_array_change_key_case ( $input , $case , $encoding ));
}
/**
* @ brief replaces a copy of string delimited by the start and ( optionally ) length parameters with the string given in replacement .
*
2012-12-25 21:17:32 +04:00
* @ param string $input The input string . . Opposite to the PHP build - in function does not accept an array .
* @ param string $replacement The replacement string .
* @ param int $start If start is positive , the replacing will begin at the start 'th offset into string. If start is negative, the replacing will begin at the start' th character from the end of string .
* @ param int $length Length of the part to be replaced
* @ param string $encoding The encoding parameter is the character encoding . Defaults to UTF - 8
2012-07-02 22:24:26 +04:00
* @ return string
*
*/
public static function mb_substr_replace ( $string , $replacement , $start , $length = null , $encoding = 'UTF-8' ) {
return ( \OC_Helper :: mb_substr_replace ( $string , $replacement , $start , $length , $encoding ));
}
/**
* @ brief Replace all occurrences of the search string with the replacement string
*
2012-12-25 21:17:32 +04:00
* @ param string $search The value being searched for , otherwise known as the needle . String .
* @ param string $replace The replacement string .
* @ param string $subject The string or array being searched and replaced on , otherwise known as the haystack .
* @ param string $encoding The encoding parameter is the character encoding . Defaults to UTF - 8
* @ param int $count If passed , this will be set to the number of replacements performed .
2012-07-02 22:24:26 +04:00
* @ return string
*
*/
public static function mb_str_replace ( $search , $replace , $subject , $encoding = 'UTF-8' , & $count = null ) {
return ( \OC_Helper :: mb_str_replace ( $search , $replace , $subject , $encoding , $count ));
2012-06-19 19:20:19 +04:00
}
2012-07-24 12:54:56 +04:00
/**
* @ brief performs a search in a nested array
2012-12-25 21:17:32 +04:00
* @ param array $haystack the array to be searched
* @ param string $needle the search string
* @ param int $index optional , only search this key name
* @ return mixed the key of the matching field , otherwise false
2012-07-24 12:54:56 +04:00
*/
public static function recursiveArraySearch ( $haystack , $needle , $index = null ) {
return ( \OC_Helper :: recursiveArraySearch ( $haystack , $needle , $index ));
}
2012-12-20 20:16:01 +04:00
2013-01-18 23:09:03 +04:00
/**
* @ brief calculates the maximum upload size respecting system settings , free space and user quota
*
* @ param $dir the current folder where the user currently operates
* @ return number of bytes representing
*/
public static function maxUploadFilesize ( $dir ) {
return \OC_Helper :: maxUploadFilesize ( $dir );
}
2012-05-01 23:07:08 +04:00
}