]> source.dussan.org Git - nextcloud-server.git/commitdiff
Added more error checking and debug on missing image support.
authorThomas Tanghus <thomas@tanghus.net>
Mon, 2 Jan 2012 12:40:23 +0000 (13:40 +0100)
committerThomas Tanghus <thomas@tanghus.net>
Mon, 2 Jan 2012 12:40:23 +0000 (13:40 +0100)
lib/image.php

index 57a0caa140b90710d3d856f40d44f8002855e46d..b797f331f452277bf475ffd980e16aa3034e6c72 100644 (file)
@@ -33,6 +33,14 @@ if ( ! function_exists( 'exif_imagetype' ) ) {
 }
 */
 
+function ellipsis($str, $maxlen) {
+       if (strlen($str) > $maxlen) {
+               $characters = floor($maxlen / 2);
+               return substr($str, 0, $characters) . '...' . substr($str, -1 * $characters);
+       }
+       return $str;
+}
+
 /**
  * Class for image manipulation
  * Ideas: imagerotate, chunk_split(base64_encode())
@@ -51,7 +59,8 @@ class OC_Image {
        */
        function __construct($imageref = null) {
                //OC_Log::write('core','OC_Image::__construct, start', OC_Log::DEBUG);
-               if(!function_exists('imagecreatefromjpeg')) { // FIXME: Find a better way to check for GD
+               if(!extension_loaded('gd') || !function_exists('gd_info')) {
+               //if(!function_exists('imagecreatefromjpeg')) {
                        OC_Log::write('core','OC_Image::__construct, GD module not installed', OC_Log::ERROR);
                        return false;
                }
@@ -114,6 +123,7 @@ class OC_Image {
        * @brief Saves the image.
        * @returns bool
        */
+
        public function save($filepath=null) {
                if($filepath === null && $this->filepath === null) {
                        OC_Log::write('core','OC_Image::save. save() called with no path.', OC_Log::ERROR);
@@ -132,9 +142,11 @@ class OC_Image {
                if($really === false) {
                        $filepath = null; // Just being cautious ;-)
                } else {
-                       // TODO: Check for writability etc.
-                       if(!is_writable($filepath)) {
-                               OC_Log::write('core','OC_Image::save. \''.$filepath.'\' is not writable.', OC_Log::ERROR);
+                       if(!is_writable(dirname($filepath))) {
+                               OC_Log::write('core','OC_Image::save. Directory \''.dirname($filepath).'\' is not writable.', OC_Log::ERROR);
+                               return false;
+                       } elseif(is_writable(dirname($filepath)) && !is_writable($filepath)) {
+                               OC_Log::write('core','OC_Image::save. File \''.$filepath.'\' is not writable.', OC_Log::ERROR);
                                return false;
                        }
                }
@@ -216,35 +228,46 @@ class OC_Image {
        */
        public function loadFromFile($imagepath=false) {
                if(!is_file($imagepath) || !file_exists($imagepath) || !is_readable($imagepath)) {
-                       OC_Log::write('core','OC_Image::loadFromFile, couldn\'t load', OC_Log::DEBUG);
+                       // Debug output disabled because this method is tried before loadFromBase64?
+                       OC_Log::write('core','OC_Image::loadFromFile, couldn\'t load: '.ellipsis($imagepath, 50), OC_Log::DEBUG);
                        return false;
                }
                $itype = exif_imagetype($imagepath);
-               switch($itype) { // TODO: Log if image type is not supported.
+               switch($itype) {
                        case IMAGETYPE_GIF:
                                if (imagetypes() & IMG_GIF) {
                                        self::$resource = imagecreatefromgif($imagepath);
+                               } else {
+                                       OC_Log::write('core','OC_Image::loadFromFile, GIF images not supported: '.$imagepath, OC_Log::DEBUG);
                                }
                                break;
                        case IMAGETYPE_JPEG:
                                if (imagetypes() & IMG_JPG) {
                                        self::$resource = imagecreatefromjpeg($imagepath);
+                               } else {
+                                       OC_Log::write('core','OC_Image::loadFromFile, JPG images not supported: '.$imagepath, OC_Log::DEBUG);
                                }
                                break;
                        case IMAGETYPE_PNG:
                                if (imagetypes() & IMG_PNG) {
                                        self::$resource = imagecreatefrompng($imagepath);
+                               } else {
+                                       OC_Log::write('core','OC_Image::loadFromFile, PNG images not supported: '.$imagepath, OC_Log::DEBUG);
                                }
                                break;
                        case IMAGETYPE_XBM:
                                if (imagetypes() & IMG_XPM) {
                                        self::$resource = imagecreatefromxbm($imagepath);
+                               } else {
+                                       OC_Log::write('core','OC_Image::loadFromFile, XBM/XPM images not supported: '.$imagepath, OC_Log::DEBUG);
                                }
                                break;
                        case IMAGETYPE_WBMP:
                        case IMAGETYPE_BMP:
                                if (imagetypes() & IMG_WBMP) {
                                        self::$resource = imagecreatefromwbmp($imagepath);
+                               } else {
+                                       OC_Log::write('core','OC_Image::loadFromFile, (W)BMP images not supported: '.$imagepath, OC_Log::DEBUG);
                                }
                                break;
                        /*