2012-04-23 13:50:30 +00:00
< ? php
/**
2016-07-21 15:07:57 +00:00
* @ copyright Copyright ( c ) 2016 , ownCloud , Inc .
*
2016-05-26 17:56:05 +00:00
* @ author Arthur Schiwon < blizzz @ arthur - schiwon . de >
2015-03-26 10:44:34 +00:00
* @ author Bart Visscher < bartv @ thisnet . nl >
2016-05-26 17:56:05 +00:00
* @ author Björn Schießle < bjoern @ schiessle . org >
* @ author Frank Karlitschek < frank @ karlitschek . de >
2015-03-26 10:44:34 +00:00
* @ author Georg Ehrke < georg @ owncloud . com >
2015-10-05 18:54:56 +00:00
* @ author Individual IT Services < info @ individual - it . net >
2015-03-26 10:44:34 +00:00
* @ author Jens - Christian Fischer < jens - christian . fischer @ switch . ch >
2016-07-21 15:07:57 +00:00
* @ author Joas Schilling < coding @ schilljs . com >
2016-05-26 17:56:05 +00:00
* @ author Lukas Reschke < lukas @ statuscode . ch >
2015-03-26 10:44:34 +00:00
* @ author Michael Gapczynski < GapczynskiM @ gmail . com >
* @ author Morris Jobke < hey @ morrisjobke . de >
2015-10-05 18:54:56 +00:00
* @ author Nicolas Grekas < nicolas . grekas @ gmail . com >
2015-03-26 10:44:34 +00:00
* @ author Pellaeon Lin < nfsmwlin @ gmail . com >
* @ author Randolph Carter < RandolphCarter @ fantasymail . de >
* @ author Robin Appelman < icewind @ owncloud . com >
2016-01-12 14:02:16 +00:00
* @ author Robin McCorkell < robin @ mccorkell . me . uk >
2016-07-21 15:07:57 +00:00
* @ author Roeland Jago Douma < roeland @ famdouma . nl >
2015-03-26 10:44:34 +00:00
* @ author Stefan Herbrechtsmeier < stefan @ herbrechtsmeier . net >
* @ author Thomas Müller < thomas . mueller @ tmit . eu >
* @ author Thomas Tanghus < thomas @ tanghus . net >
* @ author Victor Dubiniuk < dubiniuk @ owncloud . com >
* @ author Vincent Petry < pvince81 @ owncloud . com >
2013-11-03 12:51:39 +00:00
*
2015-03-26 10:44:34 +00:00
* @ license AGPL - 3.0
2013-11-03 12:51:39 +00:00
*
2015-03-26 10:44:34 +00:00
* This code is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License , version 3 ,
* as published by the Free Software Foundation .
2013-11-03 12:51:39 +00:00
*
2015-03-26 10:44:34 +00:00
* This program is distributed in the hope that it will be useful ,
2013-11-03 12:51:39 +00:00
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
2015-03-26 10:44:34 +00:00
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
2013-11-03 12:51:39 +00:00
*
2015-03-26 10:44:34 +00:00
* You should have received a copy of the GNU Affero General Public License , version 3 ,
* along with this program . If not , see < http :// www . gnu . org / licenses />
2013-11-03 12:51:39 +00:00
*
*/
2015-02-26 10:37:37 +00:00
/**
* Public interface of ownCloud for apps to use .
* Utility Class .
*
*/
2012-07-02 18:24:26 +00:00
// use OCP namespace for all classes that are considered public.
2012-04-23 13:50:30 +00:00
// This means that they should be used by apps instead of the internal ownCloud classes
namespace OCP ;
2014-09-22 13:03:28 +00:00
use DateTimeZone ;
2012-04-23 13:50:30 +00:00
2012-05-19 08:36:57 +00:00
/**
* This class provides different helper functions to make the life of a developer easier
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-19 08:36:57 +00:00
*/
2012-04-23 13:50:30 +00:00
class Util {
2012-05-01 15:38:27 +00:00
// consts for Logging
const DEBUG = 0 ;
const INFO = 1 ;
const WARN = 2 ;
const ERROR = 3 ;
const FATAL = 4 ;
2016-05-03 09:58:33 +00:00
/** \OCP\Share\IManager */
private static $shareManager ;
2012-05-01 19:07:08 +00:00
/**
2013-10-31 18:00:53 +00:00
* get the current installed version of ownCloud
2012-05-01 19:07:08 +00:00
* @ return array
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-01 19:07:08 +00:00
*/
2012-09-07 13:22:01 +00:00
public static function getVersion () {
2012-05-01 19:07:08 +00:00
return ( \OC_Util :: getVersion ());
}
2015-05-13 17:00:46 +00:00
/**
* Set current update channel
* @ param string $channel
2015-06-05 15:30:45 +00:00
* @ since 8.1 . 0
2015-05-13 17:00:46 +00:00
*/
public static function setChannel ( $channel ) {
//Flush timestamp to reload version.php
\OC :: $server -> getSession () -> set ( 'OC_Version_Timestamp' , 0 );
2015-07-03 13:02:51 +00:00
\OC :: $server -> getAppConfig () -> setValue ( 'core' , 'OC_Channel' , $channel );
2015-05-13 17:00:46 +00:00
}
/**
* Get current update channel
* @ return string
2015-06-05 15:30:45 +00:00
* @ since 8.1 . 0
2015-05-13 17:00:46 +00:00
*/
public static function getChannel () {
return \OC_Util :: getChannel ();
}
2012-05-01 19:07:08 +00:00
2012-04-23 13:50:30 +00:00
/**
2013-10-31 18:00:53 +00:00
* send an email
2012-04-23 13:50:30 +00:00
* @ param string $toaddress
* @ param string $toname
* @ param string $subject
* @ param string $mailtext
* @ param string $fromaddress
* @ param string $fromname
2014-04-21 13:44:54 +00:00
* @ param int $html
2013-10-31 18:00:53 +00:00
* @ param string $altbody
* @ param string $ccaddress
* @ param string $ccname
* @ param string $bcc
2015-04-18 23:04:59 +00:00
* @ deprecated 8.1 . 0 Use \OCP\Mail\IMailer instead
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-04-23 13:50:30 +00:00
*/
2015-03-16 13:10:03 +00:00
public static function sendMail ( $toaddress , $toname , $subject , $mailtext , $fromaddress , $fromname ,
2013-02-11 16:44:02 +00:00
$html = 0 , $altbody = '' , $ccaddress = '' , $ccname = '' , $bcc = '' ) {
2015-02-12 12:53:27 +00:00
$mailer = \OC :: $server -> getMailer ();
$message = $mailer -> createMessage ();
2015-03-16 13:10:03 +00:00
$message -> setTo ([ $toaddress => $toname ]);
2015-02-12 12:53:27 +00:00
$message -> setSubject ( $subject );
$message -> setPlainBody ( $mailtext );
2015-03-16 13:10:03 +00:00
$message -> setFrom ([ $fromaddress => $fromname ]);
2015-02-12 12:53:27 +00:00
if ( $html === 1 ) {
$message -> setHTMLBody ( $altbody );
}
2015-03-16 13:10:03 +00:00
if ( $altbody === '' ) {
$message -> setHTMLBody ( $mailtext );
$message -> setPlainBody ( '' );
} else {
$message -> setHtmlBody ( $mailtext );
$message -> setPlainBody ( $altbody );
}
2015-02-12 12:53:27 +00:00
if ( ! empty ( $ccaddress )) {
if ( ! empty ( $ccname )) {
2015-03-16 13:10:03 +00:00
$message -> setCc ([ $ccaddress => $ccname ]);
2015-02-12 12:53:27 +00:00
} else {
2015-03-16 13:10:03 +00:00
$message -> setCc ([ $ccaddress ]);
2015-02-12 12:53:27 +00:00
}
}
if ( ! empty ( $bcc )) {
2015-03-16 13:10:03 +00:00
$message -> setBcc ([ $bcc ]);
2015-02-12 12:53:27 +00:00
}
$mailer -> send ( $message );
2012-04-23 13:50:30 +00:00
}
2012-09-08 14:18:47 +00:00
/**
2013-10-31 18:00:53 +00:00
* write a message in the log
2012-05-01 07:39:12 +00:00
* @ param string $app
* @ param string $message
2012-12-25 17:17:32 +00:00
* @ param int $level
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-09-08 14:18:47 +00:00
*/
public static function writeLog ( $app , $message , $level ) {
2015-07-03 13:02:51 +00:00
$context = [ 'app' => $app ];
\OC :: $server -> getLogger () -> log ( $level , $message , $context );
2012-09-08 14:18:47 +00:00
}
2012-05-01 07:39:12 +00:00
2013-10-23 08:47:26 +00:00
/**
2014-09-11 12:14:02 +00:00
* write exception into the log
2013-10-31 18:00:53 +00:00
* @ param string $app app name
2014-04-21 13:44:54 +00:00
* @ param \Exception $ex exception to log
2014-09-11 12:14:02 +00:00
* @ param int $level log level , defaults to \OCP\Util :: FATAL
2015-04-16 15:00:08 +00:00
* @ since .... 0.0 - parameter $level was added in 7.0 . 0
2015-09-24 15:01:31 +00:00
* @ deprecated 8.2 . 0 use logException of \OCP\ILogger
2013-10-23 08:47:26 +00:00
*/
2014-05-05 09:31:25 +00:00
public static function logException ( $app , \Exception $ex , $level = \OCP\Util :: FATAL ) {
2015-09-24 15:01:31 +00:00
\OC :: $server -> getLogger () -> logException ( $ex , [ 'app' => $app ]);
2013-10-23 08:47:26 +00:00
}
2014-05-13 13:22:18 +00:00
/**
* check if sharing is disabled for the current user
*
* @ return boolean
2015-04-16 15:00:08 +00:00
* @ since 7.0 . 0
2016-05-03 09:58:33 +00:00
* @ deprecated 9.1 . 0 Use \OC :: $server -> getShareManager () -> sharingDisabledForUser
2014-05-13 13:22:18 +00:00
*/
public static function isSharingDisabledForUser () {
2016-05-03 09:58:33 +00:00
if ( self :: $shareManager === null ) {
self :: $shareManager = \OC :: $server -> getShareManager ();
}
2016-05-03 12:05:51 +00:00
$user = \OC :: $server -> getUserSession () -> getUser ();
if ( $user !== null ) {
$user = $user -> getUID ();
}
return self :: $shareManager -> sharingDisabledForUser ( $user );
2014-05-13 13:22:18 +00:00
}
2013-07-19 09:40:11 +00:00
/**
2013-10-31 18:00:53 +00:00
* get l10n object
* @ param string $application
2014-07-21 12:50:34 +00:00
* @ param string | null $language
2014-01-13 13:28:49 +00:00
* @ return \OC_L10N
2015-04-16 15:00:08 +00:00
* @ since 6.0 . 0 - parameter $language was added in 8.0 . 0
2013-07-19 09:40:11 +00:00
*/
2014-07-21 12:50:34 +00:00
public static function getL10N ( $application , $language = null ) {
2014-08-31 08:05:59 +00:00
return \OC :: $server -> getL10N ( $application , $language );
2012-09-08 14:18:47 +00:00
}
2012-05-01 07:39:12 +00:00
/**
2013-10-31 18:00:53 +00:00
* add a css file
* @ param string $application
* @ param string $file
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-01 07:39:12 +00:00
*/
2012-09-07 13:22:01 +00:00
public static function addStyle ( $application , $file = null ) {
2012-05-06 20:02:16 +00:00
\OC_Util :: addStyle ( $application , $file );
2012-09-08 14:18:47 +00:00
}
2012-05-06 20:02:16 +00:00
2012-05-01 19:07:08 +00:00
/**
2013-10-31 18:00:53 +00:00
* add a javascript file
2012-12-25 17:17:32 +00:00
* @ param string $application
2013-10-31 18:00:53 +00:00
* @ param string $file
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-01 19:07:08 +00:00
*/
2012-09-07 13:22:01 +00:00
public static function addScript ( $application , $file = null ) {
2012-05-06 20:02:16 +00:00
\OC_Util :: addScript ( $application , $file );
2012-09-08 14:18:47 +00:00
}
2012-04-23 13:50:30 +00:00
2014-10-17 17:47:37 +00:00
/**
* Add a translation JS file
* @ param string $application application id
* @ param string $languageCode language code , defaults to the current locale
2015-04-16 15:00:08 +00:00
* @ since 8.0 . 0
2014-10-17 17:47:37 +00:00
*/
public static function addTranslations ( $application , $languageCode = null ) {
\OC_Util :: addTranslations ( $application , $languageCode );
}
2012-05-01 19:07:08 +00:00
/**
2013-10-31 18:00:53 +00:00
* Add a custom element to the header
2014-10-28 10:15:58 +00:00
* If $text is null then the element will be written as empty element .
* So use " " to get a closing tag .
2012-12-25 17:17:32 +00:00
* @ param string $tag tag name of the element
2012-05-01 19:07:08 +00:00
* @ param array $attributes array of attributes for the element
* @ param string $text the text content for the element
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-01 19:07:08 +00:00
*/
2014-10-28 10:15:58 +00:00
public static function addHeader ( $tag , $attributes , $text = null ) {
\OC_Util :: addHeader ( $tag , $attributes , $text );
2012-05-01 19:07:08 +00:00
}
2012-04-23 13:50:30 +00:00
2012-05-01 19:07:08 +00:00
/**
2013-10-31 18:00:53 +00:00
* formats a timestamp in the " right " way
2012-12-25 17:17:32 +00:00
* @ param int $timestamp $timestamp
* @ param bool $dateOnly option to omit time from the result
2014-09-22 13:03:28 +00:00
* @ param DateTimeZone | string $timeZone where the given timestamp shall be converted to
2014-04-21 13:44:54 +00:00
* @ return string timestamp
2014-11-24 15:37:04 +00:00
*
2015-04-18 23:04:59 +00:00
* @ deprecated 8.0 . 0 Use \OC :: $server -> query ( 'DateTimeFormatter' ) instead
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-01 19:07:08 +00:00
*/
2014-09-22 13:03:28 +00:00
public static function formatDate ( $timestamp , $dateOnly = false , $timeZone = null ) {
return ( \OC_Util :: formatDate ( $timestamp , $dateOnly , $timeZone ));
2012-05-01 19:07:08 +00:00
}
2012-04-23 13:50:30 +00:00
2013-08-12 15:25:27 +00:00
/**
2013-10-31 18:00:53 +00:00
* check if some encrypted files are stored
2013-08-12 15:25:27 +00:00
* @ return bool
2015-03-31 09:50:53 +00:00
*
2015-04-18 23:04:59 +00:00
* @ deprecated 8.1 . 0 No longer required
2015-04-16 15:00:08 +00:00
* @ since 6.0 . 0
2013-08-12 15:25:27 +00:00
*/
public static function encryptedFiles () {
2015-03-31 09:50:53 +00:00
return false ;
2013-08-12 15:25:27 +00:00
}
2013-10-31 18:00:53 +00:00
2012-05-01 21:19:39 +00:00
/**
2013-10-31 18:00:53 +00:00
* Creates an absolute url to the given app and file .
2012-12-25 17:17:32 +00: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-28 20:27:52 +00:00
* The value of $args will be urlencoded
2013-10-31 18:00:53 +00:00
* @ return string the url
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0 - parameter $args was added in 4.5 . 0
2012-05-01 21:19:39 +00:00
*/
2012-09-03 16:13:45 +00:00
public static function linkToAbsolute ( $app , $file , $args = array () ) {
2015-12-18 10:46:21 +00:00
$urlGenerator = \OC :: $server -> getURLGenerator ();
return $urlGenerator -> getAbsoluteURL (
$urlGenerator -> linkTo ( $app , $file , $args )
);
2012-05-01 21:19:39 +00:00
}
2012-05-01 20:59:38 +00:00
2012-05-07 18:22:55 +00:00
/**
2013-10-31 18:00:53 +00:00
* Creates an absolute url for remote use .
2012-12-25 17:17:32 +00:00
* @ param string $service id
2013-10-31 18:00:53 +00:00
* @ return string the url
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-07 18:22:55 +00:00
*/
public static function linkToRemote ( $service ) {
2015-12-18 11:00:18 +00:00
$urlGenerator = \OC :: $server -> getURLGenerator ();
$remoteBase = $urlGenerator -> linkTo ( '' , 'remote.php' ) . '/' . $service ;
return $urlGenerator -> getAbsoluteURL (
$remoteBase . (( $service [ strlen ( $service ) - 1 ] != '/' ) ? '/' : '' )
);
2012-05-07 18:22:55 +00:00
}
2012-08-27 19:46:05 +00:00
/**
2013-10-31 18:00:53 +00:00
* Creates an absolute url for public use
2012-12-25 17:17:32 +00:00
* @ param string $service id
2013-10-31 18:00:53 +00:00
* @ return string the url
2015-04-16 15:00:08 +00:00
* @ since 4.5 . 0
2012-08-27 19:46:05 +00:00
*/
public static function linkToPublic ( $service ) {
return \OC_Helper :: linkToPublic ( $service );
}
2012-06-14 10:57:30 +00:00
/**
2013-10-31 18:00:53 +00:00
* Creates an url using a defined route
2014-05-11 20:51:30 +00:00
* @ param string $route
2013-02-08 21:05:13 +00:00
* @ param array $parameters
* @ internal param array $args with param => value , will be appended to the returned url
2014-04-21 13:44:54 +00:00
* @ return string the url
2015-04-18 23:04:59 +00:00
* @ deprecated 8.1 . 0 Use \OC :: $server -> getURLGenerator () -> linkToRoute ( $route , $parameters )
2015-04-16 15:00:08 +00:00
* @ since 5.0 . 0
2013-02-08 21:05:13 +00:00
*/
public static function linkToRoute ( $route , $parameters = array () ) {
2015-12-17 07:19:06 +00:00
return \OC :: $server -> getURLGenerator () -> linkToRoute ( $route , $parameters );
2013-02-08 21:05:13 +00:00
}
/**
2015-04-16 15:00:08 +00:00
* Creates an url to the given app and file
* @ param string $app app
* @ param string $file file
* @ param array $args array with param => value , will be appended to the returned url
* The value of $args will be urlencoded
* @ return string the url
2015-04-18 23:04:59 +00:00
* @ deprecated 8.1 . 0 Use \OC :: $server -> getURLGenerator () -> linkTo ( $app , $file , $args )
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0 - parameter $args was added in 4.5 . 0
*/
2012-09-07 13:22:01 +00:00
public static function linkTo ( $app , $file , $args = array () ) {
2015-12-17 09:53:21 +00:00
return \OC :: $server -> getURLGenerator () -> linkTo ( $app , $file , $args );
2012-05-01 21:19:39 +00:00
}
2012-05-01 20:59:38 +00:00
2012-05-01 21:19:39 +00:00
/**
2013-10-31 18:00:53 +00:00
* Returns the server host , even if the website uses one or more reverse proxy
* @ return string the server host
2015-04-18 23:04:59 +00:00
* @ deprecated 8.1 . 0 Use \OCP\IRequest :: getServerHost
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-01 21:19:39 +00:00
*/
public static function getServerHost () {
2015-02-10 12:02:48 +00:00
return \OC :: $server -> getRequest () -> getServerHost ();
2012-05-01 21:19:39 +00:00
}
2012-05-01 20:59:38 +00:00
2012-12-19 00:09:14 +00:00
/**
* Returns the server host name without an eventual port number
2013-10-31 18:00:53 +00:00
* @ return string the server hostname
2015-04-16 15:00:08 +00:00
* @ since 5.0 . 0
2012-12-19 00:09:14 +00:00
*/
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 ;
}
/**
2013-10-31 18:00:53 +00:00
* Returns the default email address
2012-12-25 17:17:32 +00:00
* @ param string $user_part the user part of the address
2013-10-31 18:00:53 +00:00
* @ return string the default email address
2012-12-19 00:09:14 +00: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'
2014-01-24 13:22:42 +00:00
*
* If the configuration value 'mail_from_address' is set in
* config . php , this value will override the $user_part that
* is passed to this function
2015-04-16 15:00:08 +00:00
* @ since 5.0 . 0
2012-12-19 00:09:14 +00:00
*/
public static function getDefaultEmailAddress ( $user_part ) {
2015-12-02 13:49:40 +00:00
$config = \OC :: $server -> getConfig ();
$user_part = $config -> getSystemValue ( 'mail_from_address' , $user_part );
2012-12-19 00:09:14 +00:00
$host_name = self :: getServerHostName ();
2015-12-02 13:49:40 +00:00
$host_name = $config -> getSystemValue ( 'mail_domain' , $host_name );
2013-03-01 21:24:19 +00:00
$defaultEmailAddress = $user_part . '@' . $host_name ;
2015-02-19 17:55:27 +00:00
$mailer = \OC :: $server -> getMailer ();
if ( $mailer -> validateMailAddress ( $defaultEmailAddress )) {
2013-03-01 21:24:19 +00:00
return $defaultEmailAddress ;
2012-12-19 00:09:14 +00:00
}
2013-03-01 21:24:19 +00:00
2013-03-04 20:10:18 +00:00
// in case we cannot build a valid email address from the hostname let's fallback to 'localhost.localdomain'
2013-03-01 21:24:19 +00:00
return $user_part . '@localhost.localdomain' ;
2012-12-19 00:09:14 +00:00
}
2012-06-01 08:38:44 +00:00
/**
* Returns the server protocol . It respects reverse proxy servers and load balancers
2013-10-31 18:00:53 +00:00
* @ return string the server protocol
2015-04-18 23:04:59 +00:00
* @ deprecated 8.1 . 0 Use \OCP\IRequest :: getServerProtocol
2015-04-16 15:00:08 +00:00
* @ since 4.5 . 0
2012-06-01 08:38:44 +00:00
*/
public static function getServerProtocol () {
2015-02-10 12:02:48 +00:00
return \OC :: $server -> getRequest () -> getServerProtocol ();
2012-06-01 08:38:44 +00:00
}
2012-09-09 10:54:47 +00:00
/**
2013-10-31 18:00:53 +00:00
* Returns the request uri , even if the website uses one or more reverse proxies
2014-04-21 13:44:54 +00:00
* @ return string the request uri
2015-04-18 23:04:59 +00:00
* @ deprecated 8.1 . 0 Use \OCP\IRequest :: getRequestUri
2015-04-16 15:00:08 +00:00
* @ since 5.0 . 0
2012-09-09 10:54:47 +00:00
*/
public static function getRequestUri () {
2015-02-10 12:02:48 +00:00
return \OC :: $server -> getRequest () -> getRequestUri ();
2012-09-09 10:54:47 +00:00
}
/**
2013-10-31 18:00:53 +00:00
* Returns the script name , even if the website uses one or more reverse proxies
2014-05-11 17:05:28 +00:00
* @ return string the script name
2015-04-18 23:04:59 +00:00
* @ deprecated 8.1 . 0 Use \OCP\IRequest :: getScriptName
2015-04-16 15:00:08 +00:00
* @ since 5.0 . 0
2012-09-09 10:54:47 +00:00
*/
public static function getScriptName () {
2015-02-10 12:02:48 +00:00
return \OC :: $server -> getRequest () -> getScriptName ();
2012-09-09 10:54:47 +00:00
}
2012-05-01 22:20:45 +00:00
/**
2013-10-31 18:00:53 +00:00
* Creates path to an image
2012-12-25 17:17:32 +00:00
* @ param string $app app
* @ param string $image image name
2013-10-31 18:00:53 +00:00
* @ return string the url
2015-04-18 23:04:59 +00:00
* @ deprecated 8.1 . 0 Use \OC :: $server -> getURLGenerator () -> imagePath ( $app , $image )
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-01 22:20:45 +00:00
*/
2012-09-08 14:18:47 +00:00
public static function imagePath ( $app , $image ) {
2015-04-18 22:29:09 +00:00
return \OC :: $server -> getURLGenerator () -> imagePath ( $app , $image );
2012-05-01 22:20:45 +00:00
}
/**
2013-10-31 18:00:53 +00:00
* Make a human file size ( 2048 to 2 kB )
2012-12-25 17:17:32 +00:00
* @ param int $bytes file size in bytes
2013-10-31 18:00:53 +00:00
* @ return string a human readable file size
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-01 22:20:45 +00:00
*/
2012-09-07 13:22:01 +00:00
public static function humanFileSize ( $bytes ) {
2012-05-01 22:20:45 +00:00
return ( \OC_Helper :: humanFileSize ( $bytes ));
}
/**
2013-10-31 18:00:53 +00:00
* Make a computer file size ( 2 kB to 2048 )
2012-12-25 17:17:32 +00:00
* @ param string $str file size in a fancy format
2013-10-31 18:00:53 +00:00
* @ return int a file size in bytes
2012-05-01 22:20:45 +00:00
*
* Inspired by : http :// www . php . net / manual / en / function . filesize . php #92418
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-01 22:20:45 +00:00
*/
2012-09-07 13:22:01 +00:00
public static function computerFileSize ( $str ) {
2012-05-01 22:20:45 +00:00
return ( \OC_Helper :: computerFileSize ( $str ));
}
2012-05-05 08:18:45 +00:00
/**
2013-10-31 18:00:53 +00:00
* connects a function to a hook
2015-04-02 15:53:40 +00:00
*
* @ param string $signalClass class name of emitter
* @ param string $signalName name of signal
* @ param string | object $slotClass class name of slot
* @ param string $slotName name of slot
2013-10-31 18:00:53 +00:00
* @ return bool
2012-05-05 08:18:45 +00:00
*
* This function makes it very easy to connect to use hooks .
*
* TODO : write example
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-05 08:18:45 +00:00
*/
2015-04-02 15:53:40 +00:00
static public function connectHook ( $signalClass , $signalName , $slotClass , $slotName ) {
return ( \OC_Hook :: connect ( $signalClass , $signalName , $slotClass , $slotName ));
2012-05-05 08:18:45 +00:00
}
2012-05-01 22:20:45 +00:00
2012-05-05 08:18:45 +00:00
/**
2013-10-31 18:00:53 +00:00
* Emits a signal . To get data from the slot use references !
2012-12-25 17:17:32 +00:00
* @ param string $signalclass class name of emitter
* @ param string $signalname name of signal
2014-04-21 13:44:54 +00:00
* @ param array $params default : array () array with additional data
2013-10-31 18:00:53 +00:00
* @ return bool true if slots exists or false if not
2012-05-05 08:18:45 +00:00
*
* TODO : write example
2015-04-16 15:00:08 +00:00
* @ since 4.0 . 0
2012-05-05 08:18:45 +00:00
*/
2012-09-07 13:22:01 +00:00
static public function emitHook ( $signalclass , $signalname , $params = array ()) {
2012-05-05 08:18:45 +00:00
return ( \OC_Hook :: emit ( $signalclass , $signalname , $params ));
}
2012-05-01 20:59:38 +00:00
2016-01-25 16:15:54 +00:00
/**
* Cached encrypted CSRF token . Some static unit - tests of ownCloud compare
* multiple OC_Template elements which invoke `callRegister` . If the value
* would not be cached these unit - tests would fail .
* @ var string
*/
private static $token = '' ;
2012-06-09 13:05:14 +00:00
/**
2012-08-29 18:34:44 +00:00
* Register an get / post call . This is important to prevent CSRF attacks
2015-04-16 15:00:08 +00:00
* @ since 4.5 . 0
2012-06-09 13:05:14 +00:00
*/
2012-09-07 13:22:01 +00:00
public static function callRegister () {
2016-01-25 16:15:54 +00:00
if ( self :: $token === '' ) {
self :: $token = \OC :: $server -> getCsrfTokenManager () -> getToken () -> getEncryptedValue ();
}
return self :: $token ;
2012-06-09 13:05:14 +00:00
}
/**
* Check an ajax get / post call if the request token is valid . exit if not .
2015-04-16 15:00:08 +00:00
* @ since 4.5 . 0
2016-01-25 16:15:54 +00:00
* @ deprecated 9.0 . 0 Use annotations based on the app framework .
2012-06-09 13:05:14 +00:00
*/
2012-09-07 13:22:01 +00:00
public static function callCheck () {
2016-07-20 15:37:30 +00:00
if ( ! \OC :: $server -> getRequest () -> passesStrictCookieCheck ()) {
header ( 'Location: ' . \OC :: $WEBROOT );
exit ();
}
2015-12-18 14:43:13 +00:00
if ( ! ( \OC :: $server -> getRequest () -> passesCSRFCheck ())) {
exit ();
}
2012-06-09 13:05:14 +00:00
}
2012-07-02 18:24:26 +00:00
/**
2013-10-31 18:00:53 +00:00
* Used to sanitize HTML
2012-07-02 18:24:26 +00:00
*
2013-02-11 16:44:02 +00:00
* 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-07-02 18:24:26 +00:00
*
2014-05-11 20:51:30 +00:00
* @ param string | array $value
2015-12-08 07:28:15 +00:00
* @ return string | array an array of sanitized strings or a single sanitized string , depends on the input parameter .
2015-04-16 15:00:08 +00:00
* @ since 4.5 . 0
2012-07-02 18:24:26 +00:00
*/
2015-12-08 07:28:15 +00:00
public static function sanitizeHTML ( $value ) {
return \OC_Util :: sanitizeHTML ( $value );
2012-07-02 18:24:26 +00:00
}
2013-10-31 18:00:53 +00:00
2013-07-04 16:21:49 +00:00
/**
2013-10-31 18:00:53 +00:00
* Public function to encode url parameters
2013-07-04 16:21:49 +00:00
*
* This function is used to encode path to file before output .
* Encoding is done according to RFC 3986 with one exception :
2013-10-31 18:00:53 +00:00
* Character '/' is preserved as is .
2013-07-04 16:21:49 +00:00
*
* @ param string $component part of URI to encode
2013-10-31 18:00:53 +00:00
* @ return string
2015-04-16 15:00:08 +00:00
* @ since 6.0 . 0
2013-07-04 16:21:49 +00:00
*/
public static function encodePath ( $component ) {
return ( \OC_Util :: encodePath ( $component ));
}
2012-07-02 18:24:26 +00:00
/**
2013-10-31 18:00:53 +00:00
* Returns an array with all keys from input lowercased or uppercased . Numbered indices are left as is .
*
* @ 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
* @ return array
2015-04-16 15:00:08 +00:00
* @ since 4.5 . 0
2013-10-31 18:00:53 +00:00
*/
2012-09-07 13:22:01 +00:00
public static function mb_array_change_key_case ( $input , $case = MB_CASE_LOWER , $encoding = 'UTF-8' ) {
2012-07-02 18:24:26 +00:00
return ( \OC_Helper :: mb_array_change_key_case ( $input , $case , $encoding ));
}
/**
2013-10-31 18:00:53 +00:00
* replaces a copy of string delimited by the start and ( optionally ) length parameters with the string given in replacement .
*
* @ param string $string 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
* @ return string
2015-04-16 15:00:08 +00:00
* @ since 4.5 . 0
2015-06-19 12:55:04 +00:00
* @ deprecated 8.2 . 0 Use substr_replace () instead .
2013-10-31 18:00:53 +00:00
*/
2012-07-02 18:24:26 +00:00
public static function mb_substr_replace ( $string , $replacement , $start , $length = null , $encoding = 'UTF-8' ) {
2015-11-26 09:25:43 +00:00
return substr_replace ( $string , $replacement , $start , $length );
2012-07-02 18:24:26 +00:00
}
/**
2013-10-31 18:00:53 +00:00
* Replace all occurrences of the search string with the replacement string
*
* @ 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 .
* @ return string
2015-04-16 15:00:08 +00:00
* @ since 4.5 . 0
2015-06-19 12:55:04 +00:00
* @ deprecated 8.2 . 0 Use str_replace () instead .
2013-10-31 18:00:53 +00:00
*/
2012-07-02 18:24:26 +00:00
public static function mb_str_replace ( $search , $replace , $subject , $encoding = 'UTF-8' , & $count = null ) {
2015-11-26 09:25:43 +00:00
return str_replace ( $search , $replace , $subject , $count );
2012-06-19 15:20:19 +00:00
}
2012-07-24 08:54:56 +00:00
/**
2013-10-31 18:00:53 +00:00
* performs a search in a nested array
*
* @ 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
2015-04-16 15:00:08 +00:00
* @ since 4.5 . 0
2013-10-31 18:00:53 +00:00
*/
2012-07-24 08:54:56 +00:00
public static function recursiveArraySearch ( $haystack , $needle , $index = null ) {
return ( \OC_Helper :: recursiveArraySearch ( $haystack , $needle , $index ));
}
2012-12-20 16:16:01 +00:00
2013-01-18 19:09:03 +00:00
/**
2013-10-31 18:00:53 +00:00
* calculates the maximum upload size respecting system settings , free space and user quota
2013-01-18 19:09:03 +00:00
*
2014-01-27 14:56:57 +00:00
* @ param string $dir the current folder where the user currently operates
* @ param int $free the number of bytes free on the storage holding $dir , if not set this will be received from the storage directly
2014-05-11 20:51:30 +00:00
* @ return int number of bytes representing
2015-04-16 15:00:08 +00:00
* @ since 5.0 . 0
2013-01-18 19:09:03 +00:00
*/
2014-01-27 14:56:57 +00:00
public static function maxUploadFilesize ( $dir , $free = null ) {
return \OC_Helper :: maxUploadFilesize ( $dir , $free );
2013-01-18 19:09:03 +00:00
}
2013-12-08 14:59:46 +00:00
/**
* Calculate free space left within user quota
2014-04-21 13:44:54 +00:00
* @ param string $dir the current folder where the user currently operates
* @ return int number of bytes representing
2015-04-16 15:00:08 +00:00
* @ since 7.0 . 0
2013-12-08 14:59:46 +00:00
*/
public static function freeSpace ( $dir ) {
return \OC_Helper :: freeSpace ( $dir );
}
/**
* Calculate PHP upload limit
*
2014-05-11 20:51:30 +00:00
* @ return int number of bytes representing
2015-04-16 15:00:08 +00:00
* @ since 7.0 . 0
2013-12-08 14:59:46 +00:00
*/
public static function uploadLimit () {
return \OC_Helper :: uploadLimit ();
}
2014-01-10 15:14:37 +00:00
/**
* Returns whether the given file name is valid
2014-05-11 20:51:30 +00:00
* @ param string $file file name to check
2014-01-10 15:14:37 +00:00
* @ return bool true if the file name is valid , false otherwise
2015-04-18 23:04:59 +00:00
* @ deprecated 8.1 . 0 use \OC\Files\View :: verifyPath ()
2015-04-16 15:00:08 +00:00
* @ since 7.0 . 0
2014-01-10 15:14:37 +00:00
*/
public static function isValidFileName ( $file ) {
return \OC_Util :: isValidFileName ( $file );
}
2014-03-19 10:42:22 +00:00
/**
2014-05-19 15:50:53 +00:00
* Generates a cryptographic secure pseudo - random string
2014-05-11 20:51:30 +00:00
* @ param int $length of the random string
* @ return string
2015-04-18 23:04:59 +00:00
* @ deprecated 8.0 . 0 Use \OC :: $server -> getSecureRandom () -> getMediumStrengthGenerator () -> generate ( $length ); instead
2015-04-16 15:00:08 +00:00
* @ since 7.0 . 0
2014-03-19 10:42:22 +00:00
*/
public static function generateRandomBytes ( $length = 30 ) {
2016-01-10 21:07:33 +00:00
return \OC :: $server -> getSecureRandom () -> generate ( $length , \OCP\Security\ISecureRandom :: CHAR_LOWER . \OCP\Security\ISecureRandom :: CHAR_DIGITS );
2014-03-19 10:42:22 +00:00
}
2014-05-12 10:19:07 +00:00
2014-02-18 11:29:05 +00:00
/**
* Compare two strings to provide a natural sort
2014-11-25 15:28:41 +00:00
* @ param string $a first string to compare
* @ param string $b second string to compare
2014-02-18 11:29:05 +00:00
* @ return - 1 if $b comes before $a , 1 if $a comes before $b
* or 0 if the strings are identical
2015-04-16 15:00:08 +00:00
* @ since 7.0 . 0
2014-02-18 11:29:05 +00:00
*/
public static function naturalSortCompare ( $a , $b ) {
return \OC\NaturalSort :: getInstance () -> compare ( $a , $b );
}
2014-05-12 10:19:07 +00:00
/**
2014-05-19 15:50:53 +00:00
* check if a password is required for each public link
2014-05-12 10:19:07 +00:00
* @ return boolean
2015-04-16 15:00:08 +00:00
* @ since 7.0 . 0
2014-05-12 10:19:07 +00:00
*/
public static function isPublicLinkPasswordRequired () {
return \OC_Util :: isPublicLinkPasswordRequired ();
}
2014-06-10 16:01:07 +00:00
2014-07-23 14:42:33 +00:00
/**
* check if share API enforces a default expire date
* @ return boolean
2015-04-16 15:00:08 +00:00
* @ since 8.0 . 0
2014-07-23 14:42:33 +00:00
*/
public static function isDefaultExpireDateEnforced () {
return \OC_Util :: isDefaultExpireDateEnforced ();
}
2015-09-10 04:20:07 +00:00
protected static $needUpgradeCache = null ;
2014-07-23 14:42:33 +00:00
2014-06-10 16:01:07 +00:00
/**
* Checks whether the current version needs upgrade .
*
* @ return bool true if upgrade is needed , false otherwise
2015-04-16 15:00:08 +00:00
* @ since 7.0 . 0
2014-06-10 16:01:07 +00:00
*/
public static function needUpgrade () {
2015-09-10 04:20:07 +00:00
if ( ! isset ( self :: $needUpgradeCache )) {
self :: $needUpgradeCache = \OC_Util :: needUpgrade ( \OC :: $server -> getConfig ());
}
return self :: $needUpgradeCache ;
2014-06-10 16:01:07 +00:00
}
2012-05-01 19:07:08 +00:00
}