]> source.dussan.org Git - nextcloud-server.git/commitdiff
split of mimetype detection code from OC_Helper, adding the option for apps to regist...
authorRobin Appelman <icewind@owncloud.com>
Wed, 7 Aug 2013 14:38:57 +0000 (16:38 +0200)
committerRobin Appelman <icewind@owncloud.com>
Wed, 7 Aug 2013 14:38:57 +0000 (16:38 +0200)
lib/files/type/detection.php [new file with mode: 0644]
lib/helper.php

diff --git a/lib/files/type/detection.php b/lib/files/type/detection.php
new file mode 100644 (file)
index 0000000..1fe49a9
--- /dev/null
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Type;
+
+/**
+ * Class Detection
+ *
+ * Mimetype detection
+ *
+ * @package OC\Files\Type
+ */
+class Detection {
+       protected $mimetypes = array();
+
+       /**
+        * add an extension -> mimetype mapping
+        *
+        * @param string $extension
+        * @param string $mimetype
+        */
+       public function registerType($extension, $mimetype) {
+               $this->mimetypes[$extension] = $mimetype;
+       }
+
+       /**
+        * add an array of extension -> mimetype mappings
+        *
+        * @param array $types
+        */
+       public function registerTypeArray($types) {
+               $this->mimetypes = array_merge($this->mimetypes, $types);
+       }
+
+       /**
+        * detect mimetype only based on filename, content of file is not used
+        *
+        * @param string $path
+        * @return string
+        */
+       public function detectPath($path) {
+               if (strpos($path, '.')) {
+                       //try to guess the type by the file extension
+                       $extension = strtolower(strrchr(basename($path), "."));
+                       $extension = substr($extension, 1); //remove leading .
+                       return (isset($this->mimetypes[$extension])) ? $this->mimetypes[$extension] : 'application/octet-stream';
+               } else {
+                       return 'application/octet-stream';
+               }
+       }
+
+       /**
+        * detect mimetype based on both filename and content
+        *
+        * @param string $path
+        * @return string
+        */
+       public function detect($path) {
+               $isWrapped = (strpos($path, '://') !== false) and (substr($path, 0, 7) == 'file://');
+
+               if (@is_dir($path)) {
+                       // directories are easy
+                       return "httpd/unix-directory";
+               }
+
+               $mimeType = $this->detectPath($path);
+
+               if ($mimeType == 'application/octet-stream' and function_exists('finfo_open')
+                       and function_exists('finfo_file') and $finfo = finfo_open(FILEINFO_MIME)
+               ) {
+                       $info = @strtolower(finfo_file($finfo, $path));
+                       if ($info) {
+                               $mimeType = substr($info, 0, strpos($info, ';'));
+                       }
+                       finfo_close($finfo);
+               }
+               if (!$isWrapped and $mimeType == 'application/octet-stream' && function_exists("mime_content_type")) {
+                       // use mime magic extension if available
+                       $mimeType = mime_content_type($path);
+               }
+               if (!$isWrapped and $mimeType == 'application/octet-stream' && \OC_Helper::canExecute("file")) {
+                       // it looks like we have a 'file' command,
+                       // lets see if it does have mime support
+                       $path = escapeshellarg($path);
+                       $fp = popen("file -b --mime-type $path 2>/dev/null", "r");
+                       $reply = fgets($fp);
+                       pclose($fp);
+
+                       //trim the newline
+                       $mimeType = trim($reply);
+
+               }
+               return $mimeType;
+       }
+
+       /**
+        * detect mimetype based on the content of a string
+        *
+        * @param string $data
+        * @return string
+        */
+       public function detectString($data) {
+               if (function_exists('finfo_open') and function_exists('finfo_file')) {
+                       $finfo = finfo_open(FILEINFO_MIME);
+                       return finfo_buffer($finfo, $data);
+               } else {
+                       $tmpFile = \OC_Helper::tmpFile();
+                       $fh = fopen($tmpFile, 'wb');
+                       fwrite($fh, $data, 8024);
+                       fclose($fh);
+                       $mime = $this->detect($tmpFile);
+                       unset($tmpFile);
+                       return $mime;
+               }
+       }
+}
index ca508e1d9334dd5ad85a308babbd5977ab5b9253..801f06352d06a09f5fa8172e0dc91d7795291712 100644 (file)
@@ -25,9 +25,9 @@
  * Collection of useful functions
  */
 class OC_Helper {
-       private static $mimetypes=array();
-       private static $tmpFiles=array();
+       private static $tmpFiles = array();
        private static $mimetypeIcons = array();
+       private static $mimetypeDetector;
 
        /**
         * @brief Creates an url using a defined route
@@ -39,7 +39,7 @@ class OC_Helper {
         *
         * Returns a url to the given app and file.
         */
-       public static function linkToRoute( $route, $parameters = array() ) {
+       public static function linkToRoute($route, $parameters = array()) {
                $urlLinkTo = OC::getRouter()->generate($route, $parameters);
                return $urlLinkTo;
        }
@@ -49,38 +49,35 @@ class OC_Helper {
         * @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
+        *    The value of $args will be urlencoded
         * @return string the url
         *
         * Returns a url to the given app and file.
         */
-       public static function linkTo( $app, $file, $args = array() ) {
-               if( $app != '' ) {
+       public static function linkTo($app, $file, $args = array()) {
+               if ($app != '') {
                        $app_path = OC_App::getAppPath($app);
                        // Check if the app is in the app folder
-                       if( $app_path && file_exists( $app_path.'/'.$file )) {
-                               if(substr($file, -3) == 'php' || substr($file, -3) == 'css') {
-                                       $urlLinkTo =  OC::$WEBROOT . '/index.php/apps/' . $app;
-                                       $urlLinkTo .= ($file!='index.php') ? '/' . $file : '';
-                               }else{
-                                       $urlLinkTo =  OC_App::getAppWebPath($app) . '/' . $file;
+                       if ($app_path && file_exists($app_path . '/' . $file)) {
+                               if (substr($file, -3) == 'php' || substr($file, -3) == 'css') {
+                                       $urlLinkTo = OC::$WEBROOT . '/index.php/apps/' . $app;
+                                       $urlLinkTo .= ($file != 'index.php') ? '/' . $file : '';
+                               } else {
+                                       $urlLinkTo = OC_App::getAppWebPath($app) . '/' . $file;
                                }
+                       } else {
+                               $urlLinkTo = OC::$WEBROOT . '/' . $app . '/' . $file;
                        }
-                       else{
-                               $urlLinkTo =  OC::$WEBROOT . '/' . $app . '/' . $file;
-                       }
-               }
-               else{
-                       if( file_exists( OC::$SERVERROOT . '/core/'. $file )) {
-                               $urlLinkTo =  OC::$WEBROOT . '/core/'.$file;
-                       }
-                       else{
-                               $urlLinkTo =  OC::$WEBROOT . '/'.$file;
+               } else {
+                       if (file_exists(OC::$SERVERROOT . '/core/' . $file)) {
+                               $urlLinkTo = OC::$WEBROOT . '/core/' . $file;
+                       } else {
+                               $urlLinkTo = OC::$WEBROOT . '/' . $file;
                        }
                }
 
                if ($args && $query = http_build_query($args, '', '&')) {
-                       $urlLinkTo .= '?'.$query;
+                       $urlLinkTo .= '?' . $query;
                }
 
                return $urlLinkTo;
@@ -91,13 +88,13 @@ class OC_Helper {
         * @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
+        *    The value of $args will be urlencoded
         * @return string the url
         *
         * Returns a absolute url to the given app and file.
         */
-       public static function linkToAbsolute( $app, $file, $args = array() ) {
-               $urlLinkTo = self::linkTo( $app, $file, $args );
+       public static function linkToAbsolute($app, $file, $args = array()) {
+               $urlLinkTo = self::linkTo($app, $file, $args);
                return self::makeURLAbsolute($urlLinkTo);
        }
 
@@ -108,9 +105,8 @@ class OC_Helper {
         *
         * Returns a absolute url to the given app and file.
         */
-       public static function makeURLAbsolute( $url )
-       {
-               return OC_Request::serverProtocol(). '://'  . OC_Request::serverHost() . $url;
+       public static function makeURLAbsolute($url) {
+               return OC_Request::serverProtocol() . '://' . OC_Request::serverHost() . $url;
        }
 
        /**
@@ -120,8 +116,8 @@ class OC_Helper {
         *
         * Returns a url to the given service.
         */
-       public static function linkToRemoteBase( $service ) {
-               return self::linkTo( '', 'remote.php') . '/' . $service;
+       public static function linkToRemoteBase($service) {
+               return self::linkTo('', 'remote.php') . '/' . $service;
        }
 
        /**
@@ -132,9 +128,9 @@ class OC_Helper {
         *
         * Returns a absolute url to the given service.
         */
-       public static function linkToRemote( $service, $add_slash = true ) {
+       public static function linkToRemote($service, $add_slash = true) {
                return self::makeURLAbsolute(self::linkToRemoteBase($service))
-                       . (($add_slash && $service[strlen($service)-1]!='/')?'/':'');
+               . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : '');
        }
 
        /**
@@ -146,8 +142,8 @@ class OC_Helper {
         * Returns a absolute url to the given service.
         */
        public static function linkToPublic($service, $add_slash = false) {
-               return self::linkToAbsolute( '', 'public.php') . '?service=' . $service
-                       . (($add_slash && $service[strlen($service)-1]!='/')?'/':'');
+               return self::linkToAbsolute('', 'public.php') . '?service=' . $service
+               . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : '');
        }
 
        /**
@@ -158,25 +154,25 @@ class OC_Helper {
         *
         * Returns the path to the image.
         */
-       public static function imagePath( $app, $image ) {
+       public static function imagePath($app, $image) {
                // Read the selected theme from the config file
                $theme = OC_Util::getTheme();
 
                // Check if the app is in the app folder
-               if( file_exists( OC::$SERVERROOT."/themes/$theme/apps/$app/img/$image" )) {
-                       return OC::$WEBROOT."/themes/$theme/apps/$app/img/$image";
-               }elseif( file_exists(OC_App::getAppPath($app)."/img/$image" )) {
-                       return OC_App::getAppWebPath($app)."/img/$image";
-               }elseif( !empty( $app ) and file_exists( OC::$SERVERROOT."/themes/$theme/$app/img/$image" )) {
-                       return OC::$WEBROOT."/themes/$theme/$app/img/$image";
-               }elseif( !empty( $app ) and file_exists( OC::$SERVERROOT."/$app/img/$image" )) {
-                       return OC::$WEBROOT."/$app/img/$image";
-               }elseif( file_exists( OC::$SERVERROOT."/themes/$theme/core/img/$image" )) {
-                       return OC::$WEBROOT."/themes/$theme/core/img/$image";
-               }elseif( file_exists( OC::$SERVERROOT."/core/img/$image" )) {
-                       return OC::$WEBROOT."/core/img/$image";
-               }else{
-                       throw new RuntimeException('image not found: image:'.$image.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
+               if (file_exists(OC::$SERVERROOT . "/themes/$theme/apps/$app/img/$image")) {
+                       return OC::$WEBROOT . "/themes/$theme/apps/$app/img/$image";
+               } elseif (file_exists(OC_App::getAppPath($app) . "/img/$image")) {
+                       return OC_App::getAppWebPath($app) . "/img/$image";
+               } elseif (!empty($app) and file_exists(OC::$SERVERROOT . "/themes/$theme/$app/img/$image")) {
+                       return OC::$WEBROOT . "/themes/$theme/$app/img/$image";
+               } elseif (!empty($app) and file_exists(OC::$SERVERROOT . "/$app/img/$image")) {
+                       return OC::$WEBROOT . "/$app/img/$image";
+               } elseif (file_exists(OC::$SERVERROOT . "/themes/$theme/core/img/$image")) {
+                       return OC::$WEBROOT . "/themes/$theme/core/img/$image";
+               } elseif (file_exists(OC::$SERVERROOT . "/core/img/$image")) {
+                       return OC::$WEBROOT . "/core/img/$image";
+               } else {
+                       throw new RuntimeException('image not found: image:' . $image . ' webroot:' . OC::$WEBROOT . ' serverroot:' . OC::$SERVERROOT);
                }
        }
 
@@ -197,28 +193,28 @@ class OC_Helper {
                }
                // Replace slash and backslash with a minus
                $icon = str_replace('/', '-', $mimetype);
-               $icon = str_replace( '\\', '-', $icon);
+               $icon = str_replace('\\', '-', $icon);
 
                // Is it a dir?
                if ($mimetype === 'dir') {
-                       self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/folder.png';
-                       return OC::$WEBROOT.'/core/img/filetypes/folder.png';
+                       self::$mimetypeIcons[$mimetype] = OC::$WEBROOT . '/core/img/filetypes/folder.png';
+                       return OC::$WEBROOT . '/core/img/filetypes/folder.png';
                }
 
                // Icon exists?
-               if (file_exists(OC::$SERVERROOT.'/core/img/filetypes/'.$icon.'.png')) {
-                       self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/'.$icon.'.png';
-                       return OC::$WEBROOT.'/core/img/filetypes/'.$icon.'.png';
+               if (file_exists(OC::$SERVERROOT . '/core/img/filetypes/' . $icon . '.png')) {
+                       self::$mimetypeIcons[$mimetype] = OC::$WEBROOT . '/core/img/filetypes/' . $icon . '.png';
+                       return OC::$WEBROOT . '/core/img/filetypes/' . $icon . '.png';
                }
 
                // Try only the first part of the filetype
                $mimePart = substr($icon, 0, strpos($icon, '-'));
-               if (file_exists(OC::$SERVERROOT.'/core/img/filetypes/'.$mimePart.'.png')) {
-                       self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/'.$mimePart.'.png';
-                       return OC::$WEBROOT.'/core/img/filetypes/'.$mimePart.'.png';
+               if (file_exists(OC::$SERVERROOT . '/core/img/filetypes/' . $mimePart . '.png')) {
+                       self::$mimetypeIcons[$mimetype] = OC::$WEBROOT . '/core/img/filetypes/' . $mimePart . '.png';
+                       return OC::$WEBROOT . '/core/img/filetypes/' . $mimePart . '.png';
                } else {
-                       self::$mimetypeIcons[$mimetype] = OC::$WEBROOT.'/core/img/filetypes/file.png';
-                       return OC::$WEBROOT.'/core/img/filetypes/file.png';
+                       self::$mimetypeIcons[$mimetype] = OC::$WEBROOT . '/core/img/filetypes/file.png';
+                       return OC::$WEBROOT . '/core/img/filetypes/file.png';
                }
        }
 
@@ -229,25 +225,25 @@ class OC_Helper {
         *
         * Makes 2048 to 2 kB.
         */
-       public static function humanFileSize( $bytes ) {
-               if( $bytes < 0 ) {
+       public static function humanFileSize($bytes) {
+               if ($bytes < 0) {
                        $l = OC_L10N::get('lib');
                        return $l->t("couldn't be determined");
                }
-               if( $bytes < 1024 ) {
+               if ($bytes < 1024) {
                        return "$bytes B";
                }
-               $bytes = round( $bytes / 1024, 1 );
-               if( $bytes < 1024 ) {
+               $bytes = round($bytes / 1024, 1);
+               if ($bytes < 1024) {
                        return "$bytes kB";
                }
-               $bytes = round( $bytes / 1024, 1 );
-               if( $bytes < 1024 ) {
+               $bytes = round($bytes / 1024, 1);
+               if ($bytes < 1024) {
                        return "$bytes MB";
                }
 
                // Wow, heavy duty for owncloud
-               $bytes = round( $bytes / 1024, 1 );
+               $bytes = round($bytes / 1024, 1);
                return "$bytes GB";
        }
 
@@ -260,21 +256,21 @@ class OC_Helper {
         *
         * Inspired by: http://www.php.net/manual/en/function.filesize.php#92418
         */
-       public static function computerFileSize( $str ) {
-               $str=strtolower($str);
+       public static function computerFileSize($str) {
+               $str = strtolower($str);
 
                $bytes_array = array(
                        'b' => 1,
                        'k' => 1024,
                        'kb' => 1024,
                        'mb' => 1024 * 1024,
-                       'm'  => 1024 * 1024,
+                       'm' => 1024 * 1024,
                        'gb' => 1024 * 1024 * 1024,
-                       'g'  => 1024 * 1024 * 1024,
+                       'g' => 1024 * 1024 * 1024,
                        'tb' => 1024 * 1024 * 1024 * 1024,
-                       't'  => 1024 * 1024 * 1024 * 1024,
+                       't' => 1024 * 1024 * 1024 * 1024,
                        'pb' => 1024 * 1024 * 1024 * 1024 * 1024,
-                       'p'  => 1024 * 1024 * 1024 * 1024 * 1024,
+                       'p' => 1024 * 1024 * 1024 * 1024 * 1024,
                );
 
                $bytes = floatval($str);
@@ -299,18 +295,17 @@ class OC_Helper {
                        return chmod($path, $filemode);
                $dh = opendir($path);
                while (($file = readdir($dh)) !== false) {
-                       if($file != '.' && $file != '..') {
-                               $fullpath = $path.'/'.$file;
-                               if(is_link($fullpath))
+                       if ($file != '.' && $file != '..') {
+                               $fullpath = $path . '/' . $file;
+                               if (is_link($fullpath))
                                        return false;
-                               elseif(!is_dir($fullpath) && !@chmod($fullpath, $filemode))
-                                               return false;
-                               elseif(!self::chmodr($fullpath, $filemode))
+                               elseif (!is_dir($fullpath) && !@chmod($fullpath, $filemode))
+                                       return false; elseif (!self::chmodr($fullpath, $filemode))
                                        return false;
                        }
                }
                closedir($dh);
-               if(@chmod($path, $filemode))
+               if (@chmod($path, $filemode))
                        return true;
                else
                        return false;
@@ -323,8 +318,8 @@ class OC_Helper {
         *
         */
        static function copyr($src, $dest) {
-               if(is_dir($src)) {
-                       if(!is_dir($dest)) {
+               if (is_dir($src)) {
+                       if (!is_dir($dest)) {
                                mkdir($dest);
                        }
                        $files = scandir($src);
@@ -333,7 +328,7 @@ class OC_Helper {
                                        self::copyr("$src/$file", "$dest/$file");
                                }
                        }
-               }elseif(file_exists($src) && !\OC\Files\Filesystem::isFileBlacklisted($src)) {
+               } elseif (file_exists($src) && !\OC\Files\Filesystem::isFileBlacklisted($src)) {
                        copy($src, $dest);
                }
        }
@@ -344,105 +339,61 @@ class OC_Helper {
         * @return bool
         */
        static function rmdirr($dir) {
-               if(is_dir($dir)) {
-                       $files=scandir($dir);
-                       foreach($files as $file) {
+               if (is_dir($dir)) {
+                       $files = scandir($dir);
+                       foreach ($files as $file) {
                                if ($file != "." && $file != "..") {
                                        self::rmdirr("$dir/$file");
                                }
                        }
                        rmdir($dir);
-               }elseif(file_exists($dir)) {
+               } elseif (file_exists($dir)) {
                        unlink($dir);
                }
-               if(file_exists($dir)) {
+               if (file_exists($dir)) {
                        return false;
-               }else{
+               } else {
                        return true;
                }
        }
 
+       static public function getMimetypeDetector() {
+               if (!self::$mimetypeDetector) {
+                       self::$mimetypeDetector = new \OC\Files\Type\Detection();
+                       self::$mimetypeDetector->registerTypeArray(include 'mimetypes.list.php');
+               }
+               return self::$mimetypeDetector;
+       }
+
        /**
         * Try to guess the mimetype based on filename
         *
         * @param string $path
         * @return string
         */
-       static public function getFileNameMimeType($path){
-               if(strpos($path, '.')) {
-                       //try to guess the type by the file extension
-                       if(!self::$mimetypes || self::$mimetypes != include 'mimetypes.list.php') {
-                               self::$mimetypes=include 'mimetypes.list.php';
-                       }
-                       $extension=strtolower(strrchr(basename($path), "."));
-                       $extension=substr($extension, 1);//remove leading .
-                       return (isset(self::$mimetypes[$extension]))?self::$mimetypes[$extension]:'application/octet-stream';
-               }else{
-                       return 'application/octet-stream';
-               }
+       static public function getFileNameMimeType($path) {
+               return self::getMimetypeDetector()->detectPath($path);
        }
 
        /**
         * get the mimetype form a local file
+        *
         * @param string $path
         * @return string
         * does NOT work for ownClouds filesystem, use OC_FileSystem::getMimeType instead
         */
        static function getMimeType($path) {
-               $isWrapped=(strpos($path, '://')!==false) and (substr($path, 0, 7)=='file://');
-
-               if (@is_dir($path)) {
-                       // directories are easy
-                       return "httpd/unix-directory";
-               }
-
-               $mimeType = self::getFileNameMimeType($path);
-
-               if($mimeType=='application/octet-stream' and function_exists('finfo_open')
-                       and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)) {
-                       $info = @strtolower(finfo_file($finfo, $path));
-                       if($info) {
-                               $mimeType=substr($info, 0, strpos($info, ';'));
-                       }
-                       finfo_close($finfo);
-               }
-               if (!$isWrapped and $mimeType=='application/octet-stream' && function_exists("mime_content_type")) {
-                       // use mime magic extension if available
-                       $mimeType = mime_content_type($path);
-               }
-               if (!$isWrapped and $mimeType=='application/octet-stream' && OC_Helper::canExecute("file")) {
-                       // it looks like we have a 'file' command,
-                       // lets see if it does have mime support
-                       $path=escapeshellarg($path);
-                       $fp = popen("file -b --mime-type $path 2>/dev/null", "r");
-                       $reply = fgets($fp);
-                       pclose($fp);
-
-                       //trim the newline
-                       $mimeType = trim($reply);
-
-               }
-               return $mimeType;
+               return self::getMimetypeDetector()->detect($path);
        }
 
        /**
         * get the mimetype form a data string
+        *
         * @param string $data
         * @return string
         */
        static function getStringMimeType($data) {
-               if(function_exists('finfo_open') and function_exists('finfo_file')) {
-                       $finfo=finfo_open(FILEINFO_MIME);
-                       return finfo_buffer($finfo, $data);
-               }else{
-                       $tmpFile=OC_Helper::tmpFile();
-                       $fh=fopen($tmpFile, 'wb');
-                       fwrite($fh, $data, 8024);
-                       fclose($fh);
-                       $mime=self::getMimeType($tmpFile);
-                       unset($tmpFile);
-                       return $mime;
-               }
+               return self::getMimetypeDetector()->detectString($data);
        }
 
        /**
@@ -454,9 +405,9 @@ class OC_Helper {
         */
 
        //FIXME: should also check for value validation (i.e. the email is an email).
-       public static function init_var($s, $d="") {
+       public static function init_var($s, $d = "") {
                $r = $d;
-               if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) {
+               if (isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) {
                        $r = OC_Util::sanitizeHTML($_REQUEST[$s]);
                }
 
@@ -466,12 +417,13 @@ class OC_Helper {
        /**
         * returns "checked"-attribute if request contains selected radio element
         * OR if radio element is the default one -- maybe?
+        *
         * @param string $s Name of radio-button element name
         * @param string $v Value of current radio-button element
         * @param string $d Value of default radio-button element
         */
        public static function init_radio($s, $v, $d) {
-               if((isset($_REQUEST[$s]) && $_REQUEST[$s]==$v) || (!isset($_REQUEST[$s]) && $v == $d))
+               if ((isset($_REQUEST[$s]) && $_REQUEST[$s] == $v) || (!isset($_REQUEST[$s]) && $v == $d))
                        print "checked=\"checked\" ";
        }
 
@@ -503,17 +455,17 @@ class OC_Helper {
                $dirs = explode(PATH_SEPARATOR, $path);
                // WARNING : We have to check if open_basedir is enabled :
                $obd = ini_get('open_basedir');
-               if($obd != "none") {
+               if ($obd != "none") {
                        $obd_values = explode(PATH_SEPARATOR, $obd);
-                       if(count($obd_values) > 0 and $obd_values[0]) {
+                       if (count($obd_values) > 0 and $obd_values[0]) {
                                // open_basedir is in effect !
                                // We need to check if the program is in one of these dirs :
                                $dirs = $obd_values;
                        }
                }
-               foreach($dirs as $dir) {
-                       foreach($exts as $ext) {
-                               if($check_fn("$dir/$name".$ext))
+               foreach ($dirs as $dir) {
+                       foreach ($exts as $ext) {
+                               if ($check_fn("$dir/$name" . $ext))
                                        return true;
                        }
                }
@@ -522,18 +474,19 @@ class OC_Helper {
 
        /**
         * copy the contents of one stream to another
+        *
         * @param resource $source
         * @param resource $target
         * @return int the number of bytes copied
         */
        public static function streamCopy($source, $target) {
-               if(!$source or !$target) {
+               if (!$source or !$target) {
                        return false;
                }
                $result = true;
                $count = 0;
-               while(!feof($source)) {
-                       if ( ( $c = fwrite($target, fread($source, 8192)) ) === false) {
+               while (!feof($source)) {
+                       if (($c = fwrite($target, fread($source, 8192))) === false) {
                                $result = false;
                        } else {
                                $count += $c;
@@ -544,37 +497,39 @@ class OC_Helper {
 
        /**
         * create a temporary file with an unique filename
+        *
         * @param string $postfix
         * @return string
         *
         * temporary files are automatically cleaned up after the script is finished
         */
-       public static function tmpFile($postfix='') {
-               $file=get_temp_dir().'/'.md5(time().rand()).$postfix;
-               $fh=fopen($file, 'w');
+       public static function tmpFile($postfix = '') {
+               $file = get_temp_dir() . '/' . md5(time() . rand()) . $postfix;
+               $fh = fopen($file, 'w');
                fclose($fh);
-               self::$tmpFiles[]=$file;
+               self::$tmpFiles[] = $file;
                return $file;
        }
 
        /**
         * move a file to oc-noclean temp dir
+        *
         * @param string $filename
         * @return mixed
         *
         */
-       public static function moveToNoClean($filename='') {
+       public static function moveToNoClean($filename = '') {
                if ($filename == '') {
                        return false;
                }
-               $tmpDirNoClean=get_temp_dir().'/oc-noclean/';
+               $tmpDirNoClean = get_temp_dir() . '/oc-noclean/';
                if (!file_exists($tmpDirNoClean) || !is_dir($tmpDirNoClean)) {
                        if (file_exists($tmpDirNoClean)) {
                                unlink($tmpDirNoClean);
                        }
                        mkdir($tmpDirNoClean);
                }
-               $newname=$tmpDirNoClean.basename($filename);
+               $newname = $tmpDirNoClean . basename($filename);
                if (rename($filename, $newname)) {
                        return $newname;
                } else {
@@ -584,34 +539,35 @@ class OC_Helper {
 
        /**
         * create a temporary folder with an unique filename
+        *
         * @return string
         *
         * temporary files are automatically cleaned up after the script is finished
         */
        public static function tmpFolder() {
-               $path=get_temp_dir().'/'.md5(time().rand());
+               $path = get_temp_dir() . '/' . md5(time() . rand());
                mkdir($path);
-               self::$tmpFiles[]=$path;
-               return $path.'/';
+               self::$tmpFiles[] = $path;
+               return $path . '/';
        }
 
        /**
         * remove all files created by self::tmpFile
         */
        public static function cleanTmp() {
-               $leftoversFile=get_temp_dir().'/oc-not-deleted';
-               if(file_exists($leftoversFile)) {
-                       $leftovers=file($leftoversFile);
-                       foreach($leftovers as $file) {
+               $leftoversFile = get_temp_dir() . '/oc-not-deleted';
+               if (file_exists($leftoversFile)) {
+                       $leftovers = file($leftoversFile);
+                       foreach ($leftovers as $file) {
                                self::rmdirr($file);
                        }
                        unlink($leftoversFile);
                }
 
-               foreach(self::$tmpFiles as $file) {
-                       if(file_exists($file)) {
-                               if(!self::rmdirr($file)) {
-                                       file_put_contents($leftoversFile, $file."\n", FILE_APPEND);
+               foreach (self::$tmpFiles as $file) {
+                       if (file_exists($file)) {
+                               if (!self::rmdirr($file)) {
+                                       file_put_contents($leftoversFile, $file . "\n", FILE_APPEND);
                                }
                        }
                }
@@ -621,34 +577,34 @@ class OC_Helper {
         * remove all files in PHP /oc-noclean temp dir
         */
        public static function cleanTmpNoClean() {
-               $tmpDirNoCleanFile=get_temp_dir().'/oc-noclean/';
-               if(file_exists($tmpDirNoCleanFile)) {
+               $tmpDirNoCleanFile = get_temp_dir() . '/oc-noclean/';
+               if (file_exists($tmpDirNoCleanFile)) {
                        self::rmdirr($tmpDirNoCleanFile);
                }
        }
 
        /**
-       * Adds a suffix to the name in case the file exists
-       *
-       * @param $path
-       * @param $filename
-       * @return string
-       */
+        * Adds a suffix to the name in case the file exists
+        *
+        * @param $path
+        * @param $filename
+        * @return string
+        */
        public static function buildNotExistingFileName($path, $filename) {
                $view = \OC\Files\Filesystem::getView();
                return self::buildNotExistingFileNameForView($path, $filename, $view);
        }
 
        /**
-       * Adds a suffix to the name in case the file exists
-       *
-       * @param $path
-       * @param $filename
-       * @return string
-       */
+        * Adds a suffix to the name in case the file exists
+        *
+        * @param $path
+        * @param $filename
+        * @return string
+        */
        public static function buildNotExistingFileNameForView($path, $filename, \OC\Files\View $view) {
-               if($path==='/') {
-                       $path='';
+               if ($path === '/') {
+                       $path = '';
                }
                if ($pos = strrpos($filename, '.')) {
                        $name = substr($filename, 0, $pos);
@@ -660,10 +616,10 @@ class OC_Helper {
 
                $newpath = $path . '/' . $filename;
                if ($view->file_exists($newpath)) {
-                       if(preg_match_all('/\((\d+)\)/', $name, $matches, PREG_OFFSET_CAPTURE)) {
+                       if (preg_match_all('/\((\d+)\)/', $name, $matches, PREG_OFFSET_CAPTURE)) {
                                //Replace the last "(number)" with "(number+1)" 
-                               $last_match = count($matches[0])-1;
-                               $counter = $matches[1][$last_match][0]+1;
+                               $last_match = count($matches[0]) - 1;
+                               $counter = $matches[1][$last_match][0] + 1;
                                $offset = $matches[0][$last_match][1];
                                $match_length = strlen($matches[0][$last_match][0]);
                        } else {
@@ -671,9 +627,9 @@ class OC_Helper {
                                $offset = false;
                        }
                        do {
-                               if($offset) {
+                               if ($offset) {
                                        //Replace the last "(number)" with "(number+1)" 
-                                       $newname = substr_replace($name, '('.$counter.')', $offset, $match_length);
+                                       $newname = substr_replace($name, '(' . $counter . ')', $offset, $match_length);
                                } else {
                                        $newname = $name . ' (' . $counter . ')';
                                }
@@ -700,17 +656,17 @@ class OC_Helper {
        }
 
        /**
-       * @brief 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
-       *
-       * Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
-       * based on http://www.php.net/manual/en/function.array-change-key-case.php#107715
-       *
-       */
+        * @brief 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
+        *
+        * Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
+        * based on http://www.php.net/manual/en/function.array-change-key-case.php#107715
+        *
+        */
        public static function mb_array_change_key_case($input, $case = MB_CASE_LOWER, $encoding = 'UTF-8') {
                $case = ($case != MB_CASE_UPPER) ? MB_CASE_LOWER : MB_CASE_UPPER;
                $ret = array();
@@ -736,26 +692,26 @@ class OC_Helper {
                $length = intval($length);
                $string = mb_substr($string, 0, $start, $encoding) .
                        $replacement .
-                       mb_substr($string, $start+$length, mb_strlen($string, 'UTF-8')-$start, $encoding);
+                       mb_substr($string, $start + $length, mb_strlen($string, 'UTF-8') - $start, $encoding);
 
                return $string;
        }
 
        /**
-       * @brief Replace all occurrences of the search string with the replacement string
-       *
-       * @param string $search The value being searched for, otherwise known as the needle.
-       * @param string $replace The replacement
-       * @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
-       *
-       */
+        * @brief Replace all occurrences of the search string with the replacement string
+        *
+        * @param string $search The value being searched for, otherwise known as the needle.
+        * @param string $replace The replacement
+        * @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
+        *
+        */
        public static function mb_str_replace($search, $replace, $subject, $encoding = 'UTF-8', &$count = null) {
                $offset = -1;
                $length = mb_strlen($search, $encoding);
-               while(($i = mb_strrpos($subject, $search, $offset, $encoding)) !== false ) {
+               while (($i = mb_strrpos($subject, $search, $offset, $encoding)) !== false) {
                        $subject = OC_Helper::mb_substr_replace($subject, $replace, $i, $length);
                        $offset = $i - mb_strlen($subject, $encoding);
                        $count++;
@@ -764,21 +720,21 @@ class OC_Helper {
        }
 
        /**
-       * @brief performs a search in a nested array
-       * @param array $haystack the array to be searched
-       * @param string $needle the search string
-       * @param string $index optional, only search this key name
-       * @return mixed the key of the matching field, otherwise false
-       *
-       * performs a search in a nested array
-       *
-       * taken from http://www.php.net/manual/en/function.array-search.php#97645
-       */
+        * @brief performs a search in a nested array
+        * @param array $haystack the array to be searched
+        * @param string $needle the search string
+        * @param string $index optional, only search this key name
+        * @return mixed the key of the matching field, otherwise false
+        *
+        * performs a search in a nested array
+        *
+        * taken from http://www.php.net/manual/en/function.array-search.php#97645
+        */
        public static function recursiveArraySearch($haystack, $needle, $index = null) {
                $aIt = new RecursiveArrayIterator($haystack);
                $it = new RecursiveIteratorIterator($aIt);
 
-               while($it->valid()) {
+               while ($it->valid()) {
                        if (((isset($index) AND ($it->key() == $index)) OR (!isset($index))) AND ($it->current() == $needle)) {
                                return $aIt->key();
                        }
@@ -792,6 +748,7 @@ class OC_Helper {
        /**
         * Shortens str to maxlen by replacing characters in the middle with '...', eg.
         * ellipsis('a very long string with lots of useless info to make a better example', 14) becomes 'a very ...example'
+        *
         * @param string $str the string
         * @param string $maxlen the maximum length of the result
         * @return string with at most maxlen characters
@@ -822,7 +779,7 @@ class OC_Helper {
                        $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
                }
 
-               if($freeSpace !== \OC\Files\FREE_SPACE_UNKNOWN){
+               if ($freeSpace !== \OC\Files\FREE_SPACE_UNKNOWN) {
                        $freeSpace = max($freeSpace, 0);
 
                        return min($maxUploadFilesize, $freeSpace);
@@ -833,6 +790,7 @@ class OC_Helper {
 
        /**
         * Checks if a function is available
+        *
         * @param string $function_name
         * @return bool
         */
@@ -861,7 +819,7 @@ class OC_Helper {
                        $used = 0;
                }
                $free = \OC\Files\Filesystem::free_space();
-               if ($free >= 0){
+               if ($free >= 0) {
                        $total = $free + $used;
                } else {
                        $total = $free; //either unknown or unlimited
@@ -869,7 +827,7 @@ class OC_Helper {
                if ($total == 0) {
                        $total = 1; // prevent division by zero
                }
-               if ($total >= 0){
+               if ($total >= 0) {
                        $relative = round(($used / $total) * 10000) / 100;
                } else {
                        $relative = 0;